From 486425ed00acec134f8799bdde64bfd093c5fb55 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Thu, 26 Dec 2024 21:19:14 +0100 Subject: IMPL: A lot of new changes, see details. Signed-off-by: Amlal El Mahrouss --- dev/Boot/BootKit/BitManip.h | 20 ++ dev/Boot/BootKit/BootKit.h | 392 +++++++++++++++++++++ dev/Boot/BootKit/Device.h | 37 ++ dev/Boot/BootKit/EPM.h | 9 + dev/Boot/BootKit/HW/ATA.h | 58 +++ dev/Boot/BootKit/HW/SATA.h | 46 +++ dev/Boot/BootKit/Platform.h | 32 ++ dev/Boot/BootKit/Protocol.h | 10 + dev/Boot/BootKit/Rsrc/zka_disk.rsrc | 116 ++++++ dev/Boot/BootKit/Rsrc/zka_has_disk.rsrc | 116 ++++++ dev/Boot/BootKit/Rsrc/zka_no_disk.rsrc | 116 ++++++ dev/Boot/BootKit/Support.h | 167 +++++++++ dev/Boot/BootKit/Thread.h | 44 +++ dev/Boot/DownloadOVMF.ps1 | 4 + dev/Boot/Modules/.keep | 0 dev/Boot/Modules/NetBoot/.hgkeep | 0 dev/Boot/Modules/NetBoot/Boot.S | 28 ++ dev/Boot/Modules/NetBoot/Module.cc | 16 + dev/Boot/Modules/NetBoot/NetBoot.h | 26 ++ dev/Boot/Modules/NetBoot/build.json | 24 ++ dev/Boot/Modules/SysChk/.hgkeep | 0 dev/Boot/Modules/SysChk/Boot.S | 20 ++ dev/Boot/Modules/SysChk/Module.cc | 47 +++ dev/Boot/Modules/SysChk/build.json | 24 ++ dev/Boot/ReadMe.md | 20 ++ dev/Boot/amd64-efi.make | 119 +++++++ dev/Boot/arm64-efi.make | 112 ++++++ dev/Boot/src/.gitkeep | 0 dev/Boot/src/BootFileReader.cc | 203 +++++++++++ dev/Boot/src/BootString.cc | 92 +++++ dev/Boot/src/BootSupport.cc | 82 +++++ dev/Boot/src/BootTextWriter.cc | 169 +++++++++ dev/Boot/src/BootThread.cc | 213 +++++++++++ dev/Boot/src/BootloaderRsrc.rsrc | 25 ++ dev/Boot/src/HEL/64X000/.gitkeep | 0 dev/Boot/src/HEL/64X000/Boot64x0.S | 35 ++ dev/Boot/src/HEL/AMD64/.gitkeep | 0 dev/Boot/src/HEL/AMD64/BootAPI.S | 60 ++++ dev/Boot/src/HEL/AMD64/BootATA.cc | 278 +++++++++++++++ dev/Boot/src/HEL/AMD64/BootMain.cc | 318 +++++++++++++++++ dev/Boot/src/HEL/AMD64/BootPlatform.cc | 106 ++++++ dev/Boot/src/HEL/AMD64/BootSATA.cc | 20 ++ dev/Boot/src/HEL/ARM64/.gitkeep | 0 dev/Boot/src/HEL/ARM64/BootAPI.S | 12 + dev/Boot/src/HEL/ARM64/BootMain.cc | 76 ++++ dev/Boot/src/HEL/ARM64/BootPlatform.cc | 37 ++ dev/Boot/src/HEL/POWER/.gitkeep | 0 dev/Boot/src/HEL/POWER/CoreBootStartup.S | 34 ++ dev/Boot/src/New+Delete.cc | 60 ++++ dev/Boot/src/Root/EFI/STARTUP.NSH | 2 + dev/Boot/src/Root/zka/fntkrnl.ttf | Bin 0 -> 42752 bytes dev/BootLoader/BootKit/BitManip.h | 20 -- dev/BootLoader/BootKit/BootKit.h | 392 --------------------- dev/BootLoader/BootKit/Device.h | 37 -- dev/BootLoader/BootKit/EPM.h | 9 - dev/BootLoader/BootKit/HW/ATA.h | 58 --- dev/BootLoader/BootKit/HW/SATA.h | 46 --- dev/BootLoader/BootKit/Platform.h | 32 -- dev/BootLoader/BootKit/Protocol.h | 10 - dev/BootLoader/BootKit/Rsrc/zka_disk.rsrc | 116 ------ dev/BootLoader/BootKit/Rsrc/zka_has_disk.rsrc | 116 ------ dev/BootLoader/BootKit/Rsrc/zka_no_disk.rsrc | 116 ------ dev/BootLoader/BootKit/Support.h | 167 --------- dev/BootLoader/BootKit/Thread.h | 44 --- dev/BootLoader/DownloadOVMF.ps1 | 4 - dev/BootLoader/Modules/.keep | 0 dev/BootLoader/Modules/NetBoot/.hgkeep | 0 dev/BootLoader/Modules/NetBoot/Boot.S | 28 -- dev/BootLoader/Modules/NetBoot/Module.cc | 16 - dev/BootLoader/Modules/NetBoot/NetBoot.h | 26 -- dev/BootLoader/Modules/NetBoot/build.json | 24 -- dev/BootLoader/Modules/SysChk/.hgkeep | 0 dev/BootLoader/Modules/SysChk/Boot.S | 20 -- dev/BootLoader/Modules/SysChk/Module.cc | 47 --- dev/BootLoader/Modules/SysChk/build.json | 24 -- dev/BootLoader/ReadMe.md | 20 -- dev/BootLoader/amd64-efi.make | 119 ------- dev/BootLoader/arm64-efi.make | 112 ------ dev/BootLoader/src/.gitkeep | 0 dev/BootLoader/src/BootFileReader.cc | 203 ----------- dev/BootLoader/src/BootString.cc | 92 ----- dev/BootLoader/src/BootSupport.cc | 82 ----- dev/BootLoader/src/BootTextWriter.cc | 169 --------- dev/BootLoader/src/BootThread.cc | 213 ----------- dev/BootLoader/src/BootloaderRsrc.rsrc | 25 -- dev/BootLoader/src/HEL/64X000/.gitkeep | 0 dev/BootLoader/src/HEL/64X000/Boot64x0.S | 35 -- dev/BootLoader/src/HEL/AMD64/.gitkeep | 0 dev/BootLoader/src/HEL/AMD64/BootAPI.S | 60 ---- dev/BootLoader/src/HEL/AMD64/BootATA.cc | 278 --------------- dev/BootLoader/src/HEL/AMD64/BootMain.cc | 318 ----------------- dev/BootLoader/src/HEL/AMD64/BootPlatform.cc | 106 ------ dev/BootLoader/src/HEL/AMD64/BootSATA.cc | 20 -- dev/BootLoader/src/HEL/ARM64/.gitkeep | 0 dev/BootLoader/src/HEL/ARM64/BootAPI.S | 12 - dev/BootLoader/src/HEL/ARM64/BootMain.cc | 76 ---- dev/BootLoader/src/HEL/ARM64/BootPlatform.cc | 37 -- dev/BootLoader/src/HEL/POWER/.gitkeep | 0 dev/BootLoader/src/HEL/POWER/CoreBootStartup.S | 34 -- dev/BootLoader/src/New+Delete.cc | 60 ---- dev/BootLoader/src/Root/EFI/STARTUP.NSH | 2 - dev/BootLoader/src/Root/zka/fntkrnl.ttf | Bin 42752 -> 0 bytes dev/CompressKit/API.h | 18 - dev/CompressKit/CKCompress.s | 7 - dev/CompressKit/CKDecompress.s | 7 - dev/HintKit/CompilerHint.h | 25 -- dev/Hints/CompilerHint.h | 25 ++ dev/Kernel/FSKit/NeFS.h | 4 +- dev/Kernel/FirmwareKit/EFI/API.h | 2 +- dev/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cc | 2 +- dev/Kernel/HALKit/AMD64/HalAPICController.cc | 2 +- dev/Kernel/HALKit/AMD64/HalCoreScheduler.cc | 4 +- dev/Kernel/HALKit/AMD64/HalKernelMain.cc | 4 +- dev/Kernel/HALKit/AMD64/HalTimerAMD64.cc | 2 +- dev/Kernel/HALKit/AMD64/MBCI/HalMBCI.cc | 2 +- dev/Kernel/HALKit/AMD64/Storage/AHCI-DMA.cc | 4 +- dev/Kernel/HALKit/AMD64/Storage/ATA-DMA.cc | 2 +- dev/Kernel/HALKit/AMD64/Storage/ATA-PIO.cc | 2 +- dev/Kernel/HALKit/ARM64/APM/APM.cc | 2 +- dev/Kernel/HALKit/ARM64/HalACPIFactoryInterface.cc | 4 +- dev/Kernel/HALKit/ARM64/HalCoreMPScheduler.cc | 2 +- dev/Kernel/HALKit/ARM64/HalKernelMain.cc | 4 +- dev/Kernel/KernelKit/FileMgr.h | 2 +- dev/Kernel/KernelKit/Heap.h | 2 +- dev/Kernel/KernelKit/LoaderInterface.h | 2 +- dev/Kernel/NetworkKit/IPC.h | 3 +- dev/Kernel/NewKit/SwapMgr.h | 14 +- dev/Kernel/StorageKit/SCSI.h | 2 +- dev/Kernel/src/ACPIFactoryInterface.cc | 2 +- dev/Kernel/src/DriveMgr.cc | 6 +- dev/Kernel/src/FS/HPFS.cc | 6 +- dev/Kernel/src/FS/NeFS.cc | 6 +- dev/Kernel/src/KernelPanic.cc | 4 +- dev/LibSCI/CompilerHint.h | 25 ++ dev/LibSCI/GPU.h | 50 +++ dev/LibSCI/LPC.h | 54 +++ dev/LibSCI/Macros.h | 56 +++ dev/LibSCI/SCI.h | 264 ++++++++++++++ dev/LibSCI/SysCalls.h | 20 ++ dev/LibSCI/doc/SCIKit.drawio | 28 ++ dev/LibSCI/sci.json | 20 ++ dev/LibSCI/src/GPU.cc | 10 + dev/LibSCI/src/LPC.cc | 10 + dev/LibSCI/src/LibSCI+IO.asm | 50 +++ dev/LibSCI/src/Makefile | 16 + dev/LibSCI/src/SCI.cc | 45 +++ dev/Mod/ACPI/ACPI.h | 88 +++++ dev/Mod/ACPI/ACPIFactoryInterface.h | 60 ++++ dev/Mod/AHCI/.gitkeep | 0 dev/Mod/AHCI/AHCI.h | 364 +++++++++++++++++++ dev/Mod/APM/APM.h | 37 ++ dev/Mod/ATA/ATA.h | 156 ++++++++ dev/Mod/Flash/Flash.h | 21 ++ dev/Mod/GPRS/.keepme | 0 dev/Mod/GfxMgr/AccessibilityMgr.h | 41 +++ dev/Mod/GfxMgr/FBMgr.h | 157 +++++++++ dev/Mod/GfxMgr/MathMgr.h | 29 ++ dev/Mod/GfxMgr/TextMgr.h | 178 ++++++++++ dev/Mod/HPET/.gitkeep | 0 dev/Mod/HPET/Defines.h | 42 +++ dev/Mod/IEEE802/.gitkeep | 0 dev/Mod/LTE/LTE.h | 40 +++ dev/Mod/MBCI/Interface.h | 10 + dev/Mod/MBCI/MBCI.h | 98 ++++++ dev/Mod/NVME/NVME.h | 112 ++++++ dev/Mod/OHCI/.gitkeep | 0 dev/Mod/ReadMe.md | 12 + dev/Mod/SCSI/.gitkeep | 0 dev/Mod/SCSI/SCSI.h | 15 + dev/Mod/WiFi/.gitkeep | 0 dev/Mod/XHCI/.gitkeep | 0 dev/Mod/XHCI/Defines.h | 70 ++++ dev/Modules/ACPI/ACPI.h | 88 ----- dev/Modules/ACPI/ACPIFactoryInterface.h | 60 ---- dev/Modules/AHCI/.gitkeep | 0 dev/Modules/AHCI/AHCI.h | 364 ------------------- dev/Modules/APM/APM.h | 37 -- dev/Modules/ATA/ATA.h | 156 -------- dev/Modules/Flash/Flash.h | 21 -- dev/Modules/GPRS/.keepme | 0 dev/Modules/GfxMgr/AccessibilityMgr.h | 41 --- dev/Modules/GfxMgr/FBMgr.h | 157 --------- dev/Modules/GfxMgr/MathMgr.h | 29 -- dev/Modules/GfxMgr/Rsrc/Controls.rsrc | 61 ---- dev/Modules/GfxMgr/Rsrc/Cursor.rsrc | 64 ---- dev/Modules/GfxMgr/TextMgr.h | 178 ---------- dev/Modules/HPET/.gitkeep | 0 dev/Modules/HPET/Defines.h | 42 --- dev/Modules/IEEE802/.gitkeep | 0 dev/Modules/LTE/LTE.h | 40 --- dev/Modules/MBCI/Interface.h | 10 - dev/Modules/MBCI/MBCI.h | 98 ------ dev/Modules/NVME/NVME.h | 112 ------ dev/Modules/OHCI/.gitkeep | 0 dev/Modules/ReadMe.md | 12 - dev/Modules/SCSI/.gitkeep | 0 dev/Modules/SCSI/SCSI.h | 15 - dev/Modules/WiFi/.gitkeep | 0 dev/Modules/XHCI/.gitkeep | 0 dev/Modules/XHCI/Defines.h | 70 ---- dev/SCIKit/CompilerHint.h | 25 -- dev/SCIKit/GPU.h | 50 --- dev/SCIKit/LPC.h | 54 --- dev/SCIKit/Macros.h | 56 --- dev/SCIKit/SCI.h | 264 -------------- dev/SCIKit/SysCalls.h | 20 -- dev/SCIKit/doc/SCIKit.drawio | 28 -- dev/SCIKit/sci.json | 20 -- dev/SCIKit/src/GPU.cc | 10 - dev/SCIKit/src/LPC.cc | 10 - dev/SCIKit/src/Makefile | 16 - dev/SCIKit/src/SCI+IO.asm | 50 --- dev/SCIKit/src/SCI.cc | 45 --- dev/Usr/.keepme | 0 dev/Usr/External/.gitkeep | 0 dev/Usr/LibCompress/API.h | 18 + dev/Usr/LibCompress/LCCompress.s | 7 + dev/Usr/LibCompress/LCDecompress.s | 7 + dev/Usr/LibGUI/.keepme | 0 dev/Usr/LibSystem/.keepme | 0 220 files changed, 5710 insertions(+), 5826 deletions(-) create mode 100644 dev/Boot/BootKit/BitManip.h create mode 100644 dev/Boot/BootKit/BootKit.h create mode 100644 dev/Boot/BootKit/Device.h create mode 100644 dev/Boot/BootKit/EPM.h create mode 100644 dev/Boot/BootKit/HW/ATA.h create mode 100644 dev/Boot/BootKit/HW/SATA.h create mode 100644 dev/Boot/BootKit/Platform.h create mode 100644 dev/Boot/BootKit/Protocol.h create mode 100644 dev/Boot/BootKit/Rsrc/zka_disk.rsrc create mode 100644 dev/Boot/BootKit/Rsrc/zka_has_disk.rsrc create mode 100644 dev/Boot/BootKit/Rsrc/zka_no_disk.rsrc create mode 100644 dev/Boot/BootKit/Support.h create mode 100644 dev/Boot/BootKit/Thread.h create mode 100644 dev/Boot/DownloadOVMF.ps1 create mode 100644 dev/Boot/Modules/.keep create mode 100644 dev/Boot/Modules/NetBoot/.hgkeep create mode 100644 dev/Boot/Modules/NetBoot/Boot.S create mode 100644 dev/Boot/Modules/NetBoot/Module.cc create mode 100644 dev/Boot/Modules/NetBoot/NetBoot.h create mode 100644 dev/Boot/Modules/NetBoot/build.json create mode 100644 dev/Boot/Modules/SysChk/.hgkeep create mode 100644 dev/Boot/Modules/SysChk/Boot.S create mode 100644 dev/Boot/Modules/SysChk/Module.cc create mode 100644 dev/Boot/Modules/SysChk/build.json create mode 100644 dev/Boot/ReadMe.md create mode 100644 dev/Boot/amd64-efi.make create mode 100644 dev/Boot/arm64-efi.make create mode 100644 dev/Boot/src/.gitkeep create mode 100644 dev/Boot/src/BootFileReader.cc create mode 100644 dev/Boot/src/BootString.cc create mode 100644 dev/Boot/src/BootSupport.cc create mode 100644 dev/Boot/src/BootTextWriter.cc create mode 100644 dev/Boot/src/BootThread.cc create mode 100644 dev/Boot/src/BootloaderRsrc.rsrc create mode 100644 dev/Boot/src/HEL/64X000/.gitkeep create mode 100644 dev/Boot/src/HEL/64X000/Boot64x0.S create mode 100644 dev/Boot/src/HEL/AMD64/.gitkeep create mode 100644 dev/Boot/src/HEL/AMD64/BootAPI.S create mode 100644 dev/Boot/src/HEL/AMD64/BootATA.cc create mode 100644 dev/Boot/src/HEL/AMD64/BootMain.cc create mode 100644 dev/Boot/src/HEL/AMD64/BootPlatform.cc create mode 100644 dev/Boot/src/HEL/AMD64/BootSATA.cc create mode 100644 dev/Boot/src/HEL/ARM64/.gitkeep create mode 100644 dev/Boot/src/HEL/ARM64/BootAPI.S create mode 100644 dev/Boot/src/HEL/ARM64/BootMain.cc create mode 100644 dev/Boot/src/HEL/ARM64/BootPlatform.cc create mode 100644 dev/Boot/src/HEL/POWER/.gitkeep create mode 100644 dev/Boot/src/HEL/POWER/CoreBootStartup.S create mode 100644 dev/Boot/src/New+Delete.cc create mode 100644 dev/Boot/src/Root/EFI/STARTUP.NSH create mode 100644 dev/Boot/src/Root/zka/fntkrnl.ttf delete mode 100644 dev/BootLoader/BootKit/BitManip.h delete mode 100644 dev/BootLoader/BootKit/BootKit.h delete mode 100644 dev/BootLoader/BootKit/Device.h delete mode 100644 dev/BootLoader/BootKit/EPM.h delete mode 100644 dev/BootLoader/BootKit/HW/ATA.h delete mode 100644 dev/BootLoader/BootKit/HW/SATA.h delete mode 100644 dev/BootLoader/BootKit/Platform.h delete mode 100644 dev/BootLoader/BootKit/Protocol.h delete mode 100644 dev/BootLoader/BootKit/Rsrc/zka_disk.rsrc delete mode 100644 dev/BootLoader/BootKit/Rsrc/zka_has_disk.rsrc delete mode 100644 dev/BootLoader/BootKit/Rsrc/zka_no_disk.rsrc delete mode 100644 dev/BootLoader/BootKit/Support.h delete mode 100644 dev/BootLoader/BootKit/Thread.h delete mode 100644 dev/BootLoader/DownloadOVMF.ps1 delete mode 100644 dev/BootLoader/Modules/.keep delete mode 100644 dev/BootLoader/Modules/NetBoot/.hgkeep delete mode 100644 dev/BootLoader/Modules/NetBoot/Boot.S delete mode 100644 dev/BootLoader/Modules/NetBoot/Module.cc delete mode 100644 dev/BootLoader/Modules/NetBoot/NetBoot.h delete mode 100644 dev/BootLoader/Modules/NetBoot/build.json delete mode 100644 dev/BootLoader/Modules/SysChk/.hgkeep delete mode 100644 dev/BootLoader/Modules/SysChk/Boot.S delete mode 100644 dev/BootLoader/Modules/SysChk/Module.cc delete mode 100644 dev/BootLoader/Modules/SysChk/build.json delete mode 100644 dev/BootLoader/ReadMe.md delete mode 100644 dev/BootLoader/amd64-efi.make delete mode 100644 dev/BootLoader/arm64-efi.make delete mode 100644 dev/BootLoader/src/.gitkeep delete mode 100644 dev/BootLoader/src/BootFileReader.cc delete mode 100644 dev/BootLoader/src/BootString.cc delete mode 100644 dev/BootLoader/src/BootSupport.cc delete mode 100644 dev/BootLoader/src/BootTextWriter.cc delete mode 100644 dev/BootLoader/src/BootThread.cc delete mode 100644 dev/BootLoader/src/BootloaderRsrc.rsrc delete mode 100644 dev/BootLoader/src/HEL/64X000/.gitkeep delete mode 100644 dev/BootLoader/src/HEL/64X000/Boot64x0.S delete mode 100644 dev/BootLoader/src/HEL/AMD64/.gitkeep delete mode 100644 dev/BootLoader/src/HEL/AMD64/BootAPI.S delete mode 100644 dev/BootLoader/src/HEL/AMD64/BootATA.cc delete mode 100644 dev/BootLoader/src/HEL/AMD64/BootMain.cc delete mode 100644 dev/BootLoader/src/HEL/AMD64/BootPlatform.cc delete mode 100644 dev/BootLoader/src/HEL/AMD64/BootSATA.cc delete mode 100644 dev/BootLoader/src/HEL/ARM64/.gitkeep delete mode 100644 dev/BootLoader/src/HEL/ARM64/BootAPI.S delete mode 100644 dev/BootLoader/src/HEL/ARM64/BootMain.cc delete mode 100644 dev/BootLoader/src/HEL/ARM64/BootPlatform.cc delete mode 100644 dev/BootLoader/src/HEL/POWER/.gitkeep delete mode 100644 dev/BootLoader/src/HEL/POWER/CoreBootStartup.S delete mode 100644 dev/BootLoader/src/New+Delete.cc delete mode 100644 dev/BootLoader/src/Root/EFI/STARTUP.NSH delete mode 100644 dev/BootLoader/src/Root/zka/fntkrnl.ttf delete mode 100644 dev/CompressKit/API.h delete mode 100644 dev/CompressKit/CKCompress.s delete mode 100644 dev/CompressKit/CKDecompress.s delete mode 100644 dev/HintKit/CompilerHint.h create mode 100644 dev/Hints/CompilerHint.h create mode 100644 dev/LibSCI/CompilerHint.h create mode 100644 dev/LibSCI/GPU.h create mode 100644 dev/LibSCI/LPC.h create mode 100644 dev/LibSCI/Macros.h create mode 100644 dev/LibSCI/SCI.h create mode 100644 dev/LibSCI/SysCalls.h create mode 100644 dev/LibSCI/doc/SCIKit.drawio create mode 100644 dev/LibSCI/sci.json create mode 100644 dev/LibSCI/src/GPU.cc create mode 100644 dev/LibSCI/src/LPC.cc create mode 100644 dev/LibSCI/src/LibSCI+IO.asm create mode 100644 dev/LibSCI/src/Makefile create mode 100644 dev/LibSCI/src/SCI.cc create mode 100644 dev/Mod/ACPI/ACPI.h create mode 100644 dev/Mod/ACPI/ACPIFactoryInterface.h create mode 100644 dev/Mod/AHCI/.gitkeep create mode 100644 dev/Mod/AHCI/AHCI.h create mode 100644 dev/Mod/APM/APM.h create mode 100644 dev/Mod/ATA/ATA.h create mode 100644 dev/Mod/Flash/Flash.h create mode 100644 dev/Mod/GPRS/.keepme create mode 100644 dev/Mod/GfxMgr/AccessibilityMgr.h create mode 100644 dev/Mod/GfxMgr/FBMgr.h create mode 100644 dev/Mod/GfxMgr/MathMgr.h create mode 100644 dev/Mod/GfxMgr/TextMgr.h create mode 100644 dev/Mod/HPET/.gitkeep create mode 100644 dev/Mod/HPET/Defines.h create mode 100644 dev/Mod/IEEE802/.gitkeep create mode 100644 dev/Mod/LTE/LTE.h create mode 100644 dev/Mod/MBCI/Interface.h create mode 100644 dev/Mod/MBCI/MBCI.h create mode 100644 dev/Mod/NVME/NVME.h create mode 100644 dev/Mod/OHCI/.gitkeep create mode 100644 dev/Mod/ReadMe.md create mode 100644 dev/Mod/SCSI/.gitkeep create mode 100644 dev/Mod/SCSI/SCSI.h create mode 100644 dev/Mod/WiFi/.gitkeep create mode 100644 dev/Mod/XHCI/.gitkeep create mode 100644 dev/Mod/XHCI/Defines.h delete mode 100644 dev/Modules/ACPI/ACPI.h delete mode 100644 dev/Modules/ACPI/ACPIFactoryInterface.h delete mode 100644 dev/Modules/AHCI/.gitkeep delete mode 100644 dev/Modules/AHCI/AHCI.h delete mode 100644 dev/Modules/APM/APM.h delete mode 100644 dev/Modules/ATA/ATA.h delete mode 100644 dev/Modules/Flash/Flash.h delete mode 100644 dev/Modules/GPRS/.keepme delete mode 100644 dev/Modules/GfxMgr/AccessibilityMgr.h delete mode 100644 dev/Modules/GfxMgr/FBMgr.h delete mode 100644 dev/Modules/GfxMgr/MathMgr.h delete mode 100644 dev/Modules/GfxMgr/Rsrc/Controls.rsrc delete mode 100644 dev/Modules/GfxMgr/Rsrc/Cursor.rsrc delete mode 100644 dev/Modules/GfxMgr/TextMgr.h delete mode 100644 dev/Modules/HPET/.gitkeep delete mode 100644 dev/Modules/HPET/Defines.h delete mode 100644 dev/Modules/IEEE802/.gitkeep delete mode 100644 dev/Modules/LTE/LTE.h delete mode 100644 dev/Modules/MBCI/Interface.h delete mode 100644 dev/Modules/MBCI/MBCI.h delete mode 100644 dev/Modules/NVME/NVME.h delete mode 100644 dev/Modules/OHCI/.gitkeep delete mode 100644 dev/Modules/ReadMe.md delete mode 100644 dev/Modules/SCSI/.gitkeep delete mode 100644 dev/Modules/SCSI/SCSI.h delete mode 100644 dev/Modules/WiFi/.gitkeep delete mode 100644 dev/Modules/XHCI/.gitkeep delete mode 100644 dev/Modules/XHCI/Defines.h delete mode 100644 dev/SCIKit/CompilerHint.h delete mode 100644 dev/SCIKit/GPU.h delete mode 100644 dev/SCIKit/LPC.h delete mode 100644 dev/SCIKit/Macros.h delete mode 100644 dev/SCIKit/SCI.h delete mode 100644 dev/SCIKit/SysCalls.h delete mode 100644 dev/SCIKit/doc/SCIKit.drawio delete mode 100644 dev/SCIKit/sci.json delete mode 100644 dev/SCIKit/src/GPU.cc delete mode 100644 dev/SCIKit/src/LPC.cc delete mode 100644 dev/SCIKit/src/Makefile delete mode 100644 dev/SCIKit/src/SCI+IO.asm delete mode 100644 dev/SCIKit/src/SCI.cc create mode 100644 dev/Usr/.keepme create mode 100644 dev/Usr/External/.gitkeep create mode 100644 dev/Usr/LibCompress/API.h create mode 100644 dev/Usr/LibCompress/LCCompress.s create mode 100644 dev/Usr/LibCompress/LCDecompress.s create mode 100644 dev/Usr/LibGUI/.keepme create mode 100644 dev/Usr/LibSystem/.keepme (limited to 'dev') diff --git a/dev/Boot/BootKit/BitManip.h b/dev/Boot/BootKit/BitManip.h new file mode 100644 index 00000000..3b5ea540 --- /dev/null +++ b/dev/Boot/BootKit/BitManip.h @@ -0,0 +1,20 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#ifndef __BITMANIP_H__ +#define __BITMANIP_H__ + +/// File: BitManip.h +/// Purpose: Bit manipulation helpers, based on coreboot-dev. + +#define bk_set_bit(X, O) X = (1 << O) | X +#define bk_clear_bit(X, O) X = ~(1 << O) & X +#define bk_toogle(X, O) X = (1 << O) ^ X +#define bk_lsb(X) X = X & -X +#define bk_msb(X) X = -(mp_lsb(X)) & X +#define bk_look_for_bit(X, O) (1 << O) | X + +#endif // ifndef __BITMANIP_H__ diff --git a/dev/Boot/BootKit/BootKit.h b/dev/Boot/BootKit/BootKit.h new file mode 100644 index 00000000..ab216249 --- /dev/null +++ b/dev/Boot/BootKit/BootKit.h @@ -0,0 +1,392 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +/***********************************************************************************/ +/// @file BootKit.h +/// @brief Bootloader Application Programming Interface. +/***********************************************************************************/ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +/// include NeFS header and Support header as well. + +#include +#include + +/***********************************************************************************/ +/// Include other APIs. +/***********************************************************************************/ + +#include +#include + +#include + +/***********************************************************************************/ +/// Framebuffer helpers. +/***********************************************************************************/ + +namespace EFI +{ + EXTERN void ThrowError(const WideChar* errorCode, + const WideChar* reason) noexcept; +} // namespace EFI + +namespace Boot +{ + class BTextWriter; + class BFileReader; + class BThread; + class BVersionString; + + typedef Char* PEFImagePtr; + typedef Char* PEImagePtr; + + typedef WideChar CharacterTypeUTF16; + typedef Char CharacterTypeUTF8; + + using namespace Kernel; + + /** + * @brief BootKit Text Writer class + * Writes to UEFI StdOut. + */ + class BTextWriter final + { + BTextWriter& _Write(const Long& num); + + public: + BTextWriter& Write(const Long& num); + BTextWriter& Write(const Char* str); + BTextWriter& Write(const CharacterTypeUTF16* str); + BTextWriter& WriteCharacter(CharacterTypeUTF16 c); + BTextWriter& Write(const UChar* str); + + public: + explicit BTextWriter() = default; + ~BTextWriter() = default; + + public: + BTextWriter& operator=(const BTextWriter&) = default; + BTextWriter(const BTextWriter&) = default; + }; + + Kernel::SizeT BCopyMem(CharacterTypeUTF16* dest, CharacterTypeUTF16* src, const Kernel::SizeT len); + + Kernel::SizeT BSetMem(CharacterTypeUTF8* src, const CharacterTypeUTF8 byte, const Kernel::SizeT len); + + /// String length functions. + + /// @brief get string length. + Kernel::SizeT BStrLen(const CharacterTypeUTF16* ptr); + + /// @brief set memory with custom value. + Kernel::SizeT BSetMem(CharacterTypeUTF16* src, const CharacterTypeUTF16 byte, const Kernel::SizeT len); + + /** + * @brief BootKit File Reader class + * Reads the Firmware Boot partition and filesystem. + */ + class BFileReader final + { + public: + explicit BFileReader(const CharacterTypeUTF16* path, + EfiHandlePtr ImageHandle); + ~BFileReader(); + + public: + Void ReadAll(SizeT until, SizeT chunk = kib_cast(4), UIntPtr out_address = 0UL); + + enum + { + kOperationOkay, + kNotSupported, + kEmptyDirectory, + kNoSuchEntry, + kIsDirectory, + kTooSmall, + kCount, + }; + + /// @brief error code getter. + /// @return the error code. + Int32& Error(); + + /// @brief blob getter. + /// @return the blob. + VoidPtr Blob(); + + /// @breif Size getter. + /// @return the size of the file. + UInt64& Size(); + + public: + BFileReader& operator=(const BFileReader&) = default; + BFileReader(const BFileReader&) = default; + + private: + Int32 mErrorCode{kOperationOkay}; + VoidPtr mBlob{nullptr}; + CharacterTypeUTF16 mPath[kPathLen]; + BTextWriter mWriter; + EfiFileProtocol* mFile{nullptr}; + UInt64 mSizeFile{0}; + EfiFileProtocol* mRootFs; + }; + + typedef UInt8* BlobType; + + class BVersionString final + { + public: + static const CharacterTypeUTF8* The() + { + return BOOTLOADER_VERSION; + } + }; + + /***********************************************************************************/ + /// Provide some useful processor features. + /***********************************************************************************/ + +#ifdef __EFI_x86_64__ + + /*** + * Common processor instructions. + */ + + EXTERN_C void rt_out8(UInt16 port, UInt8 value); + EXTERN_C void rt_out16(UInt16 port, UInt16 value); + EXTERN_C void rt_out32(UInt16 port, UInt32 value); + EXTERN_C UInt8 rt_in8(UInt16 port); + EXTERN_C UInt16 In16(UInt16 port); + EXTERN_C UInt32 rt_in32(UInt16 port); + + EXTERN_C void rt_hlt(); + EXTERN_C void rt_cli(); + EXTERN_C void rt_sti(); + EXTERN_C void rt_cld(); + EXTERN_C void rt_std(); + +#endif // __EFI_x86_64__ + + static inline const UInt32 kRgbRed = 0x000000FF; + static inline const UInt32 kRgbGreen = 0x0000FF00; + static inline const UInt32 kRgbBlue = 0x00FF0000; + static inline const UInt32 kRgbBlack = 0x00000000; + static inline const UInt32 kRgbWhite = 0x00FFFFFF; + +#define kBKBootFileMime "boot-x/file" +#define kBKBootDirMime "boot-x/dir" + + /// @brief BootKit Drive Formatter. + template + class BDiskFormatFactory final + { + public: + /// @brief File entry for **BDiskFormatFactory**. + struct BFileDescriptor final + { + Char fFileName[kNeFSNodeNameLen]; + Int32 fKind; + }; + + public: + explicit BDiskFormatFactory() = default; + explicit BDiskFormatFactory(BootDev dev) + : fDiskDev(dev) + { + } + + ~BDiskFormatFactory() = default; + + ZKA_COPY_DELETE(BDiskFormatFactory); + + /// @brief Format disk using partition name and fileBlobs. + /// @param Partition partName the target partition name. + /// @param fileBlobs blobs array. + /// @param blobCount blobs array count. + /// @retval True disk has been formatted. + /// @retval False failed to format. + Boolean Format(const Char* partName, BFileDescriptor* fileBlobs, SizeT blobCount); + + /// @brief check if partition is good. + Bool IsPartitionValid() noexcept + { + fDiskDev.Leak().mBase = (kNeFSRootCatalogStartAddress); + fDiskDev.Leak().mSize = BootDev::kSectorSize; + + Char buf[BootDev::kSectorSize] = {0}; + + fDiskDev.Read(buf, BootDev::kSectorSize); + + NFS_ROOT_PARTITION_BLOCK* blockPart = reinterpret_cast(buf); + + BTextWriter writer; + + for (SizeT indexMag = 0UL; indexMag < kNeFSIdentLen; ++indexMag) + { + if (blockPart->Ident[indexMag] != kNeFSIdent[indexMag]) + return false; + } + + if (blockPart->DiskSize != this->fDiskDev.GetDiskSize() || + blockPart->DiskSize < 1 || + blockPart->SectorSize != BootDev::kSectorSize || + blockPart->Version != kNeFSVersionInteger || + blockPart->StartCatalog == 0) + { + return false; + } + else if (blockPart->PartitionName[0] == 0) + { + return false; + } + + writer.Write(L"BootZ: Partition: ").Write(blockPart->PartitionName).Write(L" is healthy.\r"); + + return true; + } + + private: + /// @brief Write all of the requested catalogs into the filesystem. + /// @param fileBlobs the blobs. + /// @param blobCount the number of blobs to write. + /// @param partBlock the NeFS partition block. + Boolean WriteRootCatalog(BFileDescriptor* fileBlobs, SizeT blobCount, NFS_ROOT_PARTITION_BLOCK& partBlock) + { + BFileDescriptor* blob = fileBlobs; + Lba startLba = partBlock.StartCatalog; + BTextWriter writer; + + NFS_CATALOG_STRUCT catalogKind{0}; + + constexpr auto cNeFSCatalogPadding = 4; + + catalogKind.PrevSibling = startLba; + catalogKind.NextSibling = (startLba + sizeof(NFS_CATALOG_STRUCT) * cNeFSCatalogPadding); + + /// Fill catalog kind. + catalogKind.Kind = blob->fKind; + catalogKind.Flags = kNeFSFlagCreated; + + --partBlock.FreeCatalog; + --partBlock.FreeSectors; + + CopyMem(catalogKind.Name, blob->fFileName, StrLen(blob->fFileName)); + + fDiskDev.Leak().mBase = startLba; + fDiskDev.Leak().mSize = sizeof(NFS_CATALOG_STRUCT); + + fDiskDev.Write((Char*)&catalogKind, sizeof(NFS_CATALOG_STRUCT)); + + writer.Write(L"BootZ: Wrote directory: ").Write(blob->fFileName).Write(L"\r"); + + return true; + } + + private: + BootDev fDiskDev; + }; + + /// @brief Format disk. + /// @param Partition Name + /// @param Blobs. + /// @param Number of blobs. + /// @retval True disk has been formatted. + /// @retval False failed to format. + template + inline Boolean BDiskFormatFactory::Format(const Char* partName, + BDiskFormatFactory::BFileDescriptor* fileBlobs, + SizeT blobCount) + { + if (!fileBlobs || !blobCount) + return false; /// sanity check + + /// @note A catalog roughly equal to a sector. + + constexpr auto kMinimumDiskSize = kNeFSMinimumDiskSize; // at minimum. + + /// @note also look at EPM headers, for free part blocks. + + if (fDiskDev.GetDiskSize() < kMinimumDiskSize) + { + fb_init(); + + FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2); + EFI::ThrowError(L"Drive-Too-Tiny", L"Can't format a New Filesystem partition here."); + return false; + } + + NFS_ROOT_PARTITION_BLOCK partBlock{0}; + + CopyMem(partBlock.Ident, kNeFSIdent, kNeFSIdentLen - 1); + CopyMem(partBlock.PartitionName, partName, StrLen(partName)); + + partBlock.Version = kNeFSVersionInteger; + partBlock.CatalogCount = blobCount; + partBlock.Kind = kNeFSHardDrive; + partBlock.SectorSize = sizeof(NFS_ROOT_PARTITION_BLOCK); + partBlock.FreeCatalog = fDiskDev.GetSectorsCount() / sizeof(NFS_CATALOG_STRUCT); + partBlock.SectorCount = fDiskDev.GetSectorsCount(); + partBlock.FreeSectors = fDiskDev.GetSectorsCount(); + partBlock.StartCatalog = kNeFSCatalogStartAddress; + partBlock.DiskSize = fDiskDev.GetDiskSize(); + partBlock.Flags = kNeFSPartitionTypeBoot | kNeFSPartitionTypeStandard; + + fDiskDev.Leak().mBase = kNeFSRootCatalogStartAddress; + fDiskDev.Leak().mSize = sizeof(NFS_ROOT_PARTITION_BLOCK); + + fDiskDev.Write((Char*)&partBlock, sizeof(NFS_ROOT_PARTITION_BLOCK)); + + BOOT_BLOCK_STRUCT epm_boot{0}; + + constexpr auto kFsName = "NeFS"; + constexpr auto kBlockName = "ZKA:"; + + CopyMem(epm_boot.Fs, reinterpret_cast(const_cast(kFsName)), StrLen(kFsName)); + + epm_boot.FsVersion = kNeFSVersionInteger; + epm_boot.LbaStart = kNeFSRootCatalogStartAddress; + epm_boot.SectorSz = partBlock.SectorSize; + epm_boot.Kind = kEPMZkaOS; + epm_boot.NumBlocks = partBlock.CatalogCount; + + CopyMem(epm_boot.Name, reinterpret_cast(const_cast(kBlockName)), StrLen(kBlockName)); + CopyMem(epm_boot.Magic, reinterpret_cast(const_cast(kEPMMagic)), StrLen(kEPMMagic)); + + fDiskDev.Leak().mBase = kEPMBootBlockLba; // always always resies at zero block. + fDiskDev.Leak().mSize = sizeof(BOOT_BLOCK_STRUCT); + + fDiskDev.Write((Char*)&epm_boot, sizeof(BOOT_BLOCK_STRUCT)); + + /// if we can write a root catalog, then write the partition block. + if (this->WriteRootCatalog(fileBlobs, blobCount, partBlock)) + { + BTextWriter writer; + writer.Write(L"BootZ: Drive Formatted Successfully.\r"); + + return true; + } + else + { + fb_init(); + FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2); + + EFI::ThrowError(L"Filesystem-Failure-Part", L"Filesystem couldn't be partitioned, this drive cannot be formatted as an explicit partition map."); + } + + return false; + } +} // namespace Boot diff --git a/dev/Boot/BootKit/Device.h b/dev/Boot/BootKit/Device.h new file mode 100644 index 00000000..df498e74 --- /dev/null +++ b/dev/Boot/BootKit/Device.h @@ -0,0 +1,37 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include +#include + +using namespace Kernel; + +/// @brief Device type. +class Device +{ +public: + explicit Device() = default; + virtual ~Device() = default; + + ZKA_MOVE_DEFAULT(Device); + + struct Trait + { + SizeT mBase{1024}; + SizeT mSize{1024}; + }; + + virtual Trait& Leak() = 0; + + virtual Device& Read(Char* Buf, const SizeT& SecCount) = 0; + virtual Device& Write(Char* Buf, const SizeT& SecCount) = 0; +}; + +typedef Device BootDevice; +typedef Device NetworkDevice; +typedef Device DiskDevice; diff --git a/dev/Boot/BootKit/EPM.h b/dev/Boot/BootKit/EPM.h new file mode 100644 index 00000000..1956144e --- /dev/null +++ b/dev/Boot/BootKit/EPM.h @@ -0,0 +1,9 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include diff --git a/dev/Boot/BootKit/HW/ATA.h b/dev/Boot/BootKit/HW/ATA.h new file mode 100644 index 00000000..e14e8303 --- /dev/null +++ b/dev/Boot/BootKit/HW/ATA.h @@ -0,0 +1,58 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include +#include + +using namespace Kernel; + +class BootDeviceATA final : public Device +{ +public: + enum + { + kPrimary = ATA_PRIMARY_IO, + kSecondary = ATA_SECONDARY_IO, + }; + + explicit BootDeviceATA() noexcept; + ~BootDeviceATA() = default; + + ZKA_COPY_DELETE(BootDeviceATA); + + enum + { + kSectorSize = kATASectorSize + }; + + struct ATATrait final : public Device::Trait + { + UInt16 mBus{kPrimary}; + UInt8 mMaster{0}; + Boolean mErr{false}; + + operator bool() + { + return !mErr; + } + }; + +public: + operator bool(); + + SizeT GetSectorsCount() noexcept; + SizeT GetDiskSize() noexcept; + + BootDeviceATA& Read(Char* Buf, const SizeT& SecCount) override; + BootDeviceATA& Write(Char* Buf, const SizeT& SecCount) override; + + ATATrait& Leak() override; + +private: + ATATrait mTrait; +}; diff --git a/dev/Boot/BootKit/HW/SATA.h b/dev/Boot/BootKit/HW/SATA.h new file mode 100644 index 00000000..3a849d66 --- /dev/null +++ b/dev/Boot/BootKit/HW/SATA.h @@ -0,0 +1,46 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include +#include + +class BootDeviceSATA final +{ +public: + explicit BootDeviceSATA() noexcept; + ~BootDeviceSATA() = default; + + ZKA_COPY_DEFAULT(BootDeviceSATA); + + struct SATATrait final + { + Kernel::SizeT mBase{1024}; + Kernel::Boolean mErr{false}; + Kernel::Boolean mDetected{false}; + + operator bool() + { + return !this->mErr; + } + }; + + operator bool() + { + return this->Leak().mDetected; + } + + BootDeviceSATA& Read(Kernel::WideChar* Buf, const Kernel::SizeT& SecCount); + BootDeviceSATA& Write(Kernel::WideChar* Buf, const Kernel::SizeT& SecCount); + + SATATrait& Leak(); + +private: + SATATrait mTrait; +}; + +#define kAHCISectorSz 4096 diff --git a/dev/Boot/BootKit/Platform.h b/dev/Boot/BootKit/Platform.h new file mode 100644 index 00000000..c8bb5058 --- /dev/null +++ b/dev/Boot/BootKit/Platform.h @@ -0,0 +1,32 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +/** + @file Platform.h + @brief Platform specific code. +*/ + +#ifdef __x86_64__ + +#ifdef __cplusplus +#ifndef EXTERN_C +#define EXTERN_C extern "C" +#endif +#else +#ifndef EXTERN_C +#define EXTERN_C extern +#endif +#endif // __cplusplus + +EXTERN_C void rt_halt(); +EXTERN_C void rt_cli(); +EXTERN_C void rt_sti(); +EXTERN_C void rt_cld(); +EXTERN_C void rt_std(); + +#endif /* ifdef __x86_64__ */ diff --git a/dev/Boot/BootKit/Protocol.h b/dev/Boot/BootKit/Protocol.h new file mode 100644 index 00000000..618885fe --- /dev/null +++ b/dev/Boot/BootKit/Protocol.h @@ -0,0 +1,10 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include +#include diff --git a/dev/Boot/BootKit/Rsrc/zka_disk.rsrc b/dev/Boot/BootKit/Rsrc/zka_disk.rsrc new file mode 100644 index 00000000..ce980b7b --- /dev/null +++ b/dev/Boot/BootKit/Rsrc/zka_disk.rsrc @@ -0,0 +1,116 @@ +#define ZKA_DISK_HEIGHT 110 +#define ZKA_DISK_WIDTH 110 + +// array size is 36300 +static const unsigned int zka_disk[] = { + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x333333, 0x565656, 0x636363, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6a6a6a, 0x5f5f5f, 0x4d4d4d, 0x2b2b2b, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x464646, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x6a6a6a, 0x3b3b3b, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x3d3d3d, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x252525, 0x676767, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x606060, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x3d3d3d, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x616161, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x525252, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x242424, 0x767676, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x676767, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x393939, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7e7e7e, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4e4e4e, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x3f3f3f, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x666666, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x555555, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x222222, 0x7c7c7c, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x6d6d6d, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x393939, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x868686, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x515151, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x404040, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x6a6a6a, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x828282, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x727272, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x383838, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x8e8e8e, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x525252, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x414141, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x6e6e6e, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x5c5c5c, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x868686, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x787878, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x373737, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x959595, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x545454, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0x444444, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x707070, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0x5e5e5e, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x8b8b8b, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0x7c7c7c, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x363636, 0xa7a7a7, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0x9c9c9c, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x545454, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0x464646, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x717171, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0x636363, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x8e8e8e, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0x818181, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x343434, 0xacacac, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xa3a3a3, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x545454, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0x484848, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x727272, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0x676767, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x909090, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0x868686, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x313131, 0xb0b0b0, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xa9a9a9, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x525252, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0x494949, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x727272, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0x6a6a6a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x929292, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0x8c8c8c, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x2e2e2e, 0xb4b4b4, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xafafaf, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x505050, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0x4b4b4b, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x717171, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0x6e6e6e, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x939393, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0x929292, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x2a2a2a, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x4c4c4c, 0x4c4c4c, 0x4c4c4c, 0x4b4b4b, 0x4b4b4b, 0x4b4b4b, 0x4b4b4b, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x494949, 0x494949, 0x494949, 0x494949, 0x484848, 0x484848, 0x484848, 0x484848, 0x474747, 0x474747, 0x474747, 0x464646, 0x464646, 0x464646, 0x464646, 0x454545, 0x454545, 0x454545, 0x454545, 0x444444, 0x444444, 0x444444, 0x444444, 0x434343, 0x434343, 0x434343, 0x434343, 0x424242, 0x424242, 0x424242, 0x414141, 0x414141, 0x414141, 0x414141, 0x404040, 0x404040, 0x404040, 0x404040, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3e3e3e, 0x3e3e3e, 0x3e3e3e, 0x3e3e3e, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 0x3b3b3b, 0x3b3b3b, 0x3b3b3b, 0x3a3a3a, 0x3a3a3a, 0x3a3a3a, 0x3a3a3a, 0x393939, 0x393939, 0x393939, 0x393939, 0x383838, 0x383838, 0x383838, 0x383838, 0x373737, 0x373737, 0x373737, 0x373737, 0x363636, 0x363636, 0x363636, 0x353535, 0x353535, 0x353535, 0x353535, 0x343434, 0x343434, 0x343434, 0x343434, 0x333333, 0x333333, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xababab, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x949494, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0x9f9f9f, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x888888, 0x888888, 0x868686, 0x868686, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x868686, 0x868686, 0x848484, 0x848484, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa3a3a3, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x999999, 0x979797, 0x979797, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xababab, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x949494, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0x9f9f9f, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x888888, 0x888888, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4d4d4d, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4d4d4d, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4d4d4d, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa3a3a3, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x999999, 0x979797, 0x979797, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xababab, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x949494, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0x9f9f9f, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x888888, 0x888888, 0x868686, 0x868686, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xc6c6c6, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x868686, 0x868686, 0x848484, 0x848484, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x565656, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x9a9a9a, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa3a3a3, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x464646, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x797979, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x999999, 0x979797, 0x979797, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x353535, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xbfbfbf, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xababab, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x949494, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x464646, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x464646, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0x9f9f9f, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x888888, 0x888888, 0x868686, 0x868686, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x676767, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x7f7f7f, 0xbababa, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x626262, 0x484848, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x3a3a3a, 0x4b4b4b, 0x4b4b4b, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x494949, 0x494949, 0x494949, 0x494949, 0x484848, 0x484848, 0x484848, 0x484848, 0x474747, 0x474747, 0x474747, 0x464646, 0x464646, 0x464646, 0x464646, 0x454545, 0x454545, 0x454545, 0x454545, 0x444444, 0x444444, 0x444444, 0x444444, 0x434343, 0x434343, 0x434343, 0x424242, 0x424242, 0x424242, 0x424242, 0x414141, 0x414141, 0x414141, 0x414141, 0x404040, 0x404040, 0x404040, 0x404040, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3e3e3e, 0x3e3e3e, 0x3e3e3e, 0x3e3e3e, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 0x3b3b3b, 0x3b3b3b, 0x3b3b3b, 0x3a3a3a, 0x3a3a3a, 0x3a3a3a, 0x3a3a3a, 0x393939, 0x393939, 0x393939, 0x393939, 0x383838, 0x383838, 0x383838, 0x383838, 0x373737, 0x373737, 0x373737, 0x373737, 0x363636, 0x363636, 0x363636, 0x353535, 0x353535, 0x353535, 0x353535, 0x272727, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020 +}; \ No newline at end of file diff --git a/dev/Boot/BootKit/Rsrc/zka_has_disk.rsrc b/dev/Boot/BootKit/Rsrc/zka_has_disk.rsrc new file mode 100644 index 00000000..bdc0bb99 --- /dev/null +++ b/dev/Boot/BootKit/Rsrc/zka_has_disk.rsrc @@ -0,0 +1,116 @@ +#define ZKA_HAS_DISK_HEIGHT 110 +#define ZKA_HAS_DISK_WIDTH 110 + +// array size is 36300 +static const unsigned int zka_has_disk[] = { + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x333333, 0x565656, 0x636363, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6a6a6a, 0x5f5f5f, 0x4d4d4d, 0x2b2b2b, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x464646, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x6a6a6a, 0x3b3b3b, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x3d3d3d, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x252525, 0x676767, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x606060, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x3d3d3d, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x616161, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x525252, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x242424, 0x767676, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x676767, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x393939, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7e7e7e, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4e4e4e, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x3f3f3f, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x666666, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x555555, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x222222, 0x7c7c7c, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x6d6d6d, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x393939, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x868686, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x515151, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x404040, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x6a6a6a, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x89948e, 0x7ba08a, 0x6eaa87, 0x6cab87, 0x6cab87, 0x6caa87, 0x6caa87, 0x6da888, 0x799f8a, 0x89938e, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x828282, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x8c9590, 0x72ab88, 0x61b883, 0x52c37f, 0x4bc87e, 0x4ac77e, 0x4ac67e, 0x49c57e, 0x48c47f, 0x47c37f, 0x47c37f, 0x46c17f, 0x46c180, 0x45c07f, 0x4cba82, 0x5cb085, 0x6fa58a, 0x8c9490, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x727272, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x383838, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x899d90, 0x69b686, 0x4ecb7e, 0x4dca7e, 0x4cc97e, 0x4bc87e, 0x4bc77f, 0x4ac67f, 0x4ac67f, 0x49c57f, 0x48c47f, 0x47c37f, 0x47c280, 0x46c180, 0x46c080, 0x45bf80, 0x44bf81, 0x43be81, 0x43bd81, 0x42bc81, 0x62ac89, 0x869a91, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x8e8e8e, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x525252, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x86a390, 0x61be83, 0x4ecb7d, 0x4dca7d, 0x4cca7e, 0x4bc87e, 0x4bc87e, 0x4ac77e, 0x4ac67e, 0x49c57e, 0x48c47f, 0x48c37f, 0x47c37f, 0x46c17f, 0x46c180, 0x45c080, 0x45bf80, 0x44be80, 0x43bd80, 0x42bc80, 0x42bc81, 0x41ba81, 0x41ba81, 0x40b981, 0x57af87, 0x839d92, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x414141, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x6e6e6e, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x929e96, 0x68bb87, 0x4fcd7e, 0x4ecc7d, 0x4ecb7e, 0x4dca7e, 0x4cc97e, 0x4bc87e, 0x4bc77f, 0x4ac67f, 0x4ac67f, 0x49c57f, 0x48c480, 0x47c380, 0x47c280, 0x46c180, 0x46c080, 0x45bf80, 0x44bf81, 0x43be81, 0x43bd81, 0x42bc81, 0x42bb82, 0x41ba82, 0x40b982, 0x40b882, 0x3fb882, 0x3eb782, 0x5fab8b, 0x919b97, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x5c5c5c, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x868686, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x88a893, 0x55c97f, 0x4ecc7d, 0x4ecb7d, 0x4dca7d, 0x4cc97e, 0x4bc87e, 0x4bc87e, 0x4ac77e, 0x4ac67e, 0x49c57e, 0x48c47f, 0x47c37f, 0x47c27f, 0x46c17f, 0x46c180, 0x45c080, 0x44bf80, 0x44be80, 0x43bd80, 0x42bc80, 0x42bb81, 0x41ba81, 0x41ba81, 0x40b981, 0x3fb882, 0x3eb782, 0x3eb682, 0x3db582, 0x3db482, 0x45b185, 0x83a195, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x787878, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x373737, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x7bb48f, 0x4fcd7d, 0x4fcc7d, 0x4ecb7d, 0x4dcb7e, 0x4cca7e, 0x4cc97e, 0x4bc87e, 0x4bc77f, 0x4ac67f, 0x49c57f, 0x49c47f, 0x48c480, 0x47c37f, 0x47c280, 0x46c180, 0x46c080, 0x45bf80, 0x44bf81, 0x43bd81, 0x43bd81, 0x42bc81, 0x42bb82, 0x41ba82, 0x40b982, 0x3fb882, 0x3fb882, 0x3eb682, 0x3eb683, 0x3db583, 0x3cb483, 0x3cb383, 0x3bb284, 0x74a693, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x959595, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x545454, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0x76b88e, 0x4fcd7d, 0x4ecc7d, 0x4ecb7d, 0x4dca7d, 0x4cca7e, 0x4bc87e, 0x4bc87e, 0x4ac77e, 0x4ac67f, 0x49c57e, 0x48c47f, 0x48c37f, 0x47c37f, 0x46c17f, 0x46c180, 0x45c080, 0x45bf80, 0x44be80, 0x43bd81, 0x42bc81, 0x42bc81, 0x41ba81, 0x41ba81, 0x40b981, 0x3fb882, 0x3eb782, 0x3eb682, 0x3db582, 0x3db583, 0x3cb383, 0x3bb383, 0x3ab283, 0x3ab183, 0x39b083, 0x6fa893, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0x444444, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x707070, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0x79ba90, 0x4fcd7d, 0x4fcd7e, 0x4ecb7e, 0x4dcb7e, 0x4dca7e, 0x4cc97e, 0x4bc87e, 0x4bc77f, 0x4ac67f, 0x4ac67f, 0x49c47f, 0x48c480, 0x47c380, 0x47c280, 0x46c180, 0x46c080, 0x45bf80, 0x44bf81, 0x43bd81, 0x43bd81, 0x42bc81, 0x42bb82, 0x41ba82, 0x40b982, 0x40b882, 0x3fb883, 0x3eb682, 0x3eb683, 0x3db583, 0x3cb483, 0x3cb383, 0x3bb284, 0x3ab184, 0x3ab184, 0x39af84, 0x38af85, 0x6da894, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0x5e5e5e, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x8b8b8b, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0x7db892, 0x4fcd7d, 0x4ecc7d, 0x4ecb7d, 0x4dca7d, 0x4cc97e, 0x4bc87e, 0x4bc87e, 0x4ac67e, 0x4ac67e, 0x49c57e, 0x48c47f, 0x47c37f, 0x47c27f, 0x46c17f, 0x46c180, 0x45bf80, 0x44bf80, 0x43be80, 0x43bd80, 0x42bc80, 0x42bb81, 0x41ba81, 0x40ba81, 0x3fb881, 0x3fb882, 0x3eb782, 0x3eb682, 0x3db582, 0x3cb482, 0x3cb382, 0x3bb383, 0x3ab183, 0x3ab183, 0x39b083, 0x39af84, 0x38ae84, 0x37ad84, 0x36ac84, 0x74a897, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0x7c7c7c, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x363636, 0xa7a7a7, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0x90b39d, 0x4fcd7d, 0x4fcc7d, 0x4ecb7d, 0x4dcb7e, 0x4cc97e, 0x4cc97e, 0x4bc87e, 0x4bc77f, 0x4ac67f, 0x49c57f, 0x48c47f, 0x48c480, 0x47c27f, 0x47c280, 0x46c180, 0x45c080, 0x44bf80, 0x44be81, 0x43bd81, 0x43bd81, 0x42bb81, 0x41bb82, 0x41ba82, 0x40b982, 0x3fb882, 0x3fb782, 0x3eb682, 0x3eb683, 0x3db483, 0x3cb483, 0x3bb383, 0x3bb284, 0x3ab184, 0x3ab084, 0x39af84, 0x38af84, 0x37ad84, 0x37ad85, 0x36ac85, 0x36ab85, 0x8aa99f, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0x9c9c9c, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x545454, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xa2afa6, 0x56ca80, 0x4ecc7d, 0x4ecb7d, 0x4dca7d, 0x4cc97e, 0x4bc87e, 0x4bc87e, 0x4ac67e, 0x4ac67f, 0x49c57e, 0x48c47f, 0x47c37f, 0x47c27f, 0x46c17f, 0x46c180, 0x45bf80, 0x44bf80, 0x43be80, 0x43bd81, 0x42bc81, 0x42bb81, 0x41ba81, 0x40ba81, 0x40b881, 0x3fb882, 0x3eb782, 0x3eb682, 0x3db582, 0x3db483, 0x3cb383, 0x3bb383, 0x3ab183, 0x3ab183, 0x39b083, 0x39af84, 0x38ae84, 0x37ad84, 0x36ac84, 0x36ac85, 0x35ab85, 0x35aa85, 0x3ea988, 0xa2aba8, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0x464646, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x717171, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0x70c28e, 0x4fcc7e, 0x4ecb7e, 0x4dcb7e, 0x4cca7e, 0x4cc97e, 0x4bc87e, 0x4bc77f, 0x4ac67f, 0x49c57f, 0x48c47f, 0x48c480, 0x47c380, 0x47c280, 0x46c180, 0x45c080, 0x45bf80, 0x44be81, 0x43bd81, 0x43bd81, 0x42bc81, 0x42bb82, 0x41ba82, 0x40b982, 0x3fb882, 0x3fb783, 0x3eb682, 0x3eb683, 0x3db583, 0x3cb483, 0x3bb383, 0x3bb284, 0x3ab184, 0x3ab084, 0x39af84, 0x38af85, 0x38ae85, 0x37ad85, 0x36ac85, 0x36ab85, 0x35aa85, 0x34a986, 0x34a886, 0x63aa96, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0x636363, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x8e8e8e, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0x9bb6a5, 0x4ecc7d, 0x4dcb7d, 0x4cca7d, 0x4cc97e, 0x4bc87e, 0x4bc77e, 0x4ac67e, 0x49c67e, 0x49c57e, 0x48c47f, 0x47c37f, 0x47c27f, 0x46c17f, 0x46c080, 0x45bf80, 0x44bf80, 0x43be80, 0x43bd81, 0x42bc80, 0x42bb81, 0x41ba81, 0x40b981, 0x3fb881, 0x3fb882, 0x3eb782, 0x3eb682, 0x3db582, 0x3cb483, 0x3bb383, 0x3bb283, 0x3ab183, 0x3ab183, 0x39b083, 0x38af84, 0x37ae84, 0x37ad84, 0x36ac84, 0x36ab85, 0x35aa85, 0x34aa85, 0x34a985, 0x33a885, 0x32a785, 0x32a686, 0x9baea9, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0x818181, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x343434, 0xacacac, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0x68c68b, 0x4ecb7d, 0x4dcb7e, 0x4cc97e, 0x4cc97e, 0x4bc87e, 0x4bc77f, 0x4ac67f, 0x49c57f, 0x48c47f, 0x48c480, 0x47c27f, 0x47c280, 0x46c180, 0x45c080, 0x44bf80, 0x44be81, 0x43bd81, 0x43bd81, 0x42bb81, 0x41bb82, 0x41ba82, 0x40b982, 0x3fb882, 0x3fb782, 0x3eb682, 0x3eb683, 0x3db483, 0x3cb483, 0x3bb383, 0x3bb284, 0x3ab184, 0x3ab084, 0x39af84, 0x38af85, 0x37ad84, 0x37ad85, 0x36ac85, 0x36ab85, 0x35aa85, 0x34a986, 0x33a886, 0x33a886, 0x32a686, 0x32a687, 0x57a993, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xa3a3a3, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x545454, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xa0baaa, 0x4dcb7d, 0x4dca7d, 0x4cc97e, 0x4bc87e, 0x4bc77e, 0x4ac67e, 0x4ac67f, 0x49c57e, 0x48c47f, 0x47c37f, 0x47c27f, 0x46c17f, 0x46c080, 0x45bf80, 0x44bf80, 0x43be80, 0x43bd81, 0x42bc81, 0x42bb81, 0x41ba81, 0x40b981, 0x3fb881, 0x3fb882, 0x3eb782, 0x3eb682, 0x3db582, 0x3cb483, 0x3bb383, 0x3bb283, 0x3ab183, 0x3ab184, 0x39b083, 0x38af84, 0x38ae84, 0x37ad84, 0x36ac84, 0x36ab85, 0x35aa85, 0x35aa85, 0x34a985, 0x33a886, 0x32a786, 0x32a686, 0x31a586, 0x31a486, 0x30a386, 0x9eb2ad, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0x484848, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x727272, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0x72c592, 0x4dcb7e, 0x4cc97e, 0x4cc97e, 0x4bc87e, 0x4bc77f, 0x4ac67f, 0x49c57f, 0x48c47f, 0x48c480, 0x47c280, 0x47c280, 0x46c180, 0x45c080, 0x45bf81, 0x44be81, 0x43bd81, 0x43bd81, 0x42bb81, 0x42bb82, 0x41ba82, 0x40b982, 0x3fb882, 0x3fb783, 0x3eb682, 0x3eb683, 0x3db483, 0x3cb483, 0x3bb383, 0x3bb284, 0x3ab184, 0x3ab084, 0x39af84, 0x38af85, 0x37ad85, 0x37ad85, 0x36ac85, 0x36ab85, 0x35aa85, 0x34a986, 0x33a886, 0x33a886, 0x32a686, 0x32a687, 0x31a587, 0x30a487, 0x30a387, 0x60aa99, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0x676767, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x909090, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xb3bbb6, 0x50c97f, 0x4cc97e, 0x4bc87e, 0x4bc77e, 0x4ac67e, 0x49c57e, 0x48c47e, 0x48c47f, 0x47c37f, 0x47c27f, 0x46c17f, 0x45c080, 0x44bf80, 0x44be80, 0x43bd80, 0x43bd81, 0x42bc80, 0x41bb81, 0x41ba81, 0x40b981, 0x3fb881, 0x3fb782, 0x3eb682, 0x3eb682, 0x3db582, 0x3cb482, 0x3bb383, 0x3bb283, 0x3ab183, 0x3ab083, 0x39af83, 0x38af84, 0x37ae84, 0x51b894, 0x8ed1b9, 0x50b694, 0x35aa85, 0x34a985, 0x33a885, 0x33a885, 0x32a785, 0x32a686, 0x31a586, 0x30a486, 0x2fa386, 0x2fa387, 0x2ea187, 0x32a289, 0xb4b9b8, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0x868686, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x313131, 0xb0b0b0, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0x92c2a5, 0x4cc97e, 0x4cc97e, 0x4bc77e, 0x4ac77f, 0x4ac67f, 0x49c57f, 0x48c47f, 0x48c380, 0x47c27f, 0x46c280, 0x46c080, 0x45c080, 0x44bf80, 0x44be81, 0x43bd81, 0x43bc81, 0x42bb81, 0x41bb82, 0x40ba82, 0x40b982, 0x3fb882, 0x3fb782, 0x3eb682, 0x3db583, 0x3cb483, 0x3cb483, 0x3bb383, 0x3bb284, 0x3ab184, 0x39b084, 0x39af84, 0x38ae85, 0x6bc3a4, 0xf4fcf6, 0xfbfffa, 0xf3fbf5, 0x54b797, 0x34a986, 0x33a886, 0x33a786, 0x32a686, 0x31a686, 0x31a587, 0x30a487, 0x2fa387, 0x2fa287, 0x2ea187, 0x2ea088, 0x86b2a9, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xa9a9a9, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x525252, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0x74c695, 0x4bc87e, 0x4bc77e, 0x4ac67e, 0x49c67f, 0x48c47f, 0x48c47f, 0x47c37f, 0x47c27f, 0x46c17f, 0x45c080, 0x45bf80, 0x44bf80, 0x43bd80, 0x43bd81, 0x42bc81, 0x42bb81, 0x41ba81, 0x40b981, 0x3fb881, 0x3fb882, 0x3eb682, 0x3eb682, 0x3db582, 0x3cb483, 0x3bb383, 0x3bb283, 0x3ab183, 0x3ab184, 0x39af83, 0x38af84, 0x37ae84, 0x6ac3a3, 0xf4fcf5, 0xfafff8, 0xfafff8, 0xfafff8, 0x9ed7c3, 0x33a886, 0x32a786, 0x32a686, 0x31a586, 0x30a486, 0x30a386, 0x2fa387, 0x2ea187, 0x2ea187, 0x2da087, 0x2d9f88, 0x61aa9c, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0x494949, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x727272, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0x57c885, 0x4bc77e, 0x4ac77f, 0x4ac67f, 0x49c57f, 0x48c47f, 0x48c380, 0x47c280, 0x47c280, 0x46c080, 0x45c080, 0x44bf80, 0x44be81, 0x43bd81, 0x43bc81, 0x42bb81, 0x41bb82, 0x40b982, 0x40b982, 0x3fb882, 0x3fb783, 0x3eb683, 0x3db583, 0x3db483, 0x3cb483, 0x3bb383, 0x3bb284, 0x3ab184, 0x3ab084, 0x39af84, 0x38ae85, 0x6ac3a3, 0xf5fdf5, 0xf9fff7, 0xf9fff7, 0xf9fff7, 0xf9fff6, 0x83cbb4, 0x33a786, 0x32a686, 0x32a687, 0x31a587, 0x30a487, 0x2fa387, 0x2fa288, 0x2ea187, 0x2ea088, 0x2d9f88, 0x2c9f88, 0x3ea28f, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0x6a6a6a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x929292, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xb9c4be, 0x4bc77e, 0x4ac67e, 0x49c57e, 0x48c47e, 0x48c47f, 0x47c37f, 0x47c27f, 0x46c17f, 0x45c080, 0x44bf80, 0x44be80, 0x43bd80, 0x43bd81, 0x42bc80, 0x41bb81, 0x41ba81, 0x40b981, 0x3fb881, 0x3fb782, 0x3eb682, 0x3db682, 0x3db582, 0x3cb483, 0x3bb383, 0x3bb283, 0x3ab183, 0x39b083, 0x39af83, 0x38af84, 0x37ae84, 0x6ac2a2, 0xf1fcf2, 0xf8fff5, 0xf7fff5, 0xf7fff5, 0xf7fff4, 0xc3e8d7, 0x36a987, 0x32a686, 0x31a586, 0x30a486, 0x2fa386, 0x2fa287, 0x2ea187, 0x2ea187, 0x2da087, 0x2c9f87, 0x2c9e88, 0x2b9d88, 0x2a9c88, 0xbcc2c1, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0x8c8c8c, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x2e2e2e, 0xb4b4b4, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xa9c7b6, 0x4ac77f, 0x49c67f, 0x49c57f, 0x48c47f, 0x48c380, 0x47c280, 0x46c180, 0x46c080, 0x45c080, 0x44bf80, 0x44be81, 0x43bd81, 0x43bc81, 0x42bb81, 0x41ba82, 0x40b982, 0x40b982, 0x3fb882, 0x3fb782, 0x3eb682, 0x3db583, 0x3cb483, 0x3cb383, 0x3bb283, 0x3bb284, 0x3ab184, 0x39b084, 0x38af84, 0x38ae85, 0x69c2a1, 0xf2fcf1, 0xf7fff4, 0xf7fff4, 0xf7fff3, 0xf7fff3, 0xc4e8d7, 0x39aa89, 0x32a686, 0x31a587, 0x31a487, 0x30a487, 0x2fa387, 0x2fa287, 0x2ea187, 0x2ea088, 0x2d9f88, 0x2c9e88, 0x2b9d88, 0x2b9d89, 0x2a9c89, 0xa6beba, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xafafaf, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x505050, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0x99c8ad, 0x49c57f, 0x48c47f, 0x48c47f, 0x47c37f, 0x47c27f, 0x46c17f, 0x45c080, 0x45bf80, 0x44bf80, 0x43bd80, 0x43bd81, 0x42bc81, 0x41bb81, 0x4cbe88, 0x6dca9e, 0x40b882, 0x3fb882, 0x3eb682, 0x3db682, 0x3db582, 0x3cb483, 0x3bb383, 0x3bb283, 0x3ab183, 0x3ab184, 0x39af83, 0x38af84, 0x37ae84, 0x69c2a1, 0xeffcef, 0xf6fff3, 0xf5fff2, 0xf5fff2, 0xf5fff1, 0xc3e8d5, 0x39aa8a, 0x32a686, 0x31a586, 0x30a486, 0x30a386, 0x2fa387, 0x2ea187, 0x2ea187, 0x2da087, 0x2d9f88, 0x2c9e88, 0x2b9d88, 0x2a9c88, 0x2a9c89, 0x299a88, 0x93bab4, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0x4b4b4b, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x717171, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0x93caab, 0x49c57f, 0x48c47f, 0x48c380, 0x47c280, 0x47c280, 0x46c080, 0x45c081, 0x44bf81, 0x44be81, 0x43bd81, 0x43bc81, 0x42bb81, 0x63c898, 0xe7f8ec, 0xf9fff7, 0xcdeedb, 0x4bbc8b, 0x3eb683, 0x3db583, 0x3cb483, 0x3cb483, 0x3bb283, 0x3bb284, 0x3ab184, 0x39b084, 0x38af84, 0x38ae85, 0x65c1a0, 0xeffcee, 0xf5fff1, 0xf5fff1, 0xf5fff1, 0xf5fff1, 0xc2e8d5, 0x3aaa8a, 0x32a686, 0x32a687, 0x31a487, 0x30a487, 0x2fa387, 0x2fa288, 0x2ea187, 0x2ea088, 0x2d9f88, 0x2c9f88, 0x2b9d88, 0x2b9d89, 0x2a9c89, 0x2a9b89, 0x299a89, 0x89b8b1, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0x6e6e6e, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x939393, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0x8cc9a7, 0x48c47f, 0x47c27f, 0x46c27f, 0x46c17f, 0x45c080, 0x44bf80, 0x44be80, 0x43bd80, 0x43bd81, 0x42bb80, 0x41bb81, 0x40ba81, 0xb8e6cd, 0xf7fff5, 0xf7fff5, 0xf7fff4, 0xd2f1de, 0x48b989, 0x3cb483, 0x3bb383, 0x3bb283, 0x3ab183, 0x39b083, 0x39af83, 0x38af84, 0x37ad84, 0x64c19e, 0xecfbec, 0xf4fff0, 0xf3ffef, 0xf3ffef, 0xf3ffee, 0xc5ead5, 0x3aa989, 0x31a686, 0x31a586, 0x30a486, 0x2fa386, 0x2fa287, 0x2ea187, 0x2ea187, 0x2d9f87, 0x2c9f87, 0x2b9e87, 0x2b9d88, 0x2a9c88, 0x2a9b88, 0x299a88, 0x289a89, 0x279889, 0x81b5ae, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0x929292, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x2a2a2a, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0x79b493, 0x48c380, 0x47c280, 0x46c180, 0x45c080, 0x45c080, 0x44be80, 0x44be81, 0x43bd81, 0x42bc81, 0x41bb81, 0x41ba82, 0x40b982, 0xb9e7cd, 0xf7fff3, 0xf7fff3, 0xf6fff3, 0xf6fff3, 0xd0f0db, 0x47b78a, 0x3bb283, 0x3bb284, 0x3ab084, 0x39b084, 0x38af84, 0x38ae85, 0x65c19e, 0xedfceb, 0xf3ffee, 0xf3ffee, 0xf2ffee, 0xf2ffee, 0xc3ead4, 0x3aaa8a, 0x32a686, 0x31a587, 0x30a487, 0x30a487, 0x2fa287, 0x2fa287, 0x2ea187, 0x2da088, 0x2c9f88, 0x2c9e88, 0x2b9d88, 0x2b9d89, 0x2a9b89, 0x299b89, 0x299a89, 0x289989, 0x279889, 0x699f98, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x316749, 0x47c280, 0x46c17f, 0x45c080, 0x44bf80, 0x44be80, 0x43bd80, 0x43bd81, 0x42bb81, 0x41bb81, 0x40ba81, 0x40b981, 0x3fb881, 0x59c192, 0xebfbeb, 0xf5fff1, 0xf4fff1, 0xf4fff1, 0xf4fff0, 0xcceed8, 0x43b588, 0x39b084, 0x39af83, 0x38af84, 0x37ad84, 0x65c19e, 0xebfce9, 0xf2ffed, 0xf1ffec, 0xf1ffec, 0xf1ffec, 0xc2ead3, 0x39a98a, 0x32a686, 0x31a586, 0x30a486, 0x2fa386, 0x2fa287, 0x2ea187, 0x2ea187, 0x2d9f87, 0x2c9f88, 0x2b9e88, 0x2b9d88, 0x2a9c88, 0x2a9b89, 0x299a88, 0x289a89, 0x289889, 0x279889, 0x269789, 0x22524d, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x2f5d44, 0x46c180, 0x45c080, 0x45c081, 0x44bf81, 0x44be81, 0x43bd81, 0x42bc81, 0x42bb81, 0x41ba82, 0x40b982, 0x40b982, 0x3fb882, 0x3fb783, 0x62c498, 0xe9fbe9, 0xf4ffef, 0xf3ffef, 0xf3ffef, 0xf3ffee, 0xcbeed7, 0x42b489, 0x38af84, 0x38ae85, 0x63c09d, 0xeafce8, 0xf1ffec, 0xf1ffec, 0xf0ffeb, 0xf0ffeb, 0xc3ebd3, 0x3aaa8a, 0x32a686, 0x31a587, 0x30a487, 0x30a487, 0x2fa387, 0x2fa288, 0x2ea187, 0x2da088, 0x2d9f88, 0x2c9e88, 0x2b9d88, 0x2b9d89, 0x2a9c89, 0x2a9b89, 0x299a89, 0x28998a, 0x27988a, 0x27978a, 0x26968a, 0x224a46, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x294838, 0x45c080, 0x44bf80, 0x44be80, 0x43bd80, 0x43bc81, 0x42bb81, 0x41bb81, 0x40ba81, 0x40b981, 0x3fb881, 0x3fb782, 0x3eb682, 0x3db582, 0x3cb482, 0x60c398, 0xe7fae7, 0xf2ffed, 0xf1ffec, 0xf1ffec, 0xf1ffeb, 0xc9edd5, 0x3eb088, 0x63c09c, 0xe8fbe6, 0xefffea, 0xefffe9, 0xefffe9, 0xeeffe9, 0xc2ead1, 0x39a989, 0x31a686, 0x31a586, 0x30a486, 0x2fa386, 0x2fa287, 0x2ea187, 0x2ea087, 0x2d9f87, 0x2c9f88, 0x2b9e88, 0x2b9d88, 0x2a9c88, 0x2a9b88, 0x299a88, 0x289989, 0x279889, 0x279889, 0x269789, 0x26968a, 0x25958a, 0x213a38, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x24302a, 0x45c081, 0x44be80, 0x44be81, 0x43bd81, 0x42bc81, 0x41bb81, 0x41ba82, 0x40b982, 0x40b982, 0x3fb782, 0x3eb783, 0x3db683, 0x3db583, 0x3cb483, 0x3cb383, 0x61c299, 0xe9fce7, 0xf0ffeb, 0xf0ffeb, 0xf0ffea, 0xf0ffea, 0xc9eed5, 0xe9fce6, 0xefffe9, 0xefffe9, 0xeeffe8, 0xeeffe8, 0xc1ead0, 0x3aaa8a, 0x32a686, 0x31a587, 0x30a487, 0x30a487, 0x2fa287, 0x2fa287, 0x2ea187, 0x2da088, 0x2c9f88, 0x2c9e88, 0x2b9d88, 0x2b9d89, 0x2a9b89, 0x299b89, 0x299a89, 0x28998a, 0x279889, 0x27978a, 0x26968a, 0x25968a, 0x25948a, 0x202928, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x41b279, 0x43bd80, 0x43bc81, 0x42bb81, 0x41bb81, 0x40ba81, 0x40b982, 0x3fb882, 0x3fb782, 0x3eb682, 0x3db582, 0x3cb482, 0x3cb483, 0x3bb383, 0x3bb283, 0x3ab183, 0x60c19a, 0xe6fbe4, 0xeeffe9, 0xeeffe8, 0xeeffe8, 0xedffe7, 0xedffe7, 0xedffe7, 0xedffe6, 0xecffe6, 0xc1eacf, 0x39a98a, 0x32a686, 0x31a586, 0x30a486, 0x2fa386, 0x2fa287, 0x2ea187, 0x2ea087, 0x2d9f87, 0x2c9f88, 0x2b9e88, 0x2b9d88, 0x2a9c88, 0x2a9b89, 0x299a88, 0x289989, 0x279889, 0x279889, 0x269789, 0x26968a, 0x25958a, 0x24948a, 0x238880, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x4c4c4c, 0x4c4c4c, 0x4c4c4c, 0x4b4b4b, 0x4b4b4b, 0x4b4b4b, 0x4b4b4b, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x494949, 0x494949, 0x494949, 0x494949, 0x484848, 0x484848, 0x484848, 0x484848, 0x474747, 0x474747, 0x474747, 0x464646, 0x464646, 0x44976e, 0x43bd81, 0x42bc81, 0x42bb81, 0x41ba82, 0x40b982, 0x40b982, 0x3fb782, 0x3eb783, 0x3eb683, 0x3db583, 0x3cb483, 0x3cb384, 0x3bb283, 0x3ab284, 0x3ab084, 0x39b084, 0x5fc099, 0xe5fbe3, 0xedffe7, 0xedffe7, 0xedffe6, 0xedffe6, 0xecffe5, 0xecffe5, 0xc0ebce, 0x3aaa8a, 0x32a686, 0x31a587, 0x30a487, 0x30a487, 0x2fa287, 0x2fa288, 0x2ea188, 0x2da088, 0x2d9f88, 0x2c9e88, 0x2b9d88, 0x2b9d89, 0x2a9b89, 0x2a9b89, 0x299a89, 0x28998a, 0x27988a, 0x27978a, 0x26968a, 0x26968a, 0x25948a, 0x24948b, 0x2b726d, 0x393939, 0x393939, 0x383838, 0x383838, 0x383838, 0x383838, 0x373737, 0x373737, 0x373737, 0x373737, 0x363636, 0x363636, 0x363636, 0x353535, 0x353535, 0x353535, 0x353535, 0x343434, 0x343434, 0x343434, 0x343434, 0x333333, 0x333333, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0x86b9a0, 0x41bb81, 0x41ba81, 0x40b981, 0x40b981, 0x3fb881, 0x3eb782, 0x3eb682, 0x3db582, 0x3cb482, 0x3cb383, 0x3bb283, 0x3bb283, 0x3ab183, 0x39b083, 0x38af83, 0x38ae84, 0x37ad84, 0x5ebe99, 0xe3fbe0, 0xebffe4, 0xebffe3, 0xebffe3, 0xeaffe3, 0xc3eccf, 0x39a989, 0x31a586, 0x30a486, 0x30a486, 0x2fa386, 0x2fa287, 0x2ea187, 0x2da087, 0x2c9f87, 0x2c9e88, 0x2b9d88, 0x2b9d88, 0x2a9c88, 0x299b88, 0x299a88, 0x289989, 0x279889, 0x279789, 0x269689, 0x26968a, 0x25958a, 0x24948a, 0x23938a, 0x23928a, 0x5f8986, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xaeb8b3, 0x43bb82, 0x41ba82, 0x40b982, 0x40b882, 0x3fb782, 0x3eb783, 0x3db583, 0x3db583, 0x3cb483, 0x3cb383, 0x3bb283, 0x3ab184, 0x39b084, 0x39b084, 0x38ae84, 0x38ae85, 0x37ad85, 0x36ac85, 0x5cbd99, 0xe3fcdf, 0xeaffe2, 0xeaffe2, 0xc2ecce, 0x3bab8a, 0x31a686, 0x31a587, 0x30a487, 0x30a387, 0x2fa287, 0x2ea287, 0x2ea087, 0x2da088, 0x2c9f88, 0x2c9e88, 0x2b9d88, 0x2b9c89, 0x2a9b89, 0x299b89, 0x289989, 0x28998a, 0x279889, 0x27978a, 0x26968a, 0x25958a, 0x24948a, 0x24948b, 0x23928b, 0x26928b, 0x808584, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0x64b891, 0x40b982, 0x3fb882, 0x3fb782, 0x3eb682, 0x3db582, 0x3cb482, 0x3cb483, 0x3bb283, 0x3bb283, 0x3ab183, 0x39b084, 0x38af84, 0x38ae84, 0x37ad84, 0x37ad84, 0x36ab84, 0x35ab85, 0x34aa85, 0x55b996, 0x8ed3b3, 0x85cfaf, 0x38a989, 0x31a686, 0x30a486, 0x30a486, 0x2fa386, 0x2fa287, 0x2ea187, 0x2da087, 0x2d9f87, 0x2c9f88, 0x2b9d88, 0x2b9d88, 0x2a9c88, 0x2a9b89, 0x299a88, 0x289989, 0x279889, 0x279889, 0x269689, 0x26968a, 0x25958a, 0x24948a, 0x23938a, 0x23928b, 0x22918b, 0x468d89, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0x98b7a9, 0x40b882, 0x3fb782, 0x3eb783, 0x3db583, 0x3db583, 0x3cb483, 0x3cb384, 0x3bb283, 0x3ab184, 0x3ab084, 0x39b084, 0x38ae84, 0x38ae85, 0x37ad85, 0x36ac85, 0x36ab85, 0x35aa86, 0x34a986, 0x34a986, 0x33a786, 0x32a786, 0x32a686, 0x31a587, 0x30a487, 0x30a387, 0x2fa287, 0x2fa288, 0x2ea088, 0x2da088, 0x2c9f88, 0x2c9e88, 0x2b9d88, 0x2b9c89, 0x2a9b89, 0x299b89, 0x289989, 0x28998a, 0x27988a, 0x27978a, 0x26968a, 0x25958a, 0x25948a, 0x24948b, 0x23928b, 0x23928b, 0x22918b, 0x758887, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0x57b68c, 0x3db682, 0x3db582, 0x3cb482, 0x3cb383, 0x3bb283, 0x3ab283, 0x39b083, 0x39b084, 0x38af84, 0x38ae84, 0x37ad84, 0x36ac84, 0x36ab84, 0x35ab85, 0x34a985, 0x34a985, 0x33a885, 0x33a786, 0x32a686, 0x31a586, 0x30a486, 0x30a486, 0x2fa286, 0x2fa287, 0x2ea187, 0x2da087, 0x2c9f87, 0x2c9e88, 0x2b9d88, 0x2b9d88, 0x2a9b88, 0x299b88, 0x289a88, 0x289989, 0x279889, 0x279789, 0x269689, 0x25968a, 0x24948a, 0x24948a, 0x23938a, 0x23928b, 0x22918a, 0x22918b, 0x3f8e89, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0x98b6a9, 0x3db583, 0x3db583, 0x3cb483, 0x3cb383, 0x3bb283, 0x3ab184, 0x39b084, 0x39af84, 0x38ae84, 0x38ae85, 0x37ad85, 0x36ac85, 0x35ab85, 0x35aa86, 0x34a985, 0x34a886, 0x33a786, 0x32a786, 0x31a686, 0x31a587, 0x30a487, 0x30a387, 0x2fa287, 0x2ea187, 0x2ea088, 0x2da088, 0x2c9f88, 0x2c9e88, 0x2b9d88, 0x2b9c89, 0x2a9b89, 0x299a89, 0x289989, 0x28998a, 0x27988a, 0x27978a, 0x26968a, 0x25958a, 0x24948a, 0x24938b, 0x23928b, 0x23928b, 0x22918b, 0x23918b, 0x738887, 0x868686, 0x848484, 0x848484, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0x5fb491, 0x3cb383, 0x3bb283, 0x3ab283, 0x3ab183, 0x39b084, 0x38af84, 0x38ae84, 0x37ad84, 0x37ac85, 0x36ab84, 0x35ab85, 0x34aa85, 0x34a985, 0x33a885, 0x33a786, 0x32a686, 0x31a586, 0x30a486, 0x30a487, 0x2fa387, 0x2fa287, 0x2ea187, 0x2da087, 0x2c9f87, 0x2c9e88, 0x2b9d88, 0x2b9d88, 0x2a9c88, 0x299b89, 0x299a89, 0x289989, 0x279889, 0x279789, 0x269689, 0x25968a, 0x25958a, 0x24948a, 0x23938a, 0x23928b, 0x22918b, 0x22918b, 0x22918b, 0x498d89, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xa4b4ad, 0x40b385, 0x3bb284, 0x3ab184, 0x39b084, 0x39b084, 0x38ae84, 0x38ae85, 0x37ad85, 0x36ac85, 0x35ab85, 0x35aa86, 0x34a986, 0x34a986, 0x33a786, 0x32a786, 0x32a686, 0x31a587, 0x30a487, 0x30a387, 0x2fa287, 0x2fa288, 0x2ea088, 0x2da088, 0x2c9f88, 0x2c9e89, 0x2b9d88, 0x2b9c89, 0x2a9b89, 0x299b89, 0x289989, 0x28998a, 0x27988a, 0x27978a, 0x26968a, 0x25958b, 0x24948b, 0x24948b, 0x23928b, 0x23928b, 0x22918b, 0x22918b, 0x29918b, 0x7f8988, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0x89b2a2, 0x39b083, 0x39b084, 0x38af84, 0x38ae84, 0x37ad84, 0x36ac84, 0x35ab84, 0x35aa85, 0x34a985, 0x34a985, 0x33a885, 0x32a786, 0x31a686, 0x31a586, 0x30a486, 0x30a386, 0x2fa286, 0x2ea287, 0x2ea187, 0x2da087, 0x2c9f87, 0x2c9e88, 0x2b9d88, 0x2b9c88, 0x2a9b88, 0x299b88, 0x289a88, 0x289989, 0x279889, 0x279789, 0x269689, 0x25958a, 0x24948a, 0x24948a, 0x23938a, 0x23928b, 0x22918a, 0x22918b, 0x22918b, 0x22918b, 0x6e8a89, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0x72b19a, 0x39af84, 0x38ae84, 0x38ae85, 0x37ac85, 0x36ac85, 0x35ab85, 0x35aa86, 0x34a985, 0x34a886, 0x33a786, 0x32a786, 0x31a586, 0x31a587, 0x30a487, 0x30a387, 0x2fa287, 0x2ea188, 0x2da088, 0x2da088, 0x2c9e88, 0x2c9e88, 0x2b9d88, 0x2a9c89, 0x299b89, 0x299a89, 0x289989, 0x28998a, 0x27978a, 0x26978a, 0x26968a, 0x25958a, 0x24948a, 0x24938b, 0x23928b, 0x23928b, 0x22918b, 0x22918b, 0x22918b, 0x5d8d8b, 0x888888, 0x888888, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4d4d4d, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0x6daf98, 0x37ad84, 0x36ac85, 0x35ab84, 0x35aa85, 0x34a985, 0x34a985, 0x33a885, 0x32a786, 0x32a686, 0x31a586, 0x30a486, 0x30a387, 0x2fa287, 0x2fa287, 0x2ea187, 0x2da087, 0x2c9f87, 0x2c9e88, 0x2b9d88, 0x2b9c88, 0x2a9b88, 0x299b89, 0x289a89, 0x289989, 0x279889, 0x279789, 0x269689, 0x25958a, 0x24948a, 0x24948a, 0x23938a, 0x23928b, 0x22918b, 0x22918b, 0x22918b, 0x22918b, 0x568d8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0x73ae9a, 0x36ac85, 0x35ab85, 0x35aa86, 0x34a986, 0x34a886, 0x33a786, 0x32a786, 0x31a686, 0x31a587, 0x30a487, 0x30a387, 0x2fa287, 0x2ea188, 0x2da088, 0x2da088, 0x2c9f88, 0x2c9e89, 0x2b9d88, 0x2a9c89, 0x2a9b89, 0x299a89, 0x289989, 0x28998a, 0x27988a, 0x27978a, 0x26968a, 0x25958b, 0x24948b, 0x24938b, 0x23928b, 0x23928b, 0x22918b, 0x22918b, 0x22918b, 0x588f8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4d4d4d, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0x7aad9d, 0x34a985, 0x34a985, 0x33a785, 0x32a786, 0x31a686, 0x31a586, 0x30a486, 0x30a387, 0x2fa286, 0x2ea287, 0x2ea187, 0x2da087, 0x2c9f87, 0x2c9e88, 0x2b9d88, 0x2b9c88, 0x2a9b88, 0x299b88, 0x289a89, 0x289989, 0x279889, 0x279789, 0x269689, 0x25958a, 0x24948a, 0x24948a, 0x23938a, 0x23928b, 0x22918b, 0x22918b, 0x22918b, 0x22918b, 0x608e8b, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0x90ada4, 0x3da989, 0x33a786, 0x32a686, 0x31a586, 0x31a587, 0x30a487, 0x30a387, 0x2fa287, 0x2ea188, 0x2da088, 0x2d9f88, 0x2c9e88, 0x2c9e88, 0x2b9d88, 0x2a9c89, 0x299b89, 0x299a89, 0x289989, 0x28988a, 0x27978a, 0x26978a, 0x25968a, 0x25958b, 0x24948a, 0x24938b, 0x23928b, 0x22918b, 0x22918b, 0x22918b, 0x2c918b, 0x758f8d, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4d4d4d, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xa2acaa, 0x5fa894, 0x31a586, 0x30a486, 0x30a387, 0x2fa287, 0x2fa287, 0x2ea087, 0x2da087, 0x2c9f87, 0x2c9e88, 0x2b9d88, 0x2b9c88, 0x2a9b88, 0x299b89, 0x289a89, 0x289989, 0x279889, 0x27978a, 0x269689, 0x25958a, 0x24948a, 0x24948a, 0x23938a, 0x23928b, 0x22918b, 0x22918b, 0x22918b, 0x4c918d, 0x868e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0x8eaaa3, 0x4fa590, 0x30a387, 0x2fa287, 0x2ea188, 0x2da088, 0x2d9f88, 0x2c9e88, 0x2c9e89, 0x2b9d88, 0x2a9c89, 0x2a9b89, 0x299a89, 0x289989, 0x28988a, 0x27978a, 0x26978a, 0x26968a, 0x25958b, 0x24948b, 0x24938b, 0x23928b, 0x22918b, 0x22918b, 0x43928d, 0x7b9190, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xababab, 0xababab, 0xa9a9a9, 0x93a8a3, 0x5ea394, 0x36a08a, 0x2c9f87, 0x2c9e88, 0x2b9d88, 0x2a9c88, 0x299b88, 0x299a89, 0x289989, 0x289989, 0x279889, 0x269789, 0x269689, 0x25958a, 0x24948a, 0x24938a, 0x23928a, 0x23928b, 0x2d918b, 0x53928f, 0x819291, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0x89a49f, 0x62a195, 0x389d8b, 0x2a9c89, 0x299b89, 0x299a89, 0x289989, 0x28988a, 0x27978a, 0x26968a, 0x25958a, 0x25958a, 0x24948a, 0x36948d, 0x599491, 0x7d9594, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x888888, 0x888888, 0x868686, 0x868686, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0x9ba2a1, 0x8ea09d, 0x809e9a, 0x749c97, 0x689b95, 0x679a94, 0x729a96, 0x7e9997, 0x889998, 0x949998, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xc6c6c6, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x868686, 0x868686, 0x848484, 0x848484, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x565656, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x9a9a9a, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa3a3a3, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x464646, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x797979, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x999999, 0x979797, 0x979797, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x353535, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xbfbfbf, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xababab, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x949494, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x464646, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x464646, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0x9f9f9f, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x888888, 0x888888, 0x868686, 0x868686, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x676767, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x7f7f7f, 0xbababa, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x626262, 0x484848, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x3a3a3a, 0x4b4b4b, 0x4b4b4b, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x494949, 0x494949, 0x494949, 0x494949, 0x484848, 0x484848, 0x484848, 0x484848, 0x474747, 0x474747, 0x474747, 0x464646, 0x464646, 0x464646, 0x464646, 0x454545, 0x454545, 0x454545, 0x454545, 0x444444, 0x444444, 0x444444, 0x444444, 0x434343, 0x434343, 0x434343, 0x424242, 0x424242, 0x424242, 0x424242, 0x414141, 0x414141, 0x414141, 0x414141, 0x404040, 0x404040, 0x404040, 0x404040, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3e3e3e, 0x3e3e3e, 0x3e3e3e, 0x3e3e3e, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 0x3b3b3b, 0x3b3b3b, 0x3b3b3b, 0x3a3a3a, 0x3a3a3a, 0x3a3a3a, 0x3a3a3a, 0x393939, 0x393939, 0x393939, 0x393939, 0x383838, 0x383838, 0x383838, 0x383838, 0x373737, 0x373737, 0x373737, 0x373737, 0x363636, 0x363636, 0x363636, 0x353535, 0x353535, 0x353535, 0x353535, 0x272727, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020 +}; \ No newline at end of file diff --git a/dev/Boot/BootKit/Rsrc/zka_no_disk.rsrc b/dev/Boot/BootKit/Rsrc/zka_no_disk.rsrc new file mode 100644 index 00000000..31689e63 --- /dev/null +++ b/dev/Boot/BootKit/Rsrc/zka_no_disk.rsrc @@ -0,0 +1,116 @@ +#define ZKA_NO_DISK_HEIGHT 110 +#define ZKA_NO_DISK_WIDTH 110 + +// array size is 36300 +static const unsigned int zka_no_disk[] = { + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x333333, 0x565656, 0x636363, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6a6a6a, 0x5f5f5f, 0x4d4d4d, 0x2b2b2b, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x464646, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x6a6a6a, 0x3b3b3b, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x3d3d3d, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x252525, 0x676767, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x606060, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x3d3d3d, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x616161, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x525252, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x242424, 0x767676, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x676767, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x393939, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7e7e7e, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4e4e4e, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x3f3f3f, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x666666, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x555555, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x222222, 0x7c7c7c, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x6d6d6d, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x393939, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x868686, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x515151, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x404040, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x6a6a6a, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x828282, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0xa69a77, 0xbea35a, 0xc0a458, 0xa69a77, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x727272, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x383838, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0xab9d77, 0xebb626, 0xffbe0c, 0xffbd0c, 0xffbd0c, 0xffbc0c, 0xecb524, 0xaa9c78, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x8e8e8e, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x525252, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0xa49b83, 0xfcbc0f, 0xfebc0c, 0xffbc0c, 0xfebc0b, 0xffbb0c, 0xfebb0b, 0xffba0b, 0xfcb90e, 0xa49b83, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x414141, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x6e6e6e, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0xe8b52c, 0xffbd0c, 0xffbc0c, 0xffbc0c, 0xffbb0c, 0xffbb0c, 0xffba0b, 0xffba0c, 0xffb90b, 0xe8b22c, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x5c5c5c, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x868686, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0xbca66b, 0xfebb0b, 0xffbb0b, 0xfeba0b, 0xffba0b, 0xfeba0b, 0xffb90b, 0xfeb80b, 0xffb80b, 0xfeb80b, 0xffb70b, 0xbda46a, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x787878, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x373737, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0xa09f9b, 0xf3b81e, 0xffbb0c, 0xffbb0c, 0xffba0b, 0xffba0c, 0xffb90b, 0xffb90b, 0xffb80b, 0xffb80b, 0xffb70b, 0xffb70b, 0xf3b31d, 0xa09e9b, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x959595, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x545454, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xcbac5c, 0xffba0b, 0xfeba0b, 0xffb90b, 0xfeb90b, 0xffb80b, 0xfeb80b, 0xffb70b, 0xfeb70a, 0xffb60b, 0xfeb60a, 0xffb60a, 0xfeb50a, 0xccaa5b, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0x444444, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x707070, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xaaa699, 0xfab914, 0xffba0c, 0xffb90b, 0xffb90c, 0xffb80b, 0xffb80b, 0xffb70b, 0xffb70b, 0xffb60b, 0xffb60b, 0xffb50b, 0xffb50b, 0xffb40a, 0xfab313, 0xa9a498, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0x5e5e5e, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x8b8b8b, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xd9b14c, 0xfeb80b, 0xfeb80b, 0xfeb70b, 0xffb70b, 0xfeb60a, 0xfeb60a, 0xfeb60a, 0xffb50a, 0xfeb50a, 0xfeb40a, 0xfeb40a, 0xfeb30a, 0xfeb30a, 0xfeb20a, 0xd9ac4a, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0x7c7c7c, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x363636, 0xa7a7a7, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xb5aa91, 0xfeb80d, 0xffb80b, 0xffb80b, 0xffb70b, 0xffb70b, 0xffb60b, 0xffb60b, 0xffb50a, 0xffb50b, 0xffb40a, 0xffb40a, 0xffb30a, 0xffb30a, 0xffb20a, 0xffb20a, 0xfeb10c, 0xb5aa92, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0x9c9c9c, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x545454, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xe6b43a, 0xffb70b, 0xfeb60a, 0xffb60b, 0xfeb60a, 0xffb50a, 0xfeb50a, 0xffb40a, 0xfeb40a, 0xffb40a, 0xfeb30a, 0xffb20a, 0xfeb20a, 0xffb20a, 0xfeb109, 0xffb109, 0xfeb009, 0xe6ae39, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0x464646, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x717171, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xc2b085, 0xffb70b, 0xffb70b, 0xffb60b, 0xffb60b, 0xffb50b, 0xffb50b, 0xffb40a, 0xffb40b, 0xffb30a, 0xffb30a, 0xffb20a, 0xffb20a, 0xffb10a, 0xffb10a, 0xffb00a, 0xffb00a, 0xffaf0a, 0xffaf0a, 0xc2ae85, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0x636363, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x8e8e8e, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb1b0af, 0xf1b526, 0xfeb50a, 0xffb50a, 0xfeb40a, 0xfeb40a, 0xfeb40a, 0xffb30a, 0xfeb30a, 0xfeb20a, 0xfeb209, 0xfeb10a, 0xfeb109, 0xfeb009, 0xfeb009, 0xfeb009, 0xfeaf09, 0xfeaf09, 0xfeae09, 0xfeae09, 0xf1ad25, 0xb1b0af, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0x818181, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x343434, 0xacacac, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xd0b472, 0xffb60b, 0xffb50a, 0xffb50b, 0xffb40a, 0xffb40a, 0xffb30a, 0xffb30a, 0xffb20a, 0xdc9e15, 0x90712e, 0x91712e, 0xdd9c15, 0xffb00a, 0xffaf09, 0xffaf0a, 0xffae09, 0xffae09, 0xffad09, 0xffad09, 0xffac09, 0xd0b071, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xa3a3a3, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x545454, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb8b5ae, 0xf8b519, 0xffb40a, 0xfeb40a, 0xffb30a, 0xfeb30a, 0xffb20a, 0xfeb20a, 0xffb10a, 0xfeb109, 0x564f40, 0x444444, 0x444444, 0x564e3e, 0xfeaf09, 0xfeae09, 0xffae09, 0xfead09, 0xfead09, 0xfeac08, 0xffac09, 0xfeab08, 0xf8ac17, 0xb8b5ae, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0x484848, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x727272, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xdcb660, 0xffb40a, 0xffb40b, 0xffb30a, 0xffb30a, 0xffb20a, 0xffb20a, 0xffb10a, 0xffb10a, 0xeba510, 0x444444, 0x434343, 0x434343, 0x424242, 0xeca30f, 0xffad09, 0xffad09, 0xffac09, 0xffac09, 0xffac09, 0xffab09, 0xffab09, 0xffaa09, 0xdcb15e, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0x676767, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x909090, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xc1b9a8, 0xfcb30f, 0xfeb20a, 0xfeb20a, 0xfeb109, 0xfeb10a, 0xfeb009, 0xfeb009, 0xfeb009, 0xfeaf09, 0xe6a110, 0x424242, 0x424242, 0x414141, 0x414141, 0xe69e10, 0xfeac08, 0xfeac08, 0xfeab08, 0xfeab08, 0xfeaa08, 0xfeaa08, 0xfea908, 0xfea908, 0xfca90d, 0xc1b8a8, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0x868686, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x313131, 0xb0b0b0, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xe6b74c, 0xffb30a, 0xffb20a, 0xffb20a, 0xffb10a, 0xffb10a, 0xffb009, 0xffb00a, 0xffaf09, 0xffaf09, 0xe7a010, 0x414141, 0x414141, 0x414141, 0x404040, 0xe79e10, 0xffab09, 0xffab09, 0xffaa08, 0xffaa09, 0xffa908, 0xffa908, 0xffa808, 0xffa808, 0xffa808, 0xe7af4b, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xa9a9a9, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x525252, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xcbbc9b, 0xfeb209, 0xffb10a, 0xfeb109, 0xffb009, 0xfeb009, 0xffaf09, 0xfeaf09, 0xfeae09, 0xfeae09, 0xffae09, 0xe69f10, 0x404040, 0x3f3f3f, 0x3f3f3f, 0x3e3e3e, 0xe69d0f, 0xfeaa08, 0xfeaa08, 0xfea908, 0xfea908, 0xfea808, 0xfea808, 0xfea707, 0xfea708, 0xfea607, 0xfea607, 0xcbba9b, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0x494949, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x727272, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xf1b533, 0xffb10a, 0xffb10a, 0xffb00a, 0xffb00a, 0xffaf09, 0xffaf0a, 0xffae09, 0xffae09, 0xffad09, 0xffad09, 0xe79e10, 0x3f3f3f, 0x3e3e3e, 0x3e3e3e, 0x3d3d3d, 0xe79c10, 0xffaa08, 0xffa909, 0xffa908, 0xffa808, 0xffa808, 0xffa708, 0xffa708, 0xffa608, 0xffa608, 0xffa608, 0xf1ab31, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0x6a6a6a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x929292, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xd6be89, 0xfeb009, 0xfeaf09, 0xfeaf09, 0xfeae09, 0xfeae09, 0xfeae09, 0xfead09, 0xfead08, 0xfeac09, 0xfeac08, 0xfeab08, 0xe69d0f, 0x3d3d3d, 0x3c3c3c, 0x3c3c3c, 0x3b3b3b, 0xe69b0e, 0xfea808, 0xfea808, 0xfea707, 0xfea708, 0xfea607, 0xfea607, 0xfea507, 0xfea507, 0xfea407, 0xfea407, 0xfea307, 0xd6ba89, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0x8c8c8c, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x2e2e2e, 0xb4b4b4, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc9c8c6, 0xf8b321, 0xffb00a, 0xffaf09, 0xffaf09, 0xffae09, 0xffae09, 0xffad09, 0xffad09, 0xffac09, 0xffac09, 0xffab09, 0xffab09, 0xe79c0f, 0x3c3c3c, 0x3c3c3c, 0x3b3b3b, 0x3b3b3b, 0xe69a0e, 0xffa708, 0xffa708, 0xffa608, 0xffa608, 0xffa608, 0xffa508, 0xfea507, 0xffa407, 0xffa407, 0xffa307, 0xfea307, 0xf8a71f, 0xc8c7c5, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xafafaf, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x505050, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xe1be76, 0xfeaf09, 0xfeae09, 0xfeae09, 0xffad09, 0xfead09, 0xfeac09, 0xfeac08, 0xffac09, 0xfeab08, 0xfeab08, 0xfeaa08, 0xfeaa08, 0xe69b0e, 0x3b3b3b, 0x3a3a3a, 0x3a3a3a, 0x393939, 0xe5990e, 0xfea607, 0xfea607, 0xfea507, 0xfea507, 0xfea407, 0xfea407, 0xfea307, 0xfea307, 0xfea207, 0xfea207, 0xfea106, 0xfea107, 0xe0b774, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0x4b4b4b, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x717171, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xd0cbc2, 0xfbb117, 0xffae09, 0xffae09, 0xffad09, 0xffad09, 0xffac09, 0xffac09, 0xffab09, 0xffab09, 0xffaa08, 0xffaa09, 0xffa908, 0xffa909, 0xe69a0e, 0x3a3a3a, 0x393939, 0x393939, 0x383838, 0xe6980e, 0xffa608, 0xffa508, 0xffa507, 0xffa408, 0xffa407, 0xffa407, 0xffa307, 0xffa307, 0xffa207, 0xffa207, 0xffa107, 0xffa107, 0xfba315, 0xd0cbc2, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0x6e6e6e, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x939393, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xe9bc60, 0xfead09, 0xfeac08, 0xfeac09, 0xfeac08, 0xfeab08, 0xfeab08, 0xfeaa08, 0xfeaa08, 0xfea908, 0xfea908, 0xfea808, 0xfea808, 0xfea808, 0xe5990d, 0x383838, 0x373737, 0x373737, 0x363636, 0xe5970d, 0xfea407, 0xfea407, 0xfea307, 0xfea307, 0xfea206, 0xfea207, 0xfea106, 0xfea106, 0xfea006, 0xfea006, 0xfe9f06, 0xfe9f06, 0xfe9e06, 0xe9b45f, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0x929292, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x2a2a2a, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xb0a691, 0xfdad0c, 0xffad09, 0xffac09, 0xffac09, 0xffab09, 0xffab09, 0xffaa08, 0xffaa08, 0xffa908, 0xffa908, 0xfea808, 0xffa808, 0xffa708, 0xffa708, 0xe5980e, 0x373737, 0x363636, 0x363636, 0x353535, 0xe6960d, 0xfea407, 0xffa307, 0xfea307, 0xffa207, 0xfea207, 0xffa107, 0xfea106, 0xffa007, 0xfea006, 0xffa007, 0xfe9f06, 0xff9f06, 0xfe9e06, 0xfd9e09, 0xb0a491, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xb88010, 0xfeac08, 0xffab09, 0xfeab08, 0xfeaa08, 0xfeaa08, 0xfea908, 0xfea908, 0xfea808, 0xfea808, 0xfea808, 0xfea707, 0xfea708, 0xfea607, 0xfea607, 0xf8a208, 0x3a3834, 0x353535, 0x353535, 0x393733, 0xf89f08, 0xfea207, 0xfea207, 0xfea106, 0xfea106, 0xfea006, 0xfea006, 0xfe9f06, 0xfe9f06, 0xfe9e06, 0xfe9e06, 0xfe9d06, 0xfe9d06, 0xfe9d05, 0xfe9c06, 0xb7740e, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x523f1b, 0xffac09, 0xffab09, 0xffab09, 0xffaa08, 0xffaa09, 0xffa908, 0xffa908, 0xffa808, 0xffa808, 0xffa708, 0xffa708, 0xffa608, 0xffa608, 0xffa508, 0xffa508, 0xffa407, 0xa9751b, 0x353434, 0x353533, 0xab7519, 0xffa207, 0xffa207, 0xffa107, 0xffa107, 0xffa007, 0xffa007, 0xffa007, 0xfe9f06, 0xff9f06, 0xff9e06, 0xff9e06, 0xfe9d06, 0xff9d06, 0xff9c06, 0xff9c06, 0xfe9b06, 0x523b1a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd38f0d, 0xfeaa08, 0xfeaa08, 0xfea908, 0xfea908, 0xfea808, 0xfea808, 0xfea708, 0xfea707, 0xfea607, 0xfea607, 0xfea607, 0xfea507, 0xfea507, 0xfea407, 0xfea407, 0xfea307, 0xfea307, 0xe9970a, 0xea970b, 0xfea106, 0xfea106, 0xfea006, 0xfea006, 0xfe9f06, 0xfe9f06, 0xfe9e06, 0xfe9e06, 0xfe9d05, 0xfe9d06, 0xfe9c05, 0xfe9c06, 0xfe9b05, 0xfe9b05, 0xfe9a05, 0xfe9a05, 0xfe9905, 0xd3810a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x715318, 0xffaa08, 0xffaa08, 0xffa908, 0xffa908, 0xffa808, 0xffa808, 0xffa708, 0xffa708, 0xffa608, 0xffa608, 0xffa507, 0xffa508, 0xfea407, 0xffa407, 0xffa307, 0xffa307, 0xfea207, 0xffa207, 0xffa207, 0xffa107, 0xfea106, 0xffa007, 0xfea006, 0xff9f07, 0xfe9f06, 0xff9e06, 0xfe9e06, 0xff9e06, 0xfe9d06, 0xff9d06, 0xfe9c06, 0xff9c06, 0xfe9b05, 0xff9b06, 0xfe9a05, 0xff9a05, 0xfe9905, 0xff9905, 0x704b16, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x27241f, 0xe89b0b, 0xfea908, 0xfea808, 0xfea808, 0xfea708, 0xfea707, 0xfea608, 0xfea607, 0xfea607, 0xfea507, 0xfea507, 0xfea407, 0xfea407, 0xfea307, 0xfea307, 0xfea207, 0xfea207, 0xfea106, 0xfea106, 0xfea006, 0xfea006, 0xfe9f06, 0xfe9f06, 0xfe9e06, 0xfe9e06, 0xfe9d06, 0xfe9d06, 0xfe9c05, 0xfe9c06, 0xfe9b05, 0xfe9b05, 0xfe9b05, 0xfe9a05, 0xfe9a05, 0xfe9905, 0xfe9905, 0xfe9805, 0xfe9804, 0xfe9705, 0xe78b07, 0x27241f, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x4c4c4c, 0x4c4c4c, 0x4c4c4c, 0x4b4b4b, 0x4b4b4b, 0x4b4b4b, 0x4b4b4b, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x494949, 0x494949, 0x494949, 0x494949, 0x484848, 0x484848, 0x484848, 0x484848, 0x474747, 0x474747, 0x474747, 0x464646, 0x464646, 0x464646, 0x464646, 0x454545, 0x9f7627, 0xffa908, 0xffa808, 0xffa808, 0xffa708, 0xffa708, 0xffa608, 0xffa608, 0xffa508, 0xffa508, 0xffa407, 0xffa408, 0xffa307, 0xffa307, 0xffa207, 0xffa207, 0xffa207, 0xffa107, 0xffa107, 0xffa007, 0xffa007, 0xff9f07, 0xff9f06, 0xff9e06, 0xff9e06, 0xff9e06, 0xff9d06, 0xff9d06, 0xff9c06, 0xff9c06, 0xfe9b06, 0xff9b06, 0xff9a05, 0xff9a06, 0xfe9905, 0xff9905, 0xff9805, 0xff9805, 0xfe9705, 0xff9705, 0xfe9605, 0x996620, 0x3a3a3a, 0x3a3a3a, 0x3a3a3a, 0x393939, 0x393939, 0x393939, 0x393939, 0x383838, 0x383838, 0x383838, 0x383838, 0x373737, 0x373737, 0x373737, 0x373737, 0x363636, 0x363636, 0x363636, 0x353535, 0x353535, 0x353535, 0x353535, 0x343434, 0x343434, 0x343434, 0x343434, 0x333333, 0x333333, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xbbb4a6, 0xfba80e, 0xfea708, 0xfea607, 0xfea607, 0xfea607, 0xfea507, 0xfea507, 0xfea407, 0xfea407, 0xfea307, 0xfea307, 0xfea207, 0xfea206, 0xfea207, 0xfea106, 0xfea106, 0xfea006, 0xfea006, 0xfe9f06, 0xe4910b, 0xa97016, 0xa97016, 0xe69009, 0xfe9d06, 0xfe9c05, 0xfe9c05, 0xfe9b05, 0xfe9b05, 0xfe9a05, 0xfe9a05, 0xfe9905, 0xfe9905, 0xfe9805, 0xfe9805, 0xfe9704, 0xfe9704, 0xfe9704, 0xfe9604, 0xfe9604, 0xfe9504, 0xfe9504, 0xf99409, 0x92897d, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xe2ad4c, 0xffa708, 0xffa708, 0xfea608, 0xffa608, 0xffa507, 0xffa508, 0xfea407, 0xffa407, 0xfea307, 0xffa307, 0xfea207, 0xffa207, 0xfea107, 0xffa107, 0xfea006, 0xffa007, 0xfe9f06, 0xff9f06, 0xab7115, 0x2f2e2d, 0x2c2c2c, 0x2c2c2c, 0x2d2c2b, 0xac7014, 0xfe9c06, 0xff9b06, 0xfe9b05, 0xff9a06, 0xfe9a05, 0xff9a05, 0xfe9905, 0xff9905, 0xfe9805, 0xff9805, 0xfe9705, 0xff9705, 0xfe9605, 0xff9605, 0xfe9504, 0xfe9504, 0xfe9404, 0xff9404, 0xcf8f38, 0x888888, 0x868686, 0x868686, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xc2b399, 0xfea609, 0xfea607, 0xfea507, 0xfea507, 0xfea407, 0xfea407, 0xfea407, 0xfea307, 0xfea307, 0xfea206, 0xfea207, 0xfea106, 0xfea106, 0xfea006, 0xfea006, 0xfe9f06, 0xfe9f06, 0xfe9e06, 0xf99b07, 0x322f2a, 0x2b2b2b, 0x2b2b2b, 0x2a2a2a, 0x292929, 0x332f28, 0xfc9905, 0xfe9a05, 0xfe9905, 0xfe9905, 0xfe9805, 0xfe9805, 0xfe9704, 0xfe9705, 0xfe9704, 0xfe9604, 0xfe9604, 0xfe9504, 0xfe9504, 0xfe9404, 0xfe9404, 0xfe9304, 0xfe9304, 0xfe9304, 0xfd9204, 0x9b8971, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xecaa33, 0xffa608, 0xffa508, 0xffa508, 0xffa407, 0xffa407, 0xffa307, 0xffa307, 0xffa207, 0xffa207, 0xffa107, 0xffa107, 0xffa007, 0xffa007, 0xffa006, 0xff9f07, 0xfe9e06, 0xff9e06, 0xff9e06, 0xe18d0b, 0x2b2b2b, 0x2a2a2a, 0x2a2a2a, 0x292929, 0x292929, 0x282828, 0xe18b0a, 0xff9a06, 0xfe9905, 0xff9905, 0xfe9805, 0xff9805, 0xfe9705, 0xff9705, 0xfe9605, 0xff9605, 0xfe9504, 0xff9505, 0xfe9404, 0xff9404, 0xfe9304, 0xff9304, 0xfe9204, 0xff9204, 0xfe9104, 0xe18f25, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xccb284, 0xfea407, 0xfea407, 0xfea407, 0xfea307, 0xfea307, 0xfea207, 0xfea206, 0xfea107, 0xfea106, 0xfea006, 0xfea006, 0xfea006, 0xfe9f06, 0xfe9f06, 0xfe9e06, 0xfe9e06, 0xfe9d05, 0xfe9d06, 0xfe9c05, 0xfb9a06, 0x2f2c28, 0x292929, 0x282828, 0x282828, 0x272727, 0x302c25, 0xfb9705, 0xfe9805, 0xfe9704, 0xfe9704, 0xfe9604, 0xfe9604, 0xfe9504, 0xfe9504, 0xfe9504, 0xfe9404, 0xfe9404, 0xfe9304, 0xfe9303, 0xfe9204, 0xfe9203, 0xfe9103, 0xfe9103, 0xfe9103, 0xfe9003, 0xfe9003, 0xa88960, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xbab9b7, 0xf5a821, 0xfea407, 0xffa407, 0xffa307, 0xffa307, 0xfea207, 0xffa207, 0xffa107, 0xffa107, 0xfea006, 0xffa007, 0xfe9f06, 0xff9f06, 0xfe9e06, 0xff9e06, 0xfe9d06, 0xff9d06, 0xfe9c06, 0xff9c06, 0xfe9c06, 0xff9b06, 0xa66c13, 0x282828, 0x272727, 0x272727, 0x262626, 0xa96b12, 0xfe9805, 0xff9805, 0xfe9705, 0xff9705, 0xfe9605, 0xff9605, 0xfe9504, 0xff9504, 0xfe9404, 0xff9404, 0xfe9304, 0xff9304, 0xfe9204, 0xff9204, 0xfe9104, 0xfe9104, 0xfe9003, 0xff9004, 0xfe8f03, 0xfe8f03, 0xed8d16, 0x878684, 0x848484, 0x848484, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xd5b06e, 0xfea307, 0xfea307, 0xfea207, 0xfea206, 0xfea207, 0xfea106, 0xfea106, 0xfea006, 0xfea006, 0xfe9f06, 0xfe9f06, 0xfe9e06, 0xfe9e06, 0xfe9d06, 0xfe9d06, 0xfe9c05, 0xfe9c06, 0xfe9b05, 0xfe9b05, 0xfe9a05, 0xfe9a05, 0xfe9905, 0xc0780e, 0x6e4c1b, 0x714d1a, 0xc2780d, 0xfe9705, 0xfe9604, 0xfe9604, 0xfe9504, 0xfe9504, 0xfe9504, 0xfe9404, 0xfe9404, 0xfe9304, 0xfe9304, 0xfe9204, 0xfe9203, 0xfe9104, 0xfe9103, 0xfe9103, 0xfe9003, 0xfe9003, 0xfe8f03, 0xfe8f03, 0xfe8e03, 0xfe8e03, 0xfe8d03, 0xb68850, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xf8a517, 0xffa307, 0xffa207, 0xffa207, 0xffa107, 0xffa107, 0xffa007, 0xffa007, 0xff9f06, 0xff9f07, 0xff9e06, 0xff9e06, 0xff9d06, 0xff9d06, 0xff9d06, 0xff9c06, 0xff9c06, 0xff9b06, 0xfe9b05, 0xff9a06, 0xff9a05, 0xff9a06, 0xfe9905, 0xff9905, 0xff9805, 0xff9805, 0xfe9705, 0xff9705, 0xfe9605, 0xff9605, 0xfe9504, 0xff9505, 0xfe9404, 0xff9404, 0xfe9304, 0xff9304, 0xfe9204, 0xff9204, 0xfe9104, 0xff9104, 0xfe9004, 0xff9004, 0xfe8f03, 0xff8f03, 0xfe8e03, 0xff8e03, 0xfe8d03, 0xff8d03, 0xfe8d03, 0xf38c0f, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xceb282, 0xfea206, 0xfea106, 0xfea106, 0xfea006, 0xfea006, 0xfe9f06, 0xfe9f06, 0xfe9e06, 0xfe9e06, 0xfe9e06, 0xfe9d05, 0xfe9d06, 0xfe9c05, 0xfe9c05, 0xfe9b05, 0xfe9b05, 0xfe9a05, 0xfe9a05, 0xfe9905, 0xfe9905, 0xfe9805, 0xfe9805, 0xfe9704, 0xfe9704, 0xfe9604, 0xfe9604, 0xfe9504, 0xfe9504, 0xfe9404, 0xfe9404, 0xfe9304, 0xfe9304, 0xfe9203, 0xfe9204, 0xfe9103, 0xfe9103, 0xfe9103, 0xfe9003, 0xfe9003, 0xfe8f03, 0xfe8f03, 0xfe8e03, 0xfe8e02, 0xfe8d03, 0xfe8d02, 0xfe8d02, 0xfe8c02, 0xfe8c02, 0xfe8b02, 0xfe8b02, 0xa7865e, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xd9af69, 0xfea107, 0xffa107, 0xfea006, 0xffa007, 0xfe9f06, 0xff9f06, 0xfe9e06, 0xff9e06, 0xfe9d06, 0xff9d06, 0xfe9c06, 0xff9c06, 0xfe9b06, 0xff9b06, 0xfe9a05, 0xff9a05, 0xfe9a05, 0xff9905, 0xfe9805, 0xff9805, 0xfe9805, 0xff9705, 0xfe9705, 0xff9605, 0xfe9604, 0xff9605, 0xfe9504, 0xfe9504, 0xfe9404, 0xff9404, 0xfe9304, 0xfe9304, 0xfe9204, 0xff9204, 0xfe9103, 0xfe9104, 0xfe9003, 0xfe9004, 0xfe8f03, 0xfe8f03, 0xfe8e03, 0xfe8e03, 0xfe8d03, 0xfe8d03, 0xfe8c03, 0xfe8c03, 0xfe8b02, 0xfe8b03, 0xfe8a02, 0xfe8a02, 0x824f13, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4d4d4d, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xd7ae6c, 0xfea006, 0xfe9f06, 0xfe9f06, 0xfe9e06, 0xfe9e06, 0xfe9e06, 0xfe9d05, 0xfe9d06, 0xfe9c05, 0xfe9c06, 0xfe9b05, 0xfe9b05, 0xfe9a05, 0xfe9a05, 0xfe9905, 0xfe9905, 0xfe9805, 0xfe9805, 0xfe9704, 0xfe9705, 0xfe9604, 0xfe9604, 0xfe9504, 0xfe9504, 0xfe9404, 0xfe9404, 0xfe9304, 0xfe9304, 0xfe9204, 0xfe9204, 0xfe9203, 0xfe9103, 0xfe9103, 0xfe9003, 0xfe9003, 0xfe8f03, 0xfe8f03, 0xfe8f03, 0xfe8e03, 0xfe8e03, 0xfe8d02, 0xfe8d03, 0xfe8c02, 0xfe8c02, 0xfe8b02, 0xfe8b02, 0xfe8a02, 0xfe8a02, 0xfe8902, 0xfe8902, 0x7e4c13, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xc8b596, 0xff9f06, 0xff9f07, 0xfe9e06, 0xff9e06, 0xff9d06, 0xff9d06, 0xfe9c06, 0xff9c06, 0xff9b06, 0xff9b06, 0xfe9a05, 0xff9a06, 0xfe9a05, 0xff9905, 0xfe9905, 0xff9805, 0xfe9805, 0xff9705, 0xfe9705, 0xff9605, 0xfe9605, 0xff9605, 0xfe9504, 0xff9504, 0xfe9404, 0xff9404, 0xfe9304, 0xff9304, 0xfe9204, 0xff9204, 0xfe9104, 0xff9104, 0xfe9003, 0xff9004, 0xfe8f03, 0xff8f03, 0xfe8e03, 0xff8e03, 0xfe8d03, 0xff8d03, 0xfe8c03, 0xff8c03, 0xfe8b03, 0xfe8b03, 0xfe8a02, 0xff8a03, 0xfe8902, 0xfe8902, 0xfe8902, 0xff8802, 0x4c351a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4d4d4d, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xeca433, 0xfe9d06, 0xfe9d05, 0xfe9c06, 0xfe9c05, 0xfe9c05, 0xfe9b05, 0xfe9b05, 0xfe9a05, 0xfe9a05, 0xfe9905, 0xfe9905, 0xfe9805, 0xfe9805, 0xfe9704, 0xfe9704, 0xfe9604, 0xfe9604, 0xfe9504, 0xfe9504, 0xfe9404, 0xfe9404, 0xfe9304, 0xfe9304, 0xfe9203, 0xfe9204, 0xfe9103, 0xfe9103, 0xfe9003, 0xfe9003, 0xfe8f03, 0xfe8f03, 0xfe8f03, 0xfe8e03, 0xfe8e02, 0xfe8d03, 0xfe8d02, 0xfe8c03, 0xfe8c02, 0xfe8b02, 0xfe8b02, 0xfe8b02, 0xfe8a02, 0xfe8a02, 0xfe8902, 0xfe8902, 0xfe8801, 0xfe8802, 0xfe8701, 0xe17b0a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xbeb7ad, 0xf3a224, 0xfe9c06, 0xff9c06, 0xfe9b06, 0xff9b06, 0xfe9a05, 0xff9a05, 0xfe9905, 0xff9905, 0xfe9805, 0xff9805, 0xfe9705, 0xff9705, 0xfe9705, 0xff9605, 0xfe9604, 0xff9505, 0xfe9504, 0xff9404, 0xfe9404, 0xff9404, 0xfe9304, 0xfe9304, 0xfe9204, 0xff9204, 0xfe9103, 0xfe9104, 0xfe9003, 0xff9004, 0xfe8f03, 0xfe8f03, 0xfe8e03, 0xfe8e03, 0xfe8d03, 0xfe8d03, 0xfe8c03, 0xfe8c03, 0xfe8b02, 0xfe8b03, 0xfe8a02, 0xfe8a02, 0xfe8902, 0xfe8902, 0xfe8802, 0xfe8802, 0xfe8702, 0xfe8702, 0xf6870a, 0x5d472f, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4d4d4d, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xbbb5ac, 0xe2a549, 0xfe9b05, 0xfe9a05, 0xfe9a05, 0xfe9905, 0xfe9905, 0xfe9805, 0xfe9805, 0xfe9704, 0xfe9705, 0xfe9604, 0xfe9604, 0xfe9504, 0xfe9504, 0xfe9404, 0xfe9404, 0xfe9304, 0xfe9304, 0xfe9204, 0xfe9204, 0xfe9103, 0xfe9103, 0xfe9103, 0xfe9003, 0xfe8f03, 0xfe8f03, 0xfe8f03, 0xfe8e03, 0xfe8e03, 0xfe8d03, 0xfe8d02, 0xfe8d03, 0xfe8c02, 0xfe8b02, 0xfe8b02, 0xfe8b02, 0xfe8a02, 0xfe8a02, 0xfe8902, 0xfe8902, 0xfe8801, 0xfe8802, 0xfe8701, 0xfe8702, 0xfa8605, 0xd08635, 0x91867a, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xc3af90, 0xc7ad88, 0xc5ac87, 0xc5ac87, 0xc4aa85, 0xc4aa85, 0xc2a884, 0xc1a783, 0xc1a682, 0xc0a681, 0xbfa580, 0xbea480, 0xbea37f, 0xbda27e, 0xbca17d, 0xbba07d, 0xbb9f7c, 0xba9f7b, 0xb99e7a, 0xb89d7a, 0xb89c79, 0xb79b78, 0xb59976, 0xb59976, 0xb49875, 0xb49875, 0xb29673, 0xb29673, 0xb19472, 0xb19472, 0xaf9370, 0xaf9270, 0xae916f, 0xad906e, 0xac8f6d, 0xac8e6c, 0xab8d6c, 0xaa8d6b, 0xa98c6a, 0xa98b69, 0xa88a69, 0xa2896e, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xababab, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x949494, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0x9f9f9f, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x888888, 0x888888, 0x868686, 0x868686, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xc6c6c6, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x868686, 0x868686, 0x848484, 0x848484, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x565656, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x9a9a9a, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa3a3a3, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x464646, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x797979, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x999999, 0x979797, 0x979797, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x353535, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xbfbfbf, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xababab, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x949494, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x464646, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x464646, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0x9f9f9f, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x888888, 0x888888, 0x868686, 0x868686, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x676767, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x7f7f7f, 0xbababa, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x626262, 0x484848, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x3a3a3a, 0x4b4b4b, 0x4b4b4b, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x494949, 0x494949, 0x494949, 0x494949, 0x484848, 0x484848, 0x484848, 0x484848, 0x474747, 0x474747, 0x474747, 0x464646, 0x464646, 0x464646, 0x464646, 0x454545, 0x454545, 0x454545, 0x454545, 0x444444, 0x444444, 0x444444, 0x444444, 0x434343, 0x434343, 0x434343, 0x424242, 0x424242, 0x424242, 0x424242, 0x414141, 0x414141, 0x414141, 0x414141, 0x404040, 0x404040, 0x404040, 0x404040, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3e3e3e, 0x3e3e3e, 0x3e3e3e, 0x3e3e3e, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 0x3b3b3b, 0x3b3b3b, 0x3b3b3b, 0x3a3a3a, 0x3a3a3a, 0x3a3a3a, 0x3a3a3a, 0x393939, 0x393939, 0x393939, 0x393939, 0x383838, 0x383838, 0x383838, 0x383838, 0x373737, 0x373737, 0x373737, 0x373737, 0x363636, 0x363636, 0x363636, 0x353535, 0x353535, 0x353535, 0x353535, 0x272727, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, + 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020 +}; \ No newline at end of file diff --git a/dev/Boot/BootKit/Support.h b/dev/Boot/BootKit/Support.h new file mode 100644 index 00000000..a57782e3 --- /dev/null +++ b/dev/Boot/BootKit/Support.h @@ -0,0 +1,167 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +/// @file Support.h +/// @brief Purpose of this file is to help port libs into the bootloader. + +#include + +#define kLongMax ((long)(~0UL >> 1)) +#define kLongMin (~kLongMax) + +#ifdef __ZBAOSLDR__ + +/// @brief memset definition in C++. +/// @param dst destination pointer. +/// @param byte value to fill in. +/// @param len length of of src. +EXTERN_C void* memset(void* dst, int byte, long long unsigned int len); + +/// @brief memcpy definition in C++. +/// @param dst destination pointer. +/// @param src source pointer. +/// @param len length of of src. +EXTERN_C void* memcpy(void* dst, const void* src, long long unsigned int len); + +/// @brief strlen definition in C++. +EXTERN_C size_t strlen(const char* whatToCheck); + +/// @brief strcmp definition in C++. +EXTERN_C int strcmp(const char* whatToCheck, const char* whatToCheckRight); + +#define SetMem(dst, c, sz) memset(dst, c, sz) +#define MoveMem(dst, src, sz) memcpy(dst, src, sz) +#define CopyMem(dst, src, sz) memcpy(dst, src, sz) +#define StrLen(src) strlen(src) +#define StrCmp(dst, src) strcmp(dst, src) + +#endif // __ZBAOSLDR__ + +inline int IsSpace(int c) +{ + return c == ' '; +} + +inline int StringNCompare(const char* destination, const char* source, long length) +{ + long err = 0; + + for (long i = 0UL; i < length; ++i) + { + if (source[i] != destination[i]) + ++err; + } + + return err; +} + +inline long StringToLong(const char* nptr, char** endptr, int base) +{ + const char *p = nptr, *endp; + bool is_neg = 0, overflow = 0; + + /* Need unsigned so (-kLongMin) can fit in these: */ + unsigned long n = 0UL, cutoff; + int cutlim; + + if (base < 0 || base == 1 || base > 36) + { + return 0L; + } + + endp = nptr; + + while (IsSpace(*p)) + p++; + + if (*p == '+') + { + p++; + } + else if (*p == '-') + { + is_neg = 1, p++; + } + if (*p == '0') + { + p++; + /* For strtol(" 0xZ", &endptr, 16), endptr should point to 'x'; + * pointing to ' ' or '0' is non-compliant. + * (Many implementations do this wrong.) */ + endp = p; + if (base == 16 && (*p == 'X' || *p == 'x')) + { + p++; + } + else if (base == 2 && (*p == 'B' || *p == 'b')) + { + /* C23 standard supports "0B" and "0b" prefixes. */ + p++; + } + else if (base == 0) + { + if (*p == 'X' || *p == 'x') + { + base = 16, p++; + } + else if (*p == 'B' || *p == 'b') + { + base = 2, p++; + } + else + { + base = 8; + } + } + } + else if (base == 0) + { + base = 10; + } + + cutoff = (is_neg) ? -(kLongMin / base) : kLongMax / base; + cutlim = (is_neg) ? -(kLongMin % base) : kLongMax % base; + + while (1) + { + int c; + if (*p >= 'A') + c = ((*p - 'A') & (~('a' ^ 'A'))) + 10; + else if (*p <= '9') + c = *p - '0'; + else + break; + if (c < 0 || c >= base) + break; + endp = ++p; + if (overflow) + { + /* endptr should go forward and point to the non-digit character + * (of the given base); required by ANSI standard. */ + if (endptr) + continue; + break; + } + if (n > cutoff || (n == cutoff && c > cutlim)) + { + overflow = 1; + continue; + } + n = n * base + c; + } + + if (endptr) + *endptr = (char*)endp; + + if (overflow) + { + return ((is_neg) ? kLongMin : kLongMax); + } + + return (long)((is_neg) ? -n : n); +} diff --git a/dev/Boot/BootKit/Thread.h b/dev/Boot/BootKit/Thread.h new file mode 100644 index 00000000..42991d17 --- /dev/null +++ b/dev/Boot/BootKit/Thread.h @@ -0,0 +1,44 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include +#include +#include + +namespace Boot +{ + using namespace Kernel; + + class BThread; + + /// @brief Program loader class + /// @package nl.zeta.boot.api + class BThread final + { + public: + explicit BThread() = delete; + ~BThread() = default; + + explicit BThread(Kernel::VoidPtr blob); + + BThread& operator=(const BThread&) = default; + BThread(const BThread&) = default; + + Int32 Start(HEL::BootInfoHeader* handover, BOOL is_own_stack); + void SetName(const char* name); + const char* GetName(); + bool IsValid(); + + private: + Char fBlobName[255] = {"BootThread"}; + VoidPtr fStartAddress{nullptr}; + VoidPtr fBlob{nullptr}; + UInt8* fStack{nullptr}; + HEL::BootInfoHeader* fHandover{nullptr}; + }; +} // namespace Boot diff --git a/dev/Boot/DownloadOVMF.ps1 b/dev/Boot/DownloadOVMF.ps1 new file mode 100644 index 00000000..5a2c5f0e --- /dev/null +++ b/dev/Boot/DownloadOVMF.ps1 @@ -0,0 +1,4 @@ +$client = new-object System.Net.WebClient +$output = "$PSScriptRoot\OVMF.fd" + +$client.DownloadFile("https://retrage.github.io/edk2-nightly/bin/DEBUGX64_OVMF.fd", $output) diff --git a/dev/Boot/Modules/.keep b/dev/Boot/Modules/.keep new file mode 100644 index 00000000..e69de29b diff --git a/dev/Boot/Modules/NetBoot/.hgkeep b/dev/Boot/Modules/NetBoot/.hgkeep new file mode 100644 index 00000000..e69de29b diff --git a/dev/Boot/Modules/NetBoot/Boot.S b/dev/Boot/Modules/NetBoot/Boot.S new file mode 100644 index 00000000..0527e509 --- /dev/null +++ b/dev/Boot/Modules/NetBoot/Boot.S @@ -0,0 +1,28 @@ +;; /* +;; * ======================================================== +;; * +;; * BootZ +;; * Copyright (C) 2024, Theater Quality Inc, all rights reserved., all rights reserved. +;; * +;; * ======================================================== +;; */ + +.code64 +.intel_syntax noprefix + +#define kTypeDriver 101 +#define kArchAmd64 122 +#define kHandoverMagic 0xBADCC + +.section .ldr + +.quad kHandoverMagic +.word kTypeDriver + +.text + +.extern main +.global __main + +__main: + ret diff --git a/dev/Boot/Modules/NetBoot/Module.cc b/dev/Boot/Modules/NetBoot/Module.cc new file mode 100644 index 00000000..6277da70 --- /dev/null +++ b/dev/Boot/Modules/NetBoot/Module.cc @@ -0,0 +1,16 @@ +/* + * ======================================================== + * + * NetBoot + * Copyright (C) 2024, Theater Quality Inc, all rights reserved., all rights reserved. + * + * ======================================================== + */ + +#include +#include + +EXTERN_C Int32 ModuleMain(Kernel::HEL::BootInfoHeader* Handover) +{ + return kEfiOk; +} diff --git a/dev/Boot/Modules/NetBoot/NetBoot.h b/dev/Boot/Modules/NetBoot/NetBoot.h new file mode 100644 index 00000000..cdfe17f9 --- /dev/null +++ b/dev/Boot/Modules/NetBoot/NetBoot.h @@ -0,0 +1,26 @@ +/* + * ======================================================== + * + * NetBoot + * Copyright (C) 2024, Theater Quality Inc, all rights reserved., all rights reserved. + * + * ======================================================== + */ + +#pragma once + +#include + +/// @brief the internet header is used to download updates OTA. +typedef struct NetBootInternetHeader +{ + Kernel::Char NB1; /// magic char 1 'N' + Kernel::Char NB2; /// magic char 2 'E' + Kernel::Char NB3; /// magic char 3 'T' + Kernel::Char NB4; /// magic char 4 'B' + + Kernel::Char PatchName[255]; /// example: ColdChoco + Kernel::Int32 PatchLength; /// the patch length. + Kernel::Char PatchTarget[255]; /// the target file. + Kernel::Boolean ImpliesROM; /// does it imply an EEPROM reprogram? +} NetBootInternetHeader; diff --git a/dev/Boot/Modules/NetBoot/build.json b/dev/Boot/Modules/NetBoot/build.json new file mode 100644 index 00000000..9df27b3c --- /dev/null +++ b/dev/Boot/Modules/NetBoot/build.json @@ -0,0 +1,24 @@ +{ + "compiler_path": "x86_64-w64-mingw32-g++", + "compiler_std": "c++20", + "headers_path": ["../", "../../", "../../../Kernel", "../../../", "./"], + "sources_path": [".cc", "*.S"], + "output_name": "netboot.sys", + "compiler_flags": [ + "-ffreestanding", + "-nostdlib", + "-std=c++20", + "-fPIC", + "-fno-rtti", + "-fno-exceptions", + "-Wl,--subsystem=17,--image-base,0x10000000,-e,ModuleMain" + ], + "cpp_macros": [ + "__MINOSKRNL__", + "__ZBAOSLDR__", + "__ZKA_AMD64__", + "kNetBootVersionHighest=0x0100", + "kNetBootVersionLowest=0x0100", + "kNetBootVersion=0x0100" + ] +} diff --git a/dev/Boot/Modules/SysChk/.hgkeep b/dev/Boot/Modules/SysChk/.hgkeep new file mode 100644 index 00000000..e69de29b diff --git a/dev/Boot/Modules/SysChk/Boot.S b/dev/Boot/Modules/SysChk/Boot.S new file mode 100644 index 00000000..9fdf4428 --- /dev/null +++ b/dev/Boot/Modules/SysChk/Boot.S @@ -0,0 +1,20 @@ +;; /* +;; * ======================================================== +;; * +;; * BootZ +;; * Copyright (C) 2024, Theater Quality Inc, all rights reserved., all rights reserved. +;; * +;; * ======================================================== +;; */ + +.code64 +.intel_syntax noprefix + +#define kTypeDriver 101 +#define kArchAmd64 122 +#define kHandoverMagic 0xBADCC + +.section .ldr + +.quad kHandoverMagic +.word kTypeDriver diff --git a/dev/Boot/Modules/SysChk/Module.cc b/dev/Boot/Modules/SysChk/Module.cc new file mode 100644 index 00000000..a48e524c --- /dev/null +++ b/dev/Boot/Modules/SysChk/Module.cc @@ -0,0 +1,47 @@ +/* + * ======================================================== + * + * NetBoot + * Copyright (C) 2024, Theater Quality Inc, all rights reserved., all rights reserved. + * + * ======================================================== + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +EXTERN_C Int32 ModuleMain(Kernel::HEL::BootInfoHeader* Handover) +{ + EfiSystemTable* system_table = (EfiSystemTable*)Handover->f_FirmwareCustomTables[1]; + + EfiInputKey key{}; + + system_table->ConIn->ReadKeyStroke(system_table->ConIn, &key); + + if (key.UnicodeChar == 'F' || + key.UnicodeChar == 'f') + { + UI::ui_draw_background(); + + fb_init(); + + FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2); + + fb_fini(); + + return kEfiOk; + } + + return kEfiFail; +} diff --git a/dev/Boot/Modules/SysChk/build.json b/dev/Boot/Modules/SysChk/build.json new file mode 100644 index 00000000..cd21e269 --- /dev/null +++ b/dev/Boot/Modules/SysChk/build.json @@ -0,0 +1,24 @@ +{ + "compiler_path": "x86_64-w64-mingw32-g++", + "compiler_std": "c++20", + "headers_path": ["../", "../../", "../../../Kernel", "../../../", "./"], + "sources_path": ["*.cc", "*.S"], + "output_name": "syschk.sys", + "compiler_flags": [ + "-ffreestanding", + "-nostdlib", + "-std=c++20", + "-fPIC", + "-fno-rtti", + "-fno-exceptions", + "-Wl,--subsystem=17,--image-base,0x10000000,-e,ModuleMain" + ], + "cpp_macros": [ + "__MINOSKRNL__", + "__ZBAOSLDR__", + "__ZKA_AMD64__", + "kChkVersionHighest=0x0100", + "kChkVersionLowest=0x0100", + "kChkVersion=0x0100" + ] +} diff --git a/dev/Boot/ReadMe.md b/dev/Boot/ReadMe.md new file mode 100644 index 00000000..91f8fa2e --- /dev/null +++ b/dev/Boot/ReadMe.md @@ -0,0 +1,20 @@ +# BootZ (Zeta Bootloader Architecture) + +You need: + +- MinGW for the Kernel and bootloader. +- Netwide Assembler to output COFF object code. + +Start by cloning the repo: + +``` +git clone git@github.com:amlel-el-mahrouss/zka-dev.git +``` + +And then execute: + +``` +make all +``` + +##### Copyright, Theater Quality Inc, all rights reserved. diff --git a/dev/Boot/amd64-efi.make b/dev/Boot/amd64-efi.make new file mode 100644 index 00000000..3ffffee1 --- /dev/null +++ b/dev/Boot/amd64-efi.make @@ -0,0 +1,119 @@ +################################################## +# (c) Theater Quality Inc, all rights reserved. +# This is the bootloader makefile. +################################################## + +CC_GNU=x86_64-w64-mingw32-g++ +LD_GNU=x86_64-w64-mingw32-ld + +WINDRES=x86_64-w64-mingw32-windres + +ADD_FILE=touch +COPY=cp +HTTP_GET=wget + +# Select this for Windows. +ifneq ($(findstring CYGWIN_NT-10.0,$(shell uname)), ) +EMU=qemu-system-x86_64w.exe +else +# this for NT distributions +EMU=qemu-system-x86_64 -net none +endif + +ifeq ($(NEWS_MODEL), ) +ZKA_MODEL=-DkMachineModel="\"ZKA\"" +endif + +BIOS=OVMF.fd +IMG=epm-master-1.img +IMG_2=epm-slave.img +IMG_3=epm-master-2.img + +EMU_FLAGS=-net none -smp 1 -m 8G -M q35 \ + -bios $(BIOS) -drive \ + file=fat:rw:src/Root/,index=2,format=raw \ + -monitor stdio + +LD_FLAGS=-e Main --subsystem=10 + +STANDALONE_MACRO=-D__BOOTLDR_STANDALONE__ +OBJ=*.o + +REM=rm +REM_FLAG=-f + +FLAG_ASM=-f win64 +FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mno-red-zone -D__MINOSKRNL__ -D__ZBAOSLDR__ \ + -DEFI_FUNCTION_WRAPPER -I./ -I../Kernel -I../ -c -nostdlib -fno-rtti -fno-exceptions \ + -std=c++20 -D__HAVE_ZKA_APIS__ -DZBA_USE_FB -D__ZKA_AMD64__ -D__ZKA__ -DZKA_AUTO_FORMAT + +BOOTLOADER=zbaosldr.exe +KERNEL=minoskrnl.exe +SYSCHK=syschk.sys +STARTUP=startup.sys +SCIKIT=LibSCI.dylib + +.PHONY: invalid-recipe +invalid-recipe: + @echo "=== ERROR ===" + @echo "=> Use make compile- instead." + +.PHONY: all +all: compile-amd64 + mkdir -p src/Root/EFI/BOOT + $(LD_GNU) $(OBJ) $(LD_FLAGS) -o src/$(BOOTLOADER) + $(COPY) src/$(BOOTLOADER) src/Root/EFI/BOOT/BOOTX64.EFI + $(COPY) src/$(BOOTLOADER) src/Root/EFI/BOOT/ZBAOSLDR.EFI + $(COPY) ../Kernel/$(KERNEL) src/Root/$(KERNEL) + $(COPY) ./Mod/SysChk/$(SYSCHK) src/Root/$(SYSCHK) + $(COPY) ../LibSCI/$(SCIKIT) src/Root/$(SCIKIT) + $(COPY) src/$(BOOTLOADER) src/Root/$(BOOTLOADER) + +ifneq ($(DEBUG_SUPPORT), ) +DEBUG = -D__DEBUG__ +endif + +.PHONY: compile-amd64 +compile-amd64: + $(WINDRES) src/BootloaderRsrc.rsrc -O coff -o BootloaderRsrc.o + $(CC_GNU) $(ZKA_MODEL) $(STANDALONE_MACRO) $(FLAG_GNU) $(DEBUG) \ + $(wildcard src/HEL/AMD64/*.cc) \ + $(wildcard src/HEL/AMD64/*.S) \ + $(wildcard src/*.cc) + +.PHONY: run-efi-amd64-ahci +run-efi-amd64-ahci: + $(EMU) $(EMU_FLAGS) -hdd $(IMG) + +.PHONY: run-efi-amd64-ata +run-efi-amd64-ata: + $(EMU) $(EMU_FLAGS) -device piix3-ide,id=ide -drive id=disk,file=$(IMG),format=raw,if=none -device ide-hd,drive=disk,bus=ide.0 + +# img_2 is the rescue disk. img is the bootable disk, as provided by the Zeta specs. +.PHONY: epm-img +epm-img: + qemu-img create -f raw $(IMG) 4G + qemu-img create -f raw $(IMG_2) 4G + qemu-img create -f raw $(IMG_3) 4G + +.PHONY: download-edk +download-edk: + $(HTTP_GET) https://retrage.github.io/edk2-nightly/bin/DEBUGX64_OVMF.fd -O OVMF.fd + +BINS=*.bin +EXECUTABLES=zbaosldr.exe minoskrnl.exe OVMF.fd + +TARGETS=$(REM_FLAG) $(OBJ) $(BIN) $(IMG) $(IMG_2) $(EXECUTABLES) + +.PHONY: clean +clean: + $(REM) $(TARGETS) + +.PHONY: help +help: + @echo "=== HELP ===" + @echo "epm-img: Format a disk using the Explicit Partition Map." + @echo "gpt-img: Format a disk using the Explicit Partition Map." + @echo "clean: clean bootloader." + @echo "bootloader-amd64: Build bootloader. (PC AMD64)" + @echo "run-efi-amd64-: Run bootloader. (PC AMD64)" diff --git a/dev/Boot/arm64-efi.make b/dev/Boot/arm64-efi.make new file mode 100644 index 00000000..c8aed97c --- /dev/null +++ b/dev/Boot/arm64-efi.make @@ -0,0 +1,112 @@ +################################################## +# (c) Theater Quality Inc, all rights reserved. +# This is the bootloader makefile. +################################################## + +CC_GNU = clang++ +LD_GNU = lld-link + +ADD_FILE=touch +COPY=cp +HTTP_GET=wget + +# Select this for Windows. +ifneq ($(findstring CYGWIN_NT-10.0,$(shell uname)), ) +EMU=qemu-system-aarch64w.exe +else +# this for NT distributions +EMU=qemu-system-aarch64 +endif + +ifeq ($(NEWS_MODEL), ) +ZKA_MODEL=-DkMachineModel="\"ZKA\"" +endif + +BIOS=OVMF.fd +IMG=epm-master-1.img +IMG_2=epm-slave.img +IMG_3=epm-master-2.img + +EMU_FLAGS=-net none -smp 4 -m 8G -cpu max -M virt-9.1 \ + -bios $(BIOS) \ + -drive id=disk,file=$(IMG),format=raw,if=none \ + -drive \ + file=fat:rw:src/Root/,index=1,format=raw \ + -device virtio-tablet-pci \ + -d int -no-shutdown -no-reboot -device virtio-gpu-pci,xres=844,yres=390 -serial stdio + +LD_FLAGS=-subsystem:efi_application -entry:Main /nodefaultlib + +STANDALONE_MACRO=-D__BOOTLDR_STANDALONE__ +OBJ=*.o + +REM=rm +REM_FLAG=-f + +FLAG_ASM=-f win64 +FLAG_GNU=-fshort-wchar -c -ffreestanding -MMD -mno-red-zone -D__ZKA_ARM64__ -fno-rtti -fno-exceptions -I./ \ + -target aarch64-unknown-windows \ + -std=c++20 -D__FSKIT_USE_NEFS__ -D__BOOTLDR_STANDALONE__ -D__MINOSKRNL__ -D__ZBAOSLDR__ -D__HAVE_ZKA_APIS__ -D__ZKA__ -I../ -I../Kernel + +BOOT_LOADER=zbaosldr.exe +KERNEL=minoskrnl.exe +SYS_CHK=syschk.sys +STARTUP=startup.sys + +.PHONY: invalid-recipe +invalid-recipe: + @echo "invalid-recipe: Use make compile- instead." + +.PHONY: all +all: compile-amd64 + mkdir -p src/Root/EFI/BOOT + $(LD_GNU) $(OBJ) $(LD_FLAGS) /out:src/$(BOOT_LOADER) + $(COPY) src/$(BOOT_LOADER) src/Root/EFI/BOOT/BOOTAA64.EFI + $(COPY) src/$(BOOT_LOADER) src/Root/EFI/BOOT/BootZ.EFI + $(COPY) ../Kernel/$(KERNEL) src/Root/$(KERNEL) + $(COPY) src/$(BOOT_LOADER) src/Root/$(BOOT_LOADER) + +ifneq ($(DEBUG_SUPPORT), ) +DEBUG = -D__DEBUG__ +endif + +.PHONY: compile-amd64 +compile-amd64: + $(RESCMD) + $(CC_GNU) $(ZKA_MODEL) $(STANDALONE_MACRO) $(FLAG_GNU) $(DEBUG) \ + $(wildcard src/HEL/ARM64/*.cc) \ + $(wildcard src/HEL/ARM64/*.S) \ + $(wildcard src/*.cc) + +.PHONY: run-efi-amd64 +run-efi-amd64: + $(EMU) $(EMU_FLAGS) + +# img_2 is the rescue disk. img is the bootable disk, as provided by the Zeta. +.PHONY: epm-img +epm-img: + qemu-img create -f raw $(IMG) 10G + qemu-img create -f raw $(IMG_2) 4G + qemu-img create -f raw $(IMG_3) 4G + +.PHONY: download-edk +download-edk: + $(HTTP_GET) https://retrage.github.io/edk2-nightly/bin/DEBUGAARCH64_QEMU_EFI.fd -O OVMF.fd + +BINS=*.bin +EXECUTABLES=zbaosldr.exe minoskrnl.exe OVMF.fd + +TARGETS=$(REM_FLAG) $(OBJ) $(BIN) $(IMG) $(IMG_2) $(EXECUTABLES) + +.PHONY: clean +clean: + $(REM) $(TARGETS) + +.PHONY: help +help: + @echo "=== HELP ===" + @echo "epm-img: Format a disk using the Explicit Partition Map." + @echo "gpt-img: Format a disk using the Explicit Partition Map." + @echo "clean: clean bootloader." + @echo "bootloader-amd64: Build bootloader. (PC AMD64)" + @echo "run-efi-amd64: Run bootloader. (PC AMD64)" diff --git a/dev/Boot/src/.gitkeep b/dev/Boot/src/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/dev/Boot/src/BootFileReader.cc b/dev/Boot/src/BootFileReader.cc new file mode 100644 index 00000000..7fb5be0d --- /dev/null +++ b/dev/Boot/src/BootFileReader.cc @@ -0,0 +1,203 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + + File: FileReader.cc + Purpose: New Boot FileReader, + Read complete file and store it in a buffer. + +------------------------------------------- */ + +#include +#include +#include +#include +#include +#include + +/// @file BootFileReader +/// @brief Bootloader File reader. +/// BUGS: 0 + +//////////////////////////////////////////////////////////////////////////////////////////////////// +/// +/// +/// @name BFileReader class +/// @brief Reads the file as a blob. +/// +/// +//////////////////////////////////////////////////////////////////////////////////////////////////// + +/*** + @brief File Reader constructor. +*/ +Boot::BFileReader::BFileReader(const CharacterTypeUTF16* path, + EfiHandlePtr ImageHandle) +{ + if (path != nullptr) + { + SizeT index = 0UL; + for (; path[index] != L'\0'; ++index) + { + mPath[index] = path[index]; + } + + mPath[index] = 0; + } + + /// Load protocols with their GUIDs. + + EfiGUID guidEfp = EfiGUID(EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID); + + EfiSimpleFilesystemProtocol* efp = nullptr; + + EfiLoadImageProtocol* img = nullptr; + EfiGUID guidImg = EfiGUID(EFI_LOADED_IMAGE_PROTOCOL_GUID); + + if (BS->HandleProtocol(ImageHandle, &guidImg, (void**)&img) != kEfiOk) + { + mWriter.Write(L"BootZ: Handle-Protocol: No-Such-Protocol").Write(L"\r"); + this->mErrorCode = kNotSupported; + } + + if (BS->HandleProtocol(img->DeviceHandle, &guidEfp, (void**)&efp) != kEfiOk) + { + mWriter.Write(L"BootZ: Handle-Protocol: No-Such-Protocol").Write(L"\r"); + this->mErrorCode = kNotSupported; + return; + } + + /// Start doing disk I/O + + if (efp->OpenVolume(efp, &mRootFs) != kEfiOk) + { + mWriter.Write(L"BootZ: Fetch-Protocol: No-Such-Volume").Write(L"\r"); + this->mErrorCode = kNotSupported; + return; + } + + EfiFileProtocol* fileFs = nullptr; + + if (mRootFs->Open(mRootFs, &fileFs, mPath, kEFIFileRead, kEFIReadOnly) != + kEfiOk) + { + mWriter.Write(L"BootZ: Fetch-Protocol: No-Such-Path: ") + .Write(mPath) + .Write(L"\r"); + this->mErrorCode = kNotSupported; + + fb_render_string("BootZ: PLEASE RECOVER YOUR MINKRNL INSTALL.", 40, 10, RGB(0xFF, 0xFF, 0xFF)); + + mRootFs->Close(mRootFs); + + return; + } + + mSizeFile = 0; + mFile = fileFs; + mErrorCode = kOperationOkay; +} + +Boot::BFileReader::~BFileReader() +{ + if (this->mFile) + { + this->mFile->Close(this->mFile); + this->mFile = nullptr; + } + + if (this->mRootFs) + { + this->mRootFs->Close(this->mRootFs); + this->mRootFs = nullptr; + } + + if (this->mBlob) + { + BS->FreePool(this->mBlob); + this->mBlob = nullptr; + } + + BSetMem(this->mPath, 0, kPathLen); +} + +/** + @brief Reads all of the file into a buffer. + @param **readUntil** size of file + @param **chunkToRead** chunk to read each time. +*/ +Void Boot::BFileReader::ReadAll(SizeT readUntil, SizeT chunkToRead, UIntPtr out_address) +{ + if (mBlob == nullptr) + { + EfiFileInfo newPtrInfo{}; + UInt32 szInfo = 0U; + + EfiGUID kFileInfoGUID = EFI_FILE_INFO_GUID; + + if (mFile->GetInfo(mFile, &kFileInfoGUID, &szInfo, &newPtrInfo) == kEfiOk) + { + if (newPtrInfo.FileSize < readUntil) + readUntil = newPtrInfo.FileSize; + else if (readUntil < 1) + readUntil = newPtrInfo.FileSize; + + mWriter.Write(L"BootZ: File size: ").Write(readUntil).Write("\r"); + } + + if (!out_address) + { + if (auto err = BS->AllocatePool(EfiLoaderCode, readUntil, (VoidPtr*)&mBlob) != + kEfiOk) + { + mWriter.Write(L"*** error: ").Write(err).Write(L" ***\r"); + EFI::ThrowError(L"OutOfMemory", L"Out of memory."); + } + } + else + { + mBlob = (VoidPtr)out_address; + } + } + + mErrorCode = kNotSupported; + + UInt64 bufSize = chunkToRead; + UInt64 szCnt = 0UL; + + while (szCnt < readUntil) + { + auto res = mFile->Read(mFile, &bufSize, (VoidPtr)(&((Char*)mBlob)[szCnt])); + + szCnt += bufSize; + + if (res == kBufferTooSmall) + { + bufSize = chunkToRead; + } + } + + mSizeFile = szCnt; + mErrorCode = kOperationOkay; +} + +/// @brief error code getter. +/// @return the error code. +Int32& Boot::BFileReader::Error() +{ + return mErrorCode; +} + +/// @brief blob getter. +/// @return the blob. +VoidPtr Boot::BFileReader::Blob() +{ + return mBlob; +} + +/// @breif Size getter. +/// @return the size of the file. +UInt64& Boot::BFileReader::Size() +{ + return mSizeFile; +} diff --git a/dev/Boot/src/BootString.cc b/dev/Boot/src/BootString.cc new file mode 100644 index 00000000..f511f2fc --- /dev/null +++ b/dev/Boot/src/BootString.cc @@ -0,0 +1,92 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + + File: BootString.cc + Purpose: BootZ string library + + Revision History: + + + +------------------------------------------- */ + +#include +#include +#include + +/// BUGS: 0 + +///////////////////////////////////////////////////////////////////////////////////////////////////////// + +Kernel::SizeT Boot::BCopyMem(CharacterTypeUTF16* dest, CharacterTypeUTF16* src, const Kernel::SizeT len) +{ + if (!dest || !src) + return 0; + + SizeT index = 0UL; + for (; index < len; ++index) + { + dest[index] = src[index]; + } + + return index; +} + +Kernel::SizeT Boot::BStrLen(const CharacterTypeUTF16* ptr) +{ + if (!ptr) + return 0; + + Kernel::SizeT cnt = 0; + + while (*ptr != (CharacterTypeUTF16)0) + { + ++ptr; + ++cnt; + } + + return cnt; +} + +Kernel::SizeT Boot::BSetMem(CharacterTypeUTF16* src, const CharacterTypeUTF16 byte, const Kernel::SizeT len) +{ + if (!src) + return 0; + + Kernel::SizeT cnt = 0UL; + + while (*src != 0) + { + if (cnt > len) + break; + + *src = byte; + ++src; + + ++cnt; + } + + return cnt; +} + +Kernel::SizeT Boot::BSetMem(CharacterTypeUTF8* src, const CharacterTypeUTF8 byte, const Kernel::SizeT len) +{ + if (!src) + return 0; + + Kernel::SizeT cnt = 0UL; + + while (*src != 0) + { + if (cnt > len) + break; + + *src = byte; + ++src; + + ++cnt; + } + + return cnt; +} diff --git a/dev/Boot/src/BootSupport.cc b/dev/Boot/src/BootSupport.cc new file mode 100644 index 00000000..bcd3b185 --- /dev/null +++ b/dev/Boot/src/BootSupport.cc @@ -0,0 +1,82 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#include +#include +#include +#include +#include +#include +#include + +#ifdef __BOOTLDR_STANDALONE__ + +/// @brief memset definition in C++. +/// @param dst destination pointer. +/// @param byte value to fill in. +/// @param len length of of src. +EXTERN_C VoidPtr memset(void* dst, int byte, long long unsigned int len) +{ + for (size_t i = 0UL; i < len; ++i) + { + ((int*)dst)[i] = byte; + } + + return dst; +} + +/// @brief memcpy definition in C++. +/// @param dst destination pointer. +/// @param src source pointer. +/// @param len length of of src. +EXTERN_C VoidPtr memcpy(void* dst, const void* src, long long unsigned int len) +{ + for (size_t i = 0UL; i < len; ++i) + { + ((int*)dst)[i] = ((int*)src)[i]; + } + + return dst; +} + +/// @brief strlen definition in C++. +EXTERN_C size_t strlen(const char* whatToCheck) +{ + SizeT len = 0; + + while (whatToCheck[len] != 0) + { + ++len; + } + + return len; +} + +/// @brief strcmp definition in C++. +EXTERN_C int strcmp(const char* whatToCheck, const char* whatToCheckRight) +{ + if (!whatToCheck || *whatToCheck == 0) + return 0; + + SizeT len = 0; + + while (whatToCheck[len] == whatToCheckRight[len]) + { + if (whatToCheck[len] == 0) + return 0; + + ++len; + } + + return len; +} + +/// @brief something specific to the Microsoft's ABI, When the stack grows too big. +EXTERN_C void ___chkstk_ms(void) +{ +} + +#endif diff --git a/dev/Boot/src/BootTextWriter.cc b/dev/Boot/src/BootTextWriter.cc new file mode 100644 index 00000000..bbb9a961 --- /dev/null +++ b/dev/Boot/src/BootTextWriter.cc @@ -0,0 +1,169 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + + File: BootTextWriter.cc + Purpose: BootZ string library + + Revision History: + + + +------------------------------------------- */ + +#include +#include +#include +#include + +///////////////////////////////////////////////////////////////////////////////////////////////////////// +/// BUGS: 0 /// +///////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** +@brief puts wrapper over EFI ConOut. +*/ +Boot::BTextWriter& Boot::BTextWriter::Write(const CharacterTypeUTF16* str) +{ +#ifdef __DEBUG__ + if (!str || *str == 0) + return *this; + + CharacterTypeUTF16 strTmp[2]; + strTmp[1] = 0; + + for (size_t i = 0; str[i] != 0; i++) + { + if (str[i] == '\r') + { + strTmp[0] = str[i]; + ST->ConOut->OutputString(ST->ConOut, strTmp); + + strTmp[0] = '\n'; + ST->ConOut->OutputString(ST->ConOut, strTmp); + } + else + { + strTmp[0] = str[i]; + ST->ConOut->OutputString(ST->ConOut, strTmp); + } + } +#endif // ifdef __DEBUG__ + + return *this; +} + +/// @brief UTF-8 equivalent of Write (UTF-16). +/// @param str the input string. +Boot::BTextWriter& Boot::BTextWriter::Write(const Char* str) +{ +#ifdef __DEBUG__ + if (!str || *str == 0) + return *this; + + CharacterTypeUTF16 strTmp[2]; + strTmp[1] = 0; + + for (size_t i = 0; str[i] != 0; i++) + { + if (str[i] == '\r') + { + strTmp[0] = str[i]; + ST->ConOut->OutputString(ST->ConOut, strTmp); + + strTmp[0] = '\n'; + ST->ConOut->OutputString(ST->ConOut, strTmp); + } + else + { + strTmp[0] = str[i]; + ST->ConOut->OutputString(ST->ConOut, strTmp); + } + } +#endif // ifdef __DEBUG__ + + return *this; +} + +Boot::BTextWriter& Boot::BTextWriter::Write(const UChar* str) +{ +#ifdef __DEBUG__ + if (!str || *str == 0) + return *this; + + CharacterTypeUTF16 strTmp[2]; + strTmp[1] = 0; + + for (size_t i = 0; str[i] != 0; i++) + { + if (str[i] == '\r') + { + strTmp[0] = str[i]; + ST->ConOut->OutputString(ST->ConOut, strTmp); + + strTmp[0] = '\n'; + ST->ConOut->OutputString(ST->ConOut, strTmp); + } + else + { + strTmp[0] = str[i]; + ST->ConOut->OutputString(ST->ConOut, strTmp); + } + } +#endif // ifdef __DEBUG__ + + return *this; +} + +/** +@brief putc wrapper over EFI ConOut. +*/ +Boot::BTextWriter& Boot::BTextWriter::WriteCharacter(CharacterTypeUTF16 c) +{ +#ifdef __DEBUG__ + EfiCharType str[2]; + + str[0] = c; + str[1] = 0; + ST->ConOut->OutputString(ST->ConOut, str); +#endif // ifdef __DEBUG__ + + return *this; +} + +Boot::BTextWriter& Boot::BTextWriter::Write(const Long& x) +{ +#ifdef __DEBUG__ + this->_Write(x); + this->Write("h"); +#endif // ifdef __DEBUG__ + + return *this; +} + +Boot::BTextWriter& Boot::BTextWriter::_Write(const Long& x) +{ +#ifdef __DEBUG__ + UInt64 y = (x > 0 ? x : -x) / 16; + UInt64 h = (x > 0 ? x : -x) % 16; + + if (y) + this->_Write(y); + + /* fail if the hex number is not base-16 */ + if (h > 16) + { + this->WriteCharacter('?'); + return *this; + } + + if (y < 0) + y = -y; + + const char cNumbers[] = "0123456789ABCDEF"; + + this->WriteCharacter(cNumbers[h]); +#endif // ifdef __DEBUG__ + + return *this; +} diff --git a/dev/Boot/src/BootThread.cc b/dev/Boot/src/BootThread.cc new file mode 100644 index 00000000..9ec55af1 --- /dev/null +++ b/dev/Boot/src/BootThread.cc @@ -0,0 +1,213 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +/// @brief External boot services symbol. +EXTERN EfiBootServices* BS; + +/// @note BThread doesn't parse the symbols so doesn't nullify them, .bss is though. + +namespace Boot +{ + EXTERN_C Void rt_jump_to_address(VoidPtr code, HEL::BootInfoHeader* handover, UInt8* stack); + + BThread::BThread(VoidPtr blob) + : fBlob(blob), fStartAddress(nullptr) + { + // detect the format. + const Char* blob_bytes = reinterpret_cast(fBlob); + + BTextWriter writer; + + if (!blob_bytes) + { + // failed to provide a valid pointer. + return; + } + + if (blob_bytes[0] == kMagMz0 && + blob_bytes[1] == kMagMz1) + { + LDR_EXEC_HEADER_PTR header_ptr = CFKit::ldr_find_exec_header(blob_bytes); + LDR_OPTIONAL_HEADER_PTR opt_header_ptr = CFKit::ldr_find_opt_exec_header(blob_bytes); + + if (!header_ptr || !opt_header_ptr) + return; + +#ifdef __ZKA_AMD64__ + if (header_ptr->mMachine != kPeMachineAMD64 || + header_ptr->mSignature != kPeSignature) + { + writer.Write("BootZ: Not a PE32+ executable.\r"); + return; + } +#elif defined(__ZKA_ARM64__) + if (header_ptr->mMachine != kPeMachineAMD64 || + header_ptr->mSignature != kPeSignature) + { + writer.Write("BootZ: Not a PE32+ executable.\r"); + return; + } +#endif // __ZKA_AMD64__ || __ZKA_ARM64__ + + if (opt_header_ptr->mSubsystem != kZKASubsystem) + { + writer.Write("BootZ: Not a ZKA Subsystem executable.\r"); + return; + } + + writer.Write("BootZ: PE32+ executable detected (ZKA Subsystem).\r"); + + auto numSecs = header_ptr->mNumberOfSections; + + writer.Write("BootZ: Major Linker Ver: ").Write(opt_header_ptr->mMajorLinkerVersion).Write("\r"); + writer.Write("BootZ: Minor Linker Ver: ").Write(opt_header_ptr->mMinorLinkerVersion).Write("\r"); + writer.Write("BootZ: Major Subsystem Ver: ").Write(opt_header_ptr->mMajorSubsystemVersion).Write("\r"); + writer.Write("BootZ: Minor Subsystem Ver: ").Write(opt_header_ptr->mMinorSubsystemVersion).Write("\r"); + writer.Write("BootZ: Magic: ").Write(header_ptr->mSignature).Write("\r"); + + constexpr auto cPageSize = 512; + + EfiPhysicalAddress loadStartAddress = opt_header_ptr->mImageBase; + loadStartAddress += opt_header_ptr->mBaseOfData; + + writer.Write("BootZ: ImageBase: ").Write(loadStartAddress).Write("\r"); + + auto numPages = opt_header_ptr->mSizeOfImage / cPageSize; + BS->AllocatePages(AllocateAddress, EfiLoaderData, numPages, &loadStartAddress); + + LDR_SECTION_HEADER_PTR sectPtr = (LDR_SECTION_HEADER_PTR)(((Char*)opt_header_ptr) + header_ptr->mSizeOfOptionalHeader); + + constexpr auto sectionForCode = ".text"; + constexpr auto sectionForNewLdr = ".ldr"; + constexpr auto sectionForBSS = ".bss"; + + for (SizeT sectIndex = 0; sectIndex < numSecs; ++sectIndex) + { + LDR_SECTION_HEADER_PTR sect = §Ptr[sectIndex]; + + SetMem((VoidPtr)(loadStartAddress + sect->mVirtualAddress), 0, sect->mSizeOfRawData); + + if (StrCmp(sectionForCode, sect->mName) == 0) + { + fStartAddress = (VoidPtr)((UIntPtr)loadStartAddress + opt_header_ptr->mAddressOfEntryPoint); + writer.Write("BootZ: Executable entry address: ").Write((UIntPtr)fStartAddress).Write("\r"); + } + else if (StrCmp(sectionForNewLdr, sect->mName) == 0) + { + struct HANDOVER_INFORMATION_STUB + { + UInt64 HandoverMagic; + UInt32 HandoverType; + UInt32 HandoverPad; + UInt32 HandoverArch; + }* handover_struc = (struct HANDOVER_INFORMATION_STUB*)((UIntPtr)fBlob + sect->mPointerToRawData); + + if (handover_struc->HandoverMagic != kHandoverMagic && + handover_struc->HandoverType != HEL::kTypeKernel) + { +#ifdef __ZKA_AMD64__ + if (handover_struc->HandoverArch != HEL::kArchAMD64) + { + fb_render_string("BootZ: Not an handover header, bad CPU...", 40, 10, RGB(0xFF, 0xFF, 0xFF)); + ::EFI::Stop(); + } +#endif + +#ifdef __ZKA_ARM64__ + if (handover_struc->HandoverArch != HEL::kArchARM64) + { + fb_render_string("BootZ: Not an handover header, bad CPU...", 40, 10, RGB(0xFF, 0xFF, 0xFF)); + ::EFI::Stop(); + } +#endif + fb_render_string("BootZ: Not an handover header...", 40, 10, RGB(0xFF, 0xFF, 0xFF)); + + ::EFI::Stop(); + } + } + + writer.Write("BootZ: Raw offset: ").Write(sect->mPointerToRawData).Write(" of ").Write(sect->mName).Write("\r"); + + CopyMem((VoidPtr)(loadStartAddress + sect->mVirtualAddress), (VoidPtr)((UIntPtr)fBlob + sect->mPointerToRawData), sect->mSizeOfRawData); + } + } + else if (blob_bytes[0] == kPefMagic[0] && + blob_bytes[1] == kPefMagic[1] && + blob_bytes[2] == kPefMagic[2] && + blob_bytes[3] == kPefMagic[3]) + { + // ========================================= // + // PEF executable detected. + // ========================================= // + + fStartAddress = nullptr; + writer.Write("BootZ: PEF executable detected, won't load it.\r"); + writer.Write("BootZ: note: PEF executables aren't loadable by default.\r"); + } + else + { + writer.Write("BootZ: Invalid Executable.\r"); + } + + fStack = new UInt8[mib_cast(8)]; + } + + /// @note handover header has to be valid! + Int32 BThread::Start(HEL::BootInfoHeader* handover, Bool own_stack) + { + HEL::HandoverProc err_fn = [](HEL::BootInfoHeader* rcx) -> Int32 { + fb_render_string("BootZ: Invalid Boot Image...", 50, 10, RGB(0xFF, 0xFF, 0xFF)); + ::EFI::Stop(); + + return NO; + }; + + if (!fStartAddress) + { + err_fn(handover); + } + + fHandover = handover; + + if (own_stack) + { + rt_jump_to_address(fStartAddress, fHandover, &fStack[mib_cast(8) - 1]); + } + else + { + delete[] fStack; + return reinterpret_cast(fStartAddress)(fHandover); + } + + return NO; + } + + const Char* BThread::GetName() + { + return fBlobName; + } + + Void BThread::SetName(const Char* name) + { + CopyMem(fBlobName, name, StrLen(name)); + } + + bool BThread::IsValid() + { + return fStartAddress != nullptr; + } +} // namespace Boot diff --git a/dev/Boot/src/BootloaderRsrc.rsrc b/dev/Boot/src/BootloaderRsrc.rsrc new file mode 100644 index 00000000..5cef7e7c --- /dev/null +++ b/dev/Boot/src/BootloaderRsrc.rsrc @@ -0,0 +1,25 @@ +#include "../../Kernel/CompilerKit/Version.h" + +1 VERSIONINFO +FILEVERSION 1,0,0,0 +PRODUCTVERSION 1,0,0,0 +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "080904E4" + BEGIN + VALUE "CompanyName", "Theater Quality Inc" + VALUE "FileDescription", "ZKA OS Loader." + VALUE "FileVersion", BOOTLOADER_VERSION + VALUE "InternalName", "zbaosldr" + VALUE "LegalCopyright", "Copyright (C) 2024, Theater Quality Inc all rights reserved." + VALUE "OriginalFilename", "zbaosldr.exe" + VALUE "ProductName", "zbaosldr" + VALUE "ProductVersion", BOOTLOADER_VERSION + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x809, 1252 + END +END diff --git a/dev/Boot/src/HEL/64X000/.gitkeep b/dev/Boot/src/HEL/64X000/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/dev/Boot/src/HEL/64X000/Boot64x0.S b/dev/Boot/src/HEL/64X000/Boot64x0.S new file mode 100644 index 00000000..a9ca1a2d --- /dev/null +++ b/dev/Boot/src/HEL/64X000/Boot64x0.S @@ -0,0 +1,35 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +.section .boot_hdr +.align 4 + +/* BootZ boot header begin for a 64x000 Kernel. */ + +boot_hdr_mag: + .ascii "CB" +boot_hdr_name: + // it has to match ten bytes. + .asciz "zbaosldr\0\0" +boot_hdr_ver: + .word 0x104 +boot_hdr_proc: + .long bootloader_start + +/* BootZ boot header end */ + +.extern bootloader_main +.extern bootloader_stack + +.globl bootloader_start +bootloader_start: + psh 4 /* real address of .Laddr */ + ldi 0,(bootloader_stack-bootloader_start)(4) /* stack address location */ + mv 19,0 /* use user defined stack */ + jrl + + bl bootloader_main + blr diff --git a/dev/Boot/src/HEL/AMD64/.gitkeep b/dev/Boot/src/HEL/AMD64/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/dev/Boot/src/HEL/AMD64/BootAPI.S b/dev/Boot/src/HEL/AMD64/BootAPI.S new file mode 100644 index 00000000..963ef46a --- /dev/null +++ b/dev/Boot/src/HEL/AMD64/BootAPI.S @@ -0,0 +1,60 @@ +.global rt_jump_to_address +.global rt_reset_hardware + +.text + +.intel_syntax noprefix + +/** + @brief this function setups a stack and then jumps to + a function */ +rt_jump_to_address: + mov rbx, rcx + mov rcx, rdx + push rbx + push rdx + mov rsp, r8 + push rax + jmp rbx + + pop rdx + pop rbx + pop rax + + ret + +rt_reset_hardware: + /* dont raise any interrupts. (except ofc NMIs.) */ + cli + /* remap PIC */ +wait_gate1: + in al,0x64 + and al,2 + jnz wait_gate1 + mov al,0x0D1 + out 0x64,al +wait_gate2: + in al,0x64 + and al,2 + jnz wait_gate2 + mov al,0x0FE + out 0x60,al + + /* trigger triple fault, by writing to cr4 */ + + mov rax, 0 + lidt [rax] + +reset_wait: + jmp reset_wait + +.global boot_write_cr3 +.global boot_read_cr3 + +boot_read_cr3: + mov rax, rax + ret + +boot_write_cr3: + mov cr3, rcx + ret diff --git a/dev/Boot/src/HEL/AMD64/BootATA.cc b/dev/Boot/src/HEL/AMD64/BootATA.cc new file mode 100644 index 00000000..ff92bf48 --- /dev/null +++ b/dev/Boot/src/HEL/AMD64/BootATA.cc @@ -0,0 +1,278 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +/** + * @file BootATA.cc + * @author Amlal EL Mahrouss (amlalelmahrouss@icloud.com) + * @brief ATA driver. + * @version 0.1 + * @date 2024-02-02 + * + * @copyright Copyright (c) Theater Quality Inc + * + */ + +#include +#include +#include + +/// bugs: 0 + +using namespace Boot; + +#define kATADataLen 256 + +static Boolean kATADetected = false; +static Int32 kATADeviceType = kATADeviceCount; +static UInt16 kATAData[kATADataLen] = {0}; + +Boolean boot_ata_detected(Void); + +STATIC Boolean boot_ata_wait_io(UInt16 IO) +{ + for (int i = 0; i < 400; i++) + rt_in8(IO + ATA_REG_STATUS); + +ATAWaitForIO_Retry: + auto statRdy = rt_in8(IO + ATA_REG_STATUS); + + if ((statRdy & ATA_SR_BSY)) + goto ATAWaitForIO_Retry; + +ATAWaitForIO_Retry2: + statRdy = rt_in8(IO + ATA_REG_STATUS); + + if (statRdy & ATA_SR_ERR) + return false; + + if (!(statRdy & ATA_SR_DRDY)) + goto ATAWaitForIO_Retry2; + + return true; +} + +Void boot_ata_select(UInt16 Bus) +{ + if (Bus == ATA_PRIMARY_IO) + rt_out8(Bus + ATA_REG_HDDEVSEL, ATA_PRIMARY_SEL); + else + rt_out8(Bus + ATA_REG_HDDEVSEL, ATA_SECONDARY_SEL); +} + +Boolean boot_ata_init(UInt16 Bus, UInt8 Drive, UInt16& OutBus, UInt8& OutMaster) +{ + if (boot_ata_detected()) + return true; + + BTextWriter writer; + + UInt16 IO = Bus; + + boot_ata_select(IO); + + // Bus init, NEIN bit. + rt_out8(IO + ATA_REG_NEIN, 1); + + // identify until it's good. +ATAInit_Retry: + auto statRdy = rt_in8(IO + ATA_REG_STATUS); + + if (statRdy & ATA_SR_ERR) + { + writer.Write( + L"BootZ: ATA: Not an IDE based drive.\r"); + + return false; + } + + if ((statRdy & ATA_SR_BSY)) + goto ATAInit_Retry; + + rt_out8(IO + ATA_REG_COMMAND, ATA_CMD_IDENTIFY); + + /// fetch serial info + /// model, speed, number of sectors... + + boot_ata_wait_io(IO); + + for (SizeT indexData = 0ul; indexData < kATADataLen; ++indexData) + { + kATAData[indexData] = Kernel::HAL::rt_in16(IO + ATA_REG_DATA); + } + + OutBus = + (Bus == ATA_PRIMARY_IO) ? BootDeviceATA::kPrimary : BootDeviceATA::kSecondary; + + OutMaster = (Bus == ATA_PRIMARY_IO) ? ATA_MASTER : ATA_SLAVE; + + return true; +} + +Void boot_ata_read(UInt64 Lba, UInt16 IO, UInt8 Master, CharacterTypeUTF8* Buf, SizeT SectorSz, SizeT Size) +{ + Lba /= SectorSz; + + UInt8 Command = ((!Master) ? 0xE0 : 0xF0); + + boot_ata_wait_io(IO); + boot_ata_select(IO); + + rt_out8(IO + ATA_REG_HDDEVSEL, (Command) | (((Lba) >> 24) & 0x0F)); + + rt_out8(IO + ATA_REG_SEC_COUNT0, ((Size + SectorSz) / SectorSz)); + + rt_out8(IO + ATA_REG_LBA0, (Lba)&0xFF); + rt_out8(IO + ATA_REG_LBA1, (Lba) >> 8); + rt_out8(IO + ATA_REG_LBA2, (Lba) >> 16); + rt_out8(IO + ATA_REG_LBA3, (Lba) >> 24); + + rt_out8(IO + ATA_REG_COMMAND, ATA_CMD_READ_PIO); + + boot_ata_wait_io(IO); + + for (SizeT IndexOff = 0; IndexOff < Size; ++IndexOff) + { + boot_ata_wait_io(IO); + Buf[IndexOff] = Kernel::HAL::rt_in16(IO + ATA_REG_DATA); + boot_ata_wait_io(IO); + } +} + +Void boot_ata_write(UInt64 Lba, UInt16 IO, UInt8 Master, CharacterTypeUTF8* Buf, SizeT SectorSz, SizeT Size) +{ + Lba /= SectorSz; + + UInt8 Command = ((!Master) ? 0xE0 : 0xF0); + + boot_ata_wait_io(IO); + boot_ata_select(IO); + + rt_out8(IO + ATA_REG_HDDEVSEL, (Command) | (((Lba) >> 24) & 0x0F)); + + rt_out8(IO + ATA_REG_SEC_COUNT0, ((Size + (SectorSz)) / SectorSz)); + + rt_out8(IO + ATA_REG_LBA0, (Lba)&0xFF); + rt_out8(IO + ATA_REG_LBA1, (Lba) >> 8); + rt_out8(IO + ATA_REG_LBA2, (Lba) >> 16); + rt_out8(IO + ATA_REG_LBA3, (Lba) >> 24); + + rt_out8(IO + ATA_REG_COMMAND, ATA_CMD_WRITE_PIO); + + boot_ata_wait_io(IO); + + for (SizeT IndexOff = 0; IndexOff < Size; ++IndexOff) + { + boot_ata_wait_io(IO); + rt_out16(IO + ATA_REG_DATA, Buf[IndexOff]); + boot_ata_wait_io(IO); + } +} + +/// @check is ATA detected? +Boolean boot_ata_detected(Void) +{ + return kATADetected; +} + +/*** + * + * + * @brief ATA Device class. + * + * + */ + +/** + * @brief ATA Device constructor. + * @param void none. + */ +BootDeviceATA::BootDeviceATA() noexcept +{ + if (boot_ata_init(ATA_PRIMARY_IO, true, this->Leak().mBus, + this->Leak().mMaster) || + boot_ata_init(ATA_SECONDARY_IO, true, this->Leak().mBus, + this->Leak().mMaster)) + { + kATADetected = true; + } +} +/** + * @brief Is ATA detected? + */ +BootDeviceATA::operator bool() +{ + return boot_ata_detected(); +} + +/** + @brief Read Buf from disk + @param Sz Sector size + @param Buf buffer +*/ +BootDeviceATA& BootDeviceATA::Read(CharacterTypeUTF8* Buf, const SizeT& SectorSz) +{ + if (!boot_ata_detected()) + { + Leak().mErr = true; + return *this; + } + + this->Leak().mErr = false; + + if (!Buf || SectorSz < 1) + return *this; + + boot_ata_read(this->Leak().mBase, this->Leak().mBus, this->Leak().mMaster, + Buf, SectorSz, this->Leak().mSize); + + return *this; +} + +/** + @brief Write Buf into disk + @param Sz Sector size + @param Buf buffer +*/ +BootDeviceATA& BootDeviceATA::Write(CharacterTypeUTF8* Buf, const SizeT& SectorSz) +{ + if (!boot_ata_detected()) + { + Leak().mErr = true; + return *this; + } + + Leak().mErr = false; + + if (!Buf || SectorSz < 1) + return *this; + + boot_ata_write(this->Leak().mBase, this->Leak().mBus, this->Leak().mMaster, + Buf, SectorSz, this->Leak().mSize); + + return *this; +} + +/** + * @brief ATA trait getter. + * @return BootDeviceATA::ATATrait& the drive config. + */ +BootDeviceATA::ATATrait& BootDeviceATA::Leak() +{ + return mTrait; +} + +/*** + @brief Getter, gets the number of sectors inside the drive. +*/ +SizeT BootDeviceATA::GetSectorsCount() noexcept +{ + return (kATAData[61] << 16) | kATAData[60]; +} + +SizeT BootDeviceATA::GetDiskSize() noexcept +{ + return this->GetSectorsCount() * BootDeviceATA::kSectorSize; +} diff --git a/dev/Boot/src/HEL/AMD64/BootMain.cc b/dev/Boot/src/HEL/AMD64/BootMain.cc new file mode 100644 index 00000000..51a49d0f --- /dev/null +++ b/dev/Boot/src/HEL/AMD64/BootMain.cc @@ -0,0 +1,318 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// Makes the compiler shut up. +#ifndef kMachineModel +#define kMachineModel "ZkaOS" +#endif // !kMachineModel + +#ifndef kExpectedWidth +#define kExpectedWidth (1280) +#endif + +#ifndef kExpectedHeight +#define kExpectedHeight (720) +#endif + +/** Graphics related. */ + +STATIC EfiGraphicsOutputProtocol* kGop = nullptr; +STATIC UInt16 kGopStride = 0U; +STATIC EfiGUID kGopGuid; + +EXTERN_C Void rt_reset_hardware(); + +EXTERN EfiBootServices* BS; + +/** + @brief Finds and stores the GOP object. +*/ +STATIC Bool boot_init_fb() noexcept +{ + kGopGuid = EfiGUID(EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID); + kGop = nullptr; + + if (BS->LocateProtocol(&kGopGuid, nullptr, (VoidPtr*)&kGop) != kEfiOk) + return No; + + kGopStride = 4; + + for (SizeT i = 0; i < kGop->Mode->MaxMode; ++i) + { + EfiGraphicsOutputProtocolModeInformation* infoPtr = nullptr; + UInt32 sz = 0U; + + kGop->QueryMode(kGop, i, &sz, &infoPtr); + + if (infoPtr->HorizontalResolution == kExpectedWidth && + infoPtr->VerticalResolution == kExpectedHeight) + { + kGop->SetMode(kGop, i); + return Yes; + } + } + + return No; +} + +EXTERN_C VoidPtr boot_read_cr3(); +EXTERN_C Void boot_write_cr3(VoidPtr new_cr3); + +EXTERN EfiBootServices* BS; + +/// @brief Main EFI entrypoint. +/// @param ImageHandle Handle of this image. +/// @param SystemTable The system table of it. +/// @return nothing, never returns. +EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle, + EfiSystemTable* SystemTable) +{ + InitEFI(SystemTable); ///! Init the EFI library. + + HEL::BootInfoHeader* handover_hdr = + new HEL::BootInfoHeader(); + + UInt32 map_key = 0; + UInt32 size_struct_ptr = sizeof(EfiMemoryDescriptor); + EfiMemoryDescriptor* struct_ptr = nullptr; + UInt32 sz_desc = sizeof(EfiMemoryDescriptor); + UInt32 rev_desc = 0; + +#ifdef ZBA_USE_FB + if (!boot_init_fb()) + return 1; ///! Init the GOP. + + for (SizeT index_vt = 0; index_vt < SystemTable->NumberOfTableEntries; + ++index_vt) + { + Char* vendor_table = reinterpret_cast( + SystemTable->ConfigurationTable[index_vt].VendorTable); + + // ACPI's 'RSD PTR', which contains the ACPI SDT (MADT, FACP...) + if (vendor_table[0] == 'R' && vendor_table[1] == 'S' && + vendor_table[2] == 'D' && vendor_table[3] == ' ' && + vendor_table[4] == 'P' && vendor_table[5] == 'T' && + vendor_table[6] == 'R' && vendor_table[7] == ' ') + { + handover_hdr->f_HardwareTables.f_VendorPtr = (VoidPtr)vendor_table; + break; + } + } + + // ------------------------------------------ // + // draw background color. + // ------------------------------------------ // + + handover_hdr->f_GOP.f_The = kGop->Mode->FrameBufferBase; + handover_hdr->f_GOP.f_Width = kGop->Mode->Info->VerticalResolution; + handover_hdr->f_GOP.f_Height = kGop->Mode->Info->HorizontalResolution; + handover_hdr->f_GOP.f_PixelPerLine = kGop->Mode->Info->PixelsPerScanLine; + handover_hdr->f_GOP.f_PixelFormat = kGop->Mode->Info->PixelFormat; + handover_hdr->f_GOP.f_Size = kGop->Mode->FrameBufferSize; +#endif // ZBA_USE_FB + + // ------------------------------------------- // + // Grab MP services, extended to runtime. // + // ------------------------------------------- // + + EfiGUID guid_mp = EfiGUID(EFI_MP_SERVICES_PROTOCOL_GUID); + EfiMpServicesProtocol* mp = nullptr; + + BS->LocateProtocol(&guid_mp, nullptr, reinterpret_cast(&mp)); + + handover_hdr->f_HardwareTables.f_MpPtr = reinterpret_cast(mp); + + kHandoverHeader = handover_hdr; + + fb_init(); + + UI::ui_draw_background(); + + FBDrawBitMapInRegion(zka_disk, ZKA_DISK_HEIGHT, ZKA_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_DISK_HEIGHT) / 2); + + fb_fini(); + + UInt32 cnt_enabled = 0; + UInt32 cnt_disabled = 0; + + mp->GetNumberOfProcessors(mp, &cnt_disabled, &cnt_enabled); + + handover_hdr->f_HardwareTables.f_MultiProcessingEnabled = cnt_enabled > 1; + // Fill handover header now. + + // ---------------------------------------------------- // + // The following checks for an exisiting partition + // inside the disk, if it doesn't have one, + // format the disk. + // ---------------------------------------------------- // + + BS->GetMemoryMap(&size_struct_ptr, struct_ptr, &map_key, &sz_desc, &rev_desc); + + struct_ptr = new EfiMemoryDescriptor[sz_desc]; + + BS->GetMemoryMap(&size_struct_ptr, struct_ptr, &map_key, &sz_desc, &rev_desc); + + auto kDefaultMemoryMap = 0; // Grab any usable entries. + + //-----------------------------------------------------------// + // A simple loop which finds a usable memory region for us. + //-----------------------------------------------------------// + + SizeT lookup_index = 0UL; + + for (; struct_ptr[lookup_index].Kind != EfiMemoryType::EfiConventionalMemory; ++lookup_index) + { + ZKA_UNUSED(0); + } + + kDefaultMemoryMap = lookup_index; + + //-------------------------------------------------------------// + // Update handover file specific table and phyiscal start field. + //-------------------------------------------------------------// + + handover_hdr->f_BitMapStart = nullptr; /* Start of bitmap. */ + handover_hdr->f_BitMapSize = kHandoverBitMapSz; /* Size of bitmap. */ + + while (BS->AllocatePool(EfiLoaderData, handover_hdr->f_BitMapSize, &handover_hdr->f_BitMapStart) != kEfiOk) + { + if (handover_hdr->f_BitMapStart) + { + BS->FreePool(handover_hdr->f_BitMapStart); + handover_hdr->f_BitMapStart = nullptr; + } + } + + handover_hdr->f_FirmwareCustomTables[0] = (VoidPtr)BS; + handover_hdr->f_FirmwareCustomTables[1] = (VoidPtr)ST; + + Boot::BFileReader reader_syschk(L"syschk.sys", ImageHandle); + reader_syschk.ReadAll(0); + + Boot::BThread* syschk_thread = nullptr; + + // ------------------------------------------ // + // If we succeed in reading the blob, then execute it. + // ------------------------------------------ // + + if (reader_syschk.Blob()) + { + syschk_thread = new Boot::BThread(reader_syschk.Blob()); + syschk_thread->SetName("BootZ: System Recovery Check"); + } + + Boot::BDiskFormatFactory partition_factory; + + if (partition_factory.IsPartitionValid() == false && + syschk_thread->Start(handover_hdr, NO) == kEfiOk) + { + fb_init(); + + Boot::BDiskFormatFactory::BFileDescriptor root{}; + + root.fFileName[0] = kNeFSRoot[0]; + root.fFileName[1] = 0; + + root.fKind = kNeFSCatalogKindDir; + + partition_factory.Format("FileSystem (A:) ", &root, 1); + + UI::ui_draw_background(); + + FBDrawBitMapInRegion(zka_has_disk, ZKA_HAS_DISK_HEIGHT, ZKA_HAS_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_HAS_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_HAS_DISK_HEIGHT) / 2); + + fb_fini(); + } + + // ------------------------------------------ // + // null these fields, to avoid being reused later. + // ------------------------------------------ // + + handover_hdr->f_FirmwareCustomTables[0] = nullptr; + handover_hdr->f_FirmwareCustomTables[1] = nullptr; + + handover_hdr->f_FirmwareVendorLen = Boot::BStrLen(SystemTable->FirmwareVendor); + + handover_hdr->f_Magic = kHandoverMagic; + handover_hdr->f_Version = kHandoverVersion; + + // Provide fimware vendor name. + + Boot::BCopyMem(handover_hdr->f_FirmwareVendorName, SystemTable->FirmwareVendor, + handover_hdr->f_FirmwareVendorLen); + + handover_hdr->f_FirmwareVendorLen = Boot::BStrLen(SystemTable->FirmwareVendor); + + // Assign to global 'kHandoverHeader'. + + Boot::BFileReader reader_kernel(L"minoskrnl.exe", ImageHandle); + + reader_kernel.ReadAll(0); + + Boot::BThread* kernel_thread = nullptr; + + // ------------------------------------------ // + // If we succeed in reading the blob, then execute it. + // ------------------------------------------ // + + if (reader_kernel.Blob()) + { + kernel_thread = new Boot::BThread(reader_kernel.Blob()); + kernel_thread->SetName("BootZ: ZkaOS Kernel."); + + handover_hdr->f_KernelImage = reader_kernel.Blob(); + } + else + { + fb_init(); + FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2); + + EFI::Stop(); + } + + Boot::BFileReader ttf_font(L"zka\\fntkrnl.ttf", ImageHandle); + + ttf_font.ReadAll(0); + + if (ttf_font.Blob()) + { + handover_hdr->f_KernelImage = reader_kernel.Blob(); + handover_hdr->f_KernelSz = reader_kernel.Size(); + handover_hdr->f_FontImage = ttf_font.Blob(); + handover_hdr->f_FontSz = ttf_font.Size(); + } + else + { + fb_init(); + FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2); + + EFI::Stop(); + } + + EFI::ExitBootServices(map_key, ImageHandle); + + // ---------------------------------------------------- // + // Finally load the OS kernel. + // ---------------------------------------------------- // + + kernel_thread->Start(handover_hdr, YES); + + CANT_REACH(); +} diff --git a/dev/Boot/src/HEL/AMD64/BootPlatform.cc b/dev/Boot/src/HEL/AMD64/BootPlatform.cc new file mode 100644 index 00000000..5fe7d41f --- /dev/null +++ b/dev/Boot/src/HEL/AMD64/BootPlatform.cc @@ -0,0 +1,106 @@ + +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#include +#include +#include + +#ifdef __BOOTLDR_STANDALONE__ + +using namespace Boot; + +EXTERN_C void rt_hlt() +{ + asm volatile("hlt"); +} + +EXTERN_C void rt_cli() +{ + asm volatile("cli"); +} + +EXTERN_C void rt_sti() +{ + asm volatile("sti"); +} + +EXTERN_C void rt_cld() +{ + asm volatile("cld"); +} + +EXTERN_C void rt_std() +{ + asm volatile("std"); +} + +EXTERN_C void rt_out8(UInt16 port, UInt8 value) +{ + asm volatile("outb %%al, %1" + : + : "a"(value), "Nd"(port) + : "memory"); +} + +EXTERN_C void rt_out16(UInt16 port, UInt16 value) +{ + asm volatile("outw %%ax, %1" + : + : "a"(value), "Nd"(port) + : "memory"); +} + +EXTERN_C void rt_out32(UInt16 port, UInt32 value) +{ + asm volatile("outl %%eax, %1" + : + : "a"(value), "Nd"(port) + : "memory"); +} + +EXTERN_C UInt8 rt_in8(UInt16 port) +{ + UInt8 value; + asm volatile("inb %1, %%al" + : "=a"(value) + : "Nd"(port) + : "memory"); + + return value; +} + +EXTERN_C UInt16 rt_in16(UInt16 port) +{ + UInt16 value; + asm volatile("inw %%dx, %%ax" + : "=a"(value) + : "d"(port)); + + return value; +} + +EXTERN_C UInt32 rt_in32(UInt16 port) +{ + UInt32 value; + asm volatile("inl %1, %%eax" + : "=a"(value) + : "Nd"(port) + : "memory"); + + return value; +} + +#else + +#include + +void rt_hlt() +{ + Kernel::HAL::rt_halt(); +} + +#endif // __BOOTLDR_STANDALONE__ diff --git a/dev/Boot/src/HEL/AMD64/BootSATA.cc b/dev/Boot/src/HEL/AMD64/BootSATA.cc new file mode 100644 index 00000000..229ce7e3 --- /dev/null +++ b/dev/Boot/src/HEL/AMD64/BootSATA.cc @@ -0,0 +1,20 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +/** + * @file BootAHCI.cc + * @author Amlal EL Mahrouss (amlalelmahrouss@icloud.com) + * @brief SATA support for BootZ. + * @version 0.1 + * @date 2024-02-02 + * + * @copyright Copyright (c) Theater Quality Inc + * + */ + +#include +#include +#include diff --git a/dev/Boot/src/HEL/ARM64/.gitkeep b/dev/Boot/src/HEL/ARM64/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/dev/Boot/src/HEL/ARM64/BootAPI.S b/dev/Boot/src/HEL/ARM64/BootAPI.S new file mode 100644 index 00000000..a60ad218 --- /dev/null +++ b/dev/Boot/src/HEL/ARM64/BootAPI.S @@ -0,0 +1,12 @@ +.global rt_jump_to_address + +.text + +/** + @brief this function setups a stack and then jumps to + a function */ +rt_jump_to_address: + mov x19, x0 + mov sp, x2 + blr x19 + diff --git a/dev/Boot/src/HEL/ARM64/BootMain.cc b/dev/Boot/src/HEL/ARM64/BootMain.cc new file mode 100644 index 00000000..fe35ea1b --- /dev/null +++ b/dev/Boot/src/HEL/ARM64/BootMain.cc @@ -0,0 +1,76 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#include +#include +#include +#include + +#ifndef kExpectedWidth +#define kExpectedWidth 844 +#endif + +#ifndef kExpectedHeight +#define kExpectedHeight 390 +#endif + +EXTERN EfiBootServices* BS; + +STATIC EfiGraphicsOutputProtocol* kGop = nullptr; +STATIC UInt16 kGopStride = 0U; +STATIC EfiGUID kGopGuid; + +/// @brief Main EFI entrypoint. +/// @param ImageHandle Handle of this image. +/// @param SystemTable The system table of it. +/// @return nothing, never returns. +EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle, + EfiSystemTable* SystemTable) +{ + InitEFI(SystemTable); + + kGopGuid = EfiGUID(EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID); + kGop = nullptr; + + BS->LocateProtocol(&kGopGuid, nullptr, (VoidPtr*)&kGop); + + kGopStride = 4; + + Boot::BTextWriter writer; + + for (SizeT i = 0; i < kGop->Mode->MaxMode; ++i) + { + EfiGraphicsOutputProtocolModeInformation* infoPtr = nullptr; + UInt32 sz = 0U; + + kGop->QueryMode(kGop, i, &sz, &infoPtr); + + writer.Write(infoPtr->HorizontalResolution); + writer.Write(infoPtr->VerticalResolution); + writer.Write("\r"); + + if (infoPtr->HorizontalResolution == kExpectedWidth && + infoPtr->VerticalResolution == kExpectedHeight) + { + kGop->SetMode(kGop, i); + break; + } + } + + Boot::BFileReader reader_kernel(L"minoskrnl.exe", ImageHandle); + + reader_kernel.ReadAll(0); + + if (reader_kernel.Blob()) + { + auto kernel_thread = Boot::BThread(reader_kernel.Blob()); + + if (kernel_thread.IsValid()) + kernel_thread.Start(nullptr, YES); + } + + CANT_REACH(); +} diff --git a/dev/Boot/src/HEL/ARM64/BootPlatform.cc b/dev/Boot/src/HEL/ARM64/BootPlatform.cc new file mode 100644 index 00000000..df16bd40 --- /dev/null +++ b/dev/Boot/src/HEL/ARM64/BootPlatform.cc @@ -0,0 +1,37 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#include +#include +#include + +#ifdef __BOOTLDR_STANDALONE__ + +using namespace Boot; + +EXTERN_C void rt_hlt() +{ + while (Yes) + ; +} + +EXTERN_C void rt_cli() +{ +} + +EXTERN_C void rt_sti() +{ +} + +EXTERN_C void rt_cld() +{ +} + +EXTERN_C void rt_std() +{ +} + +#endif // __BOOTLDR_STANDALONE__ diff --git a/dev/Boot/src/HEL/POWER/.gitkeep b/dev/Boot/src/HEL/POWER/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/dev/Boot/src/HEL/POWER/CoreBootStartup.S b/dev/Boot/src/HEL/POWER/CoreBootStartup.S new file mode 100644 index 00000000..e4964c59 --- /dev/null +++ b/dev/Boot/src/HEL/POWER/CoreBootStartup.S @@ -0,0 +1,34 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +.section .boot_hdr +.align 4 + +/* BootZ boot header begin */ + +boot_hdr_mag: + .ascii "CB" +boot_hdr_name: + // it has to match ten bytes. + .asciz "zbaosldr\0\0" +boot_hdr_ver: + .word 0x104 +boot_hdr_proc: + .long bootloader_start + +/* BootZ boot header end */ + +.extern bootloader_main +.extern bootloader_stack + +.globl bootloader_start +bootloader_start: + mflr 4 /* real address of .Laddr */ + lwz 0,(bootloader_stack-bootloader_start)(4) /* stack address location */ + mr 1,0 /* use user defined stack */ + + bl bootloader_main + blr diff --git a/dev/Boot/src/New+Delete.cc b/dev/Boot/src/New+Delete.cc new file mode 100644 index 00000000..3abf0ef3 --- /dev/null +++ b/dev/Boot/src/New+Delete.cc @@ -0,0 +1,60 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#include +#include +#include + +#ifdef __BOOTLDR_STANDALONE__ +EXTERN EfiBootServices* BS; + +/// @brief Allocates a new object. +/// @param sz the size. +/// @return +void* operator new(size_t sz) +{ + void* buf = nullptr; + + while (BS->AllocatePool(EfiMemoryType::EfiLoaderData, sz, &buf) == kBufferTooSmall) + BS->FreePool(buf); + + return buf; +} + +/// @brief Allocates a new object. +/// @param sz the size. +/// @return +void* operator new[](size_t sz) +{ + void* buf = nullptr; + BS->AllocatePool(EfiMemoryType::EfiLoaderData, sz, &buf); + + return buf; +} + +/// @brief Deletes the object. +/// @param buf the object. +void operator delete(void* buf) +{ + BS->FreePool(buf); +} + +/// @brief Deletes the object. +/// @param buf the object. +void operator delete[](void* buf) +{ + BS->FreePool(buf); +} + +/// @brief Deletes the object (array specific). +/// @param buf the object. +/// @param size it's size. +void operator delete(void* buf, size_t size) +{ + BS->FreePool(buf); +} + +#endif // __BOOTLDR_STANDALONE__ diff --git a/dev/Boot/src/Root/EFI/STARTUP.NSH b/dev/Boot/src/Root/EFI/STARTUP.NSH new file mode 100644 index 00000000..d29ba8fd --- /dev/null +++ b/dev/Boot/src/Root/EFI/STARTUP.NSH @@ -0,0 +1,2 @@ +fs0: +BOOT\BOOTX64.EFI diff --git a/dev/Boot/src/Root/zka/fntkrnl.ttf b/dev/Boot/src/Root/zka/fntkrnl.ttf new file mode 100644 index 00000000..e9a6dbb0 Binary files /dev/null and b/dev/Boot/src/Root/zka/fntkrnl.ttf differ diff --git a/dev/BootLoader/BootKit/BitManip.h b/dev/BootLoader/BootKit/BitManip.h deleted file mode 100644 index 3b5ea540..00000000 --- a/dev/BootLoader/BootKit/BitManip.h +++ /dev/null @@ -1,20 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#ifndef __BITMANIP_H__ -#define __BITMANIP_H__ - -/// File: BitManip.h -/// Purpose: Bit manipulation helpers, based on coreboot-dev. - -#define bk_set_bit(X, O) X = (1 << O) | X -#define bk_clear_bit(X, O) X = ~(1 << O) & X -#define bk_toogle(X, O) X = (1 << O) ^ X -#define bk_lsb(X) X = X & -X -#define bk_msb(X) X = -(mp_lsb(X)) & X -#define bk_look_for_bit(X, O) (1 << O) | X - -#endif // ifndef __BITMANIP_H__ diff --git a/dev/BootLoader/BootKit/BootKit.h b/dev/BootLoader/BootKit/BootKit.h deleted file mode 100644 index 2e0099f2..00000000 --- a/dev/BootLoader/BootKit/BootKit.h +++ /dev/null @@ -1,392 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -/***********************************************************************************/ -/// @file BootKit.h -/// @brief Bootloader Application Programming Interface. -/***********************************************************************************/ - -#pragma once - -#include -#include -#include -#include -#include -#include -#include - -/// include NeFS header and Support header as well. - -#include -#include - -/***********************************************************************************/ -/// Include other APIs. -/***********************************************************************************/ - -#include -#include - -#include - -/***********************************************************************************/ -/// Framebuffer helpers. -/***********************************************************************************/ - -namespace EFI -{ - EXTERN void ThrowError(const WideChar* errorCode, - const WideChar* reason) noexcept; -} // namespace EFI - -namespace Boot -{ - class BTextWriter; - class BFileReader; - class BThread; - class BVersionString; - - typedef Char* PEFImagePtr; - typedef Char* PEImagePtr; - - typedef WideChar CharacterTypeUTF16; - typedef Char CharacterTypeUTF8; - - using namespace Kernel; - - /** - * @brief BootKit Text Writer class - * Writes to UEFI StdOut. - */ - class BTextWriter final - { - BTextWriter& _Write(const Long& num); - - public: - BTextWriter& Write(const Long& num); - BTextWriter& Write(const Char* str); - BTextWriter& Write(const CharacterTypeUTF16* str); - BTextWriter& WriteCharacter(CharacterTypeUTF16 c); - BTextWriter& Write(const UChar* str); - - public: - explicit BTextWriter() = default; - ~BTextWriter() = default; - - public: - BTextWriter& operator=(const BTextWriter&) = default; - BTextWriter(const BTextWriter&) = default; - }; - - Kernel::SizeT BCopyMem(CharacterTypeUTF16* dest, CharacterTypeUTF16* src, const Kernel::SizeT len); - - Kernel::SizeT BSetMem(CharacterTypeUTF8* src, const CharacterTypeUTF8 byte, const Kernel::SizeT len); - - /// String length functions. - - /// @brief get string length. - Kernel::SizeT BStrLen(const CharacterTypeUTF16* ptr); - - /// @brief set memory with custom value. - Kernel::SizeT BSetMem(CharacterTypeUTF16* src, const CharacterTypeUTF16 byte, const Kernel::SizeT len); - - /** - * @brief BootKit File Reader class - * Reads the Firmware Boot partition and filesystem. - */ - class BFileReader final - { - public: - explicit BFileReader(const CharacterTypeUTF16* path, - EfiHandlePtr ImageHandle); - ~BFileReader(); - - public: - Void ReadAll(SizeT until, SizeT chunk = kib_cast(4), UIntPtr out_address = 0UL); - - enum - { - kOperationOkay, - kNotSupported, - kEmptyDirectory, - kNoSuchEntry, - kIsDirectory, - kTooSmall, - kCount, - }; - - /// @brief error code getter. - /// @return the error code. - Int32& Error(); - - /// @brief blob getter. - /// @return the blob. - VoidPtr Blob(); - - /// @breif Size getter. - /// @return the size of the file. - UInt64& Size(); - - public: - BFileReader& operator=(const BFileReader&) = default; - BFileReader(const BFileReader&) = default; - - private: - Int32 mErrorCode{kOperationOkay}; - VoidPtr mBlob{nullptr}; - CharacterTypeUTF16 mPath[kPathLen]; - BTextWriter mWriter; - EfiFileProtocol* mFile{nullptr}; - UInt64 mSizeFile{0}; - EfiFileProtocol* mRootFs; - }; - - typedef UInt8* BlobType; - - class BVersionString final - { - public: - static const CharacterTypeUTF8* The() - { - return BOOTLOADER_VERSION; - } - }; - - /***********************************************************************************/ - /// Provide some useful processor features. - /***********************************************************************************/ - -#ifdef __EFI_x86_64__ - - /*** - * Common processor instructions. - */ - - EXTERN_C void rt_out8(UInt16 port, UInt8 value); - EXTERN_C void rt_out16(UInt16 port, UInt16 value); - EXTERN_C void rt_out32(UInt16 port, UInt32 value); - EXTERN_C UInt8 rt_in8(UInt16 port); - EXTERN_C UInt16 In16(UInt16 port); - EXTERN_C UInt32 rt_in32(UInt16 port); - - EXTERN_C void rt_hlt(); - EXTERN_C void rt_cli(); - EXTERN_C void rt_sti(); - EXTERN_C void rt_cld(); - EXTERN_C void rt_std(); - -#endif // __EFI_x86_64__ - - static inline const UInt32 kRgbRed = 0x000000FF; - static inline const UInt32 kRgbGreen = 0x0000FF00; - static inline const UInt32 kRgbBlue = 0x00FF0000; - static inline const UInt32 kRgbBlack = 0x00000000; - static inline const UInt32 kRgbWhite = 0x00FFFFFF; - -#define kBKBootFileMime "boot-x/file" -#define kBKBootDirMime "boot-x/dir" - - /// @brief BootKit Drive Formatter. - template - class BDiskFormatFactory final - { - public: - /// @brief File entry for **BDiskFormatFactory**. - struct BFileDescriptor final - { - Char fFileName[kNeFSNodeNameLen]; - Int32 fKind; - }; - - public: - explicit BDiskFormatFactory() = default; - explicit BDiskFormatFactory(BootDev dev) - : fDiskDev(dev) - { - } - - ~BDiskFormatFactory() = default; - - ZKA_COPY_DELETE(BDiskFormatFactory); - - /// @brief Format disk using partition name and fileBlobs. - /// @param Partition partName the target partition name. - /// @param fileBlobs blobs array. - /// @param blobCount blobs array count. - /// @retval True disk has been formatted. - /// @retval False failed to format. - Boolean Format(const Char* partName, BFileDescriptor* fileBlobs, SizeT blobCount); - - /// @brief check if partition is good. - Bool IsPartitionValid() noexcept - { - fDiskDev.Leak().mBase = (kNeFSRootCatalogStartAddress); - fDiskDev.Leak().mSize = BootDev::kSectorSize; - - Char buf[BootDev::kSectorSize] = {0}; - - fDiskDev.Read(buf, BootDev::kSectorSize); - - NFS_ROOT_PARTITION_BLOCK* blockPart = reinterpret_cast(buf); - - BTextWriter writer; - - for (SizeT indexMag = 0UL; indexMag < kNeFSIdentLen; ++indexMag) - { - if (blockPart->Ident[indexMag] != kNeFSIdent[indexMag]) - return false; - } - - if (blockPart->DiskSize != this->fDiskDev.GetDiskSize() || - blockPart->DiskSize < 1 || - blockPart->SectorSize != BootDev::kSectorSize || - blockPart->Version != kNeFSVersionInteger || - blockPart->StartCatalog == 0) - { - return false; - } - else if (blockPart->PartitionName[0] == 0) - { - return false; - } - - writer.Write(L"BootZ: Partition: ").Write(blockPart->PartitionName).Write(L" is healthy.\r"); - - return true; - } - - private: - /// @brief Write all of the requested catalogs into the filesystem. - /// @param fileBlobs the blobs. - /// @param blobCount the number of blobs to write. - /// @param partBlock the NeFS partition block. - Boolean WriteRootCatalog(BFileDescriptor* fileBlobs, SizeT blobCount, NFS_ROOT_PARTITION_BLOCK& partBlock) - { - BFileDescriptor* blob = fileBlobs; - Lba startLba = partBlock.StartCatalog; - BTextWriter writer; - - NFS_CATALOG_STRUCT catalogKind{0}; - - constexpr auto cNeFSCatalogPadding = 4; - - catalogKind.PrevSibling = startLba; - catalogKind.NextSibling = (startLba + sizeof(NFS_CATALOG_STRUCT) * cNeFSCatalogPadding); - - /// Fill catalog kind. - catalogKind.Kind = blob->fKind; - catalogKind.Flags = kNeFSFlagCreated; - - --partBlock.FreeCatalog; - --partBlock.FreeSectors; - - CopyMem(catalogKind.Name, blob->fFileName, StrLen(blob->fFileName)); - - fDiskDev.Leak().mBase = startLba; - fDiskDev.Leak().mSize = sizeof(NFS_CATALOG_STRUCT); - - fDiskDev.Write((Char*)&catalogKind, sizeof(NFS_CATALOG_STRUCT)); - - writer.Write(L"BootZ: Wrote directory: ").Write(blob->fFileName).Write(L"\r"); - - return true; - } - - private: - BootDev fDiskDev; - }; - - /// @brief Format disk. - /// @param Partition Name - /// @param Blobs. - /// @param Number of blobs. - /// @retval True disk has been formatted. - /// @retval False failed to format. - template - inline Boolean BDiskFormatFactory::Format(const Char* partName, - BDiskFormatFactory::BFileDescriptor* fileBlobs, - SizeT blobCount) - { - if (!fileBlobs || !blobCount) - return false; /// sanity check - - /// @note A catalog roughly equal to a sector. - - constexpr auto kMinimumDiskSize = kNeFSMinimumDiskSize; // at minimum. - - /// @note also look at EPM headers, for free part blocks. - - if (fDiskDev.GetDiskSize() < kMinimumDiskSize) - { - fb_init(); - - FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2); - EFI::ThrowError(L"Drive-Too-Tiny", L"Can't format a New Filesystem partition here."); - return false; - } - - NFS_ROOT_PARTITION_BLOCK partBlock{0}; - - CopyMem(partBlock.Ident, kNeFSIdent, kNeFSIdentLen - 1); - CopyMem(partBlock.PartitionName, partName, StrLen(partName)); - - partBlock.Version = kNeFSVersionInteger; - partBlock.CatalogCount = blobCount; - partBlock.Kind = kNeFSHardDrive; - partBlock.SectorSize = sizeof(NFS_ROOT_PARTITION_BLOCK); - partBlock.FreeCatalog = fDiskDev.GetSectorsCount() / sizeof(NFS_CATALOG_STRUCT); - partBlock.SectorCount = fDiskDev.GetSectorsCount(); - partBlock.FreeSectors = fDiskDev.GetSectorsCount(); - partBlock.StartCatalog = kNeFSCatalogStartAddress; - partBlock.DiskSize = fDiskDev.GetDiskSize(); - partBlock.Flags = kNeFSPartitionTypeBoot | kNeFSPartitionTypeStandard; - - fDiskDev.Leak().mBase = kNeFSRootCatalogStartAddress; - fDiskDev.Leak().mSize = sizeof(NFS_ROOT_PARTITION_BLOCK); - - fDiskDev.Write((Char*)&partBlock, sizeof(NFS_ROOT_PARTITION_BLOCK)); - - BOOT_BLOCK_STRUCT epm_boot{0}; - - constexpr auto kFsName = "NeFS"; - constexpr auto kBlockName = "ZKA:"; - - CopyMem(epm_boot.Fs, reinterpret_cast(const_cast(kFsName)), StrLen(kFsName)); - - epm_boot.FsVersion = kNeFSVersionInteger; - epm_boot.LbaStart = kNeFSRootCatalogStartAddress; - epm_boot.SectorSz = partBlock.SectorSize; - epm_boot.Kind = kEPMZkaOS; - epm_boot.NumBlocks = partBlock.CatalogCount; - - CopyMem(epm_boot.Name, reinterpret_cast(const_cast(kBlockName)), StrLen(kBlockName)); - CopyMem(epm_boot.Magic, reinterpret_cast(const_cast(kEPMMagic)), StrLen(kEPMMagic)); - - fDiskDev.Leak().mBase = kEPMBootBlockLba; // always always resies at zero block. - fDiskDev.Leak().mSize = sizeof(BOOT_BLOCK_STRUCT); - - fDiskDev.Write((Char*)&epm_boot, sizeof(BOOT_BLOCK_STRUCT)); - - /// if we can write a root catalog, then write the partition block. - if (this->WriteRootCatalog(fileBlobs, blobCount, partBlock)) - { - BTextWriter writer; - writer.Write(L"BootZ: Drive Formatted Successfully.\r"); - - return true; - } - else - { - fb_init(); - FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2); - - EFI::ThrowError(L"Filesystem-Failure-Part", L"Filesystem couldn't be partitioned, this drive cannot be formatted as an explicit partition map."); - } - - return false; - } -} // namespace Boot diff --git a/dev/BootLoader/BootKit/Device.h b/dev/BootLoader/BootKit/Device.h deleted file mode 100644 index 03e913bd..00000000 --- a/dev/BootLoader/BootKit/Device.h +++ /dev/null @@ -1,37 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#pragma once - -#include -#include - -using namespace Kernel; - -/// @brief Device type. -class Device -{ -public: - explicit Device() = default; - virtual ~Device() = default; - - ZKA_MOVE_DEFAULT(Device); - - struct Trait - { - SizeT mBase{1024}; - SizeT mSize{1024}; - }; - - virtual Trait& Leak() = 0; - - virtual Device& Read(Char* Buf, const SizeT& SecCount) = 0; - virtual Device& Write(Char* Buf, const SizeT& SecCount) = 0; -}; - -typedef Device BootDevice; -typedef Device NetworkDevice; -typedef Device DiskDevice; diff --git a/dev/BootLoader/BootKit/EPM.h b/dev/BootLoader/BootKit/EPM.h deleted file mode 100644 index 1956144e..00000000 --- a/dev/BootLoader/BootKit/EPM.h +++ /dev/null @@ -1,9 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#pragma once - -#include diff --git a/dev/BootLoader/BootKit/HW/ATA.h b/dev/BootLoader/BootKit/HW/ATA.h deleted file mode 100644 index 79a19886..00000000 --- a/dev/BootLoader/BootKit/HW/ATA.h +++ /dev/null @@ -1,58 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#pragma once - -#include -#include - -using namespace Kernel; - -class BootDeviceATA final : public Device -{ -public: - enum - { - kPrimary = ATA_PRIMARY_IO, - kSecondary = ATA_SECONDARY_IO, - }; - - explicit BootDeviceATA() noexcept; - ~BootDeviceATA() = default; - - ZKA_COPY_DELETE(BootDeviceATA); - - enum - { - kSectorSize = kATASectorSize - }; - - struct ATATrait final : public Device::Trait - { - UInt16 mBus{kPrimary}; - UInt8 mMaster{0}; - Boolean mErr{false}; - - operator bool() - { - return !mErr; - } - }; - -public: - operator bool(); - - SizeT GetSectorsCount() noexcept; - SizeT GetDiskSize() noexcept; - - BootDeviceATA& Read(Char* Buf, const SizeT& SecCount) override; - BootDeviceATA& Write(Char* Buf, const SizeT& SecCount) override; - - ATATrait& Leak() override; - -private: - ATATrait mTrait; -}; diff --git a/dev/BootLoader/BootKit/HW/SATA.h b/dev/BootLoader/BootKit/HW/SATA.h deleted file mode 100644 index 0b6dd92b..00000000 --- a/dev/BootLoader/BootKit/HW/SATA.h +++ /dev/null @@ -1,46 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#pragma once - -#include -#include - -class BootDeviceSATA final -{ -public: - explicit BootDeviceSATA() noexcept; - ~BootDeviceSATA() = default; - - ZKA_COPY_DEFAULT(BootDeviceSATA); - - struct SATATrait final - { - Kernel::SizeT mBase{1024}; - Kernel::Boolean mErr{false}; - Kernel::Boolean mDetected{false}; - - operator bool() - { - return !this->mErr; - } - }; - - operator bool() - { - return this->Leak().mDetected; - } - - BootDeviceSATA& Read(Kernel::WideChar* Buf, const Kernel::SizeT& SecCount); - BootDeviceSATA& Write(Kernel::WideChar* Buf, const Kernel::SizeT& SecCount); - - SATATrait& Leak(); - -private: - SATATrait mTrait; -}; - -#define kAHCISectorSz 4096 diff --git a/dev/BootLoader/BootKit/Platform.h b/dev/BootLoader/BootKit/Platform.h deleted file mode 100644 index c8bb5058..00000000 --- a/dev/BootLoader/BootKit/Platform.h +++ /dev/null @@ -1,32 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#pragma once - -/** - @file Platform.h - @brief Platform specific code. -*/ - -#ifdef __x86_64__ - -#ifdef __cplusplus -#ifndef EXTERN_C -#define EXTERN_C extern "C" -#endif -#else -#ifndef EXTERN_C -#define EXTERN_C extern -#endif -#endif // __cplusplus - -EXTERN_C void rt_halt(); -EXTERN_C void rt_cli(); -EXTERN_C void rt_sti(); -EXTERN_C void rt_cld(); -EXTERN_C void rt_std(); - -#endif /* ifdef __x86_64__ */ diff --git a/dev/BootLoader/BootKit/Protocol.h b/dev/BootLoader/BootKit/Protocol.h deleted file mode 100644 index 618885fe..00000000 --- a/dev/BootLoader/BootKit/Protocol.h +++ /dev/null @@ -1,10 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#pragma once - -#include -#include diff --git a/dev/BootLoader/BootKit/Rsrc/zka_disk.rsrc b/dev/BootLoader/BootKit/Rsrc/zka_disk.rsrc deleted file mode 100644 index ce980b7b..00000000 --- a/dev/BootLoader/BootKit/Rsrc/zka_disk.rsrc +++ /dev/null @@ -1,116 +0,0 @@ -#define ZKA_DISK_HEIGHT 110 -#define ZKA_DISK_WIDTH 110 - -// array size is 36300 -static const unsigned int zka_disk[] = { - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x333333, 0x565656, 0x636363, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6a6a6a, 0x5f5f5f, 0x4d4d4d, 0x2b2b2b, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x464646, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x6a6a6a, 0x3b3b3b, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x3d3d3d, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x252525, 0x676767, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x606060, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x3d3d3d, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x616161, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x525252, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x242424, 0x767676, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x676767, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x393939, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7e7e7e, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4e4e4e, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x3f3f3f, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x666666, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x555555, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x222222, 0x7c7c7c, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x6d6d6d, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x393939, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x868686, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x515151, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x404040, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x6a6a6a, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x828282, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x727272, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x383838, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x8e8e8e, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x525252, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x414141, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x6e6e6e, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x5c5c5c, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x868686, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x787878, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x373737, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x959595, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x545454, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0x444444, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x707070, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0x5e5e5e, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x8b8b8b, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0x7c7c7c, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x363636, 0xa7a7a7, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0x9c9c9c, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x545454, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0x464646, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x717171, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0x636363, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x8e8e8e, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0x818181, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x343434, 0xacacac, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xa3a3a3, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x545454, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0x484848, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x727272, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0x676767, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x909090, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0x868686, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x313131, 0xb0b0b0, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xa9a9a9, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x525252, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0x494949, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x727272, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0x6a6a6a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x929292, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0x8c8c8c, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x2e2e2e, 0xb4b4b4, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xafafaf, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x505050, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0x4b4b4b, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x717171, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0x6e6e6e, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x939393, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0x929292, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x2a2a2a, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x4c4c4c, 0x4c4c4c, 0x4c4c4c, 0x4b4b4b, 0x4b4b4b, 0x4b4b4b, 0x4b4b4b, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x494949, 0x494949, 0x494949, 0x494949, 0x484848, 0x484848, 0x484848, 0x484848, 0x474747, 0x474747, 0x474747, 0x464646, 0x464646, 0x464646, 0x464646, 0x454545, 0x454545, 0x454545, 0x454545, 0x444444, 0x444444, 0x444444, 0x444444, 0x434343, 0x434343, 0x434343, 0x434343, 0x424242, 0x424242, 0x424242, 0x414141, 0x414141, 0x414141, 0x414141, 0x404040, 0x404040, 0x404040, 0x404040, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3e3e3e, 0x3e3e3e, 0x3e3e3e, 0x3e3e3e, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 0x3b3b3b, 0x3b3b3b, 0x3b3b3b, 0x3a3a3a, 0x3a3a3a, 0x3a3a3a, 0x3a3a3a, 0x393939, 0x393939, 0x393939, 0x393939, 0x383838, 0x383838, 0x383838, 0x383838, 0x373737, 0x373737, 0x373737, 0x373737, 0x363636, 0x363636, 0x363636, 0x353535, 0x353535, 0x353535, 0x353535, 0x343434, 0x343434, 0x343434, 0x343434, 0x333333, 0x333333, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xababab, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x949494, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0x9f9f9f, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x888888, 0x888888, 0x868686, 0x868686, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x868686, 0x868686, 0x848484, 0x848484, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa3a3a3, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x999999, 0x979797, 0x979797, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xababab, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x949494, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0x9f9f9f, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x888888, 0x888888, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4d4d4d, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4d4d4d, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4d4d4d, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa3a3a3, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x999999, 0x979797, 0x979797, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xababab, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x949494, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0x9f9f9f, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x888888, 0x888888, 0x868686, 0x868686, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xc6c6c6, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x868686, 0x868686, 0x848484, 0x848484, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x565656, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x9a9a9a, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa3a3a3, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x464646, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x797979, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x999999, 0x979797, 0x979797, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x353535, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xbfbfbf, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xababab, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x949494, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x464646, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x464646, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0x9f9f9f, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x888888, 0x888888, 0x868686, 0x868686, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x676767, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x7f7f7f, 0xbababa, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x626262, 0x484848, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x3a3a3a, 0x4b4b4b, 0x4b4b4b, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x494949, 0x494949, 0x494949, 0x494949, 0x484848, 0x484848, 0x484848, 0x484848, 0x474747, 0x474747, 0x474747, 0x464646, 0x464646, 0x464646, 0x464646, 0x454545, 0x454545, 0x454545, 0x454545, 0x444444, 0x444444, 0x444444, 0x444444, 0x434343, 0x434343, 0x434343, 0x424242, 0x424242, 0x424242, 0x424242, 0x414141, 0x414141, 0x414141, 0x414141, 0x404040, 0x404040, 0x404040, 0x404040, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3e3e3e, 0x3e3e3e, 0x3e3e3e, 0x3e3e3e, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 0x3b3b3b, 0x3b3b3b, 0x3b3b3b, 0x3a3a3a, 0x3a3a3a, 0x3a3a3a, 0x3a3a3a, 0x393939, 0x393939, 0x393939, 0x393939, 0x383838, 0x383838, 0x383838, 0x383838, 0x373737, 0x373737, 0x373737, 0x373737, 0x363636, 0x363636, 0x363636, 0x353535, 0x353535, 0x353535, 0x353535, 0x272727, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020 -}; \ No newline at end of file diff --git a/dev/BootLoader/BootKit/Rsrc/zka_has_disk.rsrc b/dev/BootLoader/BootKit/Rsrc/zka_has_disk.rsrc deleted file mode 100644 index bdc0bb99..00000000 --- a/dev/BootLoader/BootKit/Rsrc/zka_has_disk.rsrc +++ /dev/null @@ -1,116 +0,0 @@ -#define ZKA_HAS_DISK_HEIGHT 110 -#define ZKA_HAS_DISK_WIDTH 110 - -// array size is 36300 -static const unsigned int zka_has_disk[] = { - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x333333, 0x565656, 0x636363, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6a6a6a, 0x5f5f5f, 0x4d4d4d, 0x2b2b2b, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x464646, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x6a6a6a, 0x3b3b3b, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x3d3d3d, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x252525, 0x676767, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x606060, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x3d3d3d, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x616161, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x525252, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x242424, 0x767676, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x676767, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x393939, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7e7e7e, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4e4e4e, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x3f3f3f, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x666666, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x555555, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x222222, 0x7c7c7c, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x6d6d6d, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x393939, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x868686, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x515151, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x404040, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x6a6a6a, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x89948e, 0x7ba08a, 0x6eaa87, 0x6cab87, 0x6cab87, 0x6caa87, 0x6caa87, 0x6da888, 0x799f8a, 0x89938e, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x828282, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x8c9590, 0x72ab88, 0x61b883, 0x52c37f, 0x4bc87e, 0x4ac77e, 0x4ac67e, 0x49c57e, 0x48c47f, 0x47c37f, 0x47c37f, 0x46c17f, 0x46c180, 0x45c07f, 0x4cba82, 0x5cb085, 0x6fa58a, 0x8c9490, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x727272, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x383838, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x899d90, 0x69b686, 0x4ecb7e, 0x4dca7e, 0x4cc97e, 0x4bc87e, 0x4bc77f, 0x4ac67f, 0x4ac67f, 0x49c57f, 0x48c47f, 0x47c37f, 0x47c280, 0x46c180, 0x46c080, 0x45bf80, 0x44bf81, 0x43be81, 0x43bd81, 0x42bc81, 0x62ac89, 0x869a91, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x8e8e8e, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x525252, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x86a390, 0x61be83, 0x4ecb7d, 0x4dca7d, 0x4cca7e, 0x4bc87e, 0x4bc87e, 0x4ac77e, 0x4ac67e, 0x49c57e, 0x48c47f, 0x48c37f, 0x47c37f, 0x46c17f, 0x46c180, 0x45c080, 0x45bf80, 0x44be80, 0x43bd80, 0x42bc80, 0x42bc81, 0x41ba81, 0x41ba81, 0x40b981, 0x57af87, 0x839d92, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x414141, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x6e6e6e, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x929e96, 0x68bb87, 0x4fcd7e, 0x4ecc7d, 0x4ecb7e, 0x4dca7e, 0x4cc97e, 0x4bc87e, 0x4bc77f, 0x4ac67f, 0x4ac67f, 0x49c57f, 0x48c480, 0x47c380, 0x47c280, 0x46c180, 0x46c080, 0x45bf80, 0x44bf81, 0x43be81, 0x43bd81, 0x42bc81, 0x42bb82, 0x41ba82, 0x40b982, 0x40b882, 0x3fb882, 0x3eb782, 0x5fab8b, 0x919b97, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x5c5c5c, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x868686, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x88a893, 0x55c97f, 0x4ecc7d, 0x4ecb7d, 0x4dca7d, 0x4cc97e, 0x4bc87e, 0x4bc87e, 0x4ac77e, 0x4ac67e, 0x49c57e, 0x48c47f, 0x47c37f, 0x47c27f, 0x46c17f, 0x46c180, 0x45c080, 0x44bf80, 0x44be80, 0x43bd80, 0x42bc80, 0x42bb81, 0x41ba81, 0x41ba81, 0x40b981, 0x3fb882, 0x3eb782, 0x3eb682, 0x3db582, 0x3db482, 0x45b185, 0x83a195, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x787878, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x373737, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x7bb48f, 0x4fcd7d, 0x4fcc7d, 0x4ecb7d, 0x4dcb7e, 0x4cca7e, 0x4cc97e, 0x4bc87e, 0x4bc77f, 0x4ac67f, 0x49c57f, 0x49c47f, 0x48c480, 0x47c37f, 0x47c280, 0x46c180, 0x46c080, 0x45bf80, 0x44bf81, 0x43bd81, 0x43bd81, 0x42bc81, 0x42bb82, 0x41ba82, 0x40b982, 0x3fb882, 0x3fb882, 0x3eb682, 0x3eb683, 0x3db583, 0x3cb483, 0x3cb383, 0x3bb284, 0x74a693, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x959595, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x545454, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0x76b88e, 0x4fcd7d, 0x4ecc7d, 0x4ecb7d, 0x4dca7d, 0x4cca7e, 0x4bc87e, 0x4bc87e, 0x4ac77e, 0x4ac67f, 0x49c57e, 0x48c47f, 0x48c37f, 0x47c37f, 0x46c17f, 0x46c180, 0x45c080, 0x45bf80, 0x44be80, 0x43bd81, 0x42bc81, 0x42bc81, 0x41ba81, 0x41ba81, 0x40b981, 0x3fb882, 0x3eb782, 0x3eb682, 0x3db582, 0x3db583, 0x3cb383, 0x3bb383, 0x3ab283, 0x3ab183, 0x39b083, 0x6fa893, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0x444444, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x707070, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0x79ba90, 0x4fcd7d, 0x4fcd7e, 0x4ecb7e, 0x4dcb7e, 0x4dca7e, 0x4cc97e, 0x4bc87e, 0x4bc77f, 0x4ac67f, 0x4ac67f, 0x49c47f, 0x48c480, 0x47c380, 0x47c280, 0x46c180, 0x46c080, 0x45bf80, 0x44bf81, 0x43bd81, 0x43bd81, 0x42bc81, 0x42bb82, 0x41ba82, 0x40b982, 0x40b882, 0x3fb883, 0x3eb682, 0x3eb683, 0x3db583, 0x3cb483, 0x3cb383, 0x3bb284, 0x3ab184, 0x3ab184, 0x39af84, 0x38af85, 0x6da894, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0x5e5e5e, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x8b8b8b, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0x7db892, 0x4fcd7d, 0x4ecc7d, 0x4ecb7d, 0x4dca7d, 0x4cc97e, 0x4bc87e, 0x4bc87e, 0x4ac67e, 0x4ac67e, 0x49c57e, 0x48c47f, 0x47c37f, 0x47c27f, 0x46c17f, 0x46c180, 0x45bf80, 0x44bf80, 0x43be80, 0x43bd80, 0x42bc80, 0x42bb81, 0x41ba81, 0x40ba81, 0x3fb881, 0x3fb882, 0x3eb782, 0x3eb682, 0x3db582, 0x3cb482, 0x3cb382, 0x3bb383, 0x3ab183, 0x3ab183, 0x39b083, 0x39af84, 0x38ae84, 0x37ad84, 0x36ac84, 0x74a897, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0x7c7c7c, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x363636, 0xa7a7a7, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0x90b39d, 0x4fcd7d, 0x4fcc7d, 0x4ecb7d, 0x4dcb7e, 0x4cc97e, 0x4cc97e, 0x4bc87e, 0x4bc77f, 0x4ac67f, 0x49c57f, 0x48c47f, 0x48c480, 0x47c27f, 0x47c280, 0x46c180, 0x45c080, 0x44bf80, 0x44be81, 0x43bd81, 0x43bd81, 0x42bb81, 0x41bb82, 0x41ba82, 0x40b982, 0x3fb882, 0x3fb782, 0x3eb682, 0x3eb683, 0x3db483, 0x3cb483, 0x3bb383, 0x3bb284, 0x3ab184, 0x3ab084, 0x39af84, 0x38af84, 0x37ad84, 0x37ad85, 0x36ac85, 0x36ab85, 0x8aa99f, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0x9c9c9c, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x545454, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xa2afa6, 0x56ca80, 0x4ecc7d, 0x4ecb7d, 0x4dca7d, 0x4cc97e, 0x4bc87e, 0x4bc87e, 0x4ac67e, 0x4ac67f, 0x49c57e, 0x48c47f, 0x47c37f, 0x47c27f, 0x46c17f, 0x46c180, 0x45bf80, 0x44bf80, 0x43be80, 0x43bd81, 0x42bc81, 0x42bb81, 0x41ba81, 0x40ba81, 0x40b881, 0x3fb882, 0x3eb782, 0x3eb682, 0x3db582, 0x3db483, 0x3cb383, 0x3bb383, 0x3ab183, 0x3ab183, 0x39b083, 0x39af84, 0x38ae84, 0x37ad84, 0x36ac84, 0x36ac85, 0x35ab85, 0x35aa85, 0x3ea988, 0xa2aba8, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0x464646, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x717171, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0x70c28e, 0x4fcc7e, 0x4ecb7e, 0x4dcb7e, 0x4cca7e, 0x4cc97e, 0x4bc87e, 0x4bc77f, 0x4ac67f, 0x49c57f, 0x48c47f, 0x48c480, 0x47c380, 0x47c280, 0x46c180, 0x45c080, 0x45bf80, 0x44be81, 0x43bd81, 0x43bd81, 0x42bc81, 0x42bb82, 0x41ba82, 0x40b982, 0x3fb882, 0x3fb783, 0x3eb682, 0x3eb683, 0x3db583, 0x3cb483, 0x3bb383, 0x3bb284, 0x3ab184, 0x3ab084, 0x39af84, 0x38af85, 0x38ae85, 0x37ad85, 0x36ac85, 0x36ab85, 0x35aa85, 0x34a986, 0x34a886, 0x63aa96, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0x636363, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x8e8e8e, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0x9bb6a5, 0x4ecc7d, 0x4dcb7d, 0x4cca7d, 0x4cc97e, 0x4bc87e, 0x4bc77e, 0x4ac67e, 0x49c67e, 0x49c57e, 0x48c47f, 0x47c37f, 0x47c27f, 0x46c17f, 0x46c080, 0x45bf80, 0x44bf80, 0x43be80, 0x43bd81, 0x42bc80, 0x42bb81, 0x41ba81, 0x40b981, 0x3fb881, 0x3fb882, 0x3eb782, 0x3eb682, 0x3db582, 0x3cb483, 0x3bb383, 0x3bb283, 0x3ab183, 0x3ab183, 0x39b083, 0x38af84, 0x37ae84, 0x37ad84, 0x36ac84, 0x36ab85, 0x35aa85, 0x34aa85, 0x34a985, 0x33a885, 0x32a785, 0x32a686, 0x9baea9, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0x818181, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x343434, 0xacacac, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0x68c68b, 0x4ecb7d, 0x4dcb7e, 0x4cc97e, 0x4cc97e, 0x4bc87e, 0x4bc77f, 0x4ac67f, 0x49c57f, 0x48c47f, 0x48c480, 0x47c27f, 0x47c280, 0x46c180, 0x45c080, 0x44bf80, 0x44be81, 0x43bd81, 0x43bd81, 0x42bb81, 0x41bb82, 0x41ba82, 0x40b982, 0x3fb882, 0x3fb782, 0x3eb682, 0x3eb683, 0x3db483, 0x3cb483, 0x3bb383, 0x3bb284, 0x3ab184, 0x3ab084, 0x39af84, 0x38af85, 0x37ad84, 0x37ad85, 0x36ac85, 0x36ab85, 0x35aa85, 0x34a986, 0x33a886, 0x33a886, 0x32a686, 0x32a687, 0x57a993, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xa3a3a3, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x545454, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xa0baaa, 0x4dcb7d, 0x4dca7d, 0x4cc97e, 0x4bc87e, 0x4bc77e, 0x4ac67e, 0x4ac67f, 0x49c57e, 0x48c47f, 0x47c37f, 0x47c27f, 0x46c17f, 0x46c080, 0x45bf80, 0x44bf80, 0x43be80, 0x43bd81, 0x42bc81, 0x42bb81, 0x41ba81, 0x40b981, 0x3fb881, 0x3fb882, 0x3eb782, 0x3eb682, 0x3db582, 0x3cb483, 0x3bb383, 0x3bb283, 0x3ab183, 0x3ab184, 0x39b083, 0x38af84, 0x38ae84, 0x37ad84, 0x36ac84, 0x36ab85, 0x35aa85, 0x35aa85, 0x34a985, 0x33a886, 0x32a786, 0x32a686, 0x31a586, 0x31a486, 0x30a386, 0x9eb2ad, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0x484848, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x727272, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0x72c592, 0x4dcb7e, 0x4cc97e, 0x4cc97e, 0x4bc87e, 0x4bc77f, 0x4ac67f, 0x49c57f, 0x48c47f, 0x48c480, 0x47c280, 0x47c280, 0x46c180, 0x45c080, 0x45bf81, 0x44be81, 0x43bd81, 0x43bd81, 0x42bb81, 0x42bb82, 0x41ba82, 0x40b982, 0x3fb882, 0x3fb783, 0x3eb682, 0x3eb683, 0x3db483, 0x3cb483, 0x3bb383, 0x3bb284, 0x3ab184, 0x3ab084, 0x39af84, 0x38af85, 0x37ad85, 0x37ad85, 0x36ac85, 0x36ab85, 0x35aa85, 0x34a986, 0x33a886, 0x33a886, 0x32a686, 0x32a687, 0x31a587, 0x30a487, 0x30a387, 0x60aa99, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0x676767, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x909090, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xb3bbb6, 0x50c97f, 0x4cc97e, 0x4bc87e, 0x4bc77e, 0x4ac67e, 0x49c57e, 0x48c47e, 0x48c47f, 0x47c37f, 0x47c27f, 0x46c17f, 0x45c080, 0x44bf80, 0x44be80, 0x43bd80, 0x43bd81, 0x42bc80, 0x41bb81, 0x41ba81, 0x40b981, 0x3fb881, 0x3fb782, 0x3eb682, 0x3eb682, 0x3db582, 0x3cb482, 0x3bb383, 0x3bb283, 0x3ab183, 0x3ab083, 0x39af83, 0x38af84, 0x37ae84, 0x51b894, 0x8ed1b9, 0x50b694, 0x35aa85, 0x34a985, 0x33a885, 0x33a885, 0x32a785, 0x32a686, 0x31a586, 0x30a486, 0x2fa386, 0x2fa387, 0x2ea187, 0x32a289, 0xb4b9b8, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0x868686, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x313131, 0xb0b0b0, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0x92c2a5, 0x4cc97e, 0x4cc97e, 0x4bc77e, 0x4ac77f, 0x4ac67f, 0x49c57f, 0x48c47f, 0x48c380, 0x47c27f, 0x46c280, 0x46c080, 0x45c080, 0x44bf80, 0x44be81, 0x43bd81, 0x43bc81, 0x42bb81, 0x41bb82, 0x40ba82, 0x40b982, 0x3fb882, 0x3fb782, 0x3eb682, 0x3db583, 0x3cb483, 0x3cb483, 0x3bb383, 0x3bb284, 0x3ab184, 0x39b084, 0x39af84, 0x38ae85, 0x6bc3a4, 0xf4fcf6, 0xfbfffa, 0xf3fbf5, 0x54b797, 0x34a986, 0x33a886, 0x33a786, 0x32a686, 0x31a686, 0x31a587, 0x30a487, 0x2fa387, 0x2fa287, 0x2ea187, 0x2ea088, 0x86b2a9, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xa9a9a9, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x525252, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0x74c695, 0x4bc87e, 0x4bc77e, 0x4ac67e, 0x49c67f, 0x48c47f, 0x48c47f, 0x47c37f, 0x47c27f, 0x46c17f, 0x45c080, 0x45bf80, 0x44bf80, 0x43bd80, 0x43bd81, 0x42bc81, 0x42bb81, 0x41ba81, 0x40b981, 0x3fb881, 0x3fb882, 0x3eb682, 0x3eb682, 0x3db582, 0x3cb483, 0x3bb383, 0x3bb283, 0x3ab183, 0x3ab184, 0x39af83, 0x38af84, 0x37ae84, 0x6ac3a3, 0xf4fcf5, 0xfafff8, 0xfafff8, 0xfafff8, 0x9ed7c3, 0x33a886, 0x32a786, 0x32a686, 0x31a586, 0x30a486, 0x30a386, 0x2fa387, 0x2ea187, 0x2ea187, 0x2da087, 0x2d9f88, 0x61aa9c, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0x494949, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x727272, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0x57c885, 0x4bc77e, 0x4ac77f, 0x4ac67f, 0x49c57f, 0x48c47f, 0x48c380, 0x47c280, 0x47c280, 0x46c080, 0x45c080, 0x44bf80, 0x44be81, 0x43bd81, 0x43bc81, 0x42bb81, 0x41bb82, 0x40b982, 0x40b982, 0x3fb882, 0x3fb783, 0x3eb683, 0x3db583, 0x3db483, 0x3cb483, 0x3bb383, 0x3bb284, 0x3ab184, 0x3ab084, 0x39af84, 0x38ae85, 0x6ac3a3, 0xf5fdf5, 0xf9fff7, 0xf9fff7, 0xf9fff7, 0xf9fff6, 0x83cbb4, 0x33a786, 0x32a686, 0x32a687, 0x31a587, 0x30a487, 0x2fa387, 0x2fa288, 0x2ea187, 0x2ea088, 0x2d9f88, 0x2c9f88, 0x3ea28f, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0x6a6a6a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x929292, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xb9c4be, 0x4bc77e, 0x4ac67e, 0x49c57e, 0x48c47e, 0x48c47f, 0x47c37f, 0x47c27f, 0x46c17f, 0x45c080, 0x44bf80, 0x44be80, 0x43bd80, 0x43bd81, 0x42bc80, 0x41bb81, 0x41ba81, 0x40b981, 0x3fb881, 0x3fb782, 0x3eb682, 0x3db682, 0x3db582, 0x3cb483, 0x3bb383, 0x3bb283, 0x3ab183, 0x39b083, 0x39af83, 0x38af84, 0x37ae84, 0x6ac2a2, 0xf1fcf2, 0xf8fff5, 0xf7fff5, 0xf7fff5, 0xf7fff4, 0xc3e8d7, 0x36a987, 0x32a686, 0x31a586, 0x30a486, 0x2fa386, 0x2fa287, 0x2ea187, 0x2ea187, 0x2da087, 0x2c9f87, 0x2c9e88, 0x2b9d88, 0x2a9c88, 0xbcc2c1, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0x8c8c8c, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x2e2e2e, 0xb4b4b4, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xa9c7b6, 0x4ac77f, 0x49c67f, 0x49c57f, 0x48c47f, 0x48c380, 0x47c280, 0x46c180, 0x46c080, 0x45c080, 0x44bf80, 0x44be81, 0x43bd81, 0x43bc81, 0x42bb81, 0x41ba82, 0x40b982, 0x40b982, 0x3fb882, 0x3fb782, 0x3eb682, 0x3db583, 0x3cb483, 0x3cb383, 0x3bb283, 0x3bb284, 0x3ab184, 0x39b084, 0x38af84, 0x38ae85, 0x69c2a1, 0xf2fcf1, 0xf7fff4, 0xf7fff4, 0xf7fff3, 0xf7fff3, 0xc4e8d7, 0x39aa89, 0x32a686, 0x31a587, 0x31a487, 0x30a487, 0x2fa387, 0x2fa287, 0x2ea187, 0x2ea088, 0x2d9f88, 0x2c9e88, 0x2b9d88, 0x2b9d89, 0x2a9c89, 0xa6beba, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xafafaf, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x505050, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0x99c8ad, 0x49c57f, 0x48c47f, 0x48c47f, 0x47c37f, 0x47c27f, 0x46c17f, 0x45c080, 0x45bf80, 0x44bf80, 0x43bd80, 0x43bd81, 0x42bc81, 0x41bb81, 0x4cbe88, 0x6dca9e, 0x40b882, 0x3fb882, 0x3eb682, 0x3db682, 0x3db582, 0x3cb483, 0x3bb383, 0x3bb283, 0x3ab183, 0x3ab184, 0x39af83, 0x38af84, 0x37ae84, 0x69c2a1, 0xeffcef, 0xf6fff3, 0xf5fff2, 0xf5fff2, 0xf5fff1, 0xc3e8d5, 0x39aa8a, 0x32a686, 0x31a586, 0x30a486, 0x30a386, 0x2fa387, 0x2ea187, 0x2ea187, 0x2da087, 0x2d9f88, 0x2c9e88, 0x2b9d88, 0x2a9c88, 0x2a9c89, 0x299a88, 0x93bab4, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0x4b4b4b, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x717171, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0x93caab, 0x49c57f, 0x48c47f, 0x48c380, 0x47c280, 0x47c280, 0x46c080, 0x45c081, 0x44bf81, 0x44be81, 0x43bd81, 0x43bc81, 0x42bb81, 0x63c898, 0xe7f8ec, 0xf9fff7, 0xcdeedb, 0x4bbc8b, 0x3eb683, 0x3db583, 0x3cb483, 0x3cb483, 0x3bb283, 0x3bb284, 0x3ab184, 0x39b084, 0x38af84, 0x38ae85, 0x65c1a0, 0xeffcee, 0xf5fff1, 0xf5fff1, 0xf5fff1, 0xf5fff1, 0xc2e8d5, 0x3aaa8a, 0x32a686, 0x32a687, 0x31a487, 0x30a487, 0x2fa387, 0x2fa288, 0x2ea187, 0x2ea088, 0x2d9f88, 0x2c9f88, 0x2b9d88, 0x2b9d89, 0x2a9c89, 0x2a9b89, 0x299a89, 0x89b8b1, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0x6e6e6e, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x939393, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0x8cc9a7, 0x48c47f, 0x47c27f, 0x46c27f, 0x46c17f, 0x45c080, 0x44bf80, 0x44be80, 0x43bd80, 0x43bd81, 0x42bb80, 0x41bb81, 0x40ba81, 0xb8e6cd, 0xf7fff5, 0xf7fff5, 0xf7fff4, 0xd2f1de, 0x48b989, 0x3cb483, 0x3bb383, 0x3bb283, 0x3ab183, 0x39b083, 0x39af83, 0x38af84, 0x37ad84, 0x64c19e, 0xecfbec, 0xf4fff0, 0xf3ffef, 0xf3ffef, 0xf3ffee, 0xc5ead5, 0x3aa989, 0x31a686, 0x31a586, 0x30a486, 0x2fa386, 0x2fa287, 0x2ea187, 0x2ea187, 0x2d9f87, 0x2c9f87, 0x2b9e87, 0x2b9d88, 0x2a9c88, 0x2a9b88, 0x299a88, 0x289a89, 0x279889, 0x81b5ae, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0x929292, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x2a2a2a, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0x79b493, 0x48c380, 0x47c280, 0x46c180, 0x45c080, 0x45c080, 0x44be80, 0x44be81, 0x43bd81, 0x42bc81, 0x41bb81, 0x41ba82, 0x40b982, 0xb9e7cd, 0xf7fff3, 0xf7fff3, 0xf6fff3, 0xf6fff3, 0xd0f0db, 0x47b78a, 0x3bb283, 0x3bb284, 0x3ab084, 0x39b084, 0x38af84, 0x38ae85, 0x65c19e, 0xedfceb, 0xf3ffee, 0xf3ffee, 0xf2ffee, 0xf2ffee, 0xc3ead4, 0x3aaa8a, 0x32a686, 0x31a587, 0x30a487, 0x30a487, 0x2fa287, 0x2fa287, 0x2ea187, 0x2da088, 0x2c9f88, 0x2c9e88, 0x2b9d88, 0x2b9d89, 0x2a9b89, 0x299b89, 0x299a89, 0x289989, 0x279889, 0x699f98, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x316749, 0x47c280, 0x46c17f, 0x45c080, 0x44bf80, 0x44be80, 0x43bd80, 0x43bd81, 0x42bb81, 0x41bb81, 0x40ba81, 0x40b981, 0x3fb881, 0x59c192, 0xebfbeb, 0xf5fff1, 0xf4fff1, 0xf4fff1, 0xf4fff0, 0xcceed8, 0x43b588, 0x39b084, 0x39af83, 0x38af84, 0x37ad84, 0x65c19e, 0xebfce9, 0xf2ffed, 0xf1ffec, 0xf1ffec, 0xf1ffec, 0xc2ead3, 0x39a98a, 0x32a686, 0x31a586, 0x30a486, 0x2fa386, 0x2fa287, 0x2ea187, 0x2ea187, 0x2d9f87, 0x2c9f88, 0x2b9e88, 0x2b9d88, 0x2a9c88, 0x2a9b89, 0x299a88, 0x289a89, 0x289889, 0x279889, 0x269789, 0x22524d, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x2f5d44, 0x46c180, 0x45c080, 0x45c081, 0x44bf81, 0x44be81, 0x43bd81, 0x42bc81, 0x42bb81, 0x41ba82, 0x40b982, 0x40b982, 0x3fb882, 0x3fb783, 0x62c498, 0xe9fbe9, 0xf4ffef, 0xf3ffef, 0xf3ffef, 0xf3ffee, 0xcbeed7, 0x42b489, 0x38af84, 0x38ae85, 0x63c09d, 0xeafce8, 0xf1ffec, 0xf1ffec, 0xf0ffeb, 0xf0ffeb, 0xc3ebd3, 0x3aaa8a, 0x32a686, 0x31a587, 0x30a487, 0x30a487, 0x2fa387, 0x2fa288, 0x2ea187, 0x2da088, 0x2d9f88, 0x2c9e88, 0x2b9d88, 0x2b9d89, 0x2a9c89, 0x2a9b89, 0x299a89, 0x28998a, 0x27988a, 0x27978a, 0x26968a, 0x224a46, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x294838, 0x45c080, 0x44bf80, 0x44be80, 0x43bd80, 0x43bc81, 0x42bb81, 0x41bb81, 0x40ba81, 0x40b981, 0x3fb881, 0x3fb782, 0x3eb682, 0x3db582, 0x3cb482, 0x60c398, 0xe7fae7, 0xf2ffed, 0xf1ffec, 0xf1ffec, 0xf1ffeb, 0xc9edd5, 0x3eb088, 0x63c09c, 0xe8fbe6, 0xefffea, 0xefffe9, 0xefffe9, 0xeeffe9, 0xc2ead1, 0x39a989, 0x31a686, 0x31a586, 0x30a486, 0x2fa386, 0x2fa287, 0x2ea187, 0x2ea087, 0x2d9f87, 0x2c9f88, 0x2b9e88, 0x2b9d88, 0x2a9c88, 0x2a9b88, 0x299a88, 0x289989, 0x279889, 0x279889, 0x269789, 0x26968a, 0x25958a, 0x213a38, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x24302a, 0x45c081, 0x44be80, 0x44be81, 0x43bd81, 0x42bc81, 0x41bb81, 0x41ba82, 0x40b982, 0x40b982, 0x3fb782, 0x3eb783, 0x3db683, 0x3db583, 0x3cb483, 0x3cb383, 0x61c299, 0xe9fce7, 0xf0ffeb, 0xf0ffeb, 0xf0ffea, 0xf0ffea, 0xc9eed5, 0xe9fce6, 0xefffe9, 0xefffe9, 0xeeffe8, 0xeeffe8, 0xc1ead0, 0x3aaa8a, 0x32a686, 0x31a587, 0x30a487, 0x30a487, 0x2fa287, 0x2fa287, 0x2ea187, 0x2da088, 0x2c9f88, 0x2c9e88, 0x2b9d88, 0x2b9d89, 0x2a9b89, 0x299b89, 0x299a89, 0x28998a, 0x279889, 0x27978a, 0x26968a, 0x25968a, 0x25948a, 0x202928, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x41b279, 0x43bd80, 0x43bc81, 0x42bb81, 0x41bb81, 0x40ba81, 0x40b982, 0x3fb882, 0x3fb782, 0x3eb682, 0x3db582, 0x3cb482, 0x3cb483, 0x3bb383, 0x3bb283, 0x3ab183, 0x60c19a, 0xe6fbe4, 0xeeffe9, 0xeeffe8, 0xeeffe8, 0xedffe7, 0xedffe7, 0xedffe7, 0xedffe6, 0xecffe6, 0xc1eacf, 0x39a98a, 0x32a686, 0x31a586, 0x30a486, 0x2fa386, 0x2fa287, 0x2ea187, 0x2ea087, 0x2d9f87, 0x2c9f88, 0x2b9e88, 0x2b9d88, 0x2a9c88, 0x2a9b89, 0x299a88, 0x289989, 0x279889, 0x279889, 0x269789, 0x26968a, 0x25958a, 0x24948a, 0x238880, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x4c4c4c, 0x4c4c4c, 0x4c4c4c, 0x4b4b4b, 0x4b4b4b, 0x4b4b4b, 0x4b4b4b, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x494949, 0x494949, 0x494949, 0x494949, 0x484848, 0x484848, 0x484848, 0x484848, 0x474747, 0x474747, 0x474747, 0x464646, 0x464646, 0x44976e, 0x43bd81, 0x42bc81, 0x42bb81, 0x41ba82, 0x40b982, 0x40b982, 0x3fb782, 0x3eb783, 0x3eb683, 0x3db583, 0x3cb483, 0x3cb384, 0x3bb283, 0x3ab284, 0x3ab084, 0x39b084, 0x5fc099, 0xe5fbe3, 0xedffe7, 0xedffe7, 0xedffe6, 0xedffe6, 0xecffe5, 0xecffe5, 0xc0ebce, 0x3aaa8a, 0x32a686, 0x31a587, 0x30a487, 0x30a487, 0x2fa287, 0x2fa288, 0x2ea188, 0x2da088, 0x2d9f88, 0x2c9e88, 0x2b9d88, 0x2b9d89, 0x2a9b89, 0x2a9b89, 0x299a89, 0x28998a, 0x27988a, 0x27978a, 0x26968a, 0x26968a, 0x25948a, 0x24948b, 0x2b726d, 0x393939, 0x393939, 0x383838, 0x383838, 0x383838, 0x383838, 0x373737, 0x373737, 0x373737, 0x373737, 0x363636, 0x363636, 0x363636, 0x353535, 0x353535, 0x353535, 0x353535, 0x343434, 0x343434, 0x343434, 0x343434, 0x333333, 0x333333, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0x86b9a0, 0x41bb81, 0x41ba81, 0x40b981, 0x40b981, 0x3fb881, 0x3eb782, 0x3eb682, 0x3db582, 0x3cb482, 0x3cb383, 0x3bb283, 0x3bb283, 0x3ab183, 0x39b083, 0x38af83, 0x38ae84, 0x37ad84, 0x5ebe99, 0xe3fbe0, 0xebffe4, 0xebffe3, 0xebffe3, 0xeaffe3, 0xc3eccf, 0x39a989, 0x31a586, 0x30a486, 0x30a486, 0x2fa386, 0x2fa287, 0x2ea187, 0x2da087, 0x2c9f87, 0x2c9e88, 0x2b9d88, 0x2b9d88, 0x2a9c88, 0x299b88, 0x299a88, 0x289989, 0x279889, 0x279789, 0x269689, 0x26968a, 0x25958a, 0x24948a, 0x23938a, 0x23928a, 0x5f8986, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xaeb8b3, 0x43bb82, 0x41ba82, 0x40b982, 0x40b882, 0x3fb782, 0x3eb783, 0x3db583, 0x3db583, 0x3cb483, 0x3cb383, 0x3bb283, 0x3ab184, 0x39b084, 0x39b084, 0x38ae84, 0x38ae85, 0x37ad85, 0x36ac85, 0x5cbd99, 0xe3fcdf, 0xeaffe2, 0xeaffe2, 0xc2ecce, 0x3bab8a, 0x31a686, 0x31a587, 0x30a487, 0x30a387, 0x2fa287, 0x2ea287, 0x2ea087, 0x2da088, 0x2c9f88, 0x2c9e88, 0x2b9d88, 0x2b9c89, 0x2a9b89, 0x299b89, 0x289989, 0x28998a, 0x279889, 0x27978a, 0x26968a, 0x25958a, 0x24948a, 0x24948b, 0x23928b, 0x26928b, 0x808584, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0x64b891, 0x40b982, 0x3fb882, 0x3fb782, 0x3eb682, 0x3db582, 0x3cb482, 0x3cb483, 0x3bb283, 0x3bb283, 0x3ab183, 0x39b084, 0x38af84, 0x38ae84, 0x37ad84, 0x37ad84, 0x36ab84, 0x35ab85, 0x34aa85, 0x55b996, 0x8ed3b3, 0x85cfaf, 0x38a989, 0x31a686, 0x30a486, 0x30a486, 0x2fa386, 0x2fa287, 0x2ea187, 0x2da087, 0x2d9f87, 0x2c9f88, 0x2b9d88, 0x2b9d88, 0x2a9c88, 0x2a9b89, 0x299a88, 0x289989, 0x279889, 0x279889, 0x269689, 0x26968a, 0x25958a, 0x24948a, 0x23938a, 0x23928b, 0x22918b, 0x468d89, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0x98b7a9, 0x40b882, 0x3fb782, 0x3eb783, 0x3db583, 0x3db583, 0x3cb483, 0x3cb384, 0x3bb283, 0x3ab184, 0x3ab084, 0x39b084, 0x38ae84, 0x38ae85, 0x37ad85, 0x36ac85, 0x36ab85, 0x35aa86, 0x34a986, 0x34a986, 0x33a786, 0x32a786, 0x32a686, 0x31a587, 0x30a487, 0x30a387, 0x2fa287, 0x2fa288, 0x2ea088, 0x2da088, 0x2c9f88, 0x2c9e88, 0x2b9d88, 0x2b9c89, 0x2a9b89, 0x299b89, 0x289989, 0x28998a, 0x27988a, 0x27978a, 0x26968a, 0x25958a, 0x25948a, 0x24948b, 0x23928b, 0x23928b, 0x22918b, 0x758887, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0x57b68c, 0x3db682, 0x3db582, 0x3cb482, 0x3cb383, 0x3bb283, 0x3ab283, 0x39b083, 0x39b084, 0x38af84, 0x38ae84, 0x37ad84, 0x36ac84, 0x36ab84, 0x35ab85, 0x34a985, 0x34a985, 0x33a885, 0x33a786, 0x32a686, 0x31a586, 0x30a486, 0x30a486, 0x2fa286, 0x2fa287, 0x2ea187, 0x2da087, 0x2c9f87, 0x2c9e88, 0x2b9d88, 0x2b9d88, 0x2a9b88, 0x299b88, 0x289a88, 0x289989, 0x279889, 0x279789, 0x269689, 0x25968a, 0x24948a, 0x24948a, 0x23938a, 0x23928b, 0x22918a, 0x22918b, 0x3f8e89, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0x98b6a9, 0x3db583, 0x3db583, 0x3cb483, 0x3cb383, 0x3bb283, 0x3ab184, 0x39b084, 0x39af84, 0x38ae84, 0x38ae85, 0x37ad85, 0x36ac85, 0x35ab85, 0x35aa86, 0x34a985, 0x34a886, 0x33a786, 0x32a786, 0x31a686, 0x31a587, 0x30a487, 0x30a387, 0x2fa287, 0x2ea187, 0x2ea088, 0x2da088, 0x2c9f88, 0x2c9e88, 0x2b9d88, 0x2b9c89, 0x2a9b89, 0x299a89, 0x289989, 0x28998a, 0x27988a, 0x27978a, 0x26968a, 0x25958a, 0x24948a, 0x24938b, 0x23928b, 0x23928b, 0x22918b, 0x23918b, 0x738887, 0x868686, 0x848484, 0x848484, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0x5fb491, 0x3cb383, 0x3bb283, 0x3ab283, 0x3ab183, 0x39b084, 0x38af84, 0x38ae84, 0x37ad84, 0x37ac85, 0x36ab84, 0x35ab85, 0x34aa85, 0x34a985, 0x33a885, 0x33a786, 0x32a686, 0x31a586, 0x30a486, 0x30a487, 0x2fa387, 0x2fa287, 0x2ea187, 0x2da087, 0x2c9f87, 0x2c9e88, 0x2b9d88, 0x2b9d88, 0x2a9c88, 0x299b89, 0x299a89, 0x289989, 0x279889, 0x279789, 0x269689, 0x25968a, 0x25958a, 0x24948a, 0x23938a, 0x23928b, 0x22918b, 0x22918b, 0x22918b, 0x498d89, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xa4b4ad, 0x40b385, 0x3bb284, 0x3ab184, 0x39b084, 0x39b084, 0x38ae84, 0x38ae85, 0x37ad85, 0x36ac85, 0x35ab85, 0x35aa86, 0x34a986, 0x34a986, 0x33a786, 0x32a786, 0x32a686, 0x31a587, 0x30a487, 0x30a387, 0x2fa287, 0x2fa288, 0x2ea088, 0x2da088, 0x2c9f88, 0x2c9e89, 0x2b9d88, 0x2b9c89, 0x2a9b89, 0x299b89, 0x289989, 0x28998a, 0x27988a, 0x27978a, 0x26968a, 0x25958b, 0x24948b, 0x24948b, 0x23928b, 0x23928b, 0x22918b, 0x22918b, 0x29918b, 0x7f8988, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0x89b2a2, 0x39b083, 0x39b084, 0x38af84, 0x38ae84, 0x37ad84, 0x36ac84, 0x35ab84, 0x35aa85, 0x34a985, 0x34a985, 0x33a885, 0x32a786, 0x31a686, 0x31a586, 0x30a486, 0x30a386, 0x2fa286, 0x2ea287, 0x2ea187, 0x2da087, 0x2c9f87, 0x2c9e88, 0x2b9d88, 0x2b9c88, 0x2a9b88, 0x299b88, 0x289a88, 0x289989, 0x279889, 0x279789, 0x269689, 0x25958a, 0x24948a, 0x24948a, 0x23938a, 0x23928b, 0x22918a, 0x22918b, 0x22918b, 0x22918b, 0x6e8a89, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0x72b19a, 0x39af84, 0x38ae84, 0x38ae85, 0x37ac85, 0x36ac85, 0x35ab85, 0x35aa86, 0x34a985, 0x34a886, 0x33a786, 0x32a786, 0x31a586, 0x31a587, 0x30a487, 0x30a387, 0x2fa287, 0x2ea188, 0x2da088, 0x2da088, 0x2c9e88, 0x2c9e88, 0x2b9d88, 0x2a9c89, 0x299b89, 0x299a89, 0x289989, 0x28998a, 0x27978a, 0x26978a, 0x26968a, 0x25958a, 0x24948a, 0x24938b, 0x23928b, 0x23928b, 0x22918b, 0x22918b, 0x22918b, 0x5d8d8b, 0x888888, 0x888888, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4d4d4d, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0x6daf98, 0x37ad84, 0x36ac85, 0x35ab84, 0x35aa85, 0x34a985, 0x34a985, 0x33a885, 0x32a786, 0x32a686, 0x31a586, 0x30a486, 0x30a387, 0x2fa287, 0x2fa287, 0x2ea187, 0x2da087, 0x2c9f87, 0x2c9e88, 0x2b9d88, 0x2b9c88, 0x2a9b88, 0x299b89, 0x289a89, 0x289989, 0x279889, 0x279789, 0x269689, 0x25958a, 0x24948a, 0x24948a, 0x23938a, 0x23928b, 0x22918b, 0x22918b, 0x22918b, 0x22918b, 0x568d8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0x73ae9a, 0x36ac85, 0x35ab85, 0x35aa86, 0x34a986, 0x34a886, 0x33a786, 0x32a786, 0x31a686, 0x31a587, 0x30a487, 0x30a387, 0x2fa287, 0x2ea188, 0x2da088, 0x2da088, 0x2c9f88, 0x2c9e89, 0x2b9d88, 0x2a9c89, 0x2a9b89, 0x299a89, 0x289989, 0x28998a, 0x27988a, 0x27978a, 0x26968a, 0x25958b, 0x24948b, 0x24938b, 0x23928b, 0x23928b, 0x22918b, 0x22918b, 0x22918b, 0x588f8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4d4d4d, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0x7aad9d, 0x34a985, 0x34a985, 0x33a785, 0x32a786, 0x31a686, 0x31a586, 0x30a486, 0x30a387, 0x2fa286, 0x2ea287, 0x2ea187, 0x2da087, 0x2c9f87, 0x2c9e88, 0x2b9d88, 0x2b9c88, 0x2a9b88, 0x299b88, 0x289a89, 0x289989, 0x279889, 0x279789, 0x269689, 0x25958a, 0x24948a, 0x24948a, 0x23938a, 0x23928b, 0x22918b, 0x22918b, 0x22918b, 0x22918b, 0x608e8b, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0x90ada4, 0x3da989, 0x33a786, 0x32a686, 0x31a586, 0x31a587, 0x30a487, 0x30a387, 0x2fa287, 0x2ea188, 0x2da088, 0x2d9f88, 0x2c9e88, 0x2c9e88, 0x2b9d88, 0x2a9c89, 0x299b89, 0x299a89, 0x289989, 0x28988a, 0x27978a, 0x26978a, 0x25968a, 0x25958b, 0x24948a, 0x24938b, 0x23928b, 0x22918b, 0x22918b, 0x22918b, 0x2c918b, 0x758f8d, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4d4d4d, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xa2acaa, 0x5fa894, 0x31a586, 0x30a486, 0x30a387, 0x2fa287, 0x2fa287, 0x2ea087, 0x2da087, 0x2c9f87, 0x2c9e88, 0x2b9d88, 0x2b9c88, 0x2a9b88, 0x299b89, 0x289a89, 0x289989, 0x279889, 0x27978a, 0x269689, 0x25958a, 0x24948a, 0x24948a, 0x23938a, 0x23928b, 0x22918b, 0x22918b, 0x22918b, 0x4c918d, 0x868e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0x8eaaa3, 0x4fa590, 0x30a387, 0x2fa287, 0x2ea188, 0x2da088, 0x2d9f88, 0x2c9e88, 0x2c9e89, 0x2b9d88, 0x2a9c89, 0x2a9b89, 0x299a89, 0x289989, 0x28988a, 0x27978a, 0x26978a, 0x26968a, 0x25958b, 0x24948b, 0x24938b, 0x23928b, 0x22918b, 0x22918b, 0x43928d, 0x7b9190, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xababab, 0xababab, 0xa9a9a9, 0x93a8a3, 0x5ea394, 0x36a08a, 0x2c9f87, 0x2c9e88, 0x2b9d88, 0x2a9c88, 0x299b88, 0x299a89, 0x289989, 0x289989, 0x279889, 0x269789, 0x269689, 0x25958a, 0x24948a, 0x24938a, 0x23928a, 0x23928b, 0x2d918b, 0x53928f, 0x819291, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0x89a49f, 0x62a195, 0x389d8b, 0x2a9c89, 0x299b89, 0x299a89, 0x289989, 0x28988a, 0x27978a, 0x26968a, 0x25958a, 0x25958a, 0x24948a, 0x36948d, 0x599491, 0x7d9594, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x888888, 0x888888, 0x868686, 0x868686, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0x9ba2a1, 0x8ea09d, 0x809e9a, 0x749c97, 0x689b95, 0x679a94, 0x729a96, 0x7e9997, 0x889998, 0x949998, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xc6c6c6, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x868686, 0x868686, 0x848484, 0x848484, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x565656, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x9a9a9a, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa3a3a3, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x464646, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x797979, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x999999, 0x979797, 0x979797, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x353535, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xbfbfbf, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xababab, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x949494, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x464646, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x464646, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0x9f9f9f, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x888888, 0x888888, 0x868686, 0x868686, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x676767, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x7f7f7f, 0xbababa, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x626262, 0x484848, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x3a3a3a, 0x4b4b4b, 0x4b4b4b, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x494949, 0x494949, 0x494949, 0x494949, 0x484848, 0x484848, 0x484848, 0x484848, 0x474747, 0x474747, 0x474747, 0x464646, 0x464646, 0x464646, 0x464646, 0x454545, 0x454545, 0x454545, 0x454545, 0x444444, 0x444444, 0x444444, 0x444444, 0x434343, 0x434343, 0x434343, 0x424242, 0x424242, 0x424242, 0x424242, 0x414141, 0x414141, 0x414141, 0x414141, 0x404040, 0x404040, 0x404040, 0x404040, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3e3e3e, 0x3e3e3e, 0x3e3e3e, 0x3e3e3e, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 0x3b3b3b, 0x3b3b3b, 0x3b3b3b, 0x3a3a3a, 0x3a3a3a, 0x3a3a3a, 0x3a3a3a, 0x393939, 0x393939, 0x393939, 0x393939, 0x383838, 0x383838, 0x383838, 0x383838, 0x373737, 0x373737, 0x373737, 0x373737, 0x363636, 0x363636, 0x363636, 0x353535, 0x353535, 0x353535, 0x353535, 0x272727, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020 -}; \ No newline at end of file diff --git a/dev/BootLoader/BootKit/Rsrc/zka_no_disk.rsrc b/dev/BootLoader/BootKit/Rsrc/zka_no_disk.rsrc deleted file mode 100644 index 31689e63..00000000 --- a/dev/BootLoader/BootKit/Rsrc/zka_no_disk.rsrc +++ /dev/null @@ -1,116 +0,0 @@ -#define ZKA_NO_DISK_HEIGHT 110 -#define ZKA_NO_DISK_WIDTH 110 - -// array size is 36300 -static const unsigned int zka_no_disk[] = { - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x333333, 0x565656, 0x636363, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6d6d6d, 0x6a6a6a, 0x5f5f5f, 0x4d4d4d, 0x2b2b2b, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x464646, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x707070, 0x6a6a6a, 0x3b3b3b, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x3d3d3d, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x727272, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x252525, 0x676767, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x757575, 0x606060, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x777777, 0x787878, 0x777777, 0x777777, 0x3d3d3d, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x616161, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x7a7a7a, 0x7b7b7b, 0x525252, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x242424, 0x767676, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x7c7c7c, 0x7d7d7d, 0x7c7c7c, 0x7c7c7c, 0x676767, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x393939, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7f7f7f, 0x808080, 0x7e7e7e, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4e4e4e, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x828282, 0x818181, 0x828282, 0x828282, 0x3f3f3f, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x666666, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x858585, 0x555555, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x222222, 0x7c7c7c, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x868686, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x878787, 0x6d6d6d, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x393939, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x8a8a8a, 0x868686, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x515151, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x8c8c8c, 0x404040, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x6a6a6a, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x8f8f8f, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x828282, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0xa69a77, 0xbea35a, 0xc0a458, 0xa69a77, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x919191, 0x727272, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x383838, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0xab9d77, 0xebb626, 0xffbe0c, 0xffbd0c, 0xffbd0c, 0xffbc0c, 0xecb524, 0xaa9c78, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x949494, 0x8e8e8e, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x525252, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0xa49b83, 0xfcbc0f, 0xfebc0c, 0xffbc0c, 0xfebc0b, 0xffbb0c, 0xfebb0b, 0xffba0b, 0xfcb90e, 0xa49b83, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x969696, 0x414141, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x6e6e6e, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0xe8b52c, 0xffbd0c, 0xffbc0c, 0xffbc0c, 0xffbb0c, 0xffbb0c, 0xffba0b, 0xffba0c, 0xffb90b, 0xe8b22c, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x999999, 0x5c5c5c, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x868686, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0xbca66b, 0xfebb0b, 0xffbb0b, 0xfeba0b, 0xffba0b, 0xfeba0b, 0xffb90b, 0xfeb80b, 0xffb80b, 0xfeb80b, 0xffb70b, 0xbda46a, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x9b9b9b, 0x787878, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x373737, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0xa09f9b, 0xf3b81e, 0xffbb0c, 0xffbb0c, 0xffba0b, 0xffba0c, 0xffb90b, 0xffb90b, 0xffb80b, 0xffb80b, 0xffb70b, 0xffb70b, 0xf3b31d, 0xa09e9b, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x9e9e9e, 0x959595, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x545454, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xcbac5c, 0xffba0b, 0xfeba0b, 0xffb90b, 0xfeb90b, 0xffb80b, 0xfeb80b, 0xffb70b, 0xfeb70a, 0xffb60b, 0xfeb60a, 0xffb60a, 0xfeb50a, 0xccaa5b, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0xa0a0a0, 0xa1a1a1, 0x444444, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x707070, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xaaa699, 0xfab914, 0xffba0c, 0xffb90b, 0xffb90c, 0xffb80b, 0xffb80b, 0xffb70b, 0xffb70b, 0xffb60b, 0xffb60b, 0xffb50b, 0xffb50b, 0xffb40a, 0xfab313, 0xa9a498, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0xa3a3a3, 0xa4a4a4, 0x5e5e5e, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x8b8b8b, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xd9b14c, 0xfeb80b, 0xfeb80b, 0xfeb70b, 0xffb70b, 0xfeb60a, 0xfeb60a, 0xfeb60a, 0xffb50a, 0xfeb50a, 0xfeb40a, 0xfeb40a, 0xfeb30a, 0xfeb30a, 0xfeb20a, 0xd9ac4a, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0xa5a5a5, 0xa6a6a6, 0x7c7c7c, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x363636, 0xa7a7a7, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xb5aa91, 0xfeb80d, 0xffb80b, 0xffb80b, 0xffb70b, 0xffb70b, 0xffb60b, 0xffb60b, 0xffb50a, 0xffb50b, 0xffb40a, 0xffb40a, 0xffb30a, 0xffb30a, 0xffb20a, 0xffb20a, 0xfeb10c, 0xb5aa92, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0xa8a8a8, 0xa9a9a9, 0x9c9c9c, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x545454, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xe6b43a, 0xffb70b, 0xfeb60a, 0xffb60b, 0xfeb60a, 0xffb50a, 0xfeb50a, 0xffb40a, 0xfeb40a, 0xffb40a, 0xfeb30a, 0xffb20a, 0xfeb20a, 0xffb20a, 0xfeb109, 0xffb109, 0xfeb009, 0xe6ae39, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0xababab, 0x464646, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x717171, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xc2b085, 0xffb70b, 0xffb70b, 0xffb60b, 0xffb60b, 0xffb50b, 0xffb50b, 0xffb40a, 0xffb40b, 0xffb30a, 0xffb30a, 0xffb20a, 0xffb20a, 0xffb10a, 0xffb10a, 0xffb00a, 0xffb00a, 0xffaf0a, 0xffaf0a, 0xc2ae85, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0xaeaeae, 0x636363, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x8e8e8e, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb1b0af, 0xf1b526, 0xfeb50a, 0xffb50a, 0xfeb40a, 0xfeb40a, 0xfeb40a, 0xffb30a, 0xfeb30a, 0xfeb20a, 0xfeb209, 0xfeb10a, 0xfeb109, 0xfeb009, 0xfeb009, 0xfeb009, 0xfeaf09, 0xfeaf09, 0xfeae09, 0xfeae09, 0xf1ad25, 0xb1b0af, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0xb0b0b0, 0x818181, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x343434, 0xacacac, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xd0b472, 0xffb60b, 0xffb50a, 0xffb50b, 0xffb40a, 0xffb40a, 0xffb30a, 0xffb30a, 0xffb20a, 0xdc9e15, 0x90712e, 0x91712e, 0xdd9c15, 0xffb00a, 0xffaf09, 0xffaf0a, 0xffae09, 0xffae09, 0xffad09, 0xffad09, 0xffac09, 0xd0b071, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xb3b3b3, 0xa3a3a3, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x545454, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb8b5ae, 0xf8b519, 0xffb40a, 0xfeb40a, 0xffb30a, 0xfeb30a, 0xffb20a, 0xfeb20a, 0xffb10a, 0xfeb109, 0x564f40, 0x444444, 0x444444, 0x564e3e, 0xfeaf09, 0xfeae09, 0xffae09, 0xfead09, 0xfead09, 0xfeac08, 0xffac09, 0xfeab08, 0xf8ac17, 0xb8b5ae, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0xb5b5b5, 0x484848, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x727272, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xdcb660, 0xffb40a, 0xffb40b, 0xffb30a, 0xffb30a, 0xffb20a, 0xffb20a, 0xffb10a, 0xffb10a, 0xeba510, 0x444444, 0x434343, 0x434343, 0x424242, 0xeca30f, 0xffad09, 0xffad09, 0xffac09, 0xffac09, 0xffac09, 0xffab09, 0xffab09, 0xffaa09, 0xdcb15e, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0xb8b8b8, 0x676767, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x909090, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xc1b9a8, 0xfcb30f, 0xfeb20a, 0xfeb20a, 0xfeb109, 0xfeb10a, 0xfeb009, 0xfeb009, 0xfeb009, 0xfeaf09, 0xe6a110, 0x424242, 0x424242, 0x414141, 0x414141, 0xe69e10, 0xfeac08, 0xfeac08, 0xfeab08, 0xfeab08, 0xfeaa08, 0xfeaa08, 0xfea908, 0xfea908, 0xfca90d, 0xc1b8a8, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0xbababa, 0x868686, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x313131, 0xb0b0b0, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xe6b74c, 0xffb30a, 0xffb20a, 0xffb20a, 0xffb10a, 0xffb10a, 0xffb009, 0xffb00a, 0xffaf09, 0xffaf09, 0xe7a010, 0x414141, 0x414141, 0x414141, 0x404040, 0xe79e10, 0xffab09, 0xffab09, 0xffaa08, 0xffaa09, 0xffa908, 0xffa908, 0xffa808, 0xffa808, 0xffa808, 0xe7af4b, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xbdbdbd, 0xa9a9a9, 0x2a2a2a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x525252, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xcbbc9b, 0xfeb209, 0xffb10a, 0xfeb109, 0xffb009, 0xfeb009, 0xffaf09, 0xfeaf09, 0xfeae09, 0xfeae09, 0xffae09, 0xe69f10, 0x404040, 0x3f3f3f, 0x3f3f3f, 0x3e3e3e, 0xe69d0f, 0xfeaa08, 0xfeaa08, 0xfea908, 0xfea908, 0xfea808, 0xfea808, 0xfea707, 0xfea708, 0xfea607, 0xfea607, 0xcbba9b, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0xbfbfbf, 0x494949, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x727272, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xf1b533, 0xffb10a, 0xffb10a, 0xffb00a, 0xffb00a, 0xffaf09, 0xffaf0a, 0xffae09, 0xffae09, 0xffad09, 0xffad09, 0xe79e10, 0x3f3f3f, 0x3e3e3e, 0x3e3e3e, 0x3d3d3d, 0xe79c10, 0xffaa08, 0xffa909, 0xffa908, 0xffa808, 0xffa808, 0xffa708, 0xffa708, 0xffa608, 0xffa608, 0xffa608, 0xf1ab31, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0xc2c2c2, 0x6a6a6a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x929292, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xd6be89, 0xfeb009, 0xfeaf09, 0xfeaf09, 0xfeae09, 0xfeae09, 0xfeae09, 0xfead09, 0xfead08, 0xfeac09, 0xfeac08, 0xfeab08, 0xe69d0f, 0x3d3d3d, 0x3c3c3c, 0x3c3c3c, 0x3b3b3b, 0xe69b0e, 0xfea808, 0xfea808, 0xfea707, 0xfea708, 0xfea607, 0xfea607, 0xfea507, 0xfea507, 0xfea407, 0xfea407, 0xfea307, 0xd6ba89, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0xc4c4c4, 0x8c8c8c, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x2e2e2e, 0xb4b4b4, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc9c8c6, 0xf8b321, 0xffb00a, 0xffaf09, 0xffaf09, 0xffae09, 0xffae09, 0xffad09, 0xffad09, 0xffac09, 0xffac09, 0xffab09, 0xffab09, 0xe79c0f, 0x3c3c3c, 0x3c3c3c, 0x3b3b3b, 0x3b3b3b, 0xe69a0e, 0xffa708, 0xffa708, 0xffa608, 0xffa608, 0xffa608, 0xffa508, 0xfea507, 0xffa407, 0xffa407, 0xffa307, 0xfea307, 0xf8a71f, 0xc8c7c5, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xc7c7c7, 0xc7c7c7, 0xc8c8c8, 0xc7c7c7, 0xafafaf, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x505050, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xe1be76, 0xfeaf09, 0xfeae09, 0xfeae09, 0xffad09, 0xfead09, 0xfeac09, 0xfeac08, 0xffac09, 0xfeab08, 0xfeab08, 0xfeaa08, 0xfeaa08, 0xe69b0e, 0x3b3b3b, 0x3a3a3a, 0x3a3a3a, 0x393939, 0xe5990e, 0xfea607, 0xfea607, 0xfea507, 0xfea507, 0xfea407, 0xfea407, 0xfea307, 0xfea307, 0xfea207, 0xfea207, 0xfea106, 0xfea107, 0xe0b774, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0xc9c9c9, 0xcacaca, 0x4b4b4b, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x717171, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xd0cbc2, 0xfbb117, 0xffae09, 0xffae09, 0xffad09, 0xffad09, 0xffac09, 0xffac09, 0xffab09, 0xffab09, 0xffaa08, 0xffaa09, 0xffa908, 0xffa909, 0xe69a0e, 0x3a3a3a, 0x393939, 0x393939, 0x383838, 0xe6980e, 0xffa608, 0xffa508, 0xffa507, 0xffa408, 0xffa407, 0xffa407, 0xffa307, 0xffa307, 0xffa207, 0xffa207, 0xffa107, 0xffa107, 0xfba315, 0xd0cbc2, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0xcdcdcd, 0xcdcdcd, 0xcccccc, 0xcdcdcd, 0x6e6e6e, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x939393, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xe9bc60, 0xfead09, 0xfeac08, 0xfeac09, 0xfeac08, 0xfeab08, 0xfeab08, 0xfeaa08, 0xfeaa08, 0xfea908, 0xfea908, 0xfea808, 0xfea808, 0xfea808, 0xe5990d, 0x383838, 0x373737, 0x373737, 0x363636, 0xe5970d, 0xfea407, 0xfea407, 0xfea307, 0xfea307, 0xfea206, 0xfea207, 0xfea106, 0xfea106, 0xfea006, 0xfea006, 0xfe9f06, 0xfe9f06, 0xfe9e06, 0xe9b45f, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0xcecece, 0xcfcfcf, 0x929292, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x2a2a2a, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xb0a691, 0xfdad0c, 0xffad09, 0xffac09, 0xffac09, 0xffab09, 0xffab09, 0xffaa08, 0xffaa08, 0xffa908, 0xffa908, 0xfea808, 0xffa808, 0xffa708, 0xffa708, 0xe5980e, 0x373737, 0x363636, 0x363636, 0x353535, 0xe6960d, 0xfea407, 0xffa307, 0xfea307, 0xffa207, 0xfea207, 0xffa107, 0xfea106, 0xffa007, 0xfea006, 0xffa007, 0xfe9f06, 0xff9f06, 0xfe9e06, 0xfd9e09, 0xb0a491, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0x292929, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xb88010, 0xfeac08, 0xffab09, 0xfeab08, 0xfeaa08, 0xfeaa08, 0xfea908, 0xfea908, 0xfea808, 0xfea808, 0xfea808, 0xfea707, 0xfea708, 0xfea607, 0xfea607, 0xf8a208, 0x3a3834, 0x353535, 0x353535, 0x393733, 0xf89f08, 0xfea207, 0xfea207, 0xfea106, 0xfea106, 0xfea006, 0xfea006, 0xfe9f06, 0xfe9f06, 0xfe9e06, 0xfe9e06, 0xfe9d06, 0xfe9d06, 0xfe9d05, 0xfe9c06, 0xb7740e, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x523f1b, 0xffac09, 0xffab09, 0xffab09, 0xffaa08, 0xffaa09, 0xffa908, 0xffa908, 0xffa808, 0xffa808, 0xffa708, 0xffa708, 0xffa608, 0xffa608, 0xffa508, 0xffa508, 0xffa407, 0xa9751b, 0x353434, 0x353533, 0xab7519, 0xffa207, 0xffa207, 0xffa107, 0xffa107, 0xffa007, 0xffa007, 0xffa007, 0xfe9f06, 0xff9f06, 0xff9e06, 0xff9e06, 0xfe9d06, 0xff9d06, 0xff9c06, 0xff9c06, 0xfe9b06, 0x523b1a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd38f0d, 0xfeaa08, 0xfeaa08, 0xfea908, 0xfea908, 0xfea808, 0xfea808, 0xfea708, 0xfea707, 0xfea607, 0xfea607, 0xfea607, 0xfea507, 0xfea507, 0xfea407, 0xfea407, 0xfea307, 0xfea307, 0xe9970a, 0xea970b, 0xfea106, 0xfea106, 0xfea006, 0xfea006, 0xfe9f06, 0xfe9f06, 0xfe9e06, 0xfe9e06, 0xfe9d05, 0xfe9d06, 0xfe9c05, 0xfe9c06, 0xfe9b05, 0xfe9b05, 0xfe9a05, 0xfe9a05, 0xfe9905, 0xd3810a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x715318, 0xffaa08, 0xffaa08, 0xffa908, 0xffa908, 0xffa808, 0xffa808, 0xffa708, 0xffa708, 0xffa608, 0xffa608, 0xffa507, 0xffa508, 0xfea407, 0xffa407, 0xffa307, 0xffa307, 0xfea207, 0xffa207, 0xffa207, 0xffa107, 0xfea106, 0xffa007, 0xfea006, 0xff9f07, 0xfe9f06, 0xff9e06, 0xfe9e06, 0xff9e06, 0xfe9d06, 0xff9d06, 0xfe9c06, 0xff9c06, 0xfe9b05, 0xff9b06, 0xfe9a05, 0xff9a05, 0xfe9905, 0xff9905, 0x704b16, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x27241f, 0xe89b0b, 0xfea908, 0xfea808, 0xfea808, 0xfea708, 0xfea707, 0xfea608, 0xfea607, 0xfea607, 0xfea507, 0xfea507, 0xfea407, 0xfea407, 0xfea307, 0xfea307, 0xfea207, 0xfea207, 0xfea106, 0xfea106, 0xfea006, 0xfea006, 0xfe9f06, 0xfe9f06, 0xfe9e06, 0xfe9e06, 0xfe9d06, 0xfe9d06, 0xfe9c05, 0xfe9c06, 0xfe9b05, 0xfe9b05, 0xfe9b05, 0xfe9a05, 0xfe9a05, 0xfe9905, 0xfe9905, 0xfe9805, 0xfe9804, 0xfe9705, 0xe78b07, 0x27241f, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x4c4c4c, 0x4c4c4c, 0x4c4c4c, 0x4b4b4b, 0x4b4b4b, 0x4b4b4b, 0x4b4b4b, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x494949, 0x494949, 0x494949, 0x494949, 0x484848, 0x484848, 0x484848, 0x484848, 0x474747, 0x474747, 0x474747, 0x464646, 0x464646, 0x464646, 0x464646, 0x454545, 0x9f7627, 0xffa908, 0xffa808, 0xffa808, 0xffa708, 0xffa708, 0xffa608, 0xffa608, 0xffa508, 0xffa508, 0xffa407, 0xffa408, 0xffa307, 0xffa307, 0xffa207, 0xffa207, 0xffa207, 0xffa107, 0xffa107, 0xffa007, 0xffa007, 0xff9f07, 0xff9f06, 0xff9e06, 0xff9e06, 0xff9e06, 0xff9d06, 0xff9d06, 0xff9c06, 0xff9c06, 0xfe9b06, 0xff9b06, 0xff9a05, 0xff9a06, 0xfe9905, 0xff9905, 0xff9805, 0xff9805, 0xfe9705, 0xff9705, 0xfe9605, 0x996620, 0x3a3a3a, 0x3a3a3a, 0x3a3a3a, 0x393939, 0x393939, 0x393939, 0x393939, 0x383838, 0x383838, 0x383838, 0x383838, 0x373737, 0x373737, 0x373737, 0x373737, 0x363636, 0x363636, 0x363636, 0x353535, 0x353535, 0x353535, 0x353535, 0x343434, 0x343434, 0x343434, 0x343434, 0x333333, 0x333333, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xbbb4a6, 0xfba80e, 0xfea708, 0xfea607, 0xfea607, 0xfea607, 0xfea507, 0xfea507, 0xfea407, 0xfea407, 0xfea307, 0xfea307, 0xfea207, 0xfea206, 0xfea207, 0xfea106, 0xfea106, 0xfea006, 0xfea006, 0xfe9f06, 0xe4910b, 0xa97016, 0xa97016, 0xe69009, 0xfe9d06, 0xfe9c05, 0xfe9c05, 0xfe9b05, 0xfe9b05, 0xfe9a05, 0xfe9a05, 0xfe9905, 0xfe9905, 0xfe9805, 0xfe9805, 0xfe9704, 0xfe9704, 0xfe9704, 0xfe9604, 0xfe9604, 0xfe9504, 0xfe9504, 0xf99409, 0x92897d, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xe2ad4c, 0xffa708, 0xffa708, 0xfea608, 0xffa608, 0xffa507, 0xffa508, 0xfea407, 0xffa407, 0xfea307, 0xffa307, 0xfea207, 0xffa207, 0xfea107, 0xffa107, 0xfea006, 0xffa007, 0xfe9f06, 0xff9f06, 0xab7115, 0x2f2e2d, 0x2c2c2c, 0x2c2c2c, 0x2d2c2b, 0xac7014, 0xfe9c06, 0xff9b06, 0xfe9b05, 0xff9a06, 0xfe9a05, 0xff9a05, 0xfe9905, 0xff9905, 0xfe9805, 0xff9805, 0xfe9705, 0xff9705, 0xfe9605, 0xff9605, 0xfe9504, 0xfe9504, 0xfe9404, 0xff9404, 0xcf8f38, 0x888888, 0x868686, 0x868686, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xc2b399, 0xfea609, 0xfea607, 0xfea507, 0xfea507, 0xfea407, 0xfea407, 0xfea407, 0xfea307, 0xfea307, 0xfea206, 0xfea207, 0xfea106, 0xfea106, 0xfea006, 0xfea006, 0xfe9f06, 0xfe9f06, 0xfe9e06, 0xf99b07, 0x322f2a, 0x2b2b2b, 0x2b2b2b, 0x2a2a2a, 0x292929, 0x332f28, 0xfc9905, 0xfe9a05, 0xfe9905, 0xfe9905, 0xfe9805, 0xfe9805, 0xfe9704, 0xfe9705, 0xfe9704, 0xfe9604, 0xfe9604, 0xfe9504, 0xfe9504, 0xfe9404, 0xfe9404, 0xfe9304, 0xfe9304, 0xfe9304, 0xfd9204, 0x9b8971, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xecaa33, 0xffa608, 0xffa508, 0xffa508, 0xffa407, 0xffa407, 0xffa307, 0xffa307, 0xffa207, 0xffa207, 0xffa107, 0xffa107, 0xffa007, 0xffa007, 0xffa006, 0xff9f07, 0xfe9e06, 0xff9e06, 0xff9e06, 0xe18d0b, 0x2b2b2b, 0x2a2a2a, 0x2a2a2a, 0x292929, 0x292929, 0x282828, 0xe18b0a, 0xff9a06, 0xfe9905, 0xff9905, 0xfe9805, 0xff9805, 0xfe9705, 0xff9705, 0xfe9605, 0xff9605, 0xfe9504, 0xff9505, 0xfe9404, 0xff9404, 0xfe9304, 0xff9304, 0xfe9204, 0xff9204, 0xfe9104, 0xe18f25, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xccb284, 0xfea407, 0xfea407, 0xfea407, 0xfea307, 0xfea307, 0xfea207, 0xfea206, 0xfea107, 0xfea106, 0xfea006, 0xfea006, 0xfea006, 0xfe9f06, 0xfe9f06, 0xfe9e06, 0xfe9e06, 0xfe9d05, 0xfe9d06, 0xfe9c05, 0xfb9a06, 0x2f2c28, 0x292929, 0x282828, 0x282828, 0x272727, 0x302c25, 0xfb9705, 0xfe9805, 0xfe9704, 0xfe9704, 0xfe9604, 0xfe9604, 0xfe9504, 0xfe9504, 0xfe9504, 0xfe9404, 0xfe9404, 0xfe9304, 0xfe9303, 0xfe9204, 0xfe9203, 0xfe9103, 0xfe9103, 0xfe9103, 0xfe9003, 0xfe9003, 0xa88960, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xbab9b7, 0xf5a821, 0xfea407, 0xffa407, 0xffa307, 0xffa307, 0xfea207, 0xffa207, 0xffa107, 0xffa107, 0xfea006, 0xffa007, 0xfe9f06, 0xff9f06, 0xfe9e06, 0xff9e06, 0xfe9d06, 0xff9d06, 0xfe9c06, 0xff9c06, 0xfe9c06, 0xff9b06, 0xa66c13, 0x282828, 0x272727, 0x272727, 0x262626, 0xa96b12, 0xfe9805, 0xff9805, 0xfe9705, 0xff9705, 0xfe9605, 0xff9605, 0xfe9504, 0xff9504, 0xfe9404, 0xff9404, 0xfe9304, 0xff9304, 0xfe9204, 0xff9204, 0xfe9104, 0xfe9104, 0xfe9003, 0xff9004, 0xfe8f03, 0xfe8f03, 0xed8d16, 0x878684, 0x848484, 0x848484, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xd5b06e, 0xfea307, 0xfea307, 0xfea207, 0xfea206, 0xfea207, 0xfea106, 0xfea106, 0xfea006, 0xfea006, 0xfe9f06, 0xfe9f06, 0xfe9e06, 0xfe9e06, 0xfe9d06, 0xfe9d06, 0xfe9c05, 0xfe9c06, 0xfe9b05, 0xfe9b05, 0xfe9a05, 0xfe9a05, 0xfe9905, 0xc0780e, 0x6e4c1b, 0x714d1a, 0xc2780d, 0xfe9705, 0xfe9604, 0xfe9604, 0xfe9504, 0xfe9504, 0xfe9504, 0xfe9404, 0xfe9404, 0xfe9304, 0xfe9304, 0xfe9204, 0xfe9203, 0xfe9104, 0xfe9103, 0xfe9103, 0xfe9003, 0xfe9003, 0xfe8f03, 0xfe8f03, 0xfe8e03, 0xfe8e03, 0xfe8d03, 0xb68850, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xf8a517, 0xffa307, 0xffa207, 0xffa207, 0xffa107, 0xffa107, 0xffa007, 0xffa007, 0xff9f06, 0xff9f07, 0xff9e06, 0xff9e06, 0xff9d06, 0xff9d06, 0xff9d06, 0xff9c06, 0xff9c06, 0xff9b06, 0xfe9b05, 0xff9a06, 0xff9a05, 0xff9a06, 0xfe9905, 0xff9905, 0xff9805, 0xff9805, 0xfe9705, 0xff9705, 0xfe9605, 0xff9605, 0xfe9504, 0xff9505, 0xfe9404, 0xff9404, 0xfe9304, 0xff9304, 0xfe9204, 0xff9204, 0xfe9104, 0xff9104, 0xfe9004, 0xff9004, 0xfe8f03, 0xff8f03, 0xfe8e03, 0xff8e03, 0xfe8d03, 0xff8d03, 0xfe8d03, 0xf38c0f, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xceb282, 0xfea206, 0xfea106, 0xfea106, 0xfea006, 0xfea006, 0xfe9f06, 0xfe9f06, 0xfe9e06, 0xfe9e06, 0xfe9e06, 0xfe9d05, 0xfe9d06, 0xfe9c05, 0xfe9c05, 0xfe9b05, 0xfe9b05, 0xfe9a05, 0xfe9a05, 0xfe9905, 0xfe9905, 0xfe9805, 0xfe9805, 0xfe9704, 0xfe9704, 0xfe9604, 0xfe9604, 0xfe9504, 0xfe9504, 0xfe9404, 0xfe9404, 0xfe9304, 0xfe9304, 0xfe9203, 0xfe9204, 0xfe9103, 0xfe9103, 0xfe9103, 0xfe9003, 0xfe9003, 0xfe8f03, 0xfe8f03, 0xfe8e03, 0xfe8e02, 0xfe8d03, 0xfe8d02, 0xfe8d02, 0xfe8c02, 0xfe8c02, 0xfe8b02, 0xfe8b02, 0xa7865e, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xd9af69, 0xfea107, 0xffa107, 0xfea006, 0xffa007, 0xfe9f06, 0xff9f06, 0xfe9e06, 0xff9e06, 0xfe9d06, 0xff9d06, 0xfe9c06, 0xff9c06, 0xfe9b06, 0xff9b06, 0xfe9a05, 0xff9a05, 0xfe9a05, 0xff9905, 0xfe9805, 0xff9805, 0xfe9805, 0xff9705, 0xfe9705, 0xff9605, 0xfe9604, 0xff9605, 0xfe9504, 0xfe9504, 0xfe9404, 0xff9404, 0xfe9304, 0xfe9304, 0xfe9204, 0xff9204, 0xfe9103, 0xfe9104, 0xfe9003, 0xfe9004, 0xfe8f03, 0xfe8f03, 0xfe8e03, 0xfe8e03, 0xfe8d03, 0xfe8d03, 0xfe8c03, 0xfe8c03, 0xfe8b02, 0xfe8b03, 0xfe8a02, 0xfe8a02, 0x824f13, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4d4d4d, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xd7ae6c, 0xfea006, 0xfe9f06, 0xfe9f06, 0xfe9e06, 0xfe9e06, 0xfe9e06, 0xfe9d05, 0xfe9d06, 0xfe9c05, 0xfe9c06, 0xfe9b05, 0xfe9b05, 0xfe9a05, 0xfe9a05, 0xfe9905, 0xfe9905, 0xfe9805, 0xfe9805, 0xfe9704, 0xfe9705, 0xfe9604, 0xfe9604, 0xfe9504, 0xfe9504, 0xfe9404, 0xfe9404, 0xfe9304, 0xfe9304, 0xfe9204, 0xfe9204, 0xfe9203, 0xfe9103, 0xfe9103, 0xfe9003, 0xfe9003, 0xfe8f03, 0xfe8f03, 0xfe8f03, 0xfe8e03, 0xfe8e03, 0xfe8d02, 0xfe8d03, 0xfe8c02, 0xfe8c02, 0xfe8b02, 0xfe8b02, 0xfe8a02, 0xfe8a02, 0xfe8902, 0xfe8902, 0x7e4c13, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xc8b596, 0xff9f06, 0xff9f07, 0xfe9e06, 0xff9e06, 0xff9d06, 0xff9d06, 0xfe9c06, 0xff9c06, 0xff9b06, 0xff9b06, 0xfe9a05, 0xff9a06, 0xfe9a05, 0xff9905, 0xfe9905, 0xff9805, 0xfe9805, 0xff9705, 0xfe9705, 0xff9605, 0xfe9605, 0xff9605, 0xfe9504, 0xff9504, 0xfe9404, 0xff9404, 0xfe9304, 0xff9304, 0xfe9204, 0xff9204, 0xfe9104, 0xff9104, 0xfe9003, 0xff9004, 0xfe8f03, 0xff8f03, 0xfe8e03, 0xff8e03, 0xfe8d03, 0xff8d03, 0xfe8c03, 0xff8c03, 0xfe8b03, 0xfe8b03, 0xfe8a02, 0xff8a03, 0xfe8902, 0xfe8902, 0xfe8902, 0xff8802, 0x4c351a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4d4d4d, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xeca433, 0xfe9d06, 0xfe9d05, 0xfe9c06, 0xfe9c05, 0xfe9c05, 0xfe9b05, 0xfe9b05, 0xfe9a05, 0xfe9a05, 0xfe9905, 0xfe9905, 0xfe9805, 0xfe9805, 0xfe9704, 0xfe9704, 0xfe9604, 0xfe9604, 0xfe9504, 0xfe9504, 0xfe9404, 0xfe9404, 0xfe9304, 0xfe9304, 0xfe9203, 0xfe9204, 0xfe9103, 0xfe9103, 0xfe9003, 0xfe9003, 0xfe8f03, 0xfe8f03, 0xfe8f03, 0xfe8e03, 0xfe8e02, 0xfe8d03, 0xfe8d02, 0xfe8c03, 0xfe8c02, 0xfe8b02, 0xfe8b02, 0xfe8b02, 0xfe8a02, 0xfe8a02, 0xfe8902, 0xfe8902, 0xfe8801, 0xfe8802, 0xfe8701, 0xe17b0a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xbeb7ad, 0xf3a224, 0xfe9c06, 0xff9c06, 0xfe9b06, 0xff9b06, 0xfe9a05, 0xff9a05, 0xfe9905, 0xff9905, 0xfe9805, 0xff9805, 0xfe9705, 0xff9705, 0xfe9705, 0xff9605, 0xfe9604, 0xff9505, 0xfe9504, 0xff9404, 0xfe9404, 0xff9404, 0xfe9304, 0xfe9304, 0xfe9204, 0xff9204, 0xfe9103, 0xfe9104, 0xfe9003, 0xff9004, 0xfe8f03, 0xfe8f03, 0xfe8e03, 0xfe8e03, 0xfe8d03, 0xfe8d03, 0xfe8c03, 0xfe8c03, 0xfe8b02, 0xfe8b03, 0xfe8a02, 0xfe8a02, 0xfe8902, 0xfe8902, 0xfe8802, 0xfe8802, 0xfe8702, 0xfe8702, 0xf6870a, 0x5d472f, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4d4d4d, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xbbb5ac, 0xe2a549, 0xfe9b05, 0xfe9a05, 0xfe9a05, 0xfe9905, 0xfe9905, 0xfe9805, 0xfe9805, 0xfe9704, 0xfe9705, 0xfe9604, 0xfe9604, 0xfe9504, 0xfe9504, 0xfe9404, 0xfe9404, 0xfe9304, 0xfe9304, 0xfe9204, 0xfe9204, 0xfe9103, 0xfe9103, 0xfe9103, 0xfe9003, 0xfe8f03, 0xfe8f03, 0xfe8f03, 0xfe8e03, 0xfe8e03, 0xfe8d03, 0xfe8d02, 0xfe8d03, 0xfe8c02, 0xfe8b02, 0xfe8b02, 0xfe8b02, 0xfe8a02, 0xfe8a02, 0xfe8902, 0xfe8902, 0xfe8801, 0xfe8802, 0xfe8701, 0xfe8702, 0xfa8605, 0xd08635, 0x91867a, 0x393939, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x4c4c4c, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xc3af90, 0xc7ad88, 0xc5ac87, 0xc5ac87, 0xc4aa85, 0xc4aa85, 0xc2a884, 0xc1a783, 0xc1a682, 0xc0a681, 0xbfa580, 0xbea480, 0xbea37f, 0xbda27e, 0xbca17d, 0xbba07d, 0xbb9f7c, 0xba9f7b, 0xb99e7a, 0xb89d7a, 0xb89c79, 0xb79b78, 0xb59976, 0xb59976, 0xb49875, 0xb49875, 0xb29673, 0xb29673, 0xb19472, 0xb19472, 0xaf9370, 0xaf9270, 0xae916f, 0xad906e, 0xac8f6d, 0xac8e6c, 0xab8d6c, 0xaa8d6b, 0xa98c6a, 0xa98b69, 0xa88a69, 0xa2896e, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xababab, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x949494, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0x9f9f9f, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x888888, 0x888888, 0x868686, 0x868686, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd2d2d2, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x5a5a5a, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x595959, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xc6c6c6, 0xd1d1d1, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x868686, 0x868686, 0x848484, 0x848484, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x6f6f6f, 0x6d6d6d, 0x565656, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x9a9a9a, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa3a3a3, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x6d6d6d, 0x464646, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x797979, 0xd1d1d1, 0xd0d0d0, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcbcbcb, 0xcbcbcb, 0xc9c9c9, 0xc9c9c9, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb2b2b2, 0xb0b0b0, 0xb0b0b0, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x999999, 0x979797, 0x979797, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x848484, 0x848484, 0x828282, 0x828282, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x353535, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0xbfbfbf, 0xcfcfcf, 0xcecece, 0xcdcdcd, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc2c2c2, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xababab, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x949494, 0x949494, 0x929292, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7b7b7b, 0x7b7b7b, 0x797979, 0x797979, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x707070, 0x6f6f6f, 0x6e6e6e, 0x464646, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x464646, 0xcfcfcf, 0xcfcfcf, 0xcdcdcd, 0xcdcdcd, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc1c1c1, 0xc0c0c0, 0xbfbfbf, 0xbebebe, 0xbdbdbd, 0xbcbcbc, 0xbbbbbb, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb6b6b6, 0xb6b6b6, 0xb4b4b4, 0xb4b4b4, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xaaaaaa, 0xa9a9a9, 0xa8a8a8, 0xa7a7a7, 0xa6a6a6, 0xa5a5a5, 0xa4a4a4, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0x9f9f9f, 0x9f9f9f, 0x9d9d9d, 0x9d9d9d, 0x9b9b9b, 0x9b9b9b, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x919191, 0x909090, 0x8f8f8f, 0x8e8e8e, 0x8d8d8d, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x888888, 0x888888, 0x868686, 0x868686, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x787878, 0x777777, 0x767676, 0x757575, 0x747474, 0x737373, 0x727272, 0x717171, 0x6f6f6f, 0x676767, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x7f7f7f, 0xbababa, 0xcccccc, 0xcbcbcb, 0xcacaca, 0xc9c9c9, 0xc8c8c8, 0xc7c7c7, 0xc6c6c6, 0xc5c5c5, 0xc4c4c4, 0xc3c3c3, 0xc2c2c2, 0xc0c0c0, 0xc0c0c0, 0xbebebe, 0xbebebe, 0xbcbcbc, 0xbcbcbc, 0xbababa, 0xb9b9b9, 0xb8b8b8, 0xb7b7b7, 0xb6b6b6, 0xb5b5b5, 0xb4b4b4, 0xb3b3b3, 0xb2b2b2, 0xb1b1b1, 0xb0b0b0, 0xafafaf, 0xaeaeae, 0xadadad, 0xacacac, 0xababab, 0xa9a9a9, 0xa9a9a9, 0xa7a7a7, 0xa7a7a7, 0xa5a5a5, 0xa5a5a5, 0xa3a3a3, 0xa2a2a2, 0xa1a1a1, 0xa0a0a0, 0x9f9f9f, 0x9e9e9e, 0x9d9d9d, 0x9c9c9c, 0x9b9b9b, 0x9a9a9a, 0x999999, 0x989898, 0x979797, 0x969696, 0x959595, 0x949494, 0x939393, 0x929292, 0x909090, 0x909090, 0x8e8e8e, 0x8e8e8e, 0x8c8c8c, 0x8b8b8b, 0x8a8a8a, 0x898989, 0x888888, 0x878787, 0x868686, 0x858585, 0x848484, 0x838383, 0x828282, 0x818181, 0x808080, 0x7f7f7f, 0x7e7e7e, 0x7d7d7d, 0x7c7c7c, 0x7b7b7b, 0x7a7a7a, 0x797979, 0x777777, 0x777777, 0x757575, 0x757575, 0x737373, 0x727272, 0x717171, 0x626262, 0x484848, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x3a3a3a, 0x4b4b4b, 0x4b4b4b, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x4a4a4a, 0x494949, 0x494949, 0x494949, 0x494949, 0x484848, 0x484848, 0x484848, 0x484848, 0x474747, 0x474747, 0x474747, 0x464646, 0x464646, 0x464646, 0x464646, 0x454545, 0x454545, 0x454545, 0x454545, 0x444444, 0x444444, 0x444444, 0x444444, 0x434343, 0x434343, 0x434343, 0x424242, 0x424242, 0x424242, 0x424242, 0x414141, 0x414141, 0x414141, 0x414141, 0x404040, 0x404040, 0x404040, 0x404040, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3f3f3f, 0x3e3e3e, 0x3e3e3e, 0x3e3e3e, 0x3e3e3e, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x3d3d3d, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 0x3c3c3c, 0x3b3b3b, 0x3b3b3b, 0x3b3b3b, 0x3a3a3a, 0x3a3a3a, 0x3a3a3a, 0x3a3a3a, 0x393939, 0x393939, 0x393939, 0x393939, 0x383838, 0x383838, 0x383838, 0x383838, 0x373737, 0x373737, 0x373737, 0x373737, 0x363636, 0x363636, 0x363636, 0x353535, 0x353535, 0x353535, 0x353535, 0x272727, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, - 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020, 0x202020 -}; \ No newline at end of file diff --git a/dev/BootLoader/BootKit/Support.h b/dev/BootLoader/BootKit/Support.h deleted file mode 100644 index a57782e3..00000000 --- a/dev/BootLoader/BootKit/Support.h +++ /dev/null @@ -1,167 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#pragma once - -/// @file Support.h -/// @brief Purpose of this file is to help port libs into the bootloader. - -#include - -#define kLongMax ((long)(~0UL >> 1)) -#define kLongMin (~kLongMax) - -#ifdef __ZBAOSLDR__ - -/// @brief memset definition in C++. -/// @param dst destination pointer. -/// @param byte value to fill in. -/// @param len length of of src. -EXTERN_C void* memset(void* dst, int byte, long long unsigned int len); - -/// @brief memcpy definition in C++. -/// @param dst destination pointer. -/// @param src source pointer. -/// @param len length of of src. -EXTERN_C void* memcpy(void* dst, const void* src, long long unsigned int len); - -/// @brief strlen definition in C++. -EXTERN_C size_t strlen(const char* whatToCheck); - -/// @brief strcmp definition in C++. -EXTERN_C int strcmp(const char* whatToCheck, const char* whatToCheckRight); - -#define SetMem(dst, c, sz) memset(dst, c, sz) -#define MoveMem(dst, src, sz) memcpy(dst, src, sz) -#define CopyMem(dst, src, sz) memcpy(dst, src, sz) -#define StrLen(src) strlen(src) -#define StrCmp(dst, src) strcmp(dst, src) - -#endif // __ZBAOSLDR__ - -inline int IsSpace(int c) -{ - return c == ' '; -} - -inline int StringNCompare(const char* destination, const char* source, long length) -{ - long err = 0; - - for (long i = 0UL; i < length; ++i) - { - if (source[i] != destination[i]) - ++err; - } - - return err; -} - -inline long StringToLong(const char* nptr, char** endptr, int base) -{ - const char *p = nptr, *endp; - bool is_neg = 0, overflow = 0; - - /* Need unsigned so (-kLongMin) can fit in these: */ - unsigned long n = 0UL, cutoff; - int cutlim; - - if (base < 0 || base == 1 || base > 36) - { - return 0L; - } - - endp = nptr; - - while (IsSpace(*p)) - p++; - - if (*p == '+') - { - p++; - } - else if (*p == '-') - { - is_neg = 1, p++; - } - if (*p == '0') - { - p++; - /* For strtol(" 0xZ", &endptr, 16), endptr should point to 'x'; - * pointing to ' ' or '0' is non-compliant. - * (Many implementations do this wrong.) */ - endp = p; - if (base == 16 && (*p == 'X' || *p == 'x')) - { - p++; - } - else if (base == 2 && (*p == 'B' || *p == 'b')) - { - /* C23 standard supports "0B" and "0b" prefixes. */ - p++; - } - else if (base == 0) - { - if (*p == 'X' || *p == 'x') - { - base = 16, p++; - } - else if (*p == 'B' || *p == 'b') - { - base = 2, p++; - } - else - { - base = 8; - } - } - } - else if (base == 0) - { - base = 10; - } - - cutoff = (is_neg) ? -(kLongMin / base) : kLongMax / base; - cutlim = (is_neg) ? -(kLongMin % base) : kLongMax % base; - - while (1) - { - int c; - if (*p >= 'A') - c = ((*p - 'A') & (~('a' ^ 'A'))) + 10; - else if (*p <= '9') - c = *p - '0'; - else - break; - if (c < 0 || c >= base) - break; - endp = ++p; - if (overflow) - { - /* endptr should go forward and point to the non-digit character - * (of the given base); required by ANSI standard. */ - if (endptr) - continue; - break; - } - if (n > cutoff || (n == cutoff && c > cutlim)) - { - overflow = 1; - continue; - } - n = n * base + c; - } - - if (endptr) - *endptr = (char*)endp; - - if (overflow) - { - return ((is_neg) ? kLongMin : kLongMax); - } - - return (long)((is_neg) ? -n : n); -} diff --git a/dev/BootLoader/BootKit/Thread.h b/dev/BootLoader/BootKit/Thread.h deleted file mode 100644 index 42991d17..00000000 --- a/dev/BootLoader/BootKit/Thread.h +++ /dev/null @@ -1,44 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#pragma once - -#include -#include -#include - -namespace Boot -{ - using namespace Kernel; - - class BThread; - - /// @brief Program loader class - /// @package nl.zeta.boot.api - class BThread final - { - public: - explicit BThread() = delete; - ~BThread() = default; - - explicit BThread(Kernel::VoidPtr blob); - - BThread& operator=(const BThread&) = default; - BThread(const BThread&) = default; - - Int32 Start(HEL::BootInfoHeader* handover, BOOL is_own_stack); - void SetName(const char* name); - const char* GetName(); - bool IsValid(); - - private: - Char fBlobName[255] = {"BootThread"}; - VoidPtr fStartAddress{nullptr}; - VoidPtr fBlob{nullptr}; - UInt8* fStack{nullptr}; - HEL::BootInfoHeader* fHandover{nullptr}; - }; -} // namespace Boot diff --git a/dev/BootLoader/DownloadOVMF.ps1 b/dev/BootLoader/DownloadOVMF.ps1 deleted file mode 100644 index 5a2c5f0e..00000000 --- a/dev/BootLoader/DownloadOVMF.ps1 +++ /dev/null @@ -1,4 +0,0 @@ -$client = new-object System.Net.WebClient -$output = "$PSScriptRoot\OVMF.fd" - -$client.DownloadFile("https://retrage.github.io/edk2-nightly/bin/DEBUGX64_OVMF.fd", $output) diff --git a/dev/BootLoader/Modules/.keep b/dev/BootLoader/Modules/.keep deleted file mode 100644 index e69de29b..00000000 diff --git a/dev/BootLoader/Modules/NetBoot/.hgkeep b/dev/BootLoader/Modules/NetBoot/.hgkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/dev/BootLoader/Modules/NetBoot/Boot.S b/dev/BootLoader/Modules/NetBoot/Boot.S deleted file mode 100644 index 0527e509..00000000 --- a/dev/BootLoader/Modules/NetBoot/Boot.S +++ /dev/null @@ -1,28 +0,0 @@ -;; /* -;; * ======================================================== -;; * -;; * BootZ -;; * Copyright (C) 2024, Theater Quality Inc, all rights reserved., all rights reserved. -;; * -;; * ======================================================== -;; */ - -.code64 -.intel_syntax noprefix - -#define kTypeDriver 101 -#define kArchAmd64 122 -#define kHandoverMagic 0xBADCC - -.section .ldr - -.quad kHandoverMagic -.word kTypeDriver - -.text - -.extern main -.global __main - -__main: - ret diff --git a/dev/BootLoader/Modules/NetBoot/Module.cc b/dev/BootLoader/Modules/NetBoot/Module.cc deleted file mode 100644 index 6277da70..00000000 --- a/dev/BootLoader/Modules/NetBoot/Module.cc +++ /dev/null @@ -1,16 +0,0 @@ -/* - * ======================================================== - * - * NetBoot - * Copyright (C) 2024, Theater Quality Inc, all rights reserved., all rights reserved. - * - * ======================================================== - */ - -#include -#include - -EXTERN_C Int32 ModuleMain(Kernel::HEL::BootInfoHeader* Handover) -{ - return kEfiOk; -} diff --git a/dev/BootLoader/Modules/NetBoot/NetBoot.h b/dev/BootLoader/Modules/NetBoot/NetBoot.h deleted file mode 100644 index cdfe17f9..00000000 --- a/dev/BootLoader/Modules/NetBoot/NetBoot.h +++ /dev/null @@ -1,26 +0,0 @@ -/* - * ======================================================== - * - * NetBoot - * Copyright (C) 2024, Theater Quality Inc, all rights reserved., all rights reserved. - * - * ======================================================== - */ - -#pragma once - -#include - -/// @brief the internet header is used to download updates OTA. -typedef struct NetBootInternetHeader -{ - Kernel::Char NB1; /// magic char 1 'N' - Kernel::Char NB2; /// magic char 2 'E' - Kernel::Char NB3; /// magic char 3 'T' - Kernel::Char NB4; /// magic char 4 'B' - - Kernel::Char PatchName[255]; /// example: ColdChoco - Kernel::Int32 PatchLength; /// the patch length. - Kernel::Char PatchTarget[255]; /// the target file. - Kernel::Boolean ImpliesROM; /// does it imply an EEPROM reprogram? -} NetBootInternetHeader; diff --git a/dev/BootLoader/Modules/NetBoot/build.json b/dev/BootLoader/Modules/NetBoot/build.json deleted file mode 100644 index 9df27b3c..00000000 --- a/dev/BootLoader/Modules/NetBoot/build.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compiler_path": "x86_64-w64-mingw32-g++", - "compiler_std": "c++20", - "headers_path": ["../", "../../", "../../../Kernel", "../../../", "./"], - "sources_path": [".cc", "*.S"], - "output_name": "netboot.sys", - "compiler_flags": [ - "-ffreestanding", - "-nostdlib", - "-std=c++20", - "-fPIC", - "-fno-rtti", - "-fno-exceptions", - "-Wl,--subsystem=17,--image-base,0x10000000,-e,ModuleMain" - ], - "cpp_macros": [ - "__MINOSKRNL__", - "__ZBAOSLDR__", - "__ZKA_AMD64__", - "kNetBootVersionHighest=0x0100", - "kNetBootVersionLowest=0x0100", - "kNetBootVersion=0x0100" - ] -} diff --git a/dev/BootLoader/Modules/SysChk/.hgkeep b/dev/BootLoader/Modules/SysChk/.hgkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/dev/BootLoader/Modules/SysChk/Boot.S b/dev/BootLoader/Modules/SysChk/Boot.S deleted file mode 100644 index 9fdf4428..00000000 --- a/dev/BootLoader/Modules/SysChk/Boot.S +++ /dev/null @@ -1,20 +0,0 @@ -;; /* -;; * ======================================================== -;; * -;; * BootZ -;; * Copyright (C) 2024, Theater Quality Inc, all rights reserved., all rights reserved. -;; * -;; * ======================================================== -;; */ - -.code64 -.intel_syntax noprefix - -#define kTypeDriver 101 -#define kArchAmd64 122 -#define kHandoverMagic 0xBADCC - -.section .ldr - -.quad kHandoverMagic -.word kTypeDriver diff --git a/dev/BootLoader/Modules/SysChk/Module.cc b/dev/BootLoader/Modules/SysChk/Module.cc deleted file mode 100644 index 28b89859..00000000 --- a/dev/BootLoader/Modules/SysChk/Module.cc +++ /dev/null @@ -1,47 +0,0 @@ -/* - * ======================================================== - * - * NetBoot - * Copyright (C) 2024, Theater Quality Inc, all rights reserved., all rights reserved. - * - * ======================================================== - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -EXTERN_C Int32 ModuleMain(Kernel::HEL::BootInfoHeader* Handover) -{ - EfiSystemTable* system_table = (EfiSystemTable*)Handover->f_FirmwareCustomTables[1]; - - EfiInputKey key{}; - - system_table->ConIn->ReadKeyStroke(system_table->ConIn, &key); - - if (key.UnicodeChar == 'F' || - key.UnicodeChar == 'f') - { - UI::ui_draw_background(); - - fb_init(); - - FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2); - - fb_fini(); - - return kEfiOk; - } - - return kEfiFail; -} diff --git a/dev/BootLoader/Modules/SysChk/build.json b/dev/BootLoader/Modules/SysChk/build.json deleted file mode 100644 index cd21e269..00000000 --- a/dev/BootLoader/Modules/SysChk/build.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "compiler_path": "x86_64-w64-mingw32-g++", - "compiler_std": "c++20", - "headers_path": ["../", "../../", "../../../Kernel", "../../../", "./"], - "sources_path": ["*.cc", "*.S"], - "output_name": "syschk.sys", - "compiler_flags": [ - "-ffreestanding", - "-nostdlib", - "-std=c++20", - "-fPIC", - "-fno-rtti", - "-fno-exceptions", - "-Wl,--subsystem=17,--image-base,0x10000000,-e,ModuleMain" - ], - "cpp_macros": [ - "__MINOSKRNL__", - "__ZBAOSLDR__", - "__ZKA_AMD64__", - "kChkVersionHighest=0x0100", - "kChkVersionLowest=0x0100", - "kChkVersion=0x0100" - ] -} diff --git a/dev/BootLoader/ReadMe.md b/dev/BootLoader/ReadMe.md deleted file mode 100644 index 91f8fa2e..00000000 --- a/dev/BootLoader/ReadMe.md +++ /dev/null @@ -1,20 +0,0 @@ -# BootZ (Zeta Bootloader Architecture) - -You need: - -- MinGW for the Kernel and bootloader. -- Netwide Assembler to output COFF object code. - -Start by cloning the repo: - -``` -git clone git@github.com:amlel-el-mahrouss/zka-dev.git -``` - -And then execute: - -``` -make all -``` - -##### Copyright, Theater Quality Inc, all rights reserved. diff --git a/dev/BootLoader/amd64-efi.make b/dev/BootLoader/amd64-efi.make deleted file mode 100644 index 9bffe5c7..00000000 --- a/dev/BootLoader/amd64-efi.make +++ /dev/null @@ -1,119 +0,0 @@ -################################################## -# (c) Theater Quality Inc, all rights reserved. -# This is the bootloader makefile. -################################################## - -CC_GNU=x86_64-w64-mingw32-g++ -LD_GNU=x86_64-w64-mingw32-ld - -WINDRES=x86_64-w64-mingw32-windres - -ADD_FILE=touch -COPY=cp -HTTP_GET=wget - -# Select this for Windows. -ifneq ($(findstring CYGWIN_NT-10.0,$(shell uname)), ) -EMU=qemu-system-x86_64w.exe -else -# this for NT distributions -EMU=qemu-system-x86_64 -net none -endif - -ifeq ($(NEWS_MODEL), ) -ZKA_MODEL=-DkMachineModel="\"ZKA\"" -endif - -BIOS=OVMF.fd -IMG=epm-master-1.img -IMG_2=epm-slave.img -IMG_3=epm-master-2.img - -EMU_FLAGS=-net none -smp 1 -m 8G -M q35 \ - -bios $(BIOS) -drive \ - file=fat:rw:src/Root/,index=2,format=raw \ - -monitor stdio - -LD_FLAGS=-e Main --subsystem=10 - -STANDALONE_MACRO=-D__BOOTLDR_STANDALONE__ -OBJ=*.o - -REM=rm -REM_FLAG=-f - -FLAG_ASM=-f win64 -FLAG_GNU=-fshort-wchar -D__EFI_x86_64__ -mno-red-zone -D__MINOSKRNL__ -D__ZBAOSLDR__ \ - -DEFI_FUNCTION_WRAPPER -I./ -I../Kernel -I../ -c -nostdlib -fno-rtti -fno-exceptions \ - -std=c++20 -D__HAVE_ZKA_APIS__ -DZBA_USE_FB -D__ZKA_AMD64__ -D__ZKA__ -DZKA_AUTO_FORMAT - -BOOTLOADER=zbaosldr.exe -KERNEL=minoskrnl.exe -SYSCHK=syschk.sys -STARTUP=startup.sys -SCIKIT=SCIKit.dylib - -.PHONY: invalid-recipe -invalid-recipe: - @echo "=== ERROR ===" - @echo "=> Use make compile- instead." - -.PHONY: all -all: compile-amd64 - mkdir -p src/Root/EFI/BOOT - $(LD_GNU) $(OBJ) $(LD_FLAGS) -o src/$(BOOTLOADER) - $(COPY) src/$(BOOTLOADER) src/Root/EFI/BOOT/BOOTX64.EFI - $(COPY) src/$(BOOTLOADER) src/Root/EFI/BOOT/ZBAOSLDR.EFI - $(COPY) ../Kernel/$(KERNEL) src/Root/$(KERNEL) - $(COPY) ./Modules/SysChk/$(SYSCHK) src/Root/$(SYSCHK) - $(COPY) ../SCIKit/$(SCIKIT) src/Root/$(SCIKIT) - $(COPY) src/$(BOOTLOADER) src/Root/$(BOOTLOADER) - -ifneq ($(DEBUG_SUPPORT), ) -DEBUG = -D__DEBUG__ -endif - -.PHONY: compile-amd64 -compile-amd64: - $(WINDRES) src/BootloaderRsrc.rsrc -O coff -o BootloaderRsrc.o - $(CC_GNU) $(ZKA_MODEL) $(STANDALONE_MACRO) $(FLAG_GNU) $(DEBUG) \ - $(wildcard src/HEL/AMD64/*.cc) \ - $(wildcard src/HEL/AMD64/*.S) \ - $(wildcard src/*.cc) - -.PHONY: run-efi-amd64-ahci -run-efi-amd64-ahci: - $(EMU) $(EMU_FLAGS) -hdd $(IMG) - -.PHONY: run-efi-amd64-ata -run-efi-amd64-ata: - $(EMU) $(EMU_FLAGS) -device piix3-ide,id=ide -drive id=disk,file=$(IMG),format=raw,if=none -device ide-hd,drive=disk,bus=ide.0 - -# img_2 is the rescue disk. img is the bootable disk, as provided by the Zeta specs. -.PHONY: epm-img -epm-img: - qemu-img create -f raw $(IMG) 4G - qemu-img create -f raw $(IMG_2) 4G - qemu-img create -f raw $(IMG_3) 4G - -.PHONY: download-edk -download-edk: - $(HTTP_GET) https://retrage.github.io/edk2-nightly/bin/DEBUGX64_OVMF.fd -O OVMF.fd - -BINS=*.bin -EXECUTABLES=zbaosldr.exe minoskrnl.exe OVMF.fd - -TARGETS=$(REM_FLAG) $(OBJ) $(BIN) $(IMG) $(IMG_2) $(EXECUTABLES) - -.PHONY: clean -clean: - $(REM) $(TARGETS) - -.PHONY: help -help: - @echo "=== HELP ===" - @echo "epm-img: Format a disk using the Explicit Partition Map." - @echo "gpt-img: Format a disk using the Explicit Partition Map." - @echo "clean: clean bootloader." - @echo "bootloader-amd64: Build bootloader. (PC AMD64)" - @echo "run-efi-amd64-: Run bootloader. (PC AMD64)" diff --git a/dev/BootLoader/arm64-efi.make b/dev/BootLoader/arm64-efi.make deleted file mode 100644 index c8aed97c..00000000 --- a/dev/BootLoader/arm64-efi.make +++ /dev/null @@ -1,112 +0,0 @@ -################################################## -# (c) Theater Quality Inc, all rights reserved. -# This is the bootloader makefile. -################################################## - -CC_GNU = clang++ -LD_GNU = lld-link - -ADD_FILE=touch -COPY=cp -HTTP_GET=wget - -# Select this for Windows. -ifneq ($(findstring CYGWIN_NT-10.0,$(shell uname)), ) -EMU=qemu-system-aarch64w.exe -else -# this for NT distributions -EMU=qemu-system-aarch64 -endif - -ifeq ($(NEWS_MODEL), ) -ZKA_MODEL=-DkMachineModel="\"ZKA\"" -endif - -BIOS=OVMF.fd -IMG=epm-master-1.img -IMG_2=epm-slave.img -IMG_3=epm-master-2.img - -EMU_FLAGS=-net none -smp 4 -m 8G -cpu max -M virt-9.1 \ - -bios $(BIOS) \ - -drive id=disk,file=$(IMG),format=raw,if=none \ - -drive \ - file=fat:rw:src/Root/,index=1,format=raw \ - -device virtio-tablet-pci \ - -d int -no-shutdown -no-reboot -device virtio-gpu-pci,xres=844,yres=390 -serial stdio - -LD_FLAGS=-subsystem:efi_application -entry:Main /nodefaultlib - -STANDALONE_MACRO=-D__BOOTLDR_STANDALONE__ -OBJ=*.o - -REM=rm -REM_FLAG=-f - -FLAG_ASM=-f win64 -FLAG_GNU=-fshort-wchar -c -ffreestanding -MMD -mno-red-zone -D__ZKA_ARM64__ -fno-rtti -fno-exceptions -I./ \ - -target aarch64-unknown-windows \ - -std=c++20 -D__FSKIT_USE_NEFS__ -D__BOOTLDR_STANDALONE__ -D__MINOSKRNL__ -D__ZBAOSLDR__ -D__HAVE_ZKA_APIS__ -D__ZKA__ -I../ -I../Kernel - -BOOT_LOADER=zbaosldr.exe -KERNEL=minoskrnl.exe -SYS_CHK=syschk.sys -STARTUP=startup.sys - -.PHONY: invalid-recipe -invalid-recipe: - @echo "invalid-recipe: Use make compile- instead." - -.PHONY: all -all: compile-amd64 - mkdir -p src/Root/EFI/BOOT - $(LD_GNU) $(OBJ) $(LD_FLAGS) /out:src/$(BOOT_LOADER) - $(COPY) src/$(BOOT_LOADER) src/Root/EFI/BOOT/BOOTAA64.EFI - $(COPY) src/$(BOOT_LOADER) src/Root/EFI/BOOT/BootZ.EFI - $(COPY) ../Kernel/$(KERNEL) src/Root/$(KERNEL) - $(COPY) src/$(BOOT_LOADER) src/Root/$(BOOT_LOADER) - -ifneq ($(DEBUG_SUPPORT), ) -DEBUG = -D__DEBUG__ -endif - -.PHONY: compile-amd64 -compile-amd64: - $(RESCMD) - $(CC_GNU) $(ZKA_MODEL) $(STANDALONE_MACRO) $(FLAG_GNU) $(DEBUG) \ - $(wildcard src/HEL/ARM64/*.cc) \ - $(wildcard src/HEL/ARM64/*.S) \ - $(wildcard src/*.cc) - -.PHONY: run-efi-amd64 -run-efi-amd64: - $(EMU) $(EMU_FLAGS) - -# img_2 is the rescue disk. img is the bootable disk, as provided by the Zeta. -.PHONY: epm-img -epm-img: - qemu-img create -f raw $(IMG) 10G - qemu-img create -f raw $(IMG_2) 4G - qemu-img create -f raw $(IMG_3) 4G - -.PHONY: download-edk -download-edk: - $(HTTP_GET) https://retrage.github.io/edk2-nightly/bin/DEBUGAARCH64_QEMU_EFI.fd -O OVMF.fd - -BINS=*.bin -EXECUTABLES=zbaosldr.exe minoskrnl.exe OVMF.fd - -TARGETS=$(REM_FLAG) $(OBJ) $(BIN) $(IMG) $(IMG_2) $(EXECUTABLES) - -.PHONY: clean -clean: - $(REM) $(TARGETS) - -.PHONY: help -help: - @echo "=== HELP ===" - @echo "epm-img: Format a disk using the Explicit Partition Map." - @echo "gpt-img: Format a disk using the Explicit Partition Map." - @echo "clean: clean bootloader." - @echo "bootloader-amd64: Build bootloader. (PC AMD64)" - @echo "run-efi-amd64: Run bootloader. (PC AMD64)" diff --git a/dev/BootLoader/src/.gitkeep b/dev/BootLoader/src/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/dev/BootLoader/src/BootFileReader.cc b/dev/BootLoader/src/BootFileReader.cc deleted file mode 100644 index 3c085ac4..00000000 --- a/dev/BootLoader/src/BootFileReader.cc +++ /dev/null @@ -1,203 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - - File: FileReader.cc - Purpose: New Boot FileReader, - Read complete file and store it in a buffer. - -------------------------------------------- */ - -#include -#include -#include -#include -#include -#include - -/// @file BootFileReader -/// @brief Bootloader File reader. -/// BUGS: 0 - -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// -/// -/// @name BFileReader class -/// @brief Reads the file as a blob. -/// -/// -//////////////////////////////////////////////////////////////////////////////////////////////////// - -/*** - @brief File Reader constructor. -*/ -Boot::BFileReader::BFileReader(const CharacterTypeUTF16* path, - EfiHandlePtr ImageHandle) -{ - if (path != nullptr) - { - SizeT index = 0UL; - for (; path[index] != L'\0'; ++index) - { - mPath[index] = path[index]; - } - - mPath[index] = 0; - } - - /// Load protocols with their GUIDs. - - EfiGUID guidEfp = EfiGUID(EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID); - - EfiSimpleFilesystemProtocol* efp = nullptr; - - EfiLoadImageProtocol* img = nullptr; - EfiGUID guidImg = EfiGUID(EFI_LOADED_IMAGE_PROTOCOL_GUID); - - if (BS->HandleProtocol(ImageHandle, &guidImg, (void**)&img) != kEfiOk) - { - mWriter.Write(L"BootZ: Handle-Protocol: No-Such-Protocol").Write(L"\r"); - this->mErrorCode = kNotSupported; - } - - if (BS->HandleProtocol(img->DeviceHandle, &guidEfp, (void**)&efp) != kEfiOk) - { - mWriter.Write(L"BootZ: Handle-Protocol: No-Such-Protocol").Write(L"\r"); - this->mErrorCode = kNotSupported; - return; - } - - /// Start doing disk I/O - - if (efp->OpenVolume(efp, &mRootFs) != kEfiOk) - { - mWriter.Write(L"BootZ: Fetch-Protocol: No-Such-Volume").Write(L"\r"); - this->mErrorCode = kNotSupported; - return; - } - - EfiFileProtocol* fileFs = nullptr; - - if (mRootFs->Open(mRootFs, &fileFs, mPath, kEFIFileRead, kEFIReadOnly) != - kEfiOk) - { - mWriter.Write(L"BootZ: Fetch-Protocol: No-Such-Path: ") - .Write(mPath) - .Write(L"\r"); - this->mErrorCode = kNotSupported; - - fb_render_string("BootZ: PLEASE RECOVER YOUR MINKRNL INSTALL.", 40, 10, RGB(0xFF, 0xFF, 0xFF)); - - mRootFs->Close(mRootFs); - - return; - } - - mSizeFile = 0; - mFile = fileFs; - mErrorCode = kOperationOkay; -} - -Boot::BFileReader::~BFileReader() -{ - if (this->mFile) - { - this->mFile->Close(this->mFile); - this->mFile = nullptr; - } - - if (this->mRootFs) - { - this->mRootFs->Close(this->mRootFs); - this->mRootFs = nullptr; - } - - if (this->mBlob) - { - BS->FreePool(this->mBlob); - this->mBlob = nullptr; - } - - BSetMem(this->mPath, 0, kPathLen); -} - -/** - @brief Reads all of the file into a buffer. - @param **readUntil** size of file - @param **chunkToRead** chunk to read each time. -*/ -Void Boot::BFileReader::ReadAll(SizeT readUntil, SizeT chunkToRead, UIntPtr out_address) -{ - if (mBlob == nullptr) - { - EfiFileInfo newPtrInfo{}; - UInt32 szInfo = 0U; - - EfiGUID kFileInfoGUID = EFI_FILE_INFO_GUID; - - if (mFile->GetInfo(mFile, &kFileInfoGUID, &szInfo, &newPtrInfo) == kEfiOk) - { - if (newPtrInfo.FileSize < readUntil) - readUntil = newPtrInfo.FileSize; - else if (readUntil < 1) - readUntil = newPtrInfo.FileSize; - - mWriter.Write(L"BootZ: File size: ").Write(readUntil).Write("\r"); - } - - if (!out_address) - { - if (auto err = BS->AllocatePool(EfiLoaderCode, readUntil, (VoidPtr*)&mBlob) != - kEfiOk) - { - mWriter.Write(L"*** error: ").Write(err).Write(L" ***\r"); - EFI::ThrowError(L"OutOfMemory", L"Out of memory."); - } - } - else - { - mBlob = (VoidPtr)out_address; - } - } - - mErrorCode = kNotSupported; - - UInt64 bufSize = chunkToRead; - UInt64 szCnt = 0UL; - - while (szCnt < readUntil) - { - auto res = mFile->Read(mFile, &bufSize, (VoidPtr)(&((Char*)mBlob)[szCnt])); - - szCnt += bufSize; - - if (res == kBufferTooSmall) - { - bufSize = chunkToRead; - } - } - - mSizeFile = szCnt; - mErrorCode = kOperationOkay; -} - -/// @brief error code getter. -/// @return the error code. -Int32& Boot::BFileReader::Error() -{ - return mErrorCode; -} - -/// @brief blob getter. -/// @return the blob. -VoidPtr Boot::BFileReader::Blob() -{ - return mBlob; -} - -/// @breif Size getter. -/// @return the size of the file. -UInt64& Boot::BFileReader::Size() -{ - return mSizeFile; -} diff --git a/dev/BootLoader/src/BootString.cc b/dev/BootLoader/src/BootString.cc deleted file mode 100644 index f511f2fc..00000000 --- a/dev/BootLoader/src/BootString.cc +++ /dev/null @@ -1,92 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - - File: BootString.cc - Purpose: BootZ string library - - Revision History: - - - -------------------------------------------- */ - -#include -#include -#include - -/// BUGS: 0 - -///////////////////////////////////////////////////////////////////////////////////////////////////////// - -Kernel::SizeT Boot::BCopyMem(CharacterTypeUTF16* dest, CharacterTypeUTF16* src, const Kernel::SizeT len) -{ - if (!dest || !src) - return 0; - - SizeT index = 0UL; - for (; index < len; ++index) - { - dest[index] = src[index]; - } - - return index; -} - -Kernel::SizeT Boot::BStrLen(const CharacterTypeUTF16* ptr) -{ - if (!ptr) - return 0; - - Kernel::SizeT cnt = 0; - - while (*ptr != (CharacterTypeUTF16)0) - { - ++ptr; - ++cnt; - } - - return cnt; -} - -Kernel::SizeT Boot::BSetMem(CharacterTypeUTF16* src, const CharacterTypeUTF16 byte, const Kernel::SizeT len) -{ - if (!src) - return 0; - - Kernel::SizeT cnt = 0UL; - - while (*src != 0) - { - if (cnt > len) - break; - - *src = byte; - ++src; - - ++cnt; - } - - return cnt; -} - -Kernel::SizeT Boot::BSetMem(CharacterTypeUTF8* src, const CharacterTypeUTF8 byte, const Kernel::SizeT len) -{ - if (!src) - return 0; - - Kernel::SizeT cnt = 0UL; - - while (*src != 0) - { - if (cnt > len) - break; - - *src = byte; - ++src; - - ++cnt; - } - - return cnt; -} diff --git a/dev/BootLoader/src/BootSupport.cc b/dev/BootLoader/src/BootSupport.cc deleted file mode 100644 index bcd3b185..00000000 --- a/dev/BootLoader/src/BootSupport.cc +++ /dev/null @@ -1,82 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#include -#include -#include -#include -#include -#include -#include - -#ifdef __BOOTLDR_STANDALONE__ - -/// @brief memset definition in C++. -/// @param dst destination pointer. -/// @param byte value to fill in. -/// @param len length of of src. -EXTERN_C VoidPtr memset(void* dst, int byte, long long unsigned int len) -{ - for (size_t i = 0UL; i < len; ++i) - { - ((int*)dst)[i] = byte; - } - - return dst; -} - -/// @brief memcpy definition in C++. -/// @param dst destination pointer. -/// @param src source pointer. -/// @param len length of of src. -EXTERN_C VoidPtr memcpy(void* dst, const void* src, long long unsigned int len) -{ - for (size_t i = 0UL; i < len; ++i) - { - ((int*)dst)[i] = ((int*)src)[i]; - } - - return dst; -} - -/// @brief strlen definition in C++. -EXTERN_C size_t strlen(const char* whatToCheck) -{ - SizeT len = 0; - - while (whatToCheck[len] != 0) - { - ++len; - } - - return len; -} - -/// @brief strcmp definition in C++. -EXTERN_C int strcmp(const char* whatToCheck, const char* whatToCheckRight) -{ - if (!whatToCheck || *whatToCheck == 0) - return 0; - - SizeT len = 0; - - while (whatToCheck[len] == whatToCheckRight[len]) - { - if (whatToCheck[len] == 0) - return 0; - - ++len; - } - - return len; -} - -/// @brief something specific to the Microsoft's ABI, When the stack grows too big. -EXTERN_C void ___chkstk_ms(void) -{ -} - -#endif diff --git a/dev/BootLoader/src/BootTextWriter.cc b/dev/BootLoader/src/BootTextWriter.cc deleted file mode 100644 index bbb9a961..00000000 --- a/dev/BootLoader/src/BootTextWriter.cc +++ /dev/null @@ -1,169 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - - File: BootTextWriter.cc - Purpose: BootZ string library - - Revision History: - - - -------------------------------------------- */ - -#include -#include -#include -#include - -///////////////////////////////////////////////////////////////////////////////////////////////////////// -/// BUGS: 0 /// -///////////////////////////////////////////////////////////////////////////////////////////////////////// - -/** -@brief puts wrapper over EFI ConOut. -*/ -Boot::BTextWriter& Boot::BTextWriter::Write(const CharacterTypeUTF16* str) -{ -#ifdef __DEBUG__ - if (!str || *str == 0) - return *this; - - CharacterTypeUTF16 strTmp[2]; - strTmp[1] = 0; - - for (size_t i = 0; str[i] != 0; i++) - { - if (str[i] == '\r') - { - strTmp[0] = str[i]; - ST->ConOut->OutputString(ST->ConOut, strTmp); - - strTmp[0] = '\n'; - ST->ConOut->OutputString(ST->ConOut, strTmp); - } - else - { - strTmp[0] = str[i]; - ST->ConOut->OutputString(ST->ConOut, strTmp); - } - } -#endif // ifdef __DEBUG__ - - return *this; -} - -/// @brief UTF-8 equivalent of Write (UTF-16). -/// @param str the input string. -Boot::BTextWriter& Boot::BTextWriter::Write(const Char* str) -{ -#ifdef __DEBUG__ - if (!str || *str == 0) - return *this; - - CharacterTypeUTF16 strTmp[2]; - strTmp[1] = 0; - - for (size_t i = 0; str[i] != 0; i++) - { - if (str[i] == '\r') - { - strTmp[0] = str[i]; - ST->ConOut->OutputString(ST->ConOut, strTmp); - - strTmp[0] = '\n'; - ST->ConOut->OutputString(ST->ConOut, strTmp); - } - else - { - strTmp[0] = str[i]; - ST->ConOut->OutputString(ST->ConOut, strTmp); - } - } -#endif // ifdef __DEBUG__ - - return *this; -} - -Boot::BTextWriter& Boot::BTextWriter::Write(const UChar* str) -{ -#ifdef __DEBUG__ - if (!str || *str == 0) - return *this; - - CharacterTypeUTF16 strTmp[2]; - strTmp[1] = 0; - - for (size_t i = 0; str[i] != 0; i++) - { - if (str[i] == '\r') - { - strTmp[0] = str[i]; - ST->ConOut->OutputString(ST->ConOut, strTmp); - - strTmp[0] = '\n'; - ST->ConOut->OutputString(ST->ConOut, strTmp); - } - else - { - strTmp[0] = str[i]; - ST->ConOut->OutputString(ST->ConOut, strTmp); - } - } -#endif // ifdef __DEBUG__ - - return *this; -} - -/** -@brief putc wrapper over EFI ConOut. -*/ -Boot::BTextWriter& Boot::BTextWriter::WriteCharacter(CharacterTypeUTF16 c) -{ -#ifdef __DEBUG__ - EfiCharType str[2]; - - str[0] = c; - str[1] = 0; - ST->ConOut->OutputString(ST->ConOut, str); -#endif // ifdef __DEBUG__ - - return *this; -} - -Boot::BTextWriter& Boot::BTextWriter::Write(const Long& x) -{ -#ifdef __DEBUG__ - this->_Write(x); - this->Write("h"); -#endif // ifdef __DEBUG__ - - return *this; -} - -Boot::BTextWriter& Boot::BTextWriter::_Write(const Long& x) -{ -#ifdef __DEBUG__ - UInt64 y = (x > 0 ? x : -x) / 16; - UInt64 h = (x > 0 ? x : -x) % 16; - - if (y) - this->_Write(y); - - /* fail if the hex number is not base-16 */ - if (h > 16) - { - this->WriteCharacter('?'); - return *this; - } - - if (y < 0) - y = -y; - - const char cNumbers[] = "0123456789ABCDEF"; - - this->WriteCharacter(cNumbers[h]); -#endif // ifdef __DEBUG__ - - return *this; -} diff --git a/dev/BootLoader/src/BootThread.cc b/dev/BootLoader/src/BootThread.cc deleted file mode 100644 index ae494a15..00000000 --- a/dev/BootLoader/src/BootThread.cc +++ /dev/null @@ -1,213 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -/// @brief External boot services symbol. -EXTERN EfiBootServices* BS; - -/// @note BThread doesn't parse the symbols so doesn't nullify them, .bss is though. - -namespace Boot -{ - EXTERN_C Void rt_jump_to_address(VoidPtr code, HEL::BootInfoHeader* handover, UInt8* stack); - - BThread::BThread(VoidPtr blob) - : fBlob(blob), fStartAddress(nullptr) - { - // detect the format. - const Char* blob_bytes = reinterpret_cast(fBlob); - - BTextWriter writer; - - if (!blob_bytes) - { - // failed to provide a valid pointer. - return; - } - - if (blob_bytes[0] == kMagMz0 && - blob_bytes[1] == kMagMz1) - { - LDR_EXEC_HEADER_PTR header_ptr = CFKit::ldr_find_exec_header(blob_bytes); - LDR_OPTIONAL_HEADER_PTR opt_header_ptr = CFKit::ldr_find_opt_exec_header(blob_bytes); - - if (!header_ptr || !opt_header_ptr) - return; - -#ifdef __ZKA_AMD64__ - if (header_ptr->mMachine != kPeMachineAMD64 || - header_ptr->mSignature != kPeSignature) - { - writer.Write("BootZ: Not a PE32+ executable.\r"); - return; - } -#elif defined(__ZKA_ARM64__) - if (header_ptr->mMachine != kPeMachineAMD64 || - header_ptr->mSignature != kPeSignature) - { - writer.Write("BootZ: Not a PE32+ executable.\r"); - return; - } -#endif // __ZKA_AMD64__ || __ZKA_ARM64__ - - if (opt_header_ptr->mSubsystem != kZKASubsystem) - { - writer.Write("BootZ: Not a ZKA Subsystem executable.\r"); - return; - } - - writer.Write("BootZ: PE32+ executable detected (ZKA Subsystem).\r"); - - auto numSecs = header_ptr->mNumberOfSections; - - writer.Write("BootZ: Major Linker Ver: ").Write(opt_header_ptr->mMajorLinkerVersion).Write("\r"); - writer.Write("BootZ: Minor Linker Ver: ").Write(opt_header_ptr->mMinorLinkerVersion).Write("\r"); - writer.Write("BootZ: Major Subsystem Ver: ").Write(opt_header_ptr->mMajorSubsystemVersion).Write("\r"); - writer.Write("BootZ: Minor Subsystem Ver: ").Write(opt_header_ptr->mMinorSubsystemVersion).Write("\r"); - writer.Write("BootZ: Magic: ").Write(header_ptr->mSignature).Write("\r"); - - constexpr auto cPageSize = 512; - - EfiPhysicalAddress loadStartAddress = opt_header_ptr->mImageBase; - loadStartAddress += opt_header_ptr->mBaseOfData; - - writer.Write("BootZ: ImageBase: ").Write(loadStartAddress).Write("\r"); - - auto numPages = opt_header_ptr->mSizeOfImage / cPageSize; - BS->AllocatePages(AllocateAddress, EfiLoaderData, numPages, &loadStartAddress); - - LDR_SECTION_HEADER_PTR sectPtr = (LDR_SECTION_HEADER_PTR)(((Char*)opt_header_ptr) + header_ptr->mSizeOfOptionalHeader); - - constexpr auto sectionForCode = ".text"; - constexpr auto sectionForNewLdr = ".ldr"; - constexpr auto sectionForBSS = ".bss"; - - for (SizeT sectIndex = 0; sectIndex < numSecs; ++sectIndex) - { - LDR_SECTION_HEADER_PTR sect = §Ptr[sectIndex]; - - SetMem((VoidPtr)(loadStartAddress + sect->mVirtualAddress), 0, sect->mSizeOfRawData); - - if (StrCmp(sectionForCode, sect->mName) == 0) - { - fStartAddress = (VoidPtr)((UIntPtr)loadStartAddress + opt_header_ptr->mAddressOfEntryPoint); - writer.Write("BootZ: Executable entry address: ").Write((UIntPtr)fStartAddress).Write("\r"); - } - else if (StrCmp(sectionForNewLdr, sect->mName) == 0) - { - struct HANDOVER_INFORMATION_STUB - { - UInt64 HandoverMagic; - UInt32 HandoverType; - UInt32 HandoverPad; - UInt32 HandoverArch; - }* handover_struc = (struct HANDOVER_INFORMATION_STUB*)((UIntPtr)fBlob + sect->mPointerToRawData); - - if (handover_struc->HandoverMagic != kHandoverMagic && - handover_struc->HandoverType != HEL::kTypeKernel) - { -#ifdef __ZKA_AMD64__ - if (handover_struc->HandoverArch != HEL::kArchAMD64) - { - fb_render_string("BootZ: Not an handover header, bad CPU...", 40, 10, RGB(0xFF, 0xFF, 0xFF)); - ::EFI::Stop(); - } -#endif - -#ifdef __ZKA_ARM64__ - if (handover_struc->HandoverArch != HEL::kArchARM64) - { - fb_render_string("BootZ: Not an handover header, bad CPU...", 40, 10, RGB(0xFF, 0xFF, 0xFF)); - ::EFI::Stop(); - } -#endif - fb_render_string("BootZ: Not an handover header...", 40, 10, RGB(0xFF, 0xFF, 0xFF)); - - ::EFI::Stop(); - } - } - - writer.Write("BootZ: Raw offset: ").Write(sect->mPointerToRawData).Write(" of ").Write(sect->mName).Write("\r"); - - CopyMem((VoidPtr)(loadStartAddress + sect->mVirtualAddress), (VoidPtr)((UIntPtr)fBlob + sect->mPointerToRawData), sect->mSizeOfRawData); - } - } - else if (blob_bytes[0] == kPefMagic[0] && - blob_bytes[1] == kPefMagic[1] && - blob_bytes[2] == kPefMagic[2] && - blob_bytes[3] == kPefMagic[3]) - { - // ========================================= // - // PEF executable detected. - // ========================================= // - - fStartAddress = nullptr; - writer.Write("BootZ: PEF executable detected, won't load it.\r"); - writer.Write("BootZ: note: PEF executables aren't loadable by default.\r"); - } - else - { - writer.Write("BootZ: Invalid Executable.\r"); - } - - fStack = new UInt8[mib_cast(8)]; - } - - /// @note handover header has to be valid! - Int32 BThread::Start(HEL::BootInfoHeader* handover, Bool own_stack) - { - HEL::HandoverProc err_fn = [](HEL::BootInfoHeader* rcx) -> Int32 { - fb_render_string("BootZ: Invalid Boot Image...", 50, 10, RGB(0xFF, 0xFF, 0xFF)); - ::EFI::Stop(); - - return NO; - }; - - if (!fStartAddress) - { - err_fn(handover); - } - - fHandover = handover; - - if (own_stack) - { - rt_jump_to_address(fStartAddress, fHandover, &fStack[mib_cast(8) - 1]); - } - else - { - delete[] fStack; - return reinterpret_cast(fStartAddress)(fHandover); - } - - return NO; - } - - const Char* BThread::GetName() - { - return fBlobName; - } - - Void BThread::SetName(const Char* name) - { - CopyMem(fBlobName, name, StrLen(name)); - } - - bool BThread::IsValid() - { - return fStartAddress != nullptr; - } -} // namespace Boot diff --git a/dev/BootLoader/src/BootloaderRsrc.rsrc b/dev/BootLoader/src/BootloaderRsrc.rsrc deleted file mode 100644 index 5cef7e7c..00000000 --- a/dev/BootLoader/src/BootloaderRsrc.rsrc +++ /dev/null @@ -1,25 +0,0 @@ -#include "../../Kernel/CompilerKit/Version.h" - -1 VERSIONINFO -FILEVERSION 1,0,0,0 -PRODUCTVERSION 1,0,0,0 -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "080904E4" - BEGIN - VALUE "CompanyName", "Theater Quality Inc" - VALUE "FileDescription", "ZKA OS Loader." - VALUE "FileVersion", BOOTLOADER_VERSION - VALUE "InternalName", "zbaosldr" - VALUE "LegalCopyright", "Copyright (C) 2024, Theater Quality Inc all rights reserved." - VALUE "OriginalFilename", "zbaosldr.exe" - VALUE "ProductName", "zbaosldr" - VALUE "ProductVersion", BOOTLOADER_VERSION - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x809, 1252 - END -END diff --git a/dev/BootLoader/src/HEL/64X000/.gitkeep b/dev/BootLoader/src/HEL/64X000/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/dev/BootLoader/src/HEL/64X000/Boot64x0.S b/dev/BootLoader/src/HEL/64X000/Boot64x0.S deleted file mode 100644 index a9ca1a2d..00000000 --- a/dev/BootLoader/src/HEL/64X000/Boot64x0.S +++ /dev/null @@ -1,35 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -.section .boot_hdr -.align 4 - -/* BootZ boot header begin for a 64x000 Kernel. */ - -boot_hdr_mag: - .ascii "CB" -boot_hdr_name: - // it has to match ten bytes. - .asciz "zbaosldr\0\0" -boot_hdr_ver: - .word 0x104 -boot_hdr_proc: - .long bootloader_start - -/* BootZ boot header end */ - -.extern bootloader_main -.extern bootloader_stack - -.globl bootloader_start -bootloader_start: - psh 4 /* real address of .Laddr */ - ldi 0,(bootloader_stack-bootloader_start)(4) /* stack address location */ - mv 19,0 /* use user defined stack */ - jrl - - bl bootloader_main - blr diff --git a/dev/BootLoader/src/HEL/AMD64/.gitkeep b/dev/BootLoader/src/HEL/AMD64/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/dev/BootLoader/src/HEL/AMD64/BootAPI.S b/dev/BootLoader/src/HEL/AMD64/BootAPI.S deleted file mode 100644 index 963ef46a..00000000 --- a/dev/BootLoader/src/HEL/AMD64/BootAPI.S +++ /dev/null @@ -1,60 +0,0 @@ -.global rt_jump_to_address -.global rt_reset_hardware - -.text - -.intel_syntax noprefix - -/** - @brief this function setups a stack and then jumps to - a function */ -rt_jump_to_address: - mov rbx, rcx - mov rcx, rdx - push rbx - push rdx - mov rsp, r8 - push rax - jmp rbx - - pop rdx - pop rbx - pop rax - - ret - -rt_reset_hardware: - /* dont raise any interrupts. (except ofc NMIs.) */ - cli - /* remap PIC */ -wait_gate1: - in al,0x64 - and al,2 - jnz wait_gate1 - mov al,0x0D1 - out 0x64,al -wait_gate2: - in al,0x64 - and al,2 - jnz wait_gate2 - mov al,0x0FE - out 0x60,al - - /* trigger triple fault, by writing to cr4 */ - - mov rax, 0 - lidt [rax] - -reset_wait: - jmp reset_wait - -.global boot_write_cr3 -.global boot_read_cr3 - -boot_read_cr3: - mov rax, rax - ret - -boot_write_cr3: - mov cr3, rcx - ret diff --git a/dev/BootLoader/src/HEL/AMD64/BootATA.cc b/dev/BootLoader/src/HEL/AMD64/BootATA.cc deleted file mode 100644 index ff92bf48..00000000 --- a/dev/BootLoader/src/HEL/AMD64/BootATA.cc +++ /dev/null @@ -1,278 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -/** - * @file BootATA.cc - * @author Amlal EL Mahrouss (amlalelmahrouss@icloud.com) - * @brief ATA driver. - * @version 0.1 - * @date 2024-02-02 - * - * @copyright Copyright (c) Theater Quality Inc - * - */ - -#include -#include -#include - -/// bugs: 0 - -using namespace Boot; - -#define kATADataLen 256 - -static Boolean kATADetected = false; -static Int32 kATADeviceType = kATADeviceCount; -static UInt16 kATAData[kATADataLen] = {0}; - -Boolean boot_ata_detected(Void); - -STATIC Boolean boot_ata_wait_io(UInt16 IO) -{ - for (int i = 0; i < 400; i++) - rt_in8(IO + ATA_REG_STATUS); - -ATAWaitForIO_Retry: - auto statRdy = rt_in8(IO + ATA_REG_STATUS); - - if ((statRdy & ATA_SR_BSY)) - goto ATAWaitForIO_Retry; - -ATAWaitForIO_Retry2: - statRdy = rt_in8(IO + ATA_REG_STATUS); - - if (statRdy & ATA_SR_ERR) - return false; - - if (!(statRdy & ATA_SR_DRDY)) - goto ATAWaitForIO_Retry2; - - return true; -} - -Void boot_ata_select(UInt16 Bus) -{ - if (Bus == ATA_PRIMARY_IO) - rt_out8(Bus + ATA_REG_HDDEVSEL, ATA_PRIMARY_SEL); - else - rt_out8(Bus + ATA_REG_HDDEVSEL, ATA_SECONDARY_SEL); -} - -Boolean boot_ata_init(UInt16 Bus, UInt8 Drive, UInt16& OutBus, UInt8& OutMaster) -{ - if (boot_ata_detected()) - return true; - - BTextWriter writer; - - UInt16 IO = Bus; - - boot_ata_select(IO); - - // Bus init, NEIN bit. - rt_out8(IO + ATA_REG_NEIN, 1); - - // identify until it's good. -ATAInit_Retry: - auto statRdy = rt_in8(IO + ATA_REG_STATUS); - - if (statRdy & ATA_SR_ERR) - { - writer.Write( - L"BootZ: ATA: Not an IDE based drive.\r"); - - return false; - } - - if ((statRdy & ATA_SR_BSY)) - goto ATAInit_Retry; - - rt_out8(IO + ATA_REG_COMMAND, ATA_CMD_IDENTIFY); - - /// fetch serial info - /// model, speed, number of sectors... - - boot_ata_wait_io(IO); - - for (SizeT indexData = 0ul; indexData < kATADataLen; ++indexData) - { - kATAData[indexData] = Kernel::HAL::rt_in16(IO + ATA_REG_DATA); - } - - OutBus = - (Bus == ATA_PRIMARY_IO) ? BootDeviceATA::kPrimary : BootDeviceATA::kSecondary; - - OutMaster = (Bus == ATA_PRIMARY_IO) ? ATA_MASTER : ATA_SLAVE; - - return true; -} - -Void boot_ata_read(UInt64 Lba, UInt16 IO, UInt8 Master, CharacterTypeUTF8* Buf, SizeT SectorSz, SizeT Size) -{ - Lba /= SectorSz; - - UInt8 Command = ((!Master) ? 0xE0 : 0xF0); - - boot_ata_wait_io(IO); - boot_ata_select(IO); - - rt_out8(IO + ATA_REG_HDDEVSEL, (Command) | (((Lba) >> 24) & 0x0F)); - - rt_out8(IO + ATA_REG_SEC_COUNT0, ((Size + SectorSz) / SectorSz)); - - rt_out8(IO + ATA_REG_LBA0, (Lba)&0xFF); - rt_out8(IO + ATA_REG_LBA1, (Lba) >> 8); - rt_out8(IO + ATA_REG_LBA2, (Lba) >> 16); - rt_out8(IO + ATA_REG_LBA3, (Lba) >> 24); - - rt_out8(IO + ATA_REG_COMMAND, ATA_CMD_READ_PIO); - - boot_ata_wait_io(IO); - - for (SizeT IndexOff = 0; IndexOff < Size; ++IndexOff) - { - boot_ata_wait_io(IO); - Buf[IndexOff] = Kernel::HAL::rt_in16(IO + ATA_REG_DATA); - boot_ata_wait_io(IO); - } -} - -Void boot_ata_write(UInt64 Lba, UInt16 IO, UInt8 Master, CharacterTypeUTF8* Buf, SizeT SectorSz, SizeT Size) -{ - Lba /= SectorSz; - - UInt8 Command = ((!Master) ? 0xE0 : 0xF0); - - boot_ata_wait_io(IO); - boot_ata_select(IO); - - rt_out8(IO + ATA_REG_HDDEVSEL, (Command) | (((Lba) >> 24) & 0x0F)); - - rt_out8(IO + ATA_REG_SEC_COUNT0, ((Size + (SectorSz)) / SectorSz)); - - rt_out8(IO + ATA_REG_LBA0, (Lba)&0xFF); - rt_out8(IO + ATA_REG_LBA1, (Lba) >> 8); - rt_out8(IO + ATA_REG_LBA2, (Lba) >> 16); - rt_out8(IO + ATA_REG_LBA3, (Lba) >> 24); - - rt_out8(IO + ATA_REG_COMMAND, ATA_CMD_WRITE_PIO); - - boot_ata_wait_io(IO); - - for (SizeT IndexOff = 0; IndexOff < Size; ++IndexOff) - { - boot_ata_wait_io(IO); - rt_out16(IO + ATA_REG_DATA, Buf[IndexOff]); - boot_ata_wait_io(IO); - } -} - -/// @check is ATA detected? -Boolean boot_ata_detected(Void) -{ - return kATADetected; -} - -/*** - * - * - * @brief ATA Device class. - * - * - */ - -/** - * @brief ATA Device constructor. - * @param void none. - */ -BootDeviceATA::BootDeviceATA() noexcept -{ - if (boot_ata_init(ATA_PRIMARY_IO, true, this->Leak().mBus, - this->Leak().mMaster) || - boot_ata_init(ATA_SECONDARY_IO, true, this->Leak().mBus, - this->Leak().mMaster)) - { - kATADetected = true; - } -} -/** - * @brief Is ATA detected? - */ -BootDeviceATA::operator bool() -{ - return boot_ata_detected(); -} - -/** - @brief Read Buf from disk - @param Sz Sector size - @param Buf buffer -*/ -BootDeviceATA& BootDeviceATA::Read(CharacterTypeUTF8* Buf, const SizeT& SectorSz) -{ - if (!boot_ata_detected()) - { - Leak().mErr = true; - return *this; - } - - this->Leak().mErr = false; - - if (!Buf || SectorSz < 1) - return *this; - - boot_ata_read(this->Leak().mBase, this->Leak().mBus, this->Leak().mMaster, - Buf, SectorSz, this->Leak().mSize); - - return *this; -} - -/** - @brief Write Buf into disk - @param Sz Sector size - @param Buf buffer -*/ -BootDeviceATA& BootDeviceATA::Write(CharacterTypeUTF8* Buf, const SizeT& SectorSz) -{ - if (!boot_ata_detected()) - { - Leak().mErr = true; - return *this; - } - - Leak().mErr = false; - - if (!Buf || SectorSz < 1) - return *this; - - boot_ata_write(this->Leak().mBase, this->Leak().mBus, this->Leak().mMaster, - Buf, SectorSz, this->Leak().mSize); - - return *this; -} - -/** - * @brief ATA trait getter. - * @return BootDeviceATA::ATATrait& the drive config. - */ -BootDeviceATA::ATATrait& BootDeviceATA::Leak() -{ - return mTrait; -} - -/*** - @brief Getter, gets the number of sectors inside the drive. -*/ -SizeT BootDeviceATA::GetSectorsCount() noexcept -{ - return (kATAData[61] << 16) | kATAData[60]; -} - -SizeT BootDeviceATA::GetDiskSize() noexcept -{ - return this->GetSectorsCount() * BootDeviceATA::kSectorSize; -} diff --git a/dev/BootLoader/src/HEL/AMD64/BootMain.cc b/dev/BootLoader/src/HEL/AMD64/BootMain.cc deleted file mode 100644 index 023976ae..00000000 --- a/dev/BootLoader/src/HEL/AMD64/BootMain.cc +++ /dev/null @@ -1,318 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// Makes the compiler shut up. -#ifndef kMachineModel -#define kMachineModel "ZkaOS" -#endif // !kMachineModel - -#ifndef kExpectedWidth -#define kExpectedWidth (1280) -#endif - -#ifndef kExpectedHeight -#define kExpectedHeight (720) -#endif - -/** Graphics related. */ - -STATIC EfiGraphicsOutputProtocol* kGop = nullptr; -STATIC UInt16 kGopStride = 0U; -STATIC EfiGUID kGopGuid; - -EXTERN_C Void rt_reset_hardware(); - -EXTERN EfiBootServices* BS; - -/** - @brief Finds and stores the GOP object. -*/ -STATIC Bool boot_init_fb() noexcept -{ - kGopGuid = EfiGUID(EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID); - kGop = nullptr; - - if (BS->LocateProtocol(&kGopGuid, nullptr, (VoidPtr*)&kGop) != kEfiOk) - return No; - - kGopStride = 4; - - for (SizeT i = 0; i < kGop->Mode->MaxMode; ++i) - { - EfiGraphicsOutputProtocolModeInformation* infoPtr = nullptr; - UInt32 sz = 0U; - - kGop->QueryMode(kGop, i, &sz, &infoPtr); - - if (infoPtr->HorizontalResolution == kExpectedWidth && - infoPtr->VerticalResolution == kExpectedHeight) - { - kGop->SetMode(kGop, i); - return Yes; - } - } - - return No; -} - -EXTERN_C VoidPtr boot_read_cr3(); -EXTERN_C Void boot_write_cr3(VoidPtr new_cr3); - -EXTERN EfiBootServices* BS; - -/// @brief Main EFI entrypoint. -/// @param ImageHandle Handle of this image. -/// @param SystemTable The system table of it. -/// @return nothing, never returns. -EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle, - EfiSystemTable* SystemTable) -{ - InitEFI(SystemTable); ///! Init the EFI library. - - HEL::BootInfoHeader* handover_hdr = - new HEL::BootInfoHeader(); - - UInt32 map_key = 0; - UInt32 size_struct_ptr = sizeof(EfiMemoryDescriptor); - EfiMemoryDescriptor* struct_ptr = nullptr; - UInt32 sz_desc = sizeof(EfiMemoryDescriptor); - UInt32 rev_desc = 0; - -#ifdef ZBA_USE_FB - if (!boot_init_fb()) - return 1; ///! Init the GOP. - - for (SizeT index_vt = 0; index_vt < SystemTable->NumberOfTableEntries; - ++index_vt) - { - Char* vendor_table = reinterpret_cast( - SystemTable->ConfigurationTable[index_vt].VendorTable); - - // ACPI's 'RSD PTR', which contains the ACPI SDT (MADT, FACP...) - if (vendor_table[0] == 'R' && vendor_table[1] == 'S' && - vendor_table[2] == 'D' && vendor_table[3] == ' ' && - vendor_table[4] == 'P' && vendor_table[5] == 'T' && - vendor_table[6] == 'R' && vendor_table[7] == ' ') - { - handover_hdr->f_HardwareTables.f_VendorPtr = (VoidPtr)vendor_table; - break; - } - } - - // ------------------------------------------ // - // draw background color. - // ------------------------------------------ // - - handover_hdr->f_GOP.f_The = kGop->Mode->FrameBufferBase; - handover_hdr->f_GOP.f_Width = kGop->Mode->Info->VerticalResolution; - handover_hdr->f_GOP.f_Height = kGop->Mode->Info->HorizontalResolution; - handover_hdr->f_GOP.f_PixelPerLine = kGop->Mode->Info->PixelsPerScanLine; - handover_hdr->f_GOP.f_PixelFormat = kGop->Mode->Info->PixelFormat; - handover_hdr->f_GOP.f_Size = kGop->Mode->FrameBufferSize; -#endif // ZBA_USE_FB - - // ------------------------------------------- // - // Grab MP services, extended to runtime. // - // ------------------------------------------- // - - EfiGUID guid_mp = EfiGUID(EFI_MP_SERVICES_PROTOCOL_GUID); - EfiMpServicesProtocol* mp = nullptr; - - BS->LocateProtocol(&guid_mp, nullptr, reinterpret_cast(&mp)); - - handover_hdr->f_HardwareTables.f_MpPtr = reinterpret_cast(mp); - - kHandoverHeader = handover_hdr; - - fb_init(); - - UI::ui_draw_background(); - - FBDrawBitMapInRegion(zka_disk, ZKA_DISK_HEIGHT, ZKA_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_DISK_HEIGHT) / 2); - - fb_fini(); - - UInt32 cnt_enabled = 0; - UInt32 cnt_disabled = 0; - - mp->GetNumberOfProcessors(mp, &cnt_disabled, &cnt_enabled); - - handover_hdr->f_HardwareTables.f_MultiProcessingEnabled = cnt_enabled > 1; - // Fill handover header now. - - // ---------------------------------------------------- // - // The following checks for an exisiting partition - // inside the disk, if it doesn't have one, - // format the disk. - // ---------------------------------------------------- // - - BS->GetMemoryMap(&size_struct_ptr, struct_ptr, &map_key, &sz_desc, &rev_desc); - - struct_ptr = new EfiMemoryDescriptor[sz_desc]; - - BS->GetMemoryMap(&size_struct_ptr, struct_ptr, &map_key, &sz_desc, &rev_desc); - - auto kDefaultMemoryMap = 0; // Grab any usable entries. - - //-----------------------------------------------------------// - // A simple loop which finds a usable memory region for us. - //-----------------------------------------------------------// - - SizeT lookup_index = 0UL; - - for (; struct_ptr[lookup_index].Kind != EfiMemoryType::EfiConventionalMemory; ++lookup_index) - { - ZKA_UNUSED(0); - } - - kDefaultMemoryMap = lookup_index; - - //-------------------------------------------------------------// - // Update handover file specific table and phyiscal start field. - //-------------------------------------------------------------// - - handover_hdr->f_BitMapStart = nullptr; /* Start of bitmap. */ - handover_hdr->f_BitMapSize = kHandoverBitMapSz; /* Size of bitmap. */ - - while (BS->AllocatePool(EfiLoaderData, handover_hdr->f_BitMapSize, &handover_hdr->f_BitMapStart) != kEfiOk) - { - if (handover_hdr->f_BitMapStart) - { - BS->FreePool(handover_hdr->f_BitMapStart); - handover_hdr->f_BitMapStart = nullptr; - } - } - - handover_hdr->f_FirmwareCustomTables[0] = (VoidPtr)BS; - handover_hdr->f_FirmwareCustomTables[1] = (VoidPtr)ST; - - Boot::BFileReader reader_syschk(L"syschk.sys", ImageHandle); - reader_syschk.ReadAll(0); - - Boot::BThread* syschk_thread = nullptr; - - // ------------------------------------------ // - // If we succeed in reading the blob, then execute it. - // ------------------------------------------ // - - if (reader_syschk.Blob()) - { - syschk_thread = new Boot::BThread(reader_syschk.Blob()); - syschk_thread->SetName("BootZ: System Recovery Check"); - } - - Boot::BDiskFormatFactory partition_factory; - - if (partition_factory.IsPartitionValid() == false && - syschk_thread->Start(handover_hdr, NO) == kEfiOk) - { - fb_init(); - - Boot::BDiskFormatFactory::BFileDescriptor root{}; - - root.fFileName[0] = kNeFSRoot[0]; - root.fFileName[1] = 0; - - root.fKind = kNeFSCatalogKindDir; - - partition_factory.Format("FileSystem (A:) ", &root, 1); - - UI::ui_draw_background(); - - FBDrawBitMapInRegion(zka_has_disk, ZKA_HAS_DISK_HEIGHT, ZKA_HAS_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_HAS_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_HAS_DISK_HEIGHT) / 2); - - fb_fini(); - } - - // ------------------------------------------ // - // null these fields, to avoid being reused later. - // ------------------------------------------ // - - handover_hdr->f_FirmwareCustomTables[0] = nullptr; - handover_hdr->f_FirmwareCustomTables[1] = nullptr; - - handover_hdr->f_FirmwareVendorLen = Boot::BStrLen(SystemTable->FirmwareVendor); - - handover_hdr->f_Magic = kHandoverMagic; - handover_hdr->f_Version = kHandoverVersion; - - // Provide fimware vendor name. - - Boot::BCopyMem(handover_hdr->f_FirmwareVendorName, SystemTable->FirmwareVendor, - handover_hdr->f_FirmwareVendorLen); - - handover_hdr->f_FirmwareVendorLen = Boot::BStrLen(SystemTable->FirmwareVendor); - - // Assign to global 'kHandoverHeader'. - - Boot::BFileReader reader_kernel(L"minoskrnl.exe", ImageHandle); - - reader_kernel.ReadAll(0); - - Boot::BThread* kernel_thread = nullptr; - - // ------------------------------------------ // - // If we succeed in reading the blob, then execute it. - // ------------------------------------------ // - - if (reader_kernel.Blob()) - { - kernel_thread = new Boot::BThread(reader_kernel.Blob()); - kernel_thread->SetName("BootZ: ZkaOS Kernel."); - - handover_hdr->f_KernelImage = reader_kernel.Blob(); - } - else - { - fb_init(); - FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2); - - EFI::Stop(); - } - - Boot::BFileReader ttf_font(L"zka\\fntkrnl.ttf", ImageHandle); - - ttf_font.ReadAll(0); - - if (ttf_font.Blob()) - { - handover_hdr->f_KernelImage = reader_kernel.Blob(); - handover_hdr->f_KernelSz = reader_kernel.Size(); - handover_hdr->f_FontImage = ttf_font.Blob(); - handover_hdr->f_FontSz = ttf_font.Size(); - } - else - { - fb_init(); - FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2); - - EFI::Stop(); - } - - EFI::ExitBootServices(map_key, ImageHandle); - - // ---------------------------------------------------- // - // Finally load the OS kernel. - // ---------------------------------------------------- // - - kernel_thread->Start(handover_hdr, YES); - - CANT_REACH(); -} diff --git a/dev/BootLoader/src/HEL/AMD64/BootPlatform.cc b/dev/BootLoader/src/HEL/AMD64/BootPlatform.cc deleted file mode 100644 index 5fe7d41f..00000000 --- a/dev/BootLoader/src/HEL/AMD64/BootPlatform.cc +++ /dev/null @@ -1,106 +0,0 @@ - -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#include -#include -#include - -#ifdef __BOOTLDR_STANDALONE__ - -using namespace Boot; - -EXTERN_C void rt_hlt() -{ - asm volatile("hlt"); -} - -EXTERN_C void rt_cli() -{ - asm volatile("cli"); -} - -EXTERN_C void rt_sti() -{ - asm volatile("sti"); -} - -EXTERN_C void rt_cld() -{ - asm volatile("cld"); -} - -EXTERN_C void rt_std() -{ - asm volatile("std"); -} - -EXTERN_C void rt_out8(UInt16 port, UInt8 value) -{ - asm volatile("outb %%al, %1" - : - : "a"(value), "Nd"(port) - : "memory"); -} - -EXTERN_C void rt_out16(UInt16 port, UInt16 value) -{ - asm volatile("outw %%ax, %1" - : - : "a"(value), "Nd"(port) - : "memory"); -} - -EXTERN_C void rt_out32(UInt16 port, UInt32 value) -{ - asm volatile("outl %%eax, %1" - : - : "a"(value), "Nd"(port) - : "memory"); -} - -EXTERN_C UInt8 rt_in8(UInt16 port) -{ - UInt8 value; - asm volatile("inb %1, %%al" - : "=a"(value) - : "Nd"(port) - : "memory"); - - return value; -} - -EXTERN_C UInt16 rt_in16(UInt16 port) -{ - UInt16 value; - asm volatile("inw %%dx, %%ax" - : "=a"(value) - : "d"(port)); - - return value; -} - -EXTERN_C UInt32 rt_in32(UInt16 port) -{ - UInt32 value; - asm volatile("inl %1, %%eax" - : "=a"(value) - : "Nd"(port) - : "memory"); - - return value; -} - -#else - -#include - -void rt_hlt() -{ - Kernel::HAL::rt_halt(); -} - -#endif // __BOOTLDR_STANDALONE__ diff --git a/dev/BootLoader/src/HEL/AMD64/BootSATA.cc b/dev/BootLoader/src/HEL/AMD64/BootSATA.cc deleted file mode 100644 index 229ce7e3..00000000 --- a/dev/BootLoader/src/HEL/AMD64/BootSATA.cc +++ /dev/null @@ -1,20 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -/** - * @file BootAHCI.cc - * @author Amlal EL Mahrouss (amlalelmahrouss@icloud.com) - * @brief SATA support for BootZ. - * @version 0.1 - * @date 2024-02-02 - * - * @copyright Copyright (c) Theater Quality Inc - * - */ - -#include -#include -#include diff --git a/dev/BootLoader/src/HEL/ARM64/.gitkeep b/dev/BootLoader/src/HEL/ARM64/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/dev/BootLoader/src/HEL/ARM64/BootAPI.S b/dev/BootLoader/src/HEL/ARM64/BootAPI.S deleted file mode 100644 index a60ad218..00000000 --- a/dev/BootLoader/src/HEL/ARM64/BootAPI.S +++ /dev/null @@ -1,12 +0,0 @@ -.global rt_jump_to_address - -.text - -/** - @brief this function setups a stack and then jumps to - a function */ -rt_jump_to_address: - mov x19, x0 - mov sp, x2 - blr x19 - diff --git a/dev/BootLoader/src/HEL/ARM64/BootMain.cc b/dev/BootLoader/src/HEL/ARM64/BootMain.cc deleted file mode 100644 index fe35ea1b..00000000 --- a/dev/BootLoader/src/HEL/ARM64/BootMain.cc +++ /dev/null @@ -1,76 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#include -#include -#include -#include - -#ifndef kExpectedWidth -#define kExpectedWidth 844 -#endif - -#ifndef kExpectedHeight -#define kExpectedHeight 390 -#endif - -EXTERN EfiBootServices* BS; - -STATIC EfiGraphicsOutputProtocol* kGop = nullptr; -STATIC UInt16 kGopStride = 0U; -STATIC EfiGUID kGopGuid; - -/// @brief Main EFI entrypoint. -/// @param ImageHandle Handle of this image. -/// @param SystemTable The system table of it. -/// @return nothing, never returns. -EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle, - EfiSystemTable* SystemTable) -{ - InitEFI(SystemTable); - - kGopGuid = EfiGUID(EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID); - kGop = nullptr; - - BS->LocateProtocol(&kGopGuid, nullptr, (VoidPtr*)&kGop); - - kGopStride = 4; - - Boot::BTextWriter writer; - - for (SizeT i = 0; i < kGop->Mode->MaxMode; ++i) - { - EfiGraphicsOutputProtocolModeInformation* infoPtr = nullptr; - UInt32 sz = 0U; - - kGop->QueryMode(kGop, i, &sz, &infoPtr); - - writer.Write(infoPtr->HorizontalResolution); - writer.Write(infoPtr->VerticalResolution); - writer.Write("\r"); - - if (infoPtr->HorizontalResolution == kExpectedWidth && - infoPtr->VerticalResolution == kExpectedHeight) - { - kGop->SetMode(kGop, i); - break; - } - } - - Boot::BFileReader reader_kernel(L"minoskrnl.exe", ImageHandle); - - reader_kernel.ReadAll(0); - - if (reader_kernel.Blob()) - { - auto kernel_thread = Boot::BThread(reader_kernel.Blob()); - - if (kernel_thread.IsValid()) - kernel_thread.Start(nullptr, YES); - } - - CANT_REACH(); -} diff --git a/dev/BootLoader/src/HEL/ARM64/BootPlatform.cc b/dev/BootLoader/src/HEL/ARM64/BootPlatform.cc deleted file mode 100644 index df16bd40..00000000 --- a/dev/BootLoader/src/HEL/ARM64/BootPlatform.cc +++ /dev/null @@ -1,37 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#include -#include -#include - -#ifdef __BOOTLDR_STANDALONE__ - -using namespace Boot; - -EXTERN_C void rt_hlt() -{ - while (Yes) - ; -} - -EXTERN_C void rt_cli() -{ -} - -EXTERN_C void rt_sti() -{ -} - -EXTERN_C void rt_cld() -{ -} - -EXTERN_C void rt_std() -{ -} - -#endif // __BOOTLDR_STANDALONE__ diff --git a/dev/BootLoader/src/HEL/POWER/.gitkeep b/dev/BootLoader/src/HEL/POWER/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/dev/BootLoader/src/HEL/POWER/CoreBootStartup.S b/dev/BootLoader/src/HEL/POWER/CoreBootStartup.S deleted file mode 100644 index e4964c59..00000000 --- a/dev/BootLoader/src/HEL/POWER/CoreBootStartup.S +++ /dev/null @@ -1,34 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -.section .boot_hdr -.align 4 - -/* BootZ boot header begin */ - -boot_hdr_mag: - .ascii "CB" -boot_hdr_name: - // it has to match ten bytes. - .asciz "zbaosldr\0\0" -boot_hdr_ver: - .word 0x104 -boot_hdr_proc: - .long bootloader_start - -/* BootZ boot header end */ - -.extern bootloader_main -.extern bootloader_stack - -.globl bootloader_start -bootloader_start: - mflr 4 /* real address of .Laddr */ - lwz 0,(bootloader_stack-bootloader_start)(4) /* stack address location */ - mr 1,0 /* use user defined stack */ - - bl bootloader_main - blr diff --git a/dev/BootLoader/src/New+Delete.cc b/dev/BootLoader/src/New+Delete.cc deleted file mode 100644 index 3abf0ef3..00000000 --- a/dev/BootLoader/src/New+Delete.cc +++ /dev/null @@ -1,60 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#include -#include -#include - -#ifdef __BOOTLDR_STANDALONE__ -EXTERN EfiBootServices* BS; - -/// @brief Allocates a new object. -/// @param sz the size. -/// @return -void* operator new(size_t sz) -{ - void* buf = nullptr; - - while (BS->AllocatePool(EfiMemoryType::EfiLoaderData, sz, &buf) == kBufferTooSmall) - BS->FreePool(buf); - - return buf; -} - -/// @brief Allocates a new object. -/// @param sz the size. -/// @return -void* operator new[](size_t sz) -{ - void* buf = nullptr; - BS->AllocatePool(EfiMemoryType::EfiLoaderData, sz, &buf); - - return buf; -} - -/// @brief Deletes the object. -/// @param buf the object. -void operator delete(void* buf) -{ - BS->FreePool(buf); -} - -/// @brief Deletes the object. -/// @param buf the object. -void operator delete[](void* buf) -{ - BS->FreePool(buf); -} - -/// @brief Deletes the object (array specific). -/// @param buf the object. -/// @param size it's size. -void operator delete(void* buf, size_t size) -{ - BS->FreePool(buf); -} - -#endif // __BOOTLDR_STANDALONE__ diff --git a/dev/BootLoader/src/Root/EFI/STARTUP.NSH b/dev/BootLoader/src/Root/EFI/STARTUP.NSH deleted file mode 100644 index d29ba8fd..00000000 --- a/dev/BootLoader/src/Root/EFI/STARTUP.NSH +++ /dev/null @@ -1,2 +0,0 @@ -fs0: -BOOT\BOOTX64.EFI diff --git a/dev/BootLoader/src/Root/zka/fntkrnl.ttf b/dev/BootLoader/src/Root/zka/fntkrnl.ttf deleted file mode 100644 index e9a6dbb0..00000000 Binary files a/dev/BootLoader/src/Root/zka/fntkrnl.ttf and /dev/null differ diff --git a/dev/CompressKit/API.h b/dev/CompressKit/API.h deleted file mode 100644 index 47e568db..00000000 --- a/dev/CompressKit/API.h +++ /dev/null @@ -1,18 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#ifndef COMPRESSKIT_RLE_H -#define COMPRESSKIT_RLE_H - -#include -// #include - -namespace Kernel -{ - class ICompressProxy; -} // namespace Kernel - -#endif // !ifndef COMPRESSKIT_RLE_H diff --git a/dev/CompressKit/CKCompress.s b/dev/CompressKit/CKCompress.s deleted file mode 100644 index 2f12bf22..00000000 --- a/dev/CompressKit/CKCompress.s +++ /dev/null @@ -1,7 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024 Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -.text \ No newline at end of file diff --git a/dev/CompressKit/CKDecompress.s b/dev/CompressKit/CKDecompress.s deleted file mode 100644 index 2f12bf22..00000000 --- a/dev/CompressKit/CKDecompress.s +++ /dev/null @@ -1,7 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024 Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -.text \ No newline at end of file diff --git a/dev/HintKit/CompilerHint.h b/dev/HintKit/CompilerHint.h deleted file mode 100644 index 851b143f..00000000 --- a/dev/HintKit/CompilerHint.h +++ /dev/null @@ -1,25 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#ifndef HINTKIT_HINT_H -#define HINTKIT_HINT_H - -#ifdef __TK__ -#pragma compiler(hint_manifest) -#endif - -#define _Input -#define _Output - -#define _Optional - -#define _StrictCheckInput -#define _StrictCheckOutput - -#define _InOut -#define _StrictInOut - -#endif // ifndef HINTKIT_HINT_H diff --git a/dev/Hints/CompilerHint.h b/dev/Hints/CompilerHint.h new file mode 100644 index 00000000..851b143f --- /dev/null +++ b/dev/Hints/CompilerHint.h @@ -0,0 +1,25 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#ifndef HINTKIT_HINT_H +#define HINTKIT_HINT_H + +#ifdef __TK__ +#pragma compiler(hint_manifest) +#endif + +#define _Input +#define _Output + +#define _Optional + +#define _StrictCheckInput +#define _StrictCheckOutput + +#define _InOut +#define _StrictInOut + +#endif // ifndef HINTKIT_HINT_H diff --git a/dev/Kernel/FSKit/NeFS.h b/dev/Kernel/FSKit/NeFS.h index 5c62f0c2..9a804927 100644 --- a/dev/Kernel/FSKit/NeFS.h +++ b/dev/Kernel/FSKit/NeFS.h @@ -17,7 +17,7 @@ default. #pragma once #include -#include +#include #include #include #include @@ -376,7 +376,7 @@ namespace Kernel } private: - Char mStamp[255] = { "/System/FileSystemStamp.jrnl" }; + Char mStamp[255] = { "/Boot/Journal" kNeFSJournalExt }; }; diff --git a/dev/Kernel/FirmwareKit/EFI/API.h b/dev/Kernel/FirmwareKit/EFI/API.h index 218ca85a..24d21fd2 100644 --- a/dev/Kernel/FirmwareKit/EFI/API.h +++ b/dev/Kernel/FirmwareKit/EFI/API.h @@ -21,7 +21,7 @@ class BTextWriter; #define __BOOTKIT_NO_INCLUDE__ 1 #include -#include +#include #endif // ifdef __ZBAOSLDR__ inline EfiSystemTable* ST = nullptr; diff --git a/dev/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cc b/dev/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cc index 1a1d50a3..521ad2f4 100644 --- a/dev/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cc +++ b/dev/Kernel/HALKit/AMD64/HalACPIFactoryInterface.cc @@ -4,7 +4,7 @@ ------------------------------------------- */ -#include +#include #include #include #include diff --git a/dev/Kernel/HALKit/AMD64/HalAPICController.cc b/dev/Kernel/HALKit/AMD64/HalAPICController.cc index cebbc41b..b20bd524 100644 --- a/dev/Kernel/HALKit/AMD64/HalAPICController.cc +++ b/dev/Kernel/HALKit/AMD64/HalAPICController.cc @@ -4,7 +4,7 @@ ------------------------------------------- */ -#include +#include #include #define cIOAPICRegVal (4) diff --git a/dev/Kernel/HALKit/AMD64/HalCoreScheduler.cc b/dev/Kernel/HALKit/AMD64/HalCoreScheduler.cc index ac103d0d..3cdbd313 100644 --- a/dev/Kernel/HALKit/AMD64/HalCoreScheduler.cc +++ b/dev/Kernel/HALKit/AMD64/HalCoreScheduler.cc @@ -4,14 +4,14 @@ ------------------------------------------- */ -#include +#include #include #include #include #include #include #include -#include +#include #include // Needed for SMP. diff --git a/dev/Kernel/HALKit/AMD64/HalKernelMain.cc b/dev/Kernel/HALKit/AMD64/HalKernelMain.cc index 690ece70..b78397fe 100644 --- a/dev/Kernel/HALKit/AMD64/HalKernelMain.cc +++ b/dev/Kernel/HALKit/AMD64/HalKernelMain.cc @@ -8,10 +8,10 @@ #include #include #include -#include +#include #include #include -#include +#include EXTERN_C Kernel::VoidPtr kInterruptVectorTable[]; EXTERN_C Kernel::VoidPtr mp_user_switch_proc; diff --git a/dev/Kernel/HALKit/AMD64/HalTimerAMD64.cc b/dev/Kernel/HALKit/AMD64/HalTimerAMD64.cc index 9e42fe3f..82d491ad 100644 --- a/dev/Kernel/HALKit/AMD64/HalTimerAMD64.cc +++ b/dev/Kernel/HALKit/AMD64/HalTimerAMD64.cc @@ -11,7 +11,7 @@ ------------------------------------------- */ -#include +#include #include #include diff --git a/dev/Kernel/HALKit/AMD64/MBCI/HalMBCI.cc b/dev/Kernel/HALKit/AMD64/MBCI/HalMBCI.cc index b7948bcb..6680c40f 100644 --- a/dev/Kernel/HALKit/AMD64/MBCI/HalMBCI.cc +++ b/dev/Kernel/HALKit/AMD64/MBCI/HalMBCI.cc @@ -4,4 +4,4 @@ ------------------------------------------- */ -#include +#include diff --git a/dev/Kernel/HALKit/AMD64/Storage/AHCI-DMA.cc b/dev/Kernel/HALKit/AMD64/Storage/AHCI-DMA.cc index 7903af63..fd21bbca 100644 --- a/dev/Kernel/HALKit/AMD64/Storage/AHCI-DMA.cc +++ b/dev/Kernel/HALKit/AMD64/Storage/AHCI-DMA.cc @@ -18,8 +18,8 @@ #include #include -#include -#include +#include +#include #include #include #include diff --git a/dev/Kernel/HALKit/AMD64/Storage/ATA-DMA.cc b/dev/Kernel/HALKit/AMD64/Storage/ATA-DMA.cc index 6bb90156..ff51a398 100644 --- a/dev/Kernel/HALKit/AMD64/Storage/ATA-DMA.cc +++ b/dev/Kernel/HALKit/AMD64/Storage/ATA-DMA.cc @@ -17,7 +17,7 @@ #include -#include +#include #include using namespace Kernel; diff --git a/dev/Kernel/HALKit/AMD64/Storage/ATA-PIO.cc b/dev/Kernel/HALKit/AMD64/Storage/ATA-PIO.cc index 835035fb..3a3ba8eb 100644 --- a/dev/Kernel/HALKit/AMD64/Storage/ATA-PIO.cc +++ b/dev/Kernel/HALKit/AMD64/Storage/ATA-PIO.cc @@ -15,7 +15,7 @@ * */ -#include +#include #include #ifdef __ATA_PIO__ diff --git a/dev/Kernel/HALKit/ARM64/APM/APM.cc b/dev/Kernel/HALKit/ARM64/APM/APM.cc index 80cd4b8d..55cd26cc 100644 --- a/dev/Kernel/HALKit/ARM64/APM/APM.cc +++ b/dev/Kernel/HALKit/ARM64/APM/APM.cc @@ -4,7 +4,7 @@ ------------------------------------------- */ -#include +#include #include using namespace Kernel; diff --git a/dev/Kernel/HALKit/ARM64/HalACPIFactoryInterface.cc b/dev/Kernel/HALKit/ARM64/HalACPIFactoryInterface.cc index f8c8ffd8..94b10c09 100644 --- a/dev/Kernel/HALKit/ARM64/HalACPIFactoryInterface.cc +++ b/dev/Kernel/HALKit/ARM64/HalACPIFactoryInterface.cc @@ -4,11 +4,11 @@ ------------------------------------------- */ -#include +#include #include #include #include -#include +#include namespace Kernel { diff --git a/dev/Kernel/HALKit/ARM64/HalCoreMPScheduler.cc b/dev/Kernel/HALKit/ARM64/HalCoreMPScheduler.cc index 75f8283c..eab88384 100644 --- a/dev/Kernel/HALKit/ARM64/HalCoreMPScheduler.cc +++ b/dev/Kernel/HALKit/ARM64/HalCoreMPScheduler.cc @@ -4,7 +4,7 @@ ------------------------------------------- */ -#include +#include #include using namespace Kernel; diff --git a/dev/Kernel/HALKit/ARM64/HalKernelMain.cc b/dev/Kernel/HALKit/ARM64/HalKernelMain.cc index 4a81fa64..03532270 100644 --- a/dev/Kernel/HALKit/ARM64/HalKernelMain.cc +++ b/dev/Kernel/HALKit/ARM64/HalKernelMain.cc @@ -5,7 +5,7 @@ ------------------------------------------- */ #include -#include +#include #include #include #include @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include diff --git a/dev/Kernel/KernelKit/FileMgr.h b/dev/Kernel/KernelKit/FileMgr.h index 10aef681..c448519e 100644 --- a/dev/Kernel/KernelKit/FileMgr.h +++ b/dev/Kernel/KernelKit/FileMgr.h @@ -29,7 +29,7 @@ #endif // __FSKIT_INCLUDES_HPFS__ #include -#include +#include #include #include #include diff --git a/dev/Kernel/KernelKit/Heap.h b/dev/Kernel/KernelKit/Heap.h index 90ed6266..834b8f17 100644 --- a/dev/Kernel/KernelKit/Heap.h +++ b/dev/Kernel/KernelKit/Heap.h @@ -13,7 +13,7 @@ #include #include -#include +#include namespace Kernel { diff --git a/dev/Kernel/KernelKit/LoaderInterface.h b/dev/Kernel/KernelKit/LoaderInterface.h index b9a624bb..37bb61d6 100644 --- a/dev/Kernel/KernelKit/LoaderInterface.h +++ b/dev/Kernel/KernelKit/LoaderInterface.h @@ -7,7 +7,7 @@ #pragma once #include -#include +#include #include #include diff --git a/dev/Kernel/NetworkKit/IPC.h b/dev/Kernel/NetworkKit/IPC.h index 0e50c266..4bc293c4 100644 --- a/dev/Kernel/NetworkKit/IPC.h +++ b/dev/Kernel/NetworkKit/IPC.h @@ -12,8 +12,7 @@ #include #include -#include -#include +#include /// @file IPC.h /// @brief IPC comm. protocol. diff --git a/dev/Kernel/NewKit/SwapMgr.h b/dev/Kernel/NewKit/SwapMgr.h index 822a1565..42df9ca6 100644 --- a/dev/Kernel/NewKit/SwapMgr.h +++ b/dev/Kernel/NewKit/SwapMgr.h @@ -12,10 +12,20 @@ #define kSwapMgrBlockMaxSize mib_cast(16) #define KSwapMgrBlockMagic "SWEP " +#define kSwapMgrPageFile "/System/pagefile.sys" + /// @file SwapMgr.h -/// @brief Virtual memory swap API. +/// @brief Virtual memory swap manager. namespace Kernel { - class UserSwapProcess; + class SwapMgrDisk; + + class SwapMgrDisk + { + static BOOL DumpToDisk(const Char* fork_name, SizeT fork_name_len = 0) + { + return YES; + } + } } \ No newline at end of file diff --git a/dev/Kernel/StorageKit/SCSI.h b/dev/Kernel/StorageKit/SCSI.h index 0cbb780a..e56569c8 100644 --- a/dev/Kernel/StorageKit/SCSI.h +++ b/dev/Kernel/StorageKit/SCSI.h @@ -6,6 +6,6 @@ #pragma once -#include +#include extern const scsi_packet_type<12> kCDRomPacketTemplate; diff --git a/dev/Kernel/src/ACPIFactoryInterface.cc b/dev/Kernel/src/ACPIFactoryInterface.cc index 83890220..716f691b 100644 --- a/dev/Kernel/src/ACPIFactoryInterface.cc +++ b/dev/Kernel/src/ACPIFactoryInterface.cc @@ -4,7 +4,7 @@ ------------------------------------------- */ -#include +#include #include #include #include diff --git a/dev/Kernel/src/DriveMgr.cc b/dev/Kernel/src/DriveMgr.cc index 036997cb..cb83bf37 100644 --- a/dev/Kernel/src/DriveMgr.cc +++ b/dev/Kernel/src/DriveMgr.cc @@ -8,9 +8,9 @@ #include #include #include -#include -#include -#include +#include +#include +#include /***********************************************************************************/ /// @file DriveMgr.cc diff --git a/dev/Kernel/src/FS/HPFS.cc b/dev/Kernel/src/FS/HPFS.cc index 98c41f23..3093d6f6 100644 --- a/dev/Kernel/src/FS/HPFS.cc +++ b/dev/Kernel/src/FS/HPFS.cc @@ -6,9 +6,9 @@ #ifdef __FSKIT_INCLUDES_HPFS__ -#include -#include -#include +#include +#include +#include #include #include #include diff --git a/dev/Kernel/src/FS/NeFS.cc b/dev/Kernel/src/FS/NeFS.cc index 650d42c3..5484efc7 100644 --- a/dev/Kernel/src/FS/NeFS.cc +++ b/dev/Kernel/src/FS/NeFS.cc @@ -9,9 +9,9 @@ #include #include -#include -#include -#include +#include +#include +#include #include #include #include diff --git a/dev/Kernel/src/KernelPanic.cc b/dev/Kernel/src/KernelPanic.cc index 0fd2ec64..9b200336 100644 --- a/dev/Kernel/src/KernelPanic.cc +++ b/dev/Kernel/src/KernelPanic.cc @@ -11,8 +11,8 @@ #include #include #include -#include -#include +#include +#include #define kWebsiteURL "https://el-mahrouss-logic.com/products/help/" diff --git a/dev/LibSCI/CompilerHint.h b/dev/LibSCI/CompilerHint.h new file mode 100644 index 00000000..3365bac2 --- /dev/null +++ b/dev/LibSCI/CompilerHint.h @@ -0,0 +1,25 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#ifndef SCI_HINT_H +#define SCI_HINT_H + +#ifdef __TK__ +#pragma compiler(hint_manifest) +#endif + +#define _Input +#define _Output + +#define _Optional + +#define _StrictCheckInput +#define _StrictCheckOutput + +#define _InOut +#define _StrictInOut + +#endif // ifndef SCI_HINT_H diff --git a/dev/LibSCI/GPU.h b/dev/LibSCI/GPU.h new file mode 100644 index 00000000..976ad2e5 --- /dev/null +++ b/dev/LibSCI/GPU.h @@ -0,0 +1,50 @@ +/* ------------------------------------------- + +Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +File: GPU.h +Purpose: GFX System Calls. + +------------------------------------------- */ + +#ifndef SCIKIT_GPU_H +#define SCIKIT_GPU_H + +#include + +// ------------------------------------------------------------------------------------------ // +// GPU API. +// ------------------------------------------------------------------------------------------ // + +// ------------------------------------------------------------------------------------------ // +// @brief Command buffer structure type. +// ------------------------------------------------------------------------------------------ // +struct GPU_CMD_BUFFER final +{ + SizeT X, Y, Z; + VoidPtr FrameData; + SizeT FrameDataSz; + SizeT BackBufferLayer; + Bool IsGPGPUData; + Bool BackBufferFirst; + + Bool isGPGPUData() + { + return !this->BackBufferFirst && this->IsGPGPUData; + } + + Bool isValid() + { + return this->FrameData && this->FrameDataSz > 0; + } +}; + +typedef VoidPtr GPUObject; + +IMPORT_C GPUObject GPUNewFromDeviceName(_Input const Char* device_name); + +IMPORT_C SInt32 GPUDisposeDevice(GPUObject gpu_handle, Bool cancel_all, Bool flush_all); + +IMPORT_C SInt32 GPUSendCmdBufferListWithCnt(GPU_CMD_BUFFER** cmd_list, SizeT cmd_list_cnt); + +#endif // ifndef SCIKIT_GPU_H diff --git a/dev/LibSCI/LPC.h b/dev/LibSCI/LPC.h new file mode 100644 index 00000000..717c32ec --- /dev/null +++ b/dev/LibSCI/LPC.h @@ -0,0 +1,54 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include + +/// @file LPC.h +/// @brief Local Process Code type and values. + +#define err_local_ok() (kLastError == kErrorSuccess) +#define err_local_fail() (kLastError != kErrorSuccess) +#define err_local_get() (kLastError) + +typedef SInt32 ErrObject; + +inline constexpr ErrObject kErrorSuccess = 0; +inline constexpr ErrObject kErrorExecutable = 33; +inline constexpr ErrObject kErrorExecutableLib = 34; +inline constexpr ErrObject kErrorFileNotFound = 35; +inline constexpr ErrObject kErrorDirectoryNotFound = 36; +inline constexpr ErrObject kErrorDiskReadOnly = 37; +inline constexpr ErrObject kErrorDiskIsFull = 38; +inline constexpr ErrObject kErrorProcessFault = 39; +inline constexpr ErrObject kErrorSocketHangUp = 40; +inline constexpr ErrObject kErrorThreadLocalStorage = 41; +inline constexpr ErrObject kErrorMath = 42; +inline constexpr ErrObject kErrorNoNetwork = 43; +inline constexpr ErrObject kErrorHeapOutOfMemory = 44; +inline constexpr ErrObject kErrorNoSuchDisk = 45; +inline constexpr ErrObject kErrorFileExists = 46; +inline constexpr ErrObject kErrorFormatFailed = 47; +inline constexpr ErrObject kErrorNetworkTimeout = 48; +inline constexpr ErrObject kErrorInternal = 49; +inline constexpr ErrObject kErrorForkAlreadyExists = 50; +inline constexpr ErrObject kErrorOutOfTeamSlot = 51; +inline constexpr ErrObject kErrorHeapNotPresent = 52; +inline constexpr ErrObject kErrorNoEntrypoint = 53; +inline constexpr ErrObject kErrorDiskIsCorrupted = 54; +inline constexpr ErrObject kErrorDisk = 55; +inline constexpr ErrObject kErrorInvalidData = 56; +inline constexpr ErrObject kErrorAsync = 57; +inline constexpr ErrObject kErrorNonBlocking = 58; +inline constexpr ErrObject kErrorIPC = 59; +inline constexpr ErrObject kErrorSign = 60; +inline constexpr ErrObject kErrorInvalidCreds = 61; +inline constexpr ErrObject kErrorCDTrayBroken = 62; +inline constexpr ErrObject kErrorUnimplemented = 0; + +/// @brief The last error reported by the system to the process. +IMPORT_C ErrObject kLastError; diff --git a/dev/LibSCI/Macros.h b/dev/LibSCI/Macros.h new file mode 100644 index 00000000..5443252c --- /dev/null +++ b/dev/LibSCI/Macros.h @@ -0,0 +1,56 @@ +/* ------------------------------------------- + +Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +File: Macros.h +Purpose: LibSCI Macros header. + +------------------------------------------- */ + +#pragma once + +/***********************************************************************************/ +/// @file LibSCI/Macros.h +/// @brief Macros and core types. +/***********************************************************************************/ + +#include + +#define ATTRIBUTE(X) __attribute__((X)) +#define IMPORT_CXX extern "C++" +#define IMPORT_C extern "C" + +#define DEPRECATED ATTRIBUTE(deprecated) + +typedef bool Bool; +typedef void Void; + +typedef __UINT64_TYPE__ UInt64; +typedef __UINT32_TYPE__ UInt32; +typedef __UINT16_TYPE__ UInt16; +typedef __UINT8_TYPE__ UInt8; + +typedef __SIZE_TYPE__ SizeT; + +typedef __INT64_TYPE__ SInt64; +typedef __INT32_TYPE__ SInt32; +typedef __INT16_TYPE__ SInt16; +typedef __INT8_TYPE__ SInt8; + +typedef void* VoidPtr; +typedef __UINTPTR_TYPE__ UIntPtr; +typedef char Char; + +typedef VoidPtr SCIObject; + +typedef SCIObject IOObject; +typedef IOObject FSObject; +typedef SCIObject DLLObject; +typedef SCIObject ThreadObject; +typedef SCIObject SocketObject; + +#ifdef SYSCALL_DECL +#undef SYSCALL_DECL +#endif // SYSCALL_DECL + +#define SYSCALL_DECL(NAME, ...) IMPORT_C VoidPtr NAME(__VA_ARGS__); diff --git a/dev/LibSCI/SCI.h b/dev/LibSCI/SCI.h new file mode 100644 index 00000000..2eb6ed80 --- /dev/null +++ b/dev/LibSCI/SCI.h @@ -0,0 +1,264 @@ +/* ------------------------------------------- + +Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +File: LibSCI.h +Purpose: System Calls. + +------------------------------------------- */ + +#ifndef SCIKIT_FOUNDATION_H +#define SCIKIT_FOUNDATION_H + +#include + +// ------------------------------------------------------------------------------------------ // +/// @brief Dynamic Loader API. +// ------------------------------------------------------------------------------------------ // + +/// @brief Get function which is part of the DLL. +/// @param symbol the symbol to look for +/// @param dll_handle the DLL handle. +/// @return the proc pointer. +IMPORT_C SCIObject LdrGetDLLSymbolFromHandle(_Input const Char* symbol, _Input SCIObject dll_handle); + +/// @brief Open DLL handle. +/// @param path +/// @param drv +/// @return +IMPORT_C SCIObject LdrOpenDLLHandle(_Input const Char* path, _Input const Char* drive_letter); + +/// @brief Close DLL handle +/// @param dll_handle +/// @return +IMPORT_C Void LdrCloseDLLHandle(_Input SCIObject* dll_handle); + +// ------------------------------------------------------------------------------------------ // +// File API. +// ------------------------------------------------------------------------------------------ // + +/// @brief Opens a file from a drive. +/// @param fs_path the filesystem path. +/// @param drive_letter drive name, use NULL to use default drive location. +/// @return the file descriptor of the file. +IMPORT_C SCIObject IoOpenFile(const Char* fs_path, const Char* drive_letter); + +/// @brief Closes a file and flushes its content. +/// @param file_desc the file descriptor. +/// @return Function doesn't return a type. +IMPORT_C Void IoCloseFile(_Input SCIObject file_desc); + +/// @brief Write data to a file. +/// @param file_desc the file descriptor. +/// @param out_data the data to write. +/// @param sz_data the size of the data to write. +/// @return the number of bytes written. +IMPORT_C UInt32 IoWriteFile(_Input SCIObject file_desc, _Output VoidPtr out_data, SizeT sz_data); + +/// @brief Read data from a file. +/// @param file_desc the file descriptor. +/// @param out_data the data to read. +/// @param sz_data the size of the data to read. +IMPORT_C UInt32 IoReadFile(_Input SCIObject file_desc, _Output VoidPtr* out_data, SizeT sz_data); + +/// @brief Rewind the file pointer to the beginning of the file. +/// @param file_desc the file descriptor. +/// @return the number of bytes read. +IMPORT_C UInt64 IoRewindFile(_Input SCIObject file_desc); + +/// @brief Tell the current position of the file pointer. +/// @param file_desc the file descriptor. +/// @return the current position of the file pointer. +IMPORT_C UInt64 IoTellFile(_Input SCIObject file_desc); + +/// @brief Seek file offset from file descriptor. +IMPORT_C UInt64 IoSeekFile(_Input SCIObject file_desc, UInt64 file_offset); + +// ------------------------------------------------------------------------ +// Process API. +// ------------------------------------------------------------------------ + +/// @brief Spawns a Thread Information Block and Global Information Block inside the current process. +/// @param void. +/// @return > 0 error ocurred or already present, = 0 success. +IMPORT_C UInt32 RtlSpawnIB(Void); + +/// @brief Spawns a process with a unique pid (stored as UIntPtr). +/// @param process_path process filesystem path. +/// @return > 0 process was created. +IMPORT_C UIntPtr RtlSpawnProcess(const Char* process_path, SizeT argc, Char** argv, Char** envp, SizeT envp_len); + +/// @brief Exits a process with an exit_code. +/// @return if it has succeeded true, otherwise false. +IMPORT_C Bool RtlExitProcess(UIntPtr handle, UIntPtr exit_code); + +/// @brief Get current PID of process. +/// @return Current process ID. +IMPORT_C UIntPtr RtlCurrentPID(Void); + +// ------------------------------------------------------------------------ +// Memory Manager API. +// ------------------------------------------------------------------------ + +/// @brief Creates a new heap from the process's address space. +/// @param len the length of it. +/// @param flags the flags of it. +/// @return heap pointer. +IMPORT_C VoidPtr MmCreateHeap(_Input SizeT len, _Input UInt32 flags); + +/// @brief Destroys the pointer +/// @param heap the heap itself. +/// @return void. +IMPORT_C Void MmDestroyHeap(_Input VoidPtr heap); + +/// @brief Change protection flags of a memory region. +IMPORT_C Void MmSetHeapFlags(_Input VoidPtr heap, _Input UInt32 flags); + +/// @brief Change protection flags of a memory region. +IMPORT_C UInt32 MmGetHeapFlags(_Input VoidPtr heap); + +/// @brief Fill memory region with CRC32. +IMPORT_C UInt32 MmFillCRC32Heap(_Input VoidPtr heap); + +/// @brief Copy memory region. +IMPORT_C VoidPtr MmCopyMemory(_Input VoidPtr dest, _Input VoidPtr src, _Input SizeT len); + +/// @brief Fill memory region. +IMPORT_C VoidPtr MmFillMemory(_Input VoidPtr dest, _Input SizeT len, _Input UInt8 value); + +// ------------------------------------------------------------------------ +// Error API. +// ------------------------------------------------------------------------ + +IMPORT_C SInt32 ErrGetLastError(Void); + +// ------------------------------------------------------------------------ +// Threading API. +// ------------------------------------------------------------------------ + +/// @brief Exit the current thread. +/// @param exit_code the exit code. +IMPORT_C Void ThrExitCurrentThread(_Input SInt32 exit_code); + +/// @brief Exit the main thread. +/// @param exit_code the exit code. +IMPORT_C Void ThrExitMainThread(_Input SInt32 exit_code); + +/// @brief Exit a thread. +/// @param thread the thread to exit. +/// @param exit_code the exit code. +IMPORT_C Void ThrExitThread(_Input ThreadObject thread, _Input SInt32 exit_code); + +/// @brief Thread procedure function type. +typedef Void (*thread_proc_kind)(int argc, char** argv); + +/// @brief Creates a thread. +/// @param procedure the thread procedure. +/// @param argument_count number of arguments inside that thread. +/// @param flags Thread flags. +/// @return the thread object. +IMPORT_C ThreadObject ThrCreateThread(thread_proc_kind procedure, SInt32 argument_count, SInt32 flags); + +/// @brief Yields the current thread. +/// @param thread the thread to yield. +IMPORT_C Void ThrYieldThread(ThreadObject thrd); + +/// @brief Joins a thread. +/// @param thread the thread to join. +IMPORT_C Void ThrJoinThread(ThreadObject thrd); + +/// @brief Detach a thread. +/// @param thread the thread to detach. +IMPORT_C Void ThrDetachThread(ThreadObject thrd); + +// ------------------------------------------------------------------------ +// Drive Management API. +// ------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------ // +/// @brief Get the default drive letter. +/// @param void. +/// @return the drive letter. +// ------------------------------------------------------------------------------------------ // +IMPORT_C Char* DrvGetDefaultDriveLetter(Void); + +// ------------------------------------------------------------------------------------------ // +/// @brief Get the drive letter from a path. +/// @param path the path. +/// @return the drive letter. +// ------------------------------------------------------------------------------------------ // +IMPORT_C Char* DrvGetDriveLetterFromPath(_Input const Char* path); + +// ------------------------------------------------------------------------------------------ // +/// @brief Get a mounted drive from a letter. +/// @param letter the letter (A..Z). +/// @return the drive object. +// ------------------------------------------------------------------------------------------ // +IMPORT_C SCIObject DrvGetMountedDrive(_Input const Char letter); + +// ------------------------------------------------------------------------------------------ // +/// @brief Mount a drive. +/// @param path the path to mount. +/// @param letter the letter to mount. +// ------------------------------------------------------------------------------------------ // +IMPORT_C Void DrvMountDrive(_Input const Char* path, _Input const Char* letter); + +// ------------------------------------------------------------------------------------------ // +/// @brief Unmount a drive. +/// @param letter the letter to unmount. +// ------------------------------------------------------------------------------------------ // +IMPORT_C Void DrvUnmountDrive(_Input const Char letter); + +// ------------------------------------------------------------------------ +// Event handling API, use to listen to OS specific events. +// ------------------------------------------------------------------------ + +// ------------------------------------------------------------------------------------------ // +/// @brief Add an event listener. +/// @param event_name the event name. +/// @param listener the listener to add. +/// @return the event listener. +// ------------------------------------------------------------------------------------------ // + +IMPORT_C Void EvtAddListener(_Input const Char* event_name, _Input SCIObject listener); + +// ------------------------------------------------------------------------------------------ // +/// @brief Remove an event listener. +/// @param event_name the event name. +/// @param listener the listener to remove. +/// @return the event listener. +// ------------------------------------------------------------------------------------------ // + +IMPORT_C Void EvtRemoveListener(_Input const Char* event_name, _Input SCIObject listener); + +// ------------------------------------------------------------------------------------------ // +/// @brief Dispatch an event. +/// @param event_name the event name. +/// @param event_data the event data. +/// @return the event data. +// ------------------------------------------------------------------------------------------ // + +IMPORT_C VoidPtr EvtDispatchEvent(_Input const Char* event_name, _Input VoidPtr event_data); + +// ------------------------------------------------------------------------------------------ // +// Power API. +// ------------------------------------------------------------------------------------------ // + +IMPORT_C Void PwrShutdownMachine(const Char* _Input msg, _Input SInt32 code); + +IMPORT_C Void PwrRebootMachine(const Char* _Input msg, _Input SInt32 code); + +IMPORT_C Void PwrSleepMachine(const Char* _Input msg, _Input SInt32 code); + +IMPORT_C SInt32 PwrGetCode(_Output SInt32& code); + +// ------------------------------------------------------------------------------------------ // +// CD-ROM API. +// ------------------------------------------------------------------------------------------ // + +IMPORT_C SInt32 CdEjectDrive(_Input const Char drv_letter); + +IMPORT_C SInt32 CdOpenTray(Void); +IMPORT_C SInt32 CdCloseTray(Void); + +#endif // ifndef SCIKIT_FOUNDATION_H diff --git a/dev/LibSCI/SysCalls.h b/dev/LibSCI/SysCalls.h new file mode 100644 index 00000000..10556000 --- /dev/null +++ b/dev/LibSCI/SysCalls.h @@ -0,0 +1,20 @@ +/* ------------------------------------------- + +Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +File: Macros.h +Purpose: LibSCI Macros header. + +------------------------------------------- */ + +#pragma once + +#include + +/// @brief In this file we define filesystem calls. + +SYSCALL_DECL(FCloseFile, const SCIObject handle); +SYSCALL_DECL(FOpenFile, const Char* name, const Char* rest); +SYSCALL_DECL(FSeekFile, const SCIObject handle, const SizeT pos); +SYSCALL_DECL(FReadFile, const SCIObject handle, const Char* out_buf, const SizeT out_buf_size); +SYSCALL_DECL(FWriteFile, const SCIObject handle, const Char* out_buf, const SizeT out_buf_size); diff --git a/dev/LibSCI/doc/SCIKit.drawio b/dev/LibSCI/doc/SCIKit.drawio new file mode 100644 index 00000000..132eacc1 --- /dev/null +++ b/dev/LibSCI/doc/SCIKit.drawio @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/dev/LibSCI/sci.json b/dev/LibSCI/sci.json new file mode 100644 index 00000000..34f4fb0a --- /dev/null +++ b/dev/LibSCI/sci.json @@ -0,0 +1,20 @@ +{ + "compiler_path": "x86_64-w64-mingw32-g++", + "compiler_std": "c++20", + "headers_path": ["../", "./"], + "sources_path": ["src/*.cc", "src/*.o"], + "output_name": "LibSCI.dylib", + "compiler_flags": [ + "-fPIC", + "-ffreestanding", + "-shared", + "-fno-rtti", + "-fno-exceptions", + "-Wl,--subsystem=17" + ], + "cpp_macros": [ + "kSCIVersion=0x0100", + "kSCIVersionHighest=0x0100", + "kSCIVersionLowest=0x0100" + ] +} diff --git a/dev/LibSCI/src/GPU.cc b/dev/LibSCI/src/GPU.cc new file mode 100644 index 00000000..46e090e6 --- /dev/null +++ b/dev/LibSCI/src/GPU.cc @@ -0,0 +1,10 @@ +/* ------------------------------------------- + +Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +File: GPU.cc +Purpose: GPU Interface. + +------------------------------------------- */ + +#include diff --git a/dev/LibSCI/src/LPC.cc b/dev/LibSCI/src/LPC.cc new file mode 100644 index 00000000..47f47ce6 --- /dev/null +++ b/dev/LibSCI/src/LPC.cc @@ -0,0 +1,10 @@ +/* ------------------------------------------- + +Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +File: LPC.cc +Purpose: Local Procedure Codes. + +------------------------------------------- */ + +#include diff --git a/dev/LibSCI/src/LibSCI+IO.asm b/dev/LibSCI/src/LibSCI+IO.asm new file mode 100644 index 00000000..82ac82b7 --- /dev/null +++ b/dev/LibSCI/src/LibSCI+IO.asm @@ -0,0 +1,50 @@ +;; /* +;; * ======================================================== +;; * +;; * LibSCI +;; * Copyright (C) 2024, Theater Quality Inc, all rights reserved., all rights reserved. +;; * +;; * ======================================================== +;; */ + +[bits 64] + +section .text + +global sci_syscall_arg_1 +global sci_syscall_arg_2 +global sci_syscall_arg_3 +global sci_syscall_arg_4 + +sci_syscall_arg_1: + mov r8, rcx + syscall + ret + +sci_syscall_arg_2: + mov r8, rcx + mov r9, rdx + syscall + ret + +sci_syscall_arg_3: + mov rbx, r8 + + mov r8, rcx + mov r9, rdx + mov r10, rbx + + syscall + ret + +sci_syscall_arg_4: + mov rbx, r8 + mov rax, r9 + + mov r8, rcx + mov r9, rdx + mov r10, rbx + mov r11, rax + + syscall + ret diff --git a/dev/LibSCI/src/Makefile b/dev/LibSCI/src/Makefile new file mode 100644 index 00000000..d76fa5ac --- /dev/null +++ b/dev/LibSCI/src/Makefile @@ -0,0 +1,16 @@ +################################################## +# (c) Theater Quality Inc, all rights reserved. +# This is the bootloader makefile. +################################################## + +ASM=nasm +FLAGS=-f win64 + +.PHONY: error +error: + @echo "==> Invalid rule." + @echo "==> Use sci_asm_io_ instead." + +.PHONY: sci_asm_io_x64 +sci_asm_io_x64: + $(ASM) $(FLAGS) LibSCI+IO.asm -o LibSCI+IO.o diff --git a/dev/LibSCI/src/SCI.cc b/dev/LibSCI/src/SCI.cc new file mode 100644 index 00000000..ec6cb937 --- /dev/null +++ b/dev/LibSCI/src/SCI.cc @@ -0,0 +1,45 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#include + +/// @file LibSCI.cc +/// @brief Source file for the memory functions of the LibSCI. + +/// @brief Copy memory region. +IMPORT_C VoidPtr MmCopyMemory(_Input VoidPtr dest, _Input VoidPtr src, _Input SizeT len) +{ + if (!len || + !dest || + !src) + { + return nullptr; + } + + for (SizeT i = 0; i < len; i++) + { + ((Char*)dest)[i] = ((Char*)src)[i]; + } + + return dest; +} + +/// @brief Fill memory region with **value**. +IMPORT_C VoidPtr MmFillMemory(_Input VoidPtr dest, _Input SizeT len, _Input UInt8 value) +{ + if (!len || + !dest) + { + return nullptr; + } + + for (SizeT i = 0; i < len; i++) + { + ((Char*)dest)[i] = value; + } + + return dest; +} diff --git a/dev/Mod/ACPI/ACPI.h b/dev/Mod/ACPI/ACPI.h new file mode 100644 index 00000000..d21c475e --- /dev/null +++ b/dev/Mod/ACPI/ACPI.h @@ -0,0 +1,88 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#ifndef __ACPI__ +#define __ACPI__ + +/** + https://uefi.org/specs/ACPI/6.5/05_ACPI_Software_Programming_Model.html +*/ + +#include + +namespace Kernel +{ + class PACKED SDT + { + public: + Char Signature[4]; + UInt32 Length; + UInt8 Revision; + Char Checksum; + Char OemId[6]; + Char OemTableId[8]; + UInt32 OemRev; + UInt32 CreatorID; + UInt32 CreatorRevision; + }; + + class PACKED RSDP : public SDT + { + public: + UInt32 RsdtAddress; + UIntPtr XsdtAddress; + UInt8 ExtendedChecksum; + UInt8 Reserved0[3]; + }; + + class PACKED ConfigHeader + { + public: + UInt64 BaseAddress; + UInt16 PciSegGroup; + UInt8 StartBus; + UInt8 EndBus; + UInt32 Reserved; + }; + + enum ACPI_ADDRESS_SPACE_KIND : UInt8 + { + eSystemMemory = 0, + eSystemIO = 1, + ePci = 2, + eController = 3, + eSmBus = 4, + eCount = 5, + eInvalid = 0xFF, + }; + + class PACKED ACPI_ADDRESS final + { + public: + UInt8 AddressSpaceId; + UInt8 RegisterBitWidth; + UInt8 RegisterBitOffset; + UInt8 Reserved; + UIntPtr Address; + }; + + class PACKED RSDT final + { + public: + Char Signature[4]; + UInt32 Length; + UInt8 Revision; + Char Checksum; + Char OemId[6]; + Char OemTableId[8]; + UInt32 OemRev; + UInt32 CreatorID; + UInt32 CreatorRevision; + UInt32 AddressArr[]; + }; +} // namespace Kernel + +#endif // !__ACPI__ diff --git a/dev/Mod/ACPI/ACPIFactoryInterface.h b/dev/Mod/ACPI/ACPIFactoryInterface.h new file mode 100644 index 00000000..0a28bd95 --- /dev/null +++ b/dev/Mod/ACPI/ACPIFactoryInterface.h @@ -0,0 +1,60 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#ifndef __MOD_ACPI_H__ +#define __MOD_ACPI_H__ + +#include +#include +#include +#include +#include + +namespace Kernel +{ + class ACPIFactoryInterface; + + typedef ACPIFactoryInterface PowerFactoryInterface; + + class ACPIFactoryInterface final + { + public: + explicit ACPIFactoryInterface(voidPtr rsp_ptr); + ~ACPIFactoryInterface() = default; + + ACPIFactoryInterface& operator=(const ACPIFactoryInterface&) = default; + ACPIFactoryInterface(const ACPIFactoryInterface&) = default; + + public: + Void Shutdown(); // shutdown + Void Reboot(); // soft-reboot + + public: + /// @brief Descriptor find factory. + /// @param signature The signature of the descriptor table (MADT, ACPI...) + /// @return the blob inside an ErrorOr object. + ErrorOr Find(const Char* signature); + + /// @brief Checksum factory. + /// @param checksum the data to checksum + /// @param len it's size + /// @return if it succeed + bool Checksum(const Char* checksum, SSizeT len); // watch for collides! + + public: + ErrorOr operator[](const Char* signature) + { + return this->Find(signature); + } + + private: + VoidPtr fRsdp; // pointer to root descriptor. + SSizeT fEntries; // number of entries, -1 tells that no invalid entries were + // found. + }; +} // namespace Kernel + +#endif // !__MOD_ACPI_H__ diff --git a/dev/Mod/AHCI/.gitkeep b/dev/Mod/AHCI/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/dev/Mod/AHCI/AHCI.h b/dev/Mod/AHCI/AHCI.h new file mode 100644 index 00000000..9ca926e2 --- /dev/null +++ b/dev/Mod/AHCI/AHCI.h @@ -0,0 +1,364 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + + File: AHCI.h + Purpose: AHCI protocol defines. + + Revision History: + + 03/02/24: Added file (amlel) + +------------------------------------------- */ + +#pragma once + +#include +#include + +/// @note Forward declarations of structs. + +#define kAHCISectorSize (512U) + +struct HbaPort; +struct FisData; +struct FisRegD2H; +struct FisRegH2D; + +/// @brief Frame information type. +enum +{ + kFISTypeRegH2D = 0x27, // Register FIS - host to device + kFISTypeRegD2H = 0x34, // Register FIS - device to host + kFISTypeDMAAct = 0x39, // DMA activate FIS - device to host + kFISTypeDMASetup = 0x41, // DMA setup FIS - bidirectional + kFISTypeData = 0x46, // Data FIS - bidirectional + kFISTypeBIST = 0x58, // BIST activate FIS - bidirectional + kFISTypePIOSetup = 0x5F, // PIO setup FIS - device to host + kFISTypeDevBits = 0xA1, // Set device bits FIS - device to host +}; + +enum +{ + kAHCICmdIdentify = 0xEC, + kAHCICmdReadDma = 0xC8, + kAHCICmdReadDmaEx = 0x25, + kAHCICmdWriteDma = 0xCA, + kAHCICmdWriteDmaEx = 0x35 +}; + +typedef struct FisRegH2D final +{ + // DWORD 0 + Kernel::UInt8 FisType; // FIS_TYPE_REG_H2D + + Kernel::UInt8 PortMul : 4; // Port multiplier + Kernel::UInt8 Reserved0 : 3; // Reserved + Kernel::UInt8 CmdOrCtrl : 1; // 1: Command, 0: Control + + Kernel::UInt8 Command; // Command register + Kernel::UInt8 Featurel; // Feature register, 7:0 + + // DWORD 1 + Kernel::UInt8 Lba0; // LBA low register, 7:0 + Kernel::UInt8 Lba1; // LBA mid register, 15:8 + Kernel::UInt8 Lba2; // LBA high register, 23:16 + Kernel::UInt8 Device; // Device register + + // DWORD 2 + Kernel::UInt8 Lba3; // LBA register, 31:24 + Kernel::UInt8 Lba4; // LBA register, 39:32 + Kernel::UInt8 Lba5; // LBA register, 47:40 + Kernel::UInt8 FeatureHigh; // Feature register, 15:8 + + // DWORD 3 + Kernel::UInt8 CountLow; // Count register, 7:0 + Kernel::UInt8 CountHigh; // Count register, 15:8 + Kernel::UInt8 Icc; // Isochronous command completion + Kernel::UInt8 Control; // Control register + + // DWORD 4 + Kernel::UInt8 Reserved1[4]; // Reserved +} FisRegH2D; + +typedef struct FisRegD2H final +{ + // DWORD 0 + Kernel::UInt8 FisType; // FIS_TYPE_REG_D2H + + Kernel::UInt8 PortMul : 4; // Port multiplier + Kernel::UInt8 Reserved0 : 2; // Reserved + Kernel::UInt8 InterruptBit : 1; // Interrupt bit + Kernel::UInt8 Reserved1 : 1; // Reserved + + Kernel::UInt8 Status; // Status register + Kernel::UInt8 Rrror; // Error register + + // DWORD 1 + Kernel::UInt8 Lba0; // LBA low register, 7:0 + Kernel::UInt8 Lba1; // LBA mid register, 15:8 + Kernel::UInt8 Lba2; // LBA high register, 23:16 + Kernel::UInt8 Device; // Device register + + // DWORD 2 + Kernel::UInt8 Lba3; // LBA register, 31:24 + Kernel::UInt8 Lba4; // LBA register, 39:32 + Kernel::UInt8 Lba5; // LBA register, 47:40 + Kernel::UInt8 Rsv2; // Reserved + + // DWORD 3 + Kernel::UInt8 CountLow; // Count register, 7:0 + Kernel::UInt8 CountHigh; // Count register, 15:8 + Kernel::UInt8 Rsv3[2]; // Reserved + + // DWORD 4 + Kernel::UInt8 Rsv4[4]; // Reserved +} FisRegD2H; + +typedef struct FisData final +{ + // DWORD 0 + Kernel::UInt8 FisType; // FIS_TYPE_DATA + + Kernel::UInt8 PortMul : 4; // Port multiplier + Kernel::UInt8 Reserved0 : 4; // Reserved + + Kernel::UInt8 Reserved1[2]; // Reserved + + // DWORD 1 ~ N + Kernel::UInt32 Data[1]; // Payload +} FisData; + +typedef struct FisPioSetup final +{ + // DWORD 0 + Kernel::UInt8 FisType; // FIS_TYPE_PIO_SETUP + + Kernel::UInt8 PortMul : 4; // Port multiplier + Kernel::UInt8 Reserved0 : 1; // Reserved + Kernel::UInt8 DTD : 1; // Data transfer direction, 1 - device to host + Kernel::UInt8 InterruptBit : 1; // Interrupt bit + Kernel::UInt8 Reserved1 : 1; + + Kernel::UInt8 Status; // Status register + Kernel::UInt8 Error; // Error register + + // DWORD 1 + Kernel::UInt8 Lba0; // LBA low register, 7:0 + Kernel::UInt8 Lba1; // LBA mid register, 15:8 + Kernel::UInt8 Lba2; // LBA high register, 23:16 + Kernel::UInt8 Device; // Device register + + // DWORD 2 + Kernel::UInt8 Lba3; // LBA register, 31:24 + Kernel::UInt8 Lba4; // LBA register, 39:32 + Kernel::UInt8 Lba5; // LBA register, 47:40 + Kernel::UInt8 Rsv2; // Reserved + + // DWORD 3 + Kernel::UInt8 CountLow; // Count register, 7:0 + Kernel::UInt8 CountHigh; // Count register, 15:8 + Kernel::UInt8 Rsv3; // Reserved + Kernel::UInt8 EStatus; // New value of status register + + // DWORD 4 + Kernel::UInt16 TranferCount; // Transfer count + Kernel::UInt8 Rsv4[2]; // Reserved +} FisPioSetup; + +typedef struct FisDmaSetup final +{ + // DWORD 0 + Kernel::UInt8 FisType; // FIS_TYPE_DMA_SETUP + + Kernel::UInt8 PortMul : 4; // Port multiplier + Kernel::UInt8 Reserved0 : 1; // Reserved + Kernel::UInt8 DTD : 1; // Data transfer direction, 1 - device to host + Kernel::UInt8 InterruptBit : 1; // Interrupt bit + Kernel::UInt8 AutoEnable : 1; // Auto-activate. Specifies if DMA Activate FIS is needed + + Kernel::UInt8 Reserved1[2]; // Reserved + + // DWORD 1&2 + Kernel::UInt64 DmaBufferId; // DMA Buffer Identifier. Used to Identify DMA buffer in + // host memory. SATA Spec says host specific and not in + // Spec. Trying AHCI spec might work. + + // DWORD 3 + Kernel::UInt32 Rsvd; // More reserved + + // DWORD 4 + Kernel::UInt32 DmabufOffset; // Byte offset into buffer. First 2 bits must be 0 + + // DWORD 5 + Kernel::UInt32 TransferCount; // Number of bytes to transfer. Bit 0 must be 0 + + // DWORD 6 + Kernel::UInt32 Reserved3; // Reserved +} FisDmaSetup; + +typedef struct FisDevBits final +{ + // DWORD 0 + Kernel::UInt8 FisType; // FIS_TYPE_DMA_SETUP (A1h) + + Kernel::UInt8 Reserved0 : 5; // Reserved + Kernel::UInt8 R0 : 1; + Kernel::UInt8 InterruptBit : 1; + Kernel::UInt8 N : 1; + + Kernel::UInt8 StatusLow : 3; + Kernel::UInt8 R1 : 1; + Kernel::UInt8 StatusHigh : 3; + + Kernel::UInt8 R2 : 1; + Kernel::UInt8 Error; + + // DWORD 1 + Kernel::UInt32 Act; +} FisDevBits; + +/// \brief Enable AHCI device bit in GHC register. +#ifndef kAhciGHC_AE +#define kAhciGHC_AE (31) +#endif //! ifndef kAhciGHC_AE + +typedef struct HbaPort final +{ + Kernel::UInt32 Clb; // 0x00, command list base address, 1K-byte aligned + Kernel::UInt32 Clbu; // 0x04, command list base address upper 32 bits + Kernel::UInt32 Fb; // 0x08, FIS base address, 256-byte aligned + Kernel::UInt32 Fbu; // 0x0C, FIS base address upper 32 bits + Kernel::UInt32 Is; // 0x10, interrupt status + Kernel::UInt32 Ie; // 0x14, interrupt enable + Kernel::UInt32 Cmd; // 0x18, command and status + Kernel::UInt32 Reserved0; // 0x1C, Reserved + Kernel::UInt32 Tfd; // 0x20, task file data + Kernel::UInt32 Sig; // 0x24, signature + Kernel::UInt32 Ssts; // 0x28, SATA status (SCR0:SStatus) + Kernel::UInt32 Sctl; // 0x2C, SATA control (SCR2:SControl) + Kernel::UInt32 Serr; // 0x30, SATA error (SCR1:SError) + Kernel::UInt32 Sact; // 0x34, SATA active (SCR3:SActive) + Kernel::UInt32 Ci; // 0x38, command issue + Kernel::UInt32 Sntf; // 0x20, SATA notification (SCR4:SNotification) + Kernel::UInt32 Fbs; // 0x40, FIS-based switch control + Kernel::UInt32 Reserved1[11]; // 0x44 ~ 0x6F, Reserved + Kernel::UInt32 Vendor[4]; // 0x70 ~ 0x7F, vendor specific +} HbaPort; + +typedef struct HbaMem final +{ + // 0x00 - 0x2B, Generic Host Control + Kernel::UInt32 Cap; // 0x00, Host capability + Kernel::UInt32 Ghc; // 0x04, Global host control + Kernel::UInt32 Is; // 0x08, Interrupt status + Kernel::UInt32 Pi; // 0x0C, Port implemented + Kernel::UInt32 Vs; // 0x10, Version + Kernel::UInt32 Ccc_ctl; // 0x14, Command completion coalescing control + Kernel::UInt32 Ccc_pts; // 0x18, Command completion coalescing ports + Kernel::UInt32 Em_loc; // 0x1C, Enclosure management location + Kernel::UInt32 Em_ctl; // 0x20, Enclosure management control + Kernel::UInt32 Cap2; // 0x24, Host capabilities extended + Kernel::UInt32 Bohc; // 0x28, BIOS/OS handoff control and status + + Kernel::UInt8 Resv0[0xA0 - 0x2C]; + Kernel::UInt8 Vendor[0x100 - 0xA0]; + + HbaPort Ports[32]; // 1 ~ 32, 32 is the max ahci devices per controller. +} HbaMem; + +typedef struct HbaCmdHeader final +{ + // DW0 + Kernel::UInt8 Cfl : 5; // Command FIS length in DWORDS, 2 ~ 16 + Kernel::UInt8 Atapi : 1; // ATAPI + Kernel::UInt8 Write : 1; // Write, 1: H2D, 0: D2H + Kernel::UInt8 Prefetchable : 1; // Prefetchable + + Kernel::UInt8 Reset : 1; // Reset + Kernel::UInt8 BIST : 1; // BIST + Kernel::UInt8 Clear : 1; // Clear busy upon R_OK + Kernel::UInt8 Reserved0 : 1; // Reserved + Kernel::UInt8 Pmp : 4; // Port multiplier port + + Kernel::UInt16 Prdtl; // Physical region descriptor table length in entries + volatile Kernel::UInt32 Prdbc; // Physical region descriptor byte count transferred + + Kernel::UInt32 Ctba; // Command table descriptor base address + Kernel::UInt32 Ctbau; // Command table descriptor base address upper 32 bits + + Kernel::UInt32 Reserved1[4]; // Reserved +} HbaCmdHeader; + +typedef struct HbaFis final +{ + // 0x00 + FisDmaSetup Dsfis; // DMA Setup FIS + Kernel::UInt8 Pad0[4]; + // 0x20 + FisPioSetup Psfis; // PIO Setup FIS + Kernel::UInt8 Pad1[12]; + // 0x40 + FisRegD2H Rfis; // Register – Device to Host FIS + Kernel::UInt8 Pad2[4]; + // 0x58 + FisDevBits Sdbfis; // Set Device Bit FIS + // 0x60 + Kernel::UInt8 Ufis[64]; + // 0xA0 + Kernel::UInt8 Rsv[0x100 - 0xA0]; +} HbaFis; + +typedef struct HbaPrdtEntry final +{ + Kernel::UInt32 Dba; // Data base address + Kernel::UInt32 Dbau; // Data base address upper 32 bits + Kernel::UInt32 Reserved0; // Reserved + // DW3 + Kernel::UInt32 Dbc : 22; // Byte count, 4M max + Kernel::UInt32 Reserved1 : 9; // Reserved + Kernel::UInt32 InterruptBit : 1; // Interrupt on completion +} HbaPrdtEntry; + +typedef struct HbaCmdTbl final +{ + Kernel::UInt8 Cfis[64]; // Command FIS + Kernel::UInt8 Acmd[16]; // ATAPI command, 12 or 16 bytes + Kernel::UInt8 Rsv[48]; // Reserved + struct HbaPrdtEntry PrdtEntries[1]; // Physical region descriptor table entries, 0 ~ 65535 +} HbaCmdTbl; + +#if defined(__AHCI__) + +/// @brief Initializes an AHCI disk. +/// @param PortsImplemented the amount of port that have been detected. +/// @return +Kernel::Boolean drv_std_init(Kernel::UInt16& PortsImplemented); + +Kernel::Boolean drv_std_detected(Kernel::Void); + +/// @brief Read from disk. +/// @param Lba +/// @param Buf +/// @param SectorSz +/// @param Size +/// @return +Kernel::Void drv_std_read(Kernel::UInt64 lba, Kernel::Char* buf, Kernel::SizeT sector_sz, Kernel::SizeT buf_sz); + +/// @brief Write to disk. +/// @param Lba +/// @param Buf +/// @param SectorSz +/// @param Size +/// @return +Kernel::Void drv_std_write(Kernel::UInt64 lba, Kernel::Char* buf, Kernel::SizeT sector_sz, Kernel::SizeT buf_sz); + +/// @brief get sector count. +Kernel::SizeT drv_get_sector_count(); + +/// @brief get device size. +Kernel::SizeT drv_get_size(); + +#endif // ifdef __AHCI__ + +/* EOF */ diff --git a/dev/Mod/APM/APM.h b/dev/Mod/APM/APM.h new file mode 100644 index 00000000..6c631802 --- /dev/null +++ b/dev/Mod/APM/APM.h @@ -0,0 +1,37 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include + +namespace Kernel +{ + typedef Int32 APMPowerCmd; + + enum + { + kAPMPowerCommandInvalid = 0x00, + kAPMPowerCommandStop = 0x01, + kAPMPowerCommandStart = 0x02, + kAPMPowerCommandSleep = 0x04, + kAPMPowerCommandWakeup = 0x06, + kAPMPowerCommandShutdown = 0x07, + kAPMPowerCommandReboot = 0x08, + }; + + /// @brief Send a APM command into it's own DMA space. + /// @param base_dma the DMA base address. + /// @param cmd the command. + /// @return status code. + EXTERN_C Int32 apm_send_dma_command(Ptr64 register_addr, APMPowerCmd value); + + /// @brief Send a APM command into it's own IO space. + /// @param base_dma the IO base port. + /// @param cmd the command. + /// @return status code. + EXTERN_C Int32 apm_send_io_command(UInt16 cmd, APMPowerCmd value); +} // namespace Kernel diff --git a/dev/Mod/ATA/ATA.h b/dev/Mod/ATA/ATA.h new file mode 100644 index 00000000..d79fdd52 --- /dev/null +++ b/dev/Mod/ATA/ATA.h @@ -0,0 +1,156 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + + File: Defines.h + Purpose: ATA header. + + Revision History: + + 03/02/24: Added file (amlel) + +------------------------------------------- */ + +#pragma once + +#ifndef __AHCI__ + +#include +#include + +///! Status register +#define ATA_SR_BSY 0x80 +#define ATA_SR_DRDY 0x40 +#define ATA_SR_DF 0x20 +#define ATA_SR_DSC 0x10 +#define ATA_SR_DRQ 0x08 +#define ATA_SR_CORR 0x04 +#define ATA_SR_IDX 0x02 +#define ATA_SR_ERR 0x01 + +///! Error register +#define ATA_ER_BBK 0x80 +#define ATA_ER_UNC 0x40 +#define ATA_ER_MC 0x20 +#define ATA_ER_IDNF 0x10 +#define ATA_ER_MCR 0x08 +#define ATA_ER_ABRT 0x04 +#define ATA_ER_TK0NF 0x02 +#define ATA_ER_AMNF 0x01 + +#define ATA_CMD_READ_PIO 0x20 +#define ATA_CMD_READ_PIO_EXT 0x24 +#define ATA_CMD_READ_DMA 0xC8 +#define ATA_CMD_READ_DMA_EXT 0x25 +#define ATA_CMD_WRITE_PIO 0x30 +#define ATA_CMD_WRITE_PIO_EXT 0x34 +#define ATA_CMD_WRITE_DMA 0xCA +#define ATA_CMD_WRITE_DMA_EXT 0x35 +#define ATA_CMD_CACHE_FLUSH 0xE7 +#define ATA_CMD_CACHE_FLUSH_EXT 0xEA +#define ATA_CMD_PACKET 0xA0 +#define ATA_CMD_IDENTIFY_PACKET 0xA1 +#define ATA_CMD_IDENTIFY 0xEC + +///! ident offsets, use with data that we got from ATA_CMD_IDENTIFY. +#define ATA_IDENT_DEVICE_TYPE 0 +#define ATA_IDENT_CYLINDERS 2 +#define ATA_IDENT_HEADS 6 +#define ATA_IDENT_SECTORS 12 +#define ATA_IDENT_SERIAL 20 +#define ATA_IDENT_MODEL 54 +#define ATA_IDENT_CAPABILITIES 98 +#define ATA_IDENT_FIELDVALID 106 +#define ATA_IDENT_MAX_LBA 120 +#define ATA_IDENT_COMMANDSETS 164 +#define ATA_IDENT_MAX_LBA_EXT 200 + +#define ATA_MASTER 0x00 +#define ATA_SLAVE 0x01 + +///! Register +#define ATA_REG_DATA 0x00 +#define ATA_REG_ERROR 0x01 +#define ATA_REG_FEATURES 0x01 +#define ATA_REG_SEC_COUNT0 0x02 +#define ATA_REG_LBA0 0x03 +#define ATA_REG_LBA1 0x04 +#define ATA_REG_LBA2 0x05 +#define ATA_REG_HDDEVSEL 0x06 +#define ATA_REG_COMMAND 0x07 +#define ATA_REG_STATUS 0x07 +#define ATA_REG_SEC_COUNT1 0x08 +#define ATA_REG_LBA3 0x09 +#define ATA_REG_LBA4 0x0A +#define ATA_REG_LBA5 0x0B +#define ATA_REG_CONTROL 0x0C +#define ATA_REG_ALT_STATUS 0x0C +#define ATA_REG_DEV_ADDRESS 0x0D + +#define ATA_REG_NEIN 0x01 + +#define ATA_PRIMARY_IO 0x1F0 +#define ATA_SECONDARY_IO 0x170 +#define ATA_PRIMARY_DCR_AS 0x3F6 +#define ATA_SECONDARY_DCR_AS 0x376 + +///! Irq +#define ATA_PRIMARY_IRQ 14 +#define ATA_SECONDARY_IRQ 15 + +///! Channels +#define ATA_PRIMARY 0x00 +#define ATA_SECONDARY 0x01 + +#define ATA_CYL_LOW 3 +#define ATA_CYL_MID 4 +#define ATA_CYL_HIGH 5 + +///! IO Direction +#define ATA_READ 0x00 +#define ATA_WRITE 0x013 + +#define ATA_PRIMARY_SEL 0xA0 +#define ATA_SECONDARY_SEL 0xB0 + +///! ATA address register. +#define ATA_ADDRESS1(x) (x + 3) +#define ATA_ADDRESS2(x) (x + 4) +#define ATA_ADDRESS3(x) (x + 5) + +///! ATA command register. +#define ATA_COMMAND(x) (x + 7) + +#define kATASectorSize (512U) + +enum +{ + kATADevicePATA, + kATADeviceSATA, + kATADevicePATA_PI, + kATADeviceSATA_PI, + kATADeviceCount, +}; + +#if defined(__ATA_PIO__) || defined(__ATA_DMA__) + +Kernel::Boolean drv_std_init(Kernel::UInt16 in_bus, Kernel::UInt8 drive, Kernel::UInt16& out_bus, Kernel::UInt8& out_master); + +Kernel::Boolean drv_std_detected(Kernel::Void); + +Kernel::Void drv_std_select(Kernel::UInt16 bus); + +Kernel::Boolean drv_std_wait_io(Kernel::UInt16 io); + +Kernel::Void drv_std_read(Kernel::UInt64 lba, Kernel::UInt16 io, Kernel::UInt8 is_master, Kernel::Char* buf, Kernel::SizeT sec_sz, Kernel::SizeT buf_sz); + +Kernel::Void drv_std_write(Kernel::UInt64 lba, Kernel::UInt16 io, Kernel::UInt8 is_master, Kernel::Char* buf, Kernel::SizeT sec_sz, Kernel::SizeT buf_sz); + +/// @brief get sector count. +Kernel::SizeT drv_get_sector_count(); + +/// @brief get device size. +Kernel::SizeT drv_get_size(); + +#endif // ifdef __MINOSKRNL__ +#endif // ifndef __ATA_PIO__ || __AHCI__ diff --git a/dev/Mod/Flash/Flash.h b/dev/Mod/Flash/Flash.h new file mode 100644 index 00000000..9f5d4117 --- /dev/null +++ b/dev/Mod/Flash/Flash.h @@ -0,0 +1,21 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#ifdef ZKA_USE_MBCI_FLASH + +#include + +/// @brief get sector count. +/// @return drive sector count. +Kernel::SizeT drv_get_sector_count(); + +/// @brief get device size. +/// @return drive size +Kernel::SizeT drv_get_size(); + +#endif // ifdef ZKA_USE_MBCI_FLASH diff --git a/dev/Mod/GPRS/.keepme b/dev/Mod/GPRS/.keepme new file mode 100644 index 00000000..e69de29b diff --git a/dev/Mod/GfxMgr/AccessibilityMgr.h b/dev/Mod/GfxMgr/AccessibilityMgr.h new file mode 100644 index 00000000..24039ade --- /dev/null +++ b/dev/Mod/GfxMgr/AccessibilityMgr.h @@ -0,0 +1,41 @@ +/* ------------------------------------------- + + Copyright Theater Quality Inc. + +------------------------------------------- */ + +#ifndef GFX_MGR_ACCESSIBILITY_H +#define GFX_MGR_ACCESSIBILITY_H + +#include +#include +#include +#include +#include + +namespace UI +{ + using namespace Kernel; + + /// @brief common User interface class. + class UIAccessibilty final + { + explicit UIAccessibilty() = default; + ~UIAccessibilty() = default; + + public: + ZKA_COPY_DELETE(UIAccessibilty); + + static Int64 Width() noexcept + { + return kHandoverHeader->f_GOP.f_Width; + } + + static Int64 Height() noexcept + { + return kHandoverHeader->f_GOP.f_Height; + } + }; +} // namespace CG + +#endif // !GFX_MGR_ACCESSIBILITY_H_ diff --git a/dev/Mod/GfxMgr/FBMgr.h b/dev/Mod/GfxMgr/FBMgr.h new file mode 100644 index 00000000..37fbaddc --- /dev/null +++ b/dev/Mod/GfxMgr/FBMgr.h @@ -0,0 +1,157 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include + +#define fb_init() Kernel::SizeT kCGCursor = 0 + +#define fb_color(R, G, B) RGB(R, G, B) + +#define fb_get_clear_clr() fb_color(0x20, 0x20, 0x20) + +#define fb_fini() kCGCursor = 0 + +/// @brief Performs OR drawing on the framebuffer. +#define FBDrawBitMapInRegionA(_BitMp, _Height, _Width, _BaseX, _BaseY) \ + for (Kernel::SizeT i = _BaseX; i < (_Height + _BaseX); ++i) \ + { \ + for (Kernel::SizeT u = _BaseY; u < (_Width + _BaseY); ++u) \ + { \ + *(((Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \ + 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ + i + \ + 4 * u))) |= (_BitMp)[kCGCursor]; \ + \ + ++kCGCursor; \ + } \ + } + +/// @brief Draws a resource. +#define FBDrawBitMapInRegion(_BitMp, _Height, _Width, _BaseX, _BaseY) \ + for (Kernel::SizeT i = _BaseX; i < (_Height + _BaseX); ++i) \ + { \ + for (Kernel::SizeT u = _BaseY; u < (_Width + _BaseY); ++u) \ + { \ + *(((Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \ + 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ + i + \ + 4 * u))) = (_BitMp)[kCGCursor]; \ + \ + ++kCGCursor; \ + } \ + } + +#define FBDrawBitMapInRegionToRgn(_Rgn, _BitMp, _Height, _Width, _BaseX, _BaseY) \ + for (Kernel::SizeT i = _BaseX; i < (_Height + _BaseX); ++i) \ + { \ + for (Kernel::SizeT u = _BaseY; u < (_Width + _BaseY); ++u) \ + { \ + *(((Kernel::UInt32*)(_Rgn + \ + 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ + i + \ + 4 * u))) = (_BitMp)[kCGCursor]; \ + \ + ++kCGCursor; \ + } \ + } + +/// @brief Cleans a resource. +#define CGClearRegion(_Height, _Width, _BaseX, _BaseY) \ + for (Kernel::SizeT i = _BaseX; i < _Height + _BaseX; ++i) \ + { \ + for (Kernel::SizeT u = _BaseY; u < _Width + _BaseY; ++u) \ + { \ + *(((volatile Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \ + 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ + i + \ + 4 * u))) = fb_get_clear_clr(); \ + } \ + } + +/// @brief Draws inside a zone. +#define FBDrawInRegion(_Clr, _Height, _Width, _BaseX, _BaseY) \ + for (Kernel::SizeT x_base = _BaseX; x_base < (_Width + _BaseX); ++x_base) \ + { \ + for (Kernel::SizeT y_base = _BaseY; y_base < (_Height + _BaseY); ++y_base) \ + { \ + *(((volatile Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \ + 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ + x_base + \ + 4 * y_base))) = _Clr; \ + } \ + } + +/// @brief Draws inside a zone. +#define FBDrawInRegionToRgn(_Rgn, _Clr, _Height, _Width, _BaseX, _BaseY) \ + for (Kernel::SizeT x_base = _BaseX; x_base < (_Width + _BaseX); ++x_base) \ + { \ + for (Kernel::SizeT y_base = _BaseY; y_base < (_Height + _BaseY); ++y_base) \ + { \ + *(((volatile Kernel::UInt32*)(_Rgn + \ + 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ + x_base + \ + 4 * y_base))) = _Clr[kCGCursor]; \ + ++kCGCursor; \ + } \ + } + +#define FBDrawInRegionToVideoRgn(_VideoRgn, _Clr, _Height, _Width, _BaseX, _BaseY) \ + kCGCursor = 0; \ + \ + for (Kernel::SizeT x_base = _BaseX; x_base < (_Width + _BaseX); ++x_base) \ + { \ + for (Kernel::SizeT y_base = _BaseY; y_base < (_Height + _BaseY); ++y_base) \ + { \ + *(((volatile Kernel::UInt32*)(_VideoRgn + \ + 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ + x_base + \ + 4 * y_base))) = _Clr; \ + ++kCGCursor; \ + } \ + } + +#define FBDrawInRegionToVideoRgnA(_VideoRgn, _Clr, _Height, _Width, _BaseX, _BaseY) \ + for (Kernel::SizeT x_base = _BaseX; x_base < (_Width + _BaseX); ++x_base) \ + { \ + for (Kernel::SizeT y_base = _BaseY; y_base < (_Height + _BaseY); ++y_base) \ + { \ + *(((volatile Kernel::UInt32*)(_VideoRgn + \ + 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ + x_base + \ + 4 * y_base))) |= _Clr; \ + ++kCGCursor; \ + } \ + } + +#define FBDrawInRegionA(_Clr, _Height, _Width, _BaseX, _BaseY) \ + for (Kernel::SizeT x_base = _BaseX; x_base < (_Width + _BaseX); ++x_base) \ + { \ + for (Kernel::SizeT y_base = _BaseY; y_base < (_Height + _BaseY); ++y_base) \ + { \ + *(((volatile Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \ + 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ + x_base + \ + 4 * y_base))) |= _Clr; \ + } \ + } + +#include + +namespace UI +{ + inline void ui_draw_background() noexcept + { + fb_init(); + + FBDrawInRegion(fb_get_clear_clr(), UI::UIAccessibilty::Height(), UI::UIAccessibilty::Width(), + 0, 0); + + fb_fini(); + } + +} // namespace UI \ No newline at end of file diff --git a/dev/Mod/GfxMgr/MathMgr.h b/dev/Mod/GfxMgr/MathMgr.h new file mode 100644 index 00000000..bb078b42 --- /dev/null +++ b/dev/Mod/GfxMgr/MathMgr.h @@ -0,0 +1,29 @@ +/* ------------------------------------------- + + Copyright Theater Quality Inc. + +------------------------------------------- */ + +#pragma once + +/// @file MathMgr.h +/// @brief Linear interpolation implementation. + +namespace UI +{ +#ifdef ZKA_GFX_MGR_USE_DOUBLE + typedef double fb_real_t; +#else + typedef float fb_real_t; +#endif + + /// @brief Linear interpolation equation solver. + /// @param from where? + /// @param to to? + /// @param at which state we're at **to**. + inline fb_real_t fb_math_lerp(fb_real_t to, fb_real_t from, fb_real_t stat) + { + fb_real_t difference = to - from; + return from + (difference * stat); + } +} // namespace UI \ No newline at end of file diff --git a/dev/Mod/GfxMgr/TextMgr.h b/dev/Mod/GfxMgr/TextMgr.h new file mode 100644 index 00000000..569618a2 --- /dev/null +++ b/dev/Mod/GfxMgr/TextMgr.h @@ -0,0 +1,178 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include +#include + +#define FONT_SIZE_X 8 +#define FONT_SIZE_Y 8 +#define FONT_NOF_CHARS 128 + +inline const Kernel::UInt8 kFontBitmap[FONT_NOF_CHARS][FONT_SIZE_X] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul) + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019 + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space) + {0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!) + {0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (") + {0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#) + {0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($) + {0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%) + {0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&) + {0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (') + {0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (() + {0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ()) + {0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*) + {0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+) + {0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,) + {0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-) + {0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.) + {0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/) + {0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0) + {0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1) + {0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2) + {0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3) + {0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4) + {0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5) + {0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6) + {0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7) + {0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8) + {0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9) + {0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:) + {0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (;) + {0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<) + {0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=) + {0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>) + {0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?) + {0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@) + {0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A) + {0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B) + {0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C) + {0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D) + {0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E) + {0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F) + {0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G) + {0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H) + {0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I) + {0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J) + {0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K) + {0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L) + {0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M) + {0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N) + {0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O) + {0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P) + {0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q) + {0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R) + {0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S) + {0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T) + {0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U) + {0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V) + {0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W) + {0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X) + {0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y) + {0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z) + {0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([) + {0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\) + {0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (]) + {0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^) + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_) + {0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`) + {0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a) + {0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b) + {0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c) + {0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d) + {0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e) + {0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f) + {0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g) + {0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h) + {0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i) + {0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j) + {0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k) + {0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l) + {0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m) + {0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n) + {0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o) + {0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p) + {0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q) + {0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r) + {0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s) + {0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t) + {0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u) + {0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v) + {0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w) + {0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x) + {0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y) + {0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z) + {0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({) + {0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|) + {0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (}) + {0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~) + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F + +}; + +inline Kernel::Void fb_render_string_for_bitmap(const Kernel::UInt8* bitmap, const Kernel::SizeT& x_sz, const Kernel::SizeT& y_sz, Kernel::Int32& x_dst, Kernel::Int32& y_dst, Kernel::Int32& color) +{ + Kernel::Int32 x, y; + Kernel::Int32 set; + + x = 0; + y = 0; + set = 0; + + for (; y < y_sz; ++y) + { + for (x = 0; x < x_sz; ++x) + { + set = bitmap[x] & (1 << y); + + if (set) + { + FBDrawInRegion(color, 1, 1, ((x_dst) + x), ((y_dst) + y)); + } + } + } +} + +inline Kernel::Void fb_render_string(const Kernel::Char* text, Kernel::Int32 x_dst, Kernel::Int32 y_dst, Kernel::Int32 color) +{ + for (Kernel::SizeT i = 0; text[i] != 0; ++i) + { + fb_render_string_for_bitmap(&kFontBitmap[text[i]][0], FONT_SIZE_X, FONT_SIZE_Y, x_dst, y_dst, color); + y_dst += FONT_SIZE_Y; + } +} diff --git a/dev/Mod/HPET/.gitkeep b/dev/Mod/HPET/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/dev/Mod/HPET/Defines.h b/dev/Mod/HPET/Defines.h new file mode 100644 index 00000000..d186698a --- /dev/null +++ b/dev/Mod/HPET/Defines.h @@ -0,0 +1,42 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + + File: HPET.h + Purpose: HPET builtin. + + Revision History: + +------------------------------------------- */ + +#pragma once + +#include +#include + +namespace Kernel +{ + struct PACKED HPETAddressStructure final + { + Kernel::UInt8 AddressSpaceId; // 0 - system memory, 1 - system I/O + Kernel::UInt8 RegisterBitWidth; + Kernel::UInt8 RegisterBitOffset; + Kernel::UInt8 Reserved; + Kernel::UInt64 Address; + }; + + struct PACKED HPETHeader final : public SDT + { + Kernel::UInt8 HardwareRevId; + Kernel::UInt8 ComparatorCount : 5; + Kernel::UInt8 CounterSize : 1; + Kernel::UInt8 Reserved : 1; + Kernel::UInt8 LegacyReplacement : 1; + Kernel::UInt16 PciVendorId; + HPETAddressStructure Address; + Kernel::UInt8 HpetNumber; + Kernel::UInt16 MinimumTick; + Kernel::UInt8 PageProtection; + }; + +} // namespace Kernel diff --git a/dev/Mod/IEEE802/.gitkeep b/dev/Mod/IEEE802/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/dev/Mod/LTE/LTE.h b/dev/Mod/LTE/LTE.h new file mode 100644 index 00000000..a5327df9 --- /dev/null +++ b/dev/Mod/LTE/LTE.h @@ -0,0 +1,40 @@ +/* ------------------------------------------- + +Copyright (C) 2024, Theater Quality Inc, all rights reserved.. + +File: LTE\LTE.h. +Purpose: LTE Standard Library. + +------------------------------------------- */ + +#ifndef _INC_NETWORK_LTE_H_ +#define _INC_NETWORK_LTE_H_ + +#include +#include + +/// @brief Long Term Evolution I/O routines. + +/// @brief Turn on SIM slot. +Kernel::Boolean lte_turn_on_sim(Kernel::Int32 simSlot); + +/// @brief Turn off SIM slot. +Kernel::Boolean lte_turn_off_sim(Kernel::Int32 simSlot); + +/// @brief Send AT command. +Kernel::Boolean lte_send_at_command(Kernel::Char* buf, + Kernel::Size bufReadSz, + Kernel::Int32 simSlot); + +Kernel::Boolean lte_write_sim_file(Kernel::Char* file, + Kernel::VoidPtr buf, + Kernel::Size bufSz, + Kernel::Size offset, + Kernel::Int32 simSlot); + +Kernel::VoidPtr lte_read_sim_file(Kernel::Char* file, + Kernel::Size bufSz, + Kernel::Size offset, + Kernel::Int32 simSlot); + +#endif // ifndef _INC_NETWORK_LTE_H_ diff --git a/dev/Mod/MBCI/Interface.h b/dev/Mod/MBCI/Interface.h new file mode 100644 index 00000000..6a363f72 --- /dev/null +++ b/dev/Mod/MBCI/Interface.h @@ -0,0 +1,10 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include +#include diff --git a/dev/Mod/MBCI/MBCI.h b/dev/Mod/MBCI/MBCI.h new file mode 100644 index 00000000..df93f212 --- /dev/null +++ b/dev/Mod/MBCI/MBCI.h @@ -0,0 +1,98 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#ifndef _INC_MODULE_MBCI_H_ +#define _INC_MODULE_MBCI_H_ + +#include +#include + +/** +- VCC (IN) (OUT for MCU) +- CLK (IN) (OUT for MCU) +- ACK (BI) (Contains an Acknowledge Packet Frame) +- D0- (IN) (Starts with the Host Interface Packet Frame) +- D1- (IN) (Starts with the Host Interface Packet Frame) +- D0+ (OUT) (Starts with the Host Interface Packet Frame) +- D1+ (OUT) (Starts with the Host Interface Packet Frame) +- GND (IN) (OUT for MCU) + */ + +#define kMBCIZeroSz (8) + +namespace Kernel +{ + struct IMBCIHost; + struct IMBCIHostPacketFrame; + + /// @brief MBCI Packet frame header + struct PACKED IMBCIHostPacketFrame final + { + UInt32 Magic; + UInt32 HostId; + UInt32 Flags; + UInt32 VendorId; + UInt32 DeviceId; + UInt32 DeviceSpeed; + Bool Acknowledge; + Char Zero[kMBCIZeroSz]; + }; + + enum + { + kMBCISpeedDeviceInvalid, + kMBCILowSpeedDevice, + kMBCIHighSpeedDevice, + kMBCISpeedDeviceCount, + }; + + /// @brief MBCI Host Interface header. + struct PACKED IMBCIHost final + { + UInt32 Magic; + UInt32 HostId; + UInt16 VendorId; + UInt16 DeviceId; + UInt8 MemoryType; + UInt16 HostType; + UInt16 HostFlags; + UInt8 Error; + UInt8 Status; + UInt8 InterruptEnable; + UInt64 BaseAddressRegister; + UInt64 BaseAddressRegisterSize; + Char Zero[kMBCIZeroSz]; + }; + + /// @brief MBCI host flags. + enum MBCIHostFlags + { + kMBCIHostFlagsSupportsNothing, // Invalid MBCI device. + kMBCIHostFlagsSupportsAPM, // Advanced Power Management. + kMBCIHostFlagsSupportsDaisyChain, // Is daisy chained. + kMBCIHostFlagsSupportsHWInterrupts, // Has HW interrupts. + kMBCIHostFlagsSupportsDMA, // Has DMA. + kMBCIHostFlagsExtended = __UINT16_MAX__, // Extended flags table. + }; + + enum MBCIHostKind + { + kMBCIHostKindHardDisk, + kMBCIHostKindOpticalDisk, + kMBCIHostKindKeyboardLow, + kMBCIHostKindMouseLow, + kMBCIHostKindMouseHigh, + kMBCIHostKindKeyboardHigh, + kMBCIHostKindNetworkInterface, + kMBCIHostKindDaisyChain, + kMBCIHostKindStartExtended = __UINT16_MAX__, // Extended vendor table limit. + }; + + /// @brief An AuthKey is a context used to decrpy data from an MBCI packet. + typedef UInt64 MBCIAuthyKeyType; +} // namespace Kernel + +#endif // ifndef _INC_MODULE_MBCI_H_ diff --git a/dev/Mod/NVME/NVME.h b/dev/Mod/NVME/NVME.h new file mode 100644 index 00000000..2d77a769 --- /dev/null +++ b/dev/Mod/NVME/NVME.h @@ -0,0 +1,112 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + + Revision History: + + ??/??/24: Added file (amlel) + 23 Jul 24: Update filename to Defines.h and using ALIGN_NVME for NVME structs. (amlel) + +------------------------------------------- */ + +#ifndef __MODULE_NVME_H__ +#define __MODULE_NVME_H__ + +#include + +/// TODO: checklist in: https://wiki.osdev.org/NVMe + +#define ALIGN_NVME ATTRIBUTE(aligned(sizeof(Kernel::UInt32))) + +namespace Kernel +{ + struct ALIGN_NVME HAL_NVME_BAR_0 final + { + UInt32 fCapabilities; + UInt32 fVersion; + UInt32 fIntMaskSet; + UInt32 fIntMaskClr; + UInt32 fContrlConf; + UInt32 fContrlStat; + UInt32 fAdminQueueAttr; + UInt32 fAdminSubmissionQueue; + UInt32 fAdminCompletionQueue; + }; + + struct ALIGN_NVME HAL_NVME_QUEUE final + { + UInt32 fOpcode; + UInt32 fNSID; + UInt32 fReserved[3]; + UInt32 fMetadataPtr[5]; + UInt32 fDataPtr[9]; + UInt32 CommandSpecific[15]; + }; + + enum + { + kCreateCompletionQueueNVME = 0x05, + kCreateSubmissionQueueNVME = 0x01, + kIdentifyNVME = 0x06, + kReadNVME = 0x02, + kWriteNVME = 0x01, + }; + + /// @brief Creates an admin command for a DMA operation. + template + inline Bool nvme_create_admin_command(HAL_NVME_QUEUE* entry, UInt32 nsid, UInt32 prpTransfer[3], UInt32 startingLba[2], UInt32 lowTransferBlocks) + { + if (entry == nullptr) + return false; + + entry->CommandSpecific[9] = startingLba[0]; + entry->CommandSpecific[10] = startingLba[1]; + + entry->CommandSpecific[11] = lowTransferBlocks; + + entry->CommandSpecific[5] = prpTransfer[0]; + entry->CommandSpecific[6] = prpTransfer[1]; + entry->CommandSpecific[7] = prpTransfer[2]; + + entry->CommandSpecific[0] = nsid; + + return true; + } + + /// @brief Creates an I/O command for a DMA operation. + template + inline Bool nvme_create_io_command(HAL_NVME_QUEUE* entry, UInt64 baseAddress, UInt32 identLoAndQueueSizeHi, UInt32 flagsLoAndQueueComplIdHi, UInt32 identify, Bool provideIdentify = false, Bool namespaceIdentify = false) + { + if (entry == nullptr) + return false; + + if (baseAddress == 0) + return false; + + entry->fOpcode = Opcode; + + entry->CommandSpecific[5] = (baseAddress & 0xFF); + entry->CommandSpecific[6] = static_cast(baseAddress); + + if (!provideIdentify) + { + entry->CommandSpecific[9] = identLoAndQueueSizeHi; + entry->CommandSpecific[10] = flagsLoAndQueueComplIdHi; + } + else + { + entry->CommandSpecific[9] = identify; + + if (namespaceIdentify) + { + entry->CommandSpecific[0] = 1; + } + } + + // Use (1 << 0) as contigunous is better supported. + + return true; + } +} // namespace Kernel + +#endif // ifndef __MODULE_NVME_H__ diff --git a/dev/Mod/OHCI/.gitkeep b/dev/Mod/OHCI/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/dev/Mod/ReadMe.md b/dev/Mod/ReadMe.md new file mode 100644 index 00000000..b9de61b5 --- /dev/null +++ b/dev/Mod/ReadMe.md @@ -0,0 +1,12 @@ +# Kernel Mod + +## Brief + +They are pluggable modules for builtin hardware support. + +## To-Do + +- [X] AHCI kernel module. +- [X] MBCI kernel module. + +###### Copyright (C) 2024, Theater Quality Inc, all rights reserved. All rights reserved. diff --git a/dev/Mod/SCSI/.gitkeep b/dev/Mod/SCSI/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/dev/Mod/SCSI/SCSI.h b/dev/Mod/SCSI/SCSI.h new file mode 100644 index 00000000..917c963e --- /dev/null +++ b/dev/Mod/SCSI/SCSI.h @@ -0,0 +1,15 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include + +/// @file SCSI.h +/// @brief Serial SCSI driver. + +template +using scsi_packet_type = Kernel::UInt16[PacketBitLen]; diff --git a/dev/Mod/WiFi/.gitkeep b/dev/Mod/WiFi/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/dev/Mod/XHCI/.gitkeep b/dev/Mod/XHCI/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/dev/Mod/XHCI/Defines.h b/dev/Mod/XHCI/Defines.h new file mode 100644 index 00000000..6758cf33 --- /dev/null +++ b/dev/Mod/XHCI/Defines.h @@ -0,0 +1,70 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + + File: Defines.h + Purpose: XHCI (and backwards) header. + + Revision History: + + 01/02/24: Added file (amlel) + 03/02/24: Update filename to Defines.h (amlel) + +------------------------------------------- */ + +#pragma once + +#include + +using namespace Kernel; + +#define kUSBCommand (UInt16)0x0 +#define kUSBStatus (UInt16)0x2 +#define kUSBInterruptEnable (UInt16)0x4 +#define kUSBFrameNum (UInt16)0x6 +#define kUSBFrameListBaseAddress (UInt16)0x8 +#define kUSBFrameModifyStart (UInt16)0xC +#define kUSBPort1StatusCtrl (UInt16)0x10 +#define kUSBPort2StatusCtrl (UInt16)0x12 + +typedef struct USBCommandRegister final +{ + UInt8 mReserved[8]; // Reserved + UInt8 + mMaxPacket; // 0 = Max packet size 32 bits 1 = Max packet size 64 bits + UInt8 mConfigure; + UInt8 mSoftwareDebug; + UInt8 mGlobalResume; + UInt8 mGlobalSuspend; + UInt8 mHostCtrlReset; + UInt8 mRun; // 1 = Controller execute frame list entries +} USBCommandRegister; + +typedef struct USBStatusRegister final +{ + UInt8 mReserved[8]; // Reserved + UInt8 mHalted; // 1 = bit 0 in CMD is zero 0 = bit 0 in CMD is 1 + UInt8 mProcessError; + UInt8 mSystemError; + UInt8 mResumeDetected; + UInt8 mErrorInterrupt; + UInt8 mInterrupt; +} USBStatusRegister; + +typedef struct USBInterruptEnableRegister final +{ + UInt8 mReserved[4]; // Reserved + UInt8 mShortPacket; // 1=Enable interrupt 0=Disable interrupt + UInt8 mComplete; // 1=Enable interrupt 0=Disable interrupt + UInt8 mResume; // 1=Enable interrupt 0=Disable interrupt + UInt8 mTimeoutCRC; // 1=Enable interrupt 0=Disable interrupt +} USBInterruptEnableRegister; + +/* + Some terminology: + + Frame Number: Number of processed entry of the Frame List. + Frame List Base Address: + 32-bit physical adress of Frame List. Remember that first 12 bytes are + always 0. The Frame List must contain 1024 entries. +*/ diff --git a/dev/Modules/ACPI/ACPI.h b/dev/Modules/ACPI/ACPI.h deleted file mode 100644 index d21c475e..00000000 --- a/dev/Modules/ACPI/ACPI.h +++ /dev/null @@ -1,88 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#ifndef __ACPI__ -#define __ACPI__ - -/** - https://uefi.org/specs/ACPI/6.5/05_ACPI_Software_Programming_Model.html -*/ - -#include - -namespace Kernel -{ - class PACKED SDT - { - public: - Char Signature[4]; - UInt32 Length; - UInt8 Revision; - Char Checksum; - Char OemId[6]; - Char OemTableId[8]; - UInt32 OemRev; - UInt32 CreatorID; - UInt32 CreatorRevision; - }; - - class PACKED RSDP : public SDT - { - public: - UInt32 RsdtAddress; - UIntPtr XsdtAddress; - UInt8 ExtendedChecksum; - UInt8 Reserved0[3]; - }; - - class PACKED ConfigHeader - { - public: - UInt64 BaseAddress; - UInt16 PciSegGroup; - UInt8 StartBus; - UInt8 EndBus; - UInt32 Reserved; - }; - - enum ACPI_ADDRESS_SPACE_KIND : UInt8 - { - eSystemMemory = 0, - eSystemIO = 1, - ePci = 2, - eController = 3, - eSmBus = 4, - eCount = 5, - eInvalid = 0xFF, - }; - - class PACKED ACPI_ADDRESS final - { - public: - UInt8 AddressSpaceId; - UInt8 RegisterBitWidth; - UInt8 RegisterBitOffset; - UInt8 Reserved; - UIntPtr Address; - }; - - class PACKED RSDT final - { - public: - Char Signature[4]; - UInt32 Length; - UInt8 Revision; - Char Checksum; - Char OemId[6]; - Char OemTableId[8]; - UInt32 OemRev; - UInt32 CreatorID; - UInt32 CreatorRevision; - UInt32 AddressArr[]; - }; -} // namespace Kernel - -#endif // !__ACPI__ diff --git a/dev/Modules/ACPI/ACPIFactoryInterface.h b/dev/Modules/ACPI/ACPIFactoryInterface.h deleted file mode 100644 index d6a71316..00000000 --- a/dev/Modules/ACPI/ACPIFactoryInterface.h +++ /dev/null @@ -1,60 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#ifndef __MOD_ACPI_H__ -#define __MOD_ACPI_H__ - -#include -#include -#include -#include -#include - -namespace Kernel -{ - class ACPIFactoryInterface; - - typedef ACPIFactoryInterface PowerFactoryInterface; - - class ACPIFactoryInterface final - { - public: - explicit ACPIFactoryInterface(voidPtr rsp_ptr); - ~ACPIFactoryInterface() = default; - - ACPIFactoryInterface& operator=(const ACPIFactoryInterface&) = default; - ACPIFactoryInterface(const ACPIFactoryInterface&) = default; - - public: - Void Shutdown(); // shutdown - Void Reboot(); // soft-reboot - - public: - /// @brief Descriptor find factory. - /// @param signature The signature of the descriptor table (MADT, ACPI...) - /// @return the blob inside an ErrorOr object. - ErrorOr Find(const Char* signature); - - /// @brief Checksum factory. - /// @param checksum the data to checksum - /// @param len it's size - /// @return if it succeed - bool Checksum(const Char* checksum, SSizeT len); // watch for collides! - - public: - ErrorOr operator[](const Char* signature) - { - return this->Find(signature); - } - - private: - VoidPtr fRsdp; // pointer to root descriptor. - SSizeT fEntries; // number of entries, -1 tells that no invalid entries were - // found. - }; -} // namespace Kernel - -#endif // !__MOD_ACPI_H__ diff --git a/dev/Modules/AHCI/.gitkeep b/dev/Modules/AHCI/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/dev/Modules/AHCI/AHCI.h b/dev/Modules/AHCI/AHCI.h deleted file mode 100644 index 4670c5c7..00000000 --- a/dev/Modules/AHCI/AHCI.h +++ /dev/null @@ -1,364 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - - File: AHCI.h - Purpose: AHCI protocol defines. - - Revision History: - - 03/02/24: Added file (amlel) - -------------------------------------------- */ - -#pragma once - -#include -#include - -/// @note Forward declarations of structs. - -#define kAHCISectorSize (512U) - -struct HbaPort; -struct FisData; -struct FisRegD2H; -struct FisRegH2D; - -/// @brief Frame information type. -enum -{ - kFISTypeRegH2D = 0x27, // Register FIS - host to device - kFISTypeRegD2H = 0x34, // Register FIS - device to host - kFISTypeDMAAct = 0x39, // DMA activate FIS - device to host - kFISTypeDMASetup = 0x41, // DMA setup FIS - bidirectional - kFISTypeData = 0x46, // Data FIS - bidirectional - kFISTypeBIST = 0x58, // BIST activate FIS - bidirectional - kFISTypePIOSetup = 0x5F, // PIO setup FIS - device to host - kFISTypeDevBits = 0xA1, // Set device bits FIS - device to host -}; - -enum -{ - kAHCICmdIdentify = 0xEC, - kAHCICmdReadDma = 0xC8, - kAHCICmdReadDmaEx = 0x25, - kAHCICmdWriteDma = 0xCA, - kAHCICmdWriteDmaEx = 0x35 -}; - -typedef struct FisRegH2D final -{ - // DWORD 0 - Kernel::UInt8 FisType; // FIS_TYPE_REG_H2D - - Kernel::UInt8 PortMul : 4; // Port multiplier - Kernel::UInt8 Reserved0 : 3; // Reserved - Kernel::UInt8 CmdOrCtrl : 1; // 1: Command, 0: Control - - Kernel::UInt8 Command; // Command register - Kernel::UInt8 Featurel; // Feature register, 7:0 - - // DWORD 1 - Kernel::UInt8 Lba0; // LBA low register, 7:0 - Kernel::UInt8 Lba1; // LBA mid register, 15:8 - Kernel::UInt8 Lba2; // LBA high register, 23:16 - Kernel::UInt8 Device; // Device register - - // DWORD 2 - Kernel::UInt8 Lba3; // LBA register, 31:24 - Kernel::UInt8 Lba4; // LBA register, 39:32 - Kernel::UInt8 Lba5; // LBA register, 47:40 - Kernel::UInt8 FeatureHigh; // Feature register, 15:8 - - // DWORD 3 - Kernel::UInt8 CountLow; // Count register, 7:0 - Kernel::UInt8 CountHigh; // Count register, 15:8 - Kernel::UInt8 Icc; // Isochronous command completion - Kernel::UInt8 Control; // Control register - - // DWORD 4 - Kernel::UInt8 Reserved1[4]; // Reserved -} FisRegH2D; - -typedef struct FisRegD2H final -{ - // DWORD 0 - Kernel::UInt8 FisType; // FIS_TYPE_REG_D2H - - Kernel::UInt8 PortMul : 4; // Port multiplier - Kernel::UInt8 Reserved0 : 2; // Reserved - Kernel::UInt8 InterruptBit : 1; // Interrupt bit - Kernel::UInt8 Reserved1 : 1; // Reserved - - Kernel::UInt8 Status; // Status register - Kernel::UInt8 Rrror; // Error register - - // DWORD 1 - Kernel::UInt8 Lba0; // LBA low register, 7:0 - Kernel::UInt8 Lba1; // LBA mid register, 15:8 - Kernel::UInt8 Lba2; // LBA high register, 23:16 - Kernel::UInt8 Device; // Device register - - // DWORD 2 - Kernel::UInt8 Lba3; // LBA register, 31:24 - Kernel::UInt8 Lba4; // LBA register, 39:32 - Kernel::UInt8 Lba5; // LBA register, 47:40 - Kernel::UInt8 Rsv2; // Reserved - - // DWORD 3 - Kernel::UInt8 CountLow; // Count register, 7:0 - Kernel::UInt8 CountHigh; // Count register, 15:8 - Kernel::UInt8 Rsv3[2]; // Reserved - - // DWORD 4 - Kernel::UInt8 Rsv4[4]; // Reserved -} FisRegD2H; - -typedef struct FisData final -{ - // DWORD 0 - Kernel::UInt8 FisType; // FIS_TYPE_DATA - - Kernel::UInt8 PortMul : 4; // Port multiplier - Kernel::UInt8 Reserved0 : 4; // Reserved - - Kernel::UInt8 Reserved1[2]; // Reserved - - // DWORD 1 ~ N - Kernel::UInt32 Data[1]; // Payload -} FisData; - -typedef struct FisPioSetup final -{ - // DWORD 0 - Kernel::UInt8 FisType; // FIS_TYPE_PIO_SETUP - - Kernel::UInt8 PortMul : 4; // Port multiplier - Kernel::UInt8 Reserved0 : 1; // Reserved - Kernel::UInt8 DTD : 1; // Data transfer direction, 1 - device to host - Kernel::UInt8 InterruptBit : 1; // Interrupt bit - Kernel::UInt8 Reserved1 : 1; - - Kernel::UInt8 Status; // Status register - Kernel::UInt8 Error; // Error register - - // DWORD 1 - Kernel::UInt8 Lba0; // LBA low register, 7:0 - Kernel::UInt8 Lba1; // LBA mid register, 15:8 - Kernel::UInt8 Lba2; // LBA high register, 23:16 - Kernel::UInt8 Device; // Device register - - // DWORD 2 - Kernel::UInt8 Lba3; // LBA register, 31:24 - Kernel::UInt8 Lba4; // LBA register, 39:32 - Kernel::UInt8 Lba5; // LBA register, 47:40 - Kernel::UInt8 Rsv2; // Reserved - - // DWORD 3 - Kernel::UInt8 CountLow; // Count register, 7:0 - Kernel::UInt8 CountHigh; // Count register, 15:8 - Kernel::UInt8 Rsv3; // Reserved - Kernel::UInt8 EStatus; // New value of status register - - // DWORD 4 - Kernel::UInt16 TranferCount; // Transfer count - Kernel::UInt8 Rsv4[2]; // Reserved -} FisPioSetup; - -typedef struct FisDmaSetup final -{ - // DWORD 0 - Kernel::UInt8 FisType; // FIS_TYPE_DMA_SETUP - - Kernel::UInt8 PortMul : 4; // Port multiplier - Kernel::UInt8 Reserved0 : 1; // Reserved - Kernel::UInt8 DTD : 1; // Data transfer direction, 1 - device to host - Kernel::UInt8 InterruptBit : 1; // Interrupt bit - Kernel::UInt8 AutoEnable : 1; // Auto-activate. Specifies if DMA Activate FIS is needed - - Kernel::UInt8 Reserved1[2]; // Reserved - - // DWORD 1&2 - Kernel::UInt64 DmaBufferId; // DMA Buffer Identifier. Used to Identify DMA buffer in - // host memory. SATA Spec says host specific and not in - // Spec. Trying AHCI spec might work. - - // DWORD 3 - Kernel::UInt32 Rsvd; // More reserved - - // DWORD 4 - Kernel::UInt32 DmabufOffset; // Byte offset into buffer. First 2 bits must be 0 - - // DWORD 5 - Kernel::UInt32 TransferCount; // Number of bytes to transfer. Bit 0 must be 0 - - // DWORD 6 - Kernel::UInt32 Reserved3; // Reserved -} FisDmaSetup; - -typedef struct FisDevBits final -{ - // DWORD 0 - Kernel::UInt8 FisType; // FIS_TYPE_DMA_SETUP (A1h) - - Kernel::UInt8 Reserved0 : 5; // Reserved - Kernel::UInt8 R0 : 1; - Kernel::UInt8 InterruptBit : 1; - Kernel::UInt8 N : 1; - - Kernel::UInt8 StatusLow : 3; - Kernel::UInt8 R1 : 1; - Kernel::UInt8 StatusHigh : 3; - - Kernel::UInt8 R2 : 1; - Kernel::UInt8 Error; - - // DWORD 1 - Kernel::UInt32 Act; -} FisDevBits; - -/// \brief Enable AHCI device bit in GHC register. -#ifndef kAhciGHC_AE -#define kAhciGHC_AE (31) -#endif //! ifndef kAhciGHC_AE - -typedef struct HbaPort final -{ - Kernel::UInt32 Clb; // 0x00, command list base address, 1K-byte aligned - Kernel::UInt32 Clbu; // 0x04, command list base address upper 32 bits - Kernel::UInt32 Fb; // 0x08, FIS base address, 256-byte aligned - Kernel::UInt32 Fbu; // 0x0C, FIS base address upper 32 bits - Kernel::UInt32 Is; // 0x10, interrupt status - Kernel::UInt32 Ie; // 0x14, interrupt enable - Kernel::UInt32 Cmd; // 0x18, command and status - Kernel::UInt32 Reserved0; // 0x1C, Reserved - Kernel::UInt32 Tfd; // 0x20, task file data - Kernel::UInt32 Sig; // 0x24, signature - Kernel::UInt32 Ssts; // 0x28, SATA status (SCR0:SStatus) - Kernel::UInt32 Sctl; // 0x2C, SATA control (SCR2:SControl) - Kernel::UInt32 Serr; // 0x30, SATA error (SCR1:SError) - Kernel::UInt32 Sact; // 0x34, SATA active (SCR3:SActive) - Kernel::UInt32 Ci; // 0x38, command issue - Kernel::UInt32 Sntf; // 0x20, SATA notification (SCR4:SNotification) - Kernel::UInt32 Fbs; // 0x40, FIS-based switch control - Kernel::UInt32 Reserved1[11]; // 0x44 ~ 0x6F, Reserved - Kernel::UInt32 Vendor[4]; // 0x70 ~ 0x7F, vendor specific -} HbaPort; - -typedef struct HbaMem final -{ - // 0x00 - 0x2B, Generic Host Control - Kernel::UInt32 Cap; // 0x00, Host capability - Kernel::UInt32 Ghc; // 0x04, Global host control - Kernel::UInt32 Is; // 0x08, Interrupt status - Kernel::UInt32 Pi; // 0x0C, Port implemented - Kernel::UInt32 Vs; // 0x10, Version - Kernel::UInt32 Ccc_ctl; // 0x14, Command completion coalescing control - Kernel::UInt32 Ccc_pts; // 0x18, Command completion coalescing ports - Kernel::UInt32 Em_loc; // 0x1C, Enclosure management location - Kernel::UInt32 Em_ctl; // 0x20, Enclosure management control - Kernel::UInt32 Cap2; // 0x24, Host capabilities extended - Kernel::UInt32 Bohc; // 0x28, BIOS/OS handoff control and status - - Kernel::UInt8 Resv0[0xA0 - 0x2C]; - Kernel::UInt8 Vendor[0x100 - 0xA0]; - - HbaPort Ports[32]; // 1 ~ 32, 32 is the max ahci devices per controller. -} HbaMem; - -typedef struct HbaCmdHeader final -{ - // DW0 - Kernel::UInt8 Cfl : 5; // Command FIS length in DWORDS, 2 ~ 16 - Kernel::UInt8 Atapi : 1; // ATAPI - Kernel::UInt8 Write : 1; // Write, 1: H2D, 0: D2H - Kernel::UInt8 Prefetchable : 1; // Prefetchable - - Kernel::UInt8 Reset : 1; // Reset - Kernel::UInt8 BIST : 1; // BIST - Kernel::UInt8 Clear : 1; // Clear busy upon R_OK - Kernel::UInt8 Reserved0 : 1; // Reserved - Kernel::UInt8 Pmp : 4; // Port multiplier port - - Kernel::UInt16 Prdtl; // Physical region descriptor table length in entries - volatile Kernel::UInt32 Prdbc; // Physical region descriptor byte count transferred - - Kernel::UInt32 Ctba; // Command table descriptor base address - Kernel::UInt32 Ctbau; // Command table descriptor base address upper 32 bits - - Kernel::UInt32 Reserved1[4]; // Reserved -} HbaCmdHeader; - -typedef struct HbaFis final -{ - // 0x00 - FisDmaSetup Dsfis; // DMA Setup FIS - Kernel::UInt8 Pad0[4]; - // 0x20 - FisPioSetup Psfis; // PIO Setup FIS - Kernel::UInt8 Pad1[12]; - // 0x40 - FisRegD2H Rfis; // Register – Device to Host FIS - Kernel::UInt8 Pad2[4]; - // 0x58 - FisDevBits Sdbfis; // Set Device Bit FIS - // 0x60 - Kernel::UInt8 Ufis[64]; - // 0xA0 - Kernel::UInt8 Rsv[0x100 - 0xA0]; -} HbaFis; - -typedef struct HbaPrdtEntry final -{ - Kernel::UInt32 Dba; // Data base address - Kernel::UInt32 Dbau; // Data base address upper 32 bits - Kernel::UInt32 Reserved0; // Reserved - // DW3 - Kernel::UInt32 Dbc : 22; // Byte count, 4M max - Kernel::UInt32 Reserved1 : 9; // Reserved - Kernel::UInt32 InterruptBit : 1; // Interrupt on completion -} HbaPrdtEntry; - -typedef struct HbaCmdTbl final -{ - Kernel::UInt8 Cfis[64]; // Command FIS - Kernel::UInt8 Acmd[16]; // ATAPI command, 12 or 16 bytes - Kernel::UInt8 Rsv[48]; // Reserved - struct HbaPrdtEntry PrdtEntries[1]; // Physical region descriptor table entries, 0 ~ 65535 -} HbaCmdTbl; - -#if defined(__AHCI__) - -/// @brief Initializes an AHCI disk. -/// @param PortsImplemented the amount of port that have been detected. -/// @return -Kernel::Boolean drv_std_init(Kernel::UInt16& PortsImplemented); - -Kernel::Boolean drv_std_detected(Kernel::Void); - -/// @brief Read from disk. -/// @param Lba -/// @param Buf -/// @param SectorSz -/// @param Size -/// @return -Kernel::Void drv_std_read(Kernel::UInt64 lba, Kernel::Char* buf, Kernel::SizeT sector_sz, Kernel::SizeT buf_sz); - -/// @brief Write to disk. -/// @param Lba -/// @param Buf -/// @param SectorSz -/// @param Size -/// @return -Kernel::Void drv_std_write(Kernel::UInt64 lba, Kernel::Char* buf, Kernel::SizeT sector_sz, Kernel::SizeT buf_sz); - -/// @brief get sector count. -Kernel::SizeT drv_get_sector_count(); - -/// @brief get device size. -Kernel::SizeT drv_get_size(); - -#endif // ifdef __AHCI__ - -/* EOF */ diff --git a/dev/Modules/APM/APM.h b/dev/Modules/APM/APM.h deleted file mode 100644 index 6c631802..00000000 --- a/dev/Modules/APM/APM.h +++ /dev/null @@ -1,37 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#pragma once - -#include - -namespace Kernel -{ - typedef Int32 APMPowerCmd; - - enum - { - kAPMPowerCommandInvalid = 0x00, - kAPMPowerCommandStop = 0x01, - kAPMPowerCommandStart = 0x02, - kAPMPowerCommandSleep = 0x04, - kAPMPowerCommandWakeup = 0x06, - kAPMPowerCommandShutdown = 0x07, - kAPMPowerCommandReboot = 0x08, - }; - - /// @brief Send a APM command into it's own DMA space. - /// @param base_dma the DMA base address. - /// @param cmd the command. - /// @return status code. - EXTERN_C Int32 apm_send_dma_command(Ptr64 register_addr, APMPowerCmd value); - - /// @brief Send a APM command into it's own IO space. - /// @param base_dma the IO base port. - /// @param cmd the command. - /// @return status code. - EXTERN_C Int32 apm_send_io_command(UInt16 cmd, APMPowerCmd value); -} // namespace Kernel diff --git a/dev/Modules/ATA/ATA.h b/dev/Modules/ATA/ATA.h deleted file mode 100644 index d79fdd52..00000000 --- a/dev/Modules/ATA/ATA.h +++ /dev/null @@ -1,156 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - - File: Defines.h - Purpose: ATA header. - - Revision History: - - 03/02/24: Added file (amlel) - -------------------------------------------- */ - -#pragma once - -#ifndef __AHCI__ - -#include -#include - -///! Status register -#define ATA_SR_BSY 0x80 -#define ATA_SR_DRDY 0x40 -#define ATA_SR_DF 0x20 -#define ATA_SR_DSC 0x10 -#define ATA_SR_DRQ 0x08 -#define ATA_SR_CORR 0x04 -#define ATA_SR_IDX 0x02 -#define ATA_SR_ERR 0x01 - -///! Error register -#define ATA_ER_BBK 0x80 -#define ATA_ER_UNC 0x40 -#define ATA_ER_MC 0x20 -#define ATA_ER_IDNF 0x10 -#define ATA_ER_MCR 0x08 -#define ATA_ER_ABRT 0x04 -#define ATA_ER_TK0NF 0x02 -#define ATA_ER_AMNF 0x01 - -#define ATA_CMD_READ_PIO 0x20 -#define ATA_CMD_READ_PIO_EXT 0x24 -#define ATA_CMD_READ_DMA 0xC8 -#define ATA_CMD_READ_DMA_EXT 0x25 -#define ATA_CMD_WRITE_PIO 0x30 -#define ATA_CMD_WRITE_PIO_EXT 0x34 -#define ATA_CMD_WRITE_DMA 0xCA -#define ATA_CMD_WRITE_DMA_EXT 0x35 -#define ATA_CMD_CACHE_FLUSH 0xE7 -#define ATA_CMD_CACHE_FLUSH_EXT 0xEA -#define ATA_CMD_PACKET 0xA0 -#define ATA_CMD_IDENTIFY_PACKET 0xA1 -#define ATA_CMD_IDENTIFY 0xEC - -///! ident offsets, use with data that we got from ATA_CMD_IDENTIFY. -#define ATA_IDENT_DEVICE_TYPE 0 -#define ATA_IDENT_CYLINDERS 2 -#define ATA_IDENT_HEADS 6 -#define ATA_IDENT_SECTORS 12 -#define ATA_IDENT_SERIAL 20 -#define ATA_IDENT_MODEL 54 -#define ATA_IDENT_CAPABILITIES 98 -#define ATA_IDENT_FIELDVALID 106 -#define ATA_IDENT_MAX_LBA 120 -#define ATA_IDENT_COMMANDSETS 164 -#define ATA_IDENT_MAX_LBA_EXT 200 - -#define ATA_MASTER 0x00 -#define ATA_SLAVE 0x01 - -///! Register -#define ATA_REG_DATA 0x00 -#define ATA_REG_ERROR 0x01 -#define ATA_REG_FEATURES 0x01 -#define ATA_REG_SEC_COUNT0 0x02 -#define ATA_REG_LBA0 0x03 -#define ATA_REG_LBA1 0x04 -#define ATA_REG_LBA2 0x05 -#define ATA_REG_HDDEVSEL 0x06 -#define ATA_REG_COMMAND 0x07 -#define ATA_REG_STATUS 0x07 -#define ATA_REG_SEC_COUNT1 0x08 -#define ATA_REG_LBA3 0x09 -#define ATA_REG_LBA4 0x0A -#define ATA_REG_LBA5 0x0B -#define ATA_REG_CONTROL 0x0C -#define ATA_REG_ALT_STATUS 0x0C -#define ATA_REG_DEV_ADDRESS 0x0D - -#define ATA_REG_NEIN 0x01 - -#define ATA_PRIMARY_IO 0x1F0 -#define ATA_SECONDARY_IO 0x170 -#define ATA_PRIMARY_DCR_AS 0x3F6 -#define ATA_SECONDARY_DCR_AS 0x376 - -///! Irq -#define ATA_PRIMARY_IRQ 14 -#define ATA_SECONDARY_IRQ 15 - -///! Channels -#define ATA_PRIMARY 0x00 -#define ATA_SECONDARY 0x01 - -#define ATA_CYL_LOW 3 -#define ATA_CYL_MID 4 -#define ATA_CYL_HIGH 5 - -///! IO Direction -#define ATA_READ 0x00 -#define ATA_WRITE 0x013 - -#define ATA_PRIMARY_SEL 0xA0 -#define ATA_SECONDARY_SEL 0xB0 - -///! ATA address register. -#define ATA_ADDRESS1(x) (x + 3) -#define ATA_ADDRESS2(x) (x + 4) -#define ATA_ADDRESS3(x) (x + 5) - -///! ATA command register. -#define ATA_COMMAND(x) (x + 7) - -#define kATASectorSize (512U) - -enum -{ - kATADevicePATA, - kATADeviceSATA, - kATADevicePATA_PI, - kATADeviceSATA_PI, - kATADeviceCount, -}; - -#if defined(__ATA_PIO__) || defined(__ATA_DMA__) - -Kernel::Boolean drv_std_init(Kernel::UInt16 in_bus, Kernel::UInt8 drive, Kernel::UInt16& out_bus, Kernel::UInt8& out_master); - -Kernel::Boolean drv_std_detected(Kernel::Void); - -Kernel::Void drv_std_select(Kernel::UInt16 bus); - -Kernel::Boolean drv_std_wait_io(Kernel::UInt16 io); - -Kernel::Void drv_std_read(Kernel::UInt64 lba, Kernel::UInt16 io, Kernel::UInt8 is_master, Kernel::Char* buf, Kernel::SizeT sec_sz, Kernel::SizeT buf_sz); - -Kernel::Void drv_std_write(Kernel::UInt64 lba, Kernel::UInt16 io, Kernel::UInt8 is_master, Kernel::Char* buf, Kernel::SizeT sec_sz, Kernel::SizeT buf_sz); - -/// @brief get sector count. -Kernel::SizeT drv_get_sector_count(); - -/// @brief get device size. -Kernel::SizeT drv_get_size(); - -#endif // ifdef __MINOSKRNL__ -#endif // ifndef __ATA_PIO__ || __AHCI__ diff --git a/dev/Modules/Flash/Flash.h b/dev/Modules/Flash/Flash.h deleted file mode 100644 index 9f5d4117..00000000 --- a/dev/Modules/Flash/Flash.h +++ /dev/null @@ -1,21 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#pragma once - -#ifdef ZKA_USE_MBCI_FLASH - -#include - -/// @brief get sector count. -/// @return drive sector count. -Kernel::SizeT drv_get_sector_count(); - -/// @brief get device size. -/// @return drive size -Kernel::SizeT drv_get_size(); - -#endif // ifdef ZKA_USE_MBCI_FLASH diff --git a/dev/Modules/GPRS/.keepme b/dev/Modules/GPRS/.keepme deleted file mode 100644 index e69de29b..00000000 diff --git a/dev/Modules/GfxMgr/AccessibilityMgr.h b/dev/Modules/GfxMgr/AccessibilityMgr.h deleted file mode 100644 index 7507f5c0..00000000 --- a/dev/Modules/GfxMgr/AccessibilityMgr.h +++ /dev/null @@ -1,41 +0,0 @@ -/* ------------------------------------------- - - Copyright Theater Quality Inc. - -------------------------------------------- */ - -#ifndef FB_ACCESSIBILITY_H -#define FB_ACCESSIBILITY_H - -#include -#include -#include -#include -#include - -namespace UI -{ - using namespace Kernel; - - /// @brief common User interface class. - class UIAccessibilty final - { - explicit UIAccessibilty() = default; - ~UIAccessibilty() = default; - - public: - ZKA_COPY_DELETE(UIAccessibilty); - - static Int64 Width() noexcept - { - return kHandoverHeader->f_GOP.f_Width; - } - - static Int64 Height() noexcept - { - return kHandoverHeader->f_GOP.f_Height; - } - }; -} // namespace CG - -#endif // !FB_ACCESSIBILITY_H_ diff --git a/dev/Modules/GfxMgr/FBMgr.h b/dev/Modules/GfxMgr/FBMgr.h deleted file mode 100644 index 0b685ee0..00000000 --- a/dev/Modules/GfxMgr/FBMgr.h +++ /dev/null @@ -1,157 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#pragma once - -#include - -#define fb_init() Kernel::SizeT kCGCursor = 0 - -#define fb_color(R, G, B) RGB(R, G, B) - -#define fb_get_clear_clr() fb_color(0x20, 0x20, 0x20) - -#define fb_fini() kCGCursor = 0 - -/// @brief Performs OR drawing on the framebuffer. -#define FBDrawBitMapInRegionA(_BitMp, _Height, _Width, _BaseX, _BaseY) \ - for (Kernel::SizeT i = _BaseX; i < (_Height + _BaseX); ++i) \ - { \ - for (Kernel::SizeT u = _BaseY; u < (_Width + _BaseY); ++u) \ - { \ - *(((Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \ - 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ - i + \ - 4 * u))) |= (_BitMp)[kCGCursor]; \ - \ - ++kCGCursor; \ - } \ - } - -/// @brief Draws a resource. -#define FBDrawBitMapInRegion(_BitMp, _Height, _Width, _BaseX, _BaseY) \ - for (Kernel::SizeT i = _BaseX; i < (_Height + _BaseX); ++i) \ - { \ - for (Kernel::SizeT u = _BaseY; u < (_Width + _BaseY); ++u) \ - { \ - *(((Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \ - 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ - i + \ - 4 * u))) = (_BitMp)[kCGCursor]; \ - \ - ++kCGCursor; \ - } \ - } - -#define FBDrawBitMapInRegionToRgn(_Rgn, _BitMp, _Height, _Width, _BaseX, _BaseY) \ - for (Kernel::SizeT i = _BaseX; i < (_Height + _BaseX); ++i) \ - { \ - for (Kernel::SizeT u = _BaseY; u < (_Width + _BaseY); ++u) \ - { \ - *(((Kernel::UInt32*)(_Rgn + \ - 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ - i + \ - 4 * u))) = (_BitMp)[kCGCursor]; \ - \ - ++kCGCursor; \ - } \ - } - -/// @brief Cleans a resource. -#define CGClearRegion(_Height, _Width, _BaseX, _BaseY) \ - for (Kernel::SizeT i = _BaseX; i < _Height + _BaseX; ++i) \ - { \ - for (Kernel::SizeT u = _BaseY; u < _Width + _BaseY; ++u) \ - { \ - *(((volatile Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \ - 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ - i + \ - 4 * u))) = fb_get_clear_clr(); \ - } \ - } - -/// @brief Draws inside a zone. -#define FBDrawInRegion(_Clr, _Height, _Width, _BaseX, _BaseY) \ - for (Kernel::SizeT x_base = _BaseX; x_base < (_Width + _BaseX); ++x_base) \ - { \ - for (Kernel::SizeT y_base = _BaseY; y_base < (_Height + _BaseY); ++y_base) \ - { \ - *(((volatile Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \ - 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ - x_base + \ - 4 * y_base))) = _Clr; \ - } \ - } - -/// @brief Draws inside a zone. -#define FBDrawInRegionToRgn(_Rgn, _Clr, _Height, _Width, _BaseX, _BaseY) \ - for (Kernel::SizeT x_base = _BaseX; x_base < (_Width + _BaseX); ++x_base) \ - { \ - for (Kernel::SizeT y_base = _BaseY; y_base < (_Height + _BaseY); ++y_base) \ - { \ - *(((volatile Kernel::UInt32*)(_Rgn + \ - 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ - x_base + \ - 4 * y_base))) = _Clr[kCGCursor]; \ - ++kCGCursor; \ - } \ - } - -#define FBDrawInRegionToVideoRgn(_VideoRgn, _Clr, _Height, _Width, _BaseX, _BaseY) \ - kCGCursor = 0; \ - \ - for (Kernel::SizeT x_base = _BaseX; x_base < (_Width + _BaseX); ++x_base) \ - { \ - for (Kernel::SizeT y_base = _BaseY; y_base < (_Height + _BaseY); ++y_base) \ - { \ - *(((volatile Kernel::UInt32*)(_VideoRgn + \ - 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ - x_base + \ - 4 * y_base))) = _Clr; \ - ++kCGCursor; \ - } \ - } - -#define FBDrawInRegionToVideoRgnA(_VideoRgn, _Clr, _Height, _Width, _BaseX, _BaseY) \ - for (Kernel::SizeT x_base = _BaseX; x_base < (_Width + _BaseX); ++x_base) \ - { \ - for (Kernel::SizeT y_base = _BaseY; y_base < (_Height + _BaseY); ++y_base) \ - { \ - *(((volatile Kernel::UInt32*)(_VideoRgn + \ - 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ - x_base + \ - 4 * y_base))) |= _Clr; \ - ++kCGCursor; \ - } \ - } - -#define FBDrawInRegionA(_Clr, _Height, _Width, _BaseX, _BaseY) \ - for (Kernel::SizeT x_base = _BaseX; x_base < (_Width + _BaseX); ++x_base) \ - { \ - for (Kernel::SizeT y_base = _BaseY; y_base < (_Height + _BaseY); ++y_base) \ - { \ - *(((volatile Kernel::UInt32*)(kHandoverHeader->f_GOP.f_The + \ - 4 * kHandoverHeader->f_GOP.f_PixelPerLine * \ - x_base + \ - 4 * y_base))) |= _Clr; \ - } \ - } - -#include - -namespace UI -{ - inline void ui_draw_background() noexcept - { - fb_init(); - - FBDrawInRegion(fb_get_clear_clr(), UI::UIAccessibilty::Height(), UI::UIAccessibilty::Width(), - 0, 0); - - fb_fini(); - } - -} // namespace UI \ No newline at end of file diff --git a/dev/Modules/GfxMgr/MathMgr.h b/dev/Modules/GfxMgr/MathMgr.h deleted file mode 100644 index 13e653a5..00000000 --- a/dev/Modules/GfxMgr/MathMgr.h +++ /dev/null @@ -1,29 +0,0 @@ -/* ------------------------------------------- - - Copyright Theater Quality Inc. - -------------------------------------------- */ - -#pragma once - -/// @file MathMgr.h -/// @brief Linear interpolation implementation. - -namespace UI -{ -#ifdef ZKA_FB_USE_DOUBLE - typedef double fb_real_t; -#else - typedef float fb_real_t; -#endif - - /// @brief Linear interpolation equation solver. - /// @param from where? - /// @param to to? - /// @param at which state we're at **to**. - inline fb_real_t fb_math_lerp(fb_real_t to, fb_real_t from, fb_real_t stat) - { - fb_real_t difference = to - from; - return from + (difference * stat); - } -} // namespace UI \ No newline at end of file diff --git a/dev/Modules/GfxMgr/Rsrc/Controls.rsrc b/dev/Modules/GfxMgr/Rsrc/Controls.rsrc deleted file mode 100644 index 1534656e..00000000 --- a/dev/Modules/GfxMgr/Rsrc/Controls.rsrc +++ /dev/null @@ -1,61 +0,0 @@ -#define FLAT_CONTROLS_HEIGHT 24 -#define FLAT_CONTROLS_WIDTH 44 - -// array size is 3168 -static inline const unsigned int zka_flat_controls[] = { - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0xe0e0e0, 0xe0e0e0, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0xe0e0e0, 0xe0e0e0, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x3e3e3e, 0xe0e0e0, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xe0e0e0, 0x3e3e3e, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, - 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff -}; - -#define FLAT_CONTROLS_CLOSE_HEIGHT 24 -#define FLAT_CONTROLS_CLOSE_WIDTH 44 - -// array size is 3168 -static inline const unsigned int zka_flat_controls_active[] = { - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xee3636, 0xee3535, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xee3636, 0xee3535, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xfac7c7, 0xee3636, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xee3535, 0xfac7c7, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, - 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616, 0xeb1616 -}; diff --git a/dev/Modules/GfxMgr/Rsrc/Cursor.rsrc b/dev/Modules/GfxMgr/Rsrc/Cursor.rsrc deleted file mode 100644 index 2283cb32..00000000 --- a/dev/Modules/GfxMgr/Rsrc/Cursor.rsrc +++ /dev/null @@ -1,64 +0,0 @@ -#define cCurHeight (57) -#define cCurWidth (53) - -#define cCurLength (3021) - -static const unsigned int Cursor[cCurLength] = { - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e0e0e, 0x474747, 0x474747, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e0e0e, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xdedede, 0x363636, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x0e0e0e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x878787, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x363636, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xa5a5a5, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x979797, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x686868, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xdedede, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x686868, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xa5a5a5, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x585858, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e0e0e, 0x585858, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x363636, 0x000000, 0x000000, 0x000000, 0x686868, 0xebebeb, 0xf9f9f9, 0x969696, 0x000000, 0x000000, 0x000000, 0x222222, 0xdedede, 0xf9f9f9, 0xdedede, 0x0e0e0e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x787878, 0x000000, 0x000000, 0x000000, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x787878, 0x000000, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x575757, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x000000, 0x222222, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x979797, 0x000000, 0x000000, 0x000000, 0x969696, 0xf9f9f9, 0xdedede, 0x0e0e0e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x000000, 0x000000, 0x000000, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x0e0e0e, 0x000000, 0x000000, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xdedede, 0x000000, 0x000000, 0x000000, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0x575757, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x000000, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x000000, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x000000, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0x979797, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x878787, 0x000000, 0x000000, 0x585858, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x979797, 0x000000, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x686868, 0x000000, 0x000000, 0x777777, 0xf9f9f9, 0xf9f9f9, 0xdedede, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e0e0e, 0x474747, 0x474747, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x777777, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xcfcfcf, 0x000000, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xa5a5a5, 0x000000, 0x000000, 0x363636, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e0e0e, 0xb3b3b3, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xdedede, 0x686868, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x363636, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x222222, 0x222222, 0x363636, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x787878, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xdedede, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x979797, 0x686868, 0x686868, 0xcfcfcf, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xcfcfcf, 0xd0d0d0, 0xdedede, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xa5a5a5, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xa5a5a5, 0x222222, 0x000000, 0x000000, 0xa5a5a5, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x787878, 0x000000, 0x000000, 0x686868, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x787878, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x0e0e0e, 0x000000, 0x000000, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x222222, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x222222, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x000000, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x979797, 0x000000, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x878787, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x787878, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xcfcfcf, 0x000000, 0x000000, 0x585858, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x000000, 0x000000, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x363636, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x686868, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x222222, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xd0d0d0, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x686868, 0x000000, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x474747, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x878787, 0x000000, 0x585858, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xb3b3b3, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0xa5a5a5, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x000000, 0x0e0e0e, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0x878787, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x0e0e0e, 0x000000, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x686868, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x000000, 0x000000, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x969696, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xcfcfcf, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xb3b3b3, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0x979797, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xa5a5a5, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x0e0e0e, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x000000, 0x0e0e0e, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x686868, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x787878, 0x000000, 0x777777, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x0e0e0e, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0xb4b4b4, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x0e0e0e, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e0e0e, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x0e0e0e, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0x878787, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0x979797, 0x000000, 0x686868, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xa5a5a5, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0xb4b4b4, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x000000, 0x000000, 0xebebeb, 0xf9f9f9, 0xdedede, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x686868, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcfcfcf, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x979797, 0x000000, 0x474747, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x474747, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0x363636, 0x000000, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x878787, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xececec, 0x0e0e0e, 0x000000, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0x878787, 0x000000, 0x777777, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xa5a5a5, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x343434, 0xebebeb, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x575757, 0x000000, 0x878787, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x222222, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xb3b3b3, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x343434, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x0e0e0e, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x222222, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x222222, 0x222222, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xc2c2c2, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x686868, 0xdedede, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x686868, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x777777, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xdedede, 0x222222, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xcfcfcf, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0x585858, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x222222, 0xc2c2c2, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xf9f9f9, 0xebebeb, 0x585858, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x474747, 0x878787, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0xa5a5a5, 0x979797, 0x686868, 0x0e0e0e, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, - 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000 -}; diff --git a/dev/Modules/GfxMgr/TextMgr.h b/dev/Modules/GfxMgr/TextMgr.h deleted file mode 100644 index 970fbb8e..00000000 --- a/dev/Modules/GfxMgr/TextMgr.h +++ /dev/null @@ -1,178 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#pragma once - -#include -#include - -#define FONT_SIZE_X 8 -#define FONT_SIZE_Y 8 -#define FONT_NOF_CHARS 128 - -inline const Kernel::UInt8 kFontBitmap[FONT_NOF_CHARS][FONT_SIZE_X] = { - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0000 (nul) - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0001 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0002 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0003 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0004 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0005 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0006 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0007 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0008 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0009 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000A - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000B - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000C - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000D - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000E - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+000F - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0010 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0011 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0012 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0013 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0014 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0015 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0016 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0017 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0018 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0019 - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001A - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001B - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001C - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001D - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001E - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+001F - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0020 (space) - {0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00}, // U+0021 (!) - {0x36, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0022 (") - {0x36, 0x36, 0x7F, 0x36, 0x7F, 0x36, 0x36, 0x00}, // U+0023 (#) - {0x0C, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x0C, 0x00}, // U+0024 ($) - {0x00, 0x63, 0x33, 0x18, 0x0C, 0x66, 0x63, 0x00}, // U+0025 (%) - {0x1C, 0x36, 0x1C, 0x6E, 0x3B, 0x33, 0x6E, 0x00}, // U+0026 (&) - {0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0027 (') - {0x18, 0x0C, 0x06, 0x06, 0x06, 0x0C, 0x18, 0x00}, // U+0028 (() - {0x06, 0x0C, 0x18, 0x18, 0x18, 0x0C, 0x06, 0x00}, // U+0029 ()) - {0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00}, // U+002A (*) - {0x00, 0x0C, 0x0C, 0x3F, 0x0C, 0x0C, 0x00, 0x00}, // U+002B (+) - {0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+002C (,) - {0x00, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x00, 0x00}, // U+002D (-) - {0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+002E (.) - {0x60, 0x30, 0x18, 0x0C, 0x06, 0x03, 0x01, 0x00}, // U+002F (/) - {0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // U+0030 (0) - {0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // U+0031 (1) - {0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // U+0032 (2) - {0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // U+0033 (3) - {0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // U+0034 (4) - {0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // U+0035 (5) - {0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // U+0036 (6) - {0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // U+0037 (7) - {0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // U+0038 (8) - {0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // U+0039 (9) - {0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x00}, // U+003A (:) - {0x00, 0x0C, 0x0C, 0x00, 0x00, 0x0C, 0x0C, 0x06}, // U+003B (;) - {0x18, 0x0C, 0x06, 0x03, 0x06, 0x0C, 0x18, 0x00}, // U+003C (<) - {0x00, 0x00, 0x3F, 0x00, 0x00, 0x3F, 0x00, 0x00}, // U+003D (=) - {0x06, 0x0C, 0x18, 0x30, 0x18, 0x0C, 0x06, 0x00}, // U+003E (>) - {0x1E, 0x33, 0x30, 0x18, 0x0C, 0x00, 0x0C, 0x00}, // U+003F (?) - {0x3E, 0x63, 0x7B, 0x7B, 0x7B, 0x03, 0x1E, 0x00}, // U+0040 (@) - {0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // U+0041 (A) - {0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // U+0042 (B) - {0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // U+0043 (C) - {0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // U+0044 (D) - {0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // U+0045 (E) - {0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // U+0046 (F) - {0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // U+0047 (G) - {0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // U+0048 (H) - {0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0049 (I) - {0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // U+004A (J) - {0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // U+004B (K) - {0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // U+004C (L) - {0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // U+004D (M) - {0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // U+004E (N) - {0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // U+004F (O) - {0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // U+0050 (P) - {0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // U+0051 (Q) - {0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // U+0052 (R) - {0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // U+0053 (S) - {0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0054 (T) - {0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // U+0055 (U) - {0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0056 (V) - {0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // U+0057 (W) - {0x63, 0x63, 0x36, 0x1C, 0x1C, 0x36, 0x63, 0x00}, // U+0058 (X) - {0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // U+0059 (Y) - {0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // U+005A (Z) - {0x1E, 0x06, 0x06, 0x06, 0x06, 0x06, 0x1E, 0x00}, // U+005B ([) - {0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0x40, 0x00}, // U+005C (\) - {0x1E, 0x18, 0x18, 0x18, 0x18, 0x18, 0x1E, 0x00}, // U+005D (]) - {0x08, 0x1C, 0x36, 0x63, 0x00, 0x00, 0x00, 0x00}, // U+005E (^) - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF}, // U+005F (_) - {0x0C, 0x0C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+0060 (`) - {0x00, 0x00, 0x1E, 0x30, 0x3E, 0x33, 0x6E, 0x00}, // U+0061 (a) - {0x07, 0x06, 0x06, 0x3E, 0x66, 0x66, 0x3B, 0x00}, // U+0062 (b) - {0x00, 0x00, 0x1E, 0x33, 0x03, 0x33, 0x1E, 0x00}, // U+0063 (c) - {0x38, 0x30, 0x30, 0x3e, 0x33, 0x33, 0x6E, 0x00}, // U+0064 (d) - {0x00, 0x00, 0x1E, 0x33, 0x3f, 0x03, 0x1E, 0x00}, // U+0065 (e) - {0x1C, 0x36, 0x06, 0x0f, 0x06, 0x06, 0x0F, 0x00}, // U+0066 (f) - {0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0067 (g) - {0x07, 0x06, 0x36, 0x6E, 0x66, 0x66, 0x67, 0x00}, // U+0068 (h) - {0x0C, 0x00, 0x0E, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+0069 (i) - {0x30, 0x00, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E}, // U+006A (j) - {0x07, 0x06, 0x66, 0x36, 0x1E, 0x36, 0x67, 0x00}, // U+006B (k) - {0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // U+006C (l) - {0x00, 0x00, 0x33, 0x7F, 0x7F, 0x6B, 0x63, 0x00}, // U+006D (m) - {0x00, 0x00, 0x1F, 0x33, 0x33, 0x33, 0x33, 0x00}, // U+006E (n) - {0x00, 0x00, 0x1E, 0x33, 0x33, 0x33, 0x1E, 0x00}, // U+006F (o) - {0x00, 0x00, 0x3B, 0x66, 0x66, 0x3E, 0x06, 0x0F}, // U+0070 (p) - {0x00, 0x00, 0x6E, 0x33, 0x33, 0x3E, 0x30, 0x78}, // U+0071 (q) - {0x00, 0x00, 0x3B, 0x6E, 0x66, 0x06, 0x0F, 0x00}, // U+0072 (r) - {0x00, 0x00, 0x3E, 0x03, 0x1E, 0x30, 0x1F, 0x00}, // U+0073 (s) - {0x08, 0x0C, 0x3E, 0x0C, 0x0C, 0x2C, 0x18, 0x00}, // U+0074 (t) - {0x00, 0x00, 0x33, 0x33, 0x33, 0x33, 0x6E, 0x00}, // U+0075 (u) - {0x00, 0x00, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // U+0076 (v) - {0x00, 0x00, 0x63, 0x6B, 0x7F, 0x7F, 0x36, 0x00}, // U+0077 (w) - {0x00, 0x00, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x00}, // U+0078 (x) - {0x00, 0x00, 0x33, 0x33, 0x33, 0x3E, 0x30, 0x1F}, // U+0079 (y) - {0x00, 0x00, 0x3F, 0x19, 0x0C, 0x26, 0x3F, 0x00}, // U+007A (z) - {0x38, 0x0C, 0x0C, 0x07, 0x0C, 0x0C, 0x38, 0x00}, // U+007B ({) - {0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00}, // U+007C (|) - {0x07, 0x0C, 0x0C, 0x38, 0x0C, 0x0C, 0x07, 0x00}, // U+007D (}) - {0x6E, 0x3B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // U+007E (~) - {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // U+007F - -}; - -inline Kernel::Void fb_render_string_for_bitmap(const Kernel::UInt8* bitmap, const Kernel::SizeT& x_sz, const Kernel::SizeT& y_sz, Kernel::Int32& x_dst, Kernel::Int32& y_dst, Kernel::Int32& color) -{ - Kernel::Int32 x, y; - Kernel::Int32 set; - - x = 0; - y = 0; - set = 0; - - for (; y < y_sz; ++y) - { - for (x = 0; x < x_sz; ++x) - { - set = bitmap[x] & (1 << y); - - if (set) - { - FBDrawInRegion(color, 1, 1, ((x_dst) + x), ((y_dst) + y)); - } - } - } -} - -inline Kernel::Void fb_render_string(const Kernel::Char* text, Kernel::Int32 x_dst, Kernel::Int32 y_dst, Kernel::Int32 color) -{ - for (Kernel::SizeT i = 0; text[i] != 0; ++i) - { - fb_render_string_for_bitmap(&kFontBitmap[text[i]][0], FONT_SIZE_X, FONT_SIZE_Y, x_dst, y_dst, color); - y_dst += FONT_SIZE_Y; - } -} diff --git a/dev/Modules/HPET/.gitkeep b/dev/Modules/HPET/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/dev/Modules/HPET/Defines.h b/dev/Modules/HPET/Defines.h deleted file mode 100644 index 813e6884..00000000 --- a/dev/Modules/HPET/Defines.h +++ /dev/null @@ -1,42 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - - File: HPET.h - Purpose: HPET builtin. - - Revision History: - -------------------------------------------- */ - -#pragma once - -#include -#include - -namespace Kernel -{ - struct PACKED HPETAddressStructure final - { - Kernel::UInt8 AddressSpaceId; // 0 - system memory, 1 - system I/O - Kernel::UInt8 RegisterBitWidth; - Kernel::UInt8 RegisterBitOffset; - Kernel::UInt8 Reserved; - Kernel::UInt64 Address; - }; - - struct PACKED HPETHeader final : public SDT - { - Kernel::UInt8 HardwareRevId; - Kernel::UInt8 ComparatorCount : 5; - Kernel::UInt8 CounterSize : 1; - Kernel::UInt8 Reserved : 1; - Kernel::UInt8 LegacyReplacement : 1; - Kernel::UInt16 PciVendorId; - HPETAddressStructure Address; - Kernel::UInt8 HpetNumber; - Kernel::UInt16 MinimumTick; - Kernel::UInt8 PageProtection; - }; - -} // namespace Kernel diff --git a/dev/Modules/IEEE802/.gitkeep b/dev/Modules/IEEE802/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/dev/Modules/LTE/LTE.h b/dev/Modules/LTE/LTE.h deleted file mode 100644 index a5327df9..00000000 --- a/dev/Modules/LTE/LTE.h +++ /dev/null @@ -1,40 +0,0 @@ -/* ------------------------------------------- - -Copyright (C) 2024, Theater Quality Inc, all rights reserved.. - -File: LTE\LTE.h. -Purpose: LTE Standard Library. - -------------------------------------------- */ - -#ifndef _INC_NETWORK_LTE_H_ -#define _INC_NETWORK_LTE_H_ - -#include -#include - -/// @brief Long Term Evolution I/O routines. - -/// @brief Turn on SIM slot. -Kernel::Boolean lte_turn_on_sim(Kernel::Int32 simSlot); - -/// @brief Turn off SIM slot. -Kernel::Boolean lte_turn_off_sim(Kernel::Int32 simSlot); - -/// @brief Send AT command. -Kernel::Boolean lte_send_at_command(Kernel::Char* buf, - Kernel::Size bufReadSz, - Kernel::Int32 simSlot); - -Kernel::Boolean lte_write_sim_file(Kernel::Char* file, - Kernel::VoidPtr buf, - Kernel::Size bufSz, - Kernel::Size offset, - Kernel::Int32 simSlot); - -Kernel::VoidPtr lte_read_sim_file(Kernel::Char* file, - Kernel::Size bufSz, - Kernel::Size offset, - Kernel::Int32 simSlot); - -#endif // ifndef _INC_NETWORK_LTE_H_ diff --git a/dev/Modules/MBCI/Interface.h b/dev/Modules/MBCI/Interface.h deleted file mode 100644 index 9186ba24..00000000 --- a/dev/Modules/MBCI/Interface.h +++ /dev/null @@ -1,10 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#pragma once - -#include -#include diff --git a/dev/Modules/MBCI/MBCI.h b/dev/Modules/MBCI/MBCI.h deleted file mode 100644 index ac620972..00000000 --- a/dev/Modules/MBCI/MBCI.h +++ /dev/null @@ -1,98 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#ifndef _INC_MODULE_MBCI_H_ -#define _INC_MODULE_MBCI_H_ - -#include -#include - -/** -- VCC (IN) (OUT for MCU) -- CLK (IN) (OUT for MCU) -- ACK (BI) (Contains an Acknowledge Packet Frame) -- D0- (IN) (Starts with the Host Interface Packet Frame) -- D1- (IN) (Starts with the Host Interface Packet Frame) -- D0+ (OUT) (Starts with the Host Interface Packet Frame) -- D1+ (OUT) (Starts with the Host Interface Packet Frame) -- GND (IN) (OUT for MCU) - */ - -#define kMBCIZeroSz (8) - -namespace Kernel -{ - struct IMBCIHost; - struct IMBCIHostPacketFrame; - - /// @brief MBCI Packet frame header - struct PACKED IMBCIHostPacketFrame final - { - UInt32 Magic; - UInt32 HostId; - UInt32 Flags; - UInt32 VendorId; - UInt32 DeviceId; - UInt32 DeviceSpeed; - Bool Acknowledge; - Char Zero[kMBCIZeroSz]; - }; - - enum - { - kMBCISpeedDeviceInvalid, - kMBCILowSpeedDevice, - kMBCIHighSpeedDevice, - kMBCISpeedDeviceCount, - }; - - /// @brief MBCI Host Interface header. - struct PACKED IMBCIHost final - { - UInt32 Magic; - UInt32 HostId; - UInt16 VendorId; - UInt16 DeviceId; - UInt8 MemoryType; - UInt16 HostType; - UInt16 HostFlags; - UInt8 Error; - UInt8 Status; - UInt8 InterruptEnable; - UInt64 BaseAddressRegister; - UInt64 BaseAddressRegisterSize; - Char Zero[kMBCIZeroSz]; - }; - - /// @brief MBCI host flags. - enum MBCIHostFlags - { - kMBCIHostFlagsSupportsNothing, // Invalid MBCI device. - kMBCIHostFlagsSupportsAPM, // Advanced Power Management. - kMBCIHostFlagsSupportsDaisyChain, // Is daisy chained. - kMBCIHostFlagsSupportsHWInterrupts, // Has HW interrupts. - kMBCIHostFlagsSupportsDMA, // Has DMA. - kMBCIHostFlagsExtended = __UINT16_MAX__, // Extended flags table. - }; - - enum MBCIHostKind - { - kMBCIHostKindHardDisk, - kMBCIHostKindOpticalDisk, - kMBCIHostKindKeyboardLow, - kMBCIHostKindMouseLow, - kMBCIHostKindMouseHigh, - kMBCIHostKindKeyboardHigh, - kMBCIHostKindNetworkInterface, - kMBCIHostKindDaisyChain, - kMBCIHostKindStartExtended = __UINT16_MAX__, // Extended vendor table limit. - }; - - /// @brief An AuthKey is a context used to decrpy data from an MBCI packet. - typedef UInt64 MBCIAuthyKeyType; -} // namespace Kernel - -#endif // ifndef _INC_MODULE_MBCI_H_ diff --git a/dev/Modules/NVME/NVME.h b/dev/Modules/NVME/NVME.h deleted file mode 100644 index 2d77a769..00000000 --- a/dev/Modules/NVME/NVME.h +++ /dev/null @@ -1,112 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - - Revision History: - - ??/??/24: Added file (amlel) - 23 Jul 24: Update filename to Defines.h and using ALIGN_NVME for NVME structs. (amlel) - -------------------------------------------- */ - -#ifndef __MODULE_NVME_H__ -#define __MODULE_NVME_H__ - -#include - -/// TODO: checklist in: https://wiki.osdev.org/NVMe - -#define ALIGN_NVME ATTRIBUTE(aligned(sizeof(Kernel::UInt32))) - -namespace Kernel -{ - struct ALIGN_NVME HAL_NVME_BAR_0 final - { - UInt32 fCapabilities; - UInt32 fVersion; - UInt32 fIntMaskSet; - UInt32 fIntMaskClr; - UInt32 fContrlConf; - UInt32 fContrlStat; - UInt32 fAdminQueueAttr; - UInt32 fAdminSubmissionQueue; - UInt32 fAdminCompletionQueue; - }; - - struct ALIGN_NVME HAL_NVME_QUEUE final - { - UInt32 fOpcode; - UInt32 fNSID; - UInt32 fReserved[3]; - UInt32 fMetadataPtr[5]; - UInt32 fDataPtr[9]; - UInt32 CommandSpecific[15]; - }; - - enum - { - kCreateCompletionQueueNVME = 0x05, - kCreateSubmissionQueueNVME = 0x01, - kIdentifyNVME = 0x06, - kReadNVME = 0x02, - kWriteNVME = 0x01, - }; - - /// @brief Creates an admin command for a DMA operation. - template - inline Bool nvme_create_admin_command(HAL_NVME_QUEUE* entry, UInt32 nsid, UInt32 prpTransfer[3], UInt32 startingLba[2], UInt32 lowTransferBlocks) - { - if (entry == nullptr) - return false; - - entry->CommandSpecific[9] = startingLba[0]; - entry->CommandSpecific[10] = startingLba[1]; - - entry->CommandSpecific[11] = lowTransferBlocks; - - entry->CommandSpecific[5] = prpTransfer[0]; - entry->CommandSpecific[6] = prpTransfer[1]; - entry->CommandSpecific[7] = prpTransfer[2]; - - entry->CommandSpecific[0] = nsid; - - return true; - } - - /// @brief Creates an I/O command for a DMA operation. - template - inline Bool nvme_create_io_command(HAL_NVME_QUEUE* entry, UInt64 baseAddress, UInt32 identLoAndQueueSizeHi, UInt32 flagsLoAndQueueComplIdHi, UInt32 identify, Bool provideIdentify = false, Bool namespaceIdentify = false) - { - if (entry == nullptr) - return false; - - if (baseAddress == 0) - return false; - - entry->fOpcode = Opcode; - - entry->CommandSpecific[5] = (baseAddress & 0xFF); - entry->CommandSpecific[6] = static_cast(baseAddress); - - if (!provideIdentify) - { - entry->CommandSpecific[9] = identLoAndQueueSizeHi; - entry->CommandSpecific[10] = flagsLoAndQueueComplIdHi; - } - else - { - entry->CommandSpecific[9] = identify; - - if (namespaceIdentify) - { - entry->CommandSpecific[0] = 1; - } - } - - // Use (1 << 0) as contigunous is better supported. - - return true; - } -} // namespace Kernel - -#endif // ifndef __MODULE_NVME_H__ diff --git a/dev/Modules/OHCI/.gitkeep b/dev/Modules/OHCI/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/dev/Modules/ReadMe.md b/dev/Modules/ReadMe.md deleted file mode 100644 index bdb7fb69..00000000 --- a/dev/Modules/ReadMe.md +++ /dev/null @@ -1,12 +0,0 @@ -# Kernel Modules - -## Brief - -They are pluggable modules for builtin hardware support. - -## To-Do - -- [X] AHCI kernel module. -- [X] MBCI kernel module. - -###### Copyright (C) 2024, Theater Quality Inc, all rights reserved. All rights reserved. diff --git a/dev/Modules/SCSI/.gitkeep b/dev/Modules/SCSI/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/dev/Modules/SCSI/SCSI.h b/dev/Modules/SCSI/SCSI.h deleted file mode 100644 index 917c963e..00000000 --- a/dev/Modules/SCSI/SCSI.h +++ /dev/null @@ -1,15 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#pragma once - -#include - -/// @file SCSI.h -/// @brief Serial SCSI driver. - -template -using scsi_packet_type = Kernel::UInt16[PacketBitLen]; diff --git a/dev/Modules/WiFi/.gitkeep b/dev/Modules/WiFi/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/dev/Modules/XHCI/.gitkeep b/dev/Modules/XHCI/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/dev/Modules/XHCI/Defines.h b/dev/Modules/XHCI/Defines.h deleted file mode 100644 index 6758cf33..00000000 --- a/dev/Modules/XHCI/Defines.h +++ /dev/null @@ -1,70 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - - File: Defines.h - Purpose: XHCI (and backwards) header. - - Revision History: - - 01/02/24: Added file (amlel) - 03/02/24: Update filename to Defines.h (amlel) - -------------------------------------------- */ - -#pragma once - -#include - -using namespace Kernel; - -#define kUSBCommand (UInt16)0x0 -#define kUSBStatus (UInt16)0x2 -#define kUSBInterruptEnable (UInt16)0x4 -#define kUSBFrameNum (UInt16)0x6 -#define kUSBFrameListBaseAddress (UInt16)0x8 -#define kUSBFrameModifyStart (UInt16)0xC -#define kUSBPort1StatusCtrl (UInt16)0x10 -#define kUSBPort2StatusCtrl (UInt16)0x12 - -typedef struct USBCommandRegister final -{ - UInt8 mReserved[8]; // Reserved - UInt8 - mMaxPacket; // 0 = Max packet size 32 bits 1 = Max packet size 64 bits - UInt8 mConfigure; - UInt8 mSoftwareDebug; - UInt8 mGlobalResume; - UInt8 mGlobalSuspend; - UInt8 mHostCtrlReset; - UInt8 mRun; // 1 = Controller execute frame list entries -} USBCommandRegister; - -typedef struct USBStatusRegister final -{ - UInt8 mReserved[8]; // Reserved - UInt8 mHalted; // 1 = bit 0 in CMD is zero 0 = bit 0 in CMD is 1 - UInt8 mProcessError; - UInt8 mSystemError; - UInt8 mResumeDetected; - UInt8 mErrorInterrupt; - UInt8 mInterrupt; -} USBStatusRegister; - -typedef struct USBInterruptEnableRegister final -{ - UInt8 mReserved[4]; // Reserved - UInt8 mShortPacket; // 1=Enable interrupt 0=Disable interrupt - UInt8 mComplete; // 1=Enable interrupt 0=Disable interrupt - UInt8 mResume; // 1=Enable interrupt 0=Disable interrupt - UInt8 mTimeoutCRC; // 1=Enable interrupt 0=Disable interrupt -} USBInterruptEnableRegister; - -/* - Some terminology: - - Frame Number: Number of processed entry of the Frame List. - Frame List Base Address: - 32-bit physical adress of Frame List. Remember that first 12 bytes are - always 0. The Frame List must contain 1024 entries. -*/ diff --git a/dev/SCIKit/CompilerHint.h b/dev/SCIKit/CompilerHint.h deleted file mode 100644 index 3365bac2..00000000 --- a/dev/SCIKit/CompilerHint.h +++ /dev/null @@ -1,25 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#ifndef SCI_HINT_H -#define SCI_HINT_H - -#ifdef __TK__ -#pragma compiler(hint_manifest) -#endif - -#define _Input -#define _Output - -#define _Optional - -#define _StrictCheckInput -#define _StrictCheckOutput - -#define _InOut -#define _StrictInOut - -#endif // ifndef SCI_HINT_H diff --git a/dev/SCIKit/GPU.h b/dev/SCIKit/GPU.h deleted file mode 100644 index 8a1af4ca..00000000 --- a/dev/SCIKit/GPU.h +++ /dev/null @@ -1,50 +0,0 @@ -/* ------------------------------------------- - -Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -File: GPU.h -Purpose: GFX System Calls. - -------------------------------------------- */ - -#ifndef SCIKIT_GPU_H -#define SCIKIT_GPU_H - -#include - -// ------------------------------------------------------------------------------------------ // -// GPU API. -// ------------------------------------------------------------------------------------------ // - -// ------------------------------------------------------------------------------------------ // -// @brief Command buffer structure type. -// ------------------------------------------------------------------------------------------ // -struct GPU_CMD_BUFFER final -{ - SizeT X, Y, Z; - VoidPtr FrameData; - SizeT FrameDataSz; - SizeT BackBufferLayer; - Bool IsGPGPUData; - Bool BackBufferFirst; - - Bool isGPGPUData() - { - return !this->BackBufferFirst && this->IsGPGPUData; - } - - Bool isValid() - { - return this->FrameData && this->FrameDataSz > 0; - } -}; - -typedef VoidPtr GPUObject; - -IMPORT_C GPUObject GPUNewFromDeviceName(_Input const Char* device_name); - -IMPORT_C SInt32 GPUDisposeDevice(GPUObject gpu_handle, Bool cancel_all, Bool flush_all); - -IMPORT_C SInt32 GPUSendCmdBufferListWithCnt(GPU_CMD_BUFFER** cmd_list, SizeT cmd_list_cnt); - -#endif // ifndef SCIKIT_GPU_H diff --git a/dev/SCIKit/LPC.h b/dev/SCIKit/LPC.h deleted file mode 100644 index 717c32ec..00000000 --- a/dev/SCIKit/LPC.h +++ /dev/null @@ -1,54 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#pragma once - -#include - -/// @file LPC.h -/// @brief Local Process Code type and values. - -#define err_local_ok() (kLastError == kErrorSuccess) -#define err_local_fail() (kLastError != kErrorSuccess) -#define err_local_get() (kLastError) - -typedef SInt32 ErrObject; - -inline constexpr ErrObject kErrorSuccess = 0; -inline constexpr ErrObject kErrorExecutable = 33; -inline constexpr ErrObject kErrorExecutableLib = 34; -inline constexpr ErrObject kErrorFileNotFound = 35; -inline constexpr ErrObject kErrorDirectoryNotFound = 36; -inline constexpr ErrObject kErrorDiskReadOnly = 37; -inline constexpr ErrObject kErrorDiskIsFull = 38; -inline constexpr ErrObject kErrorProcessFault = 39; -inline constexpr ErrObject kErrorSocketHangUp = 40; -inline constexpr ErrObject kErrorThreadLocalStorage = 41; -inline constexpr ErrObject kErrorMath = 42; -inline constexpr ErrObject kErrorNoNetwork = 43; -inline constexpr ErrObject kErrorHeapOutOfMemory = 44; -inline constexpr ErrObject kErrorNoSuchDisk = 45; -inline constexpr ErrObject kErrorFileExists = 46; -inline constexpr ErrObject kErrorFormatFailed = 47; -inline constexpr ErrObject kErrorNetworkTimeout = 48; -inline constexpr ErrObject kErrorInternal = 49; -inline constexpr ErrObject kErrorForkAlreadyExists = 50; -inline constexpr ErrObject kErrorOutOfTeamSlot = 51; -inline constexpr ErrObject kErrorHeapNotPresent = 52; -inline constexpr ErrObject kErrorNoEntrypoint = 53; -inline constexpr ErrObject kErrorDiskIsCorrupted = 54; -inline constexpr ErrObject kErrorDisk = 55; -inline constexpr ErrObject kErrorInvalidData = 56; -inline constexpr ErrObject kErrorAsync = 57; -inline constexpr ErrObject kErrorNonBlocking = 58; -inline constexpr ErrObject kErrorIPC = 59; -inline constexpr ErrObject kErrorSign = 60; -inline constexpr ErrObject kErrorInvalidCreds = 61; -inline constexpr ErrObject kErrorCDTrayBroken = 62; -inline constexpr ErrObject kErrorUnimplemented = 0; - -/// @brief The last error reported by the system to the process. -IMPORT_C ErrObject kLastError; diff --git a/dev/SCIKit/Macros.h b/dev/SCIKit/Macros.h deleted file mode 100644 index cbeb67eb..00000000 --- a/dev/SCIKit/Macros.h +++ /dev/null @@ -1,56 +0,0 @@ -/* ------------------------------------------- - -Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -File: Macros.h -Purpose: SCIKit Macros header. - -------------------------------------------- */ - -#pragma once - -/***********************************************************************************/ -/// @file SCIKit/Macros.h -/// @brief Macros and core types. -/***********************************************************************************/ - -#include - -#define ATTRIBUTE(X) __attribute__((X)) -#define IMPORT_CXX extern "C++" -#define IMPORT_C extern "C" - -#define DEPRECATED ATTRIBUTE(deprecated) - -typedef bool Bool; -typedef void Void; - -typedef __UINT64_TYPE__ UInt64; -typedef __UINT32_TYPE__ UInt32; -typedef __UINT16_TYPE__ UInt16; -typedef __UINT8_TYPE__ UInt8; - -typedef __SIZE_TYPE__ SizeT; - -typedef __INT64_TYPE__ SInt64; -typedef __INT32_TYPE__ SInt32; -typedef __INT16_TYPE__ SInt16; -typedef __INT8_TYPE__ SInt8; - -typedef void* VoidPtr; -typedef __UINTPTR_TYPE__ UIntPtr; -typedef char Char; - -typedef VoidPtr SCIObject; - -typedef SCIObject IOObject; -typedef IOObject FSObject; -typedef SCIObject DLLObject; -typedef SCIObject ThreadObject; -typedef SCIObject SocketObject; - -#ifdef SYSCALL_DECL -#undef SYSCALL_DECL -#endif // SYSCALL_DECL - -#define SYSCALL_DECL(NAME, ...) IMPORT_C VoidPtr NAME(__VA_ARGS__); diff --git a/dev/SCIKit/SCI.h b/dev/SCIKit/SCI.h deleted file mode 100644 index 5b32a2fd..00000000 --- a/dev/SCIKit/SCI.h +++ /dev/null @@ -1,264 +0,0 @@ -/* ------------------------------------------- - -Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -File: SCI.h -Purpose: System Calls. - -------------------------------------------- */ - -#ifndef SCIKIT_FOUNDATION_H -#define SCIKIT_FOUNDATION_H - -#include - -// ------------------------------------------------------------------------------------------ // -/// @brief Dynamic Loader API. -// ------------------------------------------------------------------------------------------ // - -/// @brief Get function which is part of the DLL. -/// @param symbol the symbol to look for -/// @param dll_handle the DLL handle. -/// @return the proc pointer. -IMPORT_C SCIObject LdrGetDLLSymbolFromHandle(_Input const Char* symbol, _Input SCIObject dll_handle); - -/// @brief Open DLL handle. -/// @param path -/// @param drv -/// @return -IMPORT_C SCIObject LdrOpenDLLHandle(_Input const Char* path, _Input const Char* drive_letter); - -/// @brief Close DLL handle -/// @param dll_handle -/// @return -IMPORT_C Void LdrCloseDLLHandle(_Input SCIObject* dll_handle); - -// ------------------------------------------------------------------------------------------ // -// File API. -// ------------------------------------------------------------------------------------------ // - -/// @brief Opens a file from a drive. -/// @param fs_path the filesystem path. -/// @param drive_letter drive name, use NULL to use default drive location. -/// @return the file descriptor of the file. -IMPORT_C SCIObject IoOpenFile(const Char* fs_path, const Char* drive_letter); - -/// @brief Closes a file and flushes its content. -/// @param file_desc the file descriptor. -/// @return Function doesn't return a type. -IMPORT_C Void IoCloseFile(_Input SCIObject file_desc); - -/// @brief Write data to a file. -/// @param file_desc the file descriptor. -/// @param out_data the data to write. -/// @param sz_data the size of the data to write. -/// @return the number of bytes written. -IMPORT_C UInt32 IoWriteFile(_Input SCIObject file_desc, _Output VoidPtr out_data, SizeT sz_data); - -/// @brief Read data from a file. -/// @param file_desc the file descriptor. -/// @param out_data the data to read. -/// @param sz_data the size of the data to read. -IMPORT_C UInt32 IoReadFile(_Input SCIObject file_desc, _Output VoidPtr* out_data, SizeT sz_data); - -/// @brief Rewind the file pointer to the beginning of the file. -/// @param file_desc the file descriptor. -/// @return the number of bytes read. -IMPORT_C UInt64 IoRewindFile(_Input SCIObject file_desc); - -/// @brief Tell the current position of the file pointer. -/// @param file_desc the file descriptor. -/// @return the current position of the file pointer. -IMPORT_C UInt64 IoTellFile(_Input SCIObject file_desc); - -/// @brief Seek file offset from file descriptor. -IMPORT_C UInt64 IoSeekFile(_Input SCIObject file_desc, UInt64 file_offset); - -// ------------------------------------------------------------------------ -// Process API. -// ------------------------------------------------------------------------ - -/// @brief Spawns a Thread Information Block and Global Information Block inside the current process. -/// @param void. -/// @return > 0 error ocurred or already present, = 0 success. -IMPORT_C UInt32 RtlSpawnIB(Void); - -/// @brief Spawns a process with a unique pid (stored as UIntPtr). -/// @param process_path process filesystem path. -/// @return > 0 process was created. -IMPORT_C UIntPtr RtlSpawnProcess(const Char* process_path, SizeT argc, Char** argv, Char** envp, SizeT envp_len); - -/// @brief Exits a process with an exit_code. -/// @return if it has succeeded true, otherwise false. -IMPORT_C Bool RtlExitProcess(UIntPtr handle, UIntPtr exit_code); - -/// @brief Get current PID of process. -/// @return Current process ID. -IMPORT_C UIntPtr RtlCurrentPID(Void); - -// ------------------------------------------------------------------------ -// Memory Manager API. -// ------------------------------------------------------------------------ - -/// @brief Creates a new heap from the process's address space. -/// @param len the length of it. -/// @param flags the flags of it. -/// @return heap pointer. -IMPORT_C VoidPtr MmCreateHeap(_Input SizeT len, _Input UInt32 flags); - -/// @brief Destroys the pointer -/// @param heap the heap itself. -/// @return void. -IMPORT_C Void MmDestroyHeap(_Input VoidPtr heap); - -/// @brief Change protection flags of a memory region. -IMPORT_C Void MmSetHeapFlags(_Input VoidPtr heap, _Input UInt32 flags); - -/// @brief Change protection flags of a memory region. -IMPORT_C UInt32 MmGetHeapFlags(_Input VoidPtr heap); - -/// @brief Fill memory region with CRC32. -IMPORT_C UInt32 MmFillCRC32Heap(_Input VoidPtr heap); - -/// @brief Copy memory region. -IMPORT_C VoidPtr MmCopyMemory(_Input VoidPtr dest, _Input VoidPtr src, _Input SizeT len); - -/// @brief Fill memory region. -IMPORT_C VoidPtr MmFillMemory(_Input VoidPtr dest, _Input SizeT len, _Input UInt8 value); - -// ------------------------------------------------------------------------ -// Error API. -// ------------------------------------------------------------------------ - -IMPORT_C SInt32 ErrGetLastError(Void); - -// ------------------------------------------------------------------------ -// Threading API. -// ------------------------------------------------------------------------ - -/// @brief Exit the current thread. -/// @param exit_code the exit code. -IMPORT_C Void ThrExitCurrentThread(_Input SInt32 exit_code); - -/// @brief Exit the main thread. -/// @param exit_code the exit code. -IMPORT_C Void ThrExitMainThread(_Input SInt32 exit_code); - -/// @brief Exit a thread. -/// @param thread the thread to exit. -/// @param exit_code the exit code. -IMPORT_C Void ThrExitThread(_Input ThreadObject thread, _Input SInt32 exit_code); - -/// @brief Thread procedure function type. -typedef Void (*thread_proc_kind)(int argc, char** argv); - -/// @brief Creates a thread. -/// @param procedure the thread procedure. -/// @param argument_count number of arguments inside that thread. -/// @param flags Thread flags. -/// @return the thread object. -IMPORT_C ThreadObject ThrCreateThread(thread_proc_kind procedure, SInt32 argument_count, SInt32 flags); - -/// @brief Yields the current thread. -/// @param thread the thread to yield. -IMPORT_C Void ThrYieldThread(ThreadObject thrd); - -/// @brief Joins a thread. -/// @param thread the thread to join. -IMPORT_C Void ThrJoinThread(ThreadObject thrd); - -/// @brief Detach a thread. -/// @param thread the thread to detach. -IMPORT_C Void ThrDetachThread(ThreadObject thrd); - -// ------------------------------------------------------------------------ -// Drive Management API. -// ------------------------------------------------------------------------ - -// ------------------------------------------------------------------------------------------ // -/// @brief Get the default drive letter. -/// @param void. -/// @return the drive letter. -// ------------------------------------------------------------------------------------------ // -IMPORT_C Char* DrvGetDefaultDriveLetter(Void); - -// ------------------------------------------------------------------------------------------ // -/// @brief Get the drive letter from a path. -/// @param path the path. -/// @return the drive letter. -// ------------------------------------------------------------------------------------------ // -IMPORT_C Char* DrvGetDriveLetterFromPath(_Input const Char* path); - -// ------------------------------------------------------------------------------------------ // -/// @brief Get a mounted drive from a letter. -/// @param letter the letter (A..Z). -/// @return the drive object. -// ------------------------------------------------------------------------------------------ // -IMPORT_C SCIObject DrvGetMountedDrive(_Input const Char letter); - -// ------------------------------------------------------------------------------------------ // -/// @brief Mount a drive. -/// @param path the path to mount. -/// @param letter the letter to mount. -// ------------------------------------------------------------------------------------------ // -IMPORT_C Void DrvMountDrive(_Input const Char* path, _Input const Char* letter); - -// ------------------------------------------------------------------------------------------ // -/// @brief Unmount a drive. -/// @param letter the letter to unmount. -// ------------------------------------------------------------------------------------------ // -IMPORT_C Void DrvUnmountDrive(_Input const Char letter); - -// ------------------------------------------------------------------------ -// Event handling API, use to listen to OS specific events. -// ------------------------------------------------------------------------ - -// ------------------------------------------------------------------------------------------ // -/// @brief Add an event listener. -/// @param event_name the event name. -/// @param listener the listener to add. -/// @return the event listener. -// ------------------------------------------------------------------------------------------ // - -IMPORT_C Void EvtAddListener(_Input const Char* event_name, _Input SCIObject listener); - -// ------------------------------------------------------------------------------------------ // -/// @brief Remove an event listener. -/// @param event_name the event name. -/// @param listener the listener to remove. -/// @return the event listener. -// ------------------------------------------------------------------------------------------ // - -IMPORT_C Void EvtRemoveListener(_Input const Char* event_name, _Input SCIObject listener); - -// ------------------------------------------------------------------------------------------ // -/// @brief Dispatch an event. -/// @param event_name the event name. -/// @param event_data the event data. -/// @return the event data. -// ------------------------------------------------------------------------------------------ // - -IMPORT_C VoidPtr EvtDispatchEvent(_Input const Char* event_name, _Input VoidPtr event_data); - -// ------------------------------------------------------------------------------------------ // -// Power API. -// ------------------------------------------------------------------------------------------ // - -IMPORT_C Void PwrShutdownMachine(const Char* _Input msg, _Input SInt32 code); - -IMPORT_C Void PwrRebootMachine(const Char* _Input msg, _Input SInt32 code); - -IMPORT_C Void PwrSleepMachine(const Char* _Input msg, _Input SInt32 code); - -IMPORT_C SInt32 PwrGetCode(_Output SInt32& code); - -// ------------------------------------------------------------------------------------------ // -// CD-ROM API. -// ------------------------------------------------------------------------------------------ // - -IMPORT_C SInt32 CdEjectDrive(_Input const Char drv_letter); - -IMPORT_C SInt32 CdOpenTray(Void); -IMPORT_C SInt32 CdCloseTray(Void); - -#endif // ifndef SCIKIT_FOUNDATION_H diff --git a/dev/SCIKit/SysCalls.h b/dev/SCIKit/SysCalls.h deleted file mode 100644 index 3624dcc6..00000000 --- a/dev/SCIKit/SysCalls.h +++ /dev/null @@ -1,20 +0,0 @@ -/* ------------------------------------------- - -Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -File: Macros.h -Purpose: SCIKit Macros header. - -------------------------------------------- */ - -#pragma once - -#include - -/// @brief In this file we define filesystem calls. - -SYSCALL_DECL(FCloseFile, const SCIObject handle); -SYSCALL_DECL(FOpenFile, const Char* name, const Char* rest); -SYSCALL_DECL(FSeekFile, const SCIObject handle, const SizeT pos); -SYSCALL_DECL(FReadFile, const SCIObject handle, const Char* out_buf, const SizeT out_buf_size); -SYSCALL_DECL(FWriteFile, const SCIObject handle, const Char* out_buf, const SizeT out_buf_size); diff --git a/dev/SCIKit/doc/SCIKit.drawio b/dev/SCIKit/doc/SCIKit.drawio deleted file mode 100644 index 9b58cc72..00000000 --- a/dev/SCIKit/doc/SCIKit.drawio +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/dev/SCIKit/sci.json b/dev/SCIKit/sci.json deleted file mode 100644 index 44d00f87..00000000 --- a/dev/SCIKit/sci.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compiler_path": "x86_64-w64-mingw32-g++", - "compiler_std": "c++20", - "headers_path": ["../", "./"], - "sources_path": ["src/*.cc", "src/*.o"], - "output_name": "SCIKit.dylib", - "compiler_flags": [ - "-fPIC", - "-ffreestanding", - "-shared", - "-fno-rtti", - "-fno-exceptions", - "-Wl,--subsystem=17" - ], - "cpp_macros": [ - "kSCIVersion=0x0100", - "kSCIVersionHighest=0x0100", - "kSCIVersionLowest=0x0100" - ] -} diff --git a/dev/SCIKit/src/GPU.cc b/dev/SCIKit/src/GPU.cc deleted file mode 100644 index 46e090e6..00000000 --- a/dev/SCIKit/src/GPU.cc +++ /dev/null @@ -1,10 +0,0 @@ -/* ------------------------------------------- - -Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -File: GPU.cc -Purpose: GPU Interface. - -------------------------------------------- */ - -#include diff --git a/dev/SCIKit/src/LPC.cc b/dev/SCIKit/src/LPC.cc deleted file mode 100644 index 47f47ce6..00000000 --- a/dev/SCIKit/src/LPC.cc +++ /dev/null @@ -1,10 +0,0 @@ -/* ------------------------------------------- - -Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -File: LPC.cc -Purpose: Local Procedure Codes. - -------------------------------------------- */ - -#include diff --git a/dev/SCIKit/src/Makefile b/dev/SCIKit/src/Makefile deleted file mode 100644 index 83515aa3..00000000 --- a/dev/SCIKit/src/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -################################################## -# (c) Theater Quality Inc, all rights reserved. -# This is the bootloader makefile. -################################################## - -ASM=nasm -FLAGS=-f win64 - -.PHONY: error -error: - @echo "==> Invalid rule." - @echo "==> Use sci_asm_io_ instead." - -.PHONY: sci_asm_io_x64 -sci_asm_io_x64: - $(ASM) $(FLAGS) SCI+IO.asm -o SCI+IO.o diff --git a/dev/SCIKit/src/SCI+IO.asm b/dev/SCIKit/src/SCI+IO.asm deleted file mode 100644 index 2f52796b..00000000 --- a/dev/SCIKit/src/SCI+IO.asm +++ /dev/null @@ -1,50 +0,0 @@ -;; /* -;; * ======================================================== -;; * -;; * SCI -;; * Copyright (C) 2024, Theater Quality Inc, all rights reserved., all rights reserved. -;; * -;; * ======================================================== -;; */ - -[bits 64] - -section .text - -global sci_syscall_arg_1 -global sci_syscall_arg_2 -global sci_syscall_arg_3 -global sci_syscall_arg_4 - -sci_syscall_arg_1: - mov r8, rcx - syscall - ret - -sci_syscall_arg_2: - mov r8, rcx - mov r9, rdx - syscall - ret - -sci_syscall_arg_3: - mov rbx, r8 - - mov r8, rcx - mov r9, rdx - mov r10, rbx - - syscall - ret - -sci_syscall_arg_4: - mov rbx, r8 - mov rax, r9 - - mov r8, rcx - mov r9, rdx - mov r10, rbx - mov r11, rax - - syscall - ret diff --git a/dev/SCIKit/src/SCI.cc b/dev/SCIKit/src/SCI.cc deleted file mode 100644 index 3437498c..00000000 --- a/dev/SCIKit/src/SCI.cc +++ /dev/null @@ -1,45 +0,0 @@ -/* ------------------------------------------- - - Copyright (C) 2024, Theater Quality Inc, all rights reserved. - -------------------------------------------- */ - -#include - -/// @file SCI.cc -/// @brief Source file for the memory functions of the SCI. - -/// @brief Copy memory region. -IMPORT_C VoidPtr MmCopyMemory(_Input VoidPtr dest, _Input VoidPtr src, _Input SizeT len) -{ - if (!len || - !dest || - !src) - { - return nullptr; - } - - for (SizeT i = 0; i < len; i++) - { - ((Char*)dest)[i] = ((Char*)src)[i]; - } - - return dest; -} - -/// @brief Fill memory region with **value**. -IMPORT_C VoidPtr MmFillMemory(_Input VoidPtr dest, _Input SizeT len, _Input UInt8 value) -{ - if (!len || - !dest) - { - return nullptr; - } - - for (SizeT i = 0; i < len; i++) - { - ((Char*)dest)[i] = value; - } - - return dest; -} diff --git a/dev/Usr/.keepme b/dev/Usr/.keepme new file mode 100644 index 00000000..e69de29b diff --git a/dev/Usr/External/.gitkeep b/dev/Usr/External/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/dev/Usr/LibCompress/API.h b/dev/Usr/LibCompress/API.h new file mode 100644 index 00000000..601753a0 --- /dev/null +++ b/dev/Usr/LibCompress/API.h @@ -0,0 +1,18 @@ +/* ------------------------------------------- + + Copyright (C) 2024, Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +#ifndef COMPRESSKIT_RLE_H +#define COMPRESSKIT_RLE_H + +#include +// #include + +namespace Kernel +{ + class ICompressProxy; +} // namespace Kernel + +#endif // !ifndef COMPRESSKIT_RLE_H diff --git a/dev/Usr/LibCompress/LCCompress.s b/dev/Usr/LibCompress/LCCompress.s new file mode 100644 index 00000000..2f12bf22 --- /dev/null +++ b/dev/Usr/LibCompress/LCCompress.s @@ -0,0 +1,7 @@ +/* ------------------------------------------- + + Copyright (C) 2024 Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +.text \ No newline at end of file diff --git a/dev/Usr/LibCompress/LCDecompress.s b/dev/Usr/LibCompress/LCDecompress.s new file mode 100644 index 00000000..2f12bf22 --- /dev/null +++ b/dev/Usr/LibCompress/LCDecompress.s @@ -0,0 +1,7 @@ +/* ------------------------------------------- + + Copyright (C) 2024 Theater Quality Inc, all rights reserved. + +------------------------------------------- */ + +.text \ No newline at end of file diff --git a/dev/Usr/LibGUI/.keepme b/dev/Usr/LibGUI/.keepme new file mode 100644 index 00000000..e69de29b diff --git a/dev/Usr/LibSystem/.keepme b/dev/Usr/LibSystem/.keepme new file mode 100644 index 00000000..e69de29b -- cgit v1.2.3