From 3f5492b2bb67326be43cd7c5ba02ccf0ba1ae0e3 Mon Sep 17 00:00:00 2001 From: Justin Wernick Date: Tue, 19 Apr 2022 21:27:56 +0200 Subject: Refile for merging repos --- src/bin/benchmark.rs | 22 - src/bin/explore-config.rs | 116 - src/command.rs | 73 - src/constants.rs | 218 -- src/constants/lava.rs | 6225 --------------------------------------------- src/game.rs | 779 ------ src/game/map.rs | 49 - src/game/player.rs | 259 -- src/game/powerup.rs | 6 - src/geometry.rs | 6 - src/geometry/direction.rs | 67 - src/geometry/point.rs | 37 - src/geometry/vec.rs | 62 - src/json.rs | 554 ---- src/lib.rs | 8 - src/main.rs | 46 - src/strategy.rs | 5 - src/strategy/minimax.rs | 330 --- 18 files changed, 8862 deletions(-) delete mode 100644 src/bin/benchmark.rs delete mode 100644 src/bin/explore-config.rs delete mode 100644 src/command.rs delete mode 100644 src/constants.rs delete mode 100644 src/constants/lava.rs delete mode 100644 src/game.rs delete mode 100644 src/game/map.rs delete mode 100644 src/game/player.rs delete mode 100644 src/game/powerup.rs delete mode 100644 src/geometry.rs delete mode 100644 src/geometry/direction.rs delete mode 100644 src/geometry/point.rs delete mode 100644 src/geometry/vec.rs delete mode 100644 src/json.rs delete mode 100644 src/lib.rs delete mode 100644 src/main.rs delete mode 100644 src/strategy.rs delete mode 100644 src/strategy/minimax.rs (limited to 'src') diff --git a/src/bin/benchmark.rs b/src/bin/benchmark.rs deleted file mode 100644 index 84e869e..0000000 --- a/src/bin/benchmark.rs +++ /dev/null @@ -1,22 +0,0 @@ -use std::path::Path; - -use time::{Duration, PreciseTime}; - -use steam_powered_wyrm::game; -use steam_powered_wyrm::json; -use steam_powered_wyrm::strategy::{choose_move, ScoreConfig}; - -fn main() { - let max_time = Duration::milliseconds(19950); - let start_time = PreciseTime::now(); - - match json::read_state_from_json_file(&Path::new(&format!("./tests/example-state.json"))) { - Ok(json_state) => { - let new_board = game::GameBoard::new(json_state); - let _ = choose_move(&new_board, &ScoreConfig::default(), start_time, max_time); - } - Err(e) => { - eprintln!("WARN: State file could not be parsed: {}", e); - } - }; -} diff --git a/src/bin/explore-config.rs b/src/bin/explore-config.rs deleted file mode 100644 index 5fb599a..0000000 --- a/src/bin/explore-config.rs +++ /dev/null @@ -1,116 +0,0 @@ -use std::path::Path; - -use rayon::prelude::*; - -use steam_powered_wyrm::game; -use steam_powered_wyrm::json; -use steam_powered_wyrm::strategy::{choose_move_with_normalized_perf, ScoreConfig}; - -fn main() { - let initial_state = game::GameBoard::new( - json::read_state_from_json_file(&Path::new(&format!("./tests/example-state.json"))) - .unwrap(), - ); - let depth = 1000; - - let configs = ScoreConfigTrials { - max_health_weight: vec![50., 150.], - total_health_weight: vec![5., 20.], - points_weight: vec![1.], - victory_weight: vec![3000., 3500., 4000., 4500., 5000., 5500., 6000., 7000.], - snowball_weight: vec![10.], - bomb_weight: vec![0.], - explore_exploit_weight: vec![10., 500.], - } - .reify(); - - eprintln!("{} configs being tested", configs.len()); - - let mut victories = vec![0; configs.len()]; - - for i in 0..configs.len() { - eprintln!("Progress: {} of {}", i, configs.len()); - - let outcomes: Vec<(usize, game::SimulationOutcome)> = (i + 1..configs.len()) - .collect::>() - .par_iter() - .map(|j| { - let mut state = initial_state.clone(); - - while state.outcome == game::SimulationOutcome::Continue { - let commands = [ - choose_move_with_normalized_perf(&state, &configs[i], 0, depth), - choose_move_with_normalized_perf(&state, &configs[*j], 1, depth), - ]; - state.simulate(commands); - } - - (*j, state.outcome) - }) - .collect(); - for (j, outcome) in outcomes { - match outcome { - game::SimulationOutcome::PlayerWon(0) => victories[i] += 1, - game::SimulationOutcome::PlayerWon(1) => victories[j] += 1, - _ => {} - }; - } - } - - println!("victories, max_health_weight, total_health_weight, points_weight, victory_weight, snowball_weight, bomb_weight, explore_exploit_weight"); - - for (config, victories) in configs.into_iter().zip(victories.iter()) { - println!( - "{}, {}, {}, {}, {}, {}, {}, {}", - victories, - config.max_health_weight, - config.total_health_weight, - config.points_weight, - config.victory_weight, - config.snowball_weight, - config.bomb_weight, - config.explore_exploit_weight - ); - } -} - -pub struct ScoreConfigTrials { - pub max_health_weight: Vec, - pub total_health_weight: Vec, - pub points_weight: Vec, - pub victory_weight: Vec, - pub snowball_weight: Vec, - pub bomb_weight: Vec, - pub explore_exploit_weight: Vec, -} - -impl ScoreConfigTrials { - fn reify(self) -> Vec { - let mut result = Vec::new(); - for max_health_weight in &self.max_health_weight { - for total_health_weight in &self.total_health_weight { - for points_weight in &self.points_weight { - for victory_weight in &self.victory_weight { - for snowball_weight in &self.snowball_weight { - for bomb_weight in &self.bomb_weight { - for explore_exploit_weight in &self.explore_exploit_weight { - result.push(ScoreConfig { - max_health_weight: *max_health_weight, - total_health_weight: *total_health_weight, - points_weight: *points_weight, - victory_weight: *victory_weight, - snowball_weight: *snowball_weight, - bomb_weight: *bomb_weight, - explore_exploit_weight: *explore_exploit_weight, - }); - } - } - } - } - } - } - } - - result - } -} diff --git a/src/command.rs b/src/command.rs deleted file mode 100644 index c6d6695..0000000 --- a/src/command.rs +++ /dev/null @@ -1,73 +0,0 @@ -use crate::geometry::Direction; -use crate::geometry::Point2d; -use std::fmt; - -#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] -pub struct Command { - pub worm: Option, - pub action: Action, -} - -impl fmt::Display for Command { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self.worm { - Some(worm) => write!(f, "select {};{}", worm, self.action), - None => write!(f, "{}", self.action), - } - } -} - -impl Command { - pub fn with_select(worm: i32, action: Action) -> Command { - Command { - worm: Some(worm), - action, - } - } - - pub fn new(action: Action) -> Command { - Command { worm: None, action } - } -} - -#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)] -pub enum Action { - Move(Point2d), - Dig(Point2d), - Shoot(Direction), - Bomb(Point2d), - Snowball(Point2d), - DoNothing, -} - -impl fmt::Display for Action { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - use Action::*; - match self { - Move(p) => write!(f, "move {} {}", p.x, p.y), - Dig(p) => write!(f, "dig {} {}", p.x, p.y), - Shoot(dir) => write!(f, "shoot {}", dir), - Bomb(p) => write!(f, "banana {} {}", p.x, p.y), - Snowball(p) => write!(f, "snowball {} {}", p.x, p.y), - DoNothing => write!(f, "nothing"), - } - } -} - -impl Action { - pub fn is_attack(&self) -> bool { - use Action::*; - match self { - Shoot(_) | Bomb(_) => true, - _ => false, - } - } - - pub fn is_snowball(&self) -> bool { - use Action::*; - match self { - Snowball(_) => true, - _ => false, - } - } -} diff --git a/src/constants.rs b/src/constants.rs deleted file mode 100644 index 3f36db4..0000000 --- a/src/constants.rs +++ /dev/null @@ -1,218 +0,0 @@ -use crate::geometry::Vec2d; - -pub mod lava; -pub use self::lava::*; - -pub const MAP_SIZE: usize = 33; -pub const MAP_ROW_SIZE: [MapRow; MAP_SIZE] = [ - MapRow { - start_bit: 0, - x_offset: 11, - }, - MapRow { - start_bit: 11, - x_offset: 8, - }, - MapRow { - start_bit: 28, - x_offset: 7, - }, - MapRow { - start_bit: 47, - x_offset: 6, - }, - MapRow { - start_bit: 68, - x_offset: 4, - }, - MapRow { - start_bit: 93, - x_offset: 4, - }, - MapRow { - start_bit: 118, - x_offset: 3, - }, - MapRow { - start_bit: 145, - x_offset: 2, - }, - MapRow { - start_bit: 174, - x_offset: 1, - }, - MapRow { - start_bit: 205, - x_offset: 1, - }, - MapRow { - start_bit: 236, - x_offset: 1, - }, - MapRow { - start_bit: 267, - x_offset: 0, - }, - MapRow { - start_bit: 300, - x_offset: 0, - }, - MapRow { - start_bit: 333, - x_offset: 0, - }, - MapRow { - start_bit: 366, - x_offset: 0, - }, - MapRow { - start_bit: 399, - x_offset: 0, - }, - MapRow { - start_bit: 432, - x_offset: 0, - }, - MapRow { - start_bit: 465, - x_offset: 0, - }, - MapRow { - start_bit: 498, - x_offset: 0, - }, - MapRow { - start_bit: 531, - x_offset: 0, - }, - MapRow { - start_bit: 564, - x_offset: 0, - }, - MapRow { - start_bit: 597, - x_offset: 0, - }, - MapRow { - start_bit: 630, - x_offset: 1, - }, - MapRow { - start_bit: 661, - x_offset: 1, - }, - MapRow { - start_bit: 692, - x_offset: 1, - }, - MapRow { - start_bit: 723, - x_offset: 2, - }, - MapRow { - start_bit: 752, - x_offset: 3, - }, - MapRow { - start_bit: 779, - x_offset: 4, - }, - MapRow { - start_bit: 804, - x_offset: 4, - }, - MapRow { - start_bit: 829, - x_offset: 6, - }, - MapRow { - start_bit: 850, - x_offset: 7, - }, - MapRow { - start_bit: 869, - x_offset: 8, - }, - MapRow { - start_bit: 886, - x_offset: 11, - }, -]; -pub const MAP_BITSIZE: usize = 897; -pub const MAP_U64S: usize = 15; - -pub struct MapRow { - pub start_bit: usize, - pub x_offset: usize, -} - -impl MapRow { - pub fn len(&self) -> usize { - MAP_SIZE - 2 * self.x_offset - } - - pub fn is_empty(&self) -> bool { - self.len() == 0 - } -} - -pub const HEALTH_PACK_VALUE: i32 = 10; - -pub const SHOOT_RANGE: i8 = 4; -pub const SHOOT_RANGE_DIAGONAL: i8 = 3; -pub const SHOOT_DAMAGE: i32 = 8; - -pub const BOMB_RANGE: i8 = 5; -pub const BOMB_DAMAGED_SPACES: usize = 13; -pub const BOMB_DAMAGE_RANGE: i8 = 2; -pub const BOMB_DAMAGES: [(Vec2d, i32); BOMB_DAMAGED_SPACES] = [ - (Vec2d::new(0, -2), 7), - (Vec2d::new(2, 0), 7), - (Vec2d::new(0, 2), 7), - (Vec2d::new(-2, 0), 7), - (Vec2d::new(1, -1), 11), - (Vec2d::new(1, 1), 11), - (Vec2d::new(-1, 1), 11), - (Vec2d::new(-1, -1), 11), - (Vec2d::new(0, -1), 13), - (Vec2d::new(1, 0), 13), - (Vec2d::new(0, 1), 13), - (Vec2d::new(-1, 0), 13), - (Vec2d::new(0, 0), 20), -]; - -pub const SNOWBALL_RANGE: i8 = 5; -pub const SNOWBALL_FREEZES_SPACES: usize = 9; -pub const SNOWBALL_FREEZE_RANGE: i8 = 1; -pub const SNOWBALL_FREEZES: [Vec2d; SNOWBALL_FREEZES_SPACES] = [ - Vec2d::new(-1, -1), - Vec2d::new(0, -1), - Vec2d::new(1, -1), - Vec2d::new(-1, 0), - Vec2d::new(0, 0), - Vec2d::new(1, 0), - Vec2d::new(-1, 1), - Vec2d::new(0, 1), - Vec2d::new(1, 1), -]; - -pub const MISSED_ATTACK_SCORE: i32 = 2; -pub const ATTACK_SCORE_MULTIPLIER: i32 = 2; -pub const KILL_SCORE: i32 = 40; -pub const DIG_SCORE: i32 = 7; -pub const MOVE_SCORE: i32 = 5; -pub const INVALID_COMMAND_SCORE_PENALTY: i32 = 4; - -pub const STARTING_BOMBS: u8 = 3; -pub const STARTING_SNOWBALLS: u8 = 3; - -pub const COLLISION_DAMAGE: i32 = 20; - -pub const LAVA_DAMAGE: i32 = 3; - -pub const LAVA_ROUND_START: usize = 100; -pub const LAVA_ROUND_END: usize = 350; -pub const MAX_ROUNDS: usize = 400; - -pub const FREEZE_DURATION: u8 = 5; -pub const FREEZE_SCORE: i32 = 17; diff --git a/src/constants/lava.rs b/src/constants/lava.rs deleted file mode 100644 index 238d668..0000000 --- a/src/constants/lava.rs +++ /dev/null @@ -1,6225 +0,0 @@ -use crate::constants::*; -use crate::game::map::Map; - -#[allow(clippy::all)] -pub const LAVA_MAP: [Map; MAX_ROUNDS as usize + 1] = [ - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, - ], - }, - Map { - cells: [ - 0xE0003E003FDF, - 0x60000038000038, - 0xE00000030000, - 0x180000003800, - 0x180000000C00, - 0x600000003000, - 0x80000000C000, - 0x6000000020000, - 0x180000000C0000, - 0x60000000300000, - 0x38000000300000, - 0x18000000E0000, - 0x3800003800000C00, - 0xF7F800F8000E0000, - 0x1, - ], - }, - Map { - cells: [ - 0xE0003E003FFF, - 0x60000038000038, - 0xE00000030000, - 0x180000003800, - 0x180000000C00, - 0x600000003000, - 0x180000000C000, - 0x6000000030000, - 0x180000000C0000, - 0x60000000300000, - 0x38000000300000, - 0x18000000E0000, - 0x3800003800000C00, - 0xFFF800F8000E0000, - 0x1, - ], - }, - Map { - cells: [ - 0xE0003E003FFF, - 0x60000038000038, - 0xE00000030000, - 0x180000003800, - 0x180000000C00, - 0x600000003000, - 0x180000000C000, - 0x6000000030000, - 0x180000000C0000, - 0x60000000300000, - 0x38000000300000, - 0x18000000E0000, - 0x3800003800000C00, - 0xFFF800F8000E0000, - 0x1, - ], - }, - Map { - cells: [ - 0x1E0003F007FFF, - 0x6000003800003C, - 0xF00000070000, - 0x180000003800, - 0x1C0000001C00, - 0x600000003000, - 0x180000000C000, - 0x6000000030000, - 0x180000000C0000, - 0x70000000700000, - 0x38000000300000, - 0x1C000001E0000, - 0x7800003800000C00, - 0xFFFC01F8000F0000, - 0x1, - ], - }, - Map { - cells: [ - 0x1E0003F007FFF, - 0x6000003800003C, - 0xF00000070000, - 0x180000003800, - 0x1C0000001C00, - 0x600000003000, - 0x180000000C000, - 0x6000000030000, - 0x180000000C0000, - 0x70000000700000, - 0x38000000300000, - 0x1C000001E0000, - 0x7800003800000C00, - 0xFFFC01F8000F0000, - 0x1, - ], - }, - Map { - cells: [ - 0x1E0003F007FFF, - 0x6000003800003C, - 0xF00000070000, - 0x180000003800, - 0x1C0000001C00, - 0x600000003000, - 0x180000000C000, - 0x6000000030000, - 0x180000000C0000, - 0x70000000700000, - 0x38000000300000, - 0x1C000001E0000, - 0x7800003800000C00, - 0xFFFC01F8000F0000, - 0x1, - ], - }, - Map { - cells: [ - 0x1F0007F007FFF, - 0xE000003C00007C, - 0xF00000078000, - 0x1C0000007800, - 0x1C0000001C00, - 0x600000003000, - 0x180000000C000, - 0x6000000030000, - 0x180000000C0000, - 0x70000000700000, - 0x3C000000700000, - 0x3C000001E0000, - 0x7C00007800000E00, - 0xFFFC01FC001F0000, - 0x1, - ], - }, - Map { - cells: [ - 0x1F0007F007FFF, - 0xF000007C00007C, - 0xF00000078000, - 0x1C0000007800, - 0x1C0000001C00, - 0x600000003000, - 0x180000000C000, - 0x6000000030000, - 0x180000000C0000, - 0x70000000700000, - 0x3C000000700000, - 0x3C000001E0000, - 0x7C00007C00001E00, - 0xFFFC01FC001F0000, - 0x1, - ], - }, - Map { - cells: [ - 0x1F0007F80FFFF, - 0xF000007C00007C, - 0xF00000078000, - 0x1C0000007800, - 0x3C0000001C00, - 0x600000003800, - 0x180000000C000, - 0x6000000030000, - 0x380000000C0000, - 0x70000000780000, - 0x3C000000700000, - 0x3C000001E0000, - 0x7C00007C00001E00, - 0xFFFE03FC001F0000, - 0x1, - ], - }, - Map { - cells: [ - 0x1F0007F80FFFF, - 0xF000007C00007C, - 0xF00000078000, - 0x1C0000007800, - 0x3C0000001C00, - 0x600000003800, - 0x180000000C000, - 0x6000000030000, - 0x380000000C0000, - 0x70000000780000, - 0x3C000000700000, - 0x3C000001E0000, - 0x7C00007C00001E00, - 0xFFFE03FC001F0000, - 0x1, - ], - }, - Map { - cells: [ - 0x1F0007F80FFFF, - 0xF000007C00007C, - 0xF00000078000, - 0x1C0000007800, - 0x3C0000001C00, - 0x600000003800, - 0x180000000C000, - 0x6000000030000, - 0x380000000C0000, - 0x70000000780000, - 0x3C000000700000, - 0x3C000001E0000, - 0x7C00007C00001E00, - 0xFFFE03FC001F0000, - 0x1, - ], - }, - Map { - cells: [ - 0x1F0007FC1FFFF, - 0xF000007C00007C, - 0xF00000078000, - 0x1C0000007800, - 0x3C0000001C00, - 0x700000007800, - 0x180000000C000, - 0x6000000030000, - 0x3C0000001C0000, - 0x70000000780000, - 0x3C000000700000, - 0x3C000001E0000, - 0x7C00007C00001E00, - 0xFFFF07FC001F0000, - 0x1, - ], - }, - Map { - cells: [ - 0x3F0007FC1FFFF, - 0xF000007C00007E, - 0x1F00000078000, - 0x1C0000007C00, - 0x3C0000001C00, - 0x700000007800, - 0x180000000C000, - 0x6000000030000, - 0x3C0000001C0000, - 0x70000000780000, - 0x7C000000700000, - 0x3C000001F0000, - 0xFC00007C00001E00, - 0xFFFF07FC001F8000, - 0x1, - ], - }, - Map { - cells: [ - 0x3F800FFC1FFFF, - 0xF000007C00007E, - 0x1F00000078000, - 0x3C0000007C00, - 0x3C0000001E00, - 0x700000007800, - 0x180000000C000, - 0x6000000030000, - 0x3C0000001C0000, - 0xF0000000780000, - 0x7C000000780000, - 0x3C000001F0000, - 0xFC00007C00001E00, - 0xFFFF07FE003F8000, - 0x1, - ], - }, - Map { - cells: [ - 0x3F800FFE3FFFF, - 0xF000007C00007E, - 0x1F00000078000, - 0x3C0000007C00, - 0x3C0000001E00, - 0xF00000007800, - 0x180000000E000, - 0xE000000030000, - 0x3C0000001E0000, - 0xF0000000780000, - 0x7C000000780000, - 0x3C000001F0000, - 0xFC00007C00001E00, - 0xFFFF8FFE003F8000, - 0x1, - ], - }, - Map { - cells: [ - 0x3F800FFE3FFFF, - 0xF000007C00007E, - 0x1F00000078000, - 0x3C0000007C00, - 0x3C0000001E00, - 0xF00000007800, - 0x180000000E000, - 0xE000000030000, - 0x3C0000001E0000, - 0xF0000000780000, - 0x7C000000780000, - 0x3C000001F0000, - 0xFC00007C00001E00, - 0xFFFF8FFE003F8000, - 0x1, - ], - }, - Map { - cells: [ - 0x3F800FFFFFFFF, - 0xF000007E0000FE, - 0x1F800000F8000, - 0x3C0000007C00, - 0x3C0000001E00, - 0xF00000007800, - 0x3C0000001E000, - 0xF000000078000, - 0x3C0000001E0000, - 0xF0000000780000, - 0x7C000000780000, - 0x3E000003F0000, - 0xFE0000FC00001E00, - 0xFFFFFFFE003F8000, - 0x1, - ], - }, - Map { - cells: [ - 0x3F800FFFFFFFF, - 0xF000007E0000FE, - 0x1F800000F8000, - 0x3C0000007C00, - 0x3C0000001E00, - 0xF00000007800, - 0x3C0000001E000, - 0xF000000078000, - 0x3C0000001E0000, - 0xF0000000780000, - 0x7C000000780000, - 0x3E000003F0000, - 0xFE0000FC00001E00, - 0xFFFFFFFE003F8000, - 0x1, - ], - }, - Map { - cells: [ - 0x3FC01FFFFFFFF, - 0x1F80000FE0000FE, - 0x1F800000FC000, - 0x3C0000007C00, - 0x3E0000003E00, - 0xF00000007800, - 0x3C0000001E000, - 0xF000000078000, - 0x3C0000001E0000, - 0xF8000000F80000, - 0x7C000000780000, - 0x7E000003F0000, - 0xFE0000FE00003F00, - 0xFFFFFFFF007F8000, - 0x1, - ], - }, - Map { - cells: [ - 0x3FC01FFFFFFFF, - 0x1F80000FE0000FE, - 0x1F800000FC000, - 0x3C0000007C00, - 0x3E0000003E00, - 0xF00000007800, - 0x3C0000001E000, - 0xF000000078000, - 0x3C0000001E0000, - 0xF8000000F80000, - 0x7C000000780000, - 0x7E000003F0000, - 0xFE0000FE00003F00, - 0xFFFFFFFF007F8000, - 0x1, - ], - }, - Map { - cells: [ - 0x7FC01FFFFFFFF, - 0x1F80000FE0000FF, - 0x1F800000FC000, - 0x3E000000FC00, - 0x3E0000003E00, - 0xF00000007800, - 0x3C0000001E000, - 0xF000000078000, - 0x3C0000001E0000, - 0xF8000000F80000, - 0x7E000000F80000, - 0x7E000003F0000, - 0xFE0000FE00003F00, - 0xFFFFFFFF007FC001, - 0x1, - ], - }, - Map { - cells: [ - 0x7FC01FFFFFFFF, - 0x1F80000FE0000FF, - 0x1F800000FC000, - 0x3E000000FC00, - 0x3E0000003E00, - 0xF00000007800, - 0x3C0000001E000, - 0xF000000078000, - 0x3C0000001E0000, - 0xF8000000F80000, - 0x7E000000F80000, - 0x7E000003F0000, - 0xFE0000FE00003F00, - 0xFFFFFFFF007FC001, - 0x1, - ], - }, - Map { - cells: [ - 0x7FC01FFFFFFFF, - 0x1F80000FE0000FF, - 0x1F800000FC000, - 0x3E000000FC00, - 0x3E0000003E00, - 0xF00000007800, - 0x3C0000001E000, - 0xF000000078000, - 0x3C0000001E0000, - 0xF8000000F80000, - 0x7E000000F80000, - 0x7E000003F0000, - 0xFE0000FE00003F00, - 0xFFFFFFFF007FC001, - 0x1, - ], - }, - Map { - cells: [ - 0x7FE03FFFFFFFF, - 0x1F80000FE0000FF, - 0x1F800000FC000, - 0x3E000000FC00, - 0x7E0000003E00, - 0xF00000007C00, - 0x3C0000001E000, - 0xF000000078000, - 0x7C0000001E0000, - 0xF8000000FC0000, - 0x7E000000F80000, - 0x7E000003F0000, - 0xFE0000FE00003F00, - 0xFFFFFFFF80FFC001, - 0x1, - ], - }, - Map { - cells: [ - 0x7FE03FFFFFFFF, - 0x1F80000FE0000FF, - 0x1F800000FC000, - 0x3E000000FC00, - 0x7E0000003E00, - 0xF00000007C00, - 0x3C0000001E000, - 0xF000000078000, - 0x7C0000001E0000, - 0xF8000000FC0000, - 0x7E000000F80000, - 0x7E000003F0000, - 0xFE0000FE00003F00, - 0xFFFFFFFF80FFC001, - 0x1, - ], - }, - Map { - cells: [ - 0x7FE03FFFFFFFF, - 0x1F80000FF0001FF, - 0x3F800000FC000, - 0x3E000000FE00, - 0x7E0000003E00, - 0xF00000007C00, - 0x3C0000001E000, - 0xF000000078000, - 0x7C0000001E0000, - 0xF8000000FC0000, - 0xFE000000F80000, - 0x7E000003F8000, - 0xFF0001FE00003F00, - 0xFFFFFFFF80FFC001, - 0x1, - ], - }, - Map { - cells: [ - 0x7FE03FFFFFFFF, - 0x1F80000FF0001FF, - 0x3F800000FC000, - 0x3E000000FE00, - 0x7E0000003E00, - 0xF00000007C00, - 0x3C0000001E000, - 0xF000000078000, - 0x7C0000001E0000, - 0xF8000000FC0000, - 0xFE000000F80000, - 0x7E000003F8000, - 0xFF0001FE00003F00, - 0xFFFFFFFF80FFC001, - 0x1, - ], - }, - Map { - cells: [ - 0x800FFF07FFFFFFFF, - 0x1F80000FF0001FF, - 0x3F800000FC000, - 0x7E000000FE00, - 0x7E0000003F00, - 0xF8000000FC00, - 0x3C0000001E000, - 0xF000000078000, - 0x7E0000003E0000, - 0x1F8000000FC0000, - 0xFE000000FC0000, - 0x7E000003F8000, - 0xFF0001FE00003F00, - 0xFFFFFFFFC1FFE003, - 0x1, - ], - }, - Map { - cells: [ - 0x800FFF07FFFFFFFF, - 0x1FC0001FF0001FF, - 0x3FC00001FC000, - 0x7E000000FE00, - 0x7E0000003F00, - 0xF8000000FC00, - 0x3C0000001E000, - 0xF000000078000, - 0x7E0000003E0000, - 0x1F8000000FC0000, - 0xFE000000FC0000, - 0x7F000007F8000, - 0xFF0001FF00007F00, - 0xFFFFFFFFC1FFE003, - 0x1, - ], - }, - Map { - cells: [ - 0x800FFF07FFFFFFFF, - 0x1FC0001FF0001FF, - 0x3FC00001FC000, - 0x7E000000FE00, - 0x7E0000003F00, - 0xF8000000FC00, - 0x3C0000001E000, - 0xF000000078000, - 0x7E0000003E0000, - 0x1F8000000FC0000, - 0xFE000000FC0000, - 0x7F000007F8000, - 0xFF0001FF00007F00, - 0xFFFFFFFFC1FFE003, - 0x1, - ], - }, - Map { - cells: [ - 0x800FFF8FFFFFFFFF, - 0x3FC0001FF0001FF, - 0x3FC00001FE000, - 0x7E000000FE00, - 0x7E0000003F00, - 0x1F8000000FC00, - 0x3C0000001F000, - 0x1F000000078000, - 0x7E0000003F0000, - 0x1F8000000FC0000, - 0xFE000000FC0000, - 0xFF000007F8000, - 0xFF0001FF00007F80, - 0xFFFFFFFFE3FFE003, - 0x1, - ], - }, - Map { - cells: [ - 0x800FFFDFFFFFFFFF, - 0x3FC0001FF0001FF, - 0x3FC00001FE000, - 0x7E000000FE00, - 0x7E0000003F00, - 0x1F8000000FC00, - 0x3E0000003F000, - 0x1F8000000F8000, - 0x7E0000003F0000, - 0x1F8000000FC0000, - 0xFE000000FC0000, - 0xFF000007F8000, - 0xFF0001FF00007F80, - 0xFFFFFFFFF7FFE003, - 0x1, - ], - }, - Map { - cells: [ - 0x800FFFFFFFFFFFFF, - 0x3FC0001FF0001FF, - 0x3FC00001FE000, - 0x7E000000FE00, - 0x7E0000003F00, - 0x1F8000000FC00, - 0x7E0000003F000, - 0x1F8000000FC000, - 0x7E0000003F0000, - 0x1F8000000FC0000, - 0xFE000000FC0000, - 0xFF000007F8000, - 0xFF0001FF00007F80, - 0xFFFFFFFFFFFFE003, - 0x1, - ], - }, - Map { - cells: [ - 0xC01FFFFFFFFFFFFF, - 0x3FC0001FF8003FF, - 0x3FC00001FE000, - 0x7F000001FE00, - 0x7F0000007F00, - 0x1F8000000FC00, - 0x7E0000003F000, - 0x1F8000000FC000, - 0x7E0000003F0000, - 0x1FC000001FC0000, - 0xFF000001FC0000, - 0xFF000007F8000, - 0xFF8003FF00007F80, - 0xFFFFFFFFFFFFF007, - 0x1, - ], - }, - Map { - cells: [ - 0xC01FFFFFFFFFFFFF, - 0x3FC0001FF8003FF, - 0x3FC00001FE000, - 0x7F000001FE00, - 0x7F0000007F00, - 0x1F8000000FC00, - 0x7E0000003F000, - 0x1F8000000FC000, - 0x7E0000003F0000, - 0x1FC000001FC0000, - 0xFF000001FC0000, - 0xFF000007F8000, - 0xFF8003FF00007F80, - 0xFFFFFFFFFFFFF007, - 0x1, - ], - }, - Map { - cells: [ - 0xC01FFFFFFFFFFFFF, - 0x3FC0001FF8003FF, - 0x3FC00001FE000, - 0x7F000001FE00, - 0x7F0000007F00, - 0x1F8000000FC00, - 0x7E0000003F000, - 0x1F8000000FC000, - 0x7E0000003F0000, - 0x1FC000001FC0000, - 0xFF000001FC0000, - 0xFF000007F8000, - 0xFF8003FF00007F80, - 0xFFFFFFFFFFFFF007, - 0x1, - ], - }, - Map { - cells: [ - 0xC01FFFFFFFFFFFFF, - 0x3FC0001FF8003FF, - 0x3FC00001FE000, - 0x7F000001FE00, - 0x7F0000007F00, - 0x1F8000000FC00, - 0x7E0000003F000, - 0x1F8000000FC000, - 0x7E0000003F0000, - 0x1FC000001FC0000, - 0xFF000001FC0000, - 0xFF000007F8000, - 0xFF8003FF00007F80, - 0xFFFFFFFFFFFFF007, - 0x1, - ], - }, - Map { - cells: [ - 0xC01FFFFFFFFFFFFF, - 0x3FC0001FF8003FF, - 0x3FC00001FE000, - 0x7F000001FE00, - 0x7F0000007F00, - 0x1F8000000FC00, - 0x7E0000003F000, - 0x1F8000000FC000, - 0x7E0000003F0000, - 0x1FC000001FC0000, - 0xFF000001FC0000, - 0xFF000007F8000, - 0xFF8003FF00007F80, - 0xFFFFFFFFFFFFF007, - 0x1, - ], - }, - Map { - cells: [ - 0xE03FFFFFFFFFFFFF, - 0x3FE0003FF8003FF, - 0x7FC00001FE000, - 0x7F000001FF00, - 0xFF0000007F00, - 0x1F8000000FE00, - 0x7E0000003F000, - 0x1F8000000FC000, - 0xFE0000003F0000, - 0x1FC000001FE0000, - 0x1FF000001FC0000, - 0xFF000007FC000, - 0xFF8003FF8000FF80, - 0xFFFFFFFFFFFFF80F, - 0x1, - ], - }, - Map { - cells: [ - 0xE03FFFFFFFFFFFFF, - 0x3FE0003FF8003FF, - 0x7FC00001FE000, - 0x7F000001FF00, - 0xFF0000007F00, - 0x1F8000000FE00, - 0x7E0000003F000, - 0x1F8000000FC000, - 0xFE0000003F0000, - 0x1FC000001FE0000, - 0x1FF000001FC0000, - 0xFF000007FC000, - 0xFF8003FF8000FF80, - 0xFFFFFFFFFFFFF80F, - 0x1, - ], - }, - Map { - cells: [ - 0xE03FFFFFFFFFFFFF, - 0x7FE0003FF8003FF, - 0x7FE00003FF000, - 0x7F000001FF00, - 0xFF0000007F00, - 0x1F8000000FE00, - 0x7E0000003F000, - 0x1F8000000FC000, - 0xFE0000003F0000, - 0x1FC000001FE0000, - 0x1FF000001FC0000, - 0x1FF80000FFC000, - 0xFF8003FF8000FFC0, - 0xFFFFFFFFFFFFF80F, - 0x1, - ], - }, - Map { - cells: [ - 0xE03FFFFFFFFFFFFF, - 0x7FE0003FFC007FF, - 0x7FE00003FF000, - 0xFF000001FF00, - 0xFF0000007F80, - 0x1F8000000FE00, - 0x7E0000003F000, - 0x1F8000000FC000, - 0xFE0000003F0000, - 0x3FC000001FE0000, - 0x1FF000001FE0000, - 0x1FF80000FFC000, - 0xFFC007FF8000FFC0, - 0xFFFFFFFFFFFFF80F, - 0x1, - ], - }, - Map { - cells: [ - 0xF07FFFFFFFFFFFFF, - 0x7FE0003FFC007FF, - 0x7FE00003FF000, - 0xFF000001FF00, - 0xFF0000007F80, - 0x1FC000001FE00, - 0x7E0000003F000, - 0x1F8000000FC000, - 0xFF0000007F0000, - 0x3FC000001FE0000, - 0x1FF000001FE0000, - 0x1FF80000FFC000, - 0xFFC007FF8000FFC0, - 0xFFFFFFFFFFFFFC1F, - 0x1, - ], - }, - Map { - cells: [ - 0xF07FFFFFFFFFFFFF, - 0x7FE0003FFC007FF, - 0x7FE00003FF000, - 0xFF000001FF00, - 0xFF0000007F80, - 0x1FC000001FE00, - 0x7E0000003F000, - 0x1F8000000FC000, - 0xFF0000007F0000, - 0x3FC000001FE0000, - 0x1FF000001FE0000, - 0x1FF80000FFC000, - 0xFFC007FF8000FFC0, - 0xFFFFFFFFFFFFFC1F, - 0x1, - ], - }, - Map { - cells: [ - 0xF07FFFFFFFFFFFFF, - 0x7FE0003FFC007FF, - 0x7FE00003FF000, - 0xFF000001FF00, - 0xFF0000007F80, - 0x1FC000001FE00, - 0x7E0000003F000, - 0x1F8000000FC000, - 0xFF0000007F0000, - 0x3FC000001FE0000, - 0x1FF000001FE0000, - 0x1FF80000FFC000, - 0xFFC007FF8000FFC0, - 0xFFFFFFFFFFFFFC1F, - 0x1, - ], - }, - Map { - cells: [ - 0xF8FFFFFFFFFFFFFF, - 0x7FE0003FFC007FF, - 0x7FE00003FF000, - 0xFF000001FF00, - 0xFF0000007F80, - 0x3FC000001FE00, - 0x7E0000003F800, - 0x3F8000000FC000, - 0xFF0000007F8000, - 0x3FC000001FE0000, - 0x1FF000001FE0000, - 0x1FF80000FFC000, - 0xFFC007FF8000FFC0, - 0xFFFFFFFFFFFFFE3F, - 0x1, - ], - }, - Map { - cells: [ - 0xF8FFFFFFFFFFFFFF, - 0x7FE0003FFC007FF, - 0x7FE00003FF000, - 0xFF000001FF00, - 0xFF0000007F80, - 0x3FC000001FE00, - 0x7E0000003F800, - 0x3F8000000FC000, - 0xFF0000007F8000, - 0x3FC000001FE0000, - 0x1FF000001FE0000, - 0x1FF80000FFC000, - 0xFFC007FF8000FFC0, - 0xFFFFFFFFFFFFFE3F, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x7FF0007FFE00FFF, - 0x7FE00003FF000, - 0xFF800003FF00, - 0xFF800000FF80, - 0x3FC000001FE00, - 0xFF0000007F800, - 0x3FC000001FE000, - 0xFF0000007F8000, - 0x3FE000003FE0000, - 0x1FF800003FE0000, - 0x1FF80000FFC000, - 0xFFE00FFFC001FFC0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x7FF0007FFE00FFF, - 0x7FE00003FF000, - 0xFF800003FF00, - 0xFF800000FF80, - 0x3FC000001FE00, - 0xFF0000007F800, - 0x3FC000001FE000, - 0xFF0000007F8000, - 0x3FE000003FE0000, - 0x1FF800003FE0000, - 0x1FF80000FFC000, - 0xFFE00FFFC001FFC0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x7FF0007FFE00FFF, - 0x7FE00003FF000, - 0xFF800003FF00, - 0xFF800000FF80, - 0x3FC000001FE00, - 0xFF0000007F800, - 0x3FC000001FE000, - 0xFF0000007F8000, - 0x3FE000003FE0000, - 0x1FF800003FE0000, - 0x1FF80000FFC000, - 0xFFE00FFFC001FFC0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFF0007FFE00FFF, - 0xFFE00003FF800, - 0xFF800003FF80, - 0xFF800000FF80, - 0x3FC000001FE00, - 0xFF0000007F800, - 0x3FC000001FE000, - 0xFF0000007F8000, - 0x3FE000003FE0000, - 0x3FF800003FE0000, - 0x3FF80000FFE000, - 0xFFE00FFFC001FFE0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFF0007FFE00FFF, - 0xFFE00003FF800, - 0xFF800003FF80, - 0xFF800000FF80, - 0x3FC000001FE00, - 0xFF0000007F800, - 0x3FC000001FE000, - 0xFF0000007F8000, - 0x3FE000003FE0000, - 0x3FF800003FE0000, - 0x3FF80000FFE000, - 0xFFE00FFFC001FFE0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFF0007FFE00FFF, - 0xFFF00007FF800, - 0xFF800003FF80, - 0xFF800000FF80, - 0x3FC000001FE00, - 0xFF0000007F800, - 0x3FC000001FE000, - 0xFF0000007F8000, - 0x3FE000003FE0000, - 0x3FF800003FE0000, - 0x3FFC0001FFE000, - 0xFFE00FFFC001FFE0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFF0007FFF01FFF, - 0xFFF00007FF800, - 0xFF800003FF80, - 0x1FF800000FF80, - 0x3FC000001FF00, - 0xFF0000007F800, - 0x3FC000001FE000, - 0x1FF0000007F8000, - 0x3FE000003FF0000, - 0x3FF800003FE0000, - 0x3FFC0001FFE000, - 0xFFF01FFFC001FFE0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFF0007FFF01FFF, - 0xFFF00007FF800, - 0xFF800003FF80, - 0x1FF800000FF80, - 0x3FC000001FF00, - 0xFF0000007F800, - 0x3FC000001FE000, - 0x1FF0000007F8000, - 0x3FE000003FF0000, - 0x3FF800003FE0000, - 0x3FFC0001FFE000, - 0xFFF01FFFC001FFE0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFF800FFFF01FFF, - 0xFFF00007FF800, - 0x1FF800003FF80, - 0x1FF800000FFC0, - 0x3FC000001FF00, - 0xFF0000007F800, - 0x3FC000001FE000, - 0x1FF0000007F8000, - 0x7FE000003FF0000, - 0x3FF800003FF0000, - 0x3FFC0001FFE000, - 0xFFF01FFFE003FFE0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFF800FFFF01FFF, - 0xFFF00007FF800, - 0x1FF800003FF80, - 0x1FF800000FFC0, - 0x3FC000001FF00, - 0xFF0000007F800, - 0x3FC000001FE000, - 0x1FF0000007F8000, - 0x7FE000003FF0000, - 0x3FF800003FF0000, - 0x3FFC0001FFE000, - 0xFFF01FFFE003FFE0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFF800FFFF83FFF, - 0xFFF00007FF800, - 0x1FF800003FF80, - 0x1FF800000FFC0, - 0x3FE000003FF00, - 0xFF0000007F800, - 0x3FC000001FE000, - 0x1FF800000FF8000, - 0x7FE000003FF0000, - 0x3FF800003FF0000, - 0x3FFC0001FFE000, - 0xFFF83FFFE003FFE0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFF800FFFF83FFF, - 0xFFF00007FF800, - 0x1FF800003FF80, - 0x1FF800000FFC0, - 0x3FE000003FF00, - 0xFF0000007F800, - 0x3FC000001FE000, - 0x1FF800000FF8000, - 0x7FE000003FF0000, - 0x3FF800003FF0000, - 0x3FFC0001FFE000, - 0xFFF83FFFE003FFE0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFF800FFFF83FFF, - 0xFFF00007FF800, - 0x1FF800003FF80, - 0x1FF800000FFC0, - 0x3FE000003FF00, - 0xFF0000007F800, - 0x3FC000001FE000, - 0x1FF800000FF8000, - 0x7FE000003FF0000, - 0x3FF800003FF0000, - 0x3FFC0001FFE000, - 0xFFF83FFFE003FFE0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x1FFF800FFFFC7FFF, - 0xFFF00007FFC00, - 0x1FFC00007FF80, - 0x1FF800000FFC0, - 0x7FE000003FF00, - 0xFF0000007FC00, - 0x7FC000001FE000, - 0x1FF800000FFC000, - 0x7FE000003FF0000, - 0x3FFC00007FF0000, - 0x7FFC0001FFE000, - 0xFFFC7FFFE003FFF0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x1FFF800FFFFC7FFF, - 0xFFF00007FFC00, - 0x1FFC00007FF80, - 0x1FF800000FFC0, - 0x7FE000003FF00, - 0xFF0000007FC00, - 0x7FC000001FE000, - 0x1FF800000FFC000, - 0x7FE000003FF0000, - 0x3FFC00007FF0000, - 0x7FFC0001FFE000, - 0xFFFC7FFFE003FFF0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x1FFFC01FFFFEFFFF, - 0x1FFF8000FFFC00, - 0x1FFC00007FFC0, - 0x1FFC00001FFC0, - 0x7FE000003FF00, - 0xFF800000FFC00, - 0x7FE000003FE000, - 0x1FF800000FFC000, - 0x7FF000007FF0000, - 0x7FFC00007FF0000, - 0x7FFE0003FFF000, - 0xFFFEFFFFF007FFF0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x1FFFC01FFFFFFFFF, - 0x1FFF8000FFFC00, - 0x1FFC00007FFC0, - 0x1FFC00001FFC0, - 0x7FE000003FF00, - 0x1FF800000FFC00, - 0x7FE000003FF000, - 0x1FF800000FFC000, - 0x7FF000007FF0000, - 0x7FFC00007FF0000, - 0x7FFE0003FFF000, - 0xFFFFFFFFF007FFF0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x1FFFC01FFFFFFFFF, - 0x1FFF8000FFFC00, - 0x1FFC00007FFC0, - 0x1FFC00001FFC0, - 0x7FE000003FF00, - 0x1FF800000FFC00, - 0x7FE000003FF000, - 0x1FF800000FFC000, - 0x7FF000007FF0000, - 0x7FFC00007FF0000, - 0x7FFE0003FFF000, - 0xFFFFFFFFF007FFF0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x1FFFC01FFFFFFFFF, - 0x1FFF8000FFFC00, - 0x1FFC00007FFC0, - 0x1FFC00001FFC0, - 0x7FE000003FF00, - 0x1FF800000FFC00, - 0x7FE000003FF000, - 0x1FF800000FFC000, - 0x7FF000007FF0000, - 0x7FFC00007FF0000, - 0x7FFE0003FFF000, - 0xFFFFFFFFF007FFF0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x1FFFC01FFFFFFFFF, - 0x1FFF8000FFFC00, - 0x1FFC00007FFC0, - 0x1FFC00001FFC0, - 0x7FE000003FF00, - 0x1FF800000FFC00, - 0x7FE000003FF000, - 0x1FF800000FFC000, - 0x7FF000007FF0000, - 0x7FFC00007FF0000, - 0x7FFE0003FFF000, - 0xFFFFFFFFF007FFF0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x1FFFC01FFFFFFFFF, - 0x1FFF8000FFFC00, - 0x1FFC00007FFC0, - 0x1FFC00001FFC0, - 0x7FE000003FF00, - 0x1FF800000FFC00, - 0x7FE000003FF000, - 0x1FF800000FFC000, - 0x7FF000007FF0000, - 0x7FFC00007FF0000, - 0x7FFE0003FFF000, - 0xFFFFFFFFF007FFF0, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x3FFFE03FFFFFFFFF, - 0x1FFF8000FFFE00, - 0x3FFC00007FFC0, - 0x3FFC00001FFE0, - 0x7FE000003FF80, - 0x1FF800000FFC00, - 0x7FE000003FF000, - 0x3FF800000FFC000, - 0xFFF000007FF8000, - 0x7FFC00007FF8000, - 0xFFFE0003FFF000, - 0xFFFFFFFFF80FFFF8, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x3FFFE03FFFFFFFFF, - 0x1FFF8000FFFE00, - 0x3FFC00007FFC0, - 0x3FFC00001FFE0, - 0x7FE000003FF80, - 0x1FF800000FFC00, - 0x7FE000003FF000, - 0x3FF800000FFC000, - 0xFFF000007FF8000, - 0x7FFC00007FF8000, - 0xFFFE0003FFF000, - 0xFFFFFFFFF80FFFF8, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x3FFFE03FFFFFFFFF, - 0x1FFF8000FFFE00, - 0x3FFC00007FFC0, - 0x3FFC00001FFE0, - 0x7FE000003FF80, - 0x1FF800000FFC00, - 0x7FE000003FF000, - 0x3FF800000FFC000, - 0xFFF000007FF8000, - 0x7FFC00007FF8000, - 0xFFFE0003FFF000, - 0xFFFFFFFFF80FFFF8, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x3FFFE03FFFFFFFFF, - 0x1FFF8000FFFE00, - 0x3FFC00007FFC0, - 0x3FFC00001FFE0, - 0x7FE000003FF80, - 0x1FF800000FFC00, - 0x7FE000003FF000, - 0x3FF800000FFC000, - 0xFFF000007FF8000, - 0x7FFC00007FF8000, - 0xFFFE0003FFF000, - 0xFFFFFFFFF80FFFF8, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x3FFFF07FFFFFFFFF, - 0x1FFFC001FFFE00, - 0x3FFE0000FFFC0, - 0x3FFC00001FFE0, - 0x7FF000007FF80, - 0x1FF800000FFC00, - 0x7FE000003FF000, - 0x3FFC00001FFC000, - 0xFFF000007FF8000, - 0x7FFE0000FFF8000, - 0xFFFF0007FFF000, - 0xFFFFFFFFFC1FFFF8, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x3FFFF07FFFFFFFFF, - 0x1FFFC001FFFE00, - 0x3FFE0000FFFC0, - 0x3FFC00001FFE0, - 0x7FF000007FF80, - 0x1FF800000FFC00, - 0x7FE000003FF000, - 0x3FFC00001FFC000, - 0xFFF000007FF8000, - 0x7FFE0000FFF8000, - 0xFFFF0007FFF000, - 0xFFFFFFFFFC1FFFF8, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x3FFFF07FFFFFFFFF, - 0x3FFFC001FFFE00, - 0x3FFE0000FFFE0, - 0x3FFC00001FFE0, - 0x7FF000007FF80, - 0x1FF800000FFC00, - 0x7FE000003FF000, - 0x3FFC00001FFC000, - 0xFFF000007FF8000, - 0xFFFE0000FFF8000, - 0xFFFF0007FFF800, - 0xFFFFFFFFFC1FFFF8, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x3FFFF07FFFFFFFFF, - 0x3FFFC001FFFE00, - 0x3FFE0000FFFE0, - 0x3FFC00001FFE0, - 0x7FF000007FF80, - 0x1FF800000FFC00, - 0x7FE000003FF000, - 0x3FFC00001FFC000, - 0xFFF000007FF8000, - 0xFFFE0000FFF8000, - 0xFFFF0007FFF800, - 0xFFFFFFFFFC1FFFF8, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x7FFFF8FFFFFFFFFF, - 0x3FFFC001FFFF00, - 0x3FFE0000FFFE0, - 0x3FFE00003FFE0, - 0xFFF000007FF80, - 0x1FF800000FFE00, - 0xFFE000003FF000, - 0x3FFC00001FFE000, - 0xFFF80000FFF8000, - 0xFFFE0000FFF8000, - 0x1FFFF0007FFF800, - 0xFFFFFFFFFE3FFFFC, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x7FFFF8FFFFFFFFFF, - 0x3FFFC001FFFF00, - 0x3FFE0000FFFE0, - 0x3FFE00003FFE0, - 0xFFF000007FF80, - 0x1FF800000FFE00, - 0xFFE000003FF000, - 0x3FFC00001FFE000, - 0xFFF80000FFF8000, - 0xFFFE0000FFF8000, - 0x1FFFF0007FFF800, - 0xFFFFFFFFFE3FFFFC, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFDFFFFFFFFFF, - 0x3FFFC001FFFF00, - 0x3FFE0000FFFE0, - 0x3FFE00003FFE0, - 0xFFF000007FF80, - 0x1FFC00001FFE00, - 0xFFF000007FF000, - 0x3FFC00001FFE000, - 0xFFF80000FFF8000, - 0xFFFE0000FFF8000, - 0x1FFFF0007FFF800, - 0xFFFFFFFFFF7FFFFC, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFFFFFFFFFFFF, - 0x3FFFC001FFFF00, - 0x3FFE0000FFFE0, - 0x3FFE00003FFE0, - 0xFFF000007FF80, - 0x3FFC00001FFE00, - 0xFFF000007FF800, - 0x3FFC00001FFE000, - 0xFFF80000FFF8000, - 0xFFFE0000FFF8000, - 0x1FFFF0007FFF800, - 0xFFFFFFFFFFFFFFFC, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFFFFFFFFFFFF, - 0x3FFFC001FFFF00, - 0x3FFE0000FFFE0, - 0x3FFE00003FFE0, - 0xFFF000007FF80, - 0x3FFC00001FFE00, - 0xFFF000007FF800, - 0x3FFC00001FFE000, - 0xFFF80000FFF8000, - 0xFFFE0000FFF8000, - 0x1FFFF0007FFF800, - 0xFFFFFFFFFFFFFFFC, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFFFFFFFFFFFF, - 0x3FFFE003FFFF00, - 0x7FFE0000FFFE0, - 0x3FFE00003FFF0, - 0xFFF000007FF80, - 0x3FFC00001FFE00, - 0xFFF000007FF800, - 0x3FFC00001FFE000, - 0x1FFF80000FFF8000, - 0xFFFE0000FFFC000, - 0x1FFFF800FFFF800, - 0xFFFFFFFFFFFFFFFC, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x3FFFE003FFFF80, - 0x7FFE0000FFFE0, - 0x7FFE00003FFF0, - 0xFFF000007FFC0, - 0x3FFC00001FFE00, - 0xFFF000007FF800, - 0x7FFC00001FFE000, - 0x1FFF80000FFFC000, - 0xFFFE0000FFFC000, - 0x3FFFF800FFFF800, - 0xFFFFFFFFFFFFFFFE, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x3FFFE003FFFF80, - 0x7FFE0000FFFE0, - 0x7FFE00003FFF0, - 0xFFF000007FFC0, - 0x3FFC00001FFE00, - 0xFFF000007FF800, - 0x7FFC00001FFE000, - 0x1FFF80000FFFC000, - 0xFFFE0000FFFC000, - 0x3FFFF800FFFF800, - 0xFFFFFFFFFFFFFFFE, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFE003FFFF80, - 0x7FFF0001FFFF0, - 0x7FFE00003FFF0, - 0xFFF000007FFC0, - 0x3FFC00001FFE00, - 0xFFF000007FF800, - 0x7FFC00001FFE000, - 0x1FFF80000FFFC000, - 0x1FFFF0001FFFC000, - 0x3FFFF800FFFFC00, - 0xFFFFFFFFFFFFFFFE, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFE003FFFF80, - 0x7FFF0001FFFF0, - 0x7FFE00003FFF0, - 0xFFF000007FFC0, - 0x3FFC00001FFE00, - 0xFFF000007FF800, - 0x7FFC00001FFE000, - 0x1FFF80000FFFC000, - 0x1FFFF0001FFFC000, - 0x3FFFF800FFFFC00, - 0xFFFFFFFFFFFFFFFE, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFE003FFFF80, - 0x7FFF0001FFFF0, - 0x7FFE00003FFF0, - 0xFFF000007FFC0, - 0x3FFC00001FFE00, - 0xFFF000007FF800, - 0x7FFC00001FFE000, - 0x1FFF80000FFFC000, - 0x1FFFF0001FFFC000, - 0x3FFFF800FFFFC00, - 0xFFFFFFFFFFFFFFFE, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFE003FFFFC1, - 0x7FFF0001FFFF0, - 0x7FFE00003FFF0, - 0xFFF80000FFFC0, - 0x3FFC00001FFE00, - 0xFFF000007FF800, - 0x7FFE00003FFE000, - 0x1FFF80000FFFC000, - 0x1FFFF0001FFFC000, - 0x7FFFF800FFFFC00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFE003FFFFC1, - 0x7FFF0001FFFF0, - 0x7FFE00003FFF0, - 0xFFF80000FFFC0, - 0x3FFC00001FFE00, - 0xFFF000007FF800, - 0x7FFE00003FFE000, - 0x1FFF80000FFFC000, - 0x1FFFF0001FFFC000, - 0x7FFFF800FFFFC00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFE003FFFFC1, - 0x7FFF0001FFFF0, - 0x7FFE00003FFF0, - 0xFFF80000FFFC0, - 0x3FFC00001FFE00, - 0xFFF000007FF800, - 0x7FFE00003FFE000, - 0x1FFF80000FFFC000, - 0x1FFFF0001FFFC000, - 0x7FFFF800FFFFC00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFF007FFFFC1, - 0x7FFF0001FFFF0, - 0x7FFF00007FFF0, - 0xFFF80000FFFC0, - 0x3FFC00001FFE00, - 0xFFF000007FF800, - 0x7FFE00003FFE000, - 0x1FFFC0001FFFC000, - 0x1FFFF0001FFFC000, - 0x7FFFFC01FFFFC00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFF007FFFFE3, - 0x7FFF0001FFFF0, - 0x7FFF00007FFF0, - 0x1FFF80000FFFC0, - 0x3FFC00001FFF00, - 0x1FFF000007FF800, - 0x7FFE00003FFF000, - 0x1FFFC0001FFFC000, - 0x1FFFF0001FFFC000, - 0x8FFFFFC01FFFFC00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFF007FFFFE3, - 0x7FFF0001FFFF0, - 0x7FFF00007FFF0, - 0x1FFF80000FFFC0, - 0x3FFC00001FFF00, - 0x1FFF000007FF800, - 0x7FFE00003FFF000, - 0x1FFFC0001FFFC000, - 0x1FFFF0001FFFC000, - 0x8FFFFFC01FFFFC00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFF007FFFFF7, - 0x7FFF0001FFFF0, - 0x7FFF00007FFF0, - 0x1FFF80000FFFC0, - 0x3FFE00003FFF00, - 0x1FFF80000FFF800, - 0x7FFE00003FFF000, - 0x1FFFC0001FFFC000, - 0x1FFFF0001FFFC000, - 0xDFFFFFC01FFFFC00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFF007FFFFFF, - 0xFFFF0001FFFF8, - 0x7FFF00007FFF8, - 0x1FFF80000FFFC0, - 0x7FFE00003FFF00, - 0x1FFF80000FFFC00, - 0x7FFE00003FFF000, - 0x3FFFC0001FFFC000, - 0x3FFFF0001FFFE000, - 0xFFFFFFC01FFFFE00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFF007FFFFFF, - 0xFFFF0001FFFF8, - 0x7FFF00007FFF8, - 0x1FFF80000FFFC0, - 0x7FFE00003FFF00, - 0x1FFF80000FFFC00, - 0x7FFE00003FFF000, - 0x3FFFC0001FFFC000, - 0x3FFFF0001FFFE000, - 0xFFFFFFC01FFFFE00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFF007FFFFFF, - 0xFFFF8003FFFF8, - 0x7FFF00007FFF8, - 0x1FFF80000FFFC0, - 0x7FFE00003FFF00, - 0x1FFF80000FFFC00, - 0x7FFE00003FFF000, - 0x3FFFC0001FFFC000, - 0x3FFFF8003FFFE000, - 0xFFFFFFC01FFFFE00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFF80FFFFFFF, - 0xFFFF8003FFFF8, - 0xFFFF00007FFF8, - 0x1FFF80000FFFE0, - 0x7FFE00003FFF00, - 0x1FFF80000FFFC00, - 0xFFFE00003FFF000, - 0x3FFFC0001FFFE000, - 0x3FFFF8003FFFE000, - 0xFFFFFFE03FFFFE00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFF80FFFFFFF, - 0xFFFF8003FFFF8, - 0xFFFF00007FFF8, - 0x1FFF80000FFFE0, - 0x7FFE00003FFF00, - 0x1FFF80000FFFC00, - 0xFFFE00003FFF000, - 0x3FFFC0001FFFE000, - 0x3FFFF8003FFFE000, - 0xFFFFFFE03FFFFE00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFF80FFFFFFF, - 0xFFFF8003FFFF8, - 0xFFFF00007FFF8, - 0x1FFF80000FFFE0, - 0x7FFE00003FFF00, - 0x1FFF80000FFFC00, - 0xFFFE00003FFF000, - 0x3FFFC0001FFFE000, - 0x3FFFF8003FFFE000, - 0xFFFFFFE03FFFFE00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFF80FFFFFFF, - 0xFFFF8003FFFF8, - 0xFFFF00007FFF8, - 0x1FFF80000FFFE0, - 0x7FFE00003FFF00, - 0x1FFF80000FFFC00, - 0xFFFE00003FFF000, - 0x3FFFC0001FFFE000, - 0x3FFFF8003FFFE000, - 0xFFFFFFE03FFFFE00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFF80FFFFFFF, - 0xFFFF8003FFFF8, - 0xFFFF00007FFF8, - 0x1FFF80000FFFE0, - 0x7FFE00003FFF00, - 0x1FFF80000FFFC00, - 0xFFFE00003FFF000, - 0x3FFFC0001FFFE000, - 0x3FFFF8003FFFE000, - 0xFFFFFFE03FFFFE00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFC1FFFFFFF, - 0xFFFF8003FFFF8, - 0xFFFF00007FFF8, - 0x1FFFC0001FFFE0, - 0x7FFE00003FFF00, - 0x1FFF80000FFFC00, - 0xFFFF00007FFF000, - 0x3FFFC0001FFFE000, - 0x3FFFF8003FFFE000, - 0xFFFFFFF07FFFFE00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1FFFFFC1FFFFFFF, - 0xFFFF8003FFFFC, - 0xFFFF8000FFFF8, - 0x1FFFC0001FFFE0, - 0x7FFE00003FFF00, - 0x1FFF80000FFFC00, - 0xFFFF00007FFF000, - 0x3FFFE0003FFFE000, - 0x7FFFF8003FFFE000, - 0xFFFFFFF07FFFFF00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1FFFFFC1FFFFFFF, - 0xFFFF8003FFFFC, - 0xFFFF8000FFFF8, - 0x1FFFC0001FFFE0, - 0x7FFE00003FFF00, - 0x1FFF80000FFFC00, - 0xFFFF00007FFF000, - 0x3FFFE0003FFFE000, - 0x7FFFF8003FFFE000, - 0xFFFFFFF07FFFFF00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1FFFFFC1FFFFFFF, - 0xFFFF8003FFFFC, - 0xFFFF8000FFFF8, - 0x1FFFC0001FFFE0, - 0x7FFE00003FFF00, - 0x1FFF80000FFFC00, - 0xFFFF00007FFF000, - 0x3FFFE0003FFFE000, - 0x7FFFF8003FFFE000, - 0xFFFFFFF07FFFFF00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1FFFFFE3FFFFFFF, - 0x1FFFFC007FFFFC, - 0xFFFF8000FFFFC, - 0x3FFFC0001FFFE0, - 0x7FFE00003FFF80, - 0x3FFF80000FFFC00, - 0xFFFF00007FFF800, - 0x7FFFE0003FFFE000, - 0x7FFFFC007FFFF000, - 0xFFFFFFF8FFFFFF00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1FFFFFE3FFFFFFF, - 0x1FFFFC007FFFFC, - 0xFFFF8000FFFFC, - 0x3FFFC0001FFFE0, - 0x7FFE00003FFF80, - 0x3FFF80000FFFC00, - 0xFFFF00007FFF800, - 0x7FFFE0003FFFE000, - 0x7FFFFC007FFFF000, - 0xFFFFFFF8FFFFFF00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1FFFFFE3FFFFFFF, - 0x1FFFFC007FFFFC, - 0xFFFF8000FFFFC, - 0x3FFFC0001FFFE0, - 0x7FFE00003FFF80, - 0x3FFF80000FFFC00, - 0xFFFF00007FFF800, - 0x7FFFE0003FFFE000, - 0x7FFFFC007FFFF000, - 0xFFFFFFF8FFFFFF00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1FFFFFF7FFFFFFF, - 0x1FFFFC007FFFFC, - 0xFFFF8000FFFFC, - 0x3FFFC0001FFFE0, - 0x7FFF00007FFF80, - 0x3FFFC0001FFFC00, - 0xFFFF00007FFF800, - 0x7FFFE0003FFFE000, - 0x7FFFFC007FFFF000, - 0xFFFFFFFDFFFFFF00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1FFFFFFFFFFFFFF, - 0x1FFFFC007FFFFC, - 0xFFFF8000FFFFC, - 0x3FFFC0001FFFE0, - 0xFFFF00007FFF80, - 0x3FFFC0001FFFE00, - 0xFFFF00007FFF800, - 0x7FFFE0003FFFE000, - 0x7FFFFC007FFFF000, - 0xFFFFFFFFFFFFFF00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x3FFFFFFFFFFFFFF, - 0x1FFFFC007FFFFE, - 0x1FFFF8000FFFFC, - 0x3FFFC0001FFFF0, - 0xFFFF00007FFF80, - 0x3FFFC0001FFFE00, - 0x1FFFF00007FFF800, - 0x7FFFE0003FFFF000, - 0xFFFFFC007FFFF000, - 0xFFFFFFFFFFFFFF80, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x3FFFFFFFFFFFFFF, - 0x1FFFFC007FFFFE, - 0x1FFFF8000FFFFC, - 0x3FFFC0001FFFF0, - 0xFFFF00007FFF80, - 0x3FFFC0001FFFE00, - 0x1FFFF00007FFF800, - 0x7FFFE0003FFFF000, - 0xFFFFFC007FFFF000, - 0xFFFFFFFFFFFFFF80, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x3FFFFFFFFFFFFFF, - 0x1FFFFC007FFFFE, - 0x1FFFF8000FFFFC, - 0x3FFFC0001FFFF0, - 0xFFFF00007FFF80, - 0x3FFFC0001FFFE00, - 0x1FFFF00007FFF800, - 0x7FFFE0003FFFF000, - 0xFFFFFC007FFFF000, - 0xFFFFFFFFFFFFFF80, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x3FFFFFFFFFFFFFF, - 0x1FFFFC007FFFFE, - 0x1FFFF8000FFFFC, - 0x3FFFC0001FFFF0, - 0xFFFF00007FFF80, - 0x3FFFC0001FFFE00, - 0x1FFFF00007FFF800, - 0x7FFFE0003FFFF000, - 0xFFFFFC007FFFF000, - 0xFFFFFFFFFFFFFF80, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x3FFFFFFFFFFFFFF, - 0x1FFFFC007FFFFE, - 0x1FFFF8000FFFFC, - 0x3FFFC0001FFFF0, - 0xFFFF00007FFF80, - 0x3FFFC0001FFFE00, - 0x1FFFF00007FFF800, - 0x7FFFE0003FFFF000, - 0xFFFFFC007FFFF000, - 0xFFFFFFFFFFFFFF80, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x3FFFFFFFFFFFFFF, - 0x1FFFFE00FFFFFE, - 0x1FFFFC001FFFFC, - 0x3FFFC0001FFFF0, - 0xFFFF00007FFF80, - 0x3FFFC0001FFFE00, - 0x1FFFF00007FFF800, - 0x7FFFF0007FFFF000, - 0xFFFFFE00FFFFF000, - 0xFFFFFFFFFFFFFF80, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFFFFFFFFFFF, - 0x1FFFFE00FFFFFF, - 0x1FFFFC001FFFFC, - 0x3FFFE0003FFFF0, - 0xFFFF00007FFF80, - 0x3FFFC0001FFFE00, - 0x1FFFF8000FFFF800, - 0x7FFFF0007FFFF000, - 0xFFFFFE00FFFFF000, - 0xFFFFFFFFFFFFFFC1, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFFFFFFFFFFF, - 0x3FFFFE00FFFFFF, - 0x1FFFFC001FFFFE, - 0x3FFFE0003FFFF0, - 0xFFFF00007FFF80, - 0x3FFFC0001FFFE00, - 0x1FFFF8000FFFF800, - 0xFFFFF0007FFFF000, - 0xFFFFFE00FFFFF800, - 0xFFFFFFFFFFFFFFC1, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFFFFFFFFFFF, - 0x3FFFFE00FFFFFF, - 0x1FFFFC001FFFFE, - 0x3FFFE0003FFFF0, - 0xFFFF00007FFF80, - 0x3FFFC0001FFFE00, - 0x1FFFF8000FFFF800, - 0xFFFFF0007FFFF000, - 0xFFFFFE00FFFFF800, - 0xFFFFFFFFFFFFFFC1, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFFFFFFFFFFF, - 0x3FFFFE00FFFFFF, - 0x1FFFFC001FFFFE, - 0x3FFFE0003FFFF0, - 0xFFFF00007FFF80, - 0x3FFFC0001FFFE00, - 0x1FFFF8000FFFF800, - 0xFFFFF0007FFFF000, - 0xFFFFFE00FFFFF800, - 0xFFFFFFFFFFFFFFC1, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFFFFFFFFFFF, - 0x3FFFFE00FFFFFF, - 0x1FFFFC001FFFFE, - 0x3FFFE0003FFFF0, - 0xFFFF00007FFF80, - 0x3FFFC0001FFFE00, - 0x1FFFF8000FFFF800, - 0xFFFFF0007FFFF000, - 0xFFFFFE00FFFFF800, - 0xFFFFFFFFFFFFFFC1, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x8FFFFFFFFFFFFFFF, - 0x3FFFFE00FFFFFF, - 0x1FFFFC001FFFFE, - 0x7FFFE0003FFFF0, - 0xFFFF00007FFFC0, - 0x7FFFC0001FFFE00, - 0x1FFFF8000FFFFC00, - 0xFFFFF0007FFFF000, - 0xFFFFFE00FFFFF800, - 0xFFFFFFFFFFFFFFE3, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x8FFFFFFFFFFFFFFF, - 0x3FFFFE00FFFFFF, - 0x1FFFFC001FFFFE, - 0x7FFFE0003FFFF0, - 0xFFFF00007FFFC0, - 0x7FFFC0001FFFE00, - 0x1FFFF8000FFFFC00, - 0xFFFFF0007FFFF000, - 0xFFFFFE00FFFFF800, - 0xFFFFFFFFFFFFFFE3, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x8FFFFFFFFFFFFFFF, - 0x3FFFFE00FFFFFF, - 0x1FFFFC001FFFFE, - 0x7FFFE0003FFFF0, - 0xFFFF00007FFFC0, - 0x7FFFC0001FFFE00, - 0x1FFFF8000FFFFC00, - 0xFFFFF0007FFFF000, - 0xFFFFFE00FFFFF800, - 0xFFFFFFFFFFFFFFE3, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xDFFFFFFFFFFFFFFF, - 0x3FFFFF01FFFFFF, - 0x3FFFFC001FFFFE, - 0x7FFFE0003FFFF8, - 0xFFFF8000FFFFC0, - 0x7FFFE0003FFFE00, - 0x3FFFF8000FFFFC00, - 0xFFFFF0007FFFF800, - 0xFFFFFF01FFFFF800, - 0xFFFFFFFFFFFFFFF7, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x3FFFFF01FFFFFF, - 0x3FFFFC001FFFFE, - 0x7FFFE0003FFFF8, - 0x1FFFF8000FFFFC0, - 0x7FFFE0003FFFF00, - 0x3FFFF8000FFFFC00, - 0xFFFFF0007FFFF800, - 0xFFFFFF01FFFFF800, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x3FFFFF01FFFFFF, - 0x3FFFFC001FFFFE, - 0x7FFFE0003FFFF8, - 0x1FFFF8000FFFFC0, - 0x7FFFE0003FFFF00, - 0x3FFFF8000FFFFC00, - 0xFFFFF0007FFFF800, - 0xFFFFFF01FFFFF800, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFF01FFFFFF, - 0x3FFFFE003FFFFF, - 0x7FFFE0003FFFF8, - 0x1FFFF8000FFFFC0, - 0x7FFFE0003FFFF00, - 0x3FFFF8000FFFFC00, - 0xFFFFF800FFFFF800, - 0xFFFFFF01FFFFFC01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFF01FFFFFF, - 0x3FFFFE003FFFFF, - 0x7FFFE0003FFFF8, - 0x1FFFF8000FFFFC0, - 0x7FFFE0003FFFF00, - 0x3FFFF8000FFFFC00, - 0xFFFFF800FFFFF800, - 0xFFFFFF01FFFFFC01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFF01FFFFFF, - 0x3FFFFE003FFFFF, - 0x7FFFE0003FFFF8, - 0x1FFFF8000FFFFC0, - 0x7FFFE0003FFFF00, - 0x3FFFF8000FFFFC00, - 0xFFFFF800FFFFF800, - 0xFFFFFF01FFFFFC01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFF01FFFFFF, - 0x3FFFFE003FFFFF, - 0x7FFFE0003FFFF8, - 0x1FFFF8000FFFFC0, - 0x7FFFE0003FFFF00, - 0x3FFFF8000FFFFC00, - 0xFFFFF800FFFFF800, - 0xFFFFFF01FFFFFC01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFF83FFFFFF, - 0x3FFFFE003FFFFF, - 0x7FFFF0007FFFF8, - 0x1FFFF8000FFFFC0, - 0x7FFFE0003FFFF00, - 0x3FFFFC001FFFFC00, - 0xFFFFF800FFFFF800, - 0xFFFFFF83FFFFFC01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFF83FFFFFF, - 0x3FFFFE003FFFFF, - 0x7FFFF0007FFFF8, - 0x1FFFF8000FFFFC0, - 0x7FFFE0003FFFF00, - 0x3FFFFC001FFFFC00, - 0xFFFFF800FFFFF800, - 0xFFFFFF83FFFFFC01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFF83FFFFFF, - 0x3FFFFE003FFFFF, - 0x7FFFF0007FFFF8, - 0x1FFFF8000FFFFC0, - 0x7FFFE0003FFFF00, - 0x3FFFFC001FFFFC00, - 0xFFFFF800FFFFF800, - 0xFFFFFF83FFFFFC01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFF83FFFFFF, - 0x3FFFFE003FFFFF, - 0x7FFFF0007FFFF8, - 0x1FFFF8000FFFFC0, - 0x7FFFE0003FFFF00, - 0x3FFFFC001FFFFC00, - 0xFFFFF800FFFFF800, - 0xFFFFFF83FFFFFC01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFF83FFFFFF, - 0x3FFFFE003FFFFF, - 0x7FFFF0007FFFF8, - 0x1FFFF8000FFFFC0, - 0x7FFFE0003FFFF00, - 0x3FFFFC001FFFFC00, - 0xFFFFF800FFFFF800, - 0xFFFFFF83FFFFFC01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFFC7FFFFFF, - 0x3FFFFE003FFFFF, - 0xFFFFF0007FFFF8, - 0x1FFFF8000FFFFE0, - 0xFFFFE0003FFFF00, - 0x3FFFFC001FFFFE00, - 0xFFFFF800FFFFF800, - 0xFFFFFFC7FFFFFC01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x80FFFFFFC7FFFFFF, - 0x7FFFFE003FFFFF, - 0xFFFFF0007FFFFC, - 0x1FFFF8000FFFFE0, - 0xFFFFE0003FFFF00, - 0x7FFFFC001FFFFE00, - 0xFFFFF800FFFFFC00, - 0xFFFFFFC7FFFFFE03, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x80FFFFFFC7FFFFFF, - 0x7FFFFE003FFFFF, - 0xFFFFF0007FFFFC, - 0x1FFFF8000FFFFE0, - 0xFFFFE0003FFFF00, - 0x7FFFFC001FFFFE00, - 0xFFFFF800FFFFFC00, - 0xFFFFFFC7FFFFFE03, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x80FFFFFFEFFFFFFF, - 0x7FFFFF007FFFFF, - 0xFFFFF0007FFFFC, - 0x1FFFFC001FFFFE0, - 0xFFFFF0007FFFF00, - 0x7FFFFC001FFFFE00, - 0xFFFFFC01FFFFFC00, - 0xFFFFFFEFFFFFFE03, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x80FFFFFFFFFFFFFF, - 0x7FFFFF007FFFFF, - 0xFFFFF0007FFFFC, - 0x3FFFFC001FFFFE0, - 0xFFFFF0007FFFF80, - 0x7FFFFC001FFFFE00, - 0xFFFFFC01FFFFFC00, - 0xFFFFFFFFFFFFFE03, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x80FFFFFFFFFFFFFF, - 0x7FFFFF007FFFFF, - 0xFFFFF0007FFFFC, - 0x3FFFFC001FFFFE0, - 0xFFFFF0007FFFF80, - 0x7FFFFC001FFFFE00, - 0xFFFFFC01FFFFFC00, - 0xFFFFFFFFFFFFFE03, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x80FFFFFFFFFFFFFF, - 0x7FFFFF007FFFFF, - 0xFFFFF0007FFFFC, - 0x3FFFFC001FFFFE0, - 0xFFFFF0007FFFF80, - 0x7FFFFC001FFFFE00, - 0xFFFFFC01FFFFFC00, - 0xFFFFFFFFFFFFFE03, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x80FFFFFFFFFFFFFF, - 0x7FFFFF007FFFFF, - 0xFFFFF0007FFFFC, - 0x3FFFFC001FFFFE0, - 0xFFFFF0007FFFF80, - 0x7FFFFC001FFFFE00, - 0xFFFFFC01FFFFFC00, - 0xFFFFFFFFFFFFFE03, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x80FFFFFFFFFFFFFF, - 0x7FFFFF007FFFFF, - 0xFFFFF0007FFFFC, - 0x3FFFFC001FFFFE0, - 0xFFFFF0007FFFF80, - 0x7FFFFC001FFFFE00, - 0xFFFFFC01FFFFFC00, - 0xFFFFFFFFFFFFFE03, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xC1FFFFFFFFFFFFFF, - 0x7FFFFF007FFFFF, - 0xFFFFF800FFFFFC, - 0x3FFFFC001FFFFE0, - 0xFFFFF0007FFFF80, - 0x7FFFFE003FFFFE00, - 0xFFFFFC01FFFFFC00, - 0xFFFFFFFFFFFFFF07, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xC1FFFFFFFFFFFFFF, - 0x7FFFFF007FFFFF, - 0xFFFFF800FFFFFC, - 0x3FFFFC001FFFFE0, - 0xFFFFF0007FFFF80, - 0x7FFFFE003FFFFE00, - 0xFFFFFC01FFFFFC00, - 0xFFFFFFFFFFFFFF07, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xC1FFFFFFFFFFFFFF, - 0x7FFFFF007FFFFF, - 0xFFFFF800FFFFFC, - 0x3FFFFC001FFFFE0, - 0xFFFFF0007FFFF80, - 0x7FFFFE003FFFFE00, - 0xFFFFFC01FFFFFC00, - 0xFFFFFFFFFFFFFF07, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xC1FFFFFFFFFFFFFF, - 0x7FFFFF007FFFFF, - 0xFFFFF800FFFFFC, - 0x3FFFFC001FFFFE0, - 0xFFFFF0007FFFF80, - 0x7FFFFE003FFFFE00, - 0xFFFFFC01FFFFFC00, - 0xFFFFFFFFFFFFFF07, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xC1FFFFFFFFFFFFFF, - 0xFFFFFF80FFFFFF, - 0xFFFFF800FFFFFE, - 0x3FFFFC001FFFFE0, - 0xFFFFF0007FFFF80, - 0xFFFFFE003FFFFE00, - 0xFFFFFE03FFFFFE00, - 0xFFFFFFFFFFFFFF07, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xC1FFFFFFFFFFFFFF, - 0xFFFFFF80FFFFFF, - 0xFFFFF800FFFFFE, - 0x3FFFFC001FFFFE0, - 0xFFFFF0007FFFF80, - 0xFFFFFE003FFFFE00, - 0xFFFFFE03FFFFFE00, - 0xFFFFFFFFFFFFFF07, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xE3FFFFFFFFFFFFFF, - 0xFFFFFF80FFFFFF, - 0x1FFFFF800FFFFFE, - 0x3FFFFC001FFFFF0, - 0x1FFFFF0007FFFF80, - 0xFFFFFE003FFFFF00, - 0xFFFFFE03FFFFFE00, - 0xFFFFFFFFFFFFFF8F, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xE3FFFFFFFFFFFFFF, - 0xFFFFFF80FFFFFF, - 0x1FFFFF800FFFFFE, - 0x3FFFFC001FFFFF0, - 0x1FFFFF0007FFFF80, - 0xFFFFFE003FFFFF00, - 0xFFFFFE03FFFFFE00, - 0xFFFFFFFFFFFFFF8F, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xE3FFFFFFFFFFFFFF, - 0xFFFFFF80FFFFFF, - 0x1FFFFF800FFFFFE, - 0x3FFFFC001FFFFF0, - 0x1FFFFF0007FFFF80, - 0xFFFFFE003FFFFF00, - 0xFFFFFE03FFFFFE00, - 0xFFFFFFFFFFFFFF8F, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xF7FFFFFFFFFFFFFF, - 0xFFFFFF80FFFFFF, - 0x1FFFFF800FFFFFE, - 0x3FFFFE003FFFFF0, - 0x1FFFFF800FFFFF80, - 0xFFFFFE003FFFFF00, - 0xFFFFFE03FFFFFE00, - 0xFFFFFFFFFFFFFFDF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xF7FFFFFFFFFFFFFF, - 0xFFFFFF80FFFFFF, - 0x1FFFFF800FFFFFE, - 0x3FFFFE003FFFFF0, - 0x1FFFFF800FFFFF80, - 0xFFFFFE003FFFFF00, - 0xFFFFFE03FFFFFE00, - 0xFFFFFFFFFFFFFFDF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFF80FFFFFF, - 0x1FFFFF800FFFFFE, - 0x7FFFFE003FFFFF0, - 0x1FFFFF800FFFFFC0, - 0xFFFFFE003FFFFF00, - 0xFFFFFE03FFFFFE00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFF80FFFFFF, - 0x1FFFFF800FFFFFE, - 0x7FFFFE003FFFFF0, - 0x1FFFFF800FFFFFC0, - 0xFFFFFE003FFFFF00, - 0xFFFFFE03FFFFFE00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFC1FFFFFF, - 0x1FFFFFC01FFFFFE, - 0x7FFFFE003FFFFF0, - 0x1FFFFF800FFFFFC0, - 0xFFFFFF007FFFFF00, - 0xFFFFFF07FFFFFE00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFC1FFFFFF, - 0x1FFFFFC01FFFFFE, - 0x7FFFFE003FFFFF0, - 0x1FFFFF800FFFFFC0, - 0xFFFFFF007FFFFF00, - 0xFFFFFF07FFFFFE00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFC1FFFFFF, - 0x1FFFFFC01FFFFFE, - 0x7FFFFE003FFFFF0, - 0x1FFFFF800FFFFFC0, - 0xFFFFFF007FFFFF00, - 0xFFFFFF07FFFFFE00, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1FFFFFFC1FFFFFF, - 0x1FFFFFC01FFFFFF, - 0x7FFFFE003FFFFF0, - 0x1FFFFF800FFFFFC0, - 0xFFFFFF007FFFFF00, - 0xFFFFFF07FFFFFF01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1FFFFFFC1FFFFFF, - 0x1FFFFFC01FFFFFF, - 0x7FFFFE003FFFFF0, - 0x1FFFFF800FFFFFC0, - 0xFFFFFF007FFFFF00, - 0xFFFFFF07FFFFFF01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1FFFFFFC1FFFFFF, - 0x1FFFFFC01FFFFFF, - 0x7FFFFE003FFFFF0, - 0x1FFFFF800FFFFFC0, - 0xFFFFFF007FFFFF00, - 0xFFFFFF07FFFFFF01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1FFFFFFC1FFFFFF, - 0x1FFFFFC01FFFFFF, - 0x7FFFFE003FFFFF0, - 0x1FFFFF800FFFFFC0, - 0xFFFFFF007FFFFF00, - 0xFFFFFF07FFFFFF01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1FFFFFFE3FFFFFF, - 0x3FFFFFC01FFFFFF, - 0x7FFFFE003FFFFF8, - 0x3FFFFF800FFFFFC0, - 0xFFFFFF007FFFFF80, - 0xFFFFFF8FFFFFFF01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1FFFFFFE3FFFFFF, - 0x3FFFFFC01FFFFFF, - 0x7FFFFE003FFFFF8, - 0x3FFFFF800FFFFFC0, - 0xFFFFFF007FFFFF80, - 0xFFFFFF8FFFFFFF01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1FFFFFFE3FFFFFF, - 0x3FFFFFC01FFFFFF, - 0x7FFFFE003FFFFF8, - 0x3FFFFF800FFFFFC0, - 0xFFFFFF007FFFFF80, - 0xFFFFFF8FFFFFFF01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1FFFFFFE3FFFFFF, - 0x3FFFFFC01FFFFFF, - 0x7FFFFE003FFFFF8, - 0x3FFFFF800FFFFFC0, - 0xFFFFFF007FFFFF80, - 0xFFFFFF8FFFFFFF01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1FFFFFFE3FFFFFF, - 0x3FFFFFC01FFFFFF, - 0x7FFFFE003FFFFF8, - 0x3FFFFF800FFFFFC0, - 0xFFFFFF007FFFFF80, - 0xFFFFFF8FFFFFFF01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1FFFFFFF7FFFFFF, - 0x3FFFFFC01FFFFFF, - 0x7FFFFF007FFFFF8, - 0x3FFFFFC01FFFFFC0, - 0xFFFFFF007FFFFF80, - 0xFFFFFFDFFFFFFF01, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x83FFFFFFFFFFFFFF, - 0x3FFFFFE03FFFFFF, - 0xFFFFFF007FFFFF8, - 0x3FFFFFC01FFFFFE0, - 0xFFFFFF80FFFFFF80, - 0xFFFFFFFFFFFFFF83, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x83FFFFFFFFFFFFFF, - 0x3FFFFFE03FFFFFF, - 0xFFFFFF007FFFFF8, - 0x3FFFFFC01FFFFFE0, - 0xFFFFFF80FFFFFF80, - 0xFFFFFFFFFFFFFF83, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x83FFFFFFFFFFFFFF, - 0x3FFFFFE03FFFFFF, - 0xFFFFFF007FFFFF8, - 0x3FFFFFC01FFFFFE0, - 0xFFFFFF80FFFFFF80, - 0xFFFFFFFFFFFFFF83, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x83FFFFFFFFFFFFFF, - 0x3FFFFFE03FFFFFF, - 0xFFFFFF007FFFFF8, - 0x3FFFFFC01FFFFFE0, - 0xFFFFFF80FFFFFF80, - 0xFFFFFFFFFFFFFF83, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x83FFFFFFFFFFFFFF, - 0x3FFFFFE03FFFFFF, - 0xFFFFFF007FFFFF8, - 0x3FFFFFC01FFFFFE0, - 0xFFFFFF80FFFFFF80, - 0xFFFFFFFFFFFFFF83, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x83FFFFFFFFFFFFFF, - 0x3FFFFFE03FFFFFF, - 0xFFFFFF007FFFFF8, - 0x3FFFFFC01FFFFFE0, - 0xFFFFFF80FFFFFF80, - 0xFFFFFFFFFFFFFF83, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x83FFFFFFFFFFFFFF, - 0x3FFFFFE03FFFFFF, - 0xFFFFFF007FFFFF8, - 0x3FFFFFC01FFFFFE0, - 0xFFFFFF80FFFFFF80, - 0xFFFFFFFFFFFFFF83, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x83FFFFFFFFFFFFFF, - 0x3FFFFFE03FFFFFF, - 0xFFFFFF007FFFFF8, - 0x3FFFFFC01FFFFFE0, - 0xFFFFFF80FFFFFF80, - 0xFFFFFFFFFFFFFF83, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x83FFFFFFFFFFFFFF, - 0x3FFFFFE03FFFFFF, - 0xFFFFFF007FFFFF8, - 0x3FFFFFC01FFFFFE0, - 0xFFFFFF80FFFFFF80, - 0xFFFFFFFFFFFFFF83, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xC7FFFFFFFFFFFFFF, - 0x7FFFFFE03FFFFFF, - 0xFFFFFF007FFFFFC, - 0x7FFFFFC01FFFFFE0, - 0xFFFFFF80FFFFFFC0, - 0xFFFFFFFFFFFFFFC7, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xC7FFFFFFFFFFFFFF, - 0x7FFFFFE03FFFFFF, - 0xFFFFFF007FFFFFC, - 0x7FFFFFC01FFFFFE0, - 0xFFFFFF80FFFFFFC0, - 0xFFFFFFFFFFFFFFC7, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xC7FFFFFFFFFFFFFF, - 0x7FFFFFE03FFFFFF, - 0xFFFFFF007FFFFFC, - 0x7FFFFFC01FFFFFE0, - 0xFFFFFF80FFFFFFC0, - 0xFFFFFFFFFFFFFFC7, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xC7FFFFFFFFFFFFFF, - 0x7FFFFFF07FFFFFF, - 0xFFFFFF007FFFFFC, - 0x7FFFFFC01FFFFFE0, - 0xFFFFFFC1FFFFFFC0, - 0xFFFFFFFFFFFFFFC7, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xC7FFFFFFFFFFFFFF, - 0x7FFFFFF07FFFFFF, - 0xFFFFFF007FFFFFC, - 0x7FFFFFC01FFFFFE0, - 0xFFFFFFC1FFFFFFC0, - 0xFFFFFFFFFFFFFFC7, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xEFFFFFFFFFFFFFFF, - 0x7FFFFFF07FFFFFF, - 0xFFFFFF80FFFFFFC, - 0x7FFFFFE03FFFFFE0, - 0xFFFFFFC1FFFFFFC0, - 0xFFFFFFFFFFFFFFEF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xEFFFFFFFFFFFFFFF, - 0x7FFFFFF07FFFFFF, - 0xFFFFFF80FFFFFFC, - 0x7FFFFFE03FFFFFE0, - 0xFFFFFFC1FFFFFFC0, - 0xFFFFFFFFFFFFFFEF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFFF07FFFFFF, - 0x1FFFFFF80FFFFFFC, - 0x7FFFFFE03FFFFFF0, - 0xFFFFFFC1FFFFFFC0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFFF07FFFFFF, - 0x1FFFFFF80FFFFFFC, - 0x7FFFFFE03FFFFFF0, - 0xFFFFFFC1FFFFFFC0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFFF07FFFFFF, - 0x1FFFFFF80FFFFFFC, - 0x7FFFFFE03FFFFFF0, - 0xFFFFFFC1FFFFFFC0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFFF07FFFFFF, - 0x1FFFFFF80FFFFFFC, - 0x7FFFFFE03FFFFFF0, - 0xFFFFFFC1FFFFFFC0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFFF07FFFFFF, - 0x1FFFFFF80FFFFFFC, - 0x7FFFFFE03FFFFFF0, - 0xFFFFFFC1FFFFFFC0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x7FFFFFF07FFFFFF, - 0x1FFFFFF80FFFFFFC, - 0x7FFFFFE03FFFFFF0, - 0xFFFFFFC1FFFFFFC0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFF8FFFFFFF, - 0x1FFFFFF80FFFFFFE, - 0xFFFFFFE03FFFFFF0, - 0xFFFFFFE3FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFF8FFFFFFF, - 0x1FFFFFF80FFFFFFE, - 0xFFFFFFE03FFFFFF0, - 0xFFFFFFE3FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFF8FFFFFFF, - 0x1FFFFFF80FFFFFFE, - 0xFFFFFFE03FFFFFF0, - 0xFFFFFFE3FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFF8FFFFFFF, - 0x1FFFFFF80FFFFFFE, - 0xFFFFFFE03FFFFFF0, - 0xFFFFFFE3FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFF8FFFFFFF, - 0x1FFFFFF80FFFFFFE, - 0xFFFFFFE03FFFFFF0, - 0xFFFFFFE3FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFF8FFFFFFF, - 0x1FFFFFF80FFFFFFE, - 0xFFFFFFE03FFFFFF0, - 0xFFFFFFE3FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFF8FFFFFFF, - 0x1FFFFFF80FFFFFFE, - 0xFFFFFFE03FFFFFF0, - 0xFFFFFFE3FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, - Map { - cells: [ - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFDFFFFFFF, - 0x1FFFFFFC1FFFFFFE, - 0xFFFFFFF07FFFFFF0, - 0xFFFFFFF7FFFFFFE0, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0xFFFFFFFFFFFFFFFF, - 0x1, - ], - }, -]; diff --git a/src/game.rs b/src/game.rs deleted file mode 100644 index 00289a0..0000000 --- a/src/game.rs +++ /dev/null @@ -1,779 +0,0 @@ -use crate::command::{Action, Command}; -use crate::constants::*; -use crate::geometry::*; -use crate::json; - -mod player; -use player::*; - -mod powerup; -use powerup::*; - -pub mod map; -use map::*; - -use arrayvec::ArrayVec; - -#[derive(Debug, PartialEq, Eq, Clone)] -pub struct GameBoard { - pub round: u16, - pub max_rounds: u16, - pub players: [Player; 2], - pub powerups: ArrayVec<[Powerup; 2]>, - pub map: Map, - pub occupied_cells: ArrayVec<[Point2d; 6]>, - pub outcome: SimulationOutcome, -} - -#[derive(Debug, PartialEq, Eq, Clone, Copy)] -pub enum SimulationOutcome { - PlayerWon(usize), - Draw, - Continue, -} - -impl GameBoard { - pub fn new(json: json::State) -> GameBoard { - let player = Player { - active_worm: json.active_worm_index().unwrap(), - moves_score: json.my_player.score - json.my_player.health_score(), - select_moves: json.my_player.remaining_worm_selections, - worms: json - .my_player - .worms - .iter() - .map(|w| Worm { - id: w.id, - health: w.health, - position: Point2d::new(w.position.x, w.position.y), - rounds_until_unfrozen: w.rounds_until_unfrozen, - bombs: w.banana_bombs.as_ref().map(|b| b.count).unwrap_or(0), - snowballs: w.snowballs.as_ref().map(|b| b.count).unwrap_or(0), - }) - .collect(), - }; - - let opponent = Player { - active_worm: 0, - moves_score: json.opponents[0].score - json.opponents[0].health_score(), - select_moves: json.opponents[0].remaining_worm_selections, - worms: json - .opponents - .iter() - .flat_map(|o| &o.worms) - .map(|w| Worm { - id: w.id, - health: w.health, - position: Point2d::new(w.position.x, w.position.y), - rounds_until_unfrozen: w.rounds_until_unfrozen, - bombs: if w.profession == json::WormType::Agent { - STARTING_BOMBS - } else { - 0 - }, - snowballs: if w.profession == json::WormType::Technologist { - STARTING_SNOWBALLS - } else { - 0 - }, - }) - .collect(), - }; - - let mut map = Map::default(); - for cell in json.map.iter().flatten() { - if cell.cell_type == json::CellType::Dirt { - map.set(Point2d::new(cell.x, cell.y)) - } - } - - let players = [player, opponent]; - let occupied_cells = players - .iter() - .flat_map(|p| p.worms.iter()) - .map(|w| w.position) - .collect(); - - GameBoard { - round: json.current_round, - max_rounds: json.max_rounds, - players, - powerups: json - .map - .iter() - .flatten() - .filter_map(|c| { - c.powerup.as_ref().map(|_p| Powerup { - position: Point2d::new(c.x, c.y), - }) - }) - .collect(), - map, - occupied_cells, - outcome: SimulationOutcome::Continue, - } - } - - pub fn update(&mut self, json: json::State) { - for w in &json.my_player.worms { - if let Some(worm) = self.players[0].find_worm_mut(w.id) { - worm.health = w.health; - worm.position = Point2d::new(w.position.x, w.position.y); - worm.bombs = w.banana_bombs.as_ref().map(|b| b.count).unwrap_or(0); - worm.snowballs = w.snowballs.as_ref().map(|b| b.count).unwrap_or(0); - } - } - for w in json.opponents.iter().flat_map(|o| &o.worms) { - if let Some(worm) = self.players[1].find_worm_mut(w.id) { - worm.health = w.health; - worm.position = Point2d::new(w.position.x, w.position.y); - } - } - - if !self.players[1].active_worm_is_frozen() { - if json - .opponents - .iter() - .any(|o| o.previous_command.starts_with("banana")) - { - for worm in &mut self.players[1].worms { - worm.bombs = worm.bombs.saturating_sub(1); - } - } - if json - .opponents - .iter() - .any(|o| o.previous_command.starts_with("snowball")) - { - for worm in &mut self.players[1].worms { - worm.snowballs = worm.snowballs.saturating_sub(1); - } - } - } - - self.players[0].moves_score = json.my_player.score - json.my_player.health_score(); - self.players[1].moves_score = json.opponents[0].score - json.opponents[0].health_score(); - - self.players[0].select_moves = json.my_player.remaining_worm_selections; - self.players[1].select_moves = json.opponents[0].remaining_worm_selections; - - self.powerups = json - .map - .iter() - .flatten() - .filter_map(|c| { - c.powerup.as_ref().map(|_p| Powerup { - position: Point2d::new(c.x, c.y), - }) - }) - .collect(); - - for cell in json.map.iter().flatten() { - let point = Point2d::new(cell.x, cell.y); - - if cfg!(debug_assertions) { - // This checks if my lava map is the same as the game - // engine's lava map. It's off by one because the game - // engine will update its one at the beginning of - // processing the round. - let lava = LAVA_MAP[self.round as usize]; - - let lava_at = lava.at(point); - // NB: Map hasn't been updated yet, so it can be used to tell previous state. - match (&cell.cell_type, self.map.at(point)) { - (json::CellType::Air, Some(false)) => assert!( - lava_at == Some(false), - "Lava at {:?} expected Some(false), but found {:?}", - point, - lava_at - ), - (json::CellType::Air, _) => assert!( - lava_at.is_some(), - "Lava at {:?} expected Some(_), but found {:?}", - point, - lava_at - ), - (json::CellType::Lava, _) => assert!( - lava_at == Some(true), - "Lava at {:?} expected Some(true), but found {:?}", - point, - lava_at - ), - (json::CellType::DeepSpace, _) => assert!( - lava_at == None, - "Lava at {:?} expected None, but found {:?}", - point, - lava_at - ), - (json::CellType::Dirt, _) => assert!( - lava_at.is_some(), - "Lava at {:?} expected Some(_), but found {:?}", - point, - lava_at - ), - }; - } - - if cell.cell_type == json::CellType::Air { - self.map.clear(point) - } - } - - self.clear_dead_worms(); - self.players[0].active_worm = json.active_worm_index().unwrap_or(0); - self.players[1].active_worm = json.opponent_active_worm_index().unwrap_or(0); - - self.round += 1; - debug_assert_eq!(json.current_round, self.round); - } - - pub fn simulate(&mut self, moves: [Command; 2]) { - self.simulate_worms_on_lava(); - self.simulate_tick_frozen_timers(); - - self.simulate_select(moves); - - let actions = self.identify_actions(moves); - - self.simulate_moves(actions); - self.simulate_digs(actions); - self.simulate_bombs(actions); - self.simulate_shoots(actions); - self.simulate_snowballs(actions); - - self.clear_dead_worms(); - - for player in &mut self.players { - player.next_active_worm(); - } - - self.round += 1; - - self.outcome = match ( - self.players[0].worms.len(), - self.players[1].worms.len(), - self.round > self.max_rounds, - ) { - (0, 0, _) => SimulationOutcome::Draw, - (_, 0, _) => SimulationOutcome::PlayerWon(0), - (0, _, _) => SimulationOutcome::PlayerWon(1), - (_, _, true) => SimulationOutcome::Draw, - _ => SimulationOutcome::Continue, - }; - } - - fn simulate_worms_on_lava(&mut self) { - let lava_map = LAVA_MAP[self.round as usize]; - self.players - .iter_mut() - .flat_map(|p| p.worms.iter_mut()) - .filter(|w| lava_map.at(w.position) == Some(true)) - .for_each(|ref mut w| w.health -= LAVA_DAMAGE); - } - - fn simulate_tick_frozen_timers(&mut self) { - self.players - .iter_mut() - .flat_map(|p| p.worms.iter_mut()) - .filter(|w| w.health > 0) - .for_each(|ref mut w| { - w.rounds_until_unfrozen = w.rounds_until_unfrozen.saturating_sub(1) - }); - } - - fn identify_actions(&self, moves: [Command; 2]) -> [Action; 2] { - let mut it = self.players.iter().zip(moves.iter()).map(|(p, m)| { - if p.active_worm_is_frozen() { - Action::DoNothing - } else { - m.action - } - }); - [it.next().unwrap(), it.next().unwrap()] - } - - fn simulate_select(&mut self, moves: [Command; 2]) { - moves - .iter() - .zip(self.players.iter_mut()) - .filter(|(_m, player)| !player.active_worm_is_frozen()) - .for_each(|(m, player)| { - if let Some(worm) = m.worm { - debug_assert!( - player.select_moves > 0, - "Could not make select move, out of select tokens" - ); - player.select_moves = player.select_moves.saturating_sub(1); - player.active_worm = player.find_worm_position(worm).unwrap_or(0); - } - }); - } - - fn simulate_moves(&mut self, actions: [Action; 2]) { - match actions { - [Action::Move(p1), Action::Move(p2)] if p1.x == p2.x && p1.y == p2.y => { - let damage = COLLISION_DAMAGE; - - debug_assert_eq!( - Some(false), - self.map.at(Point2d::new(p1.x, p1.y)), - "Movement target wasn't empty, ({}, {})", - p1.x, - p1.y - ); - // Worms have a 50% chance of swapping places - // here. I'm treating that as an edge case that I - // don't need to handle for now. - for player in &mut self.players { - if let Some(worm) = player.active_worm_mut() { - worm.health -= damage; - } - // You might expect damage score too here, but nope - player.moves_score += MOVE_SCORE; - } - } - _ => { - for player_index in 0..actions.len() { - if let Action::Move(p) = actions[player_index] { - debug_assert_eq!( - Some(false), - self.map.at(p), - "Movement target wasn't empty, ({}, {})", - p.x, - p.y - ); - - self.players[player_index].moves_score += MOVE_SCORE; - - if let Some(worm) = self.players[player_index].active_worm_mut() { - debug_assert!( - (worm.position.x - p.x).abs() <= 1 - && (worm.position.y - p.y).abs() <= 1, - "Tried to move too far away, ({}, {})", - p.x, - p.y - ); - - worm.position = p; - - self.powerups.retain(|power| { - if power.position == worm.position { - worm.health += HEALTH_PACK_VALUE; - false - } else { - true - } - }); - } - } - } - } - } - } - - fn simulate_digs(&mut self, actions: [Action; 2]) { - for player_index in 0..actions.len() { - if let Action::Dig(p) = actions[player_index] { - debug_assert!( - Some(true) == self.map.at(p) - || (player_index == 1 && actions[0] == Action::Dig(p)), - "Tried to dig through air, ({}, {})", - p.x, - p.y - ); - debug_assert! { - (self.players[player_index].active_worm().unwrap().position.x - p.x).abs() <= 1 && - (self.players[player_index].active_worm().unwrap().position.y - p.y).abs() <= 1, - "Tried to dig too far away, ({}, {})", p.x, p.y - }; - - self.players[player_index].moves_score += DIG_SCORE; - - self.map.clear(p); - } - } - } - - fn simulate_bombs(&mut self, actions: [Action; 2]) { - // NB: Damage radius has the cell distance rounded UP, throwing range has the cell distance rounded DOWN - - let map_clone: Map = self.map; - - for player_index in 0..actions.len() { - if let Action::Bomb(p) = actions[player_index] { - if self.map.at(p).is_some() { - if let Some(worm) = self.players[player_index].active_worm_mut() { - debug_assert!(worm.bombs > 0, "Worm is throwing a bomb it doesn't have"); - debug_assert!((worm.position - p).magnitude_squared() < 6 * 6); // max range is 5, but it's 5 after rounding down - - worm.bombs = worm.bombs.saturating_sub(1); - - for &(damage_offset, weapon_damage) in BOMB_DAMAGES.iter() { - let target = p + damage_offset; - - if map_clone.at(target) == Some(true) { - self.map.clear(target); - self.players[player_index].moves_score += DIG_SCORE; - } - self.powerups.retain(|powerup| powerup.position != target); - - let target_own_worm: Option<&mut Worm> = self.players[player_index] - .worms - .iter_mut() - .find(|w| w.position == target); - - if let Some(target_worm) = target_own_worm { - target_worm.health -= weapon_damage; - self.players[player_index].moves_score -= - weapon_damage * ATTACK_SCORE_MULTIPLIER; - if target_worm.health <= 0 { - self.players[player_index].moves_score -= KILL_SCORE; - } - } - - let target_opponent_worm: Option<&mut Worm> = self.players - [GameBoard::opponent(player_index)] - .worms - .iter_mut() - .find(|w| w.position == target); - if let Some(target_worm) = target_opponent_worm { - target_worm.health -= weapon_damage; - self.players[player_index].moves_score += - weapon_damage * ATTACK_SCORE_MULTIPLIER; - if target_worm.health <= 0 { - self.players[player_index].moves_score += KILL_SCORE; - } - } - } - } - } - } - } - } - - pub fn simulate_snowballs(&mut self, actions: [Action; 2]) { - for player_index in 0..actions.len() { - if let Action::Snowball(p) = actions[player_index] { - if self.map.at(p).is_some() { - if let Some(worm) = self.players[player_index].active_worm_mut() { - debug_assert!( - worm.snowballs > 0, - "Worm is throwing a snowball it doesn't have" - ); - debug_assert!((worm.position - p).magnitude_squared() < 6 * 6); // max range is 5, but it's 5 after rounding down - - worm.snowballs = worm.snowballs.saturating_sub(1); - - for &freeze_offset in SNOWBALL_FREEZES.iter() { - let target = p + freeze_offset; - - let target_own_worm: Option<&mut Worm> = self.players[player_index] - .worms - .iter_mut() - .find(|w| w.position == target); - - if let Some(target_worm) = target_own_worm { - target_worm.rounds_until_unfrozen = FREEZE_DURATION; - self.players[player_index].moves_score -= FREEZE_SCORE; - } - - let target_opponent_worm: Option<&mut Worm> = self.players - [GameBoard::opponent(player_index)] - .worms - .iter_mut() - .find(|w| w.position == target); - if let Some(target_worm) = target_opponent_worm { - target_worm.rounds_until_unfrozen = FREEZE_DURATION; - self.players[player_index].moves_score += FREEZE_SCORE; - } - } - } - } - } - } - } - - fn simulate_shoots(&mut self, actions: [Action; 2]) { - 'players_loop: for player_index in 0..actions.len() { - if let Action::Shoot(dir) = actions[player_index] { - if let Some(worm) = self.players[player_index].active_worm() { - let center = worm.position; - let diff = dir.as_vec(); - - let range = if dir.is_diagonal() { - SHOOT_RANGE_DIAGONAL - } else { - SHOOT_RANGE - }; - - for distance in 1..=range { - let target = center + diff * distance; - match self.map.at(target) { - Some(false) => { - let target_own_worm: Option<&mut Worm> = self.players[player_index] - .worms - .iter_mut() - .find(|w| w.position == target); - - if let Some(target_worm) = target_own_worm { - target_worm.health -= SHOOT_DAMAGE; - self.players[player_index].moves_score -= - SHOOT_DAMAGE * ATTACK_SCORE_MULTIPLIER; - if target_worm.health <= 0 { - self.players[player_index].moves_score -= KILL_SCORE; - } - continue 'players_loop; - } - - let target_opponent_worm: Option<&mut Worm> = self.players - [GameBoard::opponent(player_index)] - .worms - .iter_mut() - .find(|w| w.position == target); - - if let Some(target_worm) = target_opponent_worm { - target_worm.health -= SHOOT_DAMAGE; - self.players[player_index].moves_score += - SHOOT_DAMAGE * ATTACK_SCORE_MULTIPLIER; - if target_worm.health <= 0 { - self.players[player_index].moves_score += KILL_SCORE; - } - - continue 'players_loop; - } - } - _ => break, - } - } - - // You get here if the shot missed. Hits are an early return. - self.players[player_index].moves_score += MISSED_ATTACK_SCORE; - } - } - } - } - - fn clear_dead_worms(&mut self) { - for player in &mut self.players { - player.clear_dead_worms(); - } - - self.occupied_cells = self - .players - .iter() - .flat_map(|p| p.worms.iter()) - .map(|w| w.position) - .collect(); - } - - pub fn opponent(player_index: usize) -> usize { - (player_index + 1) % 2 - } - - fn selects_iter(&self, player_index: usize) -> impl Iterator, &Worm)> { - let no_select = self.players[player_index] - .active_worm() - .into_iter() - .map(|w| (None, w)); - - let has_select_moves = self.players[player_index].select_moves > 0; - let active_worm_index = self.players[player_index].active_worm; - let selects = self.players[player_index] - .worms - .iter() - .enumerate() - .filter(move |(p, _w)| has_select_moves && active_worm_index != *p) - .map(|(_p, w)| (Some(w.id), w)); - - no_select.chain(selects) - } - - fn pruned_valid_move_commands(&self, player_index: usize) -> ArrayVec<[Command; 8]> { - self.players[player_index] - .active_worm() - .into_iter() - .flat_map(|worm| { - // TODO: If you aren't on lava, don't step onto the lava - Direction::ALL - .iter() - .map(Direction::as_vec) - .map(move |d| worm.position + d) - .filter(|p| !self.occupied_cells.contains(p)) - .filter_map(|p| match self.map.at(p) { - Some(false) => Some(Action::Move(p)), - Some(true) => Some(Action::Dig(p)), - _ => None, - }) - .map(Command::new) - }) - .collect() - } - - fn pruned_valid_bomb_commands(&self, player_index: usize) -> Vec { - self.selects_iter(player_index) - .filter(|(_, worm)| worm.bombs > 0) - .flat_map(|(select, worm)| { - let mut result = Vec::with_capacity((BOMB_RANGE * 2 + 1).pow(2) as usize - 12); - let own_worm_positions: ArrayVec<[Point2d; 3]> = self.players[player_index] - .worms - .iter() - .map(|w| w.position) - .collect(); - let opponent_worm_positions: ArrayVec<[Point2d; 3]> = self.players - [GameBoard::opponent(player_index)] - .worms - .iter() - .map(|w| w.position) - .collect(); - - for y in worm.position.y - BOMB_RANGE..=worm.position.y + BOMB_RANGE { - for x in worm.position.x - BOMB_RANGE..=worm.position.x + BOMB_RANGE { - let target = Point2d::new(x, y); - if self.map.at(target).is_some() - && (worm.position - target).magnitude_squared() - < (BOMB_RANGE + 1).pow(2) - { - let own_affected_worms = own_worm_positions.iter().any(|p| { - (target - *p).magnitude_squared() - <= BOMB_DAMAGE_RANGE * BOMB_DAMAGE_RANGE - }); - let opponent_affected_worms = opponent_worm_positions.iter().any(|p| { - (target - *p).magnitude_squared() - <= BOMB_DAMAGE_RANGE * BOMB_DAMAGE_RANGE - }); - - if !own_affected_worms && opponent_affected_worms { - result.push(Command { - worm: select, - action: Action::Bomb(target), - }); - } - } - } - } - - result - }) - .collect() - } - - fn pruned_valid_snowball_commands(&self, player_index: usize) -> Vec { - self.selects_iter(player_index) - .filter(|(_, worm)| worm.snowballs > 0) - .flat_map(|(select, worm)| { - let mut result = Vec::with_capacity((SNOWBALL_RANGE * 2 + 1).pow(2) as usize - 12); - let own_worm_positions: ArrayVec<[Point2d; 3]> = self.players[player_index] - .worms - .iter() - .map(|w| w.position) - .collect(); - let opponent_worm_positions: ArrayVec<[Point2d; 3]> = self.players - [GameBoard::opponent(player_index)] - .worms - .iter() - .map(|w| w.position) - .collect(); - - for y in worm.position.y - SNOWBALL_RANGE..=worm.position.y + SNOWBALL_RANGE { - for x in worm.position.x - SNOWBALL_RANGE..=worm.position.x + SNOWBALL_RANGE { - let target = Point2d::new(x, y); - if self.map.at(target).is_some() - && (worm.position - target).magnitude_squared() - < (SNOWBALL_RANGE + 1).pow(2) - { - let own_affected_worms = own_worm_positions.iter().any(|p| { - (target - *p).magnitude_squared() - <= SNOWBALL_FREEZE_RANGE * SNOWBALL_FREEZE_RANGE - }); - let opponent_affected_worms = opponent_worm_positions.iter().any(|p| { - (target - *p).magnitude_squared() - <= SNOWBALL_FREEZE_RANGE * SNOWBALL_FREEZE_RANGE - }); - - if !own_affected_worms && opponent_affected_worms { - result.push(Command { - worm: select, - action: Action::Snowball(target), - }); - } - } - } - } - - result - }) - .collect() - } - - fn pruned_valid_shoot_commands(&self, player_index: usize) -> Vec { - self.selects_iter(player_index) - .flat_map(|(select, worm)| { - self.players[GameBoard::opponent(player_index)] - .worms - .iter() - .filter_map(move |w| { - let diff = w.position - worm.position; - if diff.x == 0 && diff.y.abs() <= SHOOT_RANGE { - if diff.y > 0 { - Some((Direction::South, diff.y)) - } else { - Some((Direction::North, -diff.y)) - } - } else if diff.y == 0 && diff.x.abs() <= SHOOT_RANGE { - if diff.x > 0 { - Some((Direction::East, diff.x)) - } else { - Some((Direction::West, -diff.x)) - } - } else if diff.x.abs() == diff.y.abs() - && diff.x.abs() <= SHOOT_RANGE_DIAGONAL - { - match (diff.x > 0, diff.y > 0) { - (true, true) => Some((Direction::SouthEast, diff.x)), - (false, true) => Some((Direction::SouthWest, -diff.x)), - (true, false) => Some((Direction::NorthEast, diff.x)), - (false, false) => Some((Direction::NorthWest, -diff.x)), - } - } else { - None - } - }) - .filter(move |(dir, range)| { - let diff = dir.as_vec(); - // NB: This is up to range EXCLUSIVE, so if there's - // anything in the way, even another good shot, skip. - !(1..*range).any(|distance| { - self.map.at(worm.position + diff * distance) != Some(false) - && !self - .players - .iter() - .flat_map(|p| p.worms.iter()) - .any(|w| w.position == worm.position + diff * distance) - }) - }) - .map(move |(dir, _range)| Command { - worm: select, - action: Action::Shoot(dir), - }) - }) - .collect() - } - - pub fn pruned_valid_moves(&self, player_index: usize) -> Vec { - if self.players[player_index].active_worm_is_frozen_after_tick() { - vec![Command::new(Action::DoNothing)] - } else { - self.pruned_valid_shoot_commands(player_index) - .iter() - .chain(self.pruned_valid_move_commands(player_index).iter()) - .chain(self.pruned_valid_bomb_commands(player_index).iter()) - .chain(self.pruned_valid_snowball_commands(player_index).iter()) - .chain([Command::new(Action::DoNothing)].iter()) - .cloned() - .collect() - } - } -} - -#[cfg(test)] -mod test {} diff --git a/src/game/map.rs b/src/game/map.rs deleted file mode 100644 index 84ec99a..0000000 --- a/src/game/map.rs +++ /dev/null @@ -1,49 +0,0 @@ -use crate::constants::*; -use crate::geometry::*; - -#[derive(Default, Debug, PartialEq, Eq, Clone, Copy)] -pub struct Map { - pub cells: [u64; MAP_U64S], -} - -impl Map { - fn internal_index(p: Point2d) -> Option<(usize, usize)> { - if p.y < 0 || p.y as usize >= MAP_SIZE { - None - } else { - let row_data = &MAP_ROW_SIZE[p.y as usize]; - if p.x < row_data.x_offset as i8 || p.x as usize >= row_data.x_offset + row_data.len() { - None - } else { - let global_bit = row_data.start_bit + p.x as usize - row_data.x_offset; - let integer = global_bit / 64; - let bit = global_bit % 64; - Some((integer, bit)) - } - } - } - - pub fn at(&self, p: Point2d) -> Option { - Map::internal_index(p).map(|(integer, bit)| { - let mask = 1 << bit; - self.cells[integer] & mask != 0 - }) - } - - pub fn set(&mut self, p: Point2d) { - if let Some((integer, bit)) = Map::internal_index(p) { - let mask = 1 << bit; - self.cells[integer] |= mask; - } else { - panic!("Tried to set an out of bounds bit, {:?}", p); - } - } - pub fn clear(&mut self, p: Point2d) { - if let Some((integer, bit)) = Map::internal_index(p) { - let mask = !(1 << bit); - self.cells[integer] &= mask; - } else { - panic!("Tried to set an out of bounds bit, {:?}", p); - } - } -} diff --git a/src/game/player.rs b/src/game/player.rs deleted file mode 100644 index 0874c76..0000000 --- a/src/game/player.rs +++ /dev/null @@ -1,259 +0,0 @@ -use crate::geometry::*; -use arrayvec::ArrayVec; - -#[derive(Debug, PartialEq, Eq, Clone)] -pub struct Player { - pub moves_score: i32, - pub active_worm: usize, - pub select_moves: u8, - pub worms: ArrayVec<[Worm; 3]>, -} - -#[derive(Debug, PartialEq, Eq, Clone)] -pub struct Worm { - pub id: i32, - pub health: i32, - pub position: Point2d, - pub bombs: u8, - pub snowballs: u8, - pub rounds_until_unfrozen: u8, -} - -impl Player { - pub fn find_worm_position(&self, id: i32) -> Option { - self.worms.iter().position(|w| w.id == id) - } - - pub fn find_worm(&self, id: i32) -> Option<&Worm> { - self.worms.iter().find(|w| w.id == id) - } - - pub fn find_worm_mut(&mut self, id: i32) -> Option<&mut Worm> { - self.worms.iter_mut().find(|w| w.id == id) - } - - pub fn active_worm(&self) -> Option<&Worm> { - self.worms.get(self.active_worm) - } - - pub fn active_worm_mut(&mut self) -> Option<&mut Worm> { - self.worms.get_mut(self.active_worm) - } - - pub fn health(&self) -> i32 { - self.worms.iter().map(|w| w.health).sum() - } - - pub fn max_worm_health(&self) -> i32 { - self.worms.iter().map(|w| w.health).max().unwrap_or(0) - } - - pub fn clear_dead_worms(&mut self) { - for worm_index in (0..self.worms.len()).rev() { - if self.worms[worm_index].health <= 0 { - self.worms.remove(worm_index); - if self.active_worm >= worm_index { - self.active_worm = if self.active_worm > 0 { - self.active_worm - 1 - } else if self.worms.len() > 0 { - self.worms.len() - 1 - } else { - 0 - }; - } - } - } - } - - pub fn next_active_worm(&mut self) { - self.active_worm = (self.active_worm + 1) - .checked_rem(self.worms.len()) - .unwrap_or(0); - } - - fn health_score(&self) -> i32 { - self.health() / 3 - } - - pub fn score(&self) -> i32 { - self.moves_score + self.health_score() - } - - pub fn active_worm_is_frozen(&self) -> bool { - self.active_worm() - .map(|worm| worm.rounds_until_unfrozen > 0) - .unwrap_or(false) - } - - pub fn active_worm_is_frozen_after_tick(&self) -> bool { - self.active_worm() - .map(|worm| worm.rounds_until_unfrozen > 1) - .unwrap_or(false) - } - - pub fn bombs(&self) -> u8 { - self.worms.iter().map(|w| w.bombs).sum() - } - - pub fn snowballs(&self) -> u8 { - self.worms.iter().map(|w| w.snowballs).sum() - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn clear_dead_worms_after_active_worm() { - let mut worms = ArrayVec::new(); - worms.push(Worm { - id: 1, - health: 50, - position: Point2d::new(0, 0), - rounds_until_unfrozen: 0, - bombs: 0, - snowballs: 0, - }); - worms.push(Worm { - id: 2, - health: 10, - position: Point2d::new(0, 0), - rounds_until_unfrozen: 0, - bombs: 0, - snowballs: 0, - }); - worms.push(Worm { - id: 3, - health: -2, - position: Point2d::new(0, 0), - rounds_until_unfrozen: 0, - bombs: 0, - snowballs: 0, - }); - let mut player = Player { - active_worm: 1, - moves_score: 0, - select_moves: 0, - worms, - }; - - player.clear_dead_worms(); - - assert_eq!(2, player.worms.len()); - assert_eq!(1, player.active_worm); - - assert_eq!(1, player.worms[0].id); - assert_eq!(2, player.worms[1].id); - } - - #[test] - fn clear_dead_worms_before_active_worm() { - let mut worms = ArrayVec::new(); - worms.push(Worm { - id: 1, - health: 0, - position: Point2d::new(0, 0), - rounds_until_unfrozen: 0, - bombs: 0, - snowballs: 0, - }); - worms.push(Worm { - id: 2, - health: 10, - position: Point2d::new(0, 0), - rounds_until_unfrozen: 0, - bombs: 0, - snowballs: 0, - }); - worms.push(Worm { - id: 3, - health: 2, - position: Point2d::new(0, 0), - rounds_until_unfrozen: 0, - bombs: 0, - snowballs: 0, - }); - let mut player = Player { - active_worm: 1, - moves_score: 0, - worms, - select_moves: 0, - }; - - player.clear_dead_worms(); - - assert_eq!(2, player.worms.len()); - assert_eq!(0, player.active_worm); - - assert_eq!(2, player.worms[0].id); - assert_eq!(3, player.worms[1].id); - } - - #[test] - fn clear_dead_worms_before_active_worm_wrapping() { - let mut worms = ArrayVec::new(); - worms.push(Worm { - id: 1, - health: 0, - position: Point2d::new(0, 0), - rounds_until_unfrozen: 0, - bombs: 0, - snowballs: 0, - }); - worms.push(Worm { - id: 2, - health: 10, - position: Point2d::new(0, 0), - rounds_until_unfrozen: 0, - bombs: 0, - snowballs: 0, - }); - worms.push(Worm { - id: 3, - health: 2, - position: Point2d::new(0, 0), - rounds_until_unfrozen: 0, - bombs: 0, - snowballs: 0, - }); - let mut player = Player { - active_worm: 0, - moves_score: 0, - worms, - select_moves: 0, - }; - - player.clear_dead_worms(); - - assert_eq!(2, player.worms.len()); - assert_eq!(1, player.active_worm); - - assert_eq!(2, player.worms[0].id); - assert_eq!(3, player.worms[1].id); - } - - #[test] - fn clear_last_dead_worm() { - let mut worms = ArrayVec::new(); - worms.push(Worm { - id: 1, - health: -10, - position: Point2d::new(0, 0), - rounds_until_unfrozen: 0, - bombs: 0, - snowballs: 0, - }); - let mut player = Player { - active_worm: 0, - moves_score: 0, - worms, - select_moves: 0, - }; - - player.clear_dead_worms(); - - assert_eq!(0, player.worms.len()); - // active worm is undefined in this case, but clearing the worms must not panic. - } -} diff --git a/src/game/powerup.rs b/src/game/powerup.rs deleted file mode 100644 index 47e73a1..0000000 --- a/src/game/powerup.rs +++ /dev/null @@ -1,6 +0,0 @@ -use crate::geometry::*; - -#[derive(Debug, PartialEq, Eq, Clone, Copy)] -pub struct Powerup { - pub position: Point2d, -} diff --git a/src/geometry.rs b/src/geometry.rs deleted file mode 100644 index 1bcdace..0000000 --- a/src/geometry.rs +++ /dev/null @@ -1,6 +0,0 @@ -mod vec; -pub use self::vec::*; -mod point; -pub use self::point::*; -mod direction; -pub use self::direction::*; diff --git a/src/geometry/direction.rs b/src/geometry/direction.rs deleted file mode 100644 index e37f750..0000000 --- a/src/geometry/direction.rs +++ /dev/null @@ -1,67 +0,0 @@ -use crate::geometry::vec::Vec2d; -use std::fmt; - -#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] -pub enum Direction { - North, - NorthEast, - East, - SouthEast, - South, - SouthWest, - West, - NorthWest, -} - -impl fmt::Display for Direction { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - use Direction::*; - let s = match self { - North => "N", - NorthEast => "NE", - East => "E", - SouthEast => "SE", - South => "S", - SouthWest => "SW", - West => "W", - NorthWest => "NW", - }; - f.write_str(s) - } -} - -impl Direction { - pub fn is_diagonal(&self) -> bool { - use Direction::*; - - match self { - NorthEast | SouthEast | SouthWest | NorthWest => true, - _ => false, - } - } - - pub fn as_vec(&self) -> Vec2d { - use Direction::*; - match self { - North => Vec2d::new(0, -1), - NorthEast => Vec2d::new(1, -1), - East => Vec2d::new(1, 0), - SouthEast => Vec2d::new(1, 1), - South => Vec2d::new(0, 1), - SouthWest => Vec2d::new(-1, 1), - West => Vec2d::new(-1, 0), - NorthWest => Vec2d::new(-1, -1), - } - } - - pub const ALL: [Direction; 8] = [ - Direction::North, - Direction::NorthEast, - Direction::East, - Direction::SouthEast, - Direction::South, - Direction::SouthWest, - Direction::West, - Direction::NorthWest, - ]; -} diff --git a/src/geometry/point.rs b/src/geometry/point.rs deleted file mode 100644 index 1ab9b36..0000000 --- a/src/geometry/point.rs +++ /dev/null @@ -1,37 +0,0 @@ -use crate::geometry::vec::*; - -use std::ops::*; - -#[derive(Debug, Default, Clone, Copy, Hash, PartialEq, Eq)] -pub struct Point2d { - pub x: i8, - pub y: i8, -} - -impl Point2d { - pub fn new(x: i8, y: i8) -> Point2d { - Point2d { x, y } - } -} - -impl Add for Point2d { - type Output = Self; - - fn add(self, other: Vec2d) -> Self { - Point2d { - x: self.x.saturating_add(other.x), - y: self.y.saturating_add(other.y), - } - } -} - -impl Sub for Point2d { - type Output = Vec2d; - - fn sub(self, other: Self) -> Vec2d { - Vec2d { - x: self.x.saturating_sub(other.x), - y: self.y.saturating_sub(other.y), - } - } -} diff --git a/src/geometry/vec.rs b/src/geometry/vec.rs deleted file mode 100644 index 375a0f9..0000000 --- a/src/geometry/vec.rs +++ /dev/null @@ -1,62 +0,0 @@ -use std::ops::*; - -#[derive(Debug, Default, Clone, Copy, Hash, PartialEq, Eq)] -pub struct Vec2d { - pub x: i8, - pub y: i8, -} - -impl Vec2d { - pub const fn new(x: i8, y: i8) -> Vec2d { - Vec2d { x, y } - } - pub fn magnitude_squared(&self) -> i8 { - self.x - .saturating_pow(2) - .saturating_add(self.y.saturating_pow(2)) - } -} - -impl Add for Vec2d { - type Output = Self; - - fn add(self, other: Self) -> Self { - Vec2d { - x: self.x.saturating_add(other.x), - y: self.y.saturating_add(other.y), - } - } -} - -impl Sub for Vec2d { - type Output = Self; - - fn sub(self, other: Self) -> Self { - Vec2d { - x: self.x.saturating_sub(other.x), - y: self.y.saturating_sub(other.y), - } - } -} - -impl Mul for Vec2d { - type Output = Self; - - fn mul(self, other: i8) -> Self { - Vec2d { - x: self.x.saturating_mul(other), - y: self.y.saturating_mul(other), - } - } -} - -impl Neg for Vec2d { - type Output = Self; - - fn neg(self) -> Self { - Vec2d { - x: -self.x, - y: -self.y, - } - } -} diff --git a/src/json.rs b/src/json.rs deleted file mode 100644 index a83f102..0000000 --- a/src/json.rs +++ /dev/null @@ -1,554 +0,0 @@ -use std::error::Error; -use std::fs::File; -use std::io::prelude::*; -use std::path::Path; - -use serde::{Deserialize, Serialize}; -use serde_json; - -pub fn read_state_from_json_file(filename: &Path) -> Result> { - let mut file = File::open(filename)?; - let mut content = String::new(); - file.read_to_string(&mut content)?; - let state: State = serde_json::from_str(content.as_ref())?; - - Ok(state) -} - -// TODO: Narrow numeric types -// TODO: comment out stuff I don't want / need - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct State { - pub current_round: u16, - pub max_rounds: u16, - pub pushback_damage: i32, - pub lava_damage: i32, - pub map_size: u8, - pub current_worm_id: i32, - pub consecutive_do_nothing_count: u32, - pub my_player: Player, - pub opponents: Vec, - pub map: Vec>, -} - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct Player { - pub id: i32, - pub score: i32, - pub health: i32, - pub worms: Vec, - pub remaining_worm_selections: u8, -} - -impl Player { - pub fn health_score(&self) -> i32 { - self.health / 3 - } -} - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct PlayerWorm { - pub id: i32, - pub health: i32, - pub position: Position, - pub digging_range: u32, - pub movement_range: u32, - pub rounds_until_unfrozen: u8, - pub weapon: Weapon, - pub banana_bombs: Option, - pub snowballs: Option, - pub profession: WormType, -} - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct Opponent { - pub id: i32, - pub score: i32, - pub current_worm_id: i32, - pub previous_command: String, - pub worms: Vec, - pub remaining_worm_selections: u8, -} - -impl Opponent { - pub fn health_score(&self) -> i32 { - self.worms.iter().map(|w| w.health).sum::() / 3 - } -} - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct OpponentWorm { - pub id: i32, - pub health: i32, - pub position: Position, - pub digging_range: u32, - pub movement_range: u32, - pub rounds_until_unfrozen: u8, - pub profession: WormType, -} - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] -#[serde(rename_all = "PascalCase")] -pub enum WormType { - Commando, - Agent, - Technologist, -} - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct Cell { - pub x: i8, - pub y: i8, - #[serde(rename = "type")] - pub cell_type: CellType, - pub occupier: Option, - pub powerup: Option, -} - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] -#[serde(rename_all = "SCREAMING_SNAKE_CASE")] -pub enum CellType { - Air, - Dirt, - Lava, - DeepSpace, -} - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] -#[serde(untagged)] -#[serde(rename_all = "camelCase")] -pub enum CellWorm { - #[serde(rename_all = "camelCase")] - PlayerWorm { - id: i32, - player_id: i32, - health: i32, - position: Position, - digging_range: u32, - movement_range: u32, - weapon: Weapon, - }, - #[serde(rename_all = "camelCase")] - OpponentWorm { - id: i32, - player_id: i32, - health: i32, - position: Position, - digging_range: u32, - movement_range: u32, - }, -} - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct Powerup { - #[serde(rename = "type")] - pub powerup_type: PowerupType, - pub value: i32, -} - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] -#[serde(rename_all = "SCREAMING_SNAKE_CASE")] -pub enum PowerupType { - HealthPack, -} - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct Position { - pub x: i8, - pub y: i8, -} - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct Weapon { - pub damage: i32, - pub range: u8, -} - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct Bomb { - pub damage: i32, - pub range: u8, - pub count: u8, - pub damage_radius: u8, -} - -#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] -#[serde(rename_all = "camelCase")] -pub struct Snowball { - pub freeze_duration: u8, - pub range: u8, - pub count: u8, - pub freeze_radius: u8, -} - -impl State { - pub fn active_worm_index(&self) -> Option { - self.my_player - .worms - .iter() - .filter(|w| w.health > 0) - .position(|w| w.id == self.current_worm_id) - } - - pub fn opponent_active_worm_index(&self) -> Option { - self.opponents[0] - .worms - .iter() - .filter(|w| w.health > 0) - .position(|w| w.id == self.opponents[0].current_worm_id) - } -} - -#[cfg(test)] -mod test { - use super::*; - - #[test] - fn example_parses_correctly() { - let example = r#" -{ - "currentRound": 0, - "maxRounds": 200, - "pushbackDamage": 20, - "lavaDamage": 3, - "mapSize": 33, - "currentWormId": 1, - "consecutiveDoNothingCount": 0, - "myPlayer": { - "id": 1, - "score": 100, - "health": 300, - "currentWormId": 1, - "remainingWormSelections": 1, - "worms": [ - { - "id": 1, - "health": 100, - "position": { - "x": 24, - "y": 29 - }, - "weapon": { - "damage": 1, - "range": 3 - }, - "bananaBombs": { - "damage": 20, - "range": 5, - "count": 3, - "damageRadius": 2 - }, - "diggingRange": 1, - "movementRange": 1, - "roundsUntilUnfrozen": 0, - "profession": "Agent" - }, - { - "id": 2, - "health": 150, - "position": { - "x": 1, - "y": 16 - }, - "weapon": { - "damage": 1, - "range": 3 - }, - "diggingRange": 1, - "movementRange": 1, - "roundsUntilUnfrozen": 0, - "profession": "Commando" - }, - { - "id": 3, - "health": 100, - "position": { - "x": 24, - "y": 4 - }, - "weapon": { - "damage": 8, - "range": 4 - }, - "snowballs": { - "freezeDuration": 5, - "range": 5, - "count": 3, - "freezeRadius": 1 - }, - "diggingRange": 1, - "movementRange": 1, - "roundsUntilUnfrozen": 3, - "profession": "Technologist" - } - ] - }, - "opponents": [ - { - "id": 2, - "score": 100, - "currentWormId": 3, - "remainingWormSelections": 2, - "previousCommand": "nothing", - "worms": [ - { - "id": 1, - "health": 100, - "position": { - "x": 31, - "y": 16 - }, - "diggingRange": 1, - "movementRange": 1, - "roundsUntilUnfrozen": 0, - "profession": "Commando" - } - ] - } - ], - "map": [ - [ - { - "x": 0, - "y": 0, - "type": "DEEP_SPACE" - }, - { - "x": 1, - "y": 0, - "type": "AIR" - }, - { - "x": 2, - "y": 0, - "type": "DIRT" - } - ], - [ - { - "x": 0, - "y": 1, - "type": "AIR", - "powerup": { - "type": "HEALTH_PACK", - "value": 5 - } - }, - { - "x": 1, - "y": 1, - "type": "AIR", - "occupier": { - "id": 1, - "playerId": 2, - "health": 100, - "position": { - "x": 1, - "y": 1 - }, - "diggingRange": 1, - "movementRange": 1 - } - }, - { - "x": 2, - "y": 1, - "type": "AIR", - "occupier": { - "id": 1, - "playerId": 1, - "health": 100, - "position": { - "x": 2, - "y": 1 - }, - "weapon": { - "damage": 1, - "range": 3 - }, - "diggingRange": 1, - "movementRange": 1 - } - } - ] - ] -}"#; - - let expected = State { - current_round: 0, - max_rounds: 200, - pushback_damage: 20, - lava_damage: 3, - map_size: 33, - current_worm_id: 1, - consecutive_do_nothing_count: 0, - my_player: Player { - id: 1, - score: 100, - health: 300, - remaining_worm_selections: 1, - worms: vec![ - PlayerWorm { - id: 1, - health: 100, - position: Position { x: 24, y: 29 }, - weapon: Weapon { - damage: 1, - range: 3, - }, - digging_range: 1, - movement_range: 1, - banana_bombs: Some(Bomb { - damage: 20, - range: 5, - count: 3, - damage_radius: 2, - }), - snowballs: None, - rounds_until_unfrozen: 0, - profession: WormType::Agent, - }, - PlayerWorm { - id: 2, - health: 150, - position: Position { x: 1, y: 16 }, - weapon: Weapon { - damage: 1, - range: 3, - }, - digging_range: 1, - movement_range: 1, - banana_bombs: None, - snowballs: None, - rounds_until_unfrozen: 0, - profession: WormType::Commando, - }, - PlayerWorm { - id: 3, - health: 100, - position: Position { x: 24, y: 4 }, - weapon: Weapon { - damage: 8, - range: 4, - }, - digging_range: 1, - movement_range: 1, - banana_bombs: None, - snowballs: Some(Snowball { - freeze_duration: 5, - range: 5, - count: 3, - freeze_radius: 1, - }), - rounds_until_unfrozen: 3, - profession: WormType::Technologist, - }, - ], - }, - opponents: vec![Opponent { - id: 2, - score: 100, - remaining_worm_selections: 2, - current_worm_id: 3, - previous_command: "nothing".into(), - worms: vec![OpponentWorm { - id: 1, - health: 100, - position: Position { x: 31, y: 16 }, - digging_range: 1, - movement_range: 1, - rounds_until_unfrozen: 0, - profession: WormType::Commando, - }], - }], - map: vec![ - vec![ - Cell { - x: 0, - y: 0, - cell_type: CellType::DeepSpace, - occupier: None, - powerup: None, - }, - Cell { - x: 1, - y: 0, - cell_type: CellType::Air, - occupier: None, - powerup: None, - }, - Cell { - x: 2, - y: 0, - cell_type: CellType::Dirt, - occupier: None, - powerup: None, - }, - ], - vec![ - Cell { - x: 0, - y: 1, - cell_type: CellType::Air, - occupier: None, - powerup: Some(Powerup { - powerup_type: PowerupType::HealthPack, - value: 5, - }), - }, - Cell { - x: 1, - y: 1, - cell_type: CellType::Air, - occupier: Some(CellWorm::OpponentWorm { - id: 1, - player_id: 2, - health: 100, - position: Position { x: 1, y: 1 }, - digging_range: 1, - movement_range: 1, - }), - powerup: None, - }, - Cell { - x: 2, - y: 1, - cell_type: CellType::Air, - occupier: Some(CellWorm::PlayerWorm { - id: 1, - player_id: 1, - health: 100, - position: Position { x: 2, y: 1 }, - digging_range: 1, - movement_range: 1, - weapon: Weapon { - damage: 1, - range: 3, - }, - }), - powerup: None, - }, - ], - ], - }; - - let parsed: State = serde_json::from_str(example).unwrap(); - - assert_eq!( - parsed, expected, - "Parsed value did not match the expected value.\nParsed = {:#?}\nExpected = {:#?}", - parsed, expected - ); - } -} diff --git a/src/lib.rs b/src/lib.rs deleted file mode 100644 index 9922cce..0000000 --- a/src/lib.rs +++ /dev/null @@ -1,8 +0,0 @@ -#![warn(clippy::all)] - -pub mod command; -pub mod json; -pub mod geometry; -pub mod game; -pub mod strategy; -pub mod constants; diff --git a/src/main.rs b/src/main.rs deleted file mode 100644 index 4f98e75..0000000 --- a/src/main.rs +++ /dev/null @@ -1,46 +0,0 @@ -use std::io::prelude::*; -use std::io::stdin; -use std::path::Path; - -use time::{Duration, PreciseTime}; - -use steam_powered_wyrm::command::{Action, Command}; -use steam_powered_wyrm::game; -use steam_powered_wyrm::json; -use steam_powered_wyrm::strategy::{choose_move, ScoreConfig}; - -fn main() { - let max_time = Duration::milliseconds(900); - let config = ScoreConfig::default(); - - let mut game_board = None; - for line in stdin().lock().lines() { - let start_time = PreciseTime::now(); - - let round_number = line.expect("Failed to read line from stdin: {}"); - - let command = match json::read_state_from_json_file(&Path::new(&format!( - "./rounds/{}/state.json", - round_number - ))) { - Ok(json_state) => match &mut game_board { - None => { - let new_board = game::GameBoard::new(json_state); - let command = choose_move(&new_board, &config, start_time, max_time); - game_board = Some(new_board); - command - } - Some(game_board) => { - game_board.update(json_state); - choose_move(&game_board, &config, start_time, max_time) - } - }, - Err(e) => { - #[cfg(feature = "logging")] - eprintln!("WARN: State file could not be parsed: {}", e); - Command::new(Action::DoNothing) - } - }; - println!("C;{};{}", round_number, command); - } -} diff --git a/src/strategy.rs b/src/strategy.rs deleted file mode 100644 index fce842b..0000000 --- a/src/strategy.rs +++ /dev/null @@ -1,5 +0,0 @@ -//mod mcts; -//pub use mcts::{choose_move, Node}; - -mod minimax; -pub use minimax::{choose_move, choose_move_with_normalized_perf, Node, ScoreConfig}; diff --git a/src/strategy/minimax.rs b/src/strategy/minimax.rs deleted file mode 100644 index 656ee36..0000000 --- a/src/strategy/minimax.rs +++ /dev/null @@ -1,330 +0,0 @@ -use crate::command::{Action, Command}; -use crate::constants::*; -use crate::game::{GameBoard, SimulationOutcome}; - -use fnv::FnvHashMap; -use std::cmp; -use std::ops::*; -use time::{Duration, PreciseTime}; - -#[derive(Debug, Clone)] -pub struct ScoreConfig { - pub max_health_weight: f32, - pub total_health_weight: f32, - pub points_weight: f32, - pub victory_weight: f32, - pub snowball_weight: f32, - pub bomb_weight: f32, - pub explore_exploit_weight: f32, -} - -impl Default for ScoreConfig { - fn default() -> ScoreConfig { - ScoreConfig { - max_health_weight: 100., - total_health_weight: 10., - points_weight: 1., - victory_weight: 4500., - snowball_weight: 10., - bomb_weight: 10., - explore_exploit_weight: 100., - } - } -} - -pub fn choose_move( - state: &GameBoard, - config: &ScoreConfig, - start_time: PreciseTime, - max_time: Duration, -) -> Command { - let mut root_node = Node { - score_sum: ScoreSum::new(), - player_score_sums: [FnvHashMap::default(), FnvHashMap::default()], - unexplored: move_combos(state), - children: FnvHashMap::default(), - }; - - #[cfg(feature = "logging")] - { - let mut max_expand_time = Duration::milliseconds(0); - while start_time.to(PreciseTime::now()) < max_time { - let expand_start_time = PreciseTime::now(); - let _ = expand_tree(&mut root_node, state.clone(), config); - max_expand_time = max_expand_time.max(expand_start_time.to(PreciseTime::now())); - } - eprintln!( - "Max expand time: {:?} ns", - max_expand_time.num_nanoseconds() - ); - } - #[cfg(not(feature = "logging"))] - { - while start_time.to(PreciseTime::now()) < max_time { - let _ = expand_tree(&mut root_node, state.clone(), config); - } - } - - #[cfg(feature = "logging")] - { - eprintln!("Number of simulations: {}", root_node.score_sum.visit_count); - for (command, score_sum) in &root_node.player_score_sums[0] { - eprintln!( - "{} = {} ({} visits)", - command, - score_sum.avg().val, - score_sum.visit_count - ); - } - } - - best_player_move(&root_node, 0) -} - -pub fn choose_move_with_normalized_perf( - state: &GameBoard, - config: &ScoreConfig, - player_index: usize, - iterations: usize, -) -> Command { - let mut root_node = Node { - score_sum: ScoreSum::new(), - player_score_sums: [FnvHashMap::default(), FnvHashMap::default()], - unexplored: move_combos(state), - children: FnvHashMap::default(), - }; - - for _ in 0..iterations { - let _ = expand_tree(&mut root_node, state.clone(), config); - } - - #[cfg(feature = "logging")] - { - eprintln!("Number of simulations: {}", root_node.score_sum.visit_count); - for (command, score_sum) in &root_node.player_score_sums[player_index] { - eprintln!( - "{} = {} ({} visits)", - command, - score_sum.avg().val, - score_sum.visit_count - ); - } - } - - best_player_move(&root_node, player_index) -} - -pub struct Node { - score_sum: ScoreSum, - player_score_sums: [FnvHashMap; 2], - unexplored: Vec<[Command; 2]>, - children: FnvHashMap<[Command; 2], Node>, -} - -#[derive(Clone, Copy, Debug, PartialEq, PartialOrd)] -struct Score { - val: f32, -} - -impl AddAssign for Score { - fn add_assign(&mut self, other: Self) { - self.val = self.val + other.val; - } -} - -impl Div for Score { - type Output = Self; - fn div(self, other: u32) -> Self { - Score { - val: self.val / other as f32, - } - } -} - -impl Mul for Score { - type Output = Self; - fn mul(self, other: f32) -> Self { - Score { - val: self.val * other, - } - } -} - -impl cmp::Eq for Score {} -impl cmp::Ord for Score { - fn cmp(&self, other: &Score) -> cmp::Ordering { - self.val - .partial_cmp(&other.val) - .unwrap_or(cmp::Ordering::Equal) - } -} - -struct ScoreSum { - sum: Score, - visit_count: u32, -} - -impl ScoreSum { - fn new() -> ScoreSum { - ScoreSum { - sum: Score { val: 0. }, - visit_count: 0, - } - } - fn with_initial(score: Score) -> ScoreSum { - ScoreSum { - sum: score, - visit_count: 1, - } - } - fn avg(&self) -> Score { - self.sum / self.visit_count - } -} - -impl AddAssign for ScoreSum { - fn add_assign(&mut self, other: Score) { - self.sum += other; - self.visit_count = self.visit_count.saturating_add(1); - } -} - -fn expand_tree(node: &mut Node, mut state: GameBoard, config: &ScoreConfig) -> Score { - if state.outcome != SimulationOutcome::Continue { - score(&state, config) - } else if let Some(commands) = node.unexplored.pop() { - state.simulate(commands); - let score = score(&state, config); - let unexplored = if state.outcome == SimulationOutcome::Continue { - move_combos(&state) - } else { - Vec::new() - }; - - let new_node = Node { - score_sum: ScoreSum::with_initial(score), - player_score_sums: [FnvHashMap::default(), FnvHashMap::default()], - unexplored, - children: FnvHashMap::default(), - }; - node.children.insert(commands, new_node); - update(node, commands, score); - - score - } else { - let commands = choose_existing(node, config); - state.simulate(commands); - let score = expand_tree( - node.children - .get_mut(&commands) - .expect("The existing node hasn't been tried yet"), - state, - config, - ); - update(node, commands, score); - score - } -} - -fn move_combos(state: &GameBoard) -> Vec<[Command; 2]> { - let player_moves = state.pruned_valid_moves(0); - let opponent_moves = state.pruned_valid_moves(1); - debug_assert!(!player_moves.is_empty(), "No player moves"); - debug_assert!(!opponent_moves.is_empty(), "No opponent moves"); - - let mut result = Vec::with_capacity(player_moves.len() * opponent_moves.len()); - for p in &player_moves { - for o in &opponent_moves { - result.push([*p, *o]); - } - } - - result -} - -fn best_player_move(node: &Node, player_index: usize) -> Command { - let multiplier = if player_index == 0 { 1. } else { -1. }; - node.player_score_sums[player_index] - .iter() - .max_by_key(|(_command, score_sum)| score_sum.avg() * multiplier) - .map(|(command, _score_sum)| *command) - .unwrap_or_else(|| Command::new(Action::DoNothing)) -} - -fn score(state: &GameBoard, config: &ScoreConfig) -> Score { - let max_health = - (state.players[0].max_worm_health() - state.players[1].max_worm_health()) as f32; - let total_health = (state.players[0].health() - state.players[1].health()) as f32; - let points = (state.players[0].score() - state.players[1].score()) as f32; - let victory = match state.outcome { - SimulationOutcome::PlayerWon(0) => 1., - SimulationOutcome::PlayerWon(1) => -1., - _ => 0., - }; - - let time_to_end = MAX_ROUNDS as f32 - state.round as f32 + 1.; - - let snowballs = state.players[0].snowballs() as f32 - state.players[1].snowballs() as f32; - let bombs = state.players[0].bombs() as f32 - state.players[1].bombs() as f32; - - Score { - val: max_health * config.max_health_weight - + total_health * config.total_health_weight - + points * config.points_weight - + victory * config.victory_weight - + snowballs * config.snowball_weight / time_to_end - + bombs * config.bomb_weight / time_to_end, - } -} - -fn choose_existing(node: &Node, config: &ScoreConfig) -> [Command; 2] { - [ - choose_one_existing(node, 0, config), - choose_one_existing(node, 1, config), - ] -} - -fn choose_one_existing(node: &Node, player_index: usize, config: &ScoreConfig) -> Command { - let ln_n = (node.score_sum.visit_count as f32).ln(); - let multiplier = if player_index == 0 { 1. } else { -1. }; - let mut command_confidences = - node.player_score_sums[player_index] - .iter() - .map(|(command, score_sum)| { - ( - command, - (score_sum.avg() * multiplier).val - + config.explore_exploit_weight - * (ln_n / score_sum.visit_count as f32).sqrt(), - ) - }); - - command_confidences - .next() - .map(|first| { - command_confidences - .fold( - first, - |(acc_command, acc_confidence), (next_command, next_confidence)| { - if acc_confidence > next_confidence { - (acc_command, acc_confidence) - } else { - (next_command, next_confidence) - } - }, - ) - .0 - .clone() - }) - .unwrap_or_else(|| Command::new(Action::DoNothing)) -} - -fn update(node: &mut Node, commands: [Command; 2], score: Score) { - *node.player_score_sums[0] - .entry(commands[0]) - .or_insert_with(ScoreSum::new) += score; - *node.player_score_sums[1] - .entry(commands[1]) - .or_insert_with(ScoreSum::new) += score; - node.score_sum += score; -} -- cgit v1.2.3