diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/boot/BootKit/Shared/BootImg.rsrc | 72 | ||||
| -rw-r--r-- | src/boot/modules/SysChk/amd64-ahci-epm.json | 1 | ||||
| -rw-r--r-- | src/boot/modules/SysChk/amd64-ahci-gpt.json | 2 | ||||
| -rw-r--r-- | src/kernel/HALKit/AMD64/HalDebugOutput.cpp | 8 | ||||
| -rw-r--r-- | src/kernel/HALKit/AMD64/HalKernelMain.cpp | 9 | ||||
| -rw-r--r-- | src/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cpp | 2 | ||||
| -rw-r--r-- | src/kernel/KernelKit/CoreProcessScheduler.h | 2 | ||||
| -rw-r--r-- | src/kernel/KernelKit/DebugOutput.h | 4 | ||||
| -rw-r--r-- | src/kernel/src/BinaryMutex.cpp | 20 | ||||
| -rw-r--r-- | src/kernel/src/PageMgr.cpp | 2 | ||||
| -rw-r--r-- | src/kernel/src/UserProcessScheduler.cpp | 75 | ||||
| -rw-r--r-- | src/modules/CoreGfx/CoreGfx.h | 2 |
12 files changed, 151 insertions, 48 deletions
diff --git a/src/boot/BootKit/Shared/BootImg.rsrc b/src/boot/BootKit/Shared/BootImg.rsrc new file mode 100644 index 00000000..514fdf85 --- /dev/null +++ b/src/boot/BootKit/Shared/BootImg.rsrc @@ -0,0 +1,72 @@ +#pragma once + +#define BOOT_LOGO_HEIGHT 64 +#define BOOT_LOGO_WIDTH 64 + +// array size is 12288 +inline const Kernel::UInt32 kBootLogo[] = { + 0x1e3c5a, 0x22415f, 0x294967, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2c4c6a, 0x2b4c69, 0x2b4a68, 0x274865, 0x244562, 0x21415e, 0x1d3d5a, 0x1f3e57, 0x2a5555, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, + 0x1f3f5c, 0x335270, 0x416281, 0x436383, 0x436383, 0x426383, 0x426383, 0x426383, 0x426383, 0x436383, 0x426383, 0x436383, 0x426383, 0x426383, 0x426383, 0x436383, 0x426383, 0x426383, 0x436383, 0x426383, 0x436383, 0x426383, 0x426383, 0x426383, 0x426383, 0x426383, 0x426383, 0x436383, 0x426383, 0x436383, 0x426383, 0x426383, 0x426383, 0x426383, 0x436383, 0x426383, 0x426383, 0x436383, 0x436383, 0x426383, 0x426382, 0x426382, 0x406180, 0x3e5f7d, 0x395a79, 0x335472, 0x2b4d6a, 0x254462, 0x1e3f5d, 0x1e3d5b, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, + 0x244361, 0x3d5e7d, 0x436484, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x446584, 0x446584, 0x426382, 0x3d5e7c, 0x335472, 0x284865, 0x203f5d, 0x1d3a58, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, + 0x244461, 0x3e5f7e, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436483, 0x436484, 0x406180, 0x355574, 0x274765, 0x1e405c, 0x24486d, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, + 0x244461, 0x3e5e7e, 0x436483, 0x426383, 0x426383, 0x426383, 0x436383, 0x426383, 0x426383, 0x436383, 0x436383, 0x436383, 0x436383, 0x426383, 0x426383, 0x436383, 0x426383, 0x426383, 0x436383, 0x436383, 0x436383, 0x436383, 0x426383, 0x426383, 0x436383, 0x426383, 0x426383, 0x436383, 0x426383, 0x436383, 0x436383, 0x426383, 0x426383, 0x436383, 0x426383, 0x426383, 0x436383, 0x436383, 0x426383, 0x436383, 0x426383, 0x426383, 0x436383, 0x426383, 0x426383, 0x426383, 0x436383, 0x436383, 0x436383, 0x436383, 0x436483, 0x3e5f7e, 0x30506f, 0x22425f, 0x20415a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, + 0x244461, 0x3d5e7d, 0x426383, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426383, 0x426382, 0x375876, 0x264663, 0x1f3f5b, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, + 0x244461, 0x3d5e7d, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426382, 0x426383, 0x3b5c7b, 0x284965, 0x1d3d5b, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, + 0x244461, 0x3d5e7d, 0x426382, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426282, 0x426383, 0x3d5d7d, 0x294967, 0x1e3f5a, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, + 0x244461, 0x3d5d7d, 0x426282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x416282, 0x426282, 0x3c5d7c, 0x284866, 0x1e3d5b, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, + 0x244461, 0x3c5d7c, 0x416282, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416281, 0x416282, 0x3a5a79, 0x254562, 0x1f3f5f, 0x000000, 0x000000, 0x000000, 0x000000, + 0x244461, 0x3c5d7c, 0x416281, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416282, 0x355574, 0x20415e, 0x555555, 0x000000, 0x000000, 0x000000, + 0x244461, 0x3c5c7c, 0x416181, 0x416181, 0x406181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x406181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x406181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x406181, 0x416181, 0x406181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x406181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x406181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x416181, 0x406080, 0x2d4d6b, 0x203d59, 0x000000, 0x000000, 0x000000, + 0x244461, 0x3c5c7c, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x406181, 0x3a5b7a, 0x254462, 0x24485b, 0x000000, 0x000000, + 0x244361, 0x3c5c7b, 0x406181, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x406180, 0x30506e, 0x1f3f5c, 0x000000, 0x000000, + 0x244361, 0x3b5c7b, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x406080, 0x3b5b7a, 0x244461, 0x194c66, 0x000000, + 0x244361, 0x3b5c7b, 0x406080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x2d4d6c, 0x1d3b59, 0x000000, + 0x244361, 0x3b5b7b, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x3f6080, 0x406081, 0x365676, 0x20415e, 0x000000, + 0x244361, 0x3b5b7b, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3e5f80, 0x3e5f80, 0x3e5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3c5c7d, 0x274563, 0x224455, + 0x244360, 0x3a5b7b, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3e5f80, 0x3e5f7f, 0x426182, 0x416181, 0x3e5f7f, 0x3c5d7e, 0x3d5e7f, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3e5f7f, 0x416181, 0x456484, 0x466585, 0x466584, 0x446383, 0x406080, 0x3e5e7f, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3e5f80, 0x3f5f80, 0x3f5f80, 0x3f5f80, 0x3e5f7f, 0x2b4b6a, 0x1e3c5a, + 0x234360, 0x3a5a7a, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3f5f80, 0x8c9fb2, 0xc6d0d9, 0xc1cbd6, 0xb2bfcc, 0x8b9eb2, 0x53708d, 0x3c5d7e, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3c5d7e, 0x68819a, 0xc1ccd6, 0xced6df, 0xd0d8e0, 0xcfd7df, 0xcad3dc, 0xbbc7d2, 0x6a839c, 0x3c5d7e, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3e5f7f, 0x3f5f80, 0x305170, 0x1d3d5a, + 0x234360, 0x3a5a7a, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7e, 0x8295a9, 0xf1f3f4, 0xffffff, 0xffffff, 0xffffff, 0xdae0e6, 0x7189a1, 0x3c5d7e, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3c5d7e, 0x5d7792, 0xdadfe4, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xe9ecef, 0x698199, 0x3c5c7d, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5e7f, 0x3e5f7f, 0x345574, 0x1f3f5d, + 0x234360, 0x3a5a7a, 0x3e5e7f, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3c5c7c, 0x7b8fa3, 0xf2f3f5, 0xffffff, 0xffffff, 0xffffff, 0xe6eaee, 0x69829b, 0x3b5c7d, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3c5c7d, 0x5a748e, 0xd9dee4, 0xffffff, 0xffffff, 0xe6e9ed, 0x6c8399, 0x3c5c7d, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7e, 0x3e5e7f, 0x375777, 0x21425f, + 0x234360, 0x395a79, 0x3e5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3e5e7e, 0xb7c2cd, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xd5dce3, 0x55718e, 0x3b5c7d, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x395a7b, 0x94a5b6, 0xffffff, 0xffffff, 0x99a9b9, 0x3a5b7b, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3d5e7e, 0x3e5e7e, 0x385979, 0x23425f, + 0x234360, 0x395979, 0x3d5e7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3a5a7c, 0x8c9eb1, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xb9c4d0, 0x456483, 0x3c5d7d, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3a5b7c, 0x7a90a6, 0xfdfdfd, 0xf8f9fa, 0x6e859d, 0x3a5b7c, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x395979, 0x234360, + 0x234360, 0x395979, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3a5a7c, 0x7a90a5, 0xfefefe, 0xe7eaee, 0xb3bdc8, 0xfafbfb, 0xffffff, 0xfcfdfd, 0x97a8ba, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3a5b7c, 0x71889f, 0xfafbfc, 0xf0f2f4, 0x5e7893, 0x3b5b7c, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x3d5d7e, 0x395979, 0x234360, + 0x234360, 0x395979, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3a5a7b, 0x7289a0, 0xfdfdfd, 0xd2d9e0, 0x4b6784, 0xacb8c5, 0xffffff, 0xffffff, 0xf1f3f6, 0x758ca3, 0x3a5b7c, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3a5a7b, 0x6d849d, 0xf9fafb, 0xe8ecef, 0x54708c, 0x3b5c7c, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3c5c7d, 0x3a5b7b, 0x395a7b, 0x3a5a7b, 0x395a7b, 0x395a7b, 0x3b5c7c, 0x3c5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x3d5d7d, 0x395979, 0x234360, + 0x234360, 0x385879, 0x3c5d7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x395a7b, 0x6d859d, 0xfbfcfc, 0xcbd3dc, 0x406080, 0x4b6785, 0xc9d1d9, 0xffffff, 0xffffff, 0xdce1e7, 0x587490, 0x3a5b7c, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x395a7b, 0x6b839b, 0xf9fafb, 0xe2e7eb, 0x4f6b89, 0x3b5b7c, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3b5c7c, 0x3a5a7c, 0x496785, 0x6c849d, 0x8da0b3, 0x99aabb, 0x95a7b8, 0x7e93a9, 0x55718e, 0x3c5c7d, 0x3b5c7c, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5d7d, 0x385879, 0x234360, + 0x234360, 0x385879, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x395a7b, 0x69829a, 0xfafafb, 0xc7d0d9, 0x405f7f, 0x395a7b, 0x607992, 0xe4e8ec, 0xffffff, 0xffffff, 0xbcc7d3, 0x456483, 0x3b5b7c, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x395a7b, 0x6a829b, 0xf9fafb, 0xdee3e9, 0x4c6987, 0x3b5b7c, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3a5b7c, 0x466483, 0x8a9db1, 0xd5dce3, 0xf7f8fa, 0xf6f7f8, 0xf5f6f7, 0xfefefe, 0xffffff, 0xe4e9ed, 0x96a8b9, 0x456483, 0x3b5b7c, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x385879, 0x234360, + 0x234360, 0x385878, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x395a7b, 0x678099, 0xf9f9fa, 0xc5ced8, 0x3f5f7f, 0x3c5c7d, 0x395a7b, 0x8194a7, 0xf7f8f9, 0xffffff, 0xfdfdfe, 0x97a8ba, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x395a7b, 0x69819a, 0xf9fafb, 0xdbe1e7, 0x496785, 0x3b5b7c, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3a5b7c, 0x4f6c8a, 0xbbc6d2, 0xfeffff, 0xf0f1f3, 0x9caab8, 0x667d94, 0x5f7790, 0x8193a6, 0xdadfe4, 0xffffff, 0xfefefe, 0xacbac8, 0x426181, 0x3b5b7c, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x3c5c7d, 0x385878, 0x234360, + 0x234360, 0x375878, 0x3c5c7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x39597b, 0x657e98, 0xf8f9fa, 0xc5ced7, 0x3f5e7e, 0x3b5b7c, 0x3b5b7c, 0x3e5d7d, 0xaab6c3, 0xffffff, 0xffffff, 0xf1f3f5, 0x7289a1, 0x39597b, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x39597a, 0x69829a, 0xf9fafb, 0xd9dfe5, 0x486684, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3a5b7c, 0x456383, 0xbac6d1, 0xffffff, 0xeef0f3, 0x768a9f, 0x395979, 0x38597a, 0x39597b, 0x375779, 0x5f7891, 0xe3e7eb, 0xffffff, 0xfafbfc, 0x8095aa, 0x39597b, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3c5c7c, 0x375878, 0x234360, + 0x234360, 0x375778, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x38597a, 0x647d97, 0xf7f9fa, 0xc6cfd8, 0x3f5e7e, 0x3b5b7c, 0x3b5b7c, 0x3a5a7b, 0x4d6986, 0xd1d8de, 0xffffff, 0xffffff, 0xdae0e6, 0x55718e, 0x39597b, 0x3b5b7c, 0x3b5b7c, 0x38597a, 0x6b839c, 0xfafbfb, 0xd8dee4, 0x476584, 0x3a5a7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x39597b, 0x8c9eb2, 0xfdfdfe, 0xffffff, 0x9cabba, 0x39597a, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x38587a, 0x9dacbb, 0xffffff, 0xffffff, 0xc7d0d9, 0x426180, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x375778, 0x234360, + 0x234360, 0x375778, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x38597a, 0x647d97, 0xf7f8fa, 0xc7d0d9, 0x3f5e7f, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x38597a, 0x6c8299, 0xeff1f3, 0xffffff, 0xffffff, 0xbac5d1, 0x436281, 0x3a5a7b, 0x3b5b7c, 0x38597a, 0x6c849c, 0xfafbfc, 0xd8dee4, 0x476583, 0x3a5a7b, 0x3b5b7c, 0x3b5b7c, 0x3a5a7b, 0x4c6987, 0xdae0e6, 0xffffff, 0xf0f2f4, 0x5f7892, 0x39597a, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x37587a, 0x778ca3, 0xfcfcfd, 0xffffff, 0xeaedf1, 0x56718e, 0x39597b, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x375778, 0x234360, + 0x234360, 0x375777, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x38587a, 0x647d97, 0xf7f8fa, 0xc8d1da, 0x3f5e7f, 0x3a5a7b, 0x3b5b7c, 0x3b5b7c, 0x3a5a7c, 0x3a5a7a, 0x96a5b5, 0xfdfefe, 0xffffff, 0xfcfdfd, 0x94a6b8, 0x3a5a7b, 0x3a5a7b, 0x38587a, 0x6e859d, 0xfbfcfc, 0xd8dee4, 0x466483, 0x3a5a7b, 0x3b5b7c, 0x3b5b7c, 0x38587a, 0x7a90a6, 0xfbfcfc, 0xffffff, 0xe2e6eb, 0x4b6886, 0x365779, 0x375879, 0x375879, 0x38587a, 0x39597a, 0x39597a, 0x8296ab, 0xfdfdfd, 0xffffff, 0xf1f3f6, 0x5e7893, 0x38597a, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x3b5b7c, 0x375777, 0x234360, + 0x234360, 0x365677, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x385879, 0x657e97, 0xf8f9fa, 0xc9d2da, 0x3f5e7e, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x39597b, 0x446280, 0xc2cad3, 0xffffff, 0xffffff, 0xf0f3f5, 0x7188a0, 0x38587a, 0x375879, 0x71879f, 0xfcfdfd, 0xd8dee4, 0x466483, 0x39597b, 0x3a5a7b, 0x3a5a7b, 0x39597a, 0xa7b5c4, 0xffffff, 0xffffff, 0xf1f3f5, 0x93a4b6, 0x788ea5, 0x8196ab, 0x8da0b3, 0x9aabbc, 0xa9b7c6, 0xb9c5d0, 0xe9ecf0, 0xffffff, 0xffffff, 0xd4dae1, 0x4b6785, 0x39597b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x365677, 0x234360, + 0x234360, 0x365677, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x375879, 0x677f98, 0xf9fafb, 0xcad3db, 0x405e7e, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x385879, 0x5d7690, 0xe5e8ec, 0xffffff, 0xffffff, 0xdbe1e7, 0x56728e, 0x355577, 0x768ca3, 0xfefefe, 0xd8dee4, 0x466483, 0x39597b, 0x3a5a7b, 0x3a5a7b, 0x3c5c7c, 0xbfc9d4, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xf9f9fa, 0xf4f5f7, 0xeff1f3, 0xe9ecee, 0xe1e5e9, 0xd7dce1, 0xc9d0d7, 0xb6c0ca, 0x9ba9b8, 0x5d768f, 0x39597a, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x365677, 0x234360, + 0x234360, 0x365677, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x375779, 0x6a829b, 0xfafbfc, 0xcdd4dd, 0x405f7f, 0x39597b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x385879, 0x8396a9, 0xf9fafa, 0xffffff, 0xffffff, 0xbec8d3, 0x416080, 0x8094a9, 0xffffff, 0xd8dee4, 0x466382, 0x39597a, 0x3a5a7b, 0x3a597b, 0x3e5d7d, 0xc4cdd7, 0xffffff, 0xffffff, 0xf8f9fa, 0xa7b3c0, 0x73879c, 0x647a92, 0x58718b, 0x506a86, 0x496481, 0x435f7e, 0x3e5c7b, 0x395879, 0x375678, 0x385879, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x3a5a7b, 0x365677, 0x234360, + 0x234360, 0x365676, 0x3a597b, 0x39597b, 0x39597b, 0x39597b, 0x39597b, 0x39597b, 0x39597b, 0x39597b, 0x39597b, 0x39597b, 0x365779, 0x6f869e, 0xfcfdfd, 0xd1d8e0, 0x426080, 0x39597a, 0x39597b, 0x39597b, 0x39597b, 0x39597b, 0x39597b, 0x39597a, 0x3e5c7c, 0xafbbc7, 0xffffff, 0xffffff, 0xfefefe, 0x9dadbd, 0x9babbb, 0xffffff, 0xd7dee4, 0x456382, 0x39597a, 0x39597b, 0x39597a, 0x3c5b7c, 0xbfc9d3, 0xffffff, 0xffffff, 0xd6dce2, 0x436180, 0x355678, 0x375779, 0x375779, 0x38587a, 0x38587a, 0x39597a, 0x39597b, 0x39597b, 0x39597b, 0x39597b, 0x39597b, 0x39597b, 0x39597b, 0x39597b, 0x39597b, 0x39597b, 0x39597b, 0x39597b, 0x3a597b, 0x365677, 0x234360, + 0x23435f, 0x365576, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x365678, 0x768ba2, 0xfefefe, 0xd8dee4, 0x456382, 0x38587a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x375879, 0x506b87, 0xd6dce2, 0xffffff, 0xffffff, 0xf7f8f9, 0xeceff2, 0xffffff, 0xd7dee4, 0x456382, 0x38587a, 0x39597a, 0x39597a, 0x385879, 0xabb8c5, 0xffffff, 0xffffff, 0xd6dce3, 0x446281, 0x38587a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x365576, 0x23435f, + 0x23435f, 0x355576, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x365678, 0x8295aa, 0xffffff, 0xe1e6eb, 0x4c6886, 0x385879, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x365678, 0x6f859b, 0xf1f3f5, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xd9dfe5, 0x466382, 0x38587a, 0x39597a, 0x39597a, 0x365678, 0x8598ac, 0xffffff, 0xffffff, 0xedf0f3, 0x5a7590, 0x375778, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x39597a, 0x355576, 0x23435f, + 0x22435f, 0x355576, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x355578, 0x95a6b7, 0xffffff, 0xeff1f4, 0x5a7490, 0x365678, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x38587a, 0x395879, 0x98a7b7, 0xfefefe, 0xffffff, 0xffffff, 0xffffff, 0xdce1e7, 0x486584, 0x385779, 0x39587a, 0x39587a, 0x375779, 0x55708b, 0xe7ebee, 0xffffff, 0xffffff, 0x9fafbf, 0x38587a, 0x385879, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x385779, 0x365678, 0x375779, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x39587a, 0x355576, 0x22435f, + 0x21415f, 0x345475, 0x38587a, 0x38587a, 0x38587a, 0x38587a, 0x38587a, 0x38587a, 0x38587a, 0x38587a, 0x38587a, 0x375779, 0x3a5a7b, 0xbbc6d1, 0xffffff, 0xfcfdfd, 0x7c91a7, 0x355577, 0x38587a, 0x38587a, 0x38587a, 0x38587a, 0x38587a, 0x38587a, 0x38587a, 0x38587a, 0x375779, 0x43607f, 0xbfc8d1, 0xffffff, 0xffffff, 0xffffff, 0xdfe4e9, 0x496685, 0x375779, 0x38587a, 0x38587a, 0x38587a, 0x385879, 0x9fadbc, 0xffffff, 0xffffff, 0xf2f4f6, 0x8699ae, 0x3c5b7c, 0x355577, 0x365678, 0x375779, 0x365678, 0x365678, 0x476484, 0x8094aa, 0x8195aa, 0x39597a, 0x38587a, 0x38587a, 0x38587a, 0x38587a, 0x38587a, 0x38587a, 0x38587a, 0x38587a, 0x355576, 0x22435f, + 0x21415d, 0x335374, 0x38587a, 0x385879, 0x385879, 0x385879, 0x385879, 0x385879, 0x385879, 0x385879, 0x375779, 0x3c5b7c, 0x879aae, 0xf4f6f8, 0xffffff, 0xffffff, 0xc9d1da, 0x466483, 0x375779, 0x385879, 0x385879, 0x385879, 0x385879, 0x385879, 0x385879, 0x385879, 0x385879, 0x365678, 0x546e89, 0xd5dbe1, 0xffffff, 0xffffff, 0xdee3e8, 0x486584, 0x375778, 0x385879, 0x385879, 0x385879, 0x375778, 0x496583, 0xc7cfd7, 0xffffff, 0xffffff, 0xf7f8f9, 0xb7c3cf, 0x758ca3, 0x58728e, 0x516d8a, 0x617a95, 0x92a4b6, 0xd5dce3, 0xfefefe, 0xa6b3c1, 0x385879, 0x385879, 0x385879, 0x385879, 0x385879, 0x385879, 0x385879, 0x385879, 0x385879, 0x355475, 0x22435f, + 0x1f3e5c, 0x315171, 0x385879, 0x385779, 0x385779, 0x385779, 0x385779, 0x385779, 0x385779, 0x375779, 0x3e5d7d, 0xa8b5c4, 0xfcfcfd, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0x94a4b6, 0x365678, 0x385779, 0x385779, 0x385779, 0x385779, 0x385779, 0x385779, 0x385779, 0x385779, 0x385779, 0x365577, 0x5c748e, 0xd1d7de, 0xffffff, 0xc9d1da, 0x3f5d7d, 0x375779, 0x385779, 0x385779, 0x385779, 0x385779, 0x365678, 0x516b87, 0xbdc6cf, 0xfbfcfc, 0xffffff, 0xffffff, 0xfcfcfd, 0xeef1f4, 0xe9edf0, 0xf5f6f8, 0xffffff, 0xf5f6f7, 0xa8b4c1, 0x476381, 0x375678, 0x385779, 0x385779, 0x385779, 0x385779, 0x385779, 0x385779, 0x385779, 0x385779, 0x345475, 0x22435f, + 0x1e3c58, 0x2e4e6e, 0x385779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x3e5d7d, 0x8899ab, 0xabb6c2, 0xafbac5, 0xb0bac5, 0xb0bac6, 0xa8b4c0, 0x677e96, 0x365678, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x355577, 0x4b6683, 0x7f91a4, 0x5f7790, 0x375678, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x365578, 0x405d7c, 0x7c8fa3, 0xbec7d0, 0xe1e4e8, 0xeef0f2, 0xf2f4f5, 0xeef0f2, 0xdbe0e4, 0xadb8c4, 0x677d94, 0x395878, 0x365678, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x345475, 0x22435f, + 0x1b3a56, 0x2b4a69, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375678, 0x345476, 0x355476, 0x365576, 0x365576, 0x365576, 0x355476, 0x355577, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x365678, 0x335476, 0x355577, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x365678, 0x345476, 0x3a5878, 0x496481, 0x576f89, 0x5b728c, 0x556e88, 0x45617f, 0x375677, 0x345477, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x375779, 0x345475, 0x22435f, + 0x17374f, 0x254563, 0x365577, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x365577, 0x355577, 0x355477, 0x355577, 0x365678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375778, 0x345374, 0x22435f, + 0x3f3f3f, 0x20405c, 0x325273, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x375678, 0x335374, 0x22435f, + 0x000000, 0x1d3a55, 0x2c4b6b, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x365678, 0x335374, 0x22435f, + 0x000000, 0x183952, 0x244562, 0x345476, 0x365678, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365678, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365678, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365578, 0x365678, 0x365578, 0x365578, 0x365578, 0x365578, 0x365678, 0x335274, 0x22415f, + 0x000000, 0x000000, 0x1f3d59, 0x2e4e6e, 0x365578, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x365577, 0x335273, 0x22415f, + 0x000000, 0x000000, 0x1c384f, 0x254462, 0x345475, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x365577, 0x325273, 0x22415f, + 0x000000, 0x000000, 0x000000, 0x1d3c56, 0x2c4c6c, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x355577, 0x325273, 0x22415f, + 0x000000, 0x000000, 0x000000, 0x1c2f4b, 0x22405f, 0x315172, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355476, 0x355476, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355476, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x355477, 0x325173, 0x22415f, + 0x000000, 0x000000, 0x000000, 0x000000, 0x1b3651, 0x264564, 0x335375, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x355476, 0x325173, 0x22415f, + 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1d3955, 0x294868, 0x345376, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x345476, 0x315172, 0x22415f, + 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x193333, 0x1d3c56, 0x2a4a6a, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x315072, 0x22415f, + 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1e2d3c, 0x1d3b57, 0x2a4969, 0x335375, 0x345376, 0x345376, 0x345376, 0x345375, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345375, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345375, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345376, 0x345375, 0x345375, 0x345376, 0x315072, 0x22415f, + 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1f2f3f, 0x1e3a55, 0x284766, 0x325173, 0x345375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x335375, 0x345375, 0x315072, 0x22415f, + 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x1c1c38, 0x1b3750, 0x244361, 0x2f4e70, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x305072, 0x22415f, + 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x17334a, 0x1f3d5a, 0x294868, 0x315072, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x304f72, 0x22415f, + 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x19263f, 0x1b3750, 0x23405d, 0x2a4969, 0x304f71, 0x335274, 0x335275, 0x335275, 0x335275, 0x335274, 0x335275, 0x335275, 0x335275, 0x335274, 0x335274, 0x335275, 0x335275, 0x335275, 0x335274, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335274, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335274, 0x335275, 0x335275, 0x335274, 0x335275, 0x335275, 0x335275, 0x335275, 0x335274, 0x335275, 0x335275, 0x335275, 0x335274, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x304f71, 0x22415f, + 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x172f3f, 0x1b364f, 0x203e5b, 0x264564, 0x2c4b6c, 0x2f4f71, 0x315173, 0x325174, 0x325275, 0x335275, 0x335275, 0x335275, 0x325275, 0x335275, 0x335275, 0x335275, 0x335275, 0x325275, 0x325275, 0x335275, 0x335275, 0x325275, 0x335275, 0x335275, 0x335275, 0x335275, 0x325275, 0x325275, 0x335275, 0x335275, 0x325275, 0x325275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x335275, 0x325275, 0x325274, 0x335275, 0x335275, 0x335275, 0x335275, 0x325275, 0x335275, 0x335275, 0x335275, 0x2d4c6d, 0x1f3f5a, + 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x0e2a38, 0x193049, 0x1c3952, 0x203e5a, 0x234260, 0x264665, 0x294868, 0x2b4a6a, 0x2b4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2c4b6c, 0x2a496a, 0x21405e, 0x19364f, + 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x112233, 0x172941, 0x173246, 0x1a344c, 0x1b374f, 0x1b3851, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1c3852, 0x1b374f, 0x193347, 0x000000 +};
\ No newline at end of file diff --git a/src/boot/modules/SysChk/amd64-ahci-epm.json b/src/boot/modules/SysChk/amd64-ahci-epm.json index 43b0bff7..1fa10f60 100644 --- a/src/boot/modules/SysChk/amd64-ahci-epm.json +++ b/src/boot/modules/SysChk/amd64-ahci-epm.json @@ -13,6 +13,7 @@ "../../src/New+Delete.cpp", "../../../kernel/HALKit/AMD64/PCI/*.cpp", "../../../kernel/HALKit/AMD64/Storage/*.cpp", + "../../../kernel/HALKit/AMD64/Network/*.cpp", "../../../kernel/src/Storage/*.cpp", "../../../kernel/src/Network/*.cpp", "../../../kernel/HALKit/AMD64/*.cpp", diff --git a/src/boot/modules/SysChk/amd64-ahci-gpt.json b/src/boot/modules/SysChk/amd64-ahci-gpt.json index d36f66bf..4baf1393 100644 --- a/src/boot/modules/SysChk/amd64-ahci-gpt.json +++ b/src/boot/modules/SysChk/amd64-ahci-gpt.json @@ -13,7 +13,9 @@ "../../src/New+Delete.cpp", "../../../kernel/HALKit/AMD64/PCI/*.cpp", "../../../kernel/HALKit/AMD64/Storage/*.cpp", + "../../../kernel/HALKit/AMD64/Network/*.cpp", "../../../kernel/src/Storage/*.cpp", + "../../../kernel/src/Network/*.cpp", "../../../kernel/HALKit/AMD64/*.cpp", "../../../kernel/HALKit/AMD64/*.s", "../../../kernel/src/*.cpp" diff --git a/src/kernel/HALKit/AMD64/HalDebugOutput.cpp b/src/kernel/HALKit/AMD64/HalDebugOutput.cpp index a63b3657..dc4b78e7 100644 --- a/src/kernel/HALKit/AMD64/HalDebugOutput.cpp +++ b/src/kernel/HALKit/AMD64/HalDebugOutput.cpp @@ -59,7 +59,7 @@ namespace Detail { TerminalDevice::~TerminalDevice() = default; #ifdef __DEBUG__ -STATIC SizeT kX = kFontSizeX, kY = kFontSizeY; +STATIC SizeT kX = kFontSizeX, kY = kFontSizeY + 70; #endif // __DEBUG__ EXTERN_C void ke_utf_io_write(IDevice<const Utf8Char*>* obj, const Utf8Char* bytes) { @@ -91,7 +91,7 @@ EXTERN_C void ke_utf_io_write(IDevice<const Utf8Char*>* obj, const Utf8Char* byt tmp_str[0] = (bytes[index] > 127) ? '?' : bytes[index]; tmp_str[1] = 0; - cg_render_string(tmp_str, kY, kX, RGB(0x00, 0x00, 0x00)); + cg_render_string(tmp_str, kY, kX, RGB(0xFF, 0xFF, 0xFF)); if (bytes[index] == '\r') { kY += kFontSizeY; @@ -147,7 +147,7 @@ EXTERN_C void ke_io_write(IDevice<const Char*>* obj, const Char* bytes) { tmp_str[0] = bytes[index]; tmp_str[1] = 0; - cg_render_string(tmp_str, kY, kX, RGB(0x00, 0x00, 0x00)); + cg_render_string(tmp_str, kY, kX, RGB(0xFF, 0xFF, 0xFF)); if (bytes[index] == '\r') { kY += kFontSizeY; @@ -161,7 +161,7 @@ EXTERN_C void ke_io_write(IDevice<const Char*>* obj, const Char* bytes) { } if (kY > kHandoverHeader->f_GOP.f_Height) { - kY = kFontSizeY; + kY = kFontSizeY + 70; FBDrawInRegion(cg_get_clear_clr(), FB::CGAccessibilty::Height(), FB::CGAccessibilty::Width(), 0, 0); diff --git a/src/kernel/HALKit/AMD64/HalKernelMain.cpp b/src/kernel/HALKit/AMD64/HalKernelMain.cpp index fabeb077..4c527572 100644 --- a/src/kernel/HALKit/AMD64/HalKernelMain.cpp +++ b/src/kernel/HALKit/AMD64/HalKernelMain.cpp @@ -18,6 +18,9 @@ #include <modules/ACPI/ACPIFactoryInterface.h> #include <modules/CoreGfx/TextGfx.h> +#include <BootKit/Shared/BootImg.rsrc> +#include "NeKit/KernelPanic.h" + #ifndef __NE_MODULAR_KERNEL_COMPONENTS__ EXTERN_C Kernel::VoidPtr kInterruptVectorTable[]; @@ -154,6 +157,10 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) { NeFileSystemMgr::Mount(new NeFileSystemMgr()); #endif + cg_init(); + FBDrawBitMapInRegion(kBootLogo, BOOT_LOGO_WIDTH, BOOT_LOGO_HEIGHT, 10, 10); + cg_clear(); + UserProcessScheduler::The().SwitchTeam(kRTUserTeam); PEFLoader ldr("/system/init.out"); @@ -161,7 +168,7 @@ EXTERN_C Kernel::Void hal_real_init(Kernel::Void) { if (ldr.IsLoaded()) rtl_create_user_process(ldr, UserProcess::ExecutableKind::kExecutableKind); else - ke_panic(RUNTIME_CHECK_PROCESS, "RuntimeCheck: Invalid Process Data!"); + ke_panic(RUNTIME_CHECK_BAD_BEHAVIOR, "Invalid Init Process."); UserProcessScheduler::The().SwitchTeam(kMidUserTeam); diff --git a/src/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cpp b/src/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cpp index 634fc9c4..4581deb0 100644 --- a/src/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cpp +++ b/src/kernel/HALKit/ARM64/HalSchedulerCorePrimitives.cpp @@ -7,6 +7,7 @@ #include <KernelKit/ProcessScheduler.h> namespace Kernel { + /***********************************************************************************/ /// @brief Unimplemented function (crashes by default) /// @param process The process handle. @@ -26,4 +27,5 @@ EXTERN_C Bool hal_check_task(HAL::StackFramePtr stack_ptr) { return stack_ptr->SP != 0 && stack_ptr->IP != 0; } + } // namespace Kernel diff --git a/src/kernel/KernelKit/CoreProcessScheduler.h b/src/kernel/KernelKit/CoreProcessScheduler.h index 71a75e1a..2f105036 100644 --- a/src/kernel/KernelKit/CoreProcessScheduler.h +++ b/src/kernel/KernelKit/CoreProcessScheduler.h @@ -146,7 +146,7 @@ enum struct ProcessStatusKind : Int32 { /***********************************************************************************/ enum struct AffinityKind : Int32 { kInvalid = 0, - kRealTime = 100, + kUltraHigh = 100, kVeryHigh = 150, kHigh = 200, kStandard = 1000, diff --git a/src/kernel/KernelKit/DebugOutput.h b/src/kernel/KernelKit/DebugOutput.h index 3695602e..4a705804 100644 --- a/src/kernel/KernelKit/DebugOutput.h +++ b/src/kernel/KernelKit/DebugOutput.h @@ -185,7 +185,7 @@ inline TerminalDevice& operator<<(TerminalDevice& src, const Long& num) { #undef kout #endif // ifdef kout -#define kout TerminalDevice::The() +#define kout TerminalDevice::The() << __FILE__ << ": " #ifdef kendl #undef kendl @@ -197,7 +197,7 @@ inline TerminalDevice& operator<<(TerminalDevice& src, const Long& num) { #undef kout8 #endif // ifdef kout8 -#define kout8 Utf8TerminalDevice::The() +#define kout8 Utf8TerminalDevice::The() << __FILE__ << ": " #ifdef kendl8 #undef kendl8 diff --git a/src/kernel/src/BinaryMutex.cpp b/src/kernel/src/BinaryMutex.cpp index e321ba69..c5fd6a50 100644 --- a/src/kernel/src/BinaryMutex.cpp +++ b/src/kernel/src/BinaryMutex.cpp @@ -11,14 +11,23 @@ namespace Kernel { /// @brief Unlocks the binary mutex. /***********************************************************************************/ +#ifndef __NE_TIMEOUT_CONFIG__ +#define __NE_TIMEOUT_CONFIG__ 10000 +#endif + Bool BinaryMutex::Unlock() { - if (fLockingProcess->Status == ProcessStatusKind::kRunning) { - fLockingProcess = nullptr; + auto timeout = 0UL; + constexpr auto kTimoutLimit = __NE_TIMEOUT_CONFIG__; + + while (fLockingProcess->Status == ProcessStatusKind::kRunning) { + ++timeout; - return Yes; + if (timeout > kTimoutLimit) + return No; } - return No; + fLockingProcess = nullptr; + return Yes; } /***********************************************************************************/ @@ -49,7 +58,8 @@ Bool BinaryMutex::LockAndWait(BinaryMutex::LockedPtr process, ITimer* timer) { if (timer == nullptr) return No; timer->Wait(); - return this->Lock(process); + this->Lock(process); + return this->Unlock(); } /***********************************************************************************/ diff --git a/src/kernel/src/PageMgr.cpp b/src/kernel/src/PageMgr.cpp index 7aac7d42..f0a8b346 100644 --- a/src/kernel/src/PageMgr.cpp +++ b/src/kernel/src/PageMgr.cpp @@ -13,6 +13,7 @@ #endif // ifdef __NE_AMD64__ || defined(__NE_ARM64__) namespace Kernel { + PTEWrapper::PTEWrapper(Boolean Rw, Boolean User, Boolean ExecDisable, UIntPtr VirtAddr) : fRw(Rw), fUser(User), @@ -91,4 +92,5 @@ Void PTEWrapper::NoExecute(const bool enable) { Bool PTEWrapper::NoExecute() { return fExecDisable; } + } // namespace Kernel diff --git a/src/kernel/src/UserProcessScheduler.cpp b/src/kernel/src/UserProcessScheduler.cpp index 4b8d788b..8c048f07 100644 --- a/src/kernel/src/UserProcessScheduler.cpp +++ b/src/kernel/src/UserProcessScheduler.cpp @@ -12,6 +12,7 @@ #include <NeKit/KString.h> #include <NeKit/Utils.h> #include <SignalKit/Signals.h> +#include "KernelKit/CoreProcessScheduler.h" ///! BUG COUNT: 0 @@ -474,47 +475,53 @@ Bool UserProcessScheduler::HasMP() { /***********************************************************************************/ SizeT UserProcessScheduler::Run() { - if (mTeam.mProcessCur < 1) { - return 0UL; - } - - SizeT process_index = 0UL; //! we store this guy to tell the scheduler how many - //! things we have scheduled. + STATIC SizeT process_index{}; //! we store this guy to tell the scheduler how many + //! things we have scheduled. - for (; process_index < mTeam.AsArray().Capacity(); ++process_index) { - auto& process = mTeam.AsArray()[process_index]; + UserProcessTeam& team = mTeam; + SizeT limit = team.AsArray().Capacity(); - //! Check if the process needs to be run. - if (UserProcessHelper::CanBeScheduled(process)) { - kout << process.Name << " will be scheduled to run...\r"; + if (team.mProcessCur < 1) { + return {}; + } - //! Increase the usage time of the process. - if (process.UTime < process.PTime) { - ++process.UTime; - } + if (process_index > limit) + process_index = 0UL; + else + ++process_index; - this->TheCurrentProcess() = process; + auto& process = team.AsArray()[process_index]; - if (UserProcessHelper::Switch(process.StackFrame, process.ProcessId)) { - process.PTime = static_cast<Int32>(process.Affinity); + //! Check if the process needs to be run. + if (UserProcessHelper::CanBeScheduled(process)) { + kout << process.Name << " will be scheduled to run...\r"; - // We add a bigger cooldown according to the RTime and affinity here. - if (process.PTime < process.RTime && AffinityKind::kRealTime != process.Affinity) { - if (process.RTime < (Int32) AffinityKind::kVeryHigh) - process.RTime += (Int32) AffinityKind::kLowUsage; - else if (process.RTime < (Int32) AffinityKind::kHigh) - process.RTime += (Int32) AffinityKind::kStandard; - else if (process.RTime < (Int32) AffinityKind::kStandard) - process.RTime += (Int32) AffinityKind::kHigh; + //! Increase the usage time of the process. + if (process.UTime < process.PTime) { + ++process.UTime; + } - process.PTime -= process.RTime; - process.RTime = 0UL; - } + this->TheCurrentProcess() = process; + + if (UserProcessHelper::Switch(process.StackFrame, process.ProcessId)) { + // We add a bigger cooldown according to the RTime and affinity here. + if (process.PTime < process.RTime && AffinityKind::kUltraHigh != process.Affinity) { + if (process.RTime < (Int32) AffinityKind::kVeryHigh) + process.RTime += (Int32) AffinityKind::kLowUsage; + else if (process.RTime < (Int32) AffinityKind::kHigh) + process.RTime += (Int32) AffinityKind::kStandard; + else if (process.RTime < (Int32) AffinityKind::kStandard) + process.RTime += (Int32) AffinityKind::kHigh; + + process.PTime -= process.RTime; + process.RTime = 0UL; + } else if (AffinityKind::kUltraHigh != process.Affinity) { + process.PTime += (Int32)AffinityKind::kUltraHigh; } - } else { - ++process.RTime; - --process.PTime; } + } else { + ++process.RTime; + --process.PTime; } return process_index; @@ -562,7 +569,7 @@ ErrorOr<ProcessID> UserProcessHelper::TheCurrentPID() { /// @retval true can be schedulded. /// @retval false cannot be schedulded. Bool UserProcessHelper::CanBeScheduled(const UserProcess& process) { - if (process.Affinity == AffinityKind::kRealTime) return Yes; + if (process.Affinity == AffinityKind::kUltraHigh) return Yes; if (process.Status != ProcessStatusKind::kRunning) return No; if (process.Affinity == AffinityKind::kInvalid) return No; @@ -594,7 +601,7 @@ SizeT UserProcessHelper::StartScheduling() { Bool UserProcessHelper::Switch(HAL::StackFramePtr frame_ptr, ProcessID new_pid) { (Void)(kout << "IP: " << hex_number(frame_ptr->IP) << kendl); - for (SizeT index = 0UL; index < HardwareThreadScheduler::The().Capacity(); ++index) { + for (SizeT index{}; index < HardwareThreadScheduler::The().Capacity(); ++index) { if (!HardwareThreadScheduler::The()[index].Leak()) continue; if (HardwareThreadScheduler::The()[index].Leak()->Kind() == ThreadKind::kAPInvalid || diff --git a/src/modules/CoreGfx/CoreGfx.h b/src/modules/CoreGfx/CoreGfx.h index 88787e8e..1d6966f5 100644 --- a/src/modules/CoreGfx/CoreGfx.h +++ b/src/modules/CoreGfx/CoreGfx.h @@ -12,7 +12,7 @@ #define cg_color(R, G, B) RGB(R, G, B) -#define cg_get_clear_clr() RGB(0xFF, 0xFF, 0xFF) +#define cg_get_clear_clr() RGB(0, 0, 0) #define cg_clear() kCGCursor = 0UL |
