Day 35 complete.

This commit is contained in:
igor
2026-04-16 18:10:54 -07:00
parent cd0ed29b30
commit dea811e073
5 changed files with 774 additions and 117 deletions
+167 -79
View File
@@ -3,11 +3,12 @@
#include "sdl_handmade.h" #include "sdl_handmade.h"
#include "handmade_intrinsics.h" #include "handmade_intrinsics.h"
#include <string.h> /* memset */ #include "handmade_random.h"
#include "handmade_tile.h" #include "handmade_tile.h"
#include "handmade_tile.cpp" #include "handmade_tile.cpp"
#include <string.h> /* memset */
static void GameOutputSound(game_state *GameState, static void GameOutputSound(game_state *GameState,
game_sound_output_buffer *SoundBuffer, game_sound_output_buffer *SoundBuffer,
S32 ToneHz) S32 ToneHz)
@@ -97,26 +98,6 @@ static void DrawRectangle(game_offscreen_buffer *Buffer,
} }
} }
static void InitializeArena(memory_arena *Arena, U64 Size, U8 *Base)
{
Arena->Size = Size;
Arena->Base = Base;
Arena->Used = 0;
}
#define PUSH_STRUCT(Arena, type) (type *)PushSize_(Arena, sizeof(type))
#define PUSH_ARRAY(Arena, Count, type) (type *)PushSize_(Arena, (Count)*sizeof(type))
static void *PushSize_(memory_arena *Arena, U64 Size)
{
void *Result;
ASSERT((Arena->Used + Size) <= Arena->Size);
Result = (void *)(Arena->Base + Arena->Used);
Arena->Used += Size;
return Result;
}
void UpdateAndRender(thread_context *Thread, game_memory *Memory, void UpdateAndRender(thread_context *Thread, game_memory *Memory,
game_input *Input, game_offscreen_buffer *Buffer, game_input *Input, game_offscreen_buffer *Buffer,
game_sound_output_buffer *SoundBuffer) game_sound_output_buffer *SoundBuffer)
@@ -135,6 +116,9 @@ void UpdateAndRender(thread_context *Thread, game_memory *Memory,
world *World; world *World;
tile_map *TileMap; tile_map *TileMap;
S32 TileSideInPixels;
F32 MetersToPixels;
ASSERT((&Input->Controllers[0].u.buttons.Terminator - ASSERT((&Input->Controllers[0].u.buttons.Terminator -
&Input->Controllers[0].u.Buttons[0]) == &Input->Controllers[0].u.Buttons[0]) ==
ARRAY_SIZE(Input->Controllers[0].u.Buttons)); ARRAY_SIZE(Input->Controllers[0].u.Buttons));
@@ -146,10 +130,18 @@ void UpdateAndRender(thread_context *Thread, game_memory *Memory,
GameState = (game_state *)Memory->PermanentStorage; GameState = (game_state *)Memory->PermanentStorage;
if(!Memory->IsInitialized) { if(!Memory->IsInitialized) {
U32 TilesPerWidth, TilesPerHeight; U32 TilesPerWidth, TilesPerHeight;
U32 ScreenX, ScreenY; U32 ScreenX, ScreenY;
U32 ScreenIndex;
tile_map *TileMap; tile_map *TileMap;
world *World; world *World;
U32 AbsTileZ;
B32 DoorTop, DoorBottom, DoorLeft, DoorRight, DoorUp, DoorDown;
U32 RandomNumberIndex;
GameState->PlayerP.AbsTileX = 2; GameState->PlayerP.AbsTileX = 2;
GameState->PlayerP.AbsTileY = 3; GameState->PlayerP.AbsTileY = 3;
GameState->PlayerP.TileRelX = 5.0f; GameState->PlayerP.TileRelX = 5.0f;
@@ -165,51 +157,136 @@ void UpdateAndRender(thread_context *Thread, game_memory *Memory,
TileMap = World->TileMap; TileMap = World->TileMap;
TileMap->ChunkShift = 8; TileMap->ChunkShift = 4;
TileMap->ChunkMask = (1 << TileMap->ChunkShift) - 1; TileMap->ChunkMask = (1 << TileMap->ChunkShift) - 1;
TileMap->ChunkDim = 256; TileMap->ChunkDim = (1 << TileMap->ChunkShift);
TileMap->TileChunkCountX = 4; TileMap->TileChunkCountX = 128;
TileMap->TileChunkCountY = 4; TileMap->TileChunkCountY = 128;
TileMap->TileChunkCountZ = 2;
TileMap->TileChunks = TileMap->TileChunks =
PUSH_ARRAY(&GameState->WorldArena, PUSH_ARRAY(&GameState->WorldArena,
TileMap->TileChunkCountX*TileMap->TileChunkCountX, TileMap->TileChunkCountX *
TileMap->TileChunkCountY *
TileMap->TileChunkCountZ,
tile_chunk); tile_chunk);
{
U32 X, Y;
for(Y = 0; Y < TileMap->TileChunkCountY; Y++) {
for(X = 0; X < TileMap->TileChunkCountX; X++) {
TileMap->TileChunks[Y*TileMap->TileChunkCountX + X].Tiles =
PUSH_ARRAY(&GameState->WorldArena,
TileMap->ChunkDim*TileMap->ChunkDim,
U32);
}
}
}
TileMap->TileSideInMeters = 1.4f; TileMap->TileSideInMeters = 1.4f;
TileMap->TileSideInPixels = 60;
TileMap->MetersToPixels = RandomNumberIndex = 0;
(F32)TileMap->TileSideInPixels / TileMap->TileSideInMeters;
TilesPerWidth = 17; TilesPerWidth = 17;
TilesPerHeight = 9; TilesPerHeight = 9;
for(ScreenY = 0; ScreenY < 32; ScreenY++) { ScreenX = 0;
for(ScreenX = 0; ScreenX < 32; ScreenX++) { ScreenY = 0;
U32 TileX, TileY;
for(TileY = 0; TileY < TilesPerWidth; TileY++) {
for(TileX = 0; TileX < TilesPerWidth; TileX++) {
U32 AbsTileX = ScreenX * TilesPerWidth + TileX;
U32 AbsTileY = ScreenY * TilesPerHeight + TileY;
SetTileValue(&GameState->WorldArena, AbsTileZ = 0;
World->TileMap,
AbsTileX, AbsTileY, DoorTop = FALSE;
(TileX == TileY) && (TileY % 2) ? 1 : 0); DoorBottom = FALSE;
} DoorLeft = FALSE;
DoorRight = FALSE;
DoorUp = FALSE;
DoorDown = FALSE;
for(ScreenIndex = 0; ScreenIndex < 100; ScreenIndex++) {
/* TODO: Random number generator. */
U32 TileX, TileY;
U32 RandomChoice;
ASSERT(RandomNumberIndex < ARRAY_SIZE(RandomNumberTable));
if(DoorUp || DoorDown) {
RandomChoice = RandomNumberTable[RandomNumberIndex++] % 2;
} else {
RandomChoice = RandomNumberTable[RandomNumberIndex++] % 3;
}
if(RandomChoice == 2) {
if(AbsTileZ == 0) {
DoorUp = TRUE;
} else {
DoorDown = TRUE;
} }
} else if(RandomChoice == 1) {
DoorRight = TRUE;
} else {
DoorTop = TRUE;
}
for(TileY = 0; TileY < TilesPerHeight; TileY++) {
for(TileX = 0; TileX < TilesPerWidth; TileX++) {
U32 AbsTileX = ScreenX * TilesPerWidth + TileX;
U32 AbsTileY = ScreenY * TilesPerHeight + TileY;
U32 TileValue = 1;
if((TileX == 0) &&
(!DoorLeft || (TileY != (TilesPerHeight/2))))
{
TileValue = 2;
}
if(((TileX == (TilesPerWidth - 1)) &&
(!DoorRight || (TileY != (TilesPerHeight/2)))))
{
TileValue = 2;
}
if((TileY == 0) &&
(!DoorBottom || (TileX != (TilesPerWidth/2))))
{
TileValue = 2;
}
if((TileY == (TilesPerHeight - 1)) &&
(!DoorTop || (TileX != (TilesPerWidth/2))))
{
TileValue = 2;
}
if((TileX == 10) && (TileY == 6)) {
if(DoorUp) {
TileValue = 3;
}
if(DoorDown) {
TileValue = 4;
}
}
SetTileValue(&GameState->WorldArena,
World->TileMap,
AbsTileX, AbsTileY, AbsTileZ,
TileValue);
}
}
DoorLeft = DoorRight;
DoorBottom = DoorTop;
if(DoorUp) {
DoorDown = TRUE;
DoorUp = FALSE;
} else if (DoorDown) {
DoorUp = TRUE;
DoorDown = FALSE;
} else {
DoorUp = FALSE;
DoorDown = FALSE;
}
DoorTop = FALSE;
DoorRight = FALSE;
if(RandomChoice == 2) {
if(AbsTileZ == 0) {
AbsTileZ = 1;
} else {
AbsTileZ = 0;
}
} else if(RandomChoice == 1) {
ScreenX++;
} else {
ScreenY++;
} }
} }
@@ -219,6 +296,9 @@ void UpdateAndRender(thread_context *Thread, game_memory *Memory,
World = GameState->World; World = GameState->World;
TileMap = World->TileMap; TileMap = World->TileMap;
TileSideInPixels = 60;
MetersToPixels = (F32)TileSideInPixels / TileMap->TileSideInMeters;
for(ControllerIndex = 0; for(ControllerIndex = 0;
ControllerIndex < ARRAY_SIZE(Input->Controllers); ControllerIndex < ARRAY_SIZE(Input->Controllers);
ControllerIndex++) ControllerIndex++)
@@ -290,32 +370,40 @@ void UpdateAndRender(thread_context *Thread, game_memory *Memory,
U32 Column = GameState->PlayerP.AbsTileX + RelColumn; U32 Column = GameState->PlayerP.AbsTileX + RelColumn;
U32 Row = GameState->PlayerP.AbsTileY + RelRow; U32 Row = GameState->PlayerP.AbsTileY + RelRow;
U32 TileID = GetTileValue(TileMap, Column, Row); U32 TileID = GetTileValue(TileMap,
F32 Gray = 0.5f; Column,
Row,
GameState->PlayerP.AbsTileZ);
if(TileID) { if(TileID > 0) {
Gray = 1.0f;
}
if((Column == GameState->PlayerP.AbsTileX) &&
(Row == GameState->PlayerP.AbsTileY))
{
Gray = 0.0f;
}
{
F32 CenterX, CenterY, MinX, MinY, MaxX, MaxY; F32 CenterX, CenterY, MinX, MinY, MaxX, MaxY;
F32 Gray = 0.5f;
if(TileID == 2) {
Gray = 1.0f;
}
if(TileID > 2) {
Gray = 0.25f;
}
if((Column == GameState->PlayerP.AbsTileX) &&
(Row == GameState->PlayerP.AbsTileY))
{
Gray = 0.0f;
}
CenterX = ScreenCenterX - CenterX = ScreenCenterX -
TileMap->MetersToPixels*GameState->PlayerP.TileRelX + MetersToPixels*GameState->PlayerP.TileRelX +
(F32)RelColumn * (F32)TileMap->TileSideInPixels; (F32)RelColumn*(F32)TileSideInPixels;
CenterY = ScreenCenterY + CenterY = ScreenCenterY +
TileMap->MetersToPixels*GameState->PlayerP.TileRelY - MetersToPixels*GameState->PlayerP.TileRelY -
(F32)RelRow * (F32)TileMap->TileSideInPixels; (F32)RelRow*(F32)TileSideInPixels;
MinX = CenterX - 0.5f*(F32)TileMap->TileSideInPixels; MinX = CenterX - 0.5f*(F32)TileSideInPixels;
MinY = CenterY - 0.5f*(F32)TileMap->TileSideInPixels; MinY = CenterY - 0.5f*(F32)TileSideInPixels;
MaxX = CenterX + 0.5f*(F32)TileMap->TileSideInPixels; MaxX = CenterX + 0.5f*(F32)TileSideInPixels;
MaxY = CenterY + 0.5f*(F32)TileMap->TileSideInPixels; MaxY = CenterY + 0.5f*(F32)TileSideInPixels;
DrawRectangle(Buffer, DrawRectangle(Buffer,
MinX, MinY, MaxX, MaxY, MinX, MinY, MaxX, MaxY,
Gray, Gray, Gray); Gray, Gray, Gray);
@@ -327,12 +415,12 @@ void UpdateAndRender(thread_context *Thread, game_memory *Memory,
PlayerR = 1.0f; PlayerR = 1.0f;
PlayerG = 0.0f; PlayerG = 0.0f;
PlayerB = 0.0f; PlayerB = 0.0f;
PlayerLeft = ScreenCenterX - 0.5f* TileMap->MetersToPixels*PlayerWidth; PlayerLeft = ScreenCenterX - 0.5f * MetersToPixels*PlayerWidth;
PlayerTop = ScreenCenterY - TileMap->MetersToPixels*PlayerHeight; PlayerTop = ScreenCenterY - MetersToPixels*PlayerHeight;
DrawRectangle(Buffer, DrawRectangle(Buffer,
PlayerLeft, PlayerTop, PlayerLeft, PlayerTop,
PlayerLeft + TileMap->MetersToPixels*PlayerWidth, PlayerLeft + MetersToPixels*PlayerWidth,
PlayerTop + TileMap->MetersToPixels*PlayerHeight, PlayerTop + MetersToPixels*PlayerHeight,
PlayerR, PlayerG, PlayerB); PlayerR, PlayerG, PlayerB);
GameOutputSound(GameState, SoundBuffer, 400); GameOutputSound(GameState, SoundBuffer, 400);
+20
View File
@@ -143,6 +143,26 @@ typedef struct memory_arena {
U64 Used; U64 Used;
} memory_arena; } memory_arena;
static void InitializeArena(memory_arena *Arena, U64 Size, U8 *Base)
{
Arena->Size = Size;
Arena->Base = Base;
Arena->Used = 0;
}
#define PUSH_STRUCT(Arena, type) (type *)PushSize_(Arena, sizeof(type))
#define PUSH_ARRAY(Arena, Count, type) (type *)PushSize_(Arena, (Count)*sizeof(type))
static void *PushSize_(memory_arena *Arena, U64 Size)
{
void *Result;
ASSERT((Arena->Used + Size) <= Arena->Size);
Result = (void *)(Arena->Base + Arena->Used);
Arena->Used += Size;
return Result;
}
typedef struct world { typedef struct world {
tile_map *TileMap; tile_map *TileMap;
} world; } world;
+519
View File
@@ -0,0 +1,519 @@
#ifndef HANDMADE_RANDOM_H_SENTRY
#define HANDMADE_RANDOM_H_SENTRY
static U32 RandomNumberTable[] = {
0x215cd69f, 0x33960616, 0x200b7d2b, 0x1f908c2d, 0x264590df, 0x0a3cfc19, 0x2fd85a9a, 0x19bd3968,
0x1a36d278, 0x3552bed4, 0x1cf24f52, 0x388993cc, 0x028fb3ea, 0x2c777ded, 0x39ca8471, 0x1badf924,
0x0f95267e, 0x2a4ff029, 0x2c1b26ea, 0x0212c345, 0x304d7fe0, 0x3b4e6efe, 0x11124fce, 0x2352fc4c,
0x0e2e5e8a, 0x32f3765d, 0x0586d64a, 0x266dc78e, 0x078b81a0, 0x2ed97589, 0x25bd6a30, 0x1b30e4d9,
0x1c54677f, 0x23e2dfbe, 0x291432c9, 0x1c96b5a4, 0x1e7506a8, 0x05aa31aa, 0x20eb4403, 0x16b4b641,
0x015327dd, 0x22a96588, 0x2791b6ce, 0x19ddefb5, 0x193e70e6, 0x20e4be26, 0x20af653a, 0x14a763d3,
0x06b3118d, 0x258d7a9d, 0x234c4d0f, 0x11a1e8d3, 0x36376dbe, 0x2a278e92, 0x2001a2e1, 0x38a559ad,
0x0b51ad7f, 0x21e0c446, 0x3525a24e, 0x03c5db7c, 0x314808a5, 0x0f6d93ed, 0x2e9cd586, 0x072ab82c,
0x31a4cced, 0x317b68bc, 0x0828616e, 0x38a715bf, 0x3a8282ee, 0x2c7a05c9, 0x20fde8f7, 0x0123299f,
0x21b948e6, 0x03f43f94, 0x00a8b539, 0x1d450e32, 0x26e066a7, 0x026a3974, 0x05e174c3, 0x1f82a40a,
0x0c18df90, 0x0259100c, 0x1fba9037, 0x1eaf9455, 0x19ee84aa, 0x03aeb52e, 0x1c9715fc, 0x2c06efaf,
0x3b0cd8c2, 0x38ff023e, 0x0aaa17b8, 0x22c36271, 0x0efc9744, 0x2ca29a2e, 0x1e092cd9, 0x14244517,
0x0b3229a2, 0x1ae40948, 0x1122bc19, 0x1d4030d8, 0x2f3ee014, 0x3ab08988, 0x139c2be8, 0x08e18800,
0x10cfec2f, 0x1502a4c5, 0x23a067a4, 0x1b2bd290, 0x209ab607, 0x15b03acb, 0x22bc7b9b, 0x101545bc,
0x1119ffc8, 0x1d6154dd, 0x0a4b9778, 0x26721250, 0x2545779d, 0x2681d425, 0x0a33b25d, 0x3b6cc91c,
0x30fb6279, 0x021c83e0, 0x1b56a904, 0x076842f5, 0x35f812fb, 0x2bed6962, 0x0cc7970c, 0x013f680c,
0x3adc0e67, 0x00028562, 0x19bf8356, 0x34999fa6, 0x36bdcfa6, 0x20024f9f, 0x2e9e6ac4, 0x13ee8a6e,
0x328264db, 0x36bd4dc9, 0x00f2e8fb, 0x03c8e579, 0x0dfe342e, 0x3a6ac7c2, 0x019649fb, 0x2acd8158,
0x0d6c533e, 0x22d4a366, 0x09b3eca0, 0x1d1c5f71, 0x2bfdfc10, 0x26565f62, 0x26891567, 0x0c722802,
0x1064048d, 0x3957f91b, 0x210b5400, 0x2174bf8e, 0x3a20c55c, 0x12298cad, 0x24b2839b, 0x19989e8b,
0x0fe31023, 0x1ecc7035, 0x11d82f8f, 0x2acf22e0, 0x34d0abd8, 0x14b55973, 0x2371617b, 0x360ada9d,
0x2ee17608, 0x3966a6cd, 0x1f9210e8, 0x0f0b6678, 0x1e675951, 0x390e5454, 0x147c383d, 0x3478de59,
0x2e1270e8, 0x1076264a, 0x1965d806, 0x0afc9fc8, 0x2afca15c, 0x21a8586c, 0x2f6a49e3, 0x0e610259,
0x34d5f4ee, 0x04125b27, 0x23846d17, 0x3a59d355, 0x1cbc0b74, 0x31668cfd, 0x142a3b7d, 0x04dc6cf7,
0x0d307713, 0x18743081, 0x169cb988, 0x34b7b84c, 0x29d2fa94, 0x2e1c637a, 0x1bec4cc6, 0x21ccde71,
0x27894b75, 0x0603ff32, 0x21d0d205, 0x1556ad41, 0x04d2511b, 0x1b17f3ed, 0x278ac793, 0x20af3661,
0x2cb8e8b4, 0x1fd148b6, 0x27e8876e, 0x07d9d403, 0x398c98ec, 0x32c8880a, 0x3254e09b, 0x307e9e09,
0x001fed00, 0x2bc65ea5, 0x23bd492d, 0x364904ce, 0x0c62ea07, 0x33c7d093, 0x22743f93, 0x2f1fd401,
0x316910bc, 0x2ab2b013, 0x30e57b68, 0x04a653ed, 0x27f32c6f, 0x0c9eed63, 0x2e8d03f6, 0x35e6bc8c,
0x2f48e535, 0x07cfb0f4, 0x078c3a32, 0x2867148f, 0x29abde80, 0x04f7fe48, 0x3915c749, 0x147b1dd4,
0x04ee9d27, 0x09a57f8d, 0x00461133, 0x11800427, 0x0fd57ce9, 0x02ff9d10, 0x0452d16d, 0x1f9f026f,
0x3a9b0cb0, 0x01d318c1, 0x265744c2, 0x044e345b, 0x08053d25, 0x1560dbc6, 0x39e4ed12, 0x12d37fa1,
0x37d986d4, 0x1c78f445, 0x2a5d3668, 0x07ccb3f5, 0x2df70465, 0x2832fae4, 0x27035a47, 0x2b0fa826,
0x2246ed3a, 0x3a7fa9b0, 0x0166599d, 0x2b85ceb7, 0x0b1b940f, 0x2175ce36, 0x1b74635a, 0x251ee85e,
0x25ddf9c6, 0x2b610e4c, 0x28d8816b, 0x26b71138, 0x24b376a1, 0x0a52f7ac, 0x27e31791, 0x066fa57d,
0x25a6b104, 0x0fd1dfa5, 0x312c23b5, 0x2c681ed5, 0x09d9add7, 0x270ceb76, 0x33ed54e7, 0x35536d33,
0x26e2afab, 0x0aab434a, 0x084ee111, 0x14accb80, 0x2521ad22, 0x3734e68e, 0x2d85f936, 0x1404f3a4,
0x1501e9be, 0x19a41d57, 0x18b1e9ff, 0x1563f32e, 0x28ced44c, 0x0545769d, 0x0649cc9a, 0x1eacb10f,
0x0f25ce0d, 0x109f4e24, 0x054302d3, 0x2be5f832, 0x027a3469, 0x249d5469, 0x11441d1d, 0x164cebb4,
0x1cf4d5e6, 0x0c95c68e, 0x254c7de4, 0x196b4cb5, 0x349ab9f4, 0x35371b51, 0x2e6c74c2, 0x2ae56ed6,
0x0bc34c7a, 0x0fa89c37, 0x1bc6d597, 0x3a43cd95, 0x0742df1d, 0x03ce78c5, 0x37e008f9, 0x12c40069,
0x202beaf6, 0x348c53f2, 0x1147136e, 0x2fc07bb2, 0x2b2926c5, 0x1d692c08, 0x162ba42b, 0x373205e9,
0x019c5c5e, 0x27f156f8, 0x09909f13, 0x18f574df, 0x2e8950fc, 0x1af34e14, 0x2f098207, 0x208961b9,
0x12b8072e, 0x0953a3cd, 0x1fa12a6c, 0x248fcd87, 0x2d5aa537, 0x1440b0bd, 0x068c80d3, 0x11ed3221,
0x2f422388, 0x0d5095bc, 0x24fb2e29, 0x3870d2af, 0x0e548b76, 0x125cf8f8, 0x2524a9b7, 0x1a448a70,
0x0806fae6, 0x38de9728, 0x244e2424, 0x388beeb0, 0x381394e1, 0x32baaee5, 0x24caf222, 0x1c3f6d78,
0x06333da7, 0x21b4eb58, 0x364b4006, 0x016e3469, 0x2236c6b8, 0x2d2d1f4d, 0x1e06baee, 0x19b2f409,
0x339d099c, 0x000b79ce, 0x15d739aa, 0x2c7ebe15, 0x1b2e8b6a, 0x378985e3, 0x09a3a198, 0x1284858f,
0x37ceb6c3, 0x329a2bbc, 0x0c7630d4, 0x335b6b6f, 0x0fb604a8, 0x0a5e293d, 0x3b8e93b0, 0x378f2025,
0x030743d7, 0x39edbbee, 0x17e6a590, 0x096de2fb, 0x0defd5f7, 0x2e9c8615, 0x36e0584d, 0x069f7296,
0x36bd8429, 0x302f25bb, 0x0c2f2f14, 0x1788f95b, 0x12b9323b, 0x085df2ef, 0x21d6891a, 0x36c17577,
0x0ffed393, 0x1cbbbb85, 0x29dbc185, 0x2e563f0c, 0x0fabeb2a, 0x08ff6e11, 0x0669e89b, 0x216ffcea,
0x105f127d, 0x3a10e71d, 0x1bef4973, 0x03ad5728, 0x39032746, 0x33c3c79e, 0x12487cc0, 0x1635c844,
0x29f25fbc, 0x2b85062b, 0x2a849f67, 0x34a663b7, 0x1dac17c9, 0x210b6ab6, 0x2cf95b39, 0x05ca9112,
0x3475afdc, 0x35aa22e9, 0x07a3ffd5, 0x27a73a5f, 0x05337381, 0x18acf30d, 0x1b5a96e9, 0x21cd8aa0,
0x10e69d12, 0x10edaba6, 0x39f1d3d8, 0x0f65467e, 0x2aebbcc5, 0x30f65e21, 0x190cada2, 0x11dfaee2,
0x3a583155, 0x123696fa, 0x23fcc5f4, 0x3b13bc46, 0x28b0a15a, 0x192eebf9, 0x2c8be8e0, 0x00c58840,
0x2f293d87, 0x1bc82635, 0x04765163, 0x355f3d5d, 0x0dfbb03b, 0x37741e72, 0x07e0e2a6, 0x2464dc5d,
0x1e833448, 0x1a4e216d, 0x30f388ca, 0x2c15b3a8, 0x1221c359, 0x00f6b643, 0x39d22794, 0x302299f1,
0x2851dcd0, 0x346972eb, 0x122f991b, 0x0ad62970, 0x153f2359, 0x112790c7, 0x29310d1a, 0x08170d17,
0x0e32c5fa, 0x39e0d25c, 0x0720ca6e, 0x366c7504, 0x12c2b9d4, 0x241734ea, 0x0c9214e3, 0x1a9e9330,
0x202e508d, 0x380eafdd, 0x234a0241, 0x0b957180, 0x0ccb202c, 0x0e72f288, 0x0ab8cf62, 0x1f09ec61,
0x052fef52, 0x34889b16, 0x3a946e9d, 0x13d9bb12, 0x249755dd, 0x2a434c29, 0x19dab247, 0x309b5128,
0x2c1c1b47, 0x1c0bc7e7, 0x01351be3, 0x31d8fcc9, 0x37be5296, 0x0649ca20, 0x215f878d, 0x3035a796,
0x24dcc573, 0x30471b9e, 0x3434a994, 0x0b77418f, 0x37a1c7b5, 0x1c1bcf21, 0x08a638ca, 0x13770262,
0x34c7ae50, 0x28143f63, 0x1f19a19c, 0x0a066565, 0x115d9f1c, 0x2388e0cf, 0x02a3aec6, 0x1c02ba57,
0x02412190, 0x326a8184, 0x2a5b27db, 0x14054bc8, 0x1e8e9956, 0x2e61b9d8, 0x01c75a18, 0x1b4f99c9,
0x0902efc4, 0x3551c386, 0x0c0bfe55, 0x14dbf84d, 0x1dd6191e, 0x14215578, 0x29981f35, 0x21e2b248,
0x2171971b, 0x152122b4, 0x3b79a1d7, 0x0a6f6bfe, 0x0943809b, 0x111dbd0f, 0x33403402, 0x119c4815,
0x1a55be4d, 0x21d8158d, 0x33054dff, 0x2240d1dc, 0x0ff78258, 0x1cdc8020, 0x16e769c3, 0x25fc2400,
0x063cd7c4, 0x0cfeb8c8, 0x19134bb8, 0x17cf4b76, 0x0ff6ba0c, 0x35a968b6, 0x1d8f7c38, 0x047df8f6,
0x228ebb8b, 0x3946ee24, 0x0cc210d2, 0x345c546c, 0x0ef8a16b, 0x14f26959, 0x396bfe60, 0x1b61ddd1,
0x1a92f5e2, 0x1fecf815, 0x30eecf4c, 0x263fac30, 0x17f19f39, 0x08b0c4ed, 0x04a42c55, 0x256ee8ae,
0x241c8a4c, 0x0c30b024, 0x1571caf9, 0x22d909d0, 0x1693329c, 0x092885e3, 0x353745fd, 0x35c46efc,
0x12efa89e, 0x13078cdb, 0x2cad9230, 0x1efc1889, 0x0ea2a862, 0x06358776, 0x37207001, 0x14ceb75b,
0x14aca063, 0x0afdd238, 0x145d7b5e, 0x2c69abae, 0x0673368c, 0x1de6b54d, 0x25069c4c, 0x2762ef64,
0x1ce44fea, 0x1bea56e7, 0x080970b6, 0x3402c157, 0x397cc1de, 0x2b8655e1, 0x0bcd4e1b, 0x0d08d92c,
0x328e73fd, 0x160c0bff, 0x26d3bbad, 0x31fa5feb, 0x1b20503f, 0x05d9407c, 0x1a1213ac, 0x2fef510b,
0x038bf602, 0x208aac1e, 0x2789e090, 0x3b1fc79f, 0x124b12ed, 0x089baf4c, 0x33a8afb9, 0x2c40392e,
0x2c06edc8, 0x3131a0ea, 0x32324fb9, 0x2e00fcab, 0x36f04cd7, 0x101d3664, 0x31f56e8b, 0x16853b1b,
0x279f664b, 0x23b7ffec, 0x1dcfaee8, 0x02d0450c, 0x2f350645, 0x34c0631d, 0x07b02f71, 0x1c6a20c0,
0x27d60dca, 0x11310a47, 0x245dce16, 0x0936c620, 0x0b522695, 0x2b98d56a, 0x17f9a1e2, 0x39a83a5a,
0x1afee7ef, 0x0b4edb3b, 0x332464c3, 0x2d81f4c8, 0x153af607, 0x01f5fe99, 0x17fffc7c, 0x24496410,
0x3753b199, 0x0bbff9be, 0x2a10f24b, 0x2b5d40a1, 0x0bf7b0d7, 0x29741bf0, 0x3374a6bb, 0x0ec00226,
0x0ff84f4d, 0x273705ab, 0x0e724481, 0x17dabf4d, 0x3058cf02, 0x2b85a131, 0x0d47348f, 0x1501e976,
0x0420f729, 0x264827d2, 0x24f6de40, 0x34938c5b, 0x26ae03b6, 0x19f351a6, 0x17e895dd, 0x1025722e,
0x0ec38968, 0x0bad4d45, 0x3ae2e99b, 0x3897589f, 0x05cc067b, 0x0d4b86fe, 0x11426795, 0x2878526c,
0x38f37b80, 0x0e5fa72b, 0x392ba587, 0x0957fbb1, 0x15eaac59, 0x0f831b02, 0x0a92369a, 0x18d4b55c,
0x24dc552f, 0x15acbfd9, 0x14e19edb, 0x3a94f8e8, 0x19b0b475, 0x2aa5bf37, 0x1901f681, 0x10ff4f9d,
0x25db4183, 0x312127d3, 0x235eb886, 0x3b6ac2a5, 0x3a727b32, 0x3aa68c92, 0x3ad3eb17, 0x0f35013e,
0x136e253c, 0x2d26b33b, 0x39a47a51, 0x2334d761, 0x20aaad2f, 0x01beb229, 0x0a0f1b36, 0x0a215ec7,
0x021fef7f, 0x2dff36e8, 0x22a9f637, 0x169fdc9a, 0x0830e956, 0x29a922b2, 0x1f13076f, 0x15e63916,
0x3b77b9bd, 0x1e02de6f, 0x19dc9aae, 0x0f310c8b, 0x27e09f88, 0x292ae331, 0x17f98adc, 0x12bdf1de,
0x2037aca3, 0x30a8f650, 0x30b68019, 0x23144d86, 0x33e9594e, 0x1a55f780, 0x3053f657, 0x1a3f16ae,
0x2e275c49, 0x1dc38e9b, 0x19f44d04, 0x0cf77967, 0x18dd13e8, 0x0c803b36, 0x0ff25ce9, 0x1ce22333,
0x25f22088, 0x2431af08, 0x1c01422a, 0x18d8ae39, 0x2bac6011, 0x1a7eb6d1, 0x23ef2faa, 0x1e93d109,
0x19402d6c, 0x194ca8e1, 0x2ed1a0e0, 0x2a42c8e7, 0x20cf7dac, 0x1ebfcd64, 0x12ed97e4, 0x15975d6f,
0x0dc4de2e, 0x2ae9d615, 0x00f350a1, 0x2a5e76dc, 0x1db02cf3, 0x1de009e2, 0x1806e484, 0x3706fe1f,
0x28b91103, 0x2b9bc9fb, 0x2a222d5e, 0x0f91c01a, 0x0a2d42c6, 0x1b9599e4, 0x0c3d25e6, 0x3b936884,
0x206cb197, 0x0dd72846, 0x1fc76c36, 0x1cccc795, 0x04525a1d, 0x1647aad4, 0x0887747d, 0x21a90497,
0x091266be, 0x0862d094, 0x109621c4, 0x28b4c686, 0x169f2efd, 0x327f63a2, 0x2a4131cc, 0x1f452773,
0x1d82d0dc, 0x3127279c, 0x392f7b48, 0x0579861a, 0x02d44284, 0x274efbf8, 0x315e73b4, 0x10f8377e,
0x0e63c87e, 0x2d78c637, 0x0f7b5732, 0x18a0e85b, 0x39f860b7, 0x03c64385, 0x13232341, 0x1e338663,
0x378a2999, 0x059c8e37, 0x15121a27, 0x1ff86de2, 0x3a6a256d, 0x234292d2, 0x2498d4f3, 0x0c240feb,
0x172da61a, 0x164879f9, 0x0003cc72, 0x06a858c7, 0x1a52109b, 0x01cfc3ab, 0x31d76ceb, 0x25b899bc,
0x1e40f2f5, 0x131d9689, 0x3a9340d5, 0x3012ba19, 0x208e4dbc, 0x1e41492c, 0x38999f3b, 0x1d5051cc,
0x04f8fcfb, 0x1755dad1, 0x11352a46, 0x11f8db73, 0x02bcd966, 0x23aa30fb, 0x3a53c83d, 0x077d261f,
0x13c2a9dc, 0x2eb4240d, 0x2b668834, 0x20c56791, 0x30107dec, 0x06fbfc84, 0x0cde20cb, 0x196de127,
0x1256a934, 0x2ce238cc, 0x3298018f, 0x0ccfb448, 0x14ca7c9d, 0x335c6962, 0x071813bc, 0x01905ecc,
0x158b0d65, 0x10c7571b, 0x25bb069e, 0x0ecb9925, 0x24f06562, 0x0e593963, 0x1ab4ed00, 0x2eb31faa,
0x2ae2c379, 0x0eac23fc, 0x28567303, 0x07abce64, 0x27bf39ab, 0x32385afa, 0x2f390fe1, 0x33d6a9c8,
0x1fb53562, 0x02f52398, 0x1e5bcffa, 0x0fe624c8, 0x2eb532a0, 0x25ab2f54, 0x371f4c95, 0x1f53e41a,
0x351cb0d1, 0x22ae7550, 0x00e535ab, 0x0f06067c, 0x08353e95, 0x2de8b2f6, 0x1fed6c06, 0x1381b90e,
0x01c642b1, 0x10d8b80b, 0x0a4e255a, 0x05f06492, 0x173c0bc5, 0x2874e3fc, 0x185af813, 0x05e558ba,
0x1bfdad29, 0x0d03b88f, 0x02665d24, 0x10fffb20, 0x11c13953, 0x0b529879, 0x2cdf5858, 0x1833efae,
0x0d70d37d, 0x394bec0d, 0x0d4fad46, 0x2b82ccb5, 0x2c2e159b, 0x01a7ffce, 0x23701090, 0x14a00c1b,
0x014dbaec, 0x35c00cb9, 0x28fe3fb1, 0x3530e627, 0x2f9c3593, 0x2c958a45, 0x0d214381, 0x02a7a5fb,
0x04cd6f44, 0x1835f194, 0x02b1aaaa, 0x3185668c, 0x20efa318, 0x30c1f280, 0x39cdd4be, 0x368f1934,
0x022cd13f, 0x24d13c98, 0x36a01581, 0x1dd31bbf, 0x31b406b7, 0x15d23852, 0x1a68ee53, 0x072e3504,
0x1c4f509d, 0x002cc49f, 0x02bc7ee6, 0x289a463e, 0x1b6870d7, 0x135ce6e8, 0x13ba79a1, 0x18c276ed,
0x1072c0c2, 0x28e17e75, 0x1671d93e, 0x1afdec6b, 0x2d989316, 0x2e04ec3a, 0x0d0d1dd5, 0x27ad9812,
0x0f0f5f10, 0x283fffa0, 0x300f418f, 0x12f017f6, 0x35cccfe4, 0x0e619c06, 0x0b7baace, 0x2593ddcb,
0x026ba93b, 0x34dad01f, 0x096c4c49, 0x2860ac27, 0x24eff1e2, 0x166c6015, 0x170d4379, 0x161c4ec6,
0x3b063730, 0x0aa6d2c5, 0x015e4f7c, 0x00d61690, 0x19186ad3, 0x20dbd252, 0x12a7ef94, 0x3768202c,
0x138da99a, 0x0ad93ea9, 0x25bfba89, 0x0f985331, 0x29b32c4e, 0x1d6c5ba6, 0x33df10dc, 0x1ad75b02,
0x24be4ed5, 0x29a905fd, 0x315a3714, 0x1c4629d7, 0x277364e1, 0x227b6b34, 0x325d886f, 0x1f6b3ed5,
0x04cfd8e4, 0x02b8a5bb, 0x1a297210, 0x278de44d, 0x0a395804, 0x126e6447, 0x1ed8a64e, 0x057e4dee,
0x04d72c1d, 0x068c742b, 0x171bfed6, 0x35323aae, 0x2a7bd415, 0x006d10ba, 0x1d063f73, 0x34eca5f2,
0x272a87ec, 0x124ece63, 0x1e0bb26a, 0x0041f524, 0x307b207e, 0x32472f6f, 0x28a50c39, 0x0709ea77,
0x14a36114, 0x12e15509, 0x2815e44f, 0x3677d5ba, 0x285e1552, 0x37eb4ad2, 0x2df5fd79, 0x099c26af,
0x334f80bb, 0x3175cfd0, 0x2814a92a, 0x160f4759, 0x14b8f16e, 0x2714b6d4, 0x1fab9524, 0x14ee98c7,
0x38e55da8, 0x2e15d625, 0x1f20d1e5, 0x2edf8a54, 0x0440495c, 0x2944fee1, 0x1c92d960, 0x12269106,
0x25759a85, 0x227fb797, 0x1ad442ad, 0x18bc0b24, 0x255da54a, 0x28851871, 0x21a6057b, 0x24102652,
0x275ce44c, 0x1cf7b023, 0x26e3411e, 0x0f550822, 0x19b4f159, 0x25383ae3, 0x2a57e48a, 0x08ed8044,
0x3151f20a, 0x1a2ab562, 0x1c15fc2a, 0x0d45680c, 0x0743de79, 0x309e4e4c, 0x3b1c3ed2, 0x3b767c2d,
0x38d9889c, 0x24a6f419, 0x170d9955, 0x0ad6d071, 0x2ab3a88d, 0x05da60d7, 0x00cb451d, 0x177729d6,
0x2e57c3c8, 0x2473d28f, 0x2b276b3b, 0x35de901c, 0x21a196cf, 0x13a48654, 0x2fc9e344, 0x39ecab8d,
0x117bc147, 0x2a387bdc, 0x04dc806a, 0x2ad5cfc1, 0x000a1b3a, 0x3893e350, 0x1b28a9ca, 0x2f12dd78,
0x3b659338, 0x32df6fbf, 0x1a23d384, 0x38476f87, 0x378360c9, 0x357d5bd4, 0x00acf42c, 0x2207b0fc,
0x17306728, 0x2202438a, 0x1b8b925e, 0x0f88b61e, 0x14ab3468, 0x17b6237a, 0x0a6308c6, 0x05fb86d1,
0x0f4dedce, 0x2adf7230, 0x2d3a629a, 0x0bd002d7, 0x113dba6e, 0x23c0f745, 0x3321a23e, 0x1b89dd70,
0x119cbf15, 0x188200c0, 0x332dd103, 0x2fd2e26e, 0x39d17bbd, 0x116db340, 0x0b94e569, 0x2f3ce146,
0x35300df3, 0x275bf379, 0x29334aab, 0x0cc420ba, 0x39791fbf, 0x0066abaf, 0x343fd050, 0x148171fe,
0x200f039d, 0x2d64173c, 0x0ea24a30, 0x0fec022a, 0x1a61623f, 0x1df134c5, 0x0c03fe82, 0x18434555,
0x046cc880, 0x040627c3, 0x27f1e77f, 0x03359c0a, 0x3b7063b4, 0x0a26125f, 0x1c1f6117, 0x34cf58ee,
0x37844e70, 0x09216ea9, 0x07162864, 0x376b5271, 0x130c1e0b, 0x07653897, 0x3407a2be, 0x13e1e7e7,
0x21f7f9f3, 0x188a0ea7, 0x026b5167, 0x07b1d023, 0x3b5bc136, 0x022c6c28, 0x0499ccc2, 0x188c6fab,
0x32910e46, 0x1a19c5b2, 0x22ea0af2, 0x3b3b153a, 0x2dfd6eb9, 0x129b397b, 0x30a1e0c4, 0x2c1632b4,
0x24a64adc, 0x22f1f6d1, 0x1ef2d336, 0x0a67f46d, 0x0e33fd32, 0x2b08af9a, 0x1bc2530f, 0x23644944,
0x02a78d72, 0x185f839b, 0x19dda174, 0x37d5193b, 0x12b52faf, 0x344e20f0, 0x0c1da2a6, 0x14a22597,
0x0a3f4e4f, 0x0313548a, 0x1ba18aa0, 0x39bd4fea, 0x28b88008, 0x1ae9f21e, 0x1cfa7ed5, 0x148e9d53,
0x2f8bd0ec, 0x00474216, 0x37452d5b, 0x3639b609, 0x2996d15b, 0x39fe2570, 0x390a095c, 0x2abc1dd2,
0x0f631356, 0x3a927459, 0x1ba0117d, 0x344fdc49, 0x06045bdf, 0x1a4de3c7, 0x017cae0e, 0x0677f013,
0x353007d0, 0x3ab2ed16, 0x2b4594d3, 0x2d8caa3a, 0x0f08e125, 0x070aa6e3, 0x22b86895, 0x3449ea33,
0x353ed891, 0x3027dfd5, 0x1d296378, 0x0da7afd4, 0x25698e87, 0x1d2dc302, 0x0e08dd3f, 0x1f17be40,
0x1d5b4f97, 0x334d8e7b, 0x1ad8db59, 0x14902820, 0x3232a985, 0x07558d8e, 0x2e1b2bf3, 0x1cdb7f12,
0x2b843308, 0x25c6fc17, 0x0f507d7f, 0x25a45a99, 0x0949770a, 0x280b2171, 0x0f063db7, 0x136e6051,
0x23fdf344, 0x23258f01, 0x29074766, 0x28466046, 0x1c07bf7e, 0x168c9240, 0x3588d1fb, 0x04fe8b6b,
0x2c7babd1, 0x19643f4c, 0x1b781980, 0x24815140, 0x19f971cb, 0x37c17eea, 0x3698ef0e, 0x0b94f4ca,
0x0ace38b1, 0x1d4a900d, 0x2c16e236, 0x184059cd, 0x3b7877ea, 0x1bc2a4f4, 0x109ee37b, 0x1b539b3e,
0x2c5c877a, 0x13a7245f, 0x2e7f4897, 0x2650064f, 0x11aee6a9, 0x2545df0d, 0x024b82a1, 0x157b5e43,
0x0219179e, 0x28ce14bf, 0x33c4d5e1, 0x0ff33d9c, 0x0fc6ec62, 0x105afd22, 0x32782e66, 0x1a0fe33a,
0x165c3d27, 0x02d196cc, 0x2199a1bd, 0x0d249bea, 0x07c1c3e1, 0x17a02172, 0x12bffd3b, 0x0eee4a69,
0x27725ca0, 0x3b1690a9, 0x0810c423, 0x22a02e93, 0x0f5456dd, 0x0f435cff, 0x0a827c42, 0x0dcd11dd,
0x1847208a, 0x09f81ee9, 0x10e8054e, 0x17703541, 0x0ec86ebe, 0x0ddb0422, 0x13e740a7, 0x1ff0a51b,
0x23ae09f8, 0x0eb5c779, 0x28580990, 0x0380f18f, 0x0feefab3, 0x16c3e935, 0x16ff8e45, 0x0b2b3793,
0x070b3aae, 0x2a987e3c, 0x070a49c2, 0x01cdad60, 0x339e6bbe, 0x0f82f06c, 0x186b0348, 0x07261bad,
0x220b78bc, 0x0dbf4f28, 0x2f806b7d, 0x242dddd7, 0x1f16c34d, 0x04807b9b, 0x173f92e3, 0x138642e8,
0x358fcd42, 0x13106039, 0x05506b18, 0x1e2e3070, 0x1edfca35, 0x0c0749b9, 0x04763d3c, 0x3565a462,
0x1fbce2a0, 0x06cc82e4, 0x0983092d, 0x194b8032, 0x1febf449, 0x0ecebb56, 0x1432eb15, 0x08ed51c8,
0x33ca37d1, 0x0ceb3972, 0x371681a9, 0x30062ca0, 0x36420acd, 0x36a42711, 0x0424705b, 0x0e647db4,
0x355e9eb5, 0x3088e292, 0x1447b21a, 0x289c7894, 0x39ba80ad, 0x1e3bdbb8, 0x36d393b8, 0x1bfff4d3,
0x22c002b6, 0x0c72dbee, 0x34d9839b, 0x1537d0c9, 0x14aa012b, 0x22446ad0, 0x3b67a20a, 0x2ed921a9,
0x34d450ea, 0x27d4a0bd, 0x16a34881, 0x0cebaf41, 0x0109aa69, 0x1055cd06, 0x2f2ea8e7, 0x1d6df19b,
0x22ddfc5c, 0x0db95419, 0x136a8b5d, 0x1109b5a5, 0x2570b19e, 0x0265664a, 0x1587ccec, 0x2ea76f64,
0x3b970671, 0x1bd47135, 0x1f0832ac, 0x0f1ebad9, 0x0dc13cd1, 0x2fa54b7b, 0x099cfc4c, 0x105df56c,
0x17ebb62b, 0x29606aa9, 0x0238673f, 0x041fc89a, 0x16c249db, 0x23adecf7, 0x05a942c5, 0x041d226d,
0x1751dbe6, 0x39fdfb7d, 0x2d15dfd3, 0x36708bb8, 0x0e71476c, 0x11650c97, 0x2d4f8ddc, 0x09a7bb80,
0x2be76a65, 0x2fa07197, 0x336f3375, 0x03e7482c, 0x345400f4, 0x00bea6a4, 0x2990d90c, 0x1e58c085,
0x0e3ce7f0, 0x0a36948b, 0x0b90908a, 0x1ceda3db, 0x2f94bfd5, 0x37796e7a, 0x017b0027, 0x07072e4a,
0x11b45831, 0x155cd118, 0x2d36f238, 0x37e15b1a, 0x082970dd, 0x32ca699a, 0x05b77a9d, 0x31b43a6e,
0x1427c587, 0x23d8e1f2, 0x196c71c0, 0x0f1f02c1, 0x399f2950, 0x1debf9dd, 0x0d51dd31, 0x383db0b5,
0x3ab9b3ca, 0x04705f40, 0x236e75bb, 0x23ea0b07, 0x3b18184a, 0x1b80f900, 0x25a2d336, 0x1531fc02,
0x21b412ad, 0x32302bd1, 0x35477b0c, 0x0c143c63, 0x212769f3, 0x1c656152, 0x3861a511, 0x2e007b5f,
0x2c30363b, 0x27fcedb6, 0x097f1769, 0x1cdf06a3, 0x1adf9f90, 0x0a1ef00c, 0x0ee0d897, 0x1d39d9b3,
0x199b3a17, 0x22fd9d26, 0x05d4653d, 0x09a4456c, 0x0d8447e4, 0x36d83c6b, 0x1a116b2f, 0x2d509d5c,
0x15126c80, 0x2191116a, 0x27d7802b, 0x256ff7d8, 0x2edba022, 0x363bc2f6, 0x2d5dc9a9, 0x10d9b9cf,
0x07901ffa, 0x2bd05b84, 0x1ba46748, 0x10c73ea7, 0x06dfa465, 0x0448133a, 0x0bf5450b, 0x3a97b139,
0x1a08d0c8, 0x20815096, 0x3239b9a1, 0x1627669e, 0x1162745f, 0x279508fd, 0x0d30ea7e, 0x021985b8,
0x1f1586b9, 0x1cd65329, 0x1c74cbb8, 0x3aacaffc, 0x34f42424, 0x2db3bac6, 0x28b37074, 0x32d6f9eb,
0x1f71392f, 0x30e7492b, 0x16d58e75, 0x2fbec086, 0x3a75384c, 0x2ccc3087, 0x26b43cb0, 0x2b83b172,
0x39000c5b, 0x23f476e8, 0x379b51f2, 0x00b35cc4, 0x078a0428, 0x0963672b, 0x21dc5a3e, 0x17050e56,
0x1067815c, 0x1d3d851e, 0x25fc3df3, 0x188fc8e9, 0x2f554790, 0x309f62cf, 0x142ab2e9, 0x21e73cda,
0x3b223656, 0x0a259b13, 0x0d9fe68a, 0x247e71d9, 0x0708d7be, 0x1a6a7566, 0x31bc9182, 0x1dc34e16,
0x2f4b6439, 0x38598269, 0x043b582f, 0x19b3b59d, 0x16bdd648, 0x22bf528f, 0x065748ab, 0x1cfd4df5,
0x2215a998, 0x254fed64, 0x0434e8ef, 0x1534c8d0, 0x3a69bc07, 0x0123cc53, 0x3942a3ea, 0x1eec2d59,
0x019122ed, 0x3b0ac7d7, 0x30dc4834, 0x18c4c6a7, 0x2aae5bdc, 0x1a55d37d, 0x0ba6b066, 0x0c24ec54,
0x0401a419, 0x1811ff79, 0x36590e06, 0x1fc0d954, 0x2fea2d42, 0x10b50e24, 0x09f6bcb3, 0x33badb8d,
0x0385a208, 0x33ec40d0, 0x26e8b71e, 0x348830c2, 0x1a77f4a0, 0x11444638, 0x1871db7a, 0x2598223d,
0x3910c3d4, 0x009955f4, 0x3505f760, 0x07f40be4, 0x1c786beb, 0x2d598693, 0x20238efb, 0x26ef4a8d,
0x11f5c2d3, 0x32fd1420, 0x2ad47985, 0x0e7b0552, 0x15cc1498, 0x24ca147e, 0x02e8d420, 0x1febe20d,
0x2d35030f, 0x362260e9, 0x309c277c, 0x08243bfa, 0x337e2fe4, 0x03af043f, 0x147c4042, 0x08d76686,
0x300ef5c4, 0x2e987efd, 0x08060cbf, 0x1d9f5143, 0x32d9199a, 0x092305e3, 0x2295e820, 0x224600eb,
0x10044c3a, 0x20b72b68, 0x319ae6aa, 0x0f9e0614, 0x2ea4b821, 0x07772309, 0x11a0d4cb, 0x0ee88947,
0x0328c5d3, 0x06fe79c5, 0x0df8b794, 0x118c5b74, 0x0aadcba3, 0x10bac91f, 0x377ff115, 0x25d5ef72,
0x18979c75, 0x0965e690, 0x3122dacd, 0x1abfdb2f, 0x219d5fb9, 0x2c5015ed, 0x233b055b, 0x3394c89a,
0x238e711b, 0x281cf9a4, 0x0d76f4c6, 0x178b0ad5, 0x2000cd91, 0x29e52aa4, 0x234dc62f, 0x3a48d96f,
0x01a8f2d0, 0x1b5d78ad, 0x1842684d, 0x34677133, 0x29bd74fb, 0x29adb764, 0x18c8639b, 0x29a62a78,
0x265b8c43, 0x10a1fbd6, 0x09d5367c, 0x0e2cd028, 0x2530f711, 0x05fabbd8, 0x02058249, 0x017415e3,
0x114c838d, 0x0d415613, 0x0c96d7ee, 0x05a5c712, 0x2d840d02, 0x17bdfcf4, 0x133640e1, 0x07a0e60e,
0x27dc8fb2, 0x13650e95, 0x31aafa61, 0x05ef6974, 0x30660e5f, 0x35bfcdc2, 0x227bf455, 0x11c78447,
0x11965284, 0x09b58ae2, 0x27ac7623, 0x32983b81, 0x211e7e65, 0x39069d87, 0x34b6b034, 0x20f10c26,
0x2d0fde30, 0x38788e39, 0x0ba48b60, 0x206dd51f, 0x29bafa56, 0x2ccd3d48, 0x1d2b3966, 0x2cfa6981,
0x38d67040, 0x0ca1f41f, 0x202d27f8, 0x010bc078, 0x2ad61fc5, 0x1084ccf5, 0x379931d4, 0x0756fe08,
0x13c7f1dd, 0x20d38402, 0x1d8e62d0, 0x00fc72af, 0x13711274, 0x00de2739, 0x140d82e4, 0x1b00aeb2,
0x2fa0d8bd, 0x37f378d1, 0x0d203e91, 0x2297c8aa, 0x36767386, 0x249ee3b2, 0x2c95c518, 0x2677b9af,
0x1f154a73, 0x17725239, 0x2fe41718, 0x312a8adb, 0x1215a309, 0x10438ff2, 0x26b347f6, 0x16035351,
0x2c7a0f97, 0x1e9079f1, 0x1c2cb903, 0x224739c0, 0x2286152c, 0x22551878, 0x0c07531e, 0x2637604c,
0x06cbaf6d, 0x0a4f0fa6, 0x2e7bd1a9, 0x0ec75b9c, 0x1047070f, 0x0c3a28f9, 0x14f72330, 0x2f213adb,
0x1c42a0c7, 0x1e5f6cfe, 0x10bc3ae0, 0x347b71db, 0x2590ab1f, 0x0e373137, 0x1138c958, 0x3b92534b,
0x0c517fb7, 0x0fc9aa4a, 0x362e4f34, 0x1ab6d70b, 0x06e7ac22, 0x30407065, 0x231ae93b, 0x020d5f87,
0x166ab432, 0x182ed850, 0x27bfc852, 0x389b0f4d, 0x384ad72e, 0x31329036, 0x1e86ab5c, 0x1cfd6ec4,
0x2407a55d, 0x0a30e305, 0x2a3ab944, 0x2196a273, 0x1e676783, 0x18b94410, 0x3a0d3969, 0x3324fb04,
0x16c6e46b, 0x14349a6e, 0x22535276, 0x385fed51, 0x09e5c40f, 0x3a4774f9, 0x0c0d9ee2, 0x05ae58cb,
0x006ee88a, 0x2504f199, 0x0cf35082, 0x09f5e0e1, 0x31b7ce42, 0x0ccca253, 0x22045675, 0x01052ae1,
0x0f1bec18, 0x1b19ea11, 0x0154147c, 0x34136810, 0x219b3735, 0x055d3dff, 0x07f3927f, 0x2dbb9c2f,
0x2d91917b, 0x2677c758, 0x3918d696, 0x2eee1f78, 0x26497800, 0x29236de1, 0x2f9f22fc, 0x08d461b8,
0x3353134e, 0x377947e1, 0x29c7664e, 0x1c260634, 0x2af6332b, 0x1685d6d5, 0x00a5efba, 0x1438edeb,
0x113cb5bc, 0x095a3551, 0x2c337750, 0x0828896d, 0x1dcc1722, 0x234fc45f, 0x080cb08e, 0x0dc23e20,
0x0baeddbf, 0x38c118c2, 0x23f3ee31, 0x3ab86f26, 0x1efc5188, 0x276dd167, 0x0216be9a, 0x362db032,
0x201c3211, 0x17e5c6a6, 0x380bc163, 0x3aa59ffd, 0x115abd71, 0x0e8a8ec1, 0x0759d42b, 0x26cc78f7,
0x387f791f, 0x13b5e8de, 0x29c04d20, 0x0f58f1e2, 0x2a212fcb, 0x0dbb49a4, 0x0e162a7b, 0x0fe9c217,
0x0b14fbdc, 0x028fd76b, 0x0eaca243, 0x239b3e90, 0x283f3390, 0x0178bbc1, 0x1908d359, 0x36b3934d,
0x087cca9c, 0x1051d5eb, 0x13edd3eb, 0x0fae3278, 0x351a7568, 0x0a4c814c, 0x32c65145, 0x00d96ff1,
0x2df44320, 0x373a234a, 0x17e94b42, 0x295805bd, 0x1dd023ed, 0x0696c397, 0x2dac937e, 0x1217026f,
0x2308dd92, 0x32c93a41, 0x2eda0d27, 0x288ca9cf, 0x30c20739, 0x1edb3e0d, 0x25b0cd55, 0x362b8c42,
0x023ed0e6, 0x277a0020, 0x247b01ee, 0x23509e88, 0x2fb40020, 0x2d3e4d79, 0x16e06d89, 0x2128dcb4,
0x04519cb3, 0x1b508a66, 0x1aad5150, 0x132a25ac, 0x2c5e4613, 0x1c2f639f, 0x05f85bc7, 0x06f74d33,
0x05e704ef, 0x2fb104a6, 0x167a181f, 0x2bba1034, 0x022abe32, 0x2fccdf52, 0x0614fa7e, 0x3ababead,
0x135f5f1f, 0x0b323cc3, 0x1820c056, 0x2556abf2, 0x027f63d2, 0x136e21a1, 0x178b66d9, 0x306a811f,
0x14dcbac5, 0x04756e8b, 0x08504808, 0x2dafc47d, 0x2fb2a0f4, 0x2d119999, 0x25476498, 0x383fecea,
0x070b7e75, 0x1262cf71, 0x081c2e4b, 0x282f4015, 0x1bdc6b2f, 0x338a3565, 0x15914de7, 0x37f2f2e0,
0x2b4c8a5c, 0x231e9cab, 0x03b1657a, 0x0f0c6554, 0x30b6a42e, 0x287ce62f, 0x09f2bc3d, 0x31d8335f,
0x2cc5e30f, 0x26b33722, 0x1304e55b, 0x299b9331, 0x238af781, 0x23b8ac4b, 0x35474aea, 0x2aeea817,
0x1d382c89, 0x093609d4, 0x296c0bbf, 0x33671c91, 0x1494a2fb, 0x29d31a6e, 0x230bcfa9, 0x20c2370d,
0x3b37ea9b, 0x31bbc269, 0x323a6658, 0x1568e64a, 0x0ddee9e4, 0x2564a7b0, 0x105ce247, 0x384b2524,
0x005cbd0f, 0x368e357f, 0x28da2283, 0x0cacbcac, 0x31c0dbfd, 0x1a46ad28, 0x099893f6, 0x18ae29bb,
0x138d0af3, 0x334f8413, 0x2b095012, 0x09533b8a, 0x1dcdfcac, 0x31b0adfa, 0x23161258, 0x2b018d0f,
0x2e9deabb, 0x224a2e3f, 0x2bce453d, 0x280b2875, 0x00604b7f, 0x004f0ce5, 0x35b8c233, 0x0110ec59,
0x1960a98c, 0x1e452cca, 0x1ad9bf40, 0x20bf9c68, 0x2472e73f, 0x3a0efcb6, 0x15eadbdc, 0x294dcf64,
0x266a6020, 0x362317f1, 0x35052d6b, 0x2d37c242, 0x00490b00, 0x11cb6ae1, 0x0181e755, 0x1e7b8b69,
0x1c761e0e, 0x12664853, 0x39499242, 0x33bb10a5, 0x0adc34d1, 0x29e608e4, 0x3aa763ae, 0x36ba86da,
0x27f863f1, 0x18167478, 0x17c91ca7, 0x22206f9d, 0x24e1d4d6, 0x2d9d1233, 0x1206be20, 0x2974d8b6,
0x34370203, 0x1df9ef54, 0x2862ef98, 0x31f2ccc5, 0x2c03cb26, 0x0b897838, 0x199a1c06, 0x3643e2ec,
0x1351de42, 0x025be0c0, 0x202de6d8, 0x24b65f47, 0x20c29679, 0x06612e58, 0x068471cc, 0x15b1d8d8,
0x1ee17b26, 0x05393d3f, 0x18ee6d7e, 0x0851698b, 0x346d9744, 0x0c9e1c53, 0x0d3db959, 0x3ab76197,
0x2f0633da, 0x241ddad7, 0x18405f83, 0x1b5d5724, 0x1912cc53, 0x2695f3b9, 0x366c9adb, 0x3acb969b,
0x1716560c, 0x019c668f, 0x0468ff18, 0x3297e223, 0x0e134971, 0x227029d3, 0x2f8f25e3, 0x271e4de1,
0x2cbbb06d, 0x0fe5f73c, 0x3541e868, 0x1de06c65, 0x0c6a202a, 0x1dd4c0c7, 0x036030da, 0x1f6fe0b2,
0x2fdc8a52, 0x0030eb07, 0x11b8e0f1, 0x04a30a75, 0x20f41ec8, 0x3b1f935a, 0x07a5bf49, 0x38a37eda,
0x31228dd6, 0x12c5a71f, 0x1325e807, 0x3a52d1b2, 0x29cd10b0, 0x179ed808, 0x20f84455, 0x014ec588,
0x1d156b1f, 0x15358b40, 0x1acc4394, 0x19698632, 0x06ad0f67, 0x175eb2f8, 0x2b55fd47, 0x3250f5fc,
0x0cbf5e48, 0x1593f1d0, 0x2b5de235, 0x0c9b30cc, 0x382a990b, 0x1157cefa, 0x0f93965e, 0x0de52f7d,
0x2e7c28af, 0x2a2a99ad, 0x3432830d, 0x21655a01, 0x321547cd, 0x25cf7e62, 0x2cc7b74d, 0x17903de8,
0x372850fc, 0x009dd1c8, 0x0ddb793d, 0x336be199, 0x3b4569a4, 0x0eaebab4, 0x0c3cbe59, 0x2598d5d6,
0x1a620c7f, 0x237b0e69, 0x359e3ea8, 0x36297355, 0x080f9e46, 0x12aed5b2, 0x1baa4978, 0x09a4065c,
0x044493cc, 0x35a652d4, 0x36864f17, 0x0ecd7b34, 0x08b35385, 0x07a394b4, 0x2ef471a7, 0x10111e9b,
0x211e358b, 0x37bea61f, 0x2a8af6bc, 0x1007ad01, 0x35a4c748, 0x373e77aa, 0x04a5cea0, 0x07c87628,
0x2c32f06a, 0x0b556ae7, 0x1bec2d96, 0x040efc42, 0x0401334a, 0x18f92d89, 0x013f64d9, 0x0d4694cd,
0x365c8922, 0x1bee029a, 0x3573d9d0, 0x05d11ff8, 0x2d8970bd, 0x0368ab43, 0x1d7ee37c, 0x26d5f9a6,
0x216e2643, 0x1e52e507, 0x22a3f938, 0x381ed43e, 0x1c4e657f, 0x33166ad8, 0x068e1f2a, 0x19d503e5,
0x23f3b795, 0x2cd419c0, 0x01f5ff87, 0x2d01ceb1, 0x00340f93, 0x2ce5caba, 0x20580856, 0x2577da41,
0x1e9ced65, 0x013c18a1, 0x31f0b762, 0x28ff9df9, 0x0d680bb8, 0x2edad941, 0x2cc21a03, 0x1f81162d,
0x2fef00b5, 0x0aabc8c6, 0x24523572, 0x2de985cd, 0x1aec1e08, 0x1a431806, 0x1a1e02c8, 0x2aab7ef5,
0x23a9f241, 0x33535e8e, 0x056341e4, 0x18fd454b, 0x10767ef9, 0x127cdc18, 0x03d290c3, 0x1064b302,
0x01eb3641, 0x06da2f9d, 0x1b61a8d6, 0x34ed69eb, 0x344fdace, 0x173e1bd5, 0x0eef2373, 0x106b86fb,
0x3b078254, 0x2ab07a33, 0x348f8469, 0x345c4e1b, 0x1affbe18, 0x1c73e6ec, 0x27b28ac9, 0x330085c4,
0x05005286, 0x0412d009, 0x38160d9d, 0x12251b16, 0x02b800dc, 0x037baaea, 0x3129f230, 0x1b4b922c,
0x06c6b423, 0x12fd14ad, 0x0c813111, 0x20a8c33f, 0x1add060a, 0x2b0cd670, 0x08842219, 0x1bb1b70a,
0x1349294d, 0x0ae324f9, 0x1c1cf3d6, 0x175e44eb, 0x0a21457c, 0x392fb1a6, 0x28532504, 0x0e97ac4f,
0x1687953d, 0x344d19b6, 0x2bc9d762, 0x2ef12cb1, 0x35e942ab, 0x1be3bbc1, 0x315447a4, 0x39fd80e5,
0x1c1971bb, 0x17f52d61, 0x38c83ad3, 0x28438325, 0x3af54650, 0x18e810ee, 0x28b365a5, 0x2a346714,
0x22f6ac8e, 0x11143599, 0x33add7e4, 0x233f85cf, 0x312c23b1, 0x00280e5d, 0x2583519f, 0x16b464b5,
0x0c41128f, 0x1a474d2b, 0x2a35c17f, 0x0f655a99, 0x311ac24c, 0x013ba3e6, 0x3635ce2f, 0x17f4bfef,
0x119ceb94, 0x121448bd, 0x32d48e97, 0x2385d331, 0x357a6d05, 0x02e57c4f, 0x24690ca6, 0x2199747f,
0x0cd143a3, 0x0068c75b, 0x2f9eb01c, 0x29e996b1, 0x36e311d8, 0x04e9c270, 0x11b3ea91, 0x3491e94a,
0x022768bd, 0x164aa059, 0x2978a7b4, 0x15b7bd92, 0x15fd9c2d, 0x2b10af98, 0x2217f8e7, 0x23de5944,
0x2b356c56, 0x1aaa668e, 0x1901a70c, 0x0218c219, 0x38445527, 0x305dfa92, 0x2c755f2e, 0x19969a1f,
0x30495c5a, 0x372bc09f, 0x28e17cdf, 0x0b2e454b, 0x24690b60, 0x2c88eac9, 0x1133dcb3, 0x2db1137a,
0x07d0b515, 0x03fd3dc4, 0x1a3d7d71, 0x0f92cf14, 0x2a9a05ef, 0x2ffc8b05, 0x2f5a57b7, 0x11efc233,
0x08e6d970, 0x33477c18, 0x2e60ac8c, 0x13d2f925, 0x1bb4992c, 0x266f342b, 0x203c8899, 0x348e9871,
0x02d77374, 0x0b9e4e95, 0x27d04a7f, 0x2e7e9483, 0x33650cf5, 0x1cd47483, 0x0e475353, 0x0638dde4,
0x346bc3b1, 0x199d2c47, 0x12af7eac, 0x057f07fc, 0x0eda99e7, 0x0324304b, 0x09a27493, 0x239f8205,
0x2978f3d7, 0x369dc471, 0x36394bcf, 0x0ac127a7, 0x3a24d06f, 0x3752e892, 0x349925c1, 0x2b5f602a,
0x0b3b37d5, 0x08afbfe1, 0x027fece1, 0x08a2dad3, 0x16b757b0, 0x236f013f, 0x273b75b4, 0x08addb5a,
0x2d681fcc, 0x03f0f0f3, 0x1de4e2ee, 0x15c107d6, 0x2099d693, 0x3a469089, 0x1112aeb8, 0x38dcfe99,
0x02eb02a9, 0x3a793bff, 0x355f87c2, 0x10449d61, 0x37ad1b5f, 0x227ae265, 0x1e0326e4, 0x3af4f1d2,
0x305a345a, 0x009e4a72, 0x0c417a73, 0x29286c08, 0x35b8a04c, 0x26a30340, 0x2c424a39, 0x3778407f,
0x1a8d2d6b, 0x0661dd77, 0x04da8a09, 0x02682ac1, 0x0ebf994c, 0x15dd9dad, 0x2c77ab9f, 0x02e64f59,
0x2c8cf45c, 0x1e80c9ea, 0x04d9064d, 0x11063375, 0x33053638, 0x20d934bf, 0x3b383f1a, 0x38ff979d,
0x07f29a78, 0x38058e76, 0x1a287392, 0x2db13163, 0x173e9b27, 0x1c54d29e, 0x1f7281dd, 0x3ac6bd1f,
0x0ffadd11, 0x130a7fa2, 0x2609f456, 0x09d1d37f, 0x36c0d72a, 0x3701aa4e, 0x0f730136, 0x042fd4a5,
0x2bfc4484, 0x27603440, 0x34760dc8, 0x23bcdcd4, 0x3966623d, 0x33aab8ee, 0x078de307, 0x360cd805,
0x31918015, 0x286871aa, 0x16463db8, 0x0061ae7f, 0x160145a0, 0x3699b75a, 0x3581c6ad, 0x333f2fe7,
0x1e58c1d0, 0x124df48c, 0x2956bf5a, 0x328385bf, 0x2511b18a, 0x06095ee7, 0x3100addc, 0x204d386c,
0x34ff0416, 0x1baf1338, 0x238e8591, 0x00aaaa21, 0x1571ca17, 0x03345454, 0x0b80884e, 0x3a0d720e,
0x2d1aaf7d, 0x2abc4931, 0x08cfae4d, 0x0500c088, 0x2c0fbdee, 0x3a728dd1, 0x1e8494b5, 0x393365d2,
0x24a408bb, 0x1ee50a8f, 0x0d0e07ef, 0x0545e868, 0x1a8c2705, 0x20404c30, 0x356fc776, 0x240767c2,
0x2cee222f, 0x1c9116d1, 0x36ef9841, 0x2505ed5c, 0x0fac0e41, 0x0a2f3a1e, 0x364f5225, 0x1112466c,
0x31c8b640, 0x16f8c616, 0x0e2e8761, 0x06771317, 0x16d00533, 0x2ff7a3f3, 0x04637c69, 0x20f11509,
0x10db944e, 0x37cf79eb, 0x3559b87b, 0x219f5dd4, 0x2133797b, 0x10546358, 0x27d9fcdd, 0x23bd66b4,
0x27f6b63f, 0x0a7cc8f9, 0x09f359e2, 0x2a9b6332, 0x08a60681, 0x2d448027, 0x0f369fed, 0x2baa9d7e,
0x020aed54, 0x3938f78f, 0x0dfa40a6, 0x2f151431, 0x25dde736, 0x1ef75a33, 0x34ac7922, 0x1805e150,
0x2feef629, 0x36c75857, 0x29a858bb, 0x2d5d1197, 0x39e89031, 0x16e9ce32, 0x3497dd36, 0x1a75686a,
0x35261c18, 0x31e464fa, 0x2a0ece9d, 0x263f7063, 0x2dbd649b, 0x12c6130a, 0x2fe8c9d2, 0x03dca70d,
0x2e87ab63, 0x1b25a4a2, 0x0e07120a, 0x1a703779, 0x1f33f719, 0x16106faa, 0x1d2ac8dc, 0x03e793eb,
0x191abdf0, 0x1b506355, 0x1dacaacb, 0x3004f724, 0x0f8f3187, 0x2d2c881a, 0x30922251, 0x06f28bd1,
0x18527678, 0x03f9f8e1, 0x0bf587c6, 0x181c679e, 0x0e466445, 0x1e335a49, 0x2bab2626, 0x173f4b52,
0x18defe6f, 0x11d93c2b, 0x2f19ac0d, 0x102cff0f, 0x2c76e4a7, 0x0cef8cbb, 0x211dfb73, 0x16e470ef,
0x0dcb17b0, 0x2c48d6c1, 0x07a78125, 0x03436890, 0x3a34f563, 0x235d3a1e, 0x353c7b8f, 0x08ccde46,
0x283330cd, 0x2acb9189, 0x0c40edff, 0x0c31d52c, 0x32c17644, 0x2cb83476, 0x2b4fd4f8, 0x32794b6a,
0x0e5b349d, 0x101ba62c, 0x0b2412b0, 0x2c163d7f, 0x1c7484b3, 0x1b16a330, 0x10926ff9, 0x369a59b7,
0x37c7394a, 0x385be299, 0x33d1b002, 0x3b24b17c, 0x0c2f0bee, 0x29ea51a5, 0x31a8fbd9, 0x18e156a1,
0x2caa780d, 0x3436e07e, 0x18512f4c, 0x0838b4e6, 0x30dcb36c, 0x1d0d4dc8, 0x0c368cee, 0x342da031,
0x23e32a47, 0x3062dbd8, 0x195fc2d1, 0x216936c0, 0x0a2a58c6, 0x3662382b, 0x102c97d6, 0x325795c4,
0x02f57064, 0x20ab1a96, 0x33b64348, 0x1d40f8ea, 0x15b641cb, 0x01ca9a42, 0x06f7ff90, 0x257e2ea8,
0x22019621, 0x2e1f3361, 0x0b70cd09, 0x015f38f3, 0x094be8e4, 0x3a63869d, 0x0b3f7990, 0x30454bf9,
0x218d844d, 0x0a73869d, 0x0c81d636, 0x0a2542a4, 0x01fea867, 0x0a3316cf, 0x17a9cc66, 0x3955b870,
0x20facdfb, 0x19994d48, 0x2f978466, 0x24b22356, 0x35e8feaf, 0x1df98a51, 0x29950d64, 0x352794d3,
0x1c34aef7, 0x23a30718, 0x066aaea1, 0x0be4158d, 0x00b05e7e, 0x046796e4, 0x081ce875, 0x0d846dba,
0x0df7bad3, 0x31850e35, 0x035e261c, 0x25abcba7, 0x07260d2c, 0x10fcfe0e, 0x15c8b0e5, 0x01325b41,
0x0ad5fae2, 0x01563ff6, 0x1d541c29, 0x26e36b18, 0x000926cc, 0x06ccf1da, 0x101c9d36, 0x0975f369,
0x36150721, 0x35a245c8, 0x3198bb6a, 0x335b9275, 0x22e5a6f2, 0x1b464c62, 0x05aba62a, 0x07eb1db5,
0x2a669b97, 0x049c8135, 0x2f920c7a, 0x207df96b, 0x3b4ab4cd, 0x07b93b63, 0x248e2b8d, 0x2f93b8d4,
0x2b2b2101, 0x2552a7c6, 0x24c63201, 0x19b2321a, 0x0801b5cf, 0x1833b47f, 0x10657ba0, 0x38c0fc42,
0x10555858, 0x27296c8d, 0x0dad34c7, 0x272cd71a, 0x052b0317, 0x2d3a92f9, 0x2e1973e5, 0x24b6ceaf,
0x26ee33a9, 0x1efacb39, 0x01092d3c, 0x0b2f0fda, 0x244e6973, 0x1a756b64, 0x2c9475a3, 0x390e495b,
0x11042c27, 0x3773264b, 0x1dae4c0e, 0x0c61ff1e, 0x215a4b5d, 0x3970539f, 0x2f26a2a5, 0x1fd33b85,
0x0a00b39a, 0x0634e02c, 0x1db0806f, 0x290c453c, 0x0b236ac1, 0x035f5610, 0x0d0a9c2d, 0x199c0db3,
0x1ba8f9a2, 0x2d97e77c, 0x1d24ab55, 0x193f61fc, 0x3128f6f1, 0x342bf41a, 0x0f2a86c4, 0x2b5991b3,
0x2bf09304, 0x3a170260, 0x16bd47a0, 0x19e862c6, 0x235f36d6, 0x197edaa8, 0x0860863b, 0x1bf4b866,
0x0684c592, 0x3270a03b, 0x2b7d93f2, 0x2aa9fb4d, 0x1b73388f, 0x1833054a, 0x3adb162d, 0x02245f7b,
0x356b6840, 0x25bdae3d, 0x136a92a8, 0x06f871af, 0x325507a0, 0x219b61d7, 0x2cf23680, 0x23b3fb47,
0x3ae0b3b1, 0x35103005, 0x3907d83b, 0x20432a8a, 0x09ce8d1f, 0x2150be33, 0x29c861c6, 0x293a2503,
0x09b704df, 0x0f48af33, 0x07973df6, 0x2ec00dd9, 0x32ac5663, 0x3b8e21fa, 0x05ca3ca7, 0x014ffdea,
0x11ce4aa0, 0x27bd17a5, 0x0316e766, 0x362d1c1f, 0x1125f761, 0x145b9891, 0x211bed9e, 0x30398807,
0x342bb120, 0x02cb1604, 0x1582d2fe, 0x37a34749, 0x0fe868bf, 0x159b0e3a, 0x228f9c0b, 0x1933415e,
0x1eca78bd, 0x0a3d34a7, 0x09c5ecde, 0x0cc5b9ad, 0x15dcb89c, 0x37cc393b, 0x15a8d8d7, 0x0b6dfa4a,
0x2cb1162e, 0x0b9a50e3, 0x00550be4, 0x22c56516, 0x24ddde4c, 0x240c5230, 0x0f302c74, 0x1d1551d4,
0x1a6aec3e, 0x02135229, 0x00d8db95, 0x24c4e057, 0x37d507d3, 0x377888a2, 0x0b51f2c6, 0x0e4ea233,
0x2f39fc6b, 0x14f53bea, 0x0814ee05, 0x04111929, 0x1b69107f, 0x0681b7a1, 0x22ff4f1d, 0x27c674d7,
0x27d2d473, 0x13bba251, 0x2f59b5bf, 0x07a6a670, 0x09ea8903, 0x2908622a, 0x37ee6e48, 0x38110850,
0x09b6e0d2, 0x038e7ed8, 0x17840acf, 0x303bed9f, 0x08597c29, 0x0e3b16ea, 0x2e68ca1c, 0x1b3cd922,
0x12175445, 0x06a26838, 0x1ea476a6, 0x202dbb94, 0x28acc37d, 0x28e176a2, 0x36521b1c, 0x30776a9b,
0x04e2b222, 0x36161247, 0x314a12ce, 0x08b8fe12, 0x37891272, 0x2dba1cde, 0x289d9d9d, 0x18169890,
0x15d207a6, 0x269717af, 0x107c53a2, 0x203826e7, 0x27b81e7f, 0x274080d2, 0x1fa83012, 0x0ab74066,
0x2d806d45, 0x143df136, 0x1d92a3ca, 0x0a78036c, 0x3ad0854f, 0x19355514, 0x06d8a9c9, 0x39fc1985,
0x212979ef, 0x33f3a1b6, 0x176795ff, 0x2013616b, 0x13577930, 0x12ed55b1, 0x27bdc38d, 0x31b65aed,
0x29483e8d, 0x36360550, 0x057d826b, 0x07a29a7f, 0x330b2220, 0x228bef68, 0x2128d09f, 0x386f2f77,
0x175bca32, 0x0703a414, 0x0d1d86c5, 0x0d4c07ee, 0x28965f28, 0x3804753f, 0x2f4d93d1, 0x1b47b77d,
0x38f8f05e, 0x134a6a1f, 0x2a3a65c0, 0x11f59664, 0x25c3bcd2, 0x11151357, 0x26818025, 0x16a3d713,
0x34a726b4, 0x17eb5fa6, 0x04daf450, 0x14a50f9d, 0x0a0712ea, 0x2acdb2cd, 0x2d45b181, 0x1de49f55,
0x3090b2c8, 0x23de31ba, 0x18dd0aa3, 0x20a3767a, 0x32a8b47a, 0x36067f64, 0x0a74d70d, 0x2d445b54,
0x1c36887a, 0x092d5d4e, 0x1d24eb8c, 0x280b2429, 0x10b62861, 0x04b8472e, 0x2cf5617a, 0x05a45b96,
0x1ac5f41b, 0x09283ea9, 0x0b40ed75, 0x1c7ea48c, 0x123d3a53, 0x22813dc4, 0x303f54a0, 0x1b56db70,
0x347f09c9, 0x0f44c295, 0x20861a5a, 0x3a3f30aa, 0x05128997, 0x123c2293, 0x2e187faf, 0x1936b0d6,
0x266912df, 0x0ab49e55, 0x0ce8fb75, 0x30b0827b, 0x162537fd, 0x2385a0ec, 0x132acaf9, 0x29557353,
0x3062bb22, 0x0589080d, 0x13957663, 0x02aeefd7, 0x31208076, 0x152a980b, 0x33732501, 0x005a59bd,
0x10419592, 0x3122a91a, 0x1bf19a06, 0x360803d5, 0x303910a6, 0x0750cba0, 0x38b914e7, 0x2a5daca2,
0x288eead1, 0x24bcd95d, 0x07dba79d, 0x0cb859c5, 0x0f97fa24, 0x37c1d740, 0x1adb1ff2, 0x350e1729,
0x2e47b589, 0x06e5d625, 0x2c389c98, 0x001ed758, 0x375f2fb6, 0x112227cf, 0x03817551, 0x11332349,
0x1e3d6c89, 0x1227fb02, 0x24f24056, 0x038aa605, 0x21845b4c, 0x06b07720, 0x2878b8db, 0x35f759b9,
0x385a148c, 0x13c4fdf9, 0x28ba0949, 0x00e6595d, 0x11e0da34, 0x29420928, 0x32013ba9, 0x32bf8135,
0x34fb5089, 0x17bb8322, 0x06e73832, 0x2713d500, 0x301ab710, 0x38687e81, 0x066f3d28, 0x2cb259ed,
0x0a28ef4f, 0x31f70b92, 0x316d7826, 0x1f1631ce, 0x2abef23e, 0x08b4800c, 0x33d5dbc6, 0x14cdc21f,
0x0dbf5efb, 0x359afc44, 0x3b4728e1, 0x1adbbb6d, 0x06f8e253, 0x02fb92fa, 0x1323b74d, 0x2bc4c8fc,
0x2d5a7993, 0x32e57c01, 0x236b3e68, 0x24114a72, 0x387f25ff, 0x2f26b20f, 0x3653c14f, 0x21308910,
0x0d9d2265, 0x20ad3125, 0x104d9320, 0x02d78960, 0x2b5e84f2, 0x144caf13, 0x0832bee1, 0x0399952e,
0x02853ddc, 0x39b3a982, 0x310b5012, 0x07bc7a4d, 0x143ff320, 0x088baaa5, 0x2ef1427f, 0x0bb9d2e2,
0x0075d37b, 0x03def225, 0x29f7ac77, 0x34b78359, 0x1ca61dac, 0x2c388ae3, 0x16382088, 0x3030cd9b,
0x2abdcb77, 0x071cac33, 0x240366db, 0x16b61ecd, 0x25764bdb, 0x10c0dc42, 0x3020af60, 0x1c8e2d5b,
0x215c9388, 0x024c552f, 0x28fad6de, 0x1667f4b0, 0x1c40232e, 0x29599909, 0x18d766a3, 0x25fa0006,
0x06217045, 0x2960df8b, 0x0d5f45fc, 0x101e16e5, 0x2fd2b050, 0x04823616, 0x0ee9bf0b, 0x1e273f73,
0x040e5268, 0x138f2eff, 0x2bd14248, 0x016e08d0, 0x35ac8c34, 0x00bf7117, 0x1d4dcfcd, 0x332767ce,
0x10f3369a, 0x120858a8, 0x1aba50a9, 0x39e88aed, 0x2f3ff97b, 0x0cba79f5, 0x34debc0c, 0x11b34731,
0x296a5769, 0x375f6483, 0x13af1c78, 0x30084c6a, 0x0e478c74, 0x39ee27ff, 0x37da6b4f, 0x11989666,
0x3433565e, 0x317f9e24, 0x3923655f, 0x08d274d8, 0x28952a56, 0x020cb43c, 0x19195b36, 0x217ada60,
0x1d120a25, 0x2ea48a66, 0x0b7940a2, 0x064d4b8f, 0x2f7c6d2c, 0x1544c788, 0x2c8325ce, 0x3536f495,
0x03d3caa6, 0x31783da9, 0x186cc060, 0x008af290, 0x0a0d3dbc, 0x0c9a89a9, 0x0431262d, 0x1fd59da3,
0x310bb43e, 0x0e11f68c, 0x2ac6aef6, 0x201e466c, 0x3380e56a, 0x16c7d3d9, 0x2a5cbc2e, 0x04d798f4,
0x18094960, 0x2db994b0, 0x0e8cfed5, 0x0fa9523d, 0x2b9938e7, 0x300e2985, 0x34541923, 0x0f50a9c8,
0x32ebcbe7, 0x10a62296, 0x34613fc5, 0x2fce2ce9, 0x17058af2, 0x2a6e779e, 0x3b0fa5fb, 0x123b2333,
0x08ab540b, 0x092a7a4c, 0x36794b28, 0x0ad4aa6f, 0x274d1aa0, 0x1e8ac3c8, 0x03465afb, 0x2b762f37,
0x2f856446, 0x0398b12e, 0x1c92c344, 0x28e4fe47, 0x2eebc47b, 0x04f83a92, 0x118a91a5, 0x02ab8859,
0x1a997a58, 0x02efa784, 0x29c13de0, 0x17c2d922, 0x37d03028, 0x0785d365, 0x12df49f5, 0x16c3a5f4,
0x14eaebfe, 0x1321e979, 0x0ddc7a11, 0x24f3ed3b, 0x259e077b, 0x166b68df, 0x0277073f, 0x0e46d3bf,
0x08ec2439, 0x30fe84c8, 0x18753b74, 0x036f7f86, 0x3b05fedb, 0x25a808fe, 0x0c208b16, 0x06747dde,
0x087cd34b, 0x399d4568, 0x293a2d43, 0x001542a5, 0x1d7d517e, 0x24964522, 0x24e65b28, 0x0d0e3689,
0x072763ab, 0x2f3c33a2, 0x2db8774b, 0x34507f22, 0x1687031e, 0x05603a52, 0x3a379777, 0x086e4b13,
0x0428944d, 0x01bf4429, 0x01a087a5, 0x1b282d37, 0x1775cf71, 0x1218884f, 0x1ca6d1d5, 0x1341c8f1,
0x396d1344, 0x26939618, 0x0459bc59, 0x2b462f82, 0x2672ad59, 0x3023ee91, 0x31daabb7, 0x01adabd0,
0x20469b73, 0x325ac600, 0x0b9b10d4, 0x2c1399f1, 0x1596ae05, 0x3ae6cde4, 0x0ea27e7f, 0x3447e659,
0x20883e29, 0x0874b536, 0x15cf6a0a, 0x233ba11d, 0x286fc26b, 0x0c63776b, 0x35e4aa3c, 0x018e092e,
0x23dd1f3c, 0x1022dc65, 0x07c45189, 0x27cd5bdf, 0x2e089097, 0x21994dd7, 0x0fe06fb7, 0x120cb02b,
0x29265ca7, 0x087d7445, 0x2aa6a3e0, 0x1c2c0add, 0x2dbf61c3, 0x2ccd05f9, 0x1f364bf4, 0x27c4b5d3,
0x32e8c109, 0x3396f372, 0x15535656, 0x030d3377, 0x354f0573, 0x16284c88, 0x3647fe4f, 0x1207e9d5,
0x212054de, 0x097a8bba, 0x1b3ecbba, 0x146c6c0d, 0x1dc44688, 0x380ece2d, 0x21d69f71, 0x01e55f43,
0x12b56ec2, 0x2dbd7a89, 0x110fd347, 0x0bcabfd3, 0x0c548fec, 0x04f195c9, 0x2da44f88, 0x1d8e2dde,
0x00f2f0f8, 0x39e87f64, 0x0ff1109b, 0x3a4a2ac2, 0x314252ae, 0x29d539b1, 0x17b351cc, 0x1b585812,
0x1b1b28d6, 0x1ae1a9e1, 0x00ab089a, 0x11f7676c, 0x2a3e9969, 0x0a8f89ba, 0x283a952c, 0x1db11d31,
0x1f908f25, 0x3b3fa4e7, 0x172bf26e, 0x0ba209e5, 0x00958319, 0x09a290ff, 0x10becebf, 0x208f4647,
0x1009fdeb, 0x32067cd6, 0x04dceb08, 0x07dc6391, 0x2d4a2bf8, 0x2c563f0b, 0x0c214a07, 0x120dabf3,
0x1a58212a, 0x0dda1513, 0x1aa09b72, 0x32e3f942, 0x1de0f24c, 0x2ce682b2, 0x034d8fed, 0x2a41ee8b,
0x36f1ec92, 0x1ce7fd18, 0x13e662b8, 0x04dadde7, 0x0339c824, 0x127f50ad, 0x013a0f27, 0x196b5608,
0x2b54837e, 0x1969788f, 0x02af107c, 0x1508dc82, 0x0671506b, 0x333243c4, 0x320e66ef, 0x36a7dc60,
0x2dea73e5, 0x17713d35, 0x36db53b7, 0x3207968e, 0x342419aa, 0x1333586d, 0x1598e86e, 0x24c43c40,
0x1a80ac3a, 0x3204144c, 0x2c194c7d, 0x36dd5ade, 0x1a8d1cc6, 0x1ae05379, 0x1cd354b9, 0x168e0698,
0x23a5055a, 0x1c093002, 0x260802a8, 0x1fa0d966, 0x207ae901, 0x12e60ee3, 0x320db0e4, 0x349e9aae,
0x2ca68cf7, 0x14dcf5cf, 0x12c38671, 0x35327680, 0x0016d45f, 0x3b8ff782, 0x370b97f7, 0x01d8d97e,
0x2e0c5327, 0x36631da2, 0x36c4b8f3, 0x168012fe, 0x23d75bdc, 0x3af0f856, 0x1a3010fa, 0x05d79653,
0x0e364c46, 0x1d087f6d, 0x10771381, 0x3704014d, 0x14d20f27, 0x0e3c6155, 0x1714f786, 0x265f5a02,
0x0a55450e, 0x055eeba0, 0x2d7a011d, 0x3b505330, 0x3799464e, 0x3b7bdac5, 0x0403b11f, 0x0e978b6b,
0x1fc84929, 0x2c828529, 0x30effe63, 0x1ca11a9e, 0x1b8a2778, 0x0061c29f, 0x22fa79b4, 0x09912f38,
0x2cde629a, 0x0c6f28b8, 0x23e335e5, 0x1654d909, 0x2ed98690, 0x19bc45ef, 0x3372aa82, 0x1b58c8a5,
0x304f69e8, 0x016e62d2, 0x1166ec36, 0x012ab780, 0x3011a9a8, 0x13404222, 0x20a890e4, 0x34be07db,
0x0030d45c, 0x27826f7a, 0x2dc3fc4d, 0x0b58b8f0, 0x2e4a6cc8, 0x0571da26, 0x013b1bd2, 0x0dbd240e,
0x17655f82, 0x123462bb, 0x20983fd1, 0x26e0e9fb, 0x1398da29, 0x13763116, 0x3454f589, 0x29beb732,
0x155d9b81, 0x301b289e, 0x10493422, 0x27fdc09f, 0x07521eda, 0x24c344af, 0x121d0be3, 0x1d0c9627,
0x354fb9af, 0x0b0c2b42, 0x187de5b8, 0x0a66010e, 0x07a935d4, 0x05551829, 0x321bf997, 0x2e71e019,
0x2231abb5, 0x0fa1641d, 0x04597cfb, 0x1905914f, 0x20f80d5f, 0x05d63214, 0x17863360, 0x2d5fd8a3,
0x0cb0fd63, 0x21aef740, 0x00cf0989, 0x00b4fb70, 0x3044ddb6, 0x04931312, 0x1ce913fc, 0x0120f345,
0x0503344e, 0x11082e6d, 0x1e392167, 0x044e85e4, 0x39c725ec, 0x0d191746, 0x002019e8, 0x01a23b96,
0x21c5fff1, 0x14daf95e, 0x1dd8638a, 0x1d31621a, 0x11e08339, 0x1bcf2a97, 0x32d0f9f5, 0x329c9631,
0x3506eb3c, 0x1b3f65fd, 0x0a160b21, 0x103fbfc3, 0x157d9dc3, 0x1b4a94a9, 0x334bae86, 0x25e9357d,
0x170b6f69, 0x0c9791db, 0x27e2824f, 0x024423c2, 0x1805743f, 0x34c2a44d, 0x0d562790, 0x3b2f8c20,
0x05345409, 0x123c73da, 0x2660389b, 0x211eef4a, 0x125cfa46, 0x2e09b005, 0x30f651a7, 0x0fb993c5,
0x0dc05627, 0x367812f6, 0x350408ea, 0x12a7c0ec, 0x043f01d4, 0x29b5b5a0, 0x025b7152, 0x137b6d2f,
0x0ece69fd, 0x03ef0fbf, 0x09b7c044, 0x170271f9, 0x131c0cf7, 0x25e6a3b6, 0x3000bd19, 0x363a8367,
0x21edac03, 0x2883d019, 0x1bee95c2, 0x1d2a3006, 0x37abae4d, 0x13bb78f9, 0x23fdc36c, 0x29007fd0,
0x006d1f7e, 0x236e15e3, 0x061d2b57, 0x14e1c14a, 0x39fec954, 0x1f604987, 0x0c339fc6, 0x356bd47f,
0x2e6d3a8d, 0x2dd9c366, 0x218ec589, 0x07e6939b, 0x2e20145f, 0x241618e2, 0x32ed41b1, 0x302cadf8,
0x265f412a, 0x27374de1, 0x2ac9e945, 0x0216c3ab, 0x20f12ee9, 0x1fa23392, 0x3528cb8d, 0x3a374ad3,
0x177ddabc, 0x1af39577, 0x2ff12e1e, 0x1e678aee, 0x0f91bc40, 0x0fc44a49, 0x1c8b5ee3, 0x2c006daa,
0x21d37018, 0x0a716686, 0x0b73bb75, 0x333b9ea2, 0x3150a01b, 0x027ea24b, 0x21a5d1d3, 0x1e2e621e,
0x18d6e7de, 0x36cc13fb, 0x06927519, 0x339134e8, 0x15b57b65, 0x39904687, 0x0aaf9cf0, 0x11b0a1a0,
0x28eedddc, 0x31a9fc42, 0x1a0f7835, 0x049e5e1e, 0x2fceee4e, 0x22eff9be, 0x28648c69, 0x183aaa29,
0x0ffe112f, 0x25562a4a, 0x0c92a73d, 0x3b4c723f, 0x2eddf46b, 0x16d08cef, 0x23c91880, 0x27d822e9,
0x3164be25, 0x1821de4b, 0x1ddd0cbb, 0x048979fc, 0x02f77393, 0x1222312a, 0x2f448618, 0x2e811142,
0x1ade549d, 0x10114891, 0x3442e565, 0x2e507c60, 0x0244f9f2, 0x05173a5a, 0x16af7d98, 0x3b313930,
0x1238c4d0, 0x3b6ec79d, 0x059c58e2, 0x0dfd1488, 0x2e154bc4, 0x1f8c6143, 0x278ee587, 0x04dd398d,
0x1a0058ba, 0x3724c3d2, 0x19b1f646, 0x0d0f5964, 0x0cf031b5, 0x16e7a51b, 0x1932a157, 0x3469aaed,
0x0fdcee84, 0x104675f9, 0x1808c1d1, 0x21099a96, 0x16ec2357, 0x2606ea66, 0x3667a3a1, 0x2e35ba7b,
0x0d8151ac, 0x3a77447c, 0x2edb7796, 0x36119f47, 0x31e27a8b, 0x1c63f842, 0x0b6b81f9, 0x390b8056,
0x2b0ad25a, 0x0b74e29e, 0x154c970f, 0x0261f01f, 0x30d86671, 0x0fca51a2, 0x020f24ba, 0x37e5a334,
0x1c277205, 0x204d988b, 0x046af050, 0x1b37349d, 0x39db4378, 0x0d5aa15b, 0x287727fc, 0x2080896a,
0x3576bb5d, 0x049a47fe, 0x10f7e54f, 0x2f40cb87, 0x0d5e4ce0, 0x2cb7f7ef, 0x39562501, 0x2efa1649,
0x1bdd9dd9, 0x3958e629, 0x06d4cafe, 0x01f1d0b0, 0x12dc7d93, 0x1b81f7b7, 0x1b0a56fc, 0x2038a4a2,
0x1d453159, 0x2560add3, 0x09b0c08b, 0x27077c59, 0x1617b600, 0x3b2bdfe6, 0x369b3b00, 0x1211e28c,
0x25d20174, 0x2ee50665, 0x213795b2, 0x26f3101f, 0x228012e5, 0x04b0539c, 0x04e37c81, 0x2a14416a,
0x0299da5d, 0x010b623a, 0x3a6fada9, 0x1886db79, 0x1657534c, 0x044cbf55, 0x16b1134b, 0x22cc3918,
0x0f601749, 0x0d07f998, 0x273f250f, 0x117f0c5e, 0x36c4ae45, 0x3314f462, 0x19a9445c, 0x0f9cf220,
0x38078039, 0x25ddbaa5, 0x3b702788, 0x0e2a53e5, 0x296c594b, 0x15c005c6, 0x1cfc217d, 0x342e3e62,
0x10c63169, 0x06ae7e70, 0x35e4909b, 0x147b0be9, 0x1d44e277, 0x073f6e51, 0x1d000ae1, 0x2a6e3089,
0x2cb8ba6c, 0x02b22aec, 0x26db1e42, 0x252cd366, 0x16701fb8, 0x3a966040, 0x1e18b9ca, 0x2122bbef,
0x1d083c67, 0x1584982c, 0x24941e7e, 0x072f3ddf, 0x22cbf26a, 0x1d876ea9, 0x24e2a09f, 0x0495fafa,
0x14ccdfe2, 0x1cde4d12, 0x27e7510f, 0x282c24af, 0x3b1f3ad9, 0x01c673ca, 0x0f4e3681, 0x0130ef7e,
0x013f1a86, 0x3a8acd48, 0x36227f23, 0x14f2e84e, 0x3a7746a2, 0x011de09e, 0x31a20853, 0x24d82035,
0x2d88e8ff, 0x2f0651c9, 0x3687283e, 0x2cab9b3a, 0x1c4cab37, 0x24863d66, 0x005674ad, 0x1b52646b,
0x1b656beb, 0x308889bc, 0x05011679, 0x317b544c, 0x37b93c1f, 0x1393c5ac, 0x03d0d258, 0x1f51fa79,
0x1b066028, 0x0728748e, 0x11945336, 0x019358dc, 0x251f47d7, 0x0453b29f, 0x18ffb1fe, 0x21fc0207,
0x28391f19, 0x0fb153b8, 0x0096b688, 0x1c94f3a9, 0x24a1e8ba, 0x2fd43b95, 0x29982bcb, 0x2246fbed,
0x21c187a0, 0x0877c966, 0x2679fc76, 0x2d70dc47, 0x3551cb84, 0x136c32dd, 0x07a6acc3, 0x299e1f97,
0x24c4f457, 0x0d4716d0, 0x20dbc417, 0x1f4622d3, 0x03aa744a, 0x353e8d3c, 0x1babed48, 0x28242303,
0x157fa9b3, 0x2c1408dd, 0x0a5cd40a, 0x38a3b197, 0x1097ed04, 0x018de786, 0x267ea047, 0x25baacac,
0x2f6c9592, 0x17265b48, 0x2e6bb4aa, 0x177aa15d, 0x0b3d58a1, 0x3a1b4c96, 0x0bb53d56, 0x2b7c678c,
0x1e802523, 0x020d7d40, 0x30a18465, 0x2f52fdc1, 0x22e7c8a6, 0x10eea9fd, 0x1287b62c, 0x3a3e0a86,
0x2f38d937, 0x10088bf0, 0x25120db4, 0x270ce270, 0x1887d696, 0x08050383, 0x1a401a4b, 0x0baa9e78,
0x0e45b6a2, 0x27f6243f, 0x374cd8da, 0x28d8d503, 0x3296db73, 0x29b72347, 0x16c207ca, 0x1881e1e7,
0x1b0b9c0e, 0x16ed24e4, 0x3060d589, 0x05839a61, 0x35dbfefb, 0x034204c4, 0x151b747d, 0x175904d0,
0x021703b6, 0x0cf8bcbe, 0x38a07aed, 0x0a9b890f, 0x0706a5d8, 0x080e1a7d, 0x0da7ae66, 0x28b1f67b,
0x14f88bac, 0x136e2a4d, 0x2d8ebe1d, 0x31312568, 0x2c823a9d, 0x01ae4f10, 0x077e842e, 0x2ad33a6b,
0x32d7d7a9, 0x02c25013, 0x16a03be8, 0x1f1adef5, 0x0187c998, 0x2fe79ba8, 0x1c6505e6, 0x28e277eb,
0x0d2fc0a8, 0x04ed9237, 0x233730e8, 0x30bdffb5, 0x345dc776, 0x28d93c99, 0x09461e50, 0x34efbb33,
0x09d1d240, 0x0ec9b950, 0x2b494607, 0x239b8448, 0x05ac7161, 0x350dc975, 0x249f5fcf, 0x1622baa1,
0x12cdb035, 0x0a4c1ccb, 0x180fb471, 0x089d276e, 0x11e9b262, 0x0bc0f8bb, 0x1faced85, 0x36fbb4f2,
0x1fdb6e4e, 0x19a22335, 0x21966f49, 0x1a47953a, 0x30b80a61, 0x05d51b75, 0x35b49fd6, 0x08aa9800,
0x26f6ca0d, 0x22784413, 0x09ce60c7, 0x0ae27763, 0x095a8ba6, 0x2f1166db, 0x0274a9f5, 0x26e72440,
0x3a576416, 0x2fde09b3, 0x18ddcb70, 0x2174dca2, 0x24afc5a4, 0x1efb3a6a, 0x33b61781, 0x3520797e,
0x24da3868, 0x2f1f49d4, 0x369b7b18, 0x0ad289ff, 0x3430b227, 0x2a57bc11, 0x0d105c36, 0x30c53d50,
0x3a8f3962, 0x05bc579a, 0x30d85d45, 0x23e7daa7, 0x3b1fc52a, 0x163be24f, 0x05c1ff15, 0x0ed35093,
0x359a06a5, 0x032999d0, 0x056d5fca, 0x1b6826ab, 0x1959bba7, 0x1d6fbe14, 0x3b20bfe5, 0x0dc4c17a,
0x25826d9b, 0x34be6591, 0x0372f58b, 0x0b0fe681, 0x0faf7a4a, 0x30bb2493, 0x391e4c52, 0x0f4a4a19,
0x3aeedacc, 0x17111988, 0x1ecf615c, 0x0fc20356, 0x10ac4f5d, 0x1cf9ea6f, 0x0feb1471, 0x28739b52,
0x074c3593, 0x2177475a, 0x1ac422a8, 0x38e29ff6, 0x35d8f78d, 0x2e60dc7f, 0x2b27f874, 0x03a88241,
0x0d0e9a2f, 0x3aafd1a3, 0x1b64b2e6, 0x1be89cab, 0x0ad56c26, 0x0ff93bdd, 0x0f9a22c6, 0x03b50e19,
0x2eca0ffa, 0x2fa0635b, 0x2a17390c, 0x20a5db1e, 0x31418712, 0x16ab3c34, 0x2655a574, 0x21e6afa9,
0x0123df7d, 0x0061a294, 0x1716aa2f, 0x11c81e51, 0x37a7d2f5, 0x0989c455, 0x26e873af, 0x1a79e489,
0x0708996c, 0x1f6578b7, 0x24bc2ccf, 0x2c669583, 0x10b80839, 0x055d3d60, 0x33b5119a, 0x1e990765,
0x060132a9, 0x36ab551b, 0x1ab27994, 0x33e700e1, 0x2fe1e5a5, 0x33801869, 0x13912c8e, 0x14a5f7cb,
0x0eb8bd4b, 0x301d864d, 0x0d6a59da, 0x06cfaeab, 0x29aaae8f, 0x0174f63d, 0x0b32882f, 0x0fc407b0,
0x28a518c9, 0x3485eb32, 0x1445e233, 0x1e0011b1, 0x2fca9ac2, 0x28b33cce, 0x2bc8b664, 0x31663b85,
0x396704dc, 0x37f88045, 0x2a82e463, 0x1632abb5, 0x3b8f288c, 0x28ca14f8, 0x20e3f7c2, 0x0c746f08,
0x36b25268, 0x019d7f45, 0x1eaee377, 0x0954bf5d, 0x2858c371, 0x050c34ca, 0x0f636b0e, 0x0737028c,
0x3a03b315, 0x0857c9ca, 0x300a4277, 0x02cbcc84, 0x3a51127a, 0x014a979d, 0x347a2fe7, 0x2f2ebdf7,
0x1a024689, 0x0c82361e, 0x08a4306f, 0x2062fec5, 0x0f568fad, 0x29e74545, 0x31a0291a, 0x23037387,
0x1792b69c, 0x0678f2b6, 0x2dd21ed9, 0x3902a785, 0x36d981d2, 0x21b3b649, 0x0b9b969f, 0x084617ae,
0x2a583353, 0x28a2ab22, 0x2090ae19, 0x11c67414, 0x1e371697, 0x1550f6a1, 0x249220a3, 0x1bb20c01,
0x17b9b19f, 0x1ba7fe40, 0x24bd3dae, 0x165b7a95, 0x138b20c5, 0x3b7f6915, 0x06286dd5, 0x02d6db53,
0x2c786291, 0x1c4717eb, 0x101aafb1, 0x2912ec97, 0x38a4f574, 0x16ebb37a, 0x2360a850, 0x20f99aae,
0x0e182e2b, 0x0572de7a, 0x3a811edb, 0x16112577, 0x07d5e10c, 0x02dd84d0, 0x08579b83, 0x329d57fc,
0x0f19baca, 0x0aef232b, 0x0941fe5f, 0x3526d05c, 0x2fcc31c0, 0x38baad27, 0x1b3902db, 0x086c5519,
0x1f9ae5a4, 0x32da213c, 0x2ad1fa7c, 0x0d531cbb, 0x0bbbfb68, 0x28aa8033, 0x15f61bf6, 0x387ed4be
};
#endif
+63 -35
View File
@@ -1,16 +1,21 @@
#include "handmade_tile.h" #include "handmade_tile.h"
static tile_chunk *GetTileChunk(tile_map *TileMap, static tile_chunk *GetTileChunk(tile_map *TileMap,
U32 TileChunkX, U32 TileChunkY) U32 TileChunkX,
U32 TileChunkY,
U32 TileChunkZ)
{ {
tile_chunk *TileChunk = NULL; tile_chunk *TileChunk = NULL;
if((TileChunkX >= 0) && (TileChunkX < TileMap->TileChunkCountX) && if((TileChunkX >= 0) && (TileChunkX < TileMap->TileChunkCountX) &&
(TileChunkY >= 0) && (TileChunkY < TileMap->TileChunkCountY)) (TileChunkY >= 0) && (TileChunkY < TileMap->TileChunkCountY) &&
(TileChunkZ >= 0) && (TileChunkZ < TileMap->TileChunkCountZ))
{ {
TileChunk = &TileMap->TileChunks[TileChunkY * TileChunk =
TileMap->TileChunkCountX + &TileMap->TileChunks[
TileChunkX]; (TileChunkZ*TileMap->TileChunkCountY*TileMap->TileChunkCountX) +
(TileChunkY*TileMap->TileChunkCountX) +
TileChunkX];
} }
return TileChunk; return TileChunk;
@@ -40,12 +45,15 @@ static tile_map_position RecannonicalizePosition(tile_map *TileMap,
} }
static tile_chunk_position GetChunkPositionFor(tile_map *TileMap, static tile_chunk_position GetChunkPositionFor(tile_map *TileMap,
U32 AbsTileX, U32 AbsTileY) U32 AbsTileX,
U32 AbsTileY,
U32 AbsTileZ)
{ {
tile_chunk_position Result; tile_chunk_position Result;
Result.TileChunkX = AbsTileX >> TileMap->ChunkShift; Result.TileChunkX = AbsTileX >> TileMap->ChunkShift;
Result.TileChunkY = AbsTileY >> TileMap->ChunkShift; Result.TileChunkY = AbsTileY >> TileMap->ChunkShift;
Result.TileChunkZ = AbsTileZ;
Result.RelTileX = AbsTileX & TileMap->ChunkMask; Result.RelTileX = AbsTileX & TileMap->ChunkMask;
Result.RelTileY = AbsTileY & TileMap->ChunkMask; Result.RelTileY = AbsTileY & TileMap->ChunkMask;
@@ -65,20 +73,6 @@ static U32 GetTileValueUnchecked(tile_map *TileMap, tile_chunk *TileChunk,
return TileChunkValue; return TileChunkValue;
} }
static U32 GetTileChunkValue(tile_map *TileMap, tile_chunk *TileChunk,
U32 TestTileX, U32 TestTileY)
{
U32 TileChunkValue = 0;
if(TileChunk) {
TileChunkValue = GetTileValueUnchecked(TileMap,
TileChunk,
TestTileX, TestTileY);
}
return TileChunkValue;
}
static void SetTileValueUnchecked(tile_map *TileMap, tile_chunk *TileChunk, static void SetTileValueUnchecked(tile_map *TileMap, tile_chunk *TileChunk,
U32 TileX, U32 TileY, U32 TileValue) U32 TileX, U32 TileY, U32 TileValue)
{ {
@@ -89,23 +83,44 @@ static void SetTileValueUnchecked(tile_map *TileMap, tile_chunk *TileChunk,
TileChunk->Tiles[TileY * TileMap->ChunkDim + TileX] = TileValue; TileChunk->Tiles[TileY * TileMap->ChunkDim + TileX] = TileValue;
} }
static void SetTileChunkValue(tile_map *TileMap, tile_chunk *TileChunk, static U32 GetTileChunkValue(tile_map *TileMap, tile_chunk *TileChunk,
U32 TestTileX, U32 TestTileY, U32 TileValue) U32 TestTileX, U32 TestTileY)
{ {
SetTileValueUnchecked(TileMap, U32 TileChunkValue = 0;
TileChunk,
TestTileX, TestTileY, if(TileChunk && TileChunk->Tiles) {
TileValue); TileChunkValue = GetTileValueUnchecked(TileMap,
TileChunk,
TestTileX,
TestTileY);
}
return TileChunkValue;
} }
static U32 GetTileValue(tile_map *TileMap, U32 AbsTileX, U32 AbsTileY) static void SetTileChunkValue(tile_map *TileMap, tile_chunk *TileChunk,
U32 TestTileX, U32 TestTileY,
U32 TileValue)
{
if(TileChunk && TileChunk->Tiles) {
SetTileValueUnchecked(TileMap,
TileChunk,
TestTileX, TestTileY,
TileValue);
}
}
static U32 GetTileValue(tile_map *TileMap,
U32 AbsTileX, U32 AbsTileY, U32 AbsTileZ)
{ {
tile_chunk_position ChunkPos = GetChunkPositionFor(TileMap, tile_chunk_position ChunkPos = GetChunkPositionFor(TileMap,
AbsTileX, AbsTileX,
AbsTileY); AbsTileY,
AbsTileZ);
tile_chunk *TileChunk = GetTileChunk(TileMap, tile_chunk *TileChunk = GetTileChunk(TileMap,
ChunkPos.TileChunkX, ChunkPos.TileChunkX,
ChunkPos.TileChunkY); ChunkPos.TileChunkY,
ChunkPos.TileChunkZ);
U32 TileChunkValue = GetTileChunkValue(TileMap, TileChunk, U32 TileChunkValue = GetTileChunkValue(TileMap, TileChunk,
ChunkPos.RelTileX, ChunkPos.RelTileX,
ChunkPos.RelTileY); ChunkPos.RelTileY);
@@ -118,24 +133,37 @@ static B32 IsTileMapPointEmpty(tile_map *TileMap, tile_map_position CanPos)
U32 TileChunkValue = GetTileValue(TileMap, U32 TileChunkValue = GetTileValue(TileMap,
CanPos.AbsTileX, CanPos.AbsTileX,
CanPos.AbsTileY); CanPos.AbsTileY,
Empty = (TileChunkValue == 0); CanPos.AbsTileZ);
Empty = (TileChunkValue == 1);
return Empty; return Empty;
} }
static void SetTileValue(memory_arena *Arena, static void SetTileValue(memory_arena *Arena,
tile_map *TileMap, tile_map *TileMap,
U32 AbsTileX, U32 AbsTileY, U32 AbsTileX, U32 AbsTileY, U32 AbsTileZ,
U32 TileValue) U32 TileValue)
{ {
tile_chunk_position ChunkPos; tile_chunk_position ChunkPos;
tile_chunk *TileChunk; tile_chunk *TileChunk;
ChunkPos = GetChunkPositionFor(TileMap, AbsTileX, AbsTileY); ChunkPos = GetChunkPositionFor(TileMap, AbsTileX, AbsTileY, AbsTileZ);
TileChunk = GetTileChunk(TileMap, TileChunk = GetTileChunk(TileMap,
ChunkPos.TileChunkX, ChunkPos.TileChunkX,
ChunkPos.TileChunkY); ChunkPos.TileChunkY,
ASSERT(TileChunk); /* TODO: On-deman tile chunk creation. */ ChunkPos.TileChunkZ);
ASSERT(TileChunk);
if(!TileChunk->Tiles) {
U32 TileCount = TileMap->ChunkDim*TileMap->ChunkDim;
U32 TileIndex;
TileChunk->Tiles = PUSH_ARRAY(Arena, TileCount, U32);
for(TileIndex = 0; TileIndex < TileCount; TileIndex++) {
TileChunk->Tiles[TileIndex] = 1;
}
}
SetTileChunkValue(TileMap, TileChunk, SetTileChunkValue(TileMap, TileChunk,
ChunkPos.RelTileX, ChunkPos.RelTileX,
+4 -2
View File
@@ -4,6 +4,7 @@
typedef struct tile_map_position { typedef struct tile_map_position {
U32 AbsTileX; U32 AbsTileX;
U32 AbsTileY; U32 AbsTileY;
U32 AbsTileZ;
/* NOTE: Tile-relative X and Y. */ /* NOTE: Tile-relative X and Y. */
F32 TileRelX; F32 TileRelX;
@@ -13,6 +14,7 @@ typedef struct tile_map_position {
typedef struct tile_chunk_position { typedef struct tile_chunk_position {
U32 TileChunkX; U32 TileChunkX;
U32 TileChunkY; U32 TileChunkY;
U32 TileChunkZ;
U32 RelTileX; U32 RelTileX;
U32 RelTileY; U32 RelTileY;
@@ -28,11 +30,11 @@ typedef struct tile_map {
U32 ChunkDim; U32 ChunkDim;
F32 TileSideInMeters; F32 TileSideInMeters;
S32 TileSideInPixels;
F32 MetersToPixels;
/* TODO: Real sparseness. */
U32 TileChunkCountX; U32 TileChunkCountX;
U32 TileChunkCountY; U32 TileChunkCountY;
U32 TileChunkCountZ;
tile_chunk *TileChunks; tile_chunk *TileChunks;
} tile_map; } tile_map;