diff options
206 files changed, 37579 insertions, 0 deletions
diff --git a/2016/.gitignore b/2016/.gitignore new file mode 100644 index 0000000..9f97022 --- /dev/null +++ b/2016/.gitignore @@ -0,0 +1 @@ +target/
\ No newline at end of file diff --git a/2016/aoc1/Cargo.lock b/2016/aoc1/Cargo.lock new file mode 100644 index 0000000..b771521 --- /dev/null +++ b/2016/aoc1/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc1" +version = "0.1.0" + diff --git a/2016/aoc1/Cargo.toml b/2016/aoc1/Cargo.toml new file mode 100644 index 0000000..096aad6 --- /dev/null +++ b/2016/aoc1/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc1" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] diff --git a/2016/aoc1/input.txt b/2016/aoc1/input.txt new file mode 100644 index 0000000..456904d --- /dev/null +++ b/2016/aoc1/input.txt @@ -0,0 +1 @@ +R4, R5, L5, L5, L3, R2, R1, R1, L5, R5, R2, L1, L3, L4, R3, L1, L1, R2, R3, R3, R1, L3, L5, R3, R1, L1, R1, R2, L1, L4, L5, R4, R2, L192, R5, L2, R53, R1, L5, R73, R5, L5, R186, L3, L2, R1, R3, L3, L3, R1, L4, L2, R3, L5, R4, R3, R1, L1, R5, R2, R1, R1, R1, R3, R2, L1, R5, R1, L5, R2, L2, L4, R3, L1, R4, L5, R4, R3, L5, L3, R4, R2, L5, L5, R2, R3, R5, R4, R2, R1, L1, L5, L2, L3, L4, L5, L4, L5, L1, R3, R4, R5, R3, L5, L4, L3, L1, L4, R2, R5, R5, R4, L2, L4, R3, R1, L2, R5, L5, R1, R1, L1, L5, L5, L2, L1, R5, R2, L4, L1, R4, R3, L3, R1, R5, L1, L4, R2, L3, R5, R3, R1, L3 diff --git a/2016/aoc1/src/main.rs b/2016/aoc1/src/main.rs new file mode 100644 index 0000000..e9b4138 --- /dev/null +++ b/2016/aoc1/src/main.rs @@ -0,0 +1,98 @@ +use std::io::Read; +use std::fs::File; + +#[derive(Clone, Copy, Debug)] +enum Direction { + Up, + Left, + Down, + Right +} + +impl Direction { + fn turn_right(self) -> Direction { + match self { + Direction::Up => Direction::Right, + Direction::Right => Direction::Down, + Direction::Down => Direction::Left, + Direction::Left => Direction::Up + } + } + fn turn_left(self) -> Direction { + //not an ambiturner + self.turn_right().turn_right().turn_right() + } + + fn as_vector(self, dist: i32) -> (i32,i32) { + match self { + Direction::Up => (0, -dist), + Direction::Right => (dist, 0), + Direction::Down => (0, dist), + Direction::Left => (-dist, 0) + } + } +} + +fn main() { + let content = read_file().expect("Failed to read file"); + let (_, dist_x, dist_y) = first_repeated_dest(content); + println!("Total: ({}, {})", dist_x, dist_y); + println!("Net: {}", dist_x+dist_y); +} + +fn net_distance(content: String) -> (Direction, i32, i32) { + content.trim().split(", ") + .map(|action| + ( + action.chars().nth(0).unwrap(), + action.chars().skip(1).collect::<String>().parse::<i32>().unwrap() + )) + .fold((Direction::Up, 0,0), |(facing, acc_x, acc_y), (dir, dist)| { + let new_facing = match dir { + 'R' => facing.turn_right(), + 'L' => facing.turn_left(), + _ => panic!("bad input") + }; + + let (new_x, new_y) = new_facing.as_vector(dist); + (new_facing, acc_x+new_x, acc_y+new_y) + }) +} + +fn first_repeated_dest(content: String) -> (Direction, i32, i32) { + let mut stops: Vec<(i32, i32)> = Vec::new(); + let actions = content.trim().split(", ") + .map(|action| + ( + action.chars().nth(0).unwrap(), + action.chars().skip(1).collect::<String>().parse::<i32>().unwrap() + )); + let mut current_facing = Direction::Up; + let (mut acc_x, mut acc_y) = (0, 0); + for (dir, dist) in actions { + current_facing = match dir { + 'R' => current_facing.turn_right(), + 'L' => current_facing.turn_left(), + _ => panic!("bad input") + }; + + for _ in 0..dist { + let (new_x, new_y) = current_facing.as_vector(1); + acc_x += new_x; + acc_y += new_y; + + if stops.iter().any(|&(x, y)| x==acc_x && y==acc_y) { + return (current_facing, acc_x, acc_y); + } + stops.push((acc_x, acc_y)); + } + } + (current_facing, acc_x, acc_y) +} + +fn read_file() -> Result<String, String> { + let mut file = try!(File::open("input.txt").map_err(|e| e.to_string())); + let mut content = String::new(); + try!(file.read_to_string(&mut content).map_err(|e| e.to_string())); + Ok(content) +} diff --git a/2016/aoc10/Cargo.lock b/2016/aoc10/Cargo.lock new file mode 100644 index 0000000..f8f7189 --- /dev/null +++ b/2016/aoc10/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc10" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc10/Cargo.toml b/2016/aoc10/Cargo.toml new file mode 100644 index 0000000..d6abdaf --- /dev/null +++ b/2016/aoc10/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc10" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc10/input.txt b/2016/aoc10/input.txt new file mode 100644 index 0000000..aeda3b5 --- /dev/null +++ b/2016/aoc10/input.txt @@ -0,0 +1,231 @@ +bot 59 gives low to bot 176 and high to bot 120 +bot 92 gives low to bot 42 and high to bot 187 +value 31 goes to bot 114 +bot 182 gives low to bot 49 and high to bot 176 +bot 17 gives low to bot 181 and high to bot 162 +bot 36 gives low to bot 118 and high to bot 121 +bot 118 gives low to bot 164 and high to bot 55 +bot 172 gives low to bot 79 and high to bot 123 +bot 51 gives low to bot 60 and high to bot 31 +bot 48 gives low to bot 107 and high to bot 58 +bot 142 gives low to output 6 and high to bot 35 +bot 133 gives low to output 4 and high to bot 47 +bot 134 gives low to bot 122 and high to bot 66 +bot 106 gives low to bot 155 and high to bot 99 +bot 77 gives low to bot 93 and high to bot 84 +bot 9 gives low to bot 173 and high to bot 197 +bot 64 gives low to bot 123 and high to bot 48 +bot 177 gives low to bot 21 and high to bot 132 +bot 94 gives low to bot 6 and high to bot 25 +bot 126 gives low to bot 193 and high to bot 56 +bot 74 gives low to bot 187 and high to bot 125 +bot 80 gives low to bot 41 and high to bot 191 +bot 62 gives low to bot 157 and high to bot 138 +bot 66 gives low to bot 1 and high to bot 209 +bot 90 gives low to bot 104 and high to bot 34 +bot 68 gives low to bot 23 and high to bot 87 +bot 121 gives low to bot 55 and high to bot 126 +bot 122 gives low to bot 137 and high to bot 1 +bot 209 gives low to bot 168 and high to bot 26 +bot 141 gives low to bot 170 and high to bot 6 +bot 149 gives low to bot 62 and high to bot 13 +bot 120 gives low to bot 179 and high to bot 71 +bot 160 gives low to bot 194 and high to bot 151 +bot 86 gives low to bot 96 and high to bot 106 +value 13 goes to bot 9 +bot 180 gives low to bot 189 and high to bot 27 +value 67 goes to bot 88 +bot 169 gives low to bot 99 and high to bot 159 +bot 56 gives low to bot 98 and high to bot 147 +bot 197 gives low to bot 174 and high to bot 81 +bot 57 gives low to bot 113 and high to bot 179 +bot 39 gives low to bot 115 and high to bot 3 +bot 79 gives low to bot 22 and high to bot 40 +bot 161 gives low to output 14 and high to bot 185 +bot 21 gives low to bot 114 and high to bot 119 +bot 136 gives low to bot 28 and high to bot 158 +bot 105 gives low to bot 89 and high to bot 19 +bot 168 gives low to bot 126 and high to bot 26 +bot 193 gives low to bot 64 and high to bot 98 +bot 186 gives low to bot 86 and high to bot 178 +value 11 goes to bot 165 +bot 33 gives low to bot 116 and high to bot 150 +bot 32 gives low to bot 154 and high to bot 206 +bot 166 gives low to bot 33 and high to bot 139 +value 7 goes to bot 63 +bot 203 gives low to bot 172 and high to bot 64 +bot 200 gives low to bot 94 and high to bot 25 +value 43 goes to bot 76 +bot 145 gives low to bot 103 and high to bot 128 +bot 119 gives low to bot 186 and high to bot 97 +bot 12 gives low to bot 31 and high to bot 4 +bot 23 gives low to bot 198 and high to bot 171 +bot 34 gives low to bot 10 and high to bot 20 +bot 198 gives low to bot 43 and high to bot 17 +bot 50 gives low to output 1 and high to bot 127 +bot 155 gives low to bot 191 and high to bot 32 +bot 206 gives low to bot 12 and high to bot 43 +bot 96 gives low to bot 80 and high to bot 155 +bot 93 gives low to bot 44 and high to bot 70 +bot 24 gives low to bot 85 and high to bot 83 +bot 30 gives low to bot 159 and high to bot 68 +bot 55 gives low to bot 203 and high to bot 193 +bot 199 gives low to bot 68 and high to bot 135 +bot 170 gives low to bot 97 and high to bot 5 +bot 65 gives low to bot 152 and high to bot 194 +bot 43 gives low to bot 4 and high to bot 181 +bot 113 gives low to output 9 and high to bot 161 +bot 81 gives low to bot 141 and high to bot 94 +value 29 goes to bot 7 +bot 46 gives low to bot 175 and high to bot 195 +value 47 goes to bot 21 +value 23 goes to bot 42 +bot 13 gives low to bot 138 and high to bot 61 +bot 135 gives low to bot 87 and high to bot 111 +bot 194 gives low to bot 190 and high to bot 82 +value 73 goes to bot 109 +bot 154 gives low to bot 51 and high to bot 12 +bot 1 gives low to bot 18 and high to bot 209 +bot 98 gives low to bot 48 and high to bot 45 +bot 147 gives low to bot 45 and high to bot 95 +bot 47 gives low to output 19 and high to bot 152 +bot 26 gives low to bot 56 and high to bot 147 +bot 179 gives low to bot 161 and high to bot 71 +bot 148 gives low to bot 204 and high to bot 137 +bot 5 gives low to bot 67 and high to bot 85 +bot 174 gives low to bot 132 and high to bot 141 +bot 8 gives low to bot 13 and high to bot 75 +bot 82 gives low to bot 146 and high to bot 22 +bot 123 gives low to bot 40 and high to bot 107 +bot 99 gives low to bot 32 and high to bot 201 +bot 41 gives low to bot 196 and high to bot 192 +bot 139 gives low to bot 150 and high to bot 153 +bot 11 gives low to output 16 and high to bot 113 +bot 72 gives low to bot 65 and high to bot 160 +bot 195 gives low to bot 133 and high to bot 183 +bot 54 gives low to output 12 and high to output 10 +bot 158 gives low to bot 102 and high to bot 110 +bot 112 gives low to bot 19 and high to bot 118 +bot 31 gives low to bot 208 and high to bot 143 +bot 167 gives low to bot 7 and high to bot 96 +bot 63 gives low to bot 92 and high to bot 74 +bot 116 gives low to bot 20 and high to bot 131 +bot 184 gives low to bot 39 and high to bot 3 +bot 162 gives low to bot 205 and high to bot 39 +bot 108 gives low to output 11 and high to bot 175 +value 53 goes to bot 207 +bot 111 gives low to bot 202 and high to bot 184 +bot 25 gives low to bot 24 and high to bot 83 +value 71 goes to bot 77 +bot 69 gives low to bot 142 and high to bot 0 +bot 146 gives low to output 13 and high to bot 53 +bot 7 gives low to bot 76 and high to bot 80 +bot 131 gives low to bot 73 and high to bot 204 +bot 102 gives low to bot 195 and high to bot 117 +bot 76 gives low to bot 165 and high to bot 41 +bot 153 gives low to bot 148 and high to bot 122 +bot 208 gives low to bot 90 and high to bot 163 +bot 70 gives low to bot 144 and high to bot 78 +bot 125 gives low to bot 8 and high to bot 156 +bot 83 gives low to bot 199 and high to bot 135 +bot 75 gives low to bot 61 and high to bot 104 +bot 67 gives low to bot 169 and high to bot 30 +bot 14 gives low to bot 81 and high to bot 200 +bot 159 gives low to bot 201 and high to bot 23 +value 3 goes to bot 93 +bot 110 gives low to bot 117 and high to bot 89 +bot 128 gives low to bot 129 and high to bot 182 +bot 87 gives low to bot 171 and high to bot 111 +bot 45 gives low to bot 58 and high to bot 95 +bot 4 gives low to bot 143 and high to bot 166 +bot 60 gives low to bot 156 and high to bot 208 +bot 27 gives low to bot 108 and high to bot 46 +bot 42 gives low to bot 207 and high to bot 149 +bot 117 gives low to bot 183 and high to bot 72 +bot 115 gives low to bot 153 and high to bot 134 +bot 140 gives low to bot 125 and high to bot 60 +bot 173 gives low to bot 177 and high to bot 174 +bot 138 gives low to bot 180 and high to bot 52 +bot 100 gives low to bot 38 and high to bot 59 +value 41 goes to bot 173 +value 59 goes to bot 177 +bot 165 gives low to bot 63 and high to bot 196 +bot 84 gives low to bot 70 and high to bot 78 +bot 2 gives low to bot 160 and high to bot 91 +value 61 goes to bot 29 +bot 114 gives low to bot 109 and high to bot 186 +bot 205 gives low to bot 139 and high to bot 115 +bot 175 gives low to output 17 and high to bot 133 +bot 176 gives low to bot 57 and high to bot 120 +bot 107 gives low to bot 124 and high to bot 15 +bot 52 gives low to bot 27 and high to bot 28 +bot 103 gives low to bot 50 and high to bot 129 +bot 150 gives low to bot 131 and high to bot 148 +bot 16 gives low to output 20 and high to bot 189 +bot 190 gives low to output 18 and high to bot 146 +bot 157 gives low to bot 16 and high to bot 180 +bot 10 gives low to bot 158 and high to bot 130 +bot 202 gives low to bot 162 and high to bot 184 +bot 88 gives low to bot 77 and high to bot 84 +bot 188 gives low to bot 128 and high to bot 38 +bot 58 gives low to bot 15 and high to bot 101 +bot 171 gives low to bot 17 and high to bot 202 +bot 97 gives low to bot 178 and high to bot 67 +bot 163 gives low to bot 34 and high to bot 116 +bot 124 gives low to bot 0 and high to bot 145 +bot 71 gives low to bot 185 and high to bot 54 +bot 78 gives low to bot 14 and high to bot 200 +bot 101 gives low to bot 188 and high to bot 100 +bot 189 gives low to output 7 and high to bot 108 +bot 95 gives low to bot 101 and high to bot 100 +bot 0 gives low to bot 35 and high to bot 103 +bot 207 gives low to bot 37 and high to bot 62 +bot 49 gives low to bot 11 and high to bot 57 +bot 85 gives low to bot 30 and high to bot 199 +bot 89 gives low to bot 72 and high to bot 2 +bot 3 gives low to bot 134 and high to bot 66 +bot 181 gives low to bot 166 and high to bot 205 +bot 91 gives low to bot 151 and high to bot 172 +value 17 goes to bot 167 +bot 20 gives low to bot 130 and high to bot 73 +bot 196 gives low to bot 74 and high to bot 140 +bot 18 gives low to bot 121 and high to bot 168 +bot 185 gives low to output 15 and high to bot 54 +bot 178 gives low to bot 106 and high to bot 169 +bot 129 gives low to bot 127 and high to bot 49 +bot 19 gives low to bot 2 and high to bot 164 +bot 15 gives low to bot 145 and high to bot 188 +bot 144 gives low to bot 197 and high to bot 14 +bot 201 gives low to bot 206 and high to bot 198 +bot 164 gives low to bot 91 and high to bot 203 +bot 73 gives low to bot 105 and high to bot 112 +bot 191 gives low to bot 192 and high to bot 154 +bot 109 gives low to bot 167 and high to bot 86 +bot 151 gives low to bot 82 and high to bot 79 +bot 53 gives low to output 2 and high to bot 142 +bot 37 gives low to bot 29 and high to bot 157 +value 2 goes to bot 44 +bot 204 gives low to bot 112 and high to bot 36 +bot 40 gives low to bot 69 and high to bot 124 +bot 22 gives low to bot 53 and high to bot 69 +bot 104 gives low to bot 136 and high to bot 10 +value 19 goes to bot 88 +bot 127 gives low to output 5 and high to bot 11 +bot 183 gives low to bot 47 and high to bot 65 +bot 192 gives low to bot 140 and high to bot 51 +bot 38 gives low to bot 182 and high to bot 59 +bot 61 gives low to bot 52 and high to bot 136 +bot 156 gives low to bot 75 and high to bot 90 +value 37 goes to bot 37 +bot 28 gives low to bot 46 and high to bot 102 +bot 187 gives low to bot 149 and high to bot 8 +bot 132 gives low to bot 119 and high to bot 170 +bot 44 gives low to bot 9 and high to bot 144 +bot 29 gives low to output 0 and high to bot 16 +bot 6 gives low to bot 5 and high to bot 24 +bot 137 gives low to bot 36 and high to bot 18 +bot 130 gives low to bot 110 and high to bot 105 +value 5 goes to bot 92 +bot 35 gives low to output 3 and high to bot 50 +bot 152 gives low to output 8 and high to bot 190 +bot 143 gives low to bot 163 and high to bot 33 diff --git a/2016/aoc10/src/main.rs b/2016/aoc10/src/main.rs new file mode 100644 index 0000000..c2c18be --- /dev/null +++ b/2016/aoc10/src/main.rs @@ -0,0 +1,155 @@ +extern crate regex; +use regex::Regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::cmp; + +#[derive(Debug, Clone)] +struct Bot { + low: Option<i32>, + high: Option<i32>, + low_dest: Option<Dest>, + high_dest: Option<Dest> +} + +#[derive(Debug, Clone)] +enum Dest { + Bot(usize), + Output(usize) +} + +impl Bot { + fn new() -> Bot { + Bot {low: None, high: None, low_dest: None, high_dest: None} + } + + fn add_input(&mut self, input: i32) { + if self.low.is_none() { + self.low = Some(input); + } + else { + let other = self.low.unwrap(); //already handled none case + self.low = Some(cmp::min(input,other)); + self.high = Some(cmp::max(input,other)); + } + } + fn ready(&self) -> bool { + self.low.is_some() && self.high.is_some() && + self.low_dest.is_some() && self.high_dest.is_some() + } + fn clear(&mut self) { + self.low = None; + self.high = None; + } +} + + +fn main() { + let mut bots = build_bots_graph(); + let outputs = find_outputs(&mut bots); + println!("Outputs {:?}", outputs); +} + +fn find_outputs(bots: &mut Vec<Bot>) -> Vec<i32> { + let mut output = Vec::new(); + + let mut is_stable = false; + while !is_stable { + is_stable = true; + + for i in 0..bots.len() { + if bots[i].ready() { + is_stable = false; + + let low = bots[i].low.unwrap(); + let high = bots[i].high.unwrap(); + bots[i].clear(); + + match bots[i].low_dest { + Some(Dest::Bot(j)) => { + bots[j].add_input(low); + }, + Some(Dest::Output(j)) => { + check_add_output(&mut output, j); + output[j] = low; + }, + _ => {} + }; + match bots[i].high_dest { + Some(Dest::Bot(j)) => { + bots[j].add_input(high); + }, + Some(Dest::Output(j)) => { + check_add_output(&mut output, j); + output[j] = high; + }, + _ => {} + }; + } + } + } + + output +} + +fn build_bots_graph() -> Vec<Bot> { + let lines = read_file(); + let mut bots = Vec::new(); + + let value_regex = Regex::new(r"^value (\d+) goes to bot (\d+)$").unwrap(); + let give_regex = Regex::new(r"^bot (\d+) gives low to (output|bot) (\d+) and high to (output|bot) (\d+)$").unwrap(); + + for line in lines { + if value_regex.is_match(line.as_ref()) { + let cap = value_regex.captures(line.as_ref()).unwrap(); + let value = cap.at(1).unwrap().parse().unwrap(); + let bot_index = cap.at(2).unwrap().parse().unwrap(); + check_add_bot(&mut bots, bot_index); + bots[bot_index].add_input(value); + } + else if give_regex.is_match(line.as_ref()) { + let cap = give_regex.captures(line.as_ref()).unwrap(); + let give_bot_index = cap.at(1).unwrap().parse().unwrap(); + let low_is_to_output = cap.at(2).unwrap() == "output"; + let low_dest = cap.at(3).unwrap().parse().unwrap(); + let high_is_to_output = cap.at(4).unwrap() == "output"; + let high_dest = cap.at(5).unwrap().parse().unwrap(); + + check_add_bot(&mut bots, give_bot_index); + bots[give_bot_index].low_dest = if low_is_to_output { + Some(Dest::Output(low_dest)) + } else { + Some(Dest::Bot(low_dest)) + }; + bots[give_bot_index].high_dest = if high_is_to_output { + Some(Dest::Output(high_dest)) + } else { + Some(Dest::Bot(high_dest)) + }; + } + } + + bots +} + +fn check_add_bot(bots: &mut Vec<Bot>, index: usize) { + while index >= bots.len() { + bots.push(Bot::new()); + } +} + +fn check_add_output(outputs: &mut Vec<i32>, index: usize) { + while index >= outputs.len() { + outputs.push(0); + } +} + +fn read_file() -> Vec<String> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} diff --git a/2016/aoc11/Cargo.lock b/2016/aoc11/Cargo.lock new file mode 100644 index 0000000..b423029 --- /dev/null +++ b/2016/aoc11/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc11" +version = "0.1.0" + diff --git a/2016/aoc11/Cargo.toml b/2016/aoc11/Cargo.toml new file mode 100644 index 0000000..e0b3f68 --- /dev/null +++ b/2016/aoc11/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc11" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] + diff --git a/2016/aoc11/input.txt b/2016/aoc11/input.txt new file mode 100644 index 0000000..d453804 --- /dev/null +++ b/2016/aoc11/input.txt @@ -0,0 +1,4 @@ +The first floor contains a strontium generator, a strontium-compatible microchip, a plutonium generator, and a plutonium-compatible microchip. +The second floor contains a thulium generator, a ruthenium generator, a ruthenium-compatible microchip, a curium generator, and a curium-compatible microchip. +The third floor contains a thulium-compatible microchip. +The fourth floor contains nothing relevant. diff --git a/2016/aoc11/src/main.rs b/2016/aoc11/src/main.rs new file mode 100644 index 0000000..39a6e2f --- /dev/null +++ b/2016/aoc11/src/main.rs @@ -0,0 +1,166 @@ + +use std::collections::HashMap; + +//const MICROS: usize = 2; //example +const MICROS: usize = 7; + +#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] +struct State { + microchips: [[bool; MICROS]; 4], + generators: [[bool; MICROS]; 4], + elevator: usize +} + +impl State { + fn is_final(&self) -> bool { + let floor = 3; + + for i in 0..MICROS { + if !self.microchips[floor][i] || !self.generators[floor][i] { + return false; + } + } + true + } + + fn is_safe(&self) -> bool { + for floor in 0..4 { + for i in 0..MICROS { + for j in 0..MICROS { + //need to be on same floor, if any other micro is there + if self.generators[floor][j] && !self.generators[floor][i] && self.microchips[floor][i] { + return false; + } + } + } + } + true + } + + fn valid_moves(&self) -> Vec<State> { + let mut moves = Vec::new(); + + let mut new_floors = Vec::new(); + if self.elevator > 0 { + new_floors.push(self.elevator-1); + } + if self.elevator < 3 { + new_floors.push(self.elevator+1); + } + for &new_floor in new_floors.iter() { + + //items to take can be: one micro, one generator, two micros, two generator, one of each + + //one micro + for i in 0..MICROS { + if self.microchips[self.elevator][i] { + moves.push(self.move_micro(i, self.elevator, new_floor)); + } + } + //one generator + for i in 0..MICROS { + if self.generators[self.elevator][i] { + moves.push(self.move_generator(i, self.elevator, new_floor)); + } + } + //two micros + for i in 0..MICROS { + for j in i+1..MICROS { + if self.microchips[self.elevator][i] && self.microchips[self.elevator][j] { + moves.push(self.move_micro(i, self.elevator, new_floor).move_micro(j, self.elevator, new_floor)); + } + } + } + //two generators + for i in 0..MICROS { + for j in i+1..MICROS { + if self.generators[self.elevator][i] && self.generators[self.elevator][j] { + moves.push(self.move_generator(i, self.elevator, new_floor).move_generator(j, self.elevator, new_floor)); + } + } + } + //one of each + for i in 0..MICROS { + for j in 0..MICROS { + if self.microchips[self.elevator][i] && self.generators[self.elevator][j] { + moves.push(self.move_micro(i, self.elevator, new_floor).move_generator(j, self.elevator, new_floor)); + } + } + } + } + + moves.iter().filter(|x| x.is_safe()).cloned().collect() + } + + fn move_micro(&self, micro: usize, floor: usize, new_floor: usize) -> State { + let mut new_state = self.clone(); + new_state.microchips[floor][micro] = false; + new_state.microchips[new_floor][micro] = true; + new_state.elevator = new_floor; + new_state + } + fn move_generator(&self, gen: usize, floor: usize, new_floor: usize) -> State { + let mut new_state = self.clone(); + new_state.generators[floor][gen] = false; + new_state.generators[new_floor][gen] = true; + new_state.elevator = new_floor; + new_state + } +} + +fn main() { + //Stronium, plutonium, thulium, ruthenium, curium, electrium, dilithium + let initial = State { + microchips: + [[true, true, false, false, false, true, true], + [false, false, false, true, true, false, false], + [false, false, true, false, false, false, false], + [false, false, false, false, false, false, false]], + generators: + [[true, true, false, false, false, true, true], + [false, false, true, true, true, false, false], + [false, false, false, false, false, false, false], + [false, false, false, false, false, false, false]], + elevator: 0 + }; + + /* + //example + let initial = State { + microchips: + [[true, true], + [false, false], + [false, false], + [false, false]], + generators: + [[false, false], + [true, false], + [false, true], + [false, false]], + elevator: 0 + }; + */ + + let mut states: HashMap<State, u32> = HashMap::new(); + states.insert(initial, 0); + + let mut moves = 0; + loop { + if states.iter().any(|(state, _)| state.is_final()) { + break; + } + + let new_states: Vec<State> = states.iter().filter(|&(_, &x)| x == moves).flat_map(|(state, _)| state.valid_moves()).collect(); + + moves += 1; + + for state in new_states { + if !states.contains_key(&state) { + states.insert(state, moves); + } + } + } + + + println!("Moves required: {}", moves); +} diff --git a/2016/aoc12/Cargo.lock b/2016/aoc12/Cargo.lock new file mode 100644 index 0000000..24237f4 --- /dev/null +++ b/2016/aoc12/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc12" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc12/Cargo.toml b/2016/aoc12/Cargo.toml new file mode 100644 index 0000000..f224921 --- /dev/null +++ b/2016/aoc12/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc12" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc12/input.txt b/2016/aoc12/input.txt new file mode 100644 index 0000000..bb2a2ff --- /dev/null +++ b/2016/aoc12/input.txt @@ -0,0 +1,23 @@ +cpy 1 a +cpy 1 b +cpy 26 d +jnz c 2 +jnz 1 5 +cpy 7 c +inc d +dec c +jnz c -2 +cpy a c +inc a +dec b +jnz b -2 +cpy c b +dec d +jnz d -6 +cpy 17 c +cpy 18 d +inc a +dec d +jnz d -2 +dec c +jnz c -5 diff --git a/2016/aoc12/src/main.rs b/2016/aoc12/src/main.rs new file mode 100644 index 0000000..2356402 --- /dev/null +++ b/2016/aoc12/src/main.rs @@ -0,0 +1,136 @@ +extern crate regex; +use regex::Regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +enum Instruction { + CpyLit(i32, usize), + CpyReg(usize, usize), + Inc(usize), + Dec(usize), + Jnz(usize, i32), + Jmp(i32), + Noop +} + +impl Instruction { + fn parse(line: &str) -> Instruction { + let cpy_lit: Regex = Regex::new(r"cpy ([-\d]+) (a|b|c|d)").unwrap(); + let cpy_reg = Regex::new(r"cpy (a|b|c|d) (a|b|c|d)").unwrap(); + let inc = Regex::new(r"inc (a|b|c|d)").unwrap(); + let dec = Regex::new(r"dec (a|b|c|d)").unwrap(); + let jnz_lit = Regex::new(r"jnz ([-\d]+) ([-\d]+)").unwrap(); + let jnz_reg = Regex::new(r"jnz (a|b|c|d) ([-\d]+)").unwrap(); + + let cpy_lit_match = cpy_lit.captures(line); + let cpy_reg_match = cpy_reg.captures(line); + let inc_match = inc.captures(line); + let dec_match = dec.captures(line); + let jnz_lit_match = jnz_lit.captures(line); + let jnz_reg_match = jnz_reg.captures(line); + + if cpy_lit_match.is_some() { + let cap = cpy_lit_match.unwrap(); + let src: i32 = cap.at(1).unwrap().parse().unwrap(); + let dest = to_register_index(cap.at(2).unwrap()); + Instruction::CpyLit(src, dest) + } + else if cpy_reg_match.is_some() { + let cap = cpy_reg_match.unwrap(); + let src = to_register_index(cap.at(1).unwrap()); + let dest = to_register_index(cap.at(2).unwrap()); + Instruction::CpyReg(src, dest) + } + else if inc_match.is_some() { + let cap = inc_match.unwrap(); + let dest = to_register_index(cap.at(1).unwrap()); + Instruction::Inc(dest) + } + else if dec_match.is_some() { + let cap = dec_match.unwrap(); + let dest = to_register_index(cap.at(1).unwrap()); + Instruction::Dec(dest) + } + else if jnz_lit_match.is_some() { + let cap = jnz_lit_match.unwrap(); + let condition: i32 = cap.at(1).unwrap().parse().unwrap(); + let offset: i32 = cap.at(2).unwrap().parse().unwrap(); + if condition != 0 { + Instruction::Jmp(offset) + } + else { + Instruction::Noop + } + } + else if jnz_reg_match.is_some() { + let cap = jnz_reg_match.unwrap(); + let condition = to_register_index(cap.at(1).unwrap()); + let offset: i32 = cap.at(2).unwrap().parse().unwrap(); + Instruction::Jnz(condition, offset) + } + else { + panic!("Invalid instruction line") + } + } +} + +fn main() { + let program = read_file(); + + let mut registers: [i32; 4] = [0, 0, 1, 0]; + let mut pc: usize = 0; + + while pc < program.len() { + let mut pc_next: usize = pc+1; + + match program[pc] { + Instruction::CpyLit(src, dest) => { + registers[dest] = src; + }, + Instruction::CpyReg(src, dest) => { + registers[dest] = registers[src]; + }, + Instruction::Inc(dest) => { + registers[dest] += 1; + }, + Instruction::Dec(dest) => { + registers[dest] -= 1; + }, + Instruction::Jnz(condition, offset) => { + if registers[condition] != 0 { + pc_next = (pc as i32 + offset) as usize; + } + }, + Instruction::Jmp(offset) => { + pc_next = (pc as i32 + offset) as usize + }, + Instruction::Noop => {} + } + + pc = pc_next; + } + + println!("a: {}, b: {}, c: {}, d: {}", registers[0], registers[1], registers[2], registers[3]); + +} + +fn to_register_index(name: &str) -> usize { + match name { + "a" => 0, + "b" => 1, + "c" => 2, + "d" => 3, + _ => panic!("Invalid register provided") + } +} + +fn read_file() -> Vec<Instruction> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap()) + .filter(|line| line.len() > 0) + .map(|line| Instruction::parse(line.trim())) + .collect() +} diff --git a/2016/aoc13/Cargo.lock b/2016/aoc13/Cargo.lock new file mode 100644 index 0000000..d60f2c7 --- /dev/null +++ b/2016/aoc13/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc13" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc13/Cargo.toml b/2016/aoc13/Cargo.toml new file mode 100644 index 0000000..347a1a4 --- /dev/null +++ b/2016/aoc13/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc13" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc13/src/main.rs b/2016/aoc13/src/main.rs new file mode 100644 index 0000000..2c0e70e --- /dev/null +++ b/2016/aoc13/src/main.rs @@ -0,0 +1,64 @@ +extern crate regex; +use regex::Regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::collections::HashMap; + +fn main() { + //let target = (7, 4); + let target = (31,39); + + let mut states: HashMap<(i32, i32), u32> = HashMap::new(); + states.insert((1, 1), 0); + let mut moves = 0; + while moves < 50 { +/* if states.iter().any(|(&state, _)| state == target) { + break; + } +*/ + let new_states: Vec<(i32, i32)> = states.iter().filter(|&(_, &x)| x == moves).flat_map(|(state, _)| available_steps(state)).collect(); + + moves += 1; + + for state in new_states { + if !states.contains_key(&state) { + states.insert(state, moves); + } + } + } + + println!("Moves required: {}", moves); + println!("Possible destinations: {}", states.iter().count()); +} + + +fn available_steps(current: &(i32, i32)) -> Vec<(i32, i32)> { + let &(x0, y0) = current; + let mut results = Vec::new(); + for &(x, y) in [(x0-1, y0), (x0+1, y0), (x0, y0-1), (x0, y0+1)].iter() { + if x >= 0 && y >= 0 && !is_wall(x, y) { + results.push((x, y)); + } + } + results +} + +fn print_map() { + for y in 0..10 { + for x in 0..10 { + print!("{}", if is_wall(x, y) {'#'} else {'.'}); + } + println!(""); + } +} + +fn is_wall(x: i32, y: i32) -> bool { +// let favourite_number = 10; + let favourite_number = 1352; + let funny_num = x*x + 3*x + 2*x*y + y + y*y + favourite_number; + let bin = format!("{:b}", funny_num); + let number_of_ones = bin.chars().filter(|&c| c == '1').count(); + number_of_ones % 2 == 1 +} diff --git a/2016/aoc14/Cargo.lock b/2016/aoc14/Cargo.lock new file mode 100644 index 0000000..a889c91 --- /dev/null +++ b/2016/aoc14/Cargo.lock @@ -0,0 +1,14 @@ +[root] +name = "aoc14" +version = "0.1.0" +dependencies = [ + "md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "md5" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7df230903ccdffd6b3b4ec21624498ea64c912ce50297846907f0b8e1bb249dd" diff --git a/2016/aoc14/Cargo.toml b/2016/aoc14/Cargo.toml new file mode 100644 index 0000000..eb3f92d --- /dev/null +++ b/2016/aoc14/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc14" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] +md5 = "^0.2"
\ No newline at end of file diff --git a/2016/aoc14/src/main.rs b/2016/aoc14/src/main.rs new file mode 100644 index 0000000..d9410ce --- /dev/null +++ b/2016/aoc14/src/main.rs @@ -0,0 +1,84 @@ +extern crate md5; + +use std::collections::HashMap; + +fn main() { +// let input = "abc"; + let input = "yjdafjpo"; + let mut index = 0; + let mut results_found = 0; + + let mut hash_memo = HashMap::new(); + while results_found < 64 { + let hash = stretched_hash(format!("{}{}", input, index), &mut hash_memo); + + let threes = find_concurrent_symbols(&hash, 3, true); + if threes.len() > 0 { +// println!("Found three at {} -> {}", index, hash); + for i in 1..1001 { + let hash = stretched_hash(format!("{}{}", input, index+i), &mut hash_memo); + let fives = find_concurrent_symbols(&hash, 5, false); + if fives.iter().any(|c| threes.contains(c)) { + results_found += 1; +// println!("Five found at {} -> {}", index+i, hash); + println!("Found hash {} at index {}", results_found, index); + break; + } + } + } + index += 1; + } + +} + +fn find_concurrent_symbols(hash: &String, count: u8, exit_early: bool) -> Vec<char> { + let mut last_symbol = None; + let mut last_symbol_run = 0; + let mut matches = Vec::new(); + for c in hash.chars() { + let symbol_matches = match last_symbol { + Some(s) => s == c, + None => false + }; + + if symbol_matches { + last_symbol_run += 1; + if last_symbol_run >= count && !matches.contains(&c) { + matches.push(c); + if exit_early { + break; + } + } + } else { + last_symbol = Some(c); + last_symbol_run = 1; + } + } + + matches +} + +fn hash_to_string(hash: &[u8; 16]) -> String { + let mut result = String::with_capacity(32); + + for &byte in hash.iter() { + result.push_str(format!("{:02x}", byte).as_ref()); + } + result +} + +fn stretched_hash(input: String, memo: &mut HashMap<String, String>) -> String { + memo.entry(input.clone()).or_insert_with(|| { + let mut result = input; + for _ in 0..2017 { + result = string_hash(result); + } + result + }).clone() +} + +fn string_hash(input: String) -> String { + let bytes_to_hash = input.into_bytes(); + let hash = md5::compute(bytes_to_hash.as_slice()); + hash_to_string(&hash) +} diff --git a/2016/aoc15/Cargo.lock b/2016/aoc15/Cargo.lock new file mode 100644 index 0000000..38f1d9c --- /dev/null +++ b/2016/aoc15/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc15" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc15/Cargo.toml b/2016/aoc15/Cargo.toml new file mode 100644 index 0000000..eb75c1d --- /dev/null +++ b/2016/aoc15/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc15" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc15/input.txt b/2016/aoc15/input.txt new file mode 100644 index 0000000..c4cf544 --- /dev/null +++ b/2016/aoc15/input.txt @@ -0,0 +1,7 @@ +Disc #1 has 17 positions; at time=0, it is at position 5. +Disc #2 has 19 positions; at time=0, it is at position 8. +Disc #3 has 7 positions; at time=0, it is at position 1. +Disc #4 has 13 positions; at time=0, it is at position 7. +Disc #5 has 5 positions; at time=0, it is at position 1. +Disc #6 has 3 positions; at time=0, it is at position 0. +Disc #7 has 11 positions; at time=0, it is at position 0. diff --git a/2016/aoc15/src/main.rs b/2016/aoc15/src/main.rs new file mode 100644 index 0000000..a7f0f64 --- /dev/null +++ b/2016/aoc15/src/main.rs @@ -0,0 +1,35 @@ +extern crate regex; + +use regex::Regex; +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + + +fn main() { + let gears = read_file(); + let pass = (0..).find(|&i| can_pass(&gears, i)).expect("Reached end of infinite range without finding output"); + println!("First pass at t={}", pass); +} + +fn can_pass(gears: &Vec<(i32, i32, i32)>, time: i32) -> bool { + gears.iter().all(|&(time_offset, init_pos, gear_size)| (init_pos + time_offset + time) % gear_size == 0) +} + +fn read_file() -> Vec<(i32, i32, i32)> { + let file = BufReader::new(File::open("input.txt").unwrap()); + let line_regex = Regex::new(r"Disc #(\d+) has (\d+) positions; at time=0, it is at position (\d+).").unwrap(); + file.lines() + .filter_map(|line| { + line_regex.captures(line.unwrap().as_ref()).and_then(|cap| { + let time_offset = cap.at(1).and_then(|s| s.parse::<i32>().ok()); + let init_pos = cap.at(3).and_then(|s| s.parse::<i32>().ok()); + let gear_size = cap.at(2).and_then(|s| s.parse::<i32>().ok()); + match (time_offset, init_pos, gear_size) { + (Some(a), Some(b), Some(c)) => Some((a,b,c)), + _ => None + } + }) + }) + .collect() +} diff --git a/2016/aoc16/Cargo.lock b/2016/aoc16/Cargo.lock new file mode 100644 index 0000000..af71beb --- /dev/null +++ b/2016/aoc16/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc16" +version = "0.1.0" + diff --git a/2016/aoc16/Cargo.toml b/2016/aoc16/Cargo.toml new file mode 100644 index 0000000..3e56892 --- /dev/null +++ b/2016/aoc16/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc16" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] diff --git a/2016/aoc16/src/main.rs b/2016/aoc16/src/main.rs new file mode 100644 index 0000000..c5ecd10 --- /dev/null +++ b/2016/aoc16/src/main.rs @@ -0,0 +1,68 @@ +fn main() { + let data = initial(); + let expanded = expand_to_size(data, 35651584); + let check = checksum(expanded); + print(&check); +} + +fn initial() -> Vec<bool> { + to_bit_vec("10001001100000001") +} + +fn to_bit_vec(input: &str) -> Vec<bool> { + input.chars().map(|c| c == '1').collect() +} + +fn expand(a: Vec<bool>) -> Vec<bool> { + let mut b = a.clone(); + b.reverse(); + b = b.iter().map(|x| !x).collect(); + + let mut out = a.clone(); + out.push(false); + out.append(&mut b); + out +} + +fn expand_to_size(init: Vec<bool>, size: usize) -> Vec<bool> { + let mut out = init.clone(); + while out.len() < size { + out = expand(out); + } + out.truncate(size); + out +} + +fn checksum(data: Vec<bool>) -> Vec<bool> { + let mut check: Vec<bool> = data.chunks(2).map(|x| x[0] == x[1]).collect(); + if check.len() % 2 == 0 { + check = checksum(check); + } + check +} + +fn print(data: &Vec<bool>) { + for &bit in data { + print!("{}", if bit {'1'} else {'0'}); + } + println!(""); +} + +#[test] +fn test_expand() { + assert_eq!(expand(to_bit_vec("1")), to_bit_vec("100")); + assert_eq!(expand(to_bit_vec("0")), to_bit_vec("001")); + assert_eq!(expand(to_bit_vec("11111")), to_bit_vec("11111000000")); + assert_eq!(expand(to_bit_vec("111100001010")), to_bit_vec("1111000010100101011110000")); +} + +#[test] +fn test_expand_to_size() { + assert_eq!(expand_to_size(to_bit_vec("10000"), 20), to_bit_vec("10000011110010000111")); +} + +#[test] +fn test_checksum() { + assert_eq!(checksum(to_bit_vec("10000011110010000111")), to_bit_vec("01100")); +} + diff --git a/2016/aoc17/Cargo.lock b/2016/aoc17/Cargo.lock new file mode 100644 index 0000000..488e59b --- /dev/null +++ b/2016/aoc17/Cargo.lock @@ -0,0 +1,14 @@ +[root] +name = "aoc17" +version = "0.1.0" +dependencies = [ + "md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "md5" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7df230903ccdffd6b3b4ec21624498ea64c912ce50297846907f0b8e1bb249dd" diff --git a/2016/aoc17/Cargo.toml b/2016/aoc17/Cargo.toml new file mode 100644 index 0000000..88c211c --- /dev/null +++ b/2016/aoc17/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc17" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] +md5 = "^0.2"
\ No newline at end of file diff --git a/2016/aoc17/src/main.rs b/2016/aoc17/src/main.rs new file mode 100644 index 0000000..77fdf2e --- /dev/null +++ b/2016/aoc17/src/main.rs @@ -0,0 +1,98 @@ +extern crate md5; + +#[derive(Clone)] +struct State { + input: String, + path: String, + x: i8, + y: i8 +} + +impl State { + fn open_directions(&self) -> Vec<(char, i8, i8)> { + let hash_input = format!("{}{}", self.input, self.path); + let hash = md5::compute(hash_input.into_bytes().as_slice()); + + let mut results = Vec::new(); + if hash[0]/16 > 10 && self.y > 0 { + results.push(('U', 0, -1)); + } + if hash[0]%16 > 10 && self.y < 3 { + results.push(('D', 0, 1)); + } + if hash[1]/16 > 10 && self.x > 0 { + results.push(('L', -1, 0)); + } + if hash[1]%16 > 10 && self.x < 3 { + results.push(('R', 1, 0)); + } + + results + } + + fn next_states(&self) -> Vec<State> { + self.open_directions().iter() + .map(|&(dir, dx, dy)| State { + input: self.input.clone(), + path: { + let mut p = self.path.clone(); + p.push(dir); + p + }, + x: self.x + dx, + y: self.y + dy + }).collect() + } + + fn is_final(&self) -> bool { + self.x == 3 && self.y == 3 + } +} + +fn main() { + let initial = State { + input: "lpvhkcbi".to_string(), + path: String::new(), + x: 0, + y: 0 + }; + + let final_state = find_final_state(initial.clone()); + let longest_path = find_longest_path(initial); + + println!("Final State Path: {}", final_state.path); + println!("Longest Path: {}", longest_path); +} + +fn find_final_state(initial: State) -> State { + let mut states = vec!(initial); + + loop { + match states.iter().find(|s| s.is_final()) { + Some(final_state) => {return final_state.clone();}, + None => {} + }; + + states = states.iter().flat_map(|s| s.next_states()).collect(); + } +} + +fn find_longest_path(initial: State) -> u32 { + let mut states = vec!(initial); + let mut current_longest = 0; + + while states.len() > 0 { + + match states.iter().find(|s| s.is_final()) { + Some(final_state) => {current_longest = final_state.path.len() as u32;}, + None => {} + }; + + states = states.iter() + .filter(|s| !s.is_final()) + .flat_map(|s| s.next_states()) + .collect(); + } + + current_longest +} diff --git a/2016/aoc18/Cargo.lock b/2016/aoc18/Cargo.lock new file mode 100644 index 0000000..d26659d --- /dev/null +++ b/2016/aoc18/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc18" +version = "0.1.0" + diff --git a/2016/aoc18/Cargo.toml b/2016/aoc18/Cargo.toml new file mode 100644 index 0000000..5eadfea --- /dev/null +++ b/2016/aoc18/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc18" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] diff --git a/2016/aoc18/src/main.rs b/2016/aoc18/src/main.rs new file mode 100644 index 0000000..52ad7a9 --- /dev/null +++ b/2016/aoc18/src/main.rs @@ -0,0 +1,20 @@ +fn main() { + let init: Vec<char> = ".^^..^...^..^^.^^^.^^^.^^^^^^.^.^^^^.^^.^^^^^^.^...^......^...^^^..^^^.....^^^^^^^^^....^^...^^^^..^".chars().collect(); + + let mut map = Vec::new(); + map.push(init); + + for _ in 1..400000 { + let last = map.last().unwrap().clone(); + let mut next = Vec::new(); + for i in 0..last.len() { + let left = if i == 0 { '.' } else { last[i-1] }; + let right = if i == last.len()-1 { '.' } else { last[i+1] }; + next.push(if left == right { '.' } else { '^' }); + } + map.push(next); + } + + let safe_count = map.iter().map(|row| row.iter().filter(|&&c| c=='.').count() as u32).sum::<u32>(); + println!("Safe tiles: {}", safe_count); +} diff --git a/2016/aoc19/Cargo.lock b/2016/aoc19/Cargo.lock new file mode 100644 index 0000000..7dc8a26 --- /dev/null +++ b/2016/aoc19/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc19" +version = "0.1.0" + diff --git a/2016/aoc19/Cargo.toml b/2016/aoc19/Cargo.toml new file mode 100644 index 0000000..17889e3 --- /dev/null +++ b/2016/aoc19/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc19" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] diff --git a/2016/aoc19/src/main.rs b/2016/aoc19/src/main.rs new file mode 100644 index 0000000..1930d8d --- /dev/null +++ b/2016/aoc19/src/main.rs @@ -0,0 +1,42 @@ +fn main() { + part1(); + part2(); +} + +fn part1() { + let mut elves = (0..3017957).map(|i| i+1).collect::<Vec<_>>(); + + let mut eliminate_mod = 1; + + while elves.len() > 1 { + let next_mod = if elves.len() % 2 == eliminate_mod { 0 } else { 1 }; + elves = elves.iter() + .enumerate() + .filter(|&(i, _)| i % 2 != eliminate_mod) + .map(|(_, &e)| e) + .collect(); + eliminate_mod = next_mod; + } + + let elf = elves[0]; + println!("Elf {} gets all the presents in part 1", elf); +} + +fn part2() { + let mut elves = (0..3017957).map(|i| i+1).collect::<Vec<_>>(); + + let mut i = 0; + while elves.len() > 1 { + i = i % elves.len(); + let to_eliminate = (i + elves.len() / 2) % elves.len(); +// println!("Elf {} is taking presents from elf {}", elves[i], elves[to_eliminate]); + elves.remove(to_eliminate); + if to_eliminate > i { + i += 1; + } + } + + let elf = elves[0]; + println!("Elf {} gets all the presents in part 2", elf); + +} diff --git a/2016/aoc2/Cargo.lock b/2016/aoc2/Cargo.lock new file mode 100644 index 0000000..b0dbf6e --- /dev/null +++ b/2016/aoc2/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc2" +version = "0.1.0" + diff --git a/2016/aoc2/Cargo.toml b/2016/aoc2/Cargo.toml new file mode 100644 index 0000000..e4dcc6f --- /dev/null +++ b/2016/aoc2/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc2" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] diff --git a/2016/aoc2/input.txt b/2016/aoc2/input.txt new file mode 100644 index 0000000..ba5a73d --- /dev/null +++ b/2016/aoc2/input.txt @@ -0,0 +1,5 @@ +RUDULRLLUULRURDDRRUDURULLLDRLRLUDDLUDUDDUDRRDUDULDUUULLRULLRLDDLDLDDRLRRRRUDLLDDUULDRLLUDDRRUURLULRRRDLLURRUUDURUDDURLUDDDLUDDUUDUURUDLRDRDRLRDRLDRUDRUUDLRDDRRURDDLRDDRRURDUDDLULLUDRURURRRLRRUDUULULULRRLDLUDUURRLLRUDLLDRDDLRRRULRUDLULDDLLLULDLRUDLLLLRDDLRDRLDRLLRDRRDLRDULULRLLLDRUDRRRUULRUULDRURLUDRURRDLLDLRDLDDDDRRLUDLRRLUUUURDRDDLRRURURRDUULLRLURLURUDDDRDURDUUDRLRLRRLDDLDLDLDDDUDDULURLDDLLRLRRDULUDDLULRLUDDLDLRULUUUDRLDRUDURLUDDRLLRUULDLRRRRDLLLLURULLRDRRUDLUULRRDLLRLRLUDLDDULLDLLRDLDLL +LLUUUUUUDUDRLRDRDLDURRRLLRRLRURLLUURRLLUDUDLULUURUUURDLUDLDDLULLRDLRUULDLRDUDURLLDDUDUDULLUDDUULLLUULRRRLULRURRDLRUDUDDURRRDRUURDURLLULLRULLDRUULLURLDRDUUDDDDDDRRLDRLRRRLULDDUURRLLLLDRURLURDRDRDURUDUURRDUDUDRLLUUDDRLUDDDRDLDLRLDRURRDLLRULDRLLURURRLUULLRLRRURDDRDRUUURUURUUUDLLRRLUDRLDLRLURLDLUDDUDDDLDUDRRLDLRURULRLLRDUULURRRULDLLLRLDDDUURRRRDULLRURRLULULDLRRUDUDDLRUURDLDUDDUDRRDLRRRDUDUUUDLLDDDDLURLURRRUUULLLULRRLLLLLLULDUUDLRUDRRDLRDUUDUDLLRLDLLRUURDUUURUUUDDLLUUDLULDURLULULUUUDRUDULLURRULRULLRDLDDU +RLUUURULLDLRLDUDRDURRDUURLLUDDDUULRRRLRLURDDRUULUDULDUUDDDDUDDDDRUDDLDUUDRUDLRRRLLRDDLLLRLLRUULRUULDDRURRLURRLRLULDDRRRDDURDDRDRDULRUDRUUDULRLLULDLRLLDRULRDDRRDDUDLRLLUDRDRRRLUDULRDLRDDURRUUDDRRUDURRUUUDDRRDUDURLUUDUDUURDDDLURLULLUULULURUDUUDRUDULLUUULURDLDUULLDDLLDULRLRLRDUUURUUDLRLDURUDRLDULLUDLDLLRDUURRDUDURLUUUDLLRRULRLULRLDLLURDURRULRLLRRDUDLLRDRRRRDLUUDRUUUDDLRLUDDDDDDRURRRUUURRDLLRURLDDLLDLRRLLLDRRULRRUDLDRDDRRLULURLLUURURURRRRUUUUURUDURLRLLLULULDLLDLRDRRULUDUDRDRRDRDRRDUDLLLRUDRUDDDULRULRRRDRLRUUUURUDURDUUULLULRUDDULDUUDLDURRD +ULRULDDLDLULLLRRRLRUDDDDDLLDDUDLRRDULUUDRDLRRURDRRLUULRURUDRRULDLLLUDRUUDULULUDDRUDDDRDURRRDRDUUURLRDULUDRDRLDRUDDLLLDRRULUDLUDLDLLRRUDUULULDLDLLUURDLDDLLUUDURLURLLLDRDLDRRLRULUURRDRULRUUURULRRUDDDDLLDLDDLLRRLRRRRDUUDUDLDRDRRURDLRURULDLRDLLLLRUDRLLRDLRLRDURDRUDURRRLRDRDLLRLUDDDDRLRLLDUURRURLUURUULUDLUURDRRUDDLUDUDDDURRDRUDRLRULDULUUUUUUDDUDRUDUUURUDRRDLUDLUUDUULUDURDLDDDLLURRURUUDUDDRRDRLLULULDRLRURRDDDRDUUURDDDRULUDRDDLDURRLDDDLRRRLDDRDURULDLUDLLLURLURRLRRULDLLDDUDRRULDRRRRLURRUULRRRUDLURDLLDLLDULUUDRRLDLLLDRLRUDLUULDLDRUDUDURDRUDRDDDLRLULLUR +LRLUUURRLRRRRRUURRLLULRLULLDLUDLUDRDDRLDLRLULLURDURLURDLLRLDUUDDURRRRLDLLRULLRLDLLUUDRLDDLLDRULDRLLRURDLRURRUDLULLRURDLURRURUDULLDRLLUUULUDRURRUUDUDULUUULRLDDULDRDLUDDUDDDLRURULLDLLLRLLUURDLRUDLLLLDLLRLRUUUDDRUUUUDLDLRDDURLDURUULLLUUDLLLLDULRRRLLDLDRRDRLUDRUDURLLUDLRLLUDUDRDDDRDLRDLRULUULDRLUDLRLDUURLRRLUDDDUUDDDUDRLDLDUDLURUULLDDDURUUULRLUDLDURUUDRDRURUDDUURDUUUDLLDLDLDURUURLLLLRURUURURULRULLRUDLRRUUUUUDRRLLRDDUURDRDRDDDUDRLURDRRRUDLLLDURDLUUDLLUDDULUUDLDUUULLDRDLRURUURRDURRDLURRRRLLUUULRDULDDLDUURRDLDLLULRRLLUDLDUDLUUL diff --git a/2016/aoc2/src/main.rs b/2016/aoc2/src/main.rs new file mode 100644 index 0000000..f4c3bfd --- /dev/null +++ b/2016/aoc2/src/main.rs @@ -0,0 +1,61 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +fn main() { + let lines = read_file(); + let mut current = 5; + for line in lines { + current = line.chars().fold(current, |current, dir| move_char_hex(current, dir)); + println!("{:X}", current); + } +} + +fn read_file() -> Vec<String> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} + + +//assume current in 1-9 range, and char is in UDLR +fn move_char(current: i32, dir: char) -> i32 { + match dir { + 'U' => if current <= 3 { current } else { current - 3}, + 'D' => if current >= 7 { current } else { current + 3}, + 'L' => if current%3 == 1 { current } else { current - 1}, + 'R' => if current%3 == 0 { current } else { current + 1}, + _ => panic!("Bad direction character") + } +} + +// 1 +// 2 3 4 +// 5 6 7 8 9 +// A B C +// D +fn move_char_hex(current: i32, dir: char) -> i32 { + match dir { + 'U' => match current { + 1|2|4|5|9 => current, + 3|13 => current - 2, + _ => current - 4 + }, + 'D' => match current { + 5|10|13|12|9 => current, + 1|11 => current + 1, + _ => current + 4 + }, + 'L' => match current { + 1|2|5|10|13 => current, + _ => current - 1 + }, + 'R' => match current { + 1|4|9|12|13 => current, + _ => current + 1 + }, + _ => panic!("Bad direction character") + } +} diff --git a/2016/aoc20/Cargo.lock b/2016/aoc20/Cargo.lock new file mode 100644 index 0000000..26be916 --- /dev/null +++ b/2016/aoc20/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc20" +version = "0.1.0" + diff --git a/2016/aoc20/Cargo.toml b/2016/aoc20/Cargo.toml new file mode 100644 index 0000000..4c1e873 --- /dev/null +++ b/2016/aoc20/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc20" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] diff --git a/2016/aoc20/input.txt b/2016/aoc20/input.txt new file mode 100644 index 0000000..c3e912f --- /dev/null +++ b/2016/aoc20/input.txt @@ -0,0 +1,1104 @@ +272152717-281364173 +480675455-489214207 +3562619188-3566180938 +474796666-476679929 +1859288016-1859426304 +3500809029-3520779986 +1711620671-1724624325 +376497036-379822744 +2334350029-2336872286 +2880314906-2881510051 +257912946-260566708 +2964360275-2973540924 +889696219-900080622 +2727172832-2737372242 +33674001-51133436 +2718782366-2736816045 +41293631-52546854 +1064827080-1071610531 +1373807967-1374769067 +3261078460-3268114587 +1583129312-1602482863 +1605269651-1617971405 +365345542-377782493 +2858099254-2862714857 +1147380159-1156709753 +1087934555-1093750979 +998603437-1001868893 +234297440-245049936 +427084952-449321291 +3115490453-3126172818 +0-166475 +2859739533-2864404117 +2879116214-2888999956 +4166942312-4169074982 +2693533587-2694200673 +84162473-84534337 +2164071501-2168305216 +3745751095-3750043362 +2647427848-2647977897 +2028900925-2034847596 +876886411-878398110 +2589041333-2589873869 +876959837-878627172 +431139724-458304869 +1877994382-1887344924 +473575203-475773145 +252091135-257535969 +177110001-177143710 +2722497928-2723521816 +2208127-2536514 +1748077674-1751224226 +2362936907-2381045647 +2020385448-2029519771 +3108825744-3123438032 +872292652-885764819 +305053947-314709696 +2717924562-2718755692 +48149217-51160833 +2149726170-2150134226 +1729844094-1745733187 +1375741284-1378782323 +3744515388-3761146958 +78523085-78634151 +1634372345-1650424418 +3199349237-3209140394 +2011853949-2039316392 +769580925-794759455 +3841896290-3862358298 +3360393034-3379747723 +1120644472-1134516526 +815948131-837832345 +1590411139-1596337230 +2894381219-2935549329 +3688775236-3725245783 +963257634-966114246 +3566641344-3578334024 +1402589368-1434296916 +2742164387-2746045182 +3336884060-3357139723 +1529922302-1532912060 +812048355-820600359 +3535903629-3546917858 +3793132304-3794479774 +2441870431-2446591046 +790688046-795287265 +1094905232-1100177740 +2745878705-2749992348 +119256353-127273572 +3046258846-3057351205 +1754142948-1755600336 +1439035504-1441512409 +2099760008-2108426979 +2336936249-2337901885 +886155227-897744302 +278389264-304413122 +2261948686-2274345666 +3650645303-3661861270 +574462284-588550773 +1759196520-1782105094 +965026392-968307163 +2946755906-2963417308 +1766330775-1797112785 +1200115116-1225710522 +2080628180-2093783866 +2259186780-2265576012 +3422484974-3431403368 +2617357126-2619542029 +3535424340-3544236729 +1159703397-1178419333 +3695852451-3731387995 +2624409231-2626475102 +2462304649-2486546066 +1991659530-1991878310 +3675781139-3676295005 +3077370804-3098240471 +2410139047-2412323245 +1441379095-1464833739 +4254940654-4257828865 +3134602505-3135787446 +1531285367-1533939508 +1982248547-1989219645 +3717359312-3718050739 +1149793223-1159703395 +1718841131-1723739366 +1338353885-1363179561 +432322947-450369838 +3592044590-3598404106 +2783263665-2802135338 +2743201911-2758731127 +2940668500-2946140977 +3588363275-3594330069 +3675945049-3679197388 +154488705-187446525 +1653195306-1670854086 +2771303647-2772439896 +84146114-84264353 +1593778990-1622000763 +1580746474-1580917737 +801556682-801983712 +2268279290-2282899033 +3429390560-3432646573 +1355690206-1364432183 +3364827834-3370027309 +1343867080-1356033542 +2769747098-2802096717 +2451978746-2499145061 +3181481071-3202130015 +149287453-193454621 +2907925124-2933668261 +3525815495-3531996642 +892781900-902374081 +801983714-808209514 +1205516416-1207518863 +3475944050-3479276890 +1680662691-1693249318 +441188152-451875207 +3866263742-3869203885 +872306827-886155226 +3641638239-3656867109 +1292372277-1314188693 +1062559245-1064950825 +2334198700-2335529918 +1122962410-1136372412 +623323144-625918342 +2425193847-2429793856 +373315052-379611660 +2418007458-2424289401 +2149571480-2150070836 +1991878311-1994706041 +3043381174-3046887777 +497434379-500148281 +1825422529-1838184381 +137450473-139095016 +248808686-249748629 +1989969134-1990676913 +960553017-960915199 +2336374612-2337150925 +3369599561-3390928276 +113852260-145672651 +2986681144-2989530365 +3856382204-3873203604 +1657674792-1663548211 +2650185850-2651060935 +1647983099-1662799191 +1082357088-1112329267 +3793767754-3794336046 +3705877748-3728561957 +2769813898-2772369413 +3794164058-3801441915 +623200755-625407322 +1241966895-1253020214 +450369839-463131291 +2717038617-2723107862 +961267447-962353699 +193454623-196340979 +4253667440-4261704870 +3269563154-3275293388 +1505893371-1506880655 +3873203606-3889412741 +443548825-444733658 +3045753812-3049382630 +732764611-733035245 +961034623-961300670 +1373470559-1373526698 +2860192109-2867276065 +3312623058-3313008029 +3942424007-3951811891 +1197857710-1214225356 +458105388-462489469 +4259123154-4263336824 +960863927-961733781 +44819071-52470556 +957158383-958041099 +2543986743-2554322396 +339721933-346413740 +1010736956-1030771663 +4288781458-4289261456 +3687051286-3722932714 +2420813443-2424860115 +1989395087-1989698527 +3473694511-3476125935 +2408526816-2412196386 +1989398215-1991201331 +1526350090-1542206580 +2394556084-2399639414 +3510330656-3522250181 +137874061-144376880 +4167095310-4177987517 +2785359721-2785427263 +15024863-23531388 +1625174667-1658679299 +974122151-995631685 +1540947566-1554930456 +2424921025-2429636819 +1993822183-1994839237 +1094823818-1097108689 +69796587-71291314 +37126017-49427721 +3793022166-3794100162 +908189684-911496714 +2911211968-2917349047 +1227212686-1234159311 +3776286544-3783635666 +3531996644-3536250992 +3396302214-3406687062 +1476456536-1478818018 +2443497737-2447228620 +962292354-965288690 +1833703443-1843811212 +998277195-1000562480 +883225973-896212798 +2202815121-2215802598 +3557733372-3563107357 +2648035823-2649474134 +2723831559-2734044916 +1714279973-1738575730 +110217-574651 +1398965758-1409470798 +2330603686-2335139291 +1506286657-1511280423 +3365567975-3371386015 +466326205-480223737 +1989219647-1989438488 +3008188882-3010347685 +1070925288-1071665482 +2111554226-2123836945 +2137226110-2138852181 +1081261041-1091870264 +1081552237-1090538414 +2000657198-2037677988 +2718009384-2720142472 +925940762-939052067 +4179143261-4191765704 +3426378774-3430410036 +3676393933-3680167774 +3271833171-3277125583 +274414401-283893852 +3124560226-3128380638 +1208163309-1215074110 +2465798305-2494706753 +3050317115-3058897888 +1302678331-1315210828 +1751224227-1758206846 +931444766-948598982 +151669773-180559543 +255864690-255985990 +1556987318-1563743144 +16294070-23923782 +1415762720-1421421169 +3853344243-3864268114 +1280237454-1286328218 +2944350248-2976813361 +2187770126-2203436268 +3505239916-3517301515 +3232015564-3235367871 +2146211145-2166090499 +910952647-911877073 +1579658725-1581392690 +1237242317-1258610777 +2589766513-2598433041 +3449310840-3449858133 +745819525-755688297 +3776094116-3783478049 +2108426981-2124149170 +3449389881-3462604413 +2301503968-2324628965 +1005263513-1027181473 +1952664131-1969650551 +1285113553-1288652959 +3896408883-3908694324 +1920600328-1921999554 +1025403493-1031247416 +3905769594-3930128244 +1031247417-1047578444 +3885007170-3895219247 +3598377658-3599404192 +1697890477-1697912613 +954538505-957768997 +2816494072-2842728200 +492165035-498202012 +3137181704-3152588209 +1755735260-1759196518 +1371495492-1371550991 +2501923864-2514064340 +305959083-311818120 +4250019192-4275532230 +114168261-116414851 +2447228622-2451978745 +766211517-801556681 +3376445798-3394303381 +3501155911-3526104374 +2548986102-2564634962 +3263667615-3270390046 +1807095399-1824137700 +856041972-859823687 +3887315148-3892355947 +1030764665-1045428052 +638833662-640333593 +2121184882-2129744090 +2881011537-2885878144 +3588560066-3597713320 +3124980377-3134500989 +489214209-512240639 +3760702359-3764383643 +1090166392-1096894006 +917419134-922706929 +1296067761-1309424658 +689572986-696039127 +2660085630-2660431880 +680230992-716886780 +1592087783-1598197492 +1530767294-1575862739 +2082087967-2085220519 +2424541691-2426736024 +113504564-116385542 +1916132714-1932780572 +503684477-512284558 +2615977363-2622859043 +4035141786-4047227590 +1663548212-1680662689 +3047614614-3051657189 +2634680042-2641014306 +2583260376-2591896929 +2645275066-2647436256 +64047546-86026817 +1071039399-1072162085 +2594771897-2599508024 +83962861-84534191 +902374083-941216585 +2586806577-2599448524 +1274245593-1274516893 +4031038177-4040911753 +983068813-998624841 +534906133-573925401 +3329216543-3336884059 +4125892395-4138236492 +3807924665-3812644495 +1774911-2450996 +446418646-455236779 +2877486448-2884177700 +1373832888-1373901196 +370639181-384962937 +12016954-19316517 +3134500991-3134627688 +1373501126-1373590483 +1777703220-1777741597 +3743473590-3769013947 +2353521003-2362936906 +2468617254-2477279185 +78550601-78698869 +1273031112-1274488766 +968052409-969178069 +3907082563-3913084150 +3322437732-3338709909 +970661335-978617986 +2985507999-2990149897 +1499815926-1518480568 +2047086312-2056763544 +3154050192-3178489168 +1544927329-1559460655 +614918489-621719308 +3733606954-3743473589 +1499734003-1505336823 +1765493480-1780907733 +1112329269-1144192156 +1908189573-1916132712 +2978158245-2980295974 +854842773-855564041 +3851762797-3856667050 +2987912828-2988480807 +3845355673-3864117699 +2372563028-2379155071 +4164107384-4175248779 +206495443-209268583 +2893360924-2906330615 +1374122783-1374244946 +1315210829-1323332739 +2819221138-2820241142 +2987725800-2988399994 +3420480297-3426061444 +1745733189-1750260936 +2771579434-2772910814 +1721651362-1731098010 +1200223043-1222602885 +3431337889-3434193062 +2412323247-2441870430 +3756861847-3771488683 +853629069-857835277 +3744664061-3763198907 +1371491558-1371529465 +1932780573-1939156498 +3661861272-3662675926 +2648267077-2650619730 +3366486664-3371903512 +1268371412-1276470615 +2691106038-2691272785 +3227264064-3240740070 +1906133184-1910990608 +3853470102-3865286420 +2646285040-2646358000 +2196926231-2206264598 +4257710901-4257836607 +242078367-255972629 +4198987003-4201086361 +1240990629-1248211769 +2749992349-2760767131 +2787866331-2806708160 +809302575-853629067 +3032053776-3036049062 +2943717702-2946230991 +4288724821-4289568650 +3215397670-3224618461 +1858955725-1859353621 +2083864513-2101037055 +694973182-718973623 +4168983031-4174451494 +2807055496-2816494071 +1055347167-1064190974 +3424907263-3427071583 +859417782-872292650 +1467661058-1474811610 +2393002352-2403005964 +4197417217-4208856131 +3370246481-3375696999 +1373468974-1373569404 +2905152772-2910933373 +1980855826-1983920990 +732863279-733152241 +4285742284-4286129026 +1614476697-1614835826 +2635427600-2644232203 +1470741851-1479153638 +2944130276-2951908714 +4291064131-4293894991 +1990921080-1991701381 +4227850767-4244632336 +1807565528-1814396331 +2361860677-2376637038 +2943119919-2945768965 +2172859679-2221926662 +249198701-250135569 +2652844144-2657371637 +1885639221-1900413603 +1509729634-1512261818 +3004310417-3011080364 +1694482383-1697891607 +4177987519-4212820708 +4161048921-4161074968 +476220543-480675454 +2588894890-2592105515 +2757311298-2758434349 +4050934926-4082396822 +2034604741-2043305856 +2331464398-2333528059 +1066956928-1067355622 +2646313639-2648035821 +2066636902-2067863299 +2332503976-2334659414 +3180110462-3204410296 +577236362-586064251 +256418607-258764997 +2233705634-2248146735 +3716569187-3719939659 +1386717710-1439035502 +1859175593-1859580659 +3708021302-3722129580 +3976120818-4005662251 +304413124-306709976 +1395309937-1427985546 +4226665082-4232713677 +4212820709-4214429692 +1693249319-1711620669 +2499145063-2503398930 +3721989699-3733606952 +1717757397-1721218576 +1127769041-1132781724 +3644972707-3646872069 +2077152015-2084609524 +1990599678-1991511335 +2335139292-2353521001 +4088569210-4091483373 +1642017342-1657864055 +2588719725-2589121881 +2903005844-2913683635 +194715771-196440167 +3963719430-3974518407 +4288320832-4289172749 +3151726457-3165427383 +23507982-23800784 +2895160172-2940456225 +1001177233-1005263511 +43609109-48863103 +1144192157-1157514424 +734439882-765944362 +695965351-719454865 +856803507-869754401 +1890217805-1904089509 +3300131715-3305283163 +1529237006-1529595328 +2753090359-2757523819 +828668586-831203389 +3427619213-3428732628 +2967859507-2976560941 +2329569453-2332265395 +2239885549-2252296728 +1293808207-1320485733 +2604175022-2624108715 +2697882453-2723829703 +2463205201-2470677980 +3888353469-3890883045 +400102191-427084950 +4150245199-4164107383 +1395492363-1406000929 +3675122217-3676808853 +116414852-148746047 +787563761-789069064 +3197100188-3202418404 +1373782716-1373895006 +2617111647-2617819575 +2550216289-2557881293 +1851804917-1852370216 +2617793199-2618721355 +1939113565-1942772474 +1066259539-1066964651 +2536515-2749485 +3851513911-3872830251 +3315330215-3350319238 +1372313956-1373952939 +270099979-278389263 +2861061889-2874958905 +2982764434-2982918860 +1225710523-1232594859 +3080849793-3087237669 +2168507276-2172859677 +2554045929-2558669015 +2715737041-2742164385 +2564405335-2570912208 +3111405671-3131810967 +1881537985-1906133183 +2327518639-2329278606 +1695964017-1700687554 +2325334299-2328665915 +2329084251-2329569451 +2526389631-2574332443 +2716903062-2718451591 +177141073-177775415 +177103338-177124151 +1072162087-1081552236 +3178535948-3199349236 +2293206667-2314675667 +1889288474-1903754822 +4251848410-4278329656 +697896245-706915923 +1811201479-1827334058 +102113146-112076690 +2390223078-2399260655 +829332527-848880205 +3861878449-3866482364 +1213011864-1220748067 +3580711167-3587101215 +1286680169-1311818230 +3608853495-3610981230 +1511277091-1513257838 +3450147668-3459285977 +2780989504-2803855679 +3882846313-3888163900 +941216586-953952178 +2983401144-2988059936 +2624108716-2624926759 +3402309579-3420480295 +3312749262-3314042171 +3399699391-3418732708 +4105670961-4129433645 +4257493527-4284962279 +23923784-47709067 +953952180-957049748 +2876724088-2878697891 +2416003985-2423463911 +740946393-742024905 +1380318986-1386717709 +2026496387-2041982393 +3072950856-3095969673 +196440168-234297438 +3324520138-3350841770 +1184551931-1197857708 +3723507322-3732029196 +1781641387-1785877866 +2407131596-2409544298 +5689429-5741644 +1739110416-1741141505 +2548794765-2558310137 +808209515-836691306 +2657455751-2663837619 +790539346-793059170 +568516293-569131984 +3321930331-3346790026 +472011317-479941460 +857857646-863011064 +4168502125-4170164107 +588550774-597747807 +1637815642-1662350209 +2460793334-2466026338 +958041100-970661333 +2139217624-2146211143 +2539598-2830629 +1266192646-1268371411 +1323332741-1335959162 +1439736912-1446610546 +4061001198-4065392221 +2524105557-2526389630 +2222452808-2225462596 +1388815777-1397555491 +3612936376-3650645302 +3045926276-3065706826 +3574212945-3575594696 +2827277916-2836024368 +1991475869-1991926125 +3505806023-3528702608 +2414724634-2430851599 +3021588078-3028285988 +2574332445-2592271496 +2057264136-2059202053 +3244432520-3248685694 +1712738962-1729844093 +56528833-64047545 +2971719660-2977620581 +3605787690-3611524810 +3851574035-3854062441 +1235784822-1266192644 +3006793176-3021032700 +3900016789-3922138525 +1234159313-1235784821 +455883118-466326203 +1053312381-1063953379 +2820222101-2821175967 +2502044549-2506260381 +568736374-569251939 +1578664897-1579658724 +344106424-350103368 +1590175536-1595299212 +2273779785-2277363906 +3984562197-4010152611 +45721618-54860968 +3394303383-3402309578 +1511624839-1512608254 +3884829071-3890292172 +2038966626-2047086310 +4103290900-4119641469 +3357139725-3360393033 +2780813493-2807055494 +2225462598-2252329658 +2592271497-2604175020 +1049541136-1055392314 +1533973152-1578664895 +3209140396-3244432519 +3135787447-3178535946 +1873694527-1911946735 +3716488307-3717917511 +1863079077-1868159650 +1852620713-1869463034 +2340761-6722844 +4010806326-4011637774 +2335714002-2344955062 +2503398931-2516105578 +4096488349-4097750835 +495702052-499886980 +2633949022-2643879390 +2230563996-2248676097 +1992368509-1995459736 +725466259-734439880 +3284564906-3289305182 +3006621951-3015555807 +2221926663-2224742001 +1807424325-1816026389 +1876686839-1880758503 +2691158517-2691387740 +3757816372-3758051212 +2956964132-2972741344 +2636000153-2638744402 +678819639-679798433 +250063049-250516719 +3855876124-3866454360 +3312438883-3313193146 +82686086-84339480 +1092916631-1107918456 +1843811214-1852620712 +3809172487-3830073502 +2616993454-2620553751 +2682855477-2715737040 +3863648987-3866503080 +1271724277-1275741880 +2384026814-2393286163 +2957501262-2965749150 +4213745292-4214551645 +2556715457-2565699508 +2263615-2555032 +2510926180-2524105555 +2198333368-2201790504 +983311745-991202543 +326387197-344106423 +3087807140-3088895982 +86026819-109305037 +2504533668-2507452669 +1371550992-1377668791 +1656901715-1676675657 +130445224-140364961 +875328099-885585914 +2299489843-2306253705 +3450835271-3481339653 +4014358521-4031038176 +2340311395-2351064022 +2883149064-2887845481 +2259592077-2278614136 +3810542228-3827200634 +3056035363-3068664010 +722584522-723699159 +1735688023-1740818227 +3537763412-3542953759 +2366293314-2375211143 +1411814377-1424672790 +3100999210-3102484531 +4284962281-4294967295 +1446610547-1465468961 +2874958907-2877486447 +1765556195-1793446949 +4218980804-4226442852 +494048500-497170493 +360027343-374159699 +2651399811-2665409613 +1047578446-1052368079 +2362920294-2374232484 +2570748019-2571266639 +3256410480-3277105765 +3771488685-3794388011 +722551086-722999678 +741060508-762846249 +1479919768-1481248209 +614971153-617471673 +2982621961-2982812184 +2087732105-2106406062 +2302394373-2326071906 +886110869-893987869 +864175670-867272025 +2119076394-2126808897 +1051546928-1062419089 +678814708-679604844 +2168305217-2172141567 +2943803911-2945854166 +321232218-329790306 +391378250-412099930 +539629846-568721146 +3794388012-3806424827 +2894304683-2915255653 +856495621-857857645 +2743551156-2751996369 +1024955451-1026100964 +177078688-177123406 +4018256524-4039886263 +3945209398-3956309725 +2364930647-2378530823 +1006976522-1021887240 +3757741995-3757947507 +1421470109-1432888460 +3160832331-3169658872 +177045468-177087638 +1090463009-1104430857 +1274373481-1274578120 +2626475104-2640453818 +3284290551-3288427229 +1981618690-1984277097 +1186456381-1195032668 +5052363-7502553 +1509795877-1512150519 +3579924616-3582548171 +4121363479-4137513284 +1488580398-1503472581 +2423275742-2439608584 +2138662322-2138915998 +1382223606-1410305514 +3832391075-3853706505 +1614422103-1614651523 +3369142704-3373032779 +719454867-725466258 +2084732810-2095200322 +1442897307-1457439380 +2112887248-2129529980 +4023595164-4025287662 +611715160-617013605 +778751841-791194910 +3293566719-3305859750 +1772772441-1797304174 +1589764874-1592539287 +1373791581-1374176540 +1590792815-1594025491 +1981551967-1982435626 +1520347646-1542585100 +3099494317-3115490452 +3098240473-3103804691 +3264851832-3269554326 +766110784-766211515 +2019539430-2044044979 +3266317108-3273234008 +1274283817-1274437178 +2650371073-2672921107 +2672921108-2679629874 +2673449969-2682855475 +765944363-766205817 +3853706506-3859959741 +1508362252-1513253382 +876916046-879636492 +3809955806-3810745183 +1274121584-1274542630 +3157351170-3166046719 +1053524276-1064827079 +3791652757-3800601148 +2842728202-2853639142 +3571512615-3579166854 +679353613-679923926 +3809191752-3810740480 +2817388396-2819591739 +2852317315-2861061888 +4256942395-4260208971 +3501898903-3512880687 +3882475326-3886137014 +1966578885-1968167855 +410700018-415718837 +3806424829-3821851233 +1518480570-1533973151 +3147464447-3158958125 +197786374-207567591 +3535028299-3539195436 +4184714120-4186894005 +448892515-456388417 +671686622-678352726 +1360272787-1363580702 +2164873145-2165892440 +3361616306-3375689123 +3091164847-3093370647 +3297273994-3311056250 +398273343-404652855 +1782105095-1803766701 +1484145894-1503189992 +2160023298-2160172849 +2919583395-2932229908 +2812705686-2830443941 +2855216236-2865262494 +148746049-149287452 +589888575-595456264 +314410823-316970816 +2060986022-2063938184 +1803766703-1825422528 +2128237894-2139217623 +4248957737-4257018408 +3561933398-3574109426 +1614389854-1614749576 +468854062-476024564 +436179755-463764255 +589811734-589875676 +673967863-678814706 +979844884-993353080 +1945908845-1980551520 +1990017551-1992668548 +1252508632-1256783095 +2946230992-2982621959 +3954810178-3972017471 +3396778325-3399315311 +3331661742-3344656790 +3072306192-3077370803 +4093061872-4094625093 +2876543933-2878230248 +2854310965-2859128779 +4193316980-4200095285 +730205666-732782756 +3676211467-3676732582 +666890880-674578243 +1371568734-1380318984 +4184744194-4187112660 +1481248211-1499734002 +3379867668-3385527932 +1622428665-1625174665 +3671900758-3678171048 +3705951043-3716692751 +1465468963-1479919767 +1580610051-1583129310 +350103370-365345541 +3900102077-3919890024 +2940456227-2945966226 +3248685696-3284290550 +544295457-564157394 +4016705659-4021147057 +791731732-797225629 +1165689597-1184551930 +3289305184-3312438882 +4097750837-4102130426 +4055841302-4077041304 +3441155355-3450835270 +3314042173-3333554945 +597747809-623200754 +356234097-366220597 +2381045649-2408455595 +4047227592-4049208360 +4092327831-4093008849 +3986217544-4010716485 +3587101217-3589409982 +3939796675-3976120816 +1335959163-1365648715 +3809562980-3810806981 +1374160507-1375189297 +1229723962-1229853859 +2978027850-2978555872 +1081232290-1096685438 +3431403369-3441155353 +3058481098-3072306190 +3615995822-3647806423 +626772256-671686621 +1922970278-1932303880 +687812741-696977728 +3664395391-3676520369 +2073554869-2099760007 +512240640-534906131 +47709068-56528831 +255985991-270099977 +3481339655-3501155910 +2238475796-2249793376 +3866035083-3867269474 +4093117795-4094756619 +4285929403-4287400825 +702714634-707275982 +3036049064-3058481097 +1027080396-1032733050 +113815262-115324511 +2256577067-2275122653 +1990217023-1991256560 +109305038-113504562 +978617987-1000518126 +4057509129-4071389442 +3739975721-3747173973 +320182613-320260227 +1770166-1994691 +291087466-296873313 +4086243810-4096488348 +1276470617-1302918078 +4009439486-4012738003 +4229206868-4234285011 +50143427-53071093 +404422891-410359316 +4161013486-4161053283 +911138009-929609461 +689609396-696731723 +2252329659-2256577065 +613133080-613942155 +4795688-12016953 +641672798-650081964 +389776265-420161914 +3625922134-3642274972 +1846384495-1862435820 +2275122654-2286941521 +4005662252-4011759888 +1579087992-1581111352 +574652-1770165 +1442180635-1450176908 +2760767133-2771395260 +1928232572-1932533591 +102995855-104909244 +4049179426-4050691624 +2830630-3651339 +3552827772-3568200782 +2149613227-2163021264 +1355394428-1371491556 +1697279405-1703102679 +2056763545-2073554867 +3935325191-3944187216 +3553082925-3579924615 +471239627-477134321 +3651340-4795687 +336457769-347991249 +93183635-111293337 +2192128388-2196145589 +2584811687-2598361179 +2772743660-2798530311 +966574237-968633571 +4234775226-4245296919 +3662498499-3663349534 +1373549652-1374239894 +58302860-63670232 +1942772476-1980855825 +3367790115-3376760130 +153092723-163571711 +729975675-730335988 +2192513622-2204700032 +809609217-841628900 +1180032684-1187000735 +1179227554-1195640753 +4232727143-4234293540 +1127122996-1154171178 +314709697-321232216 +324796849-347951368 +1095126621-1109642108 +384962939-400102190 +363929652-366175319 +3821851234-3832391073 +338713138-348077886 +817486506-837487497 +1051940232-1067333023 +19243172-19587047 +257512323-261464746 +1753791137-1753975241 +202493249-230688701 +1579363284-1580767164 +2763246325-2780813492 +2242297310-2249800231 +1995459738-2019539429 +573925402-574462282 +3673851405-3681451655 +3423327301-3428356692 +3681451657-3695852450 +3717161710-3718982299 +2043127586-2043244031 +2888999958-2894304682 +2061236903-2067109739 +2643879391-2646512593 +1139540259-1146292375 +3544236730-3552827770 +2287385837-2325334298 +3598404107-3612936374 +3623885184-3631095478 +1752497514-1756572770 +2817718245-2824409717 +679569338-680230991 +4102130427-4150245197 +1869463036-1881600179 +286732642-289325518 +2995454654-3032053775 +1274816430-1274830828 +4008677258-4014358519 +248491486-248842325 +1622000764-1625125474 +1165689487-1187305806 +3937241402-3968405869 +4050691625-4086243808 +3663349535-3676933438 +2982918861-2995454652 +1372603515-1379417540 +2408455596-2411739453 +201820937-227275418 +1753934804-1754073983 +2280075243-2287385835 +2905919817-2917493149 +2757562598-2759204124 +1444583282-1458937548 +1699259773-1707790200 +1579284365-1579540410 +624710045-626772254 +2971742099-2980188298 +3895219248-3896408881 +1637216769-1663878490 +1606776283-1612157133 +1527331165-1569579671 +1468822607-1477434547 +3930477156-3939796674 +4214551647-4234775225 +1469208064-1469259449 +4245296921-4257493526 +3930128245-3930477154 diff --git a/2016/aoc20/src/main.rs b/2016/aoc20/src/main.rs new file mode 100644 index 0000000..ee14583 --- /dev/null +++ b/2016/aoc20/src/main.rs @@ -0,0 +1,114 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::u32; + +#[derive(Debug)] +struct IpRange { + start: u32, + end: u32 +} + +impl IpRange { + fn new(start: u32, end: u32) -> IpRange { + IpRange { + start: start, + end: end + } + } + + fn contains(&self, other: u32) -> bool { + self.start <= other && other <= self.end + } + + fn try_combine(&self, other: &IpRange) -> Option<IpRange> { + if self.contains(other.start) && self.contains(other.end) { + Some(IpRange::new(self.start, self.end)) + } + else if other.contains(self.start) && other.contains(self.end) { + Some(IpRange::new(other.start, other.end)) + } + else if self.contains(other.start) && other.contains(self.end) { + Some(IpRange::new(self.start, other.end)) + } + else if other.contains(self.start) && self.contains(other.end) { + Some(IpRange::new(other.start, self.end)) + } + else { + None + } + } +} + +fn main() { + let mut ranges = read_file(); + optimize_ranges(&mut ranges); + + let mut allowed = Vec::new(); + + // current will be in the u32 range while it's in the loop, but + // needs to be a u64 to pass u32::MAX. Otherwise it will just + // overflow and run forever. + let mut current: u64 = 0; + while current <= u32::MAX as u64 { + match ranges.iter().find(|range| range.contains(current as u32)) { + Some(blacklisting_range) => { + current = blacklisting_range.end as u64 + 1; + }, + None => { + allowed.push(current as u32); + current += 1; + } + } + } + + let min_not_in_range = allowed[0]; + let allowed_count = allowed.len(); + + println!("Min not in any range: {}", min_not_in_range); + println!("Allowed count: {}", allowed_count); +} + +fn read_file() -> Vec<IpRange> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .filter_map(|line| { + let line = line.unwrap(); + let mut split = line.split('-'); + let start = split.next(); + let end = split.next(); + match (start, end) { + (Some(start), Some(end)) => Some(IpRange { + start: start.parse().unwrap(), + end: end.parse().unwrap() + }), + _ => None + } + }) + .collect() +} + +fn optimize_ranges(ranges: &mut Vec<IpRange>) { + let mut before_count = ranges.len(); + let mut after_count = 0; + while before_count != after_count { + before_count = ranges.len(); + ranges.sort_by_key(|r| r.start); + + let mut i = 0; + while i < ranges.len()-1 { + match ranges[i].try_combine(&ranges[i+1]) { + Some(combined) => { + ranges[i] = combined; + ranges.remove(i+1); + }, + None => {} + } + i += 1; + } + + after_count = ranges.len(); + + println!("Number of ranges {} => {}", before_count, after_count); + } +} diff --git a/2016/aoc21/Cargo.lock b/2016/aoc21/Cargo.lock new file mode 100644 index 0000000..9a1075b --- /dev/null +++ b/2016/aoc21/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc21" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc21/Cargo.toml b/2016/aoc21/Cargo.toml new file mode 100644 index 0000000..bc0d468 --- /dev/null +++ b/2016/aoc21/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc21" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc21/input.txt b/2016/aoc21/input.txt new file mode 100644 index 0000000..ebd7d52 --- /dev/null +++ b/2016/aoc21/input.txt @@ -0,0 +1,100 @@ +rotate based on position of letter d +move position 1 to position 6 +swap position 3 with position 6 +rotate based on position of letter c +swap position 0 with position 1 +rotate right 5 steps +rotate left 3 steps +rotate based on position of letter b +swap position 0 with position 2 +rotate based on position of letter g +rotate left 0 steps +reverse positions 0 through 3 +rotate based on position of letter a +rotate based on position of letter h +rotate based on position of letter a +rotate based on position of letter g +rotate left 5 steps +move position 3 to position 7 +rotate right 5 steps +rotate based on position of letter f +rotate right 7 steps +rotate based on position of letter a +rotate right 6 steps +rotate based on position of letter a +swap letter c with letter f +reverse positions 2 through 6 +rotate left 1 step +reverse positions 3 through 5 +rotate based on position of letter f +swap position 6 with position 5 +swap letter h with letter e +move position 1 to position 3 +swap letter c with letter h +reverse positions 4 through 7 +swap letter f with letter h +rotate based on position of letter f +rotate based on position of letter g +reverse positions 3 through 4 +rotate left 7 steps +swap letter h with letter a +rotate based on position of letter e +rotate based on position of letter f +rotate based on position of letter g +move position 5 to position 0 +rotate based on position of letter c +reverse positions 3 through 6 +rotate right 4 steps +move position 1 to position 2 +reverse positions 3 through 6 +swap letter g with letter a +rotate based on position of letter d +rotate based on position of letter a +swap position 0 with position 7 +rotate left 7 steps +rotate right 2 steps +rotate right 6 steps +rotate based on position of letter b +rotate right 2 steps +swap position 7 with position 4 +rotate left 4 steps +rotate left 3 steps +swap position 2 with position 7 +move position 5 to position 4 +rotate right 3 steps +rotate based on position of letter g +move position 1 to position 2 +swap position 7 with position 0 +move position 4 to position 6 +move position 3 to position 0 +rotate based on position of letter f +swap letter g with letter d +swap position 1 with position 5 +reverse positions 0 through 2 +swap position 7 with position 3 +rotate based on position of letter g +swap letter c with letter a +rotate based on position of letter g +reverse positions 3 through 5 +move position 6 to position 3 +swap letter b with letter e +reverse positions 5 through 6 +move position 6 to position 7 +swap letter a with letter e +swap position 6 with position 2 +move position 4 to position 5 +rotate left 5 steps +swap letter a with letter d +swap letter e with letter g +swap position 3 with position 7 +reverse positions 0 through 5 +swap position 5 with position 7 +swap position 1 with position 7 +swap position 1 with position 7 +rotate right 7 steps +swap letter f with letter a +reverse positions 0 through 7 +rotate based on position of letter d +reverse positions 2 through 4 +swap position 7 with position 1 +swap letter a with letter h diff --git a/2016/aoc21/src/main.rs b/2016/aoc21/src/main.rs new file mode 100644 index 0000000..1366f1e --- /dev/null +++ b/2016/aoc21/src/main.rs @@ -0,0 +1,233 @@ +extern crate regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::collections::VecDeque; + +use regex::Regex; + +fn main() { + let password = "abcdefgh".to_string(); + let program = read_file(); + let scrambled = scramble_password(password, &program); + println!("Scrambled password is {}", scrambled); + let unscrambled = unscramble_password(scrambled, &program); + println!("Which unscrambles to {}", unscrambled); + + let other_scrambled = "fbgdceah".to_string(); + let other_unscrambled = unscramble_password(other_scrambled, &program); + + println!("Decrypted easter bunny password is {}", other_unscrambled); +} + +fn read_file() -> Vec<String> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} + +fn scramble_password(password: String, program: &Vec<String>) -> String { + let mut pass = password.chars().collect::<VecDeque<_>>(); + + let instructions = scramble_instruction_set(); + + for line in program { + for &(ref reg, ref func) in &instructions { + let captures = reg.captures(line.as_ref()); + if captures.is_some() { + func(&mut pass, captures.unwrap()); + } + } + } + + pass.iter().cloned().collect() +} + +fn unscramble_password(password: String, program: &Vec<String>) -> String { + let mut pass = password.chars().collect::<VecDeque<_>>(); + + let instructions = unscramble_instruction_set(); + + let mut backwards_program = program.clone(); + backwards_program.reverse(); + for line in backwards_program { + for &(ref reg, ref func) in &instructions { + let captures = reg.captures(line.as_ref()); + if captures.is_some() { + func(&mut pass, captures.unwrap()); + } + } + } + + pass.iter().cloned().collect() +} + +fn scramble_instruction_set() -> Vec<(Regex, fn(&mut VecDeque<char>, regex::Captures))> { + let mut instructions : Vec<(Regex, fn(&mut VecDeque<char>, regex::Captures))> = Vec::new(); + instructions.push((Regex::new(r"swap position (\d+) with position (\d+)").unwrap(), swap_pos)); + instructions.push((Regex::new(r"swap letter ([a-z]) with letter ([a-z])").unwrap(), swap_let)); + instructions.push((Regex::new(r"rotate left (\d+) step").unwrap(), rotate_left)); + instructions.push((Regex::new(r"rotate right (\d+) step").unwrap(), rotate_right)); + instructions.push((Regex::new(r"rotate based on position of letter ([a-z])").unwrap(), rotate_pos)); + instructions.push((Regex::new(r"reverse positions (\d+) through (\d+)").unwrap(), reverse_sub)); + instructions.push((Regex::new(r"move position (\d+) to position (\d+)").unwrap(), move_pos)); + + instructions +} + +fn unscramble_instruction_set() -> Vec<(Regex, fn(&mut VecDeque<char>, regex::Captures))> { + let mut instructions : Vec<(Regex, fn(&mut VecDeque<char>, regex::Captures))> = Vec::new(); + instructions.push((Regex::new(r"swap position (\d+) with position (\d+)").unwrap(), swap_pos)); + instructions.push((Regex::new(r"swap letter ([a-z]) with letter ([a-z])").unwrap(), swap_let)); + instructions.push((Regex::new(r"rotate left (\d+) step").unwrap(), rotate_right)); + instructions.push((Regex::new(r"rotate right (\d+) step").unwrap(), rotate_left)); + instructions.push((Regex::new(r"rotate based on position of letter ([a-z])").unwrap(), undo_rotate_pos)); + instructions.push((Regex::new(r"reverse positions (\d+) through (\d+)").unwrap(), reverse_sub)); + instructions.push((Regex::new(r"move position (\d+) to position (\d+)").unwrap(), undo_move_pos)); + + instructions +} + +fn swap_pos(pass: &mut VecDeque<char>, cap: regex::Captures) { + let src = cap.at(1).unwrap().parse::<usize>().unwrap(); + let dest = cap.at(2).unwrap().parse::<usize>().unwrap(); + pass.swap(src, dest); +} + +fn swap_let(pass: &mut VecDeque<char>, cap: regex::Captures) { + let src = cap.at(1).unwrap().chars().next().unwrap(); + let dest = cap.at(2).unwrap().chars().next().unwrap(); + let src_position = pass.iter().position(|&c| c == src); + let dest_position = pass.iter().position(|&c| c == dest); + match (src_position, dest_position) { + (Some(src_pos), Some(dest_pos)) => { + pass.swap(src_pos, dest_pos); + }, + _ => {} + }; +} + +fn rotate_left(pass: &mut VecDeque<char>, cap: regex::Captures) { + let steps = cap.at(1).unwrap().parse::<usize>().unwrap(); + for _ in 0..steps { + let c = pass.pop_front().unwrap(); + pass.push_back(c); + } +} + +fn rotate_right(pass: &mut VecDeque<char>, cap: regex::Captures) { + let steps = cap.at(1).unwrap().parse::<usize>().unwrap(); + for _ in 0..steps { + let c = pass.pop_back().unwrap(); + pass.push_front(c); + } +} + +fn rotate_pos(pass: &mut VecDeque<char>, cap: regex::Captures) { + let letter = cap.at(1).unwrap().chars().next().unwrap(); + let pos = pass.iter().position(|&c| c == letter).unwrap(); + let steps = 1 + pos + if pos >=4 { 1 } else { 0 }; + for _ in 0..steps { + let c = pass.pop_back().unwrap(); + pass.push_front(c); + } +} + +fn move_pos(pass: &mut VecDeque<char>, cap: regex::Captures) { + let src = cap.at(1).unwrap().parse::<usize>().unwrap(); + let dest = cap.at(2).unwrap().parse::<usize>().unwrap(); + let c = pass.remove(src).unwrap(); + pass.insert(dest, c); +} + +fn reverse_sub(pass: &mut VecDeque<char>, cap: regex::Captures) { + let mut start = cap.at(1).unwrap().parse::<usize>().unwrap(); + let mut end = cap.at(2).unwrap().parse::<usize>().unwrap(); + while start < end { + pass.swap(start, end); + start += 1; + end -= 1; + } +} + +fn undo_rotate_pos(pass: &mut VecDeque<char>, cap: regex::Captures) { + let letter = cap.at(1).unwrap().chars().next().unwrap(); + let dest_pos = pass.iter().position(|&c| c == letter).unwrap(); + let mut pos = dest_pos; + + loop { + let c = pass.pop_front().unwrap(); + pass.push_back(c); + pos -= 1; + let steps = 1 + pos + if pos >=4 { 1 } else { 0 }; + if (pos + steps) % pass.len() == dest_pos { + break; + } + } +} + +fn undo_move_pos(pass: &mut VecDeque<char>, cap: regex::Captures) { + let src = cap.at(1).unwrap().parse::<usize>().unwrap(); + let dest = cap.at(2).unwrap().parse::<usize>().unwrap(); + let c = pass.remove(dest).unwrap(); + pass.insert(src, c); +} + +#[test] +fn swap_pos_example() { + let instructions = vec!("swap position 4 with position 0".to_string()); + let password = "abcde".to_string(); + assert_eq!("ebcda".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn swap_let_example() { + let instructions = vec!("swap letter d with letter b".to_string()); + let password = "ebcda".to_string(); + assert_eq!("edcba".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn reverse_example() { + let instructions = vec!("reverse positions 0 through 4".to_string()); + let password = "edcba".to_string(); + assert_eq!("abcde".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn rotate_left_example() { + let instructions = vec!("rotate left 1 step".to_string()); + let password = "abcde".to_string(); + assert_eq!("bcdea".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn move_example() { + let instructions = vec!("move position 3 to position 0".to_string()); + let password = "bdeac".to_string(); + assert_eq!("abdec".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn rotate_pos_example_1() { + let instructions = vec!("rotate based on position of letter b".to_string()); + let password = "abdec".to_string(); + assert_eq!("ecabd".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn rotate_pos_example_2() { + let instructions = vec!("rotate based on position of letter d".to_string()); + let password = "ecabd".to_string(); + assert_eq!("decab".to_string(), scramble_password(password, instructions)); +} + +#[test] +fn rotate_right_example() { + let instructions = vec!("rotate right 2 steps".to_string()); + let password = "decab".to_string(); + assert_eq!("abdec".to_string(), scramble_password(password, instructions)); +} diff --git a/2016/aoc22/Cargo.lock b/2016/aoc22/Cargo.lock new file mode 100644 index 0000000..81a7213 --- /dev/null +++ b/2016/aoc22/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc22" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc22/Cargo.toml b/2016/aoc22/Cargo.toml new file mode 100644 index 0000000..074ccd5 --- /dev/null +++ b/2016/aoc22/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc22" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc22/input.txt b/2016/aoc22/input.txt new file mode 100644 index 0000000..08e9843 --- /dev/null +++ b/2016/aoc22/input.txt @@ -0,0 +1,1017 @@ +root@ebhq-gridcenter# df -h +Filesystem Size Used Avail Use% +/dev/grid/node-x0-y0 89T 65T 24T 73% +/dev/grid/node-x0-y1 92T 64T 28T 69% +/dev/grid/node-x0-y2 85T 70T 15T 82% +/dev/grid/node-x0-y3 90T 64T 26T 71% +/dev/grid/node-x0-y4 86T 72T 14T 83% +/dev/grid/node-x0-y5 90T 68T 22T 75% +/dev/grid/node-x0-y6 94T 64T 30T 68% +/dev/grid/node-x0-y7 87T 72T 15T 82% +/dev/grid/node-x0-y8 90T 65T 25T 72% +/dev/grid/node-x0-y9 90T 65T 25T 72% +/dev/grid/node-x0-y10 89T 66T 23T 74% +/dev/grid/node-x0-y11 94T 70T 24T 74% +/dev/grid/node-x0-y12 90T 65T 25T 72% +/dev/grid/node-x0-y13 91T 72T 19T 79% +/dev/grid/node-x0-y14 85T 70T 15T 82% +/dev/grid/node-x0-y15 89T 70T 19T 78% +/dev/grid/node-x0-y16 90T 66T 24T 73% +/dev/grid/node-x0-y17 86T 64T 22T 74% +/dev/grid/node-x0-y18 88T 65T 23T 73% +/dev/grid/node-x0-y19 85T 68T 17T 80% +/dev/grid/node-x0-y20 93T 70T 23T 75% +/dev/grid/node-x0-y21 89T 64T 25T 71% +/dev/grid/node-x0-y22 87T 67T 20T 77% +/dev/grid/node-x0-y23 90T 73T 17T 81% +/dev/grid/node-x0-y24 92T 68T 24T 73% +/dev/grid/node-x0-y25 88T 69T 19T 78% +/dev/grid/node-x0-y26 88T 69T 19T 78% +/dev/grid/node-x0-y27 86T 72T 14T 83% +/dev/grid/node-x0-y28 92T 71T 21T 77% +/dev/grid/node-x1-y0 89T 73T 16T 82% +/dev/grid/node-x1-y1 89T 68T 21T 76% +/dev/grid/node-x1-y2 94T 70T 24T 74% +/dev/grid/node-x1-y3 90T 68T 22T 75% +/dev/grid/node-x1-y4 89T 67T 22T 75% +/dev/grid/node-x1-y5 90T 70T 20T 77% +/dev/grid/node-x1-y6 92T 71T 21T 77% +/dev/grid/node-x1-y7 92T 71T 21T 77% +/dev/grid/node-x1-y8 86T 73T 13T 84% +/dev/grid/node-x1-y9 87T 69T 18T 79% +/dev/grid/node-x1-y10 87T 66T 21T 75% +/dev/grid/node-x1-y11 85T 72T 13T 84% +/dev/grid/node-x1-y12 90T 69T 21T 76% +/dev/grid/node-x1-y13 89T 67T 22T 75% +/dev/grid/node-x1-y14 90T 65T 25T 72% +/dev/grid/node-x1-y15 94T 65T 29T 69% +/dev/grid/node-x1-y16 85T 70T 15T 82% +/dev/grid/node-x1-y17 93T 64T 29T 68% +/dev/grid/node-x1-y18 87T 68T 19T 78% +/dev/grid/node-x1-y19 85T 66T 19T 77% +/dev/grid/node-x1-y20 90T 72T 18T 80% +/dev/grid/node-x1-y21 89T 73T 16T 82% +/dev/grid/node-x1-y22 90T 65T 25T 72% +/dev/grid/node-x1-y23 91T 72T 19T 79% +/dev/grid/node-x1-y24 87T 70T 17T 80% +/dev/grid/node-x1-y25 91T 64T 27T 70% +/dev/grid/node-x1-y26 90T 64T 26T 71% +/dev/grid/node-x1-y27 93T 69T 24T 74% +/dev/grid/node-x1-y28 89T 65T 24T 73% +/dev/grid/node-x2-y0 89T 72T 17T 80% +/dev/grid/node-x2-y1 92T 69T 23T 75% +/dev/grid/node-x2-y2 91T 65T 26T 71% +/dev/grid/node-x2-y3 86T 73T 13T 84% +/dev/grid/node-x2-y4 90T 69T 21T 76% +/dev/grid/node-x2-y5 86T 68T 18T 79% +/dev/grid/node-x2-y6 91T 70T 21T 76% +/dev/grid/node-x2-y7 86T 64T 22T 74% +/dev/grid/node-x2-y8 88T 65T 23T 73% +/dev/grid/node-x2-y9 94T 73T 21T 77% +/dev/grid/node-x2-y10 89T 71T 18T 79% +/dev/grid/node-x2-y11 88T 64T 24T 72% +/dev/grid/node-x2-y12 92T 71T 21T 77% +/dev/grid/node-x2-y13 86T 69T 17T 80% +/dev/grid/node-x2-y14 87T 69T 18T 79% +/dev/grid/node-x2-y15 93T 71T 22T 76% +/dev/grid/node-x2-y16 91T 65T 26T 71% +/dev/grid/node-x2-y17 93T 65T 28T 69% +/dev/grid/node-x2-y18 86T 69T 17T 80% +/dev/grid/node-x2-y19 87T 69T 18T 79% +/dev/grid/node-x2-y20 86T 72T 14T 83% +/dev/grid/node-x2-y21 86T 73T 13T 84% +/dev/grid/node-x2-y22 505T 499T 6T 98% +/dev/grid/node-x2-y23 89T 65T 24T 73% +/dev/grid/node-x2-y24 92T 64T 28T 69% +/dev/grid/node-x2-y25 94T 64T 30T 68% +/dev/grid/node-x2-y26 87T 73T 14T 83% +/dev/grid/node-x2-y27 87T 69T 18T 79% +/dev/grid/node-x2-y28 94T 71T 23T 75% +/dev/grid/node-x3-y0 88T 66T 22T 75% +/dev/grid/node-x3-y1 91T 69T 22T 75% +/dev/grid/node-x3-y2 91T 69T 22T 75% +/dev/grid/node-x3-y3 86T 67T 19T 77% +/dev/grid/node-x3-y4 90T 64T 26T 71% +/dev/grid/node-x3-y5 89T 72T 17T 80% +/dev/grid/node-x3-y6 87T 66T 21T 75% +/dev/grid/node-x3-y7 90T 68T 22T 75% +/dev/grid/node-x3-y8 91T 66T 25T 72% +/dev/grid/node-x3-y9 89T 64T 25T 71% +/dev/grid/node-x3-y10 92T 67T 25T 72% +/dev/grid/node-x3-y11 86T 64T 22T 74% +/dev/grid/node-x3-y12 94T 65T 29T 69% +/dev/grid/node-x3-y13 91T 70T 21T 76% +/dev/grid/node-x3-y14 89T 72T 17T 80% +/dev/grid/node-x3-y15 89T 64T 25T 71% +/dev/grid/node-x3-y16 85T 73T 12T 85% +/dev/grid/node-x3-y17 89T 65T 24T 73% +/dev/grid/node-x3-y18 88T 71T 17T 80% +/dev/grid/node-x3-y19 89T 69T 20T 77% +/dev/grid/node-x3-y20 91T 68T 23T 74% +/dev/grid/node-x3-y21 90T 72T 18T 80% +/dev/grid/node-x3-y22 505T 498T 7T 98% +/dev/grid/node-x3-y23 85T 65T 20T 76% +/dev/grid/node-x3-y24 94T 72T 22T 76% +/dev/grid/node-x3-y25 90T 68T 22T 75% +/dev/grid/node-x3-y26 90T 65T 25T 72% +/dev/grid/node-x3-y27 87T 66T 21T 75% +/dev/grid/node-x3-y28 90T 66T 24T 73% +/dev/grid/node-x4-y0 86T 67T 19T 77% +/dev/grid/node-x4-y1 92T 67T 25T 72% +/dev/grid/node-x4-y2 91T 71T 20T 78% +/dev/grid/node-x4-y3 94T 69T 25T 73% +/dev/grid/node-x4-y4 90T 64T 26T 71% +/dev/grid/node-x4-y5 93T 70T 23T 75% +/dev/grid/node-x4-y6 93T 67T 26T 72% +/dev/grid/node-x4-y7 91T 71T 20T 78% +/dev/grid/node-x4-y8 90T 70T 20T 77% +/dev/grid/node-x4-y9 89T 66T 23T 74% +/dev/grid/node-x4-y10 94T 64T 30T 68% +/dev/grid/node-x4-y11 94T 70T 24T 74% +/dev/grid/node-x4-y12 89T 69T 20T 77% +/dev/grid/node-x4-y13 90T 72T 18T 80% +/dev/grid/node-x4-y14 88T 69T 19T 78% +/dev/grid/node-x4-y15 85T 64T 21T 75% +/dev/grid/node-x4-y16 86T 71T 15T 82% +/dev/grid/node-x4-y17 90T 65T 25T 72% +/dev/grid/node-x4-y18 88T 65T 23T 73% +/dev/grid/node-x4-y19 91T 71T 20T 78% +/dev/grid/node-x4-y20 94T 71T 23T 75% +/dev/grid/node-x4-y21 91T 65T 26T 71% +/dev/grid/node-x4-y22 510T 491T 19T 96% +/dev/grid/node-x4-y23 86T 72T 14T 83% +/dev/grid/node-x4-y24 91T 69T 22T 75% +/dev/grid/node-x4-y25 93T 64T 29T 68% +/dev/grid/node-x4-y26 92T 65T 27T 70% +/dev/grid/node-x4-y27 91T 67T 24T 73% +/dev/grid/node-x4-y28 93T 66T 27T 70% +/dev/grid/node-x5-y0 85T 70T 15T 82% +/dev/grid/node-x5-y1 90T 71T 19T 78% +/dev/grid/node-x5-y2 94T 68T 26T 72% +/dev/grid/node-x5-y3 88T 73T 15T 82% +/dev/grid/node-x5-y4 85T 71T 14T 83% +/dev/grid/node-x5-y5 92T 67T 25T 72% +/dev/grid/node-x5-y6 92T 68T 24T 73% +/dev/grid/node-x5-y7 86T 69T 17T 80% +/dev/grid/node-x5-y8 90T 64T 26T 71% +/dev/grid/node-x5-y9 88T 71T 17T 80% +/dev/grid/node-x5-y10 91T 65T 26T 71% +/dev/grid/node-x5-y11 92T 65T 27T 70% +/dev/grid/node-x5-y12 87T 66T 21T 75% +/dev/grid/node-x5-y13 87T 71T 16T 81% +/dev/grid/node-x5-y14 90T 67T 23T 74% +/dev/grid/node-x5-y15 92T 70T 22T 76% +/dev/grid/node-x5-y16 94T 66T 28T 70% +/dev/grid/node-x5-y17 88T 68T 20T 77% +/dev/grid/node-x5-y18 86T 69T 17T 80% +/dev/grid/node-x5-y19 94T 66T 28T 70% +/dev/grid/node-x5-y20 90T 69T 21T 76% +/dev/grid/node-x5-y21 88T 71T 17T 80% +/dev/grid/node-x5-y22 509T 496T 13T 97% +/dev/grid/node-x5-y23 87T 67T 20T 77% +/dev/grid/node-x5-y24 91T 64T 27T 70% +/dev/grid/node-x5-y25 93T 69T 24T 74% +/dev/grid/node-x5-y26 93T 73T 20T 78% +/dev/grid/node-x5-y27 88T 70T 18T 79% +/dev/grid/node-x5-y28 87T 73T 14T 83% +/dev/grid/node-x6-y0 87T 65T 22T 74% +/dev/grid/node-x6-y1 85T 64T 21T 75% +/dev/grid/node-x6-y2 91T 72T 19T 79% +/dev/grid/node-x6-y3 90T 64T 26T 71% +/dev/grid/node-x6-y4 93T 66T 27T 70% +/dev/grid/node-x6-y5 93T 67T 26T 72% +/dev/grid/node-x6-y6 89T 64T 25T 71% +/dev/grid/node-x6-y7 89T 64T 25T 71% +/dev/grid/node-x6-y8 86T 72T 14T 83% +/dev/grid/node-x6-y9 87T 68T 19T 78% +/dev/grid/node-x6-y10 94T 73T 21T 77% +/dev/grid/node-x6-y11 88T 65T 23T 73% +/dev/grid/node-x6-y12 88T 70T 18T 79% +/dev/grid/node-x6-y13 93T 66T 27T 70% +/dev/grid/node-x6-y14 87T 68T 19T 78% +/dev/grid/node-x6-y15 87T 68T 19T 78% +/dev/grid/node-x6-y16 87T 73T 14T 83% +/dev/grid/node-x6-y17 87T 70T 17T 80% +/dev/grid/node-x6-y18 87T 69T 18T 79% +/dev/grid/node-x6-y19 85T 67T 18T 78% +/dev/grid/node-x6-y20 91T 71T 20T 78% +/dev/grid/node-x6-y21 86T 72T 14T 83% +/dev/grid/node-x6-y22 503T 497T 6T 98% +/dev/grid/node-x6-y23 93T 72T 21T 77% +/dev/grid/node-x6-y24 91T 72T 19T 79% +/dev/grid/node-x6-y25 85T 67T 18T 78% +/dev/grid/node-x6-y26 86T 65T 21T 75% +/dev/grid/node-x6-y27 92T 67T 25T 72% +/dev/grid/node-x6-y28 87T 72T 15T 82% +/dev/grid/node-x7-y0 88T 67T 21T 76% +/dev/grid/node-x7-y1 85T 64T 21T 75% +/dev/grid/node-x7-y2 90T 67T 23T 74% +/dev/grid/node-x7-y3 87T 65T 22T 74% +/dev/grid/node-x7-y4 92T 70T 22T 76% +/dev/grid/node-x7-y5 89T 67T 22T 75% +/dev/grid/node-x7-y6 90T 65T 25T 72% +/dev/grid/node-x7-y7 88T 66T 22T 75% +/dev/grid/node-x7-y8 88T 65T 23T 73% +/dev/grid/node-x7-y9 93T 72T 21T 77% +/dev/grid/node-x7-y10 91T 70T 21T 76% +/dev/grid/node-x7-y11 90T 70T 20T 77% +/dev/grid/node-x7-y12 89T 68T 21T 76% +/dev/grid/node-x7-y13 91T 65T 26T 71% +/dev/grid/node-x7-y14 90T 65T 25T 72% +/dev/grid/node-x7-y15 85T 65T 20T 76% +/dev/grid/node-x7-y16 91T 65T 26T 71% +/dev/grid/node-x7-y17 89T 72T 17T 80% +/dev/grid/node-x7-y18 88T 65T 23T 73% +/dev/grid/node-x7-y19 94T 72T 22T 76% +/dev/grid/node-x7-y20 85T 73T 12T 85% +/dev/grid/node-x7-y21 85T 68T 17T 80% +/dev/grid/node-x7-y22 507T 497T 10T 98% +/dev/grid/node-x7-y23 91T 69T 22T 75% +/dev/grid/node-x7-y24 93T 68T 25T 73% +/dev/grid/node-x7-y25 90T 72T 18T 80% +/dev/grid/node-x7-y26 91T 70T 21T 76% +/dev/grid/node-x7-y27 93T 65T 28T 69% +/dev/grid/node-x7-y28 91T 64T 27T 70% +/dev/grid/node-x8-y0 86T 71T 15T 82% +/dev/grid/node-x8-y1 88T 69T 19T 78% +/dev/grid/node-x8-y2 90T 64T 26T 71% +/dev/grid/node-x8-y3 92T 67T 25T 72% +/dev/grid/node-x8-y4 86T 71T 15T 82% +/dev/grid/node-x8-y5 88T 68T 20T 77% +/dev/grid/node-x8-y6 90T 71T 19T 78% +/dev/grid/node-x8-y7 86T 70T 16T 81% +/dev/grid/node-x8-y8 87T 72T 15T 82% +/dev/grid/node-x8-y9 93T 67T 26T 72% +/dev/grid/node-x8-y10 93T 65T 28T 69% +/dev/grid/node-x8-y11 94T 66T 28T 70% +/dev/grid/node-x8-y12 92T 70T 22T 76% +/dev/grid/node-x8-y13 91T 68T 23T 74% +/dev/grid/node-x8-y14 93T 72T 21T 77% +/dev/grid/node-x8-y15 90T 71T 19T 78% +/dev/grid/node-x8-y16 87T 73T 14T 83% +/dev/grid/node-x8-y17 86T 73T 13T 84% +/dev/grid/node-x8-y18 89T 68T 21T 76% +/dev/grid/node-x8-y19 88T 67T 21T 76% +/dev/grid/node-x8-y20 87T 64T 23T 73% +/dev/grid/node-x8-y21 90T 71T 19T 78% +/dev/grid/node-x8-y22 505T 497T 8T 98% +/dev/grid/node-x8-y23 92T 72T 20T 78% +/dev/grid/node-x8-y24 86T 70T 16T 81% +/dev/grid/node-x8-y25 92T 69T 23T 75% +/dev/grid/node-x8-y26 93T 71T 22T 76% +/dev/grid/node-x8-y27 91T 70T 21T 76% +/dev/grid/node-x8-y28 92T 0T 92T 0% +/dev/grid/node-x9-y0 87T 69T 18T 79% +/dev/grid/node-x9-y1 90T 69T 21T 76% +/dev/grid/node-x9-y2 91T 69T 22T 75% +/dev/grid/node-x9-y3 92T 71T 21T 77% +/dev/grid/node-x9-y4 91T 66T 25T 72% +/dev/grid/node-x9-y5 92T 65T 27T 70% +/dev/grid/node-x9-y6 87T 71T 16T 81% +/dev/grid/node-x9-y7 88T 68T 20T 77% +/dev/grid/node-x9-y8 85T 67T 18T 78% +/dev/grid/node-x9-y9 86T 65T 21T 75% +/dev/grid/node-x9-y10 88T 64T 24T 72% +/dev/grid/node-x9-y11 90T 70T 20T 77% +/dev/grid/node-x9-y12 88T 64T 24T 72% +/dev/grid/node-x9-y13 85T 69T 16T 81% +/dev/grid/node-x9-y14 85T 71T 14T 83% +/dev/grid/node-x9-y15 92T 70T 22T 76% +/dev/grid/node-x9-y16 92T 65T 27T 70% +/dev/grid/node-x9-y17 89T 66T 23T 74% +/dev/grid/node-x9-y18 85T 69T 16T 81% +/dev/grid/node-x9-y19 94T 69T 25T 73% +/dev/grid/node-x9-y20 92T 66T 26T 71% +/dev/grid/node-x9-y21 88T 70T 18T 79% +/dev/grid/node-x9-y22 507T 498T 9T 98% +/dev/grid/node-x9-y23 86T 68T 18T 79% +/dev/grid/node-x9-y24 90T 69T 21T 76% +/dev/grid/node-x9-y25 87T 65T 22T 74% +/dev/grid/node-x9-y26 86T 71T 15T 82% +/dev/grid/node-x9-y27 85T 65T 20T 76% +/dev/grid/node-x9-y28 87T 70T 17T 80% +/dev/grid/node-x10-y0 91T 64T 27T 70% +/dev/grid/node-x10-y1 92T 65T 27T 70% +/dev/grid/node-x10-y2 89T 66T 23T 74% +/dev/grid/node-x10-y3 94T 64T 30T 68% +/dev/grid/node-x10-y4 92T 69T 23T 75% +/dev/grid/node-x10-y5 91T 64T 27T 70% +/dev/grid/node-x10-y6 86T 72T 14T 83% +/dev/grid/node-x10-y7 87T 66T 21T 75% +/dev/grid/node-x10-y8 90T 73T 17T 81% +/dev/grid/node-x10-y9 91T 73T 18T 80% +/dev/grid/node-x10-y10 94T 71T 23T 75% +/dev/grid/node-x10-y11 94T 71T 23T 75% +/dev/grid/node-x10-y12 92T 67T 25T 72% +/dev/grid/node-x10-y13 92T 66T 26T 71% +/dev/grid/node-x10-y14 86T 66T 20T 76% +/dev/grid/node-x10-y15 93T 73T 20T 78% +/dev/grid/node-x10-y16 92T 66T 26T 71% +/dev/grid/node-x10-y17 92T 71T 21T 77% +/dev/grid/node-x10-y18 86T 65T 21T 75% +/dev/grid/node-x10-y19 92T 68T 24T 73% +/dev/grid/node-x10-y20 87T 66T 21T 75% +/dev/grid/node-x10-y21 90T 65T 25T 72% +/dev/grid/node-x10-y22 501T 494T 7T 98% +/dev/grid/node-x10-y23 87T 66T 21T 75% +/dev/grid/node-x10-y24 85T 69T 16T 81% +/dev/grid/node-x10-y25 90T 72T 18T 80% +/dev/grid/node-x10-y26 94T 69T 25T 73% +/dev/grid/node-x10-y27 86T 69T 17T 80% +/dev/grid/node-x10-y28 90T 68T 22T 75% +/dev/grid/node-x11-y0 90T 65T 25T 72% +/dev/grid/node-x11-y1 90T 70T 20T 77% +/dev/grid/node-x11-y2 94T 69T 25T 73% +/dev/grid/node-x11-y3 92T 72T 20T 78% +/dev/grid/node-x11-y4 93T 67T 26T 72% +/dev/grid/node-x11-y5 89T 70T 19T 78% +/dev/grid/node-x11-y6 87T 66T 21T 75% +/dev/grid/node-x11-y7 92T 70T 22T 76% +/dev/grid/node-x11-y8 93T 71T 22T 76% +/dev/grid/node-x11-y9 93T 68T 25T 73% +/dev/grid/node-x11-y10 85T 65T 20T 76% +/dev/grid/node-x11-y11 90T 72T 18T 80% +/dev/grid/node-x11-y12 89T 65T 24T 73% +/dev/grid/node-x11-y13 86T 69T 17T 80% +/dev/grid/node-x11-y14 93T 73T 20T 78% +/dev/grid/node-x11-y15 93T 68T 25T 73% +/dev/grid/node-x11-y16 92T 72T 20T 78% +/dev/grid/node-x11-y17 85T 71T 14T 83% +/dev/grid/node-x11-y18 90T 68T 22T 75% +/dev/grid/node-x11-y19 90T 69T 21T 76% +/dev/grid/node-x11-y20 85T 73T 12T 85% +/dev/grid/node-x11-y21 93T 68T 25T 73% +/dev/grid/node-x11-y22 504T 491T 13T 97% +/dev/grid/node-x11-y23 87T 69T 18T 79% +/dev/grid/node-x11-y24 88T 65T 23T 73% +/dev/grid/node-x11-y25 94T 67T 27T 71% +/dev/grid/node-x11-y26 92T 73T 19T 79% +/dev/grid/node-x11-y27 87T 64T 23T 73% +/dev/grid/node-x11-y28 89T 70T 19T 78% +/dev/grid/node-x12-y0 88T 73T 15T 82% +/dev/grid/node-x12-y1 90T 68T 22T 75% +/dev/grid/node-x12-y2 85T 65T 20T 76% +/dev/grid/node-x12-y3 94T 71T 23T 75% +/dev/grid/node-x12-y4 86T 68T 18T 79% +/dev/grid/node-x12-y5 89T 67T 22T 75% +/dev/grid/node-x12-y6 89T 71T 18T 79% +/dev/grid/node-x12-y7 85T 68T 17T 80% +/dev/grid/node-x12-y8 94T 68T 26T 72% +/dev/grid/node-x12-y9 91T 71T 20T 78% +/dev/grid/node-x12-y10 91T 65T 26T 71% +/dev/grid/node-x12-y11 91T 71T 20T 78% +/dev/grid/node-x12-y12 85T 65T 20T 76% +/dev/grid/node-x12-y13 89T 71T 18T 79% +/dev/grid/node-x12-y14 85T 70T 15T 82% +/dev/grid/node-x12-y15 92T 73T 19T 79% +/dev/grid/node-x12-y16 94T 66T 28T 70% +/dev/grid/node-x12-y17 90T 72T 18T 80% +/dev/grid/node-x12-y18 90T 64T 26T 71% +/dev/grid/node-x12-y19 87T 72T 15T 82% +/dev/grid/node-x12-y20 89T 70T 19T 78% +/dev/grid/node-x12-y21 90T 66T 24T 73% +/dev/grid/node-x12-y22 506T 497T 9T 98% +/dev/grid/node-x12-y23 90T 67T 23T 74% +/dev/grid/node-x12-y24 85T 67T 18T 78% +/dev/grid/node-x12-y25 85T 72T 13T 84% +/dev/grid/node-x12-y26 94T 71T 23T 75% +/dev/grid/node-x12-y27 92T 64T 28T 69% +/dev/grid/node-x12-y28 90T 65T 25T 72% +/dev/grid/node-x13-y0 85T 72T 13T 84% +/dev/grid/node-x13-y1 93T 67T 26T 72% +/dev/grid/node-x13-y2 94T 64T 30T 68% +/dev/grid/node-x13-y3 85T 71T 14T 83% +/dev/grid/node-x13-y4 93T 71T 22T 76% +/dev/grid/node-x13-y5 85T 67T 18T 78% +/dev/grid/node-x13-y6 91T 68T 23T 74% +/dev/grid/node-x13-y7 92T 66T 26T 71% +/dev/grid/node-x13-y8 88T 66T 22T 75% +/dev/grid/node-x13-y9 91T 72T 19T 79% +/dev/grid/node-x13-y10 89T 72T 17T 80% +/dev/grid/node-x13-y11 90T 68T 22T 75% +/dev/grid/node-x13-y12 89T 65T 24T 73% +/dev/grid/node-x13-y13 90T 69T 21T 76% +/dev/grid/node-x13-y14 86T 64T 22T 74% +/dev/grid/node-x13-y15 91T 65T 26T 71% +/dev/grid/node-x13-y16 86T 72T 14T 83% +/dev/grid/node-x13-y17 85T 71T 14T 83% +/dev/grid/node-x13-y18 85T 68T 17T 80% +/dev/grid/node-x13-y19 91T 69T 22T 75% +/dev/grid/node-x13-y20 87T 70T 17T 80% +/dev/grid/node-x13-y21 94T 65T 29T 69% +/dev/grid/node-x13-y22 503T 492T 11T 97% +/dev/grid/node-x13-y23 91T 70T 21T 76% +/dev/grid/node-x13-y24 91T 66T 25T 72% +/dev/grid/node-x13-y25 88T 64T 24T 72% +/dev/grid/node-x13-y26 87T 70T 17T 80% +/dev/grid/node-x13-y27 91T 66T 25T 72% +/dev/grid/node-x13-y28 86T 68T 18T 79% +/dev/grid/node-x14-y0 85T 67T 18T 78% +/dev/grid/node-x14-y1 87T 70T 17T 80% +/dev/grid/node-x14-y2 92T 67T 25T 72% +/dev/grid/node-x14-y3 87T 64T 23T 73% +/dev/grid/node-x14-y4 92T 73T 19T 79% +/dev/grid/node-x14-y5 86T 66T 20T 76% +/dev/grid/node-x14-y6 89T 69T 20T 77% +/dev/grid/node-x14-y7 89T 67T 22T 75% +/dev/grid/node-x14-y8 89T 70T 19T 78% +/dev/grid/node-x14-y9 91T 70T 21T 76% +/dev/grid/node-x14-y10 87T 70T 17T 80% +/dev/grid/node-x14-y11 86T 66T 20T 76% +/dev/grid/node-x14-y12 92T 67T 25T 72% +/dev/grid/node-x14-y13 87T 68T 19T 78% +/dev/grid/node-x14-y14 94T 65T 29T 69% +/dev/grid/node-x14-y15 93T 68T 25T 73% +/dev/grid/node-x14-y16 87T 66T 21T 75% +/dev/grid/node-x14-y17 90T 70T 20T 77% +/dev/grid/node-x14-y18 90T 66T 24T 73% +/dev/grid/node-x14-y19 89T 71T 18T 79% +/dev/grid/node-x14-y20 85T 72T 13T 84% +/dev/grid/node-x14-y21 90T 66T 24T 73% +/dev/grid/node-x14-y22 504T 491T 13T 97% +/dev/grid/node-x14-y23 90T 71T 19T 78% +/dev/grid/node-x14-y24 94T 68T 26T 72% +/dev/grid/node-x14-y25 91T 73T 18T 80% +/dev/grid/node-x14-y26 88T 68T 20T 77% +/dev/grid/node-x14-y27 86T 66T 20T 76% +/dev/grid/node-x14-y28 92T 70T 22T 76% +/dev/grid/node-x15-y0 91T 73T 18T 80% +/dev/grid/node-x15-y1 85T 65T 20T 76% +/dev/grid/node-x15-y2 88T 67T 21T 76% +/dev/grid/node-x15-y3 91T 66T 25T 72% +/dev/grid/node-x15-y4 92T 65T 27T 70% +/dev/grid/node-x15-y5 94T 66T 28T 70% +/dev/grid/node-x15-y6 90T 67T 23T 74% +/dev/grid/node-x15-y7 91T 72T 19T 79% +/dev/grid/node-x15-y8 88T 65T 23T 73% +/dev/grid/node-x15-y9 90T 66T 24T 73% +/dev/grid/node-x15-y10 86T 69T 17T 80% +/dev/grid/node-x15-y11 89T 67T 22T 75% +/dev/grid/node-x15-y12 86T 67T 19T 77% +/dev/grid/node-x15-y13 85T 65T 20T 76% +/dev/grid/node-x15-y14 92T 68T 24T 73% +/dev/grid/node-x15-y15 85T 73T 12T 85% +/dev/grid/node-x15-y16 86T 65T 21T 75% +/dev/grid/node-x15-y17 92T 69T 23T 75% +/dev/grid/node-x15-y18 87T 72T 15T 82% +/dev/grid/node-x15-y19 92T 64T 28T 69% +/dev/grid/node-x15-y20 92T 71T 21T 77% +/dev/grid/node-x15-y21 86T 71T 15T 82% +/dev/grid/node-x15-y22 501T 494T 7T 98% +/dev/grid/node-x15-y23 93T 65T 28T 69% +/dev/grid/node-x15-y24 85T 71T 14T 83% +/dev/grid/node-x15-y25 90T 66T 24T 73% +/dev/grid/node-x15-y26 87T 67T 20T 77% +/dev/grid/node-x15-y27 90T 70T 20T 77% +/dev/grid/node-x15-y28 89T 71T 18T 79% +/dev/grid/node-x16-y0 91T 72T 19T 79% +/dev/grid/node-x16-y1 91T 65T 26T 71% +/dev/grid/node-x16-y2 90T 64T 26T 71% +/dev/grid/node-x16-y3 87T 67T 20T 77% +/dev/grid/node-x16-y4 86T 66T 20T 76% +/dev/grid/node-x16-y5 88T 73T 15T 82% +/dev/grid/node-x16-y6 85T 68T 17T 80% +/dev/grid/node-x16-y7 86T 66T 20T 76% +/dev/grid/node-x16-y8 91T 69T 22T 75% +/dev/grid/node-x16-y9 87T 66T 21T 75% +/dev/grid/node-x16-y10 86T 72T 14T 83% +/dev/grid/node-x16-y11 90T 66T 24T 73% +/dev/grid/node-x16-y12 85T 72T 13T 84% +/dev/grid/node-x16-y13 88T 71T 17T 80% +/dev/grid/node-x16-y14 90T 70T 20T 77% +/dev/grid/node-x16-y15 91T 71T 20T 78% +/dev/grid/node-x16-y16 86T 70T 16T 81% +/dev/grid/node-x16-y17 86T 73T 13T 84% +/dev/grid/node-x16-y18 88T 66T 22T 75% +/dev/grid/node-x16-y19 92T 67T 25T 72% +/dev/grid/node-x16-y20 92T 73T 19T 79% +/dev/grid/node-x16-y21 94T 71T 23T 75% +/dev/grid/node-x16-y22 507T 498T 9T 98% +/dev/grid/node-x16-y23 92T 72T 20T 78% +/dev/grid/node-x16-y24 85T 72T 13T 84% +/dev/grid/node-x16-y25 88T 66T 22T 75% +/dev/grid/node-x16-y26 92T 67T 25T 72% +/dev/grid/node-x16-y27 94T 64T 30T 68% +/dev/grid/node-x16-y28 86T 66T 20T 76% +/dev/grid/node-x17-y0 88T 65T 23T 73% +/dev/grid/node-x17-y1 85T 66T 19T 77% +/dev/grid/node-x17-y2 88T 70T 18T 79% +/dev/grid/node-x17-y3 89T 68T 21T 76% +/dev/grid/node-x17-y4 89T 68T 21T 76% +/dev/grid/node-x17-y5 94T 69T 25T 73% +/dev/grid/node-x17-y6 85T 66T 19T 77% +/dev/grid/node-x17-y7 93T 67T 26T 72% +/dev/grid/node-x17-y8 87T 67T 20T 77% +/dev/grid/node-x17-y9 94T 67T 27T 71% +/dev/grid/node-x17-y10 92T 64T 28T 69% +/dev/grid/node-x17-y11 94T 68T 26T 72% +/dev/grid/node-x17-y12 85T 66T 19T 77% +/dev/grid/node-x17-y13 87T 68T 19T 78% +/dev/grid/node-x17-y14 89T 65T 24T 73% +/dev/grid/node-x17-y15 94T 69T 25T 73% +/dev/grid/node-x17-y16 90T 69T 21T 76% +/dev/grid/node-x17-y17 85T 66T 19T 77% +/dev/grid/node-x17-y18 91T 68T 23T 74% +/dev/grid/node-x17-y19 89T 73T 16T 82% +/dev/grid/node-x17-y20 94T 66T 28T 70% +/dev/grid/node-x17-y21 91T 68T 23T 74% +/dev/grid/node-x17-y22 509T 499T 10T 98% +/dev/grid/node-x17-y23 89T 69T 20T 77% +/dev/grid/node-x17-y24 91T 64T 27T 70% +/dev/grid/node-x17-y25 89T 66T 23T 74% +/dev/grid/node-x17-y26 91T 72T 19T 79% +/dev/grid/node-x17-y27 93T 69T 24T 74% +/dev/grid/node-x17-y28 87T 73T 14T 83% +/dev/grid/node-x18-y0 85T 69T 16T 81% +/dev/grid/node-x18-y1 90T 65T 25T 72% +/dev/grid/node-x18-y2 85T 69T 16T 81% +/dev/grid/node-x18-y3 89T 66T 23T 74% +/dev/grid/node-x18-y4 88T 69T 19T 78% +/dev/grid/node-x18-y5 90T 70T 20T 77% +/dev/grid/node-x18-y6 90T 69T 21T 76% +/dev/grid/node-x18-y7 92T 67T 25T 72% +/dev/grid/node-x18-y8 85T 64T 21T 75% +/dev/grid/node-x18-y9 86T 68T 18T 79% +/dev/grid/node-x18-y10 89T 66T 23T 74% +/dev/grid/node-x18-y11 87T 70T 17T 80% +/dev/grid/node-x18-y12 93T 68T 25T 73% +/dev/grid/node-x18-y13 89T 67T 22T 75% +/dev/grid/node-x18-y14 91T 66T 25T 72% +/dev/grid/node-x18-y15 91T 65T 26T 71% +/dev/grid/node-x18-y16 90T 66T 24T 73% +/dev/grid/node-x18-y17 85T 69T 16T 81% +/dev/grid/node-x18-y18 93T 70T 23T 75% +/dev/grid/node-x18-y19 93T 64T 29T 68% +/dev/grid/node-x18-y20 87T 70T 17T 80% +/dev/grid/node-x18-y21 87T 73T 14T 83% +/dev/grid/node-x18-y22 503T 498T 5T 99% +/dev/grid/node-x18-y23 92T 68T 24T 73% +/dev/grid/node-x18-y24 88T 68T 20T 77% +/dev/grid/node-x18-y25 94T 64T 30T 68% +/dev/grid/node-x18-y26 93T 66T 27T 70% +/dev/grid/node-x18-y27 90T 67T 23T 74% +/dev/grid/node-x18-y28 89T 67T 22T 75% +/dev/grid/node-x19-y0 91T 67T 24T 73% +/dev/grid/node-x19-y1 87T 64T 23T 73% +/dev/grid/node-x19-y2 94T 64T 30T 68% +/dev/grid/node-x19-y3 90T 71T 19T 78% +/dev/grid/node-x19-y4 88T 66T 22T 75% +/dev/grid/node-x19-y5 93T 69T 24T 74% +/dev/grid/node-x19-y6 89T 73T 16T 82% +/dev/grid/node-x19-y7 91T 68T 23T 74% +/dev/grid/node-x19-y8 89T 67T 22T 75% +/dev/grid/node-x19-y9 90T 72T 18T 80% +/dev/grid/node-x19-y10 93T 73T 20T 78% +/dev/grid/node-x19-y11 88T 70T 18T 79% +/dev/grid/node-x19-y12 89T 67T 22T 75% +/dev/grid/node-x19-y13 91T 65T 26T 71% +/dev/grid/node-x19-y14 92T 67T 25T 72% +/dev/grid/node-x19-y15 88T 69T 19T 78% +/dev/grid/node-x19-y16 93T 72T 21T 77% +/dev/grid/node-x19-y17 88T 64T 24T 72% +/dev/grid/node-x19-y18 88T 67T 21T 76% +/dev/grid/node-x19-y19 85T 65T 20T 76% +/dev/grid/node-x19-y20 90T 68T 22T 75% +/dev/grid/node-x19-y21 88T 65T 23T 73% +/dev/grid/node-x19-y22 508T 498T 10T 98% +/dev/grid/node-x19-y23 93T 65T 28T 69% +/dev/grid/node-x19-y24 85T 67T 18T 78% +/dev/grid/node-x19-y25 92T 65T 27T 70% +/dev/grid/node-x19-y26 92T 67T 25T 72% +/dev/grid/node-x19-y27 91T 65T 26T 71% +/dev/grid/node-x19-y28 91T 73T 18T 80% +/dev/grid/node-x20-y0 86T 64T 22T 74% +/dev/grid/node-x20-y1 89T 68T 21T 76% +/dev/grid/node-x20-y2 92T 71T 21T 77% +/dev/grid/node-x20-y3 86T 68T 18T 79% +/dev/grid/node-x20-y4 86T 66T 20T 76% +/dev/grid/node-x20-y5 94T 66T 28T 70% +/dev/grid/node-x20-y6 91T 73T 18T 80% +/dev/grid/node-x20-y7 87T 68T 19T 78% +/dev/grid/node-x20-y8 94T 66T 28T 70% +/dev/grid/node-x20-y9 89T 64T 25T 71% +/dev/grid/node-x20-y10 92T 68T 24T 73% +/dev/grid/node-x20-y11 94T 66T 28T 70% +/dev/grid/node-x20-y12 88T 73T 15T 82% +/dev/grid/node-x20-y13 91T 67T 24T 73% +/dev/grid/node-x20-y14 93T 66T 27T 70% +/dev/grid/node-x20-y15 88T 72T 16T 81% +/dev/grid/node-x20-y16 93T 68T 25T 73% +/dev/grid/node-x20-y17 91T 68T 23T 74% +/dev/grid/node-x20-y18 87T 73T 14T 83% +/dev/grid/node-x20-y19 94T 70T 24T 74% +/dev/grid/node-x20-y20 88T 67T 21T 76% +/dev/grid/node-x20-y21 88T 68T 20T 77% +/dev/grid/node-x20-y22 503T 499T 4T 99% +/dev/grid/node-x20-y23 88T 67T 21T 76% +/dev/grid/node-x20-y24 92T 68T 24T 73% +/dev/grid/node-x20-y25 85T 69T 16T 81% +/dev/grid/node-x20-y26 87T 70T 17T 80% +/dev/grid/node-x20-y27 86T 70T 16T 81% +/dev/grid/node-x20-y28 93T 65T 28T 69% +/dev/grid/node-x21-y0 90T 67T 23T 74% +/dev/grid/node-x21-y1 85T 66T 19T 77% +/dev/grid/node-x21-y2 93T 73T 20T 78% +/dev/grid/node-x21-y3 88T 71T 17T 80% +/dev/grid/node-x21-y4 94T 71T 23T 75% +/dev/grid/node-x21-y5 92T 69T 23T 75% +/dev/grid/node-x21-y6 94T 66T 28T 70% +/dev/grid/node-x21-y7 94T 65T 29T 69% +/dev/grid/node-x21-y8 85T 71T 14T 83% +/dev/grid/node-x21-y9 87T 69T 18T 79% +/dev/grid/node-x21-y10 86T 68T 18T 79% +/dev/grid/node-x21-y11 92T 68T 24T 73% +/dev/grid/node-x21-y12 89T 68T 21T 76% +/dev/grid/node-x21-y13 88T 73T 15T 82% +/dev/grid/node-x21-y14 86T 67T 19T 77% +/dev/grid/node-x21-y15 87T 72T 15T 82% +/dev/grid/node-x21-y16 87T 70T 17T 80% +/dev/grid/node-x21-y17 87T 71T 16T 81% +/dev/grid/node-x21-y18 88T 72T 16T 81% +/dev/grid/node-x21-y19 93T 65T 28T 69% +/dev/grid/node-x21-y20 92T 70T 22T 76% +/dev/grid/node-x21-y21 91T 70T 21T 76% +/dev/grid/node-x21-y22 510T 493T 17T 96% +/dev/grid/node-x21-y23 89T 69T 20T 77% +/dev/grid/node-x21-y24 94T 72T 22T 76% +/dev/grid/node-x21-y25 91T 70T 21T 76% +/dev/grid/node-x21-y26 89T 65T 24T 73% +/dev/grid/node-x21-y27 85T 72T 13T 84% +/dev/grid/node-x21-y28 93T 72T 21T 77% +/dev/grid/node-x22-y0 89T 67T 22T 75% +/dev/grid/node-x22-y1 85T 65T 20T 76% +/dev/grid/node-x22-y2 93T 64T 29T 68% +/dev/grid/node-x22-y3 93T 71T 22T 76% +/dev/grid/node-x22-y4 85T 65T 20T 76% +/dev/grid/node-x22-y5 85T 67T 18T 78% +/dev/grid/node-x22-y6 90T 64T 26T 71% +/dev/grid/node-x22-y7 87T 69T 18T 79% +/dev/grid/node-x22-y8 94T 72T 22T 76% +/dev/grid/node-x22-y9 87T 71T 16T 81% +/dev/grid/node-x22-y10 87T 65T 22T 74% +/dev/grid/node-x22-y11 93T 72T 21T 77% +/dev/grid/node-x22-y12 86T 72T 14T 83% +/dev/grid/node-x22-y13 89T 66T 23T 74% +/dev/grid/node-x22-y14 90T 67T 23T 74% +/dev/grid/node-x22-y15 92T 70T 22T 76% +/dev/grid/node-x22-y16 92T 66T 26T 71% +/dev/grid/node-x22-y17 91T 66T 25T 72% +/dev/grid/node-x22-y18 91T 68T 23T 74% +/dev/grid/node-x22-y19 88T 71T 17T 80% +/dev/grid/node-x22-y20 90T 69T 21T 76% +/dev/grid/node-x22-y21 90T 68T 22T 75% +/dev/grid/node-x22-y22 502T 490T 12T 97% +/dev/grid/node-x22-y23 91T 67T 24T 73% +/dev/grid/node-x22-y24 93T 71T 22T 76% +/dev/grid/node-x22-y25 92T 65T 27T 70% +/dev/grid/node-x22-y26 93T 69T 24T 74% +/dev/grid/node-x22-y27 85T 72T 13T 84% +/dev/grid/node-x22-y28 93T 64T 29T 68% +/dev/grid/node-x23-y0 92T 73T 19T 79% +/dev/grid/node-x23-y1 90T 64T 26T 71% +/dev/grid/node-x23-y2 93T 65T 28T 69% +/dev/grid/node-x23-y3 88T 72T 16T 81% +/dev/grid/node-x23-y4 92T 70T 22T 76% +/dev/grid/node-x23-y5 90T 66T 24T 73% +/dev/grid/node-x23-y6 86T 66T 20T 76% +/dev/grid/node-x23-y7 89T 71T 18T 79% +/dev/grid/node-x23-y8 89T 64T 25T 71% +/dev/grid/node-x23-y9 90T 64T 26T 71% +/dev/grid/node-x23-y10 94T 70T 24T 74% +/dev/grid/node-x23-y11 85T 64T 21T 75% +/dev/grid/node-x23-y12 86T 66T 20T 76% +/dev/grid/node-x23-y13 86T 64T 22T 74% +/dev/grid/node-x23-y14 92T 68T 24T 73% +/dev/grid/node-x23-y15 94T 70T 24T 74% +/dev/grid/node-x23-y16 91T 69T 22T 75% +/dev/grid/node-x23-y17 93T 70T 23T 75% +/dev/grid/node-x23-y18 87T 65T 22T 74% +/dev/grid/node-x23-y19 86T 64T 22T 74% +/dev/grid/node-x23-y20 94T 66T 28T 70% +/dev/grid/node-x23-y21 92T 64T 28T 69% +/dev/grid/node-x23-y22 507T 491T 16T 96% +/dev/grid/node-x23-y23 88T 73T 15T 82% +/dev/grid/node-x23-y24 87T 69T 18T 79% +/dev/grid/node-x23-y25 91T 71T 20T 78% +/dev/grid/node-x23-y26 90T 71T 19T 78% +/dev/grid/node-x23-y27 87T 70T 17T 80% +/dev/grid/node-x23-y28 91T 70T 21T 76% +/dev/grid/node-x24-y0 86T 67T 19T 77% +/dev/grid/node-x24-y1 94T 67T 27T 71% +/dev/grid/node-x24-y2 89T 71T 18T 79% +/dev/grid/node-x24-y3 86T 67T 19T 77% +/dev/grid/node-x24-y4 87T 73T 14T 83% +/dev/grid/node-x24-y5 86T 64T 22T 74% +/dev/grid/node-x24-y6 92T 68T 24T 73% +/dev/grid/node-x24-y7 85T 68T 17T 80% +/dev/grid/node-x24-y8 86T 65T 21T 75% +/dev/grid/node-x24-y9 87T 73T 14T 83% +/dev/grid/node-x24-y10 91T 68T 23T 74% +/dev/grid/node-x24-y11 94T 67T 27T 71% +/dev/grid/node-x24-y12 94T 67T 27T 71% +/dev/grid/node-x24-y13 88T 71T 17T 80% +/dev/grid/node-x24-y14 91T 70T 21T 76% +/dev/grid/node-x24-y15 89T 72T 17T 80% +/dev/grid/node-x24-y16 92T 69T 23T 75% +/dev/grid/node-x24-y17 87T 70T 17T 80% +/dev/grid/node-x24-y18 94T 69T 25T 73% +/dev/grid/node-x24-y19 91T 66T 25T 72% +/dev/grid/node-x24-y20 90T 64T 26T 71% +/dev/grid/node-x24-y21 86T 65T 21T 75% +/dev/grid/node-x24-y22 508T 494T 14T 97% +/dev/grid/node-x24-y23 89T 72T 17T 80% +/dev/grid/node-x24-y24 94T 66T 28T 70% +/dev/grid/node-x24-y25 88T 64T 24T 72% +/dev/grid/node-x24-y26 86T 64T 22T 74% +/dev/grid/node-x24-y27 92T 65T 27T 70% +/dev/grid/node-x24-y28 89T 72T 17T 80% +/dev/grid/node-x25-y0 93T 70T 23T 75% +/dev/grid/node-x25-y1 91T 73T 18T 80% +/dev/grid/node-x25-y2 89T 65T 24T 73% +/dev/grid/node-x25-y3 86T 69T 17T 80% +/dev/grid/node-x25-y4 90T 70T 20T 77% +/dev/grid/node-x25-y5 89T 65T 24T 73% +/dev/grid/node-x25-y6 92T 71T 21T 77% +/dev/grid/node-x25-y7 91T 65T 26T 71% +/dev/grid/node-x25-y8 91T 67T 24T 73% +/dev/grid/node-x25-y9 94T 73T 21T 77% +/dev/grid/node-x25-y10 94T 73T 21T 77% +/dev/grid/node-x25-y11 91T 70T 21T 76% +/dev/grid/node-x25-y12 91T 71T 20T 78% +/dev/grid/node-x25-y13 86T 67T 19T 77% +/dev/grid/node-x25-y14 88T 67T 21T 76% +/dev/grid/node-x25-y15 90T 67T 23T 74% +/dev/grid/node-x25-y16 92T 64T 28T 69% +/dev/grid/node-x25-y17 94T 68T 26T 72% +/dev/grid/node-x25-y18 87T 73T 14T 83% +/dev/grid/node-x25-y19 86T 73T 13T 84% +/dev/grid/node-x25-y20 92T 72T 20T 78% +/dev/grid/node-x25-y21 93T 73T 20T 78% +/dev/grid/node-x25-y22 504T 491T 13T 97% +/dev/grid/node-x25-y23 91T 72T 19T 79% +/dev/grid/node-x25-y24 85T 70T 15T 82% +/dev/grid/node-x25-y25 85T 73T 12T 85% +/dev/grid/node-x25-y26 85T 67T 18T 78% +/dev/grid/node-x25-y27 89T 69T 20T 77% +/dev/grid/node-x25-y28 86T 66T 20T 76% +/dev/grid/node-x26-y0 91T 72T 19T 79% +/dev/grid/node-x26-y1 86T 68T 18T 79% +/dev/grid/node-x26-y2 88T 70T 18T 79% +/dev/grid/node-x26-y3 88T 66T 22T 75% +/dev/grid/node-x26-y4 85T 71T 14T 83% +/dev/grid/node-x26-y5 90T 66T 24T 73% +/dev/grid/node-x26-y6 90T 66T 24T 73% +/dev/grid/node-x26-y7 89T 73T 16T 82% +/dev/grid/node-x26-y8 85T 65T 20T 76% +/dev/grid/node-x26-y9 90T 72T 18T 80% +/dev/grid/node-x26-y10 86T 64T 22T 74% +/dev/grid/node-x26-y11 90T 64T 26T 71% +/dev/grid/node-x26-y12 92T 73T 19T 79% +/dev/grid/node-x26-y13 85T 72T 13T 84% +/dev/grid/node-x26-y14 91T 73T 18T 80% +/dev/grid/node-x26-y15 92T 69T 23T 75% +/dev/grid/node-x26-y16 90T 72T 18T 80% +/dev/grid/node-x26-y17 90T 68T 22T 75% +/dev/grid/node-x26-y18 90T 73T 17T 81% +/dev/grid/node-x26-y19 94T 64T 30T 68% +/dev/grid/node-x26-y20 86T 73T 13T 84% +/dev/grid/node-x26-y21 86T 66T 20T 76% +/dev/grid/node-x26-y22 510T 491T 19T 96% +/dev/grid/node-x26-y23 87T 66T 21T 75% +/dev/grid/node-x26-y24 91T 64T 27T 70% +/dev/grid/node-x26-y25 94T 66T 28T 70% +/dev/grid/node-x26-y26 85T 68T 17T 80% +/dev/grid/node-x26-y27 85T 71T 14T 83% +/dev/grid/node-x26-y28 94T 64T 30T 68% +/dev/grid/node-x27-y0 88T 73T 15T 82% +/dev/grid/node-x27-y1 94T 67T 27T 71% +/dev/grid/node-x27-y2 90T 73T 17T 81% +/dev/grid/node-x27-y3 93T 71T 22T 76% +/dev/grid/node-x27-y4 89T 70T 19T 78% +/dev/grid/node-x27-y5 90T 66T 24T 73% +/dev/grid/node-x27-y6 87T 73T 14T 83% +/dev/grid/node-x27-y7 87T 66T 21T 75% +/dev/grid/node-x27-y8 86T 69T 17T 80% +/dev/grid/node-x27-y9 88T 73T 15T 82% +/dev/grid/node-x27-y10 92T 64T 28T 69% +/dev/grid/node-x27-y11 87T 69T 18T 79% +/dev/grid/node-x27-y12 91T 64T 27T 70% +/dev/grid/node-x27-y13 94T 68T 26T 72% +/dev/grid/node-x27-y14 89T 68T 21T 76% +/dev/grid/node-x27-y15 87T 67T 20T 77% +/dev/grid/node-x27-y16 90T 72T 18T 80% +/dev/grid/node-x27-y17 94T 65T 29T 69% +/dev/grid/node-x27-y18 90T 72T 18T 80% +/dev/grid/node-x27-y19 88T 73T 15T 82% +/dev/grid/node-x27-y20 88T 71T 17T 80% +/dev/grid/node-x27-y21 88T 64T 24T 72% +/dev/grid/node-x27-y22 504T 490T 14T 97% +/dev/grid/node-x27-y23 93T 66T 27T 70% +/dev/grid/node-x27-y24 85T 67T 18T 78% +/dev/grid/node-x27-y25 94T 64T 30T 68% +/dev/grid/node-x27-y26 85T 72T 13T 84% +/dev/grid/node-x27-y27 85T 73T 12T 85% +/dev/grid/node-x27-y28 89T 70T 19T 78% +/dev/grid/node-x28-y0 93T 66T 27T 70% +/dev/grid/node-x28-y1 86T 71T 15T 82% +/dev/grid/node-x28-y2 94T 73T 21T 77% +/dev/grid/node-x28-y3 91T 72T 19T 79% +/dev/grid/node-x28-y4 87T 69T 18T 79% +/dev/grid/node-x28-y5 85T 70T 15T 82% +/dev/grid/node-x28-y6 85T 72T 13T 84% +/dev/grid/node-x28-y7 89T 72T 17T 80% +/dev/grid/node-x28-y8 90T 73T 17T 81% +/dev/grid/node-x28-y9 94T 64T 30T 68% +/dev/grid/node-x28-y10 85T 73T 12T 85% +/dev/grid/node-x28-y11 89T 70T 19T 78% +/dev/grid/node-x28-y12 94T 67T 27T 71% +/dev/grid/node-x28-y13 87T 68T 19T 78% +/dev/grid/node-x28-y14 94T 72T 22T 76% +/dev/grid/node-x28-y15 92T 66T 26T 71% +/dev/grid/node-x28-y16 91T 64T 27T 70% +/dev/grid/node-x28-y17 86T 69T 17T 80% +/dev/grid/node-x28-y18 88T 69T 19T 78% +/dev/grid/node-x28-y19 90T 70T 20T 77% +/dev/grid/node-x28-y20 89T 69T 20T 77% +/dev/grid/node-x28-y21 90T 67T 23T 74% +/dev/grid/node-x28-y22 506T 491T 15T 97% +/dev/grid/node-x28-y23 89T 70T 19T 78% +/dev/grid/node-x28-y24 90T 73T 17T 81% +/dev/grid/node-x28-y25 86T 65T 21T 75% +/dev/grid/node-x28-y26 93T 73T 20T 78% +/dev/grid/node-x28-y27 88T 69T 19T 78% +/dev/grid/node-x28-y28 92T 68T 24T 73% +/dev/grid/node-x29-y0 88T 70T 18T 79% +/dev/grid/node-x29-y1 89T 68T 21T 76% +/dev/grid/node-x29-y2 85T 73T 12T 85% +/dev/grid/node-x29-y3 89T 73T 16T 82% +/dev/grid/node-x29-y4 86T 68T 18T 79% +/dev/grid/node-x29-y5 91T 70T 21T 76% +/dev/grid/node-x29-y6 86T 70T 16T 81% +/dev/grid/node-x29-y7 86T 64T 22T 74% +/dev/grid/node-x29-y8 90T 73T 17T 81% +/dev/grid/node-x29-y9 92T 65T 27T 70% +/dev/grid/node-x29-y10 89T 72T 17T 80% +/dev/grid/node-x29-y11 85T 66T 19T 77% +/dev/grid/node-x29-y12 89T 73T 16T 82% +/dev/grid/node-x29-y13 90T 72T 18T 80% +/dev/grid/node-x29-y14 86T 69T 17T 80% +/dev/grid/node-x29-y15 85T 64T 21T 75% +/dev/grid/node-x29-y16 88T 69T 19T 78% +/dev/grid/node-x29-y17 92T 64T 28T 69% +/dev/grid/node-x29-y18 86T 65T 21T 75% +/dev/grid/node-x29-y19 92T 70T 22T 76% +/dev/grid/node-x29-y20 94T 64T 30T 68% +/dev/grid/node-x29-y21 87T 64T 23T 73% +/dev/grid/node-x29-y22 509T 497T 12T 97% +/dev/grid/node-x29-y23 91T 67T 24T 73% +/dev/grid/node-x29-y24 90T 67T 23T 74% +/dev/grid/node-x29-y25 86T 65T 21T 75% +/dev/grid/node-x29-y26 94T 68T 26T 72% +/dev/grid/node-x29-y27 89T 69T 20T 77% +/dev/grid/node-x29-y28 87T 71T 16T 81% +/dev/grid/node-x30-y0 92T 64T 28T 69% +/dev/grid/node-x30-y1 93T 67T 26T 72% +/dev/grid/node-x30-y2 93T 66T 27T 70% +/dev/grid/node-x30-y3 93T 67T 26T 72% +/dev/grid/node-x30-y4 86T 70T 16T 81% +/dev/grid/node-x30-y5 91T 67T 24T 73% +/dev/grid/node-x30-y6 89T 66T 23T 74% +/dev/grid/node-x30-y7 89T 72T 17T 80% +/dev/grid/node-x30-y8 93T 69T 24T 74% +/dev/grid/node-x30-y9 94T 68T 26T 72% +/dev/grid/node-x30-y10 89T 69T 20T 77% +/dev/grid/node-x30-y11 94T 64T 30T 68% +/dev/grid/node-x30-y12 93T 65T 28T 69% +/dev/grid/node-x30-y13 85T 72T 13T 84% +/dev/grid/node-x30-y14 88T 68T 20T 77% +/dev/grid/node-x30-y15 94T 64T 30T 68% +/dev/grid/node-x30-y16 92T 73T 19T 79% +/dev/grid/node-x30-y17 92T 73T 19T 79% +/dev/grid/node-x30-y18 87T 68T 19T 78% +/dev/grid/node-x30-y19 93T 64T 29T 68% +/dev/grid/node-x30-y20 94T 67T 27T 71% +/dev/grid/node-x30-y21 89T 67T 22T 75% +/dev/grid/node-x30-y22 507T 491T 16T 96% +/dev/grid/node-x30-y23 91T 64T 27T 70% +/dev/grid/node-x30-y24 87T 65T 22T 74% +/dev/grid/node-x30-y25 85T 65T 20T 76% +/dev/grid/node-x30-y26 91T 68T 23T 74% +/dev/grid/node-x30-y27 90T 67T 23T 74% +/dev/grid/node-x30-y28 94T 66T 28T 70% +/dev/grid/node-x31-y0 92T 67T 25T 72% +/dev/grid/node-x31-y1 93T 68T 25T 73% +/dev/grid/node-x31-y2 92T 66T 26T 71% +/dev/grid/node-x31-y3 89T 64T 25T 71% +/dev/grid/node-x31-y4 90T 71T 19T 78% +/dev/grid/node-x31-y5 89T 68T 21T 76% +/dev/grid/node-x31-y6 85T 72T 13T 84% +/dev/grid/node-x31-y7 88T 65T 23T 73% +/dev/grid/node-x31-y8 86T 66T 20T 76% +/dev/grid/node-x31-y9 90T 72T 18T 80% +/dev/grid/node-x31-y10 86T 67T 19T 77% +/dev/grid/node-x31-y11 89T 72T 17T 80% +/dev/grid/node-x31-y12 90T 73T 17T 81% +/dev/grid/node-x31-y13 91T 70T 21T 76% +/dev/grid/node-x31-y14 94T 67T 27T 71% +/dev/grid/node-x31-y15 94T 73T 21T 77% +/dev/grid/node-x31-y16 86T 71T 15T 82% +/dev/grid/node-x31-y17 86T 73T 13T 84% +/dev/grid/node-x31-y18 89T 65T 24T 73% +/dev/grid/node-x31-y19 86T 72T 14T 83% +/dev/grid/node-x31-y20 88T 64T 24T 72% +/dev/grid/node-x31-y21 90T 64T 26T 71% +/dev/grid/node-x31-y22 505T 496T 9T 98% +/dev/grid/node-x31-y23 90T 73T 17T 81% +/dev/grid/node-x31-y24 91T 73T 18T 80% +/dev/grid/node-x31-y25 94T 69T 25T 73% +/dev/grid/node-x31-y26 92T 64T 28T 69% +/dev/grid/node-x31-y27 91T 66T 25T 72% +/dev/grid/node-x31-y28 85T 65T 20T 76% +/dev/grid/node-x32-y0 85T 69T 16T 81% +/dev/grid/node-x32-y1 93T 67T 26T 72% +/dev/grid/node-x32-y2 93T 73T 20T 78% +/dev/grid/node-x32-y3 94T 71T 23T 75% +/dev/grid/node-x32-y4 90T 70T 20T 77% +/dev/grid/node-x32-y5 92T 68T 24T 73% +/dev/grid/node-x32-y6 94T 64T 30T 68% +/dev/grid/node-x32-y7 86T 72T 14T 83% +/dev/grid/node-x32-y8 85T 73T 12T 85% +/dev/grid/node-x32-y9 89T 69T 20T 77% +/dev/grid/node-x32-y10 89T 73T 16T 82% +/dev/grid/node-x32-y11 87T 65T 22T 74% +/dev/grid/node-x32-y12 94T 67T 27T 71% +/dev/grid/node-x32-y13 93T 67T 26T 72% +/dev/grid/node-x32-y14 93T 66T 27T 70% +/dev/grid/node-x32-y15 86T 72T 14T 83% +/dev/grid/node-x32-y16 89T 69T 20T 77% +/dev/grid/node-x32-y17 93T 67T 26T 72% +/dev/grid/node-x32-y18 87T 64T 23T 73% +/dev/grid/node-x32-y19 85T 69T 16T 81% +/dev/grid/node-x32-y20 85T 69T 16T 81% +/dev/grid/node-x32-y21 91T 65T 26T 71% +/dev/grid/node-x32-y22 503T 491T 12T 97% +/dev/grid/node-x32-y23 94T 71T 23T 75% +/dev/grid/node-x32-y24 87T 64T 23T 73% +/dev/grid/node-x32-y25 91T 73T 18T 80% +/dev/grid/node-x32-y26 93T 67T 26T 72% +/dev/grid/node-x32-y27 86T 71T 15T 82% +/dev/grid/node-x32-y28 91T 64T 27T 70% +/dev/grid/node-x33-y0 86T 73T 13T 84% +/dev/grid/node-x33-y1 88T 71T 17T 80% +/dev/grid/node-x33-y2 90T 66T 24T 73% +/dev/grid/node-x33-y3 85T 64T 21T 75% +/dev/grid/node-x33-y4 87T 66T 21T 75% +/dev/grid/node-x33-y5 91T 68T 23T 74% +/dev/grid/node-x33-y6 93T 68T 25T 73% +/dev/grid/node-x33-y7 92T 70T 22T 76% +/dev/grid/node-x33-y8 91T 64T 27T 70% +/dev/grid/node-x33-y9 85T 72T 13T 84% +/dev/grid/node-x33-y10 89T 65T 24T 73% +/dev/grid/node-x33-y11 91T 66T 25T 72% +/dev/grid/node-x33-y12 87T 68T 19T 78% +/dev/grid/node-x33-y13 89T 70T 19T 78% +/dev/grid/node-x33-y14 86T 68T 18T 79% +/dev/grid/node-x33-y15 85T 69T 16T 81% +/dev/grid/node-x33-y16 94T 66T 28T 70% +/dev/grid/node-x33-y17 92T 68T 24T 73% +/dev/grid/node-x33-y18 88T 72T 16T 81% +/dev/grid/node-x33-y19 90T 73T 17T 81% +/dev/grid/node-x33-y20 89T 64T 25T 71% +/dev/grid/node-x33-y21 92T 71T 21T 77% +/dev/grid/node-x33-y22 502T 497T 5T 99% +/dev/grid/node-x33-y23 94T 67T 27T 71% +/dev/grid/node-x33-y24 93T 64T 29T 68% +/dev/grid/node-x33-y25 90T 66T 24T 73% +/dev/grid/node-x33-y26 87T 72T 15T 82% +/dev/grid/node-x33-y27 85T 73T 12T 85% +/dev/grid/node-x33-y28 86T 72T 14T 83% +/dev/grid/node-x34-y0 89T 66T 23T 74% +/dev/grid/node-x34-y1 94T 64T 30T 68% +/dev/grid/node-x34-y2 92T 69T 23T 75% +/dev/grid/node-x34-y3 93T 70T 23T 75% +/dev/grid/node-x34-y4 88T 64T 24T 72% +/dev/grid/node-x34-y5 94T 67T 27T 71% +/dev/grid/node-x34-y6 89T 68T 21T 76% +/dev/grid/node-x34-y7 94T 71T 23T 75% +/dev/grid/node-x34-y8 88T 69T 19T 78% +/dev/grid/node-x34-y9 89T 72T 17T 80% +/dev/grid/node-x34-y10 90T 69T 21T 76% +/dev/grid/node-x34-y11 91T 65T 26T 71% +/dev/grid/node-x34-y12 88T 69T 19T 78% +/dev/grid/node-x34-y13 90T 69T 21T 76% +/dev/grid/node-x34-y14 92T 66T 26T 71% +/dev/grid/node-x34-y15 94T 70T 24T 74% +/dev/grid/node-x34-y16 87T 69T 18T 79% +/dev/grid/node-x34-y17 86T 67T 19T 77% +/dev/grid/node-x34-y18 94T 66T 28T 70% +/dev/grid/node-x34-y19 94T 69T 25T 73% +/dev/grid/node-x34-y20 91T 67T 24T 73% +/dev/grid/node-x34-y21 87T 72T 15T 82% +/dev/grid/node-x34-y22 501T 495T 6T 98% +/dev/grid/node-x34-y23 93T 71T 22T 76% +/dev/grid/node-x34-y24 92T 73T 19T 79% +/dev/grid/node-x34-y25 90T 73T 17T 81% +/dev/grid/node-x34-y26 89T 69T 20T 77% +/dev/grid/node-x34-y27 89T 72T 17T 80% +/dev/grid/node-x34-y28 87T 66T 21T 75% diff --git a/2016/aoc22/src/main.rs b/2016/aoc22/src/main.rs new file mode 100644 index 0000000..bd374d5 --- /dev/null +++ b/2016/aoc22/src/main.rs @@ -0,0 +1,198 @@ +extern crate regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::collections::HashMap; +use std::collections::HashSet; + +use regex::Regex; + +use std::str::FromStr; + +#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)] +struct Node { + x: i8, + y: i8, + size: i16, + used: i16, + avail: i16, + blocker: bool +} + +impl FromStr for Node { + type Err = String; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + let reg = Regex::new(r"/dev/grid/node-x(\d+)-y(\d+) +(\d+)T +(\d+)T +(\d+)T +(\d+)%").unwrap(); + let cap = match reg.captures(s) { + Some(cap) => cap, + None => return Err("Does not match regex".to_string()) + }; + Ok(Node { + x: cap.at(1).unwrap().parse().unwrap(), + y: cap.at(2).unwrap().parse().unwrap(), + size: cap.at(3).unwrap().parse().unwrap(), + used: cap.at(4).unwrap().parse().unwrap(), + avail: cap.at(5).unwrap().parse().unwrap(), + blocker: false + }) + } +} + +impl Node { + fn is_viable_pair(&self, other: &Node) -> bool { + (self.x != other.x || self.y != other.y) && self.used > 0 && self.used <= other.avail + } + + fn recalculate_avail(&mut self) { + self.avail = self.size - self.used; + debug_assert!(self.avail >= 0); + debug_assert!(self.used >= 0); + } +} + +#[derive(Clone, Hash, PartialEq, Eq)] +struct Grid { + nodes: Vec<Vec<Node>>, + goal_x: i8, + goal_y: i8 +} + +impl Grid { + fn new(nodes: Vec<Node>) -> Grid { + let mut grid_nodes = Vec::new(); + let mut next_col = Vec::new(); + + let mut current_x = 0; + + for node in nodes { + if current_x != node.x { + grid_nodes.push(next_col); + next_col = Vec::new(); + current_x += 1; + } + + next_col.push(node); + } + grid_nodes.push(next_col); + grid_nodes = Grid::normalize(grid_nodes); + + Grid { + nodes: grid_nodes, + goal_x: current_x, + goal_y: 0 + } + } + + fn normalize(mut nodes: Vec<Vec<Node>>) -> Vec<Vec<Node>> { + for x in 0..nodes.len() { + for y in 0..nodes[x].len() { + nodes[x][y].size = ((nodes[x][y].size + 50)/100) * 100; + nodes[x][y].used = ((nodes[x][y].used + 50)/100) * 100; + nodes[x][y].avail = ((nodes[x][y].avail + 50)/100) * 100; + } + } + nodes + } + + fn is_final(&self) -> bool { + self.goal_x == 0 && self.goal_y == 0 + } + + fn make_move(&self, x: i8, y: i8, dx: i8, dy: i8) -> Option<Grid> { + if x+dx < 0 || x+dx >= self.nodes.len() as i8 || y+dy < 0 || y+dy >= self.nodes[x as usize].len() as i8 { + return None; + } + if !self.nodes[x as usize][y as usize].is_viable_pair(&self.nodes[(x+dx) as usize][(y+dy) as usize]) { + return None; + } + + let mut new_grid = self.clone(); + new_grid.nodes[(x+dx) as usize][(y+dy) as usize].used += new_grid.nodes[x as usize][y as usize].used; + new_grid.nodes[(x+dx) as usize][(y+dy) as usize].recalculate_avail(); + new_grid.nodes[x as usize][y as usize].used = 0; + new_grid.nodes[x as usize][y as usize].recalculate_avail(); + + if new_grid.goal_x == x && new_grid.goal_y == y { + new_grid.goal_x = x+dx; + new_grid.goal_y = y+dy; + } + + Some(new_grid) + } + + fn available_moves(&self) -> Vec<Grid> { + let mut moves = Vec::with_capacity(4); + + for x in 0..self.nodes.len() as i8 { + for y in 0..self.nodes[x as usize].len() as i8 { + match self.make_move(x, y, -1, 0) { + Some(grid) => { moves.push(grid); }, + None => {} + }; + match self.make_move(x, y, 0, -1) { + Some(grid) => { moves.push(grid); }, + None => {} + }; + match self.make_move(x, y, 1, 0) { + Some(grid) => { moves.push(grid); }, + None => {} + }; + match self.make_move(x, y, 0, 1) { + Some(grid) => { moves.push(grid); }, + None => {} + }; + } + } + + moves + } +} + + +fn main() { + let nodes = read_input(); + + let initial = Grid::new(nodes); + println!("Initial grid has {} possible moves", initial.available_moves().len()); + + let mut explored: HashSet<Grid> = HashSet::new(); + let mut frontier: HashMap<Grid, u32> = HashMap::new(); + frontier.insert(initial, 0); + let mut found_final = false; + + while !found_final { + let (best_frontier, moves) = find_best_frontiers(&frontier); + + let new_states = best_frontier.available_moves(); + found_final = new_states.iter().any(|ref s| s.is_final()); + + for state in new_states { + if !(explored.contains(&state) || frontier.contains_key(&state)) { + frontier.insert(state, moves+1); + } + } + + frontier.remove(&best_frontier); + explored.insert(best_frontier); + } + + let (final_frontier, moves) = frontier.iter().find(|&(s, _)| s.is_final()).unwrap(); + println!("It took {} moves to get the data", moves); +} + +fn read_input() -> Vec<Node> { + let file = BufReader::new(File::open("input.txt").unwrap()); + + file.lines() + .skip(2) + .filter_map(|line| Node::from_str(line.unwrap().as_ref()).ok()) + .collect() +} + +fn find_best_frontiers(frontier: &HashMap<Grid, u32>) -> (Grid, u32) { + frontier.iter().min_by_key(|&(ref grid, &moves)| { + grid.goal_x as u32 + grid.goal_y as u32 + moves + }).map(|(&ref grid, &moves)| (grid.clone(), moves.clone())).unwrap() +} diff --git a/2016/aoc23/Cargo.lock b/2016/aoc23/Cargo.lock new file mode 100644 index 0000000..c6ab041 --- /dev/null +++ b/2016/aoc23/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc23" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc23/Cargo.toml b/2016/aoc23/Cargo.toml new file mode 100644 index 0000000..39fd06e --- /dev/null +++ b/2016/aoc23/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc23" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc23/input.txt b/2016/aoc23/input.txt new file mode 100644 index 0000000..3ff0460 --- /dev/null +++ b/2016/aoc23/input.txt @@ -0,0 +1,26 @@ +cpy a b +dec b +cpy a d +cpy 0 a +cpy b c +inc a +dec c +jnz c -2 +dec d +jnz d -5 +dec b +cpy b c +cpy c d +dec d +inc c +jnz d -2 +tgl c +cpy -16 c +jnz 1 c +cpy 90 c +jnz 90 d +inc a +inc d +jnz d -2 +inc c +jnz c -5 diff --git a/2016/aoc23/src/main.rs b/2016/aoc23/src/main.rs new file mode 100644 index 0000000..a12fa18 --- /dev/null +++ b/2016/aoc23/src/main.rs @@ -0,0 +1,247 @@ +extern crate regex; +use regex::Regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +enum Instruction { + Inc(usize), + Dec(usize), + + TglLit(i32), + TglReg(usize), + + CpyLitReg(i32, usize), + CpyRegReg(usize, usize), + CpyLitLit(i32, i32), + CpyRegLit(usize, i32), + + JnzLitLit(i32, i32), + JnzRegLit(usize, i32), + JnzLitReg(i32, usize), + JnzRegReg(usize, usize), + + Noop +} + +impl Instruction { + fn parse(line: &str) -> Instruction { + match Regex::new(r"inc (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::Inc(reg); + }, + _ => {} + } + + match Regex::new(r"dec (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::Dec(reg); + }, + _ => {} + } + + + match Regex::new(r"tgl (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::TglReg(reg); + }, + _ => {} + } + + match Regex::new(r"tgl ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let lit = cap.at(1).unwrap().parse().unwrap(); + return Instruction::TglLit(lit); + }, + _ => {} + } + + + match Regex::new(r"cpy ([-\d]+) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::CpyLitReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"cpy (a|b|c|d) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::CpyRegReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"cpy ([-\d]+) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::CpyLitLit(src, dest); + }, + _ => {} + } + + match Regex::new(r"cpy (a|b|c|d) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::CpyRegReg(src, dest); + }, + _ => {} + } + + + match Regex::new(r"jnz ([-\d]+) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::JnzLitReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"jnz (a|b|c|d) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::JnzRegReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"jnz ([-\d]+) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::JnzLitLit(src, dest); + }, + _ => {} + } + + match Regex::new(r"jnz (a|b|c|d) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::JnzRegLit(src, dest); + }, + _ => {} + } + + panic!("Invalid instruction line"); + } + + fn toggle(&self) -> Self { + match *self { + Instruction::Inc(a) => Instruction::Dec(a), + Instruction::Dec(a) => Instruction::Inc(a), + + Instruction::TglLit(_) => Instruction::Noop, + Instruction::TglReg(a) => Instruction::Inc(a), + + Instruction::CpyLitReg(a, b) => Instruction::JnzLitReg(a, b), + Instruction::CpyRegReg(a, b) => Instruction::JnzRegReg(a, b), + Instruction::CpyLitLit(a, b) => Instruction::JnzLitLit(a, b), + Instruction::CpyRegLit(a, b) => Instruction::JnzRegLit(a, b), + + Instruction::JnzLitLit(a, b) => Instruction::CpyLitLit(a, b), + Instruction::JnzRegLit(a, b) => Instruction::CpyRegLit(a, b), + Instruction::JnzLitReg(a, b) => Instruction::CpyLitReg(a, b), + Instruction::JnzRegReg(a, b) => Instruction::CpyRegReg(a, b), + Instruction::Noop => Instruction::Noop + } + } +} + +fn main() { + let mut program = read_file(); + + let mut registers: [i32; 4] = [12, 0, 0, 0]; + let mut pc: usize = 0; + + while pc < program.len() { + let mut pc_next: usize = pc+1; + + match program[pc] { + Instruction::Inc(dest) => { + registers[dest] += 1; + }, + Instruction::Dec(dest) => { + registers[dest] -= 1; + }, + + Instruction::TglReg(offset) => { + let line_to_toggle = (pc as i32 + registers[offset]) as usize; + if line_to_toggle > 0 && line_to_toggle < program.len() { + program[line_to_toggle] = program[line_to_toggle].toggle(); + } + }, + Instruction::TglLit(offset) => { + let line_to_toggle = (pc as i32 + offset) as usize; + if line_to_toggle > 0 && line_to_toggle < program.len() { + program[line_to_toggle] = program[line_to_toggle].toggle(); + } + }, + + Instruction::CpyLitReg(src, dest) => { + registers[dest] = src; + }, + Instruction::CpyRegReg(src, dest) => { + registers[dest] = registers[src]; + }, + Instruction::CpyLitLit(_, _) | Instruction::CpyRegLit(_, _) => {}, + + Instruction::JnzRegLit(condition, offset) => { + if registers[condition] != 0 { + pc_next = (pc as i32 + offset) as usize; + } + }, + Instruction::JnzLitLit(condition, offset) => { + if condition != 0 { + pc_next = (pc as i32 + offset) as usize; + } + }, + Instruction::JnzRegReg(condition, offset) => { + if registers[condition] != 0 { + pc_next = (pc as i32 + registers[offset]) as usize; + } + }, + Instruction::JnzLitReg(condition, offset) => { + if condition != 0 { + pc_next = (pc as i32 + registers[offset]) as usize; + } + }, + Instruction::Noop => {} + } + + pc = pc_next; + } + + println!("a: {}, b: {}, c: {}, d: {}", registers[0], registers[1], registers[2], registers[3]); + +} + +fn to_register_index(name: &str) -> usize { + match name { + "a" => 0, + "b" => 1, + "c" => 2, + "d" => 3, + _ => panic!("Invalid register provided") + } +} + +fn read_file() -> Vec<Instruction> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap()) + .filter(|line| line.len() > 0) + .map(|line| Instruction::parse(line.trim())) + .collect() +} diff --git a/2016/aoc24/Cargo.lock b/2016/aoc24/Cargo.lock new file mode 100644 index 0000000..d8b394a --- /dev/null +++ b/2016/aoc24/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc24" +version = "0.1.0" + diff --git a/2016/aoc24/Cargo.toml b/2016/aoc24/Cargo.toml new file mode 100644 index 0000000..26becbd --- /dev/null +++ b/2016/aoc24/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc24" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] diff --git a/2016/aoc24/input.txt b/2016/aoc24/input.txt new file mode 100644 index 0000000..cc45a4f --- /dev/null +++ b/2016/aoc24/input.txt @@ -0,0 +1,39 @@ +####################################################################################################################################################################################### +#...........#.....#...........#.#.......#.....#.#...............#.....#.....#.......#.......#.......#.....................#.........#.....#...#3......#...#.#.............#.......#...# +#####.#.#.###.###.#####.#.#####.#.###.###.###.#.#.#.#.#.#.###.#.###.###.###.#.#######.#.#.#.###.###.#.#.#.#####.#.#.#####.###.#.#######.#############.#.#.#.#.#.#.###.#.#.#.#.###.#.#.# +#...#.#.#.#.....#.#...#...#.....#.....#.#...#.........#.....................#.....#...#...#.......#.....#.#.........#.#.#.#.#.......................#...#...#.#.#.#.....#.#.........#.# +#.#.#.#.#.#####.#.#.#.#.#.#.#.#.###.#.#.###.#.#.#.#.#.#########.#.###.###.#.#.###.###.#.#.#.#.###.#.#.#.#.#.#.#####.#.#.###.###.#######.#.#.#.###.#.###.#.#.#####.#####.#.#.###.#.#.#.# +#.#.#...#.....#.#.....#...#.#...#.#...#.......#...........#...#...#...#.#.....#.#...#...........#.#.......#...#...#.#.........#...#.......#.#...#.....#...#.......#.#.#.............#.# +#.#######.#.#.###.#.#.#####.#.#.#.#.###.#####.#.#.###.#.#.#.#.#.#.#.#.#.#.###.#.#.#.###.#######.#######.#.#.###.#.#.#.#.#.#.###.#.#.#.#.#.###.#.#####.#.#.#.#.#.#.#.#.#.###.#.#####.#.# +#.#...#.....#.......#.......#.#.......#...#.#.....#.#.#.#.#.#.......#...#.....#.#.#.#.#.........#...#...#...#.......#...#...#.....#.....#...#.........#...#.#...#...#...#.........#.#.# +#.#.#.#.###.###.#.#.#.###.###.#.#.###.#.#.#.#####.#.###.#.#####.#####.###.#.#.#.#.###.#.#.#.###.###.#.#.#.#.#.#####.#.###.#.#.###.#.#.#.#.###.###.#######.#.###.###.#.#######.#.#.#.#.# +#.#...#...#...............#...#...#...#.#.........#.#...#...#.#...#.#.....#...#.#...#.#.#...#.#.#.#.#.....#...#...#.......#.#...#.........#.#.....#.#...#.....#.#...#.#2#.....#.......# +#.#.#####.#########.#.###.#.#####.#.#.#.#######.#.###.#.#.#.#.###.#.#.###.#.###.#.#.#.#.#.###.###.#.#.#######.#.###.#.#.#.#.#.#.#.#####.###.#.###.#.#####.#.#.###.#.#.#.###.#.###.###.# +#...#...........#.....#.......#...#0..........#...#.....#.#...#.#...#.#.#...#.#.......#.........#...#.#...#.#.#.......#...#.#.........#.#.....................#.#.#.#.....#.#.....#...# +#.###.#.#.#.#.#.###.#.#.#.#.#.###.#.#.###.#.#.#.###.###.#.#####.#.#.#.#.###.#.#.###.#.#.###.###.#.#####.#.#.#.###.#.#######.#######.#.#.#.###.#.#.#.#.#.#######.#.#.#####.#.###.###.#.# +#...#...#...#.#...........#...#.#.....#...#...#.....#.#.............#...#.........#...#.....#...#.......#...#.#.............#.........#...#.#.....#.#.........#.............#...#.....# +#.#.#.###.#.###.#.#.#.###.#.###.#######.#.#.###.#.#.#.#.###.#.###.#.#.#.#.#####.#.#.#.#####.#.#####.#.#.#.#.###.###.#.###.###.###.#.#.#.###.#.#.###.#.#.###.#########.#####.#.#.#.##### +#.#...#.#.......#...#.....#.....#...#...#.....#...#...#.........#.....#.#.........#.....#.....#.........#...#.#.....#.#...#...#.#.#...#.#...#.........#.#...#.........#.#.......#.....# +#.#####.#.###.#.#.#.###.#.#.#.#.#.#.###.#.#.#.###.###.#.###.#.###.#.#.#.###.#.#####.###.#.#.#.#.#.#####.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#.###.#.#.# +#.....#...#...........#...#...........#.#.....#...#.....#...#.#.#.#...#.....#...#...#...............#...#.........#...#.....#...#.#...#.#...#.....#.....#.....#...#.#...#...#.#.......# +###.###.#.#.#####.###.#####.#.###.#.#.#####.#.###.#.###.#.###.#.#.#.#.###.#.###.#.#.#.#.###.#.###.#.#.#.#.#.#.###.#.#.#.###.###.#.#.###.#########.#.#####.###########.#.###.###.#####.# +#...#1#...#...#.......#...#...#.#...#...#...........#.#.......#.......#.#.........#.#...#...#...............#...#.....#.#...#.#.....#.........#...#.....#.#...#...#.....#.#.#.#...#...# +#.###.###.#.#.#.#####.#.#.#.#.#.#.#####.#####.#.#####.#.#.#.#.###.#.#.#.###.#.###.#.###.#.#.#####.#.#.#####.#.#.###.#.###.#.#.#.#.#.#.#####.#.#.#.#.###.#.#.###.#.#.#.#.#.#.#.###.#.#.# +#.....#.#.#.#.........#.#.#.....#.....#...#.....#...#.............#...#...#.....#...#.......#.......#.#.....#...#...#.#...#.....#.#...#.....#.#.#.#.#.#.#.......#...........#.#5#.....# +#.###.#.#.###.###.###.#.#####.#.#.###.###.#.###.#############.#######.#.###.#.###.#.#####.#.#.#.#####.#.#.#####.#.#.#.#.#.#######.#.#.###########.#.#.#.#.#.#.#.#.#.###.#.#.#.#.#.###.# +#.....#...#...................#.......#...#...#.#.....#.............#.....#...#.....#.......#.#.#.........#.........#.......#.......#...#.........#.#...#...#.....#.#.....#...#...#.#.# +#.###.###.###########.###.#####.#####.###.#.#.#.#.#.#.###.#.###.#.#######.#.#.#.#.#.#.###.#.#.#####.#.#.#.#######.#.###.#.#.###.#.#.#.###.#####.#####.#.#.#.#.###.#.###.###########.#.# +#.#.#.#...#...#.....#.....#.#.......#.....#.....#...........#.#...#.........#.#.#.#.....#.#.#...........#...#...#...#.......#...#.........#.....#.....#.....#.......#...#...#.#...#...# +#.#.#.#.#.#########.#.#.###.#.#.###.###.#.#.#.###.#####.#.#.#.#.#.#.#######.#.#.#######.#.###.#.###.###.#.###.#.#.#.#######.#######.#.#.#.#####.#.###.#.#####.#.###.#.#.###.#.#######.# +#.#...#...#.#...................#.#...#.#...#.......#.#...#.#...#.#.#.....#.#...#...#...#.#.............#.....#...........#.........#...#.#.#.....#.......#.......#.....#...#.#...#...# +###.#.#.#.#.#.#.###.#.###.#####.#.#####.#.#.###.#.#.#.#####.#.###.#####.#.#.#.#.#.#.#.###.#.#.#####.###.#.###.#####.#.#.#.#####.###.#.#.#.#.#.#######.###.#.#.#########.###.#.#######.# +#.....#...................#...#.#...#...#...........#.#.......#.#.....#.#.....#...........#.....#.........#.#...........#...#.....#...#.....#.............#.#.#.........#.#.#.#.......# +#.#.#.#.#.###.#.#.#.#.#########.###.#.#.#.#########.#.#.#.#.#.#.###########.#.#.###.###.###.#.#.#.#.#.###.#.###.#.###.#.###.###.#.###.#.#.#####.#.#.#######.#.#.###.###.#.#.#.###.##### +#...#.#.#....7#.#...#.#.........#.....#...#.#.......#.....#...........#.#...#.......#.#...#.#...#...........#...#.#...#.....#...#.#.#...........#...#.#...#...#4....#...#...#...#.....# +###.#.#.###.#####.#.#.#.#.#.#.#.#.#.#.###.#.###.#.###.#######.#.#.###.#.#####.#.#####.###.#.###.#.#.#.#.#####.###.#.###.#.#.#.#.###.#.#.###.#.#.###.#.###.#########.#.###.#.#.#.#.#.#.# +#.....#.#.#.......#.#.#.......#.#.#.............#...#.........#.......#.#.#...........#.....#.....#...#...#.#.....#...#.....#.#.#...#...#...#.....#...#...#.#...#...#.#.#.....#...#.#.# +#.###.#.#.#########.#.#.#.#######.#.#.#.#.###.###.#####.#.#.#.#.#.###.#.#.#.#.#####.#.#.###.#.#.#.#.###.###.###.#.#.#######.#.#.###.#####.#.#.###.#.#.#####.###.#.#.###.#.#########.### +#.......#...#...#...#...#.#...#...#.#.#...#.#...........#.........#...#.#.#.#.....#...#.....#.#.....#...#...#...#.#.#.#...#...#.#...#.....#...........#.#.........#.....#.#.#...#.....# +#####.###.#####.#.#####.#######.#.#.#.###.#.#######.###.#####.###.#.#.#.#.#.#####.#####.###.###.###.#.#.###.#.#.#.###.#.#.###.#.#.#####.#.###.#.#.#.###.#.#.#.#.#.###.###.#.#.###.#.#.# +#.....#.#.#.......#...#.#.#.....#.........#...#.....#6......#...#.#...........#.......#.............#...#...#...#...#.#...#...#...#.....#.........#.#...#.....#.#.#.......#...#.#.#...# +####################################################################################################################################################################################### diff --git a/2016/aoc24/src/main.rs b/2016/aoc24/src/main.rs new file mode 100644 index 0000000..c4d620e --- /dev/null +++ b/2016/aoc24/src/main.rs @@ -0,0 +1,135 @@ +use std::io::BufReader; +use std::io::BufRead; +use std::fs::File; +use std::collections::HashMap; + +struct Map { + walls: Vec<Vec<bool>>, + destinations: Vec<(usize, usize)>, + start: (usize, usize) +} + +impl Map { + fn new(input: &[String]) -> Map { + let mut walls = Vec::with_capacity(input.len()); + let mut start = (0, 0); + let mut destinations = Vec::new(); + + let mut y = 0; + + for line in input { + let mut x = 0; + let mut wall_row = Vec::with_capacity(line.len()); + for c in line.chars() { + wall_row.push(c == '#'); + if c == '0' { + start = (y, x); + } + else if c.is_numeric() { + destinations.push((y, x)); + } + + x += 1; + } + + walls.push(wall_row); + y += 1; + } + + Map { + walls: walls, + destinations: destinations, + start: start + } + } + + fn is_valid_position(&self, y: i32, x: i32) -> bool { + y > 0 && + x > 0 && + (y as usize) < self.walls.len() && + (x as usize) < self.walls[y as usize].len() && + !self.walls[y as usize][x as usize] + } +} + +#[derive(Clone, Hash, PartialEq, Eq)] +struct State { + robot_location: (usize, usize), + destinations_hit: Vec<bool> +} + +impl State { + fn new(map: &Map) -> State { + State { + robot_location: map.start, + destinations_hit: map.destinations.iter().map(|_| false).collect() + } + } + + fn next_state(&self, movement: (i32, i32), map: &Map) -> Option<State> { + let (y, x) = self.robot_location; + let (dy, dx) = movement; + let y2 = y as i32 + dy; + let x2 = x as i32 + dx; + + if !map.is_valid_position(y2, x2) { + return None; + } + + let y2 = y2 as usize; + let x2 = x2 as usize; + + Some(State { + robot_location: (y2, x2), + destinations_hit: self.destinations_hit.iter() + .zip(map.destinations.iter()) + .map(|(&hit, &(dest_y, dest_x))| hit || (dest_y == y2 && dest_x == x2)) + .collect() + }) + } + + fn next_states(&self, map: &Map) -> Vec<State> { + [(-1, 0), (1, 0), (0, -1), (0, 1)].iter() + .filter_map(|&movement| self.next_state(movement, &map)) + .collect() + } + + fn is_complete(&self, map: &Map) -> bool { + self.destinations_hit.iter().all(|&x| x) && self.robot_location == map.start + } +} + +fn main() { + let map = Map::new(&read_file()); + let initial = State::new(&map); + + let mut states = HashMap::new(); + states.insert(initial, 0); + + let mut moves = 0; + + while !states.iter().any(|(&ref s, _)| s.is_complete(&map)) { + let new_states = states.iter() + .filter(|&(_, &m)| m == moves) + .flat_map(|(&ref s, _)| s.next_states(&map)) + .collect::<Vec<_>>(); + + moves += 1; + + for state in new_states { + if !states.contains_key(&state) { + states.insert(state, moves); + } + } + } + + println!("Final state found in {} moves", moves); +} + +fn read_file() -> Vec<String> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap()) + .filter(|line| line.len() > 0) + .collect() +} diff --git a/2016/aoc25/Cargo.lock b/2016/aoc25/Cargo.lock new file mode 100644 index 0000000..c4553c9 --- /dev/null +++ b/2016/aoc25/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc25" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc25/Cargo.toml b/2016/aoc25/Cargo.toml new file mode 100644 index 0000000..aa84af4 --- /dev/null +++ b/2016/aoc25/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc25" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc25/input.txt b/2016/aoc25/input.txt new file mode 100644 index 0000000..a9734a4 --- /dev/null +++ b/2016/aoc25/input.txt @@ -0,0 +1,30 @@ +cpy a d +cpy 7 c +cpy 362 b +inc d +dec b +jnz b -2 +dec c +jnz c -5 +cpy d a +jnz 0 0 +cpy a b +cpy 0 a +cpy 2 c +jnz b 2 +jnz 1 6 +dec b +dec c +jnz c -4 +inc a +jnz 1 -7 +cpy 2 b +jnz c 2 +jnz 1 4 +dec b +dec c +jnz 1 -4 +jnz 0 0 +out b +jnz a -19 +jnz 1 -21 diff --git a/2016/aoc25/src/main.rs b/2016/aoc25/src/main.rs new file mode 100644 index 0000000..7db2ce5 --- /dev/null +++ b/2016/aoc25/src/main.rs @@ -0,0 +1,284 @@ +extern crate regex; +use regex::Regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +enum Instruction { + Inc(usize), + Dec(usize), + + TglLit(i32), + TglReg(usize), + + OutLit(i32), + OutReg(usize), + + CpyLitReg(i32, usize), + CpyRegReg(usize, usize), + CpyLitLit(i32, i32), + CpyRegLit(usize, i32), + + JnzLitLit(i32, i32), + JnzRegLit(usize, i32), + JnzLitReg(i32, usize), + JnzRegReg(usize, usize), + + Noop +} + +impl Instruction { + fn parse(line: &str) -> Instruction { + match Regex::new(r"inc (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::Inc(reg); + }, + _ => {} + } + + match Regex::new(r"dec (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::Dec(reg); + }, + _ => {} + } + + + match Regex::new(r"tgl (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::TglReg(reg); + }, + _ => {} + } + + match Regex::new(r"tgl ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let lit = cap.at(1).unwrap().parse().unwrap(); + return Instruction::TglLit(lit); + }, + _ => {} + } + + + match Regex::new(r"out (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let reg = to_register_index(cap.at(1).unwrap()); + return Instruction::OutReg(reg); + }, + _ => {} + } + + match Regex::new(r"out ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let lit = cap.at(1).unwrap().parse().unwrap(); + return Instruction::OutLit(lit); + }, + _ => {} + } + + + match Regex::new(r"cpy ([-\d]+) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::CpyLitReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"cpy (a|b|c|d) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::CpyRegReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"cpy ([-\d]+) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::CpyLitLit(src, dest); + }, + _ => {} + } + + match Regex::new(r"cpy (a|b|c|d) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::CpyRegReg(src, dest); + }, + _ => {} + } + + + match Regex::new(r"jnz ([-\d]+) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::JnzLitReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"jnz (a|b|c|d) (a|b|c|d)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = to_register_index(cap.at(2).unwrap()); + return Instruction::JnzRegReg(src, dest); + }, + _ => {} + } + + match Regex::new(r"jnz ([-\d]+) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = cap.at(1).unwrap().parse().unwrap(); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::JnzLitLit(src, dest); + }, + _ => {} + } + + match Regex::new(r"jnz (a|b|c|d) ([-\d]+)").unwrap().captures(line) { + Some(cap) => { + let src = to_register_index(cap.at(1).unwrap()); + let dest = cap.at(2).unwrap().parse().unwrap(); + return Instruction::JnzRegLit(src, dest); + }, + _ => {} + } + + panic!("Invalid instruction line"); + } + + fn toggle(&self) -> Self { + match *self { + Instruction::Inc(a) => Instruction::Dec(a), + Instruction::Dec(a) => Instruction::Inc(a), + + Instruction::TglLit(_) => Instruction::Noop, + Instruction::TglReg(a) => Instruction::Inc(a), + + Instruction::OutLit(_) => Instruction::Noop, + Instruction::OutReg(a) => Instruction::Inc(a), + + Instruction::CpyLitReg(a, b) => Instruction::JnzLitReg(a, b), + Instruction::CpyRegReg(a, b) => Instruction::JnzRegReg(a, b), + Instruction::CpyLitLit(a, b) => Instruction::JnzLitLit(a, b), + Instruction::CpyRegLit(a, b) => Instruction::JnzRegLit(a, b), + + Instruction::JnzLitLit(a, b) => Instruction::CpyLitLit(a, b), + Instruction::JnzRegLit(a, b) => Instruction::CpyRegLit(a, b), + Instruction::JnzLitReg(a, b) => Instruction::CpyLitReg(a, b), + Instruction::JnzRegReg(a, b) => Instruction::CpyRegReg(a, b), + Instruction::Noop => Instruction::Noop + } + } +} + +fn main() { + let expected_output = vec!(0, 1, 0, 1, 0, 1, 0, 1, 0, 1); + let min_input = (0..).find(|&i| run_program(i) == expected_output).unwrap(); + println!("{}", min_input); +} + + +fn run_program(input: i32) -> Vec<i32> { + let mut transmission = Vec::new(); + let mut program = read_file(); + + let mut registers: [i32; 4] = [input, 0, 0, 0]; + let mut pc: usize = 0; + + while pc < program.len() && transmission.len() < 10 { + let mut pc_next: usize = pc+1; + + match program[pc] { + Instruction::Inc(dest) => { + registers[dest] += 1; + }, + Instruction::Dec(dest) => { + registers[dest] -= 1; + }, + + Instruction::TglReg(offset) => { + let line_to_toggle = (pc as i32 + registers[offset]) as usize; + if line_to_toggle > 0 && line_to_toggle < program.len() { + program[line_to_toggle] = program[line_to_toggle].toggle(); + } + }, + Instruction::TglLit(offset) => { + let line_to_toggle = (pc as i32 + offset) as usize; + if line_to_toggle > 0 && line_to_toggle < program.len() { + program[line_to_toggle] = program[line_to_toggle].toggle(); + } + }, + + Instruction::OutReg(output) => { + transmission.push(registers[output]); + }, + Instruction::OutLit(output) => { + transmission.push(output); + }, + + Instruction::CpyLitReg(src, dest) => { + registers[dest] = src; + }, + Instruction::CpyRegReg(src, dest) => { + registers[dest] = registers[src]; + }, + Instruction::CpyLitLit(_, _) | Instruction::CpyRegLit(_, _) => {}, + + Instruction::JnzRegLit(condition, offset) => { + if registers[condition] != 0 { + pc_next = (pc as i32 + offset) as usize; + } + }, + Instruction::JnzLitLit(condition, offset) => { + if condition != 0 { + pc_next = (pc as i32 + offset) as usize; + } + }, + Instruction::JnzRegReg(condition, offset) => { + if registers[condition] != 0 { + pc_next = (pc as i32 + registers[offset]) as usize; + } + }, + Instruction::JnzLitReg(condition, offset) => { + if condition != 0 { + pc_next = (pc as i32 + registers[offset]) as usize; + } + }, + Instruction::Noop => {} + } + + pc = pc_next; + } + + transmission +} + +fn to_register_index(name: &str) -> usize { + match name { + "a" => 0, + "b" => 1, + "c" => 2, + "d" => 3, + _ => panic!("Invalid register provided") + } +} + +fn read_file() -> Vec<Instruction> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap()) + .filter(|line| line.len() > 0) + .map(|line| Instruction::parse(line.trim())) + .collect() +} diff --git a/2016/aoc3/Cargo.lock b/2016/aoc3/Cargo.lock new file mode 100644 index 0000000..f581b3c --- /dev/null +++ b/2016/aoc3/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc3" +version = "0.1.0" + diff --git a/2016/aoc3/Cargo.toml b/2016/aoc3/Cargo.toml new file mode 100644 index 0000000..c8a1b62 --- /dev/null +++ b/2016/aoc3/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc3" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] diff --git a/2016/aoc3/input.txt b/2016/aoc3/input.txt new file mode 100644 index 0000000..1458df8 --- /dev/null +++ b/2016/aoc3/input.txt @@ -0,0 +1,1734 @@ + 330 143 338 + 769 547 83 + 930 625 317 + 669 866 147 + 15 881 210 + 662 15 70 + 273 277 707 + 50 592 770 + 280 313 407 + 642 487 372 + 94 619 295 + 734 243 141 + 220 141 515 + 198 824 745 + 210 787 964 + 213 627 601 + 918 4 447 + 805 630 802 + 711 237 987 + 938 552 388 + 643 405 779 + 803 747 525 + 917 832 631 + 899 292 843 + 81 206 445 + 141 874 465 + 177 974 54 + 520 725 814 + 271 958 554 + 779 579 264 + 358 18 257 + 978 77 270 + 984 88 131 + 475 702 940 + 183 756 160 + 383 941 820 + 806 142 646 + 793 275 804 + 53 272 368 + 942 821 785 + 863 830 902 + 219 52 199 + 473 479 351 + 860 522 361 + 890 240 216 + 94 756 407 + 310 189 468 + 234 909 178 + 889 667 756 + 429 485 730 + 825 405 30 + 943 806 253 + 98 455 365 + 998 454 290 + 971 576 223 + 64 429 273 + 945 779 63 + 352 960 59 + 672 948 577 + 782 43 567 + 460 315 719 + 825 604 183 + 453 442 788 + 694 632 334 + 569 619 317 + 337 49 17 + 878 468 660 + 393 598 717 + 550 827 159 + 540 362 346 + 66 713 380 + 491 477 44 + 411 114 320 + 554 96 250 + 306 67 196 + 769 553 333 + 762 436 382 + 278 322 153 + 894 603 334 + 539 441 844 + 486 162 927 + 197 9 218 + 94 221 804 + 250 220 913 + 557 626 486 + 562 705 630 + 968 922 285 + 518 36 468 + 18 608 83 + 512 611 530 + 534 37 65 + 621 136 90 + 239 113 139 + 371 640 956 + 629 54 959 + 531 620 338 + 682 499 810 + 798 170 968 + 187 640 645 + 660 535 332 + 663 530 314 + 64 26 65 + 55 285 488 + 620 288 52 + 642 474 450 + 455 9 962 + 51 760 489 + 426 760 833 + 304 783 772 + 498 765 695 + 635 53 126 + 44 430 774 + 979 943 838 + 962 892 64 + 494 709 614 + 7 695 120 + 503 114 606 + 362 340 689 + 509 367 389 + 673 410 664 + 773 262 558 + 897 958 245 + 140 773 483 + 965 468 584 + 546 209 668 + 856 381 184 + 274 237 762 + 888 677 906 + 871 516 405 + 102 529 912 + 285 724 885 + 352 501 53 + 774 139 245 + 380 309 594 + 813 185 765 + 530 645 965 + 958 618 120 + 851 202 957 + 737 476 131 + 595 546 108 + 716 113 66 + 327 215 318 + 397 343 390 + 351 143 103 + 138 91 31 + 108 224 919 + 230 276 896 + 426 975 177 + 327 975 918 + 238 365 764 + 328 799 775 + 590 906 967 + 578 460 338 + 507 619 647 + 711 617 867 + 933 478 734 + 820 760 721 + 199 711 824 + 983 214 228 + 382 150 648 + 415 782 242 + 615 754 445 + 693 689 590 + 382 784 482 + 997 181 322 + 682 241 172 + 587 302 252 + 184 135 254 + 574 104 549 + 88 738 796 + 486 715 861 + 62 491 815 + 463 434 569 + 519 622 310 + 199 443 782 + 572 657 85 + 763 517 844 + 750 175 835 + 228 269 710 + 611 316 551 + 883 546 296 + 169 693 18 + 992 743 316 + 263 529 529 + 705 570 4 + 918 706 527 + 609 285 971 + 260 533 112 + 711 486 904 + 820 40 472 + 997 301 129 + 257 288 343 + 635 439 375 + 560 381 417 + 773 105 145 + 58 963 267 + 976 742 424 + 994 441 384 + 389 770 514 + 782 463 335 + 919 727 276 + 780 794 372 + 326 180 590 + 918 946 257 + 889 842 181 + 507 61 464 + 762 835 443 + 827 607 982 + 174 875 544 + 934 885 589 + 32 343 757 + 987 826 257 + 981 782 844 + 446 291 397 + 443 800 421 + 165 668 539 + 410 373 487 + 422 803 881 + 546 998 953 + 291 607 160 + 919 894 62 + 842 718 117 + 110 816 582 + 470 836 596 + 575 687 35 + 37 835 374 + 90 954 354 + 101 141 407 + 174 398 499 + 173 737 964 + 4 365 950 + 946 616 634 + 906 904 619 + 40 789 16 + 788 769 76 + 737 867 88 + 565 812 31 + 508 380 201 + 34 935 339 + 500 862 326 + 431 181 475 + 403 346 585 + 88 530 708 + 731 137 781 + 715 563 272 + 817 659 932 + 396 368 360 + 162 683 376 + 278 620 39 + 525 910 371 + 688 524 149 + 488 998 279 + 286 392 523 + 325 144 406 + 79 532 419 + 540 460 465 + 222 832 416 + 517 507 46 + 87 744 183 + 382 819 701 + 306 763 647 + 744 74 913 + 62 813 849 + 691 874 775 + 291 422 314 + 432 630 809 + 611 510 566 + 583 745 289 + 397 19 727 + 188 766 442 + 96 108 329 + 963 719 598 + 963 764 469 + 444 636 731 + 792 636 422 + 993 1 416 + 518 300 532 + 298 312 736 + 316 111 463 + 825 569 35 + 858 591 584 + 809 84 607 + 681 610 740 + 383 279 210 + 851 733 615 + 287 959 160 + 856 851 171 + 606 115 211 + 310 541 845 + 506 119 319 + 665 471 562 + 382 885 798 + 440 29 595 + 113 903 475 + 257 773 846 + 306 741 776 + 97 804 76 + 489 332 423 + 466 632 613 + 86 739 481 + 199 846 712 + 62 282 809 + 155 681 142 + 705 525 270 + 159 800 117 + 612 664 316 + 505 616 837 + 578 839 770 + 942 535 122 + 542 781 512 + 552 22 475 + 760 791 97 + 432 626 837 + 26 616 336 + 412 316 702 + 108 232 242 + 158 311 449 + 60 141 325 + 58 1 714 + 532 977 123 + 531 978 598 + 679 899 57 + 645 523 54 + 167 892 14 + 164 574 492 + 105 37 491 + 132 555 485 + 600 879 508 + 608 843 222 + 270 255 398 + 232 960 281 + 241 995 436 + 113 674 411 + 381 567 5 + 697 450 966 + 726 857 969 + 722 686 965 + 543 20 453 + 955 689 554 + 858 161 923 + 140 979 953 + 786 836 237 + 200 322 875 + 311 623 398 + 510 814 945 + 67 387 825 + 621 620 740 + 630 842 163 + 545 75 373 + 506 531 501 + 301 571 357 + 746 491 253 + 37 29 748 + 769 507 754 + 69 886 861 + 423 629 856 + 380 723 83 + 875 647 657 + 144 696 580 + 896 49 629 + 275 598 374 + 118 636 279 + 277 80 529 + 623 130 493 + 368 712 621 + 833 730 512 + 59 767 829 + 105 933 731 + 54 240 108 + 803 235 992 + 837 726 881 + 426 855 450 + 636 730 731 + 840 561 977 + 996 229 670 + 508 234 186 + 529 108 917 + 373 337 795 + 681 35 565 + 790 251 152 + 301 235 599 + 875 416 653 + 277 338 990 + 800 207 595 + 954 650 896 + 931 667 706 + 84 851 822 + 254 778 816 + 316 141 732 + 233 759 239 + 546 473 315 + 69 15 96 + 513 470 320 + 460 188 729 + 429 950 288 + 709 807 790 + 456 161 570 + 269 718 339 + 213 628 602 + 155 367 686 + 176 418 568 + 66 251 723 + 959 696 536 + 794 279 885 + 315 527 993 + 603 853 868 + 727 747 994 + 411 287 193 + 528 763 559 + 803 149 739 + 542 883 696 + 275 676 183 + 411 317 161 + 349 875 35 + 39 729 221 + 256 831 216 + 247 238 176 + 399 59 306 + 409 445 550 + 9 387 253 + 613 204 474 + 81 868 944 + 589 912 735 + 319 264 83 + 984 704 614 + 778 614 532 + 699 762 556 + 680 250 507 + 504 581 647 + 160 351 295 + 513 739 413 + 651 915 651 + 878 218 499 + 872 990 503 + 38 886 12 + 218 201 415 + 240 250 504 + 265 448 382 + 402 876 126 + 488 950 649 + 189 210 597 + 24 850 758 + 30 451 347 + 5 437 723 + 634 310 546 + 801 179 411 + 679 338 852 + 385 32 933 + 406 531 554 + 88 516 871 + 860 486 834 + 467 535 849 + 419 820 785 + 206 649 526 + 244 499 714 + 80 774 678 + 336 149 612 + 310 175 656 + 150 221 791 + 159 806 701 + 336 465 530 + 376 819 272 + 533 472 421 + 82 124 909 + 523 561 539 + 844 811 576 + 439 612 587 + 782 457 686 + 152 51 837 + 413 573 855 + 403 608 26 + 893 819 910 + 361 499 657 + 677 937 617 + 428 6 343 + 310 38 431 + 474 35 420 + 574 256 221 + 700 907 515 + 149 685 478 + 206 325 720 + 114 51 67 + 320 338 686 + 293 59 527 + 147 756 986 + 250 697 573 + 968 194 545 + 542 480 72 + 454 574 619 + 473 55 592 + 475 339 889 + 884 313 993 + 125 127 742 + 591 514 585 + 543 583 282 + 264 580 390 + 839 487 781 + 902 664 868 + 334 459 819 + 107 20 211 + 368 479 775 + 683 691 273 + 681 336 630 + 22 978 536 + 926 828 708 + 210 319 723 + 787 689 866 + 854 633 856 + 960 494 866 + 122 687 596 + 918 705 539 + 84 564 791 + 876 138 949 + 836 1 500 + 718 308 466 + 228 311 271 + 421 998 433 + 622 772 174 + 875 720 432 + 680 687 509 + 215 95 623 + 674 732 166 + 198 174 645 + 721 839 390 + 617 896 448 + 73 331 155 + 789 134 431 + 853 376 400 + 82 862 411 + 779 362 70 + 750 777 349 + 674 604 224 + 812 731 446 + 280 546 336 + 922 781 619 + 196 892 876 + 941 361 479 + 344 988 873 + 499 92 795 + 287 913 546 + 625 167 604 + 617 1 399 + 154 166 720 + 328 323 111 + 713 619 530 + 606 756 580 + 194 247 935 + 149 65 64 + 55 287 902 + 870 866 127 + 478 679 587 + 900 459 565 + 563 787 743 + 962 798 769 + 669 39 525 + 745 691 317 + 484 123 93 + 500 598 348 + 159 535 681 + 618 176 877 + 723 373 464 + 304 184 131 + 542 209 654 + 716 47 647 + 976 537 771 + 914 606 568 + 241 250 481 + 616 640 660 + 744 187 843 + 303 617 927 + 369 525 773 + 754 697 360 + 595 560 605 + 562 589 610 + 799 497 655 + 823 553 532 + 937 502 449 + 976 941 158 + 194 720 347 + 474 694 822 + 528 184 272 + 922 698 568 + 415 889 638 + 169 822 65 + 547 281 663 + 582 167 110 + 365 56 914 + 431 162 923 + 473 812 578 + 572 890 386 + 164 119 308 + 604 946 496 + 327 142 72 + 641 916 472 + 743 663 228 + 107 446 345 + 823 486 152 + 997 47 968 + 565 155 631 + 438 205 416 + 271 163 875 + 123 393 111 + 169 412 854 + 615 683 659 + 592 362 9 + 99 895 668 + 834 205 172 + 359 355 550 + 499 149 389 + 755 298 916 + 475 706 807 + 829 425 118 + 43 527 479 + 159 473 874 + 151 326 992 + 970 660 509 + 837 930 35 + 164 345 506 + 209 879 487 + 97 157 503 + 289 755 793 + 624 897 293 + 382 134 451 + 257 917 339 + 110 168 85 + 470 583 139 + 486 613 120 + 584 747 795 + 959 699 339 + 866 384 672 + 157 639 464 + 939 485 409 + 947 441 131 + 179 953 581 + 735 587 605 + 834 582 36 + 304 422 707 + 195 348 347 + 163 521 486 + 948 471 675 + 915 453 406 + 40 345 635 + 81 124 115 + 127 105 127 + 50 32 10 + 221 399 397 + 487 676 412 + 574 607 450 + 268 625 323 + 843 858 145 + 706 286 218 + 822 168 254 + 950 708 944 + 572 640 775 + 958 563 909 + 996 154 918 + 378 626 564 + 335 823 339 + 499 810 270 + 294 22 98 + 987 959 591 + 101 899 442 + 931 409 576 + 542 102 655 + 404 980 398 + 759 990 381 + 692 990 750 + 752 93 149 + 278 973 883 + 621 459 232 + 398 261 626 + 221 212 744 + 790 241 352 + 802 218 317 + 443 294 244 + 393 131 941 + 466 378 885 + 516 419 240 + 799 748 407 + 468 502 386 + 829 329 766 + 432 376 408 + 681 88 198 + 553 351 489 + 234 717 59 + 332 525 675 + 437 691 723 + 441 834 433 + 616 144 274 + 966 911 650 + 254 274 782 + 346 714 856 + 330 696 171 + 394 407 298 + 897 553 867 + 755 503 956 + 253 840 382 + 923 195 262 + 918 735 483 + 55 703 227 + 768 759 225 + 825 238 14 + 7 479 978 + 211 603 957 + 216 866 94 + 112 698 60 + 847 631 307 + 940 164 253 + 406 133 14 + 380 816 425 + 147 873 429 + 698 987 98 + 534 823 691 + 197 690 754 + 979 39 468 + 928 73 531 + 119 66 920 + 982 810 569 + 476 534 397 + 931 366 182 + 783 104 732 + 131 32 619 + 784 136 530 + 16 933 484 + 995 987 739 + 985 88 977 + 43 919 914 + 540 399 915 + 566 859 257 + 639 419 73 + 727 118 865 + 477 370 834 + 293 434 155 + 422 557 603 + 203 243 754 + 373 15 748 + 466 574 807 + 282 576 70 + 275 365 608 + 987 644 648 + 711 629 717 + 420 410 696 + 252 417 874 + 642 26 202 + 223 23 531 + 545 580 675 + 565 600 521 + 130 745 142 + 264 377 397 + 300 618 253 + 683 331 279 + 440 826 275 + 835 785 266 + 592 264 590 + 257 255 173 + 532 23 620 + 571 749 434 + 988 552 492 + 566 766 234 + 617 818 776 + 45 113 882 + 579 793 114 + 971 243 608 + 979 241 241 + 130 83 634 + 91 361 5 + 311 107 501 + 377 388 496 + 727 849 317 + 323 702 256 + 804 254 189 + 70 11 246 + 752 425 785 + 799 413 882 + 917 133 695 + 959 49 902 + 420 121 412 + 177 170 158 + 828 734 135 + 880 875 75 + 824 556 960 + 857 689 960 + 74 951 2 + 246 687 756 + 311 93 487 + 209 626 886 + 17 545 566 + 963 252 283 + 947 493 805 + 185 493 462 + 728 365 885 + 808 214 528 + 582 780 100 + 30 254 654 + 596 706 553 + 713 968 803 + 123 270 839 + 792 778 475 + 442 95 682 + 931 212 678 + 781 140 439 + 651 645 978 + 137 829 286 + 593 503 895 + 642 215 144 + 687 122 934 + 84 240 919 + 656 515 774 + 51 799 273 + 636 324 924 + 213 161 309 + 509 157 458 + 582 1 727 + 716 269 819 + 978 343 303 + 828 264 708 + 108 620 190 + 12 12 634 + 103 615 579 + 364 286 660 + 809 714 656 + 729 504 10 + 994 366 341 + 433 796 77 + 663 462 353 + 776 687 758 + 751 495 651 + 33 751 753 + 349 919 228 + 204 799 584 + 335 156 563 + 725 191 535 + 731 676 524 + 455 571 10 + 899 379 689 + 773 641 812 + 324 761 421 + 354 557 897 + 571 740 161 + 407 271 856 + 886 393 428 + 286 870 218 + 950 819 347 + 331 847 858 + 498 471 689 + 357 378 775 + 890 503 514 + 201 863 428 + 721 737 796 + 636 178 974 + 14 387 936 + 622 424 144 + 82 201 727 + 127 164 779 + 173 319 326 + 195 748 641 + 469 512 510 + 626 949 405 + 552 542 251 + 192 204 382 + 655 558 631 + 970 519 3 + 918 701 399 + 56 543 403 + 524 848 641 + 620 431 539 + 604 473 824 + 369 105 464 + 575 957 429 + 859 978 199 + 712 381 199 + 941 305 738 + 892 663 937 + 653 963 365 + 70 331 508 + 620 923 682 + 739 122 350 + 288 418 768 + 733 326 520 + 694 472 793 + 725 415 739 + 895 398 201 + 500 157 168 + 727 814 354 + 807 726 340 + 431 329 212 + 635 374 403 + 677 78 347 + 386 559 505 + 385 361 161 + 262 494 621 + 481 237 767 + 318 966 640 + 723 732 546 + 911 652 823 + 958 502 677 + 718 258 834 + 98 666 506 + 929 41 933 + 869 637 605 + 585 156 335 + 490 316 149 + 436 339 323 + 596 948 224 + 275 433 241 + 545 890 155 + 601 413 676 + 893 401 673 + 694 171 403 + 211 110 482 + 267 61 541 + 206 124 256 + 189 353 308 + 351 880 70 + 237 677 380 + 759 754 388 + 465 99 862 + 852 787 925 + 758 890 804 + 252 817 784 + 773 129 860 + 954 102 872 + 743 396 730 + 500 304 173 + 492 399 527 + 413 465 813 + 670 837 933 + 897 424 430 + 782 404 14 + 151 24 418 + 897 260 306 + 811 287 386 + 440 93 449 + 229 185 582 + 136 63 678 + 211 250 940 + 184 400 209 + 122 383 238 + 143 386 111 + 320 194 415 + 925 790 501 + 924 596 614 + 606 733 277 + 886 116 194 + 278 627 189 + 225 536 981 + 487 538 584 + 539 2 793 + 219 456 57 + 341 424 941 + 199 482 921 + 231 241 588 + 711 740 334 + 596 554 323 + 917 164 629 + 19 138 756 + 939 70 225 + 536 432 401 + 137 614 14 + 593 818 402 + 871 280 515 + 268 259 326 + 900 97 376 + 68 699 461 + 546 810 400 + 540 697 676 + 591 125 751 + 159 719 919 + 605 763 898 + 171 845 459 + 115 289 376 + 265 636 317 + 646 225 84 + 663 755 89 + 192 828 12 + 316 523 822 + 310 933 784 + 44 721 873 + 893 873 461 + 898 15 548 + 96 861 726 + 9 837 398 + 238 404 29 + 227 845 428 + 770 764 472 + 960 747 784 + 990 281 811 + 59 597 111 + 930 799 729 + 930 882 758 + 459 961 116 + 484 83 914 + 83 969 994 + 828 423 132 + 346 541 246 + 783 484 303 + 983 7 921 + 216 208 905 + 802 216 54 + 6 121 306 + 609 36 749 + 608 84 626 + 97 705 89 + 200 688 878 + 242 314 802 + 294 66 338 + 768 417 272 + 785 351 266 + 58 505 668 + 791 291 679 + 783 694 43 + 794 468 355 + 777 796 171 + 378 784 426 + 224 510 840 + 557 606 708 + 513 127 189 + 231 976 517 + 772 37 433 + 684 973 324 + 70 661 83 + 914 136 702 + 917 630 710 + 826 894 84 + 373 416 248 + 551 924 226 + 357 646 374 + 890 491 246 + 938 293 519 + 66 42 704 + 537 60 374 + 508 56 405 + 437 751 653 + 681 718 160 + 683 293 800 + 569 288 878 + 692 206 611 + 173 157 399 + 201 492 645 + 98 132 329 + 234 612 711 + 296 54 975 + 651 219 923 + 527 177 138 + 585 598 302 + 552 653 474 + 54 288 358 + 828 631 279 + 854 642 746 + 80 52 645 + 386 346 181 + 488 7 569 + 168 351 533 + 906 186 681 + 833 404 191 + 863 297 526 + 451 555 808 + 336 544 155 + 253 211 838 + 759 819 238 + 921 343 761 + 264 632 690 + 165 424 159 + 121 481 361 + 181 409 439 + 94 972 995 + 696 904 722 + 613 238 422 + 190 281 334 + 385 127 129 + 300 364 234 + 479 768 937 + 883 654 35 + 979 679 959 + 244 51 788 + 275 613 804 + 143 575 210 + 160 168 608 + 330 471 651 + 407 594 410 + 723 576 943 + 268 912 361 + 692 442 760 + 443 288 20 + 382 610 556 + 62 694 568 + 322 257 214 + 253 458 861 + 260 213 829 + 37 137 420 + 668 220 104 + 673 150 435 + 551 466 897 + 390 729 999 + 423 963 763 + 837 36 295 + 854 726 495 + 16 728 389 + 735 246 510 + 218 136 617 + 604 197 140 + 113 355 499 + 631 902 488 + 689 898 212 + 780 826 901 + 556 205 657 + 855 661 288 + 141 34 480 + 27 23 194 + 115 53 393 + 333 287 700 + 68 300 671 + 394 589 28 + 572 248 771 + 454 118 797 + 526 141 300 + 785 377 504 + 886 723 105 + 541 712 470 + 156 128 932 + 479 85 989 + 381 207 162 + 813 839 544 + 143 783 541 + 916 361 24 + 878 133 886 + 986 750 335 + 122 643 864 + 395 460 591 + 387 896 627 + 117 455 109 + 2 14 569 + 873 364 215 + 875 350 554 + 70 878 940 + 234 846 82 + 256 279 901 + 693 990 473 + 951 866 824 + 923 408 891 + 36 5 531 + 954 654 266 + 921 652 434 + 561 701 427 + 232 764 365 + 330 331 73 + 46 813 6 + 380 698 297 + 396 221 289 + 135 867 633 + 814 649 286 + 797 918 827 + 705 58 338 + 6 305 310 + 701 352 28 + 903 97 825 + 693 126 794 + 438 144 592 + 367 932 400 + 320 820 264 + 687 210 652 + 682 84 566 + 671 604 816 + 529 646 267 + 795 654 114 + 955 426 118 + 249 759 102 + 343 581 267 + 341 619 107 + 479 57 341 + 683 32 870 + 630 609 210 + 361 643 803 + 506 856 406 + 580 562 359 + 312 433 154 + 750 379 920 + 448 520 312 + 733 259 899 + 33 786 319 + 579 669 90 + 595 769 242 + 160 985 236 + 654 903 946 + 635 99 802 + 75 158 437 + 467 382 289 + 406 542 548 + 684 417 794 + 729 105 122 + 44 485 689 + 737 15 713 + 970 391 17 + 373 384 729 + 336 1 118 + 814 807 759 + 965 808 828 + 179 181 834 + 242 94 838 + 188 183 82 + 691 402 618 + 984 43 561 + 330 447 872 + 553 581 30 + 884 393 836 + 431 298 837 + 278 389 690 + 976 587 803 + 722 220 538 + 548 208 107 + 629 414 729 + 543 584 672 + 512 431 954 + 475 367 959 + 226 306 9 + 824 774 668 + 188 22 870 + 722 764 300 + 647 803 256 + 410 972 21 + 436 536 278 + 995 577 453 + 670 439 224 + 434 488 572 + 82 317 498 + 559 823 662 + 499 614 196 + 944 14 432 + 618 866 652 + 467 872 289 + 471 722 189 + 923 756 17 + 790 409 195 + 511 500 545 + 667 283 758 + 271 373 283 + 573 686 490 + 659 706 560 + 770 247 633 + 424 169 895 + 47 349 411 + 380 235 805 + 384 546 148 + 747 870 831 + 754 421 910 + 937 15 433 + 188 760 806 + 872 748 418 + 718 556 510 + 165 590 486 + 798 40 177 + 349 923 530 + 795 690 746 + 550 671 360 + 824 442 775 + 331 686 152 + 570 270 926 + 860 64 383 + 408 464 170 + 758 440 349 + 773 434 699 + 780 563 352 + 18 644 621 + 432 663 188 + 420 887 956 + 237 586 788 + 319 526 586 + 544 647 115 + 628 235 511 + 666 408 33 + 670 459 697 + 48 189 692 + 837 708 428 + 462 652 632 + 426 106 457 + 730 744 195 + 700 816 769 + 383 480 923 + 601 612 910 + 559 953 779 + 533 937 240 + 464 123 344 + 579 82 76 + 179 188 373 + 1 641 56 + 688 698 50 + 688 160 4 + 790 364 767 + 202 70 137 + 914 420 674 + 961 657 851 + 578 708 875 + 503 94 776 + 221 143 356 + 34 126 403 + 234 31 78 + 721 949 330 + 675 191 460 + 80 957 651 + 690 580 824 + 461 73 802 + 725 606 51 + 183 857 521 + 708 800 482 + 644 111 37 + 769 778 869 + 883 693 909 + 549 714 43 + 273 246 599 + 637 309 675 + 451 195 552 + 681 408 126 + 422 465 52 + 743 235 144 + 248 586 312 + 42 398 313 + 222 335 21 + 528 312 738 + 856 312 132 + 915 79 610 + 550 605 186 + 566 815 698 + 127 250 717 + 532 129 775 + 604 132 549 + 134 44 247 + 521 815 470 + 370 853 515 + 795 187 851 + 963 295 50 + 757 228 169 + 706 303 120 + 416 133 309 + 956 63 11 + 751 162 301 + 387 632 29 + 257 383 994 + 215 247 994 + 529 606 963 + 770 305 756 + 721 791 971 + 558 531 675 + 253 477 918 + 470 52 615 + 256 335 24 + 301 523 651 + 316 702 637 + 321 721 32 + 591 730 179 + 341 364 146 + 673 120 501 + 31 183 207 + 641 116 463 + 221 54 775 + 262 458 669 + 139 486 904 + 736 260 139 + 406 359 663 + 434 563 753 + 981 6 215 + 423 320 358 + 719 319 415 + 315 375 320 + 7 637 423 + 314 365 175 + 199 687 754 + 174 546 1 + 29 526 754 + 153 402 251 + 787 565 919 + 820 239 876 + 994 614 47 + 958 816 288 + 244 750 275 + 248 890 694 + 628 194 414 + 774 958 466 + 181 34 442 + 569 371 939 + 500 347 740 + 745 123 467 + 614 662 119 + 201 690 352 + 596 974 215 + 508 921 240 + 405 947 317 + 402 372 733 + 298 41 357 + 135 339 759 + 544 683 690 + 584 1 893 + 215 680 501 + 191 453 649 + 952 84 727 + 815 494 293 + 163 168 46 + 136 119 441 + 185 112 474 + 877 830 354 + 497 242 226 + 484 714 178 + 854 570 402 + 873 120 432 + 30 613 50 + 365 529 624 + 969 332 586 + 636 617 153 + 588 669 314 + 12 52 628 + 584 704 642 + 95 199 69 + 979 486 705 + 953 391 698 + 698 471 333 + 302 466 64 + 678 19 376 + 353 860 905 + 236 113 797 + 400 879 962 + 341 805 493 + 661 506 196 + 736 357 644 + 943 352 365 + 484 756 282 + 491 943 262 + 765 494 729 + 321 208 986 + 621 346 290 + 258 706 386 + 179 452 276 + 433 583 153 + 708 2 212 + 193 151 320 + 647 149 299 + 335 951 831 + 661 787 792 + 818 742 477 + 799 964 157 + 726 780 172 + 740 225 24 + 428 39 263 + 388 901 506 + 97 940 413 + 41 454 826 + 324 453 443 + 346 76 938 + 463 595 751 + 854 948 454 + 451 902 507 + 722 961 130 + 695 529 425 + 59 591 467 + 559 623 222 + 991 194 196 + 749 793 245 + 474 327 247 + 346 2 277 + 643 328 135 + 785 264 751 + 35 537 887 + 811 584 685 + 475 903 748 + 471 115 698 + 7 945 449 + 464 880 227 + 287 868 878 + 564 11 850 + 221 623 475 + 314 325 553 + 209 865 621 + 39 655 236 + 95 296 235 + 124 920 21 + 439 473 902 + 334 375 792 + 315 116 768 + 267 736 95 + 703 606 595 + 505 886 514 + 114 168 52 + 301 584 495 + 200 709 527 + 164 422 554 + 246 546 460 + 377 141 223 + 286 323 354 + 810 240 90 + 920 450 425 + 277 8 570 + 28 649 50 + 295 650 534 + 690 187 665 + 674 184 483 + 68 139 376 + 570 430 500 + 590 422 543 + 304 68 43 + 422 666 163 + 501 375 696 + 81 621 813 + 19 981 945 + 410 83 941 + 427 945 25 + 283 408 825 + 281 648 635 + 294 678 615 + 113 936 500 + 554 772 314 + 502 642 624 + 262 318 699 + 88 526 817 + 242 468 161 + 820 179 253 + 580 62 531 + 343 183 422 + 430 161 485 + 26 127 435 + 442 32 517 + 491 243 544 + 552 680 310 + 131 489 457 + 697 162 526 + 897 838 305 + 695 748 335 + 753 936 24 + 46 681 637 + 745 808 617 + 318 251 171 + 49 39 855 + 359 284 725 + 221 837 145 + 581 821 444 + 573 267 318 + 706 969 583 + 722 912 586 + 680 86 869 + 833 546 97 + 865 507 481 + 938 104 386 + 941 217 265 + 360 53 607 + 634 197 476 + 787 659 444 + 368 163 783 + 493 738 345 + 182 539 52 + 764 827 612 + 699 493 663 + 914 384 17 + 495 546 260 + 739 461 275 + 386 91 394 + 804 506 198 + 780 421 269 + 109 669 193 + 457 298 349 + 560 800 331 + 282 153 637 + 160 254 807 + 434 204 476 + 717 759 737 + 629 785 65 + 347 614 790 + 270 663 647 + 188 271 528 + 277 929 591 + 853 744 589 + 704 881 761 + 573 714 627 + 541 689 287 + 540 301 187 + 670 397 368 + 867 8 698 + 869 146 802 + 10 137 104 + 164 575 450 + 507 233 466 + 548 425 46 + 435 824 78 + 334 951 34 + 646 551 99 + 60 829 569 + 501 866 382 + 440 327 222 + 744 132 333 + 800 983 126 + 887 866 451 + 28 599 39 + 833 129 307 + 804 519 319 + 510 746 821 + 639 209 561 + 197 649 333 + 638 644 361 + 754 474 366 + 193 219 106 + 843 536 331 + 483 634 611 + 367 195 592 + 753 71 115 + 934 42 83 + 337 75 85 + 475 304 169 + 672 143 211 + 360 406 74 + 370 119 111 + 351 955 696 + 543 849 785 + 375 576 836 + 288 316 239 + 512 273 786 + 721 407 82 + 998 634 292 + 449 399 284 + 540 316 693 + 430 68 984 + 146 376 482 + 785 134 643 + 157 509 441 + 808 615 552 + 920 564 452 + 407 341 441 + 990 778 211 + 822 325 925 + 368 206 876 + 491 153 126 + 11 373 546 + 854 752 143 + 843 773 660 + 777 472 964 + 359 708 889 + 575 941 882 + 945 22 152 + 968 237 115 + 30 238 110 + 101 504 412 + 119 646 719 + 28 190 336 + 890 301 712 + 11 657 782 + 885 465 361 + 424 669 645 + 528 654 194 + 894 252 667 + 516 299 998 + 370 837 976 + 305 651 194 + 701 447 175 + 470 234 929 + 752 606 965 + 568 370 322 + 226 592 281 + 553 801 330 + 576 228 623 + 639 477 637 + 252 664 998 + 781 215 994 + 446 698 25 + 562 500 980 + 702 444 299 + 971 550 387 + 754 562 439 + 347 896 716 + 242 861 596 + 588 829 323 + 464 211 949 + 481 192 47 + 598 98 963 + 932 960 32 + 933 482 893 + 15 989 888 + 866 735 629 + 636 513 470 + 280 528 944 + 531 66 867 + 284 735 865 + 778 743 3 + 458 131 262 + 772 273 255 + 942 278 50 + 269 151 917 + 502 4 883 + 538 155 68 + 929 850 21 + 126 759 729 + 869 689 711 + 180 359 855 + 299 68 975 + 210 371 205 + 477 183 827 + 922 50 841 + 665 154 312 + 379 848 486 + 450 835 743 + 69 161 515 + 680 535 83 + 692 779 352 + 818 554 389 + 781 89 538 + 746 218 209 + 292 201 652 + 417 375 393 + 916 962 644 + 518 923 561 + 915 469 386 + 142 460 454 + 947 392 89 + 144 840 866 + 205 465 967 + 209 657 650 + 891 322 207 + 800 522 907 + 516 498 994 + 185 806 804 + 179 393 137 + 316 765 892 + 850 756 123 + 494 783 627 + 832 53 659 + 93 949 602 + 666 954 516 + 592 11 210 + 223 4 389 + 221 280 388 + 100 279 50 + 380 589 345 + 385 238 382 + 205 506 359 + 98 280 652 + 396 371 290 + 314 477 454 + 368 692 564 + 48 263 586 + 356 902 922 diff --git a/2016/aoc3/src/main.rs b/2016/aoc3/src/main.rs new file mode 100644 index 0000000..678933f --- /dev/null +++ b/2016/aoc3/src/main.rs @@ -0,0 +1,64 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + + +struct Triangle { + l1: i32, + l2: i32, + l3: i32 +} + +impl Triangle { + fn is_valid(&self) -> bool { + (self.l1 + self.l2) > self.l3 && + (self.l2 + self.l3) > self.l1 && + (self.l3 + self.l1) > self.l2 + + } +} + +fn main() { + let len = read_file().iter().filter(|tri| tri.is_valid()).count(); + println!("{} valid triangles", len); +} + +fn read_file() -> Vec<Triangle> { + let file = BufReader::new(File::open("input.txt").unwrap()); + let mut lines = file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .peekable(); + + let mut results = Vec::new(); + while lines.peek().is_some() { + let (t11, t21, t31) = parse_line(lines.next().unwrap()); + let (t12, t22, t32) = parse_line(lines.next().unwrap()); + let (t13, t23, t33) = parse_line(lines.next().unwrap()); + + results.push(Triangle { + l1: t11, + l2: t12, + l3: t13 + }); + results.push(Triangle { + l1: t21, + l2: t22, + l3: t23 + }); + results.push(Triangle { + l1: t31, + l2: t32, + l3: t33 + }); + } + results +} + +fn parse_line(line: String) -> (i32, i32, i32) { + let mut separated = line.split_whitespace(); + (separated.next().unwrap().trim().parse().unwrap(), + separated.next().unwrap().trim().parse().unwrap(), + separated.next().unwrap().trim().parse().unwrap()) +} + diff --git a/2016/aoc4/Cargo.lock b/2016/aoc4/Cargo.lock new file mode 100644 index 0000000..df3af88 --- /dev/null +++ b/2016/aoc4/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc4" +version = "0.1.0" + diff --git a/2016/aoc4/Cargo.toml b/2016/aoc4/Cargo.toml new file mode 100644 index 0000000..7d02c6d --- /dev/null +++ b/2016/aoc4/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc4" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] diff --git a/2016/aoc4/input.txt b/2016/aoc4/input.txt new file mode 100644 index 0000000..c23ffc2 --- /dev/null +++ b/2016/aoc4/input.txt @@ -0,0 +1,1091 @@ +gbc-frperg-pubpbyngr-znantrzrag-377[rgbnp] +nij-mywlyn-wlsiayhcw-jfumncw-alumm-mbcjjcha-422[mcjwa] +pualyuhapvuhs-ibuuf-zhslz-227[uhalp] +xlrypetn-prr-lylwjdtd-665[dzoya] +zilqwikbqdm-rmttgjmiv-mvoqvmmzqvo-278[mqvio] +rgllk-bxmefuo-sdmee-geqd-fqefuzs-274[efdgl] +ugfkmewj-yjsvw-wyy-lwuzfgdgyq-814[wygfj] +lnkfaypeha-xwogap-bejwjyejc-524[uqzms] +laffe-sorozgxe-mxgjk-jek-xkykgxin-254[kxegf] +ytu-xjhwjy-hfsid-htfynsl-qtlnxynhx-411[hyntx] +vetllbybxw-xzz-mktbgbgz-709[kblty] +ixeumktoi-kmm-giwaoyozout-176[oimkt] +frqvxphu-judgh-udpsdjlqj-udeelw-uhvhdufk-647[ntbsq] +ixccb-hjj-uhvhdufk-725[hcjub] +sehheiylu-isqludwuh-xkdj-qsgkyiyjyed-634[ydehi] +yhwooebeaz-acc-ajcejaanejc-316[acejo] +qyujihctyx-vumeyn-zchuhwcha-318[hcuya] +xtwtelcj-rclop-clmmte-nzyeltyxpye-171[eltcy] +pinovwgz-mvwwdo-yzkgjthzio-941[owzgi] +htwwtxnaj-xhfajsljw-mzsy-hzxytrjw-xjwanhj-229[jwhxa] +amlqskcp-epybc-cee-pcyaosgqgrgml-652[cegpa] +fab-eqodqf-omzpk-emxqe-560[eqfmo] +bnmrtldq-fqzcd-idkkxadzm-qdrdzqbg-365[dqzbk] +ovbunmneqbhf-wryylorna-qrirybczrag-559[rbnya] +ynukcajey-xwogap-iwjwcaiajp-966[jydme] +dkqjcbctfqwu-uecxgpigt-jwpv-fgrctvogpv-128[cgptv] +ugfkmewj-yjsvw-tmffq-vwhdgqewfl-606[zfmlc] +htqtwkzq-idj-ijxnls-723[rwmzt] +kgjgrypw-epybc-aylbw-amyrgle-amlryglkclr-184[lygra] +jxdkbqfz-yrkkv-bkdfkbbofkd-705[csxut] +ujqgywfau-uzgugdslw-sfsdqkak-684[duboh] +rwcnawjcrxwju-mhn-nwprwnnarwp-823[wnrac] +eqttqukxg-rncuvke-itcuu-ujkrrkpi-102[ukrtc] +jvuzbtly-nyhkl-ibuuf-dvyrzovw-201[uvybl] +tvsnigxmpi-fewoix-wxsveki-750[ixesv] +rtqlgevkng-ejqeqncvg-ncdqtcvqta-336[prlxq] +wfummczcyx-luvvcn-nywbhifias-864[cfimn] +irdgrxzex-vxx-nfibjyfg-763[xfgir] +buzahisl-ipvohghykvbz-qlssfilhu-klclsvwtlua-591[moyzp] +dpotvnfs-hsbef-sbnqbhjoh-fhh-nbobhfnfou-831[vbmns] +owshgfarwv-lgh-kwujwl-usfvq-ghwjslagfk-164[wgfhl] +yuxufmdk-sdmpq-bxmefuo-sdmee-dqeqmdot-222[dmequ] +clotzlnetgp-clmmte-opawzjxpye-873[elptc] +mfklstdw-usfvq-kwjnauwk-268[kwfsu] +vhglnfxk-zktwx-unggr-xgzbgxxkbgz-839[gxkzb] +yrwxefpi-tpewxmg-kveww-ywiv-xiwxmrk-932[pxhgu] +shmml-cynfgvp-tenff-qrfvta-143[fmntv] +zhdsrqlchg-sodvwlf-judvv-uhdftxlvlwlrq-855[ldvhf] +kfg-jvtivk-sleep-uvjzxe-711[evjkf] +molgbzqfib-yxphbq-obpbxoze-757[bopqx] +qfmcusbwq-qobrm-qcohwbu-fsoqeiwgwhwcb-168[qwbco] +sbejpbdujwf-gmpxfs-tupsbhf-623[bfpsj] +jsehsyafy-hdsklau-yjskk-ksdwk-242[ksyad] +rwcnawjcrxwju-ljwmh-bcxajpn-823[jwcan] +excdklvo-oqq-oxqsxoobsxq-874[oqxsb] +buzahisl-jhukf-jvhapun-klwsvftlua-565[uahlf] +gpbepvxcv-snt-steadnbtci-453[tbcen] +wyvqljapsl-ihzrla-zlycpjlz-149[lzajp] +amlqskcp-epybc-cee-kylyeckclr-938[cekly] +jchipqat-qphzti-advxhixrh-895[hiapq] +tinnm-qvcqczohs-qighcasf-gsfjwqs-818[jfuek] +qyujihctyx-mwupyhayl-bohn-wihnuchgyhn-890[hynuc] +wlqqp-nvrgfezqvu-irsszk-ivjvrity-607[viqrs] +molgbzqfib-avb-cfkxkzfkd-315[bfkza] +luxciuwncpy-wuhxs-womnigyl-mylpcwy-266[ylhtr] +ugdgjxmd-bwddqtwsf-ugflsafewfl-762[qdtes] +fmsledevhsyw-nippcfier-eguymwmxmsr-438[vmsip] +xekdwvwnzkqo-xwogap-ajcejaanejc-706[aejwc] +wfummczcyx-yaa-fiacmncwm-136[bxsio] +rdadguja-tvv-ldgzhwde-375[dagve] +wsvsdkbi-qbkno-oqq-domrxyvyqi-718[qobdi] +oaxadrgx-qss-oazfmuzyqzf-300[mfedb] +hqfxxnknji-uqfxynh-lwfxx-xfqjx-125[zkwtx] +gpbepvxcv-qphzti-rdcipxcbtci-947[cpibt] +etyyx-bzmcx-bnzshmf-qdrdzqbg-443[btyez] +htqtwkzq-gzssd-qfgtwfytwd-541[ogntm] +uiovmbqk-kpwkwtibm-mvoqvmmzqvo-798[awevt] +zotts-vumeyn-xypyfijgyhn-448[qasni] +zovldbkfz-pzxsbkdbo-erkq-xznrfpfqflk-367[eunpo] +htwwtxnaj-gntmfefwitzx-hfsid-htfynsl-zxjw-yjxynsl-255[tfnwx] +vhglnfxk-zktwx-vahvhetmx-labiibgz-839[hvxab] +htqtwkzq-idj-wjhjnansl-983[rmtzn] +irgyyolokj-vrgyzoi-mxgyy-aykx-zkyzotm-358[yogkz] +ktfitzbgz-lvtoxgzxk-angm-wxitkmfxgm-943[vxmua] +uwtojhynqj-hmthtqfyj-jslnsjjwnsl-879[jhnst] +mrxivrexmsrep-gerhc-gsexmrk-hiwmkr-100[yzpuo] +hdgdovmt-bmvyz-ezggtwzvi-adivixdib-707[divgz] +lqwhuqdwlrqdo-iorzhu-ghvljq-959[qhldo] +vhkkhlbox-wrx-inkvatlbgz-397[kbhlv] +tyepcyletzylw-awldetn-rcldd-dezclrp-795[ldect] +sedikcuh-whqtu-uww-tufqhjcudj-946[uhwcd] +lsyrkjkbnyec-zvkcdsm-qbkcc-myxdksxwoxd-848[kcdsx] +fnjyxwrinm-lqxlxujcn-mnyjacvnwc-355[ncjxl] +gpbepvxcv-tvv-rdcipxcbtci-141[cvpbi] +xgsvgmotm-hgyqkz-ykxboiky-124[gkymo] +udskkaxawv-usfvq-esjcwlafy-814[uidxk] +fydelmwp-nlyoj-opalcexpye-899[elpyo] +aczupnetwp-qwzhpc-afcnsldtyr-717[cpant] +bknsykmdsfo-nio-yzobkdsyxc-926[kosyb] +xjmmjndqz-xcjxjgvoz-mzvxlpdndodji-343[fqvmn] +amjmpdsj-qaytclecp-fslr-bcqgel-782[claej] +fnjyxwrinm-ouxfna-anjlzdrbrcrxw-719[nrxaf] +qcbgiasf-ufors-pogysh-zcuwghwqg-168[gscfh] +kmjezxodgz-wpiit-mzxzdqdib-109[aypcu] +ckgvutofkj-xghhoz-uvkxgzouty-696[ajsic] +lsyrkjkbnyec-mkxni-cdybkqo-510[kybcn] +tipfxvezt-gcrjkzt-xirjj-jvimztvj-919[pofxi] +pbybeshy-cynfgvp-tenff-svanapvat-403[afnpv] +cjpibabsepvt-cvooz-usbjojoh-155[objcp] +jvyyvzpcl-lnn-ayhpupun-929[npylu] +wsvsdkbi-qbkno-zvkcdsm-qbkcc-oxqsxoobsxq-276[sbkoq] +ugdgjxmd-usfvq-ugslafy-ugflsafewfl-918[xbmpo] +nwlddtqtpo-ojp-xlcvpetyr-639[ptdlo] +nzcczdtgp-prr-opdtry-587[wsiym] +ynssr-yehpxk-wxlbzg-111[plhnx] +xjmmjndqz-xcjxjgvoz-xjiovdihzio-967[jxioz] +enqvbnpgvir-pubpbyngr-znexrgvat-585[qtsjn] +gvcskirmg-qekrixmg-ikk-xvemrmrk-126[kmrgi] +gpbepvxcv-uadltg-ejgrwphxcv-921[gpvce] +kmjezxodgz-nxvqzibzm-cpio-adivixdib-941[izdxb] +hcd-gsqfsh-xszzmpsob-sbuwbssfwbu-428[sbfhu] +nwlddtqtpo-upwwjmply-dpcgtnpd-119[pdtwl] +mbggf-msvdly-zlycpjlz-929[aonev] +lhkhszqx-fqzcd-qzaahs-btrsnldq-rdquhbd-443[qdhsz] +luxciuwncpy-xsy-uwkocmcncih-500[cuinw] +qvbmzvibqwvit-kpwkwtibm-zmkmqdqvo-564[mqvbi] +tvsnigxmpi-jpsaiv-irkmriivmrk-568[yileu] +vxupkizork-kmm-lotgtiotm-748[xymrs] +gpewwmjmih-gerhc-hiwmkr-152[lostk] +ibghopzs-gqojsbusf-vibh-rsgwub-818[bsghi] +guahyncw-luvvcn-wihnuchgyhn-552[hncug] +iruzfrtkzmv-treup-tfrkzex-ivjvrity-373[rtivz] +dsxxw-cee-ylyjwqgq-704[eqwxy] +lhkhszqx-fqzcd-eknvdq-lzmzfdldms-911[dzlqf] +oxmeeuruqp-omzpk-oamfuzs-emxqe-248[emoup] +dyz-combod-mkxni-mykdsxq-vklybkdybi-848[dkybm] +bpvctixr-qphzti-ldgzhwde-999[abmop] +kwvacumz-ozilm-jiasmb-mvoqvmmzqvo-824[tnqvi] +njmjubsz-hsbef-kfmmzcfbo-nbobhfnfou-389[luxhg] +hwbba-fag-tgceswkukvkqp-622[kabgw] +nchhg-jiasmb-lmxizbumvb-382[bmhia] +ymszqfuo-dmnnuf-emxqe-170[syxpj] +ymszqfuo-qss-abqdmfuaze-144[qsafm] +tcfkqcevkxg-hwbba-hnqygt-vtckpkpi-440[kctbg] +zloolpfsb-gbiivybxk-rpbo-qbpqfkd-705[bopfi] +slqryzjc-pyzzgr-rpyglgle-288[uanmz] +iutyaskx-mxgjk-inuiurgzk-rumoyzoiy-696[klmzy] +dpssptjwf-cvooz-efqmpznfou-311[fopsz] +dsxxw-cee-dglylagle-756[eldgx] +nwlddtqtpo-upwwjmply-xlcvpetyr-223[pltwd] +jvuzbtly-nyhkl-lnn-lunpullypun-201[tqlba] +uiovmbqk-kivlg-bmkpvwtwog-720[kpvsu] +nchhg-xtiabqk-oziaa-zmamizkp-850[aizhk] +molgbzqfib-zixppfcfba-gbiivybxk-pqloxdb-237[igmjz] +jyfvnlupj-jhukf-jvhapun-yljlpcpun-539[dmnws] +hqtyeqsjylu-sqdto-tufqhjcudj-712[cnysz] +gsvvswmzi-gerhc-gsrxemrqirx-100[dlypm] +ktwbhtvmbox-xzz-vhgmtbgfxgm-709[bgmtx] +hjgbwuladw-uzgugdslw-vwhsjlewfl-580[wlgud] +njmjubsz-hsbef-kfmmzcfbo-efqmpznfou-181[subnv] +bnknqetk-bzmcx-zbpthrhshnm-417[bhnkm] +gspsvjyp-fyrrc-jmrergmrk-126[rgjmp] +bjfutsneji-gntmfefwitzx-kqtbjw-fhvznxnynts-307[ntfjb] +sedikcuh-whqtu-rqiauj-tuiywd-270[gipnv] +hjgbwuladw-bwddqtwsf-jwsuimakalagf-294[wadbf] +encuukhkgf-uecxgpigt-jwpv-rwtejcukpi-986[ucegk] +nzydfxpc-rclop-nlyoj-nzletyr-zapcletzyd-847[lyzcn] +eqpuwogt-itcfg-lgnnadgcp-tgceswkukvkqp-518[gckpt] +nzwzcqfw-mldvpe-afcnsldtyr-171[cdfln] +ide-htrgti-snt-advxhixrh-401[hitdr] +fmsledevhsyw-gerhc-gsexmrk-erepcwmw-776[emrsw] +jvyyvzpcl-yhiipa-aljouvsvnf-201[vyaij] +chnylhuncihuf-zfiqyl-mniluay-656[hilnu] +udskkaxawv-xdgowj-klgjsyw-346[eruiv] +pbeebfvir-sybjre-qrcnegzrag-585[erbga] +aoubshwq-qobrm-obozmgwg-948[obgmq] +jvsvymbs-ibuuf-huhsfzpz-747[subfh] +qvbmzvibqwvit-jiasmb-ikycqaqbqwv-928[qbiva] +zuv-ykixkz-kmm-jkyomt-748[kmyzi] +slqryzjc-zsllw-amlryglkclr-808[lrcsy] +enzcntvat-enoovg-ybtvfgvpf-273[vntef] +iqmbazulqp-dmnnuf-oazfmuzyqzf-664[zfmqu] +yaxsnlcrun-ouxfna-uxprbcrlb-537[nruxa] +ovbunmneqbhf-cynfgvp-tenff-ratvarrevat-351[uakpm] +qzchnzbshud-idkkxadzm-rghoohmf-885[hdzkm] +fodvvlilhg-sodvwlf-judvv-fxvwrphu-vhuylfh-101[vfhld] +qvbmzvibqwvit-kpwkwtibm-apqxxqvo-798[qvbiw] +aoubshwq-pwcvonofrcig-rms-aofyshwbu-688[oswab] +hwbba-gii-fgrnqaogpv-882[gabif] +pkl-oaynap-acc-pnwejejc-186[acpej] +ltpedcxots-qphzti-ejgrwphxcv-323[ptceh] +mybbycsfo-nio-nofovyzwoxd-250[stdkc] +bgmxkgtmbhgte-ietlmbv-zktll-inkvatlbgz-397[ptrnf] +dpotvnfs-hsbef-dipdpmbuf-qvsdibtjoh-545[dbfps] +fmsledevhsyw-veqtekmrk-tpewxmg-kveww-hitevxqirx-568[evwkm] +ykjoqian-cnwza-ywjzu-ykwpejc-wymqeoepekj-628[hmfzu] +wihmogyl-aluxy-vumeyn-jolwbumcha-240[lmuya] +yuxufmdk-sdmpq-eomhqzsqd-tgzf-emxqe-664[mqdef] +wifilzof-vumeyn-guhuaygyhn-864[uyfgh] +hplazytkpo-nlyoj-cpdplcns-457[plcno] +vhglnfxk-zktwx-utldxm-hixktmbhgl-917[tursp] +jxdkbqfz-zxkav-zlxqfkd-pxibp-133[xkzbd] +mfklstdw-xdgowj-jwuwanafy-554[wadfj] +eqttqukxg-tcddkv-vtckpkpi-596[ampxv] +tpspahyf-nyhkl-jovjvshal-mpuhujpun-591[fkeyj] +vqr-ugetgv-ecpfa-eqcvkpi-ujkrrkpi-414[ekprv] +mvkccspson-bkllsd-nozvyiwoxd-952[oscdk] +ugjjgkanw-ugfkmewj-yjsvw-bwddqtwsf-kwjnauwk-528[nkliy] +wkqxodsm-lexxi-myxdksxwoxd-848[xdkmo] +tfiifjzmv-tyftfcrkv-jyzggzex-841[unmyd] +wdjcvuvmyjpn-rzvkjiduzy-mvwwdo-adivixdib-421[dvijw] +xzwrmkbqtm-jcvvg-amzdqkma-226[uonyt] +tvsnigxmpi-mrxivrexmsrep-veffmx-xvemrmrk-308[mrxev] +iehepwnu-cnwza-nwxxep-owhao-420[wenah] +fubrjhqlf-edvnhw-wudlqlqj-725[lqdfh] +wfummczcyx-wuhxs-mniluay-370[cbijt] +jchipqat-eaphixr-vgphh-sthxvc-895[hpaci] +pelbtravp-ohaal-hfre-grfgvat-169[arefg] +jshzzpmplk-jhukf-aljouvsvnf-279[jfhkl] +hwbba-ejqeqncvg-ocpcigogpv-128[cgbeo] +fnjyxwrinm-ajkkrc-cajrwrwp-745[rjwac] +mhi-lxvkxm-utldxm-tgterlbl-267[lmtxb] +jxdkbqfz-bdd-pqloxdb-237[dbqxf] +qfkkj-nzydfxpc-rclop-clmmte-xlylrpxpye-197[vzyuc] +bxaxipgn-vgpst-qxdwpopgsdjh-ytaanqtpc-hwxeexcv-687[csdop] +rdggdhxkt-eaphixr-vgphh-itrwcdadvn-245[dhgra] +qlm-pbzobq-zxkav-zlxqfkd-obzbfsfkd-471[bzfkq] +ajyqqgdgcb-qaytclecp-fslr-sqcp-rcqrgle-106[cqglr] +zgmfyxypbmsq-aylbw-amyrgle-qfgnngle-704[jmbna] +pkl-oaynap-acc-zalhkuiajp-654[apckl] +bqxnfdmhb-okzrshb-fqzrr-btrsnldq-rdquhbd-599[nszgr] +mybbycsfo-mkxni-mykdsxq-cobfsmoc-302[mbcos] +ujoon-eaphixr-vgphh-ldgzhwde-141[hdego] +iuxxuyobk-hatte-lotgtiotm-852[toiux] +muqfedyput-rkddo-huqsgkyiyjyed-608[dyuek] +mrxivrexmsrep-ikk-irkmriivmrk-230[rikme] +htqtwkzq-wfggny-ywfnsnsl-749[nwfgq] +sno-rdbqds-idkkxadzm-trdq-sdrshmf-599[dsrkm] +apuut-wpiit-gvwjmvojmt-369[tijmp] +molgbzqfib-yxphbq-tlohpelm-133[blhmo] +ugdgjxmd-wyy-hmjuzskafy-866[ydgjm] +slqryzjc-hcjjwzcyl-dglylagle-860[lcjyg] +ktwbhtvmbox-wrx-etuhktmhkr-241[psbxd] +oaddaeuhq-otaoaxmfq-ruzmzouzs-950[aouzd] +ugfkmewj-yjsvw-tmffq-klgjsyw-528[sqogh] +vrurcjah-pajmn-ajvyjprwp-ljwmh-anlnrerwp-433[jkstx] +fab-eqodqf-vqxxknqmz-ymdwqfuzs-586[qfdmx] +tpspahyf-nyhkl-kfl-klwhyatlua-123[lahky] +zntargvp-enoovg-znexrgvat-195[gnvae] +dkqjcbctfqwu-uecxgpigt-jwpv-ugtxkegu-934[gucte] +owshgfarwv-xdgowj-jwkwsjuz-320[wjgos] +gifavtkzcv-treup-jyzggzex-659[gzetv] +bjfutsneji-gfxpjy-tujwfyntsx-203[jftns] +pxtihgbsxw-ietlmbv-zktll-ybgtgvbgz-371[bgtli] +crwwv-zxkav-pefmmfkd-367[fkmvw] +sbqiiyvyut-fbqijys-whqii-tulubefcudj-998[xytos] +gvcskirmg-gsvvswmzi-fewoix-pskmwxmgw-230[gmswi] +eqttqukxg-ejqeqncvg-octmgvkpi-232[qegtc] +lqwhuqdwlrqdo-fdqgb-zrunvkrs-439[qdrlu] +tinnm-gqojsbusf-vibh-gozsg-480[gsbin] +lujbbrornm-ljwmh-orwjwlrwp-849[rwjlb] +jef-iushuj-rkddo-efuhqjyedi-868[dejuf] +szfyrqriuflj-treup-jrcvj-971[slkjz] +ltpedcxots-rpcsn-itrwcdadvn-921[cdtnp] +ohmnuvfy-xsy-jolwbumcha-968[hmouy] +gntmfefwitzx-wfintfhynaj-uqfxynh-lwfxx-wjhjnansl-905[fnwxh] +xcitgcpixdcpa-tvv-hwxeexcv-271[cxvei] +jyfvnlupj-qlssfilhu-ayhpupun-227[zbydk] +wdjcvuvmyjpn-zbb-vxlpdndodji-291[djvbn] +wfummczcyx-dyffsvyuh-xymcah-630[ycfmh] +cebwrpgvyr-wryylorna-phfgbzre-freivpr-897[opgba] +cjpibabsepvt-tdbwfohfs-ivou-fohjoffsjoh-363[fobhj] +zekvierkzferc-jtrmvexvi-ylek-wzeretzex-425[erzkv] +sgmtkzoi-pkrrehkgt-ygrky-228[kgrty] +iruzfrtkzmv-jtrmvexvi-ylek-jkfirxv-971[nvfye] +dfcxsqhwzs-pogysh-obozmgwg-870[goshw] +yuxufmdk-sdmpq-vqxxknqmz-bgdotmeuzs-326[tidcv] +iuxxuyobk-igtje-ygrky-878[mflrz] +laffe-igtje-vaxingyotm-800[aefgi] +tpspahyf-nyhkl-wshzapj-nyhzz-zhslz-643[hzpsy] +diozmivodjivg-xviyt-ozxcijgjbt-473[cmtlp] +pyknyegle-njyqrga-epyqq-pcyaosgqgrgml-314[gyqep] +bwx-amkzmb-zijjqb-tijwzibwzg-824[egorq] +drxevkzt-vxx-uvjzxe-581[xvezd] +ktfitzbgz-cxeeruxtg-wxitkmfxgm-761[txgef] +htsxzrjw-lwfij-wfggny-ywfnsnsl-801[cjidb] +oxmeeuruqp-nmewqf-pqeusz-742[eqump] +hqfxxnknji-kzeed-ojqqdgjfs-jslnsjjwnsl-671[jnsqd] +pbybeshy-rtt-phfgbzre-freivpr-221[rbepf] +pdjqhwlf-edvnhw-xvhu-whvwlqj-231[hwvdj] +gcfcnuls-aluxy-vumeyn-lywycpcha-188[cylua] +plolwdub-judgh-edvnhw-pdqdjhphqw-699[dhpwj] +udpsdjlqj-hjj-pdqdjhphqw-751[jdhpq] +amjmpdsj-pyzzgr-qyjcq-886[jmpqy] +lahxpnwrl-ljwmh-bqryyrwp-667[tifxe] +drxevkzt-avccpsvre-uvgcfpdvek-191[vcedk] +xzwrmkbqtm-rmttgjmiv-apqxxqvo-928[lmkgz] +eqnqthwn-tcddkv-fgrctvogpv-648[tvcdg] +bjfutsneji-ojqqdgjfs-ijajqturjsy-515[jqsfi] +sebehvkb-hqrryj-ixyffydw-166[siyrz] +zlkprjbo-doxab-mixpqfz-doxpp-jxohbqfkd-783[yjhzq] +eza-dpncpe-nsznzwlep-opdtry-821[sdeti] +tbxmlkfwba-yxphbq-xkxivpfp-523[slfmk] +ucynmlgxcb-hcjjwzcyl-umpiqfmn-548[cmjln] +lxwbdvna-pajmn-bljenwpna-qdwc-dbna-cnbcrwp-199[nabwc] +eadalsjq-yjsvw-wyy-jwsuimakalagf-892[ajswy] +fruurvlyh-mhoobehdq-zrunvkrs-907[rhuov] +sbqiiyvyut-vbemuh-sedjqydcudj-686[ltadr] +fkqbokxqflkxi-avb-lmboxqflkp-991[kbflq] +lhkhszqx-fqzcd-atmmx-kzanqzsnqx-677[qzxah] +cebwrpgvyr-hafgnoyr-cynfgvp-tenff-qrcnegzrag-793[rxmql] +ajmrxjlcren-cxy-bnlanc-ouxfna-lxwcjrwvnwc-927[cnxaj] +hqtyeqsjylu-isqludwuh-xkdj-tulubefcudj-244[udjlq] +vdzonmhydc-azrjds-cdudknoldms-157[lzowh] +uwtojhynqj-kqtbjw-zxjw-yjxynsl-333[grmkp] +myxcewob-qbkno-oqq-ecob-docdsxq-614[oqbcd] +rkpqxyib-gbiivybxk-abpfdk-419[bikpx] +zlilocri-zelzlixqb-qbzeklildv-497[ucyzj] +pinovwgz-xviyt-vivgtndn-499[vingt] +gcfcnuls-aluxy-luvvcn-xymcah-318[cluan] +sebehvkb-fbqijys-whqii-husuylydw-400[bhisy] +rdchjbtg-vgpst-eaphixr-vgphh-rjhidbtg-htgkxrt-323[hgtrp] +pualyuhapvuhs-jshzzpmplk-wshzapj-nyhzz-zlycpjlz-175[zphla] +atyzghrk-sgmtkzoi-hgyqkz-yzuxgmk-228[gkzyh] +ohmnuvfy-mwupyhayl-bohn-yhachyylcha-630[hyacl] +oxjmxdfkd-avb-pqloxdb-211[dxboa] +iqmbazulqp-bdavqofuxq-omzpk-ruzmzouzs-482[zqumo] +zsxyfgqj-gzssd-wjxjfwhm-619[jsfgw] +qvbmzvibqwvit-jcvvg-abwziom-512[tcrkb] +xgjougizobk-lruckx-aykx-zkyzotm-826[koxzg] +bkzrrhehdc-rbzudmfdq-gtms-zmzkxrhr-755[rzdhm] +myxcewob-qbkno-cmkfoxqob-rexd-zebmrkcsxq-302[syrvm] +zekvierkzferc-treup-tfrkzex-uvgrikdvek-867[ekrvz] +cvabijtm-lgm-bziqvqvo-330[vbimq] +vhglnfxk-zktwx-ktuubm-vhgmtbgfxgm-553[gkmtx] +xst-wigvix-fyrrc-vieguymwmxmsr-490[yentm] +ktfitzbgz-fbebmtkr-zktwx-xzz-lmhktzx-111[ztkbx] +vdzonmhydc-eknvdq-sqzhmhmf-963[xacdu] +dmpuamofuhq-otaoaxmfq-efadmsq-742[amfoq] +htqtwkzq-gfxpjy-wjxjfwhm-827[fnred] +sbnqbhjoh-xfbqpojafe-cbtlfu-dpoubjonfou-311[kezry] +qyujihctyx-vumeyn-lywycpcha-604[ychua] +ide-htrgti-tvv-uxcpcrxcv-973[ctvir] +bxaxipgn-vgpst-snt-gtprfjxhxixdc-791[xgpti] +nbhofujd-dipdpmbuf-dvtupnfs-tfswjdf-363[dfpub] +apuut-nxvqzibzm-cpio-mznzvmxc-291[zmcin] +uzfqdzmfuazmx-otaoaxmfq-pqhqxabyqzf-768[pzmry] +tpspahyf-nyhkl-ibuuf-klwhyatlua-253[xkrsz] +iqmbazulqp-vqxxknqmz-efadmsq-950[jrnox] +bpvctixr-rpcsn-igpxcxcv-375[cpxir] +ytu-xjhwjy-uqfxynh-lwfxx-yjhmstqtld-489[xyhjt] +qvbmzvibqwvit-ntwemz-kwvbiqvumvb-720[vbimq] +mhi-lxvkxm-ietlmbv-zktll-vnlmhfxk-lxkobvx-553[eusnm] +tpspahyf-nyhkl-jhukf-wbyjohzpun-487[hpyfj] +avw-zljyla-qlssfilhu-zlycpjlz-929[lzajs] +sawlkjevaz-xwogap-skngodkl-290[akglo] +xgjougizobk-laffe-lruckx-gtgreyoy-774[goefk] +aoubshwq-qobrm-qcohwbu-qighcasf-gsfjwqs-948[qsbho] +wifilzof-vumeyn-lyuwkocmcncih-968[avixc] +uiovmbqk-xtiabqk-oziaa-mvoqvmmzqvo-382[moqva] +sawlkjevaz-oywrajcan-dqjp-lqnydwoejc-342[ajwcd] +kfg-jvtivk-jtrmvexvi-ylek-rercpjzj-529[jvekr] +houngfgxjuay-igtje-giwaoyozout-228[gouai] +gcfcnuls-aluxy-mwupyhayl-bohn-ijyluncihm-916[tacdb] +cjpibabsepvt-cvooz-ufdiopmphz-155[pobci] +iuxxuyobk-igtje-sgtgmksktz-878[uwcvx] +thnulapj-ibuuf-ylzlhyjo-305[sfdnr] +xzwrmkbqtm-rmttgjmiv-zmamizkp-434[ifpry] +yhwooebeaz-zua-yqopkian-oanreya-680[aoeyn] +tfcfiwlc-wcfnvi-wzeretzex-243[cefwi] +guahyncw-xsy-uwkocmcncih-864[qsmtb] +ovbunmneqbhf-rtt-qrfvta-689[zymsd] +rgllk-eomhqzsqd-tgzf-ymdwqfuzs-638[qzdfg] +ryexqpqhteki-sqdto-seqjydw-skijecuh-iuhlysu-946[eqshi] +avw-zljyla-qlssfilhu-mpuhujpun-383[luahj] +pynffvsvrq-onfxrg-znantrzrag-143[nrfag] +ikhcxvmbex-xzz-phkdlahi-839[cstrx] +mvhkvbdib-wvnfzo-zibdizzmdib-187[bizdv] +ipvohghykvbz-wshzapj-nyhzz-huhsfzpz-747[hzpsv] +htqtwkzq-hmthtqfyj-ijuqtdrjsy-151[tqhjy] +xzz-ftgtzxfxgm-865[tupfq] +jyfvnlupj-jhukf-klwhyatlua-747[jydsc] +mbiyqoxsm-mkxni-kxkvicsc-510[ikmxc] +bgmxkgtmbhgte-ietlmbv-zktll-labiibgz-163[bglti] +vdzonmhydc-bqxnfdmhb-rbzudmfdq-gtms-lzmzfdldms-469[arkps] +forwcoqhwjs-gqojsbusf-vibh-rsgwub-688[dgqsb] +qcffcgwjs-pogysh-qcbhowbasbh-688[bchsf] +apuut-xviyt-yzqzgjkhzio-317[zituy] +ide-htrgti-qjccn-jhtg-ithixcv-479[itchg] +kgjgrypw-epybc-hcjjwzcyl-cleglccpgle-262[qphrv] +atyzghrk-lruckx-jkvruesktz-384[krtuz] +hqtyeqsjylu-rqiauj-vydqdsydw-998[gqeba] +uwtojhynqj-gfxpjy-qfgtwfytwd-177[fjtwy] +nglmtuex-xzz-ftgtzxfxgm-839[xgtzf] +ncjzrpytn-clmmte-epnsyzwzrj-951[yqksh] +gntmfefwitzx-gzssd-htsyfnsrjsy-333[cngmk] +qcbgiasf-ufors-qvcqczohs-hfowbwbu-168[bcfoq] +wlqqp-gcrjkzt-xirjj-dribvkzex-529[ycrxs] +drxevkzt-irdgrxzex-jtrmvexvi-ylek-glityrjzex-321[erxit] +ovbunmneqbhf-qlr-znexrgvat-559[nbeqr] +bwx-amkzmb-jiasmb-camz-bmabqvo-512[bmazc] +vcibutulxiom-vohhs-womnigyl-mylpcwy-838[fczlm] +fmsledevhsyw-ikk-hitpscqirx-230[owjnv] +ykhknbqh-ywjzu-ykwpejc-odellejc-940[xguqm] +nsyjwsfyntsfq-gzssd-uzwhmfxnsl-203[sfnwy] +mtzslklcozfd-clmmte-nzyeltyxpye-301[tmlui] +dsxxw-cee-kypicrgle-106[ecxdg] +ujqgywfau-aflwjfslagfsd-tskcwl-ghwjslagfk-476[fagls] +nchhg-jcvvg-mvoqvmmzqvo-642[vmcgh] +cjpibabsepvt-tdbwfohfs-ivou-efqmpznfou-831[mvwiq] +votubcmf-njmjubsz-hsbef-dboez-dpbujoh-fohjoffsjoh-129[izchs] +njmjubsz-hsbef-fhh-nbobhfnfou-337[unims] +iwcjapey-lhwopey-cnwoo-hkceopeyo-576[oecpw] +ydjuhdqjyedqb-fbqijys-whqii-efuhqjyedi-322[qdijy] +bknsykmdsfo-lkcuod-mecdywob-cobfsmo-250[obcdk] +sbqiiyvyut-zubboruqd-cqdqwucudj-530[uqbdc] +etaqigpke-dcumgv-vgejpqnqia-960[egqai] +ykjoqian-cnwza-nwxxep-paydjkhkcu-134[pcdmt] +iehepwnu-cnwza-lhwopey-cnwoo-nawymqeoepekj-108[ewnop] +vagreangvbany-rtt-phfgbzre-freivpr-221[raegv] +surmhfwloh-sodvwlf-judvv-xvhu-whvwlqj-595[vhwlu] +qekrixmg-ikk-gywxsqiv-wivzmgi-256[jsykh] +sno-rdbqds-bgnbnkzsd-otqbgzrhmf-495[rypqa] +guahyncw-vohhs-nywbhifias-214[hains] +sno-rdbqds-atmmx-bnmszhmldms-365[posvl] +zovldbkfz-zxkav-zlxqfkd-zlkqxfkjbkq-575[zrqmk] +ykhknbqh-zua-owhao-888[hakob] +xmrrq-vqw-ugflsafewfl-372[isvjx] +wdjcvuvmyjpn-wpiit-vxlpdndodji-395[cvdlm] +wyvqljapsl-ihzrla-zopwwpun-123[lpwaz] +kdijqrbu-tou-husuylydw-816[uvcwx] +fhezusjybu-fbqijys-whqii-husuylydw-764[uyhis] +jyfvnlupj-kfl-mpuhujpun-773[ujpfl] +hafgnoyr-pubpbyngr-nanylfvf-715[nkyzs] +jfifqxov-doxab-oxyyfq-absbilmjbkq-341[qmgrk] +nij-mywlyn-wuhxs-wiuncha-uwkocmcncih-188[cnwhi] +amjmpdsj-afmamjyrc-ylyjwqgq-470[jmayq] +rdggdhxkt-eaphixr-vgphh-jhtg-ithixcv-921[yvuxl] +ucynmlgxcb-qaytclecp-fslr-dglylagle-184[tudeg] +dpmpsgvm-tdbwfohfs-ivou-sfdfjwjoh-363[qhgxy] +bqvvu-ykhknbqh-fahhuxawj-wymqeoepekj-498[hekqa] +qczcftiz-xszzmpsob-sbuwbssfwbu-818[sbzcf] +aietsrmdih-hci-wlmttmrk-360[imthr] +xst-wigvix-ikk-qevoixmrk-256[ikxve] +nzydfxpc-rclop-nzwzcqfw-mfyyj-opalcexpye-405[cpyfz] +frqvxphu-judgh-udeelw-uhdftxlvlwlrq-933[ludhe] +jsehsyafy-jsttal-hmjuzskafy-892[sajyf] +zbytomdsvo-mrymyvkdo-vyqscdsmc-276[mydos] +tcorcikpi-ecpfa-eqcvkpi-fgxgnqrogpv-934[jziot] +ytu-xjhwjy-hfsid-wjxjfwhm-905[jhwfx] +hjgbwuladw-tmffq-suimakalagf-554[afglm] +pyknyegle-zsllw-nspafyqgle-730[leygn] +gifavtkzcv-avccpsvre-uvjzxe-607[zhayg] +bpvctixr-snt-tcvxcttgxcv-973[vrteq] +wyvqljapsl-jovjvshal-zlycpjlz-175[nrwfe] +kwzzwaqdm-lgm-aitma-122[amwzd] +iqmbazulqp-dmnnuf-qzsuzqqduzs-690[qhzsm] +udskkaxawv-xdgowj-xafsfuafy-138[nailf] +ipvohghykvbz-wshzapj-nyhzz-yljlpcpun-929[lwyvn] +forwcoqhwjs-foppwh-hsqvbczcum-636[chowf] +pualyuhapvuhs-msvdly-svnpzapjz-903[pasuv] +xgjougizobk-vrgyzoi-mxgyy-xkykgxin-436[tjykb] +sedikcuh-whqtu-rkddo-cqdqwucudj-348[brlqi] +elrkdcdugrxv-fdqgb-uhfhlylqj-465[dlfgh] +mhi-lxvkxm-lvtoxgzxk-angm-ltexl-917[xlmgk] +bqvvu-fahhuxawj-yqopkian-oanreya-212[cpdwf] +buzahisl-jhukf-thyrlapun-903[hualb] +rgllk-oaxadrgx-nmewqf-pqbxakyqzf-690[aqxfg] +iuruxlar-irgyyolokj-jek-ynovvotm-488[ohpdn] +xmtjbzidx-nxvqzibzm-cpio-yzkgjthzio-811[zixbj] +xmrrq-ugfkmewj-yjsvw-usfvq-ugslafy-ghwjslagfk-866[fgsju] +yhtwhnpun-wshzapj-nyhzz-vwlyhapvuz-851[hznpw] +zgmfyxypbmsq-zyqicr-kypicrgle-340[ycgim] +uwtojhynqj-hfsid-htfynsl-wjfhvznxnynts-489[nhfjs] +fab-eqodqf-dmnnuf-bgdotmeuzs-196[dfbem] +wifilzof-wuhxs-wiuncha-lyuwkocmcncih-578[ciwhu] +gspsvjyp-veffmx-pefsvexsvc-516[svefp] +yknnkoera-xwogap-bejwjyejc-732[ejakn] +nsyjwsfyntsfq-gfxpjy-knsfshnsl-333[sfnyj] +fodvvlilhg-gbh-ghvljq-595[vgprj] +nuatmlmdpage-bxmefuo-sdmee-emxqe-482[emadu] +jvyyvzpcl-msvdly-vwlyhapvuz-903[vylpz] +fruurvlyh-iorzhu-vdohv-517[hruvo] +houngfgxjuay-hgyqkz-ykxboiky-618[ygkho] +gsrwyqiv-kvehi-gerhc-gsexmrk-xiglrspskc-750[grsei] +pualyuhapvuhs-qlssfilhu-zhslz-799[hlsua] +nwlddtqtpo-nlyoj-nzletyr-opdtry-119[tdlno] +fydelmwp-prr-nfdezxpc-dpcgtnp-535[pdcef] +qmpmxevc-kvehi-jpsaiv-hizipstqirx-672[ipveh] +nzwzcqfw-nlyoj-nzletyr-opawzjxpye-587[znwye] +bpvctixr-rwdrdapit-hpath-973[prtad] +gzefmnxq-omzpk-oazfmuzyqzf-430[zfmoq] +wpuvcdng-hnqygt-vgejpqnqia-102[tmdxr] +aoubshwq-foppwh-igsf-hsghwbu-610[tsrzk] +wihmogyl-aluxy-mwupyhayl-bohn-mbcjjcha-422[vuypz] +cqwdujys-uww-sedjqydcudj-478[djuwc] +votubcmf-tdbwfohfs-ivou-sfbdrvjtjujpo-883[fobjt] +gpbepvxcv-ytaanqtpc-apqdgpidgn-427[pagcd] +bnknqetk-eknvdq-qdrdzqbg-885[qdknb] +uwtojhynqj-wfruflnsl-hfsid-wjxjfwhm-541[fjwhl] +zhdsrqlchg-fodvvlilhg-gbh-frqwdlqphqw-361[hlqdg] +cvabijtm-jcvvg-lmxizbumvb-174[vbmci] +fruurvlyh-fdqgb-ghsorbphqw-205[hrbfg] +pualyuhapvuhs-msvdly-thyrlapun-279[uahlp] +iehepwnu-cnwza-ydkykhwpa-ajcejaanejc-212[oqwrn] +bqvvu-xwogap-yqopkian-oanreya-680[ckqtm] +ktwbhtvmbox-vahvhetmx-mxvaghehzr-917[hvmtx] +uzfqdzmfuazmx-omzpk-oamfuzs-fqotzaxask-274[mnilo] +gntmfefwitzx-idj-rfsfljrjsy-931[fjirs] +tcrjjzwzvu-tfiifjzmv-tyftfcrkv-vexzevvizex-399[vzfte] +oaddaeuhq-vqxxknqmz-qzsuzqqduzs-404[qzdua] +sorozgxe-mxgjk-yigbktmkx-natz-zxgototm-514[hejid] +eadalsjq-yjsvw-ujqgywfau-tskcwl-kwjnauwk-554[wajks] +lxuxaodu-rwcnawjcrxwju-ljwmh-fxatbqxy-693[xwaju] +plolwdub-judgh-fdqgb-frdwlqj-vdohv-153[dlbfg] +kdijqrbu-jef-iushuj-sqdto-seqjydw-kiuh-juijydw-218[iqtvx] +tfejldvi-xiruv-tfcfiwlc-srjbvk-jyzggzex-243[fijvc] +jchipqat-ltpedcxots-uadltg-tcvxcttgxcv-609[ezynj] +ryexqpqhteki-sxesebqju-udwyduuhydw-816[eudqy] +iuxxuyobk-xgjougizobk-hatte-sgtgmksktz-436[pwdlc] +gcfcnuls-aluxy-wuhxs-wiuncha-guleyncha-136[ucahl] +ugfkmewj-yjsvw-usfvq-ugslafy-mkwj-lwklafy-476[ohqre] +laffe-vxupkizork-vrgyzoi-mxgyy-uvkxgzouty-488[awgqz] +eqttqukxg-hnqygt-rwtejcukpi-570[tqegk] +yuxufmdk-sdmpq-ngzzk-ruzmzouzs-534[zumdk] +ktwbhtvmbox-ietlmbv-zktll-kxtvjnblbmbhg-553[btlkm] +qxdwpopgsdjh-eaphixr-vgphh-prfjxhxixdc-999[hpxdg] +bnmrtldq-fqzcd-oqnidbshkd-qzaahs-cdoknxldms-703[lxvwe] +gokzyxsjon-nio-gybucryz-172[oygnz] +cqwdujys-uww-cqhaujydw-660[wucdj] +mbggf-pualyuhapvuhs-msvdly-aljouvsvnf-123[ngwhl] +crwwv-oxaflxzqfsb-zelzlixqb-ixyloxqlov-913[lxoqz] +qlm-pbzobq-ciltbo-abmxoqjbkq-861[bqolm] +oqnidbshkd-dff-rghoohmf-313[dfhob] +lzfmdshb-eknvdq-cdudknoldms-937[dklmn] +wsvsdkbi-qbkno-nio-ecob-docdsxq-614[jsetb] +zlilocri-zxkav-zlxqfkd-qoxfkfkd-835[kflxz] +wlqqp-upv-vexzevvizex-165[vepqx] +vcibutulxiom-vumeyn-womnigyl-mylpcwy-838[myilu] +pelbtravp-cynfgvp-tenff-svanapvat-663[kzmfp] +xgvnndadzy-wpiit-jkzmvodjin-421[dinjv] +foadouwbu-pogysh-fsqswjwbu-480[osuwb] +yrwxefpi-hci-wxsveki-308[iewxc] +tmrszakd-azrjds-otqbgzrhmf-105[rzadm] +sbnqbhjoh-dboez-dpbujoh-usbjojoh-155[bohjd] +eqnqthwn-gii-fgrctvogpv-908[ginqt] +uiovmbqk-jcvvg-amzdqkma-356[mvakq] +sbejpbdujwf-gmpxfs-pqfsbujpot-857[pbfjs] +ide-htrgti-ytaanqtpc-stepgibtci-531[mnyed] +aietsrmdih-glsgspexi-gywxsqiv-wivzmgi-230[igsem] +htqtwkzq-xhfajsljw-mzsy-zxjw-yjxynsl-931[cmkfr] +ckgvutofkj-xgjougizobk-yigbktmkx-natz-lotgtiotm-436[tgkoi] +nwlddtqtpo-upwwjmply-fdpc-epdetyr-509[pdtwe] +irdgrxzex-sleep-jyzggzex-373[tvnma] +crwwv-zxkav-qoxfkfkd-939[lyjmh] +ejpanjwpekjwh-nwzekwypera-oywrajcan-dqjp-nawymqeoepekj-368[zmuyt] +lzfmdshb-rbzudmfdq-gtms-knfhrshbr-495[bdfhm] +nchhg-rmttgjmiv-uizsmbqvo-252[mghit] +amjmpdsj-aylbw-rpyglgle-626[lagjm] +dfcxsqhwzs-pogysh-qighcasf-gsfjwqs-220[sfghq] +xjgjmapg-nxvqzibzm-cpio-nojmvbz-707[jmzbg] +zntargvp-enoovg-qrirybczrag-663[scjtg] +bkzrrhehdc-qzaahs-qdzbpthrhshnm-391[zjbto] +hafgnoyr-wryylorna-erprvivat-429[rayno] +apwmeclga-afmamjyrc-rpyglgle-262[aglmc] +jsvagsulanw-jsttal-hmjuzskafy-606[asjlt] +bnknqetk-lhkhszqx-fqzcd-cxd-zmzkxrhr-651[kzhqx] +ykhknbqh-nwxxep-nayaerejc-966[enahk] +vrurcjah-pajmn-kdwwh-cajrwrwp-667[rwajc] +vhehkyne-utldxm-vhgmtbgfxgm-891[ghmet] +zotts-dyffsvyuh-xymcah-812[yfhst] +vhglnfxk-zktwx-vtgwr-vnlmhfxk-lxkobvx-319[gvnom] +ajvyjprwp-mhn-nwprwnnarwp-563[npwra] +guahyncw-chnylhuncihuf-jfumncw-alumm-guleyncha-110[zjirh] +hwdtljsnh-jll-xfqjx-801[jlhxd] +xjgjmapg-mvwwdo-xjiovdihzio-525[ijodg] +pybgmyargtc-zgmfyxypbmsq-zsllw-asqrmkcp-qcptgac-262[cgmpy] +aflwjfslagfsd-hdsklau-yjskk-esfsywewfl-528[sflak] +lugjuacha-dyffsvyuh-xypyfijgyhn-708[yfhua] +lxaaxbren-mhn-cnlqwxuxph-823[nzsvm] +sehheiylu-tou-cqdqwucudj-738[xciqn] +slqryzjc-djmucp-qrmpyec-808[sznhq] +ykjoqian-cnwza-bhksan-opknwca-264[ankco] +pualyuhapvuhs-lnn-bzly-alzapun-721[auzfj] +tfiifjzmv-wcfnvi-jkfirxv-997[fivjc] +lsyrkjkbnyec-mkxni-mykdsxq-vyqscdsmc-562[ksycm] +fnjyxwrinm-lujbbrornm-ajkkrc-nwprwnnarwp-927[zmyco] +pyknyegle-amlqskcp-epybc-hcjjwzcyl-qcptgacq-860[cpyel] +rzvkjiduzy-ezggtwzvi-kpmxcvndib-811[zivdg] +wyvqljapsl-yhiipa-bzly-alzapun-773[alpyi] +joufsobujpobm-dipdpmbuf-bdrvjtjujpo-415[gvkud] +zloolpfsb-zxkav-zlxqfkd-lmboxqflkp-393[lfkox] +zilqwikbqdm-jcvvg-kwvbiqvumvb-174[vbiqk] +kzeed-wfggny-xmnuunsl-853[negud] +ftzgxmbv-xzz-phkdlahi-657[grbhi] +bnqqnrhud-bzmcx-sqzhmhmf-131[hmqbn] +zntargvp-pnaql-pbngvat-nanylfvf-169[napvf] +jxdkbqfz-pzxsbkdbo-erkq-absbilmjbkq-315[uzmcf] +jshzzpmplk-buzahisl-kfl-klzpnu-695[lzkph] +pualyuhapvuhs-msvdly-jbzavtly-zlycpjl-825[lyapu] +lujbbrornm-ouxfna-xynajcrxwb-667[bnrxa] +dmpuamofuhq-nmewqf-pqhqxabyqzf-482[lndmj] +cvabijtm-moo-zmikycqaqbqwv-148[mqabc] +wyvqljapsl-msvdly-zlycpjlz-435[lyjps] +fmsledevhsyw-ikk-gywxsqiv-wivzmgi-204[isvwe] +ide-htrgti-snt-sthxvc-297[tyvnc] +guahyncw-luvvcn-qilembij-292[tcrsd] +udskkaxawv-wyy-kwjnauwk-710[kwauy] +aczupnetwp-clmmte-dezclrp-379[ynpmz] +ikhcxvmbex-ietlmbv-zktll-vnlmhfxk-lxkobvx-449[lxkvb] +rzvkjiduzy-xcjxjgvoz-rjmfncjk-707[tmnki] +enzcntvat-cynfgvp-tenff-ynobengbel-923[neftb] +vkrhzxgbv-bgmxkgtmbhgte-lvtoxgzxk-angm-kxtvjnblbmbhg-111[iwvbg] +esyfwlau-tskcwl-jwsuimakalagf-398[ywmzb] +lhkhszqx-fqzcd-bzmcx-nodqzshnmr-287[zhqcd] +nzwzcqfw-ojp-dstaatyr-977[dsznk] +qfkkj-xlrypetn-nlyoj-xlcvpetyr-691[lczde] +wifilzof-luvvcn-nywbhifias-552[sxghy] +nchhg-kivlg-zmamizkp-928[ghikm] +tipfxvezt-tcrjjzwzvu-upv-kirzezex-295[zetvi] +gsvvswmzi-tpewxmg-kveww-gsrxemrqirx-698[wegmr] +pynffvsvrq-sybjre-ernpdhvfvgvba-663[epsqt] +sedikcuh-whqtu-vbemuh-udwyduuhydw-894[udhwe] +tmrszakd-bzmcx-rsnqzfd-183[zdmrs] +zilqwikbqdm-jcvvg-wxmzibqwva-798[iqvwb] +lejkrscv-jtrmvexvi-ylek-nfibjyfg-815[ejvfi] +zsxyfgqj-jll-qtlnxynhx-151[lxjnq] +gbc-frperg-onfxrg-qrirybczrag-923[rgbcf] +xjgjmapg-kgvnodx-bmvnn-nvgzn-343[ngvjm] +dmybmsuzs-ngzzk-mocgueufuaz-534[uzmgs] +dmpuamofuhq-omzpk-oamfuzs-pqbxakyqzf-482[mafop] +fbebmtkr-zktwx-unggr-ehzblmbvl-787[begkl] +zntargvp-enoovg-ybtvfgvpf-481[vgfno] +fubrjhqlf-gbh-vhuylfhv-933[hfblu] +fruurvlyh-fdqgb-frdwlqj-whfkqrorjb-569[tmdlw] +ixccb-udeelw-ghvljq-335[nibrq] +tcorcikpi-dwppa-fgukip-570[qnzgc] +ibghopzs-pibbm-rsdzcmasbh-428[bshim] +apuut-wpiit-nzmqdxzn-889[inptu] +qzoggwtwsr-pibbm-igsf-hsghwbu-246[gbswh] +atyzghrk-yigbktmkx-natz-uvkxgzouty-488[pxeoy] +mbiyqoxsm-mkxni-bokmaescsdsyx-796[erynw] +qxdwpopgsdjh-uadltg-itrwcdadvn-401[mzukc] +tinnm-rms-kcfygvcd-688[cmndf] +crwwv-mixpqfz-doxpp-xkxivpfp-107[tpawu] +qxdwpopgsdjh-qphzti-itrwcdadvn-999[lenub] +jqwpihizlwca-lgm-abwziom-538[iwalm] +votubcmf-dboez-dpbujoh-gjobodjoh-909[szlxy] +nwzekwypera-oywrajcan-dqjp-iwjwcaiajp-446[awjpc] +lxuxaodu-vrurcjah-pajmn-ljwmh-cnlqwxuxph-329[uxahj] +gvaaz-ezf-efwfmpqnfou-779[scdpt] +jsvagsulanw-hdsklau-yjskk-vwhdgqewfl-190[saklw] +yrwxefpi-fewoix-irkmriivmrk-828[irefk] +jrncbavmrq-rtt-fgbentr-819[rtbna] +tpspahyf-nyhkl-msvdly-klwsvftlua-409[lsyaf] +veqtekmrk-tpewxmg-kveww-qerekiqirx-100[szdiy] +ykhknbqh-ydkykhwpa-hkceopeyo-108[khyeo] +gifavtkzcv-treup-tfrkzex-dribvkzex-503[ekrtv] +hafgnoyr-pubpbyngr-bcrengvbaf-351[bgnra] +ide-htrgti-gpqqxi-gtprfjxhxixdc-999[ixgtd] +yhtwhnpun-ipvohghykvbz-wshzapj-nyhzz-zavyhnl-617[hznyp] +enqvbnpgvir-pynffvsvrq-rtt-erprvivat-559[vrnpt] +jxdkbqfz-yrkkv-pxibp-159[kbpxd] +etyyx-rbzudmfdq-gtms-rdquhbdr-833[drbmq] +owshgfarwv-udskkaxawv-hdsklau-yjskk-ogjckzgh-398[kasgh] +xst-wigvix-gerhc-irkmriivmrk-828[ilntc] +ugfkmewj-yjsvw-wyy-klgjsyw-684[wyjgk] +zloolpfsb-mixpqfz-doxpp-pbosfzbp-211[topig] +fruurvlyh-vfdyhqjhu-kxqw-orjlvwlfv-569[vfhlr] +xst-wigvix-fyrrc-vigimzmrk-516[irgmv] +rnqnyfwd-lwfij-wfggny-wjxjfwhm-281[wfjng] +rdchjbtg-vgpst-ytaanqtpc-sthxvc-557[tcagh] +fubrjhqlf-fdqgb-frdwlqj-dftxlvlwlrq-465[flqdr] +qlm-pbzobq-pzxsbkdbo-erkq-xznrfpfqflk-679[bqfkp] +ltpedcxots-rpcsn-bpcpvtbtci-921[dtejs] +froruixo-edvnhw-ghsorbphqw-231[horwb] +bjfutsneji-hmthtqfyj-fsfqdxnx-333[fjthn] +yhtwhnpun-lnn-zavyhnl-669[wpsgy] +dmpuamofuhq-ngzzk-xmnadmfadk-742[madfk] +ejpanjwpekjwh-ywjzu-oanreyao-498[yzjwm] +eza-dpncpe-qwzhpc-afcnsldtyr-353[ivxnu] +qekrixmg-nippcfier-gywxsqiv-wivzmgi-464[yxkwm] +avw-zljyla-ibuuf-ylzlhyjo-383[lyaju] +lqwhuqdwlrqdo-mhoobehdq-rshudwlrqv-621[qdhlo] +qvbmzvibqwvit-jcvvg-apqxxqvo-200[vqbix] +ugjjgkanw-esyfwlau-jsttal-ugflsafewfl-164[fgcep] +shoewudys-isqludwuh-xkdj-ijehqwu-504[stjyd] +luxciuwncpy-vohhs-yhachyylcha-214[hcyal] +gifavtkzcv-sleep-ivjvrity-685[vieta] +rzvkjiduzy-xviyt-yzqzgjkhzio-161[ziyjk] +iehepwnu-cnwza-ykjoqian-cnwza-ywjzu-ykwpejc-iwjwcaiajp-316[wajci] +sorozgxe-mxgjk-jek-vaxingyotm-956[goxej] +dmpuamofuhq-dmnnuf-dqmocgueufuaz-560[umdfa] +hjgbwuladw-kusnwfywj-zmfl-ugflsafewfl-450[aezbn] +esyfwlau-usfvq-ugslafy-ghwjslagfk-294[fsagl] +shmml-sybjre-erfrnepu-195[ngkjp] +jlidywncfy-ohmnuvfy-wuhxs-wiuncha-ijyluncihm-240[xtjsm] +ixeumktoi-lruckx-aykx-zkyzotm-436[kximo] +nzydfxpc-rclop-upwwjmply-xlylrpxpye-535[plyxc] +fodvvlilhg-sodvwlf-judvv-pdunhwlqj-725[krngz] +xjmmjndqz-ezggtwzvi-adivixdib-733[idzgj] +pbybeshy-pnaql-pbngvat-znantrzrag-533[anbpg] +fnjyxwrinm-ljwmh-lxjcrwp-bqryyrwp-329[rwjyl] +lhkhszqx-fqzcd-okzrshb-fqzrr-cdoknxldms-391[zdhkq] +pynffvsvrq-ohaal-znantrzrag-637[anrfv] +hafgnoyr-sybjre-genvavat-767[ngacu] +lhkhszqx-fqzcd-bgnbnkzsd-lzmzfdldms-443[ynael] +lugjuacha-wbiwifuny-mufym-786[uafim] +vkrhzxgbv-xzz-ftgtzxfxgm-995[xzgft] +uzfqdzmfuazmx-rxaiqd-emxqe-170[mqxza] +ajvyjprwp-snuuhknjw-anlnrerwp-771[njprw] +zuv-ykixkz-igtje-iugzotm-zxgototm-930[lifhb] +mfklstdw-wyy-ksdwk-294[kwdsy] +kyelcrga-slqryzjc-hcjjwzcyl-qrmpyec-990[kypqm] +vkppo-sxesebqju-tulubefcudj-400[uebjp] +ynukcajey-xqjju-lqnydwoejc-394[jycen] +qzlozfhmf-qzchnzbshud-qzaahs-qdzbpthrhshnm-287[hzqsa] +kmjezxodgz-mvwwdo-ncdkkdib-109[dkmow] +oazegyqd-sdmpq-ngzzk-bgdotmeuzs-482[zdgem] +qfkkj-mldvpe-cpdplcns-561[pcdkl] +hvbizodx-ezggtwzvi-xjiovdihzio-577[voqzy] +iuxxuyobk-inuiurgzk-xkikobotm-722[ikuox] +jyddc-gsvvswmzi-jpsaiv-jmrergmrk-958[cpedy] +vhkkhlbox-unggr-hixktmbhgl-449[hgkbl] +clotzlnetgp-nsznzwlep-dpcgtnpd-145[tehzy] +plolwdub-judgh-hjj-dqdobvlv-543[zkryh] +ajmrxjlcren-ouxfna-ydalqjbrwp-355[ajrln] +uqtqbizg-ozilm-lgm-amzdqkma-304[mqzag] +lnkfaypeha-zua-lqnydwoejc-914[aelny] +ibghopzs-pwcvonofrcig-qobrm-aobousasbh-844[obsac] +ocipgvke-eqpuwogt-itcfg-tcddkv-gpikpggtkpi-804[salbg] +ajmrxjlcren-lqxlxujcn-uxprbcrlb-823[lrxcj] +rgndvtcxr-ytaanqtpc-sthxvc-843[tcanr] +hqcfqwydw-sxesebqju-qdqboiyi-894[qbdei] +tbxmlkfwba-gbiivybxk-qbzeklildv-757[biklv] +vetllbybxw-utldxm-vhgmtbgfxgm-735[bglmt] +mfklstdw-hdsklau-yjskk-vwhsjlewfl-528[xyuts] +pxtihgbsxw-vtgwr-nlxk-mxlmbgz-657[xgblm] +bnmrtldq-fqzcd-dff-lzqjdshmf-677[szdpt] +xekdwvwnzkqo-sawlkjevaz-fahhuxawj-nayaerejc-654[zdeyh] +gzefmnxq-bxmefuo-sdmee-xmnadmfadk-170[medfx] +gpsxdprixkt-eaphixr-vgphh-rjhidbtg-htgkxrt-115[hgprt] +eza-dpncpe-hplazytkpo-awldetn-rcldd-xlcvpetyr-535[tnpmg] +bnmrtldq-fqzcd-eknvdq-sdbgmnknfx-781[dnqbf] +nzcczdtgp-dnlgpyrpc-sfye-opgpwzaxpye-899[pcgyz] +nwzekwypera-ydkykhwpa-odellejc-992[pwqrh] +oknkvcta-itcfg-gii-wugt-vguvkpi-154[giktv] +tcrjjzwzvu-upv-kvtyefcfxp-373[vcfjp] +xst-wigvix-ikk-stivexmsrw-230[isxkt] +fkqbokxqflkxi-zelzlixqb-qoxfkfkd-705[mntlq] +qlm-pbzobq-yxphbq-zrpqljbo-pbosfzb-237[bpqoz] +drxevkzt-avccpsvre-wzeretzex-269[ervzc] +ksodcbwnsr-pogysh-oqeiwgwhwcb-480[mxdsl] +tyepcyletzylw-qwzhpc-xlylrpxpye-613[tvcgy] +rnqnyfwd-lwfij-hmthtqfyj-qtlnxynhx-437[ukdrt] +oxjmxdfkd-jfifqxov-doxab-yxphbq-ixyloxqlov-393[xodfq] +tcorcikpi-ejqeqncvg-fgrnqaogpv-804[cgqei] +hqtyeqsjylu-zubboruqd-qsgkyiyjyed-712[yqubd] +hvbizodx-ezggtwzvi-gjbdnodxn-967[dgzbi] +zntargvp-enoovg-fgbentr-923[gneor] +mvydjvxodqz-wvnfzo-hvmfzodib-447[zfpes] +emixwvqhml-zijjqb-lmdmtwxumvb-148[mbijl] +frqvxphu-judgh-gbh-whfkqrorjb-179[jwmgn] +kyelcrga-njyqrga-epyqq-dglylagle-782[glyae] +npmhcargjc-pyzzgr-bctcjmnkclr-522[crgjm] +pxtihgbsxw-xzz-tvjnblbmbhg-943[bxght] +oknkvcta-itcfg-hnqygt-qrgtcvkqpu-206[tcgkq] +amlqskcp-epybc-zyqicr-sqcp-rcqrgle-522[bnemi] +enqvbnpgvir-pnaql-fuvccvat-299[vnacp] +xlrypetn-mldvpe-cpnptgtyr-509[nugrq] +mbggf-qlssfilhu-klclsvwtlua-383[lsfgu] +wlsiayhcw-wuhxs-wiuncha-mniluay-656[wahiu] +gvaaz-cbtlfu-efqmpznfou-415[byzhx] +rzvkjiduzy-nxvqzibzm-cpio-hvivbzhzio-343[zivbh] +bqxnfdmhb-dff-otqbgzrhmf-781[fbdhm] +wihmogyl-aluxy-wuhxs-wiuncha-lyuwkocmcncih-838[chuwi] +enzcntvat-onfxrg-hfre-grfgvat-689[nkvyi] +xgjougizobk-igtje-iugzotm-ygrky-540[giojk] +mbggf-kfl-aljouvsvnf-773[fglva] +qzoggwtwsr-xszzmpsob-sbuwbssfwbu-662[sbwzg] +wsvsdkbi-qbkno-mkxni-mykdsxq-nofovyzwoxd-744[kodns] +tpspahyf-nyhkl-lnn-klzpnu-721[nlphk] +pejji-nio-bomosfsxq-380[oijsb] +amlqskcp-epybc-cee-nspafyqgle-132[dsayt] +luxciuwncpy-xsy-lyuwkocmcncih-240[cuyil] +irdgrxzex-gcrjkzt-xirjj-vexzevvizex-165[xerzi] +lxaaxbren-snuuhknjw-ujkxajcxah-381[axjnu] +ktfitzbgz-ynssr-xzz-wxiehrfxgm-839[sjagq] +hafgnoyr-enzcntvat-pnaql-pbngvat-genvavat-975[antvg] +dfcxsqhwzs-qobrm-fsqswjwbu-896[sqwbf] +zsxyfgqj-xhfajsljw-mzsy-xytwflj-619[jfsxy] +yhwooebeaz-ywjzu-ykwpejc-hkceopeyo-706[eoywc] +mvydjvxodqz-wpiit-kpmxcvndib-863[yrjnz] +otzkxtgzoutgr-igtje-iugzotm-iutzgotsktz-332[tgzoi] +pdjqhwlf-sodvwlf-judvv-vdohv-855[vdfhj] +gpewwmjmih-fyrrc-gywxsqiv-wivzmgi-724[iwgmr] +oqnidbshkd-idkkxadzm-rsnqzfd-391[lpscd] +rgndvtcxr-hrpktcvtg-wjci-uxcpcrxcv-765[crtvx] +esyfwlau-tmffq-xafsfuafy-970[fasuy] +gvaaz-dipdpmbuf-efqbsunfou-545[zmynh] +zsxyfgqj-wfggny-uzwhmfxnsl-463[cvqjn] +oazegyqd-sdmpq-ngzzk-emxqe-430[flhis] +jvuzbtly-nyhkl-zjhclunly-obua-zlycpjlz-643[ueimk] +surmhfwloh-vfdyhqjhu-kxqw-ghsorbphqw-205[hqwfo] +pualyuhapvuhs-zjhclunly-obua-thuhnltlua-825[ficqs] +wbhsfbohwcboz-rms-oqeiwgwhwcb-194[wbhoc] +gpsxdprixkt-ytaanqtpc-bpcpvtbtci-635[qkzhc] +rnqnyfwd-lwfij-xhfajsljw-mzsy-qfgtwfytwd-931[fwjyd] +ubhatstkwhnl-ktuubm-vnlmhfxk-lxkobvx-787[gtsqv] +lqwhuqdwlrqdo-udeelw-dftxlvlwlrq-413[ldqwe] +kloqemlib-lygbzq-pqloxdb-991[lbqod] +veqtekmrk-tpewxmg-kveww-hiwmkr-282[ekwmr] +rflsjynh-ytu-xjhwjy-jll-knsfshnsl-333[jlshn] +bknsykmdsfo-pvygob-domrxyvyqi-432[yobdk] +mybbycsfo-bkllsd-kxkvicsc-822[yzxcq] +zixppfcfba-yxphbq-absbilmjbkq-991[gbhts] +udskkaxawv-uzgugdslw-klgjsyw-684[gksuw] +clxalrtyr-mfyyj-qtylyntyr-665[ylrta] +uiovmbqk-jiasmb-lmaqov-694[mabio] +xmtjbzidx-mvwwdo-zibdizzmdib-161[dizbm] +wyvqljapsl-jovjvshal-bzly-alzapun-643[lajvp] +zlilocri-zxkav-mrozexpfkd-445[rifng] +pinovwgz-zbb-hvmfzodib-811[bziov] +rtqlgevkng-dwppa-vgejpqnqia-284[gpqae] +vrurcjah-pajmn-ljwmh-jlzdrbrcrxw-667[lmdrk] +jlidywncfy-dyffsvyuh-ijyluncihm-838[yficd] +cebwrpgvyr-sybjre-qrirybczrag-741[tsrqd] +pbafhzre-tenqr-onfxrg-grpuabybtl-949[rbaef] +lahxpnwrl-ljwmh-lxjcrwp-nwprwnnarwp-433[seonp] +iuxxuyobk-igtje-iugzotm-iutzgotsktz-644[tiugo] +qfkkj-prr-fdpc-epdetyr-951[prdef] +nchhg-akidmvomz-pcvb-nqvivkqvo-954[osgtz] +htwwtxnaj-gzssd-ijufwyrjsy-385[jswty] +myxcewob-qbkno-mrymyvkdo-bokmaescsdsyx-328[sezot] +rzvkjiduzy-mvwwdo-ncdkkdib-499[mfyze] +emixwvqhml-lgm-uizsmbqvo-798[milqv] +xmtjbzidx-wvnfzo-vivgtndn-941[nvdit] +bknsykmdsfo-zvkcdsm-qbkcc-cobfsmoc-198[cksbm] +gsrwyqiv-kvehi-fyrrc-jmrergmrk-906[regik] +bqvvu-oywrajcan-dqjp-nawymqeoepekj-524[aejqn] +upq-tfdsfu-sbccju-bobmztjt-883[btucf] +surmhfwloh-fruurvlyh-mhoobehdq-orjlvwlfv-933[zymnj] +wkqxodsm-tovvilokx-gybucryz-588[okvxy] +nchhg-ntwemz-twoqabqka-902[ahnqt] +iqmbazulqp-rgllk-rxaiqd-fqotzaxask-950[dtanc] +ejpanjwpekjwh-nwxxep-bejwjyejc-732[jewpn] +ajmrxjlcren-fnjyxwrinm-lqxlxujcn-vjwjpnvnwc-329[yhgwz] +qcbgiasf-ufors-qvcqczohs-aofyshwbu-532[scfoq] +jsehsyafy-vqw-ugflsafewfl-970[mfzcn] +fab-eqodqf-qss-geqd-fqefuzs-560[qfesd] +jef-iushuj-uww-sedjqydcudj-322[qyadz] +kfg-jvtivk-jtrmvexvi-ylek-ivtvzmzex-347[wmlfu] +pxtihgbsxw-ietlmbv-zktll-wxiehrfxgm-371[xiltb] +wfintfhynaj-hmthtqfyj-jslnsjjwnsl-463[jnfhs] +forwcoqhwjs-foppwh-kcfygvcd-480[cfowh] +kzgwomvqk-rmttgjmiv-camz-bmabqvo-616[mvabg] +pybgmyargtc-aylbw-amyrgle-nspafyqgle-392[yaglb] +jyfvnlupj-ihzrla-lunpullypun-149[lytps] +dpmpsgvm-cbtlfu-xpsltipq-467[plmst] +oxaflxzqfsb-avb-zrpqljbo-pbosfzb-965[bfoza] +amlqskcp-epybc-afmamjyrc-bctcjmnkclr-392[cmabj] +encuukhkgf-tcddkv-yqtmujqr-362[kucdq] +lqwhuqdwlrqdo-edvnhw-hqjlqhhulqj-595[sywmh] +njmjubsz-hsbef-qspkfdujmf-cbtlfu-vtfs-uftujoh-857[fujsb] +dsxxw-djmucp-umpiqfmn-340[mdpux] +aflwjfslagfsd-hdsklau-yjskk-dstgjslgjq-736[sjlad] +ynukcajey-ywjzu-iwjwcaiajp-758[sthmn] +froruixo-lqwhuqdwlrqdo-fdqgb-uhdftxlvlwlrq-621[gtcry] +chnylhuncihuf-jfumncw-alumm-mylpcwym-526[tyodr] +ujoon-qphzti-uxcpcrxcv-817[copux] +bkwzkqsxq-cmkfoxqob-rexd-ckvoc-666[kcoqx] +pelbtravp-enqvbnpgvir-qlr-qrfvta-403[wqynx] +yhtwhnpun-ibuuf-thuhnltlua-643[trfed] +willimcpy-yaa-wihnuchgyhn-344[hiyac] +thnulapj-jovjvshal-mpuhujpun-799[juhpa] +nzcczdtgp-mldvpe-lnbftdtetzy-821[qvnmi] +qzlozfhmf-idkkxadzm-btrsnldq-rdquhbd-209[dqzbf] +ajvyjprwp-ouxfna-vjwjpnvnwc-407[jnpvw] +hcd-gsqfsh-dzoghwq-ufogg-zcuwghwqg-688[nwgox] +jrncbavmrq-qlr-genvavat-169[arvnq] +crwwv-yrkkv-jxkxdbjbkq-653[ylpzs] +pejji-tovvilokx-vyqscdsmc-146[vcijo] +ikhcxvmbex-lvtoxgzxk-angm-inkvatlbgz-189[xgkva] +jyddc-wgezirkiv-lyrx-xiglrspskc-620[ircdg] +ajyqqgdgcb-aylbw-amyrgle-rpyglgle-210[glyab] +mhi-lxvkxm-yehpxk-kxvxbobgz-319[lcest] +rkpqxyib-gbiivybxk-lmboxqflkp-211[vustn] +jchipqat-rdadguja-hrpktcvtg-wjci-tcvxcttgxcv-999[ctagj] +ovbunmneqbhf-fpniratre-uhag-grpuabybtl-949[banru] +nchhg-xtiabqk-oziaa-abwziom-174[aibho] +dwbcjkun-ljwmh-ydalqjbrwp-303[jwbdl] +lxuxaodu-krxqjijamxdb-bljenwpna-qdwc-bnaerlnb-563[ycjlt] +yhkpvhjapcl-wshzapj-nyhzz-shivyhavyf-461[hyapv] +udglrdfwlyh-mhoobehdq-wudlqlqj-959[dlhqo] +myxcewob-qbkno-lsyrkjkbnyec-lexxi-cdybkqo-588[nfdem] +fnjyxwrinm-ljwmh-lxwcjrwvnwc-459[wjncl] +udpsdjlqj-udeelw-ghvljq-491[djleq] +zloolpfsb-yrkkv-mrozexpfkd-783[koflp] +drxevkzt-jtrmvexvi-ylek-ivrthlzjzkzfe-997[evzkr] +ykjoqian-cnwza-ywjzu-ykwpejc-opknwca-264[wacjk] +xekdwvwnzkqo-zua-zalwnpiajp-992[awzkn] +fydelmwp-aczupnetwp-prr-cplnbftdtetzy-847[ptecd] +lxwbdvna-pajmn-ouxfna-anjlzdrbrcrxw-563[anrxb] +xfbqpojafe-gmpxfs-tbmft-545[rgdzm] +kzeed-ojqqdgjfs-ijuqtdrjsy-411[jdqes] +ktiaaqnqml-ntwemz-uizsmbqvo-642[azvew] +udpsdjlqj-gbh-whfkqrorjb-725[rnqmt] +lahxpnwrl-ouxfna-ydalqjbrwp-745[alnpr] +dsxxw-bwc-mncpyrgmlq-548[cmwxb] +joufsobujpobm-gvaaz-qmbtujd-hsbtt-fohjoffsjoh-727[ojbfh] +laffe-jek-ynovvotm-670[efova] +nzcczdtgp-ojp-xlcvpetyr-353[nvmak] +kgjgrypw-epybc-djmucp-qyjcq-496[sqhmg] +ykjoqian-cnwza-ywjzu-klanwpekjo-680[ajknw] +nbhofujd-dipdpmbuf-efqbsunfou-415[fubdn] +oaddaeuhq-ngzzk-fqotzaxask-144[hbxcm] +lujbbrornm-vjpwncrl-snuuhknjw-ldbcxvna-bnaerln-459[nblrj] +xgvnndadzy-wvnfzo-yzkvmohzio-135[znovd] +jchipqat-tvv-jhtg-ithixcv-271[ymstr] +xtwtelcj-rclop-nlyoj-dstaatyr-431[ntags] +iutyaskx-mxgjk-jek-xkykgxin-618[kxgij] +pxtihgbsxw-ktwbhtvmbox-cxeeruxtg-tgterlbl-943[txbeg] +xfbqpojafe-dboez-dpbujoh-mbcpsbupsz-441[bpode] +qfkkj-mfyyj-opalcexpye-613[yefjk] +ejpanjwpekjwh-lhwopey-cnwoo-nawymqeoepekj-836[ewjop] +qjopwxha-xqjju-odellejc-732[jeloq] +bnknqetk-atmmx-lzmzfdldms-261[mdkln] +xgsvgmotm-pkrrehkgt-sgtgmksktz-332[gktms] +ryexqpqhteki-vbemuh-huqsgkyiyjyed-244[tjsqx] +xjinphzm-bmvyz-ytz-yzkvmohzio-239[oznyv] +eqttqukxg-rncuvke-itcuu-cpcnauku-180[jztvf] +xgjougizobk-xghhoz-ygrky-696[gohkx] +mtzslklcozfd-nsznzwlep-opgpwzaxpye-769[zplen] +kgjgrypw-epybc-pyzzgr-jmegqrgaq-626[gprye] +jlidywncfy-wbiwifuny-mniluay-396[iynwf] +myvybpev-mkxni-mykdsxq-psxkxmsxq-536[rxnml] +ibghopzs-qobrm-rsdzcmasbh-246[bshmo] +jyfvnlupj-wshzapj-nyhzz-klwsvftlua-201[jlzaf] +dzczkrip-xiruv-avccpsvre-cfxzjkztj-113[czrvi] +dmbttjgjfe-dboez-dpbujoh-nbslfujoh-493[bjdoe] +kfg-jvtivk-gifavtkzcv-srjbvk-jvimztvj-347[aymns] +ktwbhtvmbox-vetllbybxw-ietlmbv-zktll-wxlbzg-241[bltvw] +tmrszakd-cxd-qdrdzqbg-417[dqrza] +nzydfxpc-rclop-nsznzwlep-nfdezxpc-dpcgtnp-899[ynbfk] +fruurvlyh-mhoobehdq-rshudwlrqv-491[hrudl] +odkasqzuo-pkq-emxqe-144[qekoa] +hwbba-dcumgv-vtckpkpi-180[bckpv] +lsyrkjkbnyec-cmkfoxqob-rexd-wkbuodsxq-718[yfzcq] +xgvnndadzy-kgvnodx-bmvnn-xjiovdihzio-395[ndvio] +willimcpy-vumeyn-omyl-nymncha-890[nmyux] +mbggf-zjhclunly-obua-yljlpcpun-487[lubcg] +ryexqpqhteki-sqdto-tuiywd-608[xhjzp] +egdytrixat-gpqqxi-prfjxhxixdc-193[xidgp] +nbhofujd-dszphfojd-cbtlfu-sftfbsdi-909[fdbsh] +rflsjynh-gfxpjy-htsyfnsrjsy-489[istpm] +vkrhzxgbv-vetllbybxw-ietlmbv-zktll-phkdlahi-189[lbvhk] +lujbbrornm-ouxfna-uxprbcrlb-459[ozvca] +pbafhzre-tenqr-fpniratre-uhag-erprvivat-117[raept] +xgvnndadzy-xjmmjndqz-ytz-nvgzn-577[nzdgj] +houngfgxjuay-pkrrehkgt-jkyomt-618[dltyf] +bjfutsneji-hmthtqfyj-jslnsjjwnsl-411[jsntf] +sgmtkzoi-lruckx-rghuxgzuxe-774[guxkr] +nuatmlmdpage-nmewqf-abqdmfuaze-326[zbewa] +dsxxw-zsllw-qyjcq-912[lqswx] +cvabijtm-kivlg-kwibqvo-aitma-226[mvuhw] +yuxufmdk-sdmpq-qss-bgdotmeuzs-768[sdmuq] +qspkfdujmf-fhh-usbjojoh-597[elvgu] +htqtwkzq-gfxpjy-hzxytrjw-xjwanhj-359[jpytc] +gbc-frperg-pnaql-pbngvat-grpuabybtl-169[bgpar] +yhkpvhjapcl-qlssfilhu-klclsvwtlua-123[lhsac] +nglmtuex-vtgwr-vhtmbgz-ftkdxmbgz-813[emnca] +atyzghrk-lruckx-ygrky-592[kryga] +dkqjcbctfqwu-tcddkv-tgegkxkpi-362[kcdtg] +sawlkjevaz-bhksan-lqnydwoejc-914[aejkl] +kdijqrbu-uww-ijehqwu-712[uwijq] +rwcnawjcrxwju-snuuhknjw-mnbrpw-121[wnjru] +vrurcjah-pajmn-mhn-bcxajpn-225[ajnch] +clotzlnetgp-mldvpe-cpdplcns-353[lpcde] +wihmogyl-aluxy-dyffsvyuh-womnigyl-mylpcwy-682[khzto] +qcbgiasf-ufors-dzoghwq-ufogg-kcfygvcd-428[mselb] +kwtwznct-ktiaaqnqml-akidmvomz-pcvb-bmkpvwtwog-824[kmtwa] +crwwv-oxyyfq-pqloxdb-289[oqwxy] +iutyaskx-mxgjk-ckgvutofkj-lruckx-jkvgxzsktz-852[kxgjt] +irgyyolokj-yigbktmkx-natz-giwaoyozout-930[oygik] +yhtwhnpun-buzahisl-jhukf-jvhapun-mpuhujpun-565[uhnpj] +fbebmtkr-zktwx-ktuubm-ybgtgvbgz-761[ifsyt] +lejkrscv-avccpsvre-dribvkzex-165[vcerk] +avw-zljyla-yhiipa-jvuahputlua-617[aluhi] +xjmmjndqz-wpiit-xjiovdihzio-889[ijdmo] +pbybeshy-fpniratre-uhag-jbexfubc-819[snuje] +ktwbhtvmbox-vtgwr-phkdlahi-683[htbkv] +avw-zljyla-wshzapj-nyhzz-ylzlhyjo-409[zlyah] +tcrjjzwzvu-treup-tfrkzex-drerxvdvek-633[retvz] +zlkprjbo-doxab-ciltbo-qoxfkfkd-627[nmwxj] +vkrhzxgbv-lvtoxgzxk-angm-labiibgz-995[gbvxz] +gpbepvxcv-hrpktcvtg-wjci-sthxvc-609[cvptg] +hwbba-gii-fgrctvogpv-804[gbiva] +nwlddtqtpo-nsznzwlep-dstaatyr-275[tdnal] +ovbunmneqbhf-fpniratre-uhag-hfre-grfgvat-637[fraeg] +pkl-oaynap-fahhuxawj-nayaerejc-888[mnchz] +etaqigpke-hnqygt-qrgtcvkqpu-752[antmz] +lugjuacha-wuhxs-ijyluncihm-214[hfsun] +zloolpfsb-zxkav-abpfdk-341[abfkl] +bknsykmdsfo-mkxni-mykdsxq-bokmaescsdsyx-822[skmdx] +xjgjmapg-zbb-hvivbzhzio-499[bzghi] +amjmpdsj-ajyqqgdgcb-qaytclecp-fslr-qrmpyec-652[smgnt] +qczcftiz-dzoghwq-ufogg-rsgwub-714[gzcfo] +gokzyxsjon-wsvsdkbi-qbkno-nio-myxdksxwoxd-900[oksxd] +ktfitzbgz-vtgwr-vhtmbgz-lxkobvxl-969[tbgvz] +hqtyeqsjylu-uww-efuhqjyedi-270[dytgj] +ovbunmneqbhf-pnaql-pbngvat-freivprf-845[nbfpv] +kzgwomvqk-akidmvomz-pcvb-aitma-902[makvi] +sedikcuh-whqtu-zubboruqd-bqrehqjeho-790[hqube] +kwvacumz-ozilm-jcvvg-lmaqov-382[vmacl] +rgndvtcxr-qjccn-prfjxhxixdc-661[cxrdj] +tbxmlkfwba-oxyyfq-tlohpelm-523[uhvaf] +iuxxuyobk-inuiurgzk-vaxingyotm-514[iuxgk] +odkasqzuo-omzpk-oamfuzs-ymzmsqyqzf-170[zmoqs] +ktwbhtvmbox-unggr-lxkobvxl-527[bxgkl] +ynssr-vtgwr-mxvaghehzr-423[rghsv] +sgmtkzoi-kmm-lotgtiotm-670[mtogi] +ugdgjxmd-vqw-kwjnauwk-944[wdgjk] +rdggdhxkt-jchipqat-snt-gthtpgrw-713[tghdp] +zvyvgnel-tenqr-wryylorna-npdhvfvgvba-663[vnrya] +jsvagsulanw-usfvq-ugslafy-esjcwlafy-762[fygle] +zsxyfgqj-wfggny-hzxytrjw-xjwanhj-931[jgwxy] +wkqxodsm-tovvilokx-dbksxsxq-822[cpsgv] +mbiyqoxsm-tovvilokx-yzobkdsyxc-458[oxybi] +lzfmdshb-bzmcx-bnzshmf-vnqjrgno-261[ujfyc] +oknkvcta-itcfg-dcumgv-hkpcpekpi-258[ckpgi] +iuxxuyobk-inuiurgzk-sgtgmksktz-202[ztjvk] +hjgbwuladw-hdsklau-yjskk-ljsafafy-372[mvkts] +rdadguja-eaphixr-vgphh-tcvxcttgxcv-739[acght] +nsyjwsfyntsfq-idj-xmnuunsl-983[nsfju] +gifavtkzcv-wcfnvi-rthlzjzkzfe-971[zfvci] +qvbmzvibqwvit-jiasmb-zmamizkp-278[imbvz] +houngfgxjuay-ckgvutofkj-yigbktmkx-natz-ykxboiky-930[kgyot] +guahyncw-wuhxs-lyuwkocmcncih-500[chuwn] +gpbepvxcv-ytaanqtpc-bpgztixcv-479[pctva] +ksodcbwnsr-pogysh-gsfjwqsg-584[sgowb] +dmybmsuzs-pkq-mzmxkeue-612[meksu] +xmtjbzidx-xviyt-vxlpdndodji-577[dxijt] +dpmpsgvm-kfmmzcfbo-bobmztjt-701[mbfop] +oxjmxdfkd-pzxsbkdbo-erkq-xznrfpfqflk-627[jhlvw] +npmhcargjc-aylbw-amyrgle-pcacgtgle-652[acgle] +votubcmf-fhh-tfswjdft-701[fthbc] +gzefmnxq-dmnnuf-geqd-fqefuzs-482[fenqd] +dmpuamofuhq-oazegyqd-sdmpq-eomhqzsqd-tgzf-emxqe-378[mctsn] +gzefmnxq-dmnnuf-etubbuzs-508[nubef] +bwx-amkzmb-ntwemz-ivitgaqa-902[noeig] +rdchjbtg-vgpst-qphzti-pcpanhxh-635[hptcg] +qzchnzbshud-atmmx-sqzhmhmf-131[hmzqs] +tipfxvezt-treup-tfrkzex-cfxzjkztj-633[tzefx] +mvhkvbdib-wpiit-vivgtndn-603[ivbdn] +hqfxxnknji-ojqqdgjfs-htsyfnsrjsy-957[bdtai] +clxalrtyr-clmmte-dezclrp-275[lcrem] +fubrjhqlf-udpsdjlqj-udeelw-ghyhorsphqw-387[hdjlq] +qzoggwtwsr-dzoghwq-ufogg-hsqvbczcum-792[goqwz] +nvrgfezqvu-sleep-ivtvzmzex-113[evzfg] +fruurvlyh-iorzhu-orjlvwlfv-881[jcdtf] +myxcewob-qbkno-mkxni-mykdsxq-nozvyiwoxd-900[oxkmn] +wyvqljapsl-jhukf-jvhapun-aljouvsvnf-955[jvalu] +tpspahyf-nyhkl-jhukf-zhslz-643[pytob] +kgjgrypw-epybc-rmn-qcapcr-qaytclecp-fslr-nspafyqgle-938[mxunk] +yknnkoera-zua-klanwpekjo-446[dphwe] +kzgwomvqk-xtiabqk-oziaa-bziqvqvo-278[qaiko] +iruzfrtkzmv-wcfnvi-rercpjzj-555[rzcfi] +diozmivodjivg-apuut-nxvqzibzm-cpio-yzkvmohzio-447[iozvm] +fydelmwp-ojp-nzyeltyxpye-405[nyzmg] +ktiaaqnqml-ziuxioqvo-kivlg-kwibqvo-zmikycqaqbqwv-564[qikva] +xst-wigvix-ikk-vieguymwmxmsr-724[imxgk] +jfifqxov-doxab-ciltbo-jxohbqfkd-965[obfxd] +rdggdhxkt-hrpktcvtg-wjci-rdcipxcbtci-531[ctdgi] +awzwhofm-ufors-qobrm-qcohwbu-oqeiwgwhwcb-896[mkvzu] +vagreangvbany-fpniratre-uhag-qrcnegzrag-689[xfuaz] +vjpwncrl-lqxlxujcn-jlzdrbrcrxw-693[lrcjx] +ibghopzs-dzoghwq-ufogg-rsdzcmasbh-948[ghosz] +ynssr-vhglnfxk-zktwx-ietlmbv-zktll-phkdlahi-917[lkhti] +tfcfiwlc-treup-tfrkzex-dribvkzex-685[efrtc] +frqvxphu-judgh-fkrfrodwh-hqjlqhhulqj-803[wjnmk] +vhkkhlbox-xzz-kxtvjnblbmbhg-631[bhkxl] +ltpedcxots-snt-stepgibtci-297[tscei] +nzwzcqfw-nlyoj-xlylrpxpye-275[lynpw] +ejpanjwpekjwh-nwilwcejc-zua-hkceopeyo-498[ypoze] +sno-rdbqds-azrjds-rghoohmf-859[dorsh] +qzoggwtwsr-suu-qcbhowbasbh-480[bswgh] +gvcskirmg-ikk-gywxsqiv-wivzmgi-698[rmvil] +ktwbhtvmbox-ftzgxmbv-vtgwr-ftkdxmbgz-163[tbgmv] +oxmeeuruqp-omzpk-oamfuzs-efadmsq-716[meoua] +xjinphzm-bmvyz-hvbizodx-xviyt-xjvodib-ozxcijgjbt-343[ixbjv] +jyfvnlupj-ibuuf-svnpzapjz-851[gmsnf] diff --git a/2016/aoc4/src/main.rs b/2016/aoc4/src/main.rs new file mode 100644 index 0000000..ea1edd8 --- /dev/null +++ b/2016/aoc4/src/main.rs @@ -0,0 +1,83 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::collections::BTreeMap; + +#[derive(Debug)] +struct Room { + encrypted_name: String, + sector_id: u32, + checksum: String +} + +impl Room { + fn new(line: String) -> Room { + let name_length = line.find(char::is_numeric).unwrap(); + let (name, sector_and_check) = line.split_at(name_length); + let (sector, check) = sector_and_check.split_at(sector_and_check.len()-7); + + Room { + encrypted_name: name.trim_matches('-').to_string(), + sector_id: sector.parse().unwrap(), + checksum: check.trim_matches(|c| c=='[' || c==']').to_string() + } + } + + fn is_valid(&self) -> bool { + let mut char_counts: BTreeMap<char, i32> = BTreeMap::new(); + let chars = self.encrypted_name.chars() + .filter(|&c| c != '-'); + for c in chars { + *char_counts.entry(c).or_insert(0) += 1; + } + + let mut vec_char_counts = char_counts.iter().collect::<Vec<_>>(); + vec_char_counts.sort_by_key(|&(_, &value)| -value); + let expected_checksum = vec_char_counts + .iter() + .take(5) + .map(|&(&key, _)| key) + .collect::<String>(); + + expected_checksum == self.checksum + } + + fn decrypt_name(&self) -> String { + self.encrypted_name.chars().map(|c| { + if c == '-' { + ' ' + } else { + let current_digit = c as u8 - 'a' as u8; + let new_digit = ((current_digit as u32 + self.sector_id) % 26) as u8; + (new_digit + 'a' as u8) as char + } + }).collect() + } +} + +fn main() { + let rooms = read_file(); + let valid_rooms = rooms.iter() + .filter(|r| r.is_valid()) + .collect::<Vec<_>>(); + let sector_sum: u32 = valid_rooms.iter() + .map(|r| r.sector_id) + .sum(); + + println!("Sector sum {}", sector_sum); + + let north_poles = rooms.iter() + .filter(|r| r.decrypt_name().contains("north")) + .inspect(|r| println!("{} {}", r.decrypt_name(), r.sector_id)) + .collect::<Vec<_>>(); + println!("{:?}", north_poles); +} + +fn read_file() -> Vec<Room> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .map(Room::new) + .collect() +} diff --git a/2016/aoc5/Cargo.lock b/2016/aoc5/Cargo.lock new file mode 100644 index 0000000..6d0e69c --- /dev/null +++ b/2016/aoc5/Cargo.lock @@ -0,0 +1,12 @@ +[root] +name = "aoc5" +version = "0.1.0" +dependencies = [ + "md5 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "md5" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + diff --git a/2016/aoc5/Cargo.toml b/2016/aoc5/Cargo.toml new file mode 100644 index 0000000..cc09c3c --- /dev/null +++ b/2016/aoc5/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc5" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] +md5 = "^0.2"
\ No newline at end of file diff --git a/2016/aoc5/src/main.rs b/2016/aoc5/src/main.rs new file mode 100644 index 0000000..31bef5e --- /dev/null +++ b/2016/aoc5/src/main.rs @@ -0,0 +1,49 @@ +extern crate md5; + +fn main() { + let room = "reyedfim"; + + let mut i = 0; + let mut found_bytes = 0; + + let mut code: [Option<u8>; 8] = [None;8]; + + println!("Cracking the passwordz"); + print_code(&code); + + while found_bytes < 8 { + let room_string = format!("{}{}", room, i); + let room_bytes = room_string.into_bytes(); + let hash = md5::compute(room_bytes.as_slice()); + if match_hash(hash) { + let position = hash[2]; + let value = hash[3] / 16; + if code[position as usize].is_none() { + code[position as usize] = Some(value); + print_code(&code); + found_bytes += 1; + } + } + + i+=1; + } + + println!("Password found!"); +} + +fn match_hash(hash: [u8; 16]) -> bool { + hash[0] == 0 && + hash[1] == 0 && + hash[2] < 8 +} + +fn print_code(code: &[Option<u8>; 8]) { + println!(""); + for &byte in code.iter() { + match byte { + None => {print!("-");}, + Some(x) => {print!("{:x}", x);} + } + } + println!(""); +} diff --git a/2016/aoc6/Cargo.lock b/2016/aoc6/Cargo.lock new file mode 100644 index 0000000..f61aebf --- /dev/null +++ b/2016/aoc6/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc6" +version = "0.1.0" + diff --git a/2016/aoc6/Cargo.toml b/2016/aoc6/Cargo.toml new file mode 100644 index 0000000..22fc24a --- /dev/null +++ b/2016/aoc6/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc6" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] diff --git a/2016/aoc6/input.txt b/2016/aoc6/input.txt new file mode 100644 index 0000000..6caf81a --- /dev/null +++ b/2016/aoc6/input.txt @@ -0,0 +1,624 @@ +iyeajeby +qengiuoe +wxzardgo +jciguemn +zcampkps +kiqjpjqb +knwhoxlw +iaxxpjhe +kgrgaixi +lciydajs +svugtdwe +nwailbqu +cbkwwxvt +lqjyrawh +jylmtlzk +firecpyg +xegtcvvx +jllqqzeq +hggmnxlc +pdmfuqlx +hnbksbkl +pmjmiqti +gpmuvcsh +tspnxvnm +hghwizhe +sgokeybb +jtphckcv +usypmmzq +irlfaboj +prgiqvil +nfqegpjd +aivwwkix +xeljyzjv +mrdpqlzc +metcvpvd +ifizfkgl +uznvqiqw +uzylkeui +obmqhlan +vaoivkeq +wvlbwfaf +ntbgtbpz +lbuieiea +rljyfeop +rynkdwiq +hyqpjwzl +supxlsql +bntmjboc +qntfhain +xxtjctjz +qppakrbj +ptnnwmlg +pucuqrpi +ensluhxm +wtnabsej +hvnozkvx +dhxgysdk +qdizyrkg +vtuyxjky +lxwcyfxr +xoyphxmb +ltylucct +oaawvjfa +qbjmdcap +raqhkkbe +uqtxpvhj +pddzoucq +axfbgpvj +eohksqcm +jtmmkovb +paronxgv +gtxnqybz +qfsobvxz +ywrnogwz +ytdvpmzv +daeappko +zgjdatzf +psrfofvi +uobknckb +rvndwdgs +oedojfqv +shxmutcm +nigdxgrz +ngwvdair +wexxkvwn +oqmrjlcr +vcbmxvyb +ekdfdzch +klphcryl +bbtobqqo +wupuvqio +hwiufjpk +rckjewzp +vhgzdtil +qrvqytfe +opolrgwi +nektqhbg +ynubobwy +cqnysvzf +muqrlihy +ncbeeuur +hxsvpoug +kacsofnk +vztkoicu +smxiuykn +sgnmdqmw +sfsxxnds +iwquujxr +fwssfvfw +qyoswzsm +kvfvizgu +fmewmudq +mvtekgjn +kkffshrt +jzbkyxzf +beszoylz +lnhmbwae +tijfkcrt +culovluh +jrgtbxma +yqtlarnm +rdlxlplt +vzgphnpi +igpbfrrd +yqdgvyke +juhzerjo +kfwlvhag +ysznuuey +turxgyik +iqgcxxpa +tjrmtkjk +ywfcwvqp +ozmguljj +maxegnqi +vavydxwd +dhlckjra +omvdoafe +rvzejiol +rsnpjser +nejognkt +agkavzki +uzskztny +knvzbkff +iiuhrzsp +amxryjhv +yqxdgdaj +tpvellfc +dqutbibf +fbbrpcbg +shxlcvmc +ociooedg +nedlhmfo +ohdxifnx +mqhbpyed +tauomzjy +bkooiesi +xtukgdec +mygazipf +wkvecylo +tlejwzcj +rcpygkbi +uihidqdr +lxwthely +ywyoahob +zwjrveex +eqahofbx +mvipdaql +zccdioga +gttnacns +urajevul +uhsdjkhm +cjbpznua +tyfvodhw +feadmwyl +cjmccfcy +uawxsuyy +xzzidfrj +slhgapvb +tbdwntwx +bvspfozq +pkkwgooy +frnhifax +sxfkbojn +ffnzlqda +pbtbewtm +mivpqcyc +gztezasy +jlfdrmou +xjmazeef +lgcaevtl +piidoxbi +iczlosyt +egszahwu +cmbybzvi +orczduhd +hzorfhdv +yptggtmu +yfsmednv +ajawzgpp +niicgavl +mmdpsogr +wkufsuct +yboinvnc +lmwbrqmb +rrsfhics +xguvmcmi +yldifule +laycxgaf +jtnizmxf +qrbpqznc +cpplgbsm +xzkwttnj +axjxusuh +nthcjcqn +zjkdjlcz +uulqjmfq +djqlzrcb +ftxhzuoq +bfrzrdtn +fvovpzts +tloyyqoa +spupkgwb +ishhbwok +spyfzbsj +bvvnfnxx +iuectyxc +xbbjridq +drzfvsrw +gokuvwjf +hhkmgqxf +epijynaj +bfxdnibq +pjoovmhf +izbgldjr +rvxrhjxa +blhhorwy +xwmobyph +pfoimsbl +gprwonid +hfwmazfu +dudhehvt +nbekhgbg +qbwklpvg +yemjyobm +vmocaztb +xkwklord +tjooucsf +qowresxh +cxeapuvv +zmlzqivx +fryanflf +kxcrserx +jtoqtooo +axrtkjyo +fwwzdsbx +pyphszfp +ekdcnrgx +zyrhxcvc +blcqplmo +wnsiistm +slavtfip +sixawglm +sxpjnpsa +sfwmudzt +kcpetkcw +iqfufsws +wdfbgvol +muvtnxzg +otgycshn +gddbabma +swksjxjx +hnfcsnir +tmcnycfi +lpvuwehn +htyogany +rggezmhh +guzhwmss +zoqiscdy +dqbtvyrb +wfnymsai +klfpdgvn +ihqjdope +dudllmty +gpbkmwtd +tjmtvjpk +sjnkfrsk +bgruelqs +repdjhre +flxjlvah +lkpnbajp +rmkqdjpx +enimddcn +nzowveei +cohzzkee +sxfvyqwi +vlztaixp +xgkrlsyh +eaurshic +kifvzhsv +dxfsexup +fyqqbzgm +bnxsgjxg +ndbbkscp +xyjhzqel +eyanetmo +quakpmsr +kqfeprrb +hhsvwyse +jjvjivng +zkeiinwn +adibxest +zjzrkmxr +kceozeud +iknfusda +gqmuepbo +ccwltods +smaurfwy +yojrrudk +akygvwyf +dermnpvn +bvfvjskb +pcohqoyu +odyqfyhy +nqgepwqo +zijtbqgd +czfgqsmr +fkgeoorf +udvncboo +dwxgrgck +vqhthccp +gvkfkpwr +pquhsiha +hlpqfrpz +aeirprab +bouoglph +zwyimnhu +zpculwdn +mokpnpeq +hfgfjamc +osgncdnf +ejfjqwql +tovcchzu +wwmburym +mdonvwnw +wxjysrlt +cjrqrnqv +okzeilge +egunoujn +dlbaqemd +qrdyabya +vaaxguwe +hjqwytxz +xtvmgdaq +noijjgft +xgysigmw +urbsmwdk +bjnerghw +aspvghjp +hgciumho +ivjihqed +wtvkobuw +zhtyhllg +jlxjwjui +xkmxhoek +rydzmqip +ydonbzvk +byeoptyo +gpnnqxrb +hyzplaie +tbedyaph +zgqhqnmg +tdepvaex +wytwmgkr +qsmuyzys +fijlauqj +wyqylgam +lbwxnluj +nmecxavu +ofktnhfb +lhjgzkjr +ucctfetk +mggvgkmu +yzmnbbhe +kcnqhuam +rxiwfblx +vfufzjou +cpynrovg +qdwshnpi +pcrxywto +ozhzwpwa +zroxmvfr +fpipfjvu +leyiafxs +oacgxszs +voebeyvn +ixkqabkl +lqabfhtd +oewbtlgc +vdlaniii +tabtkolp +xufkdmem +niofeqxn +innfbedm +zahlnzhd +whmqyffv +fhjascxd +wnsktsdi +ucdgnvkf +fmpxuyml +pnvuhmup +wohfuyto +wthjmlzx +tkcdmttv +ubyrests +mkrplnes +mglepvyl +shqafjly +gbpaitlu +cesjmugk +qnqmvnks +kbvvlltq +luvgtdmv +rrrhawdz +dthrxkth +bglwrdgk +apqxickb +vnzwzjba +reiafjdt +qfcunhks +dwmhshtd +rwtwnxxu +gjgdhwtr +dhrwidzp +manohccv +jvccmlat +txhfklix +nczocnew +gxlpkgqr +vsrtxogh +ixhtcwaz +qfapctcq +glvtpiug +jnuecngg +bktbndyg +ceboexzj +lsjakjjw +oemmiqvu +zqscwlay +hqedlpzb +hsrztfxj +fjpwidgw +abrsenrv +qseoiuyj +jtjtqxgr +esczykzc +mazmziim +szzwzfuq +zbcfhaiz +uqsnjwus +vwzqohsu +yylbjhnl +chqdcblk +vporypnv +vfhdofdx +eztmaogh +wlzjsgbw +dqutunrc +gwtpdvpm +ywxghnkc +alacomlw +jfuygdcy +zkoeauig +abufqquo +ncilvdgq +guinnabe +pdwybure +jocsrmfp +acwncthl +cdnaffnn +zyqbszzz +azhxybig +hibjuhsw +tvckjxuf +vklsqbos +efzukhlt +kjaqqofz +esxcyrxt +yocrwucn +iodafafm +oiakmvtb +dmbgtcpj +qnzrryot +ufcbptbz +veprgqre +umsltfes +bvvqhcmz +rucsowjt +kkbgkrxe +fksibbfh +tyckeiqo +gfqurpyl +raljmvsf +chednohc +gowzqrfm +ypktqcvb +fgiusizq +jvdsmnhu +esfuxpra +uraiwlfz +vpkulaao +erkvbjrj +mrhjjist +xmpayrdq +biqwpkrm +lrlhkljw +rbaglxsu +kryywepc +mrydxkuv +obksnkir +jogxscwa +pxkzdamo +wcywigdv +acqicmyz +xiqhgpik +izubxapc +yrzfptzd +qmyltgkw +dwedcarp +oouewlrv +izelyufn +ehdstcah +nylqvqtd +ywxjkxnx +sstceepq +bjihzptq +nvawrewu +plftxhsh +eyuzdika +gjdyaoek +euqeablj +zhgjzdki +lyygbhly +joscwikc +cbqczxbu +xnhptyqu +txvltmyh +kwtaueat +btpbbibj +ueytsouw +kfmmcyqk +fwflotzv +ouwyewua +hslsjpur +jdgrtwme +lgelctfc +nlxyvkgh +xpeslfje +adcifgwz +gquvwdeb +rkmzqard +lvzehstp +cijqaygt +dwfzsddm +vmwqrrsy +aotsaqoj +irjumknp +altzbfjo +hubsrgdb +nudnkfof +bvhvcltf +xupumtmg +kjfxunyd +pjwhyeuz +zmnxkepw +mpzvjjni +cskxvphp +dykbldmb +ymmsshaj +gdsvrycq +ehdvpiqy +engermzp +tmexxgkw +acjslpiv +qprqqyqf +fbictbjs +llaeirez +uxoofxnc +ukgpjtlz +tpxwxzpu +cuzgcjgd +jnzxfqww +wemyhsbv +aslnwaqg +aibaikgt +hglojgqv +larqrtka +ozlrwpna +pzxsdrjh +vsnuuusj +jswkkvun +darbbbhk +woeihkoh +xdsunolx +ymvbtrxg +mtodxqik +fxkcdfwq +koivubnr +gitldbqs +bsjymzpd +whaluyys +rvaftjox +qhinxcid +snpkwuko +mdgvstoq +zzytixxc +qsgrlmdn +ddjqxeaw +uilqxznh +chazpmyk +iivrixot +casfxwwa +mvjdazsr +dnmivmal +eayyeyfh diff --git a/2016/aoc6/src/main.rs b/2016/aoc6/src/main.rs new file mode 100644 index 0000000..45ae3b1 --- /dev/null +++ b/2016/aoc6/src/main.rs @@ -0,0 +1,27 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::collections::HashMap; + +fn main() { + let lines = read_file(); + let answer_width = lines[0].len(); + for i in 0..answer_width { + let line = lines.iter().map(|line| line.chars().nth(i).unwrap()).collect::<Vec<_>>(); + + let mut char_counts = HashMap::new(); + for character in line { + *char_counts.entry(character).or_insert(0) += 1; + } + let (character, _) = char_counts.iter().min_by_key(|&(_, &count)| count).unwrap(); + println!("{}", character); + } +} + +fn read_file() -> Vec<String> { + let file = BufReader::new(File::open("test_input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} diff --git a/2016/aoc6/test_input.txt b/2016/aoc6/test_input.txt new file mode 100644 index 0000000..32ba518 --- /dev/null +++ b/2016/aoc6/test_input.txt @@ -0,0 +1,16 @@ +eedadn +drvtee +eandsr +raavrd +atevrs +tsrnev +sdttsa +rasrtv +nssdts +ntnada +svetve +tesnvt +vntsnd +vrdear +dvrsen +enarar diff --git a/2016/aoc7/Cargo.lock b/2016/aoc7/Cargo.lock new file mode 100644 index 0000000..58e04ee --- /dev/null +++ b/2016/aoc7/Cargo.lock @@ -0,0 +1,4 @@ +[root] +name = "aoc7" +version = "0.1.0" + diff --git a/2016/aoc7/Cargo.toml b/2016/aoc7/Cargo.toml new file mode 100644 index 0000000..1b18be9 --- /dev/null +++ b/2016/aoc7/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "aoc7" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@gmail.com>"] + +[dependencies] diff --git a/2016/aoc7/input.txt b/2016/aoc7/input.txt new file mode 100644 index 0000000..d50f36c --- /dev/null +++ b/2016/aoc7/input.txt @@ -0,0 +1,2000 @@ +wysextplwqpvipxdv[srzvtwbfzqtspxnethm]syqbzgtboxxzpwr[kljvjjkjyojzrstfgrw]obdhcczonzvbfby[svotajtpttohxsh]cooktbyumlpxostt +emzopymywhhxulxuctj[dwwvkzhoigmbmnf]nxgbgfwqvrypqxppyq[qozsihnhpztcrpbdc]rnhnakmrdcowatw[rhvchmzmyfxlolwe]uysecbspabtauvmixa +bqooxxweoytjghrqn[hkwwukixothfyglw]kpasnmikmbzcbfi[vlnyszifsaaicagxtqf]ucdyxasusefuuxlx +rxpusykufgqujfe[rypwoorxdemxffui]cvvcufcqmxoxcphp[witynplrfvquduiot]vcysdcsowcxhphp[gctucefriclxaonpwe]jdprpdvpeumrhokrcjt +iungssgfnnjlgdferc[xfffplonmzjmxkinhl]dehxdielvncdawomqk[teizynepguvtgofr]fjazkxesmlwryphifh[ppjfvfefqhmuqtdp]luopramrehtriilwlou +mqxqhcpalwycdxw[fkwhjscfmgywhtvdb]khadwvhkxygtxqx +ihekzgbwpjxgbau[eqpvqxncntbtsqn]mbtbcujdkbrhxdu +izikobnovmjzngo[ombcpcvshnedtndu]lnnmdkuapgnxpgyxcmg[bgnxdzmiolfvvaizu]tcvnrfufuvhgmlxcm +yhrowrreplrrsbupeor[nchtznfzbzwnogh]rynudxihckzattbz[dshxeaqusdlhydtm]rvqzuffgqtysfzxp +unfjgussbjxzlhopoqg[ppdnqkiuooukdmbqlo]flfiieiitmettblfln +hgtbgxarmgbxqrhghxb[hflfvoetxfisqsj]syhkugztqkywetyhad[fmptjuaqittvvyooda]cjkxbnylglnlfleelzu +npxhwtitqnddkwg[gmzggwnvygsroeaadtc]gudnfyefqbbgyspdxjw[ilthbdqubqnveowv]xitfldhfjyjsomygjg[knmrlvoiqyytigytlum]dlfpsnyzmhkmeevfwsf +wjzwftiuixvwyzmgoe[jbfghrqhyywwhlu]wcijbojvlgjjdtowzpv[lgfvxfdusgxddsppbxb]pagicuiuerzeydww[wlpjklgzyilrifonz]gdicckmxibtwwoesaxf +eilrieezaciolhnhrc[hcisnfomqiiaculxfv]bfyxxhgrakqogthzft +xijomgpzpilomlpy[sfgwaovcybyhoogrxsv]ufncwrahejwlhyvz +nojlhdpfkjbhahgqo[lqrkjabuijutlcbq]caszlkvkofxjyqzsttc[isqicyomykudneq]izuzehgtmwnnvfrlrja +qwfvuzrogqzvnhyqdv[qhnjhafmrtghosbmskc]msmwswtgzlpmtmzne[kovzhefjqtqadhj]myqisirynftmtzvxvvz +frfongnaecavmrhj[uuptwvcqozxnglsd]kwpovfwuhmqjkog[phtrgysxaltvbohmv]abhuahonmbhsmfglltm +wdqcwcbtpexduecepe[zwrcpctlwglgfpappb]zdadimzdcpxhxwde[yquulvwgyyzwcfsvkdt]thgziwclyxxfyjpbpc[ypkjfrfkxlkavboh]hxylcecamgezuoljh +yqxkafpkuuxfafe[zehlwtvpprtiqbl]qswqigaeaneovxm[bqoieihtxarwyrqegb]yzdopgmqklqaizxjm[jhrsftklywefyevvha]xuvydwcntczjvuduj +judhawjtmpsxfocai[qghshlgvbitxevt]xehceioknrewezihnb[jvrzemakemtgmqiqmvj]wewpjflvqmottqx +uhokpvanmvdobqitn[eosarcmqnukoczgz]rmoowtgbbyimkptlxdu[rqhewmnpypqpyosgehz]nqdwglwscsizxey +sbnojmynueuyyutr[oonxqrbbjxwvwafad]krqlneuehyrghmkrq[khsckkfwowubtglegu]xweufrmlufamzbcedk +nmgjmbwyrvcbthw[ogtvotifzugvvrsfe]jucqbvfqclkuxzumoed +uaokpcytcrfpitfursj[lweyfahryjfprulw]dsdutsxdtugaced +ahshwqihivxlgsj[ldnmuwbrmoxtypqluyz]intafryfavcnotgxu[xjggdyvoarfajgp]zhfgnytzjhuyheqdy[yeynlfshsyrhjxrzguu]onvyhjfwooikmmqzwgc +djkgxfnfojgjpxec[ngwqajfbywoxlbm]oqdqigzeqadgqjt[tvojayieruftbjokeeq]gxwtruomnhorqqrpzt[bxppvnbiwhkhdka]rhpffqekyrcgwqmoi +aasbwiocfkaahrjwerr[dvlemehlhfzxnzymqn]okxibfrlswfvmreuf +rwcjoknjvyufkrp[hsqrwhdlwrtlthp]ijezyezjdrhzgltliq +azawpddzkqbosmltyxt[zoaaqnowmmwkmfkq]lgusvzwnimvgagupkt[scbjhqdftzssbvnvff]coiaslgcrwvyioxx[jouvwdiwvbsembzf]popmlnhjkoaeahcny +snucfdhspcbcsgjnmcc[qbicureolmbzhsy]cuabqhzbcbkezsumkq[cnggwqizurflommitua]ajtxxkqwqynnwroi +bsxzwpiauwlqelesq[uqfdggoirtlucvedpl]asacxftfqfswiapmj[nqohanbbzodfgkxihtt]lhshhkgjvjkumja +beewgulkwnmwxenstrz[vybrrqhcdpkhfnshccv]xdfvqzdslwosulzatc[kuknmynmjntvtyduwlh]trfvychdobyghnrxrfy +oxrwmqpvxntdkohmxb[wugyubwxumwnxlk]jidpzvtbomuymyf +pqzbwlnmvtytsfre[pmtmcnxkylmqaeb]alfdaofnqpohulpmfoj +qopdwichdepaubxxeu[ifjozmlqttahyugyt]mfmlwxifscsnuom[kiyjlqqxunsxfmht]icofrxpdpsktwiifyb[hetijegmockkyjhhc]aarioqngqmdpkti +klumchkwczxuuekdb[nlalmjunselydybqxdj]alagfcxocldfyzdnzd[abfnqrgrxbscagj]cohrecgrcaxljkz +djydzyiyydcneoubp[gorqzujuwkjsqhelfrp]pvtvbhztirfzmwcopfv[wfjumxbfvvgvzltlcf]ergdkkakrtfzcxmqcc[vwnkrxhayzbvbauvn]yjoqveipzibbmjq +qbdruhoywfjhaljfkoy[tznfejprrnzrrewdx]jziputgqfcqtbhvhlnw[ikahxtlheeunzrdq]tmoanjmpioumvpcu[tnmcvxkewovprxgzd]trnmnhdvtsisiujqjk +llojixxpxtvcwxaxp[rurmhymwuztchngs]weaefxdkjmofeydvfy[hmbracjdcwxfeva]jkiybiomykfexjlyg[pgrlrqgoxqqtoio]rdynpcndtqarmkagbw +kislmybuoblnpsc[dvsrnwlsvxxmzuu]jakczftcvijbavhjgb[osdyplcgliragfnpezx]kihkywmwgbkjtgxn[tdsgdadcvcaxfrbur]lzyjmrjqztybfdmm +orfngwdzlrucbkbqd[ibvlkwlnnzwkhnoad]brstantuaxwkibofh +vuumejklanuomqqdbva[mwjzrpargsphzkkhaaz]lkkewmbrvuczyyu[ebpoqgoifelelzzhd]biflvclnnimuojihdmn[llrnjdgzagktjrys]edtbmzmcbthpixhwwyz +ftaciyszakisxhzjhbo[khfshezpopvjaki]pdnnsqmgpgatvubllrr[ovjrouomglbpgvtya]ifwcvhascqptbvbums[cfpimraygtnuimiup]zeykmilehidtlstjux +nzgbxxiimmzsvhe[ixypsgextxvdckbjelq]jpklrvkhgzprfrsv +mpdlsziccgzmvorvm[vhxbfkwfwbxqbvxp]zbsxgodzhgmrhrprpu[pvawdsvqybgdncgxido]zuhyfbmmhzegohu +rdkteyoeleyhxdlfa[nrrzftpiqatsnnnsd]qwelhxwbpuwjmrjxmgq +vpdhtcgjpkrqmrt[gozqldncggxpvou]zedtarenbxskusqk[mwpmzpwraryuqqmdhrd]eoculislafmbqzy[okpddsvrtyrkbjtihhb]dvuadhnaxkfewhnksl +ivjfulhqfbdqiprzbbe[ezhkhqxcviwxbwmlnbb]ttekmmdrphuteslzwcj[iocuduwexawydww]qmrfnnedqtqezclpuq +tksplumjkpsjjorux[dpffmbayilzuszc]rsiowigabmredkfv[aurieaasmsrxufpo]lbwvhcrjfgomkff +uwuobjzxkgeugrivc[biktdwykzondbwiko]nnrtnqzhdhdwzkau +cjjawanjvbxvmvdmtu[kubvvkuoynaawzowphv]ssijoohfemyhrde +qlykdpnioshrexuw[tjwoswemjxylnqupgv]ymovhecbliuuzhjwu[ghxibaaourtzzogrynv]hmlndovkousrtbomlnz[nzkdpmqrqovnvskh]vdvntntzrqrhvcaxdov +tdhrefyrccgkdquxz[jqeprpsvvkmmldlwyq]lwhnimtgegsziejeh[gyefzqbmfnhzgtq]fmbcvbjtsriuicde[sbkkbqwzlluccpa]nwxmuolcbhtwcllmz +cakfzlwlaxgrzjpgck[toihlzbehdzesbt]azrsizelgzczqxwejb[ypecquckfavmixeyjgr]njiyddhuwlwogbnpt +jadaohixgxzjcopk[wopcnehanaabtklxnez]jgvumwvmixxxwaolxb[lrhmslkbmylyvlkx]tatmsbtlbcutcydlrf +gelrpwfiyiszejt[skpclwjhzgwvfbbd]ibwzelwwhvudmvoe[gpdveubkzkkxvtjn]khmkjslnkdlmefcx[fcwhuyiyvnjgfcva]qjcfuqxwmkyvvzuj +pbejigkioxtdjjzbl[uihultqxejdyegacm]fitsnuitopdzrxskz[shbzwyodcotpvoixoz]qrhuyetkmnnljfqt +yohbaryhrhuobkf[fmfsylvacrgvpnlqdb]iucbpagpbziaqae[lfcjrlbgxiytord]mhjlzecyrqcpbxsaq +vguohtnahunrvrfv[lwbganvrrgnasnkqjz]yuoncrmethwiglfiy +pljibizefgbrfauieem[yadmbpkftrtwjrize]fuzpxdpomsdxfocc[lvoahklovaxtucrpwhj]newpgoizivpqkpo[uloztzclhwixtcjhyon]qyzzqoyirejavchy +plinqqpqghkeuipqppp[rndecheohrsftgvku]ogsyvyxuetmdomwdmx[lumcfskwppjacuddm]uptsydogwyqaupdft +ewvtreckmjqvkvwgtz[leisttvtmrxnzjv]bfzzponjsjmepqjfs[knbonuuuhvtvteiov]vaejlijsnrpqppo[hvwwdxernqcxtxe]ssznbkhfmchmjjiahkk +rrofpphpfkeeqlxcev[ierkxtuduxxxbilmg]vmipzdomogxwiazla +uqmllifxqxwcskoj[lwrjkmxgwxwvkqrsajx]wpbkbsohlaeskzbv[boyvlwxpqpppcknocv]pgsvgtugmxmoexrvpkk +zupunwchccxqggie[sdcdhzciymhppyaaaib]izbizcvzvbcnofmqt[lvvxmcmydxruvudsar]gnspfiadqokusllygyw[wbcpnuppeugrqobtnu]mcvfhylypayxquurcv +ngscsmmvttxjxoaniu[wsfnnfnkwmjxjql]ijtqswaevexzcmgime +hkmykmrremccqxvfdps[izfaeewfadfhuwwd]yffzgiqtmayebphb +znzxjrdnxhfydrhr[kwafvmygvlylite]hmskvvpqyoblrygj +gkxzweijinwxyajq[jzljdfxlossksqa]octzjmrvxkumtpn[jypbqguwpybykguwn]ngriygtjydfznsf[cpwtojpifkhwtfknjsg]zahxvqxjtoutvvsphh +kmvndjahzayidho[fitbtgfncjvmbyrbvnf]fodwrbklqhxpsrqwh[ccwvgmocbtbqvwzu]uuidhylekzxzvmce[qbhkjfhnczasecv]ctsfirxwjfvrmayoeb +oktwbkikybfwojcweal[pnhqkawxmfxggabhgpa]kdjghdalrpgsdhqj[bxjcqdytenfjirvb]odnhihekqyskaoedyor[pqsixozypkjdnnntbng]negjtmkqfykrjgewt +hriyrcurqmacydyay[gfblxaovvngyesfa]tmftedgxujvmjze[knivpbneiuxdsowcxdt]zzncnfcouzoppog +edabqgdgbyjqkzjvzhr[rdejmmymhnvfrqvf]zknrxaqjohlncvwc[lcpuoqnkvwgjycfm]ohuebodqzydltckrsb +rxcyawcfxcjtdshxg[zvggbsrobekoxidyx]zdpvqowndwgdubbhst +qngajrgvzuafovkr[kracjvrryquumqerjev]mqddkdpqmfgexahczm[psmbzonkrrtlqdpgqci]obiynfssuwhprevmzm +dihkldbnjicztjfrvga[qtlevmacqkefjomc]opjaojctoraohocxaca[ojldoulpocpcpexnyx]qnouppkcuggjmod[oeiywfzmbjrhtxz]mvhoarchbrpndgwhxga +qyncschbsnqwgvfu[cscsfdcfbfqiwgwqi]pqzbontuospgycwzqn +lwvovybfksidtajq[vrtqmrxzouplnjogzk]gailtfjtszlxzwhbs[bgqzyhgudphwgufmg]levofhjnxjqhkcy[wbffnapyutukiavenm]olkwwlrbbobqudwvnur +yeqiptxuczuxzeatp[upzutosphyfhuho]jehejxjvfpqeifogn[odhltqvdcwwmshl]coezfdamogigspon[syppfhysfwfkisltwr]ihkaelrbcelykby +nmciqyaovpdwzldwt[zoaowvxkrpfuwnyepcb]yhqlmmrxxvguuajawb[rmilfmqzokaeabc]yhmswnsiyrepbudi +pifzooabiqmuicfqi[tvaqijdwxsbamxzg]zncutzbfmraagej +jpgkrbovswsjnbcj[bjybzimnzszdkqj]mvwmgdithrxecpselt[kghbhnctqnhhxxhdro]drttsuyvtuuygdtfaf[zohajxyfyjnqrigq]gadarjzfafqxsjxk +wivyofwdmipecdxuqu[trccnlbsvfbagstm]xajuejldffxzxfygsg +qsuxdmtfgpmlgkh[gisuuzaglpmbmydtt]qzyfvzryxepjmnr[mgsjrbmtxxzkadomelm]fqzjahepxspwkwpwd +pncauthrouncvjkrik[cyiovjnoesdgpeyjpvd]ajhonypsbifeghxi[wmudcxwbewumjbegnh]qetzbstgmzfruzxqln +qmkcddrhexvtylukq[nwrryzbnjnhvvgm]edxlyprwzzhgfmhz +iuonniejtavofqdqsln[ynjrsfsqrdsgydhpdvh]xvqtjledtcgkjkealws +fhbxdtddlvkjrmjyae[nwwjmjvxtabdwdezfdy]iwnsmstiulolahbxka[lqrxlwifzndbeid]jilfjomwrbjeniwybv +iptzrdexpfzabqcqkm[kvaxgarrbrobtmu]fqaedifschjkoepn[widcirixuswhcvcqywp]kpkxphryiwwnkmb +zbeoanntetxhvigve[fhwvhghpujcldib]ncrcyvevibooqesy[ougjirkquasabeqad]ydufeicmimcwgtbg +jaocnzcwgxknexaf[cqykwbyvxtcwnurw]udxjnumyhelfogapi +sduqgjoijyfrcnfencj[uxuiwklsiuqwjjrzcfn]epnvqcjspwopyffl[mwghrhtfclodjan]ghamugnhrrzjwmnc +woygyvtrlmjzaeteuj[vvvfohavzuuzyzgu]xjjcxhosambmkixiie[lqholbwbktlvdljmapw]diufpkdnjmjnmyc[ehjexwagbmezmpj]czhwzecixzxfykaiafj +nkijgkhyilzqvtgj[llydwhyhnhpcracxxd]zgtsspcwpyujndbxvp +nawnrsgxqpctinyek[ieguugfkwujnymij]rfmqypeekkdsttdw[rfuanabgfjgctueaaqo]vranbomhrynvjyywmh[zjncmschlfmkvhd]gfeoftxsawcgrzvrlx +jgazasxbickiiiz[duuskjowanfmieegl]cwgdwtrzpbfemqitbhb +lahkgoaoeofjlocsei[bwxyguvgmenwnpwlp]jigdlgdjptkimoyipa[zlcyjbqohvmlxgxp]bmovqedgchicusqzq +jhkxinkbwhpddvjzgod[fypyyhptvewejlbwdmx]teagznqhjydanxxi[wkppnjsyzhwshtpo]piaqxcwqolwklwzsfkg +sjedigezzdkqlxlcnr[xanehtpradlngiob]uonmjrieoycpthh[wnsqwfubwxkqhlflzv]smrebfwpnhskzlknva[pylbyttmhyggonlk]dwqkzjmatybpmgeb +ktfcuvnwueamlwvgwmq[czcgevditrtvddgfh]djmmelqewdnzrlqliz[fkpieaipgyxnkmjp]rdpkfzvqpfpvczv +tixjemagwmynkihelk[bnwfmkugsnivgdmvskc]nlasqrjqrlorszi[kbatouwdhejxchpdhd]etmbkytyrpnrpgqvel[xahfkfjmsqjycaq]mispsimhcckrhqvek +abudxncgozbrbnx[fllpjgocynbuyawgs]hiphrvpugpfnnppn[jhmlgjsufflkdgw]ldmdclrkorzjtbjqcrn +aljahmvdrraiavzv[tevjntkppnjqwovvuuh]ozmgagxzixxyzuy[zgefziawisowuyqra]nrqmsbwgqbfrxqvzu[zvzglmnjmjpmditiodb]odzbozesvocemfyis +zgdukwtswaosbrossf[ugdnezayjnbjuhpeh]knkvomcsgfptssifni[votpmaaohcyofgdz]skbvfugaaxutcmrmsc +ywiphurgqcvybiakgok[cscyksufsduegggw]rtvvvokrvwmwsvmk[oqvdxhoqfsfdwwm]sbzajtnbxzkyiwrj +nxrvrsbjsrysysvftoo[qowwnvlezexjyynm]nknzluizyzjpbzpevb[adkqviapkjbmknchtb]xsgtthuifmsqidyh +ejrplkjjbnjjouesaph[bdtybzkfyictcjuagr]ivtcttyunertnzgmpqv[roikukeznmtkqomqbk]lsxzsjrnsrdlxevj +qgcebktqtyjjwsav[naozjsnqufkkgkp]evimphuulhzflub[weanrdvlsmmypnh]rojhwlyxtszxsjiuai +zludmyuqlfpefvxcm[hejpyhwaqdndtwslan]ldtxkxxtegoqpntsnwg[olhtlkpvkdgkkxkisp]hursraavetjgloks +rosuljoqspxeovaqr[ocjdnpuzmwioylt]txylrlsndrifxiuxuyg[jnubpcjyfzhiwul]pdtcjcrkpmzlayzcty[gasynfnouxnvrplkym]naxwpqsxlsbvyuavty +oxbyqbqmpckkdpfjtr[ggnmfcjtyfspqrqkg]tzapjijawrabozckadp[varichgjrivmseddxv]admqmnzxzqcbapdquwd +jvhvqxvhqfxnjzmv[hwfwxvwhxorzqizc]rpjpwggqxqkaznkuqn +yrsucbqcfaukancrr[nabtowgijsnzryuvbiv]sfpffzxrftnrkjx[qfyfsbkyhetcedf]xdykjbymrqgheanxx[oxchcwrkbqvvfeyi]bztjlknshikocxztjm +iniqqqqprdeznwhr[arooglolfjgprfrbhbm]sczcmpftuhbaagwgedq[yutgzaqyxntjxoglmb]vswbhlspwfulowkif +bjcjrdzwhmssgoinrcj[jobrpyapaxkasve]hzacshssrxkdtrlqhr[yygotqrmvhiqjrja]ljwfwudymzkpczysknf +lrnqnaxtavkhwfebb[vwyqnqkveujnlzv]coizhrfmviizxgz[zklqinvtnwtajyjx]nxvpznyebozrosfgh +ccjjszgrbozbpopagns[abiuzirqfzactus]eemrbqrkhhppvan +xeaifcibybamzzzic[ymvsqllvremyfify]ftgmrkhzswdpbmukcdv[fbyevcnnwtnodgxy]slfjznnldyuvair +ajmeryqwfhniqenmi[bdzlgljpkkgsvpjcy]hqzxecqxmneterlqizz[pzrbbprbhujzpcxhjmh]lvrckyomhvidbiapikk[cyyapugbrwlubpmn]toodggarcneobyz +lehpdvqjccdfpzpo[ssunfejvfxwzlzqy]dvhwfrwiipveqpb +ijmthhifxtkoubt[jcgoxkntpnxkmdp]rzsfekfmamzddgm[szvzrwthulqzcorhnk]lmgsxsjjcagkaysalnj +qmfgzmmoylbruqxoh[uoyinkzbglorxud]frtffuhkchkrwbxfx[urlwigeirzobvhir]pqrqujuwxueommaj +tzjhaiqumjufkzcvphi[lhfohqxxuoqybomckm]qjhpjkjljzekboyc[gvzfehzyrfaarfklybg]fhurcpaukztwesz[lhvnhfgpmunjukye]mdzcvgeehmchcqe +cbyyjbdwzgdhveyw[ockkdpwglixvbom]ozezplbkvaulagw[vmzfmqxplwaqjrf]upytqbnzjrclzfvti[hztxfkqwcuypqyhsfa]sfwcfhrnccesyncbg +zaclpaavkxbpjxse[dmuzswkobdcfmrejhaj]eqdwvpiphijpwrvg +yvectfptgdasqxi[rmpaospaiqhwpjwdru]ollajqbxmfnqmqrdce[jqixwgznolbepskpm]pmyfsrnbdcqdrhplko[pzblovbmbnbwjzsxrk]hgwpjhgshxoozdu +gpnplfnpnmdlhehgazx[gkgcsjdcfnxytzp]wamlpixcrqvbtseb[ijaxccauotewzkgu]usgmgqmezufmgqjslbu +jgtqghpjnbjkmajymfw[isxpkhlvtuyqpscvm]czbrsyeqmjnksov +fjsepwfaxbbsdxlcz[efiljmecvcsybpj]fsvcvvewoepnvqz +nxzdtgomsakdhwefrn[cobjsrlxnkxvmhk]wkfnuypvsigzcnswufj[ttmtjfkbnhmmdebtr]ffumzvnvgitjccgz[offnegtizuxhpqmic]lbhljegbjmldqbzryis +gnnsvlcqoatssjuijb[eaodophfeufuvdodj]jplhbuvzqfgvrqbuy[ezxxqanlgnxdkohew]vsukbzhjshwmmqdkzdh +shfhzsmqdeibrwgyr[slyyksjeywcnuaocadr]kdwnsokrwkajgnwi[zsfujtkhknplyieg]kijuvumdqvjyjpbhl[qyrlzloooajylfrsfk]gwqdkfpitiitrednt +zhmwbilhpywvxrza[tgnybotdqixzolvn]ptxzyjbayyevmcqua[hcmgjpycosutmqbtkf]tboiprpyhwgjceu +ejuvrirctrlirihunm[nfjigabdmqnkfoauuyg]rfwcumqndfgotyx +cxkwlruaswigkrtxxch[fjsovwltjonhegm]zkfawxnzxlkaqawq[rgfftbipxlmelfnpf]qhhslyyiluvowxz[bgxutaxmhxyxxdob]hzthuaqpiyeomlgqqcn +qyzwezoszvwrwiilglw[opryawlpulfkpkmuave]taxeqyunnihulfp[vzxzosekvamoofva]bbtonpohbgdwfmt[xwzkmwrwruatcdqrj]enrapbeqoxrufgp +lowqonzaekybouni[uehkpbaxwfixuwlj]ionorsihznoszwzyq[cnatlobscugfpvpbw]lnsmgieepzvmhvbz[lsjebmtctttclkxqok]jwevnfmcrtmgjyniiuf +ltxumfyzdinfqrlf[jyiwmlpqkbnbgmu]bnicegkghtwivvyozea[qhgoiugrookfmdsln]fpokyqsoknuahpmutnm[smzqellevlxgdbbet]vsadiuyglyyuccgkrz +fvhanaukvcjdkhsydnz[pbjsoundyybhvaqglj]esjjvkdvjmgmlox +hcckhzdfmmvnsmuzjg[uuajvdzksgilxpjmnv]opbmjvfljnqzxkql[pgdelzddxqrfdoqnit]hqrrfnwrokufpybg +ovtjlczqesucgox[kiqphngcbakoelqncyi]jhrwrpwdjxbhnqp[kqvqdyokyuxulxidc]qumskxudarjyagegy +mxrxpfkynragapzrmdv[rdhsbrxgeywqbqh]rpoerdiwdisciarhl +ejbdfeqrdsrijztlibc[beglofnxveiorftulay]jslqibpnunabgqmi +uplsbqledimexhzwnkk[sfreaeitecravsu]exfxqlrumxaeasi +gicahlhkuxbhppe[cypyeqpzkrggfqrielv]pkuwwtbezndgtqhbz[ojnnxanlkamvmpqfj]eozgnkxtbtyecuhs +jtzwiyeueztuiwysyv[awibgssyyssrnuxrvuw]mmyvqfgaaraahzzen[rhscfvdrvagricw]qsqbnurcszgekmp +dxkeveuauhblqnq[oksqvawybtejxmdw]jrbwmyxdggncxitwcms[fvhnmupxnynxmprs]odbifiqqxskxaqn[xwdwagplcltcepjmtf]zsfevibkmzwtzoq +kflcnlkdujmtiug[rwydvjaazfgmfcn]qolbbuxzxhoizfqcwn[tprjkbylcrlvmbggae]pjwhgcmgxzhxbxdceme +donbjfkqtygixfpaa[lhfcyuzcmsgixjbr]njvgmbwgzimrtpdmvf[eonodblqfpgtmex]rkakjzfmuyeajvhs[lmgtvenasnqbyby]jdbxoeqnwoednoncq +laiyueskjnlltkwm[lzrgjwrjchpmnais]pqltpskalrwtmtagvm[luctnpiuqvulmtmw]awlqbuutunlbpusn[hdetxhrtzhkyfktmfn]qpmezabxzrtquidbjc +hritvdzjxipitctgoex[jtbjcyaysbefjme]ebbcyqglydfhqjfa[uwuwqhwanfydpxqk]enevryjyzduawrfc +axxprqpxpifqnwte[qwkkhbywyixngun]ufwcbmerbqiblbdmn[mguzyerbfhpqnybh]gscgmmckgfxvvwgxxm[gfjzckcxdowpwmhmg]hjblyfatzhxjyvlccb +qzzkrqfnnzvgfmrpjr[sktcrqxcctcduir]vmhsrsedrxpnrugm +mpxgzowtjabzwfcbeg[olgfqepvinejmstbrj]fnqxcfzuxojvkscyk[pxbyuusrrbjwrygkxm]wiojjquwvhineivnkys +vqcisychxuswbqlzdkj[jetvpggxtqqguuh]tyllnzfyfphoudijzj[xlnznxybxscqjktjn]oysyrlqascsqbclsb[rzhxpwwrjwakoldm]mrwzibdjlhsdsbew +rttdskfweqmkjolrgsd[gmdwcimmgetwiprem]wkyklvpjyhpzvmsh[zftyxsrvhnioomw]mrvoyvyyrlguwedz[xyrajtcatyabfqigup]srjmohoxwdybksfv +xzeexlrzdznmhbph[vobtfjuyowqppxw]mjxwhgwveozusndvi[jthhtubbkbmdiepfh]gtedeqwesiwzlrfny[tppxuofhnwwkbkysg]aygwlnvczaarhfgkw +zxirxtzlqkptwqd[vwdzostlmrbjclfj]aluxqfcdbjwbeerhr[nsjcafnammlxjafrzaa]kipaqywrtrpkbcdtnyi +vovbpdgnfhmeuadh[bcgvleartfaspvvjjz]ajyzrbirtimuifvs[lykguucpvkxuupcbims]qplsipqneiycefb +alqzdecagmvodcigcd[atmngaijkfehfbc]cprsiaclouvtbpaab[lfrxlrzuuooqdtfirbj]olcjwtrkndcvykp[lelvgglysdxycvk]uyakjndqzxtzmxs +syngsortxjqcdwcz[qkiseyvolwhibxdg]ucuxqdozkfgaxqwovk[eqeessuwvcayhpc]wkhzcbkxgakgxnmho +bhtxesznfkwqbodb[ptpuhbdsvbcjpmnsl]oohvgktjsjwxqgyxov +udnbbnkojrdevgujkg[cramyjeuckywtuw]qtldussgogyblkm[yuwacyafnikvgbibmwn]xvsgxmywenrmhdctxg +uzqtkzkmmeuttwyklv[rgnrxkbavqabukxvnp]whhgpmwocfmplba +kvbjvjxyqiqitikvm[vkzunkivwcpvxng]totvodotoqiqokouz[luzygityrnpuiih]eadddxqveeuujmvnek[nyxhwlkatungkgm]bdhobvhktlnfpjelr +inmnseeoqimzjwzhltk[ntwlsdvvybtdoqciu]jaurhomtnyudxxmslj[wqygsctddywlbxg]apsdlaftsghmhtj +pxieimaprtbntgvm[xuvwwsinhwjjapu]taeomoijctvzyeijfr[gitzztxejfefzvepf]udobxonjlqagrkpaehc[fkqjhfjicleroxp]hxpzoklhbgtngtagcz +lqmoxvnknpqzcgs[zktsmqcgzqjponj]wfhhzvqiqkxfwrrw[actbxtcdlogatfkprc]tvzphmtxfrptzlopv +czdnqiwqhighizbmivy[tptpsvsahslbsovazkk]ycppvkqvuggebgxibe[qutumfpnpzjkgqyfkok]ixywxvmvliftixfie[qipgniycxomhgmwje]vnhxbcnofkcnzep +igvdicnzsefxlgk[dzppkxdievabwyh]fvyywjzcyfcqahv +bjzwblslduiolbezybz[flvsgshhznvzmrxo]lottitaizuksqfihn[kgsgzawzjlqjsep]ihadewtrfpsudggga[oecgswhnbhslysd]flpdpxndzacxeskzmn +syxfjuakhrnntipfpb[xmntswflflstndkv]lityfpfignnxsyirja +unggjaqgvzrckyqx[llllagrmuioghea]qafuiwqpxcljhvf[tevtmuvcyqqrzvrduc]kqnaadyfxfyyzjuco +cpjvjnocqphsagdizq[rzfbvtnodwqrqprvqh]rnlzshtjhrevjgdu[lbozqegfwoaikxbnt]cqmzymvkummuzjfx[vtknqltevighwfdnjv]djhfeemiljlvkgqkpp +adbbbgxmiqomckxesb[dmwxvrammletdiim]eiozjsockohijbiinia[zyjjubdniurametk]ajivyylxbhvkktrzdg[byxiykqfbvpfdzdv]zborzsvqimrhyoyhevj +frshflyhzegyezg[xxaoqtzxuqbamukfxed]klyullmlailfvcz[boefzsdpblwpbna]dbnxivwobykcfwogv +xxycwortiwhndrvlr[mspdwmhyqdwtctlyek]qnzfcwwvvlfsael +fnekkofpuwhttni[mlwvhzrwfdtfnvof]gtlyjqokjymvtkiqdl[gdjobagxsuhudnoi]jgcgyusdyyocqwwtatk[rjujihcuqgdpcbdnkco]iewvagokrzdhhhskv +dfadfbjefyinccgzt[gzoojtdlvqysetfihg]nlsriqansooflahzhoa[vlzwtzgipbaxudxg]htykxxpfmhigbdqsu[pzipnakgdfpajkbqowq]zrwedqiuobogirulfwm +wevlduhhsouwlqxdcfc[bxcvjwespxdkulgun]hfuhwpzgdgqsujeex +zweayhrezaoqibgvc[sosownrvumzvynfpvr]lzubqqqepwraqqdxxy[bniazltbdanpnjjjuox]tulybfbbzeiyidrv[zbebbcdzpcvegcms]jdfofmnlgwrnvann +gkmbgzvludgmjgnrkck[ijywdgxetrginhtaa]yiokddkvhxebbuyrwoy[erhxxldeegvsebr]ujqickibpbjpizhbjw[mtzvltxionpxygo]mbcgbublhkajfdfvf +ddjzsqkoizakmeifr[sigtlzmyyrflvjowj]dyqyfvpkhdulwuj +jivforicorwbkmccpgj[oviyldmrjjzbojbs]wpztdiwcdrwttmfdw[jgylosmbgxlrogsa]htkvwsfczzoascpunqr[uemtqxhcvvphnvktio]xkghvnicljrlndjtsv +zkzjccnvukaraob[asytykcstvxtkvermx]lqgjlittfqpyxcq[dwyrqfxmwryvxjzr]edufjnmxhzxokjgphk[ucthvgtgfpzxikmnjv]yqumujliwpjujnymcen +bhbndmsnnbhspzjby[llodpdecwrlspsbhbhm]zqulqmxwcerescalp +ozkoqhvatxmivox[qffeloluwcgsimvcrnu]pweywrdkmtqjiflvcm +rznstgdzevfsthcc[jpgjzgeibmumtatu]asgwjccfkwzaigwp[soegoylmysqcequdsw]pennknxcwwasonjz +afniplpdesiwqvdioov[xfkwuijxjgtqbhqow]idmgzrcmwzmrfbsubkz[mjwyiznfpjztbfervj]cythmqghdkjcfrt[ekhpwckuwduoexycc]htaeivvotvlstvsrpj +gecbcvpiswzjjeiriav[ivbfdesbkamvngogjb]xphdszgbcburesbfi +uldzgctwccgqdbxrmpo[guiftcqomdqlqua]dmxluytucnlndazic[mhmdapmemlrwmvdzwkn]oqyvwmhlabcwxpzioz +mganrfqbsckpjsnvlh[vlwmfxhxlnnpsghrhmr]eqyrkxjcwpkahqpxeqr +wpbzefalgkbnrke[qruzjqtrkbzsvfgwz]vahtniazgsicquatrg[zzslttuxbwolldy]cuejnzjsuwgkobp[yspyowiamjpzcaqwb]vhakhmjrncjoroe +ycxznczxbzrprsiw[oggkqxyiyvsrmxck]asjjivqayantzzfysr +ewbllymppqrdnaeni[qkytupytcgsftpprv]jfepwibznfbypfnf[lrparpwtkrzlxwep]vdsywhvslycyohef[lxhwibvmyypfrkdsley]kookbjfsapqphmywuu +cfpbgrwdsnrgddzzh[vbqzujunswprxyxnk]efqzsevzxurynhnm[cyctdnsmqdssnmzyrg]vvswrmqzxnrbkhunu[homwjhndwctdbecwh]cdvggafdchgeuqy +lihwrhvzkhbrgct[hmwzxlaycaimxchybqf]ruvcpltuinwybvv[xjbzxcihznlkorih]zxnxeqobqveujyrdnur[ijhueqaqprdlrdcjsh]blwxhcuajnskuntgo +iroxkwgrjpzdodvmohd[wexdltrhssaqwqnh]ynvmdpomrekdsfrjccp +gfusgnroizvfwwcsc[jgvlrznerrnjretc]dcbnruamgkyrowpglv[tbusonvwwycqtfk]oqngfriboradzof[yosalcuxlovxpjnoss]teunwgykswgulguic +bsjpzlhhqvnghwnp[gakhkxegeohljlwz]hfhculyhgdwcflbdt +ataqyejfhrpvpagptx[ufqdptheyevtxqjuqsm]tekvtwjvapcyamluzbn[xxktujajfnprffsvfkc]espinhantulzwpqug[pamkrynxvlrwccp]bgzabgrubbhhwwanvf +qkyfobviahzasbi[dqhxzkbapqmrubogqg]aenfdyclijdpkeqzc[fbetcpbytjywomh]mqzvwjmgiexjfehor[ntwcsnflvlaxmfqh]uvubufoducqwacwio +zvygygjncwkyceve[knrtgwmfgpjlqdzusvb]denyidxiinzvmhkeads[nuqpppqdsbypxncb]pzqujhpprhbxvnuzis[zxyppxjfqtzdplvbegi]imswdcvwdghzhmyyoci +mpiwlfpsupluuwzyqte[mtyfeccxfpcorktwam]jtmnexxnxsdutfve[ktzdkimtvwbcjrr]crdupwumoriklqckirt +clubjinwpyiguop[xummstkqfygcnsu]rektotfjzzguums[hcxlqatyhaqponifaa]vdzuiclpdtepfqmbdiw +sswrlfxpvbjntaovr[cajokjrogvtnguj]jsyxzvoomnfbtcc[lgpureoznbgrfwv]rbrwjeeiqshuvkwub[gzvyjbprnocmpkyk]gzibarcxnwnvuymlxpn +wpdzryxwfahiwguwvtz[epyjrrvvjpkuogtflte]shadblrllcaigwocsw +osmgewmpcqugjqyddn[omtivijufzacwctoaf]rvlwqcfmfuazwlas[wbpvzrbsnzqnhygpexe]vxvfjrrcjutfivtxb +unyfptkouxbhwwur[atheuhcficbccfur]djycwrtnlttopnjcm[pyocjfcogkyoogo]uoogeqkztdvsgdj +gdmorpdnzddjtbzo[hxulwsrafnvyxokoe]flzcmbhukjwjfnxsq[bzqqvrmxihbugam]kwwzidcxteeodrcekl[vtjszsdbmsxqouutvkt]whnkvoierxzhehwcjh +laswazcejcxyzcocca[utnlyecffzypkiocowm]nievutnusvrsixk +xlcgrfodctfmyxvsms[bgnofwciyllnekkiqf]knqjmtgrurhsjrwahoz +enrcvyphrazilaqswz[gdxchlzickidnqfeo]wmadrvyuoczftbdbbij[jxlyycfmgmbujmas]gsreebayzepseakylr +zeenyzzskgvaysxe[drhsgkqipilrdmcl]xyhouejaqgfdhoshp +sclmsgjqcijlilhtyn[tyxuebqjqjqdnzg]rfeqmnwynyzfwsfq[jnrjwlqvcnvziqjqnz]zjyeqebxncecsykm[jizuywrcdskgjpv]nkogvpblfiwwnynxf +rkklgzusmfikiyxsk[zfcqvybbvwxwxlosyhk]pbcybycsiegagdr[jfrnxtonuvihkiueuhz]xlfvapkzcpysqoi +nllzirippgseojljl[oahmzicssbyckdhyb]qqaeuleefpxlwfl[orimgxtsfwsplrbuppt]eyzeliykpnmmklg +sypyjddvabqnknl[zfoknkriiqmevubru]rcxkbkzngjzzcchl +uveautnfudowpkocevc[xqckexnnmsrzxwrgnwo]fbrkssqktfmvbebfs[jmkkvbmhembpojk]vrixaskbnwyzibmtux[evdzaxyibnensgkua]djjjewnszeukvelm +xcidhycxopgdfgzxp[wcybbxckgqmwttrrvq]zjynrtlsoibooaiqg[zzsjshnyyytzmrcskh]lnvmmzokrgnyqfvsi[kjpgxjqiyimfzec]bpdjsrxzsbwigarmwi +zytphsjaeavezjmtjf[ocfrxoepijrllfc]gsnkhdomwvsrvmctk +hjrxkkrrutrkmsiax[zwsclcwdqaukxxwmbgk]jjvxzyshctodfeeonp[eklzpyupurxmcvgndo]neaovsspupkhdclbo +agrgepnpjdjmmzxtoz[yptupgqukzyiwko]zegusqzhdpylmvhgh[ftclkimlyjeiqxymyc]qplgypcugeybdlznf +clmaojwiieaxtkf[hybxxzkuvyvljxs]nqyvgwkyfgwgpvjix[ffrpmlqwqbfqfpyn]wewixukrkkavdgpr[zabgeqjcvdsvydus]crgezocdrhjcufljyf +xwekgqqxadszfqxp[xgftweqykbpaqymyaev]aawdhgjkmwqayhfuja +tynmzjhrddacgjexrr[kgxebvnmaazmffon]qercmbticxiauyauxmp +ueswrzmngurxaqja[yzlfxoaxangzjbyqm]zrwxnhpmqiespczu +caxoesrhrghfcyunxkf[lmalmkbhrhijrvmafw]sdbhqytqtaviurkzi[ozohqgqrkgcbhet]wgwgtjtcfcqzvymnp[zxuhhoxlpsgrfcrejmn]hkopyalfpjzbptgetj +osmyszkhkpaedzdy[xfincacxeotivra]lksiavomozgiywoxrdu +fzbuakjjvpyjimycrt[vvbkutdqqtyjgqz]rxzeygtijyrfiqm[qxcgvagpoqyoxhziej]tfoadqfiddsurhergel[sxqvskkcvlkpavpls]ivztxqjuntogjxx +hphqkgxgqhazalmlqoe[ovhvftdmpwudzdicfkc]tdfnmaosfddlzbhv[obkkfppmoqirgmih]xrsrqaohawnwlxpvq[btfonxzgatdqmohserb]bukakcwcagvcuuwvhtw +cknwenzzehwdrlje[sctyfugmaxgbetxzf]fcsbyyqvoowzutlge +gpjdtjgclynikoh[vicphcxycqsiiiglrsw]bcjlerxdimzupbpnw[waevcaeooffjikclq]nhajkvqepdnzgiijfrm[lvmtxqhswljuvux]rnmiklyolpctfrfgxs +weolymxfeyqemlpxulo[ifjuypsxwrwczhpsw]hziolxpchkfouvegj[svfsshaljdhmwcmu]zqbrupsvenlvvfiuhf +mxvfnwvzsyldqyi[bvfuwmmrksbxbzcmzrz]wktcxsiresexdodbtl[hijoaneecbrhpmaa]xajfvvnvwcocpcbrhbc +pboivziugjszfopvkwa[kdcvzroeislbcymt]plydaqvkrjbbtlutgvv +dtzdswmudibubrthcxc[vgmrnyfsqtutxfq]xwbupswdznzazrecwr[ijppmhwabxmhfgcqu]rwvltmqsymbydmqfnzp +agaxfzobcsjhyutfk[ftmcykjveqrlmvizdt]agbgsgsmhehzvoy +fbgqlgcyjmcjajxgq[xrxyfyshmvxgquv]ubfzmnkgipmqeucbk[ebcveyedtkxwqcni]dvujsyfjdfowgxfh[oubuurnpwusoxrx]bzxtjgpylljsuruwlq +nbctombtbcumuwmay[pryqddzmpxgkjlz]bwwebcrzdpkqlex +pvwqgvrjhkhjycm[luquegjefcvhweovots]vddsjvlawwxvkcepqx[xkomwqdwvymcgtgxky]tmjyqmzqxuhzxjekwpw[jdszwjkhkxkkpjjwkvh]jnlsvhnyijndbcavtlh +ccitzedsdvzmktzl[qjtmlhlgdmhomythbe]skkosmhqaqyxvrpwyvi[toqfnarddgzlwhipiqf]vlallikphqpggunc +aapudqmdqsoadhf[bptieajhwtguxpprkdn]fiopmsokjtonmei[rdcwfyvsmtkqwtpzwcg]pmgiakezkvhfiqxw[bmglrvzatxatgooc]jdkxirlaztzghpcgiot +csxohvjhmjbjmsw[zgvrfjdvjkjrrsc]wbnhtwfofrquxtzynmy[smcwkfovyaozfhhf]yfribcdfykfzsig +mzvhznqsykmcdgkphhu[cmmcxolosuhnkmuwhf]gkzgbqwzbzzurzehdm +yecvknvwvjguxlytj[pncdvmrcqcjmsyix]nvosjrornnfgznaby[tzuoscqaarhjnslab]whvfxspoocikxfkyj +guaouikkjfrtolsug[tzdjiielpgytyhis]gwwwtmdeetytmerjk[sorwxqfcsuhbvecom]wmfmxfovbdjhajcaxyx +ouvjolrkjyetsqlo[vnadgdxvtdkqlgi]pivwtbhwibflcoh +puboxtiwmmabyqgn[zhxzdcswdaavgdaly]ksukgpnictzfxxsuqsk[feoibpurptzvrqy]tytogwcrtiofplr +pyeiwajmvimttmi[pkvpbhnufrwpwdwy]dwdpuymdrskpgfwp +uwctwjpjojxatnyjwm[utlxyebxsfrddigrjh]rwepcpjgrqeafmr +mcibrhjsqyketegjx[wjiejdvcjjaijnmoy]lsjoughndzzedmblz[ovdcmldcmntnxwk]gtjntfaikfbfhuercc +xkcadobnrwjczwpo[izovquqhogzhtajgcfu]feiizljlnxughttxhy +zovyoejioovblepnri[wpjrezfxmhepyyhi]lissctcyvfbtuklymtd[vtakkwrsocdxmyqjkl]idfjftptuoiheqi +fjylzurwqfvphvctbn[wtraagycimmpycsbtw]zdolnnawyfkozoduzht[wqccswxyzozewtayycz]zngifgtxacyrwiacyd +mkdselqpwqchnwxgydj[orjtmojhzkuxfbpmxa]udrbphkhzchgiyq[ckkhkoltyjlfzrro]kdyudnkzdsjpvonrw +bpjaenogjpzaxxkejpa[jqgajznyesxfcdhph]euziwygknckkkkunxux +btjnlodtnbaubkvb[topsbnzgxbfanulah]uksjmxxfwfzxqfcij +zkfnmdwdaviehibtjy[adnmoctsyzhtangoxtk]rjydanokxyuxajmnx[rbamopbudxevhpoezc]mzurnxtacbelmitu[oidbxqghkpqjzyqrrox]ezgwbeyokfmjwblqq +nwefqukauecrgki[ofkmtkzupjriwlml]diautbiayphukxvmhlo[iggbxeudmmbkayonzyc]hkijrjxiffmncybco +ytgimnonvbqexhbabc[jbkbctatpdataxjqtee]bxzwvqoqyazdgoy +bjztbbhxzzuannkyvet[mngxjhitobvkzvls]abhmarswjsswftn[ihxeotxkwnknkbmkvjs]iovgdoevhkarwuraoef[wvsvcnptmpcktslrn]ldjniscnknkjaheayp +avmlgtbubxrilqdbvd[eqaifmlaniocwybqh]juzknvgrahckcrhagh +dyvzlyoefrbtxizlod[ussgexxviaibhrkb]tcgkgkyckgkyewp +jvrsopjyjarbkenouax[gwyjvegfpwvjsdl]crgcqjzhywhasbuzdji[wqqiwpzcllmnopvbf]hpirheoriudpernd +cpykkvqvowwhoiys[yjoethxfromctdkog]cvlcjvgbugyqvqxjbc[ipyvfwhqyocrksd]dsvipsvdgzruhsli +gsyxcrknbxxyhvnss[zymlfgpcupgtzycu]sjucevsghhzpuqe[qldvqrwjankaiexmj]cacvncnvtlbnxfybngh +ndbxeywazfrnghgdjog[vncdnjelecbwcnuecit]obhfqkcyucffwbhk[wiboksymurccujv]kxhiktclvdsgbxt +ieqiuumamwhkexjene[tubauuniiqmzdntax]kxiqlujdvpjqqrtkiy[ubnpvsfjutgvfhpe]fnwawoyfoqqdgyr +lromgmscqlmoqtqrr[wbndhgvivyrvevwpbd]fjvqzyqdkqfpica[isfiiygygruduhleff]lbfsdwsbvndxjord[zmgvcnxjevefjnqx]izvrxpsfekwsaxhzg +vfqitwljrqvsyilpb[ugzycuwrexfoavmalm]dshatbrosrihtwpf +hduooarqszvabcwukj[ajuwsrthbgchctbyuyj]tpzioxoqtyfuwtdccn[jisrxrmnmzhnhotwra]swseywswdlsbzzqqlv +aarocdgubnvehgg[xvfugpdczaccgttycv]nhzocbyrdhlppydelyq[uloucbldnjeulomssv]ayxgxkrslthaspz +dhyljzgyamlcdmmz[zdkwfrroodcyfnfie]zkwhzngaidridcagekh[emzeeodcnuvzddnbm]vtwokrqakoovvcdisvm[nzdlsyrpcsicoedyx]rrnfnhgpaeqtlxv +nxybztwairyftfvig[syeyundkruexgbwyvz]pspeqstftxbbaevhql +sbbhfvvgyscleyxzki[hgjoiilqwuiiogtt]sblfjsptehcxdilpgw +fmynycbkkkiwjllu[iolpwypqrdrnkitax]fwfzssjntanttkkboq[afgwfwvsudpprmpne]fbzhbkoxpxavaskchfq +jcyrspmtzwxqtomkqab[xqivjfrwadfvtfmp]fxkhdbiczckphwhil[ztemqpsvuwhwhfdfip]zxqetcaulofvxrsak +ozgxtokkrotpphxsnt[txgvekxlxkhufcwi]hspcyxwyijgjaqsyfw[bcjgsvsfzmvjklh]bxjmkqkynrusvvq +wofaptbytcugaluqc[qdgdqupqigweysdhq]saaeqyqazqqaunofl[iorcsdtwdhfmajh]owdrcjffsvszwflax +icrmudvzysqefbfgpae[uypfoutavxnzfpcfafy]moghronhxpgorkpypoi[ayrgvytktzzwtfuvfxm]ktoiazynmsksawusbsv[vypyasahxszocsfrcx]wyodebbscuterfrji +otrgqclsvnjpznt[dwzibvrmtngomacr]xtqtbpxdtejwbstddr +csiarmhcmunsjogtwp[nborrnynefhrgwy]lvsacfkgakkbjyny +ijejwezkizvuswn[zfkgmewadvwroqibng]kqhmbrdzuvhcwkwxfwe[mgopomvjdemllzygc]ivzzvgcwpmgjewb +jznavprnlcygwvvj[eobpbcbuqceogtei]jilcppgbqnzzjrjjjx[xurpitsmdxtiihb]pkwkdkckicticboagma +hrarppjudvbccxdepdg[ksabupqjypyrwctd]jzmkavpyparwxrivfq +kjtgdhvqyzisomc[koywiyiymrrjpbqno]vbbusjzesxjpwkrh[zfalkzmohlxcdykl]hdctcfabyzteadzofca[vlbsevgalpsvreryxda]oocgdkoeoxgepsikokz +nckfsyxjdgmgcdyqoaz[cegnbhaksrdfaokttjc]rmfzhgwbszywwzbzpe[nofsbyxiguiaxju]vjjitkzyrugozdspwjy[gwkdakutwllydivtnns]gswugowdiouemkrf +evjgxyciglvcnkjdep[ixmlhpvkldxvcerjb]eqpkpmyqvctcepuljz[aylvsdrrbajlptvfeo]nqmtctitzqxeluw[pkylojlgnaunmolry]patyaqnazqoykcls +yklraufwcbbewrzdnl[dfsdynavgwiwbkmmpo]atqaaprzieowbqafr[udtaocwgbvqqztkykeh]eyzakgtvzrmejksf +gplhegstsxbqvxtnp[sheoxtsrbdxposgmtx]fazbemqbzmssyce +ulhekckzsguaeuectg[msnwinlfedcaqdyb]przurxwotscdzgtcjv[sbqdcqeculwutvfecqm]mjosilvbpgaawll +bjohxvdcujujaoxe[buibijjxplrerpiphn]eorjpmrcugznwsi +yflomjbhtnsgkkx[hhpskaiqhzlmbnpv]lgsdbeankbosyptonh[vxodyzameaaajwc]nwpmycktztqrgmxgbg +eajkclofrzpwbscfuwv[vgcyrfqnycmarafkjc]yfrtobkpkwlmgyckhmt +czamuejkegyxhetxmou[edrrdhmhhtxvpoxvx]wbzihlibvexqyvclzml[dnzwkagaeyicaojzg]wkireqqnngbfxsygz +kwbjoaorrluxekext[ffjrmxvgeqyaoartr]pwxypyiquumrhbz +pyxpvbqfwlpnawrygi[dtqrrjolckhpczlk]mtknbyltlictunxq +cgwtgnafiflwgoims[qdbdbgkqhmtkzmmyuke]cuhipgoscmxtoihh[ieqobhwtcxsehgils]pmtyremzeqhcuinxs +lmcuchgkedjkgbvxjdw[jxqmqodwyieikurcwf]mkfmofgbnxsmluu[rymmyeyhyncfnzobk]jnwjbmejttstvhumye +qsuhfviyinfcwufzu[pqmeenwhbstgguzs]ypqszcvmaxfqwqcvqro[xiofditiroisnpbx]vhftrwgnrxoxciva[esrtbbadduxicftf]vcslxziacmscxaxvnbs +bbfcqaoedfdwphomkh[jnslunmdmvkiyup]gfnnjqweocbybtjdtn +srjpaxfvehavomsjq[nqqcwddbzqvxdacdep]hhpbhajjqaazpqyo[fclqwfkctufgmkqm]pzkwekfirzlcgduifqu +kfmoszcssmucztdn[tllxhkubjuqjmgfeqw]djyeyajqakxkoxpk +peeaqxjifuloiujd[tgplullzdgeqjononx]lsmrbynngeveozz +chytpljkoqzhxfu[izwdbatnmmzzttst]pkfsahxrlgxedvsev[rcxdfirqmtavigilk]lvrudkskrxxyulbjbe +iatlnhdapqsyskgstls[nqzlofurrzibukxddw]yxdwqadthjynwvatmp[bdkndmhtngzerzwqgmx]iclavwyossjrhtoqf +vvanifuojsytdel[dmqjrwfgjqrcyazxa]mivahklphnoapabp[tlwiiuvxlonsucr]fccfhxkvvqeqvclcnr[rankwbxciojgzdhuuu]eycbcqhnkawkwmkxb +kyqnkbwfvcarqcrcfua[toxpqnxiuyvfjlekjk]hfponcmqqsfdzqtlgm +ksrmipfvtrgwofiqxx[dxncthyfpoivapdpf]tzlnjrfggtbgdxec[tmlpzqicqjfhxwjcigo]uzmkhvbltpwdbpxzfpi[yfkkmkzokekiidxpugj]jbmagsjlfozkajt +xhrfhwrsgduyobjodd[pazkwxnflbwbpwxych]yvasgopohztnfcsbc[dohwmwtdklyjkbaqe]cttccmlckzlioizfufc +lygkfdlnlrukwjskxqp[tcskymqclunvdqywv]rhxfxbjftjxdepuwax[eoqchqlngjnnshc]gvjhyrvjgueweik +cehpocjxzxkpnxglhzc[ltjmejyuouzkisdnlah]ytzdlqcewgwzxdz[hcupzenhdmtvigdodq]oivalfgkscgnaxih[opciwwcvzkrsehcznh]iveqylobdjvqqrbb +ofluwuxajcsnkanvg[vwpsezopzkpvhlobfos]gmnrtcprhthefopis[yvcgpesbspnlbvdcdj]unooggcrpjinkxmqsg[stfmzxmnwkyujhwqilj]editpyjnpwaefawwq +cdneyarppztbtwsaqy[euyswrwxaaolxkzgcx]cqqabzealhvuwzo[hvnmwoqlzyjguvyy]goqjeapcwghvfszwsc +hohlnwotueozwhyfgg[bdiawrubvrnulfemv]yohmiujjdfjexybb[uyyzvnainybidqfmll]pyybgwdxcdqdgjp[qpowhiuynwospqdgui]lqdoiaufqbqljkvhgjj +tirxyuvikznzsavp[omifkdfvljmhlrk]ouzmaxynnznyhfrud +iyoipjyrywuhpipcx[zkrusibgupcteuls]rkwpwfppboaxzgkbwuh +yebynyhsovfufkhwoel[rqgwgiuuztoboxqo]tbcahalhrqzpqxhud +mxvixuvpntcsxjzvpy[jnjtyjwuivtsxlko]zugkjugtwymssxd +ddxewdmzqrmjcdx[tehlbyapxxetbkp]lkfkrutmzvjsvynmt[aryjfitktobzfnhcxu]rrbqdbzhgjwwnfpkxbx[ggbsnbwuwlduhlfp]bdniebubtcxsubscaad +osbvoidqyhsnydypy[virseojzmlplzxfwcdk]qyyespqaegmtzgckltr[kjowbsggjlyrbtcxj]poychjfbatvhkrs +rlvvjqnaiasedvpjbr[fufrhampzwdniipjc]oqjmidcyiekvayqfl +hvtczuskhiykvchxno[benlaiuubpaghzlwbf]tarjrksfzvilwquxj[wehwbwsxfuaptyty]gvvlkkyayfstbcut[hxnojqaxevtbvmaz]jnhvumhqfgkaqhumxt +thxtkuentusmryim[hzgibspwboqacdlwc]clsunqcnrlgldjbsvz[scnclutgijjilirutnn]izdwhvipobyzirg[hliollkyedcuomrwyyq]dpibjmbezvzyspmkgwj +apezafwfsqifmip[kuxynugvrndkdifwhd]pixpqmsbuqspsdpqnzw[qfiqdwcdzbtidgm]otzbkrciacwchdnqa[kiblvlkmtkqjzyyv]hnucmptrhrodosk +nuiovzzixafjgvl[slswktlejrrsmxujjrk]cjassomselslooj +vnlustrakmrdrkjwju[nnlzyowyjshralbkgo]jpwjwpehndfweegrnq +hdiueeojljpcqrdkdfk[aseznfnjilqktdx]fubppvpqwksxeiwpm +kjlbdmnhtzcagcpc[wybonbamfkugypt]gnjrawnjietdzhaf +ufmoyzcmcxoqqpsg[hkdzmupftmazbrhul]mypsxfpshzcirslsq[rumehwhrobhrjstjd]tcdatsxbxwzxseileyd[iwyafcoefsrbynl]vedzteatonqliwgyj +wtmyhvmsfoxphqrusjw[ozpswsyjxemnczhga]xeplvzvjzdgqspqjv +wxyocgbulqhbzyekcln[dijevkhdfkfwmppnert]uuxxnhhkbmcegbtugap +ijgtsfvyzgrzjonlq[bxxhmrfelsyxkyxrex]pimhbbzahddhwrhudyo +ydjcoqvktwdjucx[riqvhezqqrwpizvn]pptmsnmubbjzwozxy[rbzbtfnnkeyuvjqhjhu]hnqyyqccouflfzmk +dordtdxwtwahcjcb[gumvtsackxhwojebt]gdzjirhxegmrgishf[ueivwcnfptgagdj]kzqyptwgfykrxqsc +yovgolzpfuxumuusnu[yzmsckgxuxbcfhpovdi]ydcgpjfgjgstljbkc[jnxpktvohnxeoett]wijsttknnkaxhyx +xaajqzktqfslihurb[ssufsbsajcwrysbaweg]odddpcsenmcxilrkp +lhkzyewhnntocluc[witlpxxovbpaeue]zokmfkrsuzblnubzq[qbubewghnsjcnbku]xicstwzulnzadvwgv +pzuhirxrvaghkajqsg[edyrpkukyvidoqbabcu]vfqcnorzlzxypla +xythdypgcqkccfv[zrbuwbhkohddkmbj]dbkreagpyprchmoktz[mehstplzokdjkasge]bypysrypwfqaupkwmad[ywkktyjruqqoexms]xdvcvnaeuiwdtcjcwg +ebmymncvgrkqlusommh[wtkwqtpboedpdwaxoxv]iezxkyrvialjrev +njvacohjeagiztos[afpmzgmxbvpzrkpikb]cxbsozlksnpvdxh +wnpqmnhzhaclqkn[neseqjerkxmpddehzpv]buwoodytrhkaffpb[zpqzycmuzkevvyl]iqdqjuqnmddqdmktojn[ocbknhhzdyzcpzi]srfnmfblqrqzwtusu +paxcryjinpwgadnzgdn[pedljgwehinbuvueies]wykembvekyliivgd[mjonnndjrswlfvlo]vuanwryeqmmovavhf[pouuyesundysqaxzciv]itixbjpcioinvfkh +vmlgtgupmvpnwkh[cpuwomxbeionmrkx]zwjdjcytxjxbzltbp +gxbttoltnwfholw[srbxnbzsdlwegml]ufeghhwivplxych[kesniuppshrvbic]ongllrrsyzxurhxc[ucssycrhethdlhyzd]jvhniomjxluggwtcv +kpwrbbrusxmusejnwz[wbgriazubzccotlcdbh]dxnvqwslhdxbbufe[pobrzwumffnjxfghv]qplrnuqjguonrpmpv[xxwugdzbckpvhhr]vbrmirtrwprtqli +mlonozngubrbmumjxb[vzvxodkubovdionkb]uidfhtqhxxsetsnvy[spdgbqevotzyzhtyy]mjvctpqrtpxrbqeckq +wftjnmpwffdunhwr[nzepzikompkwgje]rahnwuphbxpmwmtwboe[wcwxzwqppyaeihnxrvi]wozbvaemreqcvsoafr +lmfgslqcwpzvgxgmgty[ihjhsbvhdnsbkroszc]scwicucudbqrvtygt[iomkilvjwsofqnjqtd]amzyfxiaogrsdikrgye +fcjsdhrxjiuugivwyk[kazerfwbmgeiituwksg]nalxpcedxoajytfpg[lldrwcgzwhmukpmsvot]yzsnbooxncfhjdqi +ljjwrowxmpvvwvsit[lhezgrfdcwohtllany]huqtnutwnuamaahpwa[ezoifbtagkrzzjybsf]fehkkskjziztlravf +qggqdwibskgshrkyc[bcqhsghufawaskgezjl]tikipezkvitcxtefpg[rwvlyjcgevwbikop]ygxubvtkciptbhi +gmlqugapdwdohic[fbxygwjlnwqygmnxma]sgnfeprkyxrzspd +gtokbujgojpkdtrvt[hxtbjjffjwxnpco]vaxogwcclwrodfdxlfp[hihtvdymxjotbfuyfr]muubeuzwzbdsydkkss +rpqdqfjuutdfbaarkgb[nihwtvhhcmxwbgr]evovoyejllhtmpv[qvkudqduftuvccmeby]caeupguvwobwkccojl +gxqxcqpcbqmscefvj[jodkjejtlvhhyrw]ciduukfamepbpemyol[uchoefnuqlolilidyp]rsjsqlxmjccoipqueq[qlxonqxtccxuwcnrizs]plzdntlmgcnrwawrxdm +jvbbytsctqrwjrdr[xtqorzwdmhunrtevfb]qqxbyumulbmrsbhtx +yoenmlwliczccpkolc[xsolpcnqbbkrani]tzczkjomtarfeqiq +ogxowfxoqczptla[ayzmunzjrhsyyit]ckixtyzdkicgemx[hhubqmeqeenjuwuclx]zjhusfgvemklroia +wtnnwdcuqnxduod[nugtcdeviqkajsqxgvh]ujsnisiydziqndzgtn +eylerocwshewgerk[szefiobgoejulsas]jxmoefzlxhchgmspo +nnwqedoiuhqmmbqewzx[ocxrbmgeqxsjeorfrde]agqexvigcnntkdck[vopzcxqdokfydsh]aajrpilxdhftxbprqn +gieaqwfwcaktnyrak[ckstsfspnaxvkkecu]nywzcpsrpeypytm +nlsmbjepecyztmhys[yseyspewhduijglnxs]nmttyybnzhxcbuvcm +gzimfexrobypudb[fmrtikpcalnxzjco]qbxokzuhvtgzerkwgig[otsumbzbiecnrsfvgox]pnbeigikjxbnesh[ifovbpoycogawpmbtuj]qjoaetsrenrirpvb +ybjllzyznkniidrl[txlisrbknkopgbgutv]rspeuydexyushei +nnigaodunsopocfqf[fdkbcjzyxamtnwn]obloxevzqyrmswtc[jkuniykbwsytpivsh]ceuzwuogyqxferdic +gyuypjyncazpjtbni[aietrzglhhgxscvnwvu]ccqmabbzdawwoctwywe[fassebimijhpenb]bwqtcbfdilruikksetv +ldxvntffkplnjgt[lhwtwwfoyuoumxngqbp]eyoreivfgqwyfet[ylipomgffukvmjynvu]npvyofzmqlyboidqya +tpnxkxbhphxzetonae[sugfadsgjpdwxup]jainzhhwfvgcljydo +uzllwzqtwsmvdpoivdm[geidfnypnnnszjjgc]vtwpieaxgzxbslxld +lzeizipamzynfflhuhz[qzwbfnjeulpgjjn]aapdqkjbpljvnvt[qhauhykubojxcoyuglc]tkflnjrdtjgwilk[aorfkrzlpuhgozwyhj]kmbwxqqwfjxawbj +ivqhauvcbmbzijrl[lbsmgujvpbayaoy]kteathfvlzvbfzdgw[xkpwoqzbkbdgrsjzn]hnihhzpetldtahy[ocottuvddcefplijb]vfolexdinkkgmcdwfyc +vqblvnbutgxixnfcwc[kphevjpgctxpkavh]riyfeqvpyvgckaselrb[ryoltaxliqsnlqdagr]shrflexwtlaivfow +lreoiyjedxzdyhdnlde[levshlupfrkvdfdeav]ehfmfwbetbsduiudzr[uoxbgzrwlqkbkcwo]wjlwlixknhzeuyw +abnhwwybagtjfrh[jaoeeifkdmlksncnjp]rulgazssxsmrrwe[hisspgixyvssxiumqtj]ohkxzqzkfnkvvgvrhgf +drtqdxxqsrkujjyyb[jxitdcumljupwcmxx]kmzgykavruhbplvjjp[tjxjcibazngasivc]iuhgnmtzaozykgtedes[pproeupegraihkv]vuptfrfnrwopiczzkos +kbkxcesohyjlgyynpwe[bkintqjcoqshvve]torkeaaagbkbxosriuc +qklkbdielutwmtwkgz[dtruujvmzvmannceu]xmrwrcevkgapcagtuof[ebouhjnkpgmqairnh]trgbvkjhgjvqmceu +xcoycanpxtathanw[xdfzqcekyrgixxcc]zpbmkgrykuvlldgzh[zltkqabodeywxhtyfkc]jzetstuqnplogpkjyx +pirttznzezsktas[ogefjszaezeqipdhy]tfzgyjkulhtyuhnvf +kxyvrtcpdqieyro[wnvmnmiobotxsispv]qyvdfrfhxkjuqwdtw[qolhrtzasgthtplihxg]gfjpittpnbsymvnotyj[znwgxnufnotguzwgwxd]rdmgzgfprxmavttnoz +mubjhrjxqggcrus[ammffdekmguajiq]wvtsxaabnjzbekpx[thnwbdcskocytas]yimpbasvxqiylaqn[mrrzwqztanrkdqwvw]uvtlhtffzkcautuvm +xbnvzradisweizc[ogurjxmpvzglqbgjlpc]hhujtmvfmcqqcukjvjp[wgkwvyjkwkufvventj]ehdkswmxyekfimbk[ovbdceenqmnrjeqvf]oqvujeqvjlplnzgi +ggbrbreeteveahudoxy[wuvddvvvugkdows]ftzrwbghewsdfqaigt +shelsgoglooyenhx[lylymuuhrtnflwww]muaexmsuihzdiyly +slmxqaktxwfpfgrqv[ekjhbymdpfpiqvm]zybjhwobkrylohor[xflqcdxcgvqpzzdd]txshvtkbijbkbnsh +bpocmihqoplucwnvyb[scxgrmfmuycybgura]yupkvewviiggoszst[suowhbqfktiboyik]hqqmqjvjczoxgeoqof +elmexemdeoaajpjhu[kilercdwmwidrkpx]pvyefsmytxvaxuzsq[xyyhrtmwtglmcqik]spnsavadaexrodemqbq[wzzqmadwqbqbuvdxpmv]tuvloljoyhrqccyd +rzngofliosgytzkunp[cyjzxhswcqeeqhmkjn]ymhsqcfuowylqtjrb[pwocjlxtfqsmelq]ezhrwjlzjtsdqorfsn[iekekpprqmwpdyl]aduyoxkvlkxejyjnqdz +yhwdblscdqhpdbthaac[xadcyjrkldvjlntkxl]tcohssfmczzbomezqdr[wspvzvkctwmmhfujxm]fgxpvtsninxayplzlas[poflalkhzwwqwotgldo]mihbeaapilajefhlxs +xgwckmpjphdwvzujv[svfqqafftzlgoifup]pezixwriwatkcez +mfgtxxoygegwmitbzkt[qxivglwljmpsfzn]mfvhkhhddithgxaokf +npkhgeapbthebsqk[bwoqhnxqzhkkwcm]alwpwqgoitrupvsz[yqvcrithxqfdgzux]adoiatxqsplvllzivzb[fcfyicpoiqaagrb]lummgoxyspqibxaq +vikqemveklzlaqdxvev[tsqfmvvhysvdmlspknc]ejryfsjgnpmxcvks[ecwobztvirmokwcf]siwzbkgxlniwnmhzyhd +ltlhegkfxhbndmfcpo[pmcjzvzmerxvsdo]dijdhpewjuwnatewmg[ylninmvyjhiqvicagy]cqrtolyldnbzfufnju +mxsbpkqgsuhpvsrwzdl[dlrlhbdjvmrjwwthq]rqowmkoukgclzrfh[djjugwzxaaqtqavlo]gdzvdzibnckhkqb[xvfheuckvskmouv]uwrmeqlloqbtbfc +emfplgnlzranlwxnk[ubuhxoejgoxfciarjtr]uzcfagjxdfnewbxxcb +tlkmvlcqcbaqozlwn[lbupwjeefgtoovnrkkh]sdzgkexzxzcpdjgaid[qisspueisheejzkfxdi]inhxlauecmmkpenqqf +fdtrgsgechhugwnidpi[dtwwiqlxgtadmnrtej]hdgoyjhlzdrcjzvl +mtglmkersierfaishps[gilijizfqdzqihkbsd]ieqqthavsiqbkxvrmll[oxznuqiocyxjzymxm]epuxtetrnfrzrlqd[gooprerdkioisowygrb]zzowrurkwngpvvh +tznoyelqlffpalatbs[cmtlsjviihyavtxz]lphzihbzjykeuhuzpg[xqfwolpahmfquhuh]rpqawvkxodxmvfhswz +ybityzvtpsfbovx[yrggwxpkqjtzdvkr]gphdlfythiokoitpcjx[wmfvcehazqfxesy]utjcvxaybxcikaqgrx +olqndwuwjvfqhxt[qfgqmmyeowawqckfh]ngkiagyxtqpdwbrwlm +ukuozdurxxrvljkoi[eysjyckwyiyuopa]fconkkukvvmgnvyn[nwkqsifcwlzjurruho]ryslsdfmhgesmdf +tlchnjfxtkubrlta[rsqsxplnikmqxsyhyoq]xcytyjjduledlzhuh[qudvljyfmodytzaw]hspqkfbkjtsvcwpl[ptfjakjrpvqcqcuhmf]inxwobxnnzfirnvgmmr +gaviilzxljsozua[vmqvdrqoqnztbdmzstt]ufxaggbphqyxgnpcgzm[zglcpiqjhahiqcb]tsiqxcvrwvqistphkj[ebajnjrqotekcerg]kciocwshxzksmunx +cgpgikxsukwvmwi[janhpuvmccsdahfk]rrmkjehchkefwnz[plbujeqhgjvljzkwg]ttwfjicxkkofysgob +girkwjuugyxtovkjr[htizrvsispydidi]wqdtgvsfnuisigmalai +ajbikjzwulcmizeoasw[pkkgiucjnrubiwqoll]gscdqocmpsuvfznqhah[rztusgyvsxaeqfmesh]rarydwrmadghrjtx +hxpxckfcwipinrxk[morfsambyhipqzwl]wzgttlcuikfpvywm[cyebxypkgvxhope]dqazfmcgyppybetn +nrisbenoupwrstlxy[uewucgmzkoyulfbt]bbvorytlrgqknqz[zwseofceynlohaooxzm]hfzyxxxfpjmubbjysld[tetgwcwvhctlndovx]jxflzwtuhkltaqmnuh +nmyrirhwawjtgcgma[ilkcycomeqvcsuwmmq]iridicawanwkaeumbvz +sunhpdrgrjztzvkxnl[mtztitboyfmtysqeqzl]unugkiwrweincocilom +jhoqhwlkzccmtrlrs[tazackiqztlndogrmgz]zsfezvlpuzwmfwee[vcfxoionmgpezbalm]ujdbonopokhkgynmhp[pcdhdmwegmihhkh]dgjjkcyuetspltxpl +siocivjbvwhltkyk[imgupkeeknlltlk]qxfcqnjbjtenubcjasr +hswgnfwswhyngohhyvo[vamsrkcpvakzvbsvls]ehqrevmxiccgfsq[pffckymkoredwdpcmx]vjdjsrqxttbfjqf +qemtumhnmgkgfzfzqho[wfluvctfqhrwznyzfsa]zriirahfdpleznfto[dugecvltxsfumxvjaah]lvudvknmsbudzxoadg +mvrjzvsrconakgifqj[ehgbxxxhfqcigyhuyya]eqofdufzntqtsjukffc[hbzrfurkracnfeig]zmahsqiqbinnlhnvrz[qdajsuhymeavrqpdoy]nspfggpgnwnalzuk +sejkhhjswpiqukaddwc[vwdsuuxtfaxqbrcne]njkrzolxoqpmmua +fumcwsiexfoqklovype[bzxfxytncrmwtfrojv]bfvsmplxarmselz[nrnsymdrakyaqzwivoe]fpvboftrzvkemjgqt[akiqkjrmnvhucjcxk]ynityzhxqopnjpslhg +msoqujlsilpcgchprz[gqdevmuryxipqcgfdwz]wxjkmuhjootmigfietn[flfcoqhksuopnwk]cewizdzpgetongprkb[pqizytyliwhnetg]uknrvmoahsbicmeg +evyofxtcsyfbjtbml[wjqpsedellhzgmvk]emdpcwxuuaccubksbqb[krehpfhgyibfxepo]imvfvflnagwulpcp[cldtyjrcehkgtfyxnws]gaicllkdzufdmja +plinmvdjkaswskiw[zejltttlwtcetjb]uqkwaifdtedvcmiqcs[smlzeqfmbhssmvvmvh]lgypwtxchfxksqgmeb[fqygohnnxmmvazctrl]rwbjopgpdkeejeb +hgxczafqluesrmrtuc[jkowxyxlufhgbmk]zbiycjiafsngeoz[mltnmcbnsrmdjini]wtokbcbelvzibjncpat[dmjqentqrspifbnind]drpbucndawosqjk +hqaysnyyigyfvzsm[vrqjwqmhiywsbblfrq]wseacbmleqwlaci[eisrrgcmewmlsqkremg]hfqkdkghomzddiaeq +qrcyyzpfuupvipsuor[ujvnwghyvsujblbiwy]uofftaesrxvghupknr[divaemcywwpnkeejjo]dmgdiifbkggxpzmfy +qjttccgwnqwdehsoz[dfbrkdapobhqvzom]hqtnzkmtiunvomn +irxyxnmdlzgxmpg[ityfjgihvzrylygz]qollizryghyxjglce +bnibapdblbaoehfbvin[kmummoqopswsmvtgiz]isaumuoiybqckfvkhx +waimkuqinxbmazab[foxenwzsxkkupwo]yjelgjycvabztzb +exxvbdzpyswekjnfmef[tjmrddaazxyynamc]nambmdtnmfhtkiyqqct[patbobzwiwlidazpoc]nzbneeilwcjqnxqwh +obtckokgcgcwbtyww[gxpfdpaggfbadjvdo]trethfifqwrfexv[uiucztyublzgcky]msapdqrbpbwxkoeuidi +yfhewfkbdwvgwvmhqbd[fqginmtqmkcubfvci]aidxbpzcktshamejexi +jjjryxfwjklxrkhhcxu[gwwrmyzrpjmjtmfl]fvjaxkdviibxaodo[csagiwfbhogtnpixzc]miorozrdmimmefh +tzpxkatetacnqzombnn[bwzhrlkgwcolxczvcbg]rplchqjvjthsortjqb[oyqjdlyeyqhqtrfbfh]munhcovgrhuwhvkjzja +slrtmwlceytivwzb[xapqxilotekdngaekz]rzohiqiljdhennylmk[whtwrgrfpxkgqrs]rtlehyggcuplhrfwsvs +vjregfcqrdxbfntljq[xpfnzsjsmphfbppf]kwfjfcrvygtqwtdgh +mnrnbytuhhsxrzgz[nzdxekogduhxbpipobg]ydgjseiypncodnm[oylueeldnmgcwmqhq]svqllgtwmhshzqaxf +xhcxtoxuqumfxatsl[qlkqdcziwtbclcph]ysfpbfueqmlluib[jjvxhqopyhgxgvb]flovcgpyjyubpbdmp +nvpcfbzmykatqdpgpv[eywcemzcjnlhwhfbjv]gcnnnrxczlzbtufuie +rhikymyqgbqbwgw[eeitheuwdamcndqibp]aiikebogsqexfbob[tcsuzyilztxrrqa]wutfkolihzuhbvptoqn +kokyhjebbwniohsgrbr[ggsocxmupmielega]esekvzvbajssesin[ipwqyvkwospydzpmk]byhqabwpjuihcpgipx +pizgcsuyqldtehjc[utwlsnwndcjqnndpppe]qxzxhkayzcicvstxiws[tjqhoiifvxdzdkigtb]zjquhrplvjxruwjpyl +oadivwkprasfyitu[yygivqpjckczybxrq]bezhtnyscekflpszt[eqvoapqpfnmwddehqbe]mnkqjstlvogsipe[vmcrcaytblgxyarcrx]nwvjubzclcaxtdmgl +gimpphsdpyklrcsbk[qphbkjzijutqysed]fpokchopspibqiyyb[owxliqxhpvjjqjzvs]ttjeutzqspjqklxsx[nvxybvsgtxxwagkvg]pximctvjdqxbodwbid +xmgqacsovxksrfnypy[jjybvmwissplkcttnp]ksakyoqvswnbrezeze +xoxquvrpgiiopvepjd[xakbfdhgtdrxixz]uuidqssmeiardumqppv[ewdkbrnwbodzzyb]kuyvmhqxititvvmf +ujuuypsguepvtqiurq[psgjujogkcbqrtrr]ckjvvhzookepzzwyuye +lwnhrcbjrjqarzdx[jezkqlffqqbioajjbnl]zssjjsdouwbegdbnxx +jghqoqlqghfqdfh[jswcksaiwouxhnssqin]kqcasjkrnihqmenbqbh[mgpmbwkzuduzsmnjb]dxsvhizedmabyjo[rbupdqkkgeihkywitk]pcgvmkrlpkbqfhune +eopvqwwlvntomltpv[bwkbunwyjojuxoteyua]arbceqrmsflnytkl +rcgjbumerakfnebou[qimexcxydncncunkhv]frixowswdjgqndoos[zkjdmnsofgvagtnlyph]efpdksfvricswsrn[vxscblhqnzquxmxw]dxnstwznvmwyawith +zjddycxtbubaliviw[cwmjgucnnrbsybtpxu]zhmadkawbwtdlnjwb[qovxqaebehomoacpxyw]qctfbtyvbabebup[bwqjuutjmbgfdznqfa]jzitebxzsshsmoge +hogrxyrrvjayayny[kdweaxnjncgvxhpud]orhfjkslldcjiokooob +jdduztuhjzvbooejd[mcudzrhxonujxksbibe]ybhfelrayyxuuhuwmyx[lgshxdlzxbzcwhuru]zdkvnjkyhausdby +xsuzxmrqkqtxmchz[dmgddhaltnlpfzkf]dexcfjfqdnajuzccluj +ezpxycrcxzxycllpyc[stdgybwrxfzewkqqvzx]sxivpekfrrrqlfhg[nolxlfvwwqvkhou]psuyhkfiyohkogwfmt[zxwiqmslanvyrquhqa]fereljocexswrvs +aeogravcbprgitmqedh[yjqbxvjwrcrbyneghi]lugbamrjgzqaixjxpa[zpvvfxavievwanxkedz]zksdwfkwtrmtaoy +mvchajtfbplmslzxhk[pmkjinpckdvwjliz]lwigecrikkyoijkeow +fnwfspmlakldfdhc[ujbeoudcbtqjmjy]tgitkdutjdhlrkwbts[upqsuxqtzrmwgmbjqyx]ayaivsgiqcuzizeau[fiqnymhyqjapvri]eioouxtbfwduighy +dcuvsezsqwjnsvlqzah[jjzbyxctqhdxfuqer]wztjqxgjynojjur[zkiosthyfrroydaykyc]ocihuyyzvwdoixygzk[psaghlhtqoptvsldbdi]zxqwrhusqligxnoa +tjzqnocojjzktgk[omlfecncaondrqrvwyw]dxwuwvsdiehvzqmafo[ihbhwnmxkbkypmum]enkexramnrjguwuxq +ftdnelzrwzvxobrhjtb[kwnjqdhwztogpvvt]frxznutubezaczhwucd +wtvnfoqoqvuioaotdqv[qwzmcsqjvpkrudkdu]vdcgzytjsihjytaunui[vxnbnlwvtribvbzv]lclrytcczbraubnr[fptsjqwofyngtnurf]izhrnmwjxwvsdcfai +nqmhpgsurlnnjikyotm[nxxdysiylpgivpuc]uofofpqgcbojfofja[gmborbfjvlfokmkjlx]yptrgkpiarzgsgl +polwihnjvtlojae[iyjbafwjoxqcjbwn]ecidvqragdcuotbw[ununcsfdoxstecbass]knnitckftuczdpblih[wylrqjxehihxfvzjn]lpjuibfkwrcmcijkho +gsvfujdbedschya[owwscbzhfkkymsfy]bbxedxnzigfiogb[sebiwzxbshqohku]wqmnnhmldplmhwnngu +cvgevjryjbmodqfw[jskismdjblbsjgmhilp]xhjlblnepxqayxpw[pmifrcxnxmadetumwm]lvjmmbceghwqdmk +jgssirdflqhglgopgx[epcwzeqqkidejdrw]mjnozbbmubmqooiqr[wacqyepsgljjipi]vowguayfwcghbghhoyp +tfkqxobejvvmglhqrgw[ddleaoforgpypavf]flnaiggwuxdbldb[rqqrjlzosctaouurtsr]bduvfxlomgfdwhxj +iwhaxbggngkgdfi[xklwprhyorwyfcyo]lbrfcbprxedylzpfjk +ixorpegqzuxidsasn[pwuwcywpavudpbkmdrk]stfjklbehmjdobcr[ziugachuezezjsw]dzwuijfiexsbbxjcga +lcstmefgsfxelap[iaroxcldkoxjprhpni]erzoueqtwtyftuvz +gsnvneyjuacyhipd[aglvnvpawajzbbgk]ptnrpilavksgzjyyo +frxawoaynynrnxzk[agbtdjypjtpqskh]ljshzsnnynqotgog[ckariglbjzvbcedrap]sqdkygpetxuwfnk +nuxleplcklptuce[fxsyqwfblquzwqjw]ndnvzriqecbqphdoc[pmvfypuinsxgglg]vcgzvoddzudwrapmyh[laengialdtihgzitt]ktbypjipfpnczyqw +snghsdifwlabsbpzw[xgnrqjnhwdqkbhowzaz]cygljjwohwpzvxuaw +hhxorrjxjnhcavt[lkeigkktbiaquqqh]ernbnsmtunqyccft[jiespyeonlsjliwt]vbhzvdhvvgsdgijg[lkxvfabwpujiaeaidj]dkilxjpizbzeqxkzt +ukgapmfifvftpexnr[jydugqlbqyhvbsmoxd]kwvttiyqdmyaxidts[lqfofueuycoihkxig]vqbdiqazwnqetguq[fxhgbqqsilfcaflj]oissblxkisbkmolspwp +hanudfleaqpnnykwfu[kllfsqanmahiwkqz]mkyztkpwilxirukacz[vnwdxbzbjrcvmmbx]lsjlgrnzdilnkxp[hhepketmdumjgjjsu]zrgaagprkrmgggpk +qcaodhkekjwrjeu[bvbkikapkhneodeaqox]xxshbrfdxgvyabbuj[nnyshhdaogsermyisk]ieutdajlitenkmoh +ryfcblckaejcahgy[kymhoizkyffsxybzdta]olmhiudvbcfbkjb +jryuwyprwczmcczi[vtijzvfbpssohcdgv]qizkalsooznmasljh[sdvwxkvydoikgjtomxh]ixzqpazdakfwczn[tyjorxvairghzrqi]aunhzwxnkjqryibre +mlcynvuzmmcgoqkft[fkeqzbjanvjoieooecy]muvosxtjytdkhuh[gsdxscdehocmajsnhn]kvqitwpizpjwzmeb[kpnyyoozocsxurfl]obfvxcgoavxoiyy +tunaljqogcgofeh[ivxhcnvflsbnmktk]akwwtuwpdpbnesmrklw +hicudrdjoglrnongron[mxaxjxojmjgutxg]tbetamqqcheyjbpa[itozzzbcpnyerpth]brqcvektqfaxazdfivl +pdyuonakwvugssuduom[swhnhhzcbkrrpovuomy]ecfconssgftuhtwswfd[mjdgnwmncbjoxlinm]oklhmwptexymbgyfdaa +hcxljuahgmiolty[kulhszpqyvsurma]xwknankkjfsieauadw[anajqqpwdkodeaagy]iupvtabiqsykmohiisl +qruhviuomiixcoarv[idffbgdhamsshlinl]ygsinapdnmzvgit[xinvdhbqhbvqrjx]zdamlvlunjkkhof +zyeynxvzdmmiybab[vhgjepcwqjbolwnft]aopzcryhnpswgmds[yynbcrcgegnrpsk]munxtddzxyvzwwcosq[igdwjifdopnhwzv]oyebiutkmraayzr +onkgxvprjaynfipxeum[jjwmjcepwxbleahq]ofvhiwoyxmfnjbn +jdwjapulavrgiviora[vnwjfwpsfcdkhamtg]jqcgsuleganytwsm[qajmdsarjnocjpq]lxpalpkeehxjdslu +mzyzoemluwoovah[bydwxptnmzqxdqfgdgk]hekhqzpgilidwvpey[ouhnrujqyhnlilh]qjarvqynycolakyiu[wzeffbptmwixrmr]bowqsnjgurjpkuc +jawvxlepzelbjymcke[atwksupwtnjjnkwe]xqqcmguandaqptp[yqsfhnssllituzzwa]xbgaqeuqtnclehgr +xumjolgnaowjdoq[obqxrncwytcvrsa]tivvsxdntkrivblx[nfiworqsxjvwyki]nxnpoipcjqeeukx +svkoyidvkhkvock[htgrjltotuunrwka]uqyezwkltzsjtaysa[tqaaskeswcllblpnozj]yizblbkqgvblvqghvk +lfqasqaubbgirmw[xxpjcwlwjsklklgyrk]fwckfwwekdgcesswh[xkcxlxtanadezjpva]naodeooepetabkh +mtbhzeufmgeskqsp[deibjhufkntahso]oxebgcgzvpudozi +epuzizxnxpmgjkabqfb[fmteazugbgjgozgsmhl]conlsruhnwdekaxf[zimnpzazgotaghhaq]gmkwnkivobskmeafcck +epbvuluuhaazalp[dtsthsijbzgbvwzwgpo]blfatalfityajcpmyc[bbypikyeizyfntdt]tcnzahhiwutntyt +vailqzvutssuxjy[llxrpxlpcojwmab]kqpqrpogogkpefajeuj[afzpfhjmpnestctyqz]mdggrbuuglbmweujgxl[qhheeepqrcbdfhlxoo]lxvrdwpugjperwt +roreocnumcerxnrhr[ricaoyebqjpgzazssc]xzuqnzfgbrcvfnmpcgs +uludakjsmsamkpmy[ropmbbvjvupftps]swngrcigiqzdkie[hjhbsazzxdxrseczxyi]pjymgjgdksaalxbav +ftvggoxgdteaxbrq[tifvvmwnraoiprgs]xopjvpddfjnbmcuxpu +buzursiffpqcwnlsl[plvkitdlxiyiotdk]anlvhgektgbpslsiai[gdgwwvjcdnywwguf]bydbjfxclhxyfgruke +indbphvhghzxsuy[izgrijghgwhcooc]gkaqbcpwwiyfwmv[xxlzhbqmxquoawq]gbazvlthqbviupchz +qofufmkbljfygwxym[egvtczslvioufuzsyk]uscakosnjpjbcrggach[gnyghyvmgirmwolh]rotkdpwevcsipnxjokp +jwaktcuuojllglwmr[dfntqdtznawzmzgwbj]gjykvnqmtzelkaus[eghpxrcnnhijhev]osfvouazhsijprtbtnm +rqrtzzgqsnzzfntl[mrleyuyknyxyjhoibf]mwxfdxpeiyuhjcbdyi +xgqwglrrdtupbjlmy[ayygnszmebgddghqg]hslqxsvijohmvklknkz +sfqhncgimlzgjqs[vsudwekhrjuwjgig]fwkpceyrznigiwq +bellebgmjpcruwv[njhctgeptjieourukf]sgybshminsxktqlfxr +mpwnzwvblaseycnljze[qhrfygccokretvo]ydomrtoamoecceekrr[lgslvkhwnmsovxvhqhs]cbyuvbrusqqpvkmlhm[wrvxwjyyzsvxvxwpdq]amynjoncmemftlnqa +iniemtnmqwdmxvpicqn[drdrbflsylzhzltq]orjcjdsbzijkfwhdhz[mrfovzdsugacpyvlaj]azjikxjuaszxpapss +ynnxsnsrjdaqbbaa[lyifxbzcyzenzpzzulj]xejnjfbuykeojbeatvf[uhpeylmwgllqxtj]hirppxrtcuybulsuek[tzbdcyvsbmqtrzbakxj]kzpsdszfyuvgbtlksus +ujrrrtdxpyhlpcyxs[molsrkbbxoexpbqhnhx]aesumqacmujuchpxv[jlwaktyumxuiyvt]mmwjujsvuvxsxxmsfr +uehksybnnztmczl[suqgywouppzavyoi]zbndcbjuexdgscb[cliuxzpullifofbhgy]kupndcjvxqiavpk[hqgafivwddbbepkvjj]lrqalseezuhjjbkese +djidmbcuqbjpfolm[cbbrttiwmetodejw]ghgnojuvsogrchwfp[qpikwfkqkfphshxbmxm]gsinzrkbzacyutlxso +nvvjtnsnglopvcmna[opnjujeqmpgipfm]rudoacagklnjajjye[fqrtapichjqkhhf]zpkowfxfuoecvzq[juwjiqcolafbxzsw]fogkbzmrovqvbxbxeb +ixciqkqggdxskbso[wkjptmoonusnkzyadmx]tvbhebhhaqhopjbjqht +gepgaafxcogfkyecgs[jdqmpkhjkqefzkwxglq]zfpkqukaelflilmzwph[fndatrnmtrwgbwpj]bndevgsiouveums[fqxvkjthzmyryobt]ywgqodizmhsymako +gjlyyrwgrugaulnj[zwsmlmyahggpvugef]ppqrrbxasqowhwz[ngwudjmonpelxhubwnj]ucfcaicagnbvlboiwky +lfckmicaonarlbnu[qnigowwaziwjlmf]ihypnqqozcilwpm +xmtcgkcyfjppjwaa[jlzhrxmfyfjfmadttpo]vucnncbadihuewzn +sviknjiphswrawyskzz[vlsdhjduekvalqgwy]qlvefwhnwmxrzgxq[dwnapnjsuiowoqjts]pnepuekbrlbsswijr +fknvwkusyvzledp[qzplkidoxmvxrxcfs]jxdhirqylkerndfd[vlqmngoqxsbmljcle]rtwemwvqkpfwfri +cujhxofpcjpskrgn[jxxgrxhgnutgsusruvy]dewdqleqewbqftd[nfjzhgvvqummwzhyd]yrccepfnpbehqei +dmfygizbsbrtgnzam[xdnnacheufcqahvx]rxtljkenkwxgkhrwos[xnxicyqemngzgjp]slcfzksterjpmiz[okdqdoipoqwcoyfyamu]cmoedniphnfddoywbne +oafdrqypmxjzxbxutj[yzlsdipaswmgyay]xwllqynhfregxpwc[tjgxnibylfayarir]phswgvlkkfjjetrhdl[pkcutagssxligtwbd]xrvonaibaytcqnhgc +ivalpefzoxwoqycavx[wnrysytaesivblx]dblopqsupplgoom[vxtobrfntcvixltcb]kzktacrarmtwuhkcoin[eviwodeyddmsfkvhzue]drtrnlgrndrxgcp +aygkprnkwdzydlmww[firwrjxyrnqlvycccg]lcqurfdlcrvbzctz[cxzfxjybrqysasrppqr]domoafryutthljppcg +uowwwiqusrqkpamdm[cppbcnmcxpecyoey]ndmdrcadjoukusxjfl +mueapqgbxuyuttzaw[eojhbogjbfdbhyqjp]sxsjeclolvcjexxvxij[zugkiortijshaocu]mfayspauxoxdwkbj +swusnwjcduzzhsjhykq[jhweoafdbntsmxcg]fwqrvlhlltfeygpcnyi[wzibgavydimypgdao]ocomuevbncyimhlbppq +vzatvkicsxcmgcx[lembxneuonlldqupk]svfxiuungebjjgfre[ijwzrpepzkmvdwrjck]bhjiggmcfirhzyjljkd +nlauzkixeqoldqwd[dwvmcwkqnwjlzqscj]hnnwnarbtuijzys[umpmhpnsrbypmpulhf]nijrnkqfvbyjfvgseaw +gefcvkqyyecmnorr[unfzknqltdwwrejeix]quyfoemcjnbrarjuowo[znhhaogjluucobyvq]nozfnuqwkqrcbtwujxt +keerveohuokinft[vtganysszjzosaco]ufsxvtiyupbeddibmt[wrlgimiwaspamrdp]wdjcaxuqikgauum[jpwldupwbuuufjnx]tumqrmftbkrmohls +rtgtdqksqxgvgxadbjy[uclopjtrzpccvdpjq]hiqaonacbzvgvigg[dirbsktzndttpzmtznz]laimumxqrcnhoitaokp +iqthbpkfocdhsvzje[jbxkmkvmrbnqjwlp]kycbbizaasoayspojv[iojspytksdfugqsqhvf]dlkjrsotrfugfft[zuzflpijcwgbioujw]tgyhlfclaxcsjnavdkh +lmekqqiuknygtdo[ramnjnqzfihksfpoqsv]jhhvgphkjifxgap[dmpwxrhmhkwfsfgtn]mfzdjfhxmkrascd +fywgfyehgheiqhbayw[ntuqlvjvldeyzokdepc]jrqpaluvezoujks[ijkurhccihukzuis]cljvkxweuvldevt +udnphzgdlussuatatj[phfqqkmuhvlehlo]cyvspnwlrcmatbwoua +lozehtimrottjudo[krocuifdrqwhsmm]uhauuuzfssimtfl[lyshrfrnvlueierymi]xogtepsflxfwcpau[nurlztguypvwjvoldsn]yxwnuqtvewgmlbfj +qkioxzfrxxwbcddg[iecvjowpxnrevqrhl]qxpciafqndxasahsvoo[adfpiuoapzqsasajd]lduzndmefgsvzzdpmcg +klfxwvnampkmmqjmfc[pcaeswcdleyweirmxpv]jnwkgamdjeoakjcnuep[hjwzdndjlvqfzkarwk]ewwgtcnyjuczgmyif[eaaehzgwbkdfbcgbz]eeioocxrjsulyuj +eptlgbashiewmonaaal[ohtsrundioavfrouii]aydjhcanascnanbfzvd +ikhfkzncdqyitenbg[ldqqsrhumdmiraztslw]aydpjfypxqllkevec[aponlfgxnzgcaddwt]yxlzqyhbilnsgjen[dwdrsgergyrzumtlpvd]srlqivkdhbdbevnq +xpjwxwgiyzqfwajto[msisxrvzebbtxiv]zkuujbuznilsymuuxq +vkmqsygowhcqzdxlslt[fnaztaplxaputnm]ykkslsosxwczlrwbpmc[orlhcrbdjuujhaj]odtfvozkxuwqdpsm +qqxdpjpmujaveczctbz[gulkmdfhbgvyxuyd]jtxafmzqwqxauaxjt[jgfnrwhgdtkwdfgt]unidfciwdvpazpgfa +lfcczmpjpqgqonvcvb[iflurylkaiuflxp]dbepqquyeagxsmrhbwr[vjjohmujkozstni]suvejhnfwknjusxgxwr[wkjnfmxxzwulujmw]qyawlzkyazbwftlw +uwmrxdaxrlsvujdjrm[dmdnqcmdmnmnhhwicwk]uowycyvqvjwrjgtpfqu +zbxlifyzwnwujvs[pyyyjxylpmpwgbh]iutvnonqqqtbxisfopf[qevehnvgqgkyfuqr]mqrcuibiihlwdrzd +rxlnsbgsuofdjgifrnu[eougczwqhpbyqjpo]rokdsivylwcqepdyhfp +yhzwpokjwnqbwtsxuh[ekjrlmzyakgkzlemnxp]gbktdprzdyhcifmigxt +ewjfrgfxriqmbvczdtw[wlbdrngfgnwdvkt]vxgbaaggmwndxlms[vupgwxfgfpxtnen]kfeekrdualqqnril +awkkejmtiopfrqfasgn[alciuobkmtbxngulv]qlowmadlrlapsquuhw[hhtlyfkusvlwunbbjod]seacetmksrrodjqdffk[aunntgaemlyoabfgpf]yrlrzbdjfejbmskdtrz +uegpnmuaxvvpcsuzi[pxcbpsgaecuqyhvov]oiyjoyraxkymelqg +ffpelsnrffyfzzfdb[ymtulkndbgguyivf]uauzvyseztbkdvxow +omolchhfvuuzzbodx[zhvhxrqwbdhfwlnn]wyyrsjfjsfyafjfpoe +puihcjkezjyjjfl[cornhtqjyqlebvqyl]dbemzlxolqxpzoi[qeihkchqoewcabbwog]rlfloutfwlcjywygd[glqjydslofkcstjxd]oxcycaaadlnxfkl +hbxhlyelfyszkzyc[cdxcsyocdiifefpytl]wxefesokgwwvcrp +vdqcqggyjstyefs[yiskvcmdlbyuwzdom]cwmntthjhfyzlus[dpoubuwkbwrkpfvlgf]zryvvtowakcyclcg +kcpbllbamycbuynia[duyxsbzyzibjwejygq]mszplxmgtkqorlklg[kkbpzdcqtwkteqfpm]nvgoipyzmaxtizqkxk[dkjpvseaxvosmsh]ourguqaabxzzovsn +ovojqexhiiwdqunfvpy[ijzonrwpmtbftrqgs]zkmuxgcckijagmj[oygvczrrilsowmxrcwq]jpwamodaidqrzmal[yglvklzzljuqykuxte]cifhyowckekufubnmu +hqsemgdtjpiikngtrd[bqryvzqcejlkziqbeg]gycysifcawyjyeu +tgdpvbxtvxlyqvouu[xqefdugumgqctwvihz]yxymyatxjpknmpb +mghmbjssqzjlzlg[kilmyfmenoqjnmwg]hzuujufmwyperhvdl +ieqarqlveeycgazb[azjmtbkbixtazbcv]xroiknhtlbefpgh[xnhgnpluemfqqkxg]okbkpxswfoikufwzazc +phtjaokeiocojxb[snjwozbjnpwckhr]cjwsbiopkgqjjaz[rxkobmvupvjvobifvx]edubeedqalxklpb[nyfuqcxwtynmofmfg]zwdaaonmcoczxvfr +fddrwtloipcoigpruvm[nmnolrurottdlkhfwzy]dzztqofiytbyhhzwsy[ovdmmhigvmzuuji]jirdnbaefkkdpgi[orlijsvzupzadsvi]mnmwussnnikjigkkr +gspafobrohvirgeaxdq[igehxnlnjtwfcuc]aeibhshuiyekgcymyty[xhoayxpksnfvdzjwh]ktkoteqwnsouvwcftyu[eqfnhshsnakdnxwonzz]wwfzvzaupuirropirue +bpyvotpfgrefzidpn[pyvnycicdpcutcayrv]twcjgpggepbtnute[fdumsgxervdixwv]ydccutccndbxxfjrxh +okzxxrtdrfviychsj[ymguzlptohblvsj]ofquaojgbjuxhkrm[ingfugdcfpjtyoj]xwplthdujgksrosmv +jbwwuuqkuwrrzxmuwh[hxqptnyqwndsntckqex]mgmaotcyybmuihu +rojskmdnydeouqz[cdmuavkcabowcozhe]znwaohorcanpbyhjii[gkpcxjhxnhligil]qbzwurxyzdakgsnwvh[ettfivzqkrrenpxmsj]dfbcrgpjbivcpcpcoqr +iztjhisgpskdgwxwfdq[avnaibsrkfmlavnyuce]innbnunmtkplvdhq[lxexsvmjqjzpswjyrju]adcnelughetzceb[cmafkyaouzplrel]iqhabfxgwxdrqojp +mcxijhkidamijcggv[buvpvujncpcwxvvt]xortwrcnebozerevim[ylisqiexudovelmczm]sophxrbvffupehspu +tdbjhtyvoiflmgdt[lbwyayxikccooiw]rbhpfinzxpaayibe[twvandevzmehmiiot]npuymvedotdclzovsq +jtfyyycvwwukxvfbpq[acoshjowooeituuy]xicaiqqcrtpkwtu[lnnokqhsagantfsyl]kchtjwkppjyxtwjh +vfzsxxvmxhdpjrlm[wpzhdncopnapfijmlcr]lqhsravxxgptgjs[wwyuluteptkhznh]tthklcbbtbvhauug[nfplnscrhldnwtdyzqe]ockiyqmpnksijbf +dlnpcnognelscok[ibbeqsbqltfskgcgqb]htrpytqxmucqlnane[vtltdgsfjrwohtc]sbykausqnffmqkv +kxnaikbdqxcponrlivi[pxltpufeegjrawwanax]apuwyiawecyuqhgjc[vtenugjmwgebqzdt]jpstgvxeivppyaqwdbh +bjnvrqvazthxmzqe[vhhndcvzvvtdjpu]xvyoyqrjtbnonsstb +rglwwateiuipzihomf[rvlceqfsjsdeajp]umwquiuviykogvs[nyxtxtkhyplexemcvjk]kgqhfvraxxybvapgs +jfhopiiqntjmgdsj[lrijxadhlagitvp]uiwltkpdmqcvklmj[celhtexfpelokeyl]jucghcilfpxmuhsxlj[lnzbuosgycapkcujcsq]uipyywsuzrkxcxma +zbczjtvnmirbqohanm[bssrqrthbgrtjlfdeyh]sajloorydqhdlpfx[twqasimfthlutzbvc]xdyjyaewqxknvdz[exppwmacezbuavlhe]cldjcsqujgldchzigys +xvhlvnfixnvekmxfzr[mnmpxowwvahbtuiltn]facqroxwyyelgbeupk[liawlvgwyfizmas]yxgndlsxircarikrb +yjisbltbmhloiojwzy[uiqmflerfnevkzvnfmy]kecwgynuudxejjvth[joscliommzmbkqcqa]pwypdesmkawikue +hsiwncahwnipmmjwspf[icngtprynzjdnsgmh]htclvcobutyrczggpic[saypixczichbjeve]jmpwkwrnvhjcpglrul +aagdbakqyfriiolq[cjlhszgovtyhykgikl]excahvgfswdnpezh[typkmvlnkgjkmherbx]zuhrtvvwvcvhuzalde +qdunnnxbbpkljlj[opuhjxcwbtvnyzd]gqsaxqcmgmnagnim[sbbkqokcljlriqvwlj]vvgscumyxkrpmyrwz +drtuyztubzingcdvpy[ichljckfcgomhcfah]wpkgosokfjvzabii[gufmzunfeecjsbgg]pbtuedlavgbxdqq[vbbhreveuzdzbjygt]kglhdfghynsujkvnug +iccedgowicdllievwww[jrxauxixbmexkgfvvz]fysjaucelduzrxp[kubsdwfsoejcskemvl]wszejdloyalatpjq +oujirnbrjgnlqaksps[lphfkzalpspyhuxf]kuscphbgysuwhwyhot +vwpxodocwmfhzkhyf[srbxugrfpcalangfdj]bopxssvinpngkthdqyw[vkkyaqsjhizvounptrb]iiwhyeuatcqnojoidrn[xiuphhwusooiewosd]gggtfejwtpburzqyr +ysoiymdfphxmwlmlbm[nudcbwwqdfabqxc]adsnqcsxmpxwrhdwp[kullnmgtapmantsqr]ykmzsizznrmofzmy[cxnrxafdhfprlarkd]pffnyurmoaxrpvd +pouuuowcgcsgvuznt[wvbnsxurcwwxhkpdg]oncpjgpynhzxyvi +vlyfxbogdlwgzbuy[bkgdkemihxctcppam]ckevcpesenqjadifwz[smxfhxaidkueomhxyc]qwokiceophbpdyjovvy[tmzeqvagzhvviakrh]hionrvofdutctqdb +upsxlrmcnqiikdzhlcy[hehttqfmtzwgrmxfo]irippmddtqadjgytw[zkxutgforgpenbx]coziqjvbhjetosrtek +oewwtzgqsoedpidbn[rjmmegjghjfposhp]tgddsmuqxnvfpopcg[iwwvjgzvbmkhcmlhm]teygdquxhyhkrtiyjse[sknqnxtiutqtavvf]bcqiwxuliuhpeto +pdejprrltzgdddqhod[jgwgzdgvdopqgknwbqt]jaxeauvefzuvvgxlid[fpahofmhzzirjuw]enbiyknxsjhuxzx[bicvtjwkkhelcgebywj]ldvpqmpgzvihjkejl +oazlgrzhvtekbje[rcnbajbbtikrfapsnuh]gtddpwaqibjnpmfhp[zxarpxagmnzespusnm]svtfacsjwezouqnyfa[ujbucyylrrvuijybde]bgumlrbysgompdeo +eyescsulrvrxyngf[wpzojptmtmqywwvdz]oicscctycvplkhsb +ecwhdlfufxxytti[tjpmriwkymqufurtux]kvcdcihmfxydmxb +tmlzauuiszcwimcvli[vnvyjnebqbpoaotvcre]eupqvhojcmoweveps[cmjkegzrkspdwmdyuo]rjcxvzssaopikbi +wmgjjrccewrspnkcdg[kqagiunuhskruqpsmql]histajgekuklfzmu[caldsteatfkgwqogjb]hwweftyntccwfmw +lvwovmvymkxwcvuvuov[sxedhxpfwkndxgtwn]jnpctsvjkqsybbfy[coophwmyxhbhjjzvf]applfppvbrejnvz[ipytgyblyicrnet]ogktxhleyrrhjwqqt +xuiednrxcdyejmgcsg[mlmhqtzingaekkj]xmvjiydsuffmteb +zyweldtmlathqbd[zsskrkndiopdfqocigx]mpflfwtncuwjcnnvhf +chmlgfccuyimavif[kpgcuavqzwvekmahgxu]zrrkiipozbierayt[ooxqyjdkmmuaonht]qhifgfwmnavhlgnz[cnbosuyqrbqiuye]ksvsrroennhnxup +agxsrnpuwtpthaijwgi[fhyxwctpsxqkkypdfie]craulpcmyeifxluxu[yypagmcumxjcraxnvpz]zdgmbgteapcjwwzaive[rowspqgmcvqudjxm]qydbkwdeuraznvzzno +rhlhblmxdccpvudu[jhbawwnkolhlfssiw]rahopqrzbhdivhkrl[sdyjjbmlxlpcfabw]olocfasvuwqfxbbynn +xzbhnrzyvfvbrodi[kikpaqjccdhwfmjps]tqeliktvbjjnbpxwtq[jqjvumyqcjodqippp]ufaxyqyvdhjxccwbsfe[pxiqyqpvccnocmbinr]fqjralzkdemnowygd +lvbihonzfclpqyijtk[tzokuoeriylwwjahfud]vqbyrpbchllhsmeodxl[ktbdicmiebbpuxnyi]guxcypoxyjhshqgshs +nnmyoxtukxhrsgt[ecovrntpmkcaekonw]ncfzdxdlawbwtxqpkik[fkkkkxidubuatpihcnc]wqxmtvyakouvijt[tjvyhgempiufanh]bcibhdmbmbmmbyyi +jjyiltmpfvlkclthbz[icijdepekvlffegr]xnmbqmdiaskvieeudt[clfecicrgtuxodur]kqcqrnvwfdhpibndt[xsieatgypudmiedmfo]eqaouqptjuohpzbxml +waqqyhmfacfjbfasug[mbghdrtwrqihjje]jczikhpsasvutpmb[obwkagptmpwgjbhev]ozwfarybcfhihoku +tocybmyipesjprx[jdsdjyflopvltwsccxe]esswfgrsjawbduxuu +qwdwzgezyklxtmnd[uikylllxmtfhnwh]dmozabuomdvhcoz +tffooggeeufibvgyy[walfmmmfaegxaua]woxfjealuwsjajkk +aipayrjoievpqkqcb[pcnirwsnebqijke]ocpwinpdigoxudcksgx[vvuxytomiqmmacndtk]lkwmarnwqvzulsxofid +jwrefdombiesxvvap[fwhhajyhfaqzgym]gersxvbwsbqezoxcg[iaetgujgempehiaxx]llbgjukufbvdfxvjs +hexdafengwxaarjkqhe[brxnqkfcyltwlxc]tfqwhqspdfcgajfzlak[shtfaywffbchkkk]txpanajvkwazozn[jzfxmgozivlbctstlz]paxycypplmjazycksx +rwttdrhdouzvmhalwc[ozryzmmhwztywhuif]favxmwzmgawjdmcho +sndufqsbyhdkyathrxm[spluzodshkuiqhrm]gwctupgaumdalep[urynlbtsukjumpcrgar]mvgkstgtaxmtiufho +miypgghnpfhpcndife[uogotzsxnulstsucja]wrdogybnlkagqdtv[uerlwvvqvxrvtsaycg]bxpngxvmakjdvvdqfed +hgcyvldphesdmdma[inomdckqkhupvxmc]avlnivtukipmdmts +vgjaofvwaodncajhg[wmqzkrqiwbxdfsgdc]uzsywyzfptypsbto[lwfowjvhczggllfrw]nwchgcixmkxheceuq[eanuozoreimfpjooin]btyiwwfizhdbpfazpjx +ldsqkerydfisskoimys[ltqspskmalvyujfyrqt]dtyknopltmnvdtc +ekrdpdzvkoxfkjfpx[dpskecmtgjtwkhi]nidanbsojuexjgife[pgpitenqczwzafdad]mfcmnjodtkvhbknfto[uutgojscjiffmofegr]rwirhlyejxezndbs +mhsngxyweukngbybc[uiapxfrpfptauhiw]ruywrhlzekcudjgkw +urxtzdmrfedalnuuha[ioeyevidklsxpqkaahw]jhcrcdzwljhnudk[dfvcwbualikbxihqg]rhhwlhcfpbkexewpgn[gkgaygbsxboxypxbq]trsaulacafchpndootk +jmlhqgixgtfbcxyt[vhwpsfjufpbampqyqa]wwzszedhhdmztex +exilqpohtavxypsco[wtjdsrkpmulcraoaooz]ozlzxumlxhyyvcg[btpzjjbgjlydtfq]suniwwnwobellpbwd +glgwpqmljnfxjwsgae[hdnpgizkkafrkqfalpg]pskoghwqhabbrazqtgu[howksatecaqyemgxpye]bvrcfhawviubspmkeon[qciouynjddffdlp]kruofqzvhiaqbtm +ekyqqslkiuaxpucbsj[nsltoiyaeyfkygmtaul]eryfelvxmeekndddu[waprjreciavpzzsj]cppczdrntzrrqpk +draegnpszalplun[jwpjzjfpanpyqcxnu]lddilnitonnehft +afwslsdmylslwvekv[ngnsirjimcteduhmbia]utirtwchbjinjtkp[xtdywavaenpcexfi]fsxuipobvivhpowgioh +zpjzyqnadncjcbgulq[wtwvealiuqmxtmgbsu]wyjqglyafposcrwxue[xqmgfmbrcdcjfmazd]hjcjhoqisrvxdtiefm +nlchdiedtvmvrwq[aeqiwviurvdlsaxzdy]vrjrsalrqznvzhwxpjv[ghsoysknlxlzbqjv]cwklpwafgddnupknr +zxqjiqwrswpnotkjm[vdlwfpqexfvgzxjbsdl]avnrytuqubaojek +oklkhatqbeccsctaq[jfvcdwlampkhgkjw]hwnefdbhaixemttbk[xbnquvzqozdzbntm]rpyliiqlbmravsu +dazldpxyqjgbihafnl[udnqydjynzfllmxayne]oasevmgbxuvgxtmurus[alpxiujmrobllilgb]rrgekfumvabcjzmh +zoojpgbyojsophrflji[bobvppelwuyynrwinzj]kfsldwgeqtbvtsfy[icdvpxikjxhdaipte]kxyxztmtqiksvidn +ensxpontjxipkckasr[bdikuxubzmiuhsb]rffefjgowtxzjltz +suqgbqjkbymetile[jmgtojqeprpffkogv]pnffnorgbyrwddlm[pozvbivhruebmmjwogs]fuleotnbbnpuqre +yjwcijeeaqhjdmu[emqntgsefvphvpc]hddshsiudkvrzghal[aieudiuufjmtihwli]bbytteummcluoygddky[fbkfhkdwubnigzvl]phfapgcqrshmwis +fbqpgkdmhvtjmkepui[harjpumdzotcylumk]fglgadntxizpjsy +iforzbbzeepoddbalyb[cutsqxklmoljnexuaxo]ajmokylzrakmmlxcub[rximbemhrndnogfzf]pokqtdgeipqlswvrim +umtkjkgoyutnxym[nizqgpcfftiydbqutr]rzgvklegcqnetqkg +zdykayyaybkihcyc[qgmrngcbixqqdbvx]hcicjeavoycywax[bkjnxvfknauougpe]xjfsxnxlgixldzb[thjemtygmoazibfsar]qzdtbduakjdqteckq +dwwceyrsaqrhiadehmw[bushvhvxdeznysxjr]hnrekmeoxifqrsq[ynfaykimagehxbcxhka]ucdpjqxgcyyhvhobmdj[ywcjwcveqtzgqkzx]poruhxqfxuyhgqog +mcxpgupgbiznbdjjfzn[nxackwalqammtynl]qnrwciginnlyfxiyiv[hvovgilkgigolcolf]fyqfptzmgmzbgkh +kwzvwimdnfngglsqk[tvhytletnpwmogdq]zjndivdpftqyecxhnyi[iiqioqsyphxjxdy]diyppzzxximnlgyhzh[ylyboefbsjwjkkxbar]fuvxtvpoyomnkwjwsg +vlcyiigmifwxnvcdw[enlnmvlfghlbwib]lwsaxkcpgluzkmx[kglnyaprvaagswvfg]vvdeqkfdrjeqhfp[fcqxurkfmmorcenve]copdpqayaaolcox +rxjfsazvypysbra[pwnsoibariykvjgubu]nyuqsygdavnxfakwlm +kkgyhdbiwyexyhxgd[aigctwltgdrvyxbs]xypkkzuhuzpxygupvcz[lwjjxozwzniiywpv]koyfescfdlnyzhcgxin +cmgqspcojjombguppb[atincfnafdmbhtgzk]bidgxkkmgvgbeilvk +fphcdhkhetqucchmtm[ieoeogxnvdaxsayhc]xeigwycormzmwgf[cllkxjnlkjdinvouy]ammsmdyoyvlpldkgy +pjewtnwxajalxzrw[sreuxtjgiwxqmsfkj]nghqriebzmyhgcgoks +trtaefztlkjjzbxpip[fgpnmiewbmzvqfxoikc]wpemgpznkrerwlgr[ptjdchwakbcdmrjwxnf]unaxvqinaglgfeoi[ekfifzrybpfkjiehpsi]bxkuqrbzgfctzult +oyuobptvcbpmiiw[fhefjfnvmrpohae]uykwxrtssawavbuk[cyabwfmaxwqgmudcmpx]vahdtwpzvebiypwjvq[twtyrryywtwsckmff]vkmzcehpgydnorxo +dbgblaadftjartioq[avryclynyjmceujmy]nsqtusikmlamzfht[qmvmgeprwbsokvbzmmc]ddeuxmektypsukme[gqzmpenqiqlihjqoceh]fmsjcayltvsxycmzv +ixacedvqlzvneoqus[zmgeugtrxuidpdtzzn]besixpupznfgvqelwxq +ausrpqkpblrplbq[pzqlirofwbtvjvoua]yljvwgnjvjehsyjd +dmreexcoqmzxelfjeib[zaghgfbihozktuebhb]vdwkqxzetddhhbhhyd[smjdjtmnswvdeuyt]noyncdtfrtokngqld +akpixaofgmscjdmr[oiothmxmcgwvxmx]yjiwdlhqlrqerce +deyrfnzcctnmwjagql[qgcmtvfvpvvdminuwa]tynjoikfebqrxgvyehu[qhyenmsqmxshkvcmohh]llpblusdcqfywcdq[ikngnvowhnvaiwno]ixndafincaxkyqwimq +rjcoodvjnnbhxnlo[spesoflcmfcoifzosgs]qauqixapgyfzvtjbpee[zzxomezynqnoeue]xpiblpyghkxfueapcm[qotnfesblvvyrnsu]keguppozqkwfxlf +jgrowursqweqfwxbg[rfyvmzbkacqjzooslnr]znoeuzryfguydetugz[ssotfccqiuilzfuexd]zqatqqmmdnuiicv[mkijjomihqrtuiuobl]erhrjzotwvvpqek +unyrjnckltxyfxyj[vdlbfpobsnokudzqab]dhhsatcnsuifpwsqe +iscfknfmwdnipkvxcma[shkdzhzbrpdpacel]nrbkhvxfyoslwfhkldm +poxfvymkfzuhovx[wyjhfwnozjdghzuenkx]tpldycstgwuagjrz +taqbysrkuxvxncweld[vquzvmysufavywl]irixymrfapfwvnorzx[wznvlqeltnvzjhd]wgpdkhhoypflubfznpa +veeytotjubsezxvh[mlbakwdftkyfbpid]qehdyxzxctrdvvmpil[cfnhvbvjkuqwyzgie]wxbvbxibaqoefhzkimu[vcdhqkaxllbdmbuxowp]ifrawmsqulaizxxqytk +pbwglxgdiijskqrksnc[xryasmfvaqakaovslr]wslyywaninmrddik[uhieoolqnqxdmmltpyp]sgjoghttawugzcwzstd[zwhohshbhultyyoti]anvjcthgqapmftxhe +wmqxexytqfmdfgzkw[gbjexhyoufthdghiibi]ejhfohkfsaixzvtx +msrjuadzrxxolmxfxq[slurgkvzzfgqpnwdhxg]mhvtwtqplrxzvrmwtw +vzrfylnagvwqrbukxkt[wofldsbvtgzqsfxbl]scrfvyjrwyqmrsbot[bngltozaybaghfij]msdphikahbxebdar +cqpwfhfmgioybwsq[judebliwtcirgrtjcs]zrprctntnwcrszilkws[qwoaitshrtavmpse]zubuyfygpgdycnytnt[ctkvsrkjluwdqeeyku]ksncsilzwvkwtmn +lwtwlwmtqtjqiym[nxfgdevoxcdimcnb]koarjfajilpityyhmbc[emidtlwzhvfmrpqbhik]gsefmkukbjyhgdclj +fesirdkrgznhplitqo[erpgpujpndzzaho]wqzethjbporhxokift[rwelvzaswcwwstny]xgqpqjlcukivddrlv +zozyeoozrjrbdccroq[pffesupjavtnanbmhae]gatiaxphiwsrnnwloj[viampjpkjyrhypjmto]vsqwksazgcaggsv +fycnqvxfihmjnkjogf[jjxnxjolrlkbcqp]pdqtmmxyrfzpbbdm[fdaejpjrasjphazkc]hntqbpjeliiqmtne +yeounyqfhbnbmjc[mzbietsligfkult]bywnnvpavyhinsm[xuwaqmeiaffetkpkvoq]ufmjhazqnhdmqyecja[ztqflfgjsoqybaf]pjnbnrsnmfrgqamxb +ycyxnmxnttqiqnsnmi[wkrtuoeddszbizysqv]yzbksxesoscmlzquqfp[unqyazgxjzdgvhjylfd]kunijisskcelgtxzp[ciyxcpyyefoyhqm]eoqszchkgdhttjn +evecetgcdniectsnadi[skxzpvvuabkudplm]zqykqoduyjvgssjin[uyojccqmnfbztpdnwvs]uzysyjyjvowlsvpqa +cqkietrmjexdkqb[rhubbesuoeclwmtakqe]ivdnvnndssfznwmhbrk[zmjmfprnnowiedabycu]rmgmbgvihdcuzarhbum +zdhjklxbktkqeglhts[iqagcckadjftptawh]ezdtjbiebkjvivekdzt[gwehifbjyqnazsgzziv]fhdnwvcwnamqdaeb[rgxvlygqlocpfgqfpd]kkssrbltmsamrpiedjw +jlttcsywphepmcike[kufzshdcbvfvkwsahfu]ioqzvlzvjqnavymv +cfyvaasepjmgtofy[hhoqwyrkhuweoetwtir]fvpxylsiwyinialjsg[hqahlwsskotrjlid]azfumcjerwanpukap[iqjcxdwtvmvjkoukcvq]koeodiiywozmrtktxur +llaevsbyxpkahrii[dxfpfzvxwpzedtvhtlx]corhjnbybhlahvogj[aeukoetmokgjlswve]iwamrxgeszbcnzsxy +abxkqpiyavrfgxjbmx[uqzsbujxbmrjyxf]dsiktkwxjovhabuir[baqaipezkcvfjyqc]svvyuknankhxlttwng[kwsoccnvjnctnxa]zgnsnelphgyhfolihu +oquaqiwlkhwwfxnox[rifozvbwcclekccqk]mmmgicxioqwhlvjpsu[tndpmsoarmdojex]spywovxndxncbpshb[rgceaghxxvddklc]osijkijuctxjhtbv +ewucowyzjaqacfu[hruhcyudsttblexjwy]mjxsgzalkyasstkuzi[drnyfhqgaemafei]uuimofkacnittaoorr +nyzetoiyaqbsxum[jowknmpjwqdutjlfwo]oalwqxqoyovfjriwb[lvwabzjorjiiemeaacg]znsbvpusrratzywwwyk +lsjzqfxbbuihsdx[akccvjqdtzmxywakf]fkxrqzurzmqusrx[wmkamfvugczykevpq]avcvjbiwezkocfvo +ohoszcqvqivamuaisf[lyyacjpyelrsgafmyl]icwpankirjvekeg +kruylpszzrkzbfxbmk[thxwtofeyjsijenmom]gjblnnkhejpqdomos[xjfzkxpgfltzzfdby]fnbkcvyhwtwmvpykj +dtqrdvxfjedeydhdsz[depsrsktdbsiwudc]unbdedwnchjgetnwf[bhojevqkvcgacid]jmyzzhyslvuhnaizc +dwlyvffagjfzbevant[baalozybgljljwj]jomnxqrlanqrkcjds +kjdsccouzjkqxgicub[ghhfptkxbsgatseoxgz]jiqgnfilkycyuvlwbid +sxbgpazgvlipytzq[fixpxpdcuetwlqprcs]qcvdieujpvhwveur +gerfcffcrfrwvsjw[ypgmjuvhhzvvavtyulf]cjhqxizulglhcvy[mpjpctaxpnlrfhalp]wmhafecpyzjuagisv[aumyqoujcjkxusu]skhuivrgveucfrfzb +rqkibcopsltsjwq[gmnenbrlgqtvqflnt]xuczjcgsxmtbmeaysdk[rkjjglznqblxednxx]npiikosjigixuvlnzes[vqdtacxnqagckmz]bnrzgyqhejnbmtqa +ekzqugvzksupljx[hsjwrqxwwgcdhqhhzo]cqnomxxbemqmhqnnw[udcfrvgkcibabyssusn]zfuxkqiwlbbhssd[pfvscossyfdhjyed]zlwsqyhygkdgfah +uhfxysjbqxaerhsanh[zyuotxgmbwkahzyevkq]dricwyfpfffhxncjn +cmccqegbarzixhqucrl[ztgvmqmqpjtfgfuqjjj]ubawaltzbmhdhqioav[sszfycahkeptflx]otogjwoazgidspib +fgfdvktoaiucefhets[qwjumhonvmtimauqsy]zkzorsvmedrlycqel[caaejbjnvlaqlqonk]ndndrqbsaaweqoyi[ovnpneqkmsbqsav]cepurdlgjkedaaeo +nfhaistnlhzethu[gyozecvbgbkutaiuiiy]vbmcwkesewbbcdvw[zxgnhhbnldllaacb]kbtgbqxtmqtatjc +nuxiknpvosedexey[gfixiukjvovooybkr]nkprytbsajposdjcv[ahjzndfqmisqonz]kzybggzczcwhlnrerfd +puxghpwmypdrhykyd[xioiypketoaohdxa]lybkoxvoraessmzzztd +qwlzyfwnqvxylbttyy[idtjcszoblpujfkf]nbwtcwowujbgzsz[mqckgqkhmbzpwtuekcf]xyquvnuptbiwlqdn[gwgdvbsouphvvovkg]buqxksahwsgvruovojo +nvjqtzkgoenxnismrq[mxybkgtvioipfjecdma]wtgqwbkpqfepskvvay[qqxflmtbhprambdu]iqtqqujmqrlzpdwbljh[cmdesejkyvjzwhevg]qkclggetgpamrach +ntxnwuudhhghcgd[rlyqxrlsbpsdrdlls]qfzxlyrfjeshhmsyz +rxgpjhpklloihtpptpy[pcbbsflfkrknahkeq]uljnjuavjkhklwwcm +byxqwjjdyqqsdnt[nkxqnfrxqqjtwsnpj]xstdzfnmxpkyszg[yswyxmgmqsrvaxdkx]sjfpeyrrswxgeflbncz[likexnumjhlodzimm]crnvrjyaumqgmjmy +skwhvjyhmosrbbziiaw[dbztswjofjvkcbjtapg]yrzwevkwnjjefwzl[ifwifdeiaqpvuyiidrz]kqnqtbvgpxkejxvf[ubyvhimnnmhkbbnbu]zsqpbztopdvjzbpj +jttcdvuuyawsjnode[ahfzcsoxjswcdysclk]ubdipqyzzhafcdusjuf[wtsiychncfnaztdn]teqnxwryvsfwqbbw +gsoacpemvpypmizazb[rzluiccnkviutvg]bxmhsnyomypyueyhqbo[mzxxtfjifzluckdypta]qlirsetsxpkgewemam +cdqotetervrpkaiz[tohfcmgrtozdfduhk]mlgpfaviqgvzicff[snphhquukvzrgqynfqi]eredworrsugqqqowk[fvcdlekaqtuqhhchh]hhrerrbpzzarqnxiwwk +eitniklfnvnilfttm[qduauheufxnjowyar]oxizltxvldookdlomn[igmwlbhxgszcvhshy]knibbdqqnftzglqjodl +ibypwndwhrbzbowoa[wyrgxqcbqoqayqkf]rlnhzutwptjhfwrsme[cfpmzztsrhtdcgy]tdvricsznenkyphwzt +orvqewlxihoswvwlx[ifiaqweqqmaeasrkvxt]icmqkogypgrbjoij[qnkooyxicmbjhormbu]wkpucublpyqfkpjewzd +lzshelyjacfkrkykwe[jehbtylsskmnxigkrh]wgnozoomyzpbyrytrme[uwcvshtsdstibykyrnm]nykxibwjjcaacgg +fgdrabfqaogxyvpqfgs[bandjgjgkuuuxfuh]wwxxsusuuiezkvojziu[jsprwhpeictwield]tbpmjxfilclfrqx[zdmxvurgzzrompujt]ausuaokslerjqiveplk +jyhxxfrgrdjjsorsgu[uxzaififwgjnklvj]uehxdiantcneqrxeqi[nigrgktauzcpyazs]fjyinlukaspltshmhlh[mfvrnccglqfrdbk]qrmbqjtcccjrsrdmgs +nltgngsggdruwrahzhq[gvjujsgoyasfqql]btwmnkkccdcvuyniu[tsqzwyypufxxjhd]dvqickfwnoqtrhokrud[qjhdfcdcsfvdgkotq]hndylujuuecvakzmrp +xyvhcwkqkedbjzarfht[njkseezhzjrbujcdjs]obghjeljjsjksswil[mhfukqardbaypasf]wjcerxswmwvghjortxs[ghqmhxisgehdsyb]ysvgpyswsdfkomanrtp +wdwmhahsrdjogceb[jdwdpxaeemsjficjz]qqysutatflhmanx +cpctsiwpwyifqkk[eebyeqlgxyvaskcoda]sjayfoyavfkaydph[aztkadhyekpqtys]jwzqgyewxxkbisw[gvlxjstngthhsjeybv]ponztgpuhfsndjb +fawvrgcdqdidogtfu[yidikecuyabulhiia]fxfmgcpdbdzdsfkm +yjateqpywpcjcbo[xddnertejcjeedjulw]humaqnneeeynnpp +jutrwhvpaknrwoxp[ajhencapzncoyszy]qyhbpivdpqjeebsirf[lbsqceuykthorgpk]olrdkqyikfzrdzi[bmqrmgcmvqcgaxosaho]dkejbjzuzvyypxz +rhsdxnktvyiully[nciwcjzdccerinfkgi]czljhsizretcfuea[gudarsiefwzfdvfqsip]tedaanrqtnfjdvgm +grkgawgbvajxlbmbgwm[dpfpvpbrcwxethiu]rpfkykrvmatjwkd +daemahshxyowxgjuio[dwhknewdrwoxbgk]vggqgdzpypjshps[arwnnbysrmyfijttrh]mwuwdtpqmiqgfkntqm +ljpbbzgdgfqmvis[zqmfyouebpfvuscncay]omiockdgdxibtmyfwsk +pirgefjkoicryrcgu[qxkwrjfuhqmjzzmbc]jrofqkmdftjbupytg[mywqavlapyesbfea]trqscgjokafiarh +qsycbrrefosycpzj[guklennkilcmomyngzq]numvvwtbyvtfarlt[frfzzodqottlwzj]qumundqekohrpin[rsxaymghybsvzymhac]wkmbavpbqtoewxruut +erpqoualxstxkzkwgf[spsetkclioxmkpobkij]mocioemqrazrpexy +ryeoamcyfewnjlbdfsu[mmelohdonphatmxblhd]wgkjtelxmbwunvaxfne[xgohvvrmkweaabsd]dkukcrasqoceqjyehjs +zkmkqzphahjdzwot[objfpvwrjdcdxinuvi]goabmmhuvavbjgebdow[jbqupsngpnuoubvn]xofdcclnjyfofxnzyvk[mkmshdjabucvgpkteh]kqxuwhyogoxhgwqyyvf +yqlzjzpztzgtpomj[qcmfrvyamtxxtcv]hupfwqhpdvdwfvu[edoxxlncqxfxpsls]iyflxxkaztzxodxfd[xavxxfdkzquifiwuu]bkjzjuxybfdjcqw +gspnkpswktczjhi[pkpwicpaszrfnsa]reqjlqsucfsixykwmg[matrmmvriujnldbcuaf]lckpqdyikkaprdje +pbkxtroofyztckqg[arrmawhzlhytfodqb]pirguzqkvbgxznqnn +mmybfuxiqgljxdih[dzgfakmxryeoylimdqp]vizjwwrhnihcakb[njplrxabbturflf]qclfldtmazmigmd +exhynsvqvhtzexfjt[rdzxptfigworypkcz]disdlwcxksxjghkkbqe[ktpysvjomszwxdmqdv]cmwenbksdvfihvxvz[vrxbmhxkfjwgktuy]xpyefktsqohxwkaowk +iiuuszfrkqjprgoumy[svdcdtozwwtofuizxg]gkenicdslqaemvwlov +mldgparlhmdhgvz[bexmggptmuvhkjj]hfnccpxdkireolxpe +tzyrycryhzonuxekwt[cvskbxzwbuotnsu]pvybsdovxceqjfmo[oxjqmhruryormwvgkc]kiygcylmgxdjubtefiw +egklopkulrxyltcpbnu[nmbkrgnsjyfjugcx]bufmkakubfrwnwai[pprytunilpvguaen]bceequilwywvtvmshg[aszamqynotadciwdwzk]uivoeunohsbulzpxko +ubhofoouxcmdsqqkjbv[fdvdmyjaukqeuaassk]tjajanohfobuhgih[dfscfkxpzwoqobajau]aspwsctdasjdjnqbmt +urlkduvyyyatpkb[zrolecowduswyfn]bgkveercmmeecop +aitmhwttzyrqwwk[lxntglszzkyjrqogob]exmxyvhwwcopudfekgu[fzxdevariaovvyuof]almvqtftjsdqkevnw +ftftrmapzrqqyql[fmxcumhriyippgxmy]igyxwlfgcjfwwwgpy +ftkqjwepfbngstefaji[ekaiaqtwacopwxfcf]deswaixrljslcqc[nqwlvvuuziefvrd]pgfvwqsqxeqamxsjjw[zispeamntwboenxygcp]cwdhurmclfnjjjwjygh +fixhqdsaxorgfndumt[ccglwvkrpbwideuhvx]fgsxflvifyrzlznwvp[lmebhuhqemgwxpuvb]psfuyywbujlpwcekwz +otmnqzcbakdxosl[skiwodrlvhfjsuqfsma]wtyrxmotiqdinxmrbe[lhgprkzlguroolg]kjgvxaekydqxdepu[mvffwznlsunzhxknier]irzzbykjkzjdoybqg +aauhucqygvsgwdaqfa[leenmhlorfgbyorrd]soryphiyiqsoydfkwzw +aggwrqdafwtwwqjr[eafpfpxygvnfblxikwm]mlgoiwxfigmduubsr +rglpanreckskdaojotf[yuywsgztcjzyrfqawj]wzwtndwugnelcmxpyme[uwcqyuebxpprisdls]kjisjtwisxawsufrd +uqeuvhdoyujlazejbix[wtdxrqucvkbkavrvor]fclqcjvpxqgnkkhi +mgpszcffmfxeacayj[eorkhzrwqvxkrnessk]wykadaapxxqmohwriin[iwfmoieivcljpem]bxhutydaznvlbuu +vkvvkjckohpxkolpff[pepxkcsneexhhlsjs]mffyiopxkqdnwlg[qmkttuxyhvemywmu]puqepezxejnldtlf +fkyblzyluhloblrlj[uuznhpsjgbnzghjczsq]ekddnoeylbefgmpwjp[gbfxttshaolcvhfsl]iygnwnznafbluanu[mnylijsqhwlhhbq]ultecropzmivwizl +rwpypdkhndrotod[rganbztsadndbxr]dorwmwqoeppdpoyz[sefhqmaxuxqwjpgaofp]kerdiohsaddctmnj +hlzqtzrmmgkudvsaxn[wnujyposfazclkutfq]yugpiuxxydkbjtqd[bxeuhvpdnzqzvrtynq]nqcwrvbzjijfjkmq[gviaheipjpncyxq]thgypvingfouyrdexu +abnhtjtbkrvmukjsbi[yivolobglxbtivbmlxe]gpoearvtfhhjjxedpq +uiubiwrlfkwrsnewvwz[xymjmptyaoiartx]lkyzzzynibifaahjewx[ijvyqumtxyumrnpyfz]hddwfrbrgifyegaji[tguxrbbrdvhmssvbopf]ykkkdwtdtlajkmbgnww +omqzieitwyasnbuae[citxwhjdkqyzmfotup]enzrramzittuhgjcv[fierpodjceckpxwoiav]edtoxignggotlwka[sbjkaiypsozrukh]hdwihijpdemzcdvlsz +rummzhhnmypaltcxrja[nbcaecgbuslkyfar]hhfbjgrmbmjexlllok[swzivorldyknmqbnmtp]yjimyhqwgrgdphl +mvpjigwjeejzhnr[zmxoaofpatkxkbecaq]szixqtsjizfgvfioq +umnruavumjfrbywaswu[aeypnvqccjmqfflsyyn]anbehjastasljxkg[kwsjaebdtuslcbae]corzitvsrhthwmjsny[gzojgomcsqjubqrwor]tcektreziofkfzlyp +atrjsjmfiyyhjjpcq[aygsawvwkgmvjly]nvxcabdkjbowvfiuqim[nxwlnfgnkfmmrdqwva]bjqsncyahbgqgcck[kudkiazyfbbvwvae]egtutxkpkpibqcxd +yyxasjrusephnhgz[tbgueaajlxklmqfzfxx]rbirjquhusiueda[wwyfqgowviapcam]iwwwfcjtyuokivtkaet[ojcechttmtwizhjzb]ilybbjncssrsdpyvun +ouzhmpmtsxtbpgxd[xkpvjnalwhbhiwl]dohtpyllehgsmfqwio[pswfztwnlizwbhbopug]znhnnlkxrlsswkgrb +wdfqtfgtawjujjnipv[ffiedysbmudjwegxa]uixjrzxqsqknbro[uijbgaxqvjeiaddellx]golimewbjgojubbk[cmkrjtwjwjndagjoidq]kuaetseghitsonmjxez +hinvjpjfkrcfikcsnk[neznqyunxrviafftsv]xxzaxudvxzpzayzu[igikyqxlllewgxp]bbrmixylwkvzstannjk +jnfqvpcsjlhmsgttoo[keugkkuywiztndixql]fwcomunksourfiufwgf[vwalfwhhknnkmlelb]lxwrjniskrxyxxfgbj +hmxhwwoaovcmrsjng[caxzefbacuvtevwsn]lgybmbmfeizwrbfrzuc[usgudhgiwtuirjfkpz]dmohwrrvvujowdchnh +suctmalsyteahln[iwbpvohjintrccllib]zdppjeyrkkjlwgfp +hmnzkxvelkvxzminaj[llmbrsvokhyfowaimt]otgsfjkhormfnubhirp[cbycbwoqvdgyvbnmkz]gnnjznpxfxwfvaoc +jniltxvpjudmaao[ukqflhglxrfpfjg]djvtunwwabljjdirgrj[zkfyhzxkarvjfrbzbhx]zrrzbzubefvchvrpftc +lyqyzdgisrvolizgkvq[fcdlhezvozbrglr]lcuqsfwchyucocowuz[acdcsqmgffussoy]jlnuxatzdobackkwgwp +gwcvsoqytskjaqo[rfzimztlooyjbodjcud]ewbpnbzdilxvjmwy[ugoqefqofiwkgnv]pugnbbxqbmpephsby +bbzqqwyepafkukwqjbb[sprroemdjetnbhdu]donxkujxpajsakirfap[ybomycmhvmvslykfxuo]auqvkrofncqftmjshtz +qbxmiueonhzkluju[yocqzkbdskeisgvm]kaasgmyupwosdzbumq[lkqmadnwplwlawznb]zxldpcgbouydtatpo[dqdshurolnithdof]sscgvlgvpgthgkhtszr +uzcvcnjawdeonomhoh[lnckzlsxtxekacx]ogcbcsdksosgbdlrexd +kiiixiatixklryllfyd[bdtcggfxvupbohvclg]rxwnmgvwphunygx[jisbxeqdcnocecrtabk]cpbsvzurbvmtwucvhk[hlrjqjldshzvbrn]wlmkcxbepdkwafeovn +xavkcpvzdiowrpduy[lujfjaxzrmxxcnxfrlb]szegppqkdzrwkokbi +ojlbyagshifmlrv[qexvdlykxlebrlrjkg]lvdobhyszjfkocbmt[uorpnorysdsqycpdoje]tknlzfganuxeulzv[amollnzxactinrv]unmkoyxobuuzfwduxa +pjhpwsfoiufywtd[pzudakbhkrvzepfl]cnmjmtmacyjulpcu[yvevxufpkzfrksn]qqdusuumfgtaemuscj +ffnxshbygoxcatgz[byegatenneixbjbrri]xrxazipjarxrrjj[ilvdkjlixdbdieycbvz]lvngjqnhjjhlvki +maocxpwqvhfgoaoy[jthtqiiuukttxhh]qpvgjokizpojnsvgg +vstmpuwjzkvzxakgreh[vwxiygqjyyvmgvjdhz]yanevbmxttonaonlgeq[rskehprefzmdfujh]kddqkrshtgymbyf[tdciwdrqgnrwygvlqwy]mwyxsmscrhxowaezs +lpetegprilvnporglm[efutqcurzhuymzl]vpuzirgjkjkqmpglqoc[ynrhizbevmuobpyduap]joqowueodytoothjk +uovjoxozjbjgjoedh[hdufcoupnwyqzqsdz]bfkcibjpdceeawfsxnb[pmfdhpjltsthickltq]wnvrznraeqgmhfh[zqsykjfanpwhdbm]oltzbvppyqrhmom +cuptpflteqvnaexzwj[sokwgqieratedygx]tlgoqkfvmifmdguz[kfiwutninqxzwie]dulfdtlbltfjevgp[oftsoxfpwolpbvflmvk]xfbcennewbsxcgin +xoajbdvgnaxyewthsyy[gbvxbmhptnkenvoef]iyxfsrwruprnhml[pwrbjucvopfozdjlg]ntsdilgkqjkwifjcmqq[gqtizyvtmqydqdemxx]llggegbgpbiebcsg +osoqemdejeowlmtbr[gvnuwetgdhuzlfoyp]ynbzmlvpoydjaix +xmtosmglxiswygqd[djjpcftewakmxhe]cxrcujdbpfpmpqaqp +kmffzaniobvxkqobrz[xemvsxzxpikkgnz]coopvxaqcwwvcpzzbwc[frbwadxyrqsjmeb]solyurryfbhunkug +syuvjlrlrotbcxtmqlh[plnbhkottpkhbgrmmc]tpkceggxjkkshgovp +xypvptyubhdywjddc[dkdpirtrddhczvbi]gppnmtijmtndwsd[jctdyzyrapkwpsudre]ofnnmlflpjenwqme[wjlbkjvlxuwubdkskq]zmhodofehapyshkw +zyfesoxeyyvugukolxq[sduqoqepedvxiaojef]ujbihfjhwwrxjbmjzwo[fjbbqkruyeexkrk]fyjhwioedesstjkw[nyhqlxexvrlglwcqbi]zgxdbhdcqgccgodx +kbgeflyhriyaitjdw[gkmsfhbeeftzvlkkxd]leroadltgqyqepa[apzlemfdxyxhyqy]bifkxoyxysldsif[bypdkygwlqgxlhmay]odffxnaayhgxkyjsyg +etnylemzuybethsak[rbqwbwcpspvwcnrtiaa]cxdlfpvaizzsiqy[cofixscwpmoaptvu]tuvmcbkoqlfljpc +nafgslpawkgystrbu[lholsrbjchktftlct]cwxorzjqzuibydw[wolwkkqcflunakpsf]ftfjgybmpgmpzjpxok[omccjdarvniomtniw]vmtkovkvuahhcgj +arfxtgjhwjbqqpn[ozbglzichfmhnsrmc]sxwomutyoliqdfrziy +yrfbyqpslcykicx[uoxnsxbpkzuarrmhesg]ohscdwcojgysjov[epkotielizvhfbauf]kdichwakhcwuitdohe +lxdfxhtcxpaqfgud[kietvvqhjbhmbdjh]rnnxrywwubyivxj +wwqhnufhgdpwnidwe[trkijfvlemsenfvm]hwhzclbeilbbpmbdgvy[kcqrejunfyofjviz]ymhbanffstqwvlkczn +bemjirozvmspfrojywv[gnkvjdexdgqeqvom]akfgpxfgjwsymkegz[yrbmhgnacpufxmilwbe]taxwtqhrfqehzvndlix[ndjuozknfyplqafyu]bwogrlytfyopgayph +tzrwkqaembipwoyysy[zmjpcdqtbucakwta]eelwgobyifozmawhaeu +pxpftlpvkjcwicy[ordfpujlgwgxccjcvc]ghrlgcktvifkicv[kteuygrgxnqbaagldhw]elebyndnyuknsxwsz +eoayeeinavevnkocsh[wlhcijujotnsmyfwrg]nsghlrcpvhazacbriwy +myqilamxvrkimzrypsq[dritxccifmrgnynl]ahpnxwgmmlcrmtujqv +prjupstfryhiyxjr[nznibizpdpgsxozff]omzpiwgyqqytncz[ixhfkzmhfpctiaflrsg]fkxetrnjkjhwmbcs[mgfwcdxioxwsbpbxg]pnmcyowtigkikfbqem +obihtythngvjelm[flrqufrqlvaamtlt]gbuppvlrpotvhgoivu +wdovdejwygfyguc[acoacyczfmzugdiwfy]hbboqkjmpktiqigkaxi[eirojscvpewshvdslgs]oloathxikscihfpy[vbwlxhdnmpcvhrdwm]zxwsxrhoksbgnyva +vuaiucuvucxmowfvdc[pkwwdrystnkynnfonv]bkguisxgqtsizbdpon +nhegyhsxwcesxgagl[jsdkwvzzfvxuxsmkans]cwhuierxyqjmueehii +nmtqqwclrkwlikw[drthkxkyfxqugph]bbneldbvtittaydbgag[vviulwoviezlxte]oqzoapkqstfdxbxm[bmhsjxwoxtflbqeo]hnsldpfruxcdnvz +xrkijlvluezxevaye[erofwbtsylzfvyrersj]bkvnbppereymraau +jamtmykfjuhzndgnzrj[ezhkpcujzmcdkkjjfbm]yojgtkoobnwvgendjt[jkeeulmfzdbfwnohfaf]cudgyvipscncfbvmlh[kxikmcqmpounqkwjhg]emsdqszhrpxpwcwb +yywwadanokysrfh[btwstuwbsdiotcudf]qrsrtonegzitpgnzsvd +hrhfutggyymxzgyj[agqctqvhyfytwsdmzf]ozyonngtqdoaagdl[uuykvsdfqdknray]shhtieifkqfewhopney[ydgftitgfmfdqwh]dfxovuekyvtaddh +dbsuuitjdsiymhek[jgxxnjjzwgwirdlgwg]xwlvqyufgiwbwyfhqn[yywjhwiwijsuhlarpxv]zmpooqvlrrnwdfhsheg[piwaxxvwgzbbruij]izqwldwwjvrxmzuj +nuxzejoidicdupcgdum[nelehvehbccqmwnla]bhazpsnmekeqkvr +evnsveqnndjyarol[tgeuojqlculphzfva]rilaooxfpwyreyh +hhwvcwpwgzktzotcrx[khmiivstojdaciyzb]xwaeqbqyqwqltdx[rgwirleearklteybyx]ckiyopbgfygyvui +zpfozblbuwkdkkfsuft[lccwcopfworwnry]srwrcwdkalvsnsu[jmgukelsagifrhkxqma]wtrtztsztpnryaqw +iszcbgumuoarzlkblr[xphrddxkyclfvnapk]rzryxqdnmxplfiu[plghrphjxgqlxtp]cxpvhwxkzkeczxcenm +aezqpvhdbflknptrc[zykqxuzbatudehe]lugjrgmxtqlxrvt +jsejnywikaohtarsxmp[whmztgiaadmiarwlbj]yjrgwesrymvzhlades +cxmorkzlibiuyjgs[nyierakbbzkhvyizl]hmtqhrxddgdwmoayyse[ldupkxzsfkmnsfdnzsl]sfpntvoniewgfnyfw +rtlhvogqfabwioi[mloxkofbaemaxcfzdo]ofeukqafbxivgvygl +rjnyhsocogdwhswqonr[jrwafksjhfamqvfjk]seiscoezqmbopqryc +txdcwwtcedbymvxy[dbhxqovjeifzsuvm]alhqphxcmfmodeb[zdzxpgxeezjaeichq]ggadublqxpfyoyc +rvoblfajodmlbftahtv[dgglfidheitvcqob]uzvojeukksuthhlpyoc[ovnskmuaaxulloi]wqhxsjbtaqbgjpbw[ohmzmzpqzevicbzmtk]yjrbmkldmwmmcndia +rnsgsacbysmwnhlqjps[hmjfyywxcpxwsicxit]rnikgavmgagtsoqjnfp[qvcofkevjqjqhiqhzek]vlhfbggnwqwohspyig[ibsdkevufgsnowonkj]ufazmdkexffmxxfwf +qkcfiavyhcmknbqcjtq[lknppgsvbdvpftnzcgo]qswbyhtruabsyhvz[ilrimrzzjctbbwhc]knpudsvkdphxsuevep +wmeryhgvkftqiyctbt[terkorqjaagtbsp]hilrpcfcjsyguukcehn[scmgvajuiuybvzt]enjhgqtdjabbkgh +kvczijzgmasricwj[xhgvyfhnaxeugzje]xwcxqjegagsjbvnuskc[iiokktbsnmwxknkqch]vtuobocpydqweamu[jgmazxfjiryndgtcqjx]pykbsnsoxbfgacvgpz +guthejosohmrswzgk[uqthzxkpgxlcmqyop]fxedavqwkrmzbfr[itsvdugwjezrjtgqmua]yotsdzczslbvzatsom +lyltslrourlevnxw[dtiihjdbejwusjmfap]hdmttxgttdqytvdfpp[qhdrjcwprncegzdfl]iinunfljrfhgifws[fvjgcqtqgxqtgca]bzlvdtdsxgrtzuvh +ndwwncgabwoynmn[zbxvlpndrsbczbklwrb]bkcrlonwivcipxe[eoliublkzenpeyxfk]voydcapbmbsiuvqfywt[mmiirgxvnbpnkyjh]pgkocrralcozybthp +lvrcxgzomstmslr[vczvuydqcmhfmlt]gmogxiffrfsazqbh[yvnoqlavmbnattcrgd]tsbkxinrrbbxypwnafo[pgtfpwnnlxibpjchgd]hznabthirzxjipjd +jtczttrstcpmsko[mabkmpwpcytkqdmhjc]jntwxslpyrkrehj[cqbvlkhugmarodmoqeo]weaiacdfakrkuizqw[uiwkgtbzmmffxrhtn]lhygapgcdaszgoyy +ahnbwmiwwwivkykv[pcsiuyrowqrqfxcvw]mgksjiinoudrumr[ocwtmprzvamougd]lvqqlgaftlflllvqo[akvkgazplkkvqshgbk]zvyvtmxkttxnxxdy +tsbifacnljabpczi[cmmjarpfeeyoeplv]zsjcjdfidfjvcgdd +vaviqqmsbqellpw[xjjzxupmjbkyuzq]putpqaavecqypslf[nkyslewbmmsxvdy]maszkbnmujztqfbzq[hjwtywxdrybhcvplncc]bvgsnjtjidiuvggo +jhejwzckrrrzcjgs[vjkxxdonhncwkykwi]kyuvbdlmkffyzept[jloktbqtmtczmjbdord]uzggzgltjzngpsboyxy +rkrntmebnqrkoboby[gujdrcqoqatyewm]qhrzxubcwkrkqibjwl[hvnezryivakciaoukrd]teefauinxaijxil +zkuajphbyhsxocacplf[tqkosililhbxgsgp]xttqprajeocotwoixkw[hdmduoyjxcizwpa]cihkdwlaxhjzpjw +xzcmplyeabfrcpfr[qhfkyjzmivvhbqeblph]bkwydbvhtutbtytnrx[oslchcvrlcxmsnbqoq]zkggbeglckihzjuq[lxywqhpuarhpasbul]vqmgizoanebmehzfwyt +bjrvsfwownhpxsowafm[dtmxsbtquavgypbizrj]boqoiajglkefiwaj[ycjpupieshgdmbwp]riufwociykhnwdsci +urcrpmkeszzuctovhqu[vsutbxseevalnah]rwrptzraxwhuskb[inpentirbmcxdvof]nvtxiwtlkeknxfl[rddddhtpudrgpjafk]cojkmbekefbmuwev +djavlwoikblvsufxrb[suujlpxslswxgfmrjj]drrpikhibuvwdlhvt[iopyjysnsjpyyxngdfq]sijwvhrwtourowgv +kitztjpylzlaposkaun[szjrduixywmdpxbl]kaltysqcxzjrengtkwv[jhsqhlzxzayxdbebu]apyxjlaydhhokxacq +kvzdgclklqsndxdo[kudsmgggtnwtxdnrev]quljmegosayhdwum[kklkxlmmmtjcretlyx]dtsexdvvjndpxtggjlw[mpcaczddrmktrpgngw]usxsptmzgzqhjaycg +oxvlhxlmhhyqgwlao[wiqlkdwjluvqwgqp]sbjmqvssbwefsvq[ocwwdefylfgvgsygfbr]fbtqyawdbswjpux[loeconwsbvgbccoz]cdotdnnkzyaupynuk +ykozujsmdopwobif[xaupavllckswbcyszd]jqdeagvmvsxpumvmu +naxhmkdggymqhjcycw[xkhrapbevbaiwzdn]etnivyebbwvqarn[dnskxishknmcidwv]uctdvqkipycyzhgcp +uktvpthtrtlgmwofun[rmevlwmmvzucsuxqx]zokkayofazorjdec[ickalywptsyxrttbynx]olddxeqctucllsvrvhn[pxfftvrdqdglkvll]xymmmimcqskfozlkyos +rlqkqjeaqkqkdsfb[igleoesoxntrdwsyoz]ujmbnjtysangjwpsod[nniriilejnvzrrnn]mbqjytlwauzscjj +egnnnubdxhgpiypsha[byoisscizhhpsjy]hmtbmbgshscaxadry +qjafhagbtdpvszwlpz[ipehjbasniypubhfb]hreoxsqzigscxhnaf[rntqxzmxfxdldnpxqb]jriknndggvtkifa[kavxsbypdwmsildd]uisivvrtykssbvmsm +rwxhzignxkrqeuy[memzudqlzcfrgudefyh]pyoldsepksbcbthfdcw +jhgyboztenuwlqu[zjsmipieimgaypipjm]jbjlglomhxosmwypq[lvpsqwjvzepgvzbfs]ergqdyrvicbsgxg[ugcuougnecjcrpav]pzgpppoonvamxhkbg +mdmifuoicysmavfkvtr[rdcuzujskhncvsy]ypspsiiizkvopyb +tlwbtllklxrkyivnnuw[zqphdjfrntryqssd]uuefrmazhsiqdbodatx[zdptibmcvohmnwrv]jofpqdvwggfsdkz +rkgfksxcpqkspdsx[zubzkcjhpvtdvow]bkbmwwrfqtmaosodlhx[shxfozufozglsgfj]tbtwcavcbvhjourcvu +ayayqmsdvbzfnut[nzwcajbcbcduifari]eazisrtfqhzophb[zkgweftquububoothq]lrpktclkzizrutnybq[guuneltajlsxbbx]rrakswukxamcewdy +dtuezfpubkdvxojau[ipzyfbjcwxazbqeslhs]nelubzldtozljzyj[uqkgjszhpokhonrpg]pgaebrtqevqblaxqa +bbduqlqjpilanyikfb[iwngaxahwxongrgf]krgrarolzgmzdtj[mbsttcbkbedkcmbl]whecpxbvhuemjloxkcq[lrtaeothcehqsmbes]chuesxuwklohzrvgjkh +sextateheibnehs[ccvuuyctlffatnmhie]xdrwtaeangizfxkt +nayfogrvrhhvdfqf[upaiyvrvkcygazw]wtsawgmklbrjjhc +qumnikpzpmsjvfiwapn[fdqlumgxklzlxcm]dczsgahneieodmhgvgt[babaxdoljtacfza]teoddbtcemfketpp[vazvzbcnqacbwcx]fulxjfohtywgtagn +crcyymrdfaawflxfmfg[ovbkvuhdrxdbhmyphao]myqpzivnpjyjkogknqz +xfkrzuoeclfphdae[wfuevmepzjjuzlbc]icytgjlzxvnjgugxyv[ppqszfvkmppjvktn]cifddqrtlcodiincw +gobxpjjturfsgzell[rfhdgfzwpfoztzgcn]eworfqsmysqolgq +laagoxczwfikjawci[sljddbmwqdnwxlkhdi]hwmoerlalfpjshedio +wyomncmyxejknhswjv[awtbfqiarnoabkab]nitvsmoxyfdhpcdiee[sipoxhfskauxfskix]nktheznrekmrrxl[gwpmodgajfihlnad]pereyxjrernitwktv +xxkbizhzxvqxbecadt[omafffruievwfqocujp]zpuotjhjwsdbsxteza[otcdtybhkqhjhvjjz]zjrkvtevohcfvlvq[yjdkpxspyojxstjkv]fbccdkbjrebcrxyrg +zrctbusxagvjendfdf[szvxchrhjussntb]mzhzysbvlwwflpx[heijmktbzrbgqsklhcu]ygpkfilealopaixduvm[rakktnzhooijvydazhb]msnpudxdeaujqysbje +xoemgrrmqqtfwtnwnyt[jextspoeediexugdgc]foyqnwnwstrguzk +siuojescxsrrhvgpeoh[dnizqgnuprmevtqws]jtrkiydptijrwewcqz[zkvjwozfadmizvhfdk]kamauddrolxbdrn[yzfffqfeadlyfje]qanqnshkelszldi +wdiojuevpybfvdp[zxyrygvkvufixzdwds]tgjzjufuuwenexe[outgdpnnysadoyeon]hvelposyxhlvfmdi[gazrxuhxrfxofsrxq]wpkujtixgvfrdgg +pufjsqcfddyeghd[iylozggwqlqevyb]cbkdjgvbrpmrwrsgn[nuinkqeqchwluhwye]baetibebzmndgrulqdo +rwwiamjdgdfsttq[xnsuyncklmryvumrii]qtcphhihqqqqtntvoev +bwhfulscfcqggdswt[ostyvvcpdoyzvuhodeg]ekpjrxajoziohdvkfco[tbbppuyifwtcgvci]lwjfhfqfmclrhdhplbs[pplppkgrmykhtfnq]sfvskkgimpacxfam +jripvodavtgdgkv[isotocixmxjmcldpx]oaptjpebswetmacnf[zdlipacteuduvqdhcfg]chciftufaejhxkmpozz[cmnwvdkbsczhekzwi]ovnjvgsuxmszncr +ylpnqmqhlnmuxei[cyqofexibcjwunyl]ettxreudzmlhgtha +dhmperfgtcbqlipcjbr[gkmgkletrzhoyhfcwb]psllsosgwjmtrvfanv[fimdtpgcoolukvvpu]ccqgkaqltrreqchxpbf +huvrdvtjmncbokh[mxnsccgwblyahbdao]mpscnoohrsqideuhf +pfvpbqmyapypiubxmt[kjfhekecjzzqftpj]sybxxlmvzhloooom +iicuihjkntpnytg[xpzlplwvgwmzazj]dfiftbbvxbztjpx[patfyqrujpvwbsl]mxgsntaernztshbi[nfwhtuuwhgsljivcrws]iwzqwnbjapcfujz +fdiifotbpdpfvedsfn[ptkzrnhuybmhzkh]rmxekkyxbqxmxccc[icwqbjmjtakfsqbd]euycnuevdyommhq[dqfyackkxmvbehucn]aabiiukaxiowhbtbwpj +ofaeegcqivqrmtz[nyotqurllbitpijzdz]pdlsomnmdsbfhdzdh +yxihvlkrcvzxhlmzm[asvxysmyxovvxdvv]rrwmvextlthjopu[nuaoossiaxivwwxwpa]xgaovndeadfyofish[dpdhiwlsvntqxypdpy]ddmbndbjtnpazhj +kfqeicvkuvmsljtsez[vplnucnqgngsbfv]ycjwthuykmlfejqepad[ngklfmgvredrinryy]snsxjeqdinbbapwuno +yznxssrnyacwtxlfbab[mpjvrwoguxgvcbtbmdv]uflsilwcemofepjghvh[cpprubjartjbnrdo]pocdfdephebcdavrxpo +xkiccyvosgzxwtuck[oqqbviclakixdgc]kteovpyjbcejxui[mzuzcghrxtkssnrsqy]hcdpzjidycnlowgvaxo[iawhkiyhbswqsibqp]ltyzmuplqyoivgmzfa +qllumnywkyqjpfv[lgkmvmbdwnkhlhqfse]lroouhapmomchyeghsp +egmftdtwkpmhdpda[jlxrjvldyikwjlcwx]inqnhjexcxubtzbx[nxiniqbbzoedxkyc]siepprpdulpnkrussom[srrupzubqhkmccxcnas]qylljcyzwypwzumem +ikjwnxkhkzqmppk[tzaysscnyqriqxcg]miabsouchfluijdwa[cmxeoduyguwjxqcj]ilprgkdcvvopotdzzon +cauxikrtpgqgwydmagf[nrnvqarumgmthrf]xyyopmoyoampemafwe[jwjgmglxphjkvfg]oxltiecspkarhualt +pjzcgmqitucfyph[cxxlbsznvwpxvzghv]woqulnjvvfjvjzy[wgxczusgzxnpkakki]fvtepvwjkaozguggqk +fgwvbbyiyljwmkgcmic[gnohlyijeqfjldrpqey]qbdzxnxuiprcwjsn[ogtlzpxxzbtgfbjx]wxgaduaiyihyumprhe +mgemsvccgqreluv[qrlpjfkdoinuyou]ovkiqoqefrjmrzgb[fzmqpuzoufcybpucq]aaftwlldjkholezzpk +vxfsphugegtougthxk[lkvniyzlltosedmpgr]tomgbtfosxegecoqtn[mvptnxvxddkaqnjvnue]kclnhnpveadosfktw +ltlrncoqeeupwtoxv[yoosiulyjjmwacymwfk]vdgfdfcjubkcbhiixv +ediaeekjpbzidrfpu[rowhynyrchamhzrp]wetzubsftjwuksnd[yqbtzngplxcqkyxf]blzuvnektffqbkf[egmvyplsbysvfjjkr]ikrllifuchlkthknpqb +ohspsyvzulzfsgghvbu[tvtbzqptcpguecpgb]zyadwosbwchbgrkypj[cphkhvagaasozym]tvgkhkooyejddnhv +uxtuhgkkulhrvowswt[etzltbttiofnkeyh]gsgnleidfbomktjtbrq +owccdxohulgarvvxx[pbbuwbbkrgqlhxa]lqbqozlyegslpxvr[arduobjtbducuoiwykm]tfziqcucaqjcfrc +foxbwdzngattycaunku[lnkqgrufdcqreruqp]otrfaarzydubngucw[hhaqnaieublicggcep]jjvurleoxyatgtlexjd +bxercunxdkmyxoo[zuvlzxstpwfmbnv]laszhsamraptopjmfx[syvqwydkiawwwpb]dyrhipcnwwbhmcotha +mrcbhykyikojmqmxr[gijdvcjehxyzlpxms]bkzqdkykgcvrlbdcpck +dqdrhkhanojahvaof[msammceatlnnwypjnk]yxkhkmiroydwvls[bgxvfxasrtzmiqpueoy]esjxrbelpjsvdcdx +tuxcluskqsebpcm[xplkqkfmkdsjlgnome]qkweswhvzqmpkujows +nbpwnioczrkicxddphr[zmtlntcztddnmcl]gjultcfncpmekcsosbn[pzwvjmfvfkanhxbhcy]kafsqjaraeicizjy +drcviwihoplftyb[xykuycwejtdqehmuf]kfmgemdaoetwhczw +iuqdiepdheskvvgvix[ayfqccpnsyzawotpt]xjmljfmrhvqedfsrdg[rvdqhetiopoykpopol]lnqyxioswrssucownvu +umqpsyqwafisrktta[eqncbzzavysoixd]wdtnkvsvsfcvfks[opjoivoqobrzeepln]ziqmbmxwsppwzfro[mkhssttidvdgsvstov]akkdvcsjflhxllpblu +qjlmfjwtglolrdxvqk[yufnmwyfhjrqzrxrddv]pzcaaeoitighunvg[eamjujwzolooemhj]mxbnbjvuikcycvnfuh +zykdcejnrxpiimmbf[ofuzkgknvcexqzxpu]ketlytmhcmzvwtssaq[pgruobcnyaqmyjvospf]jkkvdoervshvgeqwj[fiexihxudpdrzdwp]pzmgprenvskgbgupy +edesihewpfcjzkjhhk[ydoqcgosoyuebpoib]oaxftiagsynwawlukdo[pobikbzlxzzatth]tzvwglytrgbmlsdikum +rvdcduthikkjrfx[oxwihjkewocfvjpq]wtpoobflhevxjuwnqr[ltfcdcjnkkfetnor]obpzfslqfunurzhpr +ihikssgoutovoropq[nitrordhoxvqfbjfc]lxnjmoufkqnxizdcthn +nsnkrlllkoyukbkwikp[anhzfrtqwndvwcndm]xyvidixcvjwqwxbsctb[awnmlqopvrjxyvjlbn]ldmgegtwfkvwjurzk +dvjmhdavqxdhnbglm[qopsknwswyqoqccp]jycpmzubidfbwsskm +dstxfmmohcyoivxmci[prdroxyvxqzdrdsu]qzczowwyxtufoewluu[ywzeufezgbazekly]tiifyttcldlhravctc +anocufhbdffrnyhxt[sopxugpfxbbjlsgtdc]nvnnbdsjqfevwbgbaif[ljuuwzmlrnpjvxgbp]hoeejpqdkbrafcmv +mvoaumknaokkjrduxj[anhqilrxkkqawmtdwhd]zuugnxwinmpwchymrx[ftylpriufvgtanapyy]xnizqpmgcbbotfpru[ilovypboxtuyozqag]aldfcdeyubuntmvyv +xlvezhyhuvbnhgezw[yvaxeeokyjwjgzr]hqtybqtojttsyhycsy +bjcbsmjssbubqixiqmu[uzycqzxxixenmtvz]ykvtnssyurdixcswneu +gwcwwzlhdufsjwaxal[howbmljowljdsvbm]jggvldehjwoafvshlw[bfevufuakhrccqcc]dfufvaxzavehxgwb +xuigvxgnmagtmdke[nxkzzxieoqxbaei]nqnpncmtrsiytxhy[bqpabinchcjqcjy]ysktjdirrevjyqyc[rwtodjwpnppdvig]cxedadgimutpobykf +daqanavryjmzxflo[vcpyomgckepdftz]tizgysgskfuntqedhp[bkasgyhpytrbqvgf]dtjwyykxvutfihl[dgidcqrglxeuqmjvryo]baclxsovuumhgjffx +lpyeghloevhgthedzjl[schxctqynpinoswgvwv]jpuvctsvrdpdhwsh[xdjqrqfwodmrxta]cmeizobaqtszfini[ttbvcouiaworjdp]uwfkbkxwhrkeugsccp +ctvifkpejmwnuapjpjh[glykzeqimofbvirvv]kbzjjjxmiasijhyak[ucyzsvtasjfewtbm]zbhktdmufikfwsiqyfz[kolsqantshbocapum]jvjtmsmzjvdyawlrrv +zbxgniymzkidlugns[xsyjfooxpsbhtjvjp]lydpcozhcmkdiactgsu +rzsziayhprsxlwr[szdcnmcdpqkwlmhqlp]uctizqyfzorwogahopa +njpfvxluupsvtbenq[cgenluehtxacymtm]onnngstsltmtobh[jkjpmbsumgmtkbyg]uvsefrirmvsuiff +qukyshliwhitgmyeb[eikuuslkfgergykosp]fthsbtteuspbrqpssb +xpgwgflgtkmtzhw[prdmpsbkrcbmjfitdyn]kqiyknqfoudyfvdmlhz[zswwgwvjkyvrjlg]zzmkyxkalhbbgcouvog +dgxbmggkttasrcjotn[hsfrmfxeeuvovzuij]lnbdybfhkdsrymhu +ryjamwprtdolosp[nkucayakarxezyxpgkp]qnezibzbjadqvqzz[kehgcplpjdlitdsg]nagotxuswnxikkicoi[fbpbayqjockutfqu]gnylxqhcacwdrdhlp +quayrjbyxiviwukq[mwkxplqhlociiriaaao]lswnrperjoqewphn[nmwqzenrjmgikodk]sagkvoqqoayykkzri[uyenuakxyohedlz]ffzfpyguqryzodjwqxj +fkymdwjnylzqnxhl[lsrorhrzdxpfkmai]vfytomporosnlpzc[pwpodimqjyfmczra]nibuxkjazxghetmxe +vlrxyrxugxmmxnr[gioetjknstpngomi]jgzsfyvgbteacpupi[aeyhvaqkilxenfy]ezhnkbgkqgbymgzolq[dkzztikgwfghpltsd]nrslpkmvahlvwfhavn +xpjvbcihegkoyjg[ddyxkmnhpnucgbeu]xnvxewhefxmfesoqkfo +qgavdsmekecmyuuxln[toczsvzymwfzzrxprb]igonrcvkpxvekefo[abktdknxsdmpionl]uhhlekwqmalhfauva +uveiuvjjvxlrlyxpc[ucbsqehsihiilfmxz]nvhvrtaxdpiqpbuyj[rhtfedxbiqutzvaucj]dxtgbmuwqxxqpfbohfb +qerjjnnafocowost[axrfofdityutyzgv]acicnljrpsxzlcg[dhslugmdfaxclhrdecs]ekxnsbqhlxcfuron +jknvvunefcyqagtj[zhgsvdlsfrlcfyoqt]srtokcehvdjwwkcwczm +wwwyfmlxivfqcmnwtw[kaeymickhvsdlqkfuqc]dyzktnegiqbohljysa[qmnzkoqxsgtpattmt]oxxczwgodhiecoyp[swszkqetvvgdctkhyxo]qrjhaothcmyajmpy +oldhdgmnxrbjncj[kkrntxgkrpbrsyi]qjronlhwmcpdnpp[ksqudrshtdnenqxt]wzbkmgdhgylcfpberv[nyddphsypgzienevnmx]memczjhmgzeyjchv +jxojiumgecewqlc[nmiruhzcybahusxwt]pqlrbrwjitwylvzx[rjwehkmounctpcecz]jbhagxjlhngeibhh +lbpildbxlosyqfun[razlyptphvjizuyonoy]atrqbzjakphxrguvmbt[ybdqfljkspdlgisypun]xttstfdytowwtxytsn +txrzvdxevhqzpkb[xbsfvyjkimceqeog]ilzhcjiezytvmdd[kuhqkwaweasjoae]fuyyczwcpbdblxtxjgt[ujdwvuypmibgdbdtkij]vhrvswtmxfqkwmtjjld +zipaigqfaywgroxzyh[nfaubfwofvgmjrlxw]srjdkzejhrpctlhbevh +mtshlkbkfdacuvtjkbk[qemjvtgzaxmgvojtfl]emvduvrdlxnwgqrquk +nekajppmdnadytnn[ynkibteahksyzvpenmp]jqxybiytpkgzgws[whyeilzvjokewweunf]ndkfvbdnbdoszwfugue +fwfviekoibnqhpis[esurgsppgqchztm]vaxsbcgtqipiemvreaw[ytkxlxyzfifrxgmbggv]tygxkuusmptxqyl[lpuxifizetrlbsefado]rbykxursrelvgiilrai +xyniecftatconlmstl[rpmxaolsbezfwzof]zvcmwpmmcszbaimwhfj[hggnwfkyexqkdancmc]cakzrmvvnmyiyzbwx[eizlhdetlkmzlrob]elvcwtpqtdpqxwdgjd +yfxqriltoucrnfnj[zlvarepakboasju]bhpvqvllpphryccbjz[gilhjdjlsinanvhhe]rkypfwnsrmshanawlb +cffxddoarujtkpwt[vgtsjcyuqgpoklcem]enplegjrghgfkvaqhtc +kybnjsgrfnckxytl[obtlaqusuhkyeswu]vhaghsusagftgzxz[ganwwupndegfgxbckde]ncgnimjtllrpmajya[dmzimljmhjkbyozpmk]ygyhjeeexzqadcdyhf +icjonhtmvgnwowp[xdtgaeotcyiyzozqwd]wudhamantwimysgpu[wjeyfkqluqgmbspxi]piyixwwkfdbogwcmtac +qextqvcvlshqhbunkg[ouypttbdsycmscqe]qpxtjvipjkrbasofu[lzonfnanpflaekzhl]xwwxnjgtmzxnhmq +zbtonkedeacrlltqnl[qlssupkhjptzbbru]nroemsymerldlshy[anmlmugxtrgypsvkgs]wfagpjfzgqcdhslmlnf +dpjpmruktkfkpurvcks[mcdigtlyilcdvykpng]wrbydnqwmaatgjpjnew +nhcyufcfcqqsxef[msqbqdsheiodqzpkcv]qlownycyhpteerrdfid[geiuncokzuwybrefno]mgugljgzgtdvyhpflbk[kwgpiyryqpdmphcwk]rghcxpkbbmimkui +yyutoljmokemaksyh[ofyxkifbjqhrdklh]ltfjtukyeekhbjd +uolodqcxatkpbywxs[qdpmghhjdsvuolwk]qfvcnuajofrynqndg[cpojwkswcxdorxvknrg]hluvdzuqsjsvhnqd[coemqesbuoorqrcht]oymvojeakuzzydb +qrghrzhmccfpfymd[ejpldprfcjwhfthnli]wayofelvbtvjfesq[crskpxtazgepeguyywt]hedblyskngtnxnchdz +gvebyckhjgfmqrxmmd[eklljmmtwggtlqdq]hmxazjnitvfcjmlactd[qhlsytdoiaksvney]jsdeegafywarxlsnkl[ycoyqpbbwsanlnoes]mnfxjeakujicrhn +ttowopleauigqfzpuws[rwaipjqlxeajbszmt]ewurrgikabumnsg[hqhoudrdngplyncdoq]jvazavwibnayzbkmei[yfeaerzswqrhjiiqbb]khsqzfojtdimvcgsxuv +zysbeejbuanxhomwne[wzcjovlgygbogvj]wqqbmqmudmkidhnm +hzetqrjsokpzsfe[sfvglwbyaoczjozubjo]fisxeqpvyscesgy +txsslfbzdakhenov[pdzbirgfxvyufuz]mwbclrbkpszfpgbrhu[ozmwusngkhbkluzvgo]wuwvzagakqcmcrcq +vxmeolvgvkzdbldvid[ebhmwbfcvzykllewj]ngsvjbjjbyyoybnai[vvhfsezmrbmdkoxbdmj]pxxmcprffpzqadbu +kagnhnyzbognzsmifby[rujzhkfynwygbcpuoq]wfgodhqkdextspa +meyjysyguijkyen[vjyhsmvoyoppjknvivn]yuyroikrroyknlkgfn +yrbljqrlekktwvq[ubrwbmlwxxtxnwa]ekompfyzprhialu[rdglmpamldxxxsgpmwk]atazfgcgkzbjydvf[sjdezkpgsienutudx]zuxyrrwpglvstutp +yqhreymyqostwga[wngmbpfomuxgcyqdl]jdkppprtdctuyaonlqz[dfpqdidzlofdishhmot]gnifxcpfecsxdincqib +xdfslzwasuifmmi[lbvuxnulhamtgfyhwz]sarfovphjgpdckkrbgy +bzkfxruybgbjsmeflp[ubqugccjulkryeh]yaldnucjnxhktrgf[jamlgglyzdlaidp]dsvhuxerhecwhjslfk[yibicfmmkiugttqi]byyytkpsforwainomd +asxywcdszmdtdndivdg[qkyfhaxaietrign]sjpliketcpjxkwxaoo[vmjxfuqxqgscfpd]mnpdsyqpnhlksmrcpa +gpgcqhpkdzpmjoxbjvk[stpachxjlsdooglph]jaaoaxtyaogvmuhl[yochbczehvuvauxj]zatcmyzbmktdoohzgx[cbwozqlvqfssqaagyf]dkeooopvydlsoakyc +blfmanmskfsbhnj[qurkejaextecwkh]iekzoszfdtcjcvqf[cllmensfekeoduop]kpldtlzhhnyaweelg[duturhserahslsvavl]tlscacpaddzunyhknql +fgtfcerscppphulhdpc[cjasnicuepcfcpwwq]ubfqrgkjexhpcpdh[fcuypvlkciryarmpsb]lkazlfdxilmfoccr +jaytjcjzwzzrwrosfig[bjwjolqvmwjwehvkyqm]qdrcohrlcqldwsj +darwjaqwucpzrgob[utcloaeoixtgcssljwg]daazkyzlexvrwrvcoho[hesdrjjliusilwgn]kflojebucroplzdkid[mxvmzdobkvksvvzg]mllhibzchrvzahrj +umabodjruykdkzuebe[pdyqfuwbwbnhvbgh]mvwcfyrzvyzbwbhen +uuvjgoiafuuacqj[ccihiuugtipqyyve]xmtwktbgcgwvwchsseg +oldckvjhhtvodiljhx[nqcvjxjohtdbukds]qsspbsmfdcamiwwr +dzilyknpfbgtdnvntf[fzelzighvnvvqypxz]ntthcasrqrblqsk +hphpardvfoqnqncq[ppvkmutvbzybiwmmcuz]kgfwazxcanccijxdxr[kvvrehncwizamjfbv]ptzvpznypbvmrshiq +iteoprxpltaartmz[mnybqocmkusetlywx]mxfikdltxvgvklaxzqt +qxldpbwuuyarzvlokm[peamzjnqawztknvnssx]pjacikdaebekzndkqbs +kswrzqhftfhqqgetg[bplpppimgpytieviwci]gfeqifrktgdqxzw[ylzjvdvhoocfxoijb]jhullyfbzrzbtiujxo +jbyalllemspbiba[fihpzyuwtiisvalzl]egftfecpkrowpxz[fwyjugfywhzgpbgxam]iuwakremprjkdfqep[cwjewifgwauyxaqa]gfnznfakypqatvp +gtdsifvoatfwztxsgmn[lrdwcnvmfiuzxuyad]alnsyodvmgpdxqk +ffyhycigkhlyiopmdx[yuuvtuoepntnqhkof]atumrmkzfhinoqq +wrkcbbifeyemfppiaga[msgxssztbxvmdii]ydxtnokgvpouvcuk +xivexjhdjysgmklbjp[scteqtgrnyuxsonvbx]kzbopsageoqsymtcfo +jtsjoerkjzurnysfnwe[jqglomdcjmtvcwvhir]rozwrmwjuehpapebmgz +qnscyvubszfeloscaez[povhdeeifvqfpyd]hdpspdtgtqpklhwqjec[xtqeoudrdzirwfxrowf]dllykbtfgrdwdlchn[fsjzptvngbbulfkpkh]nvyonktuxkjzpsciihm +jzrrmwegexitufpbx[orlvlpnnuklsapk]kpwkwfggbcxwdxvp +hfvhjwieruryoqk[qrtlruplpqjtwpuhhoa]ddbsdfqczwrmnrpm[hjjqrsppkjnvxmjq]juvwgpsglqllqhrc +wogxentwvncxpjbntf[lunrnlkbjpkqcxprp]yanygvijbyhhpohijj +kjwqxolclqanoyfes[oeasucvzznhjxkzlqb]bbxecjmmedvyfzapfif +hfdiajyktrmlfzfbv[vdnyppvsruscsgvji]opwnmoadgirnedufn +mrkqlpkzkhbfncol[huvazflnaswuhnv]pznbrubmgazkzfvkltx +lfqfiunlwragtrknwpx[quvtbwmfgutkzaeng]kcdzgwyybqugyfgf[mjngrfgzmtbehzxzsbg]zjvpmzakgijjfyz[ghpyxsxuycqgdipdua]bjqtbqlzwyinovhnmmu +ayagxnelxjvkqkwhax[zlimrxwrtlqtkvdny]nosfkooohodpzjp[hsrgztcucnuagedqoz]aujduldshdugxgbszom +wkeqhrtgnhyektefk[afuwzaqdvmzzzgnuvw]aaisrnfyhuifpglpgp +kpqqecovarltptjfdf[fwpprvpqfsntlobpdm]dtnujgpbbrqwqdyzs +alnyvjvicoigistbmh[ueworbfuagjnech]dpzdovbhhbguxpginqy +eiumooyxoukvaqoiv[qrygigmnybosyay]byhcqoggajjtotnuw[wpgsucwktfgcuhhi]hwoelhsxarzriqxtwao[nvemgikmzntrcfr]uguazrjfisipwrhcbn +ghierhnuwvmisxxa[cmfxbenynymgvcrr]oknavjpheqtlsvwabd[izrzgzwvdgymivghdpv]fbqrtbvhcjgvbkwjs[ivdprbnygkhgzgaym]ziwhfgnbawgtpmkswvu +pqcsccgpceupnvtr[bzfagcvmbelgxyns]uxkvxgveigehxsugzj[oojovkdwhojqcbilwvh]xeamwxhelypwwefsabq +iltmsmcvjnhczdxoti[umsmolikbpmqnsyah]tdtojhhqszysiqkfqr +eubknijqrihrbulq[hfmdunzrzrgseunf]qgdasqmtmgoacfid[duazrfhejbzxepx]apwgpewymhnhxsrx[judrexlgitldqqlnrpb]ynfdtcugmjvpdajapon +lqwdkmmktuhdbawow[lsrovmkjyktyduf]utmrjitsbijombwo[abvvufjkwoxsthzbao]wteqdxfhbqrakiqenh +phudxliosbjdplwzx[wmreutzkdlbxfksjt]onwnwzbffksdsrrvxuy[fuklieqfenqwinbmf]ckltdwaxzrpebmksn +mldqsgldkmerpwqlg[thmshstolghijyjy]xzhkcpjyjuydgxjm +wpsseyevqcibokcb[hnqscfwtkqckqmao]jsnvfanwiodlasx +pomqeoawmwhijaq[ejtmvzlmidqwcft]hkeetgkruqgmnpoi +twkcrdetwuxaxucnjv[xffwyrqfcqouyxmkrro]ezewjlxapphabveea[jfyjgbpkflijwvreer]nesuewscsclvwiwkn[xxjkzrpeonyctow]yclvbgnwgcarcxos +ugndgtdqyxtplkdz[worxgglrocgtypfvmb]lcziijmkjfdpghkjqfp[qomfivwilarizmq]dnglkuyyinegywu[batxtrembnirlwr]ovrphoeyxqnhcvmts +zgtxjxnktlvldrxpul[rviiugbdqcysxijrc]kyktcnhhtompktirdjz[bkusovlvbbigibd]airrtdvywvomcfrhi[xgapjazusatwmnl]usdiffjsbadtdonojs +mimjtxkzfsnijawjrey[appuokfywghecatbzwo]aovbqviminrwaszvo +kcmrpjoggjmfzwezv[onaeglpwhoxczbw]totswqmklmzrwmxdf[befvnijunppmomoduhr]wydkdiejzzdppny +fgpjujczabbtkxwvfd[cicmceziihzlkcwdwhr]sicifccwrljuhteondz[qwtxzkpzaspfynin]scyjunafukgggpc +buyslulsiiwxkge[ypiuwaxgxsqpbqqx]dwsyrzemulupybvx +telsdbhziecdqvmyprn[hqpxpfnttkmchynab]wvopujdicijhmttrn[orfuzixnlfdimtsc]jzvuxsquolwwtzr[dmiytgapehniwib]zylakfeifdzatmqpb +klvmlkigwhcckkyx[qxriuexxfsmfcpgvlzb]ygklxunjumjcmoph[ychtcmyhbyipspnnsr]pjqqgfbcsqmmrxbtj +ugulusabrxqyxbvv[atgfhjdhplritht]glsimouvohndboxh +fatrlhuimyqjjobdq[xvvmkavirljwcgmkvx]kbesaoxeeabtywsxcwr[pmvliimbudlzabbz]vseagltcmulcdib +vowrlwyrxwivzacnop[fegbzczrceczdasjr]orroaksljdcydlk[clwvvrdfhommqcn]yqigbtlwvklqxxiors[uliodgyotgxdymyi]lqverjsyuxifpjoru +wevsnwwlgslgxsof[eyjhzwdmvusnuerbqmh]mjzmgpkhaatmwptbo +hljbwkfykqbnpqhkfuv[uirnlrjpryuhtqztz]ackmzmullgwefgug +lmumdzgnhyjajoazd[yksltxstrsvugowym]xcmwqzbluyzdlbpkfkj[sbnktloqdabygsmyp]pyavvgzsxokeecxh[xcoublhmghnexnts]sdbkqumfdezjvqp +stnccrfzofqwbcafssa[toskkshmnjeywtuq]kbkyxwghqfgrtxs[myvqujeowntxqiekgxh]dplyqviwehtzoxrrix[covstbqzxjrditsf]qxyocadbpdqqqpadl +evgjdjnbnzmbzjpbfm[cxhsxvxtdtdowbd]wceyuozkwdjdsrsarl +rbnbqreygxxaufhws[alsptejilzoslxfj]xirgkoxgpdsolbhqiqb +kpzbxjsrsdgzstpc[jnpsoqmjqnfzkfsgq]tunpisxseqxjtyfwij +kegehkcwqdyujtyv[qfprszwdyjylowrl]yqhpsvfmcofhrfn +usfdjspdmrsmwotku[phpquxkrbrefnesvoig]vbrbyhzjjueflzur +ahcrumgrsucgvcvs[zgiwqzqxdocenumve]wwmkejymlaysmpr +egorqvqrhdxdcwglb[pewidggmjfdwchmpuxq]vfpginbbwnzhzutt +rbwgxniblxrzdux[ctmqwdtjnnoizpfxkb]cjalwfgvfvehdshc +grpqqrkmvatjnpe[fpuzplowwtztimw]zsebojrxdfyouujqu[jieuliemrlsrrhaaral]vapfxmifbvtdzjpqfn +kxqzgqwklgxylpccai[scugesodkfdyduxfgpq]qeoajrdmbkawsrcde[yhplavixoxekedvoq]oefgpvukotfhzxvdpt[vfffrlkuirbixakjbg]shhslgefljkjhdu +xltaldprsvinvsgfg[korqzbyuimhrmxg]pamxettjpfchnwvxfb[secngupffbmiekzfewg]jzqfwquugmanazihei[ldhzfrgdbneaxjjndgg]toefzbwrdaiqssxrbqh +qgiiylhrxzzvniaegfw[vfxiqmehxnnjheiszxb]txrwpqbqkdbnsvt[voiphlhjwxrkcyrarwt]lhlhcobxijaoosyx[dyqmagxqryuyfbat]oovkonlsaeiqnil +cwxhidoqdhxragzpib[hjmpsaxbqpiwqhy]csdontizglsbbeh +cvqlicsscacfmuugq[eejkmtnhdfogzpbhygc]hsqpgofmanfemhido +tsbgyswofaablrj[kxsfwmoymlmvxujvqc]oiatufqeigamjtqj[lbnetvjnhlmvyjs]aeeetvtqgykzstpt +zikurkodzkxzvjucknr[eeldigjdnjetqzwtl]itaxybvtwbhjdci[hbkvepoewuzexeg]ohfbodukqdlanpa[rlxoscpwxfbemxvye]ydahcjuodtvinta +dkdquuhvndpmvudwjx[hofzlmhpteoarpre]sdvnkykpcblbaardmf[hdtnalxmijwrorx]ixsdqmnoqrieeqn[tvyurwrpjzolmoqn]odvpdodyhdjvcaqi +leufyoljrgauyshjmdn[omwkxoqtffghqvn]iqpnagprpvmlsvo[glbhtzdectgrymdzxf]dwgpfoqsivjdvpiidzo[glnavlopicrpfkc]nnstfkiqjxccqrvmg +jdpqymeesiieeeb[iwrygkpzdjttxuz]qqrbobabyedbigesuh[tmfkwpopdgcfuydhukb]mzldoxgjdeckpdvu[obojbnmmlhdwsman]nssaclvkjwmoozuissi +upgpcxmqbimkrcvcmp[ivnacnyueiepraljdh]vfagabifynlpbjdc[dobimimkhmytben]pgasxhypmszdnvjwnwh[nvcvwfgrqenthqcqlw]cdvvgepmrqskpffhw +fifgarfuqaoifkymgx[mvgawkhnxvgaqdmzat]fuemwmfadtlaxwyslr +bcbtmtmkhecpaemtmec[apsgtrjqwqreuntmdyq]qecxvrivzvlkwwnzcfv +vslhwcbtvnnkfge[zbotbapnldktkexac]ieekqwkifqtpzwsb[wjjwgvhvnqaqmrmath]aeauqxrfhwdlbsqx[ijqqcgxjzepgnbru]uycbebwrapkiobz +fgfxlcgdrvbwkhf[gcdnlfdqppnocayj]kgluimmxtrnrkxxy[ebmozaizcvfxamjfgfl]zxjsthsrjazocerdybe[uiodgjwmepojoaswdqb]gsywzobidosuauosihp +jocqkcfjxtprwzxcol[jomzitpuxjjstqj]jyaupzbknhzvwkwejgg[frkljzosjvpzzffe]najjqpukuhkyseux[obvojkkfdiawyysye]awwxmmkvzedenpagx +wnjitpqtpbywfdfzqb[zsmozjfwpksophbzrp]ryxeuskjtgqxlkqinbl[jbenmfsdrvwdjfxhibx]vdwygykkkqqzoueisnu[xgnqjjcnbpugkeuaon]wvyttauvhjmdqcbmfqz +cjikxgbzdupqnoq[khvayknbckfnohcbc]gjsqdwbzsjnwjblbe +sknizlycschmfbcbo[glptboptcwtmwmyj]hmgkwtwaifrmzxhee[dxxxiulybtkhkstynq]mjntafrkgppmgisnz +vbijkdmufqxhuinw[nqkbpwcxoozkrllibiu]maiisvopemncukdedg[flspngjuzwaveawgk]lqinchaieoizrwr[tuyuxyvxkesiktilna]rhyincnkvnnqejsoxp +eehvafmuwihwbizcao[vnktgdjhjeatxeshjh]taoisnoyefbphntft[pfzlfnftyvfkkmau]gxmhcurnvyqxgffll +ytdqzmfcxjezgvr[yttnwhebnitzkmpvg]gnxpxseopkiwdwq +tiygnypqepfcbcqasq[qoiylamohtllezrd]hieijornlrltkvvf +gcolxjnzzqtozkqlo[gwiytfqkewszkddc]mervsuxdbxtqkclwli[zamcpapgayrobsrnros]skfbjychckenvdnk[msqqgpdtgzpbdsflgo]hswedrxeichgpbkt +aoyzbbkhsyzouhf[yuheesbhrurspvkoeoa]icwrvttxwvrjodooy[lclcdnulwihttoo]aheoekyzcrdbtnkdn +epqxzqeqfqquuvaxut[rvniqevejzxwbgdj]mdozdllbtyxiessvou[ftmdtfmxjktmdjrp]rbdfhuqvdzpiyaw +fvfozofyprhtptnvfvv[cvjusvxzqhknsrfuw]wwjlogceospgxpoq +lboiooritgdlzti[dcvmycwryuiwrxuf]rgsvwmbouwqweusdsrb[ncalmljnmldxtgjyn]digztuhetumfrmzwg[jxhgzioinwtdfvsczf]ormtzakkenigohbn +jjgkkenzhjxreujjury[oqbhgbvyvybhznj]lzzpsybrpvmfxftasjv[fajchcbbxzyjzdmzju]jbyovxsryhenhqd +kimqpwhmrecjichuf[biclfkhxsptyasun]cykzrmdsfvyszfldtxb[foamaxeacbbfukrav]kpdkasbbrjuqndsjf +ixiemjwdwfauydlzrf[ehczcannzlhrpuu]zgmsdfleegepchlbml[pxixfrfqusymnyad]wynixqpqilkigha[ujtjksmgswjsqlt]uabmyxgfqtqxbtggvoh +vvxrjenkffmjasf[zxizrnxsywrjpbsy]danlwskfpxmwozazt +hdbwqsphlabkzxxhrgo[erldraphnhaevid]ynkxoezwjpygvftw +eynyhfzlfnvsrguftv[olhsgnhicqlhqcopiai]azubeqximmxxruopbcv +ixkfvfumxiagjybsn[frwibevmaiibyzd]qzqfzepjziatdpyqmr[onsezbgebekxybzzqzw]yqotbtwhsuxraexdfes[sqyxxukeslhogqaftl]kpqsxbeawasfnbwm +fbotlkdfsscgahhtbvr[qzlujuyglqbktek]fitzbfribrvygprgssx[ytfthkzieycghddhs]twelmrjujaidadamq +nuxgihsikrkmrydy[awvlrjbdobngseyw]owlsggrmwypppcnkmws[ipqmpwdvbohtnbs]nutezdkbigrjnveau +ftxpxuuvsdipzjvmy[zfrkyfvducmhwzfdxj]ycyrhdiyszpbldrqyqp[pdhfnaicafoldftflv]rskyllsuaaxidlokgxz +gqnlikldqbizpsceti[skfmnlrtbwyqrwpi]ubwivkayvgbhnixj[kmlxwcfmudgamallj]tfwinixbevrrgzozw[iufudfqiwsyjcyqrs]ujixfobkouvxhmvcql +iddngjedxnwlbcxhkw[yqwiebcdacegykn]saybhmmqxdoxrrzced[bqjiuuqpbxczshymt]qagtwkbyyslughgsxrd[wjjqtpphygirijzcnun]lvwqqctdkjvaatovttj +qzarsgfojoaqkzb[jiuvvyihogymomqddqs]ekacrjmxsudjuvjd[dkfjwxmpbviqeuiotlu]tpmzbyfqhelgtpic[xcankncgcyaixxcuaj]jsieyimscyfvaeduf +epqisdvjvcpyxcwxuu[hhdspwfhkosxunncv]iibgrkioklsoktfp[kjvjytinytggjurws]oekjstnakyoohller +yidewjsqwykhvakby[ewhvuvpzmeexvwtd]mygypbsbaabkccvslri[dgaksoqgxghazflkn]kpdssbszxhpltdxht +ijhcdyyvjscrvhh[fpobanqwzccnyev]vtvztxptbegfabvm +fcicsnaoileyhlta[ivnthhpicibzhtyfaf]agaffazyjidivabel[zprfefitivfahmsx]jxfvpjrbftgokdclnw[vfmlrayxecyduau]dkuaarmbkuqqjuva +wjhhegqxpegrypjlpvr[orhbboezmjncmclamy]pckznmicczddarise +ccxnbhlsqrtqcbrczci[zwbnllwffvdsmmd]wdcyuartrmykqbvmlc +shpzokvkrrpypaohp[cdbxbviwegleqizw]dcilynllhnasdzaku[brkdsnedgdlzlhxzlzg]ygvficcbzjonmzh +vzdkvwtqbqsgxenb[dfrsswrrxxxlpxpgp]lheiqkpbahpgjtvax[lbfhfdztehvveioipoj]xkpbfwdxvkcndrbfgya[qvewltgemzljlokhjxi]bufpvhmvhrndnkmjsjr +mynfnfbjlwljwoqbenl[wnuganfnmpqrgcdxvn]kpcfvfegyibrhoeouiv[tmquruuijoivdluhc]lnspgmbphvhxlcw[slrraibkhqkaupb]vxwczoqsrepmgzz +eaeovlebqlahuiztd[dngzrklmortvzksk]atunvakfxeqeymw[huaccbfdtygotzubrj]poeblqeqsdqpcbqd +gzbgdqlebuwepvx[qpajreszsyyluwi]hymkhgxqpabniqzells[zediljwkqfpvblioz]zguladbcmloyugl +cvkyjumasouhugvvz[dtidgtxbbufhwyvob]pdmhzqubmdreglyy +tcxjcacxysuimczi[uhflafmjntxmsaf]uexrhinqroupcbksrsj[nocrykejeuzzigkyqxx]crwdvpjofxynwft[fmxkcqrsrpdfxscabs]crbnlnzoihruuilu +notkmxwmhfptgfpvntf[ucdfxyikwxtsumebhj]kjhhkgtruhuqzsl[nyiklbrbfvreipanby]flesvbofrdsclfvm[zghcpgxoauylwmlzfl]vwotzewzjzpyccl +pjrbmasdillqwdkjfni[lalstrvjalnttmwr]xbezkjpklkrnlpzjjn[wbpwhbukoixcfsqnu]xknhkqjktuybkfnz +ykvyxzavfcirelraq[itraxkxjwslzkxkigcm]ndbwcybrgayecrpjao +jqwujyllrskoetkbz[akunxyvvaxrysiygb]ynqqotupdoqbfwncn[yyszfaxjmgqmwxrvdx]zeacfwrreohtnzvobhj +fsfgewroujqwaek[mryrrkeqgtpibzn]vlmavzfvsadxbdiph[tdlovgncglhaoqafic]ziupjyryletstrull +fosmjgkqrqvjjigrtf[ejrefcyognxkuvlwl]bzhpufedodqwsztzng[rgxidklqahcldewgfrl]eodokojqopkrrhfpmmf[yqwaeuztmjkelpwlj]zijgacsyrbtwkxh +cehnutkhbzhfouyk[pdiacmcgcdpmsvgvkmp]uaslakppkycqbzn[ldbaomdftjcnpasl]fgdrrrzumavxzlojm[iyknsyaoypsbqicx]ggtbqnjftvmqkmiu +nmezigjskmagkzcsyhb[rfrggycsxoxxnxrhyb]zjlrnpgxzgljzfw[ztdnrdocidkgbqmmqa]hnuqryossbzlfaivij[dkaufcpwgzsxztpqsk]tzkdznvnizjtbrnqosj +zcdfhyoyrbwonet[otdhxcbmwxzgoyoo]kbkvqasgmhmuynqth +wajbfmurouvueehl[dvyueqwzbqcpdvbjfr]vkujmhhlqbdaqcsvomz[wlekuxdiumhnwms]yzgtuwxfirpmllcek[tzipbxbzpxcvzxzmtr]tynktoelqfhedvavge +hueffzriwkhilam[zheswsymmryugjawlxy]rptwswnecdpsdjujnt[rjyipvpqzbnvtugvi]xkicvyasotmrxvqj +rqbhugeaozfjbqm[blpvbvcvrytbekhjfo]twsrzdeuojhqpaa +fymuqqbklufqakg[wfsqzzrvdqcubxbdr]yzvdgnwitopzvtha[vhrdzzbmubhgovut]tfkcybfbdsxbxaxnmm[ruvfmuciecbfoxbummm]ysaeetmynjhyegk +koqhuxoxhzmsycbr[vbpklymhqueodieomz]jmstuovitaskfbay[mpccjuzuqwkhvnzlbl]jvdqgfkbyzaaeaxjfcl +sbryyigqipvwczxty[ypjxmlzyfjkfqxyxibv]ktqvnmbdtykqyiu +vivvjcfrqdbkyopqjdd[wkpuxloudonlcsutb]wpcbavtlbxcojarsj[wxihbnghmpfppwqlykz]dpyadzmpvgwtjoiz[jgagjiqugqvjnehajcv]tvrrkzjwwxaswbaz +tkpkdqijrxmpddkkau[yljmixrzauogowt]yngihfgazktusprrt[ggqtnksekzzypkpud]rxvvuhfakfcxjieaa[spuvyobjexcgobltmk]radfcjxnsgsntezrerl +hywcvnclwvvcmkdk[teiryduhljxirhrjbt]brkfilaybgtdkdh[zjqmovlmzogwvfmmi]czmtshoirukgjgeug +sdbxirgqauygushqq[itvwniqwuzmpzqbuug]dnrxseaisdgklwodsgq[euqpdyvpyncxocy]ggchswamymfpxaiap +nzteyxnakzfebtcszx[uctynyhtavkzfcudvke]uasdfpeleelxacxq[kyqsinbcwbvlrmr]zelddmnaqlkhmbsw +ttzhosgzkuxfwsy[carsvskefzrusoihqw]qiuobbcgndqqukuvbmp +wihzjoazedelgsojb[ftgarhsuahimrocy]umttbzcrvgzroprh +itojzylgycblvbao[xgmeltpmzvzvyfnso]kuohqnawebyjdrerwty[oslthgekjbgpsnkyk]jifnogopgpnkfdrwi +nvyowfknauliiht[tskhxdgvaggvgsbk]blgylrovweecglu +hvzpbfqqlwjennnj[vnmqrqlfiqeqdmg]hfofuvqicttlcxka[ievkgdwazpamrdzz]aoofvzixtqamcvhbh +yuxckarjmwgyvqjl[nvlegkojdyybpty]hvkrieawbpkcjit[tewpyncidhvdtomjq]dtgggmzwogtyoxrepi +jobfkxxyhcfvetxwuc[nreuagzglpniuwkvui]seztmibtqvrdepqyt[skrxasyhbotymilzgzr]jnhqwvcpirmpnltnyn +hoqhdburqwecnzksmd[gnegphjoyuvflxlujbs]zhuvrcztcfgorbwuc[pjxxfqyqmnhyopaeh]ewbvxrexhvdawazw[kbngpgqwtgkzuwupwj]kmatbuqigzqrzmbq +ltjrhusfbjbciixg[swlhqxnykjxumuifqdd]romkzpszqgaflgbjpsp[lbaqcvazaucueltnp]wovkfmiuwjdqxovf[vuundonjprqrxakp]wxeulnkckdufqjy +xkdmgtutsfumpzteeh[yvkilakqbawvedm]dwwaexrzzsyjpzsn[pxitznlnnvnjyrs]kcnhpbkzicorrgncowu[ogyvmiykolbwdtv]vjaksxdrtpuuyykihe +eyzjheolvkemumxpo[ipwxnrhyldvgewl]zbrzwobnthndxxvthe[gkfleabqwkpjxbtdlt]wywjazwwxwmuqkpwj[omgsyntzcnhjvsu]asknyjsgbofzyfte +kxxpalmmgdqwahfxs[zwafxcjjypzibafhrag]qfnbakvxozjqgbnnizp[bqhtnoqzctknrmmh]zvmyctoitshakgx[dzatbhonulhknbio]eufzjykwmqoignzm +beenkdmzqibirws[majntndkzawkbfpi]biygjiawnioazizbt[yonbljzgueyiuirtv]umjmhspfocrpobmrfu[dwegjekvrmgoaqc]dorpbifeqhmtglavx +sstlfeielfmztngzpbl[alzfrbyqiqangbkwi]qcomrirvulgipuk[mdvsghpkpisxplgit]aykwuhadobubmrdtvvj[pqdycsmawculwsz]oemcgayshwppgbwanxk +qwhfnqzudzysqxwebj[nhsrdvugubbtuuseux]etcjsefcsjblcjgshh +cgagbjtoxvwwqonb[crbqhpfajsdwtudybm]dquyiuqtarcupaeujhk +qjsqqlgdczcqarhftri[rchwsuodsdofjpd]mrpwnlqgetejijnwnr[lwusdojqkioapaxwc]ioumfyxtwspuyztz[dgncyjfldlapoasebgz]raelsaeajwuhnabrgw +tihnitxxkxjvudnrj[neqbqspcfnldrna]qkkcggwjgejtbmggemx[ffhkzdeopnhrdfpbrfn]rucxwfyfiavskfahg +zralvoiqdvpvjkkf[ttvdslqoxnlvnyyskq]joucwcxixdqsagu[tulodbmorpbjnzz]qkknyrgruwgrgupgb +fgfaohmvjameqyl[riumppkgphbaziwbfcn]gspevtjsfjazlolblh[sueqarjummrmwdgzsr]szmltztnwpqshlr +lgcudszwvsooaxhuz[wpnexmkikdsfquxleu]icefstmmxwsrzqoiki +elrybwwbktbemldjqeu[moigtqyrbfwcdtjkm]cfquoomooaqrsuomty +rihnsvwngkabincos[hrafbjoluwrkoaqb]genyvelnsrwqpljgdf[ytnarqybnwaeawssx]bdhppadoofmwwbcbl[acnqxbqukongbge]tptnvsrcborwgumweyb +sesxnxaikeytqds[groytsrabjvakklwp]jzexhtzpseseauk[sdndnglavrmhzyjdh]mpsxlaxqnazayppc +ozkfwwrdoftbpnqwa[mvzpilxwrdeszungggo]fbjxevczxrypzzegxmv[zvzaovlhirczrlwnvk]yulsjotokxaurjibuk[hygvqlsqfygujup]ijtuoskhnrvxmmnety +ssoavardlqlejqfndz[emljlpogavcsyvavr]izdkqsihedwjaxva +wixidnoyhmsiuzwbm[jgqpnkzbobknrufgif]yaarbsalkqgscyv +hgcggfqnkhbjlhhipc[cgcrrzyspqlllhee]czfvtkjhfgnrwwua +ggnsczivqxwhungxmb[foslhzlzqyhcwepvhga]qgqnwrpvfjilhnttbv[uhuhvuqwbxsjxqbmqfs]pvwkiufdudmyabq[ffqrrfjgkmegfls]pvuflwvnbnllckrmdas +llelndaczjibswzoaen[dzvunuujhpmgqdyond]slkfwoyxpgohhelexsl[hvtucjohyvbuihbonup]mwatlwbwxntozpiymy +epjldiafxyinaljee[zfgytlqlzoaauszrn]gvyukiahumemeqnsy +vldhkwyfpfssriaiwe[yuluhcsjdkyumyhnd]wggzcfalpkmnsudzr[qisyeltbpzmkvqr]kmbnsrdjgspckgmwfj +qkxpyonwbsteomlyhxz[wdkzqjywdsbiccr]ojkvswlubvbbskvnbdw[ejvtytntukhcuuad]hspfdjitkfetytyb[hlgziyjqrulvyaoco]rfhwusvjmkzkpmjvrm +lnmjprwzvaboyyobux[lncninvpqfpuaswssjs]vodhkkndlvixtbsdfph[gdufsyhihlynxuluvx]oyczgnpmusuvligf[jqtdbytmuyavcyfaia]mcdloputyodiezffqpd +awulgpuvbkountidkgx[rzatlqccygoyamniyaw]zmkfnkaiuzjgdsxd[dornnqierejrlxbitfn]qyhlxykziurpdxpz[fjaesxiowwxjvoxzq]oujzxyreqtbosriwkl +hcycycsytqzpijy[pptcwgiggnlhewdwfa]aqrsokplrsmbzzovz +szlezpesytqglub[hlmouktdjtcglvvb]wgcrjqyvabgnnirxs[cafdqrjgmugvsjarx]uomjcavfgggsyknjge[syhraisenfpvlekk]voyezwktjlqoirx +ltjosfxwsqmgdrnpyav[revxajvfbpuqqscgxb]pnjpsoikmxwrpbk[frqghuqvbomoddukohb]egfbhndnpnlxjhyv +ydyzmmgkrvbycjgeheq[xmrcsrshrtogjfez]vberqebkqhindvsj +usczwnycqbxdrcfr[papmzhuxspnfexyr]pwsybmexcdgfztkc[jmiatnbqkxmarkaeer]whejsdpzzxkdxgwm +vfiswfowhnwcuusmd[dhhjzfujepawktlh]quzyrwoerrtncnnxup[ekhrriqhoudhiwiju]exzcmnyrtbnxlchf +fmobpaevmkephhfuu[pjbpnzxkqpvoafxj]ickqqwfifesukyx[uzfultsftvuzbipz]jgvjewotmlkzqhvvc[fhfgcekzgmgxosyuac]gwbmgqtvkhyqidnehhy +zbwadipvxkyqwsaassl[wcojcviexybrfhdfc]euliyskdckqzozfnlpn[fsvqspcvigzxlzya]vzabwryzpqlmvns +wavahkemgrtwnvbocse[hnzvxqcxzisfehcy]mqvssniqlwekgowu[cusnrkcbwuichekh]cfvncmjjykeaufknu +wvtptjerlrfvtbywes[ciopqzpfjdoclfyxxqy]sleyhkequxorssls[weyxuuiigtkjsmnugij]onxiowvkwaaycpv +csanwgypabdqhiinan[gujzhrxowlgejtk]mkczaemurigewvqw[lsqtuuxcsuphogl]acfqrkiewfykgnx +ennvxqkaqdppzmj[litdmoukvydtepvji]hfuqcwyuufmxcxy[bilbdvnquchtcjquymu]yjndoqqpyzrjudd +vhkrlicuffddtktngy[opctcwvtlypwglpaoi]iscxtzlmlkjdgty[xadnwdasnszzmwwid]uijlqxpfgkkcmwga[ykqorpoxpbjkepibk]dmuojdumobwfmkvqg +wgcihfnjvadtczgqbj[psdtqjwifivgbhp]ocykhmjfvbppiltqpvv[ermpbuyieexqujuiji]vjioxemsjslsdxso[bmsocpaehaeadsaqzbm]hqlzlnedzwgbxbcacf +reesvrozyerxeid[ymtiurpepvrvnkf]thobixnwiqrdkih[uipdwllkuudcydjinew]lzpxeltetaixzfjxvf[ewlhchkdiewigxy]wfeiqnngnifjzbpikb +rxgukabwlgxzaxjxch[ljrblzdmvcwcxdoomq]ksidvuwcwvwlvrpe[yrnyjokakcbwdxh]nertnqwigrzbtdmj[gxbsdsdmishqjeswt]dsgnhlagonywspbr +jjdfvvurvfljscocvr[ueywpzuumfihiocoe]lmcrxdlkqsouhpimc +qgelmqtmcfsdugg[jpbrzcblivebxazpamj]jpkxrusyqkjnndao[nqcxhhmkpfgrcwhsoyr]wvigixehqklwvrscmz[xutrclaofzczcvfnxll]xsyxrvfnovmohxfbt +aqhrsqbyxtxhsvmnz[pfpclhprjghikyngp]krgiznxuehpzeiy +trqnrkulbvipvmj[mgsdnaqnayymjyp]otecdnzhhcufrly +illmnsgqusbqybiso[fxddafnnoholnqjotb]uplvjosscbyhwmw[jsedsarqbralzbjmyq]sdwkyeychcdpqvfup +zehmutjhkodiqpi[usuretqrbmggvlvr]dewkdjmtingkzuyq[pmmbbozcvplhejh]jzasjfqvsusgnkfegad +ljpcpqtpcpcdttjo[qbmnhadshlheoavsbxi]wnwuahdcagpellgs +ayqxaqtrqzbxyhu[wkplzaetynfxqzhtkco]jpgbztbvmojlflc[ojmgjvfxdvlyzih]levvkelkzftbzwzkow[fmszxqchzjhxtwfm]vihmoqcosarkzsad +nigshquyfjlleujdtw[qmiqiabzqiqafambcv]ywbltgpjxcwlkyahg +vmgyovkavazsxwed[anpflkjsqieufhscn]uizulvgasvsstuhfn[ygxgsfldybdnsleqy]tztuatotreocsrfevpy[yxqmsidajmknyrae]whoydkufyieuqhmqv +jyhhfbftixtntuozgfl[ffrzhxpaezbspndbo]sbwvaoziercfpmeo[tzeluvflupgartnyjes]gqfmzvmpieczbjdsr[zeenwxfhhxbdgjkr]ojqxbcxciclzwthvqyv +olhruodhjmaicslbgw[upvujuuazyolckot]gcwfjukdneuxqreeg[tnnnlficumlgwkdsxus]pxrxdntakudobpo +vdowqzktnmpimsvok[gggjvxecgicglrkuvfb]xtsuhbzqpovnoqhnbs +hxvziijhffbzjnjvgoc[sealjvjgnjnkzac]neuhdwcgtjcvpku +qryaqhtnjvickffebwj[hcgzffksmwbqqdm]zrwihiolnfuqzqpkxn +egbqexgeqnqsaxdi[xghkrttlbmkxgfj]rpulxldvweijplm[dldqxbqxenksncnwhxo]steqcncxfskqcfwfnbm +dhusxmzjdacdrqor[tzblogyadgggzbi]vssexeogwduosdoeo[xexqnjrctzlbkfri]dqppelyoecnnacs +tkrkjtgdhxdcyapamp[gvyyiztulksqxosp]voudpakpaphmrlebpj[vghkfcrqexfgoguvbxv]yronkwfpvrwilnuegkb +yiuhvglusvqtzvngzuc[mfvcrgjuywuthtprxe]vjrrmtbyppmesvorp[ucqdvtwolrvpjyhiolf]eazedskopeknjcqx +segabhonjryukdicj[zvjqilxyvwjnjgjvrnf]gxibvkxslgkpfdhsn[tlbwwiypungvwcvwngx]hhgglxqosunhdvgr[mrjgltlfxwsznpnmdox]bqsgftffsibfruyz +hrtiuksavtjzekgf[vaagjkvweeznlshs]ntotbakgpxpcmqanhab[pqvkabybndisouur]cnjoxldhauoppnqqk +yizxcouxlbjqbijqmj[kkqvlcusdkmkbmuia]pidiunjwlkapojzzmf +dfzinzasgtnjdbdh[wyguangjweruyqm]jfpqpyqydvbdtgqpqt[eryvzkaxiahxekwbp]sywpjhgufixvhljk +jkmabkiiltlvopaxec[utofhywhxjucodwke]dwxatuzwebnyulyt[iajptbioysozunsws]nmfnmtguoqipjmigsyn +yxletutyrgisbrm[ljtuifjmgxupgerhuhb]wpqnfedngiollocqbfh +zszqqoahkvdvpezddea[defewzqptytvhnpzcdu]cxuavzeyqysdynnr[gvmfnqnjwrjrjzphei]pelrqmmykeiamnh[jrjqavultdjecnghoc]ekxawogufyfdmltveqf +morsvbgrpgqiqeplgg[giswwkjoxkgkbonav]lyhrrcwskwjjflawgs[ogjazoccoomohhalb]gjnkzumbxtojtud +gtgotbovcctgtwwc[owthnyvlmcwnctlkilj]eytxalpmzywmwqc +ikznlwbayqdbhusm[iqstwodfolztyldh]amvvpwqwlswcnut +kumjpojktwxazwtg[idtisckrbetbaye]mgqtwjxlbdpadrnxg[eourfrbwgoeoqrlvhv]gegegzbxfyzpbij +mxcepmkacvzxddcpnsf[jviddcgbglreegewbj]qmqdhescnuuswkhpvxn +ltsouowwsvovkbie[huwwuaptbopxsixrb]skscogxrektbbmuwqu[niaczcnnxkymnnuu]sfczdkldegoynqw[mrjssleiutncang]jkfgyuzcaisvrjekiwe +mfqowsxqmywlvauv[fziifhafjuiwdizvm]gmaxzryznwavsaxsv +okmehkbnqsegqinj[dxddmmglnqftiunfuea]todmrlalqdfqfkbq[vrktligspzyclnfz]jwdvkpuvhpwffrnyxw +mybozskxkccdsuuptc[mrlkqwbdhhktuxpzjxi]xrujoxxkxwqcthydsw +jupphmpmynzxsfkr[xhvcemrobysjizesgs]ijjlrwbpchbbiblvr +vpabzrcqfzsejjgln[segfzwfyprsfqskhop]gksthicdjyagobs +tuhzaznrumhuwud[szqusyzaykegklbcdoo]prwjxzrwyrgcouehrg +dfvbjgrshvnvfumqxh[tgnhpzveumwngrnoc]qpntyvcxxoofgsk[jibdpycgwklugip]mgkzhcifwyzxsbuwj +mbdpghflpcondfk[ftzfdsbexmnznqqmfaa]xznzgqjdfkmjzvwni +ojjaanxihagtezp[pxqpdgygyklexhrpc]lapqmhronwsmwbbf[rzuhtemugsniacn]apixdvsnjpsplmjwvn[iwdpiqgoztjamenyyw]zjyidlwjbvevovgf +pijmbdkeyhcjzuwclu[onazufaoibbwzepmbr]jhjaqudvrdoqcvobs[lrwjikvojmgdtkwb]gfxgoeihxughdfbetm[yjhxesdcdudwszwv]hgfdxuejwfuedpdu +hvdutkvozvxwpvx[beubpipzuwaclrev]lqeylkxqdqmcdqd[oivjrkpjzrjywzrxely]dcupjtbrltnguho +esrepqjymnodspvjib[kwdoleplnoxmntjuip]lvrhqceegktadibgh[yfbqpomfldnbpxsaoan]cheitjzmqwdbilm +oakpwuuoizfcsfo[csxawuixxvzzooah]dafrurtufjpuetnui +jmmekugaastsvdn[qoasgnykbkodsgt]lmfvbqomdghvicry +hqznrdvlwnamiushnou[iufqiqjtaiejfqwns]xsgjmqqsvbctpwqcgz[mvpdchozogazbfywqd]iqimztlwajwbxhr +gkeetoqftvsdjhhghre[nspwxohslbgkpyyhdh]glknqkzyfmvjczau[zrzurqfppidpckhmxu]rtawnnjhyjnbvnt[deisyafkjnxtcjas]cshchafpoiqptus +jpkjyjiucudsgjz[mppiltmurhwxvmv]sdhrapccelecuctxq[cnwlmuvyistotoykn]hjzxzneifkwmvumg +uvzuxzcnipyfyuesvna[ckplomuathpfkndodxk]vrqhbliixmzbefuh +ionmypunjczxhry[bvgmqzohimrjmijzkwz]qfzsokgukugmeso[uarvxrewouktpgnghtq]rsnccdtstsegeoudngq[hkvkymbbgdyncilyf]zteoiyacrtwykwzbxy +jnyydhrsrkeujfvj[qmxzqkbwizhvcztzdqr]yllidgevuektldszzjy +nuylrchiwpfvhdumyet[hfgfzmeldvotgtxqh]frzcopyhigfewcnb +sdcvojpgatiidjvfy[zhvymqejqxllelyux]ektbysjcypxfjrsor[kgfvqbereoskymyfp]izmdymjhwwtelesjr +xnelfgdpnrfhdombqq[oiidietkplqnygwsgo]jiltmfqqavrjrvyui +zyuubhwaovcbnaxrmtv[yefoksxqkrkbmbm]ainfhyuonvdvcyegy[nntnxqkqdqattwt]tcrtyqjhokntxcb +hxkbhdfwcraxhdcff[umxxccphsddzavdqn]zsmmtgneghqsrwfauw +kbdughqnourxomuiab[xcjayouykostteh]enwbjtpxpyzaeuhuwb +cpmzhwxdntahvhl[diddnwirsnqchwr]etsizyoarkawzrpfidi +xrruvcmbmigmutacwc[owhorlqlgqujvhos]iddgaukpxlielcko[gawcwcvuviuohmda]bfdceclnseehdeyxv +vlxaputciirctva[qgmwpinixdixaiut]kkoousbfcxganzcffg[cikwetvrztjgefpzsks]jrsyfxydznmupwapco[ooydsykpjwakdep]krlytknowykzzqaafou +dnnvcszortmitfv[sbnurvnwxwmvbdpawa]ewayhapxdfxplpqudro +fsiehjchtnyenvmjfw[obnlguwjqsgylwveak]hupypbuggmbkeqxt[ljxbmifxgorvriaj]tkttmzairwztsmn +pnhgjwzyqnjrkkw[ofyifgmztnzelptkwho]cgnlnrfdgfgjvztpz[wemrlhyskboycpdbzr]azikmfaudvrdhvfvt[chxmcbgineaycjiwy]kjbfttnqgqhkefoolo +khdlanelfapgxqpspe[alrgipfwfdyguqtk]coxffjtxpbqmxig +sxobbewirkvducqxd[ubfbqjccnbtkwpbxqpg]hgsswdjiudnvmvijt +jzbqaqfubdsfinobsdu[rojkizavtvueepedxw]lcsyjeoyieqjcim[nszibgczunpslecxo]louacmgeotayemh[zvpjwwpeyjjdhjc]jidkptxmhccryujojap +rrofkfoljuossrced[ymvijcmdvrzhcyh]zegkwrmeneexpcnrh +eniwjwjnmgyzescoz[semlscmtbagknxpbvte]ysqfgrshborwtgnwtr[bossxfqcyadppdflbr]pyiuttfsuegwjwcxzr[yaymomeitxwdfvsr]elhifdegwfstqyniqta +xauanaojjnhdgcpuwwj[ccitjseyrwjqvaljv]ebbwxnquaqlhgqjsgwc[jybietxintbtpzncpw]wfkwxwffzxwqucjhyvs +ipmxdranyxbmwlo[ueimjvadwbdjithwn]ifmvlcsneopyffsums[ejornegszbqxtosc]iucimozjnkqkeysden[vvtdfnvjnzqbxujml]klrpisgrmdbrqbupc +evolkocwyejqtcazj[dzleqjleocyexjivik]zmvqrxiqhsjtoezm[sskndhlmxrucdyqvop]murrraduofedtltbtg[kuzqpodvwnewwqdil]otvalnjnbexltsbitwi +ppqnetrairzkzlt[hyydyimhgzayzgnxqn]lwubwuvowsyovjjfgp[xbzmifaqcmpyuev]wtgcnccsysrfvbtb +jpecpgdrvunkjfrp[eevsiosfybfgdgalp]veprfliqlxmoctjx[bcfelthvqqxthqwpuoz]beufleuquitnnsti[aslupsydyktxgqsolq]gctlsoauflrjprdn +yekfawwakhkqvpqf[cvenkdpepuyimstwmnz]fphlenyhtsxxeyst[yohciybbsiokzajcwlz]vtqcjngqpamsvrchix +ougrpfmoohiymnx[gorlgyciageugmcbony]ozmvirifntorlvzz[klsgbagukrnbyzsez]rdzhlkpoucggkcdqm +gfhrcutoyproiww[nzgfaaccfrgdbcg]fcrtnobfhhyzmadxjv[vlbueztcxkkbufljse]gqpnxtlrrhclwuaj[sstrllihglystknh]alxmlywxfjwnynbwfk +opeacxklhjwcefmwrwg[mzqwxyfltfqyepcgnym]cpziqpjettzcnktrqi[mbnwwhyxebbececc]tdkduejetkrqwoxrsoq[ncenzwgjnekbobv]yxhgzizqxwaihedda +svatyxdgfofrrkiksjf[mxmrficzxfyykqekorr]qojleucutcqxqryi +prrhfrigzcmemou[zkhokevqzcspzoyt]tytqcpuucppiwio[mogedxwsflwocpkdh]kkqnructlslbaked[sslztcwiwkudgtji]djssvabrpmygljeh +btundrdlcsgtilltpue[jiunnaqqzfgxauqjes]wtdxsfqroorcghqk[qvyzuidvkzmomfi]cgckuokezrtxrgdlo +tjcpdjzfllhwugiy[vxypwowarlatqjlwq]wnpwefpgpfcqqwwrsq +zfduowqkrccccgggmbl[iwwfgrhmjxgljwqf]cminvjjyetivkvhvkdy[ismlcjjywxxvaehvhhm]eojlvocbfkftjkapzs +hzkrcmpwhfnbwlisg[wxwoegwncugpcfwywxe]voktthitecybcfpnz +dcsrtgkbstmkwlzy[pcnwmgmcmpsiyizqx]pzjcivraubvgbkdahk[yydvhvyumdzfmjuso]bfljbkwodikjenu[toxagxhnvgkwcivpcuc]sanysdrigussqum +lpcxkqrspacyzrqhbhr[vdcbkamwyjnxpgjpm]afxbzzxzrtaacbypq[ftbpiplrdrreqesthw]tidlvfojrlctjkfel[iibzklhicpqjvzrnza]bmekkyjigxxtegqbait +duchvjohwoouxgmmxds[qscgkenygikbdrsqc]iovrgoggtgiebylbu[iqqrytrhujzcywwq]ybgfnnhqwfpfios[dryqypecmskrqux]klqhpvydovzggsqo +gwgojmuthbgcalzvdxh[njicnwbqdckxtyxkj]rwyptcssdkdqthiydea +yokzqvwcycvjgouoyw[starlvyjnijeacjseo]iehvlergdbswibmzci[ppmriizuqubzfehcz]jartjkmqzngigjvl[izpxafhxdmckrcuufu]pvkldotwdzdluoubpnm +rogyxrgfqivkovtna[xtahrogngfeygkasq]kpcpvtirxettedux[cdlnciogkcsaras]bupwazalrmfnjufn +eaeubxmpmymzrfleut[eharpivgddyokps]wimaximeayrixnts[paysmyvjuzpjjqr]fcqykmkzbcbyrpy +exvlqvnfmpkxfjwbhol[utjaefsandulqaw]xjrjchxifscadbld[ifrckhdhmptybkhrj]ykcqgygngiwzzyfnxg[plfhikkzndknbpdeeu]siwtfnlbcxuqkrhwj +ljihefaqagbmffbcr[ccmafzhpsvluglwsgh]jioaeefkgujinzlgn +rgysyaquiuyvtojxnaj[gcygzkwqdebiqsr]icaeuutjodsizqzfvj[qapmsqsaoniuinsz]ppgtfxsblzgtqtaiiey[xlkzyyvcgyhlmvnzrpr]htorgwwkbhasrsbvemq +coiurrjhxxkcplh[nkusmllwtsuddqasyc]vyxzujqohjyctyv +briulribegnliapcimw[rgawfayyoopbosvc]owgryasogyewgxchxgr +smseegsurmfktgmefhw[paopyayrwykwdvcjjhp]byayaatpurrllyzd +mvgbtjdigbhhywarz[pfrhqtizabthnqrvvw]azdztfkkfizbxsy[jozzjtzkscklmdt]ucnptpblgcgmkeojpl[nqsybfqdphdncqgigis]yecpixjgagdgkbz +zyuzikehgrfaztne[oaxgeczbaafnottqg]kuuggppqtgrncptm[tcfnyqvqcijfcfdljh]pwntuaixpqfvyoatk[mowgvynrpbvmqlpucq]vgopzmyigjbqlismti +ostutlkruoevsjr[qnvqsxlasjyrdyyz]klwvhuhmvgrlcdy[tycmevukacjlveu]mvxcfqojmrijbubfm[rbodtpwkkidfrnhayj]jsbgdcwbfdfflvupn +eaiframmiukbcixxi[bmqaglfamrqoswuhme]lxvkwmzgauwmabu[kxusdngtifhpmplxl]sfccogjqnblrahch +hcjmrcnzrhznwvtjby[lxmehjbnudevzmhx]ukfmdplzriyztnioty[lqjesrsxjozxcgfaknm]qifmjftfaswtrjblzf +xmhpeigrzvrgknc[drornrcakzujdrsbrvj]czapwkwkwwnkwks +sfdyqdpsfcxebamsf[vehdpjffaqhytqhhbi]urolmsuobvbecvcnv[toagfgryhwfgfwxmvs]btjwiwdrxnpzxlxdsdi +gnjmrczrqiryaodop[etlqbnstgjysesf]ggmbohbzrtfbapbjg +wwkqbdcmlkfwxwdu[firsfuftyxwxpcicu]cntzxuydyjkgkkfvdl +cvcsgxflnidiwtvy[hhzzbmygwugzsfnus]evzlovhsgqumejki[btikqitubnwzkhfyhh]xwxvlgyojlmkwljv +bzuxzgeuobcctajvva[lpqpidtuzmrrnnlgkqu]lhyxsevugkrdimm[umbmngadfcujqpqr]nizwephuepdykbgj[hfheiymxxfgyxyl]zlurubnhkwxdrwllatg +gkwahvrljkerohucrty[lgxqhorgrscmkjqcziq]otxkbzuzncbznvr +hpoehzfotnjpnhl[yrkyqbolznetbgxmy]fblwkhzfebmzavscyyl[lxvxgdkjvtoxjpu]oetusxkoxlpceierbt[faylwjcdxicxbqr]ledknznfnaiaovejww +xifdyajgrrrhakdqhg[qtzmwfjraqbrwstiibr]juciognmzyafmai[lgbmgoxqtjngqpqkwt]zzkhrunuborvoajlvul +ekecthrkwdbjhsy[klxbdnucasemwhlpjj]jbvenwrnvynlfyjybm[zgfxxurrduhtlmsbelf]lxuxlahnrqvjssffj[wzcpjiesgsbwbtnlrs]sofzsskbviyfvlo +jscqvqqdwvkvrqcb[vzfqbgopfnjcekjs]dmspregwlklxptp[lsxjobfksvzwshdre]yqfwrvjrykinzeon +rbtqjtepvufhwpjugj[vkdhjmfkeocnauedxp]vpoqmfpnmjdpcxw +ihhaztfuasflyghkndl[vseslcbeufhmrpyfqb]mtcgpfjhjeowjpqc[cabeopcrmhjhudob]fgeutfapismkdwqxmal[wldzeajldxlxpwfrb]rvyuojjnauuitoofgcm +ixrzwptyltfshve[xwlsfazypzeuauxpozt]nwfgkbpuxeauadrgbbm +vppgbcdybisarvokztx[yuykfmzxbgfwzdohup]vlkdreyqjihmdksxih[iysfrpczrirzbeirih]czkbhrqlrovfkmlu +iaatwbohmiosyiqfq[imajfecefyujhwg]aanaybxebrfpdfxxpgw +qgomsuglksqobwhaq[fzcrputgufyvnesoqwe]ipziztlrfmlaizts[pulgtrdydqegbymu]pxcyeozdofdghkmst +tlxidzqdeqchemiqdsm[hacfdsanbiffzhilct]jtclxgjapfmwhlkn[ieafoftblueqcped]lauckblqborgtjnj +upkkaykvxwvkgwgztzp[jmotfixnvoqrpwsci]wszntutpsjljzmwqpgp[dbnlosuwazvekoplb]bmobthbbmitprffl[qkjfwmsronqjmylzcre]yaulmyfoixmkgjs +zxxsmidmqxjigkbos[iwsufumylphrhyx]uqmpbcxmvhzuppxqopf[ykipifsdwkpzgmt]zzcwzmwugdzckey +ciakjtvtrkgrxvp[yhxuyhyxwytquzxujw]lrxibndatfiqyltehl[nnadhofokmcutiyc]vosxtisllkweiaapagg[vwniutthbrvmqrvik]aixaxvddxrdnmmt +mbjsskcvljlehsxc[cknzgxghehlmats]eqknrogpyfcmtfhso +lcbrfrsccsbhyhurc[mheohludmokwwjx]bezowkrdzwhssgbvydq[kiwqvuebvywyegmdyy]ioskcrvqcagocnnh[zgttakbraxpcsqsc]hmmqufyflbmjlcciqvn +ezmqplezxylckxcqjxn[pdzarngoyfbjgyxqxgt]yokricbfoocmehi[cffrwwrwhmilnyf]uaybztxphgccfuu +xnjslvbmmapiwwpq[qmuxemavopeoiwnebts]xmrajpgpgeojtabumm[tbjjrgipnfzjafi]hcuirvleolclticur +eltfnqblogwvtjgni[bjfxnnmgalahvpdtvku]eingohwswwabsbtb[nxsqsvleqobfpxlaxj]gfsbsvcbbnwtuktuw[wrgcswhmdtssvxobcu]wgsniklaxmadgnjd +kxpuygixzfwrwzpzsbw[uqxqvvupyvvajkcysh]scshpiffohigsgm +ovchugxbmthhhijq[fznmygfcqewzomfgbc]qczlousnoccgyrgs +imtfinjttxvhtcll[xiqmbmrcqdxlvuf]pybqlwqezwrkvikns[usjydesemedszquseso]fhcgyicfbdrmgcnk +aqnavkllyitzewgs[cbbqmbtgufuvcun]iugpkakfufksfitigk[lyqiierbjucxbvaux]szbwsttayzipkcdb +yetucqvgffnvnxqx[pvgczfwkehnfqxawz]vfxegwcevafevvzx[ukcwxvnvfnqvxhfa]bdciuylrvfkmxyi +yvachrqguvjhkrbe[rtlpuvvfdvmtqswiln]jcyqjdmtzndhrif +rphybwiwiszwkkxm[waiaqtuthjgfgag]ttlnqhzfagaregyo +unsmoewlzxuguuwu[dyqsnohyqcommmmov]jipyewobyjdzkgkgo[yphyanakgkgvybsx]pjtzynsvtltzzajc[iweuafprefmbuekk]rwelzzbkbqjwjrw +kluxazqhqmcrvldfv[dbxzgwsfmxettwmgj]rgvfmxibxzbajitnud[vtlbsgrkhnfpmvvkp]pdycyraaqooszqa[eyliotjigekmtov]eiopplzmedvdvmwt +mlozzkwmfcrdlvns[wsdduzxzfvlvldpjvgg]ywqncwocnslofij[sakivxaniergaouc]nzmhdlkxeiehdpuok[zfwtadjlizjcauurkq]vlvtdicnyhseqbeo +ssfmkfdeguuaqdbyqub[nbobgowoboytefejnz]fplpuipnficejfsuid +lljnuuistrsmsjazzy[vccsskujvdwxypuk]jhqjqhfatmuedugl[hufmsmgjutabctabusw]zcoiiovxkxtualjx[zdxdbmbibryrqaubxy]tyayojdxepcpmwi +zursgksbdkuzemouhl[sekbvoxwlmumyrdh]yxafewnovnxivyp[ajjditfeeocipuvdl]ygsuxuhtqervumd +suxzfxizhyzbovsz[dtamgkleqiesxemqkgl]vjuviztkxzchergyx[tvazaqnrstjbdts]wccoiceucunjiuus +gongygcedfxwncy[lxtpoagiqvgiryasha]elmaiygycycdtsclhpf +pkyqsmcicydbmdagw[ayulcaspxpbtnegeoou]welxvngiualigfefv[veqtcxgkgzveegxckee]djmbhovzjfexqaedywl[okzphpgdqtpicit]mistlyyaoyphetsxqxi +uwrxhstckbebnlw[yhflbfhsqhshieo]dvmzzqknrjcnwixhgk[upxuqrlwzvvsgpa]bmnfpjynunfbwunupiv[mbcmrpoxtbzcbijmmu]icdxewwtwcibjotjf +pscqchwjixrhpzprdla[nzfglspgwpsaiph]xtypkrtleiujsfmcso +llcxlfghzjvyhgill[vtqyiyrwujkovfctkk]arbtetvtixtnyavydg[ozxyyroceqktxhpv]maekylkkwdbgwgug +bzagcsgcadoffot[demvhzpdjthrniiuvj]nwwrkguuemsdtvspi[sququtlqggtpszucm]pqaqqxpssdgniycn[lkdwrbxkrkiqdxjc]bqngsdxlxxvxdvqww +wijjgkptnkbnzpqr[zylewxhygsxcrlyi]nanyoaosbxahyvdsett[kojrflwbltrombqxo]lfdpaptujhwfgrrnf[slsmmogpspgpuwnce]sihedfdnqnejevnw +nutyeltkszkulqpt[cpgdmqleitivdtr]veieyzmfjafragrcht[nzudyhtmpopacznkq]dmywgwmnrieiohcuf[ctbktcgxznhoqoxczzf]bqzffvqraxpjdcvt +akgmlcznqnhncjknbp[bwdbsrdxqqmaavngjc]cwyygvcrkagmmrciout[nkpzkdmflljxczogs]mqkafcpxslquyrudeui[clvbdgnkrjdpptqwq]cyygmkgtftxvsbbbfgc +fxlpnkdskynkosqpp[efnouhxslwitteqrtx]xjxojaxrbampbcknga[ugewjlmzbspxhtejamk]nrtflumsbbtkejw +vzrzmtwbxwfhyjvcmft[wrdvmieyzckycagwma]izyptswwlzgivtgyfd[jaujtzdzregakjk]cjdnelesxnhmgkqsgs[tjcsmxghgtmstejjhb]tzqsgoiospxadncn +okgjhnzaxrtektb[sleqpxoqckdrsiwi]jzthxxszazdahvhq[mgxzdqnfscpqdoykr]doyvhvnmbshvkcib[jtrsntjktunoxxn]rmejgievrkrxaziux +fodknkictemsxiicght[tdltamcatgnknki]hzdspvkbgipuvnb +xhhmaiussrmwaxcpoq[agyegtzmrcgdrqiiv]akuxocgoidnfmkffroz[lkkfnmgryejzyvjh]ozdzcbsfmllaiyclho[vseayejwmotjhccg]qfqchpalcnaweyo +imdrphyleudnvhc[lzqochrdcjotjojk]cwsqzuwoflalwatlsd[ctefovkyinrjchrwdav]cmnbuqveexpaxmhi +vckjhzrdtpyynzbdsad[ehjwlyfbffzszrx]aizjcopfbdgrrtei +vfkpxnrqufijmniu[wnwtwpmgtjonykmcsp]mhehavmuivmxhdelxa[spyybveheykroybw]bfzudojcjhzckbac +egipucceijeltfoz[jpyjfgsqdywwjillf]kltttxmvrepsures[asbzcnwdqvfkfkiqqs]usnadxpcdxpjnifm +svsbijigntdtxph[fabzbljmijzwvjlac]kieomhcpodzimrmqoc[xusohhfobyruazi]wxkjzzpskukqjirtjc[iwqdjijjucrslihqpo]faezwwmpfpxenvp +sbjgcnwomllqwavkviw[pxekvxjtjbgjuouft]puzjbrwmyzsxclgmqsb[vtpnaljnxkgwlryjo]lhqzwvnpkzsdndp +fyfyvifiocceoozl[dmjxamblfosaizav]smoyhjbuffpgqdl +tlbdacsdiavtwucvf[npepgjenhdkgfavbn]hvbffufjyehpsoa[xghicdcxptmipfxlz]lvducqyymcqkket +nuystaihvpelybkvch[rlqyflvholahkcxw]gicdfjzhwwocfejthx[jpeuakotyanntiw]sfsavxuyyulvuluyur[asngaxekprpfzsvxx]rliayxmjvsrnizh +axquvvjwulrntbzzf[fddxxjwbdaecbsderd]vjtqwpjlhbdhxjoh +cgeyfvgczhhwbdz[kgsqgnalsysssiyhqp]wqzhbjvykeuyjxgfzgg[mqkzclianfnifjdql]vbeyhsxsfmoeanpnipa[sxmzlhgrezqxsxzzcku]gwmgkijugjwtutmgj +nnjlbnnasmuhskqu[shbjjccjlumeuigoim]ndwzzmbtazttjpawtzl[cnkpifihvkmsallifij]ccpzfojfxszmytbd[jtcogseximfojmjm]bgdltwjrqciyqfifkh +pkdqnzhjzcttkackdba[mucwutymaybynvttts]nndhioamrjejmibag[fndcrctykpehoglop]rgxjwrpzlqapjsv +nccuyvrhzyszqnw[ogdgzsefffyfoenfh]jnqnhnyoyrcnrowjmpv[wmlihztaoyedgkg]vneeegnosrxphish[uwrmezbsmqbxjpx]jgfoinwzlhyixzjzv +kriqecrnaeujvuzw[lruowheuwnintaqqxcl]kcopdidcqinihhmk +vxkblgxcmztnphdzf[ysjhxgovujrpagndi]ezgjwgowcdkfcstfhr[hpxrabjwpymyaolp]itcthqpgksvedadl[stfrippovsfrwglisp]eodicmiszqhwnuymlgn +jznqrbdgjcokdqdlser[xemhfhnwbftgxgjukrf]mhcovplrxcsixrh[xyswalpqqvgsvmqvx]kjeuyxksnmydfkakhq[zcaydzhceioawvrlsm]wzezpqlhvwcgzjzigtn +vedqtirgwrgutas[eegbxmhgykfrwrwy]pzslegjrbmdmeub +lespviexybwomljka[dxvrexedlclnaurw]wzevexsobirvepgpmt[rseoofjlimvxwro]cyojbkugwdzjlxsqd +fsdyxosfmlqfwoqpy[mwypxaxulrbjsfi]ghywyebrmgjsrshgc[lggfwxlpovrwthxtlln]zmtqqhkwabuhvtnabwh +smsgvpvsfaxhocsyz[hgbjpapisxsillo]qsgxbvoijxlwhxpt +fyfpxellnptlqfxvdn[hpopfkwhgcbjoze]sopowsrtqgbpysjfz +qenbpbnrikfrnwpq[nmkndzwogcgtzhm]zhuslfffixielmjaqpb[dtmldnpqizrcbxixto]wpspaoprebgbksq +vhjgpbgdoeoljigkqde[aqojnqwgpiredyffb]vmlvnnohhbwzouwi[rldlmezoquqcodxghov]bhwnyaxsnyyihhgv[gjjezirrmfvkpvfayb]uaxxuikjcwppslge +fnwyhfrnoxxjpubwe[rflutoqwauqbztk]tmbmyhpncgpkzcqvv[dgksjzbgbuzlozns]psdmkqjzxdwvllstru +vnrsujzctbuqnbu[glgsyfmfeuoloohqp]ybhziayoqxsbopf[vtwnbpqxhgsfguztg]xhgvtoqwouusyahedc[zcchxnllferklyt]avgtwloloznygrb +rojtxmpwxsledhm[xibuxgovbxiejlegyc]xihwoxmzghhwlsthiou[ywkngtjxrhhozglwo]zfncywcurhmsfxxqjbt +vxoojfqikhnbnrh[trdtiatykaontxlv]xenfwokorxaeweoz[itbylohijtfjgdtmkvc]butficisomglwjzaa +wkofaduihyxhiyrvjs[deskgjgenvxxxupntfl]ralmugesymrxreommk +ozsnpcdvkykxguzltcp[caargzwxildtwswp]capkmhbfpfmdegigg[sigilgehfnfxlza]trtpmbccrrkpggioz +pfuhqwjjgyzbbea[yexwnbudioaikfsqlca]vaobiurftgeglgrzl[thjpurqfzaezqxfajme]seuekovcvvtdmlixf[mknpvkntvdftjhhhfgh]dlgqajapwlgdjnwybp +jbtzwsypehgrmzeg[gwskjuqbwedzxfcehr]xpkfcuejevonsinxs[upnrxgjqhohlyeyp]dsyhrudzqsibolxnvw +skjjsxxumbobzsckqk[sqlnqpubrayffzs]hseibigmtjtcgbav[khvlknemnqiekxy]fkzvtfscvoatsfqrd +dozlslrkuemgbykifp[bzvnluuiqdffwtf]tignkmwpnqrnmefaqm +ppxwcouehvqfwoenqo[rzmtyyvedmojatvvq]efcstfsjslpqdzvhb[tvmkwnuxestqxfockv]oqskydohbmayshfcihw[pfyulawxqbaiehqvmwi]wluhmctgrkjxqtlmp +uvqfjimhzqboivo[buuulgcbqgfsbup]wqnbktwxwslvceegi +muiuadioyfirjks[xviqxaavhdxjkkccmrx]weauetgyttscsfwv[rzgaefcngzklpjqzgeh]jtnbnuuvbnbjhdqn[idjpczmrbomwipkv]vbgcjfvyvnxhdsmycx +hmdflkjbenjynzdmeqj[ybyntwgyyptizunn]ctijqxbybwarmfzpit +khhocslzxicmlxk[xssahaneujvceofaiyh]swrjwipkknbnrrrig +dvjvkhnqyifqzse[myleyunwsupcnfagq]tmtuvqikqxzdskqcgxp[lblzunblboznidegkla]eaqhztxpgjuijohkdru +mqcasrzjqmhwbhbuyc[wkfahpqjhtwuiybqae]yzfcavhtmzofqww[goqblpzkmfxynuzm]bysjxjeocperndv[uwpxvnpxqhfnaalchm]lyfynynkovtmfsi +wnczxavmjnfgogv[oyjxcsvrrgtpkponga]gzhjlzgxxjkoklgm[hsrwppehbugkcap]zayfyoqorpxefqenxc[apojyrhryhfnmksa]uwnuxprqfxnkzkhnbji +iylrycmvbhpowmdvwy[oepptahrmhsoiskeoq]vtqctnyinxvrvlpl +iauhsxbjgxiebvfhbw[mnjywcztqiajiqxx]iikcygxzeprjwkoniqj[tqycczkvsvlsjetec]mwrnosvszjhmuoiyzxw[klgtgkaxohfaogm]fsxjsgwondgzpdrbbcl +bfqtwsviccqwndca[juqvrcznrlghmsiz]yttbexwewvvoehurkrv[mkugsxdrbaktcqf]yrqebvyxlcqjwcewg +ytoteijopgxfmiokatn[oppmfhkktlewhlq]erycfxfafsiicbtx +xlwbkbenrohodfnmuv[zarnezgnivnmged]vyumskttvpderhzbimc[hvbbjegwdeeqtam]fopblbizbmbhzfsdnzm +rgmnnwzikyanthhp[nvnhsgdymtjeqzurz]mbqxtvwhpggnbcq[apeorjqexywhszrno]qaxdcaysefnpyviduz +vjaljdyyoihduumfo[bpufjkyqjvxoprdwrr]ccjbldnkbzezeznmkpu +yhbnzbxqrvzrguxcbss[unzjeicvhgqtwek]obuccrvnajbvkcmkzh[futhsovnghajatalva]humwbgtpqzjgordah[kvxmlpebzsitmnjfnz]olxhcyqkvfkqdxdc +gsojkejbnpgptcgeubr[lgjcwaotpdouravq]neezbmtkclvcvkqncw +qqdvpngddzjwase[rtgandojrzcpohlpknx]qdnxpiawdlklkscmpa[qtpzakubrncjzbpr]efpxwdvobcigtpu +boxlzukkqchmqrrpgk[ggylyipkjdmbjfp]dkckhhgapbgpmygpa[yfetxkcehafknkmk]acqmjcsvxzptstswuj[atrjixpyeqordilgj]eccoowxhivjiljegqm +exjgzzncnnehrto[qnhzvdfprbarmtdpp]rcdxdswituqgnsix +tokldrsfwqqhetyw[muqzhystnflncxm]pjpmtwcamluvvvdsu[mpfvycofrzebemw]mcyzcqfngdrjaioxzda +pqhnhcbjoqjvgqh[vqkgnojpmbawemi]lampvrpcpvxludprfuj +vbdpihaehliobsbciw[cpaudttavwxkfpg]aidtxeypckfsagubro[fpaiuhpggzpxsctw]danwtjnlhrbfipgfbq +beoecqatqkztrbevt[bdqoxnitxmdqunizj]lgquhovsnjuxqaml[vyfylkbhnsdjoezm]ediekdjfsnsodqep +cnaisicaronpqbihlv[ajfhzrpysjdkxqpql]dfznlmsbuozjlqvf +jbgsemiqgxmtwmdulu[ulbyoughrbpthdlvmvm]dyrxsdesjjwwfmvmkf[gogkkkefuecieipe]nimswajpymtzyleew +haavjxuwhbfxlhfx[rssbpwlffrpnsse]chremerememjcbfuv +losdtsrwrdvwzbjf[daaxdqsorbsgznm]miovihloamfmovzruxk[horqrumrdnjorfw]shihudanlgqfzjf[kqkwshgnrpwudohanr]yohqqtcywhqawfhi +trrbdodxpewxgcyryk[limhtndawxliixkkq]ivxmixrjddqlmounj[cfhqatncyqijnvjv]djqfccmuvdnsylo +yfdgkwopvrudzsww[gnyyumqxrftncsfuaaw]zfiekmyvpseaugfwss[etzbbabtbkdtgbwf]djmbswwpvfsowmqdlw[lpbkaarutdlovoptrke]ukztythdiepqgemm +huwfnhilneqaecp[hdcrdcipgcaxtbfouo]poacbxvuqwkcilkb[dnpryjlynwgzbrnbc]hxillsnqqraloociaqc[uoyktvkfxkdkdopnbk]qvjeuapououufksmwse +lfbrqypxgthlyxqzywe[pcxfduxttmzaxtr]gidsxacxodigyok[qyaamzuhjqqnpdsii]apgfypwqjpygzmdtpj +prkahitlcoynnubnri[rqthrhhudrvryoea]urkuwyabxskqbsyfgm[dyagznreglcdincwie]okvqdhlixssurnd +qrwefbcelgjgpzoe[aedkjvzurwcrhdimb]eaxqgpvkewmjynmek[nmfyhryoglbtdgq]dfnecedmtcrkfyq[omndbxvzczgnojpl]trcocwxxczcxrvjjce +pphzgbbfbqmhbysodv[znbyvvkjlacgjrwlnkr]iyjpdjsjryyqsoblbyf +lziqyyfhruzfpwy[upekwttdqzjxspfzcmw]ptdaapvzenixlab[wvsdrswafuftmysocc]ykzygszayfmgenk[mylrsdifhepnnsst]tqrbrvifghuesad +jwfyweiiqvjfkvp[gsmzrlbjdpgqtbjakw]oofharmppecdotcw[dencjxxfrzxbuku]ygflsusvcrcdznc[fmcercvqncnxcbbwcrn]lkxshvdqjairdnnpz +mfspfyoqeyalvzx[zwdzwlsmnktynntn]eeogyyanaydeykwd +gvwvweokjzagobku[ixdetnocslayahccde]juncfldivihwfpee[mcpxioooaydtjmojwm]satqvbxfkxhfdrgoin +yncjgygznetzrrh[uzkbwhtbtkrcxcveik]gehtfqltpixmsuami[nqhxycgquaihujx]ndtusluyzjwufzdh[ppvannvzrnncxpcfbyy]kgitvwtucjasvtk +feushnbxghbeqsu[utnmthhouoazgbym]jmplltesvrbrllei +ijwbtaksbikedfm[gjckpcivddahwkp]kubvhiqvktkkijchj[qocdkdejflyyzwukfrh]qlnixtictiubnfhvv[ygbwjbjxtvfevjug]dclcjonutlwyqaxx +vqtafpvexofwcfssx[zmlfsfqivipeumubau]moqspxvivckaesffn +hphwnfopanasosexay[ddmqqktxkrurcry]slvhqigvbwonriydzb[ynanjunpszocqrjqm]fkdtvygiiddygcrg[jgumgpiumyhktlhoeom]dkvwoureblktplcjmi +skxhzizzzfrfausiz[nakguftuobnmkoz]buzexokukfscgmmfru[jhpsafmtolwlhvkhs]hznyqntiienjmspy +ccxuwxzdxtfwbpie[shhongtetcwukjbre]nufocpasneteinfkk +apfhilvripbjswmig[tzmvefmwonqiqdyt]szdbbwkkgaqmjkhpuu +gmqjznmtepctxpcfnx[eezqztmqxceenmds]avqugeuarwprizij[uumhklvgcrkfozd]goypuraafiwdcvq[zueuogjqbnsqmjfmxbn]ahgjvoxojaumver +payebfjnonvscnr[nzubpmedfuvkiwqkycu]cvsjgdyfvzippxu[gmiawxppknjjmvm]spdngdktoclylmo +ruhhexcfvomrhibmoux[cjkryzqtfkckieyzuu]vkwptpezjrouirxq[sggqhkgstdzqikfnxk]zxfgbatfizeivfkjbl +qqizwnfaajabeuskjdu[szujizggsbdhvihk]wxjmzdiqugjylejfu[dfygnnvhbvghhyuzo]yeaepigfgdcxbav[schlmqwlcifeqjhixs]ifaxsbjyirgfmwkaott +erxreojjauvvlbsxomv[xaneipervgreexmp]itfaxjxrwueyrynk +lgzbkiqfbgvdnyt[milmskrelgdjggvtmsv]clolytrsgczyppvrhkf +ryvrtxkdydhujxapwjw[ohgtjdaeifxzuhoqc]yflsxucxibqkcpft +srtfcyyruyxzxum[ygeoeyfnlufgsjxjm]ifwimooynxbrsxmyk +rqbnowuwuernuxpim[zzumupyxvnbnngmc]uwurpinkjmkckxx +ikzheexqxrfttoy[uwegndkenfvosfpm]acomhjgdgbuelap +srookpxqmghokjoegi[lhpppxjenrjqiri]mjlixhnrirctrsupv +onuiajxptpjwixyvp[otlnjwravarqmepwyd]hmnvzsflzeyrlxgpwwh +jmpskqdlbuorcpwpqj[sxwomhbdyomudfaisda]nvzxtvytsrqqxbsug +lohoirsglnfzmslubqc[pxhygduybnlqemp]eulzazwozzqytmn[joeiaeuczyygjtg]tnowqyhlrtmumjyrkp[lidmrorxkpcajufzib]ixxyjcoocfdgzjbhhl +tmixfdhagahaqeers[ruioctblczdbnusokt]orpjrznwojfxnheoqbj[gbgyexwumyintxi]tznnvbemvedlpriyu[ibseuzmfqmroeeawur]tkggtpbcgdthcpo +psnbkiuzotsmeklinng[qhigmmuxrpjmhuhxt]urvnxarbhbsouap[chfgrdkbxmgqzdccv]lbopbgjsbykugbzfp +qcneczsyljovqwlnjz[mntyylfgsuvpjdp]osrpdqguiouevrdq +xvfraxzgsypwfmswwwu[oyrmndtdginkvlzdid]xgtwrddwmukzxypxl[mcjxgiimlmsnizirzt]gliezwdntsgoxznesl[vwypsvpvcaeyzivjo]zigujupypwjqljxaie +xayweakpavlylgjl[hxjyhvqwnyixcesj]yuhyulfybuhvqiinlso[eyopyetglenvqzqhnqr]mqcovyockdqdqvfer +sovuasutixukkuuxn[jlvxhosfgqjcxnlmxql]bekpnvhdbyhmmvdhplp[xohnfpbaeqpbfnfi]eobpufxrrjaajjd[snnfnhoikinfhioa]syhkocukumqrwcgw +vhgyxqcvafubikvakos[jfivvuhbnehuqbeyu]dwezavodqhdmujzc[naepoqzmbtiraxhskf]bwuozbexnzmpukgu[zyzfttszjkatnovj]sgkrklrsnjzduvvjans +yplxqjomjxguqxjjix[mvtzncrxfvzjofx]wlhvxxzsdcfptbse +ddqjeqgctjkvwge[cbgnejudebflhpm]ryzxhqqixwsoztz[hxszfpgrjuxxipt]zuvvwbmdvqbqihy[gjfkxykdstapfhu]bzprrjdyjlljxnxb +xbnilldcerusgpejs[pvldiyrckxtgoesbti]ljqvtntbhxrryxcka[gdqkfyumjhgbzzwlvfi]uekphsrzawxriyei +egwrxuedgpcppavzt[mbblqsizmrxdwdrio]dzozhiodhtlvmrjcygh[gdzijmqhitlbhfw]ewvkussgmsnietkiv +oraksmkemjiapbdvqxc[vvgximcdecwxmpbjsr]breycrlgdwgnbjy[oqqtlhrvdyqesttwieg]dksvmqwavamfdma[fndgywlwmsmaivduv]mfweojoshjwolwla +pqpeytynxunxdfyxrmr[krtrvrufaemrmit]kcgnivmpvqoagjmharc[pvkuwynulvvuqkif]mvbbgwnmngtralbe +nsacyqfpikkoqqxp[jdcdddcdcylpjiled]jstcntnjxszhichrkw[vzfusiwojvrjzhevjm]lywsheganczawtqb +rtcpdankaboogxhbqj[vfamnogaxasxdiiizk]whpyanngpggqutan +qlxjojmpesvehkggt[flysjbaoiorosmpzcl]wgpxurstlnopucd[ewkgadgmllrewtwse]icnqidtfsqjurnkw +oifarludgzqkwtdm[jvoeypeqpfivakqyj]dtcboyxnhejlitz +npkttburtggvbsfuiwo[wvklzpiffhreyxkz]uhuynxjezspazaudse +etaapuxqbavybsp[mndpkefjvjupccx]pdcnnncxtrzfvlnmq[ioehzamymeougocos]hcuxkuwhwvjvysbwdo +fjrsuygcrtpzjsw[rhfrgfnkhajlqtqdp]hftckgnarcgoyfkmimd[hkldanmovhazpcpwhl]qomxfqqhkcuqhibrl[tpbrlhcndgbxuuzdng]knqmgdkpbljyufzazki +zydstadkygzvjmxdhu[qtgaglwyzqncfbds]dqwbpmopxmdtkkcj[dcakbjdwzlglkpndtb]nijwetvoulkydqukzn +hbxhybosbnopyxpnnz[juewibpcgkchnerk]pvdtzqclnvdbmwjk[wmtpskdcqiiythces]kbhxnzcnjxhnkuxwft[yetvomdrmxarjwsumqv]pgumogczlkgoiyn +zaeaejxwpzbqtjiutt[eqjjobopoyuoxymtvb]glxzffwpiwoqcciyul +rqrvuzjvcgaancl[pmxugkapydtxezz]lihcobqbdqenjmxyn[aemdyhmkusmchckzqnp]tgiijsdtqtqomptveju[mvaiexukertbkyinjc]pjuulfqsxhbpdiy +jjygzflwfyeiecuztx[yrziwmbdidxrjsouxen]bqkyguqcejsvrkn[hzipqxzodrnsozfmta]xvtakmgzpstbsivyt[ieiucrjmzeupsprslje]iquppghgxqhosvjzc +dwprarljcykiecn[wvdjaraappnffzsih]difkjyzhcyzgzjl +shsrycjlblbrcpv[drktygzuxbooshwhute]fanflcwacerdevozor[feybgvfyookhlsoivd]ixzfmefkgvcdnxqvy +rgogoobzbggsbeynx[nlnbqvcwdyzkbaa]prjegdbkocptzducz[tjanhuiieffrdspjf]bhhziiqbzdlkdmj +yslioeknctqgcwk[szhjocwzxxkbdoykvjj]aowmmepratdcjkgwjhe +yrfhkqrnxzzyvrocav[rqyqhvtneezcivu]hunxsvslxgfzevsvvw[pyyclulboseqorxoihs]akjsixprdzbyqlbupi +tcapvmyxklqgewra[pwxrpoxdptxemahbrot]ncwuxwfzukwcatres[ftlzvkapguezyhnsgl]ermejyvoisweiqvi[wynjqudtjghztati]vhpdjconbhhejafgfu +qkqbjylknnexhcziot[lwjbulvorpdzrhddlm]mvvmstxnwigtstskoo +wncbdjbvzjvrrunb[riirhteyuokxshfmxed]sdcpacarelkhxkt +xxcromhxgxqeokih[xxcnkwhvsylkpfbsj]xipnqesaslmeqsnu[rmzahgumualwizqnf]mutxgygzbvgkimvab[jypnhvoztklxkxyzsr]qhuxxsuvigbloux +yenrilcccypxerlso[dttyspegodnpefcpg]mdhfzxgyoxozmgi +jndnuwbhvaciqduyfg[xoeqacufaixieedbtnz]mpkkivmhxwxujcn +majifpotxhylyshir[mhcapgzvvwadphfid]rjaoxsvqlqyvqgtxte +imhzefgngckhvgqcjr[zysfanhwbnqzysui]zgogpzkcgjeigcwpv[jtxumxvjpotihpmb]zuuueogbabahhwa +ijrqngygldyukndxhqw[xlcwaqfuzjigxddxjn]mcuyklxezeidilnl[atvcyujrcexfnknulm]txxgigzthrbbqna +dvhqjqbgudpghndlvu[drhjjaxeomuoxxnagyp]dbeymfmzzevjydlzk[gklvfdcdfmnfvfslpfn]kssctqoyxognwiem[aojhwzwnegpnydzywor]eyrhiouwbqfpeoto +xznkczuhsgldtilz[fhdcsnfixqbysff]ppbqiltpbrlhjliz +zkfgueqzataygeavus[nymgcgakmtuwnkidr]ypuhovawsbnmlmpo +lnjbdjnhhqeifmi[diompfqeocwmuqi]kdawxfqtkschlgnh[fsmxaerroipesmywqa]vqpxljxwpzudocn[sffzifosvfuytvdzb]fjqfwikuqzhzuthxzq +ecyyeabjhjrfbdqy[xpqhxzehjkjhotrdlk]ztrkutdijjkmgzkuci[hwdxdsprkacxjrjjtxw]fbhbrjzwubhgjdwvpjy[vppgvmthaqkgzrzva]xuhyvaytyufxrkgeb +tbeqtxhfqbbdrvwn[juqpksgrfsbsqdx]znceqzwqsfrhavmetys[khetxkkpwfmkmlvc]hazxybkgkzrmbtqshz[yavtnkwhxppnqwzwj]hgabdrxubvyvgniz +rwvvgwyfgincgkurooy[wxcmmmkqpmtghmmltt]kgtqowxiyjbepqnkiyu[iofgybnjrqtngltajvq]mxsbhbkhddqnfowxw[ptqpbwojwfhhqyv]ymflkhgfnlagbxddzr +lybbfxollocxnfxfeba[tvjolzzkenoxfxqrocd]vkgswdtqpilvbixss +yurvqideiuqwekwop[gxsoytqhoasfouiasm]fyhiugkvhkbcfcshkzb +rurapcltqwutrslalpe[wsqprvdmmtohamza]xmkzqeajamyurualky +buprncslromlgznqper[xjefyfgkufdkspph]wjncmqpgmnjzmjbqc[miovfouyxitayfs]gtrmwhvmgcliwegeg[owvnsvmazybubxfrp]cdjevcehzrminnc +uxhqucibxiemlbtg[dyshtfhtlbjreji]ilgubuujgmytfxeqzrh[zahfdfyzbhexldxg]yohfxkodjqfdzqe +kqcxiuftivavvdv[rbijqqjbhpdcrtpcy]dijrgcyuoqfzronrfps[knxiljzdtvauitad]hohafhoofjhhhppkr +vbanudfbhmhpqsdpdgw[ksrnxrccuenustesws]bgiuwlkckvdplqygpi[ivyzkermofckkcotkj]mhjspcpkcwsbisbve[mlmgilflysuxqmzwp]afixxyabstclpunrya +mnniaptautqeenvmog[wfqrhlcbcwqhwzj]ccouhkyhrvdcbilshrw +zankwrrkgkejsfiwcox[gcxocohqugmgpfoea]cfpphqzxdllapiaxu[ckfcklaedfbhgino]pwdqreudlymfoif[nkaiutnpwnsfrbzqyuc]mscstkuwovgypqtta +dhhvqxovlmkpzsg[loljkdtjkdhgawrpi]ggnnhvbpshpwoloac +wjepglephkicsoti[lvcfarizbzsudio]httbqobbfjoomntye[rrlwtyngtpvffaanlpw]moqdodrnstpwmhjrw[ujoowvjwddvlqqbbzbt]alyeqayozgbhtpsni +okuneqgdkcjggazki[ebqvcuzvuqlvptuoqf]wvcvzlzipmoamnvjt[dncwvnvagpitnxtjo]oadxpnnqonbrrarqn[ruogikvmdiporivvzm]vicubwgqcblvvop +iqwlvhjhfrfeayiclzb[mkafugqikswvpqehb]ezlojhjvdoyzwmggb[mncadipbeamkzbndk]kpewfgsurwlikle +ewpiriwkjrgicwzfxck[iazlrpnsiynlmfi]srfoarhvphakmcyke +faalgogxxzuylnk[zsgporpeqifzknzz]mjkbrrvswlbgdwhmlgd[mxfiiekevaaosozya]klhonreqfikygbmf[hhgfoolpnquxfxoazy]vcxscuxdbvevulug +curbpzpilaczuowrsi[wmyxdecknwrspllfhpl]quuvzoiqziuotvfl +kugdhavlhuperwafe[ecuvibachziwzefzn]oyhrdjgmqqauqhhg +kcbawjisdirrwzv[fugffzgwmricsypdz]bouoevvlaykmgve[glivzpgoripmcnqv]bsmuvtuxrrzjaxko +oyaxoumybizeabdg[quusffkxbmxajbni]lxxqjhqcajdkqszr[cpgzcteolyloguchf]zxowxsyvudncstwk +xmlnrjsanwjmizgawvk[wlyncljroxswzsmd]waxcvfcwftjxbqxpmvr[spiqjeqpfxanegjxf]sxzszkcgibvfkgtozy[nmhjzcaophbfpil]nrwfxurekvqndbzw +xunbkhekkwyvgcerevv[bgjzbkihvzlnnpptr]huqryhbrkspzxusu[dmrytcqghtbbhhzu]lasujmpjaobcnfj[ebofoyovhhzsprycn]belltiuhimwgwqek +ocgmydyjloxpbsyj[wuhymkumnwwcdprxc]ncmkmnedztlutaw +lyuydomeinqxrex[gukhcsjakylfwqodm]hdghwpfhnwjtmafqt[lqwtforyrybxbbh]fgyfkgvzyooifxa[kgxkzeuijywgdhuryra]dohlilkbkqzjsbx +zgckhhqwhgctoun[ajftizwahkaxzich]wacumictegcbysyn[zzxxwgjdzicxreegal]pwquqtaijwqpkistf[vbombdxhjxwlboqdbqh]hfyfujedxzoceqewhgt +rcpaadoewdfxoksbiuf[cmcgotvayrjllxgtm]pmkfrygwrzuobudsah[gonfdimjagiyayni]ctrukcwixqczltol +jrehwmakkkobozzwrn[beoievlwkmkusjzangv]djpjbtpjpdcjsmopzpw +zsgrycgmryfdzqyfj[yipsuqvzrujoaqga]khjrvsadupzwwoasmp[bdpwsunstwzgzawlu]wxaqnorkgypawanoso[iknpjxzhmqermgl]zcsakkbrkkaimtnya +uyuzptbpmmukyrpd[vmbrbmpgvxdxryzcpbb]ltybhrruutchwbuuicv +ddaeptwdykjibuffjh[ufzsfgmcffyxyyywdu]vrdexhgwtdlczpc +csivzntivihwomh[nprwknojctjnkov]uzridiquzokufgzgjs +gcpleovxfcyyeme[crpzfylaxfpuecz]zoomnthfoptieor[ycybuegqfkhlupplwb]qjmvwbggqxwgeuneph +vwqdvgzzotnnsydivip[ohjqzjuzxyncdbenf]suwfgrjkasvyhzbtfo[qfalzqxllbjohnzvgj]mtkkcwoapdjaysfyono[yqdgnieatutxldqyosk]debyxvqoatdeibyy +lhljheobdtmdowhx[lrxkzhxzdjmemintrq]jecllyatwkrhfxru +howoydpdchixptjqapd[nuwrazvltwkshpvlg]havqlubvtfkhsmxwxew +uwapzmqskzwiiqx[xtyqrsajsrljaajwedl]dgcalrxxdsfhqfdie[svghimwbcbmxqtqhjn]akqfoppjhaadsdbela +slbymelmqscfinxle[ahjtgvzldgftnkehsr]vaqtlbhritaotaxvhpg[chcyoduevjsyehz]jncoccdngssgteldzq +mmkzxzkatapuuwwv[odomzyzveadmmicfb]eiptpqypfvfroxu[bxfgwaezkjrbpim]hvfvtenhpyqiohxj +jetnikaiyuylckwz[vonvdfgbgfxrvjzluaj]zpmcyjvkwghaiuxic[irxghevzlcccxfcrf]xicbllnxpzlcmqbgm +chvpdcrevaqnstnw[sofvzfabefeacnniokj]qdasdxrscvlmwcchq[kcpxsnydjsoviwwy]bkdprrvzdinwsfxkien +cwoamgnaytsfeccbqb[vyysuocjjhfoixrtmpr]junwfwadfbyukyvnw[lcwtmcbwdkrqngvqi]vevlawxbwoqcibmtk +seboazoqdqpckthgk[psehbzatcusxwqa]tiwgrqjikjzwabuufp +ouwlbqhczqgbljktjy[bubtiannyvmvkekhwbg]xvrlrmkjwkhzjjlia +vatnmtxixznyvdvt[ftzepafpamiqpjulci]izhqwdhnqpyppuqiv[mjqocpfxdfcgpgmk]yirocnwnrzchhvrbfb +eehvjfqvnwplppeg[mntocrytmuzmuvc]zsfcohpjfqdrtfbbbh[bqhzekffwgpwsbxd]zlhxmhjluxrjmpwkyc[imisxjdmeqavdvztbd]tjlwasbwbrddpqpgwq +ygjdaucrxaqjcjj[zaunyucvccyhgomr]ifczoiwclbaryopmfa[ihkdhvovnvujtbasuip]mabqxvuzswimbitoy +shzlhbrvjjzpyxfqgus[ykurcdmtryyccnysxi]sypivgjjgkngrxs[rkavyufibjkqetgld]foqdqcpatgctaehxi[jpnwjyafgkdytef]apehakogeatmfyalzr +kithfcpkwdhgqjohr[vvpujusooxkdrmbcoo]tuzaiinsycjujjuw[fqdhhizbifrkpjxgyb]rddsmqvmitgdywh +gngbozbqsfrigmuq[euutspovzyvfbgp]gobfhihxxwpndpaggx +dctfsuzvpvttqpgppw[dnilcstcsxxkvwdsu]zqzgahpihqrhohqdtst[eoaatnenejvvuloknf]xwneniznbkjolnouj[gslnbvbmlwerbwvdti]jovdchklafrsncadr +mdgpetsnkaddebh[gypkuqwwtjrzrhi]eyfbmxbyafuenmjdfvs +nmkfscflwwiyxhzgzw[cixmvcvloqdyuikk]jprtrqwqtbrnksnxh[tngpiloomzgdmpryl]gwvmzbcftuthxvyqutu +zkpdrykxtfvqneh[pxvjsvutuauoeducg]iduhzedqopyfgxjwpl[tmzqjdffcpzytkg]zvwkvgwmfhbqklyvai[scusvxtyjacnqtkany]xqsylxxrbgvudrdxd +dbgodepvweaspcsam[vnqcsulaljbjrygsgv]gmfdwebiufbqkaofraq[unbumchixaeviclyqbn]ekpfqosiklnpdjrjq[nlcbhutxymbumqmwh]svtcirskdgbhfjr +wpvcqnrvyjvfkfpclz[wogcckufvzviggf]oulptksetgaaholu[dwwcwhkktrhgkahbs]sobrvezzrrzvlihicw +xlcqxbbegaulczmzw[xcllvvmlrdiamavgvh]fgipexbodvwutyt[pwhoyusimtkyswrc]mxtrsgpuxsjcqmb +euzbhyalpjhxfawzyj[kqcqpulvktfqwccr]etzsqjqzeosiarij[kinbhoflquwkkobs]jvcmusgezydgutda +lpxgexsvlfylfjva[wnzhqafvnbcbcoy]wevgfhsjrkdgvnbta[mvmabgghwicirugb]ctcyjxzknsnpxixkc +hkkbtbsnyzrlsuyhwov[iurtqidtzfwtfhiltt]wokyylscmppxsdqtnns[swtohjqkqnmzxon]mthgkxltaceszxm +jernxnsovguhkpljxce[twgyaawrcpjpnxp]rvjtstsecwlieaeblp[tihicijqmcrggggrjo]igcnuyrhtaooygb[ntscsypsxaeatyj]aslpawlvpctyjzwxhw +xoooyfocrwvsumzzywf[rdovvrfjqhtuiro]eudcowqfnmcvpkdpv[hdyyadaesuxiykkiztt]ykgxpvfilimofxfj[ittajdlxgptkzqt]djtaivnjndcktuvd +usxiyxinxwkgmdmjlq[quaspjeawvvlagjmla]sucqobcfnryoftyttwk[knzzgsqjkwlybeebxrg]juprtecqapdfbkk +jsbpwwkgsmydnreqkd[abmspggfxrehkgk]nzhjbpwxrvuwrsnilmj[qqtarhezcecijunbk]fzskmnquqoivtsaxym +mgekjguhkwyfdcse[ydcdycgmcbzvpkesg]yuzqagwvmncdcia +wrqntmycrllbddv[fzewvpbxklyccfkqsed]czcxxkwfeberluvi[iupovtrukptjstnkex]sukvpgublggqzbecwz[rabiytcgypowllw]dfitoowyhfxjteip +wlqzetmtxlrkydh[dbgzuittqekewyc]vsrigjcntogidwtft[hscoyacwvjejmwxxv]vpljhuinywgbjnynxhj +ydpusekwzovghcojdp[dqycroxflpnyqpnai]znbszhqqfkdbrwzrxr +uzfunassiuljodnjr[tzrbcvrfieeocdcn]bmsircirorbtgydp[wcxinsnngyykaaavhk]xxqbherleuhjskfyu[wfklhczmivpuooytgz]fzxxivrumhumdcdt +mshsdecfbmkjmbrx[fdhjzahrcoydrvqg]stkkbwrlhhnjzts +nmbyxmysrbuejutpzn[ruyrvzgagqgybiqsn]atkbnawkdkildlbg[trjlpfbjomgxvvmzowo]gbmfxqgecnzrwowcm +rtiylcxgfuqngjkyny[mgidqfnevlylaukbwts]vcejabirnbonrowlea[cancfhwbwdlklwo]ifsehqpalixvinbsr +ifyzslyhrydfxbsb[nigcfrqizdtzetpncxt]svvmxecfemwefpgduln +rtzslwquokcygmdws[wvblnifrxmomsmdwtx]scpjyfputxvatko[mffinnpsxezowdl]bsmsjqeowsoobewko +zllghkuucklrmwy[ylrocgxqrlkdkotl]gmmdzctugnusdsrwwhq[cllevhgqwlszrhlbv]prpeirpbwoapvocm[urvubddgwfmmkoyu]ygmtwdiwvuepkcw +hnqlptboqzzpksz[axumkjmbmyxfokki]oyassusfzvnzhlobbme[vbnbcjaiiuqptfyct]oagongosnahrlok +vgsfvfwepwufvvqbo[pmdxwkxldxhlqlqrgp]nmkpknxluiphfrfxm +qypkqkfcicanneyvvr[hrsgqfwjegdzfmyt]hmsppdjbdxxtagyhfkg[ranuabbxvhlszpmlmv]ajsbmdayixczrhy +oykuwlbsupkaaaioxnb[cemxnilkmxflpnwp]vuvzxrfcfhqvmzlzl[hnvnqhipzparrqm]rjzhvguxrwhwyzc +mdjjwbprbzhftjae[clpvjvsxatcbzsyybw]thsopmeuzvhcfppbha[hwbfzhbptymaaoywwiv]ybsfudfmveobwaqkul[argjxabjvcalkomgp]nogtearwoznoinj +ngsqrfixojvtgzmfx[dlttfdsvjeppwweu]ydwjjxycbpopceaj[anlhiebedcpahqihhd]gtsexwhwnpmpqvdxa[qflvviiybebmusv]epuouytlbtacnsnz +ouccxvpsqnmxezei[vmifqcpthebiklhid]tszxpvkgldobdjl +pauvqtezlhvjejl[sczynxdhjpivcogula]llemqpnanorgnkmjl[xxtooqiwqkcbvmp]anafyzhbzdtpcxcad +gngdmikcpsuduzdrd[fchropeunoqkngns]rfdquwdpxtlfxscvhzj +otnuxdwoeqotcogo[jxyhojuczdysbfvp]upffjmvriabbalmlqmx +xfjrywdooyrkvifzub[ygubulhifdmoytb]hjuvaxnchbmrptw[txcsgcehrbszmnzl]xlvcnwmeztfiyhlwtrj[twopxgslxaqihinrefq]tnbdtvwxxbichal +bepzmphvahjuibuvg[zuoplvyeupxvzoprs]qgkpflfygaoxuriy[lgugebpiqnkxxqhz]kqhkfkyiqigodfq[hvaktogguzjumlga]gglqsklyzznufpg +cnzflcqxgiepnsmpxt[hqbdhovnvyecljhzx]vawynjdylprjdky +pxhlvphiiyocalr[dfhohrjqchpblygac]oqdjtliamyneclgc[pzanjswflkxxwvnzm]qbbuqtxwodofarbbl[kiqrgquowfurmiqlqy]kppecttggvnsuzaarwo +dkzdgkqnfjkadwk[bjzvvzwnbuhkinvc]xhiswkplvojtzwwvyph[qroekqfwzfqeqcfns]kyijvgidcjeeenhgea +mqoqfigmgtagmxjt[qojoaaqyptscsfmd]zkpsvrsxzwvllxqpi +cdlfgkthideaizn[klvwdqakbyaunqfxt]egotktupevsisej[olkmccwoqyqzsnuv]szxkfqjshuwyqewmgm +caanbkvopjahzmqch[wylutkdesribnllzbac]fjpryexeaxbopdjhhu +avulisxpjwlldll[tueldewuwemaihrw]vjzctwcvzpyiihnlrzo[cjdkrvxhmsglzllbpl]gcsruqwlokbdtgucp[nxubgtwzjtwhtdvbjuq]dpghqlnwugoywuiqefv +rcfjxvabpkgxhlvzf[ftlsstmreroxhmuw]gcacbophluxzofii[vkkogukgydicpvdqbzv]dvalzsrgykitiqy +sufacmzxrfdwlivdngo[kthzrniwspkdawxz]rudbmasvirscdpkpr[pcielclbxsbfedr]pneagajkflznxdrkejk +qtvidydakxhrbrli[arccjldfmvtskqtot]uxldrdgmtilrhob[mfqcpjzuqeibckk]tjubrbrdjdakrdud +cbwxzgidmrnjqukyl[uhenxvxtomizedkxwt]pcpeskttqdttvibym[egwkoivkdehfrlzz]pjueedjamrhpsnuulj[ccamvzizqyunxwbojum]qguxpdkjsvkuxiskx +ecwvkjdmndzmmivxnsa[unghjtnrlreamcw]fhxvfvlthzqifvftbo +tfzpfvojlegclkt[kdwzmhrpxckfknvmdqu]gnpywcujxlgishx[mhxacejyvmcleasixmm]ggmuguvhesyqaijlv[fcyzsosernhgawagft]rmdvdnkuaworthwsoi +adztzinzrvazerolcl[vypxttybduwxgrd]mggcsuuzlwiilaav +qnamzrfomzqqhozg[zaoqvddnqodpztm]pqhditszsmuiakyelb[sfknkiilewablfnt]mdzzoowquvhayznyl +ovvwrhkbkeqeatbcke[wtzdbpzbnlkuhwqwfz]tupytpbukmuqytc[fpyravdsbihddaubymf]pjiotvegpewlpke +lubqiczycurwvqozz[khnsmjxfeogtewtodhj]xhqksdbozycjszipd[zeptjnsjluccoiuxm]bhvktxgvqjkufxhprr +zflhauqmcaiwnqn[jhyeagjfxbgnzkdr]hdwykmzypixrdykd[zkqqugefunjmuhf]ykufgfmmeaapnag +eqhnlafwpxhjtrif[ixkfnqexzmbmqencp]npxnxbzhuvwqnxn +kokxqtbaemcjzlrioa[ujvykzotvzlrnfg]couurswwzchjzbxq[ympswhhwlvpohjg]wxcufycbxuvmrqekgq[wyljlkzgavafrvjuesw]dmgjejauotkmwgw +mgxyddqzqmprxrdizf[clocszvenjingorxku]zsuqrmnlgyucrgboe[vpenwatmulopddv]expnuzinwtlihej +xqhirwwuirdapgmyk[snyixpqruifdiqekwiv]zogryeticrubznbumf[yisxpgzptlkrmeevgqj]qrebxwojumgwfnf +djlypifibwpydcxrd[swxgzdsqfgksqwxjxfk]kbpzzqheozbjjcdpor +uueutycrzzvuhvniu[nqhaoxpjrlvrtbahncz]tmxvdfxvmctcfzoqiux[gevrghyecnzmkrujmeg]rcyqojjmpxkpeulzl +quyrwpchownternlfj[qijougzkibnhwzvjk]lmrfvudpzxhshukhpn[jvvvelpjnyxpwvo]ztuckjcxyxjvqop +ueyerkamylcyhgszgme[kpqbsxegdljldwjdxgp]afoamkxjljqzpmyef +ryrrppctsvwsxjslb[sbmyepjknxewewrqfsa]gevwiiwpwstdkruplv[ilkxpskdrntqvofj]srpukrzanrqhkprnu[jlujnhxksrytsdazgyt]fcxyuaotwykaosgnvp +yhjojsuhfhujvfk[nhdemperlpgxpud]pdvcrmhvfeudrea +merahlzkjieamdkyky[yeygykydcucbambmtz]tbujyhneuvzacymtgrd +sgvvjpfdcsriacwuyy[rqhuwizydqorikmqqlo]ozsalwkmuodygrh +jfzfzodtrqrrwvlr[ukxwobjdyhtqrqr]qzmrpkkjzqibwekne +xbmixvpzovpzydwprwt[qnquthrvjmqtpzb]utnmpbzmurlbpfuaqu +fkfzgaotoffusnte[ajzqatzkpajlsge]hamnzapphynrppmzwm[teysbhjrdgatijve]aigpcjplbknziprba +jfprgbpaubcukcmp[kddnrlcjywdjcud]nwzsudlamqhzrwlkh[fuavvscfxpynlxexr]szgousvpbqawlkpcd +idlhdjsytmzcwcu[lgwbpjcyvpnecsqfhr]sjkxaancdmlpobiwjr[gzxmhvvugpuywst]oodlrjlodknfxde +bplasvzaijndpfkr[wkvndyztlfkelwckt]kjkbnawptptvful[fmlqcligysmrzes]ujvljnzkznjvkgmsvqq[ezpnsnwrujkrbcmggsj]eghksoebyyfnptgqjul +bjwqelavjebvqjroszz[jlfwuhjucugbvczdbil]xxuinqhddmsrpukke +tgbvekwixowohur[hctpawxelfhbtmwc]axirbbtolsqjclqo[xcxiycbryxmpimq]kutifmilczlxebzxwjn +dvxlbiymdfdrnnfp[nxrzuioymgfxqwxo]qhydikbrlhqldbq[heutjkmrstetknylg]grzklzcisupegmbg[mlvaswdotnzowpqw]inmxskvrovknbngkp +rpoicdzdnkcxqtqule[gcxezbuirojvwliv]bmnlgvtpiyfhkukpj[gtqavwzdzdmqufnce]nwnlyciquxxcwpte +ubleorakkrqlakyr[kqwacjjutlifarh]dgijscrhnsrsxqhogb +niodmrcgcjrihildfw[pmtshihgrssakbouvf]otoaadrggvnzmetmyds +jczcvqxamrdcpnjl[pitcvywsuryykynqxax]zmojzqezwxdnwrcuif +nbmlxeosjvvtihmwt[acformsggoqxslahuma]nmezephkdzghfvhiqq[epizeyqkmseenueefiu]alkiffsdvovxmejkunk[hiwyudbbuondtsqjm]wjioowmqljplehwe +hlcllqbyvenlzcfgz[tkddqsjxydctcrcuhq]lnqsaupwdmxeptzog +rrkevyquvdogauq[lxscinoclyrawtkvr]mbiscfistpoutkc +lwkkwxlifgwimrupndu[kglwcbuugjkujltz]rrgozebmyxigvxefa[hxbstqxfjnzvkco]rqpxaurnjtzymxkvtiv[fgbvzthgqifdqehisw]kwvdvfijmbimizl +yejkpafozbchconq[chghchxxcybtarwkel]ensiprnejdyegqiiu +gsclugkgowknjfkewxn[pgzgezavhgcfjpi]wttjlezzjwqyyzgzc +ndgluxoxlnekaomi[hrrjyflrxyetpub]kwpcbjgszdjimqfgat[ofdwoxrgxjrbxhgep]rdaebrkfchddavjeqap +vzlsrismjdiyfqzcieb[fylncgldcdlrqnbpw]hyrajwsfckxlkhcboe[rxqyolmmgairjktnk]xhrusylermeiiolade[ifiekphfwfzsnrb]szyunhntoeymkuhyvru +ekgeyjojapzhzaxfzhw[nmmzpmouaheahibz]skhvrmqbvgkbismmmw[lpohwytpsrtegazzkwg]cvyqhgsyodcdoyandpp[rntevuwuoyqnhkmrr]szsrcjzpstfyvlf +ioykyddusobfdscqkmy[pmuczfvmkjokvnoxrz]osyjyicdpcwzxvwfn[gimnsriontvxypcxnja]rgedrrsbgienkkwy +oktebiadpwprzrv[wgprjpksbgdyqidklkf]xhhjmhfbhpszdqu[rxjenkcvcswchak]fxqrycgufsqtbxx[pyxvqyqnctpzpggzrq]mmncxhloifiifjpnitw +xbqdzlpfxcznmczfqq[tpfsrcmbflynynshgt]whfhtgfqobzaolpx +hfbetzccpyqauunfsq[ihzoakqpjosfmeff]xvgsqfzcgxtranek[zbtxsvwatcplcseik]vaidkyuhjnsgptupyxq[vprljemlqmphnaau]vfgliasxcpdyayvfddk +jetotpxiincpkjxqmz[sfwjrlxbmpafwtjuy]rasahmylsaswogm +ipseqmdzbeeqjsnvo[qxgatjiqzhwulhgkjm]syofcufklnbeobppx[lbmkistwoiolecjh]qpznlrllrkhxrnyvf[zbhzvyjqzywdpvh]thlrfwmziexkhxgp +uqyiqoznpgsjaaftzq[bfmkexvilwsavbrnwo]pwdssrfyvkefanxnlfr +yijgsezauqoevphn[qboayuokxuaztxd]peepgblucrlstsln[rnifdfjhxdmtfse]qvymgyfdvcpezxdgmen[qyorafkexhajsha]knaylffgeufjxogyel +qlydmvzjoavamnvot[napvavoknajlvmdd]wbjkbdpjhuhxybgywu[umxthkfbtbevasmekcr]adnybcirbnsyplp +qshfqvkxfhgsysl[tzlddkjozqzcpcnx]xjkhcdozufunylwdzs[smgwthhegrzgufktc]myfufzjuvrafwalrnn[jhsmzagnqmhzscu]dbqonhtmhhdshdyatcn +tcdybubnklvamrjlxqo[naocexrxejgekonegma]hlejmizxmhxahxboitw[jteivhxwxftlyhl]kvhbakqlmukgslgvgx[aueqotadcogcmhqeeec]igrfisukejhgfmdvx +jowozfzspexprygzplp[acahqiqszrcdhsylwwa]ppdmkmcrzpzbflgeld[etwowmhcqhkjkkipk]gnilcosjuukihcwyne +ynmgkfpaiocmkybwkz[ztxveuhtztuioruvqbr]grhetxxldtoepqtm[yrucewbvzbphefuf]idcnnpztztemlywblpm[ltaesuehnzfrsflac]bbarkjzutumhskhf +mckdhqphoehsqgjzpzi[eiretkkiklgmfvohgvs]fsaipzocdnrwworpfj +hmdbweapvrpdkhqhr[xwpfkaaejitfikqgy]atylpiafldvqsunu[dwvoqhxryfpiegidm]dyvhcjqkgspgnpw[nkabxwemccqznbpdq]ripivpqpjrebswqspd +xdjfwlhvdtcxqvfzrlh[kcjkplfasydesgzkkh]ilfrxwwjtpmshhcy[gsobusiljqgosoih]dgtehabeomwepoaaahd[gikvtnebxclexmsc]nkcvdazorstiymosjv +fjjpjjjikuarjinig[ytnbvaleddhkesaoaut]eorhszwghtnmzbjipie[fuwkcamkegyilppagl]pipdvxwvkvvvanblh[ipiaupaojxfjukjgk]purmzuzammwgfyle +qclqkkcoimixsiou[psabxyezhvejtdodz]ejzppqfiokslbdzoyo +hrrdaecpdytoxkwdynw[vhgsgzqlqemkdkewg]yeqaoolmodchmigyxt[whflgmjarkpzbitpkl]jqjtyhnxkklkzoa +jxdsjmkuplrowpkta[uzwnxgrrcieqvoz]vtwwzqgvdeornoqxmuw +igfbnfbrrkfiyngqux[aajdqilzidsasrthcnc]xmkzmvqsexhkttcd +bmcwxzeodkxlxclq[zvmqvljaabeakiei]xzujkuxdmumimotsaps[xuhocncyjxiyavon]hslcfclmfhfxxwwrln[dfmghezypyqxtwo]wxaxiadxkpvuwdl +xifaalrmhugjejbl[ioovxgzfgpaqlyt]uayfrtjeutfeprmb[fknrvsrbeucxlyzauy]geowvgcfjnbglmrxp[ocnpvwnagqhgbcvoupp]inzfrbwlliwgcsqgzb +wccriqkjssvswvpgx[apoeqvsvtniwgbt]wfrmnudgajwhkcy +mbyargqesqkprhbtaqq[tpxvefsyzwxvshmict]dxpxmxcluamxmfq +jfxpcnpdgytwhkfb[kdrqmtogtlmxqmv]auuyjbertdteoho[tdendgogvoevpnevzdx]eicpvtgotdkcgwbd[ygcvethlzayahhialf]kytibwtgzhuvvsjw +wfdfxjuqfxjbnjpt[mmaupydmuixzfwebpjt]kssauqawybxkfmcu[juevujxyjrwzewzua]eladywlrkxglizgc +qtkmarqccnxwoqr[vzmovjwxsbhtnmjhqjh]zycttmgyujdefxxfs[tsmxkcuqircrdwtsz]uhqtftqwcxreyvlvff[kwsyvatwweenxdvqum]sjmbfsnprqixqzx +rantzkbrnpwuuvqbqn[qaudnwijvntnxlj]tfdbqbdepavxiewo +xwjmsobvbyejpyjkrz[ozkgsxhxiyuejjr]etkvofiicvcusmmlg[rmkhfcaxfbdltnpwk]swklpvfmxmlfhls[iexmcqatbamzyvxft]djvoysjwetzhocdd +iixngfiuncqysuzf[ehzeqdsqwwjrubb]udkdvfkdtxbddruub[hktknkxemrlnbxwz]qfejqmapclbzhhe +pmviizplesuakfc[woqzewypfpcaiotx]xatiburufdzajqrv[ydsakwhemrgnxgqyli]isubtdzpkcgsoas +xxsqvodorzrnrbzsvyu[apejbcvdjuyujpxewu]kfrcogbvnrkuykpgx +nkvsmhvlyyweggw[yhcjceblmlzpgig]smpwtbqsnklgxxbssz[aiivebyzjnbelkphux]wnaojsgmpoiaykznpj +xcllttmboowsgodsf[dfskztizatqovmat]gpzyyqjotpdkdemcjon +drhgljhvyonmqzkr[ohxhjhvlrpodxwy]mrrhedvtgdxjhjv[golpxgauowhwdoov]rdmuwnfurqwssgth[atspndhxuuhzadog]qgdswxcwwahqnpx +uvdajunzymasgjc[onqeemcifirbxli]mrmpwnqojidvwexxrjg[vbpwisdwqtiteawvdw]rpjzhfsfhrzukstel +owbdsotbsjvrwvdb[fclwyuadozjjeyvkz]uzfygewxtlgjhmfpyfy[qlnlpqspocvcpqsa]fannkpftifaoeszzu[pvwpbdancbljmucxql]tlzusxlphovfyfflj +mmtmuzzulxmgxsmf[djwlpuwrkdpcbvv]jomhrdgighcolvayu[vdxrekbfbxgdluj]mwkcqhjhlrehesmwft[pigmugayjtdhtpweyo]lemzwycbgzzhvin +eferdgkfaasmkyi[nopnmqjuuhhkaclf]twwodgunizovyvydh +baddrprmgewtmypxsp[yahwshbkzattrry]tjjmawkirxcxcpkbdr[kcptwlmozcgjszalueb]msxrkbrbcfnflgnqe[amwmeanfnbrpznz]jkkxzruebylcrqkvyvk +kjagsescwfjkqrykx[sefltugsdwkybwj]jmebeveaticpwddxbk[ktfnvedmpvqufsi]zxjysrfpzfhngjci[yifiorzwyumqotxoch]afedqtkmzpfwnacb +lelwtilhzhzslvzo[ehvnqsjxemjrcvbqyf]ovygwyyazlsulyzhjja +gluywzrxutecuauqi[vyllygndlfkbmgaoefq]cyucodjkxwauafwfxw +dflaghirjcyhylbcenw[dndkrtbxackpdcphny]pnhqmjxdzkjycmdo[fryelfouoaesejoq]tdhcacxuqwfspqevq +yjnumjjyewzjnakmnhv[ulycnyiyvszhifgscjr]xheytyiiyilswfhqywd[jxrndqsxmwcrpwrfu]jquhfnyxudasmomnpx +rspuvdkdzbrbajkj[dcfpcvzpbodrxtl]xbskonezgtixwjfsuq[gubkcjizpgfwqktcc]ddjzlszkolvwqsrnnc +moobncjrmmfonnmp[lpbevkcuzvqguwzbzb]pacppeefawsktrydyqd[wayxdzsvisprqutg]dfysmjhwsvnavpixfl[aphusnjjnvygqikzbz]qmvbpeopziujlsmgx +wfujisugotfsymh[juvkyhewsnpzualwau]ljyuwiidwytmvinw[qicxeddblcxrsdrp]khdooklzguadokmdbd +wdzzexnylrbsniulyv[nbehnwkwkrrkbwirh]ymyaqhrhmbuolmtbz +hsxsderrtdvolsms[yqxhutbtoodvausgm]eufwcczbwgvzxsti[gqewnssdahkfambauv]hrnsadgqtzcegnplnce[fwzpwvfptgbgaahdn]hlvjzdqpvjezifpbh +gtnyrilnfgmslzfju[qwahfyniqetvzpb]txlwtncptwapogp +xblzbbrwjoudimv[grtjaoaytdyffbl]jojuhhvrrgbymoptzi[rgpexwvtgbswbzp]ysyfhclvndltbnnzg +ggtkfikxhhzevnhpkoj[egndynfnwwogwdttwg]gmdytpspodusstki[zokrsgoycmxdzrni]jjtmaoztqkdpsnty[ishkqeyrmckkbcug]jkkfuvenjvphkmbtk +aprzrupkmqzdgncwuq[ototomaxhriosvx]zftevshbmxrjingy[vkrildlncmbvbfi]wsqygjuriitkbszg[ncmxdegpxcdvtgau]iauwjlqoidqpkzkeazx +klbfjwxkpqniguvq[wymwprcxjujljrexcg]mtjifypvknsiogypja[tfbqvlowzqxqefia]azvpxtyghflrgdo +xfiwnyfpxzaizzzhp[jsfakgounppfocql]gcgjvygypcgzvnu[qmwugdkvhxjknumcr]ftgvxsqochhihwnsb[acnafcpwduptldm]zcstejwdgasnvehwyot +repltebkzsojvhxy[chzhbjyllumckfluof]lhdibxgatvxzzhzflz +ilqmrorgodzrbfesczh[udnwlveyxsalbxf]pptfzbjvkxksoarpy[wffmfpwwxmuxfmrvmg]zatihmtjlhvjbzdwr +gjqtwvpdnhhqqqvop[hafmfvvzhqrnugo]xgrpicypdmzyjodfv[vtykgzaxumptsclyf]medyaqnemgrawbizrdz[ykkktuzmryicpimqgdk]wyxwdmdtrxcpdqhsrli +hjnariohxtbsthvcwj[jqplvjyvfwbbphien]yyogxtzdtzodxceve +tqajsqqmgynvntqf[wkovdsdotmgxjmmgmoz]kyffakcqgknonqj[hvuefibelljpsvaa]santzrmyhmmfgsac[xevdggsuztwdjllvmod]osdymicaxgknwafiyhf +xgangxswvkcjsek[jrvhyhmomvqblucr]mhakwjcqomofhbdt +vuuruhdlaefeyjtemtn[rkewcsrolbjkvgnjur]ajuzfefffkgdtzfmfwu[ysqkcwziamybbcghjb]vnyxgeftjtrxeokaqk +ytfkhfnkxsuuddh[uorumsswhfhyjhnoqe]mlmhytefajriiwzln[ivgrtejpggcetxry]gtwlsddrscrxepv +zhsugwnutzaxunnfbj[oenidjfrxbnbnevjwo]wnscklrurlxquzhuwf[fswcwqtoexgrdguawj]knactvqybzyjdjdkdkd[hwncacnowaliolgzmlh]xcqfyvhkoaxjyrxggg +vfcdutbbpmmhmpty[glvdyxliujvbdqr]jyavmvfrqjztetyn[rqngwyfxdxofvqwo]xqcpmtqhrkoctux +zfeyzggpwatzvvr[mwnxvrajqdtijeqm]kyprmauvxauaeuntay[ivwbqplblehbbhi]xfasnjwliydlrcyk[jmalyrxoozbrang]lksylhfvgbezkcf +trqdnrlvoqyqyvjt[ekkkwqklawagqqprz]zaojypuwvzdghwkye +bmnmbsogxhtpved[zffxeokudzgkusvk]qcuxjdhqclszjnxdhd[rsjdhjczxtrghlxwh]vpekhuzoamazdzgufb[bgtmhavdkyhtwlwcqmk]qucpatddwrtjztpxvi +hwqfyynrncmhcsmrlp[vlaqdzxwrpawflemknd]kmvyzqfvlouluxelul +gnzpgjfxtsaiknapn[rganasfzfnrvxir]ooatokkxjxhzxlpmb +mpedacmqtzqmwqyfz[dcofwyebgsvctomzomk]vpqmhpoitpubjorx[thmfofpuparhszqe]clvrtngjajielkxre[mfcjhfugpyymytri]moqcfkrpazshwvh +fxskejrgulaixah[cwshxkapatrgudllubb]vgykjzaukwxoyeucosg +mgfyakavdeymyzxwa[dsvhoxfiuxixxva]jsxfqsnjgroxbmpiilm[kxkakjvwgwflxnnu]denqicbsmzvgtcxm +zfqnynrdbdtqblxnww[nzbnvcjtsxrdmasqtn]yoganlahispbjdyxqx[tuqafqcjrxnybeksh]imhkfmqdjiyfoqp[oennqnvdpveoija]vljstbhqatpwvkbg +lpzjqfcipceweps[indnzphetquilkxnds]oxyivnjttcuectlyfy +tfhhmfeomcdyuql[ioclczzniueodbtpbrp]wuiujzhxjbgdlqbm[iciypydykxiyqies]ptvkrvkragnibssly +ybllxqqxzjlhskqi[ytsvahdhxgwnwql]pzfzcnbxiypkpytv +cchwtoevekjgyqqs[kizgrwqwbhebxlscmj]tjbuacerkadppftxdpn +nofeoaawaeoepwekxty[mgapdpmakihrfzlfvpf]huhzkicazfkvjhgdvsp[eqtuybajdgdthtz]opgdgjzkrfejgawxn[umbakkosxdtfwcfh]dhukvukdwsevvcmt +nhzmrmtfyhjpvbsi[jghcdhdrxermnhnrg]sasarolrztffxrvh[tafrflhiydopcqrx]hbrwebrzutugjnj[ejqrvlcpqxtiuqho]xjgvbnuvoxjdcpx +dkizkqalwbetbepak[detgokxgkgyhrqzzbqq]rmwrqwolneotsyvq[fpffqdefoxfczyfb]dxwsppdngvyskdpfnbc +ygwbidlvlgwncfy[ouryypomwfwmnka]axlhgqfgvrfsmbs[zavmkhmkjzvpzlxpkag]bfewyvdthrjzmmjs +jwyxcjasntveqmblff[mudhpflnaxhhrphuwy]yyvtbzbohccozqj +ckfocickdlijiur[fejgtsphnigervnza]owlznrkbwqhkskgebbx[alnbdcgnktmjlnhig]dpfomgwzkqrpmicih[vovjambzftywljbxrgj]ihljubxxgrxrqpn +pygdmdnnbvnjlkacjfz[xwefajgruywjhysd]soepimqfbbhekifv[frdrobvsbwwkcytfv]aszgyodinewnrfdhh[wztqipflzlrwmpxefga]bxviyixobyldmkln +qujnmepaefnkxgrrg[yxdnlyihixwasibuy]qtmnryswxwzkuqw[ozuwcixlzlbiacytv]oylpudpmjaqgwfqvsb[wljtqzfawkmrnkgkvla]kgdvfppcbpyazklfdk +ijkbhnjcxgsslwtkuca[pxpiyixylcuudtwbt]ooerzoxehuqynhzmhwn[ynmgxzstfawvqihdhoa]bdrhyquybjddpuroto[fhnnpsgnxlnoiiqcml]oaibnvvqupilprgcyiw +dfqizqapoxvqvqixvm[mgrrcrzvjkncxlmq]xqcxnymsyxbtfebdgy[hfdfaxiuiexfdhy]flyhvoppwzigjxlytu +qlakotkuqswwtqx[xnpcrmswyqolvyp]limmsdyvzescvvt[rrpvvituflyuhyhz]amdxfzneiggintiyzuv[cykruetmmqucsbwjrh]ymobjslroztxtla +aiufklgicgwxdlaefc[ofaqlmhnwrwhjlleyt]dixgrgkhhbyopqkzmt[zhqupdyazgumcagdids]mxijcialempjslotrgr[lmwxkdqqijndgoiv]upioecwmfnndajajbxw +oiwkroaymbjtugfvip[hyqrpfdrfjppatm]azycyfsttguvudeq[czujqevgflhvskaguy]llsuolaevinsabqpy[sivsqswxfxlanvod]sswhiwoaxhqsjnynidh +qipfjqqbxflvnxgv[cnxuwbvnxndkoxcxjl]atoznchumwauytpqmgk +doncjsebymuefbxj[itsfdedfjxzxgvj]wpxzcoaybnzzzxz[hfxwmqbaiyiajiorh]einnvliwbxhjzxx[rkeenlrteubkvgrpmms]qbrpoghwjttgawgstt +tyiexegppbtbxzovpb[yljnqybbavpwbwmvg]unbjhlrkpjrqbxrtpof[bvbfvhvgtawgpydlnn]phdnwsbwbljkqchww[galszmgwroduckhyyqa]wgfbqlipsvntmnspge +gmnkhnuwwojgyybh[ivxthnkhjaevliiberd]crpicsxuksahuebnk[vogumtrrqupdjhtvmi]pcezvomttzmdgtelfq +kwvkuklbkgbxoyqo[cckuhlseweoukudp]kuvdtzbjeoormufjn +ewqcguiyodbjoxu[qgqtmjabzxbzjua]twmhfdmuudjrqjpge[xexjbzjvrungbvvmry]yuazblohcojrddhfzg +irustuljdmhlqrettvb[dgsukspodhlhcqabx]auntsiybdcfgxjmsiqy[oqscrcekuibymdwfcy]dmxibunjfmqjoeajyi +ppvngsfdficcpbmbze[gcazeiyfowcmezww]wmphalytgunmpjqatau[qnhrljcdkikordx]yqrsgeczwcwjbqfhfw +iniqgrqelaihnllono[cydssebiyefnljxfdh]ljpqnievldmltrpp +jzjmjfifakcsixsg[zmgaofcvdvtziindqe]mzodtodhvkiluhuzf[gqjguyslrtqvcesa]gwzpfqfyfxnncsemb +gdnmdicwnjwgpjqdw[odoslhoqgocoumxf]vodkzgngmshtzwjpgbn[rrhzqlqeixvxjbaldp]xsvbscotkujitex +nnewsdtgggcgiawo[kmuweskiapswdskgosj]avjieesxujtqfwpuis[tvulfkzyslzakco]sjhbzevzvglgfreyc[wzxjjpsqmctkyoutau]isajcfzslakogyuevtj +brresmfifuolfyc[hkeljqzezcsvzrcue]zswubkhczxziqxlty +xzohgybxqdxdwxfbx[dqcorjuppxguxgps]gltuxzxhdjujuro +hmyrpjbmwmyzijkbljp[ipbngzbreqoqcisbi]ctdmsssqkgrjxozcx[egmuzsmsaiodyyt]ugjpwtglzvshohbj +snumfuurpriffdvj[ojmagqzaktihjmwriyv]rgnyhbobphsfqgh[azucllkylyxgrlom]vhtysupgjwbwndwrgfq +pxjdxiuhqmvwufld[ktpvbdokrtdpxrekaf]mamfsijuemlsyio +olcpnpmilbzxxvqsz[ervozeicgvqskuenz]gcxvfthottngwww +hphpdxpbsbmzshrwmwt[sapciwpwuradyvko]dnrhabfjqorseajgr[abhgtcdijsqfndmney]mmsvtcxmoobkkaeevz +rtvrohugqesutzky[sjsvmjhonskkqwhis]pqjtzpfnvwsigtme[ckthdaxpibfximcq]peoffhphnstzruuhze +cazrddymetaqdtlwn[tqrvhfevxilaptinubr]opnhppmmbfscporp +ctclntnozqwmiqz[qniikhszzxbcatctip]wpoexzkaxyealqhcg +suxvexjrakvhziolw[pxjlsfocisjmwzl]smoqdqjoczuyiac[ojpwtuddbldiaruiamd]upfrpxzwnthfytv[xvfejrchuditjal]bxzvjvhoigqunomnikp +vjuryymolbathzinp[xrcvcqvbklvqtjnpzh]wugebbnbnzzvdmpg[kzdlfbpqgvbiyqwitga]wztqfradlqinyzfzf[abgygmhhsksnvso]kntwamrohagtdrsm +ernvshbquyjfymdthx[jjshkcpnxftyopjayzm]yidkdkommeyieirf[zxxkwqqlsgxpcdwlgq]zpjrhkyjkdkxoufwlx +pnevxgcsnqcdezwf[mnftbwqkrfmwcgp]rkmeslzoffovqheq[vxdcnglifignqqx]xiofsoyrslgyfrxl +bjehvbcqagyczepreos[swecagoxtwhtmzsjxt]ihbrujlisjdftzpfll +bdczzogwjpcdwyq[jptlwjoskogbhfcdu]sbfatvcosbvikmvm[njvcfwokqbtynugffu]qwhsgaqfunpacmimzhp[mulicnvulazcycscjye]oycycatwylztksmrfh +idpyubomejrcwurt[idytppqynyqvdajevmk]mykbzkihnmfcnfg[ghfxtsrfkqppejwgen]rsalcongusjamgcltti +gutkiuskjqzvbau[vqhivilwddgfrckjc]gpkuhglnqnlzndpl[tywjgkqskbdlsvf]bkwvgkdcxvdlvplmza[yeqeuyzuoqbypnwg]wsqmblkggadabss +zgirdbsohsmusxbiqm[xnuiyfzmegcwzuvery]mzjixtxtbdruckher[ylfmvkslkcukfdp]vdwcmqmrsnedjnvsomy[cmmaoebsohfrnqu]bzgstdhoneuzfdxl +wimnreygvgbpvafqrn[froxfavuvgvwirr]avnmgyvkwfnwfgudiks +edgbqmwalgtiurhmmg[vjzrrmbtvyyhwliye]mpykphdsaunzjkpam[qdcecrxescwvlxmpi]gkfipuqdcpcqodcptya[pmdbisdhifodialab]wjucsoipfxzkkzwm +xmurhwryxntmdwwv[bveccegjmwnppgio]rbnnbsqzutgyoign +koftdywagyijtsi[amffypsbtekqlbvlli]avskrcxhiysqqgjja[ixrtkpjnrhljddqzt]ekluhurkjnhlzaudnrj +vqbrbgtnvazwyixug[yrmuvykapxyyqxus]ehhkvomrgnlsofbd[mgwdwrvjwhhuynogqv]nyjsgnomdxwabameuss +upixiwerfsjxjvecmo[lhlmklygfmbxljvptf]qnlxnzoekmyoggtsmtm[wqvqbaemhanfxldq]msobqxpmwqyauii[khuvobspvluvghjhcjm]ysvqvfsfyanmyrbuxnw +xeawztjrtohpimzkw[umvqxdfhsyyxsimzj]kyhlrkyxcnyupqmp +hqzlqinkcowqqzp[vhdaljgjjfqhlrjj]gmsyhpvpblkaxiox[vhbjqxseofvbvzbshv]ecirxnvxadesrbvn +puqpygmwhwskicogo[lbkrenbngbzoljzuoo]tndvmvztkssolnom +dbswyuxfrnypetkm[lyuajkvfqzwpuon]oorgrpkhwwgtpzxc[guszbthjnajqffsofme]vcqjstfdtrxcuscz +clhtmgyxqbrzeipksw[mwuhcxpahefneke]bssxlwoelrrgsqcicz[yyrkfjczqdsglltdjz]xscwwnkcwstkpxto +ajsijhedwsivzvngsr[eqorzqparxhrbesw]lyvxgqgqguifrpuj +sqtxgdsfkbhljmt[ndqljydrgqwwqjayc]lttwcrsejwxgxkuawgm[nefpbdmgtizfijyt]dcxacpeeyuzkemb[otnbznolvwiervj]hdcjffxyhtqdjmaipj +kvohguactjmqrluci[tefqrqmjpzpsazfoe]ptxqfezuvtxphvy +wmawphvozqxqtmq[qqtumumswsrpsnjug]wejsdbswswrjitmq +pdzwixvmkxpsxygxmp[zfxeglxxoxtkkmshin]hxjmzexyabkviollfnk[nfitohyddbdfqekaty]poexvcemyssklhllw +wyyiqymjavixnwcnxu[xnhhsqavbnggdqn]gymwgjatpsojwfj +iqdkuwpqylmwhfvm[bjgqryooacvjmxtrq]dqhwmcafwgedohws[ucnjhrhnvekrgjefzxq]opvzmoismjdmsezvle +ommglribbfvicgmugx[msedauwycskyoios]qrhxlnihnwmktihzp +laphdvdlixghsmjpsq[blbjmefxvnjnxmmc]hnzsqzhaenlzcvoq[ppyribixnyeucvjlv]fdogfvnymyznuuxa[pelyyutyolblxzp]fqgcltvxupdobson +apnimgsoqfmqlgmjsvm[rdpnruzylevyuir]wwfenkdjpmqnvyf +ltskflhfhupifhf[gwtcqaatnfjdgywo]kvguorbhzxfqrhxnij +kqaeviepbnrokflimj[zqzevrvhforlozy]orzvxhevxtzorkch +uhsjyhwppwarmrfed[nsfzcvrwjhfuwjta]nlthyhmaeghygqdaxdj[esqbskelpkfswkvwmr]stzggiejdzkhohumob[snlnvsgiktqewvpxhm]ahojfbcfgxqmmml +idlikoogcxqffrufcqi[vcuenzmwggmbsknfj]peoviabqngzwiqtvri +rigldzvrvmsmyakcjb[wwsutfoucqlgorxnu]bcuixkbifegcmltqibo[szoqsqlnduhgvhlza]pcvurfgchanmngh[glpfevaugptbhqqrd]vpndxitsihovocvong +jwfhrlvcglbtbdlix[vmhtfcvzlshpfcii]gosuawoykketkzdhw +bexfthnhhppzzutg[ewpudndaewfnwaht]wlnqstzsulregcwgmzw[atroqzyofendnnp]idtypgwyeatycgpde +ldhjuqeykeelckq[qrrabgedfafkzize]tfjpjpzsafansvygor[jpuzbjptblhydidkek]bbkncsznubtpoiahot +mqqxpkguxlmvyyk[vnxxtwxblmjdxjkhecj]shwgynlewfeegfwo[dgybavttexfiaod]ruobjihpitxxfwx[frpidegurggjllhq]kcfnatekrezeqoqnpqn +pfelcxohsnhpzjnrp[bmnzwycytvwquengc]weaysvdqdkhrprcpmw +llmwiwxeyezezpt[densmtrbqpiuwryg]pbgadfldspoahjimq[ugideashgoighvpiwid]pdvxaqoufmuvtrgs +ynviititdvccfewheh[phaubuotpzjwqfcrm]spytehersqqwhac +ktjvhepsakhdtvgoq[bnejcglklonqxmygyn]kbywvhkayojcufnwr[ipiujgjwknxzefdphq]zcmnmxqhuhjwqiue[dueiqqteiuvgyggtc]rbsyqjqegupwxbazttv +pgnoazapsklgvmejjr[hjzazneywdxkaki]gfwcgiyhuaovsye +qorimqvzoheryivfi[usbcrrdgseveupnqadf]bvedishdaepjjnrgftc +thxrgxhchpeczth[eneefpesxkgwuxpnyb]efgidnpfdesgcmkqllx[jglvknahzvxyegxxedi]cupoduyjkdpyajhirg +ltabaysmmffenou[fiqduygbghbczdsjcs]drfpocohdrhunajvmu +rklvlmyqqxbttuhuzos[bihsvfaluvhdwqwcz]gbrlkbxpivsdykcjx[qoudfwhqcnbrmru]npquvyoxliacxpr[txyzvzsszqedximgecr]srcqshisakuwljrulf +oiiruuqsdsjguri[qfzwehlhoinyhjv]jwayjxoutcbbsxquluz[kbgrvqmxzsukught]bgspboampsgsivvuwe[swvxxnjbmcpffrayd]txmyfolzjpxdvqzdtq +resryrrtzhhnpbdrw[hnirhiummudhyylnky]gmwqolwapineiokcl[iqptxfvtgabqyxex]npeatmzdsfknpajsub +aqjfwyrtqtrhnxdmfq[xacmscejzrlppqhlziu]bxvptkrvkahygexqsub[vrzjqbhlpywxzenkod]lqvsohrjrymprniyn +obdgtytdzpcbnelm[scsrytqyknxdmzugidh]fpbpxshhnyxedvvna[fgebgketwucucajqip]cdmbxelnfsomsguvxdu +yuluzhzwsfvngixjn[gjmdiyftbqimhxiv]gxjmpelluljxmuhz +icsqqjcnwckhskoc[rhanawaofgbzenhxtfl]vsvuwijhjnaurwlb +zbqzykdfeunfcwslv[fnqtxugkwojhjjqg]vetgfnapdhvbdaiya +uxpnaesrcrudsmuxvk[zmffkqaufmoxgoelq]jldwuldydprcfgod +lcaqgsbmhyfmfszya[brvxpxjvmtrdkdmfm]cphjfsilvnsdqmpxob +cwxycngzriigcet[xltlzayrmdowajvins]rbfmarruugyqhvegod[nbyobbfqprdigngp]nkrwqcyinzutnklqb[ajhqjuhqzahxzjbk]nfyrxcupuphkbxjqlai +xqwbcunarmghbsosq[jrmjtqqlogscgojnldm]bnzhiagvdwgwhuawz[toxpipinabgmkbwhtd]uxpgoorspsohkmd[dtadhrgzvfownrufn]xslrmvbosoeoeaewnfr +lllhkodepygrzesxp[zeohwydmclhucevd]hbnsvtijajahmkclbei[byxhckkvqixiwtg]ekezugmyyavcwxtilwt +jtjbuoavqyjhlaw[vbjakzkppzloxxfx]vibdluddkdsdexqnwl[ofqpidngtagumrk]kfoqunkkvyoassxlgg[ngbosgdywnmslnszsa]hxpciqkkafpdgfki +nenfymvefbgzvag[wiqscyftlldcvsnp]pchooarrvfpzhwvcjpl[wtitvzxuvfufwviff]opjkauasyyfyspzoufc[pelszbarccpqtxvawi]cmkfptidaetuqkwz +hitjejomylbutupmkeu[qdzbydybpabfnlkwkv]bdlbevsgqmwnbolnhfi[qeujppfhpzjbtafrgl]zvirtzxdzoojcwfohx[ftgmwthtcanqrxzks]bsafidxuxypaueoxg +gclocruwassudla[imoknvpznyxchnrvl]qgninncvnnwjovnm[jwqccerrryoiwsqf]chcucyiszjrnobxal +wqlihvvkfdyrhbqu[vizkatngyvpxuwhsfr]mrxbfaovpijyrmtjxw[mrkexdpmoaarqfj]kmnbalnjnbjcsdulczi[rkidvuivyaequway]jmyicruofboygakaozg +dvyalwumbdjeaocae[zonftyvegiqiquqac]osgmsdmqoclweiqi[xhgqrjylvorhpfkh]mmpkmrsideufseuyaj[ogtngcelyserepmqi]kjezmzobtremfefqz +ewovyikmmawzzrf[hcnunsbuuzhvduvyo]pdkiewvktjzzpqwvpdw +pwfklqtvnpsajdvtyoz[gntgytituioaybkpjqv]wteojggsgedrjqdi[xzvkngdojribistpis]xftjryqatcesygfzoa[zddmnkhceqxmznq]bssablulgiiovynaqrh +ztqjirnmogqbcfifh[vyeztcrzfxnegdyeed]redtifioqpfzykudrih +osawcjcmfchcpgyi[ffwhlengegnjvwqehkm]rvtkttwkeoefydz[cokaihziodpeurmbp]spjznidsrkpqhsoag[mautcyrrmxsnrlw]dastqkwpjbubonqagfx +jctsgqoqjqtodkhvvuu[ylovawrcpwpnzkfp]xtjdibtsmpbidvvdh[mmaecjrzneokajhkzc]wbwaapxadknspjujtp +izxxelepmvtrpcb[xwoxroumisiqgpqr]lvhyjhchdicledub +lqvelunldllnngme[lomutagiggypbbw]hdubyftczrctokdhvbl[ymxlvpbfiojaausmi]uqvhoaigwswemktiu[iipvkifnptbwuax]nidlqwimfttkbnmms +sewpymbrjgtmkqd[tldvdouashkzpbu]qjujogijyyqwbvzqe[xmhewesgbeyrqkbfj]heapyhfvnqovmlkz[sdffbynjptvodwocru]lwqkbkjseujzmqprv +oegfarvdcswdpnss[xgbroqaseklyoxl]wticmsitljjhgos +bfhlklvvprpfgxt[wczpqxciyyulsgf]fhlzqdaxyerlulakhbi[xgklnelwoygvyged]ynhbzkafydsmevse[dfcrqsfpouuvsycxi]otcdmymmlomedultqa +pvyddrxqxuxvzfqfl[nipfbquzzbmecwuu]pxzmehysojqnpna +vthwugdifklqusu[fmffwynjxyagyycbup]eaompujnjzaowbxmg +djekvgwpzkgwzwardaq[sjycmrggjjtzpzoq]zgagtgosiowypvz +bicemnivninwfubpi[enghcgyjwfuwqvfcrh]crycaojgzeqgyxdq[zxgbztjljhdhzpoy]ygxqydxramuikbawdoz +wdigyfqqrkjeseda[yjezqvkmaqfkcxgu]dwpaveednjywzth +vjeaiuwrhweqviyv[twssdwyckfswwqg]bujjzsuffbcddcqd +ouivgjbmmsmiezanss[mltubwnsjkijprjae]dxjbngvqbuzmtnxj[actzjkmbxwewlhmpz]aeweucknsntthwwvkmk +hqxgwpeaugpibuu[ftohsergcnnghmultwv]oobxyesnifpglsyumqx[wthgkfckhzdlzeh]tbvnqcewxwzutlf[dbsokgifbtstadxjlyv]hcagowbeupbbxvnnudp +fpgthpsgglztrnrjvs[rznddjrlsjtdrnufotn]nfoxdbhyvovsaratt +idauaxxyrjljwtqk[jtrvbiyczhqigjxfam]bsmzdrpeytyegsvitk +poxzegvwjgitaomcy[eatpylidmcjifnbyt]pxsatbkkqdylippyjd[nuwjwmoghmaptwgm]tarinkguhfewrxedty +whrppysnyuopewxlch[tqeujwwbfviqker]qvintkkgeyiysbl[zmhfxkhgptetdsq]jazfxamrhsjvlcwr[ybdhlaudcktfgpjajk]vnedwkbznnxoegxe +wmgrbjddretekijeqaq[wxoqrjnhathlpva]nqrxdfrjrvsaxzgn[voeyknzetkswzmonnh]qexvtsdihbxdwzeympo[mplyvliqtgoezpr]bsjrjqbvgcrxwnpdqs +txicytmsosvlzftbikp[hwjajoqvcmhmitvqnh]gndimhsqdssjugsp +scuaijeujwpdvdlzf[byroacgumqpoawl]lofgfiiquoftdrrxnhb[vowfcxvalicqrtpvkga]vdehstpbvncodihewhv[tqrtdbglbqthqfjyu]loycwsbaxhkfanhnp +qgexpbjlhcciuhouo[apvfnzznkuufvlo]njoupqjamycblyd[tbviqvflseyhhsmxz]lvpemusmcuajelt +jvrllpusmfmsnwy[yqlfrmtxpvwcllrfev]hpuqtteqblrjbnkx[puadngfdbecfuhuvrqb]myxzjgttaacbhzlpipf[gcjfzcrweoksbywfdc]mnchtfuqvmltrxakz +ywmkwcztiqykpmju[zmkryfneelvtwfnm]zhuiojbicjnfdmsdhi +jhgrwzznkirrskfzfbl[ftjkmxrdyljxzov]wcszeohqiseprjde[ngrtygnnwfandfuvr]lqcatjwzlsbuqnzyhw[hdhijvlmfotjdaaivaf]glgrbynrgpcxjihg +ujtcxpupjndfftyfay[wzspgaqtsinvgbd]oskncvkxhimahafzkp[tbtuibverwndjkyrbtb]vubbwzxvzotdhtvvx +dgjxjkogwuxxgavcit[shbqapwgyduxmjdzs]sqmxfuntsqibnshlszq +byysjubuacsviouubxd[idvdypsyblnsmvvv]llcmcxizvdvtmksphjf +bfphxfyrcoddphmhwh[xvbfcujmhltkfiqaejg]wxxbzpwusjrylub[vcxoevvppeirkcl]bmsyjsnoixvozodjpm +amhqkszrkzcvumwjbr[wgobbxkqavcfedi]blkqusznjzozcwyatzt +chzanckbvfhvxoikx[jeyndyycqesiujnj]midrrqwphhqptlbgy[dcelctfpcmitlbrdu]wmrripumgjowiedxpcu +rbpkmcggsbshhytszrb[rjftwgbycnmyxxockku]nrtwwneopxuypblr[hovauqqiboxesfrqqfx]ytyygtytusfdjwco +ytuvowkwojtdqfjtmj[ssrmnlgjawuaqqrdpv]ugahrlchntdmkwkygr[ojlgerllesmyzdbnvc]zaztsxmsddgciyz[jdimgvtyvojseeavk]qvyupywbpmhgoppfwru +eirfjumdodlaevcsigl[befivodoxdnhfmqwkxc]qjaeppumixfpezjf +lqkzkupjsinhxws[oibgvhxxpewuebro]qbweuxvitezbungy[lapasshrjxcjgdooj]hmxejqpigbcprqregtu[pqqqhbjetacltithm]zhectfbzhtyyvkyazu +ihfadsstuwooioj[dfqkggnfiplpdcsnmx]ylmhqzhlwtxaxhx[yyqzppjaxhmgnlll]orngviyezsyopwfxmhu[pucykxnzcwdwnjzruf]axfmqcflmrxdldubnca +rsaoluhtqbbhahhk[ursokfyrzqvmjsq]xlniovtwozkeahaydy[nyualslnfurebmbnv]ehgueldltahorrpbbyr +lviuzeeixehupjezj[gzwzktpbujzeyypbqyi]ecapnyxygcmgfhgmfav[qclblpzrkfredwm]wcdfuzpoxtmzkif[okgiecyymbnmziyyke]zflgxeqtxzeezvc +wzpeboftsvuwnxel[hmqswpadnffutphylpg]hbapzwwtxulrfaenb[hgsimoxqivllbthuavr]jpxhxohhxhlhlfemuz +xbojluzthxlygkyzkwr[hjnkqiofmyuospv]gaglxxtcdnnbfvjubea +uxtugntiubziynpzbju[onxffxfoxibzzzd]wineojjetzitpemflx[jlncrpyrujpoxluwyc]fxvfnhyqsiwndzoh[lkwwatmiesspwcqulnc]cbimtxmazbbzlvjf +bezefpkmcyawtdlbnmy[yxmpaexxuojocuutf]gybqtynhfakfryzyoot[rzddrwizmjilbaevypd]wjfzotxmdlvmjcklea +psehcauaffyyegx[pwkfxlhukfaavgq]pprwkzrtyyghtmsciep[rbobphjpqsmeuvgrjt]vlobomuxuflrqfwjo[nijmtbnuuzplcprb]snfbebpcogbvkwf +cwflkfoevdvovrmn[xfkkrwrohqcdsdyuomb]ohirkxwgudwyepwtvm[ootlpxttypewmdjq]snhujgngvmxwpmagis[fmbwhgzljomkrdcph]pvfendnvzctahabni +eoczaktxgrdpwordn[rbhnrlgckthgxxuzu]htgvsgazuzqpkjoejg +wwadqndhcahxivixrpr[byzxpjmhnwsplkf]zgwftzdjcyjhuefzynn[pvifqpqbtfpvxmhma]atwcwmmvncdisnmw +cjbhnctazhwdvcvza[ydnxbdfkufaflga]tyxejwcbirwrznjbf[wmrholfqzuzmywhlx]yuglypghwrwzmduczd +sucrzntdgccanozz[dbyodxkqvfamarbda]iwcomrnnifahrolyhj[lldsewtcmdwovjto]kxnjfljadgqmjmmr[jpceairekkatfdo]loulprskwdwpwupvlow +rmkxvrnxpnlpgxk[ymfqtqhsulsvevgy]mwlnvrwgovdeimq +cjytdtwgtpfaoqpo[ekwzzukvazymdgcjbax]qmhoxsmtmokxfyggfsl[ghoubcwbxpcflxaoiqr]mhzvuhnaesfygwphehq +fjfuuxzzuifgatypkx[pqxsrnqgcfmmojf]drmywevzjvfsdwoe +aaltjjojczwavnn[wsduayllqabakudvkzo]lnkpzrwwahybafhnmlt +trzcoixqxcnlfmu[kxdaqkezsbtcrsel]aimhkjueidtzheak +knsjvqpezxmhuhawprd[zfschikoyuarwrpvh]jnwcjfkahqerhof[eiezpktdgiogoghnyq]xumsccawinipdfbk +qdxlgihyxpurnyesn[uoqazfufeeorudagpbq]doynfpdydwxymmbnh +hhxsolxzfchrnjue[qibcadmwrkmkbeye]xydgasalivcqoag[oyblkffxdgogkbjkk]denthwhcbyimeeyyb +oomceudfrpdpinwaw[umnoeimbzecoaprmqr]vnswrzldpdlfoaaaxv[ysmxmvvxuzozxtkar]eatvxgtbqcoquhhzzn +mrgnhaqqyhhvdfoo[brbrzbaajkxnrbkpsx]qknvrvpfabkczng +xtvcrctmszksrojch[bqfzfdhhsfkolghur]dwqpjaqisitqmhpnkxb[omfmirdtvkdoehc]dgogacudqnrtshre[nudirbvfeacxjhb]igdfrdrqycnowffn +vrgmsmohxhgyybr[shaciuypkvkjaqoho]dlwfavdhohiruaef[iowdifdsyckgfaixzbi]rbkuyahekeohyxnyxmo +giaemyheoijyiqs[dditjewdytotrevtph]nrcosaxnrsfnglxyrbh +aqpquczuuqsqfmiynf[rytylbwxvhzymqtqal]olufblbfhnqfhbdpjc[njyewyvnezayxeqkooz]yawvjaofjaqcpsaqnlj +ynntsleqhquylfosn[esbohqcciuuyintjnn]krtinqbvgjtfvdttys[cahezzmqcfayrtijrl]jlquffpwepfjhij[gsryvmkutwbfvekc]xwuhwthwkpiprtpn +wcifpmwramdtgbyx[mnetsyvjbkzlemkkrj]ghtuuasxyhlhdiqi[oidnivyrbzficmrkxa]sshjteaabilnbbv +jpzlvsyhfjewjsp[zaukqnrnkxuyblu]itarroefggdtpkwknhm +nxdmkipobgdhcekuk[edajmdcmxhcxntroa]vgrzzrytukuxdetf +elfvvedwjbltwcnsbat[wlyogdvixiwmkxvshnm]cwhhqukydgvfwzkw[hendekbuynbsgeza]unurlefaaduvvpbi[uriiixudeogykwckty]tilfmprasfargwjoeaz +ehllosfwjnemfpzkjbh[paefpdhywomalbjjwco]jynaehuopnolwbg[cusfqbvxlvqtqbuxgyg]dnvunkjnzqnxcginfx +jfdeexfzxrfxleh[xqkthmkzmmfbesrfa]ddwxrlspxpefvpkhiz +fpexyleujiphzrejgu[rjjuimrbnfxihopoasz]xiovbrwkxkchdagu[rssesjbgdfwwomrpdxi]xurzdbytoxjkwyzl +wtudecnnxchnjhuz[ntnjpmwnwqpqqkcevi]xibzynwnkahwfizkxni +hxvhhsyrupdpvjymv[jgionvwaxuiemcdtvn]riesyfkfymxxite +ndpfqkkiqgvdiciv[qwegblwhxefkszrc]ddticzcfwxoylaheuam[kyqomblpykgrsofpbz]woykqlgorinilldl +lupajnaqxzgawmnb[zfmybtxebhkalxwfwyt]sknfwfxgdqpbnqebbt +qkttfgfwmqxgpbcgqvg[zkftxwwbappqdllajhi]ducnsepawowmjggv[osygsyvnhlhkrzahzoa]iygudcaycsrtbkohbrd +akdvrmxjbjaahjcfhz[nueiutbritxbampij]vjirxewhgmmwlora[uauyvvwvrfhbxituz]omfdcitqhjhentxgfu[fucgdtoxvryasxib]wyvdxqpofoszluslht +eorazrawyakawjfxdtw[bpyrfrsjhfualcoyfjc]gfgrienuzeifrfvw +mcfhxjmwxlcreeloqkj[xlhrkjackiehnqj]iubxmjyssnwjolapvs[tnxnpotyzdxhqamjfu]qakefkzqtcahednybux[tosvyefshtbgasbf]uimrnuvlevqylbpkq +emyfqgrtebopsxa[qwacgpmlcpoitzmdq]weqwomfyfqhxmkjalw +dgnbvzkwdnxzuduvdee[palmkulrnlnjdyeavyi]cjgsjpbxpairrderw[nnoxigqxpkjzjhfxgxx]xdyxrtslnpmmtpotla[undscmvmhuxzohsdg]ghxcwnjphcmvttna +uppsitifhxdcjbn[yiqjsnlktwkbfyho]dpftntebjwcyuih[rrqikyarnxteelpkc]qbjeplbraadbjxoicjn +mqjlmaekarsttdmnl[cwdajzaopmbrikcv]vfhztmfwqcwsbdnyebk[puetgqkczejvdjbfqc]hdkqfycmizzpuoxumm +maldhmhtlcsjqyzrb[zjbfpjpvdszrqkpzf]xspijlrjyzjputpz[mcjmewdtmgfqutbah]hebhshxtiedpjpjngu +hiqikcyyvddlcggnq[ehsopbptguatpmyb]wfayjslqiqivsbrhedh +zriahyyoezygvjmepy[dujudufydhkqlbc]ndalzjrjswnjujfm +silotorivixpdydnd[wtsojgrfgugwoyo]pfihyfhusblbdodtej[hfclibenimixyexhble]gaglopphfrhqxikvw +ddejnfspvmvffpfyozn[odqqmwgalivbswfio]rbbkjhvnszgvfjtgog[fgvufpphptnjcmraha]adsajvzndnajmilk[ukslffqfzyvxyxy]njzcfhdqyrzzctmnxn +ehdmevcrfoeejfedbnz[cidowzljgyawbjmtzun]mxyjuechgccpwlxj[ynbdkyqvibsfwekcjr]qjilshucvucbebxmeyu +wfyklfdesrxsopcnj[otmmdkdasnvomdhef]lpbexhubcjmfwlt[maeuvtcgzoxemnreol]qbwqszxalocdbfbtge[wbvswinrpyzjbfrsr]tinsrsxtrfkizkeu +grorjgszsijwlhxfrjv[hmjhqmbipfjguwkzebl]kgphtaonflqlgbyk[qxnjzdupbhhsevc]tyflwvcpxchibnttwsn[ukpfpknbyacpxmoxzmp]dxzkerytewihuptx +csyjgthhgyhnjuxxg[sjqffhahrjyoqxncjcj]owwprabojlpraeyk +ibcaffhxenjnmvrnog[shqpfncawueqmpyj]hawlfakyplonsim +ftaeqqsyebdeveutf[tnifrefjkddtblslzwd]cbdooorsorxwxugrp +ioigxerknwyrzoztkv[ffkgwjfeowgtoxnyt]zhkhaqrcdjsvxctdj[ebntbwbxzbbqrdasjz]solgzrowmzozovz +jfmlobddfxzipyzyaj[qghvghaxzmuhrpifyf]idrqkcfvatwsyom[wncyawwmennmgio]luzaexvwjhxbryah +pjcydgylusqdexbb[nsoyssffvolztzns]mntwrdacovyfxcqfn +tagdiyuylrtvuyu[exjzdpmovyftjpxgj]vnswkkhaoldjfkwd +atowdglgkmbnrvyt[uzgadzquqpggiapdznk]snpqanyoeufutazn +nltynylwgqezegky[rawbwledrpbduldc]isupsldtvjtahlwjgz[upmovvichcymgwuoqrc]gyjptxtuaqcfixjuanz[cxzbiosnqkeaxlkrxh]yglfdtzazlkxgmrlel +ezensxwulgqdgytdfo[ozlmpzteuyjqrxocn]crruxzecnvrcpjurn +ycflwfbhueatnpimmkm[tbcsifgtkkwtxosxau]vsnyspuvhhfozxgjbbp[adcyzxtdknieifc]hjkfmbmxkrnksewsqjn +gffllhgsmlpxkktcq[wjqwhqrwepermblfolw]wzgcjyrpisbwyhnz[yjvzaqjsmdgazjuep]gregropoulmnagcvx[gfjkkejnxmpfbtecy]ufbqwnifaugffsai +xfrmlrlrhxsownybek[ryhsyltyflhjbmltndc]agtvigglsugquzbc +rshzvotgovlabfxr[sbuytwdobnvpwcax]bynmysulnnjmhkf +cevbpuyyvlutjcuutl[pfwloktlqbxfcogrc]dflejqcyvpasjowhsj[nscuwnjsrzehqamogtw]scemydqevrcuvhwxpe +nsbvubuyjrzsalkdwz[fooatkopdyvkxjgfho]jwojdgxqtlzxgna[vmkwusptfjbgmhq]xkzpfgkklnxunma +jovdewpqyfouyzpegwg[eigxaawljopqauy]cjvieeexlyiovsugif[wtkkpylnxtqrepkjei]jrdmibhhcftoeauh +flpwanunpldmcnated[unzsihvveyitclcf]gqxlznjbnpmiojuunu[kxihijtbrbyhkzosvk]xoxdqctctmroxoppilv[equfcbnltdiwdmahu]sxfloedvbznwctnuqt +wtktlikeigdndpyw[dspimpajtzfzmfya]rmmuigyferofztnuir +thnfrvngjhjrwdatdc[vwmnddbpbakuapirel]qojpomziuupsfysyfng[gkgjyjoovotmjwwgvrq]xxfsycfupudisdbtk[hnieklknhbwcfka]qbanhtkdijnnfegs +mazcgrfwolhhbtman[jokgcthhpopluovccrg]eybriinzdwjyfjes +kwxxubruqgrsifrpuxe[pqjcuxzpykriher]rcjvrturrhxqhjndj[umqwgmhgidzakfnk]nzbbrgxxsmkxahvqzs[rnqcmdjyrldnzrr]nhztvrovbpifyxbcvti +kgojbczgybkjpoz[nyemqsvkokdfxiata]lrstpiuovispfmuoi[jifgmwihkzirfnblzqu]dixnvdkqejtatylghtd +owhhzrmvmuosrtiwaf[xvdujvnkkrunymvh]dihbvchdelxcqsmlxe +atcmrejivvyxxbsexp[cjlvkmfgfjslzeno]liavdjycjpirlux +snvgwihgkhrsgdzysbh[bbyzthwnbpquvtrmlc]cdwvzdogbisfoopk +lccrydahkgmzirmjzfv[rkkdtcqmlfkxmke]xkercumbulkzrlgxng[deksxliclevazssc]yhidzcmnbvgacmdv[ucxflzawmxnmpxa]hrfaesdlnukcblbqlm +jdajqnzqyhcomekhejp[tyrtsgspmlmrbkm]nyfcgbagjplztrigokr[ntzzerjwsgafymxw]ftckmtirxfdfcqpi[pulepgarnqxbvlqmvog]qashqfzwglljzexbnsv +kjvalulqegxybfhx[djfulullrbsebeknl]bcxpgathyauumxcrsmk +fihxcyovovcmukir[gucbridfutpdnto]abzjiaponkgoposvhw[vpqwcnzmovnwdwwo]zrkqlpnszeioesnhk +nyvobmkhkbenucug[dwpifbppiwftzokarg]vxxalauqmooacfmdox[intaxgcpfajzdwmcsk]brknzsnhuukxjuv[fkheyxevpuphuflvzkk]levqirhqhynkthsef +uwdcywcarjujlnh[qvtowczbkenlghcmara]kfhcbnrkorcoyhkww[mzzwrpwwkrnnfavjxk]hcjjzxeynegdpfwdw +xtgkbqtzbeptcxndjxl[jzmbcxsmcrtjtqi]wnhqmctldgxjbrtio[brnnosnckhalqzqsyyv]uhungebnygpsmpzmj +xrqpqqsqazzlqcdglgf[ziiwwokpqiinmqe]stagyposntgyxnh[ubxzaskwfzlfrmw]fimsoerydnghxlg +bdqtpixvllcdhgfqby[xurgfxznrblksso]wgfyjdmpjqirhiqvgg[pbgnckfbdinlepkb]mqbqboepuqheaop +xxlhstlmqypoyhb[czlhqkifhucxqanafx]jkaaxiwxrnneudczrtn +jhcmhtveqenmeczz[rcpnnuwvwiyfjxo]bvtashqfjcnbrqy[ebgihcdcimvgdwochq]pmallgnuofajusz +ltzknsdqzdmbpxipt[golssizcvkrcmquotrj]nqjkcgdagjqzvri[xzehrntfgcnmgrh]devpsfftuonmevocw +wgklxpmeoznyxtukh[nevjkmpvlbaulxjieh]wopqaknwlwjquxt[mxzczmngcaxharjipt]tuvwngrmylububv[ryewaqhshtogggdvc]xpkbqydbwshscjcw +uglrhqngbxqtqmdlyym[ihdwlwfqiwnigvyarcw]miyynkctggbwzfkq[rqycaudamvwoxju]mmnzentjyyddntnpgxf[qjryduwnivawjepknli]toodveiqtzjxjvq +tkgmnxgifkqzuut[csyogdborjrnygg]rpcbucosajyyyelju[bbujqtlveymlqesvg]wvyfimibeynzhsotymx[tqxldisulrhuckef]kgqjgtaluastnwev +qifwiunabpnzezlmhh[ffwsncvlqpulttkx]wlwdpgntblnoubom[fksogvukjlzupwetlef]cfszpnemoifasqw[ttmonrrbhknspuqx]htucxamhxsoigvt +putioshxpafnkcwdejm[dellcuoevwyyhvwurpv]zezpevhlmpzbevln[rigyoryyhoxwlbg]zkdzexpizgsumkuiuy[hycpaavxiqnlngrc]gknnfredhsmpofldn +eknxasjdtsksamfc[dhtgifeezlgfhlyvfdz]xfttcwzqucrtngdpcmf +uyiazdptoxzxbzo[bmuglholukatdbf]ascjhcllcatoapyvn[isqfrvbbkzsxixjuqrq]ncwzqqgudgwrtxvzfe[spqvftdlddlfglgg]zrqbukmufumytpc +czefxpifdsqjjkoxgj[klwshjzagbrgtpiht]xofokkhzlnjplefofcj[xodekgjbgraikdley]dgsrqzqxjxjqftn +ertbujoaanuvqskr[hsgeexqdgsqfkiunhpa]orgvxylmsdlzeyjzf[mdkgzwdnvtyoogulx]nbapgjckrfxeniiqotx +wgywdqnvxooqjsefac[qgpmwggewotnmloq]bqdvbzpvqwadroh[bvbsnhmdurzcubvsno]ndwqyjenerqdupuob +patbwuitsfeqvswby[htsntyfmofqldcbwgv]zolnndvkaimzdmevb[feyvwvkelmujnppg]tjajsdtevgjukkgrwr +hoznvyznwitnxlvu[kigfxgwcrdmfwgsqnf]lhiqoaqezmswakdcd[gxmjrmvoxkdfmgcpqnn]ditkwvolcazfuxzfroy[qqlbrrwfedrgtrgm]iysjaakrbnqicefqxsr +ufrkrtywkhfhfah[vufpfwhtxzbdqnraz]kklboeggazttzui +tplrraxhaaaoczdpg[vzbnososnioajien]dvdckrkfdetoofpi[bywkgphzoglisygthku]gxtnstjmffnepin[evccrlnwjthfxhhqzc]lisguwkfwswblzc +lyluhnglmfippljtwww[wnkwnwwsasqbrnlo]nilnannzjbpgbjs +iknqwrvlcztavivxmh[vtfyhjzauqbyjchjt]zxmasnczpxlusknrmtf[yvfnxlrwgfxkdlj]otlivjvbvilezalha +xbrzzccetyjzrlt[buwwhcatpcchdvhel]wosdwuuzpekifdhhvpy[twwoaezcowxvioqsrrd]uuygkhojhlcofza +wqeintsbeqzjpuvx[wqlcamjmpbtqqzjcy]czhyqcurqkfnnkoltja[lozjcddygpevnxebmqd]avwqdpfxcrcvmalaczo +aecvebozlythtcfzt[uisdkrrjeboxpuclbg]sjxcgygpeuirukx[zeoyaxgdyzfkprewiyc]rdlnzpbwgztivpdon[sfcqbpfgffkchksmfjp]yfgrlxiixyurxupuoij +vnglyokdpxlgphpw[bjnaqkjojazyryswr]bekdduuwrqabarzwzh +fcggyliuipcvnimphib[adkvjaembjcqbcc]envpiocijefswhv +pgraswoweceiftu[khhpmbjghxgmhsud]axqjkekmecwunefk[pvelpeorryjcstk]lruensapttjtyxnr +jomdrazkwryxuyc[qolcqhwdidalguboza]fcofbrgowezhbyqckrw[wurpvelnhdewfoita]swxwyfynaymvrhleuj[icdlergnbqmowlxjl]vxcwgvrvpdejoybt +axbedlkxkmbvwacv[uabrmhoepcgtsdmjjzy]iqqpitszpejeeophjmv +gmltcuvpeuofwteput[eyxdpnceufobjelir]hvajyjjzgkyrtgvrfs +sfyyzksaymsvykmr[xjewfmfhhbrmwzf]cbzjmltnzvcodwtytbz[ewgckbdvfnkkyxyj]dfcrjyoakdyggbsxm +wxjalqmicwmwkzakcy[mothnmmvgypeacecvz]hbjasxlsbbgxpfdptk +qtsgwqpihqjgmjadkjz[skpdhegagxxbmayy]eaojrccgpxovqpi[ixyljrfgswullqnbzdz]etvomvkwpzpxxcj +mbnifyngahvfhtfhql[azcbyxkvcnoatuo]scgddcntikvavaseu +uciiofzqjkhndnzx[hoyxdxfahorycpfcofk]epeazzccheaegyobu[sculkaizijfqcrpjl]nrvfdtpvgoqioomvmv[axmvmzytxnbfcsjf]fccriiwmdaveeyamwp +sxizvuhprsyyxgfqgqx[zwszjxransryibshzw]ikquiagnkoqexlsqypb[zpuqrhaqvkuvhiqk]pvuqiqxpjtsyqgcyr +svjudmyxlshxbbvawl[inswkufalzfwoumcv]hrobewddabqsiuej[ulhptknpxcwqxjxanjd]osfyeygptwfjmvrma[pnuynwtwuulsizw]srhurplerqabvouelhn +islwmbcjeljkceppiw[whvcrbqzgtcfbcuv]tcyzkgyzdaekgnzzmz[ddefwmnklcddlhow]npzbtwmzmhjtzljnr +lgdjrkugqewlqxvn[wtvrzflzauwcxkyp]qbswluceqlesdfwy[kbtmzcvoubbiqfc]honrvxwcqsgphvkt[djuuancygxacmka]knseftjiunzuxdi +miapzpluxnmdfvi[edlbwflzitzghywio]vizzhfxgilwpwhr[ochurvodstmhiypp]rycvogpcnysngytixb[mqnrhpbvojfefcicx]zxqxoinunlkjvetkvrv +spsecopdywuheqbnm[npwovcwlwooxqhyp]hkuizzsdvysvhvmlc +oqchahhsrywoeteaeg[ucowjiwrzkfhyebbco]efxdrribepcvduwjgf[nvyogembujkkmcm]kmfrlcaeawrvofxrim[izjebqewubrbvguzk]ngmugyprdvrbqskn +vwlikshqcpgxqvqshv[izqveivxdxgytqgdk]abnvmprwbvwmrwlkkp[iffpegqsxjwfyvixtwk]iseiapjkgnkcepr[gtfhysdedzxwrhcgt]ktaeihyqegeozdfuz +aieqqwhwfwxpldni[huyxdcvpglqqkeyeia]teztoyeycqohfli[uqvfjzbsvttphqxsy]afsxoqbqvtxtgriuzjm[psumrbbtxdxlwpk]qwpuwevhjellemzp +surpbndlvplunisu[alnojwsmgbtaomke]zjyikoebzazpwql[lkgsnxodocsrniokroa]mrcipdncevvazafvkb +dkszjaqhbkyxwvwj[wykmzcvppharrax]pvrqzqhabqtuhrj[qfxnormttaxsldn]kxjwkrjwvbiutgnfnw[mbspfflblosguqzt]nifozavfsfkngds +uwafdvptgkfikprb[xhmrwxqxnbkfpdz]efhnfwvovbvglrrt +kozevksryerpsrgmub[dbtinyialvlkgilue]pyqdyodlttsnrsmfvca +mgfmdcxibcgzhrfmm[mzvyabccrdzlaiij]arnetejwseofkwqvxi[fylixbrjhxdfhiewbnb]wvndnswxdnbcktp[tetomqdkfmcndddruy]biuxgrvctlbbrqmxjp +snjnfgbtgpkouxlpd[vapbqurlxyrduxqy]meyhgdsbvkdadsfozf +fgknedldithvaoxqpl[mihhhdrtpjmoridqamt]vfupazymsipoana[ngqkziyavxkyukp]qqysmfkyaxbuytr +fugbgojgdeavlmrut[zpukymkjkapibmhg]mmdesmcwbhlfugkdiz +lhhhlyioiiknkray[omilmxkodlmvzhkgbaf]cyftkgjpvjvdnortlj[ifljdtkgscmnmxsq]nxtettqnuaotfsh +whayrxopbtvnpobokn[jfbobalkbfjxcsn]jjucgwedwbcfrdginaf[atdoatealbqhiks]alzapbxuvmivqfgpg[qhzdwsbvcbtlpchem]pxxskedydgisthkatn +xzreuonsdqobzpxr[zamxighfvnaxqum]olbigclentyvugtuvg[ysrgcksohtkvcqmksqr]gnaqqezdmnfbbnir +gmmabzkwsehkwjnevvd[uuzdntitdazeykwek]aebpajrwpyknqgx[kczhcuveeawmdiwljzl]ugwigmilwkczrcqnfo[piezzmfwnfdhnlbranp]qhremthdwdegacvptfe +tcqhlxasqmbwzuiuirp[kfqoequocdsfwqt]ikhdkpkmeezfzfyyilf[lrorfowgsqkflwauhu]zshoiccvfwohudsmdcr[zohspdmqcdvgagdknr]zabaqgsmrwkrtcuyct +fzanofpykognmio[ladtxyissyfrssobo]xqpwrgdmglgqhwawqok +hynipihszohrqwaezga[iqtpgjpngbwhpailzg]wfgimkpjrjnkroueh +lpmrkesaqdojkqrp[dcgsayoowgpiwam]arphrffqpcdntlxsza[ogneaqyckrvdcvqxbm]xlogrojsovrzfzjtjbd[qjoiyyatxkwsrvldp]gffgmieinxlfzpiej +jaeayfunulncspts[stghconfjhkqkrxncwi]kcnaqhyukuirsaeebp[vynwfnoxxxbqztj]gddvegwjuryfnkgkpqq[jnhmbdpvsxreqhoek]pgpikslhvbnmbxbkbc +lajiqiaxcxgpvsbu[bfetstragmoosbw]hzurjpxhecnadwosn[dquibbrojgurqiqd]aceccsnyrnfmcsd[quqxmzleqvspvsemjpn]noxrndgdrkffsdvh +bytcvwxuavajevmde[nhmjatzolmbdfgogup]qpildujniqlnfbmuf[gxpgorlbxpqfsoreuey]hcfyjmkoywueuivrio +amvudustnspjqsbpjp[wdudhbvvlgzbbbwlafg]kwpyjvuerzyzmzft +vwpklmfpzssyoifbb[bwtpxodxedpdsvgu]azathmhdnqkhbmrdlxn +iwzncixpjxypnmykke[wlhvfjbumhmtachoab]wtftbolwhpwnropnzv[zhfcmkbwizknymev]twrumqadwvsaciwbwoi[evodjtvrucrzgtwio]fmmbddkwwpaziycik +dkodbaotlfdaphwzbcc[ldzeemqiovyqjgs]qxibabdusgaistkru[usglloxgycyynmp]aaocvclsocababbzxeg[liaacgfxytuqudp]jvvqsypuoduyhvraak +bwzsacxgqkbjycgfw[dbnligvrmqscasutn]rbgybqqsgjvlonkut diff --git a/2016/aoc7/src/main.rs b/2016/aoc7/src/main.rs new file mode 100644 index 0000000..254f23d --- /dev/null +++ b/2016/aoc7/src/main.rs @@ -0,0 +1,95 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +fn main() { + let lines = read_file(); + let mut ssl_count = 0; + for line in lines { + let mut in_squares = false; + let mut char_buffer = [' '; 3]; + + let mut abas = Vec::new(); + let mut babs = Vec::new(); + + let mut chars = line.chars(); + char_buffer[0] = chars.next().unwrap(); + char_buffer[1] = chars.next().unwrap(); + char_buffer[2] = chars.next().unwrap(); + if is_aba(char_buffer) { + if in_squares { + babs.push(char_buffer); + } else { + abas.push(char_buffer); + } + } + + for c in chars { + match c { + '[' => {in_squares = true;}, + ']' => {in_squares = false;}, + _ => {} + } + char_buffer[0] = char_buffer[1]; + char_buffer[1] = char_buffer[2]; + char_buffer[2] = c; + + if is_aba(char_buffer) { + if in_squares { + babs.push(char_buffer); + } else { + abas.push(char_buffer); + } + } + } + + //println!("ABA {:?}", abas); + //println!("BAB {:?}", babs); + + let mut is_ssl = false; + for aba in &abas { + for bab in &babs { + is_ssl = is_ssl || correspond(aba.clone(), bab.clone()); + } + } + + //println!("Is SSL? {}", is_ssl); + + if is_ssl { + ssl_count += 1; + } + } + println!("SSL_count: {}", ssl_count); +} + +fn read_file() -> Vec<String> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} + +fn is_abba(char_buffer: [char; 4]) -> bool { + char_buffer[0] != char_buffer[1] && + char_buffer[0] == char_buffer[3] && + char_buffer[1] == char_buffer[2] && + char_buffer[0] != ']' && + char_buffer[1] != ']' && + char_buffer[0] != '[' && + char_buffer[1] != '[' +} + +fn is_aba(char_buffer: [char; 3]) -> bool { + char_buffer[0] != char_buffer[1] && + char_buffer[0] == char_buffer[2] && + char_buffer[0] != ']' && + char_buffer[1] != ']' && + char_buffer[0] != '[' && + char_buffer[1] != '[' +} + +fn correspond(aba: [char; 3], bab: [char; 3]) -> bool { + //assumes both follow the aba pattern, so [0] == [2] + aba[0] == bab[1] && aba[1] == bab[0] +} diff --git a/2016/aoc7/test_input.txt b/2016/aoc7/test_input.txt new file mode 100644 index 0000000..a675097 --- /dev/null +++ b/2016/aoc7/test_input.txt @@ -0,0 +1,4 @@ +aba[bab]xyz +xyx[xyx]xyx +aaa[kek]eke +zazbz[bzb]cdb diff --git a/2016/aoc8/Cargo.lock b/2016/aoc8/Cargo.lock new file mode 100644 index 0000000..dd33856 --- /dev/null +++ b/2016/aoc8/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc8" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc8/Cargo.toml b/2016/aoc8/Cargo.toml new file mode 100644 index 0000000..c49deb6 --- /dev/null +++ b/2016/aoc8/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc8" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc8/input.txt b/2016/aoc8/input.txt new file mode 100644 index 0000000..d827762 --- /dev/null +++ b/2016/aoc8/input.txt @@ -0,0 +1,194 @@ +rect 1x1 +rotate row y=0 by 7 +rect 1x1 +rotate row y=0 by 5 +rect 1x1 +rotate row y=0 by 5 +rect 1x1 +rotate row y=0 by 2 +rect 1x1 +rotate row y=0 by 3 +rect 1x1 +rotate row y=0 by 5 +rect 1x1 +rotate row y=0 by 3 +rect 1x1 +rotate row y=0 by 2 +rect 1x1 +rotate row y=0 by 3 +rect 2x1 +rotate row y=0 by 7 +rect 6x1 +rotate row y=0 by 3 +rect 2x1 +rotate row y=0 by 2 +rect 1x2 +rotate row y=1 by 10 +rotate row y=0 by 3 +rotate column x=0 by 1 +rect 2x1 +rotate column x=20 by 1 +rotate column x=15 by 1 +rotate column x=5 by 1 +rotate row y=1 by 5 +rotate row y=0 by 2 +rect 1x2 +rotate row y=0 by 5 +rotate column x=0 by 1 +rect 4x1 +rotate row y=2 by 15 +rotate row y=0 by 5 +rotate column x=0 by 1 +rect 4x1 +rotate row y=2 by 5 +rotate row y=0 by 5 +rotate column x=0 by 1 +rect 4x1 +rotate row y=2 by 10 +rotate row y=0 by 10 +rotate column x=8 by 1 +rotate column x=5 by 1 +rotate column x=0 by 1 +rect 9x1 +rotate column x=27 by 1 +rotate row y=0 by 5 +rotate column x=0 by 1 +rect 4x1 +rotate column x=42 by 1 +rotate column x=40 by 1 +rotate column x=22 by 1 +rotate column x=17 by 1 +rotate column x=12 by 1 +rotate column x=7 by 1 +rotate column x=2 by 1 +rotate row y=3 by 10 +rotate row y=2 by 5 +rotate row y=1 by 3 +rotate row y=0 by 10 +rect 1x4 +rotate column x=37 by 2 +rotate row y=3 by 18 +rotate row y=2 by 30 +rotate row y=1 by 7 +rotate row y=0 by 2 +rotate column x=13 by 3 +rotate column x=12 by 1 +rotate column x=10 by 1 +rotate column x=7 by 1 +rotate column x=6 by 3 +rotate column x=5 by 1 +rotate column x=3 by 3 +rotate column x=2 by 1 +rotate column x=0 by 1 +rect 14x1 +rotate column x=38 by 3 +rotate row y=3 by 12 +rotate row y=2 by 10 +rotate row y=0 by 10 +rotate column x=7 by 1 +rotate column x=5 by 1 +rotate column x=2 by 1 +rotate column x=0 by 1 +rect 9x1 +rotate row y=4 by 20 +rotate row y=3 by 25 +rotate row y=2 by 10 +rotate row y=0 by 15 +rotate column x=12 by 1 +rotate column x=10 by 1 +rotate column x=8 by 3 +rotate column x=7 by 1 +rotate column x=5 by 1 +rotate column x=3 by 3 +rotate column x=2 by 1 +rotate column x=0 by 1 +rect 14x1 +rotate column x=34 by 1 +rotate row y=1 by 45 +rotate column x=47 by 1 +rotate column x=42 by 1 +rotate column x=19 by 1 +rotate column x=9 by 2 +rotate row y=4 by 7 +rotate row y=3 by 20 +rotate row y=0 by 7 +rotate column x=5 by 1 +rotate column x=3 by 1 +rotate column x=2 by 1 +rotate column x=0 by 1 +rect 6x1 +rotate row y=4 by 8 +rotate row y=3 by 5 +rotate row y=1 by 5 +rotate column x=5 by 1 +rotate column x=4 by 1 +rotate column x=3 by 2 +rotate column x=2 by 1 +rotate column x=1 by 3 +rotate column x=0 by 1 +rect 6x1 +rotate column x=36 by 3 +rotate column x=25 by 3 +rotate column x=18 by 3 +rotate column x=11 by 3 +rotate column x=3 by 4 +rotate row y=4 by 5 +rotate row y=3 by 5 +rotate row y=2 by 8 +rotate row y=1 by 8 +rotate row y=0 by 3 +rotate column x=3 by 4 +rotate column x=0 by 4 +rect 4x4 +rotate row y=4 by 10 +rotate row y=3 by 20 +rotate row y=1 by 10 +rotate row y=0 by 10 +rotate column x=8 by 1 +rotate column x=7 by 1 +rotate column x=6 by 1 +rotate column x=5 by 1 +rotate column x=3 by 1 +rotate column x=2 by 1 +rotate column x=1 by 1 +rotate column x=0 by 1 +rect 9x1 +rotate row y=0 by 40 +rotate column x=44 by 1 +rotate column x=35 by 5 +rotate column x=18 by 5 +rotate column x=15 by 3 +rotate column x=10 by 5 +rotate row y=5 by 15 +rotate row y=4 by 10 +rotate row y=3 by 40 +rotate row y=2 by 20 +rotate row y=1 by 45 +rotate row y=0 by 35 +rotate column x=48 by 1 +rotate column x=47 by 5 +rotate column x=46 by 5 +rotate column x=45 by 1 +rotate column x=43 by 1 +rotate column x=40 by 1 +rotate column x=38 by 2 +rotate column x=37 by 3 +rotate column x=36 by 2 +rotate column x=32 by 2 +rotate column x=31 by 2 +rotate column x=28 by 1 +rotate column x=23 by 3 +rotate column x=22 by 3 +rotate column x=21 by 5 +rotate column x=20 by 1 +rotate column x=18 by 1 +rotate column x=17 by 3 +rotate column x=13 by 1 +rotate column x=10 by 1 +rotate column x=8 by 1 +rotate column x=7 by 5 +rotate column x=6 by 5 +rotate column x=5 by 1 +rotate column x=3 by 5 +rotate column x=2 by 5 +rotate column x=1 by 5 diff --git a/2016/aoc8/src/main.rs b/2016/aoc8/src/main.rs new file mode 100644 index 0000000..cb783ae --- /dev/null +++ b/2016/aoc8/src/main.rs @@ -0,0 +1,117 @@ +extern crate regex; +use regex::Regex; + +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + + +struct Screen { + data: [[bool; 6]; 50] +} + +impl Screen { + fn new() -> Screen { + Screen { + data: [[false; 6]; 50] + } + } + + fn rect(&mut self, a: usize, b: usize) { + for x in 0..a { + for y in 0..b { + self.data[x][y] = true; + } + } + } + + fn rotate_row(&mut self, y: usize, b: usize) { + let mut row_copy = [false; 50]; + for x in 0..50 { + row_copy[x] = self.data[x][y]; + } + for x in 0..50 { + self.data[x][y] = row_copy[(x+50-b)%50]; + } + } + + fn rotate_col(&mut self, x: usize, b: usize) { + let mut col_copy = [false; 6]; + for y in 0..6 { + col_copy[y] = self.data[x][y]; + } + for y in 0..6 { + self.data[x][y] = col_copy[(y+6-b)%6]; + } + } + + fn print(&self) { + for y in 0..6 { + for x in 0..50 { + print!("{}", if self.data[x][y] {'#'} else {'.'}); + } + println!(""); + } + } + + fn count_on(&self) -> u32 { + let mut count = 0; + for y in 0..6 { + for x in 0..50 { + if self.data[x][y] { + count += 1; + } + } + } + count + } +} + + +fn main() { + let lines = read_file(); + let mut screen = Screen::new(); + for line in lines { + if line.starts_with("rect") { + //rect 3x4 + let re = Regex::new(r"rect (\d+)x(\d+)").unwrap(); + let cap = re.captures(line.as_ref()).unwrap(); + println!("{} parsed as RECT. A={}, B={}", + line, + cap.at(1).unwrap_or(""), cap.at(2).unwrap_or("")); + screen.rect(cap.at(1).unwrap().parse().unwrap(), cap.at(2).unwrap().parse().unwrap()); + + } + else if line.starts_with("rotate row") { + //rotate row y=0 by 4 + let re = Regex::new(r"rotate row y=(\d+) by (\d+)").unwrap(); + let cap = re.captures(line.as_ref()).unwrap(); + println!("{} parsed as ROTATE ROW. A={}, B={}", + line, + cap.at(1).unwrap_or(""), cap.at(2).unwrap_or("")); + screen.rotate_row(cap.at(1).unwrap().parse().unwrap(), cap.at(2).unwrap().parse().unwrap()); + } + else if line.starts_with("rotate column") { + //rotate column x=1 by 1 + let re = Regex::new(r"rotate column x=(\d+) by (\d+)").unwrap(); + let cap = re.captures(line.as_ref()).unwrap(); + println!("{} parsed as ROTATE COLUMN. A={}, B={}", + line, + cap.at(1).unwrap_or(""), cap.at(2).unwrap_or("")); + screen.rotate_col(cap.at(1).unwrap().parse().unwrap(), cap.at(2).unwrap().parse().unwrap()); + + } + + screen.print(); + } + + println!("On: {}", screen.count_on()); +} + +fn read_file() -> Vec<String> { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .collect() +} diff --git a/2016/aoc9/Cargo.lock b/2016/aoc9/Cargo.lock new file mode 100644 index 0000000..00bd2f7 --- /dev/null +++ b/2016/aoc9/Cargo.lock @@ -0,0 +1,98 @@ +[root] +name = "aoc9" +version = "0.1.0" +dependencies = [ + "regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "aho-corasick" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "kernel32-sys" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "libc" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "memchr" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", + "memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)", + "thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", + "utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "regex-syntax" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "thread-id" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "thread_local" +version = "0.2.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "utf8-ranges" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "winapi-build" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[metadata] +"checksum aho-corasick 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ca972c2ea5f742bfce5687b9aef75506a764f61d37f8f649047846a9686ddb66" +"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" +"checksum libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "a51822fc847e7a8101514d1d44e354ba2ffa7d4c194dcab48870740e327cac70" +"checksum memchr 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "d8b629fb514376c675b98c1421e80b151d3817ac42d7c667717d282761418d20" +"checksum regex 0.1.80 (registry+https://github.com/rust-lang/crates.io-index)" = "4fd4ace6a8cf7860714a2c2280d6c1f7e6a413486c13298bbc86fd3da019402f" +"checksum regex-syntax 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "f9ec002c35e86791825ed294b50008eea9ddfc8def4420124fbc6b08db834957" +"checksum thread-id 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a9539db560102d1cef46b8b78ce737ff0bb64e7e18d35b2a5688f7d097d0ff03" +"checksum thread_local 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "8576dbbfcaef9641452d5cf0df9b0e7eeab7694956dd33bb61515fb8f18cfdd5" +"checksum utf8-ranges 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "a1ca13c08c41c9c3e04224ed9ff80461d97e121589ff27c753a16cb10830ae0f" +"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" +"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" diff --git a/2016/aoc9/Cargo.toml b/2016/aoc9/Cargo.toml new file mode 100644 index 0000000..de293f1 --- /dev/null +++ b/2016/aoc9/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "aoc9" +version = "0.1.0" +authors = ["Justin Worthe <justin.worthe@entelect.co.za>"] + +[dependencies] +regex = "0.1"
\ No newline at end of file diff --git a/2016/aoc9/input.txt b/2016/aoc9/input.txt new file mode 100644 index 0000000..6692559 --- /dev/null +++ b/2016/aoc9/input.txt @@ -0,0 +1 @@ +(6x6)AFPLBX(2x3)ZE(53x13)(4x7)ZGQO(2x4)NJ(1x8)M(24x11)(18x7)HMLOASMJNGZHMCEVEX(11x2)(6x6)TRDPQX(157x12)(60x12)(2x3)SB(7x1)FBSAUFK(4x1)NMZK(10x2)RLIIHFEKRY(10x6)GMDUIQDOZJ(71x8)(1x11)N(19x5)EHNAZSRTFYXOZNFTOOQ(6x4)XKARLK(13x1)IRATYZQMJXHAH(4x8)VFUJ(8x6)AOOEHHBF(27x6)(11x9)(5x15)KTTHB(5x6)AELEZ(17x10)AOGNMNTGDJDYEMMEH(7x8)BOIOHRF(6x2)ZKXONV(172x8)(6x5)(1x8)V(17x6)WEVFHKUDETBOZVKIO(2x14)ZI(75x9)(5x5)EXKDZ(4x4)BOGK(10x5)SXYSSOACJR(3x15)FHO(24x10)YBZPMZIPUCEIYNGYAUPVFOKB(43x3)(13x2)MERJWKSXBIEKP(2x4)CR(4x5)DFDQ(2x15)ZM(89x5)(43x6)(16x8)RIGCVPPOSBRJSJCB(2x9)XI(1x11)M(2x8)QT(8x6)(3x8)XVC(20x15)SBWQFWQWPQHXZXDWSXIR(4393x15)(25x5)TEAACSAHWYWPYJZEPDIHUMIPB(1026x1)(1x7)K(768x7)(388x3)(113x9)(70x11)(12x10)HDEPKSMDLHAX(2x5)RU(29x13)BIOENKVYNENIFNCSWNZIJGCZXBUVF(3x1)JRO(30x2)(11x9)NCTAXULXPBY(1x5)K(2x7)WQ(76x10)(13x7)UDCLRUKNLOAEL(17x10)(11x8)TLRICJOXJPO(26x13)HBPYKHNJRGJHSXUFGJAAHODUDG(177x13)(58x14)(17x15)MWIVHZEKJKLDWPYEN(7x5)MLNEAXO(1x2)F(10x2)GMUPKWMFFU(51x13)(2x12)TG(29x1)CJZOBLWTYDISRYKVWHJKRDDNHSABE(3x5)VDV(36x7)(7x2)JOQSKQM(10x4)SSQKRCQCYQ(3x3)HRU(7x6)(2x7)CG(271x13)(14x12)TPDOYGCYWKAOQU(223x5)(15x1)WKAGRMIPECLUUPH(68x2)(10x15)VRFPOQRGAW(5x6)MEVXZ(11x13)INACCUVBTIP(1x12)M(10x5)ECIALUKBGQ(29x5)LDVPFVNKSBWVZCJUOLIJZHYNOXLHZ(42x9)(11x14)HKDQCRYGEWD(3x5)DDV(10x8)KRRTDJEMKB(39x8)(13x8)IWLYAVYPLTFBF(14x8)PMPTEZESXEQSYM(13x12)SYBXETSKQLUYU(12x5)(7x3)(2x4)FH(69x10)(63x7)(6x4)RVKPXJ(46x1)(19x14)YCVJOBRSCSVKJJWUBJI(4x6)VUOI(5x15)WIFPK(237x15)(230x7)(51x15)(45x5)(9x11)BUZLRCBIY(2x5)ZZ(8x6)DNEOUHUT(5x2)QFOTV(164x11)(30x14)YOCHTVEXSZYELWOMGCXOISALUWCWTJ(8x15)QIINZKAI(1x1)F(88x5)(8x1)SIZRWUDB(49x7)AWSFCZFEGKBUKONNMQQSIGHMKQFAMUEBLTQFGEZLMUTNWXOCH(1x12)T(8x7)ZOTXRWXA(7x15)HGGWNTM(1484x6)(691x6)(53x6)(2x14)IB(39x3)ASFVSLNNXYBFSSOPECXZOEVPRIGJCTMLWCFSVTZ(72x4)(66x1)(38x7)(17x7)DXTENHWTOXYZMQFLF(2x2)OG(3x6)ATG(16x1)IBSUFIGHTLDMGRZE(9x5)DKNZYEYGJ(288x11)(165x9)(16x4)MDBGELYWXPUTRCEZ(14x14)PHSIPUMMXOMBWF(57x9)(13x13)WIVFVHXPHBTWO(4x6)XSWT(9x5)CPSCDHORP(1x2)M(3x8)JJE(12x4)ZADOSQULBZRT(34x10)EUJRPXWESNMXYDAUHFPLCLOYZCUKOSDPTZ(108x12)(10x13)CJVGTNJFUE(37x10)LDQKJRVQQKTVRBMNRIFDMZBJOQZKJSBZPWWLQ(24x5)FXOCHIJNODJUEGYPZYTIADPF(11x4)FUNCENOZTTS(237x7)(106x6)(9x6)SBSWNIMDC(58x11)(6x8)VJZVTK(5x2)QRAXJ(3x2)KAC(9x11)EWJHYTQXW(9x2)TSWWFYDYC(21x2)EXPZWOLLWOALTQGUZXTUS(117x2)(6x8)TLGPET(3x7)GBW(39x6)(32x10)VGSULYHYHHFVDEIQYAXVUGNDVDCDGANM(46x13)(14x6)VYXTECTXLBJFWZ(12x6)IFRBYZIXFTOC(2x14)HF(14x7)(8x10)AFPWFLXJ(726x6)(160x5)(45x13)(1x4)K(8x2)(2x14)WF(19x11)EDIZTWWQBGFLFXEWHFA(17x10)WIGPDKRTBSOJTFXKY(15x2)ADLZSCNVATBMRBV(34x12)IVGRGESBMMRDBWKCIDCLYWVXANHCWQQEQL(15x12)WGFAYDKOFYOZWHU(464x6)(42x14)(35x12)(5x12)TVUTT(2x13)RK(2x10)RC(3x1)LXD(20x1)(14x6)OJOAQUIEOIUVXE(152x6)(16x1)IIDXUSCZEOEHDVIP(98x6)(18x4)AFGQQZEGERPRXYXDTI(15x13)UPZDHXFYQRGBNBZ(45x10)GEJVEKLGJBCATXONOSOJWLLZESRRGSLNTRDKDKJKNAOYC(20x4)SHUJGLTDVLVMUBGUYCCQ(202x2)(29x4)(23x9)ZNKNMTBUBYEMBVCDGNHMZRB(123x6)(8x8)QCPLTVYD(2x5)YQ(13x3)XFKTLSHCQAPID(30x1)DRTIAMQDRSIQQIZKAXMVZDLCRHYVWS(41x11)SLVGMXLAUIETLVILQABUODBTBFZZHOSFRUJKLQPSE(21x8)(4x9)EXQY(6x13)QAFDCI(4x10)XYII(15x5)VZTRXIMIYNGDQKZ(75x4)(6x11)RFOKPH(2x15)ZH(10x15)ZDWQPCMXCQ(32x7)DJRJDFDSGKZBQZMNIKCOLHWSLYCQXEKH(1x14)H(27x2)(21x3)GCUQEXKSVPNXNOTUOZBWR(1828x7)(1107x13)(550x1)(177x11)(30x15)(1x13)T(3x1)MTN(9x14)EDQQAMGTE(39x4)(14x2)NPINNXFQEZICDQ(13x3)QYHEGLYNFPMMQ(88x13)(22x13)GLVPCEBDDABCPDHXXXZDTT(1x3)A(1x3)J(40x14)LPRDKSIGCUXWPZIPZKUGMNGLLGQHFDNXLHRNVPEM(14x7)TPYKUDKFRLVPPF(135x10)(10x7)GWRRITBPFN(5x5)ECPKJ(50x6)(4x10)DORU(1x12)S(9x3)YQFICKCXH(7x3)ZJFMLPD(2x9)HK(3x7)HWQ(39x6)NPYOZFXSQJMVHMGSMHMKBOQLXAUVSZZRUGFOIUL(122x13)(7x5)WQPCNYP(35x14)(21x4)UIBUUSAWFXCJOAAOQYWKD(3x3)VKI(17x11)YCWPDYLDDKIDATXKY(38x4)(4x2)FPPY(16x8)ETEICDHDZBPINNTA(2x4)RR(66x3)(59x15)(9x10)WLRKNQFPX(4x3)OCJF(8x1)QSOOLMPP(4x6)DKRV(8x5)PBRRNJTD(377x10)(88x7)(81x11)(17x8)RPFNVFZNWFZCEDXYR(3x3)DMM(6x1)ZOBJHV(1x10)S(26x3)MLOILGCEQPKNQPYBABPWRMGTCU(13x2)KNRNZAANDYZVG(2x15)UR(1x5)Y(242x12)(144x11)(8x6)HUOOXYEN(35x2)HGPTAFHSMKKPDMGARWVNYVCJWMZETRIJNXM(4x4)TJDP(28x5)UKOZMKRXJLSBZJRRVABSWSIEIDMC(40x14)HCTILCVYQXWNUZHZAZGCXKXRZDHFNTKISPMUOLAD(8x6)(3x9)NXB(44x15)(3x13)GZF(9x7)XCHQMMOXC(2x8)EO(8x12)GTHAWKXZ(3x4)TFJ(12x7)JOAKSXHVNNNX(157x14)(150x8)(11x13)(5x15)GVWWA(125x1)(14x12)OALPJNHTLRQGRJ(24x15)EEWRKUJFKQFVCFVVGRNXRNMO(23x12)SWMZOIWGOVLKIRKBHSIAYFY(16x6)VQBYRVNJQKQZUXYC(15x8)SRQFUMLAWWDVVCY(166x3)(8x4)ROOZHNPS(1x5)G(140x3)(5x11)NNJCA(122x8)(12x10)ACNODOEIPNFS(36x7)(2x3)HI(9x12)WVTUTLVXH(1x14)L(1x11)R(28x13)TFKQTKVMFXBNHUCUGXXBKSPBSYOI(2x8)RL(13x5)(8x5)BMGHNIWS(80x2)(4x5)CLIN(64x13)(12x7)PUIYXOSOYXRH(23x9)(1x14)J(1x10)L(3x12)BRJ(11x3)(5x12)LIYCT(446x9)(1x14)A(128x1)(86x9)(15x1)XKXMQLFUXTGSIUI(36x8)UUZAZBICEWZOHBKMLKFMOPRGDNIIXYZIRYBO(16x10)(3x1)DCZ(2x10)RG(15x1)TVCSLSBSQOEZORE(9x12)(4x5)FOWX(67x7)(27x3)(20x11)QHEAAUEGZRHVTYXMHWGD(27x14)(1x6)C(14x15)EHUGFRTEFCLPYB(223x13)(192x1)(27x13)(8x1)ECDZKCJY(8x12)HNTSWDYP(14x1)SMPGAHCDMTHRPF(43x6)(2x9)QY(3x1)NGD(7x11)QBFWGLX(3x4)JCI(1x10)L(31x2)(3x10)NIH(16x2)SFTKKDPDSTPUVOQA(46x3)(1x11)N(19x13)RGTNKUTACWUHOBKHPAF(2x9)JH(1x5)D(18x5)ELEQYVKHCZWCPDKGET(4430x14)(6x6)SGLJXG(1303x14)(8x3)PBGTOJDF(472x9)(1x14)U(299x2)(71x12)(2x14)UZ(13x11)(7x13)OYMYFOR(22x12)MLXGMMRGPSASXFVDRWWYGU(9x5)(3x14)NFY(96x1)(22x8)XALEFGLORBLTMHIWSARRDS(24x12)(17x14)QARJVLVCJVIJEJOLE(8x13)(3x8)HPO(16x14)UMCNXKMHFCKLLSTQ(96x11)(3x8)IYF(82x5)(3x1)OBQ(30x14)UJYENTNVNGKUFYSGTPROKDUVXVAAAP(18x14)OFJNLBOUNGILMQMTBO(7x2)UJJJZAX(3x2)JTL(2x10)YM(112x1)(83x7)(50x6)(4x11)TSPK(2x2)AU(6x15)XSSYWL(3x12)DCS(6x13)OIDFMJ(1x14)N(13x12)EEZZPERSDPKOT(17x7)SBEJBRDQAVFLLCNUW(3x11)ZGN(25x3)(18x15)CSVBGEAPPCXHRXBYIK(1x4)M(664x4)(337x14)(99x5)(12x11)QQXQUTFBUNIV(7x7)ALTZFYQ(15x4)VBFROTJMHRPGBJW(40x12)(23x8)UTBYEFQMPFIEXVVLZXVDWWJ(6x2)BMJTZF(4x3)NRUY(6x12)TKXPAM(62x6)(3x15)RQS(1x5)K(41x8)(12x9)NJRYDQRLHCNB(17x7)AEPPXIYSGQCVSPVMF(135x14)(72x7)(2x9)FB(4x10)OGAV(26x6)QXHCWFQUDQKXVJJGIZDZLTBIKY(3x10)CXD(9x5)IDBZUGYPE(14x2)KYYCJLAYHWQQVD(30x13)(7x11)YXUUJZQ(11x3)YRHZXTLPZJF(311x14)(49x6)(42x12)BLCUHNHXNFKMUKOHBMVPXMURVUESFYMANQKXIQEVOG(79x1)(73x8)(5x3)JGNSI(20x11)DVUPOLXLRCUFVJYHXWJV(15x2)OPIKHDJPHQPXYYX(9x10)FWYSCUOMU(164x1)(91x13)(6x13)UPDAGP(14x5)LIKFHUVDMDQAAK(31x13)FEJFKXKSSAJYNJAKXKRQPUZMHNTBTGI(7x7)OLHMUKA(4x7)EGNE(59x12)(4x7)JSRJ(4x7)JCES(15x6)QTFXSXGYBARIWUP(8x6)LQDBINXU(1x12)H(127x1)(12x5)RHGPFMZRPSFB(4x11)URMZ(93x2)(87x7)(75x9)(11x14)NXGIGQVUUMV(1x6)N(38x3)IUHTFEASJJFMMTHJFEQAAYMSIUUGNMTUUQSOCN(2x7)CN(1x8)B(894x11)(876x12)(587x11)(2x10)BQ(178x12)(96x3)(14x14)BLIWCROJXSLVTK(8x15)KIYKJSRQ(54x15)KTAQJDJHFWAVGGYOZUWYLIBCBQIXHICNALPOGMROGJLDFEAYDTVTNR(2x6)NS(11x1)JKXMXJTBIDP(29x4)(7x13)EBVJEZD(10x3)XRDYMAZSBY(10x10)OIRMTHQLNG(132x2)(31x11)YAGJSHBUQNJREUVAPLXJGSPVFNQVGBD(54x12)(1x12)Y(5x6)UPPMP(9x7)HAVOGCOLF(10x6)TUKIFLCHLV(2x1)YJ(2x11)JJ(19x9)(1x5)M(8x4)UEZWDQZC(45x4)(39x9)(6x9)UWXBMZ(2x12)JJ(3x2)KDB(7x7)FLZMQSC(196x9)(26x7)YUUQIHKCXYRRGSMXGLWMSSAIAP(1x2)W(3x5)XGY(115x5)(8x13)YUGCSANY(10x12)ZVBPLBCJQK(9x7)RGODHRSNC(54x13)KFVTGSWIAKERKDISXRYZDZJEPXSKGAVZKGIKWRSSOTYSYRPEBHOWRC(4x5)PSBS(21x10)(5x7)PKBSK(6x1)CISVQM(241x6)(39x5)(32x14)XIRRYTZBERAKPMGIMOLYNEODGWELVAJP(113x15)(5x10)USAHI(2x13)ZP(88x4)(12x9)WBDEFGCZAMPM(8x11)DZMSAIVZ(3x15)XCK(23x5)LUKNXCCEPEPKSODMGEZJDYY(11x12)CJTACNNPKPZ(61x12)(3x7)YRN(30x7)GCJRMCZOJFMKFZJAJTZOMYXNWIFVSE(11x3)(5x13)BZFIF(2x2)GO(2x15)EM(18x10)YIGMSZEGBPPIMGKUHO(4x14)FUKK(1851x10)(164x11)(117x3)(109x10)(56x15)(3x13)MSN(11x15)VPUOKCEWGFX(7x7)UKXWCWX(2x11)QB(3x13)QFE(12x13)(7x1)WTMANLW(21x5)SDTRPSRMRYUZKIZIMCYLO(33x11)(16x4)(4x8)ASQN(1x10)M(6x1)(1x5)F(1006x3)(21x13)(15x4)WHEZYMBJXTBYCZG(462x9)(227x1)(33x11)(2x10)VR(11x8)PLIFVKRPUWO(3x1)WFI(53x4)(5x11)GUHAR(9x6)OTBCHHMTJ(4x7)JJQH(5x8)TTUUW(4x6)GRAX(1x10)I(27x14)(12x9)TPXYVLAYHHUB(4x3)WNYV(81x3)(20x3)YXDCPPYIDNNAQJMWXFFM(5x8)FZLRN(5x7)BKMSG(12x4)ZVRYPOOSYOMA(11x3)UGUWOKXVITR(220x15)(8x7)IRFZJLCM(34x4)(8x7)KIQHQWLZ(8x1)RTGQVPLE(3x8)RVU(60x14)(3x12)UJP(8x14)NYDICRGG(23x8)CHISDWBISOZYDWRNEBRWDSJ(3x6)EJG(14x12)PIWNBDAEREATVW(73x9)(14x3)IEPNRGKUCCEERW(4x7)FCWC(3x14)EXU(29x1)CDLSEHSCOEUZKWARMGBPXCHYMVQFP(188x3)(7x6)YNYVYUC(43x10)(15x11)YHQHLIEPOVAHHJQ(15x1)(2x12)EC(2x5)KR(113x1)(8x8)ZJHMLYAU(74x12)(5x3)CQZMJ(4x2)QGWN(3x9)LAE(7x1)OCFJMDJ(29x8)FIWUGBREHYRACQYOVVQJBDFHDGMEQ(13x4)GRPUVTXRVSHVM(1x5)F(307x3)(225x10)(47x6)(17x13)VURYAUGWWOIHHQJDD(8x3)WPVVCPUT(5x5)BFBOB(59x1)(8x3)UWPCOMZH(3x13)NRQ(4x13)WUJV(12x5)FUSBMTPOWDTX(3x12)RXT(45x8)(16x6)MTVMZPSDFMLDYLLD(16x14)JUHUHFNBYHGFWLVG(50x2)(2x9)GR(4x6)URSQ(27x10)LAGGDJBKBLVLPJVVDEZCXEJLFBJ(67x14)(7x15)OMHMPKM(2x7)BH(9x14)LDAFCOKEL(25x12)(5x1)QMTQH(1x15)I(2x15)RV(5x1)KKFYZ(639x15)(295x4)(8x10)SLSXUAJJ(160x7)(5x14)ICLSB(86x3)(6x7)CUYULZ(24x14)RZUPMSJMKASMGYUKSAZQKMBC(23x7)NINZWUFKIZZNKOZUAQOROBG(9x15)YJKHZIZFP(2x7)HC(30x5)(8x2)OBZCEUCF(10x10)LNGPRAITSF(8x11)(2x14)NG(106x14)(24x9)ACQDRKVEOEDULYMLYBGOMSIJ(19x2)UBUHEYIJEGFMCZSTDDO(35x4)HFNTQACPTELDNRWVUVKNKPBVIJMZWAZEOKS(5x3)RSIAK(330x8)(179x6)(34x8)(13x1)CCRZOVJLZOBBO(3x14)WPC(1x6)L(15x13)VAVFETWJRRFZFPE(11x13)VKJLGKAOCUC(92x12)(20x10)MRTDKUJPLGPXMTVLRSUF(2x6)QZ(11x15)MHFLVOFUNDC(25x11)SONLCWNGCZFGMSXYJXSFPVGVY(3x2)QRI(136x15)(45x13)(6x4)QQSQCM(1x9)U(7x4)VIDEIXN(10x3)WFRKVWNLJM(50x7)(13x4)OYFDFFFLITCIR(16x6)CIRLRKXBHVHNUPFZ(3x15)GRD(11x3)FMDUOABWGPB(5x15)EWSOH(3x4)JYH(338x8)(331x5)(324x1)(194x3)(2x4)ZF(48x12)(3x9)JVP(4x2)BWLT(24x15)KPNIHTTPTNNAHSSSDLAKDDNT(6x3)SZJQKG(64x15)(19x14)RSMBLFUAZBGBCJPQDES(5x11)KLUTW(1x9)J(5x13)UYNTL(5x8)NVICZ(43x11)(20x6)HURCGFJBVQOKDECLQELO(3x4)XID(4x9)WOCX(38x5)(2x8)KV(25x2)(18x13)SEYOWGYPRRKBHNVVGI(72x14)(18x10)RXBCYLJENTUPCKCIDO(22x8)(5x5)ZPUYC(7x9)LXRWCDN(2x3)XD(7x4)DEKJLWL(1794x8)(1786x4)(297x10)(289x14)(162x10)(78x9)(1x9)T(28x11)WCIFRVQWPNOEEBPKGYPFCOTNMRAP(12x7)IYTEKBFTEZIX(4x6)ALRX(5x2)QSCXQ(72x4)(25x8)OHCTVXZIEWNMEZBVFKTLIMGQW(4x13)XEBD(6x13)UZZITD(12x13)QPGHTTJTMMFJ(103x9)(24x4)FOJJCXKNPHEGIRYIFBLDVUES(66x14)(15x14)AJEUHOVVHZVHGAV(5x9)CVIBX(15x8)WIHEKYSJZCLABUK(8x5)UYQLGBEY(3x14)QAR(690x4)(14x3)KRIBLTDDRJSFGY(4x9)MMCG(338x15)(15x4)(4x3)VIER(1x7)J(76x14)(8x6)VNTBZCVR(47x6)(24x3)HDWQXSRQWIFPKUSRADRBXAPD(11x8)GSSDBTQZINR(5x3)TWHSS(74x2)(5x3)DMUEM(4x2)FLBE(48x14)(10x8)YLSBTQPTJJ(2x10)ZP(8x7)JFXOKRXJ(5x11)WDHLN(82x2)(7x12)IEXUOMG(8x11)PVPIWSQY(36x7)NXNEYNWWPODZRJBIQFLDLZVSEDRPRWZUUXQS(7x11)WWTZGJK(59x11)(52x11)(17x14)QMXUKMPFATJEJQASH(22x6)WEXAZYBXEIIIWKEYRNINYH(246x5)(7x14)XMWZOQI(225x13)(9x6)(4x4)RMSV(35x9)(12x15)FSEJCGTVXEUT(1x7)L(5x5)IALLO(83x2)(5x5)HEUVE(26x8)BGAOGWCKQJVESARPQNTDIKKOKN(34x12)DGCKPWQBLZNXDLLYIWKRAOVPCXIIEWLSMN(75x6)(6x6)RHDULO(16x11)CRXVYYDZXJFFSPOR(5x14)OXTUY(24x4)UHCHXFDOONZXAZTTBFSINOEG(55x14)(12x12)ZKOOCWQTVQUS(19x10)WNHJGQATSCBTMLIVOYB(5x1)ZHQEA(710x7)(2x14)FD(170x9)(162x11)(11x10)MJTMRWMKRNT(28x10)(21x14)MJZQATVTRTWDEQNSZOXKK(59x15)(1x10)K(16x6)AVTYFAJYHSKETUYI(1x15)M(4x15)CDYM(7x15)TGWTHWL(29x11)HWMXLXCZVSSUPDBTIXDEGPNJJZNGX(2x6)KM(487x11)(3x14)UIF(84x4)(5x14)MDENR(66x12)(12x11)WQEVOLYPOSEK(30x5)LKBXTFFEOHNEJHOHKMMUKSDISVVQZE(5x10)PFZCP(197x12)(24x15)JLPYUIJVFQRWOACTFMQPLYHI(55x3)(14x1)KUTCZEZNWSISPL(8x7)YNZXWQMY(6x1)EZVHCC(6x3)AEVYOO(2x6)DE(68x6)(13x3)KRBXMIIHZERUV(3x2)TLR(35x4)LWCSHQCLMZAPMNSXKWCGVGDTKWUQAIWWLWU(17x11)FWYFWEMLVLQQGCJLJ(176x8)(4x2)ICOL(63x7)(37x14)SQVVGHBVLPVSLAYFZBLEGOKEHFSXSVEJOSRXO(2x2)IF(6x10)APYCKZ(73x15)(20x3)EARRAATGOHPONSTXOUVI(20x4)GBRNRAGYDCTGEODHJDUB(1x2)Z(1x15)R(3x4)QBQ(1x2)M(7x6)KJQAHCJ(24x6)UHLVTEERAYIUBGMUKOJFHRUJ(36x7)(30x2)(1x14)H(17x1)BSZIJHGVILXXURQDI(18x12)PSFBREKMLZRFFFRLZG(236x1)(52x7)(2x12)WK(16x10)CRNLMDQWZECYSFOT(3x10)ISI(6x13)FPJKZE(7x9)XOCUXIU(125x5)(105x5)LPOXYLAWSIIRQDNUWVHOLUDYOZSCFNCORKVFMSYIMMNCMNSOUGJHSBYKITYGFWUYHBJCQELUIMYXAFRFIAOSXSOIMGYEPJFPWQXSZYCDD(8x8)ILXIPPGD(7x13)TYZVRQS(14x12)(3x3)WXE(1x9)Q(40x10)(34x7)(2x2)AZ(10x15)UPJJICKDLA(5x6)CHXZV(153x7)(13x8)LCBGVTVMPVNMJ(30x8)(6x8)KXMWXG(6x1)DJRTOU(2x15)FW(79x10)(13x9)RIFNFQDLAWBSQ(3x2)ERQ(19x1)TTHLBYCOPMTXIIDSBXX(9x14)SBPSPMMCK(7x8)MKNEMLA(6x11)YPDDWG(220x9)(65x3)(2x6)LT(13x3)XFOPJCJBLRXYH(8x5)BKPDBCLE(6x2)UNKPOA(9x15)THYQVMZUG(50x15)(9x11)AAXOWDYIN(12x14)IWTCMNVXNJAX(10x4)JPSIYYKGVJ(86x8)(29x10)ORMIZOTUMSVKNEJDCQDQHESLAQKOF(8x14)SHFMBHHV(1x9)L(14x2)QQHGYTMVZAZRDK(5x7)COVRS(51x2)(11x2)ZDTVQIWFFND(5x8)RQTFS(1x9)B(5x9)SINCP(3x3)ACU diff --git a/2016/aoc9/src/main.rs b/2016/aoc9/src/main.rs new file mode 100644 index 0000000..622819c --- /dev/null +++ b/2016/aoc9/src/main.rs @@ -0,0 +1,143 @@ +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +#[derive(Debug, Clone, Copy)] +struct Marker { + take: usize, + repeat: usize +} +#[derive(Debug, Clone, Copy)] +enum Token { + Marker(usize, Marker), + Literal(usize) +} + +impl Token { + fn size(self) -> usize { + match self { + Token::Marker(x, _) => x, + Token::Literal(x) => x + } + } + + fn is_marker(self) -> bool { + match self { + Token::Marker(_, _) => true, + Token::Literal(_) => false + } + } + + fn unwrap_marker(self) -> Marker { + match self { + Token::Marker(_, marker) => marker, + Token::Literal(_) => panic!("Bad unwrap marker") + } + } +} + +fn main() { + let mut tokens = parse(read_file()); + tokens.reverse(); + let mut length: u64 = 0; + + while tokens.len() > 0 { + let next = tokens.pop().unwrap(); + + if next.is_marker() { + let marker = next.unwrap_marker(); + let mut used_take = 0; + + let mut tokens_to_repeat = Vec::new(); + while used_take < marker.take { + let next_token = tokens.pop().unwrap(); + if used_take + next_token.size() <= marker.take { + tokens_to_repeat.push(next_token); + } + else { + assert!(!next_token.is_marker()); + //assume splits only happen on literals + tokens_to_repeat.push(Token::Literal(marker.take - used_take)); + tokens.push(Token::Literal(next_token.size() - marker.take + used_take)); + } + used_take += next_token.size(); + } + + tokens_to_repeat.reverse(); + for _ in 0..marker.repeat { + for &token in &tokens_to_repeat { + tokens.push(token); + } + } + } else { + length += next.size() as u64; + } + } + println!("Length: {}", length); +} + +fn parse(text: String) -> Vec<Token> { + let mut tokens = Vec::new(); + let mut chars = text.chars(); + let mut current_char = chars.next(); + while current_char.is_some() { + let c = current_char.unwrap(); + if c == '(' { + let mut char_count = 1; + let mut take_str = String::new(); + let mut repeat_str = String::new(); + loop { + let n = chars.next().unwrap(); + char_count += 1; + if n == 'x' { break; } + take_str.push(n); + } + loop { + let n = chars.next().unwrap(); + char_count += 1; + if n == ')' { break; } + repeat_str.push(n); + } + + let take: usize = take_str.parse().expect(format!("Tried to parse take {}", take_str).as_ref()); + let repeat: usize = repeat_str.parse().expect(format!("Tried to parse repeat {}", repeat_str).as_ref()); + tokens.push(Token::Marker(char_count , Marker{take: take, repeat:repeat})); + } else { + assert!(c != '(' && c != ')'); + tokens.push(Token::Literal(1)); + } + + current_char = chars.next(); + } + collapse_literals(&mut tokens); + + tokens +} + +fn collapse_literals(tokens: &mut Vec<Token>) { + let mut i = 0; + while i < tokens.len()-1 { + match (tokens[i], tokens[i+1]) { + (Token::Literal(l1), Token::Literal(l2)) => { + tokens[i] = Token::Literal(l1+l2); + tokens.remove(i+1); + }, + _ => { + i += 1; + } + } + } +} + +fn read_file() -> String { + let file = BufReader::new(File::open("input.txt").unwrap()); + file.lines() + .map(|line| line.unwrap().trim().to_string()) + .filter(|line| line.len() > 0) + .next() + .unwrap() + .trim() + .to_string() + +// "(25x3)(3x3)ABC(2x3)XY(5x2)PQRSTX(18x9)(3x2)TWO(5x7)SEVEN".to_string() +} diff --git a/2017/Cargo.toml b/2017/Cargo.toml new file mode 100644 index 0000000..d84b5bd --- /dev/null +++ b/2017/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "advent_of_code_2017" +version = "0.1.0" +authors = ["Justin Worthe <justin@worthe-it.co.za>"] + +[dependencies] +regex = "0.2.3" +lazy_static = "1.0.0" +structopt = "0.1.6" +structopt-derive = "0.1.6"
\ No newline at end of file diff --git a/2017/LICENSE b/2017/LICENSE new file mode 100644 index 0000000..026d0f3 --- /dev/null +++ b/2017/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017 Justin Worthe + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/2017/inputs/day_1.txt b/2017/inputs/day_1.txt new file mode 100644 index 0000000..7a4debd --- /dev/null +++ b/2017/inputs/day_1.txt @@ -0,0 +1 @@ +21752342814933766938172121674976879111362417653261522357855816893656462449168377359285244818489723869987861247912289729579296691684761143544956991583942215236568961875851755854977946147178746464675227699149925227227137557479769948569788884399379821111382536722699575759474473273939756348992714667963596189765734743169489599125771443348193383566159843593541134749392569865481578359825844394454173219857919349341442148282229689541561169341622222354651397342928678496478671339383923769856425795211323673389723181967933933832711545885653952861879231537976292517866354812943192728263269524735698423336673735158993853556148833861327959262254756647827739145283577793481526768156921138428318939361859721778556264519643435871835744859243167227889562738712953651128317624673985213525897522378259178625416722152155728615936587369515254936828668564857283226439881266871945998796488472249182538883354186573925183152663862683995449671663285775397453876262722567452435914777363522817594741946638986571793655889466419895996924122915777224499481496837343194149123735355268151941712871245863553836953349887831949788869852929147849489265325843934669999391846286319268686789372513976522282587526866148166337215961493536262851512218794139272361292811529888161198799297966893366553115353639298256788819385272471187213579185523521341651117947676785341146235441411441813242514813227821843819424619974979886871646621918865274574538951761567855845681272364646138584716333599843835167373525248547542442942583122624534494442516259616973235858469131159773167334953658673271599748942956981954699444528689628848694446818825465485122869742839711471129862632128635779658365756362863627135983617613332849756371986376967117549251566281992964573929655589313871976556784849231916513831538254812347116253949818633527185174221565279775766742262687713114114344843534958833372634182176866315441583887177759222598853735114191874277711434653854816841589229914164681364497429324463193669337827467661773833517841763711156376147664749175267212562321567728575765844893232718971471289841171642868948852136818661741238178676857381583155547755219837116125995361896562498721571413742 diff --git a/2017/inputs/day_10.txt b/2017/inputs/day_10.txt new file mode 100644 index 0000000..6544f8c --- /dev/null +++ b/2017/inputs/day_10.txt @@ -0,0 +1 @@ +187,254,0,81,169,219,1,190,19,102,255,56,46,32,2,216 diff --git a/2017/inputs/day_11.txt b/2017/inputs/day_11.txt new file mode 100644 index 0000000..c31c097 --- /dev/null +++ b/2017/inputs/day_11.txt @@ -0,0 +1 @@ +s,s,sw,se,s,nw,nw,ne,n,ne,n,n,n,n,n,n,n,ne,n,ne,ne,se,ne,n,ne,n,n,ne,se,sw,se,s,se,se,se,se,s,se,se,s,se,se,nw,se,se,se,s,s,nw,s,s,se,nw,s,n,s,nw,s,s,s,s,s,s,s,s,s,s,s,sw,s,s,s,s,s,sw,sw,s,sw,s,nw,sw,sw,s,sw,ne,sw,sw,s,se,sw,sw,sw,sw,sw,sw,sw,nw,sw,sw,sw,se,sw,nw,nw,sw,sw,sw,s,sw,nw,se,nw,se,nw,sw,nw,nw,se,n,sw,s,s,s,nw,sw,sw,nw,se,nw,sw,sw,sw,nw,sw,sw,nw,nw,nw,nw,ne,n,nw,nw,ne,nw,nw,nw,nw,nw,se,nw,nw,n,nw,nw,nw,sw,n,nw,nw,nw,nw,n,s,nw,ne,nw,s,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,s,sw,n,n,nw,nw,n,n,nw,nw,n,nw,n,n,nw,n,s,n,nw,ne,n,nw,n,nw,n,n,n,n,se,s,n,s,n,s,n,n,n,nw,n,s,n,n,n,n,n,ne,n,n,n,n,s,n,n,n,n,sw,n,n,n,nw,n,n,n,n,nw,se,n,ne,n,n,ne,n,ne,ne,n,n,n,n,ne,n,n,nw,n,n,n,n,ne,se,se,ne,ne,ne,n,ne,n,ne,ne,nw,ne,ne,n,n,n,ne,ne,ne,n,ne,nw,n,s,ne,ne,ne,ne,ne,n,s,ne,ne,ne,n,ne,ne,ne,sw,ne,ne,ne,s,n,ne,ne,n,ne,ne,ne,ne,ne,se,ne,ne,se,ne,ne,ne,ne,se,ne,se,ne,nw,nw,sw,s,n,ne,ne,ne,ne,ne,sw,ne,ne,ne,sw,ne,ne,ne,ne,sw,se,ne,ne,ne,ne,se,s,se,s,nw,ne,ne,n,se,ne,ne,ne,sw,ne,s,s,nw,se,nw,ne,s,ne,se,ne,n,ne,n,s,n,ne,ne,s,ne,se,se,ne,sw,nw,s,n,nw,n,se,ne,se,se,sw,ne,ne,sw,se,se,se,se,sw,ne,se,s,ne,ne,n,se,ne,sw,ne,ne,se,se,nw,se,ne,ne,nw,sw,se,s,s,se,se,se,s,se,nw,se,ne,se,se,se,se,se,se,se,sw,nw,se,se,se,se,se,se,sw,se,sw,ne,se,se,se,se,se,se,se,se,s,se,se,se,se,se,se,ne,se,se,s,sw,s,se,se,se,se,se,se,se,s,se,sw,se,se,n,s,se,s,ne,se,se,se,s,se,s,se,se,ne,se,se,sw,s,se,se,se,se,nw,se,n,ne,s,s,nw,se,se,s,se,n,se,se,s,se,se,s,se,se,ne,se,se,se,s,s,sw,s,s,se,s,se,s,se,s,se,se,se,s,se,s,nw,s,s,se,se,se,se,sw,sw,s,se,s,se,se,s,n,se,se,se,se,s,se,se,s,se,se,se,sw,s,s,s,se,se,s,s,se,s,s,se,s,s,n,s,nw,s,n,s,sw,s,nw,s,s,se,se,sw,s,s,s,sw,se,s,n,s,se,n,s,se,se,se,s,s,s,se,ne,s,se,n,se,s,se,se,s,ne,sw,se,s,s,se,s,s,s,s,s,s,s,s,se,s,nw,s,s,s,s,s,s,s,s,s,s,s,ne,ne,s,s,s,s,s,s,s,s,s,ne,ne,s,s,s,s,s,s,s,s,nw,s,s,se,sw,s,sw,s,s,nw,s,s,s,s,s,s,s,s,s,n,ne,se,s,s,s,s,n,se,s,sw,s,sw,sw,sw,s,s,sw,s,s,s,nw,sw,s,s,s,s,s,ne,sw,s,s,sw,s,s,s,s,s,s,sw,s,s,se,s,s,sw,n,sw,s,s,sw,s,s,s,s,s,sw,s,ne,s,s,s,s,sw,ne,s,ne,n,sw,s,s,s,sw,s,sw,nw,s,s,ne,sw,sw,nw,s,s,sw,sw,s,ne,s,s,sw,se,s,s,sw,s,s,sw,s,sw,sw,s,s,s,s,sw,sw,sw,s,n,ne,s,ne,s,sw,s,se,s,sw,sw,s,sw,sw,sw,sw,s,s,s,s,se,s,sw,sw,sw,sw,n,s,sw,s,s,sw,sw,s,s,n,sw,s,sw,sw,ne,sw,sw,s,sw,sw,sw,sw,sw,s,s,sw,se,sw,sw,sw,sw,s,s,sw,s,sw,sw,nw,sw,sw,se,sw,s,s,nw,nw,s,s,sw,sw,s,n,s,sw,sw,se,s,sw,sw,ne,sw,sw,sw,sw,sw,ne,sw,s,sw,sw,n,sw,sw,sw,sw,s,sw,sw,sw,sw,sw,n,nw,s,sw,s,s,n,ne,sw,sw,sw,sw,n,sw,se,sw,sw,s,se,sw,sw,sw,sw,sw,sw,s,ne,ne,ne,sw,sw,sw,ne,s,sw,sw,sw,sw,nw,s,sw,sw,s,s,sw,sw,n,nw,nw,sw,sw,sw,se,nw,nw,sw,s,sw,sw,sw,sw,sw,sw,sw,sw,sw,n,sw,sw,sw,nw,nw,se,sw,sw,sw,sw,sw,ne,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,nw,s,sw,sw,se,sw,s,sw,sw,nw,nw,nw,sw,sw,nw,sw,se,ne,sw,sw,sw,sw,ne,sw,sw,nw,sw,se,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,sw,n,nw,sw,sw,sw,s,sw,sw,nw,n,s,sw,n,nw,nw,sw,sw,nw,sw,sw,se,sw,sw,nw,sw,sw,s,sw,nw,sw,nw,sw,nw,nw,nw,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,s,sw,nw,nw,ne,n,nw,sw,sw,nw,sw,sw,nw,nw,nw,sw,sw,sw,ne,s,sw,nw,nw,sw,nw,sw,s,nw,n,nw,sw,sw,nw,nw,sw,nw,nw,n,sw,nw,sw,nw,sw,n,sw,nw,sw,sw,sw,sw,n,sw,n,nw,nw,s,sw,se,sw,sw,nw,n,sw,sw,sw,n,sw,nw,sw,ne,nw,sw,sw,s,n,nw,sw,nw,nw,nw,sw,sw,sw,nw,nw,ne,sw,s,sw,nw,n,sw,sw,sw,nw,ne,ne,sw,nw,nw,sw,s,s,sw,sw,nw,ne,sw,nw,sw,nw,nw,sw,sw,sw,sw,nw,nw,s,se,nw,sw,nw,ne,s,nw,nw,ne,sw,nw,nw,n,nw,nw,sw,sw,sw,nw,nw,nw,sw,nw,nw,n,sw,sw,nw,s,n,sw,nw,nw,sw,nw,n,nw,nw,nw,nw,nw,nw,sw,sw,n,n,sw,sw,nw,nw,nw,nw,ne,nw,nw,nw,sw,nw,nw,nw,nw,ne,nw,nw,nw,nw,n,nw,nw,nw,s,nw,nw,sw,nw,s,nw,ne,ne,nw,nw,sw,nw,nw,nw,nw,sw,nw,se,sw,nw,sw,nw,nw,ne,nw,n,nw,nw,sw,nw,nw,nw,sw,nw,ne,s,nw,nw,sw,s,nw,sw,sw,nw,nw,nw,sw,s,nw,nw,nw,nw,se,nw,s,nw,nw,nw,se,ne,ne,nw,nw,nw,nw,nw,sw,nw,ne,ne,nw,nw,nw,nw,nw,nw,nw,nw,nw,sw,nw,nw,nw,ne,nw,nw,s,nw,nw,ne,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,nw,nw,nw,ne,nw,n,nw,nw,ne,n,nw,sw,nw,n,nw,n,sw,nw,ne,s,se,n,ne,se,nw,ne,nw,ne,nw,ne,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,nw,ne,nw,s,se,nw,n,n,nw,ne,nw,nw,nw,nw,ne,nw,nw,s,nw,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,n,nw,nw,s,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,sw,n,nw,nw,nw,nw,nw,nw,nw,s,nw,se,n,n,n,nw,se,nw,nw,s,s,nw,nw,n,nw,nw,s,nw,nw,nw,se,nw,nw,nw,se,nw,nw,nw,nw,se,nw,nw,nw,nw,nw,n,nw,n,ne,nw,nw,nw,se,ne,nw,nw,nw,n,nw,nw,ne,n,n,nw,nw,sw,nw,nw,nw,nw,se,nw,n,s,nw,nw,n,n,nw,se,n,nw,nw,nw,n,nw,nw,nw,n,nw,se,n,se,sw,s,n,s,nw,nw,nw,nw,n,n,s,nw,nw,se,nw,nw,se,nw,n,n,nw,n,se,nw,n,n,nw,n,nw,n,nw,nw,n,nw,n,s,nw,nw,nw,nw,ne,ne,se,sw,nw,n,n,nw,s,n,nw,nw,n,n,nw,n,nw,nw,nw,nw,nw,n,nw,n,n,sw,n,se,nw,n,n,nw,n,nw,nw,n,s,sw,nw,ne,nw,n,sw,nw,nw,n,nw,sw,s,nw,n,n,nw,se,n,nw,n,ne,n,nw,nw,n,nw,nw,n,nw,n,nw,nw,nw,n,se,sw,nw,nw,nw,sw,nw,nw,nw,nw,se,n,n,ne,n,nw,nw,n,nw,nw,n,sw,n,se,nw,nw,n,n,n,nw,n,nw,n,nw,n,ne,n,n,nw,n,n,n,nw,se,sw,n,sw,n,nw,nw,n,n,n,se,nw,sw,ne,n,se,nw,nw,n,n,n,n,n,n,nw,n,n,nw,sw,nw,n,sw,n,n,se,sw,n,n,n,nw,sw,nw,n,n,n,n,nw,n,n,nw,n,s,n,n,sw,n,nw,ne,s,nw,ne,n,n,n,ne,s,n,n,n,n,n,n,se,nw,nw,n,n,nw,n,n,s,se,n,nw,n,n,n,n,n,n,nw,n,n,n,nw,nw,nw,n,n,n,nw,nw,sw,n,se,n,s,n,n,n,n,n,n,ne,n,se,n,n,n,se,n,nw,n,nw,n,n,n,n,n,n,n,nw,n,n,n,n,n,n,ne,n,n,nw,n,n,sw,n,nw,n,n,sw,n,n,n,nw,se,n,n,n,nw,n,s,n,n,n,n,n,n,n,s,n,n,n,n,nw,n,n,sw,sw,nw,n,nw,nw,sw,n,n,n,n,n,n,n,n,n,n,n,s,n,n,n,n,nw,n,n,n,n,n,n,n,s,n,nw,n,sw,nw,ne,n,nw,n,sw,n,n,n,n,n,ne,n,nw,n,n,n,n,n,n,n,ne,n,n,n,n,ne,n,n,n,n,ne,n,n,n,n,ne,n,n,s,n,n,se,n,n,n,n,n,n,n,nw,n,ne,nw,sw,ne,nw,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,ne,n,n,se,n,ne,n,ne,n,n,n,n,ne,n,ne,se,s,ne,nw,se,n,n,n,n,se,n,n,ne,s,n,nw,n,nw,nw,n,n,n,n,n,n,n,n,n,s,n,n,n,s,n,nw,n,n,n,n,n,n,n,n,n,n,n,n,ne,ne,n,sw,n,se,n,n,n,n,n,n,n,se,n,ne,n,ne,n,n,n,n,n,sw,n,n,s,nw,n,n,n,ne,ne,n,n,n,ne,n,n,se,n,n,n,n,ne,n,n,n,s,n,se,ne,n,n,n,n,n,n,n,n,s,ne,s,nw,n,ne,s,ne,n,n,n,n,ne,n,n,n,n,n,n,n,n,n,ne,n,se,ne,n,ne,ne,ne,ne,se,n,n,ne,n,n,n,n,nw,ne,sw,ne,n,n,ne,se,n,n,n,n,se,n,n,n,ne,n,se,ne,ne,n,s,nw,n,ne,n,n,nw,n,n,ne,n,ne,n,sw,n,se,n,ne,nw,ne,ne,n,n,n,ne,n,ne,nw,n,s,n,n,n,n,ne,n,n,ne,n,nw,n,n,n,ne,n,s,n,n,n,n,n,ne,ne,n,sw,n,ne,n,n,sw,ne,n,ne,ne,n,n,ne,ne,ne,n,ne,ne,ne,n,ne,sw,n,n,ne,ne,ne,se,n,ne,ne,ne,n,nw,n,ne,n,n,n,ne,n,n,n,n,n,ne,ne,n,ne,s,nw,ne,n,ne,ne,ne,n,n,n,n,nw,n,n,ne,ne,ne,n,ne,n,ne,ne,n,ne,ne,nw,ne,nw,n,n,ne,se,ne,se,ne,n,nw,n,n,s,n,se,ne,ne,n,ne,n,ne,s,n,n,sw,ne,ne,se,n,ne,n,n,n,n,sw,ne,ne,nw,n,n,ne,ne,ne,n,ne,n,sw,ne,ne,ne,ne,n,ne,se,ne,sw,n,n,n,ne,ne,sw,ne,ne,ne,n,ne,ne,n,ne,se,ne,s,nw,n,sw,n,ne,n,n,n,n,ne,n,sw,ne,ne,nw,n,ne,se,ne,ne,ne,ne,n,ne,ne,n,ne,n,ne,ne,ne,n,s,s,ne,ne,ne,s,ne,ne,ne,sw,n,n,ne,n,s,ne,n,n,nw,n,se,sw,ne,ne,ne,s,n,n,ne,ne,n,ne,ne,nw,ne,ne,ne,s,se,ne,ne,ne,n,ne,nw,n,ne,ne,sw,n,n,ne,ne,ne,n,ne,ne,se,ne,ne,n,ne,ne,ne,sw,s,n,n,n,se,n,s,ne,ne,ne,sw,ne,ne,se,ne,ne,ne,ne,ne,n,s,se,ne,ne,ne,n,ne,sw,se,s,ne,n,ne,ne,n,n,n,ne,n,ne,ne,se,ne,ne,n,ne,ne,ne,ne,ne,s,ne,ne,ne,nw,ne,ne,ne,ne,ne,n,ne,s,ne,ne,ne,n,ne,sw,n,n,n,ne,ne,n,ne,s,n,n,n,ne,ne,n,ne,ne,ne,sw,se,sw,ne,ne,s,ne,nw,ne,nw,se,nw,n,ne,se,n,ne,ne,ne,ne,ne,s,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,se,ne,ne,ne,sw,ne,ne,ne,ne,n,ne,s,ne,s,ne,ne,n,ne,se,ne,ne,nw,n,ne,ne,ne,s,ne,sw,ne,n,ne,ne,n,ne,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,se,n,ne,ne,ne,ne,sw,ne,n,ne,se,ne,ne,ne,se,se,ne,sw,n,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,sw,ne,ne,ne,sw,n,n,ne,ne,n,ne,ne,ne,sw,ne,n,ne,ne,ne,se,ne,ne,nw,nw,sw,ne,ne,ne,ne,sw,ne,se,ne,n,ne,ne,ne,nw,ne,ne,ne,ne,ne,ne,sw,ne,ne,nw,ne,ne,ne,ne,ne,ne,ne,ne,sw,ne,ne,s,sw,ne,ne,s,sw,sw,ne,ne,ne,nw,ne,n,se,ne,ne,ne,ne,n,ne,nw,ne,ne,n,se,ne,ne,ne,ne,sw,ne,ne,s,ne,s,ne,ne,ne,ne,ne,ne,ne,nw,ne,ne,ne,se,ne,ne,ne,ne,se,ne,ne,sw,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,sw,n,ne,ne,nw,se,ne,ne,ne,ne,se,ne,sw,ne,ne,n,se,ne,ne,se,ne,sw,nw,ne,ne,ne,ne,ne,ne,s,ne,se,sw,ne,s,ne,se,se,se,ne,ne,s,ne,ne,s,ne,se,ne,nw,s,ne,se,ne,ne,ne,sw,ne,se,ne,ne,ne,sw,ne,ne,ne,ne,nw,ne,ne,nw,ne,ne,s,ne,ne,se,ne,ne,nw,ne,ne,se,se,se,ne,se,ne,se,se,ne,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,ne,n,ne,ne,ne,ne,ne,ne,ne,s,se,ne,sw,ne,ne,se,ne,ne,ne,ne,s,ne,se,ne,ne,se,n,n,ne,se,s,ne,s,ne,se,nw,ne,se,ne,ne,se,ne,se,se,ne,ne,se,ne,ne,ne,n,se,ne,ne,ne,ne,s,se,se,n,ne,se,se,ne,ne,se,ne,se,se,ne,ne,sw,ne,ne,ne,ne,ne,ne,nw,se,ne,se,ne,se,ne,s,ne,ne,sw,ne,ne,ne,ne,ne,s,se,ne,ne,s,se,ne,ne,ne,nw,ne,ne,ne,se,ne,ne,ne,ne,se,ne,ne,ne,se,ne,ne,se,n,s,ne,ne,ne,se,s,n,se,se,ne,sw,ne,ne,n,ne,se,n,se,n,s,n,s,ne,se,ne,ne,ne,ne,n,ne,se,sw,se,ne,se,nw,ne,ne,ne,se,se,ne,ne,ne,ne,ne,ne,ne,ne,nw,ne,n,s,ne,ne,ne,ne,ne,se,se,se,se,sw,s,n,ne,s,ne,ne,sw,se,se,ne,ne,ne,ne,ne,ne,se,se,s,ne,se,ne,nw,n,ne,se,se,ne,se,ne,ne,se,se,se,ne,ne,sw,se,nw,se,nw,se,se,se,se,ne,n,n,ne,se,se,ne,ne,se,ne,ne,se,ne,sw,ne,se,ne,n,se,nw,sw,ne,ne,se,ne,se,ne,ne,se,ne,se,ne,ne,ne,se,ne,se,se,n,nw,ne,ne,ne,ne,sw,n,ne,ne,ne,nw,ne,se,se,ne,ne,s,nw,n,ne,ne,ne,ne,ne,ne,ne,se,ne,sw,se,ne,s,n,ne,ne,se,ne,se,se,ne,se,ne,se,se,ne,se,se,se,ne,ne,ne,ne,se,ne,ne,nw,ne,ne,se,ne,s,se,ne,se,ne,ne,ne,ne,n,se,ne,se,se,ne,ne,ne,nw,ne,se,se,nw,ne,se,se,ne,sw,ne,ne,ne,n,ne,ne,ne,n,se,ne,se,ne,n,n,se,ne,se,se,se,ne,se,se,sw,se,ne,se,ne,sw,sw,ne,ne,ne,s,n,ne,ne,nw,ne,n,se,se,se,se,ne,nw,ne,ne,ne,se,ne,se,n,n,se,n,se,se,se,se,se,ne,sw,ne,se,ne,se,se,se,ne,sw,se,s,se,se,ne,se,se,se,n,ne,se,se,ne,ne,ne,ne,se,se,ne,se,se,ne,se,ne,ne,se,se,nw,se,se,ne,se,sw,se,ne,n,ne,se,se,se,nw,se,se,se,ne,se,ne,se,se,ne,se,se,ne,ne,se,se,sw,ne,se,se,sw,se,se,s,ne,ne,se,ne,s,ne,se,se,ne,se,nw,n,se,se,s,se,ne,se,ne,ne,sw,ne,ne,n,se,s,n,ne,se,se,ne,nw,ne,ne,se,se,ne,sw,ne,ne,ne,se,sw,ne,se,se,ne,n,ne,se,nw,se,se,se,ne,se,ne,ne,ne,s,ne,nw,ne,ne,ne,se,se,se,nw,se,ne,se,se,se,ne,se,ne,se,se,se,ne,se,se,se,n,se,ne,ne,se,se,se,se,sw,ne,se,se,se,ne,se,nw,n,ne,ne,ne,sw,n,se,n,se,se,n,ne,se,se,ne,se,ne,se,nw,se,se,se,s,sw,ne,se,sw,se,se,se,ne,ne,se,ne,se,se,se,se,ne,se,se,ne,se,se,ne,se,ne,se,se,se,ne,se,ne,ne,se,s,ne,ne,nw,se,ne,n,ne,se,se,ne,se,n,ne,ne,se,ne,se,se,se,ne,se,se,ne,ne,nw,ne,s,se,se,se,se,se,sw,nw,n,se,se,s,se,se,se,nw,se,n,nw,se,ne,ne,se,nw,se,se,se,se,se,se,ne,se,se,se,se,ne,se,se,ne,se,se,se,se,ne,se,se,se,se,ne,ne,nw,se,se,se,se,se,se,s,se,se,se,n,se,ne,ne,ne,se,se,se,se,ne,se,se,ne,se,se,se,se,se,se,se,sw,se,ne,ne,s,se,se,ne,se,se,se,ne,ne,se,se,se,se,se,se,se,s,sw,se,ne,se,se,se,se,se,se,se,n,se,sw,se,se,se,ne,se,se,se,se,se,s,ne,nw,se,se,se,se,se,sw,se,ne,sw,se,ne,se,se,ne,se,ne,n,ne,se,se,ne,se,ne,nw,nw,se,se,se,se,se,se,se,se,se,se,sw,se,se,se,se,se,nw,se,n,se,se,ne,se,se,nw,se,se,se,se,se,ne,nw,nw,se,se,se,se,ne,se,se,se,ne,ne,se,se,se,se,se,se,se,se,se,se,se,sw,s,se,se,ne,nw,se,se,se,se,se,se,sw,sw,se,ne,sw,nw,se,se,se,se,se,n,se,se,ne,se,se,se,nw,se,ne,se,se,se,s,se,se,n,se,se,ne,se,s,se,ne,se,se,se,nw,se,se,n,se,s,n,se,se,se,nw,se,s,sw,se,ne,se,se,se,nw,se,sw,se,se,sw,s,se,n,ne,sw,se,n,nw,se,ne,se,se,se,se,se,ne,se,se,se,se,se,se,se,se,n,se,se,se,ne,se,se,se,sw,se,nw,se,se,ne,se,se,se,se,n,ne,se,se,se,n,se,se,se,se,se,se,se,s,s,se,se,se,s,ne,se,se,se,se,se,se,se,se,se,se,se,se,se,n,n,se,se,se,se,se,se,se,se,se,s,sw,se,se,se,n,nw,se,se,se,se,ne,ne,se,n,se,se,sw,ne,sw,se,se,ne,se,se,se,se,se,se,se,se,se,n,se,nw,se,se,se,sw,s,se,se,se,se,se,se,se,se,ne,s,se,se,se,nw,s,se,n,se,se,se,s,sw,se,se,se,se,nw,ne,se,se,se,ne,s,se,sw,se,se,se,se,se,se,s,se,s,se,sw,se,ne,s,se,se,nw,se,se,nw,n,se,se,se,nw,nw,se,se,se,se,se,nw,s,se,se,ne,se,se,se,se,se,se,se,sw,se,se,se,se,se,se,nw,se,se,s,se,se,se,se,s,s,se,se,se,s,se,se,se,s,s,n,se,se,se,se,n,n,se,sw,nw,se,s,se,nw,se,s,nw,nw,se,s,se,se,se,se,se,se,sw,nw,se,se,s,se,se,se,se,se,se,n,n,ne,se,s,s,se,se,se,se,se,se,s,se,se,s,se,se,n,se,se,s,se,s,se,s,se,sw,se,se,sw,se,ne,se,sw,se,se,se,s,nw,se,ne,n,se,se,nw,se,ne,se,se,se,s,se,se,nw,se,s,se,se,se,nw,se,se,sw,s,se,s,se,se,nw,s,se,se,s,se,se,s,se,se,se,se,se,sw,s,se,se,s,sw,nw,ne,nw,se,nw,se,s,se,se,se,se,se,s,se,se,se,se,sw,s,sw,se,se,se,s,sw,sw,s,n,se,s,se,nw,se,se,se,ne,se,se,se,se,s,se,se,s,nw,s,se,s,nw,se,se,se,se,se,n,s,se,ne,n,se,se,nw,se,s,se,n,se,nw,s,s,s,se,nw,s,s,se,s,se,se,nw,s,se,s,se,se,se,se,n,se,se,s,se,se,se,se,s,s,se,s,se,se,s,se,s,n,se,n,se,se,s,se,s,se,se,s,s,se,se,s,se,se,se,se,s,s,s,se,s,nw,s,se,se,se,ne,nw,se,se,se,se,se,se,n,se,se,se,se,se,se,nw,se,se,se,s,s,nw,se,ne,se,s,se,ne,se,se,nw,se,se,se,sw,n,se,sw,se,se,nw,ne,s,se,sw,se,s,s,s,se,s,se,n,sw,sw,se,se,se,ne,se,s,se,sw,n,se,se,se,s,s,se,s,se,n,s,ne,se,se,s,se,se,s,sw,s,se,se,ne,s,n,se,se,se,s,s,s,se,se,s,s,ne,se,s,se,nw,se,s,se,se,s,s,s,se,n,se,se,ne,se,se,s,sw,se,s,ne,se,se,se,s,s,se,se,se,se,se,se,se,s,ne,se,s,se,s,s,nw,nw,s,s,nw,s,se,se,ne,se,se,se,n,s,s,s,s,se,se,s,s,s,nw,sw,se,s,s,n,se,s,s,s,s,n,s,se,s,s,se,sw,nw,nw,se,se,se,s,sw,se,se,se,s,se,se,s,s,s,se,ne,s,se,s,s,se,s,ne,se,se,se,se,se,se,ne,se,ne,s,se,se,se,se,se,s,s,s,n,se,nw,nw,s,se,sw,se,se,s,se,se,nw,s,s,s,ne,nw,se,se,se,n,ne,se,s,se,ne,se,ne,sw,ne,se,s,sw,se,se,se,s,s,ne,s,se,se,sw,s,s,s,s,se,se,s,s,se,s,se,s,s,nw,s,s,s,s,nw,nw,se,s,s,sw,s,se,nw,s,se,s,se,s,se,n,sw,n,ne,s,s,s,se,se,nw,s,n,se,s,s,s,se,s,s,s,sw,se,se,se,se,se,se,sw,s,nw,se,n,s,se,sw,nw,se,se,se,se,s,ne,se,ne,s,s,se,se,se,s,s,s,s,n,se,sw,n,s,nw,s,se,s,se,se,se,s,se,n,s,se,nw,se,s,s,se,se,se,s,s,n,s,se,s,s,s,se,se,se,s,s,s,s,se,se,s,se,s,s,s,s,s,s,s,s,nw,nw,se,n,sw,s,s,ne,s,nw,s,se,s,s,sw,s,se,nw,se,s,s,s,s,s,s,s,se,se,s,se,ne,s,se,se,se,s,s,s,se,ne,s,ne,s,s,se,s,s,ne,s,s,se,s,s,s,s,s,se,n,sw,n,s,se,se,s,s,nw,s,sw,se,n,s,se,s,s,sw,s,s,s,s,s,nw,s,nw,se,se,s,s,nw,se,s,s,sw,sw,s,se,se,s,s,s,se,s,se,s,s,s,se,s,ne,s,s,se,s,s,se,se,s,s,s,n,s,s,s,s,se,s,s,se,s,s,se,s,s,s,nw,se,s,s,se,se,se,nw,s,se,ne,s,se,s,n,nw,se,sw,se,se,s,se,s,se,s,sw,s,se,se,se,nw,s,s,s,s,sw,s,s,s,n,s,sw,s,s,se,se,se,s,se,s,s,s,se,s,se,se,nw,s,s,se,ne,s,se,s,se,se,se,s,s,s,s,se,s,s,s,s,se,s,s,s,s,se,se,se,sw,s,se,s,s,nw,s,s,se,s,se,s,se,s,sw,s,ne,s,s,ne,s,sw,s,s,ne,n,s,se,se,s,s,s,s,se,se,s,s,se,se,s,nw,s,s,n,s,ne,se,n,s,s,s,s,s,sw,s,n,n,s,s,sw,s,sw,n,se,s,s,s,s,nw,se,s,s,s,s,s,s,se,s,s,sw,s,s,s,se,se,ne,s,s,s,ne,se,se,s,s,se,n,n,se,n,sw,s,sw,se,nw,n,s,n,s,nw,sw,s,se,se,s,s,s,s,s,s,se,s,s,se,s,s,s,s,s,sw,se,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,nw,se,s,se,s,s,s,s,s,s,s,s,se,nw,se,s,s,s,se,nw,s,s,ne,s,s,se,se,sw,s,ne,n,s,s,se,n,ne,se,s,s,s,s,nw,s,ne,s,s,n,s,s,s,s,s,se,s,s,s,s,se,s,s,s,s,n,s,se,s,n,s,s,sw,s,s,s,s,s,se,s,ne,s,sw,n,s,n,se,nw,nw,s,sw,ne,n,sw,n,sw,s,n,s,se,s,se,s,s,s,s,nw,se,s,s,s,se,sw,s,se,s,s,s,s,s,s,s,s,s,s,se,ne,nw,s,s,s,s,s,se,s,ne,sw,se,se,sw,sw,s,se,ne,s,nw,ne,n,s,s,s,s,s,ne,s,s,s,s,se,s,se,s,s,s,sw,s,s,se,s,s,s,s,n,se,s,ne,s,s,s,s,se,sw,se,s,s,s,s,s,se,s,n,n,s,s,sw,s,s,s,s,ne,s,sw,s,s,s,s,s,sw,s,s,n,s,n,s,s,s,n,se,s,s,s,s,s,s,s,s,s,s,s,s,ne,sw,s,s,ne,nw,se,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,s,sw,s,s,s,nw,s,s,se,se,s,n,s,se,s,s,s,se,s,nw,s,s,s,s,se,s,s,s,ne,s,s,s,se,s,s,s,s,s,s,s,n,s,s,s,s,s,ne,s,s,s,s,sw,s,s,s,s,s,s,s,s,s,s,ne,se,sw,s,sw,s,s,s,se,s,s,s,s,se,s,s,ne,s,s,s,s,se,ne,se,n,n,n,n,n,n,nw,nw,sw,sw,nw,ne,sw,ne,sw,nw,sw,ne,s,sw,sw,sw,sw,s,sw,sw,sw,sw,nw,s,s,s,nw,s,s,s,se,s,se,s,se,n,se,s,se,s,nw,sw,se,se,s,se,se,se,se,se,se,se,se,nw,se,se,se,se,se,ne,se,ne,s,se,se,se,se,se,ne,ne,ne,ne,ne,ne,se,ne,ne,ne,ne,ne,ne,s,ne,nw,ne,sw,ne,ne,ne,ne,ne,ne,ne,se,n,ne,ne,se,ne,ne,n,se,ne,ne,sw,ne,ne,n,ne,n,ne,n,n,n,sw,n,ne,n,ne,ne,se,ne,n,n,ne,n,n,s,n,n,ne,n,s,n,n,n,s,n,ne,n,n,n,n,n,se,nw,nw,n,n,nw,n,se,n,sw,s,n,nw,nw,se,nw,nw,nw,nw,n,n,se,n,n,n,nw,nw,n,nw,ne,n,nw,n,nw,sw,nw,n,n,n,ne,se,nw,n,nw,n,n,nw,n,nw,n,nw,n,nw,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,se,sw,sw,nw,se,nw,s,nw,nw,nw,nw,nw,nw,nw,s,n,nw,nw,nw,sw,nw,se,nw,nw,nw,nw,sw,sw,nw,s,sw,nw,s,nw,nw,sw,nw,sw,sw,nw,sw,se,nw,nw,nw,nw,nw,sw,sw,nw,se,sw,sw,nw,sw,nw,se,sw,nw,nw,nw,n,nw,sw,nw,ne,nw,nw,s,nw,nw,nw,sw,nw,sw,nw,sw,sw,sw,sw,n,sw,nw,s,sw,nw,ne,sw,n,s,sw,sw,sw,sw,ne,sw,sw,sw,nw,sw,s,sw,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,se,n,sw,s,sw,sw,n,sw,sw,s,s,sw,sw,sw,sw,sw,sw,sw,s,s,sw,sw,sw,ne,sw,sw,s,sw,s,nw,sw,sw,se,se,sw,sw,sw,s,s,s,sw,nw,sw,nw,s,sw,sw,sw,sw,sw,sw,s,sw,s,sw,sw,sw,s,sw,s,sw,s,sw,s,sw,s,sw,s,sw,sw,s,s,s,sw,n,sw,s,n,s,s,s,sw,s,n,s,sw,sw,sw,sw,s,s,s,s,s,s,s,s,sw,sw,s,sw,se,s,s,s,sw,s,s,sw,s,ne,s,s,s,s,s,s,s,s,s,n,se,s,s,nw,s,s,s,se,s,s,s,s,s,s,s,s,s,s,nw,se,s,s,s,sw,s,s,s,s,s,s,s,ne,n,s,se,s,s,s,s,s,s,se,se,nw,nw,s,s,s,s,s,se,sw,s,s,se,s,s,s,s,s,s,s,s,s,n,s,s,s,se,s,s,s,s,s,s,se,s,s,n,s,s,se,s,s,s,se,s,s,nw,s,s,s,n,s,s,se,s,se,s,n,ne,s,s,s,s,se,ne,n,s,se,s,se,s,s,se,s,s,s,s,s,se,s,sw,s,se,se,s,se,s,s,ne,s,ne,ne,se,s,ne,se,s,ne,s,se,ne,se,se,se,sw,s,se,se,se,se,se,n,s,s,se,s,se,s,s,se,se,s,s,se,se,nw,se,ne,s,s,se,se,se,se,se,s,se,ne,se,se,s,ne,se,sw,se,se,se,se,se,nw,se,se,se,se,se,se,se,s,ne,n,sw,ne,se,se,se,se,se,ne,se,se,se,se,se,se,se,se,se,n,se,s,s,se,se,sw,nw,s,se,se,ne,se,se,ne,s,se,se,se,se,se,se,se,se,n,se,se,se,se,se,se,ne,se,ne,nw,se,se,ne,nw,nw,se,se,se,se,sw,se,se,sw,n,se,se,sw,se,se,se,se,nw,se,se,se,se,se,nw,sw,ne,ne,ne,se,ne,ne,nw,se,se,nw,se,se,se,se,se,ne,se,s,se,se,s,ne,se,ne,se,se,se,ne,s,se,ne,ne,ne,ne,se,n,se,se,se,se,ne,se,n,ne,se,se,se,ne,sw,nw,nw,ne,se,ne,se,se,se,n,se,ne,se,se,se,se,ne,se,ne,n,se,se,ne,nw,ne,ne,se,se,n,se,se,s,se,sw,ne,ne,ne,se,se,se,ne,ne,se,n,ne,ne,se,ne,ne,ne,se,ne,sw,n,ne,s,se,se,se,sw,ne,se,se,se,sw,ne,se,ne,ne,ne,sw,ne,ne,s,ne,s,ne,se,ne,ne,se,se,se,nw,ne,ne,ne,se,ne,se,se,ne,ne,ne,se,sw,ne,ne,ne,ne,se,ne,sw,ne,sw,ne,n,nw,sw,ne,ne,ne,sw,ne,se,sw,n,ne,ne,se,n,se,ne,n,ne,se,ne,nw,ne,ne,s,n,se,ne,nw,ne,se,ne,ne,ne,se,ne,se,se,ne,ne,ne,se,se,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,se,se,nw,ne,ne,ne,ne,ne,ne,ne,se,se,ne,ne,ne,se,ne,ne,ne,ne,ne,ne,ne,ne,nw,n,n,ne,nw,ne,ne,sw,se,ne,s,ne,nw,ne,nw,ne,ne,ne,ne,ne,ne,ne,n,n,ne,n,ne,ne,s,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,ne,se,n,n,ne,s,ne,ne,ne,nw,se,ne,nw,nw,ne,n,n,ne,ne,nw,ne,n,ne,sw,n,ne,ne,ne,ne,ne,ne,ne,ne,ne,n,n,ne,ne,ne,ne,ne,n,n,ne,ne,se,sw,ne,n,ne,n,ne,ne,sw,ne,ne,n,ne,ne,se,sw,ne,ne,ne,s,n,n,s,ne,n,se,ne,ne,sw,s,ne,nw,n,n,ne,nw,ne,n,n,s,s,n,ne,ne,n,n,nw,ne,n,ne,ne,ne,ne,n,s,n,se,sw,se,ne,ne,ne,n,ne,ne,ne,n,nw,ne,n,n,ne,nw,ne,ne,sw,n,n,se,ne,n,ne,nw,se,ne,ne,ne,n,ne,ne,n,ne,ne,ne,ne,n,ne,ne,s,n,s,nw,n,n,nw,ne,ne,ne,s,n,s,ne,ne,ne,n,se,ne,ne,nw,n,n,n,ne,s,sw,n,ne,n,n,sw,n,ne,n,ne,n,sw,ne,ne,ne,sw,n,ne,ne,sw,ne,ne,n,n,se,ne,ne,s,ne,ne,n,nw,s,n,n,ne,nw,sw,ne,n,ne,ne,n,ne,n,se,n,ne,sw,sw,n,n,n,ne,ne,n,ne,n,s,ne,se,ne,nw,n,n,n,n,se,nw,ne,n,n,n,n,nw,nw,ne,n,se,ne,n,n,n,ne,n,ne,ne,ne,sw,n,s,n,n,n,ne,se,n,n,ne,ne,ne,sw,ne,ne,n,n,n,n,n,n,ne,ne,n,s,n,n,n,n,ne,ne,ne,n,n,se,nw,n,n,n,n,s,n,ne,n,n,n,n,n,n,n,n,sw,n,n,ne,n,n,n,s,ne,nw,n,nw,sw,n,n,n,n,s,n,n,ne,n,n,n,n,n,n,n,s,s,n,n,n,ne,n,s,ne,n,se,n,n,n,sw,n,n,n,ne,n,n,n,n,sw,se,n,sw,n,n,n,sw,ne,s,n,n,sw,s,se,n,n,n,n,ne,n,n,n,n,se,n,n,n,n,n,n,se,n,sw,n,n,n,nw,s,sw,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,sw,n,n,se,n,nw,se,n,sw,n,n,n,n,n,n,nw,n,n,n,n,n,n,n,n,n,sw,n,nw,ne,n,n,n,n,n,n,n,nw,n,n,sw,n,n,n,n,n,n,n,n,ne,n,s,n,n,n,n,ne,n,s,ne,n,n,n,nw,n,n,n,n,n,se,nw,n,nw,sw,n,n,ne,n,n,n,n,nw,n,n,n,nw,n,n,nw,n,n,n,sw,ne,n,n,s,n,n,n,nw,n,ne,n,nw,n,n,nw,nw,n,nw,nw,n,n,n,nw,sw,n,n,nw,sw,sw,n,nw,n,s,nw,n,s,nw,nw,nw,nw,n,se,n,n,nw,sw,nw,n,nw,n,ne,n,n,nw,nw,n,n,nw,nw,ne,nw,se,nw,nw,sw,n,n,n,sw,sw,n,n,n,n,nw,n,nw,nw,n,nw,n,nw,s,n,n,nw,nw,n,n,nw,n,sw,nw,nw,n,n,nw,nw,s,n,n,n,n,s,nw,n,n,n,n,n,nw,n,n,nw,n,nw,n,n,n,nw,n,n,nw,ne,nw,nw,n,nw,nw,n,n,nw,n,nw,ne,n,nw,n,n,nw,nw,nw,ne,nw,nw,n,n,n,se,ne,n,nw,n,n,n,n,nw,nw,n,nw,n,n,s,n,n,n,n,nw,n,nw,nw,se,n,nw,n,n,nw,nw,nw,nw,n,n,n,s,nw,nw,nw,ne,s,nw,nw,nw,n,nw,nw,sw,nw,n,nw,nw,n,nw,nw,n,nw,sw,n,n,n,n,nw,nw,nw,n,n,n,n,nw,n,n,ne,n,nw,nw,nw,ne,ne,n,n,nw,nw,ne,n,nw,nw,nw,nw,n,n,n,nw,nw,n,n,n,ne,nw,nw,nw,se,n,n,nw,n,nw,n,nw,nw,n,s,nw,n,nw,nw,nw,nw,nw,ne,nw,nw,n,nw,n,n,n,nw,n,n,ne,nw,n,n,nw,sw,nw,nw,nw,nw,nw,nw,nw,nw,s,nw,se,n,nw,nw,nw,nw,nw,nw,s,nw,n,nw,n,nw,nw,nw,nw,nw,se,s,nw,se,nw,n,ne,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,n,ne,nw,se,n,nw,nw,nw,nw,sw,n,nw,nw,n,nw,n,nw,nw,ne,n,nw,n,ne,se,n,sw,nw,ne,nw,sw,nw,ne,n,nw,ne,se,nw,nw,nw,nw,nw,ne,nw,n,nw,s,nw,nw,nw,ne,nw,nw,nw,nw,s,nw,n,sw,s,nw,se,nw,ne,nw,n,nw,sw,nw,n,nw,nw,sw,nw,nw,nw,nw,n,nw,nw,nw,nw,nw,nw,nw,nw,se,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,n,s,s,nw,nw,nw,se,nw,nw,nw,nw,sw,nw,nw,n,nw,n,sw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,nw,n,nw,s,nw,nw,nw,nw,nw,nw,nw,nw,n,nw,sw,nw,nw,nw,nw,nw,s,nw,sw,nw,nw,nw,se,nw,nw,sw,nw,nw,nw,nw,nw,nw,n,nw,nw,nw,n,nw,sw,n,nw,nw,se,nw,sw,se,sw,nw,sw,n,nw,nw,nw,ne,nw,nw,nw,se,nw,ne,ne,nw,nw,nw,nw,nw,s,nw,ne,n,nw,ne,nw,sw,nw,nw,sw,nw,se,nw,nw,ne,nw,ne,nw,sw,sw,nw,nw,nw,nw,nw,sw,nw,nw,nw,se,sw,sw,nw,s,sw,nw,nw,nw,nw,ne,nw,ne,nw,nw,sw,nw,nw,nw,sw,nw,nw,nw,ne,sw,s,nw,ne,nw,nw,se,se,n,nw,nw,sw,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,n,nw,sw,nw,s,nw,sw,nw,nw,nw,sw,nw,nw,se,nw,n,nw,nw,ne,sw,nw,ne,nw,se,s,nw,nw,n,n,nw,nw,nw,nw,ne,se,sw,nw,nw,nw,nw,se,nw,nw,nw,sw,nw,nw,s,nw,nw,nw,nw,nw,sw,nw,nw,nw,nw,sw,nw,sw,nw,nw,nw,ne,nw,sw,nw,sw,nw,sw,nw,nw,nw,sw,ne,sw,nw,sw,nw,se,nw,se,nw,nw,n,sw,nw,nw,nw,nw,sw,sw,nw,sw,nw,nw,nw,nw,nw,sw,sw,nw,nw,nw,sw,nw,nw,nw,nw,ne,nw,n,nw,sw,sw,nw,nw,nw,nw,nw,sw,nw,sw,nw,sw,sw,nw,nw,sw,sw,nw,nw,nw,ne,sw,ne,sw,sw,nw,nw,nw,nw,nw,nw,nw,sw,se,nw,nw,sw,sw,nw,nw,s,nw,nw,sw,nw,nw,nw,n,sw,nw,sw,sw,n,nw,nw,nw,sw,sw,nw,s,nw,nw,nw,sw,nw,n,nw,nw,nw,nw,n,nw,nw,nw,sw,nw,nw,nw,se,nw,sw,nw,sw,sw,sw,nw,ne,s,sw,ne,nw,nw,s,nw,sw,nw,s,nw,sw,sw,sw,s,nw,se,nw,nw,nw,sw,sw,sw,n,nw,sw,nw,nw,nw,nw,nw,nw,sw,n,nw,nw,nw,s,nw,nw,nw,nw,sw,sw,sw,nw,nw,sw,sw,nw,nw,sw,nw,sw,nw,sw,sw,sw,sw,sw,nw,sw,s,nw,nw,sw,sw,sw,sw,nw,sw,sw,nw,sw,ne,nw,sw,nw,nw,sw,nw,se,nw,n,sw,nw,s,nw,ne,nw,se,sw,sw,sw,n,ne,sw,nw,sw,nw,sw,se,s,sw,sw,nw,sw,sw,nw,nw,sw,nw,sw,nw,sw,nw,sw,sw,sw,ne,sw,nw,sw,nw,nw,sw,nw,n,nw,sw,n,nw,nw,sw,sw,se,nw,nw,sw,nw,sw,sw,sw,sw,nw,se,sw,sw,nw,nw,sw,sw,sw,nw,sw,nw,nw,nw,sw,n,nw,sw,n,nw,s,nw,nw,sw,s,sw,sw,nw,sw,sw,sw,nw,ne,sw,ne,sw,s,sw,sw,nw,sw,nw,sw,sw,nw,nw,nw,sw,sw,ne,sw,n,sw,sw,sw,n,sw,sw,nw,sw,n,n,sw,sw,sw,nw,s,sw,sw,sw,sw,nw,nw,sw,nw,sw,sw,s,sw,nw,sw,sw,sw,s,sw,sw,n,nw,sw,n,sw,sw,s,nw,se,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,sw,sw,sw,sw,nw,nw,sw,sw,sw,s,ne,se,nw,sw,sw,sw,nw,s,nw,nw,sw,sw,s,sw,sw,se,sw,sw,sw,sw,sw,sw,sw,sw,sw,nw,sw,nw,nw,nw,nw,nw,nw,s,nw,sw,sw,sw,sw,sw,n,sw,se,sw,sw,s,sw,sw,sw,sw,sw,s,s,sw,s,ne,sw,sw,s,sw,sw,nw,sw,sw,sw,sw,ne,se,sw,sw,sw,sw,n,sw,sw,sw,sw,s,nw,se,nw,nw,sw,sw,nw,se,nw,se,sw,sw,sw,nw,s,sw,sw,sw,sw,sw,sw,sw,sw,sw,ne,se,nw,nw,sw,sw,sw,n,s,sw,nw,nw,se,sw,ne,sw,n,s,sw,sw,nw,sw,sw,sw,sw,sw,ne,sw,sw,se,sw,sw,sw,sw,nw,sw,sw,ne,sw,nw,sw,s,sw,sw,sw,sw,sw,sw,sw,sw,se,sw,se,sw,sw,sw,sw,sw,nw,sw,sw,sw,sw,sw,se,sw,sw,se,sw,sw,ne diff --git a/2017/inputs/day_12.txt b/2017/inputs/day_12.txt new file mode 100644 index 0000000..80e4ce6 --- /dev/null +++ b/2017/inputs/day_12.txt @@ -0,0 +1,2000 @@ +0 <-> 199, 1774 +1 <-> 350, 1328, 1920 +2 <-> 477, 984, 1419 +3 <-> 1465, 1568 +4 <-> 359, 1047, 1215, 1580, 1969 +5 <-> 613 +6 <-> 49, 617, 1213 +7 <-> 1263 +8 <-> 410 +9 <-> 1224 +10 <-> 1157 +11 <-> 304, 1168, 1875 +12 <-> 868, 891, 1369, 1712 +13 <-> 958, 1371 +14 <-> 1814 +15 <-> 261, 556 +16 <-> 830, 1646, 1901, 1933 +17 <-> 962, 1778 +18 <-> 109, 1229 +19 <-> 239, 1070, 1886, 1930 +20 <-> 327, 1307, 1801, 1905 +21 <-> 943, 1950 +22 <-> 1310 +23 <-> 659, 917 +24 <-> 373 +25 <-> 369 +26 <-> 947, 1023 +27 <-> 338, 1901 +28 <-> 1691 +29 <-> 132, 1219, 1699, 1962 +30 <-> 424, 822, 1419 +31 <-> 1444, 1464 +32 <-> 702, 1517 +33 <-> 1639 +34 <-> 909 +35 <-> 690, 1655 +36 <-> 988, 1149, 1166 +37 <-> 649, 1300, 1441, 1699 +38 <-> 1848 +39 <-> 382 +40 <-> 827, 1203, 1510 +41 <-> 714, 1056, 1184 +42 <-> 1018, 1873 +43 <-> 214 +44 <-> 670, 957 +45 <-> 45 +46 <-> 1195 +47 <-> 559, 1504 +48 <-> 1958 +49 <-> 6 +50 <-> 50, 1248 +51 <-> 1151 +52 <-> 52, 521, 1791 +53 <-> 304 +54 <-> 601 +55 <-> 1328 +56 <-> 939 +57 <-> 1583, 1995 +58 <-> 1422, 1694 +59 <-> 395, 1233 +60 <-> 862, 1811 +61 <-> 345, 1694 +62 <-> 62, 276 +63 <-> 280 +64 <-> 199 +65 <-> 117, 930 +66 <-> 364, 697 +67 <-> 1043 +68 <-> 287, 504, 1554 +69 <-> 498, 706 +70 <-> 77, 333, 713, 972, 1299 +71 <-> 1643 +72 <-> 694 +73 <-> 1381 +74 <-> 955, 1790 +75 <-> 1691, 1743 +76 <-> 76, 638, 1429 +77 <-> 70 +78 <-> 1513 +79 <-> 1397, 1716 +80 <-> 897 +81 <-> 968, 1841 +82 <-> 649 +83 <-> 522 +84 <-> 84, 125, 399, 498 +85 <-> 880, 1554, 1888 +86 <-> 86 +87 <-> 579, 1947 +88 <-> 470, 1451, 1750 +89 <-> 805, 1434 +90 <-> 453 +91 <-> 1208 +92 <-> 688, 1358, 1746 +93 <-> 357, 647 +94 <-> 234, 1270, 1520 +95 <-> 620, 1454 +96 <-> 390, 869, 919 +97 <-> 693, 1783 +98 <-> 259, 529, 782, 1018 +99 <-> 678 +100 <-> 1215 +101 <-> 459, 887 +102 <-> 888, 1135 +103 <-> 1006 +104 <-> 1375, 1422 +105 <-> 1657, 1730 +106 <-> 216, 1434 +107 <-> 333 +108 <-> 468, 1654 +109 <-> 18, 1791 +110 <-> 372 +111 <-> 111, 861, 1383 +112 <-> 1359, 1937 +113 <-> 414, 736, 1446 +114 <-> 426, 1457 +115 <-> 1605, 1672 +116 <-> 116, 713, 1584, 1602 +117 <-> 65 +118 <-> 1611, 1897 +119 <-> 541, 1569 +120 <-> 412, 787 +121 <-> 1344 +122 <-> 698, 752, 1693 +123 <-> 1173, 1576, 1634, 1802 +124 <-> 735 +125 <-> 84, 1032 +126 <-> 126, 225, 332 +127 <-> 1350 +128 <-> 128, 319, 327, 1582 +129 <-> 129, 654, 1260 +130 <-> 1080, 1296, 1350 +131 <-> 131 +132 <-> 29, 856, 1064 +133 <-> 659, 1367, 1776 +134 <-> 648, 1147, 1450, 1910 +135 <-> 411 +136 <-> 353, 935, 1590 +137 <-> 228 +138 <-> 194, 452, 1746, 1794 +139 <-> 139, 494, 1635 +140 <-> 681 +141 <-> 1507 +142 <-> 1288 +143 <-> 845 +144 <-> 1516 +145 <-> 502, 1146, 1155, 1809 +146 <-> 146, 750 +147 <-> 1600 +148 <-> 1206 +149 <-> 829, 1457 +150 <-> 675, 915 +151 <-> 651, 1678 +152 <-> 888, 1503 +153 <-> 498, 960, 1515 +154 <-> 1468 +155 <-> 751 +156 <-> 528, 803, 1655 +157 <-> 1486, 1937 +158 <-> 590, 1876 +159 <-> 159, 185, 1287, 1550, 1588 +160 <-> 160, 548 +161 <-> 1303, 1364 +162 <-> 1855 +163 <-> 1181 +164 <-> 442 +165 <-> 490 +166 <-> 1105 +167 <-> 1121 +168 <-> 760, 1129 +169 <-> 747 +170 <-> 1890 +171 <-> 1644 +172 <-> 593, 665 +173 <-> 1092, 1869 +174 <-> 705 +175 <-> 1345, 1999 +176 <-> 234, 606 +177 <-> 557, 688 +178 <-> 373 +179 <-> 1376 +180 <-> 638 +181 <-> 1996 +182 <-> 1094, 1206, 1748 +183 <-> 931 +184 <-> 880 +185 <-> 159, 1058, 1704 +186 <-> 765, 1178, 1877 +187 <-> 732 +188 <-> 188 +189 <-> 189, 1871 +190 <-> 395, 1639 +191 <-> 441 +192 <-> 192, 1034 +193 <-> 494 +194 <-> 138, 995, 1308 +195 <-> 1024 +196 <-> 226, 1632, 1919 +197 <-> 786 +198 <-> 286, 758, 1852 +199 <-> 0, 64, 1646 +200 <-> 314 +201 <-> 459, 658 +202 <-> 321, 492, 599, 1081, 1460 +203 <-> 225 +204 <-> 331, 462, 600 +205 <-> 898 +206 <-> 734, 1321 +207 <-> 558, 991 +208 <-> 397 +209 <-> 1145, 1886 +210 <-> 1343, 1925 +211 <-> 840, 1409 +212 <-> 1308 +213 <-> 1813 +214 <-> 43, 282 +215 <-> 1270 +216 <-> 106, 836, 1275, 1507 +217 <-> 312 +218 <-> 290, 386, 639, 1920 +219 <-> 784, 1001 +220 <-> 220, 322 +221 <-> 1681 +222 <-> 1616, 1653 +223 <-> 436, 1272, 1625 +224 <-> 1398, 1696 +225 <-> 126, 203, 1182 +226 <-> 196, 1655 +227 <-> 623 +228 <-> 137, 923 +229 <-> 253, 1387 +230 <-> 1374 +231 <-> 389, 1499 +232 <-> 442 +233 <-> 473, 1406 +234 <-> 94, 176 +235 <-> 235 +236 <-> 607, 838, 1487, 1856 +237 <-> 818 +238 <-> 387, 628 +239 <-> 19 +240 <-> 818 +241 <-> 1027, 1524 +242 <-> 1085, 1971 +243 <-> 1942 +244 <-> 299, 390, 916 +245 <-> 906 +246 <-> 246, 534, 763, 1427 +247 <-> 531, 1675 +248 <-> 336, 1832 +249 <-> 1497 +250 <-> 1836 +251 <-> 1309 +252 <-> 581, 1104 +253 <-> 229, 877, 1743 +254 <-> 254, 621 +255 <-> 831, 866, 874 +256 <-> 1942 +257 <-> 906 +258 <-> 1224 +259 <-> 98, 316, 419, 718, 1519 +260 <-> 1223, 1516, 1547, 1845, 1944 +261 <-> 15, 278, 1607, 1808 +262 <-> 1112, 1172 +263 <-> 424 +264 <-> 680 +265 <-> 1968 +266 <-> 804, 1252 +267 <-> 1739 +268 <-> 538, 546 +269 <-> 1265 +270 <-> 270 +271 <-> 1150 +272 <-> 272 +273 <-> 1208, 1537 +274 <-> 1427 +275 <-> 1349, 1829 +276 <-> 62, 906 +277 <-> 461, 634, 1887 +278 <-> 261, 1224, 1904 +279 <-> 303, 537 +280 <-> 63, 280, 926, 931 +281 <-> 862, 1041, 1119, 1863 +282 <-> 214, 488, 644 +283 <-> 646, 1124 +284 <-> 860, 1759 +285 <-> 746 +286 <-> 198 +287 <-> 68, 1045 +288 <-> 332, 1133, 1277, 1628, 1744, 1770, 1934 +289 <-> 1578, 1766 +290 <-> 218, 439, 1661 +291 <-> 596, 1377, 1620 +292 <-> 700, 848, 1099 +293 <-> 293, 1592, 1938 +294 <-> 653, 1948 +295 <-> 1505, 1936 +296 <-> 625, 925 +297 <-> 1105, 1185 +298 <-> 298, 544, 1444 +299 <-> 244, 933, 1012 +300 <-> 300, 1461, 1883 +301 <-> 880, 1698 +302 <-> 1221 +303 <-> 279, 375 +304 <-> 11, 53, 967, 1362 +305 <-> 777 +306 <-> 344 +307 <-> 582, 770 +308 <-> 792, 1895 +309 <-> 539 +310 <-> 390, 1482 +311 <-> 441, 1294 +312 <-> 217, 743 +313 <-> 1522 +314 <-> 200, 502, 835, 1084, 1134 +315 <-> 1970 +316 <-> 259 +317 <-> 1302, 1437 +318 <-> 365 +319 <-> 128, 976 +320 <-> 1056, 1466, 1778 +321 <-> 202 +322 <-> 220, 1431 +323 <-> 838, 1465, 1895 +324 <-> 443 +325 <-> 1056 +326 <-> 463, 1741, 1761 +327 <-> 20, 128, 681, 1797 +328 <-> 328, 348 +329 <-> 378, 1738 +330 <-> 459 +331 <-> 204, 331 +332 <-> 126, 288 +333 <-> 70, 107, 1747 +334 <-> 517, 614 +335 <-> 1259 +336 <-> 248, 550, 1485 +337 <-> 337 +338 <-> 27, 1212, 1264 +339 <-> 430, 963 +340 <-> 769 +341 <-> 341 +342 <-> 593, 718, 895 +343 <-> 569 +344 <-> 306, 1440, 1650, 1742 +345 <-> 61, 1006, 1664 +346 <-> 448, 1928 +347 <-> 1022, 1052 +348 <-> 328, 1232 +349 <-> 1232 +350 <-> 1, 526, 1086, 1821 +351 <-> 584 +352 <-> 518, 686, 1324, 1437 +353 <-> 136, 936 +354 <-> 1470 +355 <-> 1173, 1814 +356 <-> 698 +357 <-> 93 +358 <-> 737, 986, 1169 +359 <-> 4 +360 <-> 363 +361 <-> 417, 841 +362 <-> 928 +363 <-> 360, 1751 +364 <-> 66, 364, 1596 +365 <-> 318, 1766 +366 <-> 366 +367 <-> 367 +368 <-> 1897 +369 <-> 25, 369, 1460 +370 <-> 370 +371 <-> 1568 +372 <-> 110, 582 +373 <-> 24, 178, 1924 +374 <-> 374 +375 <-> 303 +376 <-> 1331, 1990 +377 <-> 388, 601, 837 +378 <-> 329 +379 <-> 623 +380 <-> 671 +381 <-> 938 +382 <-> 39, 1458 +383 <-> 383, 1490, 1763, 1844 +384 <-> 832 +385 <-> 745, 1673 +386 <-> 218, 779 +387 <-> 238 +388 <-> 377, 1817 +389 <-> 231, 656, 1038, 1960 +390 <-> 96, 244, 310, 721, 1094, 1501 +391 <-> 438, 819, 1870 +392 <-> 697 +393 <-> 443, 1275, 1463 +394 <-> 480 +395 <-> 59, 190, 1117, 1997 +396 <-> 595 +397 <-> 208, 397, 1727 +398 <-> 1153 +399 <-> 84 +400 <-> 825, 1693 +401 <-> 812 +402 <-> 1191 +403 <-> 1446, 1820 +404 <-> 442, 871, 1637 +405 <-> 426, 1067 +406 <-> 460, 1290 +407 <-> 1951 +408 <-> 1335, 1391, 1897 +409 <-> 984, 1217 +410 <-> 8, 1607 +411 <-> 135, 411, 454, 1393 +412 <-> 120 +413 <-> 1208 +414 <-> 113 +415 <-> 415, 1803 +416 <-> 428 +417 <-> 361 +418 <-> 1129 +419 <-> 259 +420 <-> 628 +421 <-> 1485 +422 <-> 1110, 1785 +423 <-> 1418 +424 <-> 30, 263 +425 <-> 1497 +426 <-> 114, 405, 780 +427 <-> 427 +428 <-> 416, 782 +429 <-> 429 +430 <-> 339, 1513 +431 <-> 886, 1408 +432 <-> 586, 1725 +433 <-> 889, 1753, 1881 +434 <-> 1078, 1120 +435 <-> 660, 1194, 1662 +436 <-> 223, 1332 +437 <-> 1487 +438 <-> 391 +439 <-> 290 +440 <-> 1828 +441 <-> 191, 311, 1003, 1561, 1702 +442 <-> 164, 232, 404 +443 <-> 324, 393 +444 <-> 1215, 1251 +445 <-> 792 +446 <-> 1015, 1392 +447 <-> 777 +448 <-> 346, 1097 +449 <-> 1117 +450 <-> 1395 +451 <-> 1414, 1845 +452 <-> 138 +453 <-> 90, 453 +454 <-> 411 +455 <-> 1801 +456 <-> 456, 791, 902, 1111 +457 <-> 457, 1075, 1384 +458 <-> 770, 1600 +459 <-> 101, 201, 330, 1108 +460 <-> 406, 1529 +461 <-> 277, 839, 1552 +462 <-> 204 +463 <-> 326, 1899 +464 <-> 1098 +465 <-> 764, 1630, 1779 +466 <-> 627 +467 <-> 904 +468 <-> 108, 1849 +469 <-> 469, 603, 780 +470 <-> 88, 1276, 1533 +471 <-> 1492 +472 <-> 472, 1048, 1409, 1518, 1758 +473 <-> 233, 1413, 1826 +474 <-> 780 +475 <-> 1005, 1968 +476 <-> 809 +477 <-> 2 +478 <-> 753 +479 <-> 479, 1296, 1615 +480 <-> 394, 775, 1623 +481 <-> 774, 1604 +482 <-> 763 +483 <-> 522, 591, 1344 +484 <-> 894, 1219 +485 <-> 507, 1114, 1250, 1351 +486 <-> 1099, 1879 +487 <-> 487 +488 <-> 282, 1164, 1189 +489 <-> 900, 1889 +490 <-> 165, 918, 1007 +491 <-> 1800 +492 <-> 202 +493 <-> 615, 899, 1200, 1326 +494 <-> 139, 193 +495 <-> 704, 1988 +496 <-> 496 +497 <-> 1149, 1216 +498 <-> 69, 84, 153 +499 <-> 1125, 1149 +500 <-> 642 +501 <-> 524, 1176 +502 <-> 145, 314 +503 <-> 1330, 1626 +504 <-> 68, 699 +505 <-> 672 +506 <-> 1083 +507 <-> 485, 1743 +508 <-> 520, 1236, 1296 +509 <-> 1676 +510 <-> 875, 1066 +511 <-> 511 +512 <-> 512, 1240 +513 <-> 705, 812 +514 <-> 1758 +515 <-> 1165, 1168 +516 <-> 811 +517 <-> 334, 1132, 1339 +518 <-> 352, 1674 +519 <-> 824, 1396, 1659 +520 <-> 508 +521 <-> 52, 915 +522 <-> 83, 483, 1637 +523 <-> 1317 +524 <-> 501 +525 <-> 525 +526 <-> 350, 850, 930 +527 <-> 527, 1338, 1449 +528 <-> 156 +529 <-> 98 +530 <-> 691, 1175, 1505 +531 <-> 247, 785, 1389, 1623 +532 <-> 1159 +533 <-> 1152, 1297 +534 <-> 246 +535 <-> 1144, 1491, 1622, 1935 +536 <-> 708 +537 <-> 279, 1656 +538 <-> 268, 538, 1756 +539 <-> 309, 802 +540 <-> 1239 +541 <-> 119, 1679, 1741 +542 <-> 1204 +543 <-> 642, 1926 +544 <-> 298 +545 <-> 1971 +546 <-> 268 +547 <-> 1465, 1613, 1614 +548 <-> 160 +549 <-> 820 +550 <-> 336 +551 <-> 1733 +552 <-> 552, 1563 +553 <-> 1654 +554 <-> 554, 1641, 1665 +555 <-> 555 +556 <-> 15 +557 <-> 177, 1204 +558 <-> 207, 1004 +559 <-> 47, 1297 +560 <-> 1189, 1709 +561 <-> 1013, 1709 +562 <-> 762, 912 +563 <-> 563 +564 <-> 585 +565 <-> 1333, 1494 +566 <-> 566, 938 +567 <-> 894 +568 <-> 586, 1397 +569 <-> 343, 1572 +570 <-> 704, 1220, 1459 +571 <-> 1451 +572 <-> 651, 846, 909 +573 <-> 1881 +574 <-> 1866 +575 <-> 1379 +576 <-> 1060, 1210 +577 <-> 1837 +578 <-> 1346 +579 <-> 87 +580 <-> 1509 +581 <-> 252, 1548 +582 <-> 307, 372 +583 <-> 624, 1599, 1753, 1908 +584 <-> 351, 774 +585 <-> 564, 977 +586 <-> 432, 568, 773, 1789 +587 <-> 826 +588 <-> 1854 +589 <-> 719, 845, 1214 +590 <-> 158, 1259 +591 <-> 483 +592 <-> 743, 898 +593 <-> 172, 342, 852, 943, 1053 +594 <-> 594 +595 <-> 396, 928 +596 <-> 291, 596 +597 <-> 597 +598 <-> 1980 +599 <-> 202, 1764 +600 <-> 204 +601 <-> 54, 377, 1340 +602 <-> 1718, 1866 +603 <-> 469, 789 +604 <-> 1006, 1033, 1626 +605 <-> 1535 +606 <-> 176 +607 <-> 236, 911, 1218 +608 <-> 1193, 1825 +609 <-> 1657 +610 <-> 733, 841 +611 <-> 747, 1892 +612 <-> 1098, 1196, 1267 +613 <-> 5, 1372 +614 <-> 334, 1492 +615 <-> 493, 798 +616 <-> 1025, 1940 +617 <-> 6, 666, 1155 +618 <-> 762, 1621, 1895 +619 <-> 1187 +620 <-> 95, 1761 +621 <-> 254 +622 <-> 784, 1476 +623 <-> 227, 379, 1081 +624 <-> 583 +625 <-> 296, 1222, 1882 +626 <-> 905 +627 <-> 466, 1692 +628 <-> 238, 420, 1004, 1412 +629 <-> 1532 +630 <-> 630 +631 <-> 977, 1092, 1458, 1713 +632 <-> 777, 1049, 1404 +633 <-> 994 +634 <-> 277 +635 <-> 635 +636 <-> 703, 1756 +637 <-> 840, 1585 +638 <-> 76, 180, 1373 +639 <-> 218, 639, 1835 +640 <-> 1559 +641 <-> 1800 +642 <-> 500, 543 +643 <-> 1808 +644 <-> 282 +645 <-> 1253, 1475 +646 <-> 283, 646, 864 +647 <-> 93, 1508 +648 <-> 134, 956, 1762 +649 <-> 37, 82 +650 <-> 1480, 1916 +651 <-> 151, 572, 1357 +652 <-> 1261 +653 <-> 294, 653 +654 <-> 129, 1139, 1176 +655 <-> 1251, 1656 +656 <-> 389 +657 <-> 1604 +658 <-> 201, 1208 +659 <-> 23, 133, 1868 +660 <-> 435 +661 <-> 1634 +662 <-> 1667, 1701 +663 <-> 974 +664 <-> 664, 1167 +665 <-> 172, 1370 +666 <-> 617 +667 <-> 1824 +668 <-> 952, 1605 +669 <-> 1822 +670 <-> 44, 670 +671 <-> 380, 1145, 1693, 1906 +672 <-> 505, 693 +673 <-> 1610 +674 <-> 1249, 1302 +675 <-> 150, 777 +676 <-> 1675 +677 <-> 910, 1282 +678 <-> 99, 1004 +679 <-> 679 +680 <-> 264, 917, 1137, 1687 +681 <-> 140, 327, 746 +682 <-> 682 +683 <-> 794, 1315 +684 <-> 1000, 1342 +685 <-> 1111, 1348, 1523, 1932 +686 <-> 352 +687 <-> 979, 1667 +688 <-> 92, 177 +689 <-> 937, 1939 +690 <-> 35, 1608 +691 <-> 530, 691 +692 <-> 1871 +693 <-> 97, 672 +694 <-> 72, 694 +695 <-> 1076 +696 <-> 1954 +697 <-> 66, 392, 1892 +698 <-> 122, 356, 698 +699 <-> 504, 1470 +700 <-> 292, 1407 +701 <-> 1231, 1327 +702 <-> 32 +703 <-> 636, 1083, 1210 +704 <-> 495, 570 +705 <-> 174, 513, 1332 +706 <-> 69, 1088 +707 <-> 1036, 1867 +708 <-> 536, 805, 1958 +709 <-> 709 +710 <-> 915, 1578 +711 <-> 711, 1478 +712 <-> 813, 927 +713 <-> 70, 116, 1469, 1539 +714 <-> 41 +715 <-> 840, 1473, 1562, 1705 +716 <-> 716 +717 <-> 949, 1864 +718 <-> 259, 342, 1557, 1853 +719 <-> 589, 781, 802 +720 <-> 1125 +721 <-> 390, 878 +722 <-> 1026 +723 <-> 1039, 1467 +724 <-> 1535 +725 <-> 883 +726 <-> 1832, 1917 +727 <-> 1245 +728 <-> 1291 +729 <-> 1203 +730 <-> 824 +731 <-> 1984 +732 <-> 187, 1214 +733 <-> 610, 1079, 1198 +734 <-> 206, 872, 1479, 1855 +735 <-> 124, 1371 +736 <-> 113, 736 +737 <-> 358, 1426 +738 <-> 974, 1024, 1717, 1842 +739 <-> 1489 +740 <-> 1634 +741 <-> 873, 1695 +742 <-> 1700 +743 <-> 312, 592, 1493 +744 <-> 948, 1306, 1400 +745 <-> 385, 1029, 1315, 1474 +746 <-> 285, 681, 793 +747 <-> 169, 611, 814, 1548 +748 <-> 748 +749 <-> 1134, 1498 +750 <-> 146 +751 <-> 155, 783, 1856 +752 <-> 122, 1417 +753 <-> 478, 1505 +754 <-> 810, 1742, 1955 +755 <-> 1735, 1847 +756 <-> 978, 1095 +757 <-> 1153, 1730 +758 <-> 198, 1476 +759 <-> 759 +760 <-> 168 +761 <-> 1496 +762 <-> 562, 618 +763 <-> 246, 482, 1258 +764 <-> 465 +765 <-> 186 +766 <-> 1448 +767 <-> 893, 896, 1019 +768 <-> 1730 +769 <-> 340, 1043, 1065 +770 <-> 307, 458, 1453 +771 <-> 1168 +772 <-> 911 +773 <-> 586 +774 <-> 481, 584, 774, 1148 +775 <-> 480, 1485, 1894 +776 <-> 926 +777 <-> 305, 447, 632, 675 +778 <-> 1690 +779 <-> 386 +780 <-> 426, 469, 474 +781 <-> 719, 1543 +782 <-> 98, 428, 903 +783 <-> 751, 1558 +784 <-> 219, 622 +785 <-> 531 +786 <-> 197, 911, 1312 +787 <-> 120, 880 +788 <-> 1089, 1487 +789 <-> 603, 844, 1681, 1731 +790 <-> 790, 1126 +791 <-> 456, 1363 +792 <-> 308, 445 +793 <-> 746 +794 <-> 683, 951 +795 <-> 1732, 1986 +796 <-> 1210, 1878 +797 <-> 804 +798 <-> 615 +799 <-> 1651 +800 <-> 851, 860, 1907 +801 <-> 1110, 1537, 1773 +802 <-> 539, 719 +803 <-> 156, 1528 +804 <-> 266, 797, 1549 +805 <-> 89, 708, 962 +806 <-> 1429 +807 <-> 1800 +808 <-> 873, 1421 +809 <-> 476, 809 +810 <-> 754 +811 <-> 516, 965 +812 <-> 401, 513 +813 <-> 712, 1023 +814 <-> 747 +815 <-> 1145 +816 <-> 1413 +817 <-> 1235 +818 <-> 237, 240, 1506 +819 <-> 391, 857 +820 <-> 549, 1162 +821 <-> 1410, 1607 +822 <-> 30, 1485 +823 <-> 1445, 1454 +824 <-> 519, 730, 1824 +825 <-> 400, 1381, 1472 +826 <-> 587, 1040, 1198, 1618 +827 <-> 40 +828 <-> 1870 +829 <-> 149 +830 <-> 16 +831 <-> 255 +832 <-> 384, 1890, 1913 +833 <-> 1529 +834 <-> 834 +835 <-> 314 +836 <-> 216, 1166 +837 <-> 377, 988 +838 <-> 236, 323 +839 <-> 461, 1825 +840 <-> 211, 637, 715, 1710 +841 <-> 361, 610, 841, 1815 +842 <-> 1669 +843 <-> 874, 1468 +844 <-> 789 +845 <-> 143, 589, 1053 +846 <-> 572 +847 <-> 1285 +848 <-> 292 +849 <-> 849 +850 <-> 526 +851 <-> 800, 1368, 1497 +852 <-> 593, 1798 +853 <-> 1339, 1593, 1749 +854 <-> 1445, 1787 +855 <-> 1026, 1356 +856 <-> 132 +857 <-> 819 +858 <-> 1511 +859 <-> 1191 +860 <-> 284, 800, 1619 +861 <-> 111, 1266 +862 <-> 60, 281 +863 <-> 1605 +864 <-> 646 +865 <-> 873 +866 <-> 255, 924 +867 <-> 871, 1707 +868 <-> 12 +869 <-> 96, 1278 +870 <-> 1307 +871 <-> 404, 867, 1482 +872 <-> 734, 1200 +873 <-> 741, 808, 865, 873 +874 <-> 255, 843, 1201 +875 <-> 510, 1325, 1797 +876 <-> 1504, 1825 +877 <-> 253 +878 <-> 721 +879 <-> 948, 1291, 1847 +880 <-> 85, 184, 301, 787, 1503, 1617 +881 <-> 1688 +882 <-> 882 +883 <-> 725, 1582, 1874 +884 <-> 1352 +885 <-> 885, 1974 +886 <-> 431, 1650 +887 <-> 101 +888 <-> 102, 152 +889 <-> 433, 1016 +890 <-> 890 +891 <-> 12 +892 <-> 1402, 1923 +893 <-> 767 +894 <-> 484, 567 +895 <-> 342, 1123, 1158, 1648 +896 <-> 767 +897 <-> 80, 986, 1418 +898 <-> 205, 592, 1019 +899 <-> 493, 1053 +900 <-> 489 +901 <-> 901 +902 <-> 456 +903 <-> 782 +904 <-> 467, 904, 1924 +905 <-> 626, 1881 +906 <-> 245, 257, 276 +907 <-> 907, 1101, 1826 +908 <-> 908, 1230 +909 <-> 34, 572, 1186 +910 <-> 677, 961 +911 <-> 607, 772, 786, 1196, 1405 +912 <-> 562 +913 <-> 1636 +914 <-> 1892, 1963 +915 <-> 150, 521, 710 +916 <-> 244 +917 <-> 23, 680, 1336 +918 <-> 490, 1483 +919 <-> 96 +920 <-> 1880 +921 <-> 921 +922 <-> 975, 1255 +923 <-> 228, 1202, 1452 +924 <-> 866 +925 <-> 296, 1270 +926 <-> 280, 776, 1170, 1788, 1970 +927 <-> 712 +928 <-> 362, 595, 1103 +929 <-> 929 +930 <-> 65, 526, 1256, 1500, 1722 +931 <-> 183, 280, 1484 +932 <-> 1737 +933 <-> 299 +934 <-> 1387, 1851 +935 <-> 136, 935, 1537, 1775 +936 <-> 353 +937 <-> 689, 1347 +938 <-> 381, 566 +939 <-> 56, 1762 +940 <-> 1559, 1860 +941 <-> 1504, 1671, 1723, 1724 +942 <-> 1293 +943 <-> 21, 593 +944 <-> 1335 +945 <-> 1650 +946 <-> 1556 +947 <-> 26 +948 <-> 744, 879 +949 <-> 717, 1604 +950 <-> 1201, 1322 +951 <-> 794 +952 <-> 668, 1371 +953 <-> 1272 +954 <-> 954 +955 <-> 74 +956 <-> 648, 1870 +957 <-> 44, 1769 +958 <-> 13, 1388, 1660 +959 <-> 959 +960 <-> 153 +961 <-> 910 +962 <-> 17, 805 +963 <-> 339, 1783 +964 <-> 1100 +965 <-> 811, 1677 +966 <-> 966 +967 <-> 304, 1029, 1269, 1910 +968 <-> 81, 1091 +969 <-> 1379, 1693 +970 <-> 1289 +971 <-> 971 +972 <-> 70 +973 <-> 973 +974 <-> 663, 738, 1005 +975 <-> 922 +976 <-> 319 +977 <-> 585, 631 +978 <-> 756, 1628 +979 <-> 687, 979 +980 <-> 1151, 1317 +981 <-> 1199, 1902 +982 <-> 1223 +983 <-> 1931 +984 <-> 2, 409 +985 <-> 985 +986 <-> 358, 897, 1564 +987 <-> 987, 1644 +988 <-> 36, 837 +989 <-> 1275 +990 <-> 990, 1295 +991 <-> 207, 1415 +992 <-> 1242, 1397, 1467, 1579 +993 <-> 1042, 1767 +994 <-> 633, 1595, 1813 +995 <-> 194 +996 <-> 1096, 1369 +997 <-> 1231, 1973 +998 <-> 1367 +999 <-> 999 +1000 <-> 684, 1078 +1001 <-> 219 +1002 <-> 1442 +1003 <-> 441 +1004 <-> 558, 628, 678 +1005 <-> 475, 974 +1006 <-> 103, 345, 604 +1007 <-> 490, 1274 +1008 <-> 1708, 1819 +1009 <-> 1009, 1118 +1010 <-> 1223, 1803 +1011 <-> 1867 +1012 <-> 299, 1923 +1013 <-> 561, 1187, 1477, 1926 +1014 <-> 1861 +1015 <-> 446, 1015, 1858 +1016 <-> 889 +1017 <-> 1435 +1018 <-> 42, 98 +1019 <-> 767, 898, 1764 +1020 <-> 1020 +1021 <-> 1666 +1022 <-> 347, 1022, 1310 +1023 <-> 26, 813, 1109, 1538, 1988 +1024 <-> 195, 738 +1025 <-> 616 +1026 <-> 722, 855, 1337, 1415 +1027 <-> 241, 1309 +1028 <-> 1028 +1029 <-> 745, 967 +1030 <-> 1577, 1689 +1031 <-> 1031 +1032 <-> 125 +1033 <-> 604, 1127, 1194 +1034 <-> 192 +1035 <-> 1992 +1036 <-> 707, 1509 +1037 <-> 1347 +1038 <-> 389 +1039 <-> 723, 1535 +1040 <-> 826, 1245, 1918 +1041 <-> 281 +1042 <-> 993 +1043 <-> 67, 769, 1142 +1044 <-> 1690 +1045 <-> 287 +1046 <-> 1561 +1047 <-> 4 +1048 <-> 472, 1703 +1049 <-> 632, 1816 +1050 <-> 1157, 1899 +1051 <-> 1818 +1052 <-> 347, 1904 +1053 <-> 593, 845, 899 +1054 <-> 1983 +1055 <-> 1599 +1056 <-> 41, 320, 325, 1567 +1057 <-> 1372, 1569 +1058 <-> 185 +1059 <-> 1112, 1939 +1060 <-> 576, 1314, 1557, 1751, 1752 +1061 <-> 1285 +1062 <-> 1162, 1338, 1739 +1063 <-> 1291 +1064 <-> 132 +1065 <-> 769, 1317 +1066 <-> 510 +1067 <-> 405, 1452, 1953 +1068 <-> 1200 +1069 <-> 1069 +1070 <-> 19 +1071 <-> 1361, 1382 +1072 <-> 1307, 1534 +1073 <-> 1282 +1074 <-> 1323, 1653 +1075 <-> 457 +1076 <-> 695, 1703 +1077 <-> 1180 +1078 <-> 434, 1000 +1079 <-> 733 +1080 <-> 130, 1757 +1081 <-> 202, 623 +1082 <-> 1082 +1083 <-> 506, 703, 1279 +1084 <-> 314, 1812 +1085 <-> 242 +1086 <-> 350 +1087 <-> 1524 +1088 <-> 706, 1900 +1089 <-> 788 +1090 <-> 1260 +1091 <-> 968, 1522 +1092 <-> 173, 631, 1850 +1093 <-> 1093, 1390 +1094 <-> 182, 390 +1095 <-> 756 +1096 <-> 996 +1097 <-> 448 +1098 <-> 464, 612 +1099 <-> 292, 486 +1100 <-> 964, 1326 +1101 <-> 907, 1799 +1102 <-> 1927 +1103 <-> 928, 1103 +1104 <-> 252 +1105 <-> 166, 297 +1106 <-> 1106, 1896 +1107 <-> 1107 +1108 <-> 459 +1109 <-> 1023 +1110 <-> 422, 801 +1111 <-> 456, 685 +1112 <-> 262, 1059 +1113 <-> 1267 +1114 <-> 485 +1115 <-> 1115, 1827 +1116 <-> 1596 +1117 <-> 395, 449, 1382 +1118 <-> 1009 +1119 <-> 281, 1670 +1120 <-> 434, 1165 +1121 <-> 167, 1121 +1122 <-> 1809 +1123 <-> 895 +1124 <-> 283 +1125 <-> 499, 720, 1308 +1126 <-> 790, 1526 +1127 <-> 1033 +1128 <-> 1500 +1129 <-> 168, 418, 1642, 1947 +1130 <-> 1454 +1131 <-> 1683 +1132 <-> 517, 1784 +1133 <-> 288 +1134 <-> 314, 749, 1586 +1135 <-> 102 +1136 <-> 1136 +1137 <-> 680 +1138 <-> 1755 +1139 <-> 654 +1140 <-> 1140 +1141 <-> 1141 +1142 <-> 1043, 1862 +1143 <-> 1550 +1144 <-> 535, 1144, 1849 +1145 <-> 209, 671, 815, 1268 +1146 <-> 145 +1147 <-> 134 +1148 <-> 774 +1149 <-> 36, 497, 499, 1652 +1150 <-> 271, 1150 +1151 <-> 51, 980, 1651 +1152 <-> 533 +1153 <-> 398, 757 +1154 <-> 1313 +1155 <-> 145, 617, 1336, 1721 +1156 <-> 1838 +1157 <-> 10, 1050 +1158 <-> 895 +1159 <-> 532, 1708 +1160 <-> 1357 +1161 <-> 1200, 1999 +1162 <-> 820, 1062 +1163 <-> 1821 +1164 <-> 488, 1572 +1165 <-> 515, 1120 +1166 <-> 36, 836 +1167 <-> 664 +1168 <-> 11, 515, 771, 1967 +1169 <-> 358 +1170 <-> 926 +1171 <-> 1666, 1827 +1172 <-> 262, 1439 +1173 <-> 123, 355, 1341 +1174 <-> 1204, 1525 +1175 <-> 530 +1176 <-> 501, 654 +1177 <-> 1311, 1796 +1178 <-> 186, 1536, 1551, 1853 +1179 <-> 1822, 1947 +1180 <-> 1077, 1264 +1181 <-> 163, 1181 +1182 <-> 225 +1183 <-> 1237, 1715, 1798 +1184 <-> 41 +1185 <-> 297, 1185 +1186 <-> 909 +1187 <-> 619, 1013 +1188 <-> 1698 +1189 <-> 488, 560 +1190 <-> 1834, 1933 +1191 <-> 402, 859, 1191 +1192 <-> 1839 +1193 <-> 608, 1438 +1194 <-> 435, 1033, 1754 +1195 <-> 46, 1828 +1196 <-> 612, 911, 1975 +1197 <-> 1503, 1854 +1198 <-> 733, 826 +1199 <-> 981 +1200 <-> 493, 872, 1068, 1161 +1201 <-> 874, 950 +1202 <-> 923 +1203 <-> 40, 729, 1719 +1204 <-> 542, 557, 1174 +1205 <-> 1332 +1206 <-> 148, 182 +1207 <-> 1207 +1208 <-> 91, 273, 413, 658, 1234 +1209 <-> 1995 +1210 <-> 576, 703, 796 +1211 <-> 1227, 1891 +1212 <-> 338, 1362 +1213 <-> 6 +1214 <-> 589, 732 +1215 <-> 4, 100, 444, 1842 +1216 <-> 497, 1745 +1217 <-> 409, 1354 +1218 <-> 607 +1219 <-> 29, 484, 1712 +1220 <-> 570 +1221 <-> 302, 1429 +1222 <-> 625, 1412 +1223 <-> 260, 982, 1010, 1591 +1224 <-> 9, 258, 278, 1506, 1893 +1225 <-> 1906 +1226 <-> 1226 +1227 <-> 1211 +1228 <-> 1773 +1229 <-> 18 +1230 <-> 908 +1231 <-> 701, 997 +1232 <-> 348, 349 +1233 <-> 59 +1234 <-> 1208 +1235 <-> 817, 1994 +1236 <-> 508 +1237 <-> 1183 +1238 <-> 1529 +1239 <-> 540, 1524, 1552 +1240 <-> 512 +1241 <-> 1241 +1242 <-> 992, 1685 +1243 <-> 1934 +1244 <-> 1574, 1839 +1245 <-> 727, 1040 +1246 <-> 1380 +1247 <-> 1506, 1923 +1248 <-> 50, 1610 +1249 <-> 674 +1250 <-> 485 +1251 <-> 444, 655, 1718 +1252 <-> 266, 1862 +1253 <-> 645, 1709 +1254 <-> 1254 +1255 <-> 922, 1255, 1341 +1256 <-> 930, 1346 +1257 <-> 1465, 1844 +1258 <-> 763 +1259 <-> 335, 590, 1259 +1260 <-> 129, 1090 +1261 <-> 652, 1261, 1838 +1262 <-> 1262, 1912 +1263 <-> 7, 1438, 1554 +1264 <-> 338, 1180 +1265 <-> 269, 1265 +1266 <-> 861, 1281, 1423 +1267 <-> 612, 1113, 1289 +1268 <-> 1145 +1269 <-> 967 +1270 <-> 94, 215, 925, 1860 +1271 <-> 1376 +1272 <-> 223, 953 +1273 <-> 1301 +1274 <-> 1007, 1860 +1275 <-> 216, 393, 989, 1275 +1276 <-> 470 +1277 <-> 288 +1278 <-> 869 +1279 <-> 1083, 1755 +1280 <-> 1588 +1281 <-> 1266 +1282 <-> 677, 1073, 1575, 1625 +1283 <-> 1571 +1284 <-> 1828 +1285 <-> 847, 1061, 1641 +1286 <-> 1494, 1649, 1889 +1287 <-> 159 +1288 <-> 142, 1288 +1289 <-> 970, 1267, 1668 +1290 <-> 406 +1291 <-> 728, 879, 1063, 1885 +1292 <-> 1407 +1293 <-> 942, 1318, 1459 +1294 <-> 311, 1754 +1295 <-> 990, 1512 +1296 <-> 130, 479, 508 +1297 <-> 533, 559 +1298 <-> 1839 +1299 <-> 70 +1300 <-> 37, 1886, 1998 +1301 <-> 1273, 1340 +1302 <-> 317, 674, 1485 +1303 <-> 161, 1624 +1304 <-> 1304 +1305 <-> 1410 +1306 <-> 744 +1307 <-> 20, 870, 1072 +1308 <-> 194, 212, 1125 +1309 <-> 251, 1027 +1310 <-> 22, 1022, 1777 +1311 <-> 1177 +1312 <-> 786 +1313 <-> 1154, 1706 +1314 <-> 1060 +1315 <-> 683, 745 +1316 <-> 1793, 1898 +1317 <-> 523, 980, 1065, 1787 +1318 <-> 1293 +1319 <-> 1319 +1320 <-> 1320 +1321 <-> 206 +1322 <-> 950, 1957 +1323 <-> 1074, 1823 +1324 <-> 352 +1325 <-> 875, 1740 +1326 <-> 493, 1100 +1327 <-> 701, 1633 +1328 <-> 1, 55 +1329 <-> 1633 +1330 <-> 503, 1687, 1782 +1331 <-> 376, 1531, 1766 +1332 <-> 436, 705, 1205 +1333 <-> 565 +1334 <-> 1805 +1335 <-> 408, 944 +1336 <-> 917, 1155 +1337 <-> 1026 +1338 <-> 527, 1062 +1339 <-> 517, 853 +1340 <-> 601, 1301, 1708 +1341 <-> 1173, 1255 +1342 <-> 684 +1343 <-> 210 +1344 <-> 121, 483 +1345 <-> 175 +1346 <-> 578, 1256 +1347 <-> 937, 1037, 1735 +1348 <-> 685 +1349 <-> 275, 1594 +1350 <-> 127, 130 +1351 <-> 485 +1352 <-> 884, 1352 +1353 <-> 1604, 1800 +1354 <-> 1217 +1355 <-> 1355, 1985 +1356 <-> 855, 1840 +1357 <-> 651, 1160, 1388 +1358 <-> 92 +1359 <-> 112 +1360 <-> 1455 +1361 <-> 1071, 1909 +1362 <-> 304, 1212 +1363 <-> 791 +1364 <-> 161, 1426 +1365 <-> 1365 +1366 <-> 1366, 1433 +1367 <-> 133, 998 +1368 <-> 851 +1369 <-> 12, 996, 1425 +1370 <-> 665 +1371 <-> 13, 735, 952, 1371, 1857 +1372 <-> 613, 1057 +1373 <-> 638, 1511 +1374 <-> 230, 1593 +1375 <-> 104 +1376 <-> 179, 1271, 1639 +1377 <-> 291 +1378 <-> 1919 +1379 <-> 575, 969 +1380 <-> 1246, 1501, 1903 +1381 <-> 73, 825, 1922 +1382 <-> 1071, 1117, 1541, 1810 +1383 <-> 111 +1384 <-> 457 +1385 <-> 1878, 1966 +1386 <-> 1396 +1387 <-> 229, 934, 1853 +1388 <-> 958, 1357, 1424 +1389 <-> 531 +1390 <-> 1093, 1603 +1391 <-> 408 +1392 <-> 446 +1393 <-> 411 +1394 <-> 1866 +1395 <-> 450, 1851 +1396 <-> 519, 1386 +1397 <-> 79, 568, 992 +1398 <-> 224 +1399 <-> 1443, 1799, 1915 +1400 <-> 744 +1401 <-> 1685 +1402 <-> 892 +1403 <-> 1714 +1404 <-> 632 +1405 <-> 911, 1532 +1406 <-> 233, 1606 +1407 <-> 700, 1292 +1408 <-> 431, 1408, 1416 +1409 <-> 211, 472 +1410 <-> 821, 1305 +1411 <-> 1653, 1993 +1412 <-> 628, 1222 +1413 <-> 473, 816 +1414 <-> 451 +1415 <-> 991, 1026 +1416 <-> 1408 +1417 <-> 752 +1418 <-> 423, 897 +1419 <-> 2, 30 +1420 <-> 1420 +1421 <-> 808 +1422 <-> 58, 104 +1423 <-> 1266 +1424 <-> 1388 +1425 <-> 1369 +1426 <-> 737, 1364, 1847, 1913 +1427 <-> 246, 274 +1428 <-> 1964 +1429 <-> 76, 806, 1221 +1430 <-> 1430 +1431 <-> 322 +1432 <-> 1719 +1433 <-> 1366, 1988 +1434 <-> 89, 106 +1435 <-> 1017, 1730 +1436 <-> 1997 +1437 <-> 317, 352 +1438 <-> 1193, 1263 +1439 <-> 1172 +1440 <-> 344 +1441 <-> 37 +1442 <-> 1002, 1860 +1443 <-> 1399 +1444 <-> 31, 298 +1445 <-> 823, 854 +1446 <-> 113, 403 +1447 <-> 1508, 1720 +1448 <-> 766, 1791 +1449 <-> 527 +1450 <-> 134 +1451 <-> 88, 571 +1452 <-> 923, 1067 +1453 <-> 770 +1454 <-> 95, 823, 1130, 1454 +1455 <-> 1360, 1533 +1456 <-> 1456, 1489, 1529 +1457 <-> 114, 149, 1956 +1458 <-> 382, 631, 1458 +1459 <-> 570, 1293 +1460 <-> 202, 369 +1461 <-> 300 +1462 <-> 1636 +1463 <-> 393, 1659, 1939 +1464 <-> 31 +1465 <-> 3, 323, 547, 1257, 1732 +1466 <-> 320 +1467 <-> 723, 992, 1706 +1468 <-> 154, 843 +1469 <-> 713 +1470 <-> 354, 699 +1471 <-> 1471 +1472 <-> 825 +1473 <-> 715 +1474 <-> 745 +1475 <-> 645 +1476 <-> 622, 758 +1477 <-> 1013, 1645, 1669 +1478 <-> 711 +1479 <-> 734 +1480 <-> 650 +1481 <-> 1481 +1482 <-> 310, 871 +1483 <-> 918, 1504 +1484 <-> 931 +1485 <-> 336, 421, 775, 822, 1302 +1486 <-> 157, 1631 +1487 <-> 236, 437, 788, 1980 +1488 <-> 1560 +1489 <-> 739, 1456 +1490 <-> 383 +1491 <-> 535 +1492 <-> 471, 614 +1493 <-> 743 +1494 <-> 565, 1286 +1495 <-> 1627 +1496 <-> 761, 1496 +1497 <-> 249, 425, 851 +1498 <-> 749 +1499 <-> 231 +1500 <-> 930, 1128 +1501 <-> 390, 1380 +1502 <-> 1713 +1503 <-> 152, 880, 1197 +1504 <-> 47, 876, 941, 1483, 1945 +1505 <-> 295, 530, 753 +1506 <-> 818, 1224, 1247 +1507 <-> 141, 216, 1565, 1726 +1508 <-> 647, 1447, 1521, 1590 +1509 <-> 580, 1036, 1605, 1609 +1510 <-> 40, 1885 +1511 <-> 858, 1373 +1512 <-> 1295 +1513 <-> 78, 430 +1514 <-> 1772 +1515 <-> 153 +1516 <-> 144, 260, 1818 +1517 <-> 32, 1616, 1806 +1518 <-> 472 +1519 <-> 259 +1520 <-> 94, 1542 +1521 <-> 1508 +1522 <-> 313, 1091, 1631 +1523 <-> 685 +1524 <-> 241, 1087, 1239 +1525 <-> 1174 +1526 <-> 1126 +1527 <-> 1835 +1528 <-> 803 +1529 <-> 460, 833, 1238, 1456 +1530 <-> 1784 +1531 <-> 1331 +1532 <-> 629, 1405 +1533 <-> 470, 1455, 1533, 1796 +1534 <-> 1072 +1535 <-> 605, 724, 1039 +1536 <-> 1178 +1537 <-> 273, 801, 935 +1538 <-> 1023, 1734 +1539 <-> 713 +1540 <-> 1748 +1541 <-> 1382, 1683 +1542 <-> 1520 +1543 <-> 781 +1544 <-> 1631 +1545 <-> 1910 +1546 <-> 1942 +1547 <-> 260 +1548 <-> 581, 747 +1549 <-> 804 +1550 <-> 159, 1143 +1551 <-> 1178 +1552 <-> 461, 1239, 1846 +1553 <-> 1553, 1982 +1554 <-> 68, 85, 1263, 1597 +1555 <-> 1713, 1931 +1556 <-> 946, 1556 +1557 <-> 718, 1060 +1558 <-> 783 +1559 <-> 640, 940 +1560 <-> 1488, 1806, 1898, 1949 +1561 <-> 441, 1046 +1562 <-> 715, 1889 +1563 <-> 552 +1564 <-> 986 +1565 <-> 1507, 1689 +1566 <-> 1570 +1567 <-> 1056 +1568 <-> 3, 371 +1569 <-> 119, 1057, 1852 +1570 <-> 1566, 1570 +1571 <-> 1283, 1736 +1572 <-> 569, 1164, 1995 +1573 <-> 1573, 1784, 1987 +1574 <-> 1244, 1574 +1575 <-> 1282, 1575, 1866 +1576 <-> 123 +1577 <-> 1030 +1578 <-> 289, 710 +1579 <-> 992, 1684 +1580 <-> 4 +1581 <-> 1581 +1582 <-> 128, 883 +1583 <-> 57 +1584 <-> 116 +1585 <-> 637 +1586 <-> 1134 +1587 <-> 1587 +1588 <-> 159, 1280 +1589 <-> 1915 +1590 <-> 136, 1508 +1591 <-> 1223 +1592 <-> 293, 1891 +1593 <-> 853, 1374 +1594 <-> 1349, 1886 +1595 <-> 994, 1595 +1596 <-> 364, 1116 +1597 <-> 1554 +1598 <-> 1729 +1599 <-> 583, 1055 +1600 <-> 147, 458, 1600 +1601 <-> 1894 +1602 <-> 116 +1603 <-> 1390 +1604 <-> 481, 657, 949, 1353, 1983 +1605 <-> 115, 668, 863, 1509 +1606 <-> 1406 +1607 <-> 261, 410, 821 +1608 <-> 690 +1609 <-> 1509 +1610 <-> 673, 1248 +1611 <-> 118, 1788 +1612 <-> 1854 +1613 <-> 547 +1614 <-> 547, 1807 +1615 <-> 479 +1616 <-> 222, 1517 +1617 <-> 880, 1989 +1618 <-> 826 +1619 <-> 860, 1807 +1620 <-> 291 +1621 <-> 618, 1957 +1622 <-> 535 +1623 <-> 480, 531 +1624 <-> 1303 +1625 <-> 223, 1282 +1626 <-> 503, 604 +1627 <-> 1495, 1933 +1628 <-> 288, 978 +1629 <-> 1629 +1630 <-> 465, 1872 +1631 <-> 1486, 1522, 1544 +1632 <-> 196 +1633 <-> 1327, 1329 +1634 <-> 123, 661, 740 +1635 <-> 139 +1636 <-> 913, 1462, 1752 +1637 <-> 404, 522 +1638 <-> 1779, 1813 +1639 <-> 33, 190, 1376, 1639 +1640 <-> 1816 +1641 <-> 554, 1285 +1642 <-> 1129 +1643 <-> 71, 1844 +1644 <-> 171, 987 +1645 <-> 1477 +1646 <-> 16, 199 +1647 <-> 1702 +1648 <-> 895 +1649 <-> 1286 +1650 <-> 344, 886, 945 +1651 <-> 799, 1151 +1652 <-> 1149, 1961, 1984 +1653 <-> 222, 1074, 1411 +1654 <-> 108, 553 +1655 <-> 35, 156, 226, 1992 +1656 <-> 537, 655 +1657 <-> 105, 609 +1658 <-> 1658 +1659 <-> 519, 1463 +1660 <-> 958 +1661 <-> 290, 1929 +1662 <-> 435 +1663 <-> 1855 +1664 <-> 345 +1665 <-> 554 +1666 <-> 1021, 1171 +1667 <-> 662, 687 +1668 <-> 1289 +1669 <-> 842, 1477, 1795, 1975 +1670 <-> 1119, 1921 +1671 <-> 941 +1672 <-> 115 +1673 <-> 385 +1674 <-> 518 +1675 <-> 247, 676 +1676 <-> 509, 1987 +1677 <-> 965, 1677 +1678 <-> 151, 1692 +1679 <-> 541 +1680 <-> 1680 +1681 <-> 221, 789 +1682 <-> 1736, 1767, 1947 +1683 <-> 1131, 1541 +1684 <-> 1579 +1685 <-> 1242, 1401 +1686 <-> 1736 +1687 <-> 680, 1330 +1688 <-> 881, 1829 +1689 <-> 1030, 1565 +1690 <-> 778, 1044, 1900 +1691 <-> 28, 75 +1692 <-> 627, 1678 +1693 <-> 122, 400, 671, 969 +1694 <-> 58, 61 +1695 <-> 741 +1696 <-> 224, 1958 +1697 <-> 1935 +1698 <-> 301, 1188 +1699 <-> 29, 37 +1700 <-> 742, 1883 +1701 <-> 662 +1702 <-> 441, 1647 +1703 <-> 1048, 1076 +1704 <-> 185 +1705 <-> 715 +1706 <-> 1313, 1467 +1707 <-> 867 +1708 <-> 1008, 1159, 1340 +1709 <-> 560, 561, 1253, 1976 +1710 <-> 840 +1711 <-> 1711 +1712 <-> 12, 1219 +1713 <-> 631, 1502, 1555 +1714 <-> 1403, 1714, 1902 +1715 <-> 1183 +1716 <-> 79 +1717 <-> 738 +1718 <-> 602, 1251 +1719 <-> 1203, 1432 +1720 <-> 1447 +1721 <-> 1155 +1722 <-> 930 +1723 <-> 941 +1724 <-> 941 +1725 <-> 432 +1726 <-> 1507 +1727 <-> 397 +1728 <-> 1728, 1937 +1729 <-> 1598, 1913 +1730 <-> 105, 757, 768, 1435, 1730 +1731 <-> 789 +1732 <-> 795, 1465 +1733 <-> 551, 1765, 1835 +1734 <-> 1538 +1735 <-> 755, 1347 +1736 <-> 1571, 1682, 1686 +1737 <-> 932, 1795 +1738 <-> 329, 1738 +1739 <-> 267, 1062, 1848 +1740 <-> 1325 +1741 <-> 326, 541, 1952 +1742 <-> 344, 754 +1743 <-> 75, 253, 507 +1744 <-> 288 +1745 <-> 1216 +1746 <-> 92, 138 +1747 <-> 333 +1748 <-> 182, 1540 +1749 <-> 853 +1750 <-> 88 +1751 <-> 363, 1060 +1752 <-> 1060, 1636 +1753 <-> 433, 583, 1873 +1754 <-> 1194, 1294 +1755 <-> 1138, 1279 +1756 <-> 538, 636 +1757 <-> 1080 +1758 <-> 472, 514 +1759 <-> 284 +1760 <-> 1760 +1761 <-> 326, 620 +1762 <-> 648, 939, 1989 +1763 <-> 383 +1764 <-> 599, 1019, 1941 +1765 <-> 1733 +1766 <-> 289, 365, 1331 +1767 <-> 993, 1682, 1767 +1768 <-> 1768, 1859 +1769 <-> 957 +1770 <-> 288 +1771 <-> 1875 +1772 <-> 1514, 1772 +1773 <-> 801, 1228 +1774 <-> 0 +1775 <-> 935 +1776 <-> 133 +1777 <-> 1310 +1778 <-> 17, 320 +1779 <-> 465, 1638 +1780 <-> 1906 +1781 <-> 1969 +1782 <-> 1330 +1783 <-> 97, 963, 1960, 1983 +1784 <-> 1132, 1530, 1573 +1785 <-> 422 +1786 <-> 1786 +1787 <-> 854, 1317 +1788 <-> 926, 1611 +1789 <-> 586, 1829 +1790 <-> 74, 1790 +1791 <-> 52, 109, 1448 +1792 <-> 1860 +1793 <-> 1316, 1981 +1794 <-> 138 +1795 <-> 1669, 1737, 1861 +1796 <-> 1177, 1533 +1797 <-> 327, 875 +1798 <-> 852, 1183 +1799 <-> 1101, 1399, 1964 +1800 <-> 491, 641, 807, 1353 +1801 <-> 20, 455 +1802 <-> 123 +1803 <-> 415, 1010 +1804 <-> 1804 +1805 <-> 1334, 1926 +1806 <-> 1517, 1560 +1807 <-> 1614, 1619 +1808 <-> 261, 643 +1809 <-> 145, 1122 +1810 <-> 1382 +1811 <-> 60 +1812 <-> 1084 +1813 <-> 213, 994, 1638 +1814 <-> 14, 355 +1815 <-> 841, 1996 +1816 <-> 1049, 1640 +1817 <-> 388 +1818 <-> 1051, 1516 +1819 <-> 1008 +1820 <-> 403 +1821 <-> 350, 1163 +1822 <-> 669, 1179, 1927 +1823 <-> 1323 +1824 <-> 667, 824, 1879 +1825 <-> 608, 839, 876, 1965 +1826 <-> 473, 907 +1827 <-> 1115, 1171 +1828 <-> 440, 1195, 1284, 1913 +1829 <-> 275, 1688, 1789 +1830 <-> 1830 +1831 <-> 1831 +1832 <-> 248, 726 +1833 <-> 1833 +1834 <-> 1190 +1835 <-> 639, 1527, 1733 +1836 <-> 250, 1836 +1837 <-> 577, 1970 +1838 <-> 1156, 1261 +1839 <-> 1192, 1244, 1298 +1840 <-> 1356 +1841 <-> 81 +1842 <-> 738, 1215 +1843 <-> 1843 +1844 <-> 383, 1257, 1643 +1845 <-> 260, 451 +1846 <-> 1552 +1847 <-> 755, 879, 1426 +1848 <-> 38, 1739 +1849 <-> 468, 1144 +1850 <-> 1092 +1851 <-> 934, 1395 +1852 <-> 198, 1569 +1853 <-> 718, 1178, 1387 +1854 <-> 588, 1197, 1612 +1855 <-> 162, 734, 1663 +1856 <-> 236, 751 +1857 <-> 1371 +1858 <-> 1015 +1859 <-> 1768 +1860 <-> 940, 1270, 1274, 1442, 1792 +1861 <-> 1014, 1795 +1862 <-> 1142, 1252 +1863 <-> 281 +1864 <-> 717 +1865 <-> 1865 +1866 <-> 574, 602, 1394, 1575 +1867 <-> 707, 1011 +1868 <-> 659, 1868 +1869 <-> 173, 1991 +1870 <-> 391, 828, 956, 1880 +1871 <-> 189, 692 +1872 <-> 1630 +1873 <-> 42, 1753 +1874 <-> 883 +1875 <-> 11, 1771 +1876 <-> 158 +1877 <-> 186 +1878 <-> 796, 1385 +1879 <-> 486, 1824 +1880 <-> 920, 1870 +1881 <-> 433, 573, 905 +1882 <-> 625, 1954 +1883 <-> 300, 1700 +1884 <-> 1884 +1885 <-> 1291, 1510 +1886 <-> 19, 209, 1300, 1594 +1887 <-> 277 +1888 <-> 85 +1889 <-> 489, 1286, 1562 +1890 <-> 170, 832 +1891 <-> 1211, 1592, 1973 +1892 <-> 611, 697, 914 +1893 <-> 1224 +1894 <-> 775, 1601 +1895 <-> 308, 323, 618 +1896 <-> 1106 +1897 <-> 118, 368, 408 +1898 <-> 1316, 1560, 1944 +1899 <-> 463, 1050 +1900 <-> 1088, 1690, 1951 +1901 <-> 16, 27 +1902 <-> 981, 1714 +1903 <-> 1380 +1904 <-> 278, 1052 +1905 <-> 20 +1906 <-> 671, 1225, 1780 +1907 <-> 800 +1908 <-> 583 +1909 <-> 1361, 1940 +1910 <-> 134, 967, 1545 +1911 <-> 1973 +1912 <-> 1262 +1913 <-> 832, 1426, 1729, 1828 +1914 <-> 1914 +1915 <-> 1399, 1589 +1916 <-> 650, 1916 +1917 <-> 726, 1917 +1918 <-> 1040 +1919 <-> 196, 1378, 1919 +1920 <-> 1, 218 +1921 <-> 1670, 1952 +1922 <-> 1381 +1923 <-> 892, 1012, 1247 +1924 <-> 373, 904 +1925 <-> 210, 1935 +1926 <-> 543, 1013, 1805 +1927 <-> 1102, 1822 +1928 <-> 346, 1928 +1929 <-> 1661 +1930 <-> 19 +1931 <-> 983, 1555 +1932 <-> 685 +1933 <-> 16, 1190, 1627, 1933 +1934 <-> 288, 1243 +1935 <-> 535, 1697, 1925 +1936 <-> 295 +1937 <-> 112, 157, 1728 +1938 <-> 293 +1939 <-> 689, 1059, 1463 +1940 <-> 616, 1909 +1941 <-> 1764 +1942 <-> 243, 256, 1546 +1943 <-> 1950 +1944 <-> 260, 1898 +1945 <-> 1504 +1946 <-> 1946 +1947 <-> 87, 1129, 1179, 1682 +1948 <-> 294 +1949 <-> 1560 +1950 <-> 21, 1943 +1951 <-> 407, 1900 +1952 <-> 1741, 1921 +1953 <-> 1067 +1954 <-> 696, 1882 +1955 <-> 754 +1956 <-> 1457 +1957 <-> 1322, 1621 +1958 <-> 48, 708, 1696 +1959 <-> 1959 +1960 <-> 389, 1783 +1961 <-> 1652 +1962 <-> 29 +1963 <-> 914 +1964 <-> 1428, 1799 +1965 <-> 1825 +1966 <-> 1385 +1967 <-> 1168 +1968 <-> 265, 475 +1969 <-> 4, 1781 +1970 <-> 315, 926, 1837 +1971 <-> 242, 545, 1971 +1972 <-> 1972 +1973 <-> 997, 1891, 1911 +1974 <-> 885 +1975 <-> 1196, 1669 +1976 <-> 1709 +1977 <-> 1977 +1978 <-> 1978 +1979 <-> 1979 +1980 <-> 598, 1487 +1981 <-> 1793 +1982 <-> 1553 +1983 <-> 1054, 1604, 1783 +1984 <-> 731, 1652 +1985 <-> 1355 +1986 <-> 795 +1987 <-> 1573, 1676 +1988 <-> 495, 1023, 1433 +1989 <-> 1617, 1762 +1990 <-> 376 +1991 <-> 1869 +1992 <-> 1035, 1655 +1993 <-> 1411 +1994 <-> 1235, 1994 +1995 <-> 57, 1209, 1572 +1996 <-> 181, 1815 +1997 <-> 395, 1436 +1998 <-> 1300 +1999 <-> 175, 1161 diff --git a/2017/inputs/day_13.txt b/2017/inputs/day_13.txt new file mode 100644 index 0000000..87bfdb7 --- /dev/null +++ b/2017/inputs/day_13.txt @@ -0,0 +1,43 @@ +0: 3 +1: 2 +2: 4 +4: 4 +6: 5 +8: 6 +10: 6 +12: 6 +14: 6 +16: 8 +18: 8 +20: 8 +22: 8 +24: 10 +26: 8 +28: 8 +30: 12 +32: 14 +34: 12 +36: 10 +38: 12 +40: 12 +42: 9 +44: 12 +46: 12 +48: 12 +50: 12 +52: 14 +54: 14 +56: 14 +58: 12 +60: 14 +62: 14 +64: 12 +66: 14 +70: 14 +72: 14 +74: 14 +76: 14 +80: 18 +88: 20 +90: 14 +98: 17 diff --git a/2017/inputs/day_13_example.txt b/2017/inputs/day_13_example.txt new file mode 100644 index 0000000..0de4bec --- /dev/null +++ b/2017/inputs/day_13_example.txt @@ -0,0 +1,5 @@ +0: 3 +1: 2 +4: 4 +6: 4 + diff --git a/2017/inputs/day_14.txt b/2017/inputs/day_14.txt new file mode 100644 index 0000000..1155654 --- /dev/null +++ b/2017/inputs/day_14.txt @@ -0,0 +1,2 @@ +uugsqrei + diff --git a/2017/inputs/day_14_example.txt b/2017/inputs/day_14_example.txt new file mode 100644 index 0000000..e0ffae2 --- /dev/null +++ b/2017/inputs/day_14_example.txt @@ -0,0 +1 @@ +flqrgnkx diff --git a/2017/inputs/day_15.txt b/2017/inputs/day_15.txt new file mode 100644 index 0000000..ffb6d14 --- /dev/null +++ b/2017/inputs/day_15.txt @@ -0,0 +1,2 @@ +Generator A starts with 591 +Generator B starts with 393 diff --git a/2017/inputs/day_16.txt b/2017/inputs/day_16.txt new file mode 100644 index 0000000..8e74751 --- /dev/null +++ b/2017/inputs/day_16.txt @@ -0,0 +1 @@ +x3/4,pm/e,x15/7,pp/l,x5/8,s15,x2/6,s9,x0/4,s7,x8/12,pc/b,x2/14,pe/d,x10/11,pg/o,x9/14,ph/n,x15/8,s13,pe/i,x3/7,s2,pd/b,x4/15,s11,x0/14,s10,x7/3,s8,x2/1,pj/i,s8,x10/14,s5,x4/1,pa/h,s11,x12/6,s1,x1/14,s11,x5/12,s4,pn/b,x7/9,pj/l,x1/8,pd/e,s6,pp/g,x10/2,pi/o,x15/5,pp/l,x6/13,s3,x5/12,pk/f,x1/8,s4,x11/10,s10,x4/15,pe/n,x1/5,s14,x7/2,pc/i,x4/10,pj/p,x6/15,s12,x5/0,pa/n,x8/12,s14,x3/5,pb/d,x4/12,s3,x9/6,pg/h,x3/1,s5,x4/10,pm/f,x12/2,s11,x15/13,pa/g,x0/2,s13,pj/i,s13,x6/10,pn/a,x2/1,pm/f,x10/12,s4,pi/c,x14/13,s4,x15/0,s7,x14/8,s5,x5/2,pe/d,x3/9,s14,x7/0,s10,x6/14,s8,x3/15,pn/j,x2/1,pf/a,x13/10,pe/m,x8/0,s2,x4/7,pc/l,s4,x2/0,s4,x3/4,s12,x11/2,s3,x5/8,s2,x4/6,pn/f,x15/5,s15,x4/12,s11,x1/13,pm/b,s13,pj/h,s15,x9/3,pd/l,x14/15,po/i,x10/7,pd/g,x11/13,s5,x9/14,s6,x1/0,s7,x5/8,s7,x0/11,s10,x7/12,s2,x8/9,s7,pb/j,x3/2,s10,x6/0,pe/l,x4/8,pf/p,x6/0,po/i,x7/2,s10,x10/3,pb/n,x2/13,s3,x15/3,ph/c,s14,x1/8,s10,x13/10,s5,x14/7,s7,x1/5,pk/f,x7/0,s11,x13/2,pc/d,x8/10,pi/h,x5/1,pe/f,s8,pa/j,x13/10,pc/f,s12,x9/12,pa/h,x7/0,s15,x8/13,s8,x15/11,pl/d,x2/8,s8,x3/14,s1,pa/e,x4/8,pp/n,x0/14,s3,x10/12,pg/c,x14/9,s2,x0/10,s11,x9/3,pn/a,x5/4,s15,x12/1,s6,x14/6,pf/c,s7,x15/5,s1,x12/13,s13,x9/4,s13,pb/p,x10/5,pe/c,x6/15,s7,x2/14,s15,x7/6,s13,x5/10,pb/l,x9/7,s14,x1/3,s12,x9/10,pn/h,x7/12,pc/k,x9/4,s2,x5/15,s10,x9/0,s2,x11/4,pg/e,x8/1,pm/h,x3/4,s14,x12/2,pi/d,x1/4,s15,x11/15,s14,x13/10,pb/o,x9/12,s5,x6/2,s13,x7/4,ph/m,s4,x8/12,pi/n,s15,x2/5,pj/p,x10/0,s4,x15/9,pn/m,x14/13,pd/b,x10/9,s5,x1/5,s2,x15/3,pe/j,s7,x0/6,s2,x8/9,s3,x2/3,s9,x5/12,pp/b,x6/3,pf/l,x9/0,s15,x3/2,s12,pb/m,x14/6,s12,x3/15,ph/f,x5/1,s13,x0/15,s8,x1/9,pa/p,s9,x15/13,s7,pf/b,x2/8,ph/g,x10/3,pi/o,x13/5,s1,x4/3,s7,x7/8,s13,x0/13,pn/h,x12/15,s14,x2/6,pc/d,x8/12,s5,x5/3,s10,x10/9,pb/p,x4/11,pm/k,x14/3,s12,po/h,x6/1,s14,x15/3,s13,x7/5,pe/i,x12/6,s8,x8/13,s2,x12/15,s15,x2/4,s13,x10/7,s11,x15/1,s4,x5/11,s8,x1/15,s15,x8/13,s8,x1/15,s5,pb/c,x11/10,s13,pm/p,x0/8,s12,x2/5,pj/i,x14/3,pl/o,x2/11,pe/j,x13/1,pa/l,x3/10,s11,x7/4,pj/m,x5/10,ph/g,x13/9,s5,x3/4,s1,x15/8,s4,x0/1,s5,pd/j,x9/12,s6,pk/g,x4/6,s4,x1/3,ph/n,s9,x4/10,pf/i,s10,pk/j,x3/1,s11,pe/h,x12/4,s6,x10/5,s12,x12/13,s15,x7/5,pn/l,x12/15,s9,x14/11,s8,x5/10,s2,x12/8,pc/b,x3/10,po/n,s14,x6/14,pl/j,x3/10,s4,x1/13,pe/c,x15/0,pa/b,x8/4,s4,pk/c,x5/12,s2,pi/g,x11/7,pe/l,x14/12,s5,x8/4,pg/f,x1/7,s8,x4/13,s12,x10/14,pc/h,x13/2,s1,x15/11,s3,x3/14,s5,pb/g,x2/7,s13,x9/3,s9,x13/1,s9,x3/14,s6,x5/0,s6,x8/14,s3,x11/13,s9,x1/5,s12,x4/2,pf/m,x6/5,pi/o,x15/2,s5,x12/5,pc/b,s2,x9/8,s9,x14/0,s6,x6/1,pe/n,x8/9,po/k,x15/4,pl/f,x11/14,s3,x7/15,s14,x14/12,pe/o,x15/7,s15,x6/1,s13,x13/12,pg/h,x5/0,pe/b,x1/9,s1,x8/2,s2,x3/1,pl/k,x9/0,s5,x8/2,pi/c,s1,x6/14,ph/p,x11/15,s4,x4/14,pn/i,x0/3,ph/p,x4/5,s6,x3/7,s3,pj/g,x0/4,po/k,x3/13,s14,x12/2,s8,x15/5,s11,x1/10,pj/e,x6/9,s14,x0/3,s12,x8/5,s10,x4/15,s13,x11/2,pi/m,x13/1,s13,x8/10,s9,x0/13,s14,x5/10,pd/a,x12/8,pg/h,s12,x9/0,s2,x5/2,pi/m,x6/0,s8,x15/13,s10,x6/2,pc/b,x10/4,s12,x15/1,s2,x12/5,pe/d,x10/8,pc/f,s10,x14/1,s9,x6/10,s2,x5/1,s2,x10/0,pp/l,x3/7,s8,x8/2,s13,x13/12,s11,x7/14,pc/k,x0/5,s15,x11/12,pa/g,x13/8,s11,x4/2,s14,x11/5,s8,x0/7,s15,x4/2,pj/n,x11/8,s10,pg/a,x6/10,s9,x2/11,po/h,x8/3,s12,pf/l,x0/1,s12,x10/9,pg/m,x5/2,pl/e,x12/6,s9,x1/14,s12,x10/5,pa/k,x6/12,pe/g,x10/7,pj/d,x13/0,s8,pm/k,x5/12,ph/a,x15/3,po/l,x9/6,pk/g,x7/3,s14,x4/14,s7,x10/11,pp/m,x8/14,s11,x15/0,s1,pe/d,x13/12,pa/k,x8/14,s5,x9/7,pm/g,x8/12,pd/j,x1/13,s9,x10/6,s2,x14/5,pf/e,s1,x4/2,s8,x3/13,pi/k,x11/10,pn/j,x3/7,s3,x1/12,s10,x14/2,s13,x0/10,s4,x12/8,pp/e,x6/7,s13,x5/13,s13,x3/10,s4,x9/12,s12,po/b,x5/4,s6,x0/10,s4,x12/5,pf/c,s10,x10/15,pe/l,x4/9,s14,x6/5,s1,x2/9,pb/m,s1,x4/8,s7,x1/12,s13,x0/14,pa/o,x12/7,pk/m,x1/10,s11,x15/13,s10,x9/0,s8,x1/7,s11,x9/12,s1,x10/13,s3,x11/14,s3,x12/2,s3,x13/7,s11,x11/0,pf/l,x8/10,s10,x12/7,s8,x8/5,s5,x15/1,pj/n,s9,pp/i,x6/12,s15,x0/1,pg/a,x10/15,s1,x1/0,s7,x12/14,pm/d,s15,x6/11,s1,x7/12,pa/h,x3/9,s12,x8/5,pm/b,x9/1,pp/j,x8/7,pb/k,x1/5,s12,x10/9,pa/i,x1/4,s15,x2/0,s3,x15/10,s14,x11/9,s14,x6/14,s11,x13/2,pl/g,x7/11,s10,x4/15,s15,x12/0,s8,x3/6,pa/f,x11/2,s6,x13/6,s10,pk/d,x10/9,po/m,x13/12,pc/b,x8/4,s13,x1/11,pn/o,x8/13,s14,x15/0,s8,x13/9,s15,pa/i,x6/2,s8,x15/1,pc/m,x10/9,s6,x6/5,s3,pg/l,x8/3,s13,pa/m,x2/13,s15,x0/12,s12,x5/11,s3,po/k,x1/15,pa/f,x14/6,s15,x1/15,s3,x14/4,s4,x15/9,s15,pm/n,x1/5,s15,x3/2,pp/h,x13/5,s13,pm/e,x7/10,s5,x15/9,s10,pn/g,x10/6,pb/l,x0/8,s9,x13/1,s14,x5/8,s7,x15/11,s2,x13/4,s14,x12/3,s15,pe/n,x4/0,pk/i,x13/9,s14,x5/15,s11,x3/11,pa/e,x4/5,s13,x3/10,pf/d,x14/0,s14,x10/12,pk/e,s1,x0/1,pm/o,x3/8,s13,x15/9,s7,x11/10,pg/n,s6,ph/p,s12,x12/15,pi/a,x9/0,pe/m,x4/13,pi/p,x11/5,pj/k,x7/6,s7,x3/12,s7,x0/9,pa/d,x15/10,s9,x2/11,s4,x6/1,s4,x13/9,pb/c,x0/11,po/n,x13/6,s7,x5/1,pj/e,x4/10,pp/h,x13/11,pc/d,x3/8,s12,x4/9,s5,pg/m,x13/14,pa/f,x15/3,pi/k,x9/5,pb/e,x3/12,s8,x5/10,s8,po/j,x7/2,s10,x10/11,pg/m,x8/4,s14,x9/11,s5,x2/3,s6,x1/14,pf/h,x2/3,s11,pc/b,s1,x5/6,s11,x13/10,ph/j,s8,x14/9,s5,x4/1,pf/n,x6/13,pc/h,s1,x12/2,pa/j,x1/4,s8,x12/5,ph/o,x6/11,s4,x7/2,pl/b,x9/6,s14,x8/10,pk/h,x0/4,s1,x2/10,pd/o,x4/13,s5,x0/14,s11,x4/10,pl/b,s6,x14/7,pf/o,x6/15,s12,x4/1,s4,x12/13,s6,x8/10,pd/h,s9,x11/0,pb/a,x12/5,pg/h,x15/11,s4,x8/12,s11,x7/14,s15,x8/3,s2,x12/4,po/e,x6/15,s10,x8/10,pi/d,x6/4,pk/g,x5/12,pa/i,x2/9,s13,x15/12,pc/g,x11/9,s11,x2/12,s5,x1/5,pj/p,x15/8,s9,x12/1,s1,x0/2,pf/l,s3,x11/6,s8,x0/10,s9,x5/1,pn/i,x9/2,pd/k,x4/1,pp/l,x10/5,s10,x8/3,s2,x6/9,pg/e,x8/4,s13,x9/2,s8,x14/0,pb/m,x15/3,pi/g,x13/11,s2,x4/14,pj/o,x7/12,s10,x5/2,pm/d,x6/14,pj/b,x10/4,s15,x9/14,s1,x13/3,s7,x8/9,s5,x11/10,pc/a,s12,x9/6,s5,x13/8,s9,x15/12,s5,x0/6,s13,x15/1,s2,x6/3,pd/g,s3,x1/14,s13,x15/7,s6,x12/11,ph/n,x13/2,s12,pm/d,x12/15,pc/p,s12,x14/3,s6,x7/12,pl/h,x6/2,s1,x7/0,pn/c,x13/15,pe/b,x6/11,s1,x2/8,s6,x6/9,s7,x14/1,ph/i,s15,x13/3,s14,x5/6,pm/p,x10/3,s7,pn/d,x12/14,s10,x4/7,s5,x9/2,s9,x10/5,s13,x12/13,ph/k,x15/6,pg/c,x11/4,s1,x9/7,s1,x4/15,pf/m,s10,x6/10,pi/o,x12/2,s8,x4/8,pn/h,x9/6,pd/g,x0/3,s9,x1/7,pj/h,x6/12,pk/f,x7/10,pi/n,x12/0,pb/k,x14/3,pc/g,x7/1,po/n,x4/10,s11,x3/8,s9,x12/6,s13,x7/10,pb/k,x13/5,pc/a,x7/15,s2,x9/12,s14,x11/2,s10,pb/j,x14/5,s14,x4/10,s12,x6/14,s3,x3/13,po/n,x14/7,pb/m,x9/2,pa/k,x14/8,pc/l,x6/10,pj/m,s9,x13/12,pn/a,x15/1,s14,x5/8,pm/c,s1,x11/0,pn/d,x5/14,pc/b,x9/1,s14,x2/8,pi/l,x13/15,s14,x11/2,po/b,s11,x12/10,s12,x7/4,s7,x14/13,pd/n,x6/12,ph/m,x3/10,pp/f,x0/2,pl/g,x5/6,s3,x2/12,s11,x6/5,s11,x13/2,s8,x10/1,s7,pp/d,x11/14,s3,x9/13,pk/o,x2/12,s11,x4/7,s7,x15/2,pl/j,x1/12,s1,x5/9,s12,x12/15,s15,x3/7,s2,x5/8,s14,x2/10,po/m,s9,x5/7,s13,x11/9,pk/g,x3/14,pb/m,x5/2,pk/p,x4/11,s7,x3/6,s4,pe/h,x5/10,pn/j,x0/13,pg/k,x3/11,s11,x4/8,s13,x2/7,po/p,x5/9,pi/f,x8/4,s3,pn/j,x3/13,s2,x12/14,s5,x1/5,s8,x11/15,pf/c,x14/10,s10,x12/0,pa/d,x15/8,s8,x3/0,s15,x1/10,s11,x2/14,pb/n,x5/10,ph/j,x2/12,s12,x8/0,pa/d,s1,x9/15,pm/g,x14/4,s5,x11/9,s14,x14/0,pj/f,x15/6,s14,x9/13,s14,x7/4,s3,x12/10,s4,x9/13,pd/l,x10/6,pe/f,x0/13,pm/h,x6/1,s1,x12/9,pf/p,x2/14,s11,x8/7,ph/l,x15/3,s15,x11/5,pf/p,x15/2,pm/g,x0/10,pe/n,s11,x5/8,pl/o,x0/7,pa/e,x14/10,s11,x15/5,s13,x9/6,pl/o,x14/7,s5,x8/13,pp/m,x0/3,s12,x1/10,pd/l,x15/11,pj/f,x14/10,s5,x1/3,pl/p,x4/7,s8,x12/9,pe/m,x8/14,pa/n,x3/12,ph/o,s10,pi/e,x5/0,pm/g,x3/14,s8,x12/8,s13,x3/13,pc/j,x1/14,s2,x10/6,pe/f,x7/4,s13,x15/12,s7,x2/7,s1,x11/0,s6,x10/7,pd/n,s5,x4/0,s2,x12/10,s13,x9/2,s8,x14/13,s2,x12/0,pk/m,s14,x1/10,pj/c,x9/15,pm/p,x5/14,s5,x0/13,s11,x12/15,s7,x0/13,pl/i,x4/5,pn/o,x8/6,s5,x5/1,pp/b,x14/15,pc/m,x4/3,s3,x5/7,pb/f,x6/8,pi/l,x11/0,pb/a,x6/14,s4,x8/13,s9,x9/7,s9,pc/o,x2/14,s9,x15/10,pl/i,x2/1,s15,pp/b,x8/13,pk/n,x3/11,s11,x6/4,s1,x15/13,pd/i,x5/7,s8,x15/14,s4,x12/3,s4,x13/2,s4,x10/3,s10,x1/14,s14,x9/0,s1,x8/14,pp/o,x0/11,pd/c,x12/9,s3,x14/6,s13,x4/11,s2,x9/12,pn/e,x0/6,pk/l,x11/4,s9,pd/c,x7/9,po/a,s14,x14/4,s10,pd/j,x6/15,s4,x4/11,pl/h,x1/8,pj/k,x2/10,s14,x14/1,pl/o,x11/0,s4,x13/10,ph/e,x1/6,s8,pm/j,x0/8,pc/o,x15/10,pf/m,x7/3,s10,x15/0,s1,x6/1,pe/l,x13/7,s10,x8/1,s12,x4/6,s11,x5/15,s15,x14/7,pb/g,x0/12,pf/o,x1/9,s8,x0/7,s10,x1/11,s7,x4/15,pl/j,x3/9,s9,x14/15,s12,x9/1,s7,x5/8,pm/n,x6/13,pk/b,x0/7,s8,x11/10,s3,x13/12,pn/h,x10/4,pa/p,x13/15,s12,x4/14,s13,x2/1,s5,x15/10,s10,x9/3,po/m,x15/11,s11,x8/6,s1,x11/9,s7,pb/l,s8,x8/0,s15,x15/5,s14,x8/10,s5,x15/14,pf/h,x10/13,s14,x5/9,pm/c,x14/8,s9,x9/7,pg/a,x1/11,s14,x8/3,pm/n,x9/4,s4,x2/6,s3,x3/5,pf/a,x9/0,pp/k,x13/14,s1,ph/e,x1/5,s13,x3/15,s5,x12/9,s3,x7/11,s1,x6/12,pm/b,x10/11,s7,x4/1,pn/l,x6/5,s6,x12/7,ph/o,x0/8,pg/f,x12/6,s5,x0/2,s1,x10/9,pa/c,x6/1,s12,pl/j,x4/15,pi/o,x3/11,s6,x6/9,s7,x2/8,ph/j,x9/12,s14,x6/4,s6,pm/k,x13/15,s10,x9/11,pp/c,x7/6,s2,x11/10,s15,x14/8,pl/i,x4/5,ph/c,x13/12,pl/g,x8/11,pd/p,x4/9,ph/e,x12/6,s5,x13/10,pn/c,x3/5,s5,x1/8,pk/d,x14/6,s10,x4/3,s10,x12/11,s2,x5/2,pi/j,s14,x11/15,s9,x1/9,pm/k,x10/15,pp/f,x5/4,s4,x2/7,s5,x10/13,pn/o,x1/11,s10,x0/12,pe/b,x5/4,s15,x12/14,pc/i,s2,x13/4,s14,x14/1,s1,x2/4,ph/m,x14/1,s15,x3/13,pc/b,x14/9,s4,x6/8,s9,x12/14,s5,x10/9,pa/k,x14/13,s3,x5/7,s4,pj/i,x6/4,s1,pe/a,x8/5,s14,x12/9,s9,x13/14,s11,x3/15,s3,x13/11,s6,x12/7,pc/m,x8/11,s11,x10/1,s10,x15/12,pp/g,x3/4,pm/c,x15/13,s12,x10/8,s8,x5/12,pj/h,x13/4,s7,x11/9,s15,x10/12,s7,x2/11,pf/m,s13,x15/4,s4,x5/3,s4,ph/p,x4/8,s6,x9/14,pa/b,x5/4,s11,x11/8,pf/m,x15/7,s7,x4/2,s4,x15/9,pp/g,x5/7,s1,x13/11,pd/m,x5/0,s6,x3/8,pb/e,x12/2,s3,x3/6,s15,x13/2,pg/o,x5/1,s9,x10/13,s1,x2/14,s5,x10/6,s9,x5/1,pj/h,x10/3,pc/b,x2/8,pd/j,x12/1,s9,x13/8,s12,x15/12,s5,x8/9,s15,x13/0,s9,x2/11,pm/i,x8/10,s3,x14/0,s10,x10/8,s12,x2/5,s8,x1/14,pa/d,x2/0,s3,x14/9,s15,x1/0,s8,x13/7,pi/g,x0/1,s10,x10/13,pl/d,s7,x2/8,s10,x0/15,s12,x4/3,pi/k,x11/5,s3,x7/2,s15,pg/f,x4/0,pp/c,x10/15,s10,pj/a,x4/2,pg/o,s13,x9/8,pi/f,x5/7,s12,x12/9,pe/m,x2/6,s5,x11/0,s8,x6/12,pd/a,x0/2,s7,x9/7,ph/e,x14/11,pl/c,x4/3,s11,x7/0,pd/b,x8/2,s7,x15/13,pf/p,x9/11,s9,x0/10,pd/g,x2/4,pa/j,x3/8,s5,x12/1,s12,x15/5,pb/e,x9/10,pj/p,x6/5,pm/k,x11/7,pd/h,x4/0,pf/b,x10/5,pn/a,x14/11,s14,pj/l,x7/1,s9,x5/13,pg/h,x1/11,po/c,s11,x7/12,s12,x2/14,s2,x15/10,pb/d,x8/13,po/h,x12/6,pl/e,x9/11,s6,x14/15,s13,x12/13,ph/d,x9/7,s5,x11/10,pj/b,x5/13,s12,x2/11,s3,x5/6,s11,x10/4,s2,x13/11,s15,x0/2,pa/n,x12/13,pb/h,x14/3,pf/e,x9/6,s8,pj/l,x12/13,pd/k,x15/0,s5,pg/m,x14/10,pe/k,x4/3,s14,x1/9,s1,x15/0,s5,x3/8,s10,x2/1,pn/i,x0/4,s10,pj/p,x7/5,s15,x3/14,s15,x7/5,s4,x15/6,s10,x7/3,s2,x8/12,s13,x10/14,s15,x3/12,pg/i,x1/9,s6,x4/3,ph/b,x0/5,s5,pa/c,s7,x15/8,s8,x0/10,s9,x9/12,s6,x11/7,s2,x15/1,pm/p,x8/2,s15,x3/4,s3,x6/5,pa/f,x14/8,pm/b,x15/11,s2,x0/3,s6,x12/9,pi/e,x15/7,pp/n,x4/2,s15,x15/0,pf/g,x13/14,pj/m,x1/0,pe/i,x10/11,pp/d,x15/6,s2,x10/13,pj/o,x12/9,ph/e,x14/10,pm/a,x3/0,s4,x15/4,s11,x14/8,pp/n,x6/0,s3,x10/3,s3,x13/0,s7,x5/2,s2,x1/13,pk/j,x9/10,pn/a,s14,x13/8,pc/k,x6/10,pi/j,x3/12,s2,x9/8,s7,x3/1,pl/e,x12/15,po/m,x5/1,s1,x2/7,pk/l,x3/15,s10,pi/c,x11/10,s15,x12/0,pj/g,x8/7,pi/k,x11/15,s6,x1/13,s11,x14/8,s11,x13/5,s2,x15/4,s9,x1/9,pm/p,x3/11,pb/g,s13,x9/0,pl/k,x6/2,pb/f,x11/4,s14,x8/3,s6,x4/6,s10,x13/15,s9,x9/6,s6,x14/4,pd/i,x10/12,pl/h,x11/13,po/n,x6/9,pg/p,x14/7,s1,x0/11,s13,x9/3,pi/j,x14/1,s8,x8/13,s12,x4/11,s8,x13/3,pd/e,x6/7,s10,x2/5,s11,x9/14,pl/g,x15/1,pn/a,x14/12,s8,x1/15,s11,x6/9,s8,x3/7,pd/g,x11/0,pj/b,s10,x8/1,pa/m,x4/10,pe/d,x2/6,pg/b,x13/0,s14,x3/12,s11,x9/15,s6,x14/10,pk/p,x6/3,s7,x13/15,s10,x10/3,pa/e,x4/0,s13,x3/7,pl/n,s5,x5/15,pj/b,x0/1,s10,x12/13,s2,x0/6,pl/g,x3/12,pm/c,x5/1,pn/p,x4/6,pk/d,x8/2,s6,x14/12,pi/l,x3/9,s12,x6/5,s1,x2/10,s12,x12/3,pe/n,x15/4,pf/l,x12/14,pb/d,s13,x7/9,s4,x11/3,pe/f,x6/13,po/j,s8,pe/h,s12,x11/12,s15,x1/3,pl/g,s12,x10/13,s9,x5/8,s6,x0/6,s4,x5/3,pj/m,x10/2,s13,x15/7,pe/g,x5/3,s12,x1/9,s12,x2/14,s4,x11/0,s11,x2/7,pi/k,x11/9,po/b,x14/13,s11,x2/12,s10,x6/5,s11,x8/11,s14,x3/4,s3,x12/8,s2,x11/6,s8,x7/5,s9,x3/9,s13,x10/14,s2,x2/0,s8,x5/7,s5,x14/2,s1,x4/13,s5,x14/8,s2,pp/m,s15,x13/1,s5,x6/7,s4,x11/12,s5,x14/3,s2,x8/10,s7,pb/f,s1,x7/6,s7,x15/9,s13,x13/12,pg/h,x3/4,s13,x13/9,s5,x12/6,pk/c,s10,x8/1,s11,x14/0,pm/p,s12,x2/1,pb/h,x0/4,pm/l,x13/6,s3,x5/14,s14,x10/3,po/j,x0/9,s12,x1/5,s9,x8/4,s1,x12/6,ph/g,x10/11,s5,x12/9,pd/n,x1/14,s6,x11/4,pi/e,x2/1,pn/f,x11/13,s1,x5/0,s2,x6/9,pa/e,x0/10,pg/f,x13/15,s9,x5/11,po/c,x15/13,s15,x1/7,pp/l,x6/15,pg/k,x12/14,s7,x10/1,s12,pf/i,x2/7,s9,x13/4,pl/d,x14/10,s10,pm/k,x15/1,pd/e,s1,x11/12,s2,pg/o,x6/9,s14,x14/2,s4,x8/10,s4,x4/14,s15,pa/k,x3/11,s14,x14/15,pl/c,x8/3,s13,x5/1,s14,x14/8,s13,x3/7,pf/p,x13/8,pg/l,x7/6,s2,x11/9,ph/o,x0/2,pd/e,x4/6,s5,x7/2,s2,pj/i,s5,x5/12,s13,x0/10,s5,x7/8,s1,x4/1,s6,x7/9,s10,x3/15,pd/p,x2/11,s9,x0/10,pa/f,x15/4,s1,x6/10,pb/p,x4/14,s7,x2/13,pg/c,x12/10,s1,x13/4,s1,x1/7,s4,x4/5,pn/k,x11/10,pj/i,x1/0,s7,x14/6,s9,x11/5,s10,x4/13,s7,x1/12,s9,x3/14,s13,x0/1,pc/d,x11/10,s7,x8/2,s2,x5/11,s8,x15/6,pf/j,x10/0,s5,pm/d,s5,x7/5,s6,pg/a,x1/9,s4,x3/14,s14,pj/k,x12/10,s4,x15/3,pn/p,x6/11,pa/d,x10/8,s15,x9/11,s2,x2/3,po/g,x12/15,s15,x0/13,pj/p,x4/9,s6,x15/11,pk/g,x5/12,s3,x9/4,pj/a,s6,x0/14,s12,x12/7,pm/k,x2/0,s7,x6/1,pa/l,x14/5,s12,x1/4,s10,pn/g,x14/10,s8,x6/8,po/p,s8,x1/10,pc/a,x9/2,pg/h,s15,x10/11,pc/m,x14/4,s8,x11/7,s13,x9/12,s1,x6/2,pj/b,x1/12,s1,x10/6,ph/i,x3/13,s10,x2/7,s9,x14/4,s8,x3/5,s7,x7/8,pk/m,x12/15,s14,x0/9,s6,x5/4,s13,x0/11,s15,x15/14,pa/h,x4/9,s10,x5/0,s1,x13/14,s8,x12/15,s6,x2/4,pp/l,x5/6,pk/o,x13/3,s3,x8/10,s5,x11/12,ph/a,x5/0,s2,x6/13,pp/m,x5/2,pe/d,x6/13,po/n,x7/9,s13,x14/8,pm/f,x1/11,s6,pj/i,x2/9,s10,x15/5,pf/l,x14/9,s6,x15/1,s2,x4/8,pm/o,x15/13,s10,x8/1,pc/b,s6,x3/7,s1,x13/2,s4,x4/1,s4,x2/11,pe/m,x14/4,s10,x7/9,pd/k,x2/13,po/c,x3/9,s10,x13/8,s14,x4/7,s5,x2/0,pb/f,x12/6,pe/p,x11/9,s9,x12/7,pm/i,x4/3,s6,x2/13,pg/j,x12/0,s3,pl/b,x11/13,s10,x15/8,s2,x9/5,s4,x6/10,s2,x5/13,s13,x7/11,s15,x4/2,s8,x0/11,ph/p,x5/2,pm/n,x4/0,pe/l,x13/8,s13,x10/6,pp/b,x7/9,s14,x1/0,po/i,x3/13,s5,x8/12,pm/e,s10,x9/0,pp/k,x4/13,s8,x5/10,s5,pc/d,x14/4,s5,x12/10,pj/l,x13/11,s2,x8/1,s11,x3/12,s6,x10/2,s6,x0/12,s15,x9/7,pb/p,s7,x2/3,s11,x8/1,pk/m,x5/15,pf/d,x11/6,s10,x1/8,s11,x10/9,pm/p,x7/11,pn/b,s5,x13/6,s2,x8/9,s5,x7/13,s13,x4/1,s12,x3/9,pd/f,x13/14,s8,x2/0,s10,x10/14,pb/h,x11/1,s2,x15/3,s5,x10/6,s11,x8/1,pm/g,x11/12,pa/b,x5/4,s12,x7/12,pg/o,x1/15,pn/d,x13/9,s7,x2/4,s4,x12/14,pm/i,s5,x8/11,pb/g,x9/0,s6,x1/14,s3,x4/9,pd/i,x2/6,s14,x3/7,s4,x8/13,pf/k,x6/9,s7,x10/14,s3,x8/9,s8,x0/15,s1,x8/9,pl/n,x11/12,s12,x3/9,pc/a,x11/4,s2,x1/12,s12,x4/10,pb/l,x3/8,s3,x0/1,s1,x10/8,s6,x7/6,pn/e,s6,x9/8,s12,x7/5,pm/k,x14/0,pb/i,x12/5,s1,x15/3,s14,x6/10,s15,x15/11,pa/f,s7,x3/4,pj/h,s9,x8/2,pb/g,x4/3,s15,x2/11,s9,x1/4,s2,x0/12,pf/c,x13/10,s11,x5/14,s8,x9/0,s9,x11/8,pj/n,x2/15,s8,pf/k,s10,pb/j,x10/6,s13,x13/2,pg/n,x11/10,pi/j,x6/0,s12,x10/9,s10,x12/2,s11,x7/13,pa/d,x3/15,s2,x11/12,s11,x10/5,s6,x8/12,s8,x5/15,s15,x13/6,s3,po/i,x11/12,s9,x15/1,pb/f,s2,x12/6,s9,x13/4,s5,pp/d,x5/2,s6,x0/6,s9,x9/11,s14,pa/o,x15/3,s8,x9/1,s8,x11/12,pe/i,x6/3,s8,x0/4,po/f,x7/11,pm/n,x15/8,pg/o,x12/3,s8,x14/8,pk/b,x12/1,s8,x9/4,s7,x10/12,s12,x4/6,pe/d,x10/2,pb/c,s15,x4/12,s10,x9/1,po/n,s8,x3/2,pm/g,x4/1,pi/p,s11,x13/15,pk/a,x9/0,pe/m,x15/14,s4,x6/7,pl/k,x10/13,s14,x7/3,pg/e,x11/1,ph/k,s9,x15/7,s11,x14/9,pc/i,x6/15,pn/f,s6,x9/3,pk/c,x1/8,s2,x9/4,s8,x7/13,s3,pa/o,s11,x14/15,pm/e,x11/8,s1,x6/0,pb/k,x11/15,s14,x12/6,s4,x1/8,pa/h,s9,x5/0,s4,x10/9,s3,x0/4,s1,x12/7,s8,x5/15,s3,x11/0,s1,x5/12,s7,x0/6,s14,pd/c,x3/7,pa/n,s5,x12/4,s2,x3/13,pg/e,x2/15,s10,x4/1,s12,x8/15,pn/l,x3/14,s4,x1/15,pe/j,x5/4,s6,x14/7,s2,x12/13,pc/g,x2/3,pn/b,x0/6,s9,x10/2,pc/a,x15/8,pf/g,x10/11,s1,x8/13,pe/h,x4/6,pj/g,s15,x9/12,pm/l,x15/10,s8,x7/12,s8,x6/9,pn/i,x4/0,pd/a,x3/1,s7,x2/4,s1,x10/0,s4,x9/11,pe/k,x12/15,s13,pf/i,x14/11,s2,x0/15,s11,x12/13,po/k,x1/7,pi/j,x5/2,pk/m,x0/10,s2,x5/4,pp/d,s6,x8/12,pe/c,x0/14,s6,x11/6,s9,x9/7,s7,x6/0,s10,x5/2,s5,x14/11,s12,x0/4,pp/a,x9/12,pm/d,x14/6,s2,x15/4,pl/c,x11/12,s4,x7/5,po/j,x14/1,s12,pn/e,x10/4,pm/a,x2/13,s10,x12/6,s2,x9/2,s4,x3/6,s6,x2/0,s15,x11/14,pn/c,x15/13,s4,x14/0,s4,x11/9,s13,x2/6,pm/b,s8,x15/1,po/n,x9/10,s10,x5/0,pg/j,x2/8,s13,x0/15,s7,x9/1,s3,x8/6,s9,x4/0,po/l,x14/5,pd/h,x8/4,pa/l,x13/11,s7,x15/14,pb/n,x10/8,pj/f,x15/13,s13,x6/5,s15,x1/11,pd/o,x3/9,s4,x14/11,pb/m,x5/15,pa/h,s6,x1/11,pj/b,x5/14,s15,x15/3,s11,x5/12,pa/m,x9/11,s1,x10/1,s5,x12/11,pc/i,x4/1,s6,x11/13,pl/f,x1/6,s11,x15/11,pi/h,x7/10,s14,x2/9,pd/m,x8/1,s13,x0/3,s3,x7/12,pj/e,x2/14,s7,x9/12,s4,x1/10,pp/g,x9/13,s14,x12/0,s13,x1/3,pi/o,x5/9,s5,x4/12,pf/m,s15,x11/3,s11,x13/4,po/k,x5/0,s11,x7/13,pl/d,x15/11,s14,x13/6,s14,pe/o,s11,x12/14,s14,pc/j,x5/7,pa/g,x6/15,s1,x14/3,pd/j,s15,x1/8,s14,x2/6,s3,x1/0,pb/n,x14/6,pg/e,x4/13,s4,x7/0,pf/n,s10,x6/12,pj/o,x9/14,s10,x11/1,pi/m,x7/8,pf/d,x11/14,s10,pm/b,x4/5,s9,x9/7,po/j,x4/15,pi/b,s4,x8/2,s1,x3/13,s12,x15/1,s11,pm/d,x11/8,s1,x12/6,pf/g,x1/7,pm/p,x15/5,s11,x8/14,pl/h,x0/1,pe/a,x4/10,pm/p,x6/12,po/f,x7/2,pp/m,x14/3,s4,x10/15,pa/f,x0/14,pc/b,x7/11,s1,x15/9,pa/o,x3/5,pd/e,x11/6,po/m,x15/12,s5,x10/6,pb/h,x2/12,s5,x10/4,pg/i,x14/12,s4,x8/1,s13,x3/13,pj/b,x5/0,s3,x6/14,pg/m,x7/3,s4,x10/1,pb/l,s12,x8/15,s6,pm/f,x6/9,s14,x14/3,pg/k,x5/12,pd/n,x6/14,pj/f,x10/12,s1,x14/1,pc/g,x10/7,s11,x4/14,s9,x3/15,s12,x12/11,s8,x5/1,s6,x2/13,s5,x6/8,pm/k,x14/5,pf/p,x0/11,s12,x7/13,s3,x3/14,pj/h,x6/2,pe/k,x4/7,po/h,x3/8,s5,x14/10,s12,x12/4,s7,x13/14,pm/i,x4/0,po/d,x12/7,pp/b,x15/10,s7,x8/5,pl/a,x6/10,s7,x13/15,s6,x3/8,s11,x13/12,s13,x14/6,pb/m,x13/9,pe/j,x15/11,pb/f,x5/13,s3,x4/1,s3,x12/7,s5,pk/c,x15/10,s11,x1/13,s15,x9/5,s1,x14/3,pn/p,s10,x7/15,s2,pl/d,x0/2,pa/m,s7,x1/13,s10,ph/e,x6/12,pn/a,x3/15,pg/i,x10/8,pd/o,x7/13,pc/a,x10/0,pi/b,x3/12,pc/h,x15/1,s1,x0/11,pe/f,x3/15,pm/k,x8/4,pf/b,x7/10,s3,x2/13,po/k,x6/1,pl/h,x7/3,s6,pf/o,x8/1,s10,x14/13,pl/p,x4/8,s5,x14/5,pb/o,x13/2,pf/c,x9/1,pk/o,x6/11,s4,x7/0,s6,x3/11,s3,pc/b,x2/5,s15,x4/15,pm/o,s11,x7/5,pb/n,x12/10,s11,x13/15,pp/c,x8/14,s12,x3/1,s1,pe/g,x4/14,s6,x3/13,pc/p,x10/8,pn/e,s11,x4/11,s1,x7/10,s4,x5/14,pd/g,x2/12,s5,x3/13,s14,pp/b,x14/4,pk/n,x3/1,pd/g,x11/10,pe/p,s6,x9/8,s10,x11/3,s1,x5/10,s13,x8/15,s2,x12/9,s1,x0/10,pa/i,x1/9,pd/o,x5/12,s13,x2/0,s10,x13/9,s14,pb/p,x0/10,pa/h,x9/5,s3,pm/k,x4/8,s10,x6/10,s4,x11/3,s12,x4/7,s13,x9/6,s5,pd/i,x7/10,po/l,x4/14,s1,x0/2,s6,x1/5,s9,pm/c,x14/4,pp/n,x2/5,pl/k,x15/4,s2,x1/14,s9,x0/13,s14,pm/i,s1,x8/2,s10,x12/13,s1,x8/2,s3,x6/1,pb/e,x4/3,s2,x2/12,s6,x0/5,po/j,x8/4,pi/a,x10/2,pp/f,s5,x4/8,pl/g,x1/0,s8,x12/3,s3,x5/15,s4,x3/0,pm/n,x11/6,s5,x14/13,s14,x6/3,s7,x2/1,s15,x7/6,s14,x5/9,s9,x1/15,s9,x6/0,s12,x7/9,s13,x13/12,s14,x14/9,s15,x8/13,s5,x5/14,s8,x11/13,pj/b,x2/3,pn/o,x15/5,s4,x6/13,s6,pd/l,x9/8,s1,x0/14,s10,x6/5,s2,pp/i,x12/9,s7,x14/2,ph/f,s4,pi/l,x15/11,s12,x13/2,pn/h,s6,x4/10,s15,x13/6,s15,x15/8,s5,x4/14,pf/i,x3/7,po/g,x2/4,s5,x14/8,s10,x9/3,s4,x2/13,pf/a,x15/11,pd/c,x12/13,s1,x10/11,s12,x1/7,s10,x14/15,s10,x6/3,s12,x9/15,s14,x3/10,s11,pa/b,x14/2,s12,x5/13,s5,x9/2,pn/k,x7/1,s7,x4/5,s13,x13/6,s5,x15/3,s4,x13/1,pa/h,s8,x3/4,pm/e,x5/10,pb/g,x3/15,pe/i,s7,x4/5,s2,x2/15,s1,pm/a,x6/0,s5,x13/11,pp/b,x5/9,s6,x2/10,pk/o,x1/13,s3,x10/14,s1,x6/5,s11,x2/7,pg/i,s12,x13/9,s8,x2/10,s11,pm/a,x5/14,pg/o,x11/4,s11,x6/13,pd/p,x4/5,s1,x10/13,s15,x0/2,s1,x3/10,s4,x5/9,s11,x3/13,s13,x5/9,s1,x11/8,s14,x14/4,s9,x12/6,pm/f,s15,x7/2,pc/k,x5/6,s14,x13/1,pa/i,s10,x4/9,ph/c,x6/5,s1,x11/14,s1,x9/13,s14,pa/j,x7/14,pi/b,x12/10,pd/a,x0/11,s15,x12/7,pb/i,s12,x9/15,pe/f,x5/3,s7,x10/4,pg/i,s2,x1/6,s15,x8/14,po/j,s10,x9/11,pe/d,x2/3,s11,x14/10,s5,x13/3,pm/l,x7/15,pn/e,x12/6,s12,x8/5,s1,x1/14,s5,x6/7,s2,x3/12,s3,x5/15,s4,x13/3,s2,x11/2,pd/b,x7/0,s10,x13/8,s6,x6/5,s13,x7/8,pg/l,s10,x11/9,pn/a,x8/1,pm/f,s14,x15/14,s14,x2/9,s12,x13/11,s8,x5/2,pk/o,x7/11,pf/j,x15/13,pi/m,x1/7,s15,x13/14,s3,x12/0,s4,x6/1,s9,ph/l,x8/2,s4,x12/10,pm/n,x11/1,pl/j,x2/6,s7,x8/5,s7,x15/13,s6,x8/7,s2,x2/3,pk/p,x0/9,s9,x6/10,po/e,x3/14,pa/p,x8/15,s6,x3/7,s12,x14/9,s13,x2/8,pi/c,x13/15,s6,x1/3,pp/j,x5/10,s8,x15/1,po/f,x13/6,s13,x10/12,pp/j,x2/7,s14,x5/4,pe/a,x3/11,s9,x13/9,s10,x5/11,pg/n,x9/7,pa/l,x1/14,s6,x9/10,s14,x13/3,pn/o,x15/9,s3,x11/10,s7,x13/3,s7,x12/10,s1,x7/14,s4,x9/15,s8,x8/7,s3,x5/14,s7,x11/13,pc/g,x4/9,pi/n,x2/3,s11,x11/10,s13,x5/12,pf/e,x3/2,s4,x10/1,s12,po/m,x9/0,s6,x2/14,pl/f,x12/3,s6,x9/2,s10,x15/6,pi/c,x2/7,s7,x14/0,pl/m,x13/1,pe/p,x9/2,pb/j,x8/1,s11,x3/11,s4,x15/12,s7,x14/9,pg/l,x3/0,pa/p,x13/4,s5,x1/8,s10,x10/3,s6,x6/12,s8,x10/7,s1,x9/13,pk/h,x2/7,s15,pi/b,s5,pe/j,x12/6,pn/k,s14,x4/5,pi/b,x14/15,s15,x7/1,pc/a,x8/10,s6,x0/1,s4,x7/9,s10,x13/1,ph/l,x15/11,pg/a,x7/3,s4,x15/1,s1,x14/7,s13,x6/15,s8,x0/10,pm/o,x4/6,s8,x3/13,s2,x9/6,pg/p,x3/11,pi/k,x6/14,s7,x7/10,pe/l,x8/15,s9,pg/c,x7/11,pf/d,x2/8,s12,x15/11,s6,x5/9,pk/i,s5,x7/10,pa/g,x12/8,s5,x7/15,s6,x13/1,pf/b,x3/7,ph/n,x15/13,s4,x9/4,pc/g,x3/2,s12,x11/12,pm/o,x14/6,s6,pj/i,x3/4,s7,x12/0,pk/b,s11,x15/1,s14,pn/d,x11/0,pg/m,x12/1,s4,x5/7,s8,x9/15,s3,pj/h,x0/1,s10,x2/4,pd/m,x13/14,s11,pb/p,x3/10,s5,x15/8,pm/c,x4/14,s4,x5/8,s2,pa/h,x14/2,pe/i,x15/10,pp/b,x14/5,s15,x13/7,s12,x5/6,pa/c,x11/12,s9,x10/5,s7,x0/13,ph/f,s10,x3/12,s8,x15/2,pp/a,x5/0,s14,x13/11,s2,pn/e,x15/0,s11,x4/13,po/c,x2/5,s13,x11/1,s5,x12/2,s15,x15/13,s14,x9/5,s10,x13/12,pn/e,x10/8,pk/i,x0/9,s8,x2/10,s1,x8/0,po/c,x10/14,pb/h,x0/5,pn/i,x14/10,s2,x3/6,s8,x1/10,s15,x2/0,s13,x15/8,pc/h,x2/3,s15,x5/9,s11,pb/a,x14/4,s10,x13/7,s11,x6/2,s1,x5/4,pj/e,x9/3,ph/l,x15/4,s3,x5/0,s4,x10/3,s4,x4/14,pm/d,x13/9,s3,x15/7,s6,x9/14,s8,x2/10,s7,x0/4,s4,x11/6,pp/a,x13/4,s4,x0/12,s9,x14/8,pc/n,x4/2,s14,x11/9,pj/k,s14,x15/10,pd/g,x6/7,s8,x8/15,s8,pm/j,x11/1,pg/a,x5/8,pk/i,x10/2,s13,x5/14,s15,x1/15,pl/m,x5/14,s3,x10/3,pj/g,x13/9,ph/p,x5/2,pi/o,x15/12,s11,x6/10,pg/l,x8/5,s8,x4/13,pe/k,x3/0,pn/j,x2/5,s3,x10/8,pd/m,s10,x2/12,s14,x0/7,s10,x15/3,s15,x6/13,s14,x4/0,s15,x11/6,s2,x3/13,s8,x4/14,ph/k,s2,x15/6,pe/o,x3/14,s11,x1/7,s7,x2/11,pa/l,x3/0,pf/o,x4/7,s10,x11/6,pg/i,s6,pj/n,s14,x9/4,ph/d,x2/12,s13,x13/0,s13,x3/8,po/p,x14/11,s1,x0/10,pj/m,x12/1,s10,x15/11,pn/a,x2/14,ph/j,s3,x10/11,s12,x6/15,s3,x11/14,pp/c,x5/6,s4,x14/12,s8,x7/15,s2,x10/2,pl/m,x0/12,po/n,x8/5,s3,x4/14,pi/a,s13,x12/5,pd/j,x15/2,s13,x14/7,s5,x5/3,s13,x11/6,pa/c,x4/12,pp/e,x14/0,s13,x8/11,s6,x14/13,s10,x2/11,pk/i,s9,ph/f,x5/9,s5,x7/12,pk/a,x11/8,pb/n,x15/0,s3,x6/4,pl/m,x12/11,s10,x4/15,s15,x13/10,pj/p,x8/14,pg/m,x4/3,s10,x0/2,s15,x6/4,s14,pd/f,x3/12,s3,x14/9,pp/l,x3/15,s10,x4/14,pi/d,x12/1,s1,x4/11,s3,x14/3,s2,x5/8,s12,pj/p,x2/10,s3,x3/12,s14,x11/1,s1,x13/3,s5,x6/0,pl/g,x4/2,s6,x14/10,s11,x0/11,ph/j,x14/2,s13,x3/11,s5,x10/7,s8,x15/12,s8,x4/5,s10,x13/14,s11,x5/8,pg/p,x1/7,s13,x11/8,s8,x1/4,pf/h,s5,x9/12,po/k,x1/4,s10,x3/7,s8,x9/8,s13,x5/1,s11,x13/14,s2,x8/10,pf/e,s1,x12/9,po/k,s10,x11/15,s6,x7/1,s6,x8/9,pe/p,s13,x10/3,s2,x8/9,pb/c,x2/15,s11,x7/11,s3,x9/10,s15,x6/7,s5,x10/13,pa/e,x7/11,s10,x12/10,pm/l,x8/13,s9,pj/n,x15/11,pf/i,s11,x7/2,s14,x0/10,s15,x1/5,s7,x8/3,s8,x5/11,s15,pl/h,x4/2,s10,x6/8,s8,pb/g,x12/2,s11,x6/11,s6,pc/j,x14/12,s5,x6/8,s9,x11/9,s13,x12/5,s5,x3/14,s12,x1/0,pd/b,x4/5,s3,x0/6,s5,x14/15,pa/e,x7/1,s6,x11/15,s13,x14/1,s15,x10/6,pm/i,x13/2,pl/n,x6/15,pj/i,x5/7,s3,x0/8,s4,x2/9,s11,x1/3,pg/c,x11/15,pf/k,x0/9,s11,x10/7,pl/d,s11,x14/1,s1,x0/7,s12,pp/e,x10/6,pf/d,x9/4,pj/c,x7/0,s12,x14/3,s1,x9/12,s2,x15/11,s2,x12/14,s12,x4/5,pp/d,x15/12,po/h,x13/9,s4,x3/6,pa/g,x8/10,po/d,x12/14,s7,x13/9,s4,x7/12,s7,x1/6,pg/m,x2/4,s11,x5/9,s7,pc/i,x13/2,s4,x6/15,pg/o,x8/11,s15,x4/6,s5,x10/12,pe/b,x9/14,pc/a,x4/6,s10,pg/f,s5,x12/9,s9,x13/15,s9,x0/5,s10,x8/10,s1,x6/5,s9,x2/0,ph/e,x4/14,s12,x2/11,pd/k,x13/9,s4,x7/4,ph/n,s11,x8/13,pp/i,x6/11,s2,x5/15,s4,pl/c,x12/3,s10,x1/15,pg/n,s9,x11/4,s3,x9/8,s7,x11/15,s10,po/f,x5/0,s15,pa/g,x14/3,ph/m,x15/12,s8,x8/2,s3,x1/6,s1,pf/b,x7/3,s12,x11/12,po/g,x13/4,s4,pi/n,x6/9,s4,x5/13,pj/f,x6/10,s7,x3/11,s3,pg/p,x1/15,po/k,x6/0,s11,x13/2,pe/m,x0/5,s15,x1/14,s7,x2/6,pf/l,s6,x15/9,s15,x8/12,pg/o,x10/1,s8,x7/9,pa/e,s9,x0/13,pj/d,x15/9,s5,x11/4,s4,x5/7,s15,x12/1,s14,x11/15,s3,x10/0,s13,x9/14,s11,pb/h,x8/12,pn/f,x0/14,pp/l,x8/13,s10,x2/1,s11,po/f,x14/8,pn/j,x2/5,pc/h,x7/10,pn/e,x8/15,s15,x12/11,pd/l,x13/3,s9,x1/11,s3,x12/13,pb/k,x2/9,pd/m,x7/5,pf/g,x13/11,s12,x14/2,s10,x3/13,pj/e,x7/15,s2,x9/10,pc/d,x6/8,s10,x7/9,pm/e,x12/6,s10,x7/8,pp/a,x0/9,s2,pj/i,x8/1,s15,x7/10,s10,x0/3,po/g,x13/14,s4,x15/3,s11,x4/8,s2,pp/d,x7/11,s1,x9/8,s3,x15/5,s15,x3/12,s12,x9/14,pa/j,x8/0,s7,x4/5,pk/o,x7/3,s9,x6/0,s10,x4/7,pe/i,s8,x13/8,s4,x9/0,pd/k,x5/13,s8,x10/15,pf/a,x11/9,s5,x6/7,s3,x5/11,s3,x15/1,pb/d,s11,x2/8,s15,x3/15,pg/c,x2/8,pl/k,x0/9,s9,pg/h,x7/4,pa/f,s3,x13/3,pd/i,x6/12,s2,x13/9,pa/n,x0/5,s5,x3/12,s15,pl/k,x7/6,s1,x2/11,s14,x3/4,s9,x14/12,s15,pj/i,x4/3,pg/p,x15/0,po/a,x7/3,pp/n,x15/4,pd/o,s4,x5/13,ph/c,s3,x1/3,pj/i,x7/11,pd/g,x9/10,po/i,x11/5,pk/h,x8/2,s4,x0/12,pf/l,x9/5,pa/g,s2,x13/3,pk/c,x11/0,s10,x3/8,s10,x10/1,pg/o,x3/11,s11,x9/12,s4,pm/n,x3/14,s5,x15/0,s4,x10/12,ph/b,x15/0,pj/o,x2/1,s6,x9/10,s11,x7/12,pm/l,x1/8,pi/e,x2/12,pb/f,x1/10,pm/j,x14/4,pf/h,x2/3,pc/d,x13/1,s4,x4/7,pk/g,x3/6,s9,x0/14,s6,x6/11,s1,x10/1,s5,x11/12,pp/o,x14/3,s13,x7/5,s8,x11/4,s12,pk/e,x6/5,po/m,x1/15,s3,x8/4,s15,x1/5,s4,x4/15,s9,x13/3,pg/d,s2,x7/5,s9,x13/2,pk/n,s3,x9/4,s1,x0/6,s15,pb/i,x14/10,pl/j,x1/12,pp/i,x14/15,s14,pn/m,s9,pj/b,x6/3,s12,pe/k,x1/10,po/b,x13/6,ph/l,x5/8,pk/e,x6/15,pn/b,x13/7,pe/f,x10/15,s14,x8/5,ph/b,x15/2,pj/k,x9/5,s12,pi/o,x0/2,s13,x4/12,pe/c,x9/5,pg/h,x3/2,pa/m,x0/10,s10,x12/9,pc/g,x1/5,s15,x6/12,pl/m,x1/8,s4,x11/10,pb/k,x12/14,pg/i,x0/7,pj/e,s1,x12/8,s12,x7/11,pm/p,x14/8,pl/e,s14,x9/2,pk/d,x8/10,s9,x6/4,s5,x2/1,pn/j,x5/7,s2,x9/10,s12,x8/12,s7,x3/10,s2,pp/l,x7/11,pf/a,x14/8,s15,x15/4,po/k,x14/2,s7,x11/5,pc/b,x1/9,s1,x8/11,s13,x1/15,pj/p,x9/7,pe/a,x11/0,pg/i,x9/15,s13,x4/8,pa/l,x13/14,pg/d,x15/1,s10,x7/11,s3,x4/3,s9,x7/14,pi/k,x15/9,s3,x8/6,s6,x14/5,pa/m,x8/9,pc/f,s5,x5/6,s11,pi/l,x11/4,s13,x8/7,pm/c,x12/15,pl/g,x0/2,s3,x11/8,ph/m,s3,x3/14,s3,pn/j,x10/4,s5,x6/5,s9,x9/10,pm/i,x0/7,s5,x8/6,pg/e,x11/12,s7,x14/4,s7,x1/8,pn/d,x12/3,pl/f,x5/10,s12,x0/11,s8,x7/3,pg/j,x0/13,s15,x14/9,s2,x8/4,po/p,x13/10,pn/f,x15/9,s8,x5/2,s2,pg/o,x9/11,s7,x12/0,pl/c,x13/11,s11,x7/9,po/j,x5/13,s4,x9/6,s9,x11/5,s1,x1/2,s15,x3/5,s8,x10/15,pb/n,x2/1,s7,x10/4,s1,x3/5,pd/p,x12/1,s1,x11/8,s1,x6/10,s3,x15/1,pf/k,x5/2,pn/h,x3/12,pp/o,x11/5,s11,x3/10,s3,x8/0,s13,pc/d,x15/11,po/a,x13/2,ph/l,s8,pb/i,x1/12,pe/o,x13/5,ph/n,s6,x2/3,s7,x14/1,s13,x8/15,s5,x4/13,pi/b,x8/2,s10,x10/9,ph/k,x6/14,pc/n,x9/12,ph/a,x7/8,s4,x11/1,s10,x12/2,s1,x0/5,po/l,s11,pa/d,x1/14,s13,x10/13,pg/e,s4,x1/7,s5,x4/13,pf/h,x2/6,pi/p,x10/3,s13,x0/5,pg/l,x10/8,s4,x15/2,s15,x13/4,pk/c,x3/14,s5,x4/11,s13,x8/6,s7,x5/2,pi/g,x14/13,s8,x11/5,s9,x10/15,pc/b,x8/2,s15,x5/0,pm/p,x13/4,s11,x5/9,pe/c,x11/0,po/d,x7/9,s6,x11/0,s5,x13/12,ph/k,x3/15,s6,x2/6,s13,x1/10,s14,x9/5,s9,x10/7,s1,x15/6,s7,x4/11,s7,x7/6,pa/j,x0/14,pe/g,x9/6,s7,x10/3,pi/l,x15/12,pk/g,x6/13,s15,x15/1,s3,x11/8,s8,pa/n,x7/15,s10,pi/p,s15,x1/13,s13,pc/a,x8/12,s9,x11/4,pl/m,x14/8,s10,x9/15,pj/p,x7/3,s4,x9/15,pn/b,x6/8,s4,x11/1,pa/g,s9,pk/i,x4/12,s8,x0/13,pn/j,x14/10,s2,x15/7,s5,x9/8,s15,x5/1,s15,x4/11,s6,x8/15,s12,x10/14,s14,x6/1,po/m,x10/3,s6,pe/i,x1/13,pc/l,x4/9,s2,pg/p,x2/13,s9,x3/6,s13,x10/13,s11,x0/8,pe/m,s5,x2/9,pi/c,x13/6,pm/h,s14,x5/4,pa/e,x15/7,s12,x13/2,s6,x1/4,s4,x11/5,s5,x9/14,pn/f,x12/5,s12,x9/0,s3,x15/3,s4,x10/9,po/j,x7/4,s12,x14/5,pb/h,x10/11,po/j,x14/4,s4,x11/5,s12,x12/15,pb/n,x5/13,pl/e,x14/12,pj/m,x3/6,s2,x4/12,s3,x9/5,ph/o,x1/4,s7,x6/5,s2,x0/8,pc/m,x12/4,s13,x7/1,s14,x9/4,s13,ph/k,x10/3,pe/d,x5/7,pb/n,x1/11,s7,x14/12,s4,x5/8,s15,x9/2,s2,x8/10,s15,x4/1,pd/a,x8/3,pk/b,x2/11,pg/o,x15/5,s2,x1/6,pp/n,x0/5,pf/g,s1,x14/12,s11,x2/6,pj/l,x3/7,s1,x4/15,ph/a,x3/6,s14,x2/12,pi/p,x15/13,pd/m,x3/2,pg/l,x5/13,s9,x4/14,pj/c,x5/13,s6,x0/7,s10,x8/10,pm/i,x12/4,s13,x10/0,s2,x5/6,s4,x3/7,pl/j,x12/10,s6,x9/6,s5,x14/8,s2,x1/2,s12,x6/12,pn/m,x11/7,s3,x0/12,s11,pb/p,s15,x10/8,s12,x4/1,s6,x15/5,pi/a,x9/1,s14,x15/5,s11,x8/12,po/g,x4/9,s3,pn/m,s14,pl/f,x3/2,pa/p,x14/4,s9,pe/n,x11/2,pc/b,x13/10,s14,x3/11,s3,pp/d,x14/15,s13,x11/9,s14,x0/12,s7,x6/14,s2,x8/9,s2,x2/10,s13,x14/11,pe/n,x9/6,s5,x5/0,s9,x11/14,ph/d,x1/12,s3,x9/0,pb/c,x6/1,pl/m,x7/0,s5,x2/8,pc/e,x9/11,pk/m,x0/4,pi/p,x7/9,s3,x11/4,s5,x9/15,s10,x7/14,ph/n,s8,x9/5,s14,x8/12,s3,x5/7,s7,x12/3,s7,x13/7,pi/d,x8/2,s15,x3/13,s11,x8/15,s2,x12/7,s13,x3/4,s11,x15/0,pl/o,x4/2,s10,pb/d,x7/8,s12,x10/3,s3,x5/0,pl/k,x9/2,s11,x10/7,s11,pi/h,x13/0,pm/j,x11/14,s8,x7/13,pk/c,s2,x6/14,pn/i,x5/1,s5,x10/8,s11,x9/13,s1,pb/c,x8/2,s13,pd/j,x15/5,s2,x3/2,s8,x11/7,s8,x2/1,s5,x9/10,s6,x4/7,s14,x11/15,s3,x1/14,s7,x7/9,s1,x8/13,pb/e,x6/11,pp/i,x2/5,s13,pa/n,x12/13,s2,x11/7,pi/k,x1/5,s3,x11/9,s2,x2/6,pc/l,x12/9,s6,x2/15,pi/a,x6/10,pn/d,x0/1,s11,x15/6,s13,x4/11,pg/f,s7,x6/9,s14,x1/11,po/m,x14/9,s9,x15/6,s10,x5/0,s12,x3/8,s12,x10/4,s13,pb/d,x11/9,pf/e,x8/6,s10,x9/14,s10,x1/10,s5,pl/n,x12/4,pp/f,x15/8,s5,x0/4,s11,x10/12,s13,x11/1,s6,pm/l,x5/2,s9,pf/a,x10/12,s5,x0/13,pk/p,x10/7,s8,x14/11,pj/f,x0/8,pl/b,x3/9,pe/n,x8/5,pm/d,x15/6,s13,x2/13,pp/n,x6/4,s4,x7/13,s1,x2/11,s3,x14/7,pi/a,x4/3,s3,x15/7,s1,x14/4,s6,x7/5,s13,x0/12,s10,ph/b,x3/10,pn/d,x2/1,pk/f,x3/5,pd/e,s3,x11/7,s8,x14/3,s3,x7/8,s2,x4/1,pm/f,x6/11,s4,x10/7,s9,x11/0,pj/i,s5,x3/1,s6,x5/0,pc/d,x11/13,s14,pf/j,x4/12,s6,x14/0,pm/n,x3/5,po/i,x13/12,pk/b,x0/15,s9,x2/5,s9,pa/j,s6,x3/12,s12,x8/2,pe/m,x13/5,s13,x7/4,s2,x2/15,po/h,x8/0,s15,pj/g,x9/12,s10,x13/6,s13,pl/n,x2/10,s6,x5/12,pe/p,x4/11,s13,x2/14,s14,x10/4,pj/h,x2/11,pi/p,x13/5,s12,x9/0,s14,x2/11,s8,x12/15,s7,x8/10,pe/j,x6/11,s12,pp/m,x5/4,pn/k,x7/6,s13,x12/5,s10,x10/0,s11,x1/6,pm/h,x13/9,pa/d,x10/3,s15,x0/13,s11,x6/1,s2,x0/7,s2,x13/14,pp/h,x0/5,pj/d,x7/9,pb/i,s2,x0/14,s4,x4/5,s11,x11/10,s14,x7/12,s8,x5/6,s12,x8/3,pg/m,x2/13,s12,x9/5,pc/o,x3/6,pe/b,x14/2,s4,x0/1,s14,x13/4,s2,x11/9,pa/k,x12/14,s4,x13/4,pg/p,x5/11,pb/d,x8/7,pa/n,x13/6,pd/g,x10/0,s8,pm/n,x13/4,pk/d,s9,x3/5,s6,x1/4,s15,x9/12,pm/b,x5/11,pl/a,x3/8,s2,x2/1,s11,x7/10,s8,po/c,x12/5,s4,x6/9,pl/p,x1/11,s8,x14/12,pa/i,x10/8,pl/e,x7/13,s14,x10/0,s9,x6/4,s14,x10/11,ph/g,x0/9,s4,x6/2,s10,x3/7,s14,x6/5,pj/k,s2,x3/10,s3,x5/8,pp/d,x9/3,s11,x12/6,s11,x8/10,s6,x5/6,ph/n,x4/1,s13,x2/8,pl/p,s7,x6/5,s5,x3/4,s4,x7/11,s15,x13/14,pb/g,x9/8,po/n,s14,x2/15,s13,x12/3,s15,x9/13,pa/f,x3/6,s13,x1/4,pn/b,x7/0,pl/f,x1/10,pa/c,x2/7,s5,x15/14,pj/g,s13,x3/0,s7,pc/d,x12/6,pa/p,x15/8,s13,x0/9,pm/l,x4/12,pk/a,x0/3,pg/i,x2/12,s13,x4/1,pe/p,x6/0,pm/a,x15/2,pe/l,x0/6,po/f,x11/10,s5,x6/0,s9,x11/15,s5,x1/7,s8,x9/3,pg/i,s4,pb/e,x11/6,pl/k,s3,x2/3,pf/b,x1/13,pk/h,x2/5,s6,x3/6,pn/f,x5/1,pe/h,x14/12,pn/j,x10/2,s3,x1/15,s12,x13/3,s12,x1/6,pm/k,x8/15,s5,x10/14,pg/c,s6,x8/2,s14,x4/12,pj/i,x8/0,s14,x13/15,po/e,s15,x7/1,s11,pj/h,x3/5,pb/n,x11/1,s13,x8/9,s10,x0/14,s8,x9/7,s7,x4/12,s6,pc/m,x13/0,s1,x8/15,s1,x0/2,s6,x10/3,s5,x7/12,s4,x1/2,s12,x13/4,s14,x12/2,pe/n,x0/9,s5,x5/15,s8,x3/0,s4,x5/1,pg/k,x4/6,s9,x13/3,s15,x10/7,s6,x9/15,pp/n,x6/11,pd/j,s10,x1/7,s10,x13/10,s15,x4/1,s6,x2/9,pp/h,x11/14,s6,x4/0,s1,x1/5,pn/c,x8/11,s6,pp/f,x0/13,pe/m,x3/8,s9,x2/6,s12,x8/7,s14,x12/1,s1,x13/3,s1,x4/11,s9,x7/2,pn/j,x15/6,s9,x13/9,s9,x3/0,pk/c,x14/10,pf/e,x13/3,s7,x7/4,pk/p,s8,x14/2,s9,x15/3,s13,x5/6,pd/l,x8/2,s5,pm/c,x11/3,pe/g,x6/5,s4,x15/0,s10,x14/9,pc/l,x7/12,pf/i,x14/2,s2,x11/6,s10,x15/12,pg/l,x3/14,pp/h,x9/8,pl/a,x0/14,pi/m,x7/9,s8,pg/c,x2/0,pe/l,s7,x5/6,s15,x9/0,s12,pf/d,x4/11,s12,x15/1,pi/e,x4/14,pb/k,x3/0,s4,x2/14,s9,x1/6,s7,x11/7,s12,x1/10,pp/n,x15/6,ph/k,x4/11,s11,x7/0,po/g,x15/8,s3,x12/14,pl/j,x11/5,pe/d,x6/13,ph/k,s8,x10/4,s7,x14/11,pn/b,x7/1,s3,x10/3,pj/k,x11/4,s4,x13/5,s14,x1/9,s12,x0/6,s8,x15/11,s1,x5/4,po/c,x14/0,pe/k,x5/8,pb/j,x15/14,s2,x0/10,s9,x11/9,s7,x3/0,s12,x5/14,s11,pc/p,x7/2,s3,x12/1,s5,x6/0,s13,x11/5,pm/b,x14/13,pd/j,x7/1,s10,x11/14,s5,x4/13,s12,x10/8,s14,x5/12,s6,x9/4,pm/c,x10/15,s6,x3/0,pk/o,x6/13,s11,x4/11,ph/e,x1/13,s6,x2/0,s13,x3/13,s7,x14/12,s10,pk/p,x8/9,s11,x10/2,s2,x7/6,pa/l,x14/13,s11,x3/15,s3,x12/11,s10,pb/c,x0/6,pe/n,x10/4,pf/c,x2/5,pj/e,x14/13,s12,x7/3,pd/n,x10/1,pc/b,x4/3,ph/k,x9/13,s2,x14/6,s2,x5/9,s5,x2/14,s7,pa/m,x11/0,s13,x7/3,s2,x4/1,pd/l,x7/13,pp/b,x8/4,s6,x10/5,pe/g,s14,x1/12,s12,x11/6,s6,x5/8,s5,x11/15,ph/c,x6/0,po/m,x4/10,s2,pe/d,s15,x11/15,ph/c,x1/9,s6,x3/8,pf/b,x10/11,pp/n,x5/13,pj/g,s4,x12/9,s14,x4/15,s6,x1/9,s1,pp/f,s4,x15/11,pa/g,x14/2,pn/o,s9,x8/3,s12,x6/13,pa/j,x1/10,pc/h,x3/12,s14,x2/5,pk/l,x12/7,pg/i,x2/15,pk/f,x14/5,pd/g,x4/6,pj/n,x10/13,s1,x15/3,s11,x4/8,s5,x15/12,s14,x9/10,pf/b,x8/3,s2,x0/15,s14,x14/7,po/d,x5/0,s5,x8/14,s2,x3/4,s4,x0/2,s2,x5/4,s9,pb/j,x15/9,pe/p,x0/5,s12,x2/12,s15,x13/0,s15,x10/9,s8,x4/6,po/g,x11/15,pc/f,x10/2,s11,x5/11,s12,x2/1,pd/j,s14,x12/5,s14,x11/6,pi/l,x7/5,s9,x6/2,s3,x7/15,s14,x3/2,s10,x0/10,pp/f,x11/14,s9,x10/13,s3,x9/2,po/e,x12/10,s2,x7/6,s10,x8/3,s11,x11/10,pf/j,x1/5,s9,x15/4,pb/g,x11/0,pk/f,x12/14,s10,x8/2,s5,x6/10,pi/n,s12,x0/8,pm/g,x4/13,s3,x6/3,pn/p,x8/9,s15,x3/4,s1,x5/9,pm/a,x1/4,pe/b,x8/13,s7,x6/7,pk/j,s11,x3/1,s4,x2/9,s14,x6/4,s14,pb/l,s13,x0/3,pf/j,x1/10,s8,x12/11,s12,pe/h,x14/15,s10,x13/3,s11,x6/12,s10,x5/0,s7,x10/14,s11,x4/3,pk/j,x13/0,s8,x14/9,s12,x3/13,pi/m,s11,x9/11,s9,x4/3,s9,x12/7,s3,x0/11,s14,x2/8,pl/h,x5/14,s12,x11/7,s13,x12/2,po/c,x11/8,s3,pm/n,s15,x15/10,pl/c,x8/0,s6,x1/6,pb/p,x4/0,s1,x5/3,pd/i,x2/1,pl/k,x4/13,s8,x3/1,s2,ph/p,x11/4,s5,x9/10,s13,x15/14,pl/f,x2/6,pi/e,x10/0,s3,pn/k,x15/5,s6,x10/9,s8,x8/0,pi/l,x7/1,pg/a,x9/8,pb/p,x7/5,pj/h,x10/0,s9,x11/1,s8,x15/8,s8,x3/9,pd/a,x14/2,pf/c,x10/3,s5,x6/5,s8,x0/10,pd/j,x15/2,s4,pn/o,s13,pj/i,x0/9,pl/b,s12,x11/1,po/g,x13/9,pe/k,x0/15,pl/m,x9/14,po/i,s7,x6/13,s8,x8/1,s3,x12/11,s15,x3/13,s12,x5/0,pk/c,s7,x10/9,pf/m,x3/8,s3,x9/7,s8,x0/4,s7,x14/3,s1,x1/9,pg/a,s3,x5/15,pe/f,x6/13,pb/k,x4/3,po/n,x8/14,pg/i,x11/15,pd/c,s14,x1/0,s13,x15/14,s4,x12/5,s5,x15/7,ph/e,s2,x5/13,s4,pg/k,x2/3,pa/n,x15/5,ph/l,s9,x13/9,s13,x0/8,pb/p,x13/2,s9,x11/4,pk/j,x6/5,s7,x7/1,s5,x5/2,pm/p,x9/14,s11,x2/10,pg/c,x8/9,s5,x4/11,s13,pn/a,x9/0,s13,x5/8,s1,x9/0,s2,pi/p,x4/8,s13,x12/0,pb/m,x4/3,s6,pk/i,x7/12,s11,x11/9,pc/e,x15/14,pn/m,x4/8,pc/e,x9/11,pi/a,x14/6,pl/o,x0/12,pa/g,x9/7,s1,x6/5,s1,x9/3,ph/k,x7/5,s10,x11/1,s4,x5/13,s13,x7/9,pb/c,x5/13,pd/a,s5,x1/6,s5,x13/5,s8,x0/12,pj/g,x13/2,s12,po/e,x5/4,pk/d,x9/13,pp/a,x10/5,pg/n,x0/7,s4,x12/2,pi/k,x5/15,pb/e,s13,po/g,x7/11,pd/a,x12/9,ph/e,x8/2,po/n,x12/7,pg/k,x6/5,s5,x12/4,s2,x10/5,pf/e,s4,x8/2,s5,x5/14,s10,x7/15,s5,x2/9,s8,x3/6,s11,x0/8,s8,pm/a,x3/13,pb/l,x8/4,pa/j,x11/6,s6,pn/k,x7/15,s14,x6/8,pj/a,x14/0,s3,x13/8,ph/i,s13,x3/1,pj/d,x10/14,s10,x7/4,pm/h,x13/10,pp/j,x14/9,pa/h,x2/15,s7,x6/1,s4,x0/4,s6,pj/p,x7/9,s13,x6/4,ph/b,x12/11,pd/f,x4/10,pb/h,x13/7,s8,x11/15,pn/d,x14/3,s11,x12/15,s2,x2/6,s5,x15/3,pk/l,x5/12,s2,x14/8,pc/g,x6/7,pf/p,x8/3,s12,x10/11,pm/o,x7/6,s10,x2/1,pp/j,x15/10,pa/n,x1/0,s9,x8/13,pg/e,x0/4,pd/m,x15/14,pc/j,x1/7,s4,x0/6,pb/o,x9/15,s15,x10/13,s2,pj/d,s9,x12/6,s5,x11/15,s7,x1/0,s6,x4/6,s2,x11/5,ph/n,x6/12,s14,x4/5,s6,x15/6,s8,x12/2,pb/i,x6/9,s15,x8/13,s2,x5/1,s6,x0/10,pe/d,x7/8,s10,x14/1,s13,x8/4,s12,x11/5,pb/m,x7/9,s2,x11/6,s11,x12/9,po/k,x11/4,pc/m,x1/8,pf/o,x3/13,s8,x10/9,s3,x13/12,pb/g,s8,x7/9,s9,x11/4,s4,x10/8,pi/m,x13/3,pa/d,x0/15,s6,x11/10,s14,x8/4,s13,x5/15,ph/n,x10/8,s4,x0/12,s1,x11/14,s5,x6/0,pa/b,s12,x1/11,s7,x3/9,pf/e,x13/15,pm/l,s1,x8/5,ph/f,x6/0,pe/m,x7/14,s1,x5/1,s11,x14/12,po/j,x13/15,pk/f,x4/11,ph/j,x5/8,s11,x15/1,s14,x2/13,s5,x14/1,pl/g,x11/2,s9,x8/7,pb/c,x2/14,s9,x9/12,s3,x4/3,s3,x10/11,s6,x1/15,pl/f,s13,x7/11,pm/n,x3/6,pl/p,x10/4,s10,x7/6,s6,x3/11,s8,x5/2,s1,x15/8,pj/g,x10/0,pa/e,x4/2,pp/c,x12/13,s3,x8/15,s5,x4/2,pf/l,x14/5,s1,x12/10,s4,pi/a,x3/2,po/e,x8/7,pi/c,x5/6,s11,x9/7,s3,x13/12,s15,x10/3,s3,x0/7,s7,x6/8,pj/l,x15/11,s14,x9/7,pp/a,s4,pk/g,x1/2,s7,x14/6,ph/i,x0/9,pp/f,s8,x5/3,s15,pc/b,x10/2,s15,x1/3,s6,x15/12,s6,x9/1,pm/f,x12/11,s3,x10/15,pj/k,x3/5,s5,x4/6,s15,x12/1,s11,x14/2,s14,x1/15,pb/d,x2/10,s4,x14/4,s5,x2/7,s15,pk/l,x10/14,pd/b,x0/1,s11,x14/7,pi/l,s3,x1/11,pb/m,x5/7,s12,x4/1,pk/c,s8,x11/2,s8,x1/13,s11,x3/14,pp/m,s15,x8/10,pk/b,x6/7,pf/j,x14/8,s7,x12/7,s6,x4/11,pe/n,s5,x1/3,s13,x5/14,pm/d,s9,x11/12,s8,x2/1,s2,x0/12,pg/p,x15/13,s14,x3/12,s8,x14/6,pe/j,x0/11,s10,x3/4,pp/b,x6/12,s6,x5/2,pc/h,x8/4,pp/k,x14/5,s14,x7/13,s3,x2/10,s3,x11/1,s4,pl/b,s9,x0/12,ph/i,x15/8,s12,pl/p,x5/0,s1,x2/9,s4,x15/4,s14,po/m,x2/14,s1,x4/7,s14,x8/6,s13,x5/10,s4,x3/11,s5,x9/2,s6,x5/10,pd/a,s11,x8/0,s6,x7/13,s4,pg/i,x11/3,s15,x15/13,pk/d,x7/8,pi/l,x1/2,pk/a,x9/13,s2,x12/14,s8,x13/9,s2,x0/15,pg/f,x11/4,pi/o,x0/7,s7,x6/4,pk/n,x14/5,s10,x13/12,pf/l,x3/14,s13,x8/11,pg/n,x1/9,s12,x5/14,s8,x7/3,s11,pf/j,x10/12,pd/e,x13/11,s13,x1/4,pc/n,x7/8,s9,pa/k,s9,x9/1,s9,x7/11,s10,x9/2,s7,x10/15,ph/d,x7/6,pl/m,x3/2,ph/f,x5/10,pp/g,s13,x12/6,pj/c,x10/8,s3,x6/11,pk/o,x12/15,s12,x10/0,pf/l,x6/1,pc/g,x0/4,s1,x15/7,s10,x9/12,pj/n,s12,x4/5,s7,x9/6,s10,x15/10,s10,x4/9,s10,x0/8,s6,x7/3,pm/g,x15/1,s13,x2/7,s12,x6/15,s2,x5/2,s3,x15/14,s5,x4/3,pc/l,x10/9,pa/e,x3/11,s4,x0/13,s2,x15/10,s8,x0/4,pp/j,x14/13,pl/d,s6,x1/6,pe/o,x14/13,ph/c,x0/6,s3,x1/2,pb/e,x4/5,s11,x1/3,pc/o,x2/9,s14,x12/11,pm/j,x1/7,s11,pi/l,x5/6,s12,x15/8,pj/f,x5/1,s9,x11/12,s3,pb/n,x10/2,s10,x1/4,s11,x12/0,s7,x13/7,s14,x0/3,s9,x8/15,pi/j,x0/11,s5,x13/15,s11,x7/11,ph/f,x8/10,pm/n,x13/12,ph/j,x8/10,s6,x7/5,s7,x4/3,pa/o,x8/15,s4,x3/1,s8,x6/10,s9,ph/c,s6,x12/14,s12,pp/i,s8,x4/9,s1,x8/12,s3,x2/6,s14,x4/11,s2,x8/5,s10,x7/4,s14,x8/12,s4,x5/2,s1,x8/9,s5,x7/12,pb/a,x11/3,s14,x13/12,s4,x9/6,pi/l,x15/2,pk/c,x12/7,pa/d,x9/4,s14,x1/14,pm/e,x6/9,s3,x7/8,s7,x6/14,s12,x3/7,s15,ph/d,s9,x6/12,pc/a,x7/11,s6,x8/12,s1,x3/5,s1,pm/p,x8/15,s14,x0/2,pn/d,x14/8,ph/c,x13/12,pg/i,s5,x8/14,pk/m,x15/2,pp/l,x0/12,s5,x2/7,pk/e,x1/13,pi/h,x6/9,s1,x2/12,s13,x7/10,s12,x12/14,po/k,x11/4,s1,x3/8,s1,x10/2,s9,x5/4,pj/h,x13/10,s8,x8/2,pd/p,x6/3,pi/n,s9,x4/12,pj/e,s5,x8/0,s9,x4/5,s12,x10/7,pm/d,x6/8,pe/i,x0/4,pb/j,s11,x3/13,s8,pg/c,x4/11,s9,x14/5,pl/n,x10/11,s6,x5/0,pk/b,x1/3,s13,x13/4,ph/n,x2/8,s10,x11/3,s6,x7/10,po/c,x3/14,pa/k,s1,x11/8,pb/n,x0/12,s4,x5/9,s6,x2/1,s6,x6/8,s3,x5/13,ph/f,x10/1,pb/l,s9,x12/11,s15,x5/15,s8,x3/1,pd/p,x11/0,s7,x9/15,s5,x0/7,pc/n,x12/10,ph/j,x14/9,s2,x15/0,s1,x7/10,pa/n,x2/15,s1,x11/4,s14,x2/6,pj/i,x13/11,s7,x14/10,pb/f,x8/6,s11,x7/12,pm/i,x13/14,pk/o,x7/12,s12,x3/8,pj/g,x13/7,s15,x1/4,ph/n,x0/15,pl/g,x12/5,s15,pd/h,s11,x9/3,pa/n,s2,x12/6,pk/j,x10/0,s7,x3/8,s13,x0/7,pa/i,x12/11,pj/f,x5/1,s11,x13/12,s9,x15/3,pp/m,x9/5,s8,x8/2,pd/e,s8,pm/n,x10/13,s7,pd/h,x4/9,pj/c,x3/7,s10,pa/l,x12/1,s3,x2/3,pi/o,x10/5,s7,x14/0,pl/m,x2/13,s1,x5/7,s7,x14/1,pi/e,s6,x2/15,s12,x9/3,pf/n,s2,x12/13,s2,x8/1,pa/k,x7/14,pe/p,x11/6,s8,x0/9,s6,x2/15,s13,x7/9,s3,x2/10,pc/o,x3/11,s15,x15/9,pp/k,x4/12,s14,x9/11,pl/i,s13,x6/0,s9,x2/14,pc/g,x9/11,s9,x2/12,s2,x0/3,pd/j,s5,pg/p,x9/6,s8,x10/12,s9,x7/5,s8,x14/13,s13,x8/11,pa/l,x1/0,s8,x11/5,pm/n,x3/10,s2,pc/g,x2/4,pj/d,x15/7,pc/b,s5,x10/12,s8,x15/14,pj/i,x4/11,s8,x1/7,s2,x13/3,pe/p,x15/2,ph/i,x7/10,s12,x13/11,s15,x14/1,s9,x6/11,s12,x1/12,s11,x4/9,s2,x12/8,pd/p,x5/3,po/f,s3,x14/1,s1,x0/3,s9,x8/9,s14,x4/0,s5,x2/6,s2,x0/14,s2,x3/12,s2,x15/9,s6,x6/3,s3,x4/7,pd/g,x2/3,s2,x7/0,s7,x11/6,s10,x9/15,s10,x5/3,s6,x9/2,pf/p,s9,pl/c,s14,x7/11,s3,x5/15,s1,x9/11,s6,x0/13,ph/g,x12/14,s12,x7/4,pm/k,x12/11,s4,x3/7,pl/h,x10/14,s2,pj/g,x0/11,s10,x9/15,s7,x1/7,s14,x3/10,s8,x12/1,s12,x2/5,pp/i,x4/6,s9,x8/2,s14,x0/4,s11,x11/9,s11,x13/6,s8,x0/1,pb/e,x10/5,s3,x2/13,s7,x7/15,s6,x6/8,pn/d,x10/14,s7,x13/5,pf/m,x7/0,pg/l,x8/2,s4,x9/0,pa/m,x2/7,s8,x10/0,pb/f,x15/1,s3,x9/10,pk/d,x14/0,s7,x12/1,pf/h,x9/7,s9,x4/11,pi/n,x0/14,s3,x5/2,s8,x11/0,s11,x15/5,pg/a,x4/6,pk/m,s4,x2/11,s4,x3/8,pi/o,x13/4,s6,x14/9,s14,x3/15,pl/j,x0/9,s12,x2/12,s8,x13/8,ph/n,x10/9,s9,x0/1,s1,x12/5,s3,x3/15,s14,x10/2,pi/p,x1/12,pd/b,s3,x11/2,s13,x10/15,s6,x12/3,s10,x6/15,s3,x10/3,s1,x4/13,s6,x14/5,po/m,x7/0,s6,x5/2,s11,x3/13,pb/d,x7/12,s15,x4/15,pp/c,x5/1,pg/n,x14/15,s13,x12/4,s3,x5/7,s15,x11/4,s3,x13/7,pl/k,x4/0,s3,x1/3,s3,x10/12,s7,pe/i,x11/6,s6,x0/15,s7,x14/12,s9,x10/3,pf/p,x1/11,po/c,s10,x3/15,s10,pi/k,x6/4,pm/g,s11,x1/10,s8,x6/13,s7,x2/14,s11,x15/13,s14,x5/2,pf/b,x13/0,pm/i,s7,x1/2,s13,x11/7,s9,x5/9,s10,x11/15,pb/o,x13/10,s11,x2/6,s4,x8/12,s3,x10/13,pc/n,s14,x7/9,pf/m,x6/8,pi/g,x13/9,s1,x15/3,pl/m,x1/5,s5,x3/4,pd/j,x14/9,s15,pe/f,x6/5,s11,x10/11,s11,x7/15,pp/a,s9,x11/14,po/c,s13,x8/13,s7,x7/11,pi/f,x14/6,s6,x10/15,pj/a,x13/6,s14,x7/1,pl/b,x2/14,s10,x3/15,s2,x9/8,po/d,x12/15,pn/h,x4/1,s5,x2/15,pp/f,s6,x10/7,s8,x3/1,s13,x11/5,s5,x2/1,pb/h,x15/0,s12,x10/4,s13,x9/6,s4,x3/4,s9,x9/8,s15,pj/e,s13,x12/11,s1,x8/14,s7,x12/11,po/g,x4/14,pa/e,s12,x6/2,pp/o,x7/10,s1,x11/5,ph/m,x7/1,pn/o,x5/15,pm/i,s12,x9/0,s3,x5/7,pa/n,x10/11,pk/b,s2,x6/14,pi/f,s2,x9/4,s4,x12/2,s6,x13/14,s13,x10/1,pk/e,s10,x6/3,s5,pd/n,x4/5,s10,pe/i,x1/14,s5,x12/10,pj/f,x0/9,pc/d,x13/14,s11,x3/5,pn/l,x6/2,s10,x1/3,s15,x2/14,s1,x4/10,s13,x7/13,s5,x3/1,s8,x7/2,pi/a,s15,x9/14,s14,x11/0,s5,x1/5,pj/c,x10/6,pp/k,x3/13,s5,x11/12,s13,x15/0,pl/c,x4/11,s2,x10/5,po/b,x8/2,pa/m,x0/11,s14,x6/15,s14,x5/12,pg/j,s5,x9/4,s4,x3/12,po/n,x15/11,ph/m,x4/13,pi/e,s12,x3/6,s13,pd/n,x8/11,s11,x3/0,s12,pc/b,x12/1,pf/d,x3/6,s4,x5/13,s2,x2/4,s2,x15/10,po/g,x14/6,s5,x12/8,s12,x3/7,s7,x14/8,pf/j,s5,x15/11,s8,x3/7,s12,x0/8,po/g,x3/10,pe/m,s13,x15/9,s7,x10/8,s8,x14/15,s13,pl/a,x6/2,s9,x7/9,pe/b,x2/15,s14,x3/13,s7,x14/7,s13,x0/4,s14,x13/9,pk/l,x15/6,s4,x13/4,po/c,x2/1,pa/p,x4/9,s14,x15/10,ph/c,x14/12,pj/g,s8,x2/6,s9,x0/1,s9,x7/11,s10,x5/15,pm/e,x9/14,pb/c,x3/15,s9,x6/7,pk/f,s8,x9/4,pg/b,x0/7,pn/j,x11/15,pf/e,x5/13,pb/m,x12/0,s6,x2/9,s7,x5/6,ph/l,s5,x1/0,pg/f,x8/6,pn/d,x0/14,po/a,x2/15,pb/c,s10,x13/4,po/l,x6/1,pc/h,s10,x2/3,pe/b,x12/7,s15,x9/0,s5,x13/8,s1,x5/6,pk/c,x13/11,s10,x7/14,s2,x10/1,s13,x5/14,pe/l,x8/13,po/b,x11/7,s10,x2/0,s4,x9/13,s13,x3/14,s13,x4/10,s14,x14/2,pj/g,x3/1,s15,x11/6,s3,x13/4,s1,x6/1,s14,x4/14,s6,pk/a,x12/11,s11,x9/15,s6,x12/2,ph/j,x0/1,pe/b,x14/6,s10,x13/7,pi/f,x14/2,s14,x12/0,s7,x1/9,pj/h,x14/13,pg/d,x6/12,s15,x1/7,s5,x9/0,s10,x1/7,pc/e,x15/14,s5,x13/0,s10,x15/7,pj/i,s3,x4/0,s14,x7/3,s15,x14/5,pf/m,x2/1,pb/a,x3/6,pe/n,x9/2,pk/i,x10/15,s2,x4/7,s13,x15/13,s11,x2/6,pp/j,x15/11,s15,x14/5,pn/i,x4/12,s13,x2/6,pg/p,x0/3,pd/a,x15/8,pk/b,x9/14,pf/n,s11,x10/12,pl/a,x2/1,s8,x11/8,pf/h,x12/2,pc/e,x11/5,s6,po/m,x13/9,s5,x0/6,s1,x5/14,s5,x2/8,s11,pj/n,x11/15,s2,x2/3,pe/f,x4/15,s15,x3/6,s14,x0/1,s15,x12/11,pa/c,x5/1,s2,x14/9,pn/p,x0/7,s5,x14/5,s7,pd/c,x11/9,s15,x2/8,pi/b,x15/9,pk/g,x7/3,s15,x2/1,ph/o,x14/6,s7,x12/2,s7,x6/3,s4,x2/8,s3,x4/11,s3,x6/8,s5,x14/15,pe/p,x4/10,s3,x2/6,s2,x15/7,pg/o,x8/11,pc/a,x12/15,s14,x7/13,s4,x14/8,pl/h,s14,pb/p,x12/5,pe/a,x4/7,ph/c,x10/2,pj/m,x6/7,pd/b,s6,x4/9,s12,x10/12,pl/p,x3/8,s13,x10/6,pj/b,x14/15,pn/a,x1/8,s13,x14/6,po/h,x12/9,s7,x5/2,s3,x8/12,s14,x5/14,pe/a,x0/1,s1,x12/3,pl/p,s9,x9/2,s13,x11/1,pg/d,x12/2,ph/f,s10,x11/3,s9,x4/2,pd/e,x14/9,pn/l,x13/6,pi/k,x15/1,s14,x6/12,s6,x15/0,s4,x8/11,pp/j,x9/0,pd/e,x11/4,s15,x8/9,pj/i,x15/10,s3,x5/2,pl/h,x15/8,pe/p,x12/4,s9,x8/2,s5,x10/6,s14,x0/9,s14,x5/3,pm/c,x11/1,pd/o,x9/15,s10,x4/8,s14,x6/7,s12,x14/5,s9,x12/11,s2,x10/13,pi/m,s15,x15/5,s7,x10/2,s6,pk/l,x12/6,pd/h,x11/10,s9,x1/14,s3,x7/12,pf/e,s14,x3/2,s5,x0/12,s8,pc/b,x1/8,s5,x6/9,s3,x10/8,po/m,x14/9,s4,x13/15,pn/f,x3/8,s6,x15/0,ph/d,x13/3,pi/l,s13,pa/p,x12/8,pb/j,x5/13,s2,x3/15,s5,ph/p,x4/1,pj/k,x11/2,s1,pl/o,x7/1,s4,x15/12,s3,x10/4,s10,x0/2,s7,x5/4,s10,x10/1,pb/c,s8,x13/8,s3,pd/p,x6/15,s1,x13/4,s3,x0/7,s8,x8/6,s4,x2/3,s5,x9/4,s4,x3/14,s15,x15/1,s12,x2/5,pg/i,x11/9,pc/d,x3/2,s14,x15/10,pj/p,x7/13,pg/f,x12/15,po/n,x5/1,s14,x6/3,s6,x5/4,s13,x0/7,s1,x1/5,s15,x3/8,s1,x14/11,s11,x5/3,s1,x11/4,s10,x14/9,s4,x13/11,s12,x12/10,s2,x9/2,s6,x12/6,s1,x9/1,pd/f,x10/4,pe/p,x12/3,s9,x2/11,s12,x1/12,s3,x3/4,s1,x9/12,pj/n,x11/10,s3,x6/14,s2,x4/8,s7,x11/14,s3,x9/1,s7,x5/13,po/d,x9/10,pj/e,x1/6,s5,x13/3,pc/d,s8,x4/1,pp/n,x10/11,pd/o,x5/13,s4,x10/8,s13,x12/1,s14,x9/2,s9,x4/0,s6,x11/10,s12,x15/5,s9,x12/6,s7,x15/1,s6,x9/8,s1,x5/15,pm/c,x6/14,s1,x1/10,s2,x11/5,s5,x0/3,s6,x14/1,pl/o,x8/10,s1,x2/14,s6,x15/5,pg/i,x3/8,s1,x0/6,s10,x1/14,s10,x13/2,s7,x6/10,s3,x2/15,s14,x11/0,pk/h,x10/12,s3,x1/6,s8,x10/9,pp/m,x5/7,s14,x8/15,s14,x0/9,pa/l,x13/15,pc/g,s13,x1/14,s5,x15/7,s7,x12/3,s5,x15/4,s8,x13/11,pk/d,x2/15,pp/l,x14/1,s4,x8/5,pm/i,x9/11,po/g,x1/7,s15,x9/13,s12,x3/6,s15,pa/n,x7/1,s14,x15/11,pm/p,x14/6,ph/b,x15/2,s3,x4/9,s4,x5/7,s5,x3/13,s6,x11/14,s8,x2/8,s6,x6/0,s5,x1/10,s6,x14/13,s1,x7/8,pm/e,x1/3,pb/j,x15/4,s10,x6/12,s9,x0/10,s15,pk/p,x5/4,s2,x3/9,pb/l,x10/13,s8,x2/15,pa/f,s14,x12/1,pe/k,x4/14,ph/j,x1/3,pd/l,x0/4,pb/k,x7/11,s12,x4/12,s4,x0/14,s8,x1/15,s9,x13/9,s2,x6/7,s3,x12/13,pg/e,x4/6,pf/c,x0/1,s10,x12/13,s2,x9/10,pe/g,x6/2,pl/f,x7/12,s2,x6/10,pj/g,s11,x3/2,s11,x11/0,po/a,x14/9,pg/l,x4/12,s7,x5/11,pm/b,s11,x12/10,po/a,x5/3,s3,x0/9,s6,x15/4,s3,x6/11,s1,x9/2,s9,x10/6,pe/g,s7,x9/2,s8,x10/13,s11,x6/15,s14,x12/11,pm/a,x7/14,po/c,x9/3,s13,x2/5,pd/f,x13/12,s10,pe/n,x4/9,pk/c,x2/5,s3,x8/10,s1,x1/7,s9,x6/14,s6,x8/4,pf/n,x0/9,s13,x14/2,pl/c,x11/8,pd/a,x2/9,s9,x7/5,pm/b,x1/11,s8,x0/4,pc/f,x12/13,s12,x11/6,s4,x4/3,ph/i,x15/1,pm/g,x4/3,s3,x2/8,s13,x14/0,pj/b,x7/2,pg/i,x11/13,pa/f,x15/7,s11,pn/i,x11/6,pd/g,x9/3,s14,x1/4,s6,x6/11,s10,x15/2,s11,x11/1,s10,x6/4,s6,x14/7,s9,ph/n,x5/11,s8,pj/e,x7/9,s6,x6/11,s2,pc/h,x10/7,s14,x9/1,s7,x15/5,pk/o,s3,x14/7,s7,x0/2,s12,x1/14,pp/a,s8,pk/m,x12/8,s12,x9/13,s6,pj/i,x10/6,s12,x4/15,pp/g,x7/5,s7,x14/15,s6,x5/13,s4,x9/8,pe/a,x0/11,s14,x15/2,pm/o,x11/7,s10,pi/g,x8/5,po/m,x3/12,s5,pg/c,x1/8,pd/o,x11/10,s2,x6/5,ph/p,x14/11,po/b,x9/2,s15,pj/i,s15,x12/14,s10,x11/7,pm/p,s5,x10/3,s10,x7/8,s15,x11/5,po/b,s5,x15/14,s10,x3/6,pd/f,x2/10,pm/e,x4/14,s12,x5/11,s8,x12/8,s11,x10/5,s12,x0/8,s3,x5/2,s10,x11/14,s4,x4/7,pl/n,s10,x14/8,s13,pm/k,x10/15,pi/f,s1,x0/14,s11,x2/13,pc/o,x10/4,pi/g,s1,x13/14,pa/j,x9/5,s1,x4/7,s5,x1/13,s4,x5/9,pi/b,x8/11,pj/a,x2/10,pe/f,x4/12,s10,x0/3,s5,x7/12,s11,x11/6,pi/k,x5/1,s1,x0/2,pl/f,x5/15,pp/c,x14/10,pa/k,s14,x7/11,ph/b,x0/5,pe/a,x14/7,ph/i,x0/13,s9,pb/j,x1/9,pc/k,x3/8,ph/n,x10/6,pi/o,x15/7,s15,x0/14,pj/f,s1,x4/5,s11,x12/11,s4,x3/6,s5,x1/12,pp/l,x2/4,s15,x8/3,s7,x7/12,pj/o,x4/13,pe/d,s2,x6/3,s15,x5/8,s14,x3/9,s1,x7/0,s11,x2/8,pp/i,x12/13,s15,x9/11,s4,x3/4,po/n,s12,x2/11,s14,x7/6,s4,x9/14,pm/a,x2/13,s12,x9/14,s14,x5/3,pp/j,x15/7,pd/k,x0/6,s9,x12/11,pn/i,s8,x5/14,s11,x4/10,s7,x11/6,s7,x5/2,s6,x11/7,s2,x0/9,ph/d,x1/2,s7,x3/8,s11,x6/9,po/e,x0/2,s9,x8/7,s12,x4/0,pb/n,x5/11,s4,x8/1,pm/p,x12/5,s6,x2/7,s9,x6/13,pk/f,x15/3,s15,x0/5,pi/j,x11/14,pl/e,x8/4,s10,x12/9,s3,x6/1,s3,x8/9,pg/k,x6/10,s3,x15/3,s1,x8/0,s1,x6/13,pa/h,x8/7,s4,pb/f,x9/2,s10,pi/a,x1/0,pl/j,x14/3,pf/d,x9/1,pe/i,x8/4,pa/f,x7/12,pc/h,x1/10,s13,x9/15,pb/f,x5/1,ph/j,x14/12,s10,pf/p,x8/1,s4,x6/2,pa/b,x3/7,pp/k,x5/11,ph/f,x10/12,s3,x0/8,pk/d,x10/4,pb/c,x0/13,pg/o,x10/2,s14,pb/k,x5/1,s3,x10/9,ph/j,x4/8,s7,x9/7,s6,x1/5,s9,x14/13,s3,x11/6,s15,x13/9,s4,x5/7,pn/b,x10/12,s8,x1/8,s7,x3/0,s9,pj/f,x7/6,s4,x8/1,s7,x12/5,pe/b,s13,x9/13,pn/d,x14/8,pb/f,x4/7,s9,x9/14,s13,x2/11,s15,x6/4,pn/g,x3/9,s5,x8/14,pp/m,x11/7,s6,pi/e,x15/1,s9,x10/8,s1,x6/1,s6,ph/n,x4/8,pd/k,s10,x9/0,s8,pf/g,x4/8,pk/l,s4,x7/0,s2,x1/10,s9,x8/6,pf/b,x3/11,ph/j,x6/14,pk/l,x2/1,pp/m,x4/10,pa/k,x11/8,pg/j,x6/13,pe/k,x11/9,pg/o,s2,x13/6,s1,x14/4,s2,x3/9,s6,x11/13,s7,x14/15,pe/l,x11/6,pf/d,x9/15,pn/h,x2/4,s7,pg/m,x3/15,s10,x4/11,s1,x7/10,po/d,x12/11,s1,x10/9,s1,x8/7,s6,x1/2,s10,x8/5,s14,x13/9,s10,x2/1,pl/p,x7/4,s12,x0/3,pm/k,x8/1,pp/d,x14/15,s15,x6/11,s4,x9/4,s8,x1/12,pj/a,x8/9,s14,x13/5,pd/f,x8/4,s1,x0/15,pm/p,x4/7,pf/e,x3/5,pp/k,x12/10,s11,x4/14,pn/f,x11/13,s3,x8/2,pi/j,x14/13,s1,x12/15,pd/l,x14/4,po/b,x9/6,s4,x10/2,s2,x1/0,s9,x5/7,pk/g,s7,x14/15,s13,x9/4,s9,pa/m,x1/3,pf/e,x6/2,pd/l,x13/9,s5,pj/n,s11,x4/7,pi/f,x10/3,pb/l,x4/7,pj/g,x15/13,s5,x8/7,s4,pk/l,x9/12,s4,x2/0,s9,po/g,x6/4,pb/k,x5/0,s4,x13/4,pe/l,s11,x14/1,s4,x7/11,s11,x10/6,s10,pj/h,s14,x13/9,s15,x4/1,pe/c,x11/15,s15,x5/2,pd/i,x1/3,pb/a,x2/11,s6,x0/12,s9,pj/i,x1/3,pb/e,s13,x6/15,s7,x7/14,pp/h,s11,x3/15,s6,x7/12,s9,x1/14,pl/m,x6/8,pd/j,x2/11,s7,x15/1,s8,x3/6,s1,x15/9,pi/g,x7/1,pd/b,x6/5,s3,x13/4,s1,x0/2,pp/e,x9/15,pa/n,x8/2,s4,x1/7,s14,x11/6,pg/f,x3/1,pl/o,x6/15,pg/p,x1/12,s12,x0/6,pe/b,x15/10,s6,x3/2,s14,x14/1,s6,x9/12,s2,x14/2,s11,x3/5,ph/a,x10/2,s15,x12/13,pg/n,s2,pe/a,x4/11,s15,x15/7,s7,x14/0,s15,x10/9,pd/l,x12/4,s4,x15/5,pn/i,x10/1,pc/j,x5/12,s13,x2/9,s10,x15/10,s12,x11/9,s13,x13/14,pe/a,x15/8,s7,pj/h,x0/11,s3,x10/6,pe/m,x13/5,pc/k,x11/0,pf/j,x6/4,pe/o,x8/0,pj/c,x15/13,s7,x10/8,s10,x5/6,s1,x2/15,s6,x9/4,pb/h,x8/12,pe/o,x7/9,pp/k,s9,x0/2,s5,x8/14,s2,x0/3,pj/m,x4/12,pg/n,s8,x5/1,s7,x4/14,s15,x5/8,s5,x0/14,s9,x9/2,s4,x14/15,pj/l,x0/13,s4,x14/15,pn/k,x1/8,s15,x2/5,po/c,x6/7,ph/a,s6,x8/1,pm/b,s2,x7/13,s7,x6/5,s14,x0/7,s9,x2/1,s7,x15/14,po/e,x3/13,s8,x14/7,pk/c,x15/4,s14,x5/10,s6,pp/m,x11/6,s10,x5/9,s6,x10/11,s4,x13/14,pa/h,s2,x3/5,s10,x6/11,pm/e,s4,x8/3,s14,pj/l,x1/0,s9,pn/i,x11/3,pg/j,x4/10,pk/n,x0/8,pc/p,x3/15,pd/j,x9/7,pg/i,x12/1,s11,x3/8,pp/a,x0/14,pf/j,x12/13,s14,x8/9,pi/m,x13/3,s3,x7/6,pd/h,s2,x8/0,s5,pa/p,x4/12,s13,x1/2,s1,x8/5,pf/k,x11/1,s12,x10/7,s11,x13/1,s3,x2/6,pc/i,x15/8,s6,x14/7,s7,x11/1,pn/h,x13/5,s10,pj/c,x9/3,po/l,x14/0,pj/p,x8/3,s13,x0/7,s13,x1/14,pl/m,x11/10,s15,x4/2,s11,x13/7,s1,pd/j,x1/4,s4,x6/3,s13,x15/7,s9,x0/3,pi/n,x4/5,pm/e,x14/13,po/n,x5/12,pd/i,x7/3,s2,x8/11,ph/a,x3/14,s4,x5/4,pd/c,x12/3,s15,x10/7,s9,x8/11,pf/n,x5/15,s4,x7/10,pm/c,s14,x15/9,pg/o,x1/7,s6,x9/5,s15,x2/3,pp/d,x13/7,pb/c,x1/8,s5,x2/12,s13,x14/13,s10,x15/9,s10,x8/3,s1,x1/11,s10,x3/9,pi/l,x7/5,s10,x14/1,pn/p,s1,x0/4,s14,x12/11,s6,pg/h,x2/4,pc/a,x14/13,s3,x11/6,pl/k,x3/14,s9,x10/2,pm/o,x3/5,pd/k,x13/4,s7,x3/14,ph/i,x13/4,s6,x5/12,s15,x8/15,s11,x9/3,pc/g,x10/14,s9,x8/5,pe/m,s10,x15/11,pk/h,x4/10,pi/a,x0/11,s4,x3/9,ph/e,x11/8,pn/f,x10/1,pb/h,s12,x2/9,s7,x10/15,pp/d,x11/7,s12,x5/15,pk/h,x8/1,s1,x14/15,s7 diff --git a/2017/inputs/day_17.txt b/2017/inputs/day_17.txt new file mode 100644 index 0000000..67bf40f --- /dev/null +++ b/2017/inputs/day_17.txt @@ -0,0 +1 @@ +371 diff --git a/2017/inputs/day_18.txt b/2017/inputs/day_18.txt new file mode 100644 index 0000000..8b74206 --- /dev/null +++ b/2017/inputs/day_18.txt @@ -0,0 +1,41 @@ +set i 31 +set a 1 +mul p 17 +jgz p p +mul a 2 +add i -1 +jgz i -2 +add a -1 +set i 127 +set p 735 +mul p 8505 +mod p a +mul p 129749 +add p 12345 +mod p a +set b p +mod b 10000 +snd b +add i -1 +jgz i -9 +jgz a 3 +rcv b +jgz b -1 +set f 0 +set i 126 +rcv a +rcv b +set p a +mul p -1 +add p b +jgz p 4 +snd a +set a b +jgz 1 3 +snd b +set f 1 +add i -1 +jgz i -11 +snd a +jgz f -16 +jgz a -19 diff --git a/2017/inputs/day_19.txt b/2017/inputs/day_19.txt new file mode 100644 index 0000000..b4826aa --- /dev/null +++ b/2017/inputs/day_19.txt @@ -0,0 +1,201 @@ + | + +-----------------------+ +-------------------------------------------------------------------------------------------+ + | | | | | + +-------------------|-----------------------|-----------------------+ +-----------------------------------------------------------------------|-----+ | + | | | | | | | + +-----------+ | +---------------------------------|-------------------------+ | | | + | | | | | | | | | + | +-----+ | | | | +---------------------|---------------------------------------+ | | | + | | | | | | | | | | | | | + | | | | +---|-------+ +---------------------------|---------------------------------------------------------------------|-----|-------------+ + | | | | | | | | | | | | | + +-------|-------------------------------|-+ +-+ | | | +---------------------+ +-+ | +-----------------------+ +-------------+ + | | | | | | | | | | | | | | | | | | | | | + | +---|---------|-----------------------|---|---|---|---------------|-----------------+ | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | + | | | +-|-----+ | | | | | | | | +-------------------------------------|-----------------------------------------|-+ + | | | | | | | | | | | | | | | | | | | | | + | +-------------|-----------------------|---|---|----Y------|-------|-----------------------------------------------------------+ | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | +-----------------------------------------------------------|-----|-------------------|-+ | | + | | | | | | | | | | | | | | | | | | | | | | | + | | +---------------------------|-----------|---------------|-------------------------------------------------------------------------------------|-----------------+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | +---------------------------+ | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-+ | | | | | | | | | | | | +-+ +-------------------------------------|-----------------------------------|-----+ | +-----+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +-|-|-------------------|-------------|-|---------|---+ | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +---|-+ | | | | | | | +-----|-------------|-----------|---|-------------------------------------------------------------|-|-----|-----------|-------|-|---+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +-|---|---+ | | | | | | | | +-------|-----|-|---------|-------|-|-----+ | | | | | | | | +-|---+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | +-|---+ | +---------|---|-----|-------------------------------|-----------------------|-----------+ +-|-------|-|---+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | +-|---------------|-------|-----|-------------|-----|---------+ | | +-|---+ | +-------------------+ | +-------------------|---------|-+ | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +-------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------|---+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | +-|---|-|-------|-----------|-----|---------|-------|-------|-+ | | +-+ | | | | +-----------+ | | | +-+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | +-----------------|---|---|-|---+ | +-----------------------|-------+ +-+ | | +-|-|---|-|-------|-+ | | +-+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | +---|-----|-------------|---|-+ +-------|---------+ | | | | | | | | | | | | | | | | | | | | +-+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-|-|-----|---|-|-|-------------------------------------------|-----|-|-------+ | | | | +-----|---|---------+ | | +-----------|---------+ | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-|---|-|-|-+ | +---|---|-------------------------+ | | | | | +---|-------|---|-+ +-|-|---|-|-----------|-----------|-----|-|-----|---|-|-----+ | +---|-----|---+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | +-----|-------------------+ | | | | +---|---------+ | | | | | | | | | | +-------|-|-----|-----|-------+ | | | +-+ | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | +---------------------|-+ | | | | | | +-----|---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | +-|-|-----|---|---|-|-|-|-|-------------------+ | | | | | | | | | +-|-----+ | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | +-|---|---------------------------|-------------+ | +---+ | | | | | | | | | | | | | | +-----|-----------|-----|-------|---|---+ | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | +---------|-|-|-----------------------|-|-----------|---------------|-----|---|---------|---|-|---|-|-|-----|-----------|-------|---+ | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | E | | | | | | | | | | | | | | | + | | | | | | | | | | +-----|-----------|---|---------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | +-|---|-+ | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +-|-------------|-|-|-----|----------U----|-|---|-------|-------------|-|-|---|---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | +---------------|---------------------------|-----|---------|-----|-------------|-----------------+ | | | | | | | | | +-+ | +-|---|-----------------+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +-|-----+ | +-|-+ +---------------|-|---+ | | | | | | | | | | | | | | | | | +-------|-----------------------|-|---|---|-|-----|---------|-|---------|---------+ T | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------------+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | +-----------------------+ | | | | | +---+ | | +-|-----|---|-|-|-+ | | | | | +-------|---+ +-+ +-|-|-+ | | +---+ | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | +-----------|-----|-----------|-----|-----|-----------------|-|---|-------------|---|---|---|-----|---------|---------|-------|-----------+ | +---|-|-|-|-|---|---|-----+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | +---+ | | | | | +-|-----|-----|-------|---------|-+ | | | | | +---|-----|---------|---------|-------------+ | | | +-----------|---|-------|-----+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +---------|-----|-|-----|-------|-|-----------|-|-|-----|---|-------|-------|---|-|--D------|-|---|-------------|---------+ | +-------------|-|-----------------|-|---|-|-|-------|-------+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | +---------|---+ +-------|---|-------+ | | | | | | | | | | | | | | | +---|---------|---+ | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------------|---|-|-----|-----+ | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-------+ +-+ | +-|-----|-----|-----|-|-|-------|-|-------|-|-|-|---+ | | | +-+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | +-|-------|-------|-----------------------------------|-+ | | | | | | | | | | | | | +---------------|---|-|-----|-|-|-------|-|-------+ | | | | +-|-|---|-+ +-+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | +---|-|---------|-|---------|-|---|-|-----|-----|-|-|-----+ +---------+ | | | | | | | | | +---|-|-|-|-+ | | | +-----+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | +-------------|-|-----------------|-----------|-|-----|-----|-----|-|-----+ | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | +-----|-|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------|---+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|-+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | I | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | +-|---------|-----|---------------------------+ | | | | | | | | | | | | | | | +-|-------+ | | | | | | | | | | | | | | | | | | +-+ | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-|---|-------|---|-----|-|-----|---------------|-----|-----|-----------|---|-----------|-|-----|-----|---------------|---------|-|-|-+ | | | +-------|-------+ | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +---|-|-+ +---------+ | | +-------|-----|-----|---------------------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-|-------|---+ | | | | | | | | +-----------------|-|---------------|---+ | | | | | | | +---|---|-----------|-|---+ | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | +---|---|-|-------------------------|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-|-------|---|-----|-----|-----------|-------------------------|---|-+ | | | | | | | | | | | | | | | | | | +-----|-----------|---|---|---+ | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-------------|-|-|-------|-----|-------|---------|---------|-------------------|-|---------+ +-|---|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-|-------------|---------|---|-|-----|-|-------------------|-|-----|-----|---------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | +-----------|---|---+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | +-----|---|-----------|-|-|---------|-----|-|-------------|---|-------+ | | | | | | | | | | | | | | | | | | | | +---------|-|-----------|---|-+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | +---------|-----|---|-|-----|-----|-----|-|-|-----|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|-|---|---|---|-------|-----------|-|-+ +-|-|-----+ | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | +-----|-|-+ | | | | | | | | +-----------|---|-----|-|-------|-|---|-|N|-|-----|-------|-|-----------|---|-|-----|-+ | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +-|-|-------|-|---|-------+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-----+ | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---|-------|---|-+ | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | +---|-----|-----------|-|-|-|-----|-|---|---|-+ | | | | | | | | | | +-|-|-|-+ | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +---+ +---|-------|---------------|---|---|-------------------|-------------------|-|---|-|-|---|-|-------------------|-----|-----|-|---|---+ | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-----|---------------|-----------|---|-------|-----------------|-------|-------|-----------|-------|-+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | +-|---|---|-------------------|-----|-----|-----|-|-|-|-----------+ | | | | | | | +-|-|---+ | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-----|---------------|-------|---|---+ | | | | | | | +-----|-|-----|-|---|---|---|-|-|---------|---------|---------|---------+ | +-----------+ | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-|---------------|---|---|---|-|---------|-|---+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | +-------|-|-|-------|-------|---|---------|-------|-----------+ +-|---+ | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | +-------|---------|-----|---------|---------------------|-----|-----------|-|-----------|-+ | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | X | | | | | | | | | | | | + | | | | | | | | | +-----|-----|-|-|---------+ | | +-----------+ | | | | | | | | | | | | | | | +-----------+ +-|---+ | +-|-------|-+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | +-----------------|-|---+ | | | +-------|-|-------------|-------------|-----+ | | | | +-|---|-----|-+ | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +---------|-----------|-----------------|---|---|-----|-+ | | | | | | | | +-----|-|-|---|-------|-----|---------------|-----|-----|-|---|-----------|-----|---------|-----+ | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +---+ | | | | | +---------------------|-----|-----|-|-------------|-----|-----|-|-----------|-|-|-|-|---|-------------|---------|-----+ | +-----------|---------|---|-----|-----|-|---|-+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | +---|---|-----|---|-----|-------|-------|-----------|---------------------------|-|-|---------------------|-|-|---------------------|---+ | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | +-------|-----|-----------------+ | +-+ | | | | | | | | +-|-|---|-+ | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | +-|-----|---+ | | | | | | | | | | +-|-|-------------|-|-----|---------+ | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | +-|-----+ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +-+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-----|-|-|-------|---|---------|-------|---------|---|-----|-|-------------------|-------|-------------|-----|-|---------|-|---------------|---|-----------------|-------|-|---|-----------|---------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +---------+ | | | | | | +-----|---|-----|-----|---|-|-------------------------|-|-|-----------|-|-----|---------|-----|-----------------|-----|-----|-|-------|-----------------|---------+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | +---|-|-----------|-|-|-----|---------|-----|-----------|---|-|---+ | | | | | | | +-----------|-+ | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | A | | | | | | | | | | | | | | | | | | | | | | | | | + +-----|-----|-|---|-+ | | | +---+ +-----|---|-------------------------+ | | | | | +---------|---------------|-----------|-----|-+ | | | | | | +-|-------------|-|-|-|---|---+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | +-----|-----------|-+ | | | | | | | | | | | +-+ | | | | | +---|---|---+ | | | | | +---+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | +-|-----|-|-------|-----------+ | | | | | | | | | | | | | | | | | | | | | | | | | +-+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | +-----|-|-----------|-+ | | | | | | | +-------|-|-------------|-----|-----|-----|---------------------|-|-------|---|-|---|---|---|-----|-----|---+ | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | | | | | | | | +---|---+ | | | | | | +-|-|---+ | | +-+ | | | | | | | | +---|---|-|---|-------|-+ + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | +-------------|-+ | | +-|-----------------------------------+ | | | +---|-----+ | | | | | | | | | | | | +-|-----------+ | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +---|-|-------|-+ | | +---|-------+ | | | +---------------------------|-----------|---|-------|-----|-----|---------------------------------|-------------------+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | +-------|---+ +-------------+ +---+ +-|-|-------|-------------|-|---------------------------|-+ | | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | + | +-------|---+ | | | | | | | | | | | +-+ +-------------------|-----+ +-+ +-----|-+ | +---+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | | +-----|-------------------|---------|---|-------|-|---+ | | | | | | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | | | | | + +-+ +---|-----------|-----------------------------------------------------------------------|-------|-----------|-----|-----------------------------------+ | +-------------------+ +-|-+ + | | | | | | | | | | | | | | | | | | | | | | | | | P + | +-------|---------+ | | +-------------|-------------------------|---------|---|---------|-------------|-------------------------+ | +-----------------+ | | + | | | | | | | | | | | | | | | | | | | | | | | | | | + | | | | | | | | +-----------------------------|-----+ | +-------|-------------|---+ | +-----|---+ | | | | | + | | | | | | | | | | | | | | | | | | | | | | | | + | +---+ | +-|-------------+ | | | +---------+ +-------+ +-------------+ +---+ | | +---+ | + | | | | | | | | | | | | + +-----+ +-----+ +-+ +-----+ +-----------------------------------------------------------------------------------+ +-----------------+ + diff --git a/2017/inputs/day_2.txt b/2017/inputs/day_2.txt new file mode 100644 index 0000000..f2f1f5e --- /dev/null +++ b/2017/inputs/day_2.txt @@ -0,0 +1,16 @@ +493 458 321 120 49 432 433 92 54 452 41 461 388 409 263 58 +961 98 518 188 958 114 1044 881 948 590 972 398 115 116 451 492 +76 783 709 489 617 72 824 452 748 737 691 90 94 77 84 756 +204 217 90 335 220 127 302 205 242 202 259 110 118 111 200 112 +249 679 4015 106 3358 1642 228 4559 307 193 4407 3984 3546 2635 3858 924 +1151 1060 2002 168 3635 3515 3158 141 4009 3725 996 142 3672 153 134 1438 +95 600 1171 1896 174 1852 1616 928 79 1308 2016 88 80 1559 1183 107 +187 567 432 553 69 38 131 166 93 132 498 153 441 451 172 575 +216 599 480 208 224 240 349 593 516 450 385 188 482 461 635 220 +788 1263 1119 1391 1464 179 1200 621 1304 55 700 1275 226 57 43 51 +1571 58 1331 1253 60 1496 1261 1298 1500 1303 201 73 1023 582 69 339 +80 438 467 512 381 74 259 73 88 448 386 509 346 61 447 435 +215 679 117 645 137 426 195 619 268 223 792 200 720 260 303 603 +631 481 185 135 665 641 492 408 164 132 478 188 444 378 633 516 +1165 1119 194 280 223 1181 267 898 1108 124 618 1135 817 997 129 227 +404 1757 358 2293 2626 87 613 95 1658 147 75 930 2394 2349 86 385 diff --git a/2017/inputs/day_20.txt b/2017/inputs/day_20.txt new file mode 100644 index 0000000..f249f9e --- /dev/null +++ b/2017/inputs/day_20.txt @@ -0,0 +1,1000 @@ +p=<-317,1413,1507>, v=<19,-102,-108>, a=<1,-3,-3> +p=<1639,477,-2519>, v=<-79,-102,130>, a=<-9,9,12> +p=<613,-993,-305>, v=<-39,27,-48>, a=<-2,8,11> +p=<1343,190,-1565>, v=<-82,31,31>, a=<1,-4,5> +p=<735,-285,2387>, v=<-20,-64,-67>, a=<-2,8,-6> +p=<963,456,-1888>, v=<-42,-73,88>, a=<-1,5,1> +p=<-1659,1444,-463>, v=<-14,-25,-77>, a=<10,-5,10> +p=<-443,-95,-1185>, v=<142,-14,81>, a=<-12,2,-2> +p=<-2590,3249,-710>, v=<35,-30,36>, a=<10,-14,0> +p=<-1602,-171,924>, v=<83,-50,-20>, a=<0,6,-3> +p=<-633,2195,-458>, v=<31,-200,31>, a=<4,0,2> +p=<-347,-49,-1976>, v=<-19,-50,151>, a=<8,9,5> +p=<852,314,125>, v=<-56,-83,-22>, a=<-4,9,2> +p=<-10088,3682,-5210>, v=<52,32,-38>, a=<14,-8,11> +p=<-4019,1982,4446>, v=<-4,47,-7>, a=<7,-6,-7> +p=<3444,-2319,-11041>, v=<-171,-89,81>, a=<4,9,14> +p=<2390,792,2117>, v=<0,47,114>, a=<-4,-4,-10> +p=<5661,-1318,-1666>, v=<-87,-44,-33>, a=<-5,5,5> +p=<2856,-1912,743>, v=<-36,59,-174>, a=<-3,0,9> +p=<4275,5447,-5461>, v=<6,-11,31>, a=<-8,-9,8> +p=<1263,1223,980>, v=<-98,-69,-68>, a=<0,-3,-1> +p=<1094,963,1253>, v=<-85,-105,-75>, a=<0,5,-3> +p=<2641,-922,2124>, v=<-113,61,-142>, a=<-13,2,-3> +p=<600,859,-398>, v=<-26,-97,-4>, a=<-3,5,5> +p=<-128,-1533,330>, v=<-12,73,-88>, a=<3,7,9> +p=<1419,-1507,-528>, v=<-159,29,-15>, a=<7,13,8> +p=<574,-1299,-1100>, v=<-17,104,113>, a=<-4,0,-4> +p=<-440,-1923,-8>, v=<-2,131,36>, a=<5,3,-5> +p=<-1705,-1617,-226>, v=<45,42,123>, a=<0,0,-6> +p=<708,36,4790>, v=<1,57,-48>, a=<-1,-3,-4> +p=<2266,9745,3707>, v=<38,-101,-78>, a=<-5,-8,-1> +p=<7320,-629,-2164>, v=<-134,-62,18>, a=<-3,4,2> +p=<746,6097,-2544>, v=<-78,-44,-11>, a=<3,-6,4> +p=<1563,-7678,5873>, v=<115,-13,-57>, a=<-8,11,-5> +p=<-8146,-3232,-5147>, v=<156,-52,155>, a=<3,7,-1> +p=<-3966,4235,1389>, v=<7,44,22>, a=<5,-8,-3> +p=<2171,-5151,14708>, v=<21,-21,-75>, a=<-4,8,-16> +p=<442,-1232,2730>, v=<9,-20,3>, a=<-2,5,-8> +p=<-273,-1960,5408>, v=<-58,89,-100>, a=<5,-1,-8> +p=<-624,-3559,247>, v=<50,137,31>, a=<-2,0,-3> +p=<2106,-2688,1482>, v=<-82,144,-57>, a=<0,-3,0> +p=<-2886,1147,2678>, v=<83,-44,-157>, a=<2,0,4> +p=<1984,472,-191>, v=<-31,-3,63>, a=<-3,-1,-4> +p=<3604,-6710,-2540>, v=<-21,123,-32>, a=<-8,9,9> +p=<5305,1390,781>, v=<-182,103,-15>, a=<-1,-11,-1> +p=<-527,256,-1055>, v=<-22,-107,39>, a=<3,7,0> +p=<7708,1660,5803>, v=<-131,-19,-103>, a=<-11,-3,-8> +p=<-5981,-2228,-6671>, v=<68,-15,23>, a=<11,7,16> +p=<1356,-1869,-687>, v=<39,68,25>, a=<-6,0,0> +p=<-1052,4725,937>, v=<38,-66,54>, a=<0,-7,-6> +p=<-1668,10101,-631>, v=<2,-229,23>, a=<4,-9,0> +p=<-1906,-4165,4255>, v=<-33,-24,37>, a=<7,12,-13> +p=<-2760,-2373,-2325>, v=<-46,57,40>, a=<10,2,3> +p=<516,-6601,-1625>, v=<69,63,44>, a=<-6,12,1> +p=<1062,-6279,-4929>, v=<6,66,17>, a=<-3,11,11> +p=<1636,-2387,-1205>, v=<-87,72,58>, a=<2,1,-1> +p=<3099,3807,-117>, v=<-71,-169,77>, a=<-9,-3,-7> +p=<1009,-3185,-991>, v=<-1,39,-47>, a=<-5,13,10> +p=<-3228,368,1954>, v=<142,32,-62>, a=<3,-5,-4> +p=<1180,1793,-896>, v=<-20,-173,-2>, a=<-4,8,5> +p=<-1936,7,2790>, v=<24,1,-36>, a=<8,0,-11> +p=<-1214,-2045,3474>, v=<116,9,-132>, a=<-5,10,-5> +p=<4619,2971,-3480>, v=<-171,-75,104>, a=<-7,-8,8> +p=<-2088,1166,3018>, v=<112,-40,-28>, a=<0,-2,-13> +p=<211,653,2410>, v=<21,107,-46>, a=<-3,-14,-8> +p=<2415,1926,-1580>, v=<-75,50,34>, a=<-5,-15,5> +p=<1538,-908,976>, v=<-54,31,26>, a=<0,0,-4> +p=<3539,7415,1788>, v=<-18,-151,-32>, a=<-7,-7,-2> +p=<3249,4196,-1373>, v=<-23,-25,2>, a=<-6,-8,3> +p=<2031,-4301,1701>, v=<-41,148,-29>, a=<-2,0,-2> +p=<2002,11678,-2475>, v=<-25,-148,85>, a=<-3,-17,0> +p=<2350,-560,-1315>, v=<-52,64,15>, a=<-2,-3,2> +p=<11423,-875,9878>, v=<-163,-146,-174>, a=<-13,11,-9> +p=<1751,-5773,2469>, v=<53,156,33>, a=<-7,2,-7> +p=<-2155,4333,-7110>, v=<51,-122,38>, a=<1,-1,12> +p=<-5906,7123,1229>, v=<92,-84,-39>, a=<6,-9,0> +p=<4696,-2115,113>, v=<-106,-74,-35>, a=<-3,9,2> +p=<-1132,-4533,1322>, v=<34,36,6>, a=<0,7,-3> +p=<1658,519,-978>, v=<-72,-26,-46>, a=<-5,-1,14> +p=<83,-426,732>, v=<25,-35,32>, a=<-4,8,-10> +p=<278,-1926,-1653>, v=<-52,49,79>, a=<4,10,4> +p=<-787,-6,-183>, v=<-21,57,61>, a=<9,-7,-6> +p=<-487,1044,612>, v=<-65,-109,32>, a=<12,5,-9> +p=<2603,-1521,-123>, v=<-135,86,105>, a=<-5,2,-12> +p=<-562,1044,-1188>, v=<12,-5,160>, a=<3,-8,-10> +p=<-1715,3425,5361>, v=<-30,-42,-103>, a=<5,-4,-4> +p=<-2803,721,-5279>, v=<-95,92,48>, a=<11,-7,7> +p=<957,-303,-5263>, v=<-97,-107,64>, a=<4,7,6> +p=<829,-943,-7839>, v=<-93,12,62>, a=<4,1,11> +p=<-2883,4417,-4703>, v=<56,-40,96>, a=<2,-6,3> +p=<2557,-6319,3889>, v=<51,147,9>, a=<-8,3,-8> +p=<-7939,-799,-4191>, v=<82,-9,-52>, a=<10,2,11> +p=<-7470,-439,367>, v=<120,92,9>, a=<17,-6,-2> +p=<-2134,-94,-898>, v=<20,-115,40>, a=<6,10,0> +p=<-478,1930,2092>, v=<20,-35,-114>, a=<0,-4,2> +p=<1040,-1727,551>, v=<-82,28,-59>, a=<3,4,3> +p=<-2318,-324,2069>, v=<4,63,-77>, a=<8,-4,-1> +p=<-2249,21,-1220>, v=<73,0,18>, a=<2,0,3> +p=<2627,-3199,-2577>, v=<17,44,113>, a=<-11,8,0> +p=<-2732,-1796,482>, v=<-2,103,-68>, a=<10,-2,4> +p=<441,1243,20>, v=<43,-28,83>, a=<-10,-8,-11> +p=<1029,-1151,-764>, v=<-104,68,94>, a=<4,2,-5> +p=<-672,-2551,97>, v=<25,153,40>, a=<3,4,-6> +p=<1027,1714,-804>, v=<-72,-122,60>, a=<-1,-2,1> +p=<416,1506,-50>, v=<-32,-22,16>, a=<0,-14,-1> +p=<-1131,1623,-1103>, v=<150,-108,20>, a=<-9,-3,10> +p=<1001,-990,-1454>, v=<-63,37,75>, a=<-2,5,6> +p=<-418,465,403>, v=<-35,5,45>, a=<12,-8,-14> +p=<682,-734,73>, v=<-21,120,-75>, a=<-7,-9,11> +p=<-2343,333,-1159>, v=<140,-79,25>, a=<12,8,13> +p=<924,421,-587>, v=<-43,3,-75>, a=<-7,-7,21> +p=<-693,-404,293>, v=<44,24,-5>, a=<3,2,-4> +p=<363,355,183>, v=<-58,-33,-49>, a=<4,0,5> +p=<-5454,-1885,-2432>, v=<116,-43,149>, a=<13,12,-3> +p=<342,-793,-941>, v=<-17,15,23>, a=<0,2,2> +p=<-456,1139,-920>, v=<21,-22,0>, a=<0,-3,4> +p=<-101,-4352,13169>, v=<23,75,-150>, a=<-1,2,-10> +p=<-3122,360,-2677>, v=<83,-49,-84>, a=<0,2,8> +p=<-7093,-2072,800>, v=<51,-24,78>, a=<7,4,-5> +p=<6397,1082,4505>, v=<8,88,-39>, a=<-9,-6,-4> +p=<-63,1937,-1005>, v=<22,46,106>, a=<-1,-5,-4> +p=<-595,1367,-910>, v=<-42,-56,45>, a=<3,1,-1> +p=<2578,-11667,-1670>, v=<-28,-25,-52>, a=<-2,17,5> +p=<-3425,-215,4501>, v=<138,8,41>, a=<-2,0,-11> +p=<-4625,-135,-939>, v=<27,-77,13>, a=<7,5,1> +p=<479,1913,2117>, v=<-17,-42,-66>, a=<0,-1,0> +p=<-3015,2181,-3524>, v=<-9,-40,-70>, a=<7,-2,12> +p=<-2280,-5424,436>, v=<137,74,108>, a=<-4,7,-8> +p=<6240,-669,-2024>, v=<-54,-7,-89>, a=<-10,2,10> +p=<-3885,-84,-8054>, v=<51,-11,50>, a=<5,1,14> +p=<-3345,6336,2956>, v=<2,-8,-69>, a=<7,-13,-2> +p=<-3465,-1449,-779>, v=<6,-43,-22>, a=<7,6,3> +p=<-1170,-8754,-1094>, v=<162,92,-27>, a=<-8,13,4> +p=<6195,2541,886>, v=<-68,10,-31>, a=<-9,-6,0> +p=<5625,3321,-2279>, v=<-142,-78,90>, a=<-3,-2,-1> +p=<146,1150,-504>, v=<-34,-42,20>, a=<4,-8,3> +p=<-64,-2,1992>, v=<16,-63,-110>, a=<-1,10,-9> +p=<-1138,334,-24>, v=<99,0,-7>, a=<0,-4,1> +p=<2156,-146,354>, v=<-104,14,-19>, a=<-11,0,-2> +p=<2224,501,-708>, v=<-92,-21,-46>, a=<0,0,6> +p=<664,405,960>, v=<98,33,22>, a=<-10,-4,-5> +p=<1144,2061,-2388>, v=<-47,-36,149>, a=<0,-4,-4> +p=<-212,-2043,4500>, v=<-78,-65,-113>, a=<7,12,-6> +p=<1084,4569,-4644>, v=<-57,-28,-32>, a=<1,-13,18> +p=<-824,5649,-4296>, v=<60,-48,-34>, a=<-2,-15,17> +p=<88,-591,-3132>, v=<22,-13,30>, a=<-2,3,8> +p=<2836,1917,-696>, v=<-30,-105,116>, a=<-7,2,-7> +p=<-4061,279,753>, v=<73,-63,7>, a=<7,4,-3> +p=<4439,579,-422>, v=<-46,-23,-24>, a=<-10,0,3> +p=<-2060,11364,-3131>, v=<-39,-107,-127>, a=<6,-14,13> +p=<6751,672,-9962>, v=<-119,64,97>, a=<-5,-5,12> +p=<-575,7206,-6068>, v=<-33,-100,13>, a=<3,-7,10> +p=<2197,2553,-4418>, v=<2,-78,-71>, a=<-4,0,12> +p=<4045,243,-5342>, v=<31,9,-26>, a=<-9,-1,11> +p=<358,122,480>, v=<-55,-68,25>, a=<4,8,-8> +p=<-1021,-158,1908>, v=<156,12,-122>, a=<-11,0,-2> +p=<939,283,-283>, v=<1,33,-48>, a=<-9,-7,9> +p=<519,-438,1425>, v=<31,107,-35>, a=<-9,-10,-9> +p=<904,-641,-388>, v=<-139,54,12>, a=<10,-1,2> +p=<6864,2454,-491>, v=<65,22,15>, a=<-17,-6,0> +p=<-272,1750,-3947>, v=<57,11,-9>, a=<-3,-4,8> +p=<1168,-6842,3589>, v=<78,164,36>, a=<-7,3,-9> +p=<-2224,4070,-347>, v=<-80,21,-105>, a=<9,-9,7> +p=<-1872,2102,-875>, v=<41,66,-39>, a=<1,-8,4> +p=<-5120,-3610,1701>, v=<126,63,-4>, a=<2,3,-3> +p=<-7936,774,-2043>, v=<115,-74,47>, a=<8,3,1> +p=<-5770,1949,-1810>, v=<144,-4,67>, a=<16,-10,3> +p=<1032,524,-993>, v=<66,-119,54>, a=<-12,9,0> +p=<-241,904,-2703>, v=<23,-39,74>, a=<-1,-1,7> +p=<1659,-2535,52>, v=<73,32,-11>, a=<-16,10,1> +p=<-469,790,-214>, v=<-55,97,-77>, a=<8,-14,9> +p=<-13,-179,356>, v=<31,18,-57>, a=<-3,-1,4> +p=<899,-312,-2000>, v=<-27,-45,127>, a=<-2,6,-2> +p=<1545,581,-727>, v=<-11,38,40>, a=<-7,-7,0> +p=<-3167,1702,-43>, v=<147,49,4>, a=<2,-14,0> +p=<-526,106,-3919>, v=<8,-17,38>, a=<2,1,17> +p=<1381,-388,-404>, v=<-175,24,29>, a=<7,2,2> +p=<-144,-1008,-374>, v=<5,163,59>, a=<2,-12,-4> +p=<-4344,-3608,1616>, v=<45,54,-4>, a=<6,4,-3> +p=<-1647,-787,4189>, v=<-10,-53,25>, a=<4,5,-10> +p=<3965,7621,-1235>, v=<-35,-45,34>, a=<-4,-9,0> +p=<-6925,-515,4255>, v=<27,33,-26>, a=<9,-1,-5> +p=<-3361,-7715,-3737>, v=<76,48,122>, a=<1,9,-1> +p=<4829,5857,-1217>, v=<-96,-107,15>, a=<-2,-3,1> +p=<1877,-1469,-4079>, v=<-51,41,39>, a=<0,0,4> +p=<4584,-3664,7121>, v=<124,69,-87>, a=<-17,3,-9> +p=<4708,-719,1014>, v=<-8,54,-82>, a=<-9,-2,3> +p=<-4530,3249,1665>, v=<-46,22,73>, a=<12,-8,-8> +p=<361,-798,851>, v=<-116,55,25>, a=<10,-1,-8> +p=<-2177,1209,-355>, v=<82,-66,16>, a=<4,0,0> +p=<784,-573,1544>, v=<-54,52,-23>, a=<1,-2,-7> +p=<1639,-879,-436>, v=<-73,-121,68>, a=<-2,18,-5> +p=<1297,1317,-166>, v=<-54,-15,-4>, a=<-2,-6,1> +p=<3466,1938,-2011>, v=<-70,-78,13>, a=<-13,-3,10> +p=<-2096,1173,-1561>, v=<11,-83,121>, a=<11,2,-4> +p=<-548,2163,1724>, v=<-75,-119,-109>, a=<11,0,1> +p=<469,-2427,1067>, v=<11,3,-63>, a=<-4,14,0> +p=<919,57,3083>, v=<-33,-78,-118>, a=<-2,8,-6> +p=<947,-909,986>, v=<-77,0,-36>, a=<1,10,-6> +p=<609,-857,-925>, v=<-79,73,20>, a=<5,-1,7> +p=<-4448,-1323,-14360>, v=<54,34,149>, a=<3,0,11> +p=<1636,4332,-3557>, v=<78,-71,-68>, a=<-6,-2,8> +p=<-2420,-12321,6739>, v=<2,56,88>, a=<3,13,-13> +p=<1636,6477,-944>, v=<-42,34,-35>, a=<0,-10,3> +p=<8812,2148,-5273>, v=<-26,45,96>, a=<-10,-5,2> +p=<-587,-3195,-14945>, v=<-85,22,84>, a=<5,3,15> +p=<6394,-3429,3346>, v=<36,88,15>, a=<-10,0,-5> +p=<-1958,2401,204>, v=<102,-119,-34>, a=<5,-7,3> +p=<-1090,266,1569>, v=<55,-19,-109>, a=<3,0,0> +p=<2574,-921,907>, v=<-139,58,-86>, a=<-6,1,3> +p=<-2718,-298,501>, v=<59,6,-57>, a=<18,2,3> +p=<-219,-1950,998>, v=<23,94,-40>, a=<-1,6,-4> +p=<3407,-809,1474>, v=<-116,35,-89>, a=<-17,3,-2> +p=<-541,-1670,-661>, v=<-14,29,41>, a=<7,12,1> +p=<-485,451,1803>, v=<-18,-25,-75>, a=<7,-1,-7> +p=<796,1109,1586>, v=<3,-132,-82>, a=<-8,7,-4> +p=<5,-438,2104>, v=<22,76,-59>, a=<-3,-6,-12> +p=<2770,724,137>, v=<-138,8,74>, a=<-8,-8,-11> +p=<1335,-935,1586>, v=<-133,59,-52>, a=<5,1,-8> +p=<-600,-494,17>, v=<0,26,-10>, a=<4,0,1> +p=<-73,1376,-1547>, v=<-13,42,37>, a=<2,-14,6> +p=<-2198,1750,-1088>, v=<85,-124,10>, a=<5,2,6> +p=<-955,2741,1118>, v=<87,-214,-96>, a=<0,-6,-1> +p=<79,398,260>, v=<-1,11,0>, a=<-1,-8,-4> +p=<-394,112,-873>, v=<90,55,13>, a=<-9,-11,11> +p=<750,-251,-1390>, v=<-2,-32,72>, a=<-11,9,9> +p=<-933,-625,-1511>, v=<25,68,77>, a=<10,-2,10> +p=<-812,673,-1159>, v=<38,-38,153>, a=<6,-4,-8> +p=<-2490,1276,508>, v=<17,-16,112>, a=<5,-2,-9> +p=<730,-1902,-4252>, v=<18,-62,21>, a=<-3,9,9> +p=<-1678,6904,3168>, v=<17,-72,-41>, a=<3,-12,-5> +p=<-40,-432,-3034>, v=<-56,132,50>, a=<4,-8,4> +p=<2980,-2943,13263>, v=<-88,-2,-129>, a=<0,5,-15> +p=<8216,3432,-5165>, v=<-67,-32,-42>, a=<-10,-4,11> +p=<-2188,11252,-4927>, v=<64,-87,-49>, a=<0,-14,11> +p=<-2513,-3249,3089>, v=<176,-8,-100>, a=<-6,7,0> +p=<-5055,223,-4289>, v=<2,24,-22>, a=<10,-2,10> +p=<-3722,1370,-2274>, v=<7,35,-7>, a=<7,-5,5> +p=<9201,8581,1004>, v=<-55,-80,114>, a=<-9,-7,-7> +p=<-315,469,-6640>, v=<-51,-52,-30>, a=<3,2,10> +p=<5886,-19772,1433>, v=<-70,127,63>, a=<-4,19,-5> +p=<4716,7333,-7264>, v=<120,12,26>, a=<-12,-10,8> +p=<2571,4213,-7108>, v=<75,-108,42>, a=<-7,0,7> +p=<2688,7060,-946>, v=<12,39,-36>, a=<-4,-11,3> +p=<3195,-4523,-5548>, v=<-41,116,-38>, a=<-2,0,9> +p=<16182,20203,8375>, v=<-134,-78,-175>, a=<-14,-22,-2> +p=<-8583,4213,3851>, v=<41,-28,-99>, a=<9,-4,0> +p=<-29,-291,-717>, v=<-1,26,133>, a=<1,0,-11> +p=<-1487,-747,-663>, v=<140,90,44>, a=<-2,-4,2> +p=<-77,-1047,129>, v=<29,63,-48>, a=<-3,4,6> +p=<1,627,-9>, v=<-62,-5,-4>, a=<10,-7,1> +p=<-689,225,1479>, v=<28,-4,-89>, a=<5,-2,-5> +p=<3651,9977,-1851>, v=<-74,-16,28>, a=<-1,-12,1> +p=<-2004,-10303,2127>, v=<-9,4,-54>, a=<3,13,0> +p=<1389,4088,-3060>, v=<104,15,-1>, a=<-7,-6,4> +p=<11256,-2971,-2007>, v=<-129,36,52>, a=<-8,2,0> +p=<6147,-787,12696>, v=<-98,60,-145>, a=<-3,-2,-9> +p=<8994,6467,10551>, v=<-51,-186,110>, a=<-9,1,-19> +p=<2832,3035,2322>, v=<107,62,41>, a=<-9,-7,-5> +p=<-11559,7286,-5244>, v=<116,-47,-45>, a=<9,-7,9> +p=<5991,-8704,8679>, v=<-94,-17,-2>, a=<-3,12,-11> +p=<4718,-4023,8441>, v=<-136,19,-128>, a=<-1,7,-9> +p=<4625,-861,-1262>, v=<-69,77,73>, a=<-5,-3,-2> +p=<589,3578,-416>, v=<58,-10,64>, a=<-7,-12,-4> +p=<1141,-2678,1217>, v=<-50,34,29>, a=<0,7,-7> +p=<3211,1600,2988>, v=<-44,4,-60>, a=<-8,-6,-6> +p=<-2056,-33,-1727>, v=<5,51,13>, a=<7,-4,5> +p=<-3476,6358,-3757>, v=<96,49,73>, a=<1,-16,3> +p=<2476,-4275,-99>, v=<64,40,-29>, a=<-9,6,2> +p=<9885,2111,1265>, v=<-47,-86,-41>, a=<-17,1,0> +p=<-10544,1150,955>, v=<132,121,-31>, a=<13,-10,0> +p=<-717,-338,-6640>, v=<-41,57,54>, a=<4,-3,10> +p=<-1306,3785,-502>, v=<-22,-124,-32>, a=<4,0,3> +p=<-3941,-2105,-5090>, v=<79,-62,-12>, a=<3,8,11> +p=<-3352,4405,-4067>, v=<108,-32,67>, a=<0,-7,4> +p=<403,-1972,-1042>, v=<-28,84,-34>, a=<1,-1,5> +p=<2153,884,-496>, v=<11,69,-68>, a=<-6,-7,6> +p=<-264,-3603,2640>, v=<26,104,-76>, a=<-1,0,0> +p=<-754,4587,1100>, v=<22,-58,4>, a=<0,-4,-2> +p=<4321,-3078,-6425>, v=<93,125,-33>, a=<-12,-2,12> +p=<-1419,387,-8280>, v=<41,26,92>, a=<0,-2,8> +p=<681,4902,3760>, v=<-55,-49,0>, a=<2,-5,-6> +p=<1451,-7348,-10450>, v=<-59,-5,118>, a=<1,12,10> +p=<4286,2802,-7265>, v=<-122,83,-45>, a=<0,-9,14> +p=<1337,5510,-5238>, v=<7,-83,58>, a=<-3,-6,7> +p=<6297,1232,8216>, v=<-89,-25,-184>, a=<-7,-1,-5> +p=<787,3206,2183>, v=<42,-63,4>, a=<-5,-4,-6> +p=<-941,3017,-3568>, v=<8,-112,147>, a=<2,0,-1> +p=<4027,3557,-679>, v=<-134,-104,68>, a=<-1,-2,-3> +p=<4864,-1438,-2137>, v=<31,67,-46>, a=<-15,-1,9> +p=<325,164,754>, v=<-74,3,-4>, a=<7,-4,-13> +p=<610,524,-201>, v=<-75,-22,20>, a=<2,-6,0> +p=<-215,224,699>, v=<-9,-36,-15>, a=<5,2,-10> +p=<-495,1334,-1331>, v=<30,-136,133>, a=<3,0,0> +p=<-390,-6,-861>, v=<25,9,130>, a=<2,-2,-8> +p=<-595,729,-116>, v=<-4,-59,6>, a=<11,-3,1> +p=<1360,804,-56>, v=<-139,-72,0>, a=<0,-2,1> +p=<90,359,-591>, v=<-78,11,92>, a=<12,-9,-6> +p=<-620,-1566,-231>, v=<48,99,23>, a=<2,10,0> +p=<-1355,1069,-1321>, v=<94,-126,110>, a=<7,3,4> +p=<699,-1699,-4607>, v=<5,86,93>, a=<-3,-1,9> +p=<2056,3131,-329>, v=<-90,8,-141>, a=<0,-12,13> +p=<-3602,1291,407>, v=<36,-44,-53>, a=<10,-1,3> +p=<-267,2717,-1870>, v=<83,-142,82>, a=<-6,2,0> +p=<-704,1636,3903>, v=<6,-47,-109>, a=<2,-2,-5> +p=<-1946,1429,1626>, v=<0,22,-70>, a=<7,-7,0> +p=<156,4594,673>, v=<33,8,-18>, a=<-2,-7,0> +p=<3116,1597,3966>, v=<-28,-6,-31>, a=<-3,-2,-4> +p=<10812,5334,1672>, v=<-27,-126,-64>, a=<-14,-1,1> +p=<1414,524,2190>, v=<75,23,131>, a=<-6,-2,-10> +p=<5336,9663,-6357>, v=<26,-91,58>, a=<-9,-9,6> +p=<4300,-438,-12758>, v=<73,-46,22>, a=<-10,3,17> +p=<3967,-3546,-918>, v=<-70,0,44>, a=<-2,5,-1> +p=<6224,10440,3670>, v=<-112,78,-23>, a=<-3,-19,-4> +p=<7334,2707,1783>, v=<-66,-55,-48>, a=<-7,-1,0> +p=<1007,10514,-3175>, v=<-47,-19,86>, a=<1,-14,0> +p=<-2289,2879,3134>, v=<87,43,-47>, a=<-1,-8,-3> +p=<1279,9407,-6930>, v=<157,-194,53>, a=<-12,-6,10> +p=<943,-8481,-1938>, v=<-80,35,-4>, a=<3,14,4> +p=<-7969,4127,-738>, v=<50,37,-58>, a=<12,-10,5> +p=<2019,1112,5886>, v=<-99,-85,-7>, a=<2,3,-13> +p=<4861,6767,-4438>, v=<-137,5,34>, a=<-2,-16,8> +p=<6427,909,3218>, v=<-56,72,10>, a=<-11,-7,-8> +p=<1758,2446,-4960>, v=<45,-146,112>, a=<-7,4,4> +p=<4165,-1469,2000>, v=<-128,124,-128>, a=<-1,-5,4> +p=<1113,-1854,63>, v=<-47,6,-29>, a=<-3,13,3> +p=<-1495,-30,2031>, v=<65,28,-84>, a=<3,-3,-5> +p=<-1055,-998,1583>, v=<-39,148,-56>, a=<12,-10,-5> +p=<-2071,-654,2647>, v=<135,-1,-216>, a=<-1,5,6> +p=<769,10,2767>, v=<-51,0,-11>, a=<0,0,-19> +p=<-1047,3450,943>, v=<20,-45,-16>, a=<5,-20,-5> +p=<-679,-814,1511>, v=<31,-59,-94>, a=<1,13,0> +p=<17,-1334,-273>, v=<-4,-18,-42>, a=<0,12,7> +p=<521,802,-1201>, v=<7,27,84>, a=<-5,-9,-1> +p=<1041,-686,-737>, v=<-68,69,106>, a=<0,-3,-7> +p=<5465,-618,2857>, v=<-66,17,-74>, a=<-4,0,0> +p=<4344,-1207,-15402>, v=<-134,91,75>, a=<1,-3,17> +p=<-1375,-181,-4002>, v=<-3,-14,87>, a=<2,1,1> +p=<15288,-9263,3256>, v=<-71,69,-26>, a=<-17,9,-3> +p=<-6733,-6755,2914>, v=<21,120,22>, a=<8,3,-5> +p=<88,1567,8025>, v=<17,18,-54>, a=<-1,-3,-8> +p=<2026,1168,-2577>, v=<-34,-30,30>, a=<-1,0,2> +p=<-104,1351,-1305>, v=<59,-36,-21>, a=<-4,-1,5> +p=<2137,1108,-738>, v=<-52,-55,28>, a=<-2,1,0> +p=<3730,-2807,5013>, v=<29,90,-73>, a=<-12,1,-8> +p=<2299,-971,1341>, v=<-86,78,-49>, a=<0,-3,0> +p=<-939,-4363,2031>, v=<35,140,-73>, a=<0,1,0> +p=<265,2329,5083>, v=<-66,-41,-95>, a=<4,-3,-6> +p=<-1009,-261,8765>, v=<52,-21,-38>, a=<-1,2,-19> +p=<2393,1125,2717>, v=<-84,-56,-83>, a=<0,1,-1> +p=<1035,1125,-3989>, v=<8,2,84>, a=<-3,-3,4> +p=<-85,4961,7253>, v=<-39,-164,-71>, a=<3,-1,-13> +p=<6201,-3075,7757>, v=<-191,123,-60>, a=<-2,-1,-15> +p=<300,-160,-566>, v=<-5,-6,-76>, a=<-2,2,15> +p=<2281,-1672,-706>, v=<-124,42,84>, a=<-5,10,-5> +p=<-2836,323,-251>, v=<159,-3,44>, a=<6,-3,-4> +p=<2169,-573,-706>, v=<-71,31,54>, a=<-11,1,-1> +p=<1511,-1259,1527>, v=<-9,95,-38>, a=<-13,-1,-10> +p=<-330,-937,-2071>, v=<-50,-18,84>, a=<10,11,8> +p=<13,386,1457>, v=<-7,15,-108>, a=<1,-6,0> +p=<-953,1163,1331>, v=<-28,-33,-144>, a=<13,-7,6> +p=<-799,-1490,246>, v=<126,149,1>, a=<-9,-6,-3> +p=<90,-930,1177>, v=<10,64,-43>, a=<-2,0,-6> +p=<-1763,-994,1921>, v=<95,80,12>, a=<0,-3,-11> +p=<-1155,-709,-834>, v=<73,-25,67>, a=<-1,6,-2> +p=<1429,-405,1959>, v=<-33,79,-90>, a=<-4,-6,-1> +p=<4418,1330,2934>, v=<-78,-60,33>, a=<-4,1,-8> +p=<-3239,4306,-1902>, v=<57,52,93>, a=<3,-12,-2> +p=<-2929,-5149,4949>, v=<-65,-11,-160>, a=<10,11,0> +p=<-511,-778,-6149>, v=<-47,40,22>, a=<4,-1,11> +p=<5162,4306,-2677>, v=<-38,-188,38>, a=<-8,3,3> +p=<-1631,-8674,2819>, v=<130,172,-108>, a=<-5,12,0> +p=<-1761,3091,-1250>, v=<0,-105,8>, a=<5,-1,3> +p=<-1631,-42,-7022>, v=<-32,110,122>, a=<7,-8,11> +p=<150,-5333,3664>, v=<-33,3,8>, a=<2,15,-11> +p=<6923,-3578,-418>, v=<-118,165,57>, a=<-11,-2,-3> +p=<8873,5795,-5189>, v=<-166,-128,119>, a=<-13,-7,6> +p=<-2125,2103,-2628>, v=<41,-40,115>, a=<3,-3,-1> +p=<-2543,858,5229>, v=<21,-7,-67>, a=<3,-1,-5> +p=<-4668,3476,-3917>, v=<-74,-84,132>, a=<12,-1,-1> +p=<-8357,6332,-7793>, v=<17,-63,36>, a=<13,-7,11> +p=<3125,665,3538>, v=<-65,-76,-2>, a=<-1,3,-5> +p=<-6384,-14838,5203>, v=<59,58,-104>, a=<6,18,-2> +p=<-908,3810,-1753>, v=<-51,67,8>, a=<4,-9,2> +p=<-1722,-6180,-6082>, v=<-48,-43,49>, a=<5,11,6> +p=<-3054,1368,-4565>, v=<83,-38,-49>, a=<0,0,9> +p=<-2373,1080,365>, v=<-31,-24,53>, a=<12,-2,-6> +p=<-4430,2169,-614>, v=<51,53,86>, a=<13,-13,-5> +p=<-924,-3134,591>, v=<79,-14,-49>, a=<-3,18,2> +p=<-1874,514,-3988>, v=<-1,-26,32>, a=<10,0,18> +p=<-145,-1747,4486>, v=<8,43,-114>, a=<0,5,-12> +p=<653,-2032,2320>, v=<-34,108,-70>, a=<0,0,-5> +p=<881,2243,1294>, v=<-6,-37,-26>, a=<-4,-8,-4> +p=<-2425,-1101,-1480>, v=<88,-11,70>, a=<4,7,1> +p=<-2919,1578,1256>, v=<194,-32,46>, a=<-4,-5,-11> +p=<-2634,856,2320>, v=<-1,-24,-50>, a=<14,-2,-7> +p=<144,-1759,161>, v=<26,100,-4>, a=<-6,7,-2> +p=<1464,-673,437>, v=<-32,55,-27>, a=<-14,0,-2> +p=<72,1133,65>, v=<-20,-37,4>, a=<2,-9,-2> +p=<-444,-943,-577>, v=<75,19,-53>, a=<-6,9,15> +p=<-4278,-11885,3366>, v=<-11,163,56>, a=<7,9,-8> +p=<3984,5233,8190>, v=<0,76,-4>, a=<-6,-12,-12> +p=<5460,-4091,8892>, v=<-41,39,-5>, a=<-6,4,-13> +p=<150,-2147,1692>, v=<-60,-52,-27>, a=<3,6,-1> +p=<-2874,1183,-576>, v=<61,133,-75>, a=<1,-9,5> +p=<-1956,-1103,1656>, v=<128,104,11>, a=<-4,-4,-3> +p=<186,-3893,4752>, v=<50,15,-38>, a=<-3,5,-5> +p=<-591,7845,4320>, v=<-13,-93,-43>, a=<2,-10,-6> +p=<1889,-5082,-1012>, v=<-29,148,-63>, a=<-2,1,6> +p=<1858,3040,-2283>, v=<100,-34,74>, a=<-10,-4,0> +p=<-3691,1862,-299>, v=<103,132,-102>, a=<1,-12,7> +p=<-6853,2141,1592>, v=<109,-53,13>, a=<7,-1,-4> +p=<6663,1769,9497>, v=<-55,23,-146>, a=<-10,-5,-10> +p=<-5309,-4880,2885>, v=<105,126,4>, a=<3,1,-5> +p=<3021,-8416,6149>, v=<-70,125,-22>, a=<-1,7,-9> +p=<3949,1547,1981>, v=<-5,21,84>, a=<-11,-6,-12> +p=<5093,156,1487>, v=<-76,-47,22>, a=<-9,3,-6> +p=<6094,2899,-5455>, v=<-74,-112,127>, a=<-12,0,6> +p=<6523,-4615,395>, v=<-131,96,-17>, a=<-9,6,0> +p=<-2486,1820,-2023>, v=<94,-84,130>, a=<0,1,-4> +p=<-4028,1467,2219>, v=<128,-43,-17>, a=<10,-4,-11> +p=<-1472,531,-5062>, v=<-14,9,150>, a=<10,-4,14> +p=<-608,-954,-1948>, v=<-43,6,110>, a=<8,5,0> +p=<-3921,1247,5039>, v=<-33,-106,51>, a=<9,4,-12> +p=<-9267,1214,-175>, v=<61,14,-80>, a=<13,-3,5> +p=<2646,4481,-6313>, v=<23,-34,-64>, a=<-6,-6,15> +p=<996,-2548,-3145>, v=<-63,-93,61>, a=<2,10,2> +p=<-786,-6277,-373>, v=<-26,-14,-40>, a=<3,12,3> +p=<-2898,-8323,-2122>, v=<157,150,47>, a=<-4,6,1> +p=<4098,9167,-2617>, v=<-89,-57,113>, a=<-2,-13,-2> +p=<-225,1808,3752>, v=<42,13,-63>, a=<-2,-4,-3> +p=<-4219,1852,5263>, v=<73,-68,-70>, a=<6,0,-9> +p=<-4597,-119,6667>, v=<101,33,-80>, a=<5,-2,-12> +p=<4637,-3521,2887>, v=<-157,-93,-108>, a=<-1,16,0> +p=<1505,-4304,538>, v=<-41,62,7>, a=<-1,7,-2> +p=<-4737,3953,180>, v=<127,-44,-8>, a=<9,-13,0> +p=<-2154,-1066,-4440>, v=<81,-3,179>, a=<2,5,3> +p=<2025,-457,4380>, v=<-8,-109,-87>, a=<-8,12,-11> +p=<870,1916,1125>, v=<-118,-2,-31>, a=<7,-8,-2> +p=<-33,1076,4338>, v=<-9,-94,-195>, a=<1,4,-1> +p=<3726,1664,-1143>, v=<-122,43,-22>, a=<-5,-11,7> +p=<-3855,-142,3645>, v=<85,-14,-19>, a=<9,2,-14> +p=<-3330,-268,-975>, v=<137,-96,36>, a=<2,10,1> +p=<3096,4079,2280>, v=<-4,-105,-20>, a=<-13,-8,-8> +p=<738,943,775>, v=<-36,0,-63>, a=<-7,-16,-2> +p=<-437,-727,-595>, v=<54,123,63>, a=<-2,-8,0> +p=<633,-157,-1665>, v=<-86,-33,170>, a=<4,10,0> +p=<-312,-262,-110>, v=<-8,49,-13>, a=<7,-3,5> +p=<-897,1478,-1095>, v=<67,-92,113>, a=<4,-9,0> +p=<548,-502,880>, v=<-61,73,-101>, a=<1,-3,3> +p=<-957,-77,-260>, v=<18,3,-20>, a=<14,2,9> +p=<23,-1767,370>, v=<-25,128,-50>, a=<4,10,3> +p=<9335,-1502,-1376>, v=<-94,46,109>, a=<-12,0,-4> +p=<-89,-8910,-1472>, v=<19,162,13>, a=<-1,7,2> +p=<1431,402,7824>, v=<-45,-30,-30>, a=<0,1,-13> +p=<3607,-1854,-3216>, v=<-80,90,-15>, a=<-2,-2,7> +p=<-1431,-1856,4713>, v=<-152,52,-127>, a=<10,0,0> +p=<1418,-8072,-4870>, v=<56,30,132>, a=<-5,10,0> +p=<-5020,-6592,-2539>, v=<21,-67,12>, a=<6,13,3> +p=<1418,6284,-4574>, v=<-20,-16,-85>, a=<-1,-8,11> +p=<-1357,3879,-11493>, v=<36,30,-31>, a=<0,-7,18> +p=<4779,-2196,-6490>, v=<34,-13,-96>, a=<-9,4,15> +p=<405,8280,-820>, v=<63,-82,135>, a=<-4,-8,-6> +p=<-4347,2178,890>, v=<84,-42,-153>, a=<2,-1,7> +p=<7425,936,6740>, v=<-21,11,-1>, a=<-10,-2,-10> +p=<2030,-6060,5989>, v=<-94,68,9>, a=<2,5,-9> +p=<-3113,1562,-3557>, v=<121,-62,20>, a=<-2,1,4> +p=<15387,8111,-3927>, v=<-132,-11,-27>, a=<-15,-11,7> +p=<1105,-12905,-1522>, v=<-31,139,-16>, a=<0,11,3> +p=<-13843,4300,957>, v=<50,-22,12>, a=<17,-5,-2> +p=<1364,970,-338>, v=<-38,-46,-67>, a=<0,1,4> +p=<328,-9020,11539>, v=<-67,-23,-160>, a=<3,14,-8> +p=<1441,1858,-3933>, v=<-114,-33,72>, a=<4,-1,2> +p=<-12401,-6674,-9819>, v=<67,19,69>, a=<15,9,11> +p=<5095,6196,567>, v=<25,-24,-16>, a=<-9,-8,0> +p=<-4751,-4964,10125>, v=<21,27,-152>, a=<6,6,-7> +p=<-1546,-4772,-2286>, v=<41,141,-34>, a=<1,2,8> +p=<6784,-1538,4434>, v=<-126,-76,-129>, a=<-8,9,-2> +p=<-1896,4454,-2356>, v=<68,-58,70>, a=<0,-7,1> +p=<4166,296,2040>, v=<-47,-11,0>, a=<-7,0,-5> +p=<-7306,-125,-3525>, v=<148,-33,50>, a=<11,3,7> +p=<-4356,-8500,-3550>, v=<69,68,168>, a=<8,21,-2> +p=<1044,-225,-1950>, v=<-95,23,39>, a=<4,-1,3> +p=<-617,666,-1168>, v=<-14,-32,45>, a=<4,0,1> +p=<5515,5664,-1714>, v=<-141,-83,71>, a=<-11,-17,1> +p=<1735,-1329,-1084>, v=<50,96,52>, a=<-12,-3,0> +p=<1101,-5305,-338>, v=<-82,-26,-62>, a=<3,14,5> +p=<6843,1974,-4137>, v=<5,-37,-51>, a=<-16,-2,13> +p=<-206,-91,-1046>, v=<110,-61,68>, a=<-15,12,4> +p=<520,877,175>, v=<8,-47,-49>, a=<-9,-5,5> +p=<520,-795,65>, v=<-112,-9,-15>, a=<11,14,1> +p=<597,-608,-1046>, v=<-101,10,86>, a=<8,8,1> +p=<-1702,-190,230>, v=<138,2,54>, a=<3,3,-13> +p=<465,-1136,-1321>, v=<-29,58,87>, a=<-2,8,5> +p=<-1152,-487,-331>, v=<94,71,39>, a=<2,-4,-2> +p=<-1733,-1423,-1483>, v=<-61,121,34>, a=<10,-5,2> +p=<-3583,-148,-2933>, v=<78,-8,27>, a=<5,1,7> +p=<1292,-548,1717>, v=<-39,125,-16>, a=<-1,-8,-4> +p=<-333,2677,842>, v=<91,-4,-33>, a=<-6,-8,0> +p=<1542,4377,1792>, v=<-114,32,20>, a=<4,-16,-7> +p=<2192,402,-2183>, v=<16,22,36>, a=<-8,-3,4> +p=<1792,102,3467>, v=<32,-57,-125>, a=<-8,4,-1> +p=<17,2502,1642>, v=<25,29,-78>, a=<-2,-10,1> +p=<158,-2993,164>, v=<-42,8,-3>, a=<2,4,0> +p=<4820,-3011,2756>, v=<-5,-10,36>, a=<-7,5,-6> +p=<-3151,-4516,-1216>, v=<118,172,1>, a=<3,4,5> +p=<-1324,1385,-1867>, v=<-46,1,54>, a=<10,-6,3> +p=<-4012,1028,-2329>, v=<93,40,54>, a=<9,-8,5> +p=<524,-3697,1829>, v=<31,56,32>, a=<-5,11,-11> +p=<-7847,-3949,10230>, v=<-49,45,-93>, a=<13,3,-9> +p=<-969,-3322,-12874>, v=<-152,-69,203>, a=<9,8,7> +p=<-4579,2131,-1113>, v=<-57,41,69>, a=<9,-5,-2> +p=<-1140,-6286,-9758>, v=<67,126,121>, a=<-2,2,7> +p=<399,-8775,5271>, v=<7,16,-99>, a=<-1,11,-2> +p=<-1390,-740,258>, v=<152,-4,-23>, a=<-6,9,1> +p=<2276,-2742,11>, v=<-172,213,59>, a=<0,0,-8> +p=<1522,-714,63>, v=<-107,-62,-1>, a=<-1,17,0> +p=<-948,1236,492>, v=<-36,-86,8>, a=<16,-1,-6> +p=<-350,-1195,895>, v=<-68,24,5>, a=<14,10,-10> +p=<-662,1392,-106>, v=<61,-14,-30>, a=<-1,-13,6> +p=<2744,547,1090>, v=<-82,-82,-52>, a=<-18,6,-4> +p=<-714,508,-886>, v=<44,-79,44>, a=<2,6,4> +p=<91,79,957>, v=<-26,53,12>, a=<3,-10,-17> +p=<-96,1014,-1573>, v=<3,-80,140>, a=<1,-2,0> +p=<-393,827,55>, v=<48,-63,-8>, a=<-2,-2,0> +p=<872,-559,583>, v=<-49,57,-8>, a=<-5,-1,-8> +p=<-30,673,231>, v=<-57,-61,-60>, a=<10,0,6> +p=<-613,-702,1793>, v=<2,88,-70>, a=<9,-4,-16> +p=<663,596,-253>, v=<-48,-90,26>, a=<-2,6,-1> +p=<-394,705,481>, v=<4,30,-34>, a=<3,-10,0> +p=<61,-1297,-1430>, v=<84,38,50>, a=<-12,8,7> +p=<-233,1909,-163>, v=<15,-131,-33>, a=<0,0,6> +p=<-870,348,2105>, v=<83,-42,-45>, a=<-3,3,-14> +p=<1664,285,1755>, v=<-113,45,-35>, a=<-1,-8,-12> +p=<-1269,1545,-415>, v=<89,-60,-30>, a=<0,-6,8> +p=<-534,-261,1293>, v=<-1,-21,-92>, a=<5,6,0> +p=<-135,-121,-2557>, v=<-7,44,93>, a=<2,-4,12> +p=<1223,-415,292>, v=<-74,35,-28>, a=<-2,0,1> +p=<824,-1430,922>, v=<-68,115,-73>, a=<1,-1,1> +p=<-640,2303,-1594>, v=<-90,328,-227>, a=<5,-25,15> +p=<-1065,354,-3254>, v=<-152,47,-462>, a=<10,-3,31> +p=<2462,751,1569>, v=<346,107,226>, a=<-22,-7,-14> +p=<-106,-2052,-2044>, v=<-16,-295,-290>, a=<4,15,15> +p=<-2837,147,1838>, v=<-406,22,262>, a=<24,-6,-22> +p=<2592,-1392,-608>, v=<374,-198,-87>, a=<-23,12,7> +p=<1813,1582,-1758>, v=<259,229,-248>, a=<-18,-17,14> +p=<-1899,1420,658>, v=<-267,200,92>, a=<16,-16,-11> +p=<1208,-1527,-1923>, v=<172,-215,-275>, a=<-16,10,16> +p=<2156,-2278,169>, v=<307,-326,27>, a=<-21,22,-1> +p=<1056,-798,-2596>, v=<147,-116,-372>, a=<-9,7,28> +p=<-1199,620,2328>, v=<-171,88,326>, a=<14,1,-26> +p=<-2396,-657,2316>, v=<-338,-95,329>, a=<24,6,-22> +p=<-824,587,-2484>, v=<-121,82,-353>, a=<8,-2,28> +p=<1659,739,-2320>, v=<235,105,-333>, a=<-18,-8,23> +p=<-2673,-573,489>, v=<-379,-75,67>, a=<25,5,0> +p=<-1570,-2486,60>, v=<-229,-357,7>, a=<14,29,-2> +p=<-2626,179,257>, v=<-375,24,38>, a=<23,-1,-4> +p=<849,-331,-2900>, v=<120,-49,-417>, a=<-8,0,31> +p=<645,1229,2673>, v=<89,177,376>, a=<-6,-14,-28> +p=<-1480,-2064,-361>, v=<-211,-295,-55>, a=<14,21,5> +p=<-2665,43,1552>, v=<-381,6,223>, a=<30,3,-17> +p=<-1459,51,2649>, v=<-202,7,371>, a=<13,-3,-21> +p=<-1482,-2729,-452>, v=<-211,-391,-64>, a=<14,24,4> +p=<1608,2630,144>, v=<228,371,14>, a=<-16,-26,4> +p=<1165,499,2876>, v=<163,71,411>, a=<-12,-9,-30> +p=<2642,-695,-895>, v=<383,-101,-127>, a=<-23,1,4> +p=<-2614,-864,-1341>, v=<-370,-122,-187>, a=<26,8,10> +p=<-1044,729,-2321>, v=<-151,103,-328>, a=<5,-7,22> +p=<-1018,-916,-2755>, v=<-145,-129,-388>, a=<5,8,23> +p=<-3177,847,960>, v=<-456,120,143>, a=<30,-8,-2> +p=<1358,1463,-2332>, v=<194,215,-332>, a=<-15,-12,23> +p=<-1230,-3445,-695>, v=<-178,-496,-100>, a=<9,34,8> +p=<284,229,2992>, v=<41,34,427>, a=<-4,-2,-30> +p=<-1398,-1284,-2531>, v=<-195,-185,-358>, a=<12,18,30> +p=<280,1690,-1795>, v=<41,241,-252>, a=<-4,-16,19> +p=<-1556,637,2590>, v=<-215,94,374>, a=<15,-3,-25> +p=<1970,-1629,2345>, v=<282,-237,335>, a=<-14,13,-29> +p=<624,-2660,-1245>, v=<92,-377,-177>, a=<-6,27,12> +p=<2472,-1297,-1889>, v=<352,-187,-272>, a=<-21,11,21> +p=<1475,-2024,-2192>, v=<216,-292,-316>, a=<-19,18,22> +p=<2316,-1953,720>, v=<327,-284,103>, a=<-25,21,-5> +p=<-1493,692,-3102>, v=<-213,100,-443>, a=<14,-7,27> +p=<1825,1169,2010>, v=<263,164,287>, a=<-18,-10,-16> +p=<132,-416,2718>, v=<18,-59,390>, a=<-2,7,-26> +p=<-3328,-231,203>, v=<-477,-34,36>, a=<31,4,-4> +p=<-1458,911,-2505>, v=<-208,128,-357>, a=<16,-9,26> +p=<-232,2726,-1244>, v=<-34,389,-177>, a=<-3,-28,9> +p=<-2076,-2126,878>, v=<-297,-304,128>, a=<21,23,-10> +p=<3071,-1789,-978>, v=<444,-255,-139>, a=<-32,15,6> +p=<470,1352,2371>, v=<69,192,338>, a=<-1,-14,-19> +p=<-366,2757,334>, v=<-51,394,48>, a=<3,-23,-2> +p=<142,3704,-779>, v=<23,528,-111>, a=<-4,-35,6> +p=<-2560,678,-902>, v=<-365,96,-128>, a=<26,-4,10> +p=<-799,-1439,1718>, v=<-115,-205,245>, a=<2,16,-16> +p=<252,-205,2964>, v=<36,-31,420>, a=<-3,2,-29> +p=<1111,-2850,-712>, v=<159,-409,-107>, a=<-10,28,8> +p=<-460,2649,-1121>, v=<-67,382,-159>, a=<7,-32,15> +p=<3050,-961,419>, v=<434,-142,58>, a=<-31,13,-4> +p=<-690,583,3314>, v=<-98,86,474>, a=<8,-6,-34> +p=<1533,1358,-2236>, v=<218,195,-319>, a=<-15,-12,23> +p=<2116,1539,1334>, v=<296,223,196>, a=<-23,-12,-16> +p=<-480,-2566,1780>, v=<-70,-372,250>, a=<5,19,-14> +p=<-157,-2633,1171>, v=<-20,-380,163>, a=<0,30,-8> +p=<-551,2588,-222>, v=<-81,366,-28>, a=<11,-23,-1> +p=<-2411,917,589>, v=<-341,131,85>, a=<24,-8,-6> +p=<-889,-2793,-844>, v=<-130,-400,-122>, a=<12,24,8> +p=<1520,-2712,-490>, v=<219,-383,-68>, a=<-12,27,6> +p=<-1591,-1155,1957>, v=<-228,-169,282>, a=<14,15,-18> +p=<-2439,1395,-500>, v=<-347,199,-73>, a=<28,-12,5> +p=<-1337,172,-2489>, v=<-187,23,-355>, a=<18,3,23> +p=<316,-2188,1642>, v=<42,-313,230>, a=<-3,21,-17> +p=<-165,1828,-2025>, v=<-19,258,-292>, a=<1,-16,18> +p=<-1747,1095,1978>, v=<-244,154,284>, a=<18,-12,-25> +p=<-2666,540,-1200>, v=<-379,80,-168>, a=<25,1,8> +p=<1683,-834,-1770>, v=<240,-119,-252>, a=<-16,5,18> +p=<-2653,450,-388>, v=<-382,65,-56>, a=<31,3,7> +p=<2146,-2673,-252>, v=<307,-382,-35>, a=<-25,26,-1> +p=<-496,-2646,1797>, v=<-73,-379,258>, a=<3,24,-16> +p=<1530,360,-3009>, v=<217,48,-423>, a=<-15,-1,30> +p=<-640,-802,-2660>, v=<-88,-114,-376>, a=<7,7,28> +p=<-811,1540,-2260>, v=<-116,218,-322>, a=<1,-12,22> +p=<-2796,1328,-710>, v=<-396,191,-100>, a=<27,-13,7> +p=<129,472,2813>, v=<24,63,404>, a=<4,-2,-26> +p=<-1420,-2470,-1046>, v=<-201,-355,-153>, a=<21,18,6> +p=<2451,808,-944>, v=<347,115,-138>, a=<-24,-6,11> +p=<-40,2324,-1830>, v=<-3,330,-266>, a=<-1,-17,18> +p=<-82,3079,1442>, v=<-10,440,210>, a=<0,-26,-10> +p=<2698,-1471,-783>, v=<379,-209,-112>, a=<-26,16,9> +p=<2894,-1493,-387>, v=<412,-213,-57>, a=<-28,14,-3> +p=<1417,2516,-12>, v=<198,358,2>, a=<-17,-23,-2> +p=<747,2897,-1186>, v=<106,417,-165>, a=<-7,-33,15> +p=<-4,2281,-2417>, v=<-4,328,-340>, a=<6,-23,31> +p=<1737,-1461,2393>, v=<243,-202,335>, a=<-13,18,-30> +p=<-902,1843,-2360>, v=<-130,264,-337>, a=<11,-15,25> +p=<-1582,20,-1857>, v=<-227,-1,-263>, a=<14,-1,23> +p=<-1830,629,-1964>, v=<-258,85,-278>, a=<10,-8,17> +p=<-2085,1038,-866>, v=<-292,149,-127>, a=<21,-10,8> +p=<-1186,2355,1683>, v=<-169,335,243>, a=<11,-23,-16> +p=<-2259,248,-2209>, v=<-324,35,-314>, a=<22,0,21> +p=<-1283,-2116,1398>, v=<-186,-301,202>, a=<7,19,-21> +p=<-645,-3178,1278>, v=<-90,-449,181>, a=<6,26,-15> +p=<-1736,-2087,-1254>, v=<-249,-297,-181>, a=<17,19,14> +p=<183,-1786,-1791>, v=<26,-249,-259>, a=<-1,19,17> +p=<2465,-1286,-188>, v=<355,-185,-26>, a=<-24,12,4> +p=<234,-1280,-2961>, v=<29,-180,-419>, a=<-2,13,25> +p=<1084,1772,-2323>, v=<151,254,-331>, a=<-10,-15,23> +p=<-33,-757,2842>, v=<-7,-110,407>, a=<1,7,-27> +p=<-62,223,-2854>, v=<-6,30,-407>, a=<4,-2,29> +p=<-1939,-2234,-470>, v=<-276,-318,-65>, a=<18,23,6> +p=<-1064,-2485,1011>, v=<-154,-357,141>, a=<10,28,-5> +p=<-2793,-281,1074>, v=<-400,-36,156>, a=<25,2,-9> +p=<-2153,1885,362>, v=<-301,274,50>, a=<19,-19,0> +p=<-1097,2219,-1431>, v=<-157,314,-207>, a=<11,-22,12> +p=<1795,-2653,694>, v=<256,-382,99>, a=<-18,29,-6> +p=<-1706,2021,-841>, v=<-238,287,-120>, a=<17,-25,10> +p=<-163,-1743,1795>, v=<-26,-252,258>, a=<1,17,-17> +p=<1425,1729,977>, v=<202,243,138>, a=<-13,-17,-10> +p=<648,2109,-994>, v=<90,303,-143>, a=<-3,-19,14> +p=<-1738,468,1971>, v=<-249,65,278>, a=<18,0,-20> +p=<1045,1218,2731>, v=<148,175,394>, a=<-8,-11,-27> +p=<-540,1940,-2022>, v=<-77,280,-283>, a=<5,-21,17> +p=<-2979,1549,-239>, v=<-430,222,-34>, a=<27,-21,0> +p=<-2598,-2175,-183>, v=<-374,-314,-26>, a=<21,19,2> +p=<-1391,2880,-1142>, v=<-195,410,-163>, a=<9,-28,12> +p=<-1253,-1245,2513>, v=<-182,-173,362>, a=<12,13,-22> +p=<771,75,2400>, v=<104,11,342>, a=<-7,4,-25> +p=<468,988,-2854>, v=<67,143,-403>, a=<1,-13,25> +p=<-1290,2001,1041>, v=<-180,286,148>, a=<12,-22,-8> +p=<11,-1463,2584>, v=<-4,-215,375>, a=<0,13,-30> +p=<1672,-2459,-1046>, v=<233,-348,-149>, a=<-21,24,15> +p=<-1973,2358,-291>, v=<-279,338,-37>, a=<21,-23,1> +p=<327,-2775,2079>, v=<49,-396,298>, a=<-4,32,-24> +p=<-2260,400,-2962>, v=<-327,56,-422>, a=<22,-8,28> +p=<-431,-282,3083>, v=<-61,-39,440>, a=<1,5,-24> +p=<-2378,1821,-1219>, v=<-331,261,-174>, a=<14,-22,18> +p=<187,2556,-1007>, v=<26,368,-146>, a=<-2,-24,10> +p=<1417,-2451,289>, v=<199,-350,40>, a=<-19,25,-3> +p=<-2105,292,2336>, v=<-295,42,329>, a=<22,-1,-23> +p=<1397,2026,1405>, v=<200,289,200>, a=<-8,-19,-11> +p=<2364,323,-382>, v=<341,49,-58>, a=<-21,-6,4> +p=<-256,-3019,633>, v=<-36,-430,90>, a=<2,35,-5> +p=<3025,-164,1078>, v=<429,-21,153>, a=<-29,1,-9> +p=<2723,-2091,-29>, v=<388,-297,-3>, a=<-29,16,-2> +p=<197,709,2512>, v=<30,108,362>, a=<-6,-5,-25> +p=<-1843,874,1771>, v=<-261,131,253>, a=<17,-12,-17> +p=<2707,-769,818>, v=<382,-107,112>, a=<-26,9,-4> +p=<164,-239,3326>, v=<20,-36,474>, a=<-5,-2,-35> +p=<-1484,-1867,1429>, v=<-211,-271,204>, a=<12,18,-16> +p=<-1091,-1732,-2881>, v=<-154,-248,-411>, a=<8,15,29> +p=<2142,1579,-1231>, v=<306,223,-177>, a=<-19,-18,6> +p=<-2977,300,945>, v=<-425,44,133>, a=<30,3,-7> +p=<1742,1775,-36>, v=<244,253,-7>, a=<-17,-17,5> +p=<-1594,-2674,495>, v=<-230,-382,74>, a=<13,21,-1> +p=<-1665,2225,-1776>, v=<-240,314,-250>, a=<17,-21,17> +p=<142,2432,-376>, v=<18,351,-52>, a=<-2,-16,2> +p=<-950,1633,1739>, v=<-139,229,248>, a=<9,-16,-17> +p=<-2816,-480,-893>, v=<-404,-71,-131>, a=<31,6,8> +p=<-455,932,2810>, v=<-69,135,403>, a=<3,-13,-27> +p=<-3730,366,-606>, v=<-532,55,-86>, a=<37,-3,4> +p=<252,-2577,-244>, v=<36,-367,-35>, a=<-6,26,3> +p=<801,-2233,-1237>, v=<112,-315,-174>, a=<-8,27,13> +p=<2442,-462,1909>, v=<350,-65,270>, a=<-22,5,-12> +p=<-2324,1403,-1040>, v=<-332,203,-139>, a=<22,-13,12> +p=<-2533,1295,-1541>, v=<-361,183,-221>, a=<25,-11,17> +p=<-1512,-932,1936>, v=<-216,-134,276>, a=<18,9,-18> +p=<2274,1583,-1494>, v=<319,227,-214>, a=<-21,-17,14> +p=<-2158,-1734,-2643>, v=<-302,-242,-377>, a=<26,15,26> +p=<687,954,2298>, v=<94,130,329>, a=<-12,-8,-28> +p=<-2296,571,-1404>, v=<-334,81,-198>, a=<24,-5,13> +p=<-431,2980,489>, v=<-55,424,64>, a=<4,-33,-4> +p=<-2237,-2695,-582>, v=<-316,-385,-83>, a=<21,32,5> +p=<-1619,759,-2656>, v=<-225,114,-380>, a=<19,-12,26> +p=<945,447,3126>, v=<130,61,444>, a=<-12,-9,-31> +p=<2412,-1076,1127>, v=<344,-158,158>, a=<-28,8,-7> +p=<77,3074,-1824>, v=<14,438,-257>, a=<0,-30,21> +p=<1306,1552,-1954>, v=<187,222,-281>, a=<-16,-13,18> +p=<808,2843,1357>, v=<116,408,190>, a=<-9,-28,-10> +p=<-105,-919,2898>, v=<-15,-129,418>, a=<1,13,-28> +p=<994,1043,-1978>, v=<140,151,-279>, a=<-9,-9,20> +p=<3077,70,482>, v=<442,10,68>, a=<-32,-1,-6> +p=<-2772,1,-1392>, v=<-397,-2,-201>, a=<30,2,13> +p=<1297,-2205,120>, v=<184,-321,17>, a=<-9,20,0> +p=<-3102,-5,-1354>, v=<-444,3,-194>, a=<30,-1,12> +p=<-1621,-2313,374>, v=<-235,-329,52>, a=<18,20,-3> +p=<1902,-240,2425>, v=<266,-34,348>, a=<-19,1,-25> +p=<-1803,-1696,-543>, v=<-257,-238,-74>, a=<21,18,4> +p=<2854,-216,1608>, v=<404,-28,229>, a=<-30,6,-13> +p=<1502,-1352,-2578>, v=<211,-192,-364>, a=<-15,19,16> +p=<1559,-2311,-45>, v=<220,-328,-6>, a=<-17,22,5> +p=<-402,2270,-796>, v=<-58,325,-110>, a=<7,-21,3> +p=<-1370,-11,-2620>, v=<-196,3,-373>, a=<13,4,31> +p=<-953,3009,1273>, v=<-138,429,181>, a=<8,-33,-15> +p=<1782,-1172,-2352>, v=<255,-164,-337>, a=<-20,11,27> +p=<2237,418,2402>, v=<322,59,341>, a=<-21,-8,-24> +p=<2252,1657,1721>, v=<320,238,247>, a=<-20,-18,-15> +p=<-1315,-2410,1308>, v=<-189,-340,189>, a=<10,26,-18> +p=<48,244,-2745>, v=<2,35,-388>, a=<3,-3,29> +p=<1665,2253,-689>, v=<237,317,-98>, a=<-17,-21,5> +p=<1117,-1998,-2158>, v=<161,-285,-308>, a=<-9,21,22> +p=<-1209,2307,-403>, v=<-172,324,-58>, a=<11,-24,2> +p=<-2058,1700,1773>, v=<-291,243,254>, a=<20,-17,-18> +p=<-995,-1138,-2951>, v=<-138,-163,-418>, a=<8,13,27> +p=<785,-983,2672>, v=<116,-146,383>, a=<-7,10,-26> +p=<-1923,-330,-1677>, v=<-271,-41,-241>, a=<16,4,16> +p=<1401,1896,937>, v=<197,268,131>, a=<-16,-15,-10> +p=<-572,2692,1022>, v=<-83,384,149>, a=<1,-24,-10> +p=<1741,1338,-1868>, v=<253,193,-269>, a=<-17,-10,17> +p=<1566,2188,350>, v=<225,312,48>, a=<-16,-21,-4> +p=<-1734,-1324,-1866>, v=<-244,-188,-269>, a=<17,13,17> +p=<3149,-129,-952>, v=<449,-16,-132>, a=<-32,-1,11> +p=<2091,-1276,-782>, v=<293,-179,-108>, a=<-21,10,11> +p=<1814,2072,315>, v=<260,295,47>, a=<-18,-21,-6> +p=<-1036,-1282,1829>, v=<-147,-189,265>, a=<10,14,-18> +p=<-2434,-333,-1071>, v=<-347,-45,-155>, a=<23,2,7> +p=<2813,315,265>, v=<397,43,35>, a=<-29,-3,-2> +p=<704,-541,-2684>, v=<100,-81,-383>, a=<-8,2,25> +p=<180,-1863,-2277>, v=<28,-266,-326>, a=<-2,12,22> +p=<-537,478,-3146>, v=<-73,72,-449>, a=<1,-3,29> +p=<-2275,1286,1169>, v=<-326,182,165>, a=<21,-16,-13> +p=<-3153,-167,839>, v=<-452,-22,117>, a=<31,5,-8> +p=<-2659,-1005,-62>, v=<-379,-143,-11>, a=<33,14,0> +p=<-2857,1552,-245>, v=<-403,219,-34>, a=<26,-15,-2> +p=<-2420,1189,-1497>, v=<-348,165,-213>, a=<22,-10,13> +p=<-996,-2088,1463>, v=<-141,-296,209>, a=<10,21,-13> +p=<785,-2777,-89>, v=<111,-396,-11>, a=<-10,22,2> +p=<-3064,52,457>, v=<-439,3,58>, a=<29,0,-1> +p=<-2003,1537,-2027>, v=<-286,222,-283>, a=<18,-14,20> +p=<-2744,192,516>, v=<-390,27,75>, a=<28,-1,-8> +p=<2627,428,1268>, v=<377,62,183>, a=<-26,-4,-11> +p=<2370,516,-2130>, v=<335,71,-306>, a=<-25,-4,20> +p=<-167,2752,-190>, v=<-23,391,-27>, a=<1,-24,0> +p=<-2333,-1758,399>, v=<-332,-254,59>, a=<23,10,-4> +p=<115,1289,-2001>, v=<17,186,-285>, a=<0,-12,22> +p=<-1645,320,-2350>, v=<-235,48,-336>, a=<15,1,23> +p=<168,539,-2987>, v=<26,80,-429>, a=<4,-6,30> +p=<550,109,2265>, v=<77,14,323>, a=<-1,-1,-15> +p=<2314,-1485,1355>, v=<330,-206,194>, a=<-21,21,-13> +p=<-2350,1553,904>, v=<-337,226,132>, a=<17,-17,-9> +p=<-1292,2795,-539>, v=<-184,402,-74>, a=<12,-30,8> +p=<-770,-1190,-2785>, v=<-108,-172,-397>, a=<7,9,30> +p=<-2348,-1197,1425>, v=<-336,-172,211>, a=<23,14,-13> +p=<1914,787,1936>, v=<275,112,273>, a=<-19,-8,-16> +p=<-20,934,-2534>, v=<-2,133,-361>, a=<0,-9,24> +p=<-1896,-1410,1509>, v=<-269,-201,214>, a=<14,14,-11> +p=<-3039,-1083,-1197>, v=<-436,-151,-174>, a=<30,14,12> +p=<-703,-1842,2083>, v=<-100,-263,297>, a=<8,21,-21> +p=<-865,2968,-1508>, v=<-121,421,-215>, a=<8,-31,19> +p=<3111,410,1160>, v=<442,62,161>, a=<-26,-4,-15> +p=<-783,2409,-1292>, v=<-107,344,-184>, a=<7,-24,11> +p=<3426,56,23>, v=<492,10,-1>, a=<-31,2,0> +p=<-3055,796,570>, v=<-440,112,73>, a=<28,-6,-8> +p=<-407,1576,2244>, v=<-62,226,323>, a=<3,-11,-22> +p=<-1560,2842,919>, v=<-221,405,133>, a=<14,-26,-7> +p=<2900,635,1073>, v=<411,92,158>, a=<-26,-3,-7> +p=<-2028,-452,2148>, v=<-286,-59,306>, a=<22,4,-20> +p=<-2567,1085,45>, v=<-371,157,1>, a=<32,-18,-1> +p=<-991,1405,2370>, v=<-142,203,340>, a=<9,-14,-23> +p=<142,-1409,-2144>, v=<15,-199,-308>, a=<0,8,26> +p=<1497,303,-2973>, v=<213,42,-427>, a=<-13,-6,33> +p=<-1158,221,2675>, v=<-167,32,380>, a=<9,5,-25> +p=<-147,-400,3215>, v=<-21,-51,459>, a=<-1,0,-32> +p=<-1828,-2033,567>, v=<-263,-290,82>, a=<19,26,-4> +p=<-1953,1811,-2055>, v=<-278,255,-294>, a=<15,-18,14> +p=<-838,-1721,-2258>, v=<-119,-250,-324>, a=<10,16,25> +p=<598,-1963,-2331>, v=<84,-274,-335>, a=<-5,21,24> +p=<-210,400,-2911>, v=<-29,61,-416>, a=<4,-9,31> +p=<-1336,-1236,2422>, v=<-192,-175,348>, a=<9,11,-27> +p=<2593,1842,156>, v=<366,258,23>, a=<-26,-22,3> +p=<683,-2491,2131>, v=<94,-355,301>, a=<-5,26,-19> +p=<-1754,-1837,-1551>, v=<-249,-262,-221>, a=<15,23,13> +p=<1971,2423,440>, v=<278,345,64>, a=<-23,-24,-1> +p=<-398,2348,1947>, v=<-56,333,281>, a=<-2,-23,-19> +p=<2374,-1106,-1948>, v=<339,-158,-282>, a=<-24,13,22> +p=<-989,-1488,-1769>, v=<-148,-214,-252>, a=<9,12,12> +p=<2259,-943,-1333>, v=<318,-135,-185>, a=<-21,9,8> +p=<2871,-44,150>, v=<412,-7,23>, a=<-26,2,-2> +p=<876,-1583,-1974>, v=<131,-232,-281>, a=<-12,18,14> +p=<-597,-2656,690>, v=<-82,-383,91>, a=<5,26,-8> +p=<3218,-115,-141>, v=<455,-18,-18>, a=<-36,0,5> +p=<1347,-17,-2874>, v=<195,-2,-410>, a=<-16,-4,28> +p=<2607,646,1802>, v=<375,90,259>, a=<-30,-7,-18> +p=<2246,-82,1413>, v=<316,-6,200>, a=<-21,-5,-11> +p=<-1515,2402,-1329>, v=<-208,341,-188>, a=<16,-22,15> +p=<-740,-2443,839>, v=<-106,-345,118>, a=<9,27,-9> +p=<-370,-1496,2055>, v=<-57,-212,293>, a=<5,14,-19> +p=<-1652,-1944,-1349>, v=<-236,-281,-184>, a=<9,16,13> +p=<-2499,2057,-233>, v=<-355,294,-32>, a=<24,-21,2> +p=<307,-2054,1512>, v=<38,-293,216>, a=<-4,19,-16> +p=<-2617,-1535,-1691>, v=<-371,-221,-238>, a=<26,14,19> +p=<1419,2503,374>, v=<205,362,55>, a=<-18,-25,-3> +p=<2882,48,1837>, v=<407,3,267>, a=<-26,-4,-22> +p=<-563,-3347,223>, v=<-79,-476,34>, a=<7,33,-2> +p=<-814,-2302,-208>, v=<-116,-326,-29>, a=<7,21,2> +p=<2886,-461,892>, v=<417,-72,127>, a=<-30,4,-11> +p=<38,-829,2517>, v=<9,-117,361>, a=<0,6,-29> +p=<1954,768,-1801>, v=<278,111,-257>, a=<-22,-7,22> +p=<-1138,-848,2144>, v=<-161,-121,307>, a=<14,13,-20> +p=<-2676,69,-662>, v=<-388,11,-94>, a=<26,0,6> +p=<-1190,-2014,1742>, v=<-170,-287,249>, a=<11,21,-20> +p=<-865,2859,-981>, v=<-126,407,-140>, a=<8,-31,12> +p=<3060,1455,828>, v=<437,209,118>, a=<-25,-19,-6> +p=<1292,-1828,-1200>, v=<181,-268,-168>, a=<-13,18,9> +p=<-2351,-1092,557>, v=<-339,-155,81>, a=<23,13,-3> +p=<1107,-2033,693>, v=<155,-290,100>, a=<-7,21,-10> +p=<-962,323,3456>, v=<-140,48,493>, a=<11,-4,-30> +p=<2434,637,-1784>, v=<348,96,-252>, a=<-24,-9,18> +p=<2157,1618,59>, v=<308,226,8>, a=<-25,-20,-2> +p=<849,-62,-2418>, v=<121,-8,-344>, a=<-7,-3,23> +p=<2762,1436,-1383>, v=<394,207,-197>, a=<-23,-15,11> +p=<-3036,419,878>, v=<-432,57,124>, a=<24,1,-10> +p=<2503,1489,-756>, v=<356,217,-109>, a=<-25,-12,4> +p=<-1397,-2563,-133>, v=<-199,-361,-19>, a=<12,23,1> +p=<-288,1425,-3042>, v=<-41,207,-432>, a=<1,-13,29> +p=<24,2975,447>, v=<2,428,63>, a=<-2,-37,-4> +p=<285,-2013,-2331>, v=<34,-287,-329>, a=<5,25,26> +p=<-634,-2885,-1380>, v=<-90,-410,-196>, a=<4,31,16> +p=<-2550,-1613,1326>, v=<-369,-228,189>, a=<22,15,-12> +p=<-260,-1885,1699>, v=<-40,-269,242>, a=<7,18,-16> +p=<-632,1319,2283>, v=<-91,186,323>, a=<4,-18,-22> +p=<-865,-2642,-279>, v=<-126,-373,-39>, a=<3,24,0> +p=<2223,-1977,880>, v=<317,-281,130>, a=<-23,20,-8> +p=<42,2810,-450>, v=<10,401,-65>, a=<0,-24,0> +p=<-950,2330,2037>, v=<-134,332,291>, a=<4,-23,-18> +p=<1044,286,3174>, v=<151,40,451>, a=<-8,-1,-30> +p=<-932,2492,-342>, v=<-135,352,-53>, a=<9,-25,-1> +p=<3318,808,-839>, v=<473,112,-125>, a=<-33,-7,8> +p=<2190,802,1373>, v=<314,108,196>, a=<-21,-10,-13> +p=<-110,2227,2514>, v=<-13,321,357>, a=<1,-26,-22> +p=<-762,-2542,1571>, v=<-107,-363,219>, a=<7,27,-15> +p=<-843,1461,-2501>, v=<-121,208,-360>, a=<6,-15,25> +p=<1037,-2192,-1862>, v=<146,-314,-266>, a=<-9,21,16> +p=<1428,-2502,783>, v=<208,-357,117>, a=<-12,24,-1> +p=<-1519,802,-2626>, v=<-214,115,-375>, a=<12,-10,21> +p=<-2483,1663,1263>, v=<-349,237,180>, a=<19,-18,-17> +p=<1246,-500,2566>, v=<175,-69,366>, a=<-15,2,-25> +p=<-2286,-1779,-461>, v=<-327,-255,-65>, a=<22,23,2> +p=<350,3135,1064>, v=<50,449,152>, a=<-3,-31,-6> +p=<-506,275,-2858>, v=<-70,47,-408>, a=<6,-1,29> +p=<2283,2049,-751>, v=<328,292,-107>, a=<-18,-23,12> +p=<-1926,-1360,-1240>, v=<-279,-194,-175>, a=<19,15,14> +p=<1343,457,-2363>, v=<185,63,-333>, a=<-13,-2,23> +p=<-1206,2687,-982>, v=<-173,379,-140>, a=<8,-22,15> +p=<2187,30,2741>, v=<312,5,391>, a=<-21,2,-25> +p=<2627,1354,-644>, v=<375,193,-92>, a=<-23,-13,-2> +p=<2234,1551,-629>, v=<314,221,-87>, a=<-21,-15,6> +p=<-2224,181,-1582>, v=<-317,28,-226>, a=<19,-2,18> +p=<-1203,943,2568>, v=<-174,137,364>, a=<12,-2,-28> +p=<1723,2089,584>, v=<247,300,80>, a=<-17,-19,-9> +p=<1087,-867,2921>, v=<156,-126,421>, a=<-10,7,-29> +p=<359,-2816,1809>, v=<51,-402,255>, a=<0,28,-19> +p=<1010,1125,-2626>, v=<144,160,-377>, a=<-13,-17,27> +p=<-2218,1407,-767>, v=<-321,206,-110>, a=<24,-16,1> +p=<-3075,459,556>, v=<-436,65,76>, a=<28,-5,-5> +p=<-711,3207,1693>, v=<-97,457,242>, a=<10,-35,-20> +p=<2313,-442,-2190>, v=<330,-64,-315>, a=<-19,2,18> +p=<-1225,2747,-653>, v=<-177,394,-93>, a=<8,-30,5> +p=<1874,-2001,-949>, v=<267,-285,-133>, a=<-18,21,8> +p=<1135,-2961,-1056>, v=<159,-420,-148>, a=<-9,25,9> +p=<-992,1847,1999>, v=<-139,262,285>, a=<7,-22,-23> +p=<355,2681,-983>, v=<50,383,-140>, a=<-4,-27,15> +p=<-366,-2446,1278>, v=<-52,-353,183>, a=<4,27,-12> +p=<1878,-2548,244>, v=<268,-365,33>, a=<-18,27,0> +p=<2552,811,567>, v=<366,110,84>, a=<-25,-8,-8> +p=<3105,498,303>, v=<444,68,45>, a=<-31,-5,-2> +p=<167,-2030,-2095>, v=<20,-290,-300>, a=<2,16,26> +p=<637,2069,1692>, v=<83,294,243>, a=<-9,-20,-18> +p=<279,-2256,1998>, v=<45,-322,285>, a=<-6,21,-14> +p=<1300,-1475,2240>, v=<185,-210,320>, a=<-13,10,-26> +p=<-909,1932,1771>, v=<-128,280,256>, a=<4,-20,-20> +p=<-2564,-1688,925>, v=<-368,-238,129>, a=<27,16,-11> +p=<-1016,-2945,738>, v=<-147,-419,106>, a=<9,33,-5> +p=<-53,-2665,-2270>, v=<-11,-379,-324>, a=<-2,28,19> +p=<1575,642,2511>, v=<223,94,355>, a=<-17,-1,-16> +p=<1038,2769,151>, v=<144,397,21>, a=<-12,-27,-3> +p=<2607,805,-1130>, v=<372,115,-161>, a=<-27,-9,11> +p=<2070,170,2504>, v=<298,21,356>, a=<-24,-4,-26> +p=<-2063,152,-2561>, v=<-295,24,-365>, a=<16,-4,31> +p=<2655,-493,-835>, v=<379,-69,-115>, a=<-26,8,7> +p=<-2780,900,-676>, v=<-397,132,-100>, a=<29,-11,6> +p=<252,2668,1762>, v=<39,379,250>, a=<-2,-29,-17> +p=<-2790,-731,-1001>, v=<-395,-101,-140>, a=<26,6,13> +p=<-1229,497,-2048>, v=<-171,72,-295>, a=<12,1,23> +p=<2491,1388,1334>, v=<356,203,191>, a=<-29,-14,-12> +p=<2321,-1287,2441>, v=<333,-179,351>, a=<-24,14,-23> +p=<1460,2731,-68>, v=<209,390,-5>, a=<-15,-28,7> +p=<1398,618,2852>, v=<202,87,407>, a=<-11,-1,-32> +p=<47,1927,2446>, v=<9,271,348>, a=<-1,-25,-19> +p=<757,2073,-2212>, v=<113,296,-317>, a=<-6,-25,21> +p=<-1045,2707,-1885>, v=<-145,385,-264>, a=<5,-27,18> +p=<-1495,-818,-1857>, v=<-215,-118,-262>, a=<14,9,12> +p=<-2627,-718,-1764>, v=<-378,-101,-252>, a=<25,9,18> +p=<2024,960,1742>, v=<293,135,254>, a=<-27,-9,-21> +p=<1784,2855,-138>, v=<252,406,-15>, a=<-16,-32,1> +p=<-2160,-710,-1609>, v=<-304,-103,-223>, a=<17,6,17> +p=<-2478,-2089,95>, v=<-353,-299,15>, a=<28,23,1> +p=<2435,527,2073>, v=<347,75,296>, a=<-27,-4,-20> +p=<-1352,2955,791>, v=<-193,424,117>, a=<13,-31,-6> +p=<3003,1189,678>, v=<424,169,100>, a=<-30,-9,-10> +p=<604,-799,2066>, v=<89,-115,292>, a=<-10,10,-17> +p=<-2506,-1768,406>, v=<-354,-247,58>, a=<30,16,-2> +p=<-1310,-352,-1934>, v=<-188,-48,-276>, a=<13,6,19> +p=<1378,-2170,834>, v=<196,-312,122>, a=<-13,22,-8> +p=<-714,2923,-799>, v=<-107,414,-115>, a=<8,-30,7> +p=<906,232,-2566>, v=<128,32,-362>, a=<-9,2,18> +p=<-2288,-1476,1309>, v=<-327,-210,183>, a=<22,14,-13> +p=<1697,1613,308>, v=<240,226,45>, a=<-16,-18,-4> +p=<2453,773,-1994>, v=<353,111,-283>, a=<-25,-6,24> +p=<2094,-2409,33>, v=<295,-347,4>, a=<-15,25,2> +p=<526,-1113,2073>, v=<77,-157,294>, a=<-5,12,-21> +p=<-2442,591,-1823>, v=<-349,83,-262>, a=<24,-1,17> +p=<-335,-2835,592>, v=<-43,-406,86>, a=<4,28,-4> +p=<-2785,-972,229>, v=<-394,-135,36>, a=<23,11,-1> +p=<-1100,-1480,1796>, v=<-154,-210,257>, a=<10,17,-20> +p=<2325,1914,-452>, v=<332,272,-60>, a=<-23,-21,2> +p=<2180,1218,2887>, v=<313,177,412>, a=<-19,-12,-29> +p=<2374,-881,-1454>, v=<334,-132,-207>, a=<-22,13,16> +p=<-1748,2499,-1372>, v=<-248,359,-196>, a=<17,-23,16> +p=<1727,-1109,1790>, v=<246,-160,255>, a=<-19,13,-19> +p=<905,1527,-2078>, v=<121,218,-303>, a=<-5,-16,19> +p=<2420,-59,2292>, v=<347,-12,329>, a=<-24,0,-16> +p=<2287,-1783,1206>, v=<328,-257,170>, a=<-21,20,-14> +p=<-2664,-152,-1382>, v=<-374,-23,-198>, a=<26,1,13> +p=<-1081,1292,-2263>, v=<-158,184,-324>, a=<5,-11,24> +p=<2446,-545,-2289>, v=<350,-75,-328>, a=<-25,7,22> +p=<2235,-1381,-2054>, v=<322,-198,-298>, a=<-22,16,26> +p=<-3257,-154,-718>, v=<-466,-23,-101>, a=<29,-2,7> +p=<1673,1690,516>, v=<244,239,70>, a=<-19,-22,-6> +p=<1385,-2456,418>, v=<196,-350,58>, a=<-17,25,-4> +p=<2985,-884,-799>, v=<428,-119,-111>, a=<-33,5,7> +p=<-1513,2311,-173>, v=<-212,328,-23>, a=<15,-20,-4> +p=<-2074,-1496,-1222>, v=<-297,-214,-176>, a=<24,18,12> +p=<-2057,-370,-2301>, v=<-294,-52,-326>, a=<21,6,23> +p=<-2227,-2336,-145>, v=<-320,-339,-18>, a=<22,22,-3> +p=<2914,1632,652>, v=<414,227,94>, a=<-28,-16,-6> +p=<-1038,-2308,1378>, v=<-152,-333,198>, a=<13,31,-15> +p=<643,-1788,-2511>, v=<94,-255,-361>, a=<-2,21,23> +p=<902,2772,-1464>, v=<131,400,-212>, a=<-10,-23,17> +p=<1063,-1453,2430>, v=<156,-209,349>, a=<-10,16,-22> +p=<-224,3075,442>, v=<-29,439,67>, a=<-1,-31,1> +p=<-1373,-2192,-921>, v=<-196,-313,-132>, a=<13,24,8> +p=<-3353,295,495>, v=<-481,42,66>, a=<31,-1,-10> +p=<-1853,809,2625>, v=<-260,110,375>, a=<17,-4,-26> +p=<78,-1196,2121>, v=<9,-171,303>, a=<2,6,-18> +p=<3114,913,1260>, v=<443,123,184>, a=<-28,-10,-8> +p=<2387,-357,370>, v=<341,-48,51>, a=<-29,2,-3> +p=<-2301,-1677,-546>, v=<-328,-241,-75>, a=<22,16,3> +p=<1126,2571,-1330>, v=<157,367,-193>, a=<-13,-25,13> +p=<1806,345,2195>, v=<258,46,317>, a=<-20,-3,-18> +p=<1375,2815,-293>, v=<194,400,-43>, a=<-13,-28,0> +p=<2393,-1081,1055>, v=<342,-154,156>, a=<-23,13,-10> +p=<-74,1914,-2448>, v=<-14,273,-350>, a=<2,-17,23> +p=<2018,-1928,814>, v=<287,-279,114>, a=<-23,12,-10> +p=<-89,1458,2267>, v=<-14,213,322>, a=<-1,-16,-22> +p=<-2310,1272,-1141>, v=<-328,178,-156>, a=<23,-12,10> +p=<1157,2183,885>, v=<162,309,120>, a=<-11,-19,-5> +p=<-2528,2520,163>, v=<-360,364,20>, a=<25,-29,4> +p=<1873,1210,2281>, v=<268,176,327>, a=<-22,-10,-25> +p=<-654,-2387,-1867>, v=<-91,-341,-267>, a=<1,22,17> +p=<1619,-1540,-1714>, v=<226,-222,-247>, a=<-20,13,17> +p=<-2781,1254,-451>, v=<-399,186,-64>, a=<26,-13,0> diff --git a/2017/inputs/day_21.txt b/2017/inputs/day_21.txt new file mode 100644 index 0000000..280e26d --- /dev/null +++ b/2017/inputs/day_21.txt @@ -0,0 +1,108 @@ +../.. => ..#/#../.#. +#./.. => #../#../... +##/.. => ###/#.#/#.. +.#/#. => ###/##./.#. +##/#. => .../.#./..# +##/## => ##./#.#/### +.../.../... => ##../.#../#.#./.... +#../.../... => ..../##.#/...#/##.# +.#./.../... => ###./####/#.../#..# +##./.../... => ###./.##./...#/..## +#.#/.../... => .###/.##./#.../#.## +###/.../... => ##.#/#..#/#.#./#.## +.#./#../... => #.#./.###/#.../#.## +##./#../... => #.../####/#.##/.... +..#/#../... => #.##/..#./...#/...# +#.#/#../... => #.##/####/.#.#/#.#. +.##/#../... => #.../##../##.#/.##. +###/#../... => ..../#.#./.###/#... +.../.#./... => .#.#/#..#/##../#.## +#../.#./... => ###./.###/.#.#/..#. +.#./.#./... => ..##/.##./..##/.#.# +##./.#./... => ..#./##../###./...# +#.#/.#./... => ..##/.##./.###/###. +###/.#./... => ..#./.###/###./#.## +.#./##./... => ###./..../.#../#... +##./##./... => .#.#/##../##.#/...# +..#/##./... => ##.#/.##./.###/..## +#.#/##./... => .###/..#./#.##/#### +.##/##./... => ##.#/..#./..##/###. +###/##./... => ..../.#.#/.#../#... +.../#.#/... => ###./.#.#/.#../#.## +#../#.#/... => ####/#..#/..../.... +.#./#.#/... => #.../..##/#.##/#.#. +##./#.#/... => #.#./###./##../#.#. +#.#/#.#/... => ...#/.##./.##./.#.. +###/#.#/... => ..../.##./####/#.#. +.../###/... => .###/.#../.###/#.## +#../###/... => ..##/..##/.##./##.. +.#./###/... => .#.#/..#./..##/##.# +##./###/... => ...#/#.##/#.#./##.# +#.#/###/... => #.##/.##./...#/###. +###/###/... => ##../...#/..##/#### +..#/.../#.. => #.##/#.../.#../#.#. +#.#/.../#.. => .##./.##./.#.#/.##. +.##/.../#.. => .#.#/#.##/...#/##.# +###/.../#.. => ##../..#./...#/##.. +.##/#../#.. => ##../..##/#..#/#..# +###/#../#.. => ##../..#./#.#./.... +..#/.#./#.. => .##./##.#/##../#### +#.#/.#./#.. => ####/...#/.#.#/..#. +.##/.#./#.. => .#.#/..#./##.#/.#.. +###/.#./#.. => #.../#.##/..../##.# +.##/##./#.. => #.#./#.#./#.##/#.#. +###/##./#.. => ...#/###./.##./.#.# +#../..#/#.. => ####/####/..../.##. +.#./..#/#.. => #.##/...#/..#./#### +##./..#/#.. => ..#./#.../..##/#### +#.#/..#/#.. => #.../#.##/#.##/..## +.##/..#/#.. => ####/..../##../#### +###/..#/#.. => ..../##.#/.##./#### +#../#.#/#.. => ...#/..##/###./#..# +.#./#.#/#.. => #..#/..#./.###/##.# +##./#.#/#.. => ###./####/#.##/..#. +..#/#.#/#.. => ##../##.#/..##/.##. +#.#/#.#/#.. => .#.#/.##./#.../##.# +.##/#.#/#.. => .#.#/#..#/.##./..#. +###/#.#/#.. => ...#/.#../.##./##.# +#../.##/#.. => ###./##../#.#./#### +.#./.##/#.. => .#../##../#.#./.#.# +##./.##/#.. => ##.#/.#../.#.#/#### +#.#/.##/#.. => ####/.#.#/..../.... +.##/.##/#.. => ####/##../#..#/#### +###/.##/#.. => .###/##.#/.#../#.## +#../###/#.. => #..#/###./####/.#.# +.#./###/#.. => ..##/##../##.#/.#.# +##./###/#.. => #..#/.#../####/...# +..#/###/#.. => ##../##.#/...#/#..# +#.#/###/#.. => ..#./.##./#..#/.... +.##/###/#.. => #..#/#.../..../.#.. +###/###/#.. => ..#./#.##/.##./#... +.#./#.#/.#. => .#.#/.##./##.#/.##. +##./#.#/.#. => #..#/.###/.#.#/.##. +#.#/#.#/.#. => #.../##../#.../.### +###/#.#/.#. => ###./.###/###./.... +.#./###/.#. => .#../####/...#/##.. +##./###/.#. => ####/###./..../.... +#.#/###/.#. => ...#/.###/..../#### +###/###/.#. => ..../#.../..#./.### +#.#/..#/##. => #.#./#.../####/#.## +###/..#/##. => .#.#/#..#/.###/#... +.##/#.#/##. => ..##/..#./..../##.. +###/#.#/##. => #.#./##.#/####/#..# +#.#/.##/##. => ..../.#../#.#./##.# +###/.##/##. => ..../..../.#../##.# +.##/###/##. => #.#./.###/#.#./#.## +###/###/##. => ##.#/##.#/.###/..#. +#.#/.../#.# => #..#/.#../#.../...# +###/.../#.# => ##../.#../##.#/..#. +###/#../#.# => ..##/#.#./####/.#.. +#.#/.#./#.# => ...#/...#/#..#/#.#. +###/.#./#.# => ..../####/.##./.#.# +###/##./#.# => #..#/.#.#/..##/#### +#.#/#.#/#.# => #.#./..#./...#/.#.. +###/#.#/#.# => ...#/##.#/.###/.#.. +#.#/###/#.# => .#.#/###./.#../.##. +###/###/#.# => ...#/.###/.#.#/###. +###/#.#/### => #.##/.#.#/...#/.#.. +###/###/### => ..##/.#../#.#./.#.. diff --git a/2017/inputs/day_21_example.txt b/2017/inputs/day_21_example.txt new file mode 100644 index 0000000..f6d24df --- /dev/null +++ b/2017/inputs/day_21_example.txt @@ -0,0 +1,2 @@ +../.# => ##./#../... +.#./..#/### => #..#/..../..../#..# diff --git a/2017/inputs/day_22.txt b/2017/inputs/day_22.txt new file mode 100644 index 0000000..1343456 --- /dev/null +++ b/2017/inputs/day_22.txt @@ -0,0 +1,25 @@ +.##..#.#.##...#....#..### +####.#...###.####..#..... +#.#.#####....######.###.# +#.#..###.#.#####....#..#. +####.#.#...#.##.##..#.### +#.####..#####.#.#....#.## +.#.####.#....###..##....# +..##.#..##.#.#.###.##.#.. +##....#....######.###.### +.#.##.###.###.###.#..#.#. +#.##.#.#..#.#.....###.... +####.....#..###..##..##.. +##....#.#...####...#.#.#. +...#.##..###..##..#...... +#....#..##.##.#..#.###..# +...#...##.##.##...#.#.#.. +.##....#.####.#..##.#...# +#.######......#.#...#.##. +#.##....###...###.###.... +#..#.#.#.#.#..#.#.....#.. +...##..##.###....#.###... +.######.#...###.###.#.#.# +####..###.####...#..##### +.##.#.##...##..##...#.#.# +###...##..#..##.##..#..#. diff --git a/2017/inputs/day_22_example.txt b/2017/inputs/day_22_example.txt new file mode 100644 index 0000000..3105a0b --- /dev/null +++ b/2017/inputs/day_22_example.txt @@ -0,0 +1,3 @@ +..# +#.. +... diff --git a/2017/inputs/day_23.txt b/2017/inputs/day_23.txt new file mode 100644 index 0000000..9d29443 --- /dev/null +++ b/2017/inputs/day_23.txt @@ -0,0 +1,32 @@ +set b 99 +set c b +jnz a 2 +jnz 1 5 +mul b 100 +sub b -100000 +set c b +sub c -17000 +set f 1 +set d 2 +set e 2 +set g d +mul g e +sub g b +jnz g 2 +set f 0 +sub e -1 +set g e +sub g b +jnz g -8 +sub d -1 +set g d +sub g b +jnz g -13 +jnz f 2 +sub h -1 +set g b +sub g c +jnz g 2 +jnz 1 3 +sub b -17 +jnz 1 -23 diff --git a/2017/inputs/day_24.txt b/2017/inputs/day_24.txt new file mode 100644 index 0000000..1fbfe25 --- /dev/null +++ b/2017/inputs/day_24.txt @@ -0,0 +1,57 @@ +42/37 +28/28 +29/25 +45/8 +35/23 +49/20 +44/4 +15/33 +14/19 +31/44 +39/14 +25/17 +34/34 +38/42 +8/42 +15/28 +0/7 +49/12 +18/36 +45/45 +28/7 +30/43 +23/41 +0/35 +18/9 +3/31 +20/31 +10/40 +0/22 +1/23 +20/47 +38/36 +15/8 +34/32 +30/30 +30/44 +19/28 +46/15 +34/50 +40/20 +27/39 +3/14 +43/45 +50/42 +1/33 +6/39 +46/44 +22/35 +15/20 +43/31 +23/23 +19/27 +47/15 +43/43 +25/36 +26/38 +1/10 diff --git a/2017/inputs/day_25.txt b/2017/inputs/day_25.txt new file mode 100644 index 0000000..892ee98 --- /dev/null +++ b/2017/inputs/day_25.txt @@ -0,0 +1,62 @@ +Begin in state A. +Perform a diagnostic checksum after 12667664 steps. + +In state A: + If the current value is 0: + - Write the value 1. + - Move one slot to the right. + - Continue with state B. + If the current value is 1: + - Write the value 0. + - Move one slot to the left. + - Continue with state C. + +In state B: + If the current value is 0: + - Write the value 1. + - Move one slot to the left. + - Continue with state A. + If the current value is 1: + - Write the value 1. + - Move one slot to the right. + - Continue with state D. + +In state C: + If the current value is 0: + - Write the value 0. + - Move one slot to the left. + - Continue with state B. + If the current value is 1: + - Write the value 0. + - Move one slot to the left. + - Continue with state E. + +In state D: + If the current value is 0: + - Write the value 1. + - Move one slot to the right. + - Continue with state A. + If the current value is 1: + - Write the value 0. + - Move one slot to the right. + - Continue with state B. + +In state E: + If the current value is 0: + - Write the value 1. + - Move one slot to the left. + - Continue with state F. + If the current value is 1: + - Write the value 1. + - Move one slot to the left. + - Continue with state C. + +In state F: + If the current value is 0: + - Write the value 1. + - Move one slot to the right. + - Continue with state D. + If the current value is 1: + - Write the value 1. + - Move one slot to the right. + - Continue with state A. diff --git a/2017/inputs/day_3.txt b/2017/inputs/day_3.txt new file mode 100644 index 0000000..ce15bc4 --- /dev/null +++ b/2017/inputs/day_3.txt @@ -0,0 +1 @@ +325489 diff --git a/2017/inputs/day_4.txt b/2017/inputs/day_4.txt new file mode 100644 index 0000000..b9f9e0e --- /dev/null +++ b/2017/inputs/day_4.txt @@ -0,0 +1,512 @@ +kvvfl kvvfl olud wjqsqa olud frc +slhm rdfm yxb rsobyt rdfm +pib wzfr xyoakcu zoapeze rtdxt rikc jyeps wdyo hawr xyoakcu hawr +ismtq qwoi kzt ktgzoc gnxblp dzfayil ftfx asscba ionxi dzfayil qwoi +dzuhys kfekxe nvdhdtj hzusdy xzhehgc dhtvdnj oxwlvef +gxg qahl aaipx tkmckn hcsuhy jsudcmy kcefhpn kiasaj tkmckn +roan kqnztj edc zpjwb +yzc roc qrygby rsvts nyijgwr xnpqz +jqgj hhgtw tmychia whkm vvxoq tfbzpe ska ldjmvmo +nyeeg omn geyen ngyee rcjt rjuxh +qpq udci tnp fdfk kffd eyzvmg ufppf wfuodj toamfn tkze jzsb +rrcgxyp rbufd tfjmok vpyhej hcnz ftkojm +jnmomfc jnmomfc bkluz izn ovvm flsch bkluz +odisl hzwv hiasrhi hez ihihsra qpbmi ltwjj iknkwxf nbdtq gbo +gjtszl gjtszl fruo fruo +rdapv gaik cqboix sxnizhh uxmpali jdd usqnz advrp dze +flooz flooz qad tcrq yze bnoijff qpqu vup hyagwll +lnazok dze foi tqwjsk hpx qcql euzpj mwfrk +ilb fmviby ivybmf gtx xtg +rpauuu timere gyg wcolt ireetm safi +croe szwmq bbhd lciird vhcci pdax +hnc ykswt qqqmei goe bri wmyai hnc qpgqc pberqf bzs +hsnrb wdvh iezzrq iezzrq rdbmpta iezzrq kemnptg alkjnp wymmz +ngw don ddvyds nlhkoa aaf gptumum ugtpmmu +vmccke qbpag kvf kvf tgrfghb kvf bhpd sglgx +obomgk bkcgo yso ttft vbw ckl wjgk +fli qvw zhin dfpgfjb udsin nihz ovr tiewo +tgmzmph hauzieo jmg tdbtl lvfr qpaayq qapaqy ausioeu jun piygx +jkp guqrnx asdqmxf vmfvtqb tloqgyo ioix gajowri tmek ilc puhipb +uycn zxqm znft ayal znacus kvcyd ekv qqfpnh +fqghur xtbtdd ztjrylr bpuikb ziyk +rvakn uqbl ozitpdh uqbl dsej xehj +laxp haz jyd xnkrb ijldth woy xapl iqgg alpx gnupa ukptmmh +dyiy dyiy ihb qcyxr +wbwkd hdwu zvgkn hdwu wjc sakwhn zxujdo npllzp uyr uyr +fxczpmn cininu akcxs ggslxr riyxe ojisxe +ppbch sampq dnct afikor dnct edsqy pnzyzmc afikor +jnvygtn hijqjxl vsd jnvygtn nqcqv zns odq gkboxrv kolnq wrvd +mroq mroq flsbu flsbu +fyshor xvpaunj qmktlo xoce wkiyfu ukcl srndc ugwylwm ozcwdw mtqcste kpokr +cfh cxjvx cfh cfh uewshh +bpspbap bpspbap fquj mxmn bwls iirhvuk dmpkyt exrn mxmn +tvyvzk ezszod ntxr xtnr och +knfxhy kbnyl knfxhy xhkssx lxru uprh nkxpbx oodolxr tpvyf +nblmysu iwoffs upgof tyagwf aan vovji ajk ywzq oyfi sfulz +aushzkm lcaeki mkuzsah ynxvte rsntd refk pcm +mgguob gobmug dzenpty gmogbu +yvq eepof rgnree nerger fpb stfrln ernger +hrgkbl mzwvswk rsrsbk ieru holco pajvvn ztgsr qkyp fyeg owpcmoj +fowda gmsqdca yugj mcrroxv mqcbojd fjnqfji qdfsc jqs +qnc rvjfz vvxk sjd xrma ucdjvq sbw zydyt dfzww +ocajazv cozaajv tqunkla udwf ecnnmbz lsakqg bki njnda zsdu ccfqw rxpc +qqm qdfya qxyx qmq qfday uqnfttt +rnbirb iapor qet iapor hxkhz dfvzig pedl ybyb +mkgamxg xkniv meb hbzmxjn dhbj zhbxjmn hdjb +ilteux pyutyfx mau lrr bacak +sjjonmn dbbbgs crxyuu jztstgd ezb uiabyaa +tra fle ufzlvf nnaw kec hiwnnlj tei wld iyt syk hjdczb +qmd jtlud dgh dbanock fzp dsjgqru wwvo jwvxwgv xlemfij jcacd +rpkx oxesil snazcgx fly miiyc ikmtmp oefyyn egbw +ypfpeu wldnyd acchppb yqwcaw wldnyd turbz megci nbgxq xkc ypfpeu +iqqv iqqv neui iqqv +ypsxm icqyup zyetrwq nbisrv +viommi toszx dpueq eyy cunjou ffcjc jaeez djefra pxvkj liudlig yye +fhnacbg jghchh ghjhhc iue hwqmo +vbjw lpn cizba ltnsfpz tzoweml irewlc uzckhpd mszal obd +yeos utxkft hflxkfe fxczge qpgigkc ksgr vuumql vhlvv +xzmkv xzmkv krecdi klpem jsbu nwcmik emfzxf cjmpgnj +vtkjo pmiv zou gxo qdiyxsf hwyinjk jhkgf rjq +dyuoc ywiyvch irfgl ywiyvch fxb fxb +tuz onhr syu rqya abkaf bcfx mbknex juwoor zmksl +oheg spjorx ksdy vwtq fxz phvtazk tcze lrxg +hew lbup botaj ltr jpd +dxgc tzinkej gnz hxvvub adsqmc dxgc asgpp rqbdcra goy pmamdua bhiacva +xqv ygb kihxqz vyv pjcny vmyvsdv cgsi nfyx +tqga ssshrw ndq qlbvwh huyd pxbgj qbxk dkkbf jxy chsobw pph +hxl iwph iwph xnr otifm ljhre +zlgvpd kapxpoc dve rklk ogh hgnp rbrmc zzkz hhmcx aklmo +sar gfor nkf hek nkf aql shc aql +dtcrw kfjzcjx qyhi bldson whwdayo mqtgt xhqzp ttqmg +omspdml isze jdl nvwo qrkm wztfg ssfgyh dryj jhp unsmty +jxt cszylng ifht ixtuna azoi xutqlv jtx tjx +usgm azuayp fgkby ezpyq jqwl ezofj +tnhvil nrvg moyrpqs sldx qymoff megflxh pyhqwms xmdw +zomy zcquwnv lzx bvcna yods mjp dgsez +blklyf xokd gpit tiysj yrwfhm tofx +dtig vhdp omuj vhpd +fogwxim qvdwig emdiv jvhl euwbzkg xvxb hwmqo ujdmlp epmykj +sjxll sjxll pedvgb sjxll +drvay gtzhgtx yrt okz nqf +haxfazn pvkovwb pgu tgshw mxcjf pbe nwoymzc mxcjf pbe hydwy jradcr +prjsloa ahylvj okbsj qbdcdjt pmfo pagyoeg vkmhjzt khzmjvt opfm xfrji gyjqyel +lzypt jdbtrad ogr jdbtrad heink +rcoucuq gdxewa rcoucuq whlw zhhm rcoucuq azaqohe mzyli rdvaf +yuag ebcf yuag nsotg qqzuxr jfmao vyucw wmoye +qwvk xemm hgqrr wyxkpp tojndm xlvzypw jus bgnu bgnu nklfwhs +daqi knenmku ccm xkiuy vkexsbc kvvdagx umopitw yaocnx yoakqql mllmsp +mrxgl gywit mfopia ncnsvw vdxek axuiot rsejua nei prndudz mnu +egqn gaa qgen urs mix zbn rhn +ewharq aihy udkdaob kgrdd kgrdd kugbjtj fcef llqb pduxaq wcexmm +dwtiw nelq hppad algxgf gcc upou akm efnb mxmhrud +yxqaa ups okbhgt iet qns tqn rnjqxgp +npmhdm cgds ldexvr typi jyivoqk zkgq vfyxu xgfo +dkwnmr umm dkwnmr okpjw wqx jpztebl eqsib dkwnmr +dxbild wpbup evscivq dxbild dxbild geqp ojfbpl jshvqej +cxdntxs csfocjd pyy tuhws teb boyloz xfw scxh pxhonky +lteucke xrgwy hszgzu hnyrcvb +pfgsgwg dxzh fworek qbstod +usemcrf psczxu gcjtr brls +hjol efxczux bqdn gvrnpey yyoqse gbam ndzyj lbwb bhzn unsezg +bapw xifz blupk qqdk bofvqpp wnbuwyt rnwocu lzwgtt zucag pov +xkre lqvd juf lqvd xio xyg xyg +tzdao ztheib aymcf aorg iyawrch hetcxa iyawrch czdymc ccv +ucgl azlppu jvxqlj pest +dvwlw fuuy mnhmm okrp ualnqlm uyuznba fzyejk yaq crl ctprp +odfq knox mkbcku pxucmuf lpjpol phl +ixongh hfs ruorbd auy qyssl kykwcix aytsm rlj aytsm duq segpqhk +izufsk wedpzh podjkor eamo vqvev ifnz podjkor xrnuqe +twyfps bmdbgtu qye qkwjms +wlav htym vhsnu cocphsj mdsuq vhsnu jflgmrp +opajag itwjhfu purnnvk opajag +hpkopqp vnj aialpt lzrkzfs nwucez nwuezc +mcx hzcjxq zbxr dsx tpknx fva +rlvgm xrejsvn ghawxb efyos xty wdzdgh olahbtn rga efyos vhtm nsr +cni mbab qtgeiow ulttn rckc kmiaju jvbq emyvpew cdlxldn ulttn brhkprx +eykpffp rapik qki fhjgdyu tome ehjuy bibjk htxd vexvag +wrk dpxt gwkuiov gbkif ike gbkif pcd wpj toywyf qzsa aol +yqwzh uujn ujun ujnu +srs ralwxrz yxvvmgp sjhbhk waasid cqtxoxf whcladv jkmaq khjbsh dlavcwh +mdvsjh xaj etvxlsy fxgiy rgjesel rlegesj ptriz ebdyhkp kugxm dxv egljser +lhehwrs mqevb ygmv gri izop qgb ivm +loqqam alojlwg hgen hbyw qlwpun loqqam worgnwk kope +phozre todsknr todsknr ibj mvllsar +wuripy ruwlfbh wukbkey qhq iishw tvtvci xawvxc vxacwx hsiwi ogq +xryq vxwupqa zhqex aquxpwv bnvxrba dtbxki +yvvwh zvsm vqskhp vqskhp ggqqlw bpn wbuv +kqz tdy goqwge ygn jgd +szjjhdk zkpoo nxexz ebicc +wzuemcj oyd qupulju iaakzmt vzkvz +nppahov umm wpzev wxkgfxd owgekp bhhb bbhh dgviiw kdfgxwx wryb +bnc rhes lmbuhhy kwbefga bnc rtxnvz bnc +ani mggxf mcoixh zdd nai hbhzl mes bdpqr +mjn uinoty jjegvze bjgqg yhqsxbt coj obylb hddude xqi rhfbhha alood +cbjzj drmihy tfkrhsd nuhav hihzx bvblqpl tdd szmp gjgfv box +uumhdxd cmwgyf vepr rwqdkj exwk +hwvr ydvw bqefu kghes gvbhp awms iqsqes khgse +mrey jqfw fwvzhps komj dayvs fbui zmtd cofn mrey +dsjds fdpx irjj usndok qcctsvf fgk wvg txwxcl dxs llp zyilwtq +xmkelgk fdukc cye legkxkm wwly +enlny eynln cccku brkz dpof mwfoxcd yftmnqh wpebvyc +ggdn jnysl dsacffw ukj hdae cmzxku +uqhm gcachmn kxndfrl htmfis jfnajz fiqiypr kekho kekho ndcw ckrndub dejfna +keazuq ertql rauwl keazuq obmh rauwl ksrotm +jppp poigqhv repfsje grjk xwkyuh pkx ayzcj hoxzv +yhjw pcuyad icie icie icie hwcsuy wcd yihjh jnrxs +gaug ivvx ceb xujonak hbtfkeb ttciml cctoz +dggyyi dggyyi gqlyumf yasu fwdfa cbb nncn verhq +rhgcw gpcyct kiuhbg kiuhbg gpcyct jlmleo nhumm +wulxxu jyjek hclcp ogob viex wiqcupq +tthu nxgzpid kcnj mss ukapgkp nnc bxjocv qwxs oejwsif aywqtu brahkb +dtde bgvb smu vbbg zhlu +lyo nwjjmep ldbok wgxhto wwuh qfgjknk wnsl +lleyr onha hkwulbm jfg +bybjwd uoxvbh mvj iqfpnxs bybjwd zqtszp wvc lbazjr zkzenja cev +rbuyyr divtslq yuqmyt ajyveb smxsjb nlk tzqhq ims fewg wpjhr gqh +kpewfd beq klilis klisli eeezut +euqh hueq ldoo crqurv lvrwh tmaewp oodl +bqi lzrf jyhvxfh bqi jyhvxfh nbztd lwpdn cuzi +srjylou phavzjd wost uxkaq byh sluryoj +ihrdk bcegkpq nygrs qbcq wyjg dvzme pgzhjl vibg kvv +ijsx iedemek ktlz gtga tbal lbki gtga +vmiaxn kefig kefig vngxz +vrdmfvi qts vlvhq vlvhq dihmq +cfz dyrz zlw qnt vok fwvahg skshbqf hbwozdc ntana jdb uflp +rimbj bxemw sfps krtk umta vnk ewmbx nrlje ymrtqrz mxewb kjxunbt +egnuti ozat eltl ngueti +qtcwoxq rmaf qtcwoxq qtcwoxq +zws gcoa pydruw qsrk lrkybdf ugr wkrxoj nyvf vitwn +tmr hhd dojid zwrj bhsim righ keqlep flzunou +lwoquvy acjowxk tqudk oenvioh nyavyl +rgh dfhgyke iff cpxhuz hui koe iff hui dmukrei +bjiumig lcbmbgh vleipx sfawua rnf +gftfh qwb tfdroe xbno qhgofm vqfoe mux +ljdrr gyfggai iun nju xrucbis mhrcrh fukr obvuqc whlalfe xrucbis nju +nxjmjr egqwg arllu xqaahri lzc ivt uhsti +sqiepba rcmts kvesv nvp +tiksw tiksw rjni gbhvzm ctbq zuqfyvz +ibsnm kfka aoqigwo sqouih rxz +jmymq lxio adtmk umyu sxvzquq bporqnb heol fow +mepa eckq rqviawv dkqoei ifmngpp jiava rtklseu +yuycd jiufjci yuycd uowg yuycd udq izkicbr csxobh +nwu tfsjavb rruoxbn oepcov elxf rruoxbn rruoxbn azglwth jcjm ksqiqpv +dthfwip zqnwa zqnwa zqnwa +gso wruece ufl crgnlxv vllsm dpyfm wpa ctxko +wvpze seodz lpq lpq pmtp wsxs ffppx +yfxquj phvjn rtwieq rtwieq kgxztyu vbjvkc prqqd lyzmdo ojbrt ojbrt qiqjz +esaezr rpggiy jey kbzrhu uthus osr xxaiijd qfxlf auhzbx gkigoqw +yfhcj uvgck cds gjhhrg cmempgj yfhcj cjb +yxi voxvtuw unwg jqqm +igvjr ljz rus sru gbjtjt qfeg ztu zjl +leof ocxns hbkoysh hbkoysh leof +hab lyxmf yhh qeks fwhfxki xmbcak okqjii nfgzyg bhtfgdj lpmjn +mgognh tad herere lvwnzx ixwqs zphmuuc etdjz kczsf +mtej rlolsnn zbl uykek dpkan gmz etxtgj +mihuieo emjgbp jgks mihuieo iexrfw mjdnr bvp mcuzea xkbusvi +jvqpj bwt jvqpj bwt gxr +qpnd fpt tpor bibbpcg hmvguez wqc afl ckviua gpi +dntmcg jglm sxtnu sxtnu sxtnu +fzkbptw cbfwo ozvwov wbv gcdd izqo ovwzov lolewo xikqpw +nkxyxzd kpn datf fki werq mwidqx oiibor zizcjph +xvgyxym zor ijoy lvwsf fjuara idvvq rreit mqyyy ctio tzwqqhj rnpee +maqkfpk maqkfpk xukg sfdmnlg xjopvr xjopvr irf +liujcd vnlkouy dxkwc gto vhjvtw +swhqhj cas aupsd swhqhj cas bvbooii jquck dtdm +igh iqicicf ghi pcxt srcrjx gmf gyscphv +drplj drplj wopgpnk wytag wopgpnk +zexe ilcqoh qiefb txkuv lirfzv +ovvpn ovvpn uqeurqx uwzn hgmucj ovvpn sjxulms +rox silka irhsvym kutus otasof tdneav pcagds +mkja omu tyshbfq onp trxs lxa tftbv bnpl djhnc zdqfs muo +tjj rmmqas cbbkxs qio pikk ykyew gxlxt nhsyl ykyew +frcprg njrz oaxcmhc qben pedm ecvtga nzxwpb ior gaklot dpem +zyt kncau spoe qlchg sqys wkpbng yflju qlchg vkve bzadbpa +qtq pkaicl qtq mfkfqvr dnleiq brrjxsx uoyxh pkaicl yvmlug +firwy imtlp ywl qfa dqrbazz ztzb pcsbwhn zesmlag +ivey ivey mtvc mtvc +lhize acwf moa cdeoazd voktshy qmvqq jvmuvk ljfmq tsanygc +xreiqkc aawrovl pofcsg xreiqkc xreiqkc +cjbzvn ozds iniqu sdoz gqmki bablvll krs vjzcbn +izsod htkeqz entxn qtns prpcwu omfnmoy +kwfb tctzda aztctd tadtcz gyt wunbcub ydiwdin xxk +epnl ijcp giq ltfk zjcabve zfksmz epnl giq xxxbsom +ulyukpa mdjsbn dydko uhkdt qms aaaj hustlwu +zlsbu ohx jcwovf egf zlvpqgx qhejm wrywdmw +uhxqrzr mmu kjxcalj unuohiq rri yzngnb ikvlxry mfiym qbksdx +khqciz som yklmm jceb khqciz jspy jceb +ncwggv njvi nqox krtsn lnm +bgtqme xaxcoq qbtgme obqual vorfk baoqul lgrb +jli tsbb nlxjc pkwzmz dlxrj hmho gzguko ilj iyaasm +wlmw grkumg dynwtyo emxhhqr huluk slpqu uhqcmd absmr ufirmwr +pbs pcammxv dplfr tzvmav nccyy blvyq ffhnz bccutq +hgge ghge vxmvz hqxgjdg zab guo gheg +ylj bucoyoq udndc wpgyrbx ueh udndc gxdsdh hdoz wwgqlg +cjdeh gttyqe kdkm ltzd lfeozse quvjq mnwhokm kdv oojxm nxt +mfkzus knqxt saxkqww njx zumsfk sbmcyad cpt agvbuv +tukn vyco yobvsn bzgnn klrnzy kea thzk pxpwq ryfff nxzm +ylbm lxlz lybm lzxl +wgtxoij zad slgsi cvnxfg iomswwl vmx +hkm yinhnkj kmh kwkw kayknck chur styjif yknakck +rtfwhkq rtfwhkq zsf zsf +sldq zlntr ueegiw kajivqc ozcbm ceft snvugom pdyc elppeed nnqrp prwwf +lhk xjonc muc tudag tsafx mmivb dvrjbp qgrew +hnzer fbgqp aazta aazta lxaz lmgv aazta +victgxu victgxu mlpd ummrnbx cazjgnw isxcyp efy zfa cyusj +gyojxo onzq gyojxo uxufp awi ilhl wefwfxr gcjlt tmliynw uxufp pdcnxah +wjwachn xkuhfbp oky oky ybaeqkr rbuix yreoaw wepmye brvon aasb +kiidorw vxtxiqx wtqvbrv efdth isel qbom vcssyc vxtxiqx wtqvbrv riafzsw mqzsj +eurpjd vkhdamt tmfx czeoot hiz ykz lmixzq tfur jhzr +ipuftpj qbll sqkkdw fwncmiv bri oeeh lehd ioh wag +suima nanngc imrmc krq atxdo woy atxdo akev qlr aezco qlr +cfc efwbzck ozkmcxv moczkvx ccf +bnekky iakrk sask uwgnjp iyi rynev bdnas ldh kass +sicmw vvjbvv cap nsumc xgvrlm wsoo uoqdu psykckm +ugg mtr wnzhmmh tjxc ehwnji lwhu mdsckk yvmk enubrqo +grb oxmxz ohu ytetedv ssx apzlppg fdkamm sxofc jdt ynmu wyejok +umoep rbyqm eqfk twqnog cptbbi dragna ngqs ffb cexxnc rbyqm +utizi ormkel wvwur bdx ecelqbv xiccama aag glfvmj +znb rsuqoa uxo svc +obs lbifa cffi catpd +qkxwian ajlzjz wewduzp bbyv qmt fsr qgiu epinp ghmf +hatg bfgmb aght ghat +kuq inp dun cknbun wmwsu drlmmg kyxc bdl +bddybth swdbf jhi fva qpobio bjwm wjaztp jywi +mgckz vhveu zkemhp zdf xtiqqew mlx wazgd +umbjq pya lvvxf jeavij rhrxvew bwjqgpr piz +xaycpwo vjcuc qksc yuixhni sfbfb dydyaq gdfvb tggg xidphvf bpjdrl goskxym +agxfoip gguif wvo agxfoip ntkbaw fbyggy ooft zxih +nzvsu ffwq uxvfbl qrql olhmhom qhdltg ymwz krtndtx olhmhom nfsv krtndtx +qdp jqk ustz xjripzv mnk grnodk pjwdsj uug zqxjqj +mufrcox zunisfs ocvcge acamm xua vor bsde kxr vor kxr orccxx +ncycbp anvcxay bmm wndmeaw oso knmk mmb wamenwd kmkv ppdd +motdcn xzagzwu vuzt utffrn yuqxzrh uvzt ujttq +tauoqy coiy ybesz tauoqy wpmr trquyne ahxbj jzhems dsdy +aczq ypw pgmzz srfn quatjgf +cih ypapk bfxvr euvhkk gugru auhqui +vyf pssgfvy dnhvbfl xpacme dnhvbfl mzdv iynq hcqu +lbzvbu hhxiq hdfyiiz iyzihfd xhqih uzdqyxr +iapbdll vdr cprmrkk vdr dfjqse mlry flpqk vdr +grrfkq xcpxd grrfkq dxc bjpr prvwh swoc swoc +bopo chvwuhf qhd ieesl xey ieesl fnjcbe +kic fyq hsucnu agwyl pzzmd hqksh psw +mxf uau iti lcoz lpg zbu ocre wqlocmh mxf nidqj lcoz +bypmix ptzxgmf xmtzgpf hrvzzq +lbfw zwusma lbfw tuyyy +lrf uej unswvh obgsb npbl zajr kenea uej qnyjcu wzufim qpzkgya +qcrxj llyu kligt hlm ehwtbx dda lgsvhdt xewfcv uikn +nfzjx izqdbq mfbxs imiuc yqxb xlmvix izqdbq eflqfq wku omgtuu izqdbq +lasdwg hiy btzt eefd eyoep icn nnmhg otml rek luixac nyzgn +vekteds utsuxdx utsuxdx vekteds +feyov qrij zbebwg ijrq seplram wttkwm zewbgb kzuhuh +dmkgtv wohgqo ddtqmv zatahx mym hqowog tkmvdg +vhha wjrmuyx kqh vyyrj xzchbi ejsdq orlxg vyyrj dlrc +yetngqn zdtuqox hkarjei fqpsgh eaqwbg zsssog ghb gddqqzr hbg +obldb zsrhz zxp uxphnev mwnbc pfjft fms xwslk vjm fxy +nfij dbfykv ttq gyjgac igxuyqi gtiioqx ilhdex dbfykv uyp bdiwya gqf +pffzruz vogfosh dcs wje +pohhf fhpoh oon yyz +xxuam afwm qxl lnt syyr bwxhhf sozauq shlhfmz kwnn milav ochq +wefcqrt gejw cwerqtf fttf gjew +jfsvnmr osca epwtle pgfif sxom +exlfzmq nakp rgdnx rrcvth vhrrct aajjdrt ryyg dsozd jdqlqj pakn iruv +rmcvo txszcs xxhyxz hbsozk wshkocf rmcvo rcbnt +kitz yjgney yvkymef nauj hmllsgl kyhm kqr pzsu rcf pzsu qpte +cdinpx bfur mkj naz ihkheyr nohhoe +ylris xeqcgup wap bbfih tgfoj +ina gnlnm zyeqhij cudfuf ipufae bvkdzni aat teqsg cudfuf bjokrbl teqsg +aedx edax dnfwq qndwf +rdngdy jde wvgkhto bdvngf mdup eskuvg ezli opibo mppoc mdup zrasc +qcnc iaw grjfsxe gnf gnf +zbjm snznt zelswrk gkhlnx dqxqn qqxnd dmro +zisecvx ztezof uzbq otnrtj qsjzkwm ewvcp rlir bfghlq tgapdr qxmr +ipnqj opjf vabyoe wkwnd +wyf mfqxnrf apm snarf jqu aaghx pwecbv lvghayg +acncv jmmbwlg oiphlm ifuo cvt +pvmb egansnd zmh gcuzzci rrxpslv ubith +uoleptg xbouzn xbmg cfh cpn wpqi xbouzn xtxis sxzpns +rilybri kurbpq vfmjpck tjyogho hfyxad svfofx lfbbhxj khaerfs iqr +seaebgz wlmtkre qguv qguv wlmtkre +sgo edkxya zdqgwtt gxu nibuu rairqoq mzxli dci qsv +tsol mdhzqr rmaqnru ggvcq arbwkn hlkcnj ljkcuof +mmliphp ocup puoc eijjv +gmajqpb ijki ijki kvz +pmqss unhlpcj dlkll nuhlcjp expe tlurzmv nsy vlumtzr tgseozl +gkvaoni hsba hsba viuedv phyoclp fdq phyoclp febld nqfs +rxvdtw abn pntv qrqfzz slsvv abn lrxix mnu npot +ghlfjp woy xwkbmv bkahpkj jve cncvk jvdype fwgvoju yrkwjp gwfvln mvkv +kmluh mie bby fwer chsinb ojglqr nqk mie +yzmiu igkgca ybnsqja jpfejtp yjddy xsosxfi ingx qwuhb emrkwpx idqjmmm +btrllw mphm dkvo ewdl dchcul yah btrllw kmqi mtvgk wtb +hxsgard yuikc lykt tdee adprp gpougod klnzk mzsmlb +hdn znblw ifoblur bwzln dbv +smofpbs vjuyiro llk lfzesga tybu tybu +gffnpug xaup iqiyz fjkpnkz drrk fwyxw lwzfskz gslwpmv vjxylva tbkyo nib +evydmb nhwuiiu fkerq nkgbuyy uclrs ydjgglh xhotwbm riirgzt +bsub eavbt uvd dpzwyt rhn khrbptt xszckc djnfxju axofhat powmso nvdffrv +xtuykl fjz mbikc xpnx hmey fjz fjz +rkls nwdcsyx rkls rkls +tygml untequ ybdfumz nqffbq uipc sove hfnqj +ytecew vven koqn royynd qsn ksl qsn sdw +hknlw qwho whoq oqwh +lzmmtqu qvhyeo cnofuj utpwkjz gnirz yhhu aodbnd +zsr axw kwtzcv tydzo kwtzcv lkxsm +rbjtqe nihifd gvdxd bpxzy rxteky vgcgllv vbbua anygiup rqo +dpd wblfwp wblfwp wblfwp ygahc tqjbaq +gsw gsw pacgj xmrcz zmxhmch xmrcz +pdq rhe xqmq lgpkhg fyffrot ovnqh wle +tbjavke ypzzrj jizx gdxoh icjsat otfh fmygumv +snch nxlgjgp jeyn sxoqfj jtage jtage iuice +rtb coefuj grwg grwg rtb krhqnma vfhgbr +vhegtl btorwxg szcev kbvkx itsk nlzpbed +hiukrf ilzkm yllhh xsgwkdp zyy kjbv +rfcg tdorci zcj wzftlv rfcg rfcg +lgbc lzizat vsno pau nvv vsno bbr lzizat qhtb gwp +sfwnio tcugjk bsfsz ykyfwg ibkap fsrvy mygk kzunawx zyhyh +mpavlh qps bylh lttjkz rqabgk vewb bwev tlzkjt gzrbxga ktmso prpkj +gpf ims ynh ffrs vpa iemp gofh cgbauje +secys qks mcnfhwh drog kqs pajy zoltkw lfihnb myb ioxptu +ytq nrta ouk ajqblf yuwwcd zdy blyoxbw dakk nvgi bzrhzaa +nkoych sufiia xkdvw crtldee zycl qblab egqhr qblab +nllno muxaf vds qjnitmw zkpj wskyhft kmqct xamuzpw qcai cdjtbt kaxv +qzdytpe osr fuw osr qzdytpe whperd rydwdcl knoa +zkdznhd peh duoygr zamrgl irnvj otpe pltpq jdkecg +byzgw rece iigdug ehif tpgje +ccnn foqdran gbctca tefdjxh ntcr rjciii xip xlss crl wvvhzqm twyohf +dqyii milqqc qjgkojp qjgkojp ryde +tdkyj tbrcud tsba vqtmb cjwxnf +hqhmq wemvrce nagig pwnw nagig epg nagig vlsi +tqgvw luoplw hccti npjm rytdruq cylrsun rytdruq vjsbjl rytdruq ppti +itgt tuwc itgt rvp itgt tigns eipl ksmru +pdw wdhtkn nbdbpn wff zhuuipg rvemv qxr +qgkwdq cjilayh ymeks mrpuzai dwgs stfstgz ucvqhb yout oiq +vpxik ypfr qytimvu qms oxbmw ppyfx +fwwidn gdhd pyuexk snsz iwndfw +lfcb sllxjna lfcb hpzahfg mmvgaa svny jhuzd +unyg gicmzd fwc spkciy toyq wjupckd vzzx iuqgka ytqycb pxsufj +goj tnrcml eyizngj txa xrkiw zvu igduz +wek xrrlkna clyof rrlnxak +cjm rmyuku vjom gtf +buk cfae awstd dywgqp hxo wcxvf laihqw xdqfes wdbh qceh uzlwj +sudguo dxwplto rlebdh bkamu dxwplto +crwkyxm yuz kjtdhom crwkyxm +trhc sduorxr aizfryh rsudxor gbyc +pczkyl bptp qnn nxmpwsx udrg hhlb rubtrmx twzodlp xygnht +jmqct cden yfajtkz fevcw sxonbxz sxonbxz qkzkm hhngr fbv +sdsnm mwvicr wypfi cty ndbowr woiz mrauwzd qlno mwvicr +vteyo fng lvr lxytn txpj milg +wjx ahtmgo cgwcaj kaxae fhlvlqf +ezj eetqhzu upwda iiefwlk vyvby +imalvy yeghqe jwcu mvrod cwju +bxnmsa yhfu npsdar tsbri hfuy sirbt oofxmy +fkndt elbjtn vepqtxt elvpf fpelv bzkgag qttexpv prblwb +rmq iqs yvprnyy iezqrzm wlqsrr +yviovq lekxghj oey qwhzj lxknxw qiyovv ksnt jptz +tyrg cifxt hugqf tyrg ffuiv jmax qyw fozfosq ffuiv +nmg rsl jpzazd qbtlf yxqtsj czwmdfd bamge lbjdof uqy jssc +cbx boozjip pwgvzlq rjz kxy kxy hszacok fvsq jhnir cnsba gafz +sbcuxb wfur nnnfqjj fdwg huhe sbcuxb +icwk qelbxs uevp qped zsnhh wpuok wddxsln ftnzupr ruxol cgxjb jbhh +izcp htykj xxmndoq amnspe htykj +vverol oixwlny vqd tvfzu henc gnyrwr +ytxio etytsx choynep zqapo hfjit +lkvgr oyzfa taiqr jok djatvy ckif tmdw oyzfa zroy +jlgpyp kkqysg oqjki hjohoug hbhta muilz zft +sumfyu wftcu bwwdcy lezimwa qwvxv zwh mqyv bmfot aii torcol rnt +tpdj xrw ccsbnh fhptv fwkxjfm dmqaokd bjci +zxi vmf vmf dpyg +sfzxysw lcms bkojtv bkojtv +opywo qll ipkitr mtwp tudrr svhyp huz bxsdpn xomfy +gkod luo qrosbp orbd rpsjzyd rlh gdok tze +nusiuq nusiuq zeys ahufexc +veno jntg avtmtdn qojxru zegdcql odfcetz pgehau +uqun vigjm ykac ozlelj danmji bibugox +rpuozh ajwru rbvuevv uhzsq +iawoe tyb aewio ymf byt inijv ctu fcys micsgzl pbby alt +gktyxp ris mqpfm bkqsfl nrg idbbcxg jhcf +qibt invvv qibt luitx rnm eby hrfbmwl wnap sgkzvb qlwc hrfbmwl +jwkv qecsjbw lycgldd wjvk tjcp dycldgl pzrvr zrlcf kji +nzsrmiq nmhse ilivrk kqv +besmyzi imkgpt iekbjax abxeijk uvzs wwv +jdocl uki ltswp tjkljc ymce iuepze qygqxzs tei lkry +hhyfy gvzd mqksxlq czn afe mesnag eep frwgekg mqksxlq phpy +ehg connnza ekt ddgokw +mpbsoms uzhzl xevww ztt uzhzl +lftybr firc awsud dsxdkk ltf ipjv dtx lcymth +vkcpb gxtxq yioeq fexj xxgqt +srvca fslnnvf nfmkpvt egw wemumq jie vznf dzsjw cukf kcvyir +yxjkl lyjkx jyxlk kgc xtz +tpoe xzov csp leleoqo noyre tdhf cyib sjgtdx raehdw nmcxp +qvt uhznqe bpvos vtq ddlebtd tqv +xlw utsxs gpia rvlvnts elkxr dddihy tnrslvv ibf wlx bxg +cwqnnrt rkkqyf dye yde fzl pthanj +boc rqjenpp xjqte jteqx pvoofc pidqe ruoucy gvnro ognrv +qhalb gnazwc fhl iuti +clnbjfo nnfs nnfs heymvr oarew oarew nxu +lwtrotg hiaxwj ymzbly nvhzjhj zlsaheg nvhzjhj ymzbly +rrvi tsjp tsjp tsjp killji +rpx hiclj cmwq ibhj nfd +pvwymn iebkd xmpw vuhhkap ksw zigzy mzzyyxy rmuh iwwhea cglfq +rlwelgy sffml jin qsdzro xlsty mgqzuu etxjuo emzd jgnoyq tkjuy vfvb +tkctdj hhkuc viskmy obw +zvjkuj akeky ikj jqd hfhzbwe bkc +btev nrdo hcyiuph stf qharfg vpmel mpfz nvs ytgbbc +ieepn ndueuw svmdr tcvumw mceyrn mrjwhyl tbdj mgrgvz +uxrs ckyi xpmqm czzrkl cjp +nlliwd wrqkrkz yjmng nlliwd zirde hcjjn wco ysf mgl +dxti lcahe ommare izlwf ramsfb nzgfvo ijvm fwymrdu bndq +isxy jpvuzu tdduyhw dixp cfa fkzbteg ytoi kepk ysf yqcpi +qmeprfj soqo ncgeor cqsuuj grzy wogxy vyblnbg slvtry vdols kka +ltykfp gtzl olrp gxend vapee deq +emywfbn dbfiut rkt wvwe dbfiut bwffhea yuzcxv gogpicp wvwe +vqvmrp ofbk dlfabd jwllzxk obx vqpwjj umvng tqwis fstxy fstxy +miha zgvyux rmraszo xwf +kjaagk btm kjaagk wkewjrg kjaagk +lbmli aizs omrdr gzktnx asiz ptanzpa xlo ljre ckyb wob +svz dlk rijagg avxmg fkzwhk uro gegm +dzplum temdw jqnm tvxcww bmg tftttpp deuw comxey xfimzjx caluczi nqn +uwvhxa ztkd nlsdyt vihl julkwwv uzch dwakhs +wkhuihh ycrc cxff vzcfhpp uegfd gaok kcnvz lhzogq lwa tyrypvu +idp zmrrzp zmrrzp nktp xsnx rjsxn +eybrnib ivgntl vaxsbpi eybrnib +nzvnq xvbfa pbhwwh ylju runvsj imlx vztesn +nfdohd nfdohd gtevnky pivjyct ihvd fzcsrq lko fmqk +kwpkks ecikxu bcxswlt qvrxm sbcqmh +kdjrmj piuh kdjrmj vnaf gyedkg vptxgm xezssxx zsg qjzpo zsg +oqo sley aqx qmpqb fgmylbj egd zivj kepxizv kuakyn lunbnd +hmcf hmcf xlhgc hmcf cdlm buofnx +onjcj yluonz kzmk phqo phqo phqo +ohaafy efl bnkkjww wwjnyoj dxeaig ywnjjwo slk hrbebw ohlyju elf +msohiqz aunk njki bfktdgi htmyrj mgx +numlzrl rmnlulz glb ltt fhbajz gqxpu +gko hco oai ryq xwy sdqosft spjkiu cxfhg ycwpglh noy rah +btzpjem brpk vqr atxu rhlh rqv jmg fvyus +phmxxgj ejx xje qtk hsb kqt npwj gqt +hujyjp nwmsd ant zipuya lrkahww uwqal vzlo qmbo twkjkse ufivi +zfbnyz fwvh xrnrw usn zin daq iwjzj +yykyg iwypfy hehqnl cjvk cevdrec +gui muuto wsta glqmx gfo rdmbv mxwz gffzt eejpw gion +lpng nduid iqbpu nduid knrqd +xwxn oefpckv gjaua ugaaj gjuaa +qxk aeql trqdmqc crzlinj crzlinj trqdmqc rijcne ewyf +rfv qmbe fvr bmeq +upqyfw lowzq wpen upqyfw gfskbil sljuzh wpen +bdcara qyhx rtaez qyq gbyr +evzls qxtxq clzd svbgqi zxlzgss vtrre fko eebo qjyl +zaapeo kpwhz tygknau nyd pch trp xqe +ypzcafg rnqmbh qtteg sncu ssojhhm zonfym thir xmgheb wqj gpjg ssojhhm +wvcwyn xrf muozyya lasdp xpjgu kpqv zkiihiv ifje cbdlavg xbied hfnaa +qqqb rettz rycukl ihpkhh +dnxzxqv znb znb fbxj azxtezb xvxa +peqkd xlzqkov esgnw ucku hrwpfxd xtd vnig vlmfp ajte qswr kqoj +dpwy oavzkk dwyp ehij upqxgii pydw +amfc hfv xmqa nqvn cal rqmcq oej amqx cla ntxj +hqhhe qkbhwli wmhlcq xaczs peywuo +vcr xfv xfv kymo qpszwzo xfv +nmrbur tswo xbo ljlrzo bmhpgc pev zovkznz lok wbbhtkk +tojj lxqgr rhjavrm ndsdup gdbjwaq cqpnl wfaxivl rfry ryfr udspnd +beffod sknlph amb feobdf +mldgn jxovw yuawcvz kzgzwht rxqhzev fsdnvu vluuo eycoh cugf qjugo +tlnd qcxj ker fdir cgkpo nrqhyq raef uqadf iahy rxx +mhvisju lhmdbs tcxied xeidtc ujry cditex gvqpqm +cgc jazrp crgnna uvuokl uvuokl uoiwl sknmc sknmc +rvbu czwpdit vmlihg spz lfaxxev zslfuto oog dvoksub diff --git a/2017/inputs/day_5.txt b/2017/inputs/day_5.txt new file mode 100644 index 0000000..3b5dd14 --- /dev/null +++ b/2017/inputs/day_5.txt @@ -0,0 +1,1070 @@ +2 +2 +-1 +1 +-1 +1 +1 +-5 +-5 +-1 +0 +-8 +-2 +-11 +-4 +-5 +-10 +-4 +-9 +-9 +1 +1 +-11 +-8 +-19 +-14 +-6 +-2 +-1 +-11 +-23 +-8 +-7 +-9 +-26 +-1 +-8 +-11 +-34 +0 +-22 +-17 +-41 +-12 +-43 +-33 +-15 +0 +2 +-41 +-41 +-26 +-48 +-52 +-47 +-30 +-38 +-20 +-4 +-21 +-17 +-19 +-55 +-32 +-12 +-55 +1 +-34 +-8 +-15 +-59 +-56 +-16 +-23 +-43 +-5 +-41 +-56 +-32 +-67 +-14 +0 +-28 +-32 +-7 +-54 +-19 +-9 +-24 +-63 +-2 +-60 +-5 +-78 +-11 +-84 +-50 +-36 +-72 +-14 +-30 +-4 +-62 +-6 +-1 +-69 +-17 +-33 +-32 +-45 +-71 +-87 +-71 +-60 +-19 +-80 +-11 +-106 +-45 +-27 +-23 +-51 +-77 +-67 +-103 +-17 +-98 +-109 +-91 +-125 +-68 +-39 +-34 +-96 +-49 +-64 +-38 +-105 +-31 +-100 +-89 +-108 +-69 +-36 +-94 +-38 +-124 +-123 +-79 +-92 +-42 +-14 +-87 +-68 +-17 +-36 +-21 +-54 +-98 +-79 +-142 +-25 +-60 +-112 +-99 +-64 +-15 +-78 +-37 +-64 +-15 +-129 +-32 +-102 +-74 +-112 +1 +-146 +-151 +-147 +-153 +-4 +-181 +-22 +-176 +-4 +-57 +-151 +-86 +-121 +-38 +-137 +-160 +-156 +-72 +-73 +-149 +-64 +-182 +-117 +-146 +-180 +-195 +-27 +-194 +-191 +-108 +-153 +-40 +-149 +-100 +-120 +-207 +-83 +-94 +-73 +-200 +-95 +-155 +-94 +-76 +-9 +-149 +-70 +-125 +-49 +-146 +-223 +-68 +-139 +-26 +-132 +-142 +-165 +-2 +-45 +-154 +-129 +-130 +-185 +-60 +-34 +-173 +-91 +-37 +-40 +-153 +-189 +-236 +-95 +-128 +-46 +-14 +-53 +-245 +-67 +-9 +-208 +-244 +-198 +-74 +-62 +-104 +-51 +-251 +-48 +-50 +-115 +-76 +-79 +-32 +-82 +-65 +-185 +-124 +-32 +-189 +-124 +-174 +1 +-273 +-223 +-275 +-238 +-200 +-184 +-229 +-195 +-152 +-63 +-150 +-73 +-44 +-54 +-187 +-49 +-250 +-192 +-290 +-282 +-266 +-214 +-117 +-199 +-83 +-104 +-251 +-176 +-262 +-296 +-39 +-259 +-87 +-132 +-166 +-67 +-194 +1 +-294 +-8 +-3 +-264 +-217 +-228 +-233 +-241 +-294 +-210 +-72 +-307 +-259 +-33 +-101 +-103 +-235 +-100 +-110 +-253 +-292 +-134 +-269 +-52 +-265 +-15 +-29 +-272 +-126 +-210 +-151 +-308 +-40 +-40 +-112 +-268 +-185 +-346 +-237 +-287 +-34 +-302 +-41 +-25 +-191 +-29 +-170 +-95 +-315 +-278 +-160 +-220 +-99 +-126 +-224 +-33 +-350 +-76 +-138 +-340 +-284 +-268 +-128 +-238 +-197 +-93 +-110 +-120 +-190 +-140 +-64 +-217 +-296 +-103 +-363 +-199 +-254 +-233 +-190 +-282 +-136 +-174 +-309 +-61 +-206 +-18 +-105 +-111 +-163 +-287 +-188 +-145 +-294 +-251 +-398 +-265 +-273 +-50 +-250 +-376 +-5 +-357 +-6 +-8 +-198 +-20 +-82 +-158 +-122 +-196 +-97 +-183 +-48 +-428 +-36 +-88 +-424 +-35 +-380 +-109 +-209 +-323 +-394 +-102 +-276 +-153 +-229 +-320 +-391 +-7 +-328 +-127 +-430 +-102 +-372 +-447 +-222 +-401 +-184 +-183 +-49 +-239 +-413 +-101 +-187 +-289 +-12 +-418 +-248 +-279 +-318 +-134 +-443 +-272 +-456 +-143 +-3 +-209 +-276 +-414 +-189 +-302 +-238 +-241 +-106 +-332 +-375 +-400 +-476 +-9 +-95 +-412 +-52 +-127 +-442 +-278 +-25 +-446 +-411 +-39 +-55 +-80 +-234 +-361 +-223 +-384 +-283 +-47 +-164 +-18 +-38 +-87 +-393 +-93 +-380 +-493 +-73 +-150 +-241 +-378 +-211 +-516 +-349 +-520 +-38 +-397 +-406 +-16 +-461 +-276 +-448 +-316 +-376 +-156 +-369 +-216 +-431 +-309 +-400 +-135 +-523 +-40 +-508 +-87 +-25 +-151 +-355 +-141 +-3 +-495 +-153 +-438 +-343 +-161 +-66 +-455 +-70 +-248 +-278 +-548 +-300 +-337 +-290 +-551 +-200 +-68 +-540 +-476 +-395 +-245 +-318 +-424 +-112 +-556 +-541 +-94 +-148 +-542 +-100 +-120 +-199 +-569 +-471 +-298 +-16 +-453 +-469 +-50 +-500 +-84 +-435 +-579 +-287 +-522 +-77 +-83 +-347 +-437 +-171 +-231 +-139 +-350 +-357 +-221 +-214 +-224 +-148 +-125 +-385 +-255 +-38 +-320 +-254 +-517 +-532 +-80 +-286 +-58 +-97 +-390 +-309 +-548 +-319 +-323 +-238 +-297 +-12 +-312 +-517 +-434 +-466 +-103 +-621 +-448 +-503 +-72 +-601 +-287 +-61 +-577 +-87 +-143 +-33 +-482 +-275 +-529 +-340 +-279 +-130 +-512 +-63 +-109 +-528 +-22 +-549 +-317 +-375 +-377 +-385 +-23 +-191 +-138 +-509 +-40 +-565 +-559 +-14 +-547 +-28 +-159 +-153 +-585 +-508 +-582 +-431 +-580 +-637 +-561 +-513 +-243 +-420 +-298 +-485 +-132 +-613 +-157 +-521 +-596 +-61 +-420 +-498 +-577 +-563 +-354 +-662 +-264 +-273 +-111 +-597 +-466 +-389 +-345 +-306 +-102 +-57 +-596 +-1 +-45 +-12 +-619 +-47 +-43 +0 +-323 +-9 +-319 +-529 +-402 +-238 +-191 +-487 +-315 +-65 +-386 +-110 +-605 +-363 +-461 +-6 +-95 +-95 +2 +-596 +-454 +-618 +-83 +-481 +-283 +-386 +-247 +-417 +-707 +-564 +-603 +-17 +-712 +-140 +-336 +-567 +-443 +-36 +-476 +-251 +-735 +-589 +-198 +-197 +-476 +-49 +-736 +-422 +-383 +-569 +-732 +-1 +-104 +-261 +-352 +-453 +-273 +-344 +-66 +-307 +-698 +-158 +-238 +-280 +-207 +-624 +-491 +-765 +-506 +-146 +-616 +-711 +-650 +-655 +-393 +-19 +-315 +-311 +-572 +-675 +-533 +-156 +-373 +-744 +-142 +-582 +-491 +-796 +-777 +-125 +-483 +-426 +-510 +-560 +-700 +-778 +-407 +-440 +-409 +-238 +-738 +-477 +-147 +-152 +-317 +-110 +-323 +-788 +-601 +-202 +-517 +-487 +-726 +-300 +-1 +-554 +-448 +-15 +-191 +-531 +-568 +-466 +-527 +-132 +-254 +-290 +-8 +-400 +-655 +-788 +-376 +-249 +-662 +-315 +-378 +-41 +-793 +-163 +-29 +-327 +-839 +-133 +-124 +-129 +-673 +-32 +-605 +-393 +-664 +-374 +-135 +-366 +-717 +-93 +-601 +-763 +-788 +-494 +-802 +-282 +-443 +-491 +-461 +-197 +-83 +-96 +-162 +-97 +-161 +-232 +-144 +-472 +-118 +-429 +-387 +-724 +-789 +-636 +-298 +-484 +-720 +-526 +-382 +-102 +-449 +-846 +-525 +-547 +-696 +-524 +-272 +-843 +-286 +-247 +-838 +-447 +-489 +-797 +-483 +-386 +-775 +-340 +-772 +-158 +-293 +-256 +-432 +-812 +-273 +-93 +-487 +-264 +-594 +-330 +-712 +-798 +-131 +-591 +-539 +-677 +-455 +-470 +-108 +-573 +-57 +-845 +-383 +-273 +-890 +-747 +-913 +-648 +-625 +-650 +-544 +-137 +-490 +-434 +-734 +-182 +-355 +-859 +-835 +-141 +-536 +-874 +-102 +-940 +-359 +-83 +-800 +-894 +-712 +-470 +-687 +-578 +-435 +-935 +-400 +-780 +-814 +-458 +-892 +-481 +-371 +-761 +-348 +-388 +-891 +-764 +-297 +-536 +-695 +-314 +-336 +-978 +-379 +-462 +-597 +-533 +-561 +-9 +-474 +-292 +-560 +-420 +-828 +-721 +-769 +-874 +-157 +-495 +-771 +-899 +-571 +-98 +-282 +-233 +-203 +-982 +-416 +-142 +-993 +-540 +-979 +-851 +-506 +-238 +-292 +-184 +-695 +-195 +-632 +-575 +-962 +-76 +-546 +-705 +-13 +-271 +-222 +-124 +-380 +2 +-1003 +-251 +-525 +-228 +-644 +-159 +-624 +-477 +-912 +-712 +-343 +-263 +-88 +-745 +-85 +-374 +-675 +-804 +-610 +-854 +-511 +-612 +-964 +-731 +-358 +-495 +-946 +-466 +-364 +-1053 +-57 +-101 +-829 +-155 +-600 diff --git a/2017/inputs/day_6.txt b/2017/inputs/day_6.txt new file mode 100644 index 0000000..b16e11b --- /dev/null +++ b/2017/inputs/day_6.txt @@ -0,0 +1 @@ +4 10 4 1 8 4 9 14 5 1 14 15 0 15 3 5 diff --git a/2017/inputs/day_7.txt b/2017/inputs/day_7.txt new file mode 100644 index 0000000..faa4be1 --- /dev/null +++ b/2017/inputs/day_7.txt @@ -0,0 +1,1091 @@ +yjmbbu (75) +zdhvqrl (40) -> fpbsu, fwpfjjd, viqhfi +dywqvqh (9) +gewgn (31) +xfekjt (67) +zezowe (31) +wgqkdcr (79) +ljhwzvv (258) +vustse (1584) -> ffnabs, qinmi, qhafxnl +idfwjgx (112) -> buoakk, itwbpot +lxesg (71) +qkbnq (99) +jppgd (27) +ztghd (125) -> bcibchp, aaheijb +qcrpdy (29) +fwidkbp (152) -> mnkwo, ehjooz, jvccsp, cyrrjtx, imynb, chnkkj, agywjrs +nymhem (52) +cazid (93) +olspit (121) -> bqtas, fhuiyrl +ayteb (92) +hjucki (58) +wrqtk (305) +jfjemon (217) -> bjhickt, uacjhqx +mcmqliy (925) -> coopirx, ekohgo, ioywk +rsancy (70) -> aeuub, vchuc, heacb +zjwpbzs (23) -> jysaup, pgubexv, lckuoqf, eeguu +qflouyn (90) +nswximo (65478) -> ibjvonk, sdhtguj, dxyifeb +rymkqd (102) -> vgqeyx, zezowe +wlujpl (92) -> sjwhig, wymfopy, ylfsnz +imcczga (95) +xehdglb (52) +twubx (46) -> goimlra, vlimzz, xaoncma, gfzbp, spdhhoe, fhmauag, cyapi +yjhes (72) +ymcuygn (81) +yatbsip (19) -> bkdtinl, nzqcq, tkmed, ysbrui +yipoeia (58) +chophr (27) +tdwtlf (305) -> epuaii, idfwjgx, nwikpdm +emzrj (119) -> aimav, dtscjna +vbxmpc (7) +nrpxx (21) +wgexpa (103) -> paxzd, vgdwm +vnrmx (359) -> knzppj, gkkgkp, ttwfig, vcixs +knltna (677) -> zbhtee, ztzwh +ojvlwm (52) +bgflw (27) +lsdrwz (73) +hswzo (40) +spwgm (351) -> mizab, cyzkk +jlnyr (16) +nwikpdm (36) -> ihwaeuw, wwkeej +qbmtmcs (34) +djirpp (19) +pkfhp (59) +qfypnb (76) +jzequar (272) -> mtcrswx, wkcyd +tttle (71) -> xlskkfi, ayteb +zbhtee (48) +iriun (9) +dwezv (73) +tojyt (58) -> dwezv, nbngkou, wnjtb, rarkunn +bsorz (27) +qvkotfd (337) +azxjd (268) -> exeub, lryzkx, nqvxs +wpxxh (998) -> wrqtk, yosnw, vyxfljc +gwournc (85) +aghdlll (88) +lejgcu (19) +lxlbt (363) -> oiosol, mpchqe, bsorz, jbpjt +nbeagw (94) +vbbgeo (19) +lqfyzo (21) -> tggkm, zdbqs +vqclii (331) -> dmkbnot, omdpc +lhmnd (216) -> onnylx, khaupo +wwkeej (60) +laczal (99) +xrbjn (20) +qvteg (64) +ogbsm (92) -> xpzhy, mhsjkm +ymckwqo (41) +ghsjtj (271) -> hhmwlo, faixe +sjrxs (259) -> mnijdlk, hygfoe +hdvel (197) -> upuxd, dtstgj +lckuoqf (78) +yppydul (91) +frirj (6) +duftj (42) +dnmvzeg (64) +cpazlc (19) +krxyaak (198) -> maqgick, xbnmvd +oyczfgb (395) -> rxcnn, ktpte, qybmgto +oxiuaz (12) +wfphcf (6) +ihtnbb (87) +omsroa (45) +lybkeg (6022) -> oyczfgb, jzequar, yrcgsnx, ujulj +agywjrs (184) -> anpnrdt, hgdbaol, hcjmsd, kzbvrxk +tiujei (34) +lwencl (28) -> ieusgd, mthhq, fsuzqyz, miwoup, isrtfc +wekya (34) +bkdtinl (1167) -> ojsjuts, euoclfs, xbkeua, mykrcq, jjsvfy, aazxafl +qinmi (1896) -> qshbt, ruozmjk +yfmxvay (46) +kgpwo (52) +fgjjwep (14) +odvtiti (76) +ienye (19) +tcvabyz (99) +ycclns (7) +njogewi (30) +bfchbs (87) -> jykbb, qnbfk +dlbzng (99) +xnmvtem (51) +ccciux (94) +xwlmsqy (25) +wekkbw (17) +yipzce (21) +hcjmsd (10) +upvhfmn (68) -> fvlfq, ivmndi, ussmw, ccciux +hacwv (50) +redqvw (269) +dtpexjq (52) +kmlwj (84) +mluykm (19) +ucbbun (114) -> hrqzqqh, ccuarv +kymhbse (155) -> tznudmk, hnlgkv +xomnhw (185) +nsmoh (65) -> ceuygh, acpfsnb, vgubuy, apkwi, yoeau, pdosfg, lfpzff +zvepqr (51) +wnotwt (99) +lcrwbqi (27) +hdlqvlg (27) +iphgmyt (160) -> woolxv, ewyzqg +ujulj (50) -> cazid, npmwcx, yeooycn, dmeee +zjaklmn (52) +bjrpalu (53) -> rhodopg, tcospq, cvrcvgp +azdei (48) +snzfrer (149) -> bhsbd, tgdzl +zsxizw (18) +fwpfjjd (89) +fndxl (36) +uzrnud (14) +igyxt (41) +vxdkej (135) -> diomq, qokscr +gjuekv (5) +uzufet (143) -> fgjjwep, uzrnud +vzuqbye (87) -> eviqjr, cgxsmq, egmfbdq +zirocl (29) +jonshpm (99) +zmlth (154) -> zhxhkgf, cokzlht +bujroda (51) +bdvtvcu (74) -> tvcod, ouamzwh +jdrdxu (36) +troyu (29) +nrczsn (86) +aihow (92) +gaihmf (84) +ehjooz (124) -> hgwsl, mefxonk +omydd (6) +raevpsw (64) +aylmbfh (188) -> ddspu, thdwfw, kxnkbs, rziezq, jfjemon +diomq (65) +jjyjrtr (87) -> fjduphn, yjvgwdl +zsiziaa (38) +lyptirp (8) +lctdjj (56) +pbtks (85) +jxhrar (227) -> barnhza, iqovqp +neqfzm (13) +dhwauy (48) +qvjqfi (80) +ivstcsm (72) +aabrjf (72) +jvccsp (86) -> gukuqw, hpmbkwb +ddspu (113) -> yjmbbu, dzbrgb +zgevpxx (48) +qrrey (588) -> bhvmgw, wgexpa, xiotwdk +ncodn (62) +rbcqgqv (75) -> imcczga, xzurwza +fpxtub (11) +ldfopw (30) +ewyzqg (49) +iuhlc (6) +oqphsw (2722) -> iueejt, ekdqf, btbxk, jdshuob +eysrnaa (71) +ojsjuts (176) -> njxyw, dzasw, rpzaqc +ozyexx (83) +nnldikq (316) -> upwlxnb, vbxmpc, dgwcz +tfmtk (69) +hwctdr (76) +rothisa (66) +qnbfk (91) +qcgxvx (99) +igyiie (237) -> knirl, trbzi, auxvur, rvhxik +cverrt (52) +orrutjs (93) +ffloi (25) -> kflize, icgwppo +phrxnli (21) +eopxpo (41) +vlfouc (62) +fdnom (87) +wuxhvnx (86) -> ikfpktb, zcvipz +flefy (38) +yoeau (206) -> rfwgtb, drmyco +ozatmpe (34) +ydbri (66) +tufds (42) +pprhx (57) -> xitzb, zqyua, dtpexjq, zyradhz +zhxhkgf (29) +qwzmv (52) +paxzd (53) +cyzkk (60) +gyjxkl (37) +pzpjw (54) +svayf (89) +xxxqpkx (7) +imihjj (69) -> yygqky, qlkslp +tkpvf (47) +tljdqy (81) -> sxllorg, yatfpqx, zbznuyf, kymhbse, rfmeug, tetmzw +iphzyj (260) -> omsroa, mxupea +xiotwdk (177) -> jlnyr, nsqqw +eyyzy (274) -> opuaau, qolnvo, jxhrar +baewpe (55) -> svkdyq, hitoud, zvnxfa, emfctr, facrq, vykqcnj, bckuyxm +barnhza (20) +oafnfo (51) +pjcttzo (50) +aooni (205) -> xrvbzya, gvjrx +scchi (48) +zcgrnt (73) +pmsdv (93) -> pyypotx, marzlxh, zvepqr +kngbqid (89) +iwhqlr (949) -> ztkgsyt, ffloi, hzgig +vyxfljc (92) -> pyrlph, wdsiq, eysrnaa +hddzn (69) +cxvqvjz (136) -> kfrti, nslettz +tcospq (96) -> aabrjf, dllgpye +mnmwzz (142) +xfblj (40) +vfwegiu (46) +iphncut (138) -> wslsg, qhnaxuy +algqhtz (37) -> qeojk, sybpano +dmoxr (73) +tozktyo (29) +npjxq (46) +uvfyo (675) -> lxlbt, gnjvf, nfsuzef, spwgm +ollhxuy (821) -> vefzbc, faecnr, geldsqv, xneoi, cxvqvjz, jgkvfa, xtwdx +ksvfdcc (72) +avycyh (180) -> hwosyg, alqim +nsqqw (16) +nsfsj (99) +tpphe (64887) -> yatbsip, syzlt, uttujj +miwoup (40) -> gyjpoco, apgjv, eknui +iljwgzf (92) +bfuywyg (82) +aaqdb (44) +fgbyre (11) +kywfqzv (41) -> lajidkr, gyjxkl, wfhyr, evhsybt +aiovxpk (95) -> yoxvx, pbtks +hrovawq (50) +ajenoz (48) +aeuub (53) +gxjvj (163) -> yiusa, nrczsn +ippzix (9) +ttllx (73) +rorqy (43) +dqash (96) +lwvnbzs (24) +ckheb (34) +rgfndsx (18) -> qkbnq, welll, bkextqn, wnotwt +rsazi (62) +rpfmi (52) +uxslfay (72) +aemgsa (40) +jfmnsqg (85) +ggnsa (114) -> xhmfmo, azdei +lndaa (175) -> qvjqfi, iyuuh +kjdoubx (128) -> eopxpo, igyxt +dzasw (47) +emfctr (9120) -> qzckx, fsaoa, bjrpalu, mdneq, tdwtlf, hswrbpz, knltna +srqntb (137) -> raevpsw, qvteg +wweusm (66) +hawsl (13) +cupsjm (146) -> baiaa, pcqyagx +ppqlc (42) +tadnt (47) -> ufefj, rwxggm, rorqy +rvhxik (11) +vijkx (32) +lqcar (71) +dhkahb (49) +ftuemb (19) +ewdqb (50) +npmwcx (93) +wwezydn (97) +fuvru (98) +cdpwklz (83) +dtscjna (46) +exuusj (7) +ouamzwh (88) +ggvbqrp (145) -> opohwq, yrmgc, gewgn +ekdqf (467) -> ugvqayz, ysgsry, ogbsm +torxqh (90) -> dzwol, lepja +hpmbkwb (69) +ripqyzr (48) +eiklbh (32) +omdlwm (168) -> ihtnbb, hjjkx, bomho +lbwzat (74) -> iivncbz, dmoxr +pyypotx (51) +bjabd (7) +auzbdlz (95) +sxfilp (72) -> livlj, lgenxz +kxvlprg (60) +rfmeug (121) -> apygt, viwns, chtlcwq, wekkbw +xajjyba (164) +kzltfq (94288) -> vnrmx, lrihy, arqoys, nsmoh +mbhld (73) +rwxggm (43) +vapwxei (61) +ufefj (43) +oajawn (34) +dgnjf (335) -> yxseri, nscbsob +xaoncma (296) -> yipzce, nrpxx, rrfbngi +kqlsniq (95) -> qwsxpnc, mqmbcl, gtbbuvb +jrvbacq (49) +oavluo (21) +qpldch (54) +ieusgd (295) +tifgptk (100) -> ddldgex, ggvbqrp, focqhgt, cncak, ksvpnt, weuwc +lhradm (583) -> vusxa, lbwzat, ucbbun +apgjv (85) +cbibo (99) +jxhngrl (48) +qwsxpnc (96) +ysbrui (1293) -> iqggu, upvhfmn, kpqyb, wdeuy +ekvall (209) -> jxhngrl, aplvqql, drwfop +mkwfj (35) +pjiqvd (87) +pgubexv (78) +vbhnmr (2850) -> iftfc, kunzpa, qrrey, tljdqy +sjwhig (93) +zyradhz (52) +wcexum (116) -> eiklbh, vijkx +cdcye (53) -> izppmg, rxvyqsp +bdinafh (10) +rziezq (145) -> taiho, pkfhp +nslettz (10) +svhbd (109) -> xcvxle, fqzsq, jopjvd +limljj (68) +kauphp (231) -> dyxsmz, yzxzo +caryo (7) +nahovfk (109) -> flefy, cfztpc +qolnvo (267) +cmqwplb (9) +cfhuce (71) -> cecsr, josdslh +zwnvqu (88) +mhjtjp (91) +apkwi (222) -> rxragg, zsxizw +ioywk (16) -> ozyexx, eikmns, ktjav +yrmgc (31) +kqzemkv (96) +rxvyqsp (60) +hnlgkv (17) +raryuo (73) +bomho (87) +rixnft (85) -> cpndnx, fpxtub +zoewj (193) -> ohbuhy, ymckwqo +hnyqq (34) +tkmed (1959) -> tuqmup, jwgchxu, sjforw, zmsosb, tqikxkp +wlpyulp (10) +pixjzh (158) -> fgjwz, lsknlg, hlcghe, txhfuoh, hdvel +likvlm (62) +xhmfmo (48) +rgrxpe (69) +weuwc (84) -> xtwdau, muncur +uevcwul (92) +kpxqlr (155) -> nbbyqsa, ilkqp +fqzsq (98) -> tiujei, yhubw +ubovv (6) +knirl (11) +lzvniiz (60) +cwtdf (29) +qeojk (99) +ycxzfkf (131) -> bgflw, chophr +thjulip (20) +vgdwm (53) +myhch (25) +bovno (175) +uqlso (48) +rhnkdt (59) -> rsazi, ncodn, pwizhzr, likvlm +acpfsnb (204) -> nmlcne, vfsttaj +wzfkk (99) +oqlpz (81) +nscbsob (24) +mzmfygf (171) -> jxyoypa, ippzix +rvrlma (211) +pfphng (90) +mdiqsgg (12) +jtzkva (274) -> flomey, ukvvt +tvwxmur (64) -> yodoqn, ksvfdcc, ivstcsm, pvgzz +aplvqql (48) +qybmgto (9) +mtcrswx (75) +aphpzub (29) +vchsdif (105) -> ofisj, zwnvqu +dllgpye (72) +lfzahrm (79) +oiosol (27) +geldsqv (80) -> ienye, eeppf, ftuemb, vbbgeo +vlbba (81) -> ewdqb, vfzby, pjcttzo, abddskq +nfsuzef (75) -> dlbzng, cbibo, wzfkk, jonshpm +lryzkx (71) +mhndszl (190) -> tbrfk, xprzeeb +jbepak (66) +nmlcne (27) +gfffvbp (8) +bqtas (93) +fhmauag (221) -> vantwg, kzwqzqf, vfwegiu +misyfn (82) -> uixlx, oupzsh, bovno +jtauf (13) -> xskehl, bmfhjm, srhirm, kjfmqkt, qzxaqvy +eerktn (85) -> npjxq, kasfuwe, ljbss, theau +ktaet (58) +eeppf (19) +vgqeyx (31) +qhnaxuy (31) +xrvbzya (35) +nzqcq (66) -> vewgrvp, vfngjd, sjrxs, hvjtn, ecokyy, gcaxntb, omdlwm +sybpano (99) +ebsniof (39) +urzul (9) +srmiagk (292) -> dvdgowj, vqpeg, gjuekv +uexdnv (82) +pgspysb (40) +wymfopy (93) +nqhdt (164) -> mkwfj, gjwaqu, sxmbcwp +twzpqip (41) +bniti (66) +yfjenp (295) -> qxfce, zsiziaa +meoeea (60) -> laczal, tcvabyz +heacb (53) +focqhgt (238) +dtstgj (36) +kkmqko (7) +vcjjo (98) +nnnkeh (445) -> gzzpja, bhuyfk, xnukvni, tttle, snzfrer +baesyhf (1013) -> tznkwk, hcjxz +hygfoe (85) +wtxbqe (87) +vwzglf (58) +hswrbpz (254) -> flcqsb, sbguah, cdcye +axtqrx (29) +auxvur (11) +iqggu (444) +kceusl (42) +jykbb (91) +nxzkuj (75) +xzurwza (95) +rrflox (52) +kfmzbvk (10) +mnkwo (212) -> jyskb, wfphcf +dfvhic (82) -> fhmazv, hwctdr +gfzbp (197) -> ymcuygn, mxzbcqn +tlednk (39) +lgenxz (54) +emwbbut (9) +exoft (17) +woolxv (49) +auxqbbc (87) +wvocz (67) +hvjtn (325) -> cverrt, kfxoi +aunhcg (613) -> kjdoubx, ggnsa, acknlp +absdwf (39) +wajnxjj (40) -> imjzf, wwezydn +hgdbaol (10) +cfztpc (38) +chlxm (46) +ljbss (46) +gauumxf (230) -> tkiraal, lyptirp +nhlittn (22) +gcaxntb (405) -> mdiqsgg, oxiuaz +lfxew (66) +bamxg (66) +wdsiq (71) +mykrcq (98) -> zcgrnt, raryuo, okrdziq +erpvue (91) +kmwbbz (93) +vsgaam (7) +hokyk (66) +pjzpmq (38) +iqovqp (20) +mmcychg (65) +guncf (259) -> proshun, wxjka +jatnl (216) -> oavluo, phrxnli +nhkvp (100) -> rgrxpe, nscav, illjvf +hcjxz (31) +mqrroj (243) -> jtjcj, dnmvzeg +lvksghj (18) +mhsjkm (84) +popplum (89) +vusxa (30) -> ieadjz, mzmtuw +dmkbnot (26) +httit (18) +tbrfk (19) +ztzwh (48) +imjzf (97) +rypdxr (105) -> qyoqb, lejgcu, djirpp +qzckx (35) -> qzzkvf, pmsdv, gauumxf +xbnmvd (76) +ouymke (47) +rajtef (365) -> iriun, ezaypy +itngcua (65) +orxoo (66) +tcdwurt (18) +auqoj (99) +sqnvvbg (36) +rxragg (18) +kpqyb (258) -> sqkcdf, iqxwh, vnhvilk +proshun (47) +uscufoy (15) +tpipb (61) +owhjmt (155) -> vsruoi, ifxcrug +bkvle (9) +yosnw (32) -> ilymgq, yppydul, yamclb +iynywq (66) +nxpexoq (92) +eviqjr (25) +trbzi (11) +rfvomn (95) +ohbuhy (41) +vkpltts (73) +ktpte (9) +bbgwzg (79) +bgcigo (8) -> bruzfkf, lxcbjgy, vlmcmcu +ecokyy (357) -> iaphzk, httit, vztnh, owmni +jwgchxu (32) -> rfvomn, auzbdlz +xlskkfi (92) +uxjasn (36) +dcumfo (73) +wpnqet (87) +ilqol (88) +bhsbd (53) +flcqsb (115) -> meypo, aphpzub +yvqtyi (85) +oyvhouc (37) -> cdpgoi, bbgwzg, xoziel, lfzahrm +bjhickt (23) +hmvwl (32) -> nswximo, tpphe, baewpe, hghnmib, kzltfq +oiijtm (20) +ylfsnz (93) +imynb (146) -> absdwf, cikaze +yygqky (82) +yuswp (68) +izppmg (60) +itwbpot (22) +hwosyg (42) +mkrzp (211) -> laxsl, zirocl +vqpeg (5) +gddkqw (244) -> vhtyadn, lvksghj +bhuyfk (79) -> aghdlll, ilqol +yrfqaga (103) -> jqinti, zjaklmn +bnfopv (118) -> cjmxed, zlzers, qrlggma +welll (99) +ehuzoq (77) +nqyok (77) +rrfbngi (21) +yoezrpw (38) +rpzaqc (47) +qxlucvg (84) +tehyhc (13) +gqrfok (231) -> kfhnhm, aituccf, qrkhol +zvnxfa (10022) -> aylmbfh, lwencl, pixjzh +gzzpja (255) +ofrwmq (205) -> iigvpqy, wweusm +qanbo (50) +obslyn (13) +hwovhvw (915) -> qdhrchr, nahovfk, xomnhw, ycxzfkf +smlfbc (1615) -> wnjwnr, pprhx, aiovxpk +xbkeua (157) -> pgspysb, aemgsa, xfblj, hswzo +btklib (51) +owmni (18) +qzzkvf (108) -> aobitc, tsrogy +umtrod (22) +vxajmkg (71) +jmlmzpz (62) +plurwe (228) +jyskb (6) +xnuoujm (16) +nakmo (10) +uzhlers (50) +umlkxqv (20) -> ecimj, wudjf, jfmnsqg +ziqwzzy (204) -> uscufoy, fooyrq +ymrogz (272) -> ebsniof, tlednk +lpuass (28) +qrkhol (9) +hpkpw (38) +gtzcxq (73) +gvjrx (35) +ieadjz (95) +tcukgv (66) +ifxcrug (55) +thxtoc (178) -> trtgn, fdnom +puwvse (414) +pvppi (246) -> qlwxeb, nuqyqh +vcixs (260) -> noipcz, frohei +cichyqw (71) +ugvqayz (126) -> xfekjt, wvocz +hrqzqqh (53) +qedst (18) +wnjtb (73) +kjfmqkt (138) -> pzpjw, qpldch +ussmw (94) +sxmbcwp (35) +dqdfv (73) +ptyxo (13) +upuxd (36) +fppcif (209) -> uxslfay, yjhes +kxykfr (82) -> twzpqip, qymwy +yodoqn (72) +mnzbkuh (28) -> jtouvtb, wdvwub +omdpc (26) +ccrftvw (62) +bmfhjm (222) -> lyvyhkm, sbyxyf, kblshw +fwgqj (1924) -> zmcgfdp, vzuqbye, rypdxr +rlbom (79) +livlj (54) +ybvgki (8) +zcvipz (97) +xyohoxa (928) -> qkkzzlm, lmuyfcw, avycyh +dchts (99) -> lctdjj, oevyknd +ksfok (217) -> gfffvbp, ybvgki +hoomyh (88) -> aaqdb, ljfqvk +qijarlh (58) +tznudmk (17) +cyrrjtx (124) -> oqbdf, xwlmsqy, ulztj, rjsnth +nuqyqh (52) +oblsboq (85) +imnhql (94) +hxswghs (126) -> dwwsu, hdlqvlg, jppgd +ulztj (25) +hgwsl (50) +ksvpnt (96) -> fqlezvk, lqcar +mjpzp (10) +fsaoa (89) -> dbwmq, uzufet, arwmalf, gobrf +iftfc (159) -> thxtoc, jtzkva, tvwxmur +zjpsm (83) +vwfhi (9) +opuaau (75) -> dqash, kqzemkv +mxupea (45) +dmkyzy (15) -> ttllx, horqcc, dcumfo +sxllorg (69) -> kxvlprg, lzvniiz +txhfuoh (219) -> lwdqnj, myhch +chtlcwq (17) +hlcbqu (104) -> ccrftvw, jmlmzpz +ivmndi (94) +lficpr (62) +ortqc (99) +dvzlq (33) +acknlp (56) -> aozoac, ehuzoq +jqxnf (60) +hfftu (52) +ihzvygq (94) -> kmwbbz, orrutjs +rarkunn (73) +hitoud (5511) -> vcktg, rqbjbio, xtyzy, ssdgbnh +sdhtguj (58) -> uklsrym, mcmqliy, nnnkeh, clinrg, fwidkbp, hzmhm, xyohoxa +hrlkgen (99) +vuyzhsh (61) +nzzfer (85) -> qcgxvx, ortqc, auqoj, ilfzi +tuqmup (222) +zbznuyf (137) -> ptyxo, qwtzc, neqfzm, hawsl +qwtzc (13) +vykqcnj (71) -> jitzj, nkhadt, tcsbho, fhxpkd, fwgqj, smlfbc +mjzksjz (7) +yfdtz (36) +faixe (56) +tejnuve (209) -> jgmisxl, dhkahb +opohwq (31) +lsknlg (95) -> vwzglf, hjucki, yrkvb +fhmazv (76) +egmfbdq (25) +rxcnn (9) +tboizos (250) +glwhd (122) -> ceoav, troyu +ykehxw (19) +bruzfkf (91) +rjjlus (87) +ocnna (18) +qshbt (73) +raakduh (85) -> fuvru, vcjjo +wudjf (85) +ihwaeuw (60) +kfxoi (52) +oewzluz (39) +coopirx (251) -> exuusj, rvimq +cokzlht (29) +uacjhqx (23) +tznkwk (31) +mthhq (111) -> uevcwul, nxpexoq +uixlx (7) -> kmlwj, gaihmf +nqvxs (71) +ktjav (83) +eknui (85) +fhuiyrl (93) +fktsu (65) +vugnug (65) +ilymgq (91) +clinrg (1033) -> rsancy, jrqorlo, lvklj +bkextqn (99) +ekohgo (251) -> xxxqpkx, wkphn +alkneau (34) +mnijdlk (85) +dyxsmz (38) +mefxonk (50) +lajidkr (37) +uiuokpq (89) +oupzsh (43) -> bzmade, bamxg +cijptz (18) +khibjj (89) +yamclb (91) +okrdziq (73) +sbyxyf (8) +zknziw (18) +fobzai (75) +rjsnth (25) +iaphzk (18) +lufgosn (10) +rzkcu (34) +xlhfyw (471) -> yuswp, limljj +tcsbho (1842) -> mnmwzz, mnzbkuh, zpidc, cpqti +docln (85) +neeqb (7) +tvcod (88) +uklsrym (40) -> bbhniy, gddkqw, lhmnd, ihzvygq, nhkeb, wuxhvnx +qkkzzlm (76) -> imnhql, nbeagw +qywkuqu (20) +fvgbg (191) -> iwkntdi, jdrdxu, sqnvvbg, yfdtz +qlkslp (82) +iqxwh (62) +mdneq (623) -> uzhlers, qanbo, tedplb +msmgk (173) -> fygmpjn, exoft +euoclfs (241) -> pjzpmq, hpkpw +vlimzz (19) -> yvqtyi, gwournc, docln, oblsboq +zoqni (189) -> chlxm, yfmxvay +oignan (206) -> hdaqxlh, fgbyre +zpidc (40) -> bujroda, btklib +aazxafl (215) -> xnmvtem, oafnfo +yhubw (34) +xneoi (138) -> vwfhi, cmqwplb +vefzbc (138) -> dywqvqh, emwbbut +ruozmjk (73) +jrwfehi (75) -> kcnim, bdvtvcu, tfsoxgb, tboizos +iivncbz (73) +ccuarv (53) +lrihy (185) -> vchsdif, bgcigo, raakduh, vlbba, igyiie, zoqni +vewgrvp (73) -> dntphko, svayf, uiuokpq, popplum +iigvpqy (66) +fjduphn (91) +uttujj (11755) -> glwhd, sxfilp, wcexum +tluap (6) +exeub (71) +dzwol (61) +ilfzi (99) +cdpgoi (79) +hxckb (71) +yoxvx (85) +theau (46) +vwnjh (233) -> jqxnf, qfpwln +jbpjt (27) +zmsosb (14) -> rrflox, ovluts, rpfmi, ojvlwm +yoivja (59) +towlhi (36) +zcrjb (253) -> qhohy, uwaiki +josdslh (59) +xoziel (79) +fsuzqyz (169) -> duftj, ppqlc, kceusl +chwjiub (96) +fpbsu (89) +qyoqb (19) +dfeomzr (38) +kfhnhm (9) +oevyknd (56) +buoakk (22) +wduqgix (77) +qokscr (65) +oqbdf (25) +jjsvfy (199) -> yoivja, gdnsat +ssdgbnh (887) -> qtsjbq, plurwe, mhndszl, hlcbqu, pgskth, oignan +lrsedv (213) -> eaqjcju, cekpxgj +iwkntdi (36) +qfgzmtz (73) +rfwgtb (26) +alcvj (7) +bvdxf (30) +ofisj (88) +mpchqe (27) +pwizhzr (62) +wkcyd (75) +mxzbcqn (81) +npzdqeg (227) -> tufds, msxhvo, pcsucog +illjvf (69) +iyuuh (80) +fygmpjn (17) +dvdgowj (5) +hlcghe (91) -> khibjj, kngbqid +zvurtb (77) +ouspx (46) +dbvxai (76) +facrq (13496) -> fkbla, ffvprc, yrfqaga, msmgk, hxswghs +xbcgipi (66) +wfhyr (37) +ziyata (221) -> oqlpz, jjtrisl +muncur (77) +vlvss (183) -> odvtiti, fazqw +kvdkwy (96) +ddldgex (84) -> nqyok, wduqgix +trtgn (87) +jitzj (65) -> fvgbg, nbfqgr, zjwpbzs, lndaa, vlvss, gxjvj, zcrjb +hkhoyje (95) -> frirj, iuhlc +gtbbuvb (96) +tfsoxgb (250) +rohvy (95) +qhohy (41) +goimlra (227) -> orxoo, lfxew +hubbqbi (95) +vchuc (53) +svkdyq (9559) -> akmgfo, lhradm, jtauf, aunhcg +fazqw (76) +flomey (39) +apygt (17) +wjptb (43) +srhirm (147) -> bicsjoc, dvzlq, olykwbi +wdeuy (254) -> hubbqbi, rohvy +yeooycn (93) +qoyzgsp (28) +sqkcdf (62) +rgbvlc (49) +qinzaf (813) -> aooni, zoewj, ogzrdrk, umlkxqv +kflize (84) +isrtfc (201) -> vmutyru, ouymke +nkhadt (292) -> fppcif, vwnjh, oyvhouc, ekvall, guncf, npzdqeg +nbbyqsa (40) +ikfpktb (97) +maqgick (76) +xtwdx (156) +sbyzsq (10) +vgubuy (74) -> iljwgzf, aihow +taiho (59) +cpndnx (11) +vhtyadn (18) +aaheijb (54) +rykadr (19) +onnylx (32) +gukuqw (69) +fooyrq (15) +zqyua (52) +vsruoi (55) +ikmvhid (2745) -> hwovhvw, arsuc, yzrdupu +vztnh (18) +khaupo (32) +cpqti (142) +qtsjbq (126) -> wekya, rzkcu, alkneau +pcsucog (42) +lepja (61) +ibjvonk (10277) -> xlhfyw, svhbd, misyfn +rqbjbio (29) -> mqrroj, hjeysaa, wlujpl, vooac, rrggg, yfjenp +ceuygh (90) -> aqxsjq, qxlucvg +qzxaqvy (78) -> fwskxtt, jlgvplm +fwskxtt (84) +yrkvb (58) +thdwfw (219) -> umtrod, nhlittn +zpkbe (73) -> cwtdf, tozktyo, qcrpdy, axtqrx +hjjkx (87) +jxyoypa (9) +ilkqp (40) +akwvj (238) -> jatnl, iphgmyt, meoeea, gqrfok, ljhwzvv +lkcddrg (2238) -> lqfyzo, rixnft, hkhoyje +xprzeeb (19) +rhodopg (94) -> qfgzmtz, dqdfv +ttwfig (340) -> rykadr, ykehxw +kueyf (85) -> ulbbc, nzzfer, azxjd +zmcgfdp (136) -> tehyhc, obslyn +ffnabs (20) -> guehoas, nnldikq, ofrwmq, lrsedv, qvkotfd, shfdaba +arwmalf (143) -> vsgaam, bjabd, ycclns, kkmqko +gyjpoco (85) +drmyco (26) +arqoys (1859) -> urzul, bkvle +nscav (69) +tsrogy (69) +qhafxnl (1337) -> xbcskih, kpxqlr, algqhtz +yiusa (86) +zdbqs (43) +xzppxad (58) -> ltxkw, ollhxuy, qinzaf, wpxxh +dxyifeb (1862) -> twubx, lkcddrg, uwqgz, uvfyo +zlzers (49) +gkkgkp (358) -> wlpyulp, nakmo +abddskq (50) +tggkm (43) +dgwcz (7) +bhvmgw (29) -> qflouyn, pfphng +guehoas (283) -> qedst, cijptz, zknziw +marzlxh (51) +mizab (60) +jgkvfa (120) -> ocnna, tcdwurt +jopjvd (80) -> dnouufu, wjptb +lwdqnj (25) +xpzhy (84) +noipcz (59) +bbhniy (20) -> itngcua, mmcychg, vugnug, fktsu +jtjcj (64) +tgdzl (53) +gobrf (25) -> gtzcxq, lsdrwz +arsuc (65) -> rbcqgqv, huwsoc, bnfopv, srqntb, vxdkej, owhjmt +ogzrdrk (101) -> vztbn, wtxbqe +oxbkwyr (91) +yatfpqx (109) -> xrbjn, qywkuqu, thjulip, oiijtm +jlgvplm (84) +bcibchp (54) +glgnecl (16) +tqikxkp (222) +bhcal (7) +vmutyru (47) +kzwqzqf (46) +evhsybt (37) +gdnsat (59) +cikaze (39) +jrqorlo (229) +ovluts (52) +nbfqgr (169) -> cdpwklz, zjpsm +nbngkou (73) +wslsg (31) +aobitc (69) +htgxu (24) +wjolzt (46) +hzgig (95) -> jrvbacq, rgbvlc +ulbbc (217) -> bniti, jbepak, iynywq, xbcgipi +wkphn (7) +fkbla (207) +jqinti (52) +yhiogu (256) -> neusnw, tkpvf +ebjsluk (39) +shfdaba (76) -> wpnqet, rjjlus, pjiqvd +anpnrdt (10) +jdshuob (491) -> kywfqzv, zpkbe, cfhuce, mzmfygf +vooac (341) -> lufgosn, sbyzsq, mjpzp +frohei (59) +baiaa (15) +pyrlph (71) +cgxsmq (25) +ukvvt (39) +gaujsyk (26) -> ktaet, yipoeia, qijarlh +gnjvf (375) -> ajenoz, ripqyzr +hghnmib (47802) -> vbhnmr, vustse, lybkeg, ikmvhid, oqphsw, xzppxad, gvkcsad +yrcgsnx (270) -> qfypnb, dbvxai +kwqrbav (34) +wdvwub (57) +viqhfi (89) +akmgfo (243) -> zhvji, iphncut, oyxbblb, gaujsyk, ybftt +faecnr (80) -> dfeomzr, yoezrpw +xskehl (228) -> ubovv, omydd, tluap +pdosfg (21) -> rlbom, lbjwlov, wgqkdcr +tkiraal (8) +aimav (46) +ecimj (85) +eikmns (83) +fqlezvk (71) +qrlggma (49) +ztkgsyt (29) -> bfuywyg, uexdnv +tedplb (50) +cvrcvgp (86) -> zvurtb, dkcix +bckuyxm (11306) -> eyyzy, jrwfehi, baesyhf +ffvprc (65) -> vxajmkg, cichyqw +jjtrisl (81) +vantwg (46) +vlmcmcu (91) +qdhrchr (89) -> dhwauy, uqlso +ceoav (29) +bhrbod (50) -> oxbkwyr, erpvue, zhrnwk, mhjtjp +yxseri (24) +kzbvrxk (10) +kcnim (76) -> zjoxibi, auxqbbc +ltxkw (30) -> eerktn, nqhdt, jjyjrtr, bfchbs, redqvw, mkrzp, nymguj +rrggg (371) +uwqgz (1923) -> torxqh, zmlth, lnctft +dbwmq (117) -> bmecxwd, lcrwbqi +kasfuwe (46) +btbxk (755) -> xajjyba, kxykfr, rymkqd +njxyw (47) +fvlfq (94) +zhvji (162) -> cpazlc, mluykm +aozoac (77) +chnkkj (86) -> tfmtk, hddzn +dkcix (77) +lxcbjgy (91) +mofks (30) +yzrdupu (719) -> wajnxjj, dfvhic, dmkyzy, ziqwzzy +wxjka (47) +xitzb (52) +rvimq (7) +qddsx (30) +lvklj (97) -> ydbri, tcukgv +sjforw (208) -> alcvj, neeqb +yjvgwdl (91) +fhxpkd (261) -> kauphp, zdhvqrl, rhnkdt, nhkvp, tejnuve, olspit, srmiagk +eaqjcju (62) +ybftt (122) -> oewzluz, ebjsluk +jgmisxl (49) +hdaqxlh (11) +cjmxed (49) +aqxsjq (84) +cekpxgj (62) +tetmzw (121) -> ozatmpe, qbmtmcs +mqmbcl (96) +xtyzy (155) -> yhiogu, iphzyj, pvppi, tojyt, krxyaak, ymrogz +drwfop (48) +pgskth (86) -> hxckb, lxesg +pvgzz (72) +kunzpa (687) -> tadnt, cupsjm, hoomyh +nhkeb (252) -> caryo, bhcal, mjzksjz, ufitse +cncak (182) -> qoyzgsp, lpuass +aituccf (9) +qfpwln (60) +laxsl (29) +yzxzo (38) +lnctft (116) -> zgevpxx, scchi +lyvyhkm (8) +vcktg (1556) -> ztghd, imihjj, ksfok +dzbrgb (75) +xbcskih (85) -> fobzai, nxzkuj +jtouvtb (57) +ufitse (7) +upwlxnb (7) +jysaup (78) +ysgsry (228) -> glgnecl, xnuoujm +horqcc (73) +vfsttaj (27) +gvkcsad (5412) -> ghsjtj, dgnjf, ziyata, rajtef, kqlsniq, vqclii +lbjwlov (79) +vnhvilk (62) +dntphko (89) +syzlt (6183) -> tifgptk, iwhqlr, akwvj, kueyf +hzmhm (1087) -> rvrlma, dchts, emzrj +neusnw (47) +vfzby (50) +cecsr (59) +uwaiki (41) +msxhvo (42) +fgjwz (113) -> qwzmv, xehdglb, kgpwo +lmuyfcw (164) -> hrovawq, hacwv +zjoxibi (87) +viwns (17) +olykwbi (33) +meypo (29) +sbguah (49) -> vlfouc, lficpr +oyxbblb (92) -> towlhi, fndxl, uxjasn +bzmade (66) +lfpzff (238) -> bdinafh, kfmzbvk +epuaii (88) -> ckheb, kwqrbav +dwwsu (27) +xnukvni (207) -> htgxu, lwvnbzs +zhrnwk (91) +vfngjd (325) -> hfftu, nymhem +vztbn (87) +kxnkbs (19) -> tpipb, vuyzhsh, vapwxei, wbxdta +bmecxwd (27) +nymguj (123) -> vkpltts, mbhld +qlwxeb (52) +kfrti (10) +xcvxle (106) -> qddsx, bvdxf +wbesqn (99) +kblshw (8) +qymwy (41) +ezaypy (9) +dnouufu (43) +cyapi (227) -> rothisa, hokyk +itbsk (30) +alqim (42) +hjeysaa (251) -> mofks, itbsk, njogewi, ldfopw +ljfqvk (44) +iueejt (5) -> rgfndsx, bhrbod, puwvse +knzppj (81) -> hrlkgen, nsfsj, wbesqn +wnjwnr (197) -> hnyqq, oajawn +xtwdau (77) +dmeee (93) +qxfce (38) +pcqyagx (15) +bicsjoc (33) +eeguu (78) +wbxdta (61) +gjwaqu (35) +mzmtuw (95) +huwsoc (173) -> ouspx, wjolzt +spdhhoe (167) -> chwjiub, kvdkwy +hhmwlo (56) +icgwppo (84) diff --git a/2017/inputs/day_8.txt b/2017/inputs/day_8.txt new file mode 100644 index 0000000..7b63126 --- /dev/null +++ b/2017/inputs/day_8.txt @@ -0,0 +1,1000 @@ +ev dec -705 if cag != 2 +b dec -195 if ty >= -8 +red dec -404 if v > -7 +d inc -971 if k >= -9 +k inc 303 if k > -8 +cag inc 539 if ev > 697 +ev inc -11 if d <= -963 +alf inc -634 if xoc < -2 +eb dec 927 if b <= 201 +e dec 67 if eb >= -930 +he dec -29 if qby < 8 +cox inc 193 if b >= 188 +red dec 340 if alf >= -7 +k dec 8 if red > 57 +eb inc -606 if e <= -75 +xoc inc 337 if red == 64 +xoc inc 186 if mk == 0 +cox inc 840 if npo >= -5 +s inc -449 if anb != -3 +eb inc -233 if npo < 2 +npo inc -808 if mk <= 9 +eb dec 139 if eb > -1161 +ty inc -929 if ty > -7 +mk inc 789 if d > -977 +red dec 915 if k < 299 +anb inc 852 if mk == 789 +red dec 242 if swy == -6 +e inc -29 if cag < 546 +alf dec -219 if cag > 535 +red dec -298 if ty < -921 +tm dec 175 if obo <= 2 +alf dec 553 if eb != -1298 +alf inc -870 if s != -449 +v dec 744 if cox < 1036 +d dec -720 if he > 24 +ty inc -201 if k <= 301 +xoc inc 956 if v > -744 +s dec 539 if e >= -100 +mk dec -37 if anb != 852 +mk dec 833 if tm < -167 +ev dec -410 if ev < 686 +s dec 77 if cag != 539 +anb inc 917 if swy >= -2 +obo dec -5 if s >= -997 +qby inc -231 if tm == -175 +ev dec 378 if tm <= -167 +b dec -106 if s < -985 +s dec 301 if e < -89 +npo inc 232 if b == 301 +red dec -960 if mqk < -9 +he inc -789 if k == 300 +npo dec 826 if cox < 1033 +e inc 101 if k > 291 +v inc -898 if he > 27 +alf inc 141 if anb > 1767 +red inc -613 if e < -2 +tm inc -151 if cag >= 530 +k inc -346 if b != 305 +he dec 967 if cag <= 546 +ev dec -931 if cag < 543 +swy dec 309 if qby < -228 +d inc 437 if cox > 1030 +ty dec 586 if ev <= 1249 +alf dec 299 if e <= -2 +d inc 977 if xoc == 523 +d inc 594 if s <= -1282 +ev inc 21 if swy < -306 +qby dec -722 if cag < 543 +k inc -381 if ev < 1259 +alf inc 847 if anb > 1764 +k inc 126 if s <= -1292 +eb inc -109 if mqk > -4 +obo dec 900 if swy < -300 +obo dec 364 if mk <= -35 +swy inc -211 if eb >= -1416 +ty dec -680 if mqk <= 1 +ty dec -235 if cox > 1024 +cag dec -261 if red <= -559 +obo dec -897 if mqk == 0 +tm inc -981 if mk < -49 +ty inc -805 if eb >= -1402 +mk inc 278 if red < -552 +ev inc 63 if v > -1645 +swy dec -388 if xoc <= 530 +mqk inc 187 if obo != -357 +s inc 416 if b < 309 +qby inc 399 if mqk >= 185 +red inc -680 if mqk != 188 +he inc -981 if eb >= -1407 +d inc 225 if tm >= -327 +he dec 158 if d <= 1991 +d dec 74 if qby == 890 +k dec -930 if anb <= 1770 +s dec -546 if mqk == 179 +ty dec 733 if k >= 874 +ev dec 581 if obo == -362 +cox dec -922 if obo == -362 +obo dec 922 if e == 5 +d inc -948 if tm == -326 +cag inc 161 if mk <= 241 +eb inc -580 if e != -1 +anb inc -632 if qby != 889 +red dec -285 if mk <= 239 +qby inc 550 if eb >= -1997 +e dec 930 if k > 869 +eb inc 604 if swy > -138 +obo inc 383 if he != -1100 +s dec -89 if eb <= -1377 +qby dec -821 if ty < -1532 +ty inc 940 if qby >= 2257 +alf inc -421 if swy != -123 +qby inc 787 if b != 293 +alf inc -80 if b < 301 +b dec 205 if eb <= -1378 +qby dec 870 if obo != -892 +d inc 183 if swy == -132 +s dec -81 if mqk != 187 +swy inc 976 if d >= 1138 +red dec 281 if anb == 1138 +xoc inc 681 if d < 1141 +v dec 14 if obo > -902 +he dec -525 if xoc <= 530 +v inc -866 if red >= -955 +cag inc -835 if mk != 240 +qby inc -549 if s <= -781 +eb dec 584 if mk >= 229 +qby dec -711 if obo >= -904 +ev inc -400 if anb <= 1144 +k inc 82 if swy >= 840 +e dec -415 if mk != 229 +red dec -923 if anb > 1128 +v dec 602 if b != 86 +ty dec -699 if ev > 346 +xoc dec 549 if k > 968 +k inc 317 if qby < 2343 +npo dec 919 if d >= 1137 +e inc 421 if e > -519 +eb dec -104 if ev <= 351 +b inc 368 if qby != 2342 +mk dec -987 if ev == 357 +eb dec -509 if alf <= 236 +obo dec -380 if v != -3127 +npo dec -790 if b < 455 +xoc inc 405 if k < 1287 +obo dec -56 if b < 465 +swy dec 194 if k != 1281 +red inc -562 if tm <= -326 +swy dec 75 if e <= -86 +obo dec -4 if ev == 350 +e inc 533 if xoc < 931 +cox inc -584 if d < 1146 +swy inc 506 if eb >= -1354 +obo dec 458 if k >= 1279 +swy inc 447 if e > 447 +qby dec 847 if cox <= 1377 +xoc inc 225 if xoc < 931 +obo dec 301 if b > 462 +cag inc -740 if e > 438 +tm dec -83 if e <= 447 +tm dec -151 if cag <= -866 +npo inc 26 if s < -784 +v inc 12 if cox != 1368 +eb inc -399 if ev > 340 +eb dec 780 if d == 1143 +e dec 87 if tm == -91 +k dec -13 if anb <= 1139 +v dec 829 if swy >= 567 +k dec -229 if ev < 351 +qby inc 972 if xoc == 1143 +s inc 609 if s >= -789 +mk dec -931 if ev > 346 +mqk inc -605 if cag > -880 +v inc 302 if anb <= 1139 +mk dec 342 if v > -3647 +xoc inc -905 if k <= 1523 +qby inc -412 if qby == 1493 +v dec -548 if d > 1142 +xoc inc 311 if obo >= -771 +npo inc -955 if xoc < 551 +swy inc -885 if mk > 821 +ty dec 91 if ty >= 100 +s dec -840 if npo <= -1492 +qby inc 158 if ev > 342 +ev inc 227 if cag >= -878 +alf dec 612 if tm <= -92 +ev inc 395 if he <= -572 +s inc 570 if swy > -311 +s inc 283 if alf > -382 +xoc inc 297 if tm >= -94 +v dec 100 if d != 1153 +cag inc 928 if ty <= 19 +tm inc 829 if obo > -765 +alf inc -94 if ty >= 8 +ty inc -224 if cox <= 1367 +obo dec -352 if d > 1137 +mqk inc 223 if ev <= 580 +cag inc 55 if eb >= -2541 +red dec 969 if alf > -474 +alf inc -564 if e != 447 +qby inc -97 if obo < -400 +red dec -530 if cag > 107 +ev inc -579 if he > -574 +tm dec -788 if eb <= -2528 +alf inc -217 if v > -3191 +tm inc 635 if cox >= 1362 +tm inc -217 if mqk < -189 +cag dec -547 if v != -3191 +red dec -241 if alf > -1045 +red inc -492 if b <= 473 +he inc 46 if b > 454 +xoc inc 86 if ty > 8 +d dec -755 if qby < 1140 +mk inc -347 if obo <= -405 +v dec 870 if npo >= -1497 +npo inc 216 if red != -1287 +anb inc -574 if obo > -414 +ev inc -364 if eb == -2534 +anb dec -825 if npo < -1277 +k dec 587 if cox < 1372 +anb inc -888 if obo > -401 +swy dec -435 if npo != -1283 +e dec 551 if e != 444 +swy dec 772 if alf == -1036 +tm dec -339 if e == 444 +swy dec 259 if mk == 470 +xoc inc -224 if ev >= -359 +ty inc 265 if red >= -1279 +obo dec 449 if mqk > -202 +d inc 891 if e >= 438 +cag dec 606 if b >= 461 +mk inc -894 if v != -4064 +cag dec -128 if d != 2034 +eb dec 723 if eb <= -2528 +swy inc -12 if s < 1525 +s inc -569 if d == 2032 +npo inc 326 if alf >= -1038 +cox dec -213 if anb == 1379 +obo dec -222 if d > 2026 +ev dec 809 if anb == 1393 +s inc -637 if alf != -1037 +s dec -892 if xoc == 942 +eb inc -248 if cag != -491 +b dec 499 if qby != 1142 +b dec 543 if d <= 2033 +mk inc 345 if mk < -411 +ty dec -284 if npo != -960 +d dec -327 if eb < -3498 +cag inc -743 if mqk > -196 +cag dec 708 if ev > -374 +eb inc 935 if swy == 113 +d dec -908 if swy == 113 +npo inc -753 if swy == 113 +cag dec -227 if alf > -1045 +red dec -658 if v <= -4061 +cox inc -66 if anb < 1397 +cag dec -209 if b > 463 +cox inc -245 if alf != -1037 +alf dec -212 if s >= 2402 +d inc 590 if d >= 3273 +xoc inc -325 if xoc > 935 +red inc 935 if he >= -519 +tm dec 332 if ev >= -366 +cag inc 583 if xoc <= 615 +e inc -892 if e >= 439 +npo inc -628 if obo > -629 +red inc -819 if tm <= 1958 +qby dec -960 if ev > -372 +red dec -781 if tm < 1959 +cox inc -831 if xoc < 621 +b inc -830 if ty >= 559 +anb inc 654 if cag < -1507 +cag dec 995 if red >= -659 +npo inc 356 if b < -361 +tm dec 286 if qby > 2093 +mk dec 369 if ty <= 569 +mk dec -971 if qby != 2112 +swy inc 137 if xoc > 617 +alf dec -743 if npo > -1355 +alf inc 39 if ty < 569 +tm dec -42 if s <= 2413 +anb inc -685 if alf != -48 +ty dec 660 if anb <= 1360 +npo dec 313 if ev < -359 +cag inc -611 if obo >= -646 +tm inc 728 if v <= -4067 +swy inc -4 if cag != -3124 +npo inc 359 if xoc >= 613 +obo inc 694 if b != -358 +obo dec 439 if e >= -452 +npo dec -160 if xoc <= 626 +red inc -659 if e <= -439 +b inc -445 if obo == -382 +red dec 543 if k > 931 +s dec 274 if qby != 2093 +cag dec -338 if k <= 934 +alf dec -211 if alf == -45 +v dec -451 if tm == 1706 +obo dec -465 if v > -3606 +k inc 415 if qby > 2100 +anb dec 220 if swy == 109 +alf inc -3 if cox < 477 +d dec 164 if s > 2131 +qby dec -974 if alf >= -40 +cag dec 891 if anb < 1146 +d dec -337 if qby > 2100 +cag dec -628 if d != 3442 +k dec -648 if alf == -46 +red dec -329 if k == 1996 +e inc -891 if alf <= -38 +cox inc -626 if ty >= -99 +mqk inc -349 if mqk >= -204 +alf inc 388 if qby > 2092 +mk inc -430 if d > 3443 +eb dec 338 if alf < 352 +mk inc -215 if cox == -147 +e dec 171 if b >= -819 +alf dec -205 if d != 3433 +d inc -490 if qby == 2102 +e inc 612 if he > -528 +anb inc -811 if mqk > -543 +he inc 685 if cox >= -154 +red dec -748 if anb <= 1129 +ty dec -872 if ty >= -97 +b inc -920 if eb == -2908 +s inc -701 if mqk >= -548 +tm inc 136 if alf > 545 +he dec -100 if e != -898 +qby inc 552 if anb >= 1132 +xoc inc 700 if xoc == 617 +xoc dec 827 if obo != -385 +anb inc 738 if d != 2956 +eb inc 476 if mqk == -544 +s dec -100 if ev == -366 +obo inc -602 if e == -898 +tm inc -80 if xoc == 490 +eb inc 160 if eb == -2432 +he inc 229 if he == 159 +tm inc 453 if b > -1739 +obo dec 786 if qby < 2655 +swy inc -120 if qby != 2651 +ev dec -382 if obo != -1770 +qby dec 41 if eb < -2265 +cox inc -991 if obo > -1765 +cag inc -713 if obo > -1773 +he inc -958 if red <= -1522 +ty inc -426 if mqk != -551 +k inc 902 if ty == 349 +npo dec -550 if eb < -2274 +swy inc -30 if d < 2954 +anb dec 990 if npo < -1139 +ty dec 301 if red >= -1529 +ev inc -687 if ty > 347 +ty dec 261 if he <= -802 +b dec -313 if ev < -1043 +alf dec 231 if k != 2889 +npo inc 956 if qby >= 2618 +cag inc -39 if npo <= -1135 +he dec 117 if qby > 2605 +v inc -574 if cag > -4421 +npo inc -179 if mk <= 538 +v inc -737 if he < -910 +npo inc 722 if swy < -37 +mk inc 200 if alf != 313 +npo dec -604 if mqk == -544 +ev dec -794 if ev > -1048 +eb inc -384 if npo == 3 +he dec -10 if qby != 2614 +e dec -317 if e > -906 +e inc -662 if d >= 2946 +s inc 941 if npo != 0 +xoc inc 765 if e <= -1235 +b inc 434 if ty > 354 +e inc 513 if anb > 880 +cox inc 146 if mk > 734 +mk inc -31 if alf == 316 +qby inc 887 if mqk == -547 +obo dec -87 if mqk != -536 +he inc -230 if tm != 2217 +e dec -469 if alf < 326 +alf inc 608 if d != 2950 +mqk dec -78 if v < -4355 +b inc -865 if ty < 356 +s dec 57 if npo < 7 +npo dec -100 if cag > -4428 +cag inc -217 if red > -1522 +b dec 338 if k == 2898 +npo inc -324 if k <= 2906 +mk dec -763 if obo >= -1687 +e inc 760 if d > 2945 +e dec 984 if v == -4350 +obo inc 651 if he <= -1126 +red dec -380 if d >= 2950 +b inc 11 if k > 2888 +v dec -406 if red <= -1142 +anb dec -900 if e <= 501 +ty inc -2 if mk != 1471 +tm dec -655 if qby > 2619 +k inc 142 if mqk < -540 +ev inc -346 if xoc != 1265 +xoc dec -284 if k >= 3032 +d inc -908 if k == 3040 +e inc 36 if swy == -41 +xoc dec 372 if alf != 930 +s dec -327 if xoc != 1159 +e inc 56 if ty < 343 +v inc -445 if npo == -221 +xoc dec 265 if s >= 2746 +k dec 604 if swy >= -42 +alf inc 918 if eb > -2662 +mk inc -227 if cox != -150 +cox dec -693 if qby <= 2614 +d inc 88 if k != 2434 +tm dec -278 if k > 2428 +v dec 384 if red <= -1145 +npo inc 854 if ev != -1390 +he inc 69 if xoc >= 893 +d inc 587 if eb <= -2650 +b dec 873 if anb == 1785 +tm dec -557 if mk != 1230 +k dec -335 if k <= 2437 +d inc -215 if cag != -4424 +obo dec -754 if red == -1140 +d inc 369 if v != -4766 +tm dec -12 if red >= -1155 +anb dec -836 if xoc <= 892 +s inc -170 if cag <= -4422 +k dec -717 if mk != 1234 +npo inc -790 if k >= 2764 +obo dec -87 if red <= -1157 +v dec -894 if ev >= -1401 +cag inc -440 if swy >= -49 +e inc 31 if d > 3091 +v dec -581 if he != -1057 +anb dec 760 if k <= 2775 +swy dec 513 if v != -3295 +s inc 840 if mk > 1242 +npo dec -359 if mqk > -549 +red dec -958 if ev >= -1403 +ty dec -246 if qby != 2617 +k inc -28 if cox <= 544 +npo inc -881 if cox > 545 +ty dec -733 if ev < -1391 +e dec 750 if cag <= -4863 +cox dec -44 if alf < 1843 +mk inc 751 if ev < -1390 +he inc -968 if mk > 1980 +d dec -431 if npo != 202 +v inc 406 if xoc != 902 +tm inc 635 if mk <= 1991 +npo dec 401 if anb <= 1022 +v dec 940 if obo >= -1034 +npo dec 572 if qby < 2619 +swy inc 934 if anb != 1021 +eb inc 499 if swy == 893 +mqk inc 17 if s < 2568 +mqk dec -704 if alf != 1836 +ty inc -301 if mqk != 162 +npo dec 29 if cox >= 579 +alf inc -677 if npo > -409 +mk dec -399 if npo == -399 +cox dec 639 if e == -213 +ev inc 602 if qby < 2617 +ev dec -238 if eb != -2149 +mqk inc 26 if k > 2734 +anb dec -153 if v > -4238 +b inc -331 if cox != 584 +mk dec 411 if s > 2574 +xoc dec -631 if xoc == 902 +mqk dec 795 if d != 3083 +swy dec -911 if anb > 1184 +anb dec 368 if e >= -217 +b dec 463 if qby != 2612 +qby dec -127 if v <= -4226 +alf inc -848 if npo != -409 +obo dec -499 if s >= 2571 +swy dec 165 if v < -4225 +alf dec 71 if mqk == -609 +b dec -717 if d != 3090 +cag inc 721 if tm <= 3694 +xoc inc 304 if ty > 1033 +swy inc 728 if d < 3096 +tm inc -690 if eb >= -2163 +qby inc 979 if ty == 1025 +s dec -175 if swy >= 1449 +s dec 639 if he > -2038 +mqk dec 615 if red <= -189 +he dec 481 if cox >= 578 +anb inc -329 if xoc <= 1532 +anb inc 350 if red != -192 +obo inc 720 if s != 2108 +ev dec -316 if s > 2111 +mqk inc 322 if alf == 246 +d dec -723 if cox > 580 +b inc -301 if alf >= 254 +cox dec 847 if xoc > 1528 +v dec -298 if cox <= -254 +eb dec -842 if cag != -4874 +he inc 483 if eb != -1324 +b inc -160 if npo >= -400 +tm dec 885 if obo == 187 +anb inc -505 if tm <= 2129 +red dec 387 if e < -212 +e dec 761 if npo <= -397 +he dec 303 if tm == 2128 +s dec 308 if b < -3718 +mqk dec -207 if he > -2041 +ev inc -655 if xoc != 1533 +s inc -601 if d > 3809 +ev dec 666 if cox < -256 +ty inc 384 if he != -2041 +v inc -560 if ty >= 1403 +ty inc 446 if obo != 194 +obo inc -570 if cag != -4868 +obo inc 21 if k == 2743 +cox dec -183 if mk != 1973 +s inc -780 if eb <= -1306 +b inc -173 if tm != 2131 +b inc 489 if v > -4488 +swy inc 337 if s < 431 +ty inc 36 if alf >= 240 +xoc inc -941 if s < 427 +xoc dec -533 if xoc <= 600 +eb dec 269 if swy == 1795 +eb inc -718 if swy < 1796 +xoc dec 319 if eb <= -2039 +ev dec 855 if npo < -390 +v inc 208 if d >= 3805 +d inc -846 if tm == 2122 +red inc -636 if mk <= 1977 +d dec 695 if ev == -1764 +e dec -864 if cox == -268 +v dec -913 if d == 2270 +alf inc -364 if cox > -270 +he dec -211 if cag != -4862 +b dec 624 if b != -3887 +v dec -953 if b < -4514 +ty dec 631 if b < -4518 +e dec -496 if obo <= -367 +d dec -911 if cag >= -4872 +mk inc -549 if xoc >= 1117 +alf dec -586 if e <= -971 +cag dec -919 if k == 2743 +qby inc -803 if cag <= -3943 +k dec 18 if k > 2734 +ty dec 537 if qby > 2909 +swy dec 973 if tm >= 2122 +d dec -502 if qby == 2916 +ty inc 50 if he >= -1816 +cag dec 344 if e > -985 +cag inc -967 if anb < 311 +ev inc 193 if npo != -393 +ev inc -934 if cag >= -5265 +ev dec 416 if d == 3683 +ty inc -963 if d < 3688 +s dec -904 if s <= 424 +b dec 52 if b >= -4524 +alf inc -427 if obo <= -363 +red dec -686 if cox > -268 +b dec 551 if mqk == -695 +xoc dec -670 if v > -2428 +anb inc 310 if ty >= 401 +ev dec 768 if red < -519 +tm dec -391 if k == 2725 +b inc -624 if xoc < 1797 +s inc -962 if ty != 391 +xoc inc -482 if mqk > -703 +alf inc -110 if v < -2418 +mqk inc -812 if s < 1329 +cag dec -584 if red >= -529 +qby dec -503 if npo >= -405 +npo dec -592 if npo <= -396 +anb inc -611 if anb < 313 +anb inc -537 if red < -538 +eb inc 781 if cag < -4664 +xoc dec -241 if he >= -1821 +k inc -974 if swy >= 816 +eb dec -649 if ev > -3690 +he dec 258 if b > -5750 +cag inc -618 if tm >= 2513 +b inc -132 if npo == 190 +cox inc -187 if mk > 1427 +tm dec 244 if npo <= 198 +cag inc -21 if alf != 350 +npo inc -332 if ev >= -3696 +obo inc -144 if ev < -3698 +npo inc 652 if k >= 1744 +anb inc 682 if b > -5739 +mk dec -585 if eb > -607 +ty dec -395 if red <= -521 +d dec -118 if cox < -260 +obo dec 97 if d < 3797 +mk inc 561 if s != 1327 +mqk inc 341 if xoc < 1558 +eb dec 136 if xoc >= 1546 +eb dec -144 if b == -5744 +b dec 416 if xoc < 1560 +e inc -688 if red <= -520 +cag inc -846 if cox <= -264 +e inc 858 if mk >= 2009 +d inc 120 if mqk < -1165 +eb inc 275 if anb < -304 +d dec 426 if e <= -801 +obo inc -175 if alf == 358 +b inc 411 if v > -2433 +anb dec -285 if qby != 3420 +e inc -899 if cox != -257 +ty inc 764 if xoc >= 1552 +eb inc 157 if tm == 2273 +alf dec 416 if xoc <= 1562 +mqk inc -251 if d <= 3498 +s inc -405 if e != -1698 +he dec 280 if v < -2419 +mqk dec 783 if e == -1705 +s dec -530 if mk > 2013 +cox dec 601 if qby >= 3421 +alf dec -214 if cox <= -253 +cox inc -280 if v < -2418 +obo inc -617 if k > 1749 +tm dec 400 if v >= -2427 +obo inc -810 if swy == 820 +cag inc 245 if red < -524 +k inc 939 if obo < -1973 +xoc inc -867 if d != 3499 +ev inc 930 if ev >= -3690 +npo inc 490 if npo == 513 +obo dec -127 if tm <= 1874 +v inc -937 if cox < -539 +cox inc 806 if eb < -315 +tm inc 868 if b == -5749 +d inc 370 if cox != 264 +mk dec 735 if d >= 3488 +v dec 651 if tm >= 2736 +d dec 751 if d == 3495 +eb inc 73 if eb == -320 +anb inc 946 if mqk >= -2202 +k inc -879 if tm != 2731 +cag dec 329 if cag >= -5075 +v dec 110 if npo <= 998 +cox inc -324 if v != -4012 +s dec -43 if xoc <= 688 +xoc inc 154 if ty <= 1552 +npo dec 126 if e == -1705 +mqk inc 631 if qby < 3428 +obo dec 875 if k < 882 +eb inc -159 if d >= 2737 +ty inc 158 if mk < 1266 +cox inc -726 if cox != -65 +red inc 699 if he <= -2352 +anb dec 348 if he == -2353 +mqk dec -25 if cox <= -792 +he inc -72 if ty == 1550 +tm dec -396 if obo >= -2712 +mqk inc -730 if alf >= 153 +ty inc 950 if b <= -5741 +qby inc 711 if b <= -5747 +he inc 990 if ty == 2500 +eb inc 691 if cag <= -5394 +v dec 315 if v >= -4001 +cag inc 831 if k == 872 +cag dec -285 if s != 974 +tm inc 500 if k >= 865 +ty inc -407 if ev >= -2761 +ev dec -960 if v >= -4019 +anb dec 698 if cox < -781 +swy dec 265 if cox <= -783 +e dec -962 if anb < 237 +he dec -152 if swy != 555 +npo dec -416 if alf < 159 +red dec 450 if qby > 4127 +cag inc 253 if s <= 964 +cox dec -969 if tm <= 3634 +e dec 442 if qby < 4135 +mk dec 890 if qby > 4128 +cag dec -934 if ty != 2085 +cox dec 905 if k != 876 +red inc 595 if k <= 862 +b inc 105 if npo > 1286 +obo dec 502 if mk == 394 +ty dec 533 if obo != -2718 +ev inc -6 if mk < 386 +npo inc -144 if d < 2746 +e inc -232 if ev >= -1813 +alf inc -78 if ty > 1553 +eb inc -637 if ev != -1796 +tm dec 132 if e != -1425 +swy inc 667 if alf == 78 +red dec -166 if mk <= 387 +swy dec -173 if v >= -4014 +qby inc 788 if qby > 4121 +ty dec 172 if qby <= 4919 +red dec 447 if tm == 3501 +obo dec 366 if alf == 78 +he dec -842 if mqk != -2305 +xoc inc -10 if d >= 2736 +ev inc 517 if cox != -726 +mqk dec 865 if npo != 1151 +obo inc 29 if red <= -552 +qby inc -337 if b == -5644 +cag dec -970 if mqk != -3172 +e dec 343 if xoc != 827 +d dec -890 if v == -4017 +v dec 793 if anb > 220 +cox dec -442 if he == -599 +eb dec -759 if anb > 225 +obo dec 45 if k == 872 +obo dec -534 if e > -1764 +cag inc 344 if npo >= 1149 +eb inc -458 if e <= -1764 +obo dec 55 if mqk > -3167 +s dec -487 if v > -4813 +xoc dec -51 if d >= 2744 +ty dec 568 if ty >= 1387 +cag inc -698 if cox <= -276 +cag dec 162 if mqk > -3170 +k inc 563 if qby > 4579 +alf inc -784 if tm >= 3498 +mqk dec 520 if obo > -2624 +npo inc -780 if qby > 4576 +alf dec 152 if he >= -602 +v inc -614 if eb <= 415 +he dec 659 if k < 1445 +ev inc -49 if d >= 2740 +e dec 302 if v >= -5424 +ty dec -877 if alf < -867 +qby inc 368 if swy != 1394 +anb inc 732 if swy < 1396 +mk inc 61 if ev > -1344 +b inc -66 if cox == -280 +npo inc 11 if swy <= 1397 +swy inc 292 if alf >= -852 +red inc -606 if mqk == -3684 +e dec -460 if cox > -272 +s dec -469 if cag > -2898 +tm dec -717 if obo > -2618 +xoc dec -796 if cag != -2893 +ev inc -145 if tm < 4222 +e dec 892 if red == -1167 +red inc -403 if red == -1164 +tm dec 519 if npo != 389 +cag dec -107 if cag <= -2900 +ev inc -385 if d > 2743 +qby inc -444 if alf <= -857 +ev inc -201 if swy != 1398 +npo dec -851 if s >= 1922 +s inc 975 if s <= 1923 +alf inc -906 if v != -5413 +obo dec 870 if ty >= 815 +obo inc -26 if anb == 959 +e dec -65 if e <= -2951 +ty dec -835 if anb == 958 +anb dec -49 if swy > 1394 +mk inc -253 if mqk <= -3680 +e dec -862 if b != -5708 +qby dec -293 if s == 2896 +s inc -845 if cox != -271 +xoc inc 509 if npo >= 387 +obo dec -758 if mqk >= -3675 +v inc 370 if b < -5703 +cox dec -986 if red >= -1172 +b inc -682 if d >= 2739 +k dec 568 if v >= -5055 +mk inc 451 if alf == -1764 +ty inc -56 if mk <= 645 +eb dec 173 if s <= 2051 +s inc 836 if ty != 764 +alf dec 345 if cag <= -2887 +cox dec 206 if k != 867 +eb inc 44 if s > 2053 +d dec -294 if cag <= -2891 +he dec 904 if swy >= 1386 +ty dec 499 if swy < 1399 +e dec 891 if tm > 3698 +b dec -732 if v < -5057 +qby inc 722 if red != -1168 +e inc -609 if npo != 379 +b inc 741 if e < -3525 +b inc -833 if tm >= 3701 +red inc 282 if ev > -2072 +obo dec 441 if b < -5647 +xoc dec -612 if anb != 1005 +s dec 67 if mk > 647 +cox dec -341 if red > -879 +v inc 316 if qby <= 5519 +mk inc -251 if ty == 271 +ty dec 587 if b <= -5658 +anb dec 204 if d < 3044 +he dec -358 if qby < 5521 +s dec -594 if obo < -3946 +xoc dec -802 if d > 3029 +alf dec -536 if alf <= -2105 +tm dec 209 if cox <= 711 +s inc -142 if anb > 809 +s inc -571 if mqk >= -3676 +npo inc 607 if alf == -1563 +swy inc -438 if swy >= 1388 +b inc 325 if xoc != 3092 +k dec 338 if s <= 2650 +cag dec -748 if he == -1804 +npo inc -186 if npo <= 382 +cag inc -920 if tm != 3483 +swy dec 288 if mk >= 652 +ty dec 362 if mqk != -3685 +alf inc 291 if anb == 811 +mqk inc 203 if red == -890 +swy inc 712 if eb >= 231 +ty dec 327 if v > -5052 +npo inc -453 if mqk == -3684 +cox inc 747 if mqk < -3685 +qby dec 844 if cox >= 698 +cag inc 785 if swy != 1659 +red dec -820 if xoc > 3086 +anb inc -2 if cox < 709 +cox inc 91 if cag <= -2280 +cox inc 988 if mk <= 643 +ev inc 895 if ty != -433 +red dec -411 if npo == -259 +npo dec 831 if npo > -261 +k dec 799 if mk == 643 +qby inc 373 if v != -5054 +e inc 949 if swy > 1668 +qby inc 278 if d > 3037 +eb inc -839 if obo != -3946 +mk dec 758 if anb <= 800 +npo inc -662 if s != 2642 +e inc -807 if e < -2575 +cag inc 755 if swy <= 1669 +e dec -532 if swy > 1662 +alf dec -4 if eb <= -596 +swy dec -552 if ev <= -1170 +d dec -857 if cox != 1700 +anb dec -31 if anb > 798 +eb dec -482 if npo < -1759 +ty inc 820 if d == 3897 +xoc inc -846 if v >= -5054 +alf dec 312 if d != 3895 +obo dec -531 if npo >= -1752 +b dec 722 if ev > -1177 +d inc 912 if ev == -1173 +e inc -497 if cag <= -1514 +b dec 551 if eb <= -599 +mqk dec -130 if alf >= -1576 +obo dec 426 if s >= 2649 +mqk inc 672 if cox >= 1698 +red inc -879 if alf <= -1568 +he dec -503 if cox != 1687 +tm dec 117 if ev != -1173 +he dec 237 if mk < 645 +qby inc 189 if eb != -601 +k inc 820 if k < -279 +mqk inc -594 if obo <= -3421 +k dec 375 if v > -5041 +cag dec 298 if d != 4807 +b inc 985 if ev != -1163 +tm inc -697 if cox >= 1687 +v dec -940 if swy >= 2212 +k inc -260 if d >= 4806 +ty dec 73 if k < -526 +swy inc -530 if s <= 2654 +mqk dec 636 if swy >= 1686 +d inc 32 if qby <= 5516 +v inc -809 if v <= -4103 +e dec 380 if k != -540 +ev inc -651 if b == -5939 +qby inc 352 if alf >= -1576 +v inc -256 if obo > -3416 +mqk dec 28 if red <= -527 +alf inc 395 if npo > -1762 +ev dec 317 if d < 4837 +cag inc 74 if red >= -528 +mk dec -575 if anb == 833 +cag dec 744 if obo == -3421 +mk dec -455 if qby == 5868 +k inc 350 if cag <= -2266 +d inc 730 if npo <= -1749 +ty dec 180 if mk != 1673 +xoc inc 364 if cox == 1694 +anb inc 937 if cox == 1694 +s dec 459 if tm >= 2785 +cox inc -594 if cag != -2271 +cox dec 874 if cox > 1102 +xoc dec 289 if alf > -1178 +e inc -178 if obo < -3413 +red dec -965 if obo >= -3416 +npo dec -47 if ty == -497 +alf inc -264 if npo < -1697 +v inc -518 if alf == -1429 +red dec -264 if swy == 1697 +k inc 540 if obo > -3415 +ev dec 208 if tm != 2799 +npo dec -967 if tm >= 2788 +xoc inc 106 if swy == 1691 +eb dec -276 if s >= 2185 +b inc -151 if mqk == -4812 +he dec 120 if he <= -1534 +e inc -236 if cox >= 1091 +tm dec -25 if alf == -1436 +xoc inc 618 if s == 2186 +b dec 269 if qby != 5876 +cag inc -911 if cag != -2267 +mqk inc -68 if he == -1658 +alf inc -267 if ev > -2035 +cag dec -228 if npo < -733 +k inc -527 if cag > -2043 +qby inc 341 if red == -533 +xoc dec 539 if mqk >= -4879 +d dec 884 if ev == -2032 +mk dec -837 if ty == -497 +tm inc -879 if k == -707 +k dec -32 if tm > 1907 +e dec 771 if ev > -2026 +qby inc -732 if s <= 2192 +ev dec 629 if swy < 1700 +obo dec -799 if e > -4138 +e dec -954 if k >= -683 +ev inc 177 if eb == -329 +d inc -151 if cag < -2032 +b dec 967 if alf > -1711 +e dec 836 if b == -7326 +he dec -543 if eb > -337 +d inc 478 if alf == -1705 +mqk dec 251 if xoc < 3047 +v inc 235 if anb == 1770 +xoc inc 94 if mqk > -5134 +swy dec -106 if s > 2176 +cox inc 591 if xoc != 3138 +eb dec -594 if eb == -329 +he inc -389 if qby == 5469 +swy dec 680 if ty != -487 +alf inc 713 if ev < -2483 +mqk dec 533 if b != -7332 +mk dec -282 if tm <= 1920 +d dec -878 if tm >= 1913 +ev inc -821 if b > -7327 +s dec -229 if qby > 5475 +tm dec -671 if swy > 1115 +mk dec 703 if eb > 262 +cag inc 96 if v == -4682 +alf inc -771 if mqk != -5672 +eb inc 140 if b > -7322 +swy inc -493 if eb != 270 +he inc 826 if eb == 273 +v inc 82 if s <= 2408 +anb inc -898 if tm <= 2585 +mk dec 735 if red <= -531 +obo inc -704 if eb >= 262 +cag dec -145 if tm == 2585 +k dec -952 if swy > 620 +mqk inc 818 if eb == 265 +he inc 229 if b > -7325 +v dec -717 if npo != -746 +npo inc -329 if d == 5890 +xoc inc 820 if v > -3957 +ev inc -751 if alf != -1768 +he inc -105 if npo == -1066 +tm inc -86 if swy <= 627 +npo inc 83 if qby < 5486 +npo inc 829 if mk != 1347 +swy dec -554 if tm >= 2504 +anb inc 836 if red <= -524 +npo dec -878 if b > -7328 +cag inc -276 if alf != -1763 +red inc 215 if qby >= 5469 +eb inc -509 if d >= 5884 +xoc dec -707 if he >= -1119 +s dec 42 if cag > -1801 +s dec 63 if obo >= -4125 +mk dec 358 if cag <= -1793 +eb inc 95 if cag <= -1793 +eb dec -637 if b >= -7323 +ty inc -617 if xoc != 3854 +mqk dec 510 if ty < -1112 +he inc -285 if tm != 2499 +ev inc -547 if qby < 5487 +mk dec -915 if npo < 730 +eb inc -953 if e > -4036 +obo dec 412 if he >= -1108 +npo inc -925 if d < 5888 +ev inc 930 if cag < -1792 +v inc 658 if npo <= 726 +ev inc 892 if mk <= 1918 +ev inc 756 if b == -7326 +qby inc -574 if s > 2307 +npo inc -638 if red >= -326 +tm dec 248 if mk < 1913 +cox inc 865 if s < 2317 +cox dec -950 if d <= 5893 +mk dec -632 if he <= -1108 +v inc 176 if d <= 5893 +mk inc -805 if ty != -1120 +ev dec 973 if npo < 89 +swy dec -601 if s < 2308 +e dec -146 if cox < 3509 +mqk inc 321 if cag > -1803 +xoc inc -534 if alf >= -1764 +d dec 747 if ev >= -3004 +npo inc -826 if obo != -4120 +xoc inc -343 if ev < -2994 +b dec 415 if anb <= 1708 +b dec 323 if xoc > 2976 +b inc 697 if ty <= -1118 diff --git a/2017/inputs/day_9.txt b/2017/inputs/day_9.txt new file mode 100644 index 0000000..eb4d605 --- /dev/null +++ b/2017/inputs/day_9.txt @@ -0,0 +1 @@ +{{{{{<!!!>!>'!!!>!!!!!!!>u!!!!!>},<'>,<!>e{o!!!>!'>}},{{{<!!u<>},<!!!!!>!'!!a}!!!>,<!>!!!!!i!!,e!>,<i{o!>},<!!>}},{{},{{<e},!>},<!{"!!'e'>},<auu<oa{!!!>!i>},{<a!!,'<!>>,{<a}!!!>a>}}},{{{{<!!'!>,u!!,}!!!>!!"'!!!>,i!!e>},<!!}<!>},<!!!!'i!!!>ii{!>},<!>,<!!"!>">}},{<!!ua<!>},<{!!!>!>},<!<e''!!!>ou!!!!!>!"!!!!!!!>!!>,{<!>},<u!!a!>,<!><"ui!!,u'!>,<!!!>!!o!!a>}},{{<"!!<<!>,<!>},<o{<e!!!>!!"<!>},<o>}}}}},{{{{{{{{{<!>!>,<,>},{<!>,<,}!>},<!a"!!!>},<,!!!>,<!!!>!!!>'>}},{{<{}!!e!!!!>},{<e!!!><!!!!'!>,<ea!!u'i,e{!i>,<""a!!!>},<o>}},{<!>,<!u<!!!!au!!!>!eia'!>},<!>,<!<>,{}}},{<,oo>,{{<!>},<ei,{<oeo,!!'a!!!>!>},<''>,{<{e!!!>!!!>}>}},{{}}}},{{<i!!'}u!>>}}},{{{{<!>,<oe}'u<!>,<e"e!a>}},{{}},{{{{<!!!!!>o!!!>!!"o!!!>>}},{<'>}},{<e>}}},{{<!>,<!!o<<!>i>}},{}}},{{{<a!>!>},<!!!!{!a,!!!>{!"i!}oie>},{<e!!!!!>,<,">}}},{{{},{{{{{{<{uu{'!!>},{<>,<!aeoae>}},{{{<!!!>,<!<<!>,<!!!!i<!!!ue!>,<ui}o!!e>}},<!>,<!!e"i!!'{"'>}},{}}},<'i!!ueiu,!>},<!>},<!>!!<"}!!!>,<!>},<>}}}},{{{{<,!>},<',!!',ei!>!>},<!}!!!>i!!}ee,>,{{}}},{{{<'a'!!e!"i!>o!!!>!!!>!!!>{!!!>,<,>},<ei!<!!<!{e{ua>},{<!!!>,<{!!!!!>!!,!!!>>,{<,!!>}},{<!>,<!>!>}e!>},<!!!>}{'!!!>o>}},{}},{{{<!!!uu!!!!!!!i<>,{<,}"!>!!!>}o!>,<>}}},{{{{{<!>,<u!oo!>,<!!}a<>},{<!!!'!>o>}},<o!>,<!<!>,<<ii>}},{},{{<<!>,<>},{<i!>"o!!aue,>,<i!>},<!>},<<!!e!!i>}}},{<!>},<!!{"!>,<!o!}!>},<o,o'!>!!a,e!!!!!>,<>,{<u"!!!>!>},<!!>}}}},{{{{{<!>},<!!!>!>,<o>,{<!!!!!>!!!!o!>},<!>u!>,<!!!>i!o!>!e<!!!>''!>!>i>,{{<,u'!>i"o!!"}>}}}}},{<!!!!'}{>}},{<!>"}{!>},<!>},<i<!!!>,<i<>,<"!>,<"u>},{{}}},{{{{{<!!'e!!!!!>>,<!!a{o!>u,,o}"{>},{<!>,<<,!!!>,!>o!,!>,<!!!!'>}}},{{{<uo!!!>!>},<!>,<e>,{}},{<!!'a",!}!!!>!!i>,{{},{<!!!!!e!!"e!>},<'{<!!!>},<o!!u!!!!!>{{!>,<>}}}},{{<,<!,!!">},{{{}},<!"o<o!!}!>},<!>,<{!!!!!>"o!!<,e!o!!!!!>},<!>},<>},{<i!>},<>}},{{<'!>!>!>,<>},<"io!!!''!!!>!!o!!o!!!>,<<i<i!!!>!>,<>}},{}},{{{<'i!!!'}!!!>!>!!u!!!u!>oo!>},<>},{<!!,i!>,<!!a!>!>,<u!>},<ae>}}}},{{<{i!!iu!,!!'!!!!{"!!!>>,{<!a'>}},{{<",!>a{a!!{i!>,<!>},<}u!>,<!>!!oii>},{{<'u!!"!!!>}a!!e!aa!>,<i!!!>!!!>,<<>},<!>},<"}"!!!>i!>,<>}},{{<!!u!a',"{>,{<'}"!!!o!>},<!!'!!<a,,"!!,uo>}},{<e!>,<e{!!,}<!!<!!eu<<uui>,{<{!>,<"!>,<,!!,!!,e!!{{a,!!!!!>},<<a>}}}},{{<}!>'!!{,<!}!!"!!e!!u"e,!!i>,<!!!>e!>,<!>},<!!!!!>>},{{{{{{<!!""!!!a!u>}}},{}},{{<eio>}}}}}}},{{{{},<!!'<!!!>},<u!>!!!!i}e!!},!>,<{!>,<!!!>>},{<'!'''!>o"},!!e{!"o!>,<u!!!>{!>u>,{}}},{{{<!>,<u"o"{!!!>!>!!o!!}iou>}},{{{},<io<!!'"!>,<!>,<!!!>a<>},{<!>,<a!>},<<o!!!>{i!!o>,<!ao!>,<!!"!!u{!!{!!!!<!!e<!!a}{u}{!!!!a>}}}}},{{{{<!!!><!>},<!>},<a!"!>,<,!!!!!!,!!!>,<a!!e>}},{{<!!o<!u!!ee{>},{<!!!><<o<"e>,{<!>},<{!,!!u!!!!!!!!!>},<!!!>,!!!>i!!{<!>,<!!>}}},{<!!!!!>o!>'<!{<{!!{!!>,{<"!>!>!>},<!!!><'{o{e!>,<,a}!!i>}}},{{},{},{<!!!!a!>},<!!!}!>,<!!!>e!!!!!!!!e}!!!!a!!'}">}},{{{{<!>},<i!!!>!>},<uu<o{io>},<e<!!!>!!!>i}!>,<<>},{},{{{},{<i"!!a!!i!!!!}!>},<!}{<!'o!uu,>}},{<u!!eo!!{eo!>,<'!!!>{!!>}}},{{},{<!!!>'""!o!>,<>,<i<!>!!!>ue!!!>i{'!u<<!!!>,!,>},{{<e>}}},{{{},<!>,<!!!>,i}},!>,<!!e!!>},{{<!!!!}e!!i!'"!iu!>},<!!{!!u>},<u!>>}}},{{<"}<!!!>},<ou!o}!>,<>,<!!!>'!!!'u!!!!!u!!}>},{{<!!!>!>},<}>},<!!<!"!,'u!!!>!!,a','>},{{<u>,{}}}}},{{{{{{}}},{{{{{<aa,,!>!>,<>}},{{<oo>}}},{<}!>,<,{i!!}!>},<!!!>>},{{{{<a!!!>,<!'<!>"!!!>u<i!>},<a}'}!<ie>,{<!>,<o!!!!!>i"a}!!}a!>i<!>},<!!!>!!a!!!>>}}},{{},{}},{{{{<!>,<"u<!!}ui!!e<!a}u!>},<!!",>}},{}},{{{<">,<!>},<!!!>!!u>},{<!>,<{>,{{<"ie!}!>a!e>,{}}}},{<}i''ua{!>},<>}},{{},{<!>},<!>!>},<o},!!!>!>},<<!>,<u{,!>},<,a,>}}}}},{{},{{<,"u{>},{}}}}},{{<,!!i!!i!!!!"a"!!!>!>,<>,<e,a,}!>,<<!!!<>}},{<!!!!!>!!ou>,<<!>},<}u!!!!!>{!!,!>,<i!>,<>}},{{{<a!>{!>},<!>">},<a!o!!!>!i"!><!>,<"i}!>!>!>a>}}},{{{{<a>,<!!!>!>e!!>},{<!!a!!>},{{{},{<i>}},{}}},{{{<!>},<>,<"'<<!,">}},{{<e!!""!e!>"iaa,a>}}},{{{}},{{}},{}}},{{{},{<!i>}},{{}},{{{{<<!>},<{a!!!>!!!>}ua!!!!!>a>},{<ea!!{i!!,!!a"}!!}{u'!>ae!!!>'>}},{<>}},{{<!>},<!',!<<,!>,<>,<{,"ea>}},{<u,o!!u>,{{},<}!!{!>},<i!!!"<!!}!>},<ieo!>!>,<{!>},<!{!<!>,<!!u>}}}},{{<!!"',u"}u!>,<>}},{{{<u!>,<!a!!o>},{<!>},<!>{!>'!!u!!!!'!>,<!!<!>,<!!!>},<},!!!!'>}},{},{{{{<<ou!!e!>},<i>},{<}{!>},<!>,<!>"''!!!>a<!!!>o!!!>ue>,<!<,'!>,<<!>,<o}!!!>,<!!!>}o!!ea}>}},{{<!>eo,a!>!>},<<a!'!>},<"!u!{i!!!!e!>,<,!!u>},<{}>}}}}}},{{{}}}},{{{<,au'!>},<oo!>,<!i},}"!>},<>,<i!!!!!>},<{!!!>!>!!o'"!>!,"}!">}},{{<!!'ia!!o{e}'!>!>!!!>",!!!!!!!!!!!<!>},<>,{<!!""}!'<"{!!!>>}},{{{}}},{{<!!!>i!!!>!>},<!!!!!>!>e!!!>,<!>},<!!}eei<i!!!!uu>},{}}},{{<>},{{<!i<!!a}u!!!>"!>,<'!!!>,!>},<<!>},<ui!>,<>},<<!>o<"!!!!e}}!!!!}!!!>!!">},{{<,<!!!>e>,<!e!i!>i{<!}!>},<}!!!>>},{{<"e""!}u"!!!>!>,<!!">},{<!!!>!>},<oo!!!>'!!e!!!>!>,<!!!>,<{iau!>},<eo'>,<!>{u{e!!"}u!!<!'o>}},{}}}},{{{{{<!o!>},<>,{<o{ee!>}"!!!>},<!!o!>!!!!!>!!!>},<!>!>,<oa>}}}},{{{{<{i!!uu',",u>},<a!>,<"!!,i,!!a!>!!o!>,<!a!!e,!>},<>},<,o<!!!>!!!>o!>o>},{},{<'u!>,<!!!!>,{<i!!!>!>},<!!i!!""{!!e}u!>},<i}!!'e!!!>{'>}}}},{{{<e!>},<,!>>,{<""a'oa<!a}!!!>!>,<>,{<!>},<>}}},{<ou!!!>,!!!>,<>}},{{{<e{!!{!!!>!!!>a!!!o!!!>!!'e!>,<}o{!>},<!!">,<,'>},<!!!,!}i!>oa!>,<i"<!!<',!o>},{<i!>},<>}},{}},{{{{<,{!!o!>i>}},{<oe!>,<,"o!>},<a>}},{<i'!',!>,'>,<o<a!>},<<!>},<!!!>"!!!!o<a>},{}}}},{{{{{<a!iaou>},<!!!!!!!>ua,!>o"}e!>},<e,>},{{<,!!!>!!!><o!>,<!>,<<!>},<!>{a{i!>},<u>}}},{{{<>,{<!>,<u'i!o!>},<>}},{{}}},{{{<>}},{{<'!>,<!>},<",!!o}}{!>},<oo!!!>>},{{{{<'}!!!>,{a>},{}},{<!!!>o'!u"!!!>,<!!!!!>!a!!!>>}},{{<'!!!>,<'"}>}},{}},{{<!!!>e,o<uao>,{<<">}},{},{{{},{{<{e!!!>{!!!>},<"!"!!!>!>},<>},{<o'!!!>{>}}},{{{<'!>},<,!!e>}}}}}},{{<aioa!>{{!>,<",!>,<!!o!!a>,{{<}!>,<<!!!!!>!>},<,'{,}!>{uiu,!!i">},<!!!>u>}},{{<!!!>!!!!!!!!!>ae}'"!ua<i,!!!>,<oe!!!>>},<}!>},<!!!>}}ui!}u>},{{},{}}}},{{},{<!!!>,<!!!>o!!!!o'!!!!!>{u!>,<!>},<'i,!!}<!!,>}}},{{{<u'a,!!!>i>}},{{{{{<!!!>}e,""!{!!!!""!>!!!>ea>}}},<!!!!",'!!!>,<!!!>!!!>!<!!!>,<}>},{{<'!!!'!>ee!>,<>,<!!}!'>},<""!!!>},<i!o<!>,<eie!!",!>e>}},{<!!!>},<i!!!>'"!!!>!!<!>},<a!!,!>},<>}}},{{{{{<!>},<u!>,<!>,<!!{'!>},<!>},<<<>}},{<a!!!!!!!>!>},<<!o<"u<a'">,<!!!>,<'<!>},<!!!e!>},<!!!>oe,!!<>}},{{{{<u''!a",<io!>,<!>'a!!!>,<!!{"!!u'>},{<'!>},<!>,<!!a!>!>},<a!a!!,>}}},{{<!>},<oa>,{{{<!>},<!!o,>}},<i}u!>},<a!>},<<<!}!!!>!"e<!!!>!>},<}i>}}},{<{>,{<!>},<!>,<}{a!>,<u!>},<e!o>,{<!{e!!!>!>,<e!,!!o',>}}}},{{<'!<<i,a!!!!!o>},{{<<"}'!>},<<ao>},{<!!o!<!!!>>}},{{{},{{<!aoa{!>,<i!!e!{!!!!e!'ao!!!>,<}!>!!!>e!!{>}}},{},{{<i!>,<!>},<!>},<!>iaeo>},{{{{<!!u}!!!!,!!!!"uo!>,<<'o!>,<!>},<'i!!!>},<">},{<ii>}},<,>},{{<!>},<!>},<>,{<u>}},{<!>},<!!!!!!'"!!!>!>},<{!!!>i!>ao!>i>}},{{}}},{<i!!'!!!>e<{o"!!!!!>'>,{}}}}},{{{{<ou!{"!>},<!>},<>},<!!!>iauiui!>},<>},{<!!}e}e'!>,<!!!>>}}}}},{{{},{<!!!>}eoei!!!>u!>},<ie!!!>">,{{{<e!o!>},<}!>},<!>!!ie!,!!!i!oi!!!>},<!!!>>}}}}},{{<}!!e!iieu!!'>},{{<!>,<!!!!!>>,<}o!!!>>}},{{<!>!!u!!!>>}}},{{<!>},<<!>},<},,!!!<'u,!!o!!i<u{">,{<!>,<}!>,<!>!>,<!!!!!>!!!>!!!!}u"}i>}},{{{{<{e!>,<e{'i!oiu>},{{{{<>},{<"e!>},<ie">}}},<uu'<{<!>,<,}!!!>!!!!!>,<!!'o!!u'{>}}},{},{{},{<!!,'}!>!!!!!!!>,o!<!!!>'!>,<>,<o}!>!>,<{!!e!!,!>!!e!>,<!>i!!<{>},{}}}},{{{}},{{{<!!eu!!{o!!!>!>!!!!!!"!!!!>}},{},{<!!!>!!!!!>'oaii!!!>e!>,<!!!!!!!!!>!!!>o!>},<!!!>a>,<!!!>'!!i}u'{e!'!>e!>'!}!!>}},{{<!!!>!>},<o!!!}!!!>}'!!!>>,{}}}}}},{{{{{},{{<}u!!!!i<e!!a,i>}}}},{{<!!<}{<<u}u!>{ioe!!>,<''!!'e}!>>},{<u}eai>}},{{<'!,o>},{{}}},{{}}},{{{{{},<!!<u!!{o!}!!!>"<!>,<!,>},{{{},{}},{{<i,!>!>,<"<!}'!>,<!{>},{<!!!>}a!>ae!!!>o!!u!!"e!!<'o{>,<u<!{!>},<{>}},{{{<{}eeoua!!!>},<!!o"'{{>}},{<u!!!>!!}!!!!!>!u>},{{{<!!!>!>,<'a!>}!>!!<,u"!>!,{e<>},{{<!!eu!e!aa"'o'"!>u"'<!>>,<!>},<!!>}}},{<,eo'}o!'{>,<ia,!>i!!a"!!!>!>},<}!a!!!>!!!!!>,<ee>}}}}},{{{<!>u!!o'!!}!!!!!>!!!>>},<e<!>},<u!!>},{{<,!>!i!!<!>,<!>},<!>!>,<!!!!ao{<ae,,!>},<>,<<"e!>!>!>,<u!!!!u!!!!!>,o!>,<o!!!!!>},<a>},{{}}},{}}},{{{{},{},{<"!"<"!,!!!!!>eau!>,<,>}}}},{{{{{{}},<o<i!!!>,!>,<a,!!!>!!!>!!!>!<<<>},{<a{ue>,{<a!>!>"i!o,!!{!>},<a!!!!>}},{<"ia,i>,<'!>ioi!>},<>}},{{{<>},<!!<,e'au!!!!'>},{},{{<i',e!<!>,<'u,>}}}},{{{<o'i'!!<{!>,<a!!o!!e!!,!u!!o>},<,!>,<<o!>,i!>>},{{{<},}!!",!>!!!><>}}},{{},{{{<!!!'',u'a!<a!!!>},<ou!!!>!!a>},{{},{}}},<}a!!!,'a',!>u>},{{<!u!!!>ia{!!o!!!>},<!>,<!!<!>},<!!!>"!>,<!!!!}i>},{<!>,<!>!!,!>,!>>,{<}i>}},{{},{{<''!!e<!>},<a!!!>e{!e>}}}}}},{{{{{<"u!>!!!!>,<a!!o!>},<}!>},<!>i!}'>}}},{{{{{{<,,!eaa!u!!oie!<,!!!>!>},<!>,<!>{u{!!i>},{<"<i,!a"!!eo>,{}}},{{},{<!!!!e!>},<'!!!!,!!!>!!",>}}},{}}}},{{{<i{}'>},{<{!!!>,,!!e!>,<!!!!!>a"!u!!!!e!>,<{!!!!!',<>}},{{<!!u!!,!<}}<,<>},{<"!,!>},<{a!>},<}}>}},{{<<!!!>}!!"!>,<}!!i""'!!!>{>,<!!!>},<!>,<{!u!!'<io!o{>},{{{{{}},{<!!}!>!'u>,{<'u!!!>,<!eo<!>,<!!!>{>}}},{{<a{o!!!>"!!!>'}e!>,<}>},<!>,<}{!!!>!!!!"!"!>!!!!,}<<>}}}}}}},{{{},{{{{<,!!!>,!>},<!>,<!>},<>}}},{<!>},<>}},{}},{},{},{{},{{<u!>},<ieo!{!!<'"!u<!!!>!!!>,>,{}},{},{{{<o>},<,>},{<<i!a{{{<<!!!>!!!!o>,{<!!{<a!!!>u!>},<,!!!!oo!!!>!!u"!>}!>,<>}},{}}},{}}}},{{{{{{<<!!!!!>i!>!oi}oeuu>},{{<,{!>!>!!!>!!!>},<!!!>!!!>!!!>!!,'!},o!}>}}},{{<!>a!!iu{!e>},{{{<{!!{!!o!,!!!>>},{<!>},<!>},<"oi!"!!!>!>},<>}},{<!>},<i!!i}>},{<ue'!!a"uu{!>,<!>},<uuaa{!"!!!>>,<ee>}},{{},{{{},{}},{{<a!!!>!!!!!!{!"{e}e!!,!>ae!!'},!>},<!!!!o!>},<>}}}}},{{<!!!>},<>},{<u!!!>!><,!!!>},<!!!!<>}}},{{<{<e!<,!>},<'i!"{!>},<!>,<!>,<ie}>,<{,!{},!>e!!!!!!!>!","ua!}!!<'!!u'>},{{{{<!!!>!>,<!!e'u"'<"!"',,i!!i}<a>},<aoie}!>},<'}o,<>},{<'!a!!{"u!e!><i!!'!!"o!>,<>}},{<!>!!i!{{o!!!!!>,<!{!!i<e!!{">,<e!o'u,!!!!uu!!!}!>},<,!!}>},{{{{<!!!>,i""{!!!>},<!a,>,{}},{{<!}!!!>,o!>}"!!o,!!>},{<!>},<"u}!>"!ae!{!<>}},{{<oao}}a"i{!!!>,<o{>},{<o!!!><a!!!>u>}}},{{},{}}},{<!>!!!><",{}!>ee!>,<!'!!!eu!!!><!!>}}}}},{{{<e}!>},<!!!>!!o!!!!{{!!!>!>"a!>!!!!!!>},<!>!!!!!>!!!>e>},{{<!!a!!!>}!!{ie,!!<!>!!<e!}eo!>},<,}>,<!!!!}!>i!>,<,!!"!>},<}!>o!"oo'o!>},<>},{{<{{!!!>ua'ei'!!<>},{}}}}},{{{{{{}}}}},{{},{{<!>iu'!>>}},{{<!!ouo,!>},<i!ii!>},<o!!!>,<>},{}}},{{{{{<}<!!!>},<"}<oa!!''!>'!oe!>,<!>,<iu>},<{o<<a>}},{<!,<!!!>},<>,<>}},{{}},{{{{<!ua""<o{<!!!>!>},<'i<"!",>}},{<a{!!!>,!!i!",!>,<!!i{>},{{<a!>"{aia<!!!>!!!>,<u'!!u,>}}},{{<i!>},<!{!!!!!>},<,,!!}'!!!!ae"!>,<"i!>,<o}>,{{{<,!{o<!>},<!!a}}i>,<!!'!>!oi!!!>!u<'"e!!,{i>}},{<uu{!e!!!>}}a!,o!!a!{a>}}},{}},{{{<{!>,<!!}i!>,<}{!!!>!!!>,<i"!>,<oi"}'>},{<o!>,<!!!!!!!>,!>},<!<!"!!<!>!!!>e,>,{<!>},<!!<o!!'<}i!>!>,<u!>,<!>},<!>,<!>,<!a!>,>,{}}}},{{},<aee}}u!!<}!>i!>,<>},{{{{{},{<!!!>!!"'{!!,'}>}},{{},{<!!!<>}}},{{<'a"!>e!>},<',>},<io,,a!!!>!>,<i!e!!,!>,<,,eu!!!>!!u!>,<>},{{{{<,!}<!!!!{!>,<{!!!><ia}e!>},<{}e>}},{<!!!!!!{a,>}},{{{{<i,e!!{!!!>"o{uu!>},<>},<!>},<!>!!!'!!i!>!"a!!}!>,<"'!'!>>},<{!!!>,<!!!>a!!!!{""!>"!!"'u!!!!!><!!!>>}}}},{{<!!}!>,<!>},<'!!"!"<!!,<!!!!!>!>>},<!>{}!>!>},<}}"ao!!!!ua!!{!><">},{{<!!!!!!ou<!!'u!>!>},<!>,<{!>!><>}}}}}}},{{{{<'}u!>,<{!!,}!>},<'!"'{!>},<!>>}}},{{{<{a!!!>u!>!>!!!>ae}!>!>},<{!!ua>},{{}}},{{<,!!!>},<!>!!!>>},{<}!!!uu{,!!!!i!>},<{!!!>},<ie<!a"e>}},{{<ou{!>!!!>a!!}!!>},{{{{}},{<!,u'!!!>,<u!>,<ui,}u!!!'!!!>{a!>a>,<,,"!!a!!>}},{<!!!>!>},<o!!{!>oa!!{!!!>a}a!!{>},{{<!>},<a>,{<!!o!>,<!"}!!'!!a",!a!>,<i!!!>o!!e!>,>}},{<,!>},<"{}}}"<!>},<!!e!!!e!!!>,<!!!>,<<!>},<>,{}},{<!!iao!>},<}!!!ea{!!!>,<'uui>,<i"!!!>!>,<u!a"ea!!!>,<>}}}}}},{{{{{{{}},{<,!>},<a{!>},<eoei<<o>,<>}},{},{<i!!!>!>!!!>ii!>!'<!!!>"},},!!>}},{{{{{<,,!i,,ae{!!!,!>!!!>},<!,!!o!!}!!!>}>,{{<}!!!>!!!>'!!!>"!{{!>!!!>>}}},{<!!a!>,<{oia}ueue!!!>eai>}},{{<!>},<!}!!!>!!!!!!ei!io}!!!>!!ue>},{<}!!!>!>i}!!!>,<!>u!>,<!a!!!>!>,<"o!>,<!>,<a!>},<!>,<>}}},{{<!>eo,o!'!!!>'<!!e>}}},{{{{{<!e!>!>,<!!<!!!>!!!!!>}>}},<!>!>'}}!!!>!>!>,<!>!u>},{<!o!!!{>,<!>},<'''!>},<">}},{<<,iiu!'iu!><>,{<,!!{e!!!>o!ai'!!'!!!!{a!>>}},{{<a},!>},<!!!!!><,i{!>"}>},<'<ui<!!a!!''!aa!!!!!>!!!>u'ao!!<!'>}},{{{<!u<e!>,<'{"a'!>,<!>},<!!!>>,<!i'>},{}},{{<'!,e!>},<!!>},{},{{{<<euu!>,<!!,!e!>,<!!!!},!>},<a}!!!!!>a{>},{{<!<ee!>},<o<{i!!}!!!>'!u!>,<>},<}!!!!eai!!!>,<e!>!>!!!!!>>}},{<!!!!!u!!!>!!a{oo,i>}}},{{{}},{},{<!!!>,<{'a!!'a!!!>{<!<e!>},<!!'!io>}}},{{{<i!!,!!e!!aee!!!!!>},,!!'>},{{},<e"o!!u{!>,<{!>},<,>}},{<",!>,<'!>,<!!!>!!u!!{'{!>},<}!!{!oa!!!!e'!>>,{<!>,<!>},<!>,<uie!!,!>,<{!>!!!!!!!>>}},{{<>},{{<!>,<!!a!}!!o'!>!>,<>}}}}},{{{{{{<>}},<u{!>},<e'!>,<,!>},<>},{{},<>},{{<',!,ioe!>u>,{<!>}o!>},<}>}},{{<{a'e,i!>"u>},{{{<!>},<!!!>,i,eo!!!!!>},<eo!>>},{}}}}}}},{},{{},{{{{{},{<a!!a!!!>,<e{>}}},{{<>},{{{<!>},<>}},<<ea,},!!!>!>!!"{,uei!>},<}>}},{<!!',eu'"a}!>o'}!<!>!a!!o!eu>}},{<>,<!!!>>},{<!,!!o!!!>,!,u!!}'!{ee!!i!>,<!!!>!!!>!>>}}}},{{<uo!!">},{<!!u!a!!">,<!!!>!!,}o{>},{<iuoa{!}u',{!!,}'!>,<>,<!!!>!!a!>!!!>u!>,<!>},<!>,<!'!>,<!!!!!><!!!>},<!!<>}}},{{{<!!!>},<!e>,{}},{}},{}},{{{{<,e!!,!>,<!>},<,!!!>a!,!!'ie!>,<o!>},<>},{{<e!!'i!>},<!!!>,!e!!!>!!!e"}uu!>},<u!i'>},{{},{{{<o!><!!o<"!'!!!>,<!>},<!!!>!!!>e'u!!!>o!!u!>},<}>},{}}}},{{{<!i<!i>,<{'!!i!>,<>},{{}}},{}}},{{<>,<,<e!!!>,>},<{>}},{<!!!>,<e!>,<<!!,!<!!,ou>,<!!!>o'!!!!!!!>"a!!eeu!o,!>},<o<>},{{<!>},<!!,!!,o,>},{}}},{{<!>,<'o>},{{<aeei{o}i>},{}}}},{{{{},<>},{<{!>},<!!!!!!<!!'e!>'e>,{{}}}},{{{{{{<!>,<e!{!>,<i!u!!!!<!>,<!!!>>},{}},{<oo">}},{{},<',i!!"<>}},{{{<!>,<!!,u,u'}i<!>},<!!!>!!!>{!>},<!i>},{}},{{<!oe!>}'iou!{u!!!!!!}!<!>u<a>,{<{!!'oa}!!!>!!!!,ii!>,<oa!!i!!a>}},{{{<{a}o}!,!!!!!>,<'}{>}},{{{<!>!!i"eeeuo!>},<<aa!{!!!>!!!!!>!>,<>},<{!!'>},<!>,<<<a!!,{'!!<>}},{{<'!>ao!{u!!!>"!i{}i'u,},>,{<!!!>!!iuee!!!>'!!!>,<>}},<!!!>!>},<!o!>,<e!!!!"!>,'e'a<!!}>}},{{{<eou!>o}i!>!!u}>}}}}},{{{<!!}u!>o!>,<u!!u"u!!a",a!>,<>,{}},<}}"!>,<o!>,<!}'!>>}},{{<>,<!>!>'!!!>!>!>,<!!!ai!,>},{<}}!!!><!>!!!>!!!>},<!><!>!!{!{!!}o!}>,<}i!!"!!!>,<,,!!!!!>>},{{<!!!>'!!}!!!>!!!!!>>}}}}},{{{}},{{{{<!'i!>,<ae>}},<!aa!,">}}}},{{{<!!a,"!iu!!e!"'{>},{{{{<uu'i<!!!><!>!>}uieo!!!>!>,<"o>},<}!>}!>,<>}},{{<!!!>'<!>,<!>},<ua{!>},<i!i!}!!i>},{}}},{{<!!u}!!!><a{!u!>"o!!!>!!!>",e">,<{}i!!!>!!!,!!u!!,"}!>,<!>,<i>},{<!!'o!!!!{>},{{{{<!!!>a!}e!!e"!>},<!><!o>},{{<"a""!>},<!!!!,!>}!>},<}'!!u!!!!!>!>},<>}}},{{},<}>},{{<ioo!!u}!>},<<{"!!!!ui!!{>},<"!iui!!!>!!!>'"!!!!,!!o''!>},<}u!!!>{>}},{{},{<a!!oi>}}}}},{{<"o!>},<,!}!!!>"<ao'>,{<e!>,<eu>}},{{},{{<<}!!o!{!i<!!!>,<!!!>,!>},<o"!!!>!>},<!>,<>},{<!!"u!>,<!!oa"'!!!!>}},{<!>},<o!><<<,>,{{{<!!!>{!!'u!>,<!!{o}"!>},<!>,<>}},<!!!>!!>}}},{}},{{<!!!>},<,!>ei'!e!!!>},<u,u!!!>'aui>,{}}},{{{{{<!>,<"oia!!e!!!>!!{!!u!>,<>,<!!>},{<!'!i!!!>o!o{>}},{<',!!{",<>,{<o!!<}'ii!!!>!>},<''!!!>>}},{{}}},{{{},{<!!!>{{!!!!!!a,e!'<!>,<!!!>!!!>u"i!,i!e>},{{<{<}>},{<!>,<!>{>}}},{{},{<i!!},u}'!<>,<!><o!>>},{}},{{{<a!!!!!>{!>,<o>,{<!!!>!>},<!!'a!>ii!!!>u!!oa}}"">}},{<!ai!ua!!<!!!>,<<e}a!>>}},{<u!ea"ue,!!<!<,>,{{<!}"a!>>}}},{<oa!!!>,<{!>},<e!,!>!!!!<u!!i}!>>,{{<,{{"!>},<<!>,<!>u!>!>},<}'{!!!ao>},{<!!!>},<>}}}}}},{{{{<{o'oi!>,<o!>},<ue!>},<ao>},{<!>,<a!!ia!,i}{!>,<!!!>>}}},{{{<!!o!>,<o!>},<!>},<,,{!>},<i!>u!>,<i}>,<e!!!>,<!>,<'!><a<e!>,<!>},<e,",!{!!!>,<i>},{{<!>,<"!>},<!!}!!!!!!!>!!aa!!o'!>},<!>},<>,{{}}}}},{{{<<ea!!!!}!o!!,!!,!!!>!>i!>,<"''!>!!}>,{<,,!!!!!>},<"!>!!!!!>,<o>}}}},{{<!>},<u{!a<"!!>,{<}!>,<}'e!!"<!>},<>}},{{<a!!'}{!>},<{!!!>!!!>,oa"!>,<}''!!!>,<!!}u>}},{<!!'!!'a!>},<!!!>!!!!>,{<!!!>},<{a"u}!>},<!!,!>,<i>}}},{}},{{{}},{{<"!>},<!!,uii"a!>},<a!>>},<aa!>>},{{<!!'>},{<!>!>,<e!!a''!>"!!!>o>}}},{{{<!>},<u'<'!>,<o'"!>,<,"a!>,<!!a!{!>,<!!>},{{{}}}},{{},{{{{<}}}!!!!!>,<!iiue!!"!!>},{}},{<!>!!!!!><!!!!!>!a!!!>!!,<!>},<<aa'!!<u!>,<!">},{{},<>}},{{<e!!!>a<{!!!!'}!>oi!!<!!!!!}>,{{{{<!>}}a"!!,"!!!>!>,<e!!i!!!!!>a'!!e>,{<>,{<{ue!!!!!>!!}!!!>o>,{<!>,<!>}!>!<!>!>},<!!!!!oa!!!>!>},<!>},<}<'>}}}}},<!!"u>},{}}},{<>},{<ii}!!!>}i>}},{{},{<}!>,<!>},<<">,<!>{>},{{{<'>},<>}}},{{{<!{ia!>,<a!!<'!!!",<!}e>}},{},{{{<'u}>}},{<}i!>},<}<!!o}'a,}!>!}!>i<>}}}},{{{{<>},{<!i!!"!!!>},<"!!e}u!!!>},<'!!>,{{<o!>,<!!a"!!<!>,<'!>,<,}!!!!!{!>a!!!!ea>}}},{{<!>,<<!>},<{ao}>},<>}},{{{{<uo!>,<>},{<}<!!>}},{<,u!>},<!>,<}i>}},{{<a!>,<,!!!>o!>!>},<"{oa>,{{<o!>,<!!!>,!{!>},<"}i!!!o!!!>>}}},{<,o!!!i!a{<!>,<!!!!"!,!!!>>}}}},{{<e!!ai!e,!>>,<i{,e}e!>!>},<!!'!!a<>}},{{{<i!>},<!>,<!>},<!!o>,{<"!!!>!>,<>}}},{{},{<!>},<<i>,<<!>,<oi!!!!!>!a!>,<!'"!>,<!>},<"!!!>{>}}},{{<eao!>},<a{a<e"!>!>},<>},{{{{<!!!>!'!!!!!>e!>},<!!",>},<!o<!!!!!>,!!'!!!!,i!>o!!!!!>{!'"u}>}},{{},{{{{<i!<!!,!!!!!>!!!>>}},<!!!>!{}a!!!!!>},<i",>},{},{<>,<{!><o!o!!!!!!!>i"uo}o!!"!!{>}}}}}}},{{{{<,e!!}">},<!>},<e!>,<u!!!>,<'!>},<<!!u!>!!>},{{},{}}},{{<<!>,<{<!!!u>},{{<!,!,>},{<<!>},<}a!!{!><>,{<e!>!>},<,oai!>!>},<!{>}}},{{<"u!>,<<!>},<i!>,<i'<!>!!e!{!>},<!!i,>}}},{{<}!!<!>},<i!!!!<<!!!>,<!>,<!!i!!!!!>!>},<!!!>},<ao,!>},<>},{<i!!!>"a'!!}!!{"{>,{{<!!u!!"!>,<'>},{<!!""u!e!!!!u!>,<io!>,<"u!>,<{'">}}}}},{{<!>!!<oe!>!!!>'!!,<!!<!!!>}!>>,{{{}},<!!!>,!!!>!>"ii>}},{{{<'u!!!>!!!>,<>},<u>}}}}},{{{{<i!!!{,!"!!o"i}!>,<!!!{{>}},{{{}},{{{<ao!>,<!}'!}"e,o!!!!>},<!>!>,<a{e,a<!!!>",'oe<>},{<ae,!!oue}>,{<','a!!!>a!!<!iu!a!!u!!!i>,{<}!!,!>},<!!!>,a>}}},{{<}>}}},{{{},{<i!!o!!!>"!>!!ou!}i!!oo!>},<'!!!!!>>}}}},{<!>!!u}!>,!>i!!!!!!,"!!,!>},<u!!,'>,{<}a'ua!>o!>},<!}!>},<!!u>}}},{<!>,<!!!!!>},<!!e!o!>'!!"!>,<>,{<eu,e!uiioe{>}}},{{{}}}}}},{{{<>,{}},{<o!>},<'>}},{},{{{{{{}},{{<!>},<!!,'ii!>,<!!o,!>},<"!!i'"u}a!"e>}}},<!,<i>},{<!"!e"''!>,<iau!>!>},<i'>,{{}}},{{},<!!!>,<ea!>,<!a!'}<!!!>,<!!!>!>},<!!!!!!!,>}},{{{{<e<e>},{<>}},<!'au!>!!!!!>!>,<'!!',ea'!!o!}}!!}>},{{<!!!>a{!!,!!""oue{o"!>!!}>,{}},{}}},{{{},<a"!><a!!u!>!>,<u{!>!!">},{{{<!!o!>},<ao,o!!!>,<,i<i>}}}}}}}},{{{{{<"e}uu!!,!!i!!!>!>},<"!>>,{<}<!>!!!>!>,<i!!{!!",a<!>},<!>},<!o!>o>}}},{{{{<iuu>,{{{<,>},<!>},<e!>,<}!!!><o!>},<o!!!!}>},<{a>}}},{{<!!!>ie}i<!"a{!!i>}}},{<!>u!e,e!!!!!>e"e!!!!!>ue{{!!"!>},<u>},{{{<,!a!>!,!>},<,,e!!,!,<ui>},{{<auei!!!>{!!!!!!>},<!!!>'}!>,<a!!!>e'"o!>!>"{ou}}!!}>}}}},{{{<!>,<!!'u!u!>!!!>!>,<!!,!!!>i!>,<o"!>,<}>,{}},{<>}},{{{<a'o<!>,<i!'ia!!e!!!"!!!>u'!o>},{<}!!e!!!>>}}},{{<e!>!>},<>}}},{{{},{{{{<!!!!a!!!!!!<u>}}},<'!'<!au!!!>a!<'{e,,!!{a'!!}>}},{<,>,<!!!>!!>}}},{{{{},{<>},{{<!!!>},<"!}{!!'{!!!}e"o!>,<}!>!}ou,!!<>}}},{{<<}!>},<>},{{<!>!>,<!!!>o,""eu!!'u!!i>}}},{{<!>},<iu!>,<e>,<!>},<',o,,{a!!!!o<!<e!>,<>},{{<'!>,<o!>,<!>,<>},{}}}},{{{{}},{{<}!!e!!}!}}!!!>{{>}}},{{},{{{{{{<!>"iu!<!!,i!!!>>},{<u'>,{}}},{},{}},{{<o<}u'e!>,<!!u{a!>,<eaoa>}},{<!>},<{i!>},<o>,{<,!eo!!}>}}},{{{{<!!!!!!!!!><!!!>>},<!!!!!!e{}!>,<!>,<{!,e{}aoo!!{{}>},{<!>},<u!>},<!!!<'>}},{{{},{}}}},{<!!ue!>},<!!""}{!!!>,,{a!{{!!"!!!>,<e>,{<ou,,"}!!!>!!!>!!!""!>,<o,e!}"!!!>a>}}}},{<e!!!>!>},<!>},<u>,<u'!>},<"a"!!!>,!!!>>}},{{{},<eoeo'<eiaa!!,,>},{<!!,!!!>{!!!'!>},<{!>,<ou!}!!!>,'!!!!o>},{{<o!!aa!>!!!>!>,<"!'!!!>!!!!{"a!!!>io<!>},<!>},<>}}},{{{<o"!!!>!!!>},<e!>},<o!!a>,{<ieoie!>,<u!!a!>">}},{{<!!!>!!a!>,<a!!!,!>},<!>},<u!>u">}},{{{}},{<io!!i!>,<!!e{aa!>},<>,{{<!>},<!!!!ui!!,!>!!!!{o}}!>},<>},{{}}}}}},{{{<"!!!>!>,<!>},<,a!'}!!}!>},<u"}!!,>}}}}},{{{<a'"<>},{{<!>u!>{!!i>},{{<!>{!!!>},<o!o!!"!>},<e}i!!!>o>},{<aei<e{",!!>}}},{{{<!!!!!>!o!!!>!>!>},<u{<!!}i!!!>,<!!!!<"'ei>}},{<{e!>"!>,!a!!!>,<!!!{!!!>!!!>{<!>,<!!!>,<>}}}},{{{{{<}u>},<i"!<u}!!u,!>,<>},{<!!!>!>},<}{!!"oeu>}},{{<,"'u}!>!<{'o>,<{!!}!>,!!!!!!,!>,,"!>,<!eu!>},<!>},<<>},{<!>},<'!!!>!>!>},<}<!"!><oua!<'ou>}},{{{<>},<>}}},{{{{<ai!>,<}''!>},<o!"i!>>},{<{!>u!eu{!!!>}'e>}},{<,{!e!!}!!!>,<,i>}},{<!!"i{{>},{}}},{{{{<ui>},{}},{{{}},{{<<!>,<{!!a<!>},<!!!!"a!!!>},<e'!!>}}},{{<u!>},<i!">},{{<e,!}!aea!"!'!!ea>,{<a!>},<!>,<o!>},<!>,<!>>}},{}}}},{},{{{{},{<"!!e!!"!>},<"}!><{}"!>>,{{<!o!!!>uo!!,o!!!!io!!!>'>}}},{{{<a>}},{<e,,!>,,!!i<!}!!{!!!!!>!>e!>},<u>}}},{}},{{<!!!!!!">},{{{},{<uo<!>""!>,<!!}"!>!!!>i!>>}}},{{{<!>,<e!>o!!!>o!>{,'u}!!u',!>},<}>}},{}}}},{{{}},{{{<<!>!!!>,<!>>},<{i"<uu{a!!a!}!>},<!>},<!!!}}>},{{<oaa!>!>},<'>},<!!!!aie>},{<e!>,<u,}<!>},<{iu}'!>}!!<'i>,<oea!>},<!><!u}<a"!>{>}},{<>,{}}}}},{{{},{{{<e}e<u>},{{<a"!>!!!>!!!>'>,<{,'!>!!}!>u<}!!,!!i!!!ei}>},<a!"!!!>>}}}},{{<'!!!>!!o!>,<}',!>o<o!>},<!!i>,{<!>,!>},<>}},{<{!!,!!{<ouu>}},{{{{{<o!{!}!i!io!>!!!!e!!!>!>!>!!!>!>'>}},{}},{<!!!>>,<!!!u!>""!,!>},<i}!>},<ou!>!>{,!>'o>},{}},{{<ua>,{<!!!!!>a,!}!>,<!>iaa>}},{<>}},{{{}}}}},{{{{{<!!!>!>},<{e>},{<!>,<!>,,<i}!!!!!uu,!!!>>,{<!i">}}},{{<!,!u>},{{<!>},<"uoa<au!!!>a!!,}>}}},{<!!aa}!>,<!>,<au!!!<o>}},{{{<!>!,!!u!!!>'<!>,<,!>!!>},{<!!e!>uo!!'ai{a!>>,{}},{{<o{!><i{!!!>!!!>!>>}}},{{{{<!>!>},<a!}!a!!!!>}},<!>},<,<'o!!!!,uiu>},{<!!e}{"u!!!i!>},<!!a!>!!!!!}'>},{}}},{{<!!'!!!>,!""!!!>,'!>},<{o!!}!o<>,{<"o!!"!!uu>}},{},{{}}},{{},{{{<!>},<{!!!!,!>,<>,{}},{{<oie!!i!eo!!!>{!>},<<<>}},{{}}},{{<!>},<!>!!ae!>,<>},<!>,<!{!>!>!>},<'i!!>},{<i}!!!a!>u!<'>}},{{{<!!aee!!!>!>,<!!!>u"}!!"!!i!>!e,i!!{,>},<e'oa{!!e!!}'a!!!!!>>},{{}}},{{{<a!!e!>{,i"i!!!>}!!"!!!!!>},<uu!>},<">}},{<!>!>},<!"a}ee"!>,<{!>,<,oe!!!>!>!>,<!>>}}}},{{{{{<!>,<{!!o>,{<{,!>e}!e!>,<>}},{},{<!>},<<!>,!>u,!>,<!!!!!>ae'>,{<!>},<'!!o!>},<!!e}o}!!!>!>,<e!>},<'i{!!o>}}},{{{<"!!{}"!!,,!>},<i<"e}>,{<>,{}}}},{{<u'<!!'!>},<!!!>>}},{{<!>e!!!>},<!>,<!!!>i!>!>},<ae,{u!iu!!!>u}!!e>},{<!!!>a'i!!au!{u!>},<!>},<o},u>}}}}},{{{{{<!!!ee"!>},<!>,<a!>},<a!>a!>},<}<!!"!!!>>}},{{<!!!u{<",ao!!u,!>,<'!!!>},<!!!>u>},{<ueea}!!!>{!!!!!!!!!!!>!>},<!!>,{<!!!!!>o'>}}}}},{{{<'!!!>!>o{""<i"}!"!>},<!!e!!!>!>},<{>},{<!>!!u!>},<!!,'u!>},<!>"u!>"!}!>{a!!!>},<}>},{{<!>},<e!!!>}"i{>,{}},{{{<a'!>,<,o!!!>,<e'}>}},{<!!u'!!<,e{e!><i!!!>a<>}},{<o{!!'!!!>!!{}!!<{}!>!>,<!!}>}}},{{{}}},{<!>o"u!{u"{!>,<'!!!!!>!>!>},<>,<!,a<{!!!>!!,i!>!>},<e<<!>a>}},{{<,>,{}},{{<!!o"!!!>>},{{{}},<ea">}}}},{{},{{<!!eeou{!!!>ai!>,u!!!>,<!}'!>,<!<{>,{<!!!'!<e>}}},{},{{{{<u!!!>u!>,<!!'!>,<}a!!,!>},<i!>,<>},{}},{<i{!>,<!!!>{!>!>},<!>},<{a>,<oi!i{!>o!>!!{e!>,<}!!!>>}},{},{{{<>}},{{{<!!!'!,!>e!>o<e!>i!>,<>}},{}}}}},{{{{{{{{},<!>},<o!>,<!!'eo!!!>},<!!i!"!>,<!!!>!>ie"ae>},{<!!{au!{!!!i!}a!!!>,<o!u}}!!!>!!!>,<!!!>>}},<ui!!!"","'}!>,<,!!!>e!!,!>,<!>},<!!e!!!>,<!!!!i>},{{<!>!!}"e}{!oe!'}!>!>a,>},{<!{!!u!>},<>}},{<!!!,!>,<o!!!>'''!{!!!>'!!!!!>"!>},<!!>}},{<o!>,<o"i'!>!eo>,{{{<u!!!>,,!!!>!>!>,<!>,<>},<!}!!!>e!a}ao!i!>aau,!!!!!>e>},{<!ee!o,}!!!!!>>,{<!!">}}}}},{},{{},{<!!'a!{!!!>!!{,!>!!u}!!!>,<>}}}}}},{{{},{{{}}},{}},{{{{<uu!i{}!>,<'!i>},<{aa!>,<<e!>},<<!>a!>>},{{<<a<ue!>},<o!!!!!>},<{!!eea!>,<>},{}},{<!>},<"eo!!!!o,a!!"u!!>}},{{{<}}!>,<!!o!>},<e>},{<!!!!ao!>,<!!!!!!!!!>!>!'e<<<!!!,o,!!!>!>,<>}},{<}},'!>e!!!>!!!>!a}<!>,<!!!>e}!>},<!!!>>},{<,e>,{<!>,<eu}!!!!'e"!!"!i!!!>o!!i!>"!>>,{<'}o!!u<!!!>!>},<<a<!>},<!!i<{!>,<u>}}}},{{{{{{<!>!>},<"io>}},{<'!e{!>!>},<!>,<!>,<ii}>}}},<u!!"!!!!!>,<i'e!>},<'i!!!>i{>},{{{{<!>,<a<"<{>},<u!'!>},<!!!!}{!>!!!>!>},<o>}}}},{{{{},{{},<a!!!>!o!>},<i!!!>,<'"e<}!!>}},{{}}},{{<{,!!!,!!!>},<"!>!!!>},<!!!>"'"'!!!>!!!>!>,<>}},{{},{<!!>}}}}}},{{{{<aao!!!>,<'{u"u>},{<!>},<{!>},<i!>ii!>},<!>"a<i!!>}}},{{{{{}},{<"i!!{>,{{{<!><!>},<a,,!{!!!i,!!',,'ae>}},<euio!iu!!!>!!""!>a!>},<"oa>}},{{},{<!!'}!>,<<},!!u,,!!!>!!!!,!!!{',{!<!!o!!!>>,<e{!!>},{{<<!>},<}"">,<a'<!!ouo!>,">},{}}}},{{{<{{!!"!>},<""{!o!>},<!>,<!!!>!>i!!!>!>,<}>},{<!!,"!!!}uu>,{<i!!u<!>},<uo!>,<!!ia!>,<>}}},<!!<!!a<!!!>i<!!!!!a!!ouo!!!!!!!>e>},{<o!{o}o!!!>,!>},<aa!',!!>,{<!!"!!!>},<!>i{>}}},{{<!>!}!>a'>,{{<"a}'eo!!!>,!!!>,<{",!>!>>}}},{},{<!!i!>!!}>,{}}},{{{{{},{{}}},{{}},{{{{<!>>},<}ao!!,'!!u!>,<'}{!!!>o!>},<<!!"a>},{{<e!!i!!}'!!!!!!!>},<!!!!!!i{eiu!>},<!!!>!i!>},<<!>!!!!!>!>,<>}},{{{{},{}},{<!!uo!>,<"!!e!!!!!>,'!!}>}},{<!!}!!!>!>,<>}}},{<!!e"!uuu>},{{<,>},{{},{{}}}}}}},{{},{{<,{e!>},<!,!!ue>}}},{{{{<{!>},<>,{<}"!>!>,<!}"!>,<!!!!a!>},<ea!!!!{>}}},{<!!'o!!!>u<>,{<!i!{>}}},{{<'oa!>},<>},<iio!>!>,<!<!>,<!ie!!{"<}<!!!!!>!>},<!>>}},{{<!>,o!!oe!!{!>,<"e!!!>!>>}}}},{{{},<!>},<}!!a!!!>e!!,!!!>,!!!>!>},<<o!!i!>},<>},{<!i!!!>!>},<!!!!!!!>,<<!!"!!!!a!!!!!><u!>,<>,{{<'''>}}},{{{<!>o'!>i{!>},<!>},<a">},{{<!!e>},{{<>},{{{<"<!!iia!>,<a<a!>},<!i,!>!!!!o!>},<!!!>,<u">},{<}!!,!>ii<!>,<o}io>}}}}},{{<!'"!<"!!!>,<!>!>},<!}!!a!!"!e<u"oi!>,<>,<!!!>,!i!>},<'i>},{<<o!!'oiue!!!>!eiu}!>,<!>},<!>},<>}}},{{}},{{<!>},<!!!!!>>},{<!>,"!!!!!>!i!!!>!>!><{ae!!!>o!>},<>}}}},{{{<!!!!!>}!!!>u"o''"!ai!>,<!!!!>,{{<!!!>!!!!,!>},<{!>,<!>{<eo{,!!o!>},<'i!<'>},{<!!!>>}}},<!>,<!!!>i>},{{<!!!!!{,iu!a{!>!!!>"!>},<a!>a>}}}},{{{{{<!!!>,<!!!!"<"!!<!a!>,<'!>,<<u!>,<">},<!>,<!!!>},<!>,<e!!!>!!o!!o!!!!o!!!!>},{{<'u!>a!>,<>},<!!!>!i<o!a!!!><}aouu'<,>},{{{<!!!>"!!!>,}ea!!}!>!><!!'"!!<{>,<e!!!>!>!a<!!o!!!>i}!!}>},{{{<!>},<!">}},{<,!!!!!!!><>}},{{<!!!>},<'e>,<i!>,!i,!!!>ea>},{{<,>,<!!!>o!u,i!>u!!!!u!!!!!!!>},<}{!!>}},{{<}!>,,>}}}},{<i}}iu}{!>},<!>{<u!!!!!!o'>,<}<!!<<<,!>,<!<!!"u!>,<u>}}},{{{<!>},<!>},<!!'!>,<!!o!!oa!}!>!>!!!!"{>}},{}},{{{<<!>e!ooa!!!>},<<!!!>",!>},<!u{!!!!<e!!<>},{<}}u{!!"!>},<"!!o!!!><!<!!!>,<e!!!>u!!a!!!>},<>}},{{},<a!>'{"!>},<}!>,<!!!>"e>},{{<!>},<>,{<oe!!!>!!u>}},{<!!!!!>},<!>,<!>!!i!>,<!>}},!!!!e",>},{{<}!!!>!>},<!!a'oi<>,{{<"ou!!{{!>,<''euu>}}},{{<i<<o>},{}}}}}},{{{{<uu!!!>,<!>,<e!{,!>,<!!!!!>'!!>}},{{<o,>,{<{}oe}!o!>!!!!>}},{{}},{{<<o'!<!>,<{{,!!!>},<'e!!!!!!,!!!>!!!!!!!!>}}}},{{},{{}},{{<ai!>},<}!>,}<!!"e<!>,<!o>}}},{{{<<}o!!!>!}!}>},<"i"ei<}!!!!ae,!>,<!u!!i!>!!u>},{{{<!!!>"{o!!!>!!!>ii!!!!!}!!"!!u!!!>,<!!!>e!!<>},{<uu!>'ou!'""!"i!!!>,>}},<!o!>,<<!!!!<e!>},<"!>,<>}},{{}}}}},{{{{{},<'e!!'>},{{<!!,!>!e,!>},<,'!>},<!!!!!>!!!>},<,!!a,ie!!o!>},<!u>,{<a}"!a!>!!!!!>!>},<eao!>!!oi>}},{<!a!}!>o!!!>e!>,<!!!>,<!!!>,!!a"!!,{a,>}}},{{<!!!>a!!!!!>!!!>>},{{{<!!!>}!ueae!>!>{o!!!!!>!!"!!!>!>!ua>}},<!!!>}>}},{{{{<'u,!e!{"!!{!!{"''"a}{u!}>},<!!!oo'!>,<!!!>},<!!!!!!!>},<!!!>},<!>},<o!}!!!}>}},{{{<i!>,<!!!>ui!!!>!>}i<e>},{{{<!>,<!!e!>},<"!,'!!!!aa'!!!!,>}},{<u!!"!!!>!>},<!!!>{!!!!">}}},{{<'u!!{!}{>,<!e!>,<}e}!>},<>}},{<ea!!'!>!>,<o}<!!!!!!",e!!!'}>,{<>}}},{{<{!>},<o!!!>,<,>},{{{},{<u,e!!!>},<{u!>,<'au>}},{{<{a!o,!!{<!!!>{"!>!!!>!>},<'{'<>}}}},{}},{{{{<!>{!>,<<'ei!,!!!>iu!>e!!!>!!>}},<!>,<!>},<!!o'}}u!!!>,<!>!!!>},<eu>},{{<i<"{!"}!!!<o>},{<ao!!!i!!}!!!>!>!<oae<>}},{{{},{},{<}"!>,!!}'!>},<i!!!o}!!oo!!!>!!!>i!!>,{<<!!<e<!!!!!!eo!>},<!!o!a!!!>ei!!!>!>,<!!','<u>}}},{}}}}},{{{<}>},{<!!!>eu>,{<ui<!'!!{!!!>!!!>},<o!!!>o"u!!>,<}!!!>i!!!!!!!>!>},<!<uo<''!!,ii>}},{{},{<'e'!>!>},<!!!a!>!!i!!!>!!!!<!>"{<}>}}},{{<!>,<{i>,{{<a'!eu!>"!!!>>}}},{{<!>,<o!!!>,<o<!e}"!!!>!!!>"!},,e>}},{{{{<!>,<>},{<!!a!>,<u!!<,!!o"!'{>}},<!>!>,<o"<!!!,!><<!>u>},{},{{{<e!>,<o!>,<,!>,<!>,<>},{}},{}}}},{{{{<>},{<uo>,{{{<!!!>o!>},<}e}a"{e!!!>,<!>,<u<"!!"!>},<>}}}}}},{{{<,!{>}},{<o>}},{}}}},{{{{},{{<<!!{!!!>!!!!!!!>!>},<!>},<!!a!!!>},<,!!!>'!!!!!>,!!!>''">,{{},{<{}{'!>>}}}},{}},{{{}},{{{<>}},{<a"{!>},<>}}},{},{{{{},{<!!!>>}}},{{{<!"!>},<!!<<{!>,<!!a>},<{aoi'!!>}}}},{{{{{},{<'!>}!!!>,<!!!>i!o!!!>i!!!>},<"!>,!>!!{!>,<o>,<i<!>,<!!}",>},{<i!>},<a!>!!e>,{<<!}{!>},<!!!>!!!>!>,<!>},<!!!!!>!>!!>}}},{{<!!{"!!!{!!u!!!>'!!!>!!e!!!,'>}}},{{{}},{{{<!>},<>},<}e!'i>},{{{<!>ue!!!>},<{uu!!!>}!!{'>,{{<!!!>!e!>,<ooa}ou{!>''!}",!a'>}}},{{<i!!!<}u!!,}u!!!>"!!!>},<}{!!}>},{<!!'o,!>},<o}}',!>},<<!>},<!!,a"!>,<!"!>,<a>}}},{{<i{}o!!>,{<}i!!!>!>,<!!!>!!,!!!>{>,<!>},<!>,<!<!!'!!!"}!!!>e!>,<u<>}}}}},{<!!!u,!>!>,<u>,<e{!!!>u{eu!>},<!!<<!>,<u>}},{{{<!!}!>},<'!!'ii,"!!uu!>!'e>}}},{{{{<!a<'!>,<,>},<>},{<!!,}>}}}},{{<aoo,'!>!!,!>},<!i!!u>,{}},{{}}}},{{{<{!!'e!!!>!>},<!!!>"o!!,!>},<ooi!!!><>},{{<!!!!!>},<ee!!!>,<'!!!>a{!!,e!!!!!>a!>,!<!i!>,<>}}},{{{<ua}!>o>,{<!>,<!>'a{!!!>,<!>>}},{{{<,oiu{!!!!!!!>},<eo>},{<<e>}}}},{<!>},<""!!!>!>,<,ooe!!{!!!>},<!>,<>}},{{<i!!!><>},{},{{{<!!e{!>,<!!o!!!>,<e<!}!!"!!!>!>},<,>},{<!>},<!!oo}!a!!!>!!<'u>}},{{<e>},<>}}},{{<!}{a<!'}"a!>,<a!!o'i>,<!!!>},<!!!>i"!!!!{!!!!}ao!>},<}!!'i!!!!!!>},{{<!>},<!!,!>a!"!!u!!"a!!e>},<o,e!>,<!>,<}!!e!>},<!!'a,ii!o!>},<!!ai">},{{<o"!!!>!!!>}}!!!!!>i!>},<!>},<">,<!!!!!!!><{!!u!!,a'o{!>,<!">},{{<<a<>,<{>},{{{<!>o!>!>e}i">},{{<!!!!!>!>,<<!>},<!{a<a<!!>},{<!!'ue"e{ua>,<!>'!!}o!!!>!!!>a!>,<<!!!>!!!!!!{!>>}}},<{<a"!!"}o'io>},{<ue!>},<}e'e{>}},{{<'!>,<o!!!>},<!>!!!>oi'!!!>},<'o<>},{{{<!>!>!!!>!>},<!!!>},<u,!>,<!o}>},{}},{<!!!!}!u{!o!!ieea",u!!!!!>!!!>!><!!"">}},{<!>},<<}!!aa"!>},<"!>}a{!>},<!!!!!>!uo>}}}}}}},{{{{<{!}>},{{}},{}},{},{{<,!>"!!!>!>,<!!oo!!!>},<}i!'u'!!!>!>!>},<{a>,{<a!!!>!!!>!>,<!!!'!>!a",!>},<!!o!>},<a!!!!}}{>}},{<{u!>{,!>!!<!i>,<e<!>o!i!!!>!!!!"uo"!>,<u'"!>},<,!i>}}},{{{<<iee!!a"!>},<!>,<,>,<,!!!!!>}o!>,<oo!>!>,<"io!>},<}!',"!o>},{<}!!{'{!!!!<{!ai!!!>"!<ou!!a!{<!!">},{<!>},<!>,<i!e!!!>a!>,<!!o!>!>},<!>},<!!!>aa>,{<u"{<!>},<}!!o'"i!!u<}a>}}},{{{{{<>},{<<}uoa,'!e!!e!!!>!{o!!!i>}}},{<ai!!!>eou!!!>!a!!!ei}!{u!!!a!!!<!!ei>,<aue}!!!!}!>,<a{o!>,<!!!!>}},{{<!!o!!ieu!>,<!u',aeaia!!}">},{{{},{<!!'"<}i>}}}}}},{{},{{{{<'!!e!i!>u!><e,!">},{<!<<!>!!uu"!>},<!!u<iia!!}!">,{}}},{{}}},{{<a!!a<!>,<'!>,<!>,<,',!>,<>,{{{<!!!!!!!>e}"!!i<>}},<e!}'!>},<!>!>},<!!a!!'i>}},{<"!a',"a>}}},{{{<<,!>},<!>,<!o<!>},<<!!!>u>},{{{}},{<!!!!e<!!!!!>o!>,<o{!>!>,<>,<>},{}},{{},{<"!>,<!i>,{<>}}}},{{{<{!"!>i"!!<i"{}>}},{<>,<oi,i'>}},{{{<{!!!>oe!'!!!!!>!>!>},<!>,!!!e{a>}},{{<"!>,<!>u!!,!>a{<!!'a,>,{<i"!>},<u!>,<,,'!,!o!>},<!!!!i>}},<i!>},<io<!!a!!,!!!>}!"'"o!!o!>}>},{<!>'ue!!!>,<'ia}{!>},<!>,<{o<u!>,<>}},{{{{{<>}},<!o!!!>},<!!!>!>},<!!{ae!!e!!!!!!!!!!!>i>},{{},{{<o!>},<}{o!>,<!!!!!>!!!>,<!>!!!>!>,<u>}}},{{{<!>,a"!!i!>},<!!"!!"!!u}ue!!"o!!e>},{}},{<!>,<!!!>!!!>{ue!e,!>,<o<o{!>,<!>,<!!!>,<>}}},{{<!>},<i}!!<<!!e!>>}}}}},{{{<,>,<{!>},<{!,{,>},{<<e"}u}}!!!>!>!!!>a!>},<!>,<oea'u!!!>>,<i!>,o<!>!!"!>a!!!>,<!'!>!!!>>},{<{o{uuo<,o!!!>!!!>!!!>}>,{}}}},{{},{{{},{}},{{<i{ie"!o'{!!!>},<!a}!!!>},<>},<!!,e<e!>},<!>},<!!!>a!!e!>i>}},{{{{{{{{{<!>u!!!>!!!>!ui'{!>},<>}},{}},{}}},{<o!!!>>},{}},{{{{}},{{{<}ue<!!!!!>i!>},<!!a}a<!>,<!>,<>}},{{<!!{!>i!!!>},<a<!!!>!>},<!>},<u}{ao!!!!>},<o!>,<o!!!>!!!>i!!!><!>oe}!o>},{{{<!>!>,<!>ee!!!a!>!!!>>}}}},{{<a!!!>!!<<!!!!u!!e>,{}}},{{{<!>},<eu!>i!!'!>!!!!!>!>,<">},{{<'!!!!!>u!>,<ue"{,i!a}"{!!!>!!o!>,<>}},{{},{}}},{{{{},{{{<!>,<!'>}}},{<!i!>,<oe}!!o''<!>},<>}},{{{<ee!>!!>}},{<a{>,<!>!!{!>,<>}},{{{}},{{{{<!!a>},<>},<{!!!>,<o>},{{<{<<>},<!!!"!>,<!!!!!>!!e!!!>!>!!>}}},{{<!!,u{!!}"uie!!}!>,<o>},{{{<}!!!>!>,<!>},<a>}},{<!!!>!>,<<ea{"!>}aua}!>},<}!!!>!!!o'>,{<'",}"}>}}}}}},{{{<e!>},<!>>},{{<!>!>"'!!!<}!io!!!!u!!!>!><i!a!!!!!>>}}},{}},{{}}}},{{{<>},{{<!!!!!}!!i!><!!!>>}},{{<!!!!!>'>}}},{{{<{!!!><!!!>e!>!!!>e"!,}u>},{<!>}>,<!!!>'!"ae<a>},{{<i!>,<"!>},<!!!!!>},<ae!>>},{}}},{{{{<>}},{<o<!!!>e>,{{<oa!>,<"!}'u!>,<o'!>!"",!!!>>},{<!!a!>,<!!}!>},<!>},<!!!!!>,<u!>,<e<!!<a!{a!,!!!>!!!>>}}},{{<}'{!!a!!!>!!o!>!{!>},<!!!!!!""'>},{<{!!!>{>}}},{},{{{{{}},{{{<!!{"eu>},{}},{<!!'ia!}a''!>}>,{{<<},!>,<,ea!oi!!'a!!!"!!!>!>,<!!!>u>},<>}}}},{{<>}},{{{{<!>,<{!e!>,<au<,}>},{<!>!>},<"<e!>!"o',ua'"!>},<!!!{>}},{<!"!>},<!!}!!"e!!!>{{!!'u!e!>,<"!>,<>}},{{{<o!!!>!!"!"o!>!>,<!!!>>},<,a<!>},<!>,<!!o{ioo!"!>>},{{}},{{{<}'!!!!!>},<}{>}}}}}},{{<}e{!!ieia"a!>!eeu!!i!>>,{<!!!!!>"i>}},{{<'<,!'!!!>!>},<e>,<a!>>},{{<!!u<a'!!!><"!ou>,<!!!>!,!!>}}},{{<}u!o>},<!>!>,<ui>}}},{{<uu!i!<u!<u!!!>{!!!ii!!!>>},{<!!,,!<!{!>},<!!!>>,<<i!"}!!!>"oi}"o'!>!'!>!u>},{{<<i!!a!>!!"o!!i!!,e}{!!"i!!!><>},{}}}}},{{{{{},<a"!!!>!>'>}},{{<'>},{<,!!eie!>},<!!!>},<o!!!>!!!>'"!!!!<!>>,<o!>ou<>},{{<a!i!!io,>}}},{{{{<!!!>!>},<!!'!!,"!!!>!}"}!>},<}!!u>,<<a!!!>"!>,<"!!"o!>},<>},{{}}}}}},{{{<u!!!>"!>!!!>oi{!!!!<a!>},<i{!>!>"<}>},{{<}!!ee!>!!!!ea!!!!!!!><,!>>},<i!!!>,<u<i}"!!!>,iii{a}a!o>}},{<!>,<!>},<!!,}!!<!!!>'!!!>'!!!>},<!!!a>,{<!<}!>,<!!!>,!{{<o!>,<a!!!>!{u!>,<}!!!!!!,>}},{<o>}},{{{<!e!!!!!>,<,}a!!o!e}!!<i,a!!!!!>!>>}},{{<'!>},<!!<i!>!>a!><!>,<!!!>'>}}},{{{{<}!>,<!>},<>}},{<}!!!>!!!>!!e!>,<ooia!<>}},{{<}"i,i{!>,<<,}!>}!<!!}!!!!,{!!>},<<ii}!!!>!i>},{}}}},{{{<i,,a"!!oie!>,<u>}}}},{{{<>},{<!ua}>}}},{{},{},{{{},{<'!ou{>}},<!!!>!>!>},<{!>,<oeu>}}},{{<!!!!o!>!!"!!!>!>,<!"!>!!!>!>,<{u!!!>},<!!!>"!!>}},{{{<!>!},<!!{<>},<!>},<o}e!>,<}>},{{{},{{<aio{<!{!!u!>'{a,o!!ii">}},{<ei!>},<},!'<!!o'!!<!!{!>,<a!{>,{{}}}},{},{{<!!!>!>},<,!!!>}!>}!!ou!}ia'i>,<!e!!!!!!i!>},<!!!>!>!>},<!>,<!!!>},<e'!!'u!!!a{>},<u'i}!!!!}!>e">}},{<{!!auo!>,<e!>},<<i!!i!>,<'!!!>ie}"u>}}},{{<>,{{}}},{{{{<!!<a!!<,!!a!!!!!!e<>},<!>>},{<a}!!!>!>},<{!>},<u!>},<,!>},<'>}},{},{<"!!!!i!!{"o!!a}!o!!!>!>'>}}},{{<ou<!>,<>,{<!>,<!!,{'a,'!!,!>,<!!u!>,<!>!<<!>,<">}},{<<'>}}}}}} diff --git a/2017/src/bin/day_1.rs b/2017/src/bin/day_1.rs new file mode 100644 index 0000000..5d0e431 --- /dev/null +++ b/2017/src/bin/day_1.rs @@ -0,0 +1,24 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + + let number_chars = args.input[0].chars().collect::<Vec<_>>(); + + let mut sum = 0; + + for i in 0..number_chars.len() { + let next = if args.part == 1 { + (i + 1) + } else { + (i + number_chars.len() / 2) + } % number_chars.len(); + if (number_chars[i] == number_chars[next]) { + let parsed: i32 = number_chars[i].to_string().parse().unwrap(); + sum += parsed; + } + } + + println!("Sum is {}", sum); +} diff --git a/2017/src/bin/day_10.rs b/2017/src/bin/day_10.rs new file mode 100644 index 0000000..faec18a --- /dev/null +++ b/2017/src/bin/day_10.rs @@ -0,0 +1,63 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + + let lengths: Vec<usize> = if args.part == 1 { + args.input[0].split(",").map(|x| x.parse().unwrap()).collect() + } else { + let suffix: [usize; 5] = [17, 31, 73, 47, 23]; + args.input[0].as_bytes() + .iter().map(|&x| x as usize) + .chain(suffix.iter().cloned()) + .collect() + }; + + let mut position = 0; + let mut list: Vec<u32> = (0..256).collect(); + + if args.part == 1 { + hash_round(&mut list, &lengths, &mut position, 0); + } else { + for i in 0..64 { + let skip = lengths.len() * i; + hash_round(&mut list, &lengths, &mut position, skip); + } + } + + + if args.part == 1 { + let answer = list[0]*list[1]; + println!("{}", answer); + } else { + let mut current_char = 0; + for (i, l) in list.iter().enumerate() { + current_char = current_char ^ l; + if i % 16 == 15 { + print!("{:02x}", current_char); + current_char = 0; + } + } + println!(""); + } +} + +fn hash_round(list: &mut Vec<u32>, lengths: &Vec<usize>, position: &mut usize, skip: usize) { + for (inner_skip, &length) in lengths.iter().enumerate() { + reverse(list, *position, length); + *position = (*position + length + skip + inner_skip) % list.len(); + } +} + +fn reverse(list: &mut Vec<u32>, position: usize, length: usize) { + let mut a = position; + let mut b = position + length - 1; + let len = list.len(); + while a < b { + list.swap(a%len, b%len); + + a += 1; + b -= 1; + } +} diff --git a/2017/src/bin/day_11.rs b/2017/src/bin/day_11.rs new file mode 100644 index 0000000..ffb0833 --- /dev/null +++ b/2017/src/bin/day_11.rs @@ -0,0 +1,57 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + + let directions: Vec<&str> = args.input[0].split(",").collect(); + + let mut x = 0.0; + let mut y = 0.0; + + let mut max_away = 0.0; + + for dir in directions { + y += match dir { + "ne" => 0.5, + "n" => 1.0, + "nw" => 0.5, + "se" => -0.5, + "s" => -1.0, + "sw" => -0.5, + _ => panic!("Unexpected direction {}", dir) + }; + + x += match dir { + "ne" => -0.5, + "n" => 0.0, + "nw" => 0.5, + "se" => -0.5, + "s" => 0.0, + "sw" => 0.5, + _ => panic!("Unexpected direction {}", dir) + }; + + let current_distance = tile_distance(x, y); + if current_distance > max_away { + max_away = current_distance; + } + } + + if args.part == 1 { + println!("Child process is {} away", tile_distance(x, y)); + } else { + println!("At most, child process was {} away", max_away); + } + +} + +fn tile_distance(x: f32, y: f32) -> f32 { + let tiles_x = x.abs()*2.0; + let tiles_y = if y.abs() < tiles_x { + 0.0 + } else { + y.abs() - tiles_x + }; + tiles_x + tiles_y +} diff --git a/2017/src/bin/day_12.rs b/2017/src/bin/day_12.rs new file mode 100644 index 0000000..39f05e9 --- /dev/null +++ b/2017/src/bin/day_12.rs @@ -0,0 +1,52 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +use std::cmp; + +fn main() { + let args = AdventArgs::init(); + + let mut groups: Vec<Vec<i32>> = vec!(vec!(0)); //0 in the first group + + for line in args.input { + let mut words_iter = line.split_whitespace(); + let current: i32 = words_iter.next().unwrap().parse().unwrap(); + if find_group(&groups, current).is_none() { + groups.push(vec!(current)); + } + words_iter.next().unwrap(); //<-> + for other_str in words_iter { + let other: i32 = other_str.trim_right_matches(",").parse().unwrap(); + + match (find_group(&groups, current), find_group(&groups, other)) { + (Some(current_group), Some(other_group)) if current_group != other_group => { + merge_groups(&mut groups, current_group, other_group); + }, + (Some(_), Some(_)) => { + }, + (Some(current_group), None) => { + groups[current_group].push(other); + }, + (None, _) => panic!("Current group not found!") + }; + } + } + + if args.part == 1 { + println!("First group has {} members", groups[0].len()); + } else { + println!("Total of {} groups", groups.len()); + } +} + +fn find_group(groups: &Vec<Vec<i32>>, x: i32) -> Option<usize> { + groups.iter().position(|group| group.contains(&x)) +} + +fn merge_groups(groups: &mut Vec<Vec<i32>>, a: usize, b: usize) { + let src = cmp::max(a, b); + let dest = cmp::min(a, b); + + let mut from = groups.swap_remove(src); + groups[dest].append(&mut from) +} diff --git a/2017/src/bin/day_13.rs b/2017/src/bin/day_13.rs new file mode 100644 index 0000000..e85b541 --- /dev/null +++ b/2017/src/bin/day_13.rs @@ -0,0 +1,46 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +use std::collections::HashMap; + +fn main() { + let args = AdventArgs::init(); + + let input: HashMap<u32, u32> = args.input.iter().map(|line| { + let mut split_line = line.split(": "); + (split_line.next().unwrap().parse().unwrap(), split_line.next().unwrap().parse().unwrap()) + }).collect(); + + if args.part == 1 { + let severity = calculate_severity(&input, 0, &args); + println!("Severity: {}", severity); + } else { + let optimal_delay = (0u32..).find(|&delay| calculate_severity(&input, delay, &args) == 0).unwrap(); + println!("Wait {} picoseconds", optimal_delay); + } +} + +fn calculate_severity(input: &HashMap<u32, u32>, delay: u32, args: &AdventArgs) -> u32 { + let mut severity = 0; + let max_depth = input.keys().max().cloned().unwrap(); + + for depth in 0..max_depth+1 { + severity += match input.get(&depth) { + Some(range) => { + let position = (depth + delay) % (2*range-2); + + if position == 0 { + if args.part == 1 { + range * depth + } else { + range * depth + 1 + } + } else { + 0 + } + }, + None => 0 + }; + } + severity +} diff --git a/2017/src/bin/day_14.rs b/2017/src/bin/day_14.rs new file mode 100644 index 0000000..778a57f --- /dev/null +++ b/2017/src/bin/day_14.rs @@ -0,0 +1,52 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + let input = args.input[0].clone(); + + let mut used = 0; + let mut grid: Vec<Vec<bool>> = vec!(vec!(false; 128); 128); + for i in 0..128 { + let to_hash = format!("{}-{}", input, i); + let hash = knot_hash(&to_hash); + for (x1,c) in hash.chars().enumerate() { + let parsed = u32::from_str_radix(&c.to_string(), 16).unwrap(); + used += parsed.count_ones(); + for (x2,b) in format!("{:04b}",parsed).chars().enumerate() { + grid[i][4*x1+x2] = b == '1'; + } + } + } + + if args.part == 1 { + println!("{} is used", used); + } else { + let mut group_count = 0; + for start_y in 0..128 { + for start_x in 0..128 { + if grid[start_y][start_x] { + group_count += 1; + clear_group(&mut grid, Point{ + x: start_x as i32, + y: start_y as i32 + }); + } + } + } + println!("{} groups", group_count); + + } +} + +fn clear_group(grid: &mut Vec<Vec<bool>>, point: Point) { + if point.x >= 0 && point.x < 128 && point.y >= 0 && point.y < 128 { + if grid[point.y as usize][point.x as usize] { + grid[point.y as usize][point.x as usize] = false; + clear_group(grid, point.up()); + clear_group(grid, point.down()); + clear_group(grid, point.left()); + clear_group(grid, point.right()); + } + } +} diff --git a/2017/src/bin/day_15.rs b/2017/src/bin/day_15.rs new file mode 100644 index 0000000..29b63ad --- /dev/null +++ b/2017/src/bin/day_15.rs @@ -0,0 +1,40 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + + let mut a: u64 = 591; + let mut b: u64 = 393; + + let mut matches: u64 = 0; + + let comparisons = if args.part == 1 { + 40_000_000 + } else { + 5_000_000 + }; + + for _ in 0..comparisons { + a = (a * 16807) % 2147483647; + b = (b * 48271) % 2147483647; + + while args.part != 1 && a % 4 != 0 { + a = (a * 16807) % 2147483647; + } + while args.part != 1 && b % 8 != 0 { + b = (b * 48271) % 2147483647; + } + + if lower_16_match(a, b) { + matches += 1; + } + } + + println!("There were {} matches", matches); +} + +fn lower_16_match(a: u64, b: u64) -> bool { + let mask = 65535; //2^16-1, ie 16 ones + (a & mask) == (b & mask) +} diff --git a/2017/src/bin/day_16.rs b/2017/src/bin/day_16.rs new file mode 100644 index 0000000..9676714 --- /dev/null +++ b/2017/src/bin/day_16.rs @@ -0,0 +1,87 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +extern crate regex; +use regex::Regex; + +fn main() { + let args = AdventArgs::init(); + + let spin_re = Regex::new(r"s(\d+)").unwrap(); + let exchange_re = Regex::new(r"x(\d+)/(\d+)").unwrap(); + let partner_re = Regex::new(r"p(\w)/(\w)").unwrap(); + let input: Vec<Instruction> = args.input[0] + .split(',') + .map(|instruction| { + if let Some(caps) = spin_re.captures(instruction) { + let spin_amount: usize = caps[1].parse().unwrap(); + Instruction::Spin(spin_amount) + } else if let Some(caps) = exchange_re.captures(instruction) { + let position_a: usize = caps[1].parse().unwrap(); + let position_b: usize = caps[2].parse().unwrap(); + Instruction::Exchange(position_a, position_b) + } else if let Some(caps) = partner_re.captures(instruction) { + let program_a = caps[1].chars().next().unwrap(); + let program_b = caps[2].chars().next().unwrap(); + Instruction::Partner(program_a, program_b) + } else { + panic!("Unhandled instruction: {}", instruction) + } + }) + .collect(); + + let mut states = vec!("abcdefghijklmnop".chars().collect()); + if args.part == 1 { + let answer = run(&input, &states.last().unwrap()); + println!("{}", answer.iter().collect::<String>()); + } else { + let repetitions = 1_000_000_000; + let mut cycle_found = false; + let mut cycle_start = 0; + while !cycle_found { + let next = run(&input, &states.last().unwrap()); + if let Some(i) = states.iter().position(|&ref x| *x == next) { + cycle_found = true; + cycle_start = i; + } else { + states.push(next); + } + } + println!("Cycle found after pushing {} states", states.len()); + println!("Cycle starts at {} states", cycle_start); + + let solution_index = (repetitions - cycle_start) % (states.len() - cycle_start); + println!("{}", states[solution_index].iter().collect::<String>()); + + } +} + +enum Instruction { + Spin(usize), + Exchange(usize, usize), + Partner(char, char) +} + +fn run(instructions: &[Instruction], start: &Vec<char>) -> Vec<char> { + let mut programs = start.clone(); + for instruction in instructions { + match instruction { + &Instruction::Exchange(a, b) => { + programs.swap(a, b); + }, + &Instruction::Spin(spin_amount) => { + for _ in 0..spin_amount { + //this may be slow, but will suffice for right now + let end = programs.pop().unwrap(); + programs.insert(0, end); + } + }, + &Instruction::Partner(program_a, program_b) => { + let position_a: usize = programs.iter().position(|&x| x == program_a).unwrap(); + let position_b: usize = programs.iter().position(|&x| x == program_b).unwrap(); + programs.swap(position_a, position_b); + } + } + } + programs +} diff --git a/2017/src/bin/day_17.rs b/2017/src/bin/day_17.rs new file mode 100644 index 0000000..09d6fdc --- /dev/null +++ b/2017/src/bin/day_17.rs @@ -0,0 +1,47 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + let step_size: usize = args.input[0].parse().unwrap(); + + let inserts = if args.part == 1 { + 2017 + } else { + 50_000_000 + }; + + let mut buffer = Vec::with_capacity(inserts + 1); + buffer.push(0); + let mut position = 0; + + for i in 0..inserts as u32 { + let to_insert = i+1; + // the +1 is because they want it to insert AFTER the element + // that adding position ends on + position = ((position + step_size) % buffer.len()) + 1; + if args.part == 2 && position != 1 { + // for big vectors, push is MUCH more efficient than + // insert (O(C) vs O(n)). In part 2, we want the element + // after 0, which will always be index 1. It only needs to + // be inserted into the right place if it's actually going + // to be in position 1. + // + // If I wasn't meshing the solution with part 1, there + // probably wouldn't even be a vector, just tracking the + // length and index 1. + buffer.push(to_insert); + } else { + buffer.insert(position, to_insert); + } + } + + let answer_position = if args.part == 1 { + (position+1)%buffer.len() + } else { + 1 + }; + + let answer = buffer[answer_position]; + println!("{}", answer); +} diff --git a/2017/src/bin/day_18.rs b/2017/src/bin/day_18.rs new file mode 100644 index 0000000..f763f1f --- /dev/null +++ b/2017/src/bin/day_18.rs @@ -0,0 +1,207 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +use std::str::FromStr; +use std::collections::HashMap; +use std::sync::mpsc::*; + +fn main() { + let args = AdventArgs::init(); + + let instructions: Vec<Instruction> = args.input.iter() + .map(|line| line.parse().unwrap()) + .collect(); + + let (sender0, receiver0) = channel(); + let (sender1, receiver1) = channel(); + + let mut program0 = Program::new(0, instructions.clone(), sender0, receiver1, args.part == 1); + + if args.part == 1 { + program0.run(); + let mut answer = 0; + while let Ok(x) = receiver0.try_recv() { + answer = x; + } + + println!("Last sent value: {}", answer); + } else { + let mut program1 = Program::new(1, instructions.clone(), sender1, receiver0, args.part == 1); + + while !(program0.terminated && program1.terminated) && (program0.run() || program1.run()) { + } + + + println!("Program 0 sent {} messages", program0.sent_count); + println!("Program 1 sent {} messages", program1.sent_count); + } + + +} + +struct Program { + instructions: Vec<Instruction>, + registers: HashMap<char, i64>, + pc: i64, + terminated: bool, + sender: Sender<i64>, + sent_count: u64, + receiver: Receiver<i64>, + part1: bool +} + +impl Program { + fn new(process_id: i64, instructions: Vec<Instruction>, sender: Sender<i64>, receiver: Receiver<i64>, part1: bool) -> Program { + let mut reg = HashMap::new(); + if !part1 { + reg.insert('p', process_id); + } + Program { + instructions: instructions, + registers: reg, + pc: 0, + terminated: false, + sender: sender, + sent_count: 0, + receiver: receiver, + part1: part1 + } + } + fn run(&mut self) -> bool { + use Instruction::*; + + let mut blocked = false; + let mut did_something = false; + + while !blocked && !self.terminated { + if self.pc < 0 || self.pc as usize >= self.instructions.len() { + self.terminated = true; + } + else { + let ins = self.instructions[self.pc as usize].clone(); + + match ins { + Snd(x) => { + self.sent_count += 1; + self.sender.send(self.get(x)).ok(); + }, + Set(x, y) => { + let y_val = self.get(y); + self.set(x, y_val); + }, + Add(x, y) => { + let x_val = self.get(x); + let y_val = self.get(y); + self.set(x, x_val + y_val); + }, + Mul(x, y) => { + let x_val = self.get(x); + let y_val = self.get(y); + self.set(x, x_val * y_val); + }, + Mod(x, y) => { + let x_val = self.get(x); + let y_val = self.get(y); + self.set(x, x_val % y_val); + }, + Rcv(x) => { + if self.part1 { + blocked = self.get(x) != 0; + } else { + match self.receiver.try_recv() { + Ok(y) => { + self.set(x, y); + }, + Err(_) => { + blocked = true; + return did_something; + } + } + } + }, + Jgz(x, y) => { + if self.get(x) > 0 { + self.pc = self.pc + self.get(y) - 1; + } + }, + } + self.pc += 1; + did_something = true; + } + } + true + } + + fn get(&self, register: Data) -> i64 { + use Data::*; + match register { + Register(c) => self.registers.get(&c).cloned().unwrap_or(0), + Literal(i) => i + } + } + + fn set(&mut self, register: Data, value: i64) { + use Data::*; + match register { + Register(c) => { + self.registers.insert(c, value); + }, + _ => {} + } + } +} + +#[derive(Debug, Clone)] +enum Instruction { + Snd(Data), + Set(Data, Data), + Add(Data, Data), + Mul(Data, Data), + Mod(Data, Data), + Rcv(Data), + Jgz(Data, Data) +} + +impl FromStr for Instruction { + type Err = String; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + use Instruction::*; + + let mut str_iter = s.split_whitespace(); + let ins = str_iter.next(); + let x = str_iter.next().map(|x| x.parse::<Data>()); + let y = str_iter.next().map(|x| x.parse::<Data>()); + + match (ins, x, y) { + (Some("snd"), Some(Ok(x)), _) => Ok(Snd(x)), + (Some("set"), Some(Ok(x)), Some(Ok(y))) => Ok(Set(x, y)), + (Some("add"), Some(Ok(x)), Some(Ok(y))) => Ok(Add(x, y)), + (Some("mul"), Some(Ok(x)), Some(Ok(y))) => Ok(Mul(x, y)), + (Some("mod"), Some(Ok(x)), Some(Ok(y))) => Ok(Mod(x, y)), + (Some("rcv"), Some(Ok(x)), _) => Ok(Rcv(x)), + (Some("jgz"), Some(Ok(x)), Some(Ok(y))) => Ok(Jgz(x, y)), + (_, _, _) => Err(format!("Unknown instruction {}", s)) + } + } +} + +#[derive(Debug, Clone, Copy)] +enum Data { + Literal(i64), + Register(char) +} + +impl FromStr for Data { + type Err = String; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + use Data::*; + + match (s.parse(), s.chars().next()) { + (Ok(num), _) => Ok(Literal(num)), + (Err(_), Some(c)) => Ok(Register(c)), + (_, _) => Err(format!("Invalid data {}", s)) + } + } +} diff --git a/2017/src/bin/day_19.rs b/2017/src/bin/day_19.rs new file mode 100644 index 0000000..b333c98 --- /dev/null +++ b/2017/src/bin/day_19.rs @@ -0,0 +1,78 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + use Direction::*; + + let args = AdventArgs::init(); + + let input: Vec<Vec<char>> = args.input.iter().map(|line| line.chars().collect()).collect(); + + let mut position = Point { + x: input[0].iter().position(|&c| c == '|').unwrap() as i32, + y: 0 + }; + + let mut direction = Down; + let mut path_ended = false; + let mut tokens = Vec::new(); + + // moving onto the map counts as one, but because of how I'm + // counting there's also an off the map step that I shouldn't be + // counting at the end. They cancel out. + let mut steps_moved = 0; + + while !path_ended { + position = position.shift(&direction); + steps_moved += 1; + + match char_at(&input, &position) { + '|' | '-' => { + //continue as is + }, + ' ' => { + path_ended = true; + }, + '+' => { + let left_option = char_at(&input, &position.shift(&direction.rotate_left())); + let right_option = char_at(&input, &position.shift(&direction.rotate_right())); + match (left_option, right_option) { + (' ', ' ') => { + path_ended = true; + }, + (_, ' ') => { + direction = direction.rotate_left(); + }, + (' ', _) => { + direction = direction.rotate_right(); + }, + _ => { + panic!("Don't know where to go from {:?}", position); + } + } + }, + token => { + tokens.push(token); + } + } + + } + + if args.part == 1 { + println!("{}", tokens.iter().collect::<String>()); + } else { + println!("{}", steps_moved); + } +} + +fn char_at(input: &Vec<Vec<char>>, position: &Point) -> char { + if position.y < 0 || + position.x < 0 || + position.y as usize >= input.len() || + position.x as usize >= input[position.y as usize].len() { + ' ' + } else { + input[position.y as usize][position.x as usize] + } + +} diff --git a/2017/src/bin/day_2.rs b/2017/src/bin/day_2.rs new file mode 100644 index 0000000..307029a --- /dev/null +++ b/2017/src/bin/day_2.rs @@ -0,0 +1,26 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + let sum = args.input.iter().map(|line| { + let splitline = parse_space_separated_ints(line).unwrap(); + + if args.part == 1 { + let max = splitline.iter().max().unwrap(); + let min = splitline.iter().min().unwrap(); + max-min + } else { + for i in 0..splitline.len() { + for j in 0..splitline.len() { + if i != j && splitline[i] % splitline[j] == 0 { + return splitline[i] / splitline[j]; + } + } + } + panic!("Didn't find a dividing one! {:?}", splitline) + } + }).sum::<i32>(); + + println!("Checksum is {}", sum); +} diff --git a/2017/src/bin/day_20.rs b/2017/src/bin/day_20.rs new file mode 100644 index 0000000..f528675 --- /dev/null +++ b/2017/src/bin/day_20.rs @@ -0,0 +1,89 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +extern crate regex; +use regex::Regex; + +#[macro_use] +extern crate lazy_static; + +use std::str::FromStr; + +fn main() { + let args = AdventArgs::init(); + + let mut particles: Vec<Particle> = args.input.iter() + .map(|line| line.parse().unwrap()) + .collect(); + + // I took eventually to be after a largish number. Seemed to work + // out, but I'm sure there is a more mathematical way to work it + // out. + for _ in 0..1000 { + particles = particles.iter().map(|p| p.step()).collect(); + if args.part == 2 { + let before_collisions = particles.clone(); + particles.retain(|p| { + before_collisions.iter().filter(|p2| p2.position == p.position).count() == 1 + }); + } + } + + if args.part == 1 { + let (closest, _) = particles.iter().enumerate().min_by_key(|&(_, p)| p.position.manhattan_distance()).unwrap(); + println!("Closest to 0: {}", closest); + } else { + let remaining = particles.iter().count(); + println!("Remaining: {}", remaining); + } + +} + +#[derive(Debug, Clone)] +struct Particle { + position: Point3d, + velocity: Point3d, + acceleration: Point3d +} + + +impl Particle { + fn step(&self) -> Particle { + let v = self.velocity + self.acceleration; + Particle { + position: self.position + v, + velocity: v, + acceleration: self.acceleration + } + } +} + +impl FromStr for Particle { + type Err = String; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + lazy_static!{ + static ref RE: Regex = Regex::new(r"p=<(-?\d+),(-?\d+),(-?\d+)>, v=<(-?\d+),(-?\d+),(-?\d+)>, a=<(-?\d+),(-?\d+),(-?\d+)>").unwrap(); + }; + + let caps = RE.captures(s).unwrap(); + Ok(Particle { + position: Point3d { + x: caps[1].parse().unwrap(), + y: caps[2].parse().unwrap(), + z: caps[3].parse().unwrap() + }, + velocity: Point3d { + x: caps[4].parse().unwrap(), + y: caps[5].parse().unwrap(), + z: caps[6].parse().unwrap() + }, + acceleration: Point3d { + x: caps[7].parse().unwrap(), + y: caps[8].parse().unwrap(), + z: caps[9].parse().unwrap() + } + }) + } +} + diff --git a/2017/src/bin/day_21.rs b/2017/src/bin/day_21.rs new file mode 100644 index 0000000..7f7ac79 --- /dev/null +++ b/2017/src/bin/day_21.rs @@ -0,0 +1,200 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +extern crate regex; +use regex::Regex; + +fn main() { + let args = AdventArgs::init(); + + let (t2, t3) = parse_transforms(&args.input); + + let mut picture = vec!( + vec!(false, true, false), + vec!(false, false, true), + vec!(true, true, true) + ); + + let iterations = if args.part == 1 { + 5 + } else { + 18 + }; + for _ in 0..iterations { + picture = expand(&picture, &t2, &t3); + } + + let ones: usize = picture.iter().map( + |row| row.iter().filter(|&&x| x).count() + ).sum(); + println!("{} ones", ones); +} + +fn print(picture: &Vec<Vec<bool>>) { + for row in picture { + for &c in row { + print!("{}", if c {"#"} else {"."}); + } + println!(); + } + println!(); +} + +fn expand(picture: &Vec<Vec<bool>>, t2: &Vec<Transform2>, t3: &Vec<Transform3>) -> Vec<Vec<bool>> { + let size = picture.len(); + let div = if size % 2 == 0 { 2 } else { 3 }; + let segments = size / div; + let new_size = size + segments; + + let mut result = vec!(vec!(false; new_size); new_size); + + for i in 0..segments { + let y = i*div; + let v = i*(div+1); + for j in 0..segments { + let x = j*div; + let u = j*(div+1); + if div == 2 { + let init = [ + [picture[y][x], picture[y][x+1]], + [picture[y+1][x], picture[y+1][x+1]] + ]; + let pattern = t2.iter().find(|p| p.matches(&init)).expect(&format!("No pattern matches {:?}", init)); + let to = pattern.to; + + for a in 0..div+1 { + for b in 0..div+1 { + result[v+a][u+b] = to[a][b]; + } + } + } else { + let init = [ + [picture[y][x], picture[y][x+1], picture[y][x+2]], + [picture[y+1][x], picture[y+1][x+1], picture[y+1][x+2]], + [picture[y+2][x], picture[y+2][x+1], picture[y+2][x+2]] + ]; + let pattern = t3.iter().find(|p| p.matches(&init)).expect(&format!("No pattern matches {:?}", init)); + let to = pattern.to; + + for a in 0..div+1 { + for b in 0..div+1 { + result[v+a][u+b] = to[a][b]; + } + } + } + } + } + + result +} + +fn parse_transforms(input: &Vec<String>) -> (Vec<Transform2>, Vec<Transform3>) { + let t2_re = Regex::new(r"^(.)(.)/(.)(.) => (.)(.)(.)/(.)(.)(.)/(.)(.)(.)$").unwrap(); + let t3_re = Regex::new(r"^(.)(.)(.)/(.)(.)(.)/(.)(.)(.) => (.)(.)(.)(.)/(.)(.)(.)(.)/(.)(.)(.)(.)/(.)(.)(.)(.)$").unwrap(); + + let mut t2 = Vec::new(); + let mut t3 = Vec::new(); + for line in input { + if let Some(t2_caps) = t2_re.captures(line) { + t2.push(Transform2 { + from: [ + [&t2_caps[1] == "#", &t2_caps[2] == "#"], + [&t2_caps[3] == "#", &t2_caps[4] == "#"] + ], + to: [ + [&t2_caps[5] == "#", &t2_caps[6] == "#", &t2_caps[7] == "#"], + [&t2_caps[8] == "#", &t2_caps[9] == "#", &t2_caps[10] == "#"], + [&t2_caps[11] == "#", &t2_caps[12] == "#", &t2_caps[13] == "#"] + ] + }); + } else if let Some(t3_caps) = t3_re.captures(line) { + t3.push(Transform3 { + from: [ + [&t3_caps[1] == "#", &t3_caps[2] == "#", &t3_caps[3] == "#"], + [&t3_caps[4] == "#", &t3_caps[5] == "#", &t3_caps[6] == "#"], + [&t3_caps[7] == "#", &t3_caps[8] == "#", &t3_caps[9] == "#"] + ], + to: [ + [&t3_caps[10] == "#", &t3_caps[11] == "#", &t3_caps[12] == "#", &t3_caps[13] == "#"], + [&t3_caps[14] == "#", &t3_caps[15] == "#", &t3_caps[16] == "#", &t3_caps[17] == "#"], + [&t3_caps[18] == "#", &t3_caps[19] == "#", &t3_caps[20] == "#", &t3_caps[21] == "#"], + [&t3_caps[22] == "#", &t3_caps[23] == "#", &t3_caps[24] == "#", &t3_caps[25] == "#"] + ] + }); + } + } + + (t2, t3) +} + +#[derive(Debug)] +struct Transform2 { + from: [[bool; 2]; 2], + to: [[bool; 3]; 3] +} + +impl Transform2 { + fn rotate(from: &[[bool;2];2]) -> [[bool;2];2] { + [ + [from[1][0],from[0][0]], + [from[1][1],from[0][1]] + ] + } + + fn flip(from: &[[bool;2];2]) -> [[bool;2];2] { + [ + [from[0][1],from[0][0]], + [from[1][1],from[1][0]] + ] + } + + fn matches(&self, other: &[[bool; 2]; 2]) -> bool { + let mut any_match = false; + let mut spinning_other = other.clone(); + for _ in 0..4 { + any_match = any_match || + self.from == spinning_other || + self.from == Transform2::flip(&spinning_other); + + spinning_other = Transform2::rotate(&spinning_other); + } + any_match + } +} + +#[derive(Debug)] +struct Transform3 { + from: [[bool; 3]; 3], + to: [[bool; 4]; 4] +} + +impl Transform3 { + fn rotate(from: &[[bool;3];3]) -> [[bool;3];3] { + [ + [from[2][0],from[1][0],from[0][0]], + [from[2][1],from[1][1],from[0][1]], + [from[2][2],from[1][2],from[0][2]] + ] + } + + fn flip(from: &[[bool;3];3]) -> [[bool;3];3] { + [ + [from[0][2],from[0][1],from[0][0]], + [from[1][2],from[1][1],from[1][0]], + [from[2][2],from[2][1],from[2][0]] + ] + } + + fn matches(&self, other: &[[bool; 3]; 3]) -> bool { + let mut any_match = false; + let mut spinning_other = other.clone(); + for _ in 0..4 { + any_match = any_match || + self.from == spinning_other || + self.from == Transform3::flip(&spinning_other); + + spinning_other = Transform3::rotate(&spinning_other); + } + any_match + } +} diff --git a/2017/src/bin/day_22.rs b/2017/src/bin/day_22.rs new file mode 100644 index 0000000..917ed63 --- /dev/null +++ b/2017/src/bin/day_22.rs @@ -0,0 +1,73 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +use std::collections::HashSet; + +fn main() { + let args = AdventArgs::init(); + let input_width = args.input[0].len(); + let input_height = args.input.len(); + + let mut position = Point { + x: (input_width / 2) as i32, + y: (input_height / 2) as i32, + }; + let mut direction = Direction::Up; + + let mut weakened: HashSet<Point> = HashSet::new(); + let mut infected: HashSet<Point> = HashSet::new(); + let mut flagged: HashSet<Point> = HashSet::new(); + + for (y, line) in args.input.iter().enumerate() { + for (x, c) in line.chars().enumerate() { + if c == '#' { + infected.insert(Point { + x: x as i32, + y: y as i32 + }); + } + } + } + + let mut infections_caused = 0; + + let bursts = if args.part == 1 { + 10_000 + } else { + 10_000_000 + }; + + for _ in 0..bursts { + if args.part == 1 { + if infected.contains(&position) { + direction = direction.rotate_right(); + infected.remove(&position); + } else { + direction = direction.rotate_left(); + infected.insert(position); + infections_caused += 1; + } + } + else { + if weakened.contains(&position) { + infected.insert(position); + weakened.remove(&position); + infections_caused += 1; + } else if infected.contains(&position) { + direction = direction.rotate_right(); + flagged.insert(position); + infected.remove(&position); + } else if flagged.contains(&position) { + direction = direction.rotate_right().rotate_right(); + flagged.remove(&position); + } else { + direction = direction.rotate_left(); + weakened.insert(position); + } + } + position = position.shift(&direction); + } + + println!("Infections caused {}", infections_caused); + +} diff --git a/2017/src/bin/day_23.rs b/2017/src/bin/day_23.rs new file mode 100644 index 0000000..d199af0 --- /dev/null +++ b/2017/src/bin/day_23.rs @@ -0,0 +1,168 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +use std::str::FromStr; + +fn main() { + let args = AdventArgs::init(); + + if args.part == 1 { + let instructions: Vec<Instruction> = args.input.iter() + .map(|line| line.parse().unwrap()) + .collect(); + + let mut program = Program::new(instructions.clone(), args.part == 1); + let mul_called = program.run(); + println!("Mult called {} times", mul_called); + } else { + println!("Result is {}", run_as_rust()); + } + +} + +fn to_register(c: char) -> usize { + (c as u32 - 'a' as u32) as usize +} + +struct Program { + instructions: Vec<Instruction>, + registers: [i64; 8], + pc: i64 +} + +impl Program { + fn new(instructions: Vec<Instruction>, part1: bool) -> Program { + let mut reg = [0; 8]; + if part1 == false { + reg[0] = 1; + } + Program { + instructions: instructions, + registers: reg, + pc: 0 + } + } + fn run(&mut self) -> u32 { + use Instruction::*; + + let mut mul_called = 0; + + while self.pc >= 0 && (self.pc as usize) < self.instructions.len() { + let ins = self.instructions[self.pc as usize].clone(); + + match ins { + Set(x, y) => { + let y_val = self.get(y); + self.set(x, y_val); + }, + Sub(x, y) => { + let x_val = self.get(x); + let y_val = self.get(y); + self.set(x, x_val - y_val); + }, + Mul(x, y) => { + let x_val = self.get(x); + let y_val = self.get(y); + self.set(x, x_val * y_val); + mul_called += 1; + }, + Jnz(x, y) => { + if self.get(x) != 0 { + self.pc = self.pc + self.get(y) - 1; + } + }, + } + self.pc += 1; + } + + mul_called + } + + fn get(&self, register: Data) -> i64 { + use Data::*; + match register { + Register(c) => self.registers[c], + Literal(i) => i + } + } + + fn set(&mut self, register: Data, value: i64) { + use Data::*; + match register { + Register(c) => { + self.registers[c] = value; + }, + _ => {} + } + } +} + +#[derive(Debug, Clone)] +enum Instruction { + Set(Data, Data), + Sub(Data, Data), + Mul(Data, Data), + Jnz(Data, Data) +} + +impl FromStr for Instruction { + type Err = String; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + use Instruction::*; + + let mut str_iter = s.split_whitespace(); + let ins = str_iter.next(); + let x = str_iter.next().map(|x| x.parse::<Data>()); + let y = str_iter.next().map(|x| x.parse::<Data>()); + + match (ins, x, y) { + (Some("set"), Some(Ok(x)), Some(Ok(y))) => Ok(Set(x, y)), + (Some("sub"), Some(Ok(x)), Some(Ok(y))) => Ok(Sub(x, y)), + (Some("mul"), Some(Ok(x)), Some(Ok(y))) => Ok(Mul(x, y)), + (Some("jnz"), Some(Ok(x)), Some(Ok(y))) => Ok(Jnz(x, y)), + (_, _, _) => Err(format!("Unknown instruction {}", s)) + } + } +} + +#[derive(Debug, Clone, Copy)] +enum Data { + Literal(i64), + Register(usize) +} + +impl FromStr for Data { + type Err = String; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + use Data::*; + + match (s.parse(), s.chars().next()) { + (Ok(num), _) => Ok(Literal(num)), + (Err(_), Some(c)) => Ok(Register(to_register(c))), + (_, _) => Err(format!("Invalid data {}", s)) + } + } +} + + +fn run_as_rust() -> i64 { + let mut h: i64 = 0; + let mut b: i64 = 99 * 100 + 100000; + let c: i64 = b + 17000; + + while b <= c { + let f = (2..b).any(|d| { + b % d == 0 + }); + + if f { + h += 1; + } + + b += 17; + } + + h +} diff --git a/2017/src/bin/day_24.rs b/2017/src/bin/day_24.rs new file mode 100644 index 0000000..eb7fddd --- /dev/null +++ b/2017/src/bin/day_24.rs @@ -0,0 +1,60 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + let components: Vec<Component> = args.input.iter() + .map(|line| { + let mut split = line.split('/'); + Component { + a: split.next().unwrap().parse().unwrap(), + b: split.next().unwrap().parse().unwrap() + } + }) + .collect(); + + if args.part == 1 { + let strongest = build_strongest(0, components); + println!("{}", strongest); + } else { + let (strongest, longest) = build_longest(0, components); + println!("length: {}, strength: {}", longest, strongest); + } +} + +fn build_strongest(start: u32, components: Vec<Component>) -> u32 { + components.iter().enumerate() + .filter(|&(_, c)| c.a == start || c.b == start) + .map(|(i, c)| { + let end = if c.a == start { c.b } else { c.a }; + let mut subset = components.clone(); + subset.remove(i); + c.strength() + build_strongest(end, subset) + }).max().unwrap_or(0) +} + +fn build_longest(start: u32, components: Vec<Component>) -> (u32, u32) { + components.iter().enumerate() + .filter(|&(_, c)| c.a == start || c.b == start) + .map(|(i, c)| { + let end = if c.a == start { c.b } else { c.a }; + let mut subset = components.clone(); + subset.remove(i); + let (s, l) = build_longest(end, subset); + (c.strength() + s, 1 + l) + }).max_by(|&(s1, l1), &(s2, l2)| { + l1.cmp(&l2).then(s1.cmp(&s2)) + }).unwrap_or((0, 0)) +} + +#[derive(Debug, Clone)] +struct Component { + a: u32, + b: u32 +} + +impl Component { + fn strength(&self) -> u32 { + self.a + self.b + } +} diff --git a/2017/src/bin/day_25.rs b/2017/src/bin/day_25.rs new file mode 100644 index 0000000..8d7b0da --- /dev/null +++ b/2017/src/bin/day_25.rs @@ -0,0 +1,125 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +extern crate regex; +use regex::Regex; + +use std::slice::Iter; +use std::collections::HashSet; + +fn main() { + let args = AdventArgs::init(); + let program = parse(&args.input); + + let mut position: i32 = 0; + let mut state = program.state(program.start).expect("Started out of program bounds"); + let mut tape = HashSet::new(); + + for _ in 0..program.iterations { + let instruction = if tape.contains(&position) { + &state.if1 + } else { + &state.if0 + }; + if instruction.write { + tape.insert(position); + } else { + tape.remove(&position); + } + position += instruction.offset; + state = program.state(instruction.next).expect("Redirected to unknown state"); + } + + println!("{}", tape.len()); +} + +fn parse(input: &Vec<String>) -> Program { + let state_re = Regex::new(r"state (\w)").unwrap(); + let iterations_re = Regex::new(r"(\d+) steps").unwrap(); + let write_re = Regex::new(r"Write the value (\d)").unwrap(); + let move_re = Regex::new(r"Move one slot to the (\w+)").unwrap(); + + let mut lines = input.iter(); + let start = parse_char(&mut lines, &state_re); + let iterations = parse_number(&mut lines, &iterations_re); + + let mut states = Vec::new(); + while let Some(heading) = lines.next() { + states.push(State { + id: state_re.captures(heading).unwrap()[1].chars().next().unwrap(), + if0: parse_instruction(&mut lines, &write_re, &move_re, &state_re), + if1: parse_instruction(&mut lines, &write_re, &move_re, &state_re) + }); + } + + Program { + start: start, + iterations: iterations, + states: states + } +} + +fn parse_char(lines: &mut Iter<String>, re: &Regex) -> char { + re.captures( + lines.next().unwrap() + ).unwrap()[1].chars().next().unwrap() +} + +fn parse_number(lines: &mut Iter<String>, re: &Regex) -> u32 { + re.captures( + lines.next().unwrap() + ).unwrap()[1].parse().unwrap() +} +fn parse_direction(lines: &mut Iter<String>, re: &Regex) -> i32 { + if re.captures( + lines.next().unwrap() + ).unwrap()[1] == *"left" { + -1 + } else { + 1 + } +} + +fn parse_bool(lines: &mut Iter<String>, re: &Regex) -> bool { + re.captures( + lines.next().unwrap() + ).unwrap()[1] == *"1" +} + +fn parse_instruction(lines: &mut Iter<String>, write_re: &Regex, offset_re: &Regex, next_re: &Regex) -> Instruction { + lines.next(); + Instruction { + write: parse_bool(lines, &write_re), + offset: parse_direction(lines, &offset_re), + next: parse_char(lines, &next_re) + } +} + +#[derive(Debug)] +struct Program { + start: char, + iterations: u32, + states: Vec<State> +} + +impl Program { + fn state(&self, i: char) -> Option<&State> { + self.states.iter().find(|s| s.id == i) + } +} + +#[derive(Debug)] +struct State { + id: char, + if0: Instruction, + if1: Instruction +} + +#[derive(Debug)] +struct Instruction { + write: bool, + offset: i32, + next: char +} + + diff --git a/2017/src/bin/day_3.rs b/2017/src/bin/day_3.rs new file mode 100644 index 0000000..69ded88 --- /dev/null +++ b/2017/src/bin/day_3.rs @@ -0,0 +1,62 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +use std::collections::HashMap; + +fn main() { + use Direction::*; + + let args = AdventArgs::init(); + let input = args.one_number_input().unwrap(); + + let mut memory: HashMap<Point, i32> = HashMap::new(); + let mut last_allocated = 1; + + let mut current = Point { + x: 0, + y: 0 + }; + memory.insert(current, last_allocated); + + let mut steps_per_direction = 1; + let mut steps_to_next_turn = 1; + let mut turns_to_spiral_increase = 2; + + let mut current_index = 1; + let mut current_direction = Right; + + while (args.part == 1 && current_index != input) || (args.part == 2 && last_allocated < input) { + current = current.shift(¤t_direction); + current_index += 1; + + steps_to_next_turn -= 1; + if steps_to_next_turn == 0 { + current_direction = current_direction.rotate_left(); + turns_to_spiral_increase -= 1; + if turns_to_spiral_increase == 0 { + steps_per_direction += 1; + turns_to_spiral_increase = 2; + } + + steps_to_next_turn = steps_per_direction; + } + + if args.part == 2 { + last_allocated = memory.get(¤t.left()).cloned().unwrap_or(0) + + memory.get(¤t.right()).cloned().unwrap_or(0) + + memory.get(¤t.up()).cloned().unwrap_or(0) + + memory.get(¤t.down()).cloned().unwrap_or(0) + + memory.get(¤t.up().left()).cloned().unwrap_or(0) + + memory.get(¤t.up().right()).cloned().unwrap_or(0) + + memory.get(¤t.down().left()).cloned().unwrap_or(0) + + memory.get(¤t.down().right()).cloned().unwrap_or(0); + + memory.insert(current, last_allocated); + } + } + + println!("{:?}", current); + println!("Distance: {}", current.x.abs() + current.y.abs()); + println!("Last Allocated Value: {}", last_allocated); + +} diff --git a/2017/src/bin/day_4.rs b/2017/src/bin/day_4.rs new file mode 100644 index 0000000..a9a098a --- /dev/null +++ b/2017/src/bin/day_4.rs @@ -0,0 +1,37 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + + let valid_count = args.input.iter() + .map(|line| { + let words = line.split_whitespace().map(|x| x.to_string()).collect::<Vec<String>>(); + if args.part == 1 { + let mut deduped_words = words.clone(); + deduped_words.sort(); + deduped_words.dedup(); + words.len() == deduped_words.len() + } else { + !words.iter().enumerate().any(|(i, word1)| { + words.iter().enumerate().any(|(j, word2)| { + i != j && is_anagram(word1, word2) + }) + }) + } + }) + .filter(|&valid| valid) + .count(); + + println!("Valid count: {}", valid_count); +} + +fn is_anagram(word1: &str, word2: &str) -> bool { + let mut chars1 = word1.chars().collect::<Vec<_>>(); + chars1.sort(); + let mut chars2 = word2.chars().collect::<Vec<_>>(); + chars2.sort(); + + chars1.len() == chars2.len() && + chars1.iter().zip(chars2.iter()).all(|(c1, c2)| c1 == c2) +} diff --git a/2017/src/bin/day_5.rs b/2017/src/bin/day_5.rs new file mode 100644 index 0000000..49bdbd1 --- /dev/null +++ b/2017/src/bin/day_5.rs @@ -0,0 +1,25 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + + let mut jumps: Vec<i32> = args.input.iter().map(|line| line.parse().unwrap()).collect(); + let mut steps_taken = 0; + let mut current_position: i32 = 0; + + while current_position >= 0 && (current_position as usize) < jumps.len() { + let previous_position = current_position; + current_position += jumps[current_position as usize]; + + if args.part == 1 || jumps[previous_position as usize] < 3 { + jumps[previous_position as usize] += 1; + } else { + jumps[previous_position as usize] -= 1; + } + + steps_taken += 1; + } + + println!("Escaped in {} jumps", steps_taken); +} diff --git a/2017/src/bin/day_6.rs b/2017/src/bin/day_6.rs new file mode 100644 index 0000000..be9a515 --- /dev/null +++ b/2017/src/bin/day_6.rs @@ -0,0 +1,61 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + + let init_layout = parse_space_separated_ints(&args.input[0]).unwrap(); + + let mut layouts = vec!(init_layout); + let mut balances = 0; + let mut cycle_found = false; + let mut cycle_size = 0; + + while !cycle_found { + balances += 1; + let new_layout = find_next_layout(&layouts); + + if let Some(index) = layouts.iter().position(|x| *x == new_layout) { + cycle_found = true; + cycle_size = layouts.len() - index; + }; + + layouts.push(new_layout); + } + + if args.part == 1 { + println!("Did {} rebalances", balances); + } else { + println!("Cycle was {} long", cycle_size); + } +} + +fn find_next_layout(layouts: &Vec<Vec<i32>>) -> Vec<i32> { + let previous_layout = layouts.last().unwrap(); + rebalance(&previous_layout) +} + +fn rebalance(layout: &Vec<i32>) -> Vec<i32> { + let biggest_container = layout.iter() + .enumerate() + .max_by(|&(ai, &asize), &(bi, &bsize)| { + asize.cmp(&bsize).then(bi.cmp(&ai)) + }) + .map(|(i, _)| i) + .unwrap(); + + + let mut new_layout = layout.clone(); + let mut to_redistribute = new_layout[biggest_container]; + new_layout[biggest_container] = 0; + let mut target = (biggest_container + 1) % layout.len(); + + while to_redistribute > 0 { + new_layout[target] += 1; + to_redistribute -= 1; + target = (target + 1) % layout.len(); + } + + new_layout +} + diff --git a/2017/src/bin/day_7.rs b/2017/src/bin/day_7.rs new file mode 100644 index 0000000..3c3b185 --- /dev/null +++ b/2017/src/bin/day_7.rs @@ -0,0 +1,62 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +extern crate regex; +use regex::Regex; + +fn main() { + let args = AdventArgs::init(); + + let names_re = Regex::new(r"[a-z]+").unwrap(); + let weight_re = Regex::new(r"\d+").unwrap(); + + let tree: Vec<(String, Vec<String>, i32)> = args.input.iter() + .map(|line| { + let mut matches = names_re.find_iter(line); + let base = matches.next().unwrap().as_str().to_string(); + let leaves = matches.map(|m| m.as_str().to_string()).collect(); + let weight = weight_re.find(line).unwrap().as_str().parse().unwrap(); + (base, leaves, weight) + }).collect(); + + let mut possible_roots: Vec<String> = tree.iter().map(|&(ref id, _, _)| id.clone()).collect(); + for &(_, ref leaves, _) in &tree { + for leaf in leaves { + let index = possible_roots.iter().position(|x| x == leaf).unwrap(); + possible_roots.remove(index); + } + } + let root = &possible_roots[0]; + + if args.part == 1 { + println!("{:?}", root); + } else { + find_unweighted_plate(&root, &tree); + } +} + +fn find_unweighted_plate(root: &String, tree: &Vec<(String, Vec<String>, i32)>) -> i32 { + let root_node = find_node(&root, &tree); + let &(_, ref leaves, ref weight) = root_node; + let leaf_weights: Vec<i32> = leaves.iter().map(|leaf| { + find_unweighted_plate(&leaf, &tree) + }).collect(); + + if let Some(base_leaf_weight) = leaf_weights.first() { + if let Some(different_leaf_weight) = leaf_weights.iter().find(|&w| w != base_leaf_weight) { + println!("Unbalanced plate is off by {}", (different_leaf_weight-base_leaf_weight).abs()); + println!("Towers on plate: {:?} weigh {:?}", leaves, leaf_weights); + // This still needs some manual work to get to the puzzle + // output. Take the first unbalanced plate, figure out + // which is the unbalanced tower visually, find its + // individual weight in the file, and add/subtract as + // necessary. + } + } + + leaf_weights.iter().sum::<i32>() + weight +} + +fn find_node<'a>(name: &String, tree: &'a Vec<(String, Vec<String>, i32)>) -> &'a (String, Vec<String>, i32) { + tree.iter().find(|&&(ref id, _, _)| id == name).unwrap() +} diff --git a/2017/src/bin/day_8.rs b/2017/src/bin/day_8.rs new file mode 100644 index 0000000..0359747 --- /dev/null +++ b/2017/src/bin/day_8.rs @@ -0,0 +1,99 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +extern crate regex; +use regex::Regex; + +#[macro_use] +extern crate lazy_static; + +use std::str::FromStr; +use std::collections::HashMap; +use std::cmp; + +fn main() { + let args = AdventArgs::init(); + + let instructions: Vec<Instruction> = args.input.iter() + .map(|line| line.parse().unwrap()) + .collect(); + + let mut memory: HashMap<String, i32> = HashMap::new(); + let mut max_mem_ever = 0; + + for instruction in instructions { + if instruction.is_true(&memory) { + instruction.execute(&mut memory); + max_mem_ever = cmp::max(max_mem_ever, memory.values().max().cloned().unwrap_or(0)); + } + } + + let max_mem = memory.values().max().cloned().unwrap_or(0); + + if args.part == 1 { + println!("Highest value in memory is {}", max_mem); + } else { + println!("Highest value in memory ever is {}", max_mem_ever); + } +} + + +struct Instruction { + target_register: String, + action: String, + value: i32, + condition_register: String, + condition: String, + condition_value: i32 +} + +#[derive(Debug)] +struct InstructionParseError { + reason: String +} + +impl FromStr for Instruction { + type Err = InstructionParseError; + fn from_str(s: &str) -> Result<Self, InstructionParseError> { + lazy_static!{ + static ref INSTRUCTION_RE: Regex = Regex::new(r"^(\w+) (inc|dec) (-?\d+) if (\w+) (<|>|<=|>=|==|!=) (-?\d+)").unwrap(); + } + match INSTRUCTION_RE.captures(s) { + Some(caps) => Ok(Instruction{ + target_register: caps[1].to_string(), + action: caps[2].to_string(), + value: caps[3].parse().unwrap(), + condition_register: caps[4].to_string(), + condition: caps[5].to_string(), + condition_value: caps[6].parse().unwrap() + }), + None => Err(InstructionParseError { + reason: format!("{} did not match regex", s) + }) + } + } +} + +impl Instruction { + fn is_true(&self, memory: &HashMap<String, i32>) -> bool { + let mem = memory.get(&self.condition_register).cloned().unwrap_or(0); + match self.condition.as_ref() { + "<" => mem < self.condition_value, + ">" => mem > self.condition_value, + "<=" => mem <= self.condition_value, + ">=" => mem >= self.condition_value, + "==" => mem == self.condition_value, + "!=" => mem != self.condition_value, + _ => panic!("Unknown condition: {}", self.condition) + } + } + + fn execute(&self, memory: &mut HashMap<String, i32>) { + let modifier = if self.action == "inc" { + self.value + } else { + -self.value + }; + *memory.entry(self.target_register.clone()).or_insert(0) += modifier; + } +} diff --git a/2017/src/bin/day_9.rs b/2017/src/bin/day_9.rs new file mode 100644 index 0000000..e0ca0c0 --- /dev/null +++ b/2017/src/bin/day_9.rs @@ -0,0 +1,42 @@ +extern crate advent_of_code_2017; +use advent_of_code_2017::*; + +fn main() { + let args = AdventArgs::init(); + + let mut cancelled = false; + let mut in_garbage = false; + + let mut depth = 0; + let mut total_score = 0; + let mut total_garbage = 0; + + for c in args.input[0].chars() { + if cancelled { + cancelled = false; + } else if c == '!' { + cancelled = true; + } else if in_garbage { + if c == '>' { + in_garbage = false; + } else { + total_garbage += 1; + } + } else { + if c == '<' { + in_garbage = true; + } else if c == '{' { + depth += 1; + total_score += depth; + } else if c == '}' { + depth -= 1; + } + } + } + + if args.part == 1 { + println!("Total score is {}", total_score); + } else { + println!("Total garbage is {}", total_garbage); + } +} diff --git a/2017/src/lib.rs b/2017/src/lib.rs new file mode 100644 index 0000000..53d7d20 --- /dev/null +++ b/2017/src/lib.rs @@ -0,0 +1,225 @@ +extern crate structopt; +#[macro_use] +extern crate structopt_derive; +use structopt::StructOpt; + +use std::path::PathBuf; +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; +use std::process; + +#[derive(StructOpt, Debug)] +#[structopt(name = "AOC2017", about = "An Advent of Code CLI arguments object.")] +struct AdventCli { + #[structopt(help = "Which part of the puzzle you are solving")] + part: u32, + + #[structopt(help = "Input file", parse(from_os_str))] + input: PathBuf +} + +pub struct AdventArgs { + pub part: u32, + pub input: Vec<String> +} + +impl AdventArgs { + pub fn init() -> AdventArgs { + let opt = AdventCli::from_args(); + let input = match AdventArgs::read_file(&opt.input) { + Ok(input) => input, + Err(error) => { + // Typically I would think of exiting the program like + // this to be bad form, but in this case I'm matching the + // interface of StructOpt: if the input parameters were + // invalid, just quit now with a nice message. + eprintln!("Error reading file: {}", error); + process::exit(1); + } + }; + AdventArgs { + part: opt.part, + input: input + } + } + + fn read_file(file: &PathBuf) -> Result<Vec<String>, std::io::Error> { + let file = File::open(file)?; + let file_reader = BufReader::new(file); + file_reader.lines() + .collect::<Result<Vec<_>, _>>() + .map(AdventArgs::preprocess_file_lines) + } + + fn preprocess_file_lines(lines: Vec<String>) -> Vec<String> { + lines.iter() + .filter(|line| line.len() > 0) + .map(|line| line.trim_right().to_string()) + .collect() + } + + pub fn one_number_input(&self) -> Result<i32, std::num::ParseIntError> { + self.input[0].parse() + } + pub fn number_per_line_input(&self) -> Result<Vec<i32>, std::num::ParseIntError> { + self.input.iter().map(|line| line.parse()).collect() + } +} + +pub fn parse_space_separated_ints(line: &String) -> Result<Vec<i32>, std::num::ParseIntError> { + line.split_whitespace() + .map(|x| x.parse::<i32>()) + .collect() +} + + +#[derive(Hash, Eq, PartialEq, Debug, Clone, Copy)] +pub struct Point { + pub x: i32, + pub y: i32 +} + +impl Point { + pub fn up(&self) -> Point { + Point { + y: self.y-1, + ..*self + } + } + + pub fn down(&self) -> Point { + Point { + y: self.y+1, + ..*self + } + } + + pub fn left(&self) -> Point { + Point { + x: self.x-1, + ..*self + } + } + + pub fn right(&self) -> Point { + Point { + x: self.x+1, + ..*self + } + } + + pub fn shift(&self, dir: &Direction) -> Point { + use Direction::*; + + match *dir { + Right => self.right(), + Left => self.left(), + Up => self.up(), + Down => self.down() + } + } +} + +#[derive(Debug)] +pub enum Direction { + Left, + Up, + Down, + Right +} + +impl Direction { + pub fn rotate_left(&self) -> Direction { + use Direction::*; + match *self { + Right => Up, + Up => Left, + Left => Down, + Down => Right + } + } + + pub fn rotate_right(&self) -> Direction { + use Direction::*; + match *self { + Right => Down, + Up => Right, + Left => Up, + Down => Left + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub struct Point3d { + pub x: i32, + pub y: i32, + pub z: i32 +} + +impl std::ops::Add for Point3d { + type Output = Point3d; + + fn add(self, other: Point3d) -> Point3d { + Point3d { + x: self.x + other.x, + y: self.y + other.y, + z: self.z + other.z + } + } + +} + +impl Point3d { + pub fn manhattan_distance(&self) -> i32 { + self.x.abs() + self.y.abs() + self.z.abs() + } +} + +pub fn knot_hash(input: &String) -> String { + let suffix: [usize; 5] = [17, 31, 73, 47, 23]; + let lengths: Vec<usize> = input.as_bytes() + .iter().map(|&x| x as usize) + .chain(suffix.iter().cloned()) + .collect(); + + let mut position = 0; + let mut list: Vec<u32> = (0..256).collect(); + + for i in 0..64 { + let skip = lengths.len() * i; + knot_hash_round(&mut list, &lengths, &mut position, skip); + } + + let mut current_char = 0; + let mut result = String::new(); + for (i, l) in list.iter().enumerate() { + current_char = current_char ^ l; + if i % 16 == 15 { + result.push_str(&format!("{:02x}", current_char)); + current_char = 0; + } + } + result +} + +fn knot_hash_round(list: &mut Vec<u32>, lengths: &Vec<usize>, position: &mut usize, skip: usize) { + for (inner_skip, &length) in lengths.iter().enumerate() { + knot_hash_reverse_segment(list, *position, length); + *position = (*position + length + skip + inner_skip) % list.len(); + } +} + +fn knot_hash_reverse_segment(list: &mut Vec<u32>, position: usize, length: usize) { + let mut a = position; + let mut b = position + length - 1; + let len = list.len(); + while a < b { + list.swap(a%len, b%len); + + a += 1; + b -= 1; + } +} + diff --git a/2018/Cargo.toml b/2018/Cargo.toml new file mode 100644 index 0000000..b1342d1 --- /dev/null +++ b/2018/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "advent_of_code_2018" +version = "0.1.0" +authors = ["Justin Worthe <justin@worthe-it.co.za>"] + +[dependencies] +im-rc = "12.2.0" +arrayvec = "0.4.9" + +[profile.release] +debug = true diff --git a/2018/inputs/1.txt b/2018/inputs/1.txt new file mode 100644 index 0000000..079567f --- /dev/null +++ b/2018/inputs/1.txt @@ -0,0 +1,968 @@ ++11 ++9 ++15 +-17 ++8 ++16 ++5 ++13 ++8 +-6 ++12 +-17 +-16 ++13 ++16 +-15 +-5 ++11 ++19 ++5 +-8 ++20 ++18 ++15 +-4 +-12 ++8 ++2 ++15 ++12 +-13 +-4 +-1 +-14 +-15 +-6 +-9 +-13 ++18 ++13 ++6 +-8 +-3 +-19 ++8 ++17 ++8 ++5 +-11 ++15 +-7 ++9 +-18 +-9 ++17 +-14 +-19 ++4 +-6 ++4 ++1 +-12 ++4 +-1 +-9 ++4 ++19 ++20 ++11 ++8 ++19 +-13 ++17 ++6 ++8 +-11 ++5 ++9 +-15 ++17 +-12 ++6 +-19 +-2 ++17 +-18 ++7 +-5 ++19 ++15 ++5 +-6 ++2 ++5 ++18 ++11 ++2 ++5 +-14 ++17 ++17 ++1 ++17 +-9 +-1 ++5 +-11 ++5 +-17 ++2 ++14 ++16 +-3 ++17 ++18 ++1 +-16 ++19 +-11 +-10 ++3 ++8 ++17 ++19 +-18 ++6 +-1 +-2 ++14 +-2 ++12 ++11 ++1 +-19 +-1 ++18 ++13 +-6 +-10 +-13 ++12 +-11 ++19 ++14 ++17 +-2 +-18 +-4 ++11 +-12 +-2 +-21 ++7 +-1 +-5 +-13 +-18 +-18 +-7 ++9 ++12 ++6 +-12 ++20 +-19 ++6 +-19 ++3 +-16 ++20 +-17 +-8 ++4 ++8 +-21 ++18 +-6 +-13 ++2 ++5 +-14 +-16 +-19 +-17 ++4 +-15 +-11 +-3 ++6 ++13 ++18 +-16 +-16 +-15 +-15 +-2 ++1 +-3 ++13 ++25 ++1 ++14 +-8 +-8 +-19 ++7 ++11 ++20 ++5 +-9 ++8 ++19 +-9 ++3 ++1 ++1 +-12 ++18 ++15 +-5 ++11 +-1 ++18 +-2 +-18 +-14 +-1 +-16 ++12 ++12 +-20 ++10 ++25 +-13 +-17 +-20 +-13 ++11 +-40 +-19 ++5 +-21 +-9 +-15 +-6 ++3 ++13 +-5 +-2 ++33 ++3 +-7 ++42 ++32 +-13 ++2 ++37 +-1 +-20 ++30 ++3 ++8 ++10 ++11 +-5 +-26 ++35 ++16 +-12 ++9 ++16 ++18 +-13 +-15 ++19 ++6 ++18 ++16 ++11 ++16 +-2 +-10 ++1 +-2 ++17 ++7 +-1 ++17 ++6 ++15 ++7 +-5 +-6 ++9 +-4 +-17 +-14 +-1 +-21 +-2 ++15 ++3 ++8 +-18 +-17 +-14 ++6 +-17 ++20 ++13 ++14 +-1 +-1 ++3 +-11 ++19 ++19 ++7 +-18 +-9 ++11 +-12 ++11 ++4 ++2 ++8 +-2 ++6 +-20 ++5 ++6 +-13 +-8 ++6 ++11 ++8 ++2 ++7 ++11 +-7 ++18 ++11 ++15 +-16 +-18 ++6 ++10 ++6 ++15 ++13 ++4 ++4 ++14 ++14 +-47 ++17 +-7 +-20 +-1 ++19 ++16 +-23 +-13 +-17 ++13 +-8 ++6 +-20 ++4 ++15 ++4 ++19 ++19 +-7 +-24 +-17 +-19 +-2 ++19 +-13 ++8 +-4 +-19 +-9 ++29 ++21 +-29 ++2 ++15 ++22 ++1 ++21 +-13 +-14 ++12 +-57 +-5 +-49 +-10 +-19 +-19 +-6 ++7 ++21 +-12 +-13 +-13 ++4 +-15 ++9 ++21 +-7 ++19 ++32 ++31 +-27 +-21 ++25 +-101 ++69 +-75 ++26 +-22 +-45 +-30 ++5 +-40 +-15 +-880 +-60727 ++14 +-13 +-18 ++7 ++2 +-5 ++6 ++14 ++5 ++5 +-18 +-15 +-9 ++7 +-10 ++19 ++4 ++7 ++6 ++3 ++21 ++2 ++5 +-19 ++15 +-11 +-19 +-7 +-1 +-16 ++4 +-12 +-15 ++3 ++5 +-6 +-14 ++11 +-16 +-7 +-15 ++8 ++12 +-2 +-9 +-12 +-17 ++19 +-5 +-19 ++16 +-10 +-13 +-14 +-1 +-10 +-18 +-6 +-11 ++8 +-11 ++4 ++14 ++9 ++8 +-18 +-9 ++8 +-19 +-5 +-14 ++13 ++19 ++13 ++16 ++19 +-4 +-4 ++3 ++19 +-4 +-7 +-15 ++6 +-9 +-15 ++12 +-14 ++6 +-17 ++9 ++13 +-4 +-20 ++17 +-9 +-12 ++16 ++6 +-9 ++19 ++10 ++11 ++17 +-19 +-1 ++12 ++12 ++1 +-6 +-1 ++4 +-12 ++11 +-14 ++19 +-3 +-9 +-6 +-23 +-2 +-13 ++18 +-2 ++10 ++2 ++8 +-9 +-20 +-17 +-21 +-14 ++11 +-5 +-15 ++2 +-9 ++4 +-7 +-12 ++9 +-1 +-11 ++1 +-10 ++11 +-17 +-10 +-17 +-3 +-10 ++11 ++15 +-19 +-14 ++1 ++2 ++18 ++17 ++3 ++17 +-18 +-15 ++2 +-3 +-14 ++9 ++9 ++6 +-18 ++13 +-21 +-18 ++12 ++7 ++13 +-11 ++20 ++12 ++1 ++15 +-14 ++4 ++11 ++18 +-2 +-7 +-12 +-11 ++5 ++10 ++6 ++8 ++18 ++6 +-13 ++19 +-5 +-3 ++14 +-3 +-20 +-3 +-3 ++16 +-15 +-12 ++8 +-24 +-16 +-13 +-3 ++13 ++6 +-12 +-31 ++7 +-18 ++17 +-13 ++1 +-15 ++16 ++4 +-1 +-17 +-1 ++16 +-4 ++13 ++8 ++3 ++33 ++8 +-6 ++20 +-4 ++2 ++13 +-29 +-17 +-22 +-24 +-5 ++2 +-12 +-1 ++2 +-15 ++2 +-11 ++6 ++1 +-2 ++5 ++4 +-22 ++5 ++19 +-13 +-7 ++16 ++6 ++2 +-22 ++19 ++9 ++8 +-9 +-12 +-18 +-13 ++1 ++5 +-9 ++10 +-11 +-10 ++16 +-15 +-2 +-16 ++1 +-15 +-17 +-3 ++6 ++11 ++4 ++11 +-16 +-3 ++6 +-1 ++13 ++18 ++6 +-2 +-6 +-4 +-5 ++20 ++19 +-8 ++1 +-13 ++16 ++1 ++10 +-25 +-19 +-4 ++9 +-8 ++17 ++6 +-19 +-2 ++5 ++12 ++7 +-21 +-12 ++3 +-7 +-11 +-3 +-18 ++2 ++12 ++20 +-23 +-19 +-17 ++9 +-19 ++1 +-14 +-5 +-4 +-9 ++17 ++4 ++3 ++15 +-13 ++1 +-12 +-17 ++8 ++8 +-20 +-17 ++15 +-16 ++10 ++7 ++2 +-10 +-2 ++8 ++19 +-6 +-17 +-8 ++9 ++17 ++25 +-5 +-18 ++4 ++18 ++9 ++18 +-14 +-2 ++11 ++14 +-17 +-15 ++38 ++12 +-2 ++14 ++4 ++21 ++16 ++12 ++15 ++23 +-1 ++6 ++9 +-24 +-6 +-13 +-3 ++33 +-13 ++62 ++81 ++11 +-5 +-27 ++9 +-7 ++20 +-19 +-4 ++27 ++28 +-29 ++82 ++11 +-10 ++8 +-22 ++42 ++34 +-24 +-15 ++19 +-66 +-70 +-34 +-18 +-548 ++408 +-1249 +-60542 ++6 +-17 +-4 ++6 +-7 ++3 ++14 ++2 ++15 +-6 +-5 ++19 +-17 +-10 ++6 +-11 ++2 +-4 ++10 +-5 +-11 +-13 +-12 +-14 +-10 +-9 ++17 ++9 ++15 ++1 +-10 +-10 ++14 ++16 +-17 +-15 ++7 +-6 +-16 +-10 ++15 +-2 +-7 +-3 +-5 +-14 +-8 +-9 ++16 ++7 ++17 +-22 ++12 +-16 ++18 ++5 ++15 ++10 ++20 ++11 +-5 ++12 +-16 ++8 +-16 ++13 ++14 +-5 +-12 +-9 +-16 +-5 ++16 +-18 ++21 +-9 +-13 +-8 +-10 ++14 ++18 +-17 +-16 ++8 +-15 ++2 +-4 ++3 +-21 ++17 +-16 ++18 ++18 +-3 +-21 ++1 +-19 +-3 +-2 +-4 +-5 +-20 +-19 ++6 +-19 ++3 +-12 ++124236 diff --git a/2018/inputs/10.txt b/2018/inputs/10.txt new file mode 100644 index 0000000..3c77538 --- /dev/null +++ b/2018/inputs/10.txt @@ -0,0 +1,369 @@ +position=<-30052, -9918> velocity=< 3, 1> +position=< 20349, -50260> velocity=<-2, 5> +position=< 40505, -40169> velocity=<-4, 4> +position=< 30444, 50599> velocity=<-3, -5> +position=< 40549, -50259> velocity=<-4, 5> +position=< 30454, -30087> velocity=<-3, 3> +position=< 50623, 20347> velocity=<-5, -2> +position=< 30439, -50262> velocity=<-3, 5> +position=< 50623, 40516> velocity=<-5, -4> +position=<-40143, -30090> velocity=< 4, 3> +position=< 50594, 50602> velocity=<-5, -5> +position=< -9884, -30087> velocity=< 1, 3> +position=<-19958, -40168> velocity=< 2, 4> +position=< 20357, 40513> velocity=<-2, -4> +position=<-50240, 30431> velocity=< 5, -3> +position=< 20351, 40516> velocity=<-2, -4> +position=<-50257, -20005> velocity=< 5, 2> +position=<-30073, 10253> velocity=< 3, -1> +position=<-50265, 50597> velocity=< 5, -5> +position=<-40154, 50601> velocity=< 4, -5> +position=<-19987, -40168> velocity=< 2, 4> +position=<-19987, -30087> velocity=< 2, 3> +position=<-50257, 30425> velocity=< 5, -3> +position=< 40558, 30425> velocity=<-4, -3> +position=<-19990, 10256> velocity=< 2, -1> +position=<-19979, 30425> velocity=< 2, -3> +position=<-19976, -50254> velocity=< 2, 5> +position=< 30446, -40172> velocity=<-3, 4> +position=<-40157, 40515> velocity=< 4, -4> +position=<-40143, 20342> velocity=< 4, -2> +position=< 30467, -50255> velocity=<-3, 5> +position=<-30040, 50606> velocity=< 3, -5> +position=<-30037, 50605> velocity=< 3, -5> +position=< 20382, -30086> velocity=<-2, 3> +position=< 50594, 10262> velocity=<-5, -1> +position=< 20342, 40515> velocity=<-2, -4> +position=<-19963, -50258> velocity=< 2, 5> +position=<-40135, 50599> velocity=< 4, -5> +position=< 40558, 10262> velocity=<-4, -1> +position=< 20366, -40177> velocity=<-2, 4> +position=< -9888, -9919> velocity=< 1, 1> +position=<-19998, 40511> velocity=< 2, -4> +position=< 50608, 40516> velocity=<-5, -4> +position=< 10263, 40520> velocity=<-1, -4> +position=< 40521, -40171> velocity=<-4, 4> +position=< 30427, -20005> velocity=<-3, 2> +position=< 20333, -9916> velocity=<-2, 1> +position=< -9909, -9913> velocity=< 1, 1> +position=< 50628, 40511> velocity=<-5, -4> +position=< 50610, 30430> velocity=<-5, -3> +position=<-50248, 30433> velocity=< 5, -3> +position=< 50612, 50599> velocity=<-5, -5> +position=<-50253, -40170> velocity=< 5, 4> +position=< -9880, 40513> velocity=< 1, -4> +position=< 20362, 10256> velocity=<-2, -1> +position=< -9877, -30087> velocity=< 1, 3> +position=<-40182, -30082> velocity=< 4, 3> +position=<-50240, -20003> velocity=< 5, 2> +position=<-40138, 10255> velocity=< 4, -1> +position=<-50221, 20348> velocity=< 5, -2> +position=< -9896, -9917> velocity=< 1, 1> +position=<-50209, 40516> velocity=< 5, -4> +position=< 20352, 50602> velocity=<-2, -5> +position=< 50607, -19998> velocity=<-5, 2> +position=<-19995, -30087> velocity=< 2, 3> +position=<-20003, 40517> velocity=< 2, -4> +position=<-50219, 30431> velocity=< 5, -3> +position=< 40521, -20001> velocity=<-4, 2> +position=<-30036, 20339> velocity=< 3, -2> +position=< 50624, 10257> velocity=<-5, -1> +position=<-50224, 40517> velocity=< 5, -4> +position=< -9907, 20344> velocity=< 1, -2> +position=< 40534, -40169> velocity=<-4, 4> +position=<-30065, -20003> velocity=< 3, 2> +position=< -9922, 20339> velocity=< 1, -2> +position=<-30052, 50602> velocity=< 3, -5> +position=< 10276, -50263> velocity=<-1, 5> +position=< 50594, 10258> velocity=<-5, -1> +position=< -9876, 10258> velocity=< 1, -1> +position=<-20001, -30091> velocity=< 2, 3> +position=<-50253, 50602> velocity=< 5, -5> +position=<-40159, -20002> velocity=< 4, 2> +position=<-50224, -30091> velocity=< 5, 3> +position=<-20001, 40511> velocity=< 2, -4> +position=< 20357, -40173> velocity=<-2, 4> +position=< 50615, 10255> velocity=<-5, -1> +position=< -9877, -50254> velocity=< 1, 5> +position=< 30440, 40516> velocity=<-3, -4> +position=< 30427, 50605> velocity=<-3, -5> +position=< 30419, -30090> velocity=<-3, 3> +position=< 20376, -20001> velocity=<-2, 2> +position=< 10255, 20344> velocity=<-1, -2> +position=< 30419, 20344> velocity=<-3, -2> +position=< 50595, -40169> velocity=<-5, 4> +position=<-30081, 40513> velocity=< 3, -4> +position=<-40143, -30090> velocity=< 4, 3> +position=< 40553, 20344> velocity=<-4, -2> +position=< 40529, -40170> velocity=<-4, 4> +position=< 30427, -50262> velocity=<-3, 5> +position=<-50240, -19996> velocity=< 5, 2> +position=<-50245, -30090> velocity=< 5, 3> +position=< 30448, -30087> velocity=<-3, 3> +position=< -9875, -40171> velocity=< 1, 4> +position=< -9900, 50599> velocity=< 1, -5> +position=<-19954, -40168> velocity=< 2, 4> +position=< 40526, 40518> velocity=<-4, -4> +position=<-20011, 30428> velocity=< 2, -3> +position=< 10283, 10257> velocity=<-1, -1> +position=<-40175, 40520> velocity=< 4, -4> +position=< 50636, -9915> velocity=<-5, 1> +position=< -9904, 10255> velocity=< 1, -1> +position=< 30435, 40520> velocity=<-3, -4> +position=< 30424, -50254> velocity=<-3, 5> +position=< 20393, 50602> velocity=<-2, -5> +position=<-50261, -30083> velocity=< 5, 3> +position=<-30065, 10254> velocity=< 3, -1> +position=<-30052, -40177> velocity=< 3, 4> +position=< 50625, -50263> velocity=<-5, 5> +position=<-40142, -20001> velocity=< 4, 2> +position=< 20338, -19996> velocity=<-2, 2> +position=< 50599, 50604> velocity=<-5, -5> +position=< 40534, -40176> velocity=<-4, 4> +position=<-50235, 20339> velocity=< 5, -2> +position=<-30068, -9918> velocity=< 3, 1> +position=<-40173, 20339> velocity=< 4, -2> +position=<-30054, -9915> velocity=< 3, 1> +position=< 10255, 20348> velocity=<-1, -2> +position=<-40162, 40520> velocity=< 4, -4> +position=<-40158, -9918> velocity=< 4, 1> +position=< 40508, 20348> velocity=<-4, -2> +position=< 10307, -40177> velocity=<-1, 4> +position=< 40545, -50261> velocity=<-4, 5> +position=<-30073, -40172> velocity=< 3, 4> +position=<-50209, -9918> velocity=< 5, 1> +position=< -9913, 40515> velocity=< 1, -4> +position=< -9873, -50262> velocity=< 1, 5> +position=< -9877, 10261> velocity=< 1, -1> +position=<-50245, -30084> velocity=< 5, 3> +position=< 30440, 50606> velocity=<-3, -5> +position=<-40167, 40514> velocity=< 4, -4> +position=<-30076, -50255> velocity=< 3, 5> +position=< -9891, -19996> velocity=< 1, 2> +position=< -9877, 20340> velocity=< 1, -2> +position=< 20365, -9911> velocity=<-2, 1> +position=<-50256, 10253> velocity=< 5, -1> +position=< -9909, -19996> velocity=< 1, 2> +position=< 30479, -9919> velocity=<-3, 1> +position=<-30065, 10257> velocity=< 3, -1> +position=< 50652, -9919> velocity=<-5, 1> +position=< 20338, -9914> velocity=<-2, 1> +position=<-30062, 20339> velocity=< 3, -2> +position=< 20360, 10259> velocity=<-2, -1> +position=< 40537, 50604> velocity=<-4, -5> +position=<-50221, 50603> velocity=< 5, -5> +position=< 40505, -30090> velocity=<-4, 3> +position=< -9890, 20339> velocity=< 1, -2> +position=<-30097, -50261> velocity=< 3, 5> +position=<-19995, -30086> velocity=< 2, 3> +position=< 20341, 10255> velocity=<-2, -1> +position=<-19977, -20005> velocity=< 2, 2> +position=<-30053, -50259> velocity=< 3, 5> +position=<-30065, -40173> velocity=< 3, 4> +position=< 50617, 50601> velocity=<-5, -5> +position=< 50631, -40171> velocity=<-5, 4> +position=< -9925, -9915> velocity=< 1, 1> +position=<-40150, 10262> velocity=< 4, -1> +position=< 40526, 40516> velocity=<-4, -4> +position=<-30055, -9915> velocity=< 3, 1> +position=<-50264, 30432> velocity=< 5, -3> +position=< 10287, -20003> velocity=<-1, 2> +position=< 40534, 20348> velocity=<-4, -2> +position=<-19960, -19998> velocity=< 2, 2> +position=< 30464, -40173> velocity=<-3, 4> +position=<-50220, -50259> velocity=< 5, 5> +position=< 40537, -9919> velocity=<-4, 1> +position=< 20357, 20346> velocity=<-2, -2> +position=< 40510, 50598> velocity=<-4, -5> +position=< 50607, -40172> velocity=<-5, 4> +position=< 40537, -19996> velocity=<-4, 2> +position=< 50636, 10261> velocity=<-5, -1> +position=< -9896, 30425> velocity=< 1, -3> +position=< -9917, 10255> velocity=< 1, -1> +position=<-50248, 50606> velocity=< 5, -5> +position=<-50237, -9919> velocity=< 5, 1> +position=<-30073, -20005> velocity=< 3, 2> +position=< 40529, 50606> velocity=<-4, -5> +position=< 50650, -30082> velocity=<-5, 3> +position=<-30093, 10258> velocity=< 3, -1> +position=< 30456, -40177> velocity=<-3, 4> +position=< 40521, -40170> velocity=<-4, 4> +position=< 30468, 10257> velocity=<-3, -1> +position=< 10276, -50261> velocity=<-1, 5> +position=< 30421, -9919> velocity=<-3, 1> +position=< -9877, 20346> velocity=< 1, -2> +position=< 10258, -40177> velocity=<-1, 4> +position=<-50264, 40516> velocity=< 5, -4> +position=< -9883, -40173> velocity=< 1, 4> +position=<-40127, -50256> velocity=< 4, 5> +position=< -9885, 20343> velocity=< 1, -2> +position=< 20382, -9914> velocity=<-2, 1> +position=<-30076, -19998> velocity=< 3, 2> +position=<-30073, 50601> velocity=< 3, -5> +position=< -9893, 20345> velocity=< 1, -2> +position=< -9904, 10258> velocity=< 1, -1> +position=< 20393, -40171> velocity=<-2, 4> +position=<-19984, 50603> velocity=< 2, -5> +position=< -9889, 20343> velocity=< 1, -2> +position=<-19982, 40512> velocity=< 2, -4> +position=<-20009, -40168> velocity=< 2, 4> +position=<-30069, -19997> velocity=< 3, 2> +position=<-19987, -30085> velocity=< 2, 3> +position=< 10252, 10259> velocity=<-1, -1> +position=< -9917, 30428> velocity=< 1, -3> +position=< 10287, 20342> velocity=<-1, -2> +position=<-50245, -20000> velocity=< 5, 2> +position=<-40165, -40177> velocity=< 4, 4> +position=<-40135, -50262> velocity=< 4, 5> +position=<-19984, -30085> velocity=< 2, 3> +position=< 30428, -30091> velocity=<-3, 3> +position=<-30089, 30431> velocity=< 3, -3> +position=< 30467, 20344> velocity=<-3, -2> +position=<-19987, 40520> velocity=< 2, -4> +position=<-30037, 40512> velocity=< 3, -4> +position=< 40557, -50255> velocity=<-4, 5> +position=< 40550, 10254> velocity=<-4, -1> +position=<-40159, 10258> velocity=< 4, -1> +position=< 40539, 20343> velocity=<-4, -2> +position=< 30440, 50605> velocity=<-3, -5> +position=< 30453, 30434> velocity=<-3, -3> +position=< 40550, -30088> velocity=<-4, 3> +position=<-40151, 10256> velocity=< 4, -1> +position=< 10276, 40514> velocity=<-1, -4> +position=< 10280, 20348> velocity=<-1, -2> +position=<-20009, -30091> velocity=< 2, 3> +position=< 30467, 50601> velocity=<-3, -5> +position=< 30439, -20000> velocity=<-3, 2> +position=< 10276, -20005> velocity=<-1, 2> +position=< 40562, -30082> velocity=<-4, 3> +position=<-19986, -20004> velocity=< 2, 2> +position=< 20333, 10259> velocity=<-2, -1> +position=<-50224, -9911> velocity=< 5, 1> +position=< -9872, -9919> velocity=< 1, 1> +position=< 10295, -30085> velocity=<-1, 3> +position=<-19990, 30429> velocity=< 2, -3> +position=< 10295, -30084> velocity=<-1, 3> +position=< 30429, 40515> velocity=<-3, -4> +position=< 20365, -30086> velocity=<-2, 3> +position=< 50618, 10258> velocity=<-5, -1> +position=<-20010, -9910> velocity=< 2, 1> +position=< 20373, -40169> velocity=<-2, 4> +position=< 10307, -50261> velocity=<-1, 5> +position=< 20381, 10256> velocity=<-2, -1> +position=< 40513, 40517> velocity=<-4, -4> +position=< -9865, 20345> velocity=< 1, -2> +position=< -9909, 20347> velocity=< 1, -2> +position=< 10284, 20348> velocity=<-1, -2> +position=<-30073, 20342> velocity=< 3, -2> +position=<-30078, 30425> velocity=< 3, -3> +position=< -9899, 20342> velocity=< 1, -2> +position=< 20333, 30429> velocity=<-2, -3> +position=< 10306, 10253> velocity=<-1, -1> +position=<-50261, 10260> velocity=< 5, -1> +position=< 30459, -9912> velocity=<-3, 1> +position=< 10292, -40176> velocity=<-1, 4> +position=< 20389, -30083> velocity=<-2, 3> +position=<-40166, 20340> velocity=< 4, -2> +position=< -9901, 20345> velocity=< 1, -2> +position=< 40557, -20004> velocity=<-4, 2> +position=<-40158, -30090> velocity=< 4, 3> +position=<-50209, 10255> velocity=< 5, -1> +position=<-50265, -40172> velocity=< 5, 4> +position=<-50245, 50605> velocity=< 5, -5> +position=< 30443, -40177> velocity=<-3, 4> +position=< -9916, 20339> velocity=< 1, -2> +position=< 50640, 50601> velocity=<-5, -5> +position=<-19971, -20005> velocity=< 2, 2> +position=< 40522, -9914> velocity=<-4, 1> +position=< 50607, -19999> velocity=<-5, 2> +position=<-50243, 40515> velocity=< 5, -4> +position=<-50240, 10260> velocity=< 5, -1> +position=< 40561, -19998> velocity=<-4, 2> +position=<-50211, -50254> velocity=< 5, 5> +position=<-40143, 30431> velocity=< 4, -3> +position=< 30430, -50259> velocity=<-3, 5> +position=< 30479, -20002> velocity=<-3, 2> +position=<-30092, 20344> velocity=< 3, -2> +position=<-30092, -40168> velocity=< 3, 4> +position=< 50601, 10257> velocity=<-5, -1> +position=< 20373, 40515> velocity=<-2, -4> +position=< 30479, -19997> velocity=<-3, 2> +position=<-40175, 50605> velocity=< 4, -5> +position=< -9880, -40173> velocity=< 1, 4> +position=< 20349, -50255> velocity=<-2, 5> +position=< 20362, -9914> velocity=<-2, 1> +position=<-30089, 50601> velocity=< 3, -5> +position=< 30467, 10253> velocity=<-3, -1> +position=< 40565, 30429> velocity=<-4, -3> +position=<-40142, 10257> velocity=< 4, -1> +position=< 50609, -50263> velocity=<-5, 5> +position=< -9881, -40173> velocity=< 1, 4> +position=< 50639, 40515> velocity=<-5, -4> +position=<-50269, -40170> velocity=< 5, 4> +position=< 40553, -9910> velocity=<-4, 1> +position=< 30455, 30434> velocity=<-3, -3> +position=< 20362, 10258> velocity=<-2, -1> +position=< 40505, 50603> velocity=<-4, -5> +position=<-19990, 10260> velocity=< 2, -1> +position=< 30447, -19998> velocity=<-3, 2> +position=<-40150, -30087> velocity=< 4, 3> +position=< -9907, -40172> velocity=< 1, 4> +position=<-30044, 20348> velocity=< 3, -2> +position=<-40178, -9913> velocity=< 4, 1> +position=<-50261, 30428> velocity=< 5, -3> +position=<-40151, 20348> velocity=< 4, -2> +position=<-50224, 30432> velocity=< 5, -3> +position=< 50652, -50263> velocity=<-5, 5> +position=<-19952, 50606> velocity=< 2, -5> +position=< 30431, 40511> velocity=<-3, -4> +position=< 30459, -30088> velocity=<-3, 3> +position=< 50651, 20347> velocity=<-5, -2> +position=< 10292, -30082> velocity=<-1, 3> +position=< 20366, 10257> velocity=<-2, -1> +position=<-19987, -9913> velocity=< 2, 1> +position=< -9865, -40170> velocity=< 1, 4> +position=< -9889, 50597> velocity=< 1, -5> +position=<-30065, -50262> velocity=< 3, 5> +position=< -9921, 20347> velocity=< 1, -2> +position=<-30084, 10253> velocity=< 3, -1> +position=< 10248, -20005> velocity=<-1, 2> +position=< 20345, -9915> velocity=<-2, 1> +position=< -9882, -9915> velocity=< 1, 1> +position=<-30065, 50602> velocity=< 3, -5> +position=< 40565, 50599> velocity=<-4, -5> +position=< 20349, -50261> velocity=<-2, 5> +position=<-19960, -19998> velocity=< 2, 2> +position=< 10255, -50258> velocity=<-1, 5> +position=< -9901, -50255> velocity=< 1, 5> +position=<-50219, -9916> velocity=< 5, 1> +position=< 40524, -30086> velocity=<-4, 3> +position=< 40550, 50600> velocity=<-4, -5> +position=<-50233, -30091> velocity=< 5, 3> +position=< 30440, -50257> velocity=<-3, 5> +position=< -9920, 50605> velocity=< 1, -5> +position=< 40507, 20339> velocity=<-4, -2> +position=< 10264, 30426> velocity=<-1, -3> +position=< 40556, 20341> velocity=<-4, -2> +position=< -9875, -9913> velocity=< 1, 1> +position=<-30068, -50254> velocity=< 3, 5> +position=< -9889, 30425> velocity=< 1, -3> +position=<-20011, -40172> velocity=< 2, 4> +position=<-50269, 10259> velocity=< 5, -1> +position=<-40132, 30432> velocity=< 4, -3> +position=< 40553, -9913> velocity=<-4, 1> +position=<-30073, 10256> velocity=< 3, -1> +position=<-30092, 20340> velocity=< 3, -2> +position=< 40542, 50606> velocity=<-4, -5> +position=<-50224, 20347> velocity=< 5, -2> +position=<-40143, 50606> velocity=< 4, -5> +position=<-19971, -20000> velocity=< 2, 2> +position=< 40553, 20340> velocity=<-4, -2> +position=<-30081, -20001> velocity=< 3, 2> +position=<-30037, -40172> velocity=< 3, 4> +position=< -9865, 30428> velocity=< 1, -3> +position=< 30479, 20340> velocity=<-3, -2> +position=< 30429, 20343> velocity=<-3, -2> +position=<-19971, -40172> velocity=< 2, 4> +position=< 30431, 50601> velocity=<-3, -5> +position=<-19982, 10256> velocity=< 2, -1> +position=< 20344, 20343> velocity=<-2, -2> diff --git a/2018/inputs/12.txt b/2018/inputs/12.txt new file mode 100644 index 0000000..6d801ae --- /dev/null +++ b/2018/inputs/12.txt @@ -0,0 +1,34 @@ +initial state: ###..#...####.#..###.....####.######.....##.#####.##.##..###....#....##...##...##.#..###..#.#...#..# + +.###. => . +..#.. => . +.#### => . +.##.. => # +#.#.# => . +..#.# => # +#.##. => # +#...# => # +..... => . +##..# => # +.#.#. => . +..##. => # +##.#. => . +###.. => . +.#... => # +..### => . +#..## => . +...#. => . +###.# => # +.##.# => . +.#.## => . +....# => . +##### => . +#.#.. => # +...## => # +#.... => . +#.### => # +##... => # +.#..# => . +####. => . +#..#. => # +##.## => # diff --git a/2018/inputs/13.txt b/2018/inputs/13.txt new file mode 100644 index 0000000..a2195f8 --- /dev/null +++ b/2018/inputs/13.txt @@ -0,0 +1,150 @@ + /----------------------------------------------------\ /----------------------------\ + /-------->-------\ | /----+----------+----------------------------+----------\ + | /+-----+-----------------------------------------------+----+----------+-\ /---+-------\ | + | /-------++-----+-----------------------------------------------+----+----------+-+---\ | | | | + /--+-------+-------++-----+-----------------------------------------------+---\| | | | | | | | + /----------+--+-----\ | || | /----------------------------------+---++----------+-+---+----\ | | | | + | | | /---+-+-------++-----+------------+--------------->------------------+---++----------+-+\ | | | | | | + | /-----+--+-+---+-+-------++-----+------------+----------------------------------+---++---\ | || | | | | | | + | | | | | | | || | | /-------------------+---++---+--\ | || | | | | | | + /+----+-----+--+-+---+-+-------++-----+------------+\ | | || | | | || | | | | | | + || | /---+--+-+---+-+-------++-----+------------++-------------+-------------------+---++---+--+-\ | || | | | | | | + || | | | | | | | || /-+---------\ || | | || | | | | || | | | | | | + || | | | | | | | || | | | || | | || | | | | || | | | | | | + || | | | | | | ^ || | | | || | /-----+---++---+--+-+-+-++--+----+-------------+---+--\ | | + || | | | | | | | ||/--+-+---------+--++-------------+------->-----+-----+\ || | | | | || | | | | | | | + || | | | | | | | ||| | | | || /-------+-------------+-----++--++---+--+-+-+-++--+----+-------------+---+\ | | | + || | | | | | | | ||| |/+---------+--++-----+-------+-------------+-----++--++---+--+-+-+-++--+----+-------------+---++\| | | + || \-+---+--+-+---+-+-------+++--+++---------+--++-----+-------+-------------+-----++--++---/ | | | || |/---+-------------+---++++----+--+\ + || | | | | | | ||| ||| | || | | | || || | | | || || | \---++++----/ || + || | | \-+---+-+-------+/| ||| | || | | | |v || | | | || || | |||| || + || | | | | | | |/-+++-----\ | || | | | || || | | | || || | |||| || + || | | | | | | || ||| | | || | | | || || /----+-+-+-++--++---+-----------------++++-------++--\ + || | /+----+---+-+-------+-++-+++-----+---+--++-\ | | | || || | | | | || || | |||| || | + || /--+--++----+---+-+--\ | || ||| | | || | | | /------+-----++--++-+----+-+-+-++--++---+-----------------++++--\ || | + || | | || | | | | | || ||| | | || | | | | /-+-----++-\|| | | | | || || | |||| | || | + || | | ||/---+---+-+--+----+-++-+++-----+---+--++-+---+--->---+-\ | | | || |||/+----+-+-+-++--++---+-----------------++++--+----++--+\ + || | | ||| | | | | | || ||| | | || | | | | | | \-----++-+++++----+-+-+-++--++---+-----------------+++/ | || || + || | | ||| | | | | | || ||| | | || | /+-------+-+----+----+-------++\||||| | | | || || | ||| | || || + || | | ||| | | | | /+-++-+++-----+---+--++-+--++-------+-+\ /+----+-------++++++++----+-+-+-++--++---+-----------------+++-\ | || || + || | | ||| /-+---+-+--+---++-++-+++-----+---+--++-+--++-------+-++--++----+------\|||||||| | | | || || | ||| | | || || + || | | ||| | | | | | || || ||| | | || | || | || || | ||||||||| |/+-+-++--++---+-----------------+++-+-+\ || || + || | | ||| | | | | | || || ||| | | || | || \-++--++----+------+++++++++----/|| | || /++---+------------\ ||| | || || || + || | | ||| | | | | | || || ||| | | || | || /++--++----+---\ ||||||||| || | || ||| | | ||| | || || || + || | | ||| | | | | | || || ||| | | || | || ||| || | | ||||||||| || | || ||\---+------------+----+++-+-++---+/ || + || | | ||| | | | | | || || ||| |/--+--++-+--++-------\||| || | | ||||||||| || | || || | | ||| | || | || + || | | /+++-+-+---+-+--+---++-++-+++-----++--+--++-+--++-------++++--++----+---+--+++++++++----\|| | || || | | ||| | || | || + || | | |||| | | | | | || || ||\-----++--+--++-+--++-------++++--++----+---+--++++++/|| ||| | || || | | ||| | || | || + || | | |||| | |/--+-+--+---++-++-++------++--+--++\| || /----++++--++----+---+--++++++-++----+++-+-++-++----+------\ | ||| | || | || + || | | |||| | || | | | || || || || | |||| || | |||| || | | |||||| || ||| | || || | | | ||| | || | || + || | | |||| | || | | | || || || /++--+--++++--++--+----++++--++----+---+--++++++-++----+++-+-++-++----+------+-----+----+++-+-++---+---++\ + || | | |||| | || | | | || || || /---+++--+--++++--++--+----++++--++----+---+--++++++-++----+++-+-++-++\ | | /+----+++-+-++---+--\||| + || | | |||| | || | | | || || || | ||| | \+++--++--+----++++--++----+---+--++++++-++----+++-+-++-+++---/ | || ||| | || | |||| + || | | |||| | || | | | || || \+-+---+++--/ ||| || | |||| || | | |||||| || ||| | || ||| | || ||| | || | |||| + || | | |||| | || | | | || || |/+---+++------+++--++--+----++++--++\ | | |||||| || ||| | || ||| | || ||| | || | |||| + || | | |||| | || | | | || || ||| ||| ||| || | ||||/-+++---+---+--++++++-++----+++-+-++-+++----------+----++----+++-+\|| | |||| + || | | |||| \-++--+-+--+---++-++--+++---+++------+++--++--+----+++++-+++---+---+--/||||| || ||| | || ||| | || ||| |||| | |||| + || | | |||| || | | | || || ||| ||| ||| || | ||||| ||| | | ||||| || ||| | || ||| | || ||| |||| | |||| + || | | |||| || | | | || || ||| ||| /----+++--++--+----+++++-+++---+---+---+++++-++----+++-+-++-+++----------+----++---\||| |||| | |||| + || | /+-++++---++--+-+--+---++-++--+++---+++-+----+++--++--+----+++++-+++\ | | ||||| || ||| | || ||| | ||/--++++-++++\ | |||| + || |/++-++++---++--+-+--+--\|| || ||| ||\-+----+++--++--+----/\+++-++++--+---/ ||||| || ||| | || ||| | ||| |||| ||||| | |||| + || |||| |||| || | | | ||| || ||| || | ||| || | ||| |||| | ||||| || /-+++-+-++-+++---\ | ||| |||| ||||| | |||| + |\---++++-++++---++--/ | | ||| || ||| || | ||| || \------+++-++++--+-------+++++-++--+-+++-+-++-+++---+------/ ||| |||| ||||| | |||| + | |||| |||| || | | ||| || ||| || | ||| || ||| |||| | ||||| || | ||| | || ||| | ||| |||| ||||| | |||| + | |||| |||| || \--+--+++-++--+++---++--+----+++--++---------+++-++++--+-------+++++-++--+-+++-+-++-+/| | ||| |||| ||||| | |||| + | ||||/++++---++-------+--+++-++--+++---++--+----+++--++---------+++\|||| | ||||| || | |||/+-++-+-+---+-----------+++--++++-+++++--+\ |||| + | ||||||||\<--++-------+--+++-++--+++---++--+----+++--++---------/||||||| \-------+++/| || | ||||| || \-+---+-----------+/| |||| ||||| || |||| + | |||||||| /++------\| ||| || /+++---++--+----+++--++----------+++++++----------+++-+-++--+-+++++-++---+---+---------\ | | |||| ||||| || |||| + | |||||||| ||| ||/-+++-++-++++---++--+-\ ||| || ||||||| ||| | || | ||||| || | | | | | |||| ||||| || |||| + | |||||||| ||| ||| ||| || |||| || | | ||| || ||||||| /+++-+-++--+-+++++-++\ | | | | \--++++-++++/ || |||| + | |||||||| ||| ||| ||| || |||| || | | ||| || ||||||| |\++-+-++--+-+++++-+++--+---+---------+-+----++++-++++---/| |||| + | /--++++++++---+++------+++-+++-++-++++---++--+-+--+++\ || ||||||| | || | || | ||||| ||| | | | \----++++-++++----+-/||| + | | |||||||| ||| ||| ||| || |||| || | | |||| || ||||||| | || | || | ||||| ||| | |/--------+----\ |||| |||| | ||| + | | |||||||| ||| /+++-+++-++-++++---++--+-+--++++-++----------+++++++---\ | || | || | ||||| ||| | || /------+---\| |||| |||| | ||| + | | |||||||| ||| |||| ||| || |||| || | | |||| || /-----+++++++---+---\ | || | || | ||||| ||| |/--++-+------+---++-++++-++++----+-\||| + \-+--++++++++---+++-----++++-+++-++-++++---++--+-+--/||| || | ||||||| | | | || | || | ||||| ||| || || | | || |||| |||| | |||| + | |||||||| /-+++-----++++-+++-++-++++---++--+\| ||| || | ||||||| | | | || | || | ||||| ||| || || | | || |||| |||| | |||| + | |||||||| | ||| |||| ||| ||/++++---++--+++---+++-++----+-----+++++++---+---+-+-++-+-++--+-+++++-+++--++--++-+------+\ || |||| |||| | |||| +/--+--++++++++-+-+++-----++++-+++-+++++++---++--+++---+++-++----+-----+++++++---+---+-+-++-+-++--+-+++++-+++\ || || | || || |||| |||| | |||| +| | |||||||| | ||| ||||/+++-+++++++---++--+++---+++-++----+-----+++++++---+\ | | || | |\--+-+++++-++++-++--++-+------++--++-++++-++++----+-+/|| +| | |||||||| | ||| |||||||| ||||||| || ||| ||| || | ||||||| || | | || | | | ||||| |||| || || | || || |||| |||| | | || +| | |||||||| | |||/----++++++++-+++++++---++--+++---+++-++----+-----+++++++---++--+-+-++-+-+---+-+++++-++++-++\ || | || || |||| |||| | | || +| | |||||||| | |||| |||||||| ||||||| /-++--+++---+++-++----+-----+++++++---++--+\| || | | | ||||| |||| ||| || | || || |||| |||| | | || +| | |||||||| | |||| |||||||| ||||||| | || ||| ||| || | ||||||| || ||| || | | | ||||| |||| ||| || | || || |||| |||| | | || +| | |||\++++-+-++++----++++++++-+++++++-+-++--+++---+++-++----+-----+++++++---++--+++-++-+-+---+-++/|| |||| ||| || | || || |||| |||| | | || +| | ||| |||| | |||| ||||||||/+++++++-+-++\ ||| ||| || \-----+++++++---++--/|| || | | | || || |||| ||| || | || || |||| |||| | | || +| | ||| |||| | |||| |||||||\++++++++-+-+++-+++---+++-++----------+++++++---++---++-++-+-+---+-++-++-/||| ||| || | || || |||| |||| | | || +| | ||| |\++-+-++++----+++++++-++++++++-+-+++-+++---+++-++----------+++++++---++---++-++-+-+---+-/\-++--+++-+++-++-+------++--++-++++-+++/ | | || +| | ||| | || | |||| ||||||| |||||||| | ||| ||| ||| ^| ||||\++---++---++-++-+-+---+----++--+++-+++-++-+------++--++-++++-++/ | | || +| | ||| | || | |||| ||||||| ||||||\+-+-+++-+++---+++-++----------++++-/|/--++---++-++-+-+---+----++--+++-+++-++-+-\ || || |||| || | | || +| | ||| | || \-++++----+++++++-++++++-+-+-+++-+/| /-+++-++-------\ |||| || || || |v | v | \+--+++-+++-++-+-+----++--++-++++-++------/ | || +| | ||| | || |\++----+++++++-++++++-+-+-+++-+-+-+-+++-++-------+--++++--++--++---++-++-+-+---+-----+--/|| ||| || | | || || |||| || | || +| /+--+++-+-++---+-++----+++++++-++++++-+-+-+++-+-+-+-+++-++-------+--++++--++-\|| || || | | /+-----+---++-+++-++-+-+----++--++-++++-++-----\ | || +| || ||| | \+---+-++----+++++++-++++++-+-+-+++-+-+-+-+/| || | |||| || ||| || || | | || | || |\+-++-+-+----++--++-++++-++-----+--/ || +| || ||| | | |/++----+++++++-++++++-+-+-+++-+-+-+-+-+-++-------+--++++--++-+++---++-++-+-+--++-----+---++-+\| || | | || || |||| || | || +| || ||| | | |||| ||||||\-++++++-+-+-+++-+-+-+-+-+-++-------+--/||| || ||| || || | | || /---+---++-+++-++-+-+----++--++-++++-++---\ | || +| || ||| | /+---++++----++++++--++++++-+-+-+++-+-+-+-+-+-++-------+---+++--++-+++---++-++-+-+--++-+--\| || ||| || | | || || |||| || | | || +| || ||| | || /-++++----++++++\ |||||| | \-+++-+-+-+-+-+-++-------+---+++--++-+++---/| ||/+-+--++-+--++---++-+++-++-+\| || || |||| || | | || +| || ||\-+-++-+-++++----+++++++-++++++-+---+++-+-+-+-+-+-++-------+---+++--/| ||| | |||| | || | || || ||| || ||| || || |||| || | | || +| || || | |\-+-++++----+++++++-++++++-+---+++-+-+-+-+-+-++-------+---+++---+-+++----+-+++/ | || | || || ||| || ||| || || |||| || | | || +| || || | | | \+++----+/||||| \+++++-+---++/ | | | | | || | ||| | ||| | ||| | || | || || ||| || ||| || || |||| || | | || +| || || | | | |\+----+-+++++--+++++-+---++--+-+-+-/ | || | ||| | ||| | ||| | || | || || ||| || ||| || || |||| || | | || +| || || | | | | | | ||||| ||||| | || | | | /+-++-------+\ ||| | ||| | ||| | || | || || ||| || ||| || || |||| || | | || +| || || \-+--+--+-+----+-+++++--+++++-+---++--+-+-+--++-++-------++--+/| | ||| \-+++--+--++-+--++---/| ||| || ||| || || |||| || | | || +| || || | | | | | ||||| ||||| | || | | | || || /----++--+-+---+-+++------+++--+--++-+--++----+-+++-++-+++----++-\|| |||| || | | || +| || ||/---+--+-\| |/---+-+++++--+++++-+---++--+-+-+--++-++--+----++--+-+---+-+++----\ ||| | ||/+--++----+-+++-++-+++----++-+++-++++-++---+\| || +| || ||| | | || || | ||||| ||||| | || | | | || || | || | | | ||| | ||| \--++++--++----+-+++-++-+++----++-+++-++++-++---+++----/| +| || ||| | | || || | ||||| ||||| | || | | | /++-++--+----++--+-+---+-+++----+-+++-----++++--++----+-+++-++-+++----++-+++\|||| || ||| | +| || ||| ^ | || || | ||||| ||||| | || | | | ||| || | || | | | ||| | ||| |||\--++----+-+++-++-+++----++-++++++++-++---/|| | +| || ||| | | || || | ||||| ||||| | || \-+-+-+++-++--+----++--+-+---+-+++----+-+++-----+++---++----+-+++-++-+++----++-++++/||| || || | +| || ||| | | || || | ||||| ||||| | || | | ||| || | /-++--+-+---+-+++----+-+++-----+++---++----+-+++-++-+++--\ || |||| ||| || || | +|/++--+++---+--+-++-++---+-+++++--+++++-+--\|| |/+-+++-++--+--+\|| | | | ||| | ||| ||| |\----+-+++-++-+++--+-++-++++-/|| || || | +|||| ||| | | || || | ||||| ||||| | ||| /+++-+++-++--+--++++--+-+---+-+++----+-+++-----+++---+-----+-+++-++-+++--+-++-++++\ || || || | +|||| ||| | | || || | ||||| |\+++-+--++/ |||| ||| || | |||| | | | ||| | ||| ||| | | ||| || ||| | || ||||| || || || | +|||| ||| | | || || | ||||| |/+++-+--++---\|||| ||| || | |||| | | | ||| | ||| ||| | | ||| || ||| | || ||||| || || || | +|||| |\+---+--+-++-++---+-+++/| ||||| | |\---+++++-+++-++--+--++++--+-+---+-+++----+-+++-----+++---+-----+-+++-++-+++--+-++-+++++-++-++----++-----/ +|||| | | | | |\-++---+-+++-+--+++++-+--+----+++++-+++-++--+--++++--+-+---+-+++----+-+++-----+++---+-----+-+/| || ||| | || ||||| || || || +|||| | | | | | /++---+-+++\| ||||| | | ||||| ||| || | |||| | | | ||| | ||| ||| | | | | || ||| | || ||||| || || || +|||| | | | /+-+-+++--\| ||||| ||||| | | ||||| ||| || | |||| | | | ||| | ||| ||| | | | | || ||| | || ||||| || || || +|||| | | | || | ||| || ||||| ||||| | | ||||| ||| || | |||| | | | ||| /-+-+++-----+++---+----\| | | || ||| | || ||||| || || || +|||| | | | || | ||| /++-+++++--+++++-+--+----+++++-+++-++--+--++++-\| | | ||| | | ||| ||\---+----++-+-+-++-+++--+-++-+++++-++-++----/| +|||| | | | || | ||| ||| ||||| ||||| \--+----+++++-+++-++--+--++++-++-+---+-+++--+-+-+++-----++----+----++-/ | || ||| | || ||||| || || | +|||| \-+--<+-++-+-+++-+++-/|||| ||||| | |\+++-+++-++--+--++++-++-+---+-+++--+-+-+++-----++----+----++---+-++-+++--+-++-++++/ || || | +|||| | | || | ||| ||| |||| ||||| | | ||| ||| || | |||| |\-+---+-+++--+-+-+++-----++----+----++---+-++-+++--+-++-++++--++-+/ | +|\++----+---+-++-+-+++-+++--++++--+++++----/ | ||| ||| \+--+--++++-+--+---+-+++--+-+-+/| |\----+----++---+-/| ||| | || |||| || | | +| || | | || | ||| ||| |||| \++++---------+-+++-+++--+--+--++++-+--+---+-+++--+-+-/ | | | || | | ||| | || |||| || | | +| || | | || | ||| ||| |||| |||\---------+-+++-+++--+--+--++++-+--+---+-+++--+-+---+-----+-----+----++---+--+-+++--+-++-++++--+/ | | +| || | | || | ||| ||| |||| ||| /----+-+++-+++--+--+--++++-+--+---+-+++--+-+---+-----+--\ | || | | |||/-+-++-++++--+--+------+-\ +| |\----+---+-++-+-+++-+++--++++---+++-----+----+-+++-++/ | | |||| | \---+-+++--+-+---+-----+--+--+----++---+--+-++++-+-++-++++--+--/ | | +| | | | || | ||| ||| |||| ||| | | ||| || | | |||| | | ||| | | | | | | || | | \+++-+-++-+/|| | | | +| \-----+---+-++-+-+++-+++--++++---+++-----+----+-+++-++---+--+--++++-+------+-/|| | | \-----+--+--+----++---+--+--/|| | || | || | | | +| | \-++-+-+++-+++--++++---+++-----+----+-+++-++---+--+--++++-+------+--++--+-+---------+--+--/ || | | || |/++-+-++--+---------+-+---\ +| | |\-+-+++-+++--+++/ /+++-----+----+-+++-++---+--+--++++-+------+--++--+-+---------+--+-------++---+--+>--++-++++-+-++--+-------\ | | | +| | | | ||| ||| ||| ||\+-----+----+-+++-++---+--+--++++-+------+--++--+-+---------+--+-------++---+--+---++-+++/ | || | | | | | +| | | | ||| ||| ||| || | | | ||| || \--+--++++-+------+--++--+-+---------+--+-------++---+--+---++-+++--+-++--/ | | | | +| | | | ||| ||| \++---++-+-----+----+-/|| || | |||| | | || | | | | || | | || ||| | || | | | | +| | | | \++-+++---+/ || | \----+--++-++------+--++++-+------+--++--+-+---------+--/ || | | || ||| | || | | | | +| | | | || ||| \----++-+----------+--++-++------+--++++-+---->-+--+/ | | | || | | || ||| | || | | | | +| | | | || \++--------++-+----------+--++-++------+--++++-/ | | | | \----------++---+--+---++-+++--+-++----------+-/ | | +| | | | || || || | | || || | |||| | | | | /--------------++---+--+---++-+++--+-++-----\ | | | +| | | | || || || | | || || | \+++--------+--+---+-+-----+--------------++---+--+---++-/|| | || | | | | +| | | | || || || | | || || | ||| | | \-+-----+--------------/| | | || || | || | | | | +| | | | || || /++-+----------+\ || \+------+---+++--------+--+-----+-----+---------------+---+--+---++--++--+-+/ | | | | +| | | | || || |\+-+----------++-++--+------+---+++--------+--+-----+-----+---------------+---+--+---++--++--+-+------+----/ | | +| | | | /++--++-------+-+-+----------++-++--+------+---+++-\ \--+-----+-----+---------------+---+--+---/| || | | | | | +| | | | ||| || | | | || \+--+------+---/|| | | | | | | | | || | | | | | +| | | | ||| || | | | |v | | | || | | | | | | | | \+--+-+------+--------+---/ +| /-+-----+--+-+++--++-------+-+-+----------++--+--+------+----++-+---------+-----+-----+---------------+\ | | | | | | | | +| | | | | ||| |\-------+-+-+----------++--+--+------+----++-+---------/ | | || | | | | | | | | +| | | | | ||| | | | \----------++--+--+------+----++-+---------------+-----+---------------++--+--+----+---/ | | | | +| | | | | ||| | | | || | \------+----+/ | | | || | | | | | | | +| | | \--+-+++--/ ^ | || | | | | | | || | | | | | | | +| | | | ||\-----------+-+------------++--+---------+----+--+---------------/ | || | | \------+-+------+--------/ +| | | | || | | || \---------+----/ | | || | | | | | +\-----+-+--------+-++------------+-+------------++------------+-------+---------------------+---------------/| | | | | | + | | | |\------------+-+------------++------------+-------+-<-------------------+----------------+--/ \-----------+-/ | + | | | | \-+------------+/ \-------+---------------------+----------------+-----------------/ | + | | | \---------------+------------+---------------------/ | | | + | | | \------------/ \----------------+--------------------------/ + \-+--------+-------------------------------------------------------------------------------------------/ + \--------/ diff --git a/2018/inputs/15.txt b/2018/inputs/15.txt new file mode 100644 index 0000000..0bd71e0 --- /dev/null +++ b/2018/inputs/15.txt @@ -0,0 +1,32 @@ +################################ +#######################.######## +#######################.######## +########..#############.######## +#######.....#########....#..#### +#######.....##########......#### +######....#..########.......#..# +#######.G...########...........# +####..GG....G######..........### +########....G..###..E.......#.E# +########...G..#....G..G.....E..# +########...G...G.G...........E.# +####....G.....#####..E......#E.# +####.####.#..#######....G.....## +####.G#####.#########..........# +####G#####..#########..........# +####.####..E#########..........# +####...#..#.#########.G........# +####.....G..#########.........## +####..G....E.#######........#### +####G.........#####...##....#### +#####G................###..E#### +#####..####...............###### +####..#####.............######## +#####.#######...........######## +#####.########.........######### +#####.########.....E..########## +#.....#########...#.############ +#..#############....############ +################....############ +##################.############# +################################ diff --git a/2018/inputs/16_1.txt b/2018/inputs/16_1.txt new file mode 100644 index 0000000..755acda --- /dev/null +++ b/2018/inputs/16_1.txt @@ -0,0 +1,3143 @@ +Before: [2, 3, 2, 2] +0 3 3 0 +After: [0, 3, 2, 2] + +Before: [1, 1, 2, 3] +6 0 2 0 +After: [0, 1, 2, 3] + +Before: [1, 0, 2, 2] +6 0 2 0 +After: [0, 0, 2, 2] + +Before: [1, 1, 1, 1] +11 2 1 0 +After: [2, 1, 1, 1] + +Before: [3, 0, 0, 2] +0 3 3 2 +After: [3, 0, 0, 2] + +Before: [1, 1, 2, 2] +9 1 0 2 +After: [1, 1, 1, 2] + +Before: [3, 2, 1, 1] +5 2 1 1 +After: [3, 2, 1, 1] + +Before: [1, 1, 0, 3] +7 1 3 0 +After: [0, 1, 0, 3] + +Before: [1, 2, 1, 3] +5 2 1 0 +After: [2, 2, 1, 3] + +Before: [0, 2, 2, 0] +8 0 0 0 +After: [0, 2, 2, 0] + +Before: [2, 0, 0, 1] +3 0 3 0 +After: [1, 0, 0, 1] + +Before: [3, 1, 2, 2] +4 1 3 1 +After: [3, 0, 2, 2] + +Before: [2, 2, 1, 1] +5 2 1 1 +After: [2, 2, 1, 1] + +Before: [1, 1, 2, 2] +6 0 2 2 +After: [1, 1, 0, 2] + +Before: [1, 1, 1, 2] +4 1 3 0 +After: [0, 1, 1, 2] + +Before: [2, 1, 3, 1] +13 1 3 0 +After: [1, 1, 3, 1] + +Before: [0, 1, 2, 1] +13 1 3 1 +After: [0, 1, 2, 1] + +Before: [2, 1, 0, 2] +4 1 3 1 +After: [2, 0, 0, 2] + +Before: [2, 1, 0, 1] +2 0 1 3 +After: [2, 1, 0, 1] + +Before: [3, 1, 2, 1] +12 1 2 2 +After: [3, 1, 0, 1] + +Before: [1, 1, 3, 2] +4 1 3 3 +After: [1, 1, 3, 0] + +Before: [2, 2, 1, 3] +7 1 3 0 +After: [0, 2, 1, 3] + +Before: [1, 3, 2, 1] +6 0 2 1 +After: [1, 0, 2, 1] + +Before: [2, 1, 2, 1] +13 1 3 1 +After: [2, 1, 2, 1] + +Before: [2, 1, 3, 0] +14 2 0 3 +After: [2, 1, 3, 1] + +Before: [1, 1, 2, 3] +6 0 2 3 +After: [1, 1, 2, 0] + +Before: [1, 1, 1, 3] +11 2 1 2 +After: [1, 1, 2, 3] + +Before: [2, 2, 3, 2] +0 3 3 0 +After: [0, 2, 3, 2] + +Before: [1, 2, 0, 2] +1 0 2 3 +After: [1, 2, 0, 0] + +Before: [2, 1, 0, 0] +2 0 1 3 +After: [2, 1, 0, 1] + +Before: [0, 2, 1, 1] +5 2 1 3 +After: [0, 2, 1, 2] + +Before: [0, 3, 2, 1] +10 3 2 3 +After: [0, 3, 2, 1] + +Before: [3, 3, 2, 2] +0 3 3 0 +After: [0, 3, 2, 2] + +Before: [1, 1, 2, 0] +12 1 2 0 +After: [0, 1, 2, 0] + +Before: [0, 2, 1, 3] +5 2 1 0 +After: [2, 2, 1, 3] + +Before: [0, 3, 2, 1] +8 0 0 0 +After: [0, 3, 2, 1] + +Before: [1, 1, 1, 3] +11 2 1 1 +After: [1, 2, 1, 3] + +Before: [0, 1, 1, 2] +11 2 1 2 +After: [0, 1, 2, 2] + +Before: [1, 1, 1, 1] +13 1 3 1 +After: [1, 1, 1, 1] + +Before: [1, 3, 0, 0] +1 0 2 1 +After: [1, 0, 0, 0] + +Before: [2, 2, 3, 1] +14 2 0 1 +After: [2, 1, 3, 1] + +Before: [0, 3, 0, 3] +8 0 0 3 +After: [0, 3, 0, 0] + +Before: [0, 0, 1, 1] +8 0 0 2 +After: [0, 0, 0, 1] + +Before: [0, 3, 2, 1] +8 0 0 2 +After: [0, 3, 0, 1] + +Before: [2, 1, 2, 3] +12 1 2 1 +After: [2, 0, 2, 3] + +Before: [3, 2, 2, 3] +14 2 1 2 +After: [3, 2, 1, 3] + +Before: [2, 2, 3, 0] +15 2 2 2 +After: [2, 2, 1, 0] + +Before: [2, 3, 3, 2] +15 2 2 0 +After: [1, 3, 3, 2] + +Before: [1, 1, 0, 0] +1 0 2 3 +After: [1, 1, 0, 0] + +Before: [3, 2, 2, 2] +0 3 3 3 +After: [3, 2, 2, 0] + +Before: [1, 3, 2, 2] +6 0 2 3 +After: [1, 3, 2, 0] + +Before: [2, 1, 0, 1] +3 0 3 1 +After: [2, 1, 0, 1] + +Before: [3, 3, 1, 3] +7 2 3 0 +After: [0, 3, 1, 3] + +Before: [0, 2, 1, 0] +5 2 1 3 +After: [0, 2, 1, 2] + +Before: [1, 1, 1, 2] +4 1 3 2 +After: [1, 1, 0, 2] + +Before: [0, 3, 1, 2] +8 0 0 1 +After: [0, 0, 1, 2] + +Before: [2, 1, 3, 3] +7 1 3 0 +After: [0, 1, 3, 3] + +Before: [3, 2, 2, 1] +10 3 2 0 +After: [1, 2, 2, 1] + +Before: [2, 1, 0, 1] +3 0 3 3 +After: [2, 1, 0, 1] + +Before: [2, 1, 1, 1] +13 1 3 2 +After: [2, 1, 1, 1] + +Before: [2, 2, 0, 3] +7 1 3 1 +After: [2, 0, 0, 3] + +Before: [2, 2, 0, 1] +3 0 3 0 +After: [1, 2, 0, 1] + +Before: [2, 2, 3, 1] +3 0 3 3 +After: [2, 2, 3, 1] + +Before: [1, 2, 0, 0] +1 0 2 1 +After: [1, 0, 0, 0] + +Before: [2, 2, 2, 2] +14 3 2 1 +After: [2, 0, 2, 2] + +Before: [3, 1, 1, 2] +4 1 3 1 +After: [3, 0, 1, 2] + +Before: [2, 1, 1, 1] +2 0 1 3 +After: [2, 1, 1, 1] + +Before: [1, 1, 0, 0] +1 0 2 1 +After: [1, 0, 0, 0] + +Before: [1, 3, 0, 2] +1 0 2 1 +After: [1, 0, 0, 2] + +Before: [1, 1, 1, 3] +9 1 0 2 +After: [1, 1, 1, 3] + +Before: [3, 1, 2, 2] +12 1 2 2 +After: [3, 1, 0, 2] + +Before: [0, 1, 2, 1] +12 1 2 2 +After: [0, 1, 0, 1] + +Before: [3, 2, 0, 3] +7 1 3 3 +After: [3, 2, 0, 0] + +Before: [2, 1, 2, 3] +7 2 3 2 +After: [2, 1, 0, 3] + +Before: [3, 1, 3, 1] +13 1 3 0 +After: [1, 1, 3, 1] + +Before: [2, 1, 1, 1] +11 2 1 0 +After: [2, 1, 1, 1] + +Before: [0, 1, 1, 0] +11 2 1 3 +After: [0, 1, 1, 2] + +Before: [2, 1, 3, 3] +7 1 3 2 +After: [2, 1, 0, 3] + +Before: [2, 3, 2, 1] +10 3 2 1 +After: [2, 1, 2, 1] + +Before: [1, 1, 2, 2] +4 1 3 1 +After: [1, 0, 2, 2] + +Before: [1, 3, 0, 1] +1 0 2 0 +After: [0, 3, 0, 1] + +Before: [1, 3, 0, 3] +1 0 2 3 +After: [1, 3, 0, 0] + +Before: [2, 3, 3, 1] +3 0 3 1 +After: [2, 1, 3, 1] + +Before: [2, 1, 1, 2] +11 2 1 3 +After: [2, 1, 1, 2] + +Before: [2, 1, 1, 1] +2 0 1 1 +After: [2, 1, 1, 1] + +Before: [3, 1, 2, 2] +4 1 3 0 +After: [0, 1, 2, 2] + +Before: [2, 0, 2, 1] +10 3 2 1 +After: [2, 1, 2, 1] + +Before: [1, 3, 0, 1] +1 0 2 1 +After: [1, 0, 0, 1] + +Before: [1, 1, 0, 2] +9 1 0 0 +After: [1, 1, 0, 2] + +Before: [2, 3, 2, 1] +3 0 3 2 +After: [2, 3, 1, 1] + +Before: [1, 2, 2, 1] +0 3 3 3 +After: [1, 2, 2, 0] + +Before: [3, 1, 2, 2] +12 1 2 1 +After: [3, 0, 2, 2] + +Before: [0, 2, 3, 1] +8 0 0 1 +After: [0, 0, 3, 1] + +Before: [0, 0, 2, 1] +10 3 2 2 +After: [0, 0, 1, 1] + +Before: [3, 2, 1, 3] +15 0 0 3 +After: [3, 2, 1, 1] + +Before: [1, 3, 2, 2] +6 0 2 2 +After: [1, 3, 0, 2] + +Before: [1, 2, 2, 3] +6 0 2 3 +After: [1, 2, 2, 0] + +Before: [1, 1, 3, 2] +4 1 3 2 +After: [1, 1, 0, 2] + +Before: [1, 2, 2, 1] +10 3 2 3 +After: [1, 2, 2, 1] + +Before: [1, 2, 2, 1] +6 0 2 2 +After: [1, 2, 0, 1] + +Before: [1, 2, 1, 3] +7 2 3 1 +After: [1, 0, 1, 3] + +Before: [1, 2, 2, 1] +10 3 2 0 +After: [1, 2, 2, 1] + +Before: [2, 3, 3, 1] +3 0 3 3 +After: [2, 3, 3, 1] + +Before: [2, 3, 2, 3] +14 2 0 2 +After: [2, 3, 1, 3] + +Before: [2, 1, 3, 1] +2 0 1 3 +After: [2, 1, 3, 1] + +Before: [0, 3, 3, 0] +8 0 0 1 +After: [0, 0, 3, 0] + +Before: [2, 1, 1, 3] +7 2 3 2 +After: [2, 1, 0, 3] + +Before: [0, 2, 2, 1] +10 3 2 3 +After: [0, 2, 2, 1] + +Before: [3, 2, 1, 3] +5 2 1 3 +After: [3, 2, 1, 2] + +Before: [3, 1, 1, 2] +0 3 3 2 +After: [3, 1, 0, 2] + +Before: [0, 3, 1, 3] +7 2 3 3 +After: [0, 3, 1, 0] + +Before: [2, 0, 2, 1] +10 3 2 3 +After: [2, 0, 2, 1] + +Before: [2, 2, 1, 0] +5 2 1 2 +After: [2, 2, 2, 0] + +Before: [2, 1, 2, 2] +4 1 3 3 +After: [2, 1, 2, 0] + +Before: [1, 3, 1, 1] +0 2 3 2 +After: [1, 3, 0, 1] + +Before: [1, 1, 0, 3] +1 0 2 3 +After: [1, 1, 0, 0] + +Before: [1, 0, 0, 3] +1 0 2 2 +After: [1, 0, 0, 3] + +Before: [2, 1, 1, 0] +11 2 1 0 +After: [2, 1, 1, 0] + +Before: [2, 0, 0, 1] +3 0 3 3 +After: [2, 0, 0, 1] + +Before: [3, 3, 0, 1] +14 0 2 2 +After: [3, 3, 1, 1] + +Before: [0, 1, 2, 0] +8 0 0 1 +After: [0, 0, 2, 0] + +Before: [2, 0, 1, 1] +3 0 3 2 +After: [2, 0, 1, 1] + +Before: [1, 3, 2, 0] +6 0 2 1 +After: [1, 0, 2, 0] + +Before: [3, 3, 2, 0] +2 0 2 3 +After: [3, 3, 2, 1] + +Before: [2, 1, 0, 1] +13 1 3 2 +After: [2, 1, 1, 1] + +Before: [1, 1, 2, 1] +13 1 3 2 +After: [1, 1, 1, 1] + +Before: [1, 3, 2, 0] +6 0 2 2 +After: [1, 3, 0, 0] + +Before: [3, 1, 3, 2] +4 1 3 1 +After: [3, 0, 3, 2] + +Before: [2, 3, 2, 2] +15 0 0 3 +After: [2, 3, 2, 1] + +Before: [2, 3, 2, 1] +3 0 3 3 +After: [2, 3, 2, 1] + +Before: [2, 1, 1, 2] +4 1 3 0 +After: [0, 1, 1, 2] + +Before: [1, 1, 1, 1] +13 1 3 0 +After: [1, 1, 1, 1] + +Before: [3, 1, 1, 0] +11 2 1 2 +After: [3, 1, 2, 0] + +Before: [3, 1, 1, 1] +11 2 1 0 +After: [2, 1, 1, 1] + +Before: [3, 1, 0, 2] +4 1 3 0 +After: [0, 1, 0, 2] + +Before: [3, 3, 1, 3] +15 0 0 3 +After: [3, 3, 1, 1] + +Before: [1, 2, 2, 1] +10 3 2 1 +After: [1, 1, 2, 1] + +Before: [1, 1, 1, 0] +11 2 1 3 +After: [1, 1, 1, 2] + +Before: [1, 1, 1, 2] +11 2 1 0 +After: [2, 1, 1, 2] + +Before: [3, 2, 2, 2] +14 2 1 2 +After: [3, 2, 1, 2] + +Before: [0, 0, 3, 3] +15 2 2 3 +After: [0, 0, 3, 1] + +Before: [0, 3, 2, 2] +0 3 3 0 +After: [0, 3, 2, 2] + +Before: [1, 0, 2, 1] +10 3 2 1 +After: [1, 1, 2, 1] + +Before: [2, 1, 2, 2] +14 3 2 1 +After: [2, 0, 2, 2] + +Before: [1, 0, 0, 3] +1 0 2 1 +After: [1, 0, 0, 3] + +Before: [3, 2, 1, 3] +7 2 3 1 +After: [3, 0, 1, 3] + +Before: [3, 1, 1, 2] +11 2 1 0 +After: [2, 1, 1, 2] + +Before: [1, 3, 2, 1] +6 0 2 0 +After: [0, 3, 2, 1] + +Before: [2, 0, 3, 1] +3 0 3 0 +After: [1, 0, 3, 1] + +Before: [3, 1, 2, 2] +12 1 2 0 +After: [0, 1, 2, 2] + +Before: [3, 1, 2, 0] +12 1 2 3 +After: [3, 1, 2, 0] + +Before: [2, 1, 2, 0] +2 0 1 3 +After: [2, 1, 2, 1] + +Before: [1, 1, 3, 1] +14 2 3 2 +After: [1, 1, 0, 1] + +Before: [1, 3, 2, 3] +6 0 2 0 +After: [0, 3, 2, 3] + +Before: [1, 1, 2, 3] +12 1 2 0 +After: [0, 1, 2, 3] + +Before: [3, 0, 2, 1] +10 3 2 1 +After: [3, 1, 2, 1] + +Before: [1, 0, 2, 0] +6 0 2 1 +After: [1, 0, 2, 0] + +Before: [2, 3, 1, 3] +7 2 3 2 +After: [2, 3, 0, 3] + +Before: [1, 1, 1, 1] +11 2 1 3 +After: [1, 1, 1, 2] + +Before: [2, 1, 2, 2] +2 0 1 0 +After: [1, 1, 2, 2] + +Before: [1, 2, 1, 3] +7 2 3 3 +After: [1, 2, 1, 0] + +Before: [1, 1, 2, 2] +12 1 2 0 +After: [0, 1, 2, 2] + +Before: [2, 0, 2, 1] +10 3 2 2 +After: [2, 0, 1, 1] + +Before: [0, 1, 2, 3] +12 1 2 2 +After: [0, 1, 0, 3] + +Before: [2, 1, 1, 3] +11 2 1 0 +After: [2, 1, 1, 3] + +Before: [2, 1, 3, 1] +13 1 3 3 +After: [2, 1, 3, 1] + +Before: [0, 2, 1, 1] +8 0 0 1 +After: [0, 0, 1, 1] + +Before: [1, 0, 0, 2] +1 0 2 1 +After: [1, 0, 0, 2] + +Before: [2, 1, 3, 3] +2 0 1 1 +After: [2, 1, 3, 3] + +Before: [0, 1, 2, 2] +4 1 3 2 +After: [0, 1, 0, 2] + +Before: [1, 1, 2, 1] +13 1 3 0 +After: [1, 1, 2, 1] + +Before: [1, 1, 3, 0] +9 1 0 1 +After: [1, 1, 3, 0] + +Before: [1, 1, 0, 1] +1 0 2 1 +After: [1, 0, 0, 1] + +Before: [2, 2, 3, 1] +3 0 3 1 +After: [2, 1, 3, 1] + +Before: [3, 2, 1, 2] +5 2 1 0 +After: [2, 2, 1, 2] + +Before: [1, 1, 2, 0] +12 1 2 1 +After: [1, 0, 2, 0] + +Before: [3, 0, 2, 3] +2 0 2 3 +After: [3, 0, 2, 1] + +Before: [2, 1, 3, 3] +2 0 1 2 +After: [2, 1, 1, 3] + +Before: [3, 1, 3, 1] +15 0 0 0 +After: [1, 1, 3, 1] + +Before: [0, 1, 3, 2] +4 1 3 1 +After: [0, 0, 3, 2] + +Before: [3, 2, 3, 3] +15 2 0 0 +After: [1, 2, 3, 3] + +Before: [1, 3, 3, 1] +0 3 3 0 +After: [0, 3, 3, 1] + +Before: [0, 0, 2, 3] +7 2 3 0 +After: [0, 0, 2, 3] + +Before: [0, 2, 1, 3] +7 2 3 2 +After: [0, 2, 0, 3] + +Before: [3, 0, 2, 1] +2 0 2 0 +After: [1, 0, 2, 1] + +Before: [2, 2, 2, 1] +10 3 2 2 +After: [2, 2, 1, 1] + +Before: [1, 2, 0, 1] +1 0 2 0 +After: [0, 2, 0, 1] + +Before: [1, 2, 0, 0] +1 0 2 2 +After: [1, 2, 0, 0] + +Before: [3, 1, 2, 1] +2 0 2 1 +After: [3, 1, 2, 1] + +Before: [0, 0, 3, 1] +8 0 0 1 +After: [0, 0, 3, 1] + +Before: [0, 1, 1, 2] +11 2 1 3 +After: [0, 1, 1, 2] + +Before: [0, 1, 3, 1] +13 1 3 2 +After: [0, 1, 1, 1] + +Before: [1, 1, 1, 2] +11 2 1 2 +After: [1, 1, 2, 2] + +Before: [2, 0, 3, 1] +3 0 3 3 +After: [2, 0, 3, 1] + +Before: [0, 2, 1, 2] +8 0 0 0 +After: [0, 2, 1, 2] + +Before: [1, 0, 2, 1] +6 0 2 1 +After: [1, 0, 2, 1] + +Before: [1, 1, 0, 2] +4 1 3 3 +After: [1, 1, 0, 0] + +Before: [2, 2, 1, 1] +3 0 3 2 +After: [2, 2, 1, 1] + +Before: [1, 2, 1, 2] +5 2 1 2 +After: [1, 2, 2, 2] + +Before: [2, 0, 2, 1] +3 0 3 3 +After: [2, 0, 2, 1] + +Before: [2, 1, 0, 1] +3 0 3 2 +After: [2, 1, 1, 1] + +Before: [2, 2, 1, 2] +5 2 1 1 +After: [2, 2, 1, 2] + +Before: [1, 1, 2, 2] +9 1 0 3 +After: [1, 1, 2, 1] + +Before: [2, 2, 1, 3] +15 0 0 3 +After: [2, 2, 1, 1] + +Before: [3, 1, 0, 1] +13 1 3 3 +After: [3, 1, 0, 1] + +Before: [3, 3, 2, 1] +10 3 2 2 +After: [3, 3, 1, 1] + +Before: [0, 1, 3, 2] +4 1 3 3 +After: [0, 1, 3, 0] + +Before: [0, 1, 1, 0] +11 2 1 2 +After: [0, 1, 2, 0] + +Before: [3, 1, 3, 1] +14 3 1 0 +After: [0, 1, 3, 1] + +Before: [0, 1, 3, 3] +8 0 0 3 +After: [0, 1, 3, 0] + +Before: [0, 1, 2, 1] +10 3 2 0 +After: [1, 1, 2, 1] + +Before: [2, 1, 2, 1] +3 0 3 2 +After: [2, 1, 1, 1] + +Before: [0, 2, 1, 3] +5 2 1 3 +After: [0, 2, 1, 2] + +Before: [1, 0, 0, 3] +1 0 2 0 +After: [0, 0, 0, 3] + +Before: [2, 3, 0, 1] +3 0 3 0 +After: [1, 3, 0, 1] + +Before: [2, 1, 2, 1] +12 1 2 1 +After: [2, 0, 2, 1] + +Before: [2, 1, 3, 2] +4 1 3 0 +After: [0, 1, 3, 2] + +Before: [1, 2, 1, 0] +5 2 1 3 +After: [1, 2, 1, 2] + +Before: [3, 1, 3, 1] +13 1 3 1 +After: [3, 1, 3, 1] + +Before: [1, 2, 1, 0] +5 2 1 1 +After: [1, 2, 1, 0] + +Before: [3, 1, 2, 1] +10 3 2 1 +After: [3, 1, 2, 1] + +Before: [1, 1, 1, 1] +13 1 3 2 +After: [1, 1, 1, 1] + +Before: [2, 1, 2, 1] +13 1 3 2 +After: [2, 1, 1, 1] + +Before: [1, 2, 1, 3] +7 1 3 1 +After: [1, 0, 1, 3] + +Before: [0, 0, 2, 2] +14 3 2 3 +After: [0, 0, 2, 0] + +Before: [2, 2, 1, 3] +15 0 0 1 +After: [2, 1, 1, 3] + +Before: [2, 1, 3, 2] +4 1 3 1 +After: [2, 0, 3, 2] + +Before: [1, 2, 1, 3] +5 2 1 2 +After: [1, 2, 2, 3] + +Before: [2, 2, 1, 0] +5 2 1 3 +After: [2, 2, 1, 2] + +Before: [2, 0, 2, 1] +3 0 3 2 +After: [2, 0, 1, 1] + +Before: [1, 0, 0, 1] +1 0 2 0 +After: [0, 0, 0, 1] + +Before: [2, 1, 1, 0] +15 0 0 0 +After: [1, 1, 1, 0] + +Before: [0, 0, 3, 3] +8 0 0 0 +After: [0, 0, 3, 3] + +Before: [1, 1, 1, 2] +4 1 3 3 +After: [1, 1, 1, 0] + +Before: [1, 2, 0, 3] +1 0 2 1 +After: [1, 0, 0, 3] + +Before: [1, 1, 0, 2] +9 1 0 1 +After: [1, 1, 0, 2] + +Before: [3, 1, 1, 1] +11 2 1 3 +After: [3, 1, 1, 2] + +Before: [1, 1, 0, 3] +7 1 3 1 +After: [1, 0, 0, 3] + +Before: [1, 1, 1, 3] +7 1 3 2 +After: [1, 1, 0, 3] + +Before: [1, 1, 2, 3] +6 0 2 1 +After: [1, 0, 2, 3] + +Before: [2, 1, 1, 2] +4 1 3 3 +After: [2, 1, 1, 0] + +Before: [2, 2, 2, 3] +7 1 3 2 +After: [2, 2, 0, 3] + +Before: [1, 3, 2, 1] +0 3 3 3 +After: [1, 3, 2, 0] + +Before: [0, 0, 3, 3] +8 0 0 3 +After: [0, 0, 3, 0] + +Before: [3, 1, 3, 1] +15 0 0 1 +After: [3, 1, 3, 1] + +Before: [1, 0, 0, 2] +1 0 2 2 +After: [1, 0, 0, 2] + +Before: [0, 0, 0, 1] +0 3 3 1 +After: [0, 0, 0, 1] + +Before: [1, 1, 1, 2] +9 1 0 0 +After: [1, 1, 1, 2] + +Before: [1, 3, 0, 1] +1 0 2 2 +After: [1, 3, 0, 1] + +Before: [1, 1, 3, 3] +9 1 0 0 +After: [1, 1, 3, 3] + +Before: [2, 1, 3, 1] +13 1 3 2 +After: [2, 1, 1, 1] + +Before: [2, 1, 3, 2] +4 1 3 3 +After: [2, 1, 3, 0] + +Before: [2, 1, 2, 1] +13 1 3 3 +After: [2, 1, 2, 1] + +Before: [1, 0, 2, 2] +6 0 2 1 +After: [1, 0, 2, 2] + +Before: [1, 1, 2, 1] +10 3 2 2 +After: [1, 1, 1, 1] + +Before: [3, 2, 1, 3] +5 2 1 2 +After: [3, 2, 2, 3] + +Before: [0, 1, 2, 0] +12 1 2 2 +After: [0, 1, 0, 0] + +Before: [2, 1, 1, 3] +2 0 1 0 +After: [1, 1, 1, 3] + +Before: [1, 2, 2, 3] +14 2 1 2 +After: [1, 2, 1, 3] + +Before: [1, 2, 0, 3] +1 0 2 0 +After: [0, 2, 0, 3] + +Before: [0, 1, 2, 2] +8 0 0 2 +After: [0, 1, 0, 2] + +Before: [0, 2, 1, 0] +5 2 1 1 +After: [0, 2, 1, 0] + +Before: [2, 0, 0, 1] +15 0 0 2 +After: [2, 0, 1, 1] + +Before: [2, 2, 1, 3] +5 2 1 0 +After: [2, 2, 1, 3] + +Before: [3, 2, 2, 1] +10 3 2 2 +After: [3, 2, 1, 1] + +Before: [0, 3, 2, 2] +14 3 2 2 +After: [0, 3, 0, 2] + +Before: [1, 2, 0, 1] +1 0 2 2 +After: [1, 2, 0, 1] + +Before: [0, 1, 1, 0] +11 2 1 0 +After: [2, 1, 1, 0] + +Before: [1, 2, 2, 3] +14 2 1 3 +After: [1, 2, 2, 1] + +Before: [2, 1, 3, 1] +3 0 3 3 +After: [2, 1, 3, 1] + +Before: [0, 1, 2, 3] +7 1 3 3 +After: [0, 1, 2, 0] + +Before: [2, 1, 2, 2] +2 0 1 1 +After: [2, 1, 2, 2] + +Before: [2, 2, 1, 0] +5 2 1 1 +After: [2, 2, 1, 0] + +Before: [3, 2, 1, 3] +5 2 1 0 +After: [2, 2, 1, 3] + +Before: [1, 1, 2, 1] +0 3 3 1 +After: [1, 0, 2, 1] + +Before: [1, 0, 2, 1] +6 0 2 3 +After: [1, 0, 2, 0] + +Before: [1, 3, 0, 2] +1 0 2 0 +After: [0, 3, 0, 2] + +Before: [0, 1, 1, 3] +11 2 1 2 +After: [0, 1, 2, 3] + +Before: [1, 1, 3, 3] +9 1 0 1 +After: [1, 1, 3, 3] + +Before: [3, 1, 2, 3] +12 1 2 1 +After: [3, 0, 2, 3] + +Before: [0, 1, 1, 1] +13 1 3 0 +After: [1, 1, 1, 1] + +Before: [1, 1, 2, 3] +9 1 0 1 +After: [1, 1, 2, 3] + +Before: [0, 3, 1, 3] +7 2 3 0 +After: [0, 3, 1, 3] + +Before: [3, 1, 2, 1] +13 1 3 2 +After: [3, 1, 1, 1] + +Before: [1, 0, 1, 3] +7 2 3 1 +After: [1, 0, 1, 3] + +Before: [1, 1, 0, 3] +1 0 2 0 +After: [0, 1, 0, 3] + +Before: [2, 1, 2, 2] +12 1 2 2 +After: [2, 1, 0, 2] + +Before: [3, 0, 1, 3] +14 3 0 0 +After: [1, 0, 1, 3] + +Before: [3, 1, 3, 3] +7 1 3 3 +After: [3, 1, 3, 0] + +Before: [1, 1, 0, 0] +1 0 2 0 +After: [0, 1, 0, 0] + +Before: [1, 1, 1, 1] +0 2 3 2 +After: [1, 1, 0, 1] + +Before: [2, 1, 0, 1] +2 0 1 2 +After: [2, 1, 1, 1] + +Before: [1, 1, 2, 1] +14 3 1 1 +After: [1, 0, 2, 1] + +Before: [0, 0, 2, 3] +7 2 3 3 +After: [0, 0, 2, 0] + +Before: [3, 2, 0, 0] +14 0 2 1 +After: [3, 1, 0, 0] + +Before: [0, 0, 2, 3] +8 0 0 0 +After: [0, 0, 2, 3] + +Before: [3, 1, 1, 0] +11 2 1 1 +After: [3, 2, 1, 0] + +Before: [1, 2, 1, 1] +5 2 1 2 +After: [1, 2, 2, 1] + +Before: [0, 2, 1, 3] +7 2 3 3 +After: [0, 2, 1, 0] + +Before: [3, 1, 2, 2] +15 0 0 3 +After: [3, 1, 2, 1] + +Before: [0, 0, 0, 2] +8 0 0 2 +After: [0, 0, 0, 2] + +Before: [3, 1, 3, 1] +13 1 3 2 +After: [3, 1, 1, 1] + +Before: [1, 1, 2, 3] +9 1 0 2 +After: [1, 1, 1, 3] + +Before: [1, 2, 0, 2] +1 0 2 2 +After: [1, 2, 0, 2] + +Before: [2, 1, 2, 3] +2 0 1 3 +After: [2, 1, 2, 1] + +Before: [1, 2, 0, 3] +1 0 2 2 +After: [1, 2, 0, 3] + +Before: [1, 0, 2, 0] +6 0 2 3 +After: [1, 0, 2, 0] + +Before: [1, 0, 3, 1] +0 3 3 2 +After: [1, 0, 0, 1] + +Before: [1, 3, 2, 1] +6 0 2 3 +After: [1, 3, 2, 0] + +Before: [1, 1, 1, 1] +9 1 0 3 +After: [1, 1, 1, 1] + +Before: [0, 3, 2, 1] +0 3 3 1 +After: [0, 0, 2, 1] + +Before: [1, 1, 3, 1] +13 1 3 3 +After: [1, 1, 3, 1] + +Before: [2, 2, 0, 3] +7 1 3 0 +After: [0, 2, 0, 3] + +Before: [0, 3, 2, 1] +0 3 3 0 +After: [0, 3, 2, 1] + +Before: [1, 0, 0, 1] +1 0 2 2 +After: [1, 0, 0, 1] + +Before: [2, 1, 2, 1] +2 0 1 2 +After: [2, 1, 1, 1] + +Before: [1, 2, 2, 2] +6 0 2 2 +After: [1, 2, 0, 2] + +Before: [0, 1, 1, 1] +13 1 3 3 +After: [0, 1, 1, 1] + +Before: [2, 1, 1, 0] +11 2 1 2 +After: [2, 1, 2, 0] + +Before: [0, 1, 3, 1] +13 1 3 1 +After: [0, 1, 3, 1] + +Before: [3, 2, 0, 2] +0 3 3 1 +After: [3, 0, 0, 2] + +Before: [1, 1, 2, 1] +10 3 2 3 +After: [1, 1, 2, 1] + +Before: [2, 1, 2, 1] +13 1 3 0 +After: [1, 1, 2, 1] + +Before: [2, 1, 0, 1] +13 1 3 1 +After: [2, 1, 0, 1] + +Before: [2, 1, 2, 2] +12 1 2 3 +After: [2, 1, 2, 0] + +Before: [0, 1, 2, 0] +12 1 2 1 +After: [0, 0, 2, 0] + +Before: [3, 1, 2, 2] +4 1 3 2 +After: [3, 1, 0, 2] + +Before: [1, 1, 0, 2] +1 0 2 1 +After: [1, 0, 0, 2] + +Before: [0, 2, 1, 1] +0 2 3 2 +After: [0, 2, 0, 1] + +Before: [1, 1, 2, 0] +6 0 2 0 +After: [0, 1, 2, 0] + +Before: [0, 3, 1, 2] +8 0 0 3 +After: [0, 3, 1, 0] + +Before: [1, 3, 0, 0] +1 0 2 2 +After: [1, 3, 0, 0] + +Before: [1, 1, 2, 0] +12 1 2 2 +After: [1, 1, 0, 0] + +Before: [2, 1, 0, 2] +0 3 3 1 +After: [2, 0, 0, 2] + +Before: [0, 3, 3, 3] +8 0 0 1 +After: [0, 0, 3, 3] + +Before: [3, 3, 0, 1] +0 3 3 0 +After: [0, 3, 0, 1] + +Before: [3, 1, 1, 2] +4 1 3 3 +After: [3, 1, 1, 0] + +Before: [2, 1, 2, 3] +12 1 2 3 +After: [2, 1, 2, 0] + +Before: [3, 1, 2, 1] +12 1 2 3 +After: [3, 1, 2, 0] + +Before: [1, 0, 2, 2] +6 0 2 3 +After: [1, 0, 2, 0] + +Before: [1, 1, 0, 1] +0 3 3 1 +After: [1, 0, 0, 1] + +Before: [1, 1, 0, 3] +9 1 0 2 +After: [1, 1, 1, 3] + +Before: [3, 0, 2, 1] +10 3 2 3 +After: [3, 0, 2, 1] + +Before: [2, 2, 3, 3] +14 3 2 3 +After: [2, 2, 3, 1] + +Before: [3, 1, 2, 2] +12 1 2 3 +After: [3, 1, 2, 0] + +Before: [0, 1, 2, 1] +10 3 2 1 +After: [0, 1, 2, 1] + +Before: [0, 1, 3, 0] +8 0 0 2 +After: [0, 1, 0, 0] + +Before: [3, 1, 2, 0] +12 1 2 1 +After: [3, 0, 2, 0] + +Before: [1, 3, 2, 0] +6 0 2 3 +After: [1, 3, 2, 0] + +Before: [2, 0, 1, 3] +7 2 3 3 +After: [2, 0, 1, 0] + +Before: [3, 2, 2, 1] +10 3 2 3 +After: [3, 2, 2, 1] + +Before: [1, 2, 0, 0] +1 0 2 3 +After: [1, 2, 0, 0] + +Before: [2, 1, 1, 1] +0 2 3 0 +After: [0, 1, 1, 1] + +Before: [3, 2, 1, 1] +5 2 1 3 +After: [3, 2, 1, 2] + +Before: [3, 1, 3, 1] +14 2 3 0 +After: [0, 1, 3, 1] + +Before: [2, 1, 1, 3] +14 2 1 1 +After: [2, 0, 1, 3] + +Before: [0, 1, 1, 2] +8 0 0 0 +After: [0, 1, 1, 2] + +Before: [2, 3, 3, 2] +15 2 2 2 +After: [2, 3, 1, 2] + +Before: [0, 1, 2, 3] +7 2 3 1 +After: [0, 0, 2, 3] + +Before: [1, 1, 0, 2] +4 1 3 2 +After: [1, 1, 0, 2] + +Before: [0, 2, 3, 0] +8 0 0 2 +After: [0, 2, 0, 0] + +Before: [0, 1, 1, 1] +11 2 1 1 +After: [0, 2, 1, 1] + +Before: [2, 1, 1, 1] +13 1 3 0 +After: [1, 1, 1, 1] + +Before: [2, 3, 1, 3] +7 2 3 0 +After: [0, 3, 1, 3] + +Before: [2, 1, 2, 3] +12 1 2 2 +After: [2, 1, 0, 3] + +Before: [2, 2, 1, 3] +5 2 1 3 +After: [2, 2, 1, 2] + +Before: [3, 1, 1, 3] +11 2 1 0 +After: [2, 1, 1, 3] + +Before: [0, 0, 1, 3] +7 2 3 1 +After: [0, 0, 1, 3] + +Before: [1, 3, 2, 1] +10 3 2 2 +After: [1, 3, 1, 1] + +Before: [3, 2, 1, 2] +15 0 0 2 +After: [3, 2, 1, 2] + +Before: [1, 2, 1, 1] +0 2 3 1 +After: [1, 0, 1, 1] + +Before: [1, 1, 1, 3] +9 1 0 3 +After: [1, 1, 1, 1] + +Before: [1, 1, 0, 3] +9 1 0 3 +After: [1, 1, 0, 1] + +Before: [0, 1, 1, 1] +11 2 1 2 +After: [0, 1, 2, 1] + +Before: [0, 1, 2, 1] +13 1 3 2 +After: [0, 1, 1, 1] + +Before: [1, 1, 2, 2] +4 1 3 2 +After: [1, 1, 0, 2] + +Before: [3, 1, 1, 2] +11 2 1 3 +After: [3, 1, 1, 2] + +Before: [2, 2, 3, 2] +0 3 3 3 +After: [2, 2, 3, 0] + +Before: [0, 0, 1, 1] +0 2 3 1 +After: [0, 0, 1, 1] + +Before: [0, 1, 2, 2] +12 1 2 1 +After: [0, 0, 2, 2] + +Before: [2, 0, 3, 1] +3 0 3 2 +After: [2, 0, 1, 1] + +Before: [1, 0, 2, 0] +6 0 2 0 +After: [0, 0, 2, 0] + +Before: [0, 2, 1, 1] +5 2 1 0 +After: [2, 2, 1, 1] + +Before: [1, 3, 3, 0] +15 2 2 0 +After: [1, 3, 3, 0] + +Before: [0, 3, 2, 0] +8 0 0 2 +After: [0, 3, 0, 0] + +Before: [2, 2, 2, 1] +0 3 3 1 +After: [2, 0, 2, 1] + +Before: [3, 1, 1, 2] +4 1 3 0 +After: [0, 1, 1, 2] + +Before: [1, 2, 1, 0] +5 2 1 0 +After: [2, 2, 1, 0] + +Before: [2, 2, 3, 3] +15 0 0 0 +After: [1, 2, 3, 3] + +Before: [2, 1, 0, 0] +2 0 1 1 +After: [2, 1, 0, 0] + +Before: [1, 2, 2, 3] +6 0 2 2 +After: [1, 2, 0, 3] + +Before: [1, 0, 0, 1] +1 0 2 1 +After: [1, 0, 0, 1] + +Before: [2, 2, 0, 1] +3 0 3 1 +After: [2, 1, 0, 1] + +Before: [3, 2, 1, 2] +5 2 1 1 +After: [3, 2, 1, 2] + +Before: [2, 1, 3, 2] +14 2 0 1 +After: [2, 1, 3, 2] + +Before: [1, 1, 0, 0] +9 1 0 2 +After: [1, 1, 1, 0] + +Before: [2, 2, 3, 3] +15 2 2 2 +After: [2, 2, 1, 3] + +Before: [0, 2, 1, 0] +8 0 0 2 +After: [0, 2, 0, 0] + +Before: [1, 1, 0, 1] +9 1 0 0 +After: [1, 1, 0, 1] + +Before: [0, 1, 2, 2] +4 1 3 0 +After: [0, 1, 2, 2] + +Before: [1, 1, 0, 0] +9 1 0 0 +After: [1, 1, 0, 0] + +Before: [2, 3, 2, 1] +3 0 3 1 +After: [2, 1, 2, 1] + +Before: [1, 2, 1, 3] +5 2 1 3 +After: [1, 2, 1, 2] + +Before: [2, 1, 1, 3] +11 2 1 2 +After: [2, 1, 2, 3] + +Before: [1, 1, 3, 0] +9 1 0 2 +After: [1, 1, 1, 0] + +Before: [2, 1, 1, 3] +11 2 1 1 +After: [2, 2, 1, 3] + +Before: [2, 1, 3, 2] +2 0 1 2 +After: [2, 1, 1, 2] + +Before: [0, 2, 1, 3] +5 2 1 2 +After: [0, 2, 2, 3] + +Before: [1, 0, 0, 2] +1 0 2 3 +After: [1, 0, 0, 0] + +Before: [1, 1, 1, 2] +9 1 0 3 +After: [1, 1, 1, 1] + +Before: [2, 1, 3, 2] +4 1 3 2 +After: [2, 1, 0, 2] + +Before: [1, 0, 2, 2] +6 0 2 2 +After: [1, 0, 0, 2] + +Before: [3, 1, 1, 3] +11 2 1 1 +After: [3, 2, 1, 3] + +Before: [3, 1, 2, 3] +2 0 2 0 +After: [1, 1, 2, 3] + +Before: [1, 2, 0, 2] +1 0 2 0 +After: [0, 2, 0, 2] + +Before: [3, 1, 2, 1] +10 3 2 2 +After: [3, 1, 1, 1] + +Before: [1, 0, 2, 3] +7 2 3 0 +After: [0, 0, 2, 3] + +Before: [3, 1, 2, 3] +12 1 2 0 +After: [0, 1, 2, 3] + +Before: [2, 1, 1, 3] +7 2 3 1 +After: [2, 0, 1, 3] + +Before: [0, 2, 1, 2] +5 2 1 3 +After: [0, 2, 1, 2] + +Before: [3, 1, 1, 0] +11 2 1 0 +After: [2, 1, 1, 0] + +Before: [1, 1, 3, 1] +9 1 0 0 +After: [1, 1, 3, 1] + +Before: [1, 1, 2, 2] +9 1 0 1 +After: [1, 1, 2, 2] + +Before: [2, 1, 1, 3] +11 2 1 3 +After: [2, 1, 1, 2] + +Before: [1, 1, 1, 2] +4 1 3 1 +After: [1, 0, 1, 2] + +Before: [3, 1, 0, 1] +13 1 3 0 +After: [1, 1, 0, 1] + +Before: [1, 2, 2, 3] +6 0 2 0 +After: [0, 2, 2, 3] + +Before: [1, 3, 0, 3] +1 0 2 0 +After: [0, 3, 0, 3] + +Before: [2, 1, 1, 0] +2 0 1 2 +After: [2, 1, 1, 0] + +Before: [0, 1, 2, 1] +12 1 2 3 +After: [0, 1, 2, 0] + +Before: [2, 3, 1, 1] +3 0 3 3 +After: [2, 3, 1, 1] + +Before: [2, 1, 3, 3] +2 0 1 3 +After: [2, 1, 3, 1] + +Before: [1, 3, 2, 1] +10 3 2 3 +After: [1, 3, 2, 1] + +Before: [1, 1, 3, 3] +9 1 0 3 +After: [1, 1, 3, 1] + +Before: [1, 1, 3, 2] +9 1 0 1 +After: [1, 1, 3, 2] + +Before: [1, 1, 0, 1] +13 1 3 2 +After: [1, 1, 1, 1] + +Before: [3, 0, 2, 0] +2 0 2 1 +After: [3, 1, 2, 0] + +Before: [2, 0, 0, 0] +14 0 1 2 +After: [2, 0, 1, 0] + +Before: [0, 1, 2, 1] +13 1 3 3 +After: [0, 1, 2, 1] + +Before: [2, 1, 3, 0] +14 2 0 1 +After: [2, 1, 3, 0] + +Before: [2, 1, 0, 1] +13 1 3 0 +After: [1, 1, 0, 1] + +Before: [2, 1, 0, 1] +2 0 1 1 +After: [2, 1, 0, 1] + +Before: [0, 3, 2, 1] +10 3 2 0 +After: [1, 3, 2, 1] + +Before: [0, 1, 3, 1] +0 3 3 2 +After: [0, 1, 0, 1] + +Before: [0, 2, 1, 1] +5 2 1 1 +After: [0, 2, 1, 1] + +Before: [2, 1, 1, 2] +15 0 0 3 +After: [2, 1, 1, 1] + +Before: [1, 1, 2, 0] +6 0 2 2 +After: [1, 1, 0, 0] + +Before: [1, 1, 2, 1] +6 0 2 0 +After: [0, 1, 2, 1] + +Before: [0, 2, 1, 3] +7 1 3 1 +After: [0, 0, 1, 3] + +Before: [1, 0, 0, 0] +1 0 2 3 +After: [1, 0, 0, 0] + +Before: [2, 1, 2, 3] +2 0 1 2 +After: [2, 1, 1, 3] + +Before: [0, 2, 0, 2] +0 3 3 1 +After: [0, 0, 0, 2] + +Before: [0, 2, 3, 0] +15 2 2 2 +After: [0, 2, 1, 0] + +Before: [1, 2, 2, 2] +14 2 1 3 +After: [1, 2, 2, 1] + +Before: [0, 1, 3, 1] +8 0 0 2 +After: [0, 1, 0, 1] + +Before: [3, 3, 3, 2] +15 0 0 3 +After: [3, 3, 3, 1] + +Before: [3, 3, 0, 2] +14 0 2 1 +After: [3, 1, 0, 2] + +Before: [0, 1, 1, 3] +11 2 1 0 +After: [2, 1, 1, 3] + +Before: [1, 1, 0, 1] +9 1 0 2 +After: [1, 1, 1, 1] + +Before: [0, 1, 2, 1] +10 3 2 3 +After: [0, 1, 2, 1] + +Before: [2, 2, 2, 1] +10 3 2 1 +After: [2, 1, 2, 1] + +Before: [0, 1, 2, 2] +4 1 3 3 +After: [0, 1, 2, 0] + +Before: [1, 2, 2, 1] +10 3 2 2 +After: [1, 2, 1, 1] + +Before: [2, 1, 1, 2] +11 2 1 1 +After: [2, 2, 1, 2] + +Before: [1, 1, 2, 1] +12 1 2 3 +After: [1, 1, 2, 0] + +Before: [3, 3, 1, 1] +0 2 3 1 +After: [3, 0, 1, 1] + +Before: [0, 1, 2, 2] +4 1 3 1 +After: [0, 0, 2, 2] + +Before: [0, 3, 2, 2] +8 0 0 3 +After: [0, 3, 2, 0] + +Before: [2, 1, 2, 1] +2 0 1 0 +After: [1, 1, 2, 1] + +Before: [1, 1, 0, 3] +1 0 2 1 +After: [1, 0, 0, 3] + +Before: [3, 3, 3, 2] +15 0 0 0 +After: [1, 3, 3, 2] + +Before: [0, 1, 1, 2] +4 1 3 2 +After: [0, 1, 0, 2] + +Before: [1, 3, 0, 3] +1 0 2 1 +After: [1, 0, 0, 3] + +Before: [1, 1, 0, 1] +1 0 2 2 +After: [1, 1, 0, 1] + +Before: [2, 1, 0, 2] +4 1 3 0 +After: [0, 1, 0, 2] + +Before: [3, 2, 2, 2] +2 0 2 2 +After: [3, 2, 1, 2] + +Before: [0, 2, 2, 1] +10 3 2 1 +After: [0, 1, 2, 1] + +Before: [0, 1, 0, 2] +4 1 3 2 +After: [0, 1, 0, 2] + +Before: [0, 1, 0, 2] +4 1 3 3 +After: [0, 1, 0, 0] + +Before: [1, 1, 2, 1] +10 3 2 1 +After: [1, 1, 2, 1] + +Before: [1, 1, 0, 1] +13 1 3 0 +After: [1, 1, 0, 1] + +Before: [1, 3, 2, 2] +6 0 2 1 +After: [1, 0, 2, 2] + +Before: [0, 1, 2, 1] +13 1 3 0 +After: [1, 1, 2, 1] + +Before: [0, 1, 1, 3] +11 2 1 1 +After: [0, 2, 1, 3] + +Before: [3, 2, 1, 0] +5 2 1 3 +After: [3, 2, 1, 2] + +Before: [2, 1, 2, 3] +7 2 3 3 +After: [2, 1, 2, 0] + +Before: [1, 1, 1, 1] +11 2 1 2 +After: [1, 1, 2, 1] + +Before: [2, 1, 1, 1] +3 0 3 2 +After: [2, 1, 1, 1] + +Before: [0, 1, 1, 3] +8 0 0 1 +After: [0, 0, 1, 3] + +Before: [3, 2, 3, 3] +7 1 3 3 +After: [3, 2, 3, 0] + +Before: [0, 3, 0, 0] +8 0 0 2 +After: [0, 3, 0, 0] + +Before: [1, 1, 2, 1] +6 0 2 1 +After: [1, 0, 2, 1] + +Before: [0, 1, 1, 2] +4 1 3 0 +After: [0, 1, 1, 2] + +Before: [1, 1, 2, 1] +9 1 0 1 +After: [1, 1, 2, 1] + +Before: [3, 1, 2, 0] +12 1 2 0 +After: [0, 1, 2, 0] + +Before: [1, 3, 0, 3] +1 0 2 2 +After: [1, 3, 0, 3] + +Before: [1, 1, 0, 3] +9 1 0 1 +After: [1, 1, 0, 3] + +Before: [0, 2, 2, 2] +8 0 0 1 +After: [0, 0, 2, 2] + +Before: [0, 1, 1, 1] +13 1 3 1 +After: [0, 1, 1, 1] + +Before: [1, 1, 3, 1] +13 1 3 0 +After: [1, 1, 3, 1] + +Before: [0, 1, 2, 1] +8 0 0 0 +After: [0, 1, 2, 1] + +Before: [2, 1, 2, 1] +12 1 2 2 +After: [2, 1, 0, 1] + +Before: [1, 0, 2, 3] +6 0 2 1 +After: [1, 0, 2, 3] + +Before: [3, 0, 3, 1] +15 2 0 2 +After: [3, 0, 1, 1] + +Before: [0, 1, 1, 1] +0 2 3 0 +After: [0, 1, 1, 1] + +Before: [3, 0, 0, 3] +14 0 2 1 +After: [3, 1, 0, 3] + +Before: [3, 1, 1, 1] +0 2 3 1 +After: [3, 0, 1, 1] + +Before: [0, 1, 2, 3] +7 2 3 3 +After: [0, 1, 2, 0] + +Before: [3, 1, 0, 1] +13 1 3 1 +After: [3, 1, 0, 1] + +Before: [0, 0, 3, 0] +8 0 0 1 +After: [0, 0, 3, 0] + +Before: [1, 1, 0, 2] +1 0 2 3 +After: [1, 1, 0, 0] + +Before: [2, 1, 1, 2] +4 1 3 1 +After: [2, 0, 1, 2] + +Before: [3, 2, 3, 0] +15 2 2 3 +After: [3, 2, 3, 1] + +Before: [0, 2, 0, 3] +7 1 3 0 +After: [0, 2, 0, 3] + +Before: [1, 1, 3, 2] +9 1 0 2 +After: [1, 1, 1, 2] + +Before: [0, 3, 1, 3] +8 0 0 1 +After: [0, 0, 1, 3] + +Before: [3, 1, 2, 1] +2 0 2 0 +After: [1, 1, 2, 1] + +Before: [1, 1, 3, 1] +9 1 0 2 +After: [1, 1, 1, 1] + +Before: [2, 1, 3, 0] +2 0 1 3 +After: [2, 1, 3, 1] + +Before: [2, 1, 1, 0] +11 2 1 1 +After: [2, 2, 1, 0] + +Before: [3, 1, 1, 1] +13 1 3 0 +After: [1, 1, 1, 1] + +Before: [2, 2, 1, 3] +5 2 1 1 +After: [2, 2, 1, 3] + +Before: [0, 0, 2, 1] +10 3 2 3 +After: [0, 0, 2, 1] + +Before: [3, 3, 0, 2] +0 3 3 1 +After: [3, 0, 0, 2] + +Before: [0, 2, 1, 0] +8 0 0 0 +After: [0, 2, 1, 0] + +Before: [3, 3, 0, 2] +15 0 0 3 +After: [3, 3, 0, 1] + +Before: [1, 0, 2, 3] +6 0 2 0 +After: [0, 0, 2, 3] + +Before: [0, 0, 1, 1] +8 0 0 1 +After: [0, 0, 1, 1] + +Before: [1, 0, 2, 1] +10 3 2 0 +After: [1, 0, 2, 1] + +Before: [1, 2, 1, 2] +5 2 1 1 +After: [1, 2, 1, 2] + +Before: [2, 1, 3, 1] +14 2 0 1 +After: [2, 1, 3, 1] + +Before: [2, 1, 2, 0] +2 0 1 0 +After: [1, 1, 2, 0] + +Before: [1, 1, 2, 2] +6 0 2 3 +After: [1, 1, 2, 0] + +Before: [2, 1, 1, 3] +2 0 1 2 +After: [2, 1, 1, 3] + +Before: [2, 3, 3, 2] +14 2 0 2 +After: [2, 3, 1, 2] + +Before: [1, 0, 0, 2] +1 0 2 0 +After: [0, 0, 0, 2] + +Before: [3, 3, 2, 2] +15 0 0 0 +After: [1, 3, 2, 2] + +Before: [0, 1, 1, 2] +4 1 3 3 +After: [0, 1, 1, 0] + +Before: [2, 2, 1, 2] +5 2 1 3 +After: [2, 2, 1, 2] + +Before: [2, 1, 2, 0] +12 1 2 0 +After: [0, 1, 2, 0] + +Before: [3, 1, 0, 1] +13 1 3 2 +After: [3, 1, 1, 1] + +Before: [1, 2, 1, 1] +5 2 1 1 +After: [1, 2, 1, 1] + +Before: [2, 1, 2, 2] +4 1 3 2 +After: [2, 1, 0, 2] + +Before: [0, 1, 0, 2] +4 1 3 0 +After: [0, 1, 0, 2] + +Before: [3, 1, 0, 2] +4 1 3 2 +After: [3, 1, 0, 2] + +Before: [1, 1, 3, 2] +4 1 3 1 +After: [1, 0, 3, 2] + +Before: [3, 1, 1, 1] +13 1 3 2 +After: [3, 1, 1, 1] + +Before: [0, 0, 2, 0] +8 0 0 3 +After: [0, 0, 2, 0] + +Before: [1, 1, 3, 2] +9 1 0 0 +After: [1, 1, 3, 2] + +Before: [3, 2, 1, 0] +5 2 1 1 +After: [3, 2, 1, 0] + +Before: [1, 1, 0, 2] +1 0 2 0 +After: [0, 1, 0, 2] + +Before: [2, 1, 0, 1] +13 1 3 3 +After: [2, 1, 0, 1] + +Before: [3, 1, 2, 0] +12 1 2 2 +After: [3, 1, 0, 0] + +Before: [3, 2, 2, 3] +2 0 2 0 +After: [1, 2, 2, 3] + +Before: [1, 1, 1, 0] +11 2 1 1 +After: [1, 2, 1, 0] + +Before: [0, 0, 1, 2] +8 0 0 3 +After: [0, 0, 1, 0] + +Before: [1, 1, 0, 0] +9 1 0 3 +After: [1, 1, 0, 1] + +Before: [1, 1, 3, 0] +9 1 0 3 +After: [1, 1, 3, 1] + +Before: [1, 1, 1, 1] +11 2 1 1 +After: [1, 2, 1, 1] + +Before: [3, 0, 0, 0] +14 0 2 3 +After: [3, 0, 0, 1] + +Before: [2, 1, 1, 3] +7 1 3 3 +After: [2, 1, 1, 0] + +Before: [0, 3, 3, 2] +8 0 0 2 +After: [0, 3, 0, 2] + +Before: [3, 1, 2, 1] +12 1 2 1 +After: [3, 0, 2, 1] + +Before: [3, 0, 2, 3] +7 2 3 0 +After: [0, 0, 2, 3] + +Before: [3, 1, 1, 1] +14 3 1 1 +After: [3, 0, 1, 1] + +Before: [1, 1, 1, 3] +9 1 0 0 +After: [1, 1, 1, 3] + +Before: [0, 0, 3, 3] +8 0 0 2 +After: [0, 0, 0, 3] + +Before: [3, 1, 3, 3] +7 1 3 1 +After: [3, 0, 3, 3] + +Before: [1, 1, 2, 2] +12 1 2 1 +After: [1, 0, 2, 2] + +Before: [1, 1, 0, 1] +1 0 2 3 +After: [1, 1, 0, 0] + +Before: [2, 2, 2, 1] +3 0 3 2 +After: [2, 2, 1, 1] + +Before: [2, 0, 3, 0] +14 0 1 1 +After: [2, 1, 3, 0] + +Before: [1, 1, 2, 2] +4 1 3 3 +After: [1, 1, 2, 0] + +Before: [1, 1, 2, 3] +12 1 2 2 +After: [1, 1, 0, 3] + +Before: [1, 2, 1, 3] +7 2 3 2 +After: [1, 2, 0, 3] + +Before: [3, 0, 0, 1] +14 0 2 2 +After: [3, 0, 1, 1] + +Before: [3, 2, 1, 0] +5 2 1 0 +After: [2, 2, 1, 0] + +Before: [2, 3, 2, 1] +3 0 3 0 +After: [1, 3, 2, 1] + +Before: [0, 1, 3, 2] +8 0 0 3 +After: [0, 1, 3, 0] + +Before: [2, 2, 1, 1] +3 0 3 3 +After: [2, 2, 1, 1] + +Before: [3, 2, 3, 1] +0 3 3 3 +After: [3, 2, 3, 0] + +Before: [2, 1, 1, 0] +14 2 1 3 +After: [2, 1, 1, 0] + +Before: [2, 2, 1, 3] +7 2 3 1 +After: [2, 0, 1, 3] + +Before: [2, 3, 3, 1] +3 0 3 2 +After: [2, 3, 1, 1] + +Before: [1, 1, 2, 1] +9 1 0 2 +After: [1, 1, 1, 1] + +Before: [0, 3, 2, 1] +10 3 2 1 +After: [0, 1, 2, 1] + +Before: [0, 1, 0, 1] +13 1 3 3 +After: [0, 1, 0, 1] + +Before: [1, 1, 1, 3] +11 2 1 3 +After: [1, 1, 1, 2] + +Before: [3, 1, 1, 2] +11 2 1 2 +After: [3, 1, 2, 2] + +Before: [1, 3, 2, 3] +6 0 2 3 +After: [1, 3, 2, 0] + +Before: [0, 1, 2, 3] +8 0 0 2 +After: [0, 1, 0, 3] + +Before: [3, 0, 1, 3] +14 3 0 2 +After: [3, 0, 1, 3] + +Before: [2, 1, 2, 0] +12 1 2 3 +After: [2, 1, 2, 0] + +Before: [0, 1, 1, 1] +11 2 1 0 +After: [2, 1, 1, 1] + +Before: [2, 3, 2, 1] +0 3 3 2 +After: [2, 3, 0, 1] + +Before: [1, 1, 0, 2] +0 3 3 3 +After: [1, 1, 0, 0] + +Before: [1, 0, 0, 1] +1 0 2 3 +After: [1, 0, 0, 0] + +Before: [3, 2, 1, 3] +7 2 3 3 +After: [3, 2, 1, 0] + +Before: [3, 1, 1, 3] +11 2 1 2 +After: [3, 1, 2, 3] + +Before: [0, 1, 2, 2] +12 1 2 3 +After: [0, 1, 2, 0] + +Before: [3, 3, 2, 1] +10 3 2 0 +After: [1, 3, 2, 1] + +Before: [1, 1, 3, 1] +13 1 3 1 +After: [1, 1, 3, 1] + +Before: [2, 2, 1, 1] +3 0 3 1 +After: [2, 1, 1, 1] + +Before: [2, 1, 2, 2] +4 1 3 0 +After: [0, 1, 2, 2] + +Before: [1, 1, 1, 1] +9 1 0 2 +After: [1, 1, 1, 1] + +Before: [1, 3, 2, 1] +10 3 2 0 +After: [1, 3, 2, 1] + +Before: [2, 0, 2, 1] +10 3 2 0 +After: [1, 0, 2, 1] + +Before: [1, 1, 0, 3] +1 0 2 2 +After: [1, 1, 0, 3] + +Before: [1, 2, 0, 1] +1 0 2 3 +After: [1, 2, 0, 0] + +Before: [1, 3, 0, 0] +1 0 2 0 +After: [0, 3, 0, 0] + +Before: [2, 1, 1, 3] +14 2 1 0 +After: [0, 1, 1, 3] + +Before: [1, 1, 1, 2] +9 1 0 1 +After: [1, 1, 1, 2] + +Before: [1, 1, 0, 1] +13 1 3 1 +After: [1, 1, 0, 1] + +Before: [2, 0, 0, 2] +15 0 0 0 +After: [1, 0, 0, 2] + +Before: [2, 3, 1, 1] +3 0 3 0 +After: [1, 3, 1, 1] + +Before: [0, 1, 2, 0] +12 1 2 3 +After: [0, 1, 2, 0] + +Before: [1, 2, 1, 2] +5 2 1 0 +After: [2, 2, 1, 2] + +Before: [2, 0, 2, 2] +14 3 2 2 +After: [2, 0, 0, 2] + +Before: [0, 2, 2, 1] +10 3 2 0 +After: [1, 2, 2, 1] + +Before: [2, 1, 0, 2] +4 1 3 3 +After: [2, 1, 0, 0] + +Before: [1, 3, 0, 2] +1 0 2 2 +After: [1, 3, 0, 2] + +Before: [0, 0, 2, 3] +8 0 0 1 +After: [0, 0, 2, 3] + +Before: [2, 1, 1, 3] +7 1 3 0 +After: [0, 1, 1, 3] + +Before: [3, 1, 2, 1] +13 1 3 0 +After: [1, 1, 2, 1] + +Before: [2, 0, 1, 1] +3 0 3 1 +After: [2, 1, 1, 1] + +Before: [1, 1, 2, 1] +13 1 3 1 +After: [1, 1, 2, 1] + +Before: [0, 1, 2, 1] +12 1 2 1 +After: [0, 0, 2, 1] + +Before: [2, 2, 3, 3] +14 3 2 2 +After: [2, 2, 1, 3] + +Before: [3, 1, 1, 1] +13 1 3 3 +After: [3, 1, 1, 1] + +Before: [3, 3, 3, 2] +15 2 0 1 +After: [3, 1, 3, 2] + +Before: [2, 1, 2, 1] +3 0 3 1 +After: [2, 1, 2, 1] + +Before: [3, 1, 2, 0] +2 0 2 3 +After: [3, 1, 2, 1] + +Before: [1, 2, 1, 2] +5 2 1 3 +After: [1, 2, 1, 2] + +Before: [3, 2, 1, 1] +5 2 1 0 +After: [2, 2, 1, 1] + +Before: [0, 1, 2, 1] +12 1 2 0 +After: [0, 1, 2, 1] + +Before: [2, 1, 1, 1] +3 0 3 0 +After: [1, 1, 1, 1] + +Before: [3, 1, 1, 2] +11 2 1 1 +After: [3, 2, 1, 2] + +Before: [1, 1, 1, 3] +11 2 1 0 +After: [2, 1, 1, 3] + +Before: [1, 1, 2, 0] +9 1 0 3 +After: [1, 1, 2, 1] + +Before: [0, 2, 2, 3] +8 0 0 3 +After: [0, 2, 2, 0] + +Before: [0, 0, 2, 1] +10 3 2 1 +After: [0, 1, 2, 1] + +Before: [0, 2, 3, 3] +14 3 2 0 +After: [1, 2, 3, 3] + +Before: [2, 1, 0, 3] +2 0 1 2 +After: [2, 1, 1, 3] + +Before: [3, 1, 2, 0] +2 0 2 0 +After: [1, 1, 2, 0] + +Before: [3, 1, 0, 2] +14 0 2 0 +After: [1, 1, 0, 2] + +Before: [2, 1, 3, 0] +2 0 1 1 +After: [2, 1, 3, 0] + +Before: [1, 1, 1, 0] +9 1 0 3 +After: [1, 1, 1, 1] + +Before: [1, 0, 0, 0] +1 0 2 1 +After: [1, 0, 0, 0] + +Before: [0, 3, 2, 2] +8 0 0 2 +After: [0, 3, 0, 2] + +Before: [3, 3, 2, 2] +2 0 2 0 +After: [1, 3, 2, 2] + +Before: [0, 2, 1, 2] +5 2 1 1 +After: [0, 2, 1, 2] + +Before: [3, 3, 2, 2] +2 0 2 3 +After: [3, 3, 2, 1] + +Before: [0, 2, 1, 2] +5 2 1 0 +After: [2, 2, 1, 2] + +Before: [1, 0, 2, 1] +10 3 2 2 +After: [1, 0, 1, 1] + +Before: [0, 1, 0, 1] +13 1 3 2 +After: [0, 1, 1, 1] + +Before: [3, 1, 1, 1] +14 2 1 1 +After: [3, 0, 1, 1] + +Before: [0, 1, 0, 1] +13 1 3 1 +After: [0, 1, 0, 1] + +Before: [2, 2, 0, 1] +3 0 3 2 +After: [2, 2, 1, 1] + +Before: [3, 2, 1, 3] +14 3 0 0 +After: [1, 2, 1, 3] + +Before: [1, 1, 2, 2] +4 1 3 0 +After: [0, 1, 2, 2] + +Before: [3, 1, 2, 3] +7 1 3 1 +After: [3, 0, 2, 3] + +Before: [3, 0, 3, 0] +15 2 2 1 +After: [3, 1, 3, 0] + +Before: [0, 2, 2, 2] +14 2 1 3 +After: [0, 2, 2, 1] + +Before: [1, 1, 2, 3] +12 1 2 1 +After: [1, 0, 2, 3] + +Before: [3, 1, 1, 1] +13 1 3 1 +After: [3, 1, 1, 1] + +Before: [2, 1, 1, 1] +13 1 3 3 +After: [2, 1, 1, 1] + +Before: [2, 2, 2, 3] +7 2 3 3 +After: [2, 2, 2, 0] + +Before: [2, 3, 3, 3] +15 0 0 2 +After: [2, 3, 1, 3] + +Before: [3, 1, 2, 1] +13 1 3 3 +After: [3, 1, 2, 1] + +Before: [3, 3, 3, 2] +15 0 2 0 +After: [1, 3, 3, 2] + +Before: [3, 1, 0, 2] +0 3 3 0 +After: [0, 1, 0, 2] + +Before: [2, 0, 3, 2] +14 0 1 1 +After: [2, 1, 3, 2] + +Before: [1, 0, 2, 1] +10 3 2 3 +After: [1, 0, 2, 1] + +Before: [1, 3, 3, 1] +0 3 3 2 +After: [1, 3, 0, 1] + +Before: [0, 2, 2, 1] +10 3 2 2 +After: [0, 2, 1, 1] + +Before: [2, 2, 1, 0] +5 2 1 0 +After: [2, 2, 1, 0] + +Before: [2, 3, 0, 1] +3 0 3 2 +After: [2, 3, 1, 1] + +Before: [1, 2, 2, 2] +6 0 2 1 +After: [1, 0, 2, 2] + +Before: [0, 1, 2, 2] +12 1 2 0 +After: [0, 1, 2, 2] + +Before: [1, 1, 0, 2] +9 1 0 2 +After: [1, 1, 1, 2] + +Before: [0, 1, 2, 2] +12 1 2 2 +After: [0, 1, 0, 2] + +Before: [2, 1, 2, 0] +12 1 2 2 +After: [2, 1, 0, 0] + +Before: [2, 3, 3, 0] +15 0 0 3 +After: [2, 3, 3, 1] + +Before: [2, 2, 0, 1] +15 0 0 0 +After: [1, 2, 0, 1] + +Before: [2, 0, 3, 2] +0 3 3 2 +After: [2, 0, 0, 2] + +Before: [3, 0, 3, 2] +15 2 2 3 +After: [3, 0, 3, 1] + +Before: [2, 3, 2, 1] +10 3 2 3 +After: [2, 3, 2, 1] + +Before: [2, 1, 2, 1] +3 0 3 3 +After: [2, 1, 2, 1] + +Before: [1, 3, 0, 0] +1 0 2 3 +After: [1, 3, 0, 0] + +Before: [3, 1, 2, 3] +2 0 2 3 +After: [3, 1, 2, 1] + +Before: [2, 1, 1, 2] +11 2 1 2 +After: [2, 1, 2, 2] + +Before: [1, 3, 2, 3] +7 2 3 1 +After: [1, 0, 2, 3] + +Before: [0, 0, 0, 0] +8 0 0 3 +After: [0, 0, 0, 0] + +Before: [1, 0, 3, 1] +14 2 3 2 +After: [1, 0, 0, 1] + +Before: [3, 2, 0, 3] +14 0 2 3 +After: [3, 2, 0, 1] + +Before: [3, 2, 2, 1] +2 0 2 1 +After: [3, 1, 2, 1] + +Before: [2, 1, 2, 1] +3 0 3 0 +After: [1, 1, 2, 1] + +Before: [2, 2, 0, 1] +3 0 3 3 +After: [2, 2, 0, 1] + +Before: [0, 3, 3, 2] +8 0 0 0 +After: [0, 3, 3, 2] + +Before: [3, 2, 0, 1] +14 0 2 1 +After: [3, 1, 0, 1] + +Before: [1, 1, 1, 3] +9 1 0 1 +After: [1, 1, 1, 3] + +Before: [0, 1, 0, 1] +13 1 3 0 +After: [1, 1, 0, 1] + +Before: [1, 1, 1, 0] +9 1 0 1 +After: [1, 1, 1, 0] + +Before: [1, 3, 2, 2] +6 0 2 0 +After: [0, 3, 2, 2] + +Before: [2, 1, 1, 1] +14 3 1 0 +After: [0, 1, 1, 1] + +Before: [1, 1, 3, 0] +9 1 0 0 +After: [1, 1, 3, 0] + +Before: [2, 1, 3, 1] +3 0 3 2 +After: [2, 1, 1, 1] + +Before: [2, 1, 1, 1] +3 0 3 1 +After: [2, 1, 1, 1] + +Before: [3, 2, 1, 3] +7 1 3 3 +After: [3, 2, 1, 0] + +Before: [2, 0, 3, 3] +15 0 0 2 +After: [2, 0, 1, 3] + +Before: [3, 0, 2, 1] +10 3 2 2 +After: [3, 0, 1, 1] + +Before: [1, 1, 2, 3] +9 1 0 0 +After: [1, 1, 2, 3] + +Before: [1, 2, 1, 1] +5 2 1 0 +After: [2, 2, 1, 1] + +Before: [0, 1, 2, 3] +12 1 2 1 +After: [0, 0, 2, 3] + +Before: [1, 3, 0, 1] +1 0 2 3 +After: [1, 3, 0, 0] + +Before: [2, 1, 0, 1] +2 0 1 0 +After: [1, 1, 0, 1] + +Before: [3, 2, 2, 3] +2 0 2 1 +After: [3, 1, 2, 3] + +Before: [1, 2, 0, 1] +1 0 2 1 +After: [1, 0, 0, 1] + +Before: [1, 2, 2, 0] +6 0 2 0 +After: [0, 2, 2, 0] + +Before: [2, 1, 1, 2] +11 2 1 0 +After: [2, 1, 1, 2] + +Before: [3, 1, 1, 3] +7 1 3 2 +After: [3, 1, 0, 3] + +Before: [2, 2, 1, 3] +5 2 1 2 +After: [2, 2, 2, 3] + +Before: [3, 1, 1, 1] +11 2 1 1 +After: [3, 2, 1, 1] + +Before: [2, 1, 2, 2] +4 1 3 1 +After: [2, 0, 2, 2] + +Before: [1, 1, 2, 1] +12 1 2 0 +After: [0, 1, 2, 1] + +Before: [1, 1, 0, 2] +9 1 0 3 +After: [1, 1, 0, 1] + +Before: [3, 3, 2, 3] +2 0 2 0 +After: [1, 3, 2, 3] + +Before: [1, 1, 2, 3] +9 1 0 3 +After: [1, 1, 2, 1] + +Before: [2, 1, 2, 1] +12 1 2 0 +After: [0, 1, 2, 1] + +Before: [1, 1, 0, 2] +4 1 3 1 +After: [1, 0, 0, 2] + +Before: [1, 2, 2, 0] +6 0 2 3 +After: [1, 2, 2, 0] + +Before: [2, 1, 1, 0] +11 2 1 3 +After: [2, 1, 1, 2] + +Before: [1, 1, 0, 1] +13 1 3 3 +After: [1, 1, 0, 1] + +Before: [3, 1, 2, 3] +7 1 3 3 +After: [3, 1, 2, 0] + +Before: [0, 2, 1, 3] +8 0 0 0 +After: [0, 2, 1, 3] + +Before: [3, 2, 1, 3] +7 1 3 0 +After: [0, 2, 1, 3] + +Before: [1, 2, 2, 2] +6 0 2 3 +After: [1, 2, 2, 0] + +Before: [1, 1, 1, 1] +13 1 3 3 +After: [1, 1, 1, 1] + +Before: [2, 1, 3, 2] +15 2 2 1 +After: [2, 1, 3, 2] + +Before: [2, 1, 0, 3] +2 0 1 0 +After: [1, 1, 0, 3] + +Before: [1, 1, 2, 1] +12 1 2 2 +After: [1, 1, 0, 1] + +Before: [1, 1, 3, 2] +4 1 3 0 +After: [0, 1, 3, 2] + +Before: [2, 3, 2, 3] +7 2 3 2 +After: [2, 3, 0, 3] + +Before: [2, 2, 1, 1] +5 2 1 3 +After: [2, 2, 1, 2] + +Before: [0, 0, 2, 1] +10 3 2 0 +After: [1, 0, 2, 1] + +Before: [3, 1, 0, 3] +7 1 3 2 +After: [3, 1, 0, 3] + +Before: [2, 1, 3, 2] +2 0 1 1 +After: [2, 1, 3, 2] + +Before: [2, 3, 1, 1] +3 0 3 1 +After: [2, 1, 1, 1] + +Before: [2, 2, 1, 3] +7 1 3 3 +After: [2, 2, 1, 0] + +Before: [3, 3, 3, 1] +15 0 2 1 +After: [3, 1, 3, 1] + +Before: [0, 1, 1, 0] +11 2 1 1 +After: [0, 2, 1, 0] + +Before: [1, 1, 1, 0] +11 2 1 0 +After: [2, 1, 1, 0] + +Before: [3, 1, 3, 1] +13 1 3 3 +After: [3, 1, 3, 1] + +Before: [0, 1, 3, 2] +8 0 0 1 +After: [0, 0, 3, 2] + +Before: [2, 2, 0, 3] +7 1 3 3 +After: [2, 2, 0, 0] + +Before: [1, 0, 2, 1] +6 0 2 2 +After: [1, 0, 0, 1] + +Before: [1, 3, 0, 2] +0 3 3 3 +After: [1, 3, 0, 0] + +Before: [1, 1, 0, 1] +9 1 0 3 +After: [1, 1, 0, 1] + +Before: [1, 2, 2, 3] +7 1 3 1 +After: [1, 0, 2, 3] + +Before: [1, 1, 2, 2] +12 1 2 3 +After: [1, 1, 2, 0] + +Before: [1, 1, 2, 0] +12 1 2 3 +After: [1, 1, 2, 0] + +Before: [0, 1, 0, 2] +4 1 3 1 +After: [0, 0, 0, 2] + +Before: [1, 1, 1, 0] +9 1 0 0 +After: [1, 1, 1, 0] + +Before: [1, 1, 2, 0] +9 1 0 0 +After: [1, 1, 2, 0] + +Before: [1, 2, 1, 1] +5 2 1 3 +After: [1, 2, 1, 2] + +Before: [3, 0, 3, 2] +15 2 2 0 +After: [1, 0, 3, 2] + +Before: [2, 2, 1, 3] +7 2 3 3 +After: [2, 2, 1, 0] + +Before: [3, 1, 2, 2] +4 1 3 3 +After: [3, 1, 2, 0] + +Before: [3, 1, 2, 1] +15 0 0 1 +After: [3, 1, 2, 1] + +Before: [2, 3, 2, 1] +10 3 2 0 +After: [1, 3, 2, 1] + +Before: [2, 1, 2, 2] +0 3 3 1 +After: [2, 0, 2, 2] + +Before: [1, 2, 0, 2] +1 0 2 1 +After: [1, 0, 0, 2] + +Before: [3, 3, 2, 0] +2 0 2 0 +After: [1, 3, 2, 0] + +Before: [0, 1, 1, 2] +11 2 1 1 +After: [0, 2, 1, 2] + +Before: [3, 1, 2, 1] +13 1 3 1 +After: [3, 1, 2, 1] + +Before: [3, 1, 3, 3] +15 2 0 3 +After: [3, 1, 3, 1] + +Before: [0, 1, 0, 1] +8 0 0 3 +After: [0, 1, 0, 0] + +Before: [2, 3, 2, 1] +0 3 3 3 +After: [2, 3, 2, 0] + +Before: [2, 1, 1, 2] +4 1 3 2 +After: [2, 1, 0, 2] + +Before: [0, 1, 3, 1] +13 1 3 0 +After: [1, 1, 3, 1] + +Before: [2, 2, 1, 1] +5 2 1 0 +After: [2, 2, 1, 1] + +Before: [3, 1, 2, 0] +15 0 0 0 +After: [1, 1, 2, 0] + +Before: [1, 1, 1, 1] +9 1 0 0 +After: [1, 1, 1, 1] + +Before: [1, 1, 2, 2] +12 1 2 2 +After: [1, 1, 0, 2] + +Before: [1, 1, 2, 1] +10 3 2 0 +After: [1, 1, 2, 1] + +Before: [2, 0, 1, 1] +3 0 3 3 +After: [2, 0, 1, 1] diff --git a/2018/inputs/16_2.txt b/2018/inputs/16_2.txt new file mode 100644 index 0000000..6f6f812 --- /dev/null +++ b/2018/inputs/16_2.txt @@ -0,0 +1,1014 @@ +8 0 0 2 +5 2 2 2 +6 3 1 1 +8 0 0 3 +5 3 0 3 +9 2 3 1 +8 1 3 1 +8 1 2 1 +11 0 1 0 +10 0 0 1 +8 0 0 2 +5 2 3 2 +6 3 0 3 +8 2 0 0 +5 0 1 0 +12 3 2 0 +8 0 3 0 +11 1 0 1 +10 1 1 3 +6 1 2 0 +8 1 0 1 +5 1 0 1 +6 0 0 2 +5 0 1 1 +8 1 3 1 +11 3 1 3 +10 3 3 2 +6 3 0 3 +6 2 1 1 +4 3 1 0 +8 0 3 0 +11 0 2 2 +10 2 0 1 +8 1 0 0 +5 0 1 0 +8 3 0 2 +5 2 0 2 +6 2 1 3 +8 0 2 3 +8 3 3 3 +8 3 3 3 +11 3 1 1 +10 1 1 3 +6 3 3 2 +6 0 0 1 +8 0 2 0 +8 0 1 0 +8 0 1 0 +11 3 0 3 +10 3 0 0 +6 2 2 1 +6 1 0 3 +13 1 2 1 +8 1 2 1 +11 1 0 0 +10 0 3 2 +6 2 0 0 +6 3 1 1 +6 2 0 3 +9 0 3 1 +8 1 1 1 +8 1 3 1 +11 1 2 2 +10 2 0 0 +6 3 1 1 +6 2 1 2 +6 0 2 3 +7 3 2 1 +8 1 2 1 +8 1 2 1 +11 1 0 0 +10 0 3 3 +6 3 1 2 +6 1 2 0 +6 0 1 1 +6 2 1 1 +8 1 1 1 +11 3 1 3 +10 3 3 1 +6 2 0 3 +8 0 0 2 +5 2 0 2 +6 2 2 0 +15 0 3 0 +8 0 1 0 +8 0 2 0 +11 0 1 1 +10 1 0 0 +6 3 1 1 +6 0 0 3 +6 2 1 2 +7 3 2 2 +8 2 2 2 +11 2 0 0 +10 0 1 1 +6 1 0 3 +8 0 0 0 +5 0 2 0 +8 0 0 2 +5 2 0 2 +3 0 3 2 +8 2 3 2 +8 2 2 2 +11 1 2 1 +10 1 1 3 +8 2 0 2 +5 2 3 2 +6 3 2 0 +6 1 3 1 +8 1 2 2 +8 2 1 2 +11 2 3 3 +6 1 1 0 +8 1 0 2 +5 2 0 2 +6 2 0 0 +8 0 3 0 +11 3 0 3 +10 3 3 2 +6 2 1 0 +6 2 2 3 +6 0 1 1 +9 0 3 0 +8 0 1 0 +8 0 1 0 +11 0 2 2 +10 2 3 3 +6 3 1 1 +8 3 0 2 +5 2 1 2 +6 1 3 0 +5 0 1 0 +8 0 2 0 +11 0 3 3 +10 3 0 0 +6 1 3 3 +8 0 0 2 +5 2 0 2 +6 0 1 1 +5 3 1 2 +8 2 2 2 +11 0 2 0 +10 0 2 3 +6 2 1 1 +6 2 0 2 +6 3 3 0 +13 1 0 1 +8 1 2 1 +11 1 3 3 +10 3 2 2 +6 1 1 3 +6 0 2 1 +6 0 2 0 +5 3 1 3 +8 3 2 3 +11 2 3 2 +10 2 3 3 +6 1 3 0 +6 0 0 2 +6 3 1 1 +8 0 2 1 +8 1 3 1 +11 3 1 3 +10 3 0 1 +6 2 2 0 +6 2 1 3 +6 3 3 2 +9 0 3 2 +8 2 2 2 +8 2 3 2 +11 2 1 1 +10 1 3 3 +6 0 3 2 +8 2 0 1 +5 1 3 1 +2 0 1 1 +8 1 1 1 +11 1 3 3 +10 3 3 2 +6 3 0 1 +6 1 1 3 +3 0 3 1 +8 1 3 1 +11 2 1 2 +10 2 1 0 +6 2 1 1 +6 1 3 2 +6 2 0 3 +9 1 3 3 +8 3 3 3 +11 3 0 0 +10 0 3 2 +6 2 3 0 +6 1 0 3 +3 0 3 3 +8 3 2 3 +11 2 3 2 +10 2 2 1 +6 1 2 3 +6 2 3 2 +3 0 3 2 +8 2 1 2 +8 2 2 2 +11 2 1 1 +10 1 0 2 +6 3 2 1 +6 3 3 0 +11 3 3 1 +8 1 2 1 +8 1 2 1 +11 2 1 2 +6 2 1 1 +13 1 0 0 +8 0 3 0 +8 0 1 0 +11 0 2 2 +10 2 1 3 +8 1 0 0 +5 0 1 0 +6 0 0 2 +8 0 2 0 +8 0 3 0 +8 0 2 0 +11 3 0 3 +10 3 3 1 +6 3 3 2 +6 2 1 0 +6 2 2 3 +15 0 3 3 +8 3 2 3 +11 3 1 1 +10 1 3 2 +6 3 1 1 +8 2 0 3 +5 3 0 3 +4 1 0 1 +8 1 2 1 +11 2 1 2 +10 2 0 1 +6 3 1 2 +6 1 1 3 +6 1 0 0 +8 3 2 3 +8 3 2 3 +11 1 3 1 +10 1 2 3 +6 2 1 1 +6 2 1 2 +10 0 2 2 +8 2 1 2 +11 3 2 3 +6 0 0 1 +6 2 1 2 +10 0 2 0 +8 0 3 0 +11 3 0 3 +10 3 1 2 +8 2 0 3 +5 3 0 3 +6 1 1 0 +11 0 0 3 +8 3 2 3 +11 3 2 2 +10 2 3 3 +6 2 1 1 +6 3 2 2 +6 2 2 0 +0 0 2 0 +8 0 1 0 +11 0 3 3 +10 3 3 2 +6 2 1 3 +6 2 0 0 +6 3 0 1 +15 0 3 3 +8 3 1 3 +8 3 3 3 +11 3 2 2 +10 2 3 1 +8 1 0 0 +5 0 1 0 +6 3 3 2 +8 0 0 3 +5 3 1 3 +8 0 2 3 +8 3 1 3 +11 3 1 1 +10 1 1 3 +6 0 0 1 +6 2 1 2 +10 0 2 1 +8 1 2 1 +11 1 3 3 +10 3 2 0 +8 0 0 2 +5 2 0 2 +6 3 2 3 +6 3 3 1 +12 3 2 1 +8 1 1 1 +11 1 0 0 +10 0 0 3 +6 3 2 1 +6 2 2 0 +6 3 3 2 +0 0 2 0 +8 0 3 0 +8 0 1 0 +11 0 3 3 +10 3 3 2 +6 1 3 1 +8 1 0 3 +5 3 2 3 +8 0 0 0 +5 0 2 0 +1 1 3 0 +8 0 1 0 +11 2 0 2 +6 3 1 1 +6 2 0 0 +4 1 0 1 +8 1 2 1 +11 2 1 2 +10 2 1 1 +6 3 0 2 +6 1 2 3 +3 0 3 0 +8 0 1 0 +11 0 1 1 +8 3 0 2 +5 2 2 2 +6 2 0 3 +8 2 0 0 +5 0 3 0 +2 2 0 2 +8 2 1 2 +11 1 2 1 +10 1 2 0 +6 3 0 1 +8 0 0 2 +5 2 0 2 +14 2 3 1 +8 1 2 1 +11 1 0 0 +10 0 2 3 +6 3 3 2 +6 1 3 0 +8 3 0 1 +5 1 1 1 +11 1 0 2 +8 2 3 2 +8 2 3 2 +11 3 2 3 +10 3 3 1 +6 2 2 2 +6 0 2 3 +7 3 2 0 +8 0 2 0 +8 0 2 0 +11 1 0 1 +10 1 2 3 +6 3 2 0 +8 2 0 2 +5 2 0 2 +8 1 0 1 +5 1 3 1 +0 2 0 0 +8 0 3 0 +11 0 3 3 +10 3 2 1 +6 1 1 0 +8 3 0 3 +5 3 0 3 +6 1 1 2 +6 3 0 2 +8 2 2 2 +11 2 1 1 +10 1 3 2 +8 3 0 1 +5 1 1 1 +6 3 1 3 +11 0 0 1 +8 1 1 1 +11 1 2 2 +10 2 1 1 +6 1 2 2 +6 3 2 0 +6 2 1 3 +12 0 2 0 +8 0 3 0 +11 1 0 1 +10 1 1 2 +6 2 3 0 +8 2 0 3 +5 3 1 3 +6 3 1 1 +5 3 1 3 +8 3 2 3 +11 2 3 2 +6 0 3 3 +6 3 0 0 +8 2 0 1 +5 1 2 1 +13 1 0 0 +8 0 1 0 +11 0 2 2 +10 2 3 1 +6 2 1 2 +6 1 2 3 +6 3 0 0 +2 2 0 3 +8 3 3 3 +11 1 3 1 +10 1 2 3 +6 1 3 0 +6 3 0 1 +5 0 1 1 +8 1 2 1 +11 1 3 3 +10 3 3 2 +6 1 3 3 +8 0 0 1 +5 1 0 1 +8 1 0 0 +5 0 2 0 +3 0 3 1 +8 1 2 1 +11 2 1 2 +6 1 1 0 +6 0 2 1 +8 3 0 3 +5 3 2 3 +5 0 1 0 +8 0 3 0 +8 0 2 0 +11 0 2 2 +6 1 0 1 +6 2 1 0 +15 0 3 3 +8 3 3 3 +11 3 2 2 +6 0 2 1 +6 2 3 3 +6 3 3 0 +4 0 3 1 +8 1 2 1 +11 2 1 2 +6 0 1 3 +8 0 0 0 +5 0 2 0 +8 3 0 1 +5 1 2 1 +6 3 0 0 +8 0 2 0 +8 0 3 0 +11 0 2 2 +10 2 1 3 +8 2 0 2 +5 2 3 2 +6 1 1 1 +6 2 3 0 +1 1 0 2 +8 2 3 2 +11 3 2 3 +10 3 0 0 +6 0 3 3 +8 3 0 1 +5 1 0 1 +6 2 0 2 +7 3 2 2 +8 2 2 2 +11 0 2 0 +10 0 0 3 +6 2 3 1 +8 3 0 2 +5 2 0 2 +6 3 3 0 +13 1 0 2 +8 2 3 2 +8 2 3 2 +11 3 2 3 +8 3 0 2 +5 2 2 2 +2 2 0 1 +8 1 3 1 +11 3 1 3 +10 3 2 2 +6 1 3 3 +6 3 3 1 +6 2 0 0 +3 0 3 3 +8 3 3 3 +11 3 2 2 +10 2 2 0 +6 1 1 1 +6 2 1 3 +8 2 0 2 +5 2 0 2 +14 2 3 2 +8 2 2 2 +8 2 3 2 +11 2 0 0 +10 0 1 3 +6 3 0 1 +6 3 2 2 +6 2 0 0 +6 2 1 0 +8 0 2 0 +11 3 0 3 +10 3 0 1 +6 0 1 3 +6 2 3 2 +8 3 0 0 +5 0 0 0 +7 3 2 3 +8 3 3 3 +8 3 2 3 +11 1 3 1 +10 1 1 2 +6 2 0 0 +8 0 0 3 +5 3 1 3 +6 1 1 1 +1 3 0 1 +8 1 2 1 +11 1 2 2 +10 2 2 3 +6 0 2 1 +6 3 1 0 +6 2 2 2 +2 2 0 1 +8 1 3 1 +8 1 1 1 +11 1 3 3 +10 3 1 2 +6 1 0 1 +6 2 2 3 +1 1 3 0 +8 0 2 0 +8 0 3 0 +11 2 0 2 +10 2 3 1 +6 2 0 0 +6 2 0 2 +15 0 3 3 +8 3 1 3 +11 3 1 1 +10 1 0 3 +6 3 0 2 +6 1 3 1 +0 0 2 2 +8 2 3 2 +11 3 2 3 +10 3 3 0 +6 1 2 3 +6 3 1 1 +6 0 0 2 +12 1 2 3 +8 3 3 3 +8 3 3 3 +11 3 0 0 +10 0 3 1 +8 1 0 0 +5 0 2 0 +8 1 0 2 +5 2 2 2 +6 0 2 3 +7 3 2 2 +8 2 2 2 +11 2 1 1 +10 1 2 3 +6 2 3 1 +6 3 1 2 +13 1 2 0 +8 0 3 0 +11 0 3 3 +10 3 1 1 +6 1 2 3 +6 3 1 0 +8 3 2 0 +8 0 1 0 +11 1 0 1 +6 1 3 0 +6 2 2 2 +6 3 0 3 +10 0 2 0 +8 0 1 0 +11 0 1 1 +6 3 0 0 +2 2 0 3 +8 3 1 3 +11 3 1 1 +10 1 2 3 +6 1 2 2 +8 1 0 1 +5 1 1 1 +6 2 2 0 +1 1 0 0 +8 0 3 0 +11 3 0 3 +10 3 1 0 +6 2 0 3 +6 2 0 2 +1 1 3 3 +8 3 1 3 +11 3 0 0 +10 0 0 3 +6 3 2 1 +8 3 0 0 +5 0 2 0 +6 3 2 2 +0 0 2 2 +8 2 1 2 +11 3 2 3 +10 3 3 0 +8 0 0 3 +5 3 0 3 +6 1 3 1 +6 2 2 2 +7 3 2 3 +8 3 1 3 +8 3 3 3 +11 0 3 0 +10 0 0 3 +6 3 2 2 +6 2 1 0 +0 0 2 1 +8 1 3 1 +8 1 2 1 +11 1 3 3 +8 1 0 2 +5 2 2 2 +6 3 1 0 +6 3 3 1 +2 2 1 1 +8 1 1 1 +11 3 1 3 +10 3 1 1 +6 3 2 3 +6 2 0 0 +6 3 0 2 +13 0 2 3 +8 3 3 3 +8 3 1 3 +11 3 1 1 +10 1 2 3 +8 2 0 0 +5 0 1 0 +8 3 0 2 +5 2 2 2 +8 0 0 1 +5 1 0 1 +11 0 0 1 +8 1 2 1 +11 3 1 3 +10 3 3 0 +6 0 1 3 +6 3 3 1 +6 3 1 2 +14 3 2 3 +8 3 3 3 +11 0 3 0 +10 0 2 3 +6 1 0 1 +6 1 0 0 +6 2 3 2 +10 0 2 1 +8 1 1 1 +8 1 2 1 +11 1 3 3 +6 1 1 2 +6 0 3 1 +5 0 1 2 +8 2 3 2 +11 3 2 3 +10 3 2 1 +8 3 0 3 +5 3 2 3 +8 1 0 0 +5 0 2 0 +6 3 3 2 +0 0 2 3 +8 3 2 3 +8 3 1 3 +11 3 1 1 +10 1 2 0 +6 1 3 3 +8 3 0 2 +5 2 1 2 +6 0 1 1 +5 3 1 3 +8 3 1 3 +11 0 3 0 +10 0 3 1 +6 1 3 0 +6 0 3 3 +8 1 0 2 +5 2 2 2 +7 3 2 3 +8 3 2 3 +11 3 1 1 +6 0 0 2 +6 2 3 3 +6 0 3 0 +14 2 3 0 +8 0 1 0 +8 0 1 0 +11 0 1 1 +10 1 0 3 +6 3 0 2 +6 2 2 0 +6 2 0 1 +13 0 2 1 +8 1 3 1 +8 1 1 1 +11 3 1 3 +10 3 2 1 +6 3 1 3 +6 1 2 0 +8 0 2 2 +8 2 3 2 +11 1 2 1 +6 1 0 3 +6 3 3 2 +11 0 0 2 +8 2 2 2 +11 1 2 1 +10 1 2 3 +6 0 3 0 +8 1 0 2 +5 2 2 2 +6 3 2 1 +2 2 1 2 +8 2 1 2 +11 3 2 3 +6 0 0 2 +6 1 3 1 +8 1 2 0 +8 0 3 0 +8 0 2 0 +11 0 3 3 +10 3 2 2 +6 2 2 0 +6 1 2 3 +3 0 3 0 +8 0 2 0 +11 2 0 2 +10 2 3 3 +6 0 0 1 +6 2 0 0 +6 3 3 2 +0 0 2 2 +8 2 1 2 +8 2 1 2 +11 2 3 3 +10 3 1 0 +6 2 3 1 +6 2 3 3 +8 3 0 2 +5 2 0 2 +14 2 3 2 +8 2 3 2 +11 2 0 0 +10 0 0 1 +8 2 0 2 +5 2 0 2 +6 1 0 0 +1 0 3 3 +8 3 2 3 +8 3 2 3 +11 1 3 1 +6 2 2 0 +6 2 0 3 +6 1 3 2 +15 0 3 0 +8 0 2 0 +11 1 0 1 +10 1 2 0 +6 3 0 1 +6 0 3 2 +6 1 1 3 +12 1 2 1 +8 1 1 1 +11 1 0 0 +10 0 1 2 +6 3 1 1 +6 3 1 0 +5 3 1 3 +8 3 3 3 +11 2 3 2 +10 2 1 0 +6 0 2 3 +6 2 3 2 +8 1 0 1 +5 1 0 1 +7 3 2 3 +8 3 1 3 +8 3 1 3 +11 3 0 0 +6 2 1 1 +6 3 0 2 +6 0 1 3 +14 3 2 2 +8 2 2 2 +11 2 0 0 +8 2 0 2 +5 2 0 2 +6 1 1 3 +6 2 3 1 +8 1 3 1 +11 0 1 0 +10 0 0 1 +6 2 1 0 +6 3 1 2 +1 3 0 0 +8 0 2 0 +11 0 1 1 +10 1 3 0 +6 0 3 3 +6 1 1 1 +14 3 2 1 +8 1 2 1 +11 0 1 0 +10 0 3 2 +6 2 3 1 +6 2 0 0 +6 1 1 3 +1 3 0 0 +8 0 1 0 +11 0 2 2 +10 2 0 1 +6 0 2 2 +6 2 0 3 +6 2 1 0 +15 0 3 3 +8 3 2 3 +8 3 3 3 +11 1 3 1 +6 3 0 0 +8 0 0 3 +5 3 1 3 +11 3 3 3 +8 3 1 3 +8 3 1 3 +11 3 1 1 +10 1 3 3 +6 2 0 0 +6 3 0 2 +8 0 0 1 +5 1 2 1 +0 0 2 1 +8 1 1 1 +8 1 1 1 +11 1 3 3 +10 3 1 2 +6 2 0 1 +6 2 3 3 +15 0 3 1 +8 1 1 1 +8 1 1 1 +11 1 2 2 +10 2 1 0 +6 0 2 3 +6 3 3 1 +6 2 1 2 +7 3 2 3 +8 3 3 3 +11 3 0 0 +10 0 0 2 +6 2 3 0 +6 0 0 3 +2 0 1 3 +8 3 3 3 +11 2 3 2 +10 2 2 3 +6 1 0 2 +6 1 0 1 +1 1 0 1 +8 1 1 1 +11 3 1 3 +8 1 0 1 +5 1 3 1 +2 0 1 1 +8 1 3 1 +11 3 1 3 +10 3 0 2 +6 2 2 3 +8 2 0 1 +5 1 3 1 +15 0 3 1 +8 1 1 1 +8 1 1 1 +11 2 1 2 +10 2 3 0 +6 3 0 1 +6 1 0 3 +6 2 1 2 +2 2 1 2 +8 2 2 2 +8 2 3 2 +11 0 2 0 +10 0 0 1 +6 1 0 0 +6 2 2 2 +10 0 2 2 +8 2 1 2 +11 1 2 1 +10 1 2 0 +6 3 1 1 +6 2 0 3 +6 2 0 2 +9 2 3 2 +8 2 1 2 +11 0 2 0 +10 0 2 2 +6 1 1 3 +6 0 2 1 +8 0 0 0 +5 0 1 0 +5 3 1 3 +8 3 2 3 +11 3 2 2 +10 2 0 1 +6 1 2 2 +6 2 1 3 +1 0 3 2 +8 2 2 2 +11 2 1 1 +6 3 3 2 +6 2 3 0 +15 0 3 2 +8 2 2 2 +11 2 1 1 +10 1 2 0 +6 2 1 1 +6 3 3 2 +9 1 3 3 +8 3 3 3 +11 0 3 0 +10 0 2 1 +6 0 0 2 +6 2 0 0 +6 1 1 3 +1 3 0 2 +8 2 1 2 +8 2 1 2 +11 2 1 1 +10 1 0 0 +6 2 2 1 +6 0 0 3 +6 3 2 2 +13 1 2 2 +8 2 3 2 +11 0 2 0 +10 0 0 2 +6 2 2 3 +8 2 0 0 +5 0 0 0 +6 3 1 1 +6 3 0 0 +8 0 3 0 +11 0 2 2 +10 2 0 1 +6 0 1 2 +6 3 2 0 +6 0 1 3 +12 0 2 3 +8 3 1 3 +8 3 2 3 +11 3 1 1 +10 1 3 2 +6 2 2 1 +6 2 3 0 +6 3 2 3 +4 3 1 1 +8 1 2 1 +11 2 1 2 +10 2 0 0 +8 3 0 3 +5 3 1 3 +6 1 1 1 +6 3 3 2 +8 3 2 3 +8 3 2 3 +11 0 3 0 +6 2 3 2 +6 2 0 1 +6 2 0 3 +9 1 3 3 +8 3 1 3 +11 0 3 0 +10 0 1 2 +6 1 3 3 +6 2 2 0 +11 3 3 3 +8 3 2 3 +11 2 3 2 +6 2 0 3 +6 3 1 1 +15 0 3 0 +8 0 2 0 +8 0 2 0 +11 2 0 2 +10 2 2 3 +8 2 0 0 +5 0 1 0 +8 3 0 1 +5 1 1 1 +6 0 0 2 +8 1 2 2 +8 2 2 2 +8 2 1 2 +11 3 2 3 +10 3 2 0 diff --git a/2018/inputs/17.txt b/2018/inputs/17.txt new file mode 100644 index 0000000..1e2ccdd --- /dev/null +++ b/2018/inputs/17.txt @@ -0,0 +1,1713 @@ +y=1181, x=576..579 +y=434, x=498..503 +x=647, y=653..675 +y=1204, x=593..595 +y=268, x=475..498 +x=599, y=619..638 +y=1130, x=452..478 +x=439, y=1365..1377 +y=652, x=589..595 +y=1552, x=560..577 +x=439, y=852..867 +x=605, y=292..298 +x=489, y=709..718 +x=567, y=1087..1097 +y=1774, x=631..634 +x=649, y=592..612 +x=610, y=533..555 +x=564, y=996..1008 +x=651, y=416..441 +y=1106, x=502..519 +y=1015, x=479..487 +x=572, y=25..35 +x=630, y=849..865 +x=573, y=884..897 +x=614, y=667..688 +x=464, y=1542..1567 +x=645, y=258..270 +y=1029, x=656..662 +y=1502, x=483..511 +x=589, y=1553..1555 +x=535, y=1792..1795 +x=469, y=166..193 +x=484, y=1117..1142 +x=655, y=1277..1295 +x=598, y=162..170 +y=620, x=430..455 +x=665, y=1205..1212 +x=501, y=1347..1364 +x=661, y=664..684 +x=583, y=131..142 +x=542, y=722..727 +x=475, y=748..761 +x=602, y=1386..1393 +x=578, y=1651..1662 +y=1711, x=598..603 +y=164, x=642..660 +x=488, y=1176..1183 +x=644, y=207..221 +x=654, y=1678..1691 +y=1673, x=448..454 +x=630, y=1299..1312 +y=695, x=472..474 +x=465, y=1022..1045 +x=645, y=1216..1243 +x=623, y=423..437 +x=625, y=200..219 +x=565, y=1153..1166 +x=490, y=1510..1519 +x=553, y=941..947 +x=634, y=1101..1126 +x=515, y=111..113 +y=1146, x=427..438 +y=1096, x=451..460 +x=464, y=1339..1346 +x=612, y=1383..1396 +y=500, x=516..532 +x=555, y=941..947 +x=528, y=1243..1270 +x=646, y=1136..1146 +y=887, x=470..484 +x=617, y=316..343 +x=575, y=1060..1069 +y=1047, x=443..455 +y=1120, x=527..580 +x=514, y=126..135 +y=292, x=484..500 +x=556, y=75..91 +y=646, x=494..518 +x=644, y=552..568 +x=509, y=8..17 +y=735, x=591..614 +x=586, y=1215..1228 +y=1335, x=443..465 +y=495, x=522..526 +x=610, y=864..867 +y=221, x=639..644 +y=1346, x=464..469 +x=489, y=967..983 +x=602, y=1277..1289 +x=620, y=1348..1375 +x=575, y=1736..1744 +x=629, y=462..466 +y=270, x=645..652 +x=518, y=1244..1270 +x=576, y=1151..1162 +x=483, y=970..973 +y=1349, x=606..610 +y=1335, x=634..655 +y=1671, x=650..657 +x=619, y=243..265 +x=585, y=558..563 +x=536, y=1876..1887 +x=652, y=551..559 +x=593, y=1256..1268 +x=440, y=1480..1496 +y=1401, x=520..541 +x=624, y=1297..1306 +x=501, y=1510..1528 +x=587, y=567..575 +y=1470, x=560..580 +y=776, x=519..523 +x=601, y=981..983 +x=516, y=655..666 +y=1803, x=573..578 +x=504, y=1654..1677 +y=1931, x=537..667 +x=540, y=145..163 +x=616, y=204..210 +x=473, y=1856..1859 +x=547, y=241..259 +x=664, y=932..939 +x=475, y=306..316 +y=1572, x=622..628 +x=641, y=985..1001 +x=527, y=1572..1575 +x=447, y=1116..1124 +x=595, y=650..652 +y=1326, x=616..619 +x=626, y=822..835 +x=583, y=1063..1075 +x=576, y=1212..1222 +y=1206, x=486..495 +x=602, y=1885..1910 +x=460, y=1781..1805 +y=996, x=521..527 +x=591, y=1083..1103 +x=569, y=1563..1574 +y=785, x=560..579 +y=857, x=522..524 +x=599, y=804..805 +x=651, y=1724..1736 +y=637, x=449..467 +x=455, y=815..842 +x=476, y=1327..1345 +y=1533, x=615..624 +y=1268, x=633..655 +x=653, y=295..299 +x=522, y=388..415 +y=1365, x=462..487 +y=1430, x=428..438 +x=487, y=488..499 +y=1150, x=599..608 +x=559, y=1922..1927 +x=664, y=170..193 +y=1531, x=441..444 +y=1315, x=600..604 +x=603, y=1541..1543 +x=664, y=1401..1420 +x=580, y=322..345 +x=449, y=627..637 +y=1749, x=497..511 +x=577, y=1060..1069 +y=289, x=492..494 +x=443, y=1330..1335 +x=487, y=405..416 +x=603, y=18..33 +y=1312, x=612..630 +x=605, y=625..633 +x=546, y=1230..1232 +x=553, y=1126..1142 +x=441, y=936..943 +y=1715, x=544..641 +y=1693, x=594..596 +x=649, y=1151..1170 +x=490, y=405..416 +x=602, y=1602..1623 +y=142, x=580..583 +x=574, y=646..660 +y=789, x=479..485 +y=1093, x=640..655 +y=1200, x=501..508 +y=225, x=557..572 +x=591, y=727..735 +x=515, y=1653..1665 +x=467, y=489..499 +y=193, x=459..469 +x=593, y=1143..1162 +x=461, y=489..493 +x=547, y=198..217 +x=522, y=61..73 +x=626, y=1767..1779 +y=446, x=437..448 +y=840, x=443..451 +x=496, y=597..601 +x=650, y=1004..1013 +x=429, y=936..943 +x=557, y=812..822 +x=542, y=1633..1635 +x=469, y=1607..1615 +y=1654, x=624..626 +x=504, y=787..798 +x=569, y=1868..1875 +y=902, x=641..644 +y=1170, x=649..651 +x=606, y=532..555 +x=493, y=1509..1528 +x=452, y=1410..1425 +x=535, y=468..480 +x=599, y=1150..1158 +y=1486, x=429..437 +y=415, x=518..522 +x=511, y=1490..1502 +x=634, y=1765..1774 +x=539, y=869..879 +x=470, y=1413..1418 +x=516, y=1641..1648 +y=598, x=432..434 +x=494, y=807..818 +x=477, y=1875..1898 +x=577, y=77..98 +x=477, y=324..337 +x=451, y=1510..1535 +x=590, y=838..849 +x=565, y=1872..1898 +x=516, y=825..831 +x=541, y=869..879 +y=695, x=427..444 +x=437, y=1166..1194 +x=593, y=1279..1292 +x=518, y=469..480 +x=532, y=1851..1861 +y=1861, x=532..536 +y=1485, x=636..652 +y=1887, x=493..496 +x=436, y=749..766 +y=1268, x=593..610 +y=1145, x=512..520 +y=334, x=482..485 +y=1351, x=553..565 +x=491, y=1547..1556 +y=1908, x=530..549 +y=521, x=607..634 +x=602, y=1687..1698 +x=631, y=1725..1736 +y=1792, x=432..456 +x=530, y=1572..1575 +x=584, y=1154..1166 +x=620, y=1286..1292 +x=537, y=1918..1931 +x=608, y=1474..1489 +x=461, y=989..1006 +x=477, y=1672..1678 +y=1287, x=492..495 +y=1318, x=532..554 +x=463, y=12..30 +x=628, y=595..608 +x=560, y=778..785 +y=1624, x=472..480 +y=673, x=486..489 +x=475, y=1241..1254 +y=1479, x=472..485 +x=458, y=468..477 +y=1298, x=494..497 +x=641, y=1437..1447 +y=973, x=464..483 +y=1695, x=594..596 +x=460, y=1084..1096 +x=613, y=293..298 +x=503, y=1548..1556 +x=574, y=915..931 +y=25, x=482..501 +x=637, y=529..549 +x=441, y=1440..1453 +y=91, x=556..567 +x=432, y=1695..1711 +y=1375, x=620..644 +y=1912, x=553..556 +y=413, x=595..598 +x=584, y=1257..1281 +y=131, x=551..556 +x=493, y=573..576 +x=551, y=860..864 +x=469, y=79..91 +x=462, y=1144..1150 +x=513, y=812..814 +y=1789, x=582..607 +y=1246, x=590..592 +x=544, y=1703..1715 +y=677, x=480..496 +x=432, y=588..598 +x=566, y=556..559 +y=1926, x=511..515 +y=592, x=455..478 +x=610, y=1647..1659 +x=651, y=213..238 +y=1622, x=543..565 +x=451, y=90..104 +x=576, y=1174..1181 +y=1243, x=645..651 +x=553, y=1343..1351 +x=572, y=201..225 +x=648, y=947..970 +x=581, y=444..462 +x=459, y=36..59 +x=642, y=147..164 +x=561, y=1634..1635 +x=593, y=697..707 +x=557, y=200..225 +y=1077, x=457..461 +y=1429, x=600..626 +x=631, y=781..785 +x=565, y=1343..1351 +x=651, y=891..905 +x=445, y=1827..1843 +y=1711, x=432..460 +x=491, y=1819..1821 +x=558, y=725..730 +x=434, y=991..1012 +x=634, y=434..442 +x=452, y=527..540 +x=618, y=1479..1484 +x=644, y=621..626 +x=533, y=1526..1544 +y=831, x=490..516 +y=466, x=629..649 +y=1228, x=568..586 +x=567, y=1062..1075 +x=640, y=1747..1758 +x=579, y=777..785 +x=549, y=812..822 +y=1732, x=638..640 +y=490, x=576..594 +x=516, y=1495..1518 +x=620, y=1297..1306 +y=254, x=460..468 +x=475, y=254..268 +x=482, y=12..25 +y=1183, x=468..488 +x=587, y=666..675 +y=68, x=479..500 +x=524, y=1789..1801 +x=613, y=1046..1058 +x=580, y=567..575 +y=879, x=539..541 +x=448, y=533..537 +x=658, y=1363..1375 +y=410, x=427..438 +y=176, x=501..504 +x=491, y=783..794 +x=570, y=351..373 +y=259, x=521..547 +y=480, x=518..535 +y=633, x=605..607 +x=523, y=767..776 +y=898, x=552..556 +x=606, y=1340..1349 +x=494, y=631..646 +x=496, y=1688..1695 +y=821, x=634..642 +y=1393, x=602..605 +x=443, y=1175..1177 +x=531, y=851..861 +y=582, x=442..546 +y=864, x=551..570 +x=562, y=996..1008 +y=575, x=580..587 +x=529, y=1763..1775 +y=40, x=502..506 +y=73, x=522..529 +y=798, x=504..526 +y=628, x=513..529 +x=520, y=1657..1662 +y=1648, x=516..536 +y=1142, x=484..495 +x=492, y=302..315 +x=586, y=1176..1187 +y=512, x=516..518 +y=218, x=502..504 +y=515, x=516..518 +x=516, y=512..515 +x=444, y=690..695 +y=626, x=624..644 +x=637, y=1276..1295 +y=1370, x=592..595 +y=1860, x=609..620 +x=620, y=900..915 +x=614, y=727..735 +x=437, y=1464..1486 +y=1254, x=457..475 +y=910, x=583..585 +y=294, x=429..436 +y=398, x=481..501 +x=642, y=1768..1779 +y=1845, x=500..524 +y=1898, x=561..565 +y=712, x=571..573 +y=735, x=489..491 +y=887, x=586..589 +y=1518, x=516..521 +x=466, y=551..560 +x=472, y=1613..1624 +x=561, y=701..715 +y=33, x=599..603 +x=538, y=896..908 +x=568, y=1456..1464 +y=559, x=566..568 +x=515, y=328..356 +x=662, y=1020..1029 +x=624, y=355..377 +x=480, y=1612..1624 +y=1139, x=570..574 +y=1795, x=530..535 +x=516, y=490..500 +x=462, y=1830..1837 +x=437, y=202..223 +x=661, y=1504..1509 +x=451, y=470..481 +x=515, y=1836..1840 +x=633, y=189..191 +x=467, y=708..718 +x=528, y=900..902 +x=497, y=232..241 +x=588, y=1686..1698 +y=1306, x=620..624 +x=480, y=667..677 +x=493, y=9..21 +y=1416, x=490..515 +x=624, y=1507..1533 +x=436, y=290..294 +y=708, x=571..573 +x=462, y=601..615 +y=595, x=628..638 +y=1205, x=621..626 +x=582, y=1130..1142 +x=487, y=1000..1015 +x=651, y=1695..1703 +x=544, y=891..902 +x=459, y=165..193 +x=549, y=1897..1908 +y=1484, x=616..618 +x=556, y=1887..1912 +y=1868, x=462..480 +x=621, y=1177..1205 +x=561, y=1873..1898 +x=624, y=1475..1489 +y=1377, x=439..451 +y=943, x=429..441 +y=1553, x=610..615 +x=509, y=1048..1074 +x=483, y=915..928 +x=480, y=606..608 +x=580, y=1027..1043 +x=630, y=978..996 +x=516, y=1875..1887 +x=501, y=1190..1200 +y=377, x=624..632 +y=481, x=451..470 +y=555, x=606..610 +x=445, y=1542..1567 +x=514, y=1231..1233 +x=572, y=62..72 +y=1097, x=548..567 +x=593, y=1784..1786 +x=556, y=29..31 +x=514, y=34..44 +x=651, y=29..31 +x=601, y=1342..1352 +x=439, y=177..182 +x=522, y=853..857 +x=638, y=110..114 +y=1166, x=565..584 +x=549, y=447..457 +x=508, y=1896..1898 +x=525, y=1763..1775 +x=572, y=350..373 +x=583, y=273..301 +x=496, y=148..158 +x=427, y=690..695 +x=506, y=449..461 +x=622, y=592..612 +x=492, y=497..521 +x=554, y=962..972 +x=543, y=827..840 +y=91, x=469..487 +x=446, y=614..616 +x=477, y=453..456 +x=501, y=366..376 +y=487, x=564..568 +x=495, y=1188..1206 +x=530, y=1896..1908 +x=436, y=123..147 +x=471, y=1856..1859 +x=486, y=664..673 +y=770, x=573..583 +x=565, y=1403..1411 +x=599, y=18..33 +y=1599, x=556..577 +y=1411, x=565..567 +x=541, y=986..1012 +x=601, y=1083..1103 +y=1825, x=486..502 +y=1695, x=480..496 +x=440, y=122..147 +x=476, y=364..376 +y=409, x=449..463 +x=446, y=1143..1150 +x=536, y=1614..1619 +y=290, x=510..514 +y=600, x=454..459 +y=1837, x=562..579 +x=462, y=1851..1868 +x=544, y=278..297 +y=902, x=544..563 +x=580, y=1438..1447 +x=546, y=570..582 +x=644, y=1874..1875 +x=447, y=306..316 +x=556, y=277..297 +x=626, y=424..437 +y=806, x=549..557 +x=596, y=1693..1695 +y=936, x=444..451 +y=1156, x=486..510 +y=1567, x=445..464 +y=779, x=514..530 +x=536, y=1851..1861 +y=992, x=504..509 +x=535, y=329..356 +y=814, x=513..519 +y=210, x=604..616 +x=491, y=731..735 +x=558, y=1084..1093 +y=352, x=642..648 +x=425, y=591..601 +x=634, y=1586..1603 +x=554, y=599..608 +x=605, y=397..419 +x=514, y=267..290 +y=263, x=554..568 +x=473, y=911..937 +y=897, x=573..579 +x=595, y=1401..1409 +x=613, y=367..370 +y=1535, x=433..451 +x=573, y=767..770 +x=665, y=41..45 +y=1093, x=558..561 +x=454, y=1666..1673 +x=495, y=1662..1672 +x=566, y=220..222 +x=492, y=1268..1287 +x=534, y=808..818 +x=480, y=1852..1868 +y=282, x=590..616 +x=502, y=218..221 +y=1187, x=566..586 +x=598, y=317..343 +x=562, y=1833..1837 +x=499, y=470..481 +y=113, x=456..478 +y=1703, x=649..651 +x=454, y=598..600 +x=474, y=1058..1074 +x=498, y=434..436 +y=1680, x=481..483 +x=662, y=851..868 +y=987, x=563..565 +y=299, x=653..660 +y=1590, x=617..625 +y=608, x=476..480 +x=538, y=527..540 +y=246, x=488..504 +x=455, y=611..620 +x=490, y=345..356 +x=566, y=602..604 +y=1603, x=634..650 +x=608, y=1150..1158 +x=454, y=363..376 +y=1679, x=596..623 +x=483, y=1569..1571 +x=554, y=1309..1318 +x=660, y=146..164 +x=442, y=752..755 +x=514, y=850..861 +y=1142, x=531..553 +y=1509, x=653..661 +x=509, y=1836..1840 +x=604, y=1301..1315 +x=488, y=426..440 +x=475, y=1733..1758 +x=543, y=41..67 +x=527, y=1107..1120 +y=660, x=574..577 +x=502, y=1081..1106 +x=469, y=1428..1434 +y=564, x=488..492 +x=430, y=1435..1455 +x=547, y=919..929 +x=641, y=1560..1563 +x=480, y=646..657 +y=715, x=478..480 +x=622, y=193..215 +x=445, y=271..274 +x=612, y=1280..1292 +y=938, x=608..621 +x=526, y=1897..1898 +x=610, y=441..443 +x=610, y=666..688 +y=1887, x=516..536 +x=625, y=1287..1292 +x=512, y=1204..1207 +x=505, y=1292..1303 +y=1045, x=465..485 +x=485, y=327..334 +x=574, y=570..587 +x=463, y=394..409 +x=485, y=1460..1479 +y=457, x=549..552 +y=456, x=477..479 +x=453, y=758..770 +x=660, y=360..381 +y=1895, x=616..620 +x=530, y=93..101 +x=589, y=861..887 +x=657, y=41..45 +y=31, x=556..564 +y=1823, x=512..656 +x=542, y=381..398 +y=1897, x=616..620 +x=610, y=1922..1927 +y=675, x=635..647 +x=535, y=938..950 +x=525, y=180..188 +x=635, y=654..675 +y=356, x=515..535 +x=520, y=1525..1544 +x=469, y=1799..1801 +x=478, y=1780..1805 +x=604, y=204..210 +x=456, y=490..493 +x=504, y=1875..1898 +x=527, y=1013..1027 +x=521, y=974..996 +x=583, y=737..760 +x=598, y=410..413 +x=476, y=493..496 +x=478, y=588..592 +x=438, y=1134..1146 +x=639, y=172..182 +x=471, y=1826..1843 +x=489, y=731..735 +x=427, y=888..914 +x=490, y=215..224 +y=1287, x=644..649 +x=655, y=729..747 +x=493, y=1788..1792 +x=596, y=763..765 +y=1236, x=446..456 +x=442, y=590..601 +x=600, y=1277..1289 +y=1224, x=590..608 +x=452, y=1102..1130 +x=504, y=165..176 +x=494, y=1296..1298 +x=615, y=511..516 +x=512, y=1465..1469 +x=649, y=1280..1287 +x=656, y=1811..1823 +x=567, y=76..91 +y=111, x=502..510 +y=867, x=439..444 +x=638, y=595..608 +y=87, x=531..549 +x=484, y=278..292 +y=1364, x=501..511 +x=454, y=1848..1872 +x=607, y=821..835 +x=504, y=218..221 +y=1402, x=626..640 +x=468, y=244..254 +x=554, y=1735..1744 +y=540, x=452..538 +x=472, y=493..496 +x=434, y=1757..1760 +x=502, y=97..111 +x=630, y=1250..1254 +y=1479, x=616..618 +x=549, y=788..806 +x=522, y=198..217 +x=577, y=1539..1552 +x=639, y=206..221 +x=591, y=697..707 +x=514, y=1554..1581 +x=647, y=1325..1330 +x=597, y=192..215 +x=461, y=1058..1077 +y=1528, x=493..501 +x=503, y=191..203 +y=1348, x=431..435 +y=1898, x=477..504 +x=487, y=79..91 +y=1074, x=509..519 +x=601, y=1361..1373 +x=579, y=499..504 +x=640, y=243..265 +y=1922, x=435..438 +y=1267, x=429..448 +x=650, y=156..158 +x=449, y=1439..1453 +x=545, y=417..419 +y=521, x=492..504 +x=517, y=895..908 +y=315, x=492..510 +x=644, y=1280..1287 +y=666, x=512..516 +y=395, x=490..494 +x=433, y=1434..1455 +x=510, y=1595..1617 +x=588, y=763..765 +x=631, y=1550..1552 +x=612, y=1102..1126 +y=1635, x=542..561 +x=526, y=787..798 +x=580, y=1497..1511 +x=603, y=1709..1711 +x=471, y=947..963 +y=730, x=558..564 +x=496, y=168..180 +x=435, y=1331..1348 +y=983, x=489..501 +y=257, x=597..613 +x=617, y=1343..1352 +x=598, y=498..504 +x=580, y=78..98 +y=104, x=441..451 +x=500, y=279..292 +x=626, y=1419..1429 +x=613, y=254..257 +x=610, y=1552..1553 +y=1418, x=470..472 +x=470, y=1038..1041 +y=1375, x=652..658 +y=230, x=457..467 +x=547, y=1370..1395 +x=597, y=1324..1349 +x=504, y=235..246 +x=499, y=728..739 +y=1910, x=602..627 +y=1830, x=456..462 +x=487, y=445..459 +x=525, y=590..610 +y=238, x=651..654 +x=587, y=367..370 +y=1336, x=554..575 +y=462, x=566..581 +x=452, y=1167..1194 +y=798, x=626..643 +x=507, y=507..518 +x=554, y=1523..1525 +x=536, y=1766..1778 +x=539, y=1465..1469 +x=465, y=1329..1335 +x=516, y=1697..1722 +y=970, x=644..648 +y=739, x=483..499 +x=625, y=1584..1590 +x=631, y=1765..1774 +x=598, y=1709..1711 +y=1330, x=645..647 +y=914, x=427..455 +y=1177, x=443..445 +x=618, y=1142..1162 +x=434, y=588..598 +y=560, x=450..466 +x=621, y=921..938 +y=481, x=478..499 +x=620, y=1857..1860 +x=577, y=843..845 +x=486, y=1647..1649 +x=589, y=534..537 +x=576, y=216..223 +y=606, x=476..480 +x=500, y=1831..1845 +x=450, y=644..650 +x=490, y=1401..1416 +x=581, y=63..72 +x=547, y=543..563 +x=605, y=1386..1393 +y=1249, x=575..599 +x=518, y=632..646 +y=563, x=581..585 +y=1805, x=460..478 +x=551, y=125..131 +x=483, y=366..376 +y=1013, x=645..650 +y=1560, x=641..649 +x=664, y=1267..1295 +y=462, x=543..560 +y=221, x=502..504 +x=604, y=101..107 +y=1263, x=602..604 +x=624, y=621..626 +y=996, x=630..632 +y=1659, x=567..571 +y=851, x=606..608 +y=928, x=483..486 +y=840, x=523..543 +y=1649, x=463..486 +x=592, y=1358..1370 +y=1615, x=457..469 +y=1295, x=546..550 +x=581, y=855..868 +y=698, x=462..480 +x=594, y=864..867 +x=593, y=216..223 +x=552, y=723..727 +y=707, x=591..593 +y=1142, x=565..582 +x=496, y=127..135 +x=637, y=1197..1223 +x=608, y=839..851 +x=641, y=1703..1715 +y=745, x=506..518 +x=536, y=1205..1207 +y=1233, x=502..514 +x=447, y=1732..1758 +x=627, y=529..549 +y=1008, x=562..564 +y=1784, x=593..598 +x=496, y=407..421 +x=583, y=163..170 +x=595, y=1193..1204 +x=519, y=1049..1074 +x=509, y=971..992 +y=785, x=631..634 +x=495, y=1117..1142 +y=1563, x=641..649 +x=540, y=591..603 +x=572, y=838..849 +y=1898, x=508..526 +y=568, x=642..644 +y=1571, x=576..585 +y=1001, x=453..455 +x=448, y=1702..1704 +x=553, y=141..164 +y=559, x=647..652 +y=297, x=544..556 +x=451, y=925..936 +x=626, y=1400..1402 +x=467, y=1058..1074 +x=502, y=1230..1233 +y=376, x=454..476 +x=487, y=1354..1365 +x=537, y=1554..1581 +x=495, y=1269..1287 +y=1212, x=656..665 +x=519, y=1082..1106 +x=628, y=728..747 +x=552, y=1652..1662 +x=510, y=98..111 +x=640, y=1730..1732 +y=1035, x=539..558 +x=616, y=1479..1484 +x=472, y=1460..1479 +x=626, y=771..798 +x=520, y=1395..1401 +y=163, x=533..540 +y=931, x=574..578 +y=1455, x=430..433 +x=552, y=674..689 +x=579, y=1832..1837 +x=467, y=208..230 +x=650, y=1587..1603 +x=464, y=969..973 +x=565, y=1129..1142 +x=660, y=294..299 +y=180, x=496..513 +x=622, y=1566..1572 +y=1556, x=491..503 +y=516, x=612..615 +y=1006, x=445..461 +x=574, y=404..411 +x=485, y=787..789 +x=548, y=1086..1097 +x=538, y=7..25 +x=504, y=971..992 +x=517, y=9..17 +x=615, y=803..805 +x=570, y=998..1012 +x=519, y=767..776 +x=571, y=708..712 +y=1295, x=637..655 +y=215, x=597..622 +x=569, y=737..760 +y=1779, x=626..642 +x=549, y=81..87 +y=135, x=496..514 +x=644, y=848..865 +x=543, y=417..419 +x=551, y=591..603 +y=939, x=585..591 +x=498, y=947..963 +x=568, y=1214..1228 +x=588, y=1477..1489 +x=586, y=1196..1207 +x=514, y=749..761 +x=455, y=548..557 +y=1162, x=576..578 +x=481, y=1326..1345 +y=1069, x=575..577 +x=573, y=1777..1803 +x=483, y=1490..1502 +x=595, y=410..413 +x=636, y=1463..1485 +y=1001, x=641..655 +x=486, y=1189..1206 +x=488, y=190..203 +x=493, y=1883..1887 +x=560, y=1539..1552 +x=455, y=992..1001 +x=564, y=482..487 +y=1292, x=593..612 +y=587, x=559..574 +x=436, y=37..59 +x=549, y=872..885 +x=456, y=177..182 +y=991, x=552..572 +y=812, x=513..519 +x=469, y=1338..1346 +x=500, y=1570..1571 +x=518, y=721..745 +y=1821, x=491..493 +x=429, y=1239..1267 +x=430, y=749..766 +x=470, y=471..481 +x=532, y=491..500 +x=612, y=1796..1805 +x=478, y=1103..1130 +x=478, y=471..481 +x=647, y=931..939 +y=983, x=601..622 +x=628, y=1565..1572 +x=631, y=1197..1223 +y=1489, x=570..588 +x=460, y=926..934 +x=542, y=112..113 +x=444, y=482..503 +x=557, y=789..806 +x=446, y=12..30 +x=635, y=1557..1567 +x=660, y=1197..1200 +x=565, y=977..987 +y=549, x=627..637 +x=654, y=213..238 +y=504, x=579..598 +x=565, y=1627..1640 +y=885, x=531..549 +x=474, y=683..695 +x=531, y=380..398 +x=445, y=1175..1177 +y=1455, x=548..550 +y=1235, x=536..556 +x=627, y=1249..1254 +x=595, y=1358..1370 +x=459, y=598..600 +x=496, y=910..937 +x=580, y=1108..1120 +y=1840, x=509..515 +x=499, y=324..337 +x=575, y=1893..1914 +x=593, y=1892..1914 +x=599, y=1239..1249 +x=520, y=1137..1145 +y=343, x=598..617 +x=575, y=1238..1249 +y=947, x=553..555 +x=568, y=482..487 +x=556, y=1224..1235 +y=241, x=495..497 +x=454, y=124..138 +x=550, y=1438..1455 +x=645, y=1004..1013 +y=1722, x=514..516 +x=486, y=915..928 +y=768, x=547..561 +x=499, y=1789..1792 +x=531, y=871..885 +y=1805, x=606..612 +x=437, y=1757..1760 +y=1158, x=599..608 +x=480, y=713..715 +x=541, y=1396..1401 +x=441, y=89..104 +y=493, x=456..461 +x=648, y=359..381 +x=552, y=1043..1053 +x=634, y=1318..1335 +y=1345, x=476..481 +x=620, y=1895..1897 +y=223, x=437..442 +x=432, y=271..274 +x=429, y=1463..1486 +x=579, y=884..897 +x=577, y=1585..1599 +y=141, x=610..633 +y=1075, x=567..583 +y=1270, x=518..528 +x=572, y=980..991 +y=35, x=551..572 +x=656, y=1205..1212 +y=1914, x=575..593 +x=441, y=1516..1531 +y=1801, x=524..550 +x=439, y=614..616 +y=604, x=566..572 +y=222, x=563..566 +x=531, y=674..689 +y=1281, x=559..584 +x=590, y=1222..1224 +x=633, y=120..141 +x=451, y=1365..1377 +x=595, y=534..537 +y=219, x=625..635 +y=1413, x=588..608 +x=470, y=445..459 +y=615, x=462..486 +y=1659, x=610..632 +x=585, y=950..974 +x=603, y=1583..1596 +y=747, x=628..655 +y=1519, x=472..490 +x=643, y=771..798 +x=578, y=914..931 +y=1678, x=461..477 +x=498, y=1531..1542 +y=101, x=627..641 +x=667, y=1918..1931 +x=455, y=587..592 +x=632, y=979..996 +y=1331, x=603..625 +x=519, y=792..794 +y=1223, x=631..637 +x=560, y=1458..1470 +y=1511, x=556..580 +x=610, y=998..1020 +x=441, y=532..537 +y=608, x=628..638 +y=158, x=650..653 +x=568, y=253..263 +y=608, x=554..578 +x=488, y=552..564 +y=1778, x=520..536 +x=430, y=610..620 +x=493, y=1532..1542 +x=497, y=1743..1749 +y=223, x=576..593 +x=500, y=878..881 +x=512, y=427..440 +y=822, x=549..557 +x=551, y=181..188 +y=1640, x=565..618 +x=432, y=1788..1792 +y=437, x=623..626 +x=608, y=1403..1413 +y=1786, x=593..598 +y=1289, x=600..602 +x=477, y=1590..1599 +x=467, y=628..637 +x=513, y=627..628 +y=164, x=553..565 +x=658, y=1400..1420 +x=438, y=645..650 +x=554, y=1422..1437 +x=514, y=1696..1722 +x=492, y=553..564 +x=632, y=1136..1146 +x=648, y=1679..1691 +x=472, y=1412..1418 +y=421, x=479..496 +x=444, y=1745..1773 +x=454, y=645..657 +x=479, y=1000..1015 +x=493, y=1819..1821 +x=490, y=382..395 +x=472, y=683..695 +x=543, y=1609..1622 +x=616, y=1895..1897 +y=881, x=500..515 +y=557, x=455..459 +x=657, y=1656..1671 +y=356, x=468..490 +x=584, y=1028..1043 +y=537, x=589..595 +x=580, y=702..715 +y=657, x=454..480 +x=642, y=810..821 +x=572, y=602..604 +x=474, y=1038..1041 +x=655, y=985..1001 +x=563, y=890..902 +y=107, x=604..614 +x=571, y=1654..1659 +x=609, y=947..963 +x=526, y=488..495 +x=612, y=511..516 +x=466, y=925..934 +x=575, y=542..563 +x=456, y=1224..1236 +y=1927, x=559..610 +y=1124, x=428..447 +x=641, y=899..902 +x=490, y=824..831 +x=600, y=1302..1315 +x=616, y=172..182 +y=527, x=565..567 +y=1596, x=581..603 +y=21, x=491..493 +x=566, y=443..462 +y=1792, x=493..499 +x=607, y=493..521 +y=381, x=648..660 +x=545, y=1519..1530 +y=67, x=535..543 +x=506, y=37..40 +x=529, y=626..628 +y=1043, x=580..584 +x=464, y=784..794 +x=500, y=54..68 +y=934, x=460..466 +y=477, x=458..464 +x=550, y=1789..1801 +x=460, y=245..254 +y=274, x=432..445 +y=204, x=604..616 +x=591, y=919..939 +x=438, y=1915..1922 +x=592, y=1563..1574 +y=1623, x=592..602 +x=445, y=989..1006 +y=1150, x=446..462 +x=567, y=501..527 +x=474, y=125..138 +x=501, y=11..25 +y=1396, x=590..612 +x=652, y=1463..1485 +x=478, y=102..113 +x=479, y=408..421 +x=578, y=1151..1162 +x=461, y=122..135 +x=640, y=111..114 +x=461, y=1671..1678 +x=489, y=1654..1677 +y=135, x=461..466 +x=536, y=1225..1235 +x=579, y=843..845 +y=170, x=583..598 +x=524, y=1832..1845 +x=501, y=165..176 +x=457, y=1059..1077 +x=466, y=122..135 +x=652, y=1442..1456 +x=565, y=500..527 +y=1792, x=530..535 +y=1295, x=659..664 +x=427, y=386..410 +y=31, x=648..651 +x=509, y=597..601 +x=585, y=1324..1349 +x=623, y=1668..1679 +x=435, y=1849..1872 +x=445, y=147..158 +y=1544, x=520..533 +x=592, y=1243..1246 +x=556, y=1585..1599 +x=624, y=947..963 +y=781, x=631..634 +x=626, y=1654..1656 +x=527, y=973..996 +x=442, y=1340..1350 +y=1662, x=520..530 +x=602, y=1260..1263 +x=606, y=1796..1805 +x=633, y=890..905 +x=494, y=35..44 +x=456, y=1788..1792 +x=498, y=255..268 +y=1656, x=624..626 +y=1162, x=593..618 +x=510, y=1154..1156 +x=633, y=1258..1268 +x=547, y=765..768 +y=217, x=522..547 +x=444, y=926..936 +x=581, y=1582..1596 +x=593, y=1193..1204 +x=471, y=1799..1801 +x=483, y=1589..1599 +y=849, x=572..590 +y=1837, x=456..462 +x=496, y=666..677 +x=458, y=753..755 +x=468, y=345..356 +x=511, y=214..224 +x=444, y=853..867 +y=1469, x=512..539 +x=523, y=589..610 +y=761, x=475..514 +x=439, y=326..335 +x=597, y=255..257 +x=579, y=1212..1222 +x=426, y=954..975 +x=489, y=1293..1303 +x=615, y=1551..1553 +x=582, y=1541..1543 +x=650, y=1656..1671 +x=575, y=1324..1336 +x=568, y=1519..1530 +y=147, x=436..440 +x=638, y=189..191 +x=627, y=77..101 +x=518, y=512..515 +x=515, y=1400..1416 +y=684, x=657..661 +y=1654, x=567..571 +y=1856, x=471..473 +y=1875, x=631..644 +x=494, y=382..395 +x=524, y=853..857 +x=645, y=1478..1480 +x=552, y=447..457 +y=612, x=622..649 +x=645, y=169..193 +x=462, y=1354..1365 +y=1555, x=589..606 +x=428, y=1746..1773 +x=590, y=1383..1396 +x=647, y=552..559 +y=503, x=444..446 +y=25, x=523..538 +y=1672, x=495..498 +y=794, x=511..519 +x=663, y=1557..1567 +y=1012, x=425..434 +x=495, y=232..241 +x=478, y=713..715 +x=484, y=861..887 +y=1464, x=568..571 +x=655, y=1319..1335 +y=1373, x=584..601 +y=576, x=493..532 +x=574, y=1127..1139 +y=1456, x=652..665 +x=455, y=888..914 +y=1859, x=471..473 +x=649, y=461..466 +x=579, y=1174..1181 +y=1425, x=445..452 +y=1194, x=437..452 +x=556, y=124..131 +y=496, x=472..476 +y=718, x=467..489 +x=652, y=1363..1375 +x=627, y=1884..1910 +y=794, x=464..491 +y=1437, x=554..561 +x=550, y=999..1012 +x=578, y=598..608 +x=446, y=481..503 +x=581, y=558..563 +x=481, y=384..398 +x=559, y=1256..1281 +y=937, x=473..496 +x=585, y=1568..1571 +x=465, y=758..770 +y=867, x=594..610 +y=805, x=599..615 +y=1395, x=547..575 +x=511, y=792..794 +y=675, x=568..587 +y=1207, x=512..536 +y=845, x=577..579 +x=470, y=860..887 +x=481, y=1675..1680 +x=642, y=553..568 +y=974, x=585..599 +x=479, y=55..68 +x=583, y=768..770 +x=518, y=387..415 +x=443, y=1020..1047 +x=480, y=686..698 +x=616, y=620..638 +x=592, y=1602..1623 +x=612, y=1300..1312 +x=550, y=1273..1295 +y=461, x=506..525 +y=316, x=447..475 +x=638, y=1730..1732 +x=634, y=781..785 +x=521, y=1496..1518 +x=563, y=977..987 +y=1496, x=440..465 +x=510, y=266..290 +x=519, y=812..814 +x=497, y=1595..1618 +x=438, y=387..410 +x=448, y=436..446 +x=658, y=224..247 +x=455, y=1021..1047 +y=459, x=470..487 +x=479, y=453..456 +x=443, y=833..840 +x=528, y=1614..1619 +x=448, y=1240..1267 +x=542, y=1230..1232 +x=632, y=354..377 +x=511, y=1743..1749 +y=1027, x=513..527 +y=963, x=471..498 +x=464, y=468..477 +y=939, x=647..664 +x=433, y=1510..1535 +x=511, y=1346..1364 +x=553, y=1886..1912 +x=602, y=441..443 +x=551, y=26..35 +y=376, x=483..501 +y=1698, x=588..602 +x=640, y=1400..1402 +x=536, y=414..424 +x=506, y=722..745 +x=502, y=1809..1825 +y=1691, x=648..654 +x=449, y=395..409 +x=643, y=1478..1480 +x=600, y=1418..1429 +x=502, y=37..40 +y=908, x=517..538 +y=1074, x=467..474 +y=1662, x=552..578 +x=514, y=1596..1617 +y=441, x=651..663 +x=445, y=1411..1425 +y=894, x=552..556 +y=1058, x=613..628 +x=645, y=1325..1330 +y=1568, x=576..585 +y=370, x=587..613 +x=515, y=878..881 +x=442, y=203..223 +x=435, y=1914..1922 +y=1420, x=658..664 +x=530, y=1792..1795 +y=443, x=602..610 +x=598, y=1784..1786 +x=607, y=625..633 +x=537, y=1653..1665 +x=524, y=900..902 +x=561, y=1084..1093 +x=468, y=1175..1183 +y=766, x=430..436 +x=645, y=1891..1908 +x=663, y=416..441 +x=425, y=992..1012 +x=457, y=1608..1615 +y=1349, x=585..597 +y=1760, x=434..437 +y=1200, x=656..660 +x=513, y=1013..1027 +y=688, x=610..614 +x=523, y=828..840 +y=59, x=436..459 +y=715, x=561..580 +x=570, y=1127..1139 +x=585, y=998..1020 +x=501, y=385..398 +x=590, y=1243..1246 +x=536, y=1747..1758 +y=835, x=607..626 +y=424, x=536..552 +x=622, y=980..983 +x=604, y=1260..1263 +x=648, y=343..352 +x=645, y=435..442 +x=536, y=1640..1648 +y=770, x=453..465 +x=552, y=894..898 +x=606, y=839..851 +y=1736, x=631..651 +x=564, y=29..31 +y=1434, x=469..490 +x=521, y=242..259 +y=114, x=638..640 +y=765, x=588..596 +x=577, y=647..660 +x=606, y=1552..1555 +x=653, y=1505..1509 +y=1617, x=510..514 +y=499, x=467..487 +y=915, x=607..620 +y=1908, x=637..645 +x=463, y=1646..1649 +x=483, y=1674..1680 +y=1677, x=489..504 +y=373, x=570..572 +x=624, y=1654..1656 +x=453, y=1897..1912 +x=585, y=919..939 +x=626, y=1177..1205 +x=529, y=61..73 +x=531, y=1125..1142 +x=450, y=550..560 +y=1012, x=550..570 +x=583, y=906..910 +x=592, y=1869..1875 +y=865, x=630..644 +x=490, y=1428..1434 +x=582, y=1773..1789 +x=655, y=1258..1268 +x=608, y=1223..1224 +x=558, y=1023..1035 +x=486, y=601..615 +x=635, y=201..219 +x=659, y=1267..1295 +x=576, y=1568..1571 +y=1704, x=448..453 +x=503, y=434..436 +y=72, x=572..581 +x=657, y=663..684 +x=665, y=1443..1456 +x=453, y=1702..1704 +x=580, y=1459..1470 +x=588, y=1404..1413 +x=524, y=1854..1867 +y=905, x=633..651 +x=567, y=1044..1053 +x=499, y=701..713 +y=601, x=425..442 +y=1883, x=493..496 +x=492, y=276..289 +y=193, x=645..664 +y=442, x=634..645 +x=610, y=121..141 +x=570, y=1478..1489 +x=427, y=1133..1146 +x=652, y=257..270 +y=1126, x=612..634 +x=568, y=667..675 +x=559, y=403..411 +y=224, x=490..511 +y=537, x=441..448 +x=642, y=343..352 +y=518, x=507..529 +x=561, y=765..768 +x=586, y=862..887 +x=614, y=102..107 +x=451, y=1083..1096 +x=533, y=144..163 +x=522, y=488..495 +x=557, y=322..345 +y=1775, x=525..529 +x=585, y=906..910 +x=644, y=899..902 +y=610, x=523..525 +x=476, y=606..608 +y=1041, x=470..474 +y=603, x=540..551 +y=1574, x=569..592 +x=594, y=476..490 +y=1254, x=627..630 +x=610, y=1340..1349 +x=510, y=301..315 +x=535, y=40..67 +x=485, y=1023..1045 +x=644, y=948..970 +x=459, y=548..557 +y=1409, x=595..599 +y=1665, x=515..537 +x=653, y=156..158 +y=247, x=658..662 +x=483, y=728..739 +y=861, x=514..531 +y=1801, x=469..471 +y=17, x=509..517 +y=818, x=494..534 +x=610, y=1257..1268 +y=1489, x=608..624 +x=649, y=1560..1563 +y=950, x=535..561 +y=713, x=499..511 +y=301, x=570..583 +x=463, y=816..842 +x=573, y=961..972 +y=335, x=439..453 +x=496, y=1883..1887 +x=556, y=1523..1525 +x=515, y=1904..1926 +x=656, y=1197..1200 +x=456, y=103..113 +x=617, y=1583..1590 +y=1543, x=582..603 +x=570, y=274..301 +x=460, y=1696..1711 +y=1758, x=536..640 +x=437, y=435..446 +x=465, y=1479..1496 +y=1020, x=585..610 +x=641, y=77..101 +y=929, x=527..547 +x=618, y=1627..1640 +y=601, x=496..509 +x=651, y=1217..1243 +x=494, y=276..289 +x=656, y=1021..1029 +x=616, y=266..282 +x=619, y=1324..1326 +y=616, x=439..446 +x=514, y=770..779 +x=616, y=1324..1326 +y=899, x=641..644 +y=1103, x=591..601 +y=1710, x=659..663 +x=542, y=1853..1867 +x=488, y=234..246 +y=1352, x=601..617 +x=523, y=6..25 +x=630, y=1231..1233 +x=444, y=1339..1350 +y=975, x=426..434 +x=438, y=1412..1430 +x=546, y=1272..1295 +y=1530, x=545..568 +x=590, y=266..282 +y=868, x=656..662 +x=603, y=1320..1331 +x=457, y=1241..1254 +x=498, y=1662..1672 +x=573, y=856..868 +x=634, y=494..521 +x=552, y=979..991 +x=532, y=573..576 +x=428, y=1412..1430 +y=158, x=445..496 +x=644, y=1347..1375 +y=182, x=616..639 +x=491, y=9..21 +x=532, y=1309..1318 +x=442, y=1896..1912 +x=520, y=1765..1778 +x=497, y=1296..1298 +y=1233, x=620..630 +y=1296, x=494..497 +y=1447, x=580..641 +x=659, y=1709..1710 +x=615, y=1507..1533 +x=564, y=726..730 +x=462, y=685..698 +x=640, y=1075..1093 +x=632, y=1647..1659 +x=576, y=476..490 +x=482, y=327..334 +x=559, y=569..587 +y=345, x=557..580 +x=656, y=851..868 +x=456, y=1830..1837 +x=607, y=1773..1789 +y=755, x=442..458 +y=101, x=530..550 +x=561, y=939..950 +y=1744, x=554..575 +y=1567, x=635..663 +x=556, y=894..898 +y=1525, x=554..556 +x=655, y=1076..1093 +y=1618, x=490..497 +x=442, y=571..582 +x=649, y=1694..1703 +y=1453, x=441..449 +y=1575, x=527..530 +y=1843, x=445..471 +x=512, y=1811..1823 +y=650, x=438..450 +x=434, y=954..975 +x=662, y=223..247 +x=472, y=1511..1519 +x=568, y=556..559 +x=453, y=992..1001 +y=398, x=531..542 +x=619, y=1550..1552 +x=561, y=1421..1437 +y=337, x=477..499 +y=44, x=494..514 +x=457, y=208..230 +x=511, y=701..713 +x=620, y=1232..1233 +y=1146, x=632..646 +y=1872, x=435..454 +x=451, y=834..840 +x=565, y=142..164 +y=419, x=543..545 +y=1875, x=569..592 +y=1552, x=619..631 +x=490, y=1595..1618 +x=578, y=1777..1803 +x=543, y=434..462 +y=113, x=515..542 +y=1350, x=442..444 +y=963, x=609..624 +x=587, y=398..419 +y=1572, x=527..530 +x=501, y=966..983 +x=563, y=220..222 +x=566, y=1177..1187 +x=429, y=289..294 +y=972, x=554..573 +x=554, y=1323..1336 +x=584, y=1360..1373 +y=419, x=587..605 +x=565, y=1610..1622 +x=486, y=1810..1825 +y=1571, x=483..500 +y=30, x=446..463 +x=512, y=656..666 +y=1599, x=477..483 +x=530, y=1657..1662 +y=138, x=454..474 +y=1773, x=428..444 +y=1619, x=528..536 +x=486, y=1154..1156 +x=550, y=92..101 +y=1581, x=514..537 +y=440, x=488..512 +x=634, y=809..821 +x=599, y=1401..1409 +y=1222, x=576..579 +x=552, y=413..424 +y=265, x=619..640 +x=599, y=951..974 +x=504, y=496..521 +x=532, y=985..1012 +x=508, y=1189..1200 +y=188, x=525..551 +y=727, x=542..552 +x=631, y=1873..1875 +y=638, x=599..616 +x=556, y=1498..1511 +y=1292, x=620..625 +x=513, y=167..180 +y=1912, x=442..453 +x=531, y=82..87 +x=589, y=651..652 +x=637, y=1892..1908 +x=560, y=435..462 +y=411, x=559..574 +y=416, x=487..490 +y=1542, x=493..498 +x=602, y=1195..1207 +x=573, y=708..712 +x=575, y=1370..1395 +y=1480, x=643..645 +x=489, y=664..673 +x=428, y=1116..1124 +x=651, y=1152..1170 +x=625, y=1319..1331 +y=45, x=657..665 +x=453, y=325..335 +y=760, x=569..583 +x=628, y=1047..1058 +x=530, y=769..779 +y=842, x=455..463 +x=596, y=1669..1679 +x=571, y=1456..1464 +x=448, y=1667..1673 +x=648, y=29..31 +y=868, x=573..581 +y=1207, x=586..602 +y=1758, x=447..475 +x=444, y=1516..1531 +y=1303, x=489..505 +x=567, y=1404..1411 +y=689, x=531..552 +y=182, x=439..456 +x=570, y=861..864 +y=1012, x=532..541 +x=608, y=920..938 +y=563, x=547..575 +x=525, y=450..461 +y=1232, x=542..546 +x=539, y=1023..1035 +x=480, y=1689..1695 +y=191, x=633..638 +x=548, y=1437..1455 +y=1243, x=590..592 +x=431, y=1330..1348 +y=1053, x=552..567 +x=594, y=1693..1695 +x=479, y=787..789 +x=567, y=1654..1659 +y=902, x=524..528 +y=98, x=577..580 +x=554, y=253..263 +x=609, y=1856..1860 +y=203, x=488..503 +x=527, y=918..929 +x=607, y=901..915 +x=511, y=1905..1926 +y=436, x=498..503 +x=446, y=1224..1236 +x=580, y=131..142 +x=663, y=1708..1710 +x=512, y=1138..1145 +x=529, y=508..518 +y=298, x=605..613 +y=1867, x=524..542 diff --git a/2018/inputs/18.txt b/2018/inputs/18.txt new file mode 100644 index 0000000..9e354bc --- /dev/null +++ b/2018/inputs/18.txt @@ -0,0 +1,50 @@ +#.#.|..#|.||.#...|...#.|.......##|##..#..||.||.... +#.......#.....|##..#|..#.##..##|.|.#..|.#...|....# +.|..........#.|..|.....|..|#.#...##|#|.|#|##|...#| +#|....#|##..#|.|||.#.|.#...#.##.......#||..#...... +.#|....|.|..#..||...#||...|......###.#.#...##..#.. +..||#...|.#.|||||.....|.......##...#.#....|..#.... +###|..##...|.#|..|.#|#...|.#.|....||.|...#|.|#...# +|.#.|#.#.|###.|..#..|....#....#|.#..||.||.....#..# +.#..|.#..#|##..|.....|.#.|.#.#|.......#..|...#..|. +...|||##...|..#.#|#|..#.#..#|.|.|#..##........##.# +|#.#..||....|...|#..|....|#|...#.#.#.##|.|.#...... +|..|...|.|#.........|..#|...|.#.|##....|..|..|#.|| +|....#..||..|...#|......|||||.|#....||....|.#|.#.. +......#||.#.#.||..|.......|....||#||#.|.#.|.##||#| +.##.#....##.#.|....|...###..#...|.#....|.#...|..## +.##..#|#.#.##.||..|.#|..|.|.##|....|...#||||.|..#. +|.|..|#|....|.#.#..||.....|.....##....||....|.||.. +#|.|.##...||...........|..#.||.|.#..##..|#||...... +||..||.||..#.##.#...|.#|.....|###....#.....#...|.. +|.#.##|.|...||#.#...||....|.|#..|.#....##........# +..|....|.#.##|....|||#....#.|.|.##....|##|.|#..... +.|.....#|.#....|###|..#|||........||#.#..||..|..#. +#..#...|#|.#...|.||##..#.|..|.|.#.|..#.#.|.....#.# +|#||.##..#..|||.......#|..#...#..##....#||.#|..... +.|.#.....|..#...#...##...|.#...|.#|.......|..#...| +.||.......|..##..##.#|.|..|...#.|.#..#.|....#.|#.| +....#..#|##|....#..|.#..|||..#....#.#|...||.#..|.. +#......#|.##..|..|....|.##.#|...#..#.|..|..|..|##. +...|||.#|#.#.|..|||.#.#.#...||...||..##..#.....|.. +..#..|.|#.#..|..##|..#....#.|..|.......|||#.|.|.|# +.##|..#...#..||..|.........|#.|#.....|...##.|..||# +#.....||....#.....|#.||......|.#|.#|....||.||.#.#. +#..|#..|......|.#.#.#.##..||.|.#.|......#|#||#.|.# +..||..||.....|.#..###.#.|#..|.......|....#||.|..#. +.#...###|#|#|||...|...#.#|.#|..|...#..#.|#|.#...|. +...|..#||....##|..#...#....#||#.......|....#.|###. +..#....|#..#|.....|.#|..#..|#....||......|.|.#.|#. +..|##....#.|..#..#.|.#..||....#...|.....|..#.....| +.......#||..#||...|.#.|#...#....|.|.||.#.|...#.##| +.|.|||.....#............#..#..|..|..#.|.#..|...... +|...|.|####..#.....#..#..|#|#..#..|......|...|.#|# +|.|...#..#..|....|.....#|#||..#.||..|#|..|||.|.|.| +..#...|#.......||.#.#.#....#.........##|.|..#.##|| +#|#..|..|#|.##.|.|#......||......|.....#||###.|### +....#..#.|..|...#|#|..|#..|.#|....||#|.||.|#|..... +|..#.|..#.|#......#...#|.#|#|.....|#...###....##.. +...##..#..|..#..#.#...|.#..#|...|#.##|.#|..##..#.# +|.|.|...#.|..##.|.|....|..#..|...|..##|...|..|.... +.#|..|..|..|.|..#...|.||#...#......||.#.#......... +.#.##..|............|.||.....#||..|##.|..|.....#.| diff --git a/2018/inputs/19.txt b/2018/inputs/19.txt new file mode 100644 index 0000000..1207b7b --- /dev/null +++ b/2018/inputs/19.txt @@ -0,0 +1,37 @@ +#ip 4 +addi 4 16 4 +seti 1 7 2 +seti 1 1 5 +mulr 2 5 3 +eqrr 3 1 3 +addr 3 4 4 +addi 4 1 4 +addr 2 0 0 +addi 5 1 5 +gtrr 5 1 3 +addr 4 3 4 +seti 2 7 4 +addi 2 1 2 +gtrr 2 1 3 +addr 3 4 4 +seti 1 3 4 +mulr 4 4 4 +addi 1 2 1 +mulr 1 1 1 +mulr 4 1 1 +muli 1 11 1 +addi 3 3 3 +mulr 3 4 3 +addi 3 9 3 +addr 1 3 1 +addr 4 0 4 +seti 0 1 4 +setr 4 9 3 +mulr 3 4 3 +addr 4 3 3 +mulr 4 3 3 +muli 3 14 3 +mulr 3 4 3 +addr 1 3 1 +seti 0 6 0 +seti 0 7 4 diff --git a/2018/inputs/2.txt b/2018/inputs/2.txt new file mode 100644 index 0000000..1edb865 --- /dev/null +++ b/2018/inputs/2.txt @@ -0,0 +1,250 @@ +krdmtuqjmwfoevnadixyclzspv +yrdmtuqjiwfoevnabfxyclzsph +kqjvtuqjgwfoevnabixyclzsph +krdmtuqjgwjoevnaolxyclzsph +krdmtnqjgwfoevnabiiyxlzsph +lrymtuqjgwhoevnabixyclzsph +krdmguqjgwfoevnabixkclzsah +krdmtuqjgwfoevnibinyclzdph +krdmtucjgwfoevnabhxyclzspv +krdmtuqjgwfoevtabixyulzsuh +krdmtuqqgwfoevnabixdblzsph +krdmtuqjawfsevnabiyyclzsph +krdmtuqjgwfoevnabzxccldsph +krdmtcqegwfhevnabixyclzsph +krdmtuqjgwforvnaxixycgzsph +krdmtuqjgwfoqvnaxixyclzskh +krdmtutjgwfoevyajixyclzsph +krdmtuqmgwfoevnabixycxzspc +krdptuqjgwhoevkabixyclzsph +krdttuqjhwfoevnabixyclzspa +krdmtuqjgwfoevnabibyhnzsph +krdmtuqjywfoevntbidyclzsph +krdmtojdgwfoevnabixyclzsph +krdmtuqjgpfuevnauixyclzsph +krdmtoqjgwfrevjabixyclzsph +krdmtuqjgwfoyvndbixyclzyph +krdmtxqjgwfomvnayixyclzsph +crdmtuqjgwfoevnabixyoxzsph +krdmtpqjgwfdevnabixycqzsph +krdmtuqjgwfoevuabfxsclzsph +krdmtuqjgwfoevnybixycdzskh +krdmtusjgwfoevnabixxclzdph +krdmtuqjgwfoevnaboxyglzjph +zrdmtuqjgrfoevnalixyclzsph +krdmtuqjclfoevnabixyclzsih +kqdmtlqjgwfoevnabtxyclzsph +krdmtuqggwpoevnabixyclzlph +krdmtuqjgwfobwnrbixyclzsph +krdmtuqjgwfoevwabkxycnzsph +kldmtuqjgwfogvyabixyclzsph +krdmtuqvgwfoevnabixtcrzsph +krdmtuqjgwroevnabixyrlzspw +krdmtuqjgjfoevnabixyelzrph +krdmtuqjgffoevnaaixyclzspa +krdmtuqjgwfoevxabifywlzsph +krdmtuqjgwfoevlabixycrzsrh +krdmtuqjgwfpevnabixocqzsph +krdmtuqjgwfoevdabixycnhsph +krdmtmqjgwfoevnajixyclvsph +krdmtuqjjvfoevnabgxyclzsph +krzmtuqjgwfoevnabioyckzsph +kodmtwqjgwfoevnabieyclzsph +ehdmthqjgwfoevnabixyclzsph +krdmtuqjxwioevnabixyclbsph +grdmkutjgwfoevnabixyclzsph +krdutuqjgwfoebnabixaclzsph +krdmtuqjgwfoebnabixyclcjph +krdmteqjgwfoevnlbixycizsph +krdmtegjgwhoevnabixyclzsph +krdmtuqjgwfdrvnabixbclzsph +krdmtuqjgyfoevidbixyclzsph +krdmtubjawfoevnabixyclzuph +krdmtuqjgwfoavjabixyclzssh +krdmtuqjgwfoeonabixyclzsvo +vrdmtuqjgwffevnabixpclzsph +krdmtuqonwfoevnabixycfzsph +krdmtumjgwfpevnubixyclzsph +krdmtutjgwfoevnaciyyclzsph +krdrtuqjgwfoevnwbixyglzsph +krdmtuqjgwfoevbabixyclesdh +krdmtuqcgwfoevnabixyqdzsph +krdmtuqjgwfogvnabrxycezsph +krdmujqkgwfoevnabixyclzsph +krdmtuqjgtooevnabixyclzzph +jrdntuqjgwfoevnabixyclrsph +krdmtuqjgzfoevkebixyclzsph +krdmtuqjgwfosvnaeixyclztph +krdmtuqjgwfoevzabixydlzaph +krdmtuqzgwfoavnabiqyclzsph +krdmtuqvgwfoevnabixycwzspv +krdmvuqjgwteevnabixyclzsph +krdmtujjgwfoevgybixyclzsph +kydmtuqjgwfoeunacixyclzsph +krdmtuqjgifoqvnabicyclzsph +krnltiqjgwfoevnabixyclzsph +krdmtuqjgwfoevnabhxyclzsgi +kfdmtuqjnwfowvnabixyclzsph +kmdmtuljgwfoevnabixycvzsph +krdmtxqjgwaoevvabixyclzsph +kramduqjgwfoevnabixyclzwph +krdutuqjgwfoennabixyclziph +krdmvuqfgwfoevnacixyclzsph +krdmtuqogwfoevnabmvyclzsph +krdmfuqjgwfoyvnabixyclzseh +krdmtuqjgweoelnabixyclzspd +krdmtumjgwfoevnabixyclzypo +krdmtuqjgkfoevhabixyclzsqh +kjdmtuqjgwfoevgabixyclzsah +krdmtuqjgwfoevnlbixyclzsbw +mrdmtxqjgwfoevnabgxyclzsph +krdmtuqpgwfoevnhbixycltsph +krdmtuqjgwfmqvnabixyclzslh +krqmtuqogwfoevnaqixyclzsph +krdmtusjggfoevnabicyclzsph +krcmtuljgwfoevlabixyclzsph +krdmtuojgwfoeknabixyclzsrh +krdmtuqjtwfoevnabiypclzsph +krvmtupjgwfoevnabixycldsph +krdmtuxjgwfoevaabxxyclzsph +krdmtvqlgwfoehnabixyclzsph +wrdmtuqjgwfoevnabixyclzdpy +krdatuqlgwfoevnabixyclzsjh +krdmtuqjgwfoevpabkxyclzsjh +krdmtuqjgwqvsvnabixyclzsph +krdmtwqjgwfoevnobixyclzspm +krdmtuqjgssoevnabixyclgsph +krdmtuqjgwfoevnafixyclzbpp +krdmtuqjowfoevxabiuyclzsph +krdmtuqrgwfoevntbixyclzspu +krdmtucjgwfoevnabixcnlzsph +krddtuojgwfoevnabixyclzzph +krdmtuqjgwuoevnabiqycldsph +kpdmpuqjgwfoevnabixyclzslh +krdmtuqjgwfoewnabixyzxzsph +krdmtuejswfoevhabixyclzsph +krdmtuqggwfoevntbikyclzsph +krdmtuqjgwfoevnabixydlhnph +krdmtcqjglfoevnaxixyclzsph +krumyuqjgwfoevnrbixyclzsph +kgdmmuqjgwooevnabixyclzsph +krdmteqjgwfqevwabixyclzsph +krdmfuqjgwfpevnabixyclzspq +erdmtycjgwfoevnabixyclzsph +krdmcuqjgwfoevnabixjglzsph +krdmtuqjgtfoeunabixiclzsph +krdmtuqjgwfoevmqbixyclzspu +krlmtuqjvwfoevnabikyclzsph +krdotuqjgwfoevnagrxyclzsph +krdmtuqbgwfoefnabixyclasph +kwdmtuqjgwfosjnabixyclzsph +kydmtuqjgwfoevcabixycezsph +crdmtuqjgwloevnabixkclzsph +krimtuqhgwfoevnbbixyclzsph +krdmjuqagwfoevnabicyclzsph +krdmtuqdgzfoevnabixydlzsph +krdmtuqjgwwoevnaqixyclzspf +krdmtuqjgwfoevnabdxyzvzsph +krdmtuqjgwaofvnabixyclzsnh +krdmturjgwfmevnabixyclzspn +krdmvuqjgwboevnabixyolzsph +krdmtuqjgwfomvnabijyclzspx +bedmtuqjgwfoevnabixyslzsph +krdmtenjgwfoevnabixyclzsqh +krdmtuqugwfoevnabixpcdzsph +krdmtuqjgiloevnabrxyclzsph +krdmtupjcwfoevnabixyclwsph +kremtuqjgwfoevnabixyyjzsph +krdmtuqjgwnoovnabixyclzshh +qrdmtuqjgwfoevnabixyciasph +krdituqjgbfoevnagixyclzsph +krdmnoqjgwfoqvnabixyclzsph +krdmtuqegwfoevhkbixyclzsph +krdmkucjgwfoevnabixnclzsph +krdmtuqbnwpoevnabixyclzsph +krdmttqjgwfoevnabixyclbspz +srdmtubjgwfrevnabixyclzsph +krdmruqjzwfoevnabixyclesph +ardmtuqfgwwoevnabixyclzsph +yrumtuqjgwhoevnabixyclzsph +rrdmtuqjgwfoevnabsxycwzsph +krpmtuqjgwfoevdabixyclzzph +krdmuuqjgwfoevnabixyclriph +krdmtuqjgwfobvnabixyvgzsph +krdmbuujgwfoevnabixycczsph +krhmtuwjgwfoeqnabixyclzsph +krdwtuqjgwfoevnkbixyclzzph +krdmtuqjgwkoeqnabixyvlzsph +kadmtuqjgwfoednabcxyclzsph +krdmtyqqgwfoevnabizyclzsph +krdmtuqjgnfoevnabiyycmzsph +krdmtuqjcwfouvnabixyclznph +krdmtuqjjwfcevnqbixyclzsph +krdmtuqfgbfoevgabixyclzsph +kkdmtuqjgwfoevnapixyclzsth +nrdmtuqjgwtoevnakixyclzsph +krdmtuqjglfoevlabixdclzsph +zrdmtuqjgwfoevndbixbclzsph +krdmeuqjgwfoeenabixyclrsph +krdmoaqjzwfoevnabixyclzsph +krsmtuqjgwfoevnwbixyclzsfh +kadmtuqjgwfoqdnabixyclzsph +krsmtuqjgofoevnabixkclzsph +krdmtuqjdwfoevnibixdclzsph +mrdmtuqjgwfouvnabixyclzfph +trdmtlqjgwfoevnabixyclzjph +trdmyuqjgwfozvnabixyclzsph +krdmtiqjgwroevnabixyclzspk +erdmtutjgwftevnabixyclzsph +krdwyuqjgwfoevnaaixyclzsph +krdmthqbgwfoevnabixyclksph +krdmttqjgwfoivnabixyclvsph +krdmtuqjgwfoefnabixyflgsph +khdmtuqjgwfoevnajixyvlzsph +krdmtuqvgwfoevnasixyclzspt +krdmtuqjgkwogvnabixyclzsph +krdmtuqjgwfoevnaboxpglzjph +kadmtuqjgwfoxvnabixyclziph +krdmtuqjfwfoevnabaxycbzsph +krdjtuqjgwfoevnabiryhlzsph +krdvtuqjgpfoevnabcxyclzsph +brdmtuqjgwfoevnafixyqlzsph +krdmtuqjgwfoevnavixxcllsph +krdhtuqjkwfoevfabixyclzsph +krdmtuqjgjfoevnawixyclzsuh +krddtuqjgwfoeqnabiwyclzsph +krhmtuqjgwfnevnabinyclzsph +kedmtuqjgzfmevnabixyclzsph +qrdmtuqjgwfoevntbixyclzxph +krdmtuqsgwfoevnabixvclzrph +scdmtuqjgwfoevnabixtclzsph +krymtuqjgjfolvnabixyclzsph +krdmtuqjgwfkevnablxyclzskh +krymtuqjswfoevnabixyclzvph +krdmtuqjhwfoevnabixycwzspd +krdmtuxjgwfoevnabyxyclzzph +krdmtlqjgwfovvnabilyclzsph +krdmtuqjgwfoevnaaijcclzsph +krdatrqjgwfokvnabixyclzsph +krdmtuqjgwfoevnaxifyclzkph +krddtuqjgwfoevnabixccozsph +krdmtuqngwfoevnabiyycxzsph +krdmtumdgwfoevnqbixyclzsph +krdmtuqjgwfoevnabixyxlmsch +krdmtudzgwfoevnabixtclzsph +krdmtuqjgwfoevnpbixyclhspl +krdmtqqjgwjoevnabexyclzsph +kydmtuqzgwfoevnabixyclwsph +krdmeucjgwqoevnabixyclzsph +krdmtuqjghfoevjabixyclzspp +krdmtuqjgjfwevnabixyclzskh +krdmkuhjgwfoevnabipyclzsph +krdytuqjgwfoevnabibyclztph +krdmtuqjgwfpevnabisyzlzsph +kmdmtgqjgwfsevnabixyclzsph +krdmtuqjgsfoevnabijyclzszh +krdmtuqjgwfoevnabivyclzuuh +krdstuqjgrfoevnabixyclzspu +jrdmtuqjgwfotvnabixyclzspj +krdmrumjgwfoevnabixeclzsph +krpmtusjgwfoevnabioyclzsph diff --git a/2018/inputs/20.txt b/2018/inputs/20.txt new file mode 100644 index 0000000..620f018 --- /dev/null +++ b/2018/inputs/20.txt @@ -0,0 +1 @@ +^ESEEEESSWNWSWSEESESENENNNW(SSWENN|)NENWWWWWNWNWWS(SWSEESE(SSWSWNWSSSESWWSSSSEEESWWSESSEENN(WSNE|)NENEEEEESSSEENNNNENEEENNWWS(WWNNNENWW(NENNNNNEEENWNNWWWWWWWSWNNNWNNEES(SENNNWNNWNNNWWNWSWNWNNENNEENNNWSWNNNWWNWWWSWWSEEEE(NWES|)SENESSS(EE|WNWSSSSE(NNESNWSS|)SWWNNNNNWN(E|WWWWNNWSWWSWWWWWNNESEENNEEE(SWWSNEEN|)NWWNWNNWWSESWSE(E|S(WWNNNNWNWWNNENNWNWNNNNWSSWWNENWWWNWSSSWSSENESEEEE(NWWWNWNE(WSESEEWWNWNE|)|SSE(SWSWNNNWSSWSSSWNWSWNNWNNN(NWSWWNENWWNWWNWWNNNESSEEES(W|ENNENNESENNWWNNWWNWNNNWWWSEESSWSSENESESE(N|SSWSWNW(S|NWN(EESEWNWW|)WWNNE(NWWNNE(SEEWWN|)NWWSWWWN(WSWSEEEEESSSE(SSSSWSSWNWSSWNWWWNENEE(SWEN|)ENE(S|NN(ESSNNW|)NWSWNWSWWSW(NNNEN(NNN(WSSSNNNE|)E|ES(SWEN|)EEEN(ESNW|)WW)|SE(SWSSSEEESWSSESSSENNNENEN(WWSWENEE|)EEESSWW(NEWS|)WSWSEENESSEEENNNW(SWSEWNEN|)NNE(SESEE(NWNWESES|)SSSWSW(NNNESNWSSS|)WSWSSWWNENWN(EE|WSSSWSWWNWWNWSW(NNNNNESSE(NNNWWNNE(NWES|)S|EEENE(SSSW(S|WN(W(WW|S)|E))|E))|SESWSSSESESEEEESWWWSSWWNENWNW(N|SSSSSSEEENN(WSWNSENE|)EEENWWNEEESSSSSENENNENNNNWWW(SEESSW(N|SS)|NNNWWSS(ENSW|)WNW(NW(S|WNENNESSE(S|NEEENEEEESWSWNWS(WWW|SSSEENN(WSNE|)EEN(W|NEENENEEEEESSWWN(WWSWSEE(SENEESENNENEESSW(N|SEENNNEEEE(SWWSEESWSWSSSSSSESSENNEESESSWSWWWSWNWSWNWSSWNWWWWWSWWNWNWSWWNNE(NWWW(NENNNENEENNNEE(NWWNWSSSSWNW(NEWS|)SS|ESWWSEESSWNWSSESWWNNWSSW(SEESES(W|EENN(NNEESWSSEEN(W|NEENESENENE(NWWWNWSS(EE|WSWNNWNNESE(NN(E(SEEES(ENN(N(E|NN)|WWW)|W)|NN)|WW(WSSSSE|N))|S))|SSWSSEE(NWES|)S(WWWWNWSW(NNEEES|WS(WNWSW(S|W)|EEE))|EEEN(N|E))))|W(S|W)))|N))|SWSESWSWNNWWSWNWWWN(WWSESWSESESSEEEEENESSWSESWSESSENESENNNNWSW(SEWN|)NNENENENN(W(WS(SW(S|NWWN(WSSWWNENWW(SS|N(WSNE|)E)|N))|E)|NNN)|ESEE(NWES|)SSWW(NEWS|)SESSSWNW(N(N(N|W)|E)|SSESSESSSSSWWNENNNWN(WWWWWSWSESWWWNWWWNNW(NEEEEES(WS(WWNE|ES)|ENN(ESNW|)NNWSWS(WNWSWWNNE(S|EENE(S|N(EESWENWW|)WWSWNW(NN(ESNW|)N|S)))|E))|SSSEESE(ESSWNWWW(NEWS|)SSESEESSENESESWWWWWW(SSSSSSSSEESESSEENESEENENENESSWSESSESWSEENESSWSEENEESENNENWNNENEEEEENWWNWNWWNWNNEENNWSWWWSESSSSSE(SWSWSESSWNW(S|NWNENNNE(NWWWW(NEENWNNWNWSSWNNWSSSES(ENENSWSW|)WWWWWNNNENEE(NWN(ENNW(NNNWS(S|WWN(WWNWESEE|)ENNNESES(W|EEEE(NWWWN(W|NESENNE(NWWSWN|S(ENSW|)S))|ESSESENENN(WSWNSENE|)NNNNESENEENWWNNENEEEENEENNNNESSEESSENNNWWNNWN(WWS(E|WSWSWWSWNWSWSW(SSWSESSENNNEN(W|NESENENES(SWEN|)ENNE(N|SS))|NNENEENESENENWN(EESNWW|)WSWWWSE(WNEEENSWWWSE|)))|EN(ESSSENESENEEEEESESENESENEESSENNNESSSESESWWSSENES(ENNNNENENE(NNNNWNN(WWNWWWSESE(SSEE(NNWSNESS|)ESWWWSSW(SE(ENEN(E|W)|S)|NNWWWSWWWWWNWNENNNNWNWW(NEENWWNEEESEESWS(WNSE|)ESSSW(SSES(EENNNW(S(W|S)|NENEE(N(EEE|NNWSWNNEENWN(WSWWNWN(EE(EE|S)|W(NEWS|)SWS(WNWSWNWWSWNW(NE(EEEEEE|N)|SSES(W|ENE(SE(N|S)|N)))|EESEESSS(S|EE)))|E))|SSW(N|SSENE(SENSWN|)N)))|W)|NN)|SESESSWSSWNNN(WSSSWWWN(WS|EENWW)|N|E)))|N)|EES(SSESWENWNN|)W)|SSWSWSEEE(SESEEN(EN(EES(EENWESWW|)S(SSSS|W(N|W))|W)|W)|N(W|N)))|SSWSWWSWSEEEE(N(NESE(E|N)|WW)|SSSWWNENWWSSSWSSESENN(W|NESSSSWWWNWWSESESSESENNWNEEESWSSESWSWWWSESENEENEN(NNWESS|)EEESSEEEENWWNW(S|NNEEEE(NNWWWS(EE|W)|SS(WNW(S|W)|EEN(EEENWNENN(WSNE|)NESENESEENNNEESWSSEEN(W|NEESENENENWNNWWNWNENESEENNENWWWS(ESNW|)WNWNEEENNESSEENWNENNENESSEESEESWSWSWNN(WSW(NN(N|EE)|SSSW(SSW(SS(WNNWWEESSE|)EEENNN(WSSWENNE|)EENESENNN(WSWWSWNN(SSENEEWWSWNN|)|NESSSEENWNENWNWNNNESSENNNWNWSWSSWNNWW(SEWN|)NNNWWNENNWNENESSEENNNW(SS|NNWWNENEEENNEESSW(SESSWSW(SSESSEENNW(S|N(W|NEES(ENENWNENEENWNWSWWW(NNENNWNWNEENNWSWWWSESSS(E(N|E)|WWWWSS(EENWESWW|)WSWSWWNNNWNNENNWSWWNWWWSWSWSWWSESEEN(NESESSENENE(NNWWNWS(SE(S|E)|W)|SSSE(SSWWWSESSSSSSWWWSEESENESSSENNNNESE(NNWNNNE(SSEWNN|)NENWNW(SWS(SSSW(S(S|E)|NNNN)|E)|NEESEESW(ENWWNWESEESW|))|EESWWSW(SSWWWSWS(E|WWSWWSWNNENWNNWNEENE(ESE(N|SE(ENWESW|)SWWS(E|W(S|NN(WSNE|)(N|E))))|NNWNWNEEENWNNENWNWWSWWSEEE(SWWS(EE|SWSESSE(E|SWWWSW(SSEE(N(N|W)|ESWWSESWSSWNNWSW(SSSEN(N|ESEESENENN(WSW(NNENNSSWSS|)W|ESSEE(SSESSENESSWWWNWN(NWSWS(E|WSS(WNNNEN(ENEEWWSW|)WWSWNW(SWS|NEE)|S))|E)|NENWW(NEWS|)S)))|N))|WNWSWNNEEE(EN(ESNW|)WWNNNEE(SWSEWNEN|)N(ESNW|)NWNNNWWWWWNWNNNEENNENWWSSWWSWWSESSWWWS(ESEEEN(NNN|ESSSEEENWWNEEEESSS(W(NN|WWWWSEEESSWWN(E|W(SSSSES(ENNWNEEENNN(SSSWWWEEENNN|)|WWW)|WNNNW(NEWS|)S)))|E)|WW)|W(W|NNEE(E|NNNNNEENESS(WWSEWNEE|)ENNNWWNWWSS(ENSW|)WNW(SSEWNN|)NWNNNEENNESESSS(WW(S|N(EN|WS))|ENNEENNWNWNWS(SESEWNWN|)WNNENNWNNESEENWNEESSESEENWNNNW(SS|WWWNNESEEEEEENNNEENNNNWWWN(EEEESSSSSENNENWNEN(EEESESSWWN(E|W(NEWS|)SSSSSSSENESSWWWWWSEEESESWSESENENWNEN(NEEESENNWWWNW(NWNENWW(NEEESESEEENWNNENESESW(W|SEEEEENNNENESSSSENENNESEESESESSENNNESESWSSWSEEENWNEESENNWWNEENNNESESWSSSESENNWNEESE(SWSESWWWSESWSESSSSWNNNWNNNN(WSSWN(N|WSSEESSSSSWSSEEN(N(NNN|ESENESE(NNWNENNW(NNNESS|S)|SSSSSSSWNNWSSSEESSSSSWNWSWWNENWWSWWNNWWNWNENWNWSSSWSWNNW(NNENNNWS(S|WNNEENENESENENESE(SSESSEEE(ENE(NWW(NEE|SWNWS)|S)|SSSSSES(SENNSSWN|)WWNNNWSSSW(NNNNEENWWWNWWWS(EES(SE(SSWNSENN|)N|W)|WNNN(WSSSSS(W|S)|EEE(NWES|)S(E|WW)))|S))|NNENWWNWNWSWSES(WS(WWWS(E|WWS(EE|WWNENEENNENENE(ENNWSWWSWWNWWWSWWWWWWSEEESWWWWSEEESENENEESS(W(N|WSEESWWWSWWWSESSWS(WWNEN(E|WWWWWSS(ENESE(S|N)|WNNWSSWS(SWWWWNENNNWSWNNWNNNESSEENWNNNNNWWSSWNN(NEENNNN(WWWSSENESSW(ENNWSWENESSW|)|NES(ENNN(WSWNSENE|)ESSSENNNNN(SSSSSWENNNNN|)|SSSSEESWSSESEESSWNW(WNSE|)SSS(WW|SES(WSESWENWNE|)ENNN(WSNE|)EES(EENNNENNWSWSWW(SEESNWWN|)NEN(WWNW(NNNWWEESSS|)(S|W)|ENEEESE(SWSESWWSSENESENNENE(SENE|NWWS)|NNWWWNNNESSEEE(N(ENWNENWNN(ENESENESEESWWSWSW(SSENESENN(W|EEENESENNESENNEE(NWNWNWSWSWS(EENEWSWW|)WW(N(WW|NNN|E)|S(SWWEEN|)EE)|SESWW(N|S(EEESEE(NWES|)S(SESENSWNWN|)WW|SWW(NEWS|)(S|WWWWWS)))))|NN(E|W))|WSWWN(WNSE|)E)|WW)|S)))|W))))|WWSWWS(WNNE(NWWSSNNEES|)E|SEESEN(N(WW|N)|E(EENNSSWW|)SSWWSW(SWSS(WNNSSE|)ESENENN(WSWENE|)E(NWES|)SESWSEE(E|SSSESWSWSWNN(WSSSES(EEESES(WSNE|)ENENEN(WWSWNN(E|W(WS(W|E)|NENNEE))|ESE(NN|EEE(N|S(WWS(WNWWEESE|)SSESW(W|SESWS(E|WW))|E))))|WWNWNE)|NNE(NWW(WW|N)|SS)))|NN))))|E)))|SENENNEN(W|ENESENESEE(NWES|)SWWS(WWN(WSWSESE(N|SS(ENSW|)WNWSWN(NEWS|)WWSS(SE(ENWN|SWS)|W))|E)|E))))|ENEENN(WNWS(SEWN|)WWW|E))|SSSW(N|W))))|E)|E(E|N))))|SSS(SWEN|)EEESESESESENN(WNWN(WNWESE|)E|ESE(N|SWSWSSWSSSWSWWNNE(S|NWNW(NENN(WSNE|)E(ESWSSE(NENSWS|)SS|N)|WSWWSESSSWSW(WWWSWNW(S|NNWNEESE(NN|S(W|ENEE(SW|EN))))|SESSSESWS(W|SSSENEESESESESSWSSESSENNN(W|NENNESESEEESWSWWWN(N|WSSEEESSSWWNENWWSSWWN(E|WNWWNWSSSSSWNWNNE(NNWSWSSWWSEESWSEE(N|SSSWSEESENNESEESENNWNEENENNESENN(WWWSWNWNWW(NEWS|)SSE(N|SE(N|E(E|SWWS(S|WNNWSW(N|S(E|S))))))|EEENWNNEN(W|ESE(NNNW(SWEN|)NNWNENE(SSS|NWWSWSSWNNNENNNENESE(NNWWNNWWSSS(ENNSSW|)SWSWWSWSW(SE(ENEE(S(S|W)|N(ENSW|)W)|SS)|WNNW(S|NEEE(SWSNEN|)NWNWWS(WSSWWNENNENENENEEENENNNEESEESESS(SE(SWEN|)NNNNNNNWNENNWWS(SSWWS(EES(E(S|N)|W)|WNNW(SWS(SSWS(E|SWWN(E|WSWS(WN(NENNW(NENSWS|)S|WSSSENE(WSWNNNSSSENE|))|E)))|E)|NEEE(SWEN|)NNEN(WWSSW|EESW)))|E)|WWWNN(ESEWNW|)W(SSSSSSWNW(SSEWNN|)WNEN(WWSWENEE|)E(S|N)|N))|E)))|SWWSEE))|SSSW(NNWESS|)SESSWWN(E|NWWSESSSSWSWNWNN(ESENNWW(EESSWNSENNWW|)|WSSSESEEESWWSWWWWWNWSSSWNNNWN(ENESEESEN(ESEWNW|)NNN|WSWWWSWNWNWSWSESSEN(N|EEESEEE(SEESENESSSENESESEESESESWSSWWSESESEENE(NNWSW(S|W|NNEENNW(S|NENNNNNWSSWNNWNNN(ESSENE(S|NWNWNN(ENE(NNWSW(S|N)|SS(S|W))|W))|WSWWSSEE(NWES|)SESWW(WN(E|WNW(S|NENWWWSE(WNEEESNWWWSE|)))|SEEEESW(W|S)))))|SSSSSWSSWSESE(SSSWNNWWSESWWWS(WNNNENWNNNESSES(SSWENN|)E(E|NNWNNENWNEN(WWSWSS(ENSW|)WNNNWWSSE(SSWSWWWNENWWWSSWSESEESESENESSS(ENNE(SS|NWNWWN(EEE(N(W|N)|S)|W(WWNNSSEE|)S))|WNWWS(E|WNN(NWSWNWN(WSSWSES(WWWWNEENNENWNNWSWWNNE(NNWWWNENENNNWSWWWNEENNWNENNNNEEESSEEESEENNW(NENNWWS(E|WNWN(EENESEESE(N|EESESSSESWWSEESWWSESSWNWWSESESESS(WWN(WSWNNWWNWNWWSSS(W(NNNNEEENNEN(WWSSWWNENN(WWW(NNESNWSS|)SE(SSWNSENN|)E|E)|ESSWSSEE(S(ESEWNW|)W|N(NNNEE(SWSEWNEN|)NNNN(ESSNNW|)NWWSSE(SSWNSENN|)N|W)))|W)|SSEENWNE(NWNSES|)ESSE(ESWWSW(NWW|SEEN)|NN))|E)|E(S(E|S)|NNN(W|NNESSEENE(NWNW(NNW(SSWENN|)NEESES(S|W|EENWN(E|NW(WNWSWNWNN(SSESENSWNWNN|)|S)))|SS)|ES(WSNE|)E)))))|WWNENWNNWWNNENNNNWNENESSEENEE(SSW(N|WWWSEESWS(EEESEN(EESWENWW|)NN(NNES|WWSE)|SW(W|NN)))|NWWW(S|NEENNENE(NNNWSSWNWSS(SWS(WNWNEENNW(WS(E|WSSWNW(NNE(S|E)|SSESWWNW(NENSWS|)SWWSWSSWSESWSSESSSESSSSESSEENWNNNEESENNN(EESWSSE(SWS(WSSSSWNN(NNN(WNSE|)E|WSSSSWWSESWSWWNWNENNNES(EENWNENWWSWNNWSSWSESSWNWNWWNEENWNNNNESSSE(S|NNEE(NWWNEENWNWWWNEEN(ESNW|)NWSWWWWNEENE(S|EENWNWNNWSWSS(E(E|N)|WNNW(SWSSSSE(NN(EE|N)|SESWWSSWNNWWWNWNN(EEENWN(WSWNSENE|)EE(NWES|)SSSWW(SEEEWWWN|)W|WSWSWWWNWSWSEEEEESSSENNE(NWNSES|)SSSSSWNNWSSWNNWSWWSSSWWWWSESWSESEEEENWWNW(NEESEENWNEESSSEESWSEESESESEENWNEEENNNENE(NWNWSWWSSWWNWSS(EEEE(NNEWSS|)SWWW(W|S)|WNNNWNN(W(WWWNE|SSSE)|ESENENNENN(ESSSWSS(ENE(ENESE(ENWNNWSWW(NNE(EENWN(WSNE|)ENE(NWES|)SES(WSSS|ENE)|S)|S)|S)|S)|WS(ESNW|)W)|NWN(WSSS(ENSW|)SS|E))))|SENESSSEN(ESSWWWNWSW(NNEEWWSS|)SWWSESESWSESENENWNN(NEESS(WNSE|)EESSEEEENWWWNNEN(W(WSWNSENE|)N|ESS(ENEESWSESWSEESWWWWN(E|WSWSWWNEN(E|WW(NNESNWSS|)WSSSSEESENN(WWNNSSEE|)ESSENNNESSENEN(ESESENEE(SSW(N|WSS(EEEN(WW|NEENNWSWN(SENESSNNWSWN|))|WWWWNN(ENESESWW(EENWNWESESWW|)|WSSWNWSWNWSWWWWWWWNENENESS(W|EN(ESENSWNW|)NNNWWWWSWNWSWWNENEENEE(NWWNN(ESENSWNW|)WSSSWWWNNESENNWWNE(NWNWWSWWNWWWWSSWWSWWWNNESENEENWNE(EEEEEE(ENWNSESW|)S|NWNNWWSESWSWWS(EEENSWWW|)WSSWSWSSESWSESESWWWSSWWNWWNNWSSSWWNNNE(SS|NWNENENNWWS(E|WS(E|SWWWWSSSESWSSES(ENN(ENWNENN(WSWNSENE|)ESSSSSEEES(WWWWNSEEEE|)EEEN(WWNEWSEE|)EEEES(EENENNW(SW(S|WN(WSNE|)E)|NEESSSS(W|ENESEEENEENWWNWNNEENWNEENNWNNW(NEESSENESSSW(SSWSEEESSEE(SEEN(W|ESE(EN(ENEEWWSW|)W|SSWNWSWWN(E|WSWNN(E|WW(SS(ENSW|)WW|NN(ESNW|)WW(SEWN|)W)))))|NWNN(E(E|S)|WN(WSNE|)ENNW(NNE(N|S)|S)))|N)|SSS(WSSWSWNWS(WWNENEENWWN(EEE(ENWESW|)SS|WSSWS(WNNN(W|NE(SS|NN))|S))|SEESWWSEESEN(SWNWWNSEESEN|))|E))))|WWW)|W)|WWWNENNNWWSS(ENSW|)WWNNWSSWSES(WWWWNENE(S|NWWSWSSWNWSWNNWSWNWNEENWWWWWSESSS(WNWWW(SEEWWN|)NNNENWNEENNNENNWNNWSW(SSSE(SSWNSENN|)N(E|N)|NNENNW(S|NENESSSSENENENNNWSW(S(S|E)|NWNWNW(NNNEESWSEES(W|ES(EEEEESWWWSESEEN(W|ESSSWWWSWW(SSESSENEENNW(W(SEWN|)W|NEESSSEESSSWSEESENEESWSE(S(S|WWWN(WSSWNNN(WWNWNEE(S|NENWWWS(E|WWSESSWS(EE(N|ESSE(SEWN|)NN)|WWNEN(E|WW(SSWSSS(WNSE|)E|NENE(NWN(E|NN(WSNE|)N)|S))))))|E)|E))|EEE(SS|ENWNENNNEEESWS(EENENWNEENNWWWNWNNNNNNWNENESSESENNWNNENNWWS(WWS(W(NNENN(WSWENE|)EES(WSNE|)ENESEESWSSS(SSSSSSESWWNWW(SESEEEENNESSSSENNNNNNNESENEEENENNNNNWWNWWSESWSSWWNNWSSWNW(SSEEES(WWWSSEE(SWW|NW)|ENEEE(SWWEEN|)ENWN(WS|ENW))|NENNNEESS(WNSE|)E(SS|NNENNEEEESWS(WWNEWSEE|)SEESESSSSW(NNN|SSWSSWWSWSWNW(NEENEE|SSESWSS(SSEESESSE(NNNWNNNW(NEN(NESESE(NNE(EENWNENENNNNNENWWNW(NEENWWW(W(NNNNNEENE(SSWWSSSEENN(WSNE|)ESES(W|SEEEE(SWSEESWWSEE(EENNW(N(EESE(SWEN|)N|W)|S)|SSWWWN(EE|NNNW(SSSSW(SE(SWSEWNEN|)EEEE|N)|N(WSWENE|)E)))|NWNW(SWNSEN|)NEENEE(NWES|)S(WSWENE|)EEE(SWEN|)E))|E(NWNNWNWWWWWWNNNESSENNEEE(SSWWNE|NWNNWSSWNNNENENEENNE(ENNWSWWWNNNWSWWNENEENN(WWNWNWSSES(WS(SWSSSEEEN(WWNSEE|)ESSS(ENESNWSW|)SWSWWNENENWWWWNWSWSWNNENEENNNWNW(NEN(W|EE(SWSES|NW))|SSWWWW(NENWESWS|)WSSWWSESSWWSSWSWNWN(WWSSE(N|ESESWSSSWNNNW(NEWS|)SSW(SESESS(ENNESENNWNEENEENWNEESESESEESENNEEE(SWSSW(WSWSWWSSESSEEESWSEE(NNESENNESSES(ENNWNNNN(EESWSEE(ENWN|SWW)|WSWS(WNN(E|N(WSSSS(WWNW(N(EE(S|N(N|W))|W)|S)|E)|NN))|E))|WWW)|SWWWNNWWNWSS(WWNENWW(NW(SWNWESEN|)NNNNEESSW(SEES(E(NNWNENENWN(EES(S|E)|WN(E|WWSS(WNSE|)E(ESNW|)N|N))|E)|W)|N)|S)|ESWSESEN(NN|EEEE)))|NN)|EENNWSWNWWS(E|WWNNNEEENN(WSWWWSWWWN(NENN(WSNE|)NNESE(SWSS(EN|SW)|EN(EENSWW|)W)|WWSES(WWSWS(SWEN|)E|EEEESS(SE|WNW)))|E(SSS(WWWSNEEE|)EE|E))))|WWN(NWWS(WNWSWWNNE(S|NEN(NNWSWNWSSE(E|S)|ESEESWWW(EEENWWEESWWW|)))|SE(SES(SSENSWNN|)W|N))|E))|N))|NESENNNE(SEWN|)NWW(W|NEEEEN)))|E)|EE)|EESE(NN|EE(E|SWSWWN(E|W(N|SSSENEEE(SSENEWSWNN|)N)))))|SSSWWS(ESWSEE(SWSEWNEN|)NEN(W|N)|W)))|EE))|W)|S)|SSESWSSS(ENNSSW|)W(S(SW(N|S(W(S|W)|E))|E)|N))|S)|SWSW(NN|S))|W)|SW(SEWN|)N)|S(WS(WNNW(SS|WN(NESE|WS))|S)|E))|WWWW(SWSSW|NENW))))))|NEENWWN(SEESWWEENWWN|))|W)|WSE(SSWNWSWNW(N|WSWSEE(N|SSWNWSSSESESSSENNNNWN(EENNN(WSSNNE|)ESESE(NNWESS|)SSWNW(N|SWSSEESES(EN(NWNWWEESES|)E(EE|S)|WWW(NEWS|)SESWS(E|SSWNNNWSWWWNENNW(S|NWNEE(NWWNW(SSS|NNESE(NNWNNE(S|N(WWSS(WNNWWWNEENNWSWWWW(SESENSWNWN|)WNENNWSWWNEN(EEESESWSEENNN(ESES(E(NNWNSESS|)SSES(ENSW|)W|W)|W)|NNWW(NEWS|)SESWSS)|S)|E))|S))|SE(N|SS(EE|S)))))))|W)))|E))|EE)|E)|SW(SESWENWN|)NN))))|NEN(EEE|N)))|W))|SS(S|E)))))|EE(NWNNSSES|)EE))|EEENWW))))))|E)|ES(WW|EE))))))|NWW(W|NNESENN(E|WWWNNNE(EN(E|WWWW(NENNE(E|NN)|W))|SS))))|W)))|W))|W)|N))|S)))|NENN(WSNE|)ES(ENEES(W|ENE(SSWS(WNSE|)S|EN(EE|N)))|S))))|S(ESNW|)W))|SSS))|EEE(NWES|)ESEESWW(EENWWNSEESWW|))|N)|WWS(WNW(NENWNNEEESSS(WNNWESSE|)ENNNNWWNNWNEESE(NN(ENNESE|WWWWSSW(N|SS(EENWESWW|)S(SSS|W)))|S(ESSNNW|)W)|SSS)|E))))|NNNEEEES(WSWNWS|EESS(EEEEE(SEWN|)NWNEN(WN(NW(SSSWW(SEEWWN|)NWN(W(S|W)|EE(NWES|)S)|N)|E)|E)|S)))|E)|E)|S)))))|S)|S)|EN(EESWENWW|)N)|E)|E)))|N)|ESE(SWSSWENNEN|)N))|EEEEE)|NNN))|NNWW(SEWN|)W)))))))))|S))|EE))))))))|W)))|W))|N)|NNNNWNN(ESNW|)WWS(ES(SSENSWNN|)W|WWWSWSW(SEENSWWN|)WNWNWSS(E|WNWNN(E(S|EEEES(ENEEEWWWSW|)(S|W))|WS(WNWW(S(SS|E)|WWWSWWSESSWNW(S|NNW(S|WN(WSWSWSW(SESNWN|)NW(S|NN(ESENEWSWNW|)W)|EEEE))))|S))|S))))|SS)|S)|WW))|W)|WWSWNWSSSWWNNN(ESSNNW|)WWSESSWWN(NNWSWWSEESSSEEEN(WW|ESS(WWWWSSESENN(ESSSWWSWNNWSSWNWWNNENENWNNN(ESE(S(W|SSSWSW)|N)|NWNWWSWNN(EEEE(EE|S)|WWWWSWNWSSWSEEEN(W|ENESE(SWWSSEEN(W|EESSSWWSESWWNWSWSWSESENESEENESSENESEN(NWWNW(NNE(NNE(S|NNNW(N|SS|WW))|S)|WW(WW|S))|EEESE(S(E|WWNWSSESWWSWNNENWWWWWWN(EE|WWSWNNWWSWSWNWNNWNEENNENNEENN(WSWNWNWSSWSWWNWNEE(S|ENNNN(WWSSS(ENNSSW|)WNWNWN(EESNWW|)WSWSEESWWWSWSWNNWSWNW(WWNNESEEEEE(ENN(E|WSWWN(WSWNWWWSS(NNEEESNWWWSS|)|E))|S)|SSEESSENESS(EENENEE(ESESES(ENN(W|E(SS|EN(W|N)))|SSWNW(SSSEEN(ESSSE(N|SENEEE(ESSSWSW(SEESW(W|SEEENNNW(NEENNN(EEEESSSSESWWWWSSSE(EEEEE(SEWN|)NNNNW(N(W|ENEE(SWSE|ENNWS))|SSWS(WWN(WSNE|)E|E))|SWW(N(WWSEWNEE|)NNNNENESENNWWNEE(WWSEESNWWNEE|)|SS))|W(WSSENSWNNE|)N)|SS|W))|WNENN(ESNW|)WSWWWW(S(ESENES|W)|N(NNWESS|)E))|N(W|N)))|W)|N(NWSWW(NENEWSWS|)WW|E)))|NWN(ENSW|)WWS(WS(S|E)|E))|WWSWWSSW(S(ESENNENW(ESWSSWENNENW|)|W)|N)))|EEES(ENSW|)S(WNWSNESE|)S))|EESWSSWWSSE(EN(ENEN(E(EENSWW|)S|W)|W)|SSWW(WSEWNE|)N(N|E)))))|N)))|N))))|W)|EESEENNEE(SWSEWNEN|)NNEE(SWEN|)NWWW(N|WWSES(ENSW|)WWWSEES(NWWNEEWWSEES|))))|E)))))))|S))|N))|N)))|N))|NN))|W))|SE(SWSEWNEN|)E)|W)))|NN(E|NW(W|SS)))|N)))|NN)|NN))|E))|W)))))))|W)))))|S)|WWS(E|SWNWN(WWSESESESSWS(WWNEN(WN(E|N)|E)|ES(W|S(EEN(EE(SWSNEN|)E|W)|S)))|E)))|SSW(WSEEWWNE|)N)|SSEE(NWES|)SWWSES)|SS))|EN(WN|ESE))|NN(EESWENWW|)N)|N))|N)))|EEENWNEESS(NNWWSEWNEESS|)))|S)|NNWNWWSS(E(E|N)|WWWWW(N(EENN(N|ESE(NEN|SW))|WWWNWWNNW(SWSES(EE|WSWW(SEWN|)N(ENW|WS))|NNESE(SSEWNN|)N))|S))))|N)|E)))))|S)))))|NWWNW(SWWEEN|)NENNNE)|EEEN(WW|E))))|N)|EE)|S))))|ESSEE(SWEN|)NN(WS|ES))|E|N))|S))))|W)|SWSESSWNWWSWSWS(WW(S|WWWNEEEENWNNEES(S|W|EN(EE|NWNWSW(W(SSSWWEENNN|)W|N))))|EEEEE(SSS|N(WW(W|N)|E))))|E)|E)|E)$ diff --git a/2018/inputs/21.txt b/2018/inputs/21.txt new file mode 100644 index 0000000..aaebbac --- /dev/null +++ b/2018/inputs/21.txt @@ -0,0 +1,32 @@ +#ip 2 +seti 123 0 4 +bani 4 456 4 +eqri 4 72 4 +addr 4 2 2 +seti 0 0 2 +seti 0 1 4 +bori 4 65536 1 +seti 16031208 7 4 +bani 1 255 3 +addr 4 3 4 +bani 4 16777215 4 +muli 4 65899 4 +bani 4 16777215 4 +gtir 256 1 3 +addr 3 2 2 +addi 2 1 2 +seti 27 3 2 +seti 0 9 3 +addi 3 1 5 +muli 5 256 5 +gtrr 5 1 5 +addr 5 2 2 +addi 2 1 2 +seti 25 7 2 +addi 3 1 3 +seti 17 4 2 +setr 3 1 1 +seti 7 5 2 +eqrr 4 0 3 +addr 3 2 2 +seti 5 1 2 diff --git a/2018/inputs/22.txt b/2018/inputs/22.txt new file mode 100644 index 0000000..e2e94a0 --- /dev/null +++ b/2018/inputs/22.txt @@ -0,0 +1,2 @@ +depth: 7863 +target: 14,760 diff --git a/2018/inputs/23.txt b/2018/inputs/23.txt new file mode 100644 index 0000000..306c4ad --- /dev/null +++ b/2018/inputs/23.txt @@ -0,0 +1,1000 @@ +pos=<61981295,70302690,50074583>, r=86817788 +pos=<-39574082,11593440,52034024>, r=86226353 +pos=<-22613800,41560771,22762338>, r=83067593 +pos=<-12414843,51978293,68300191>, r=85018769 +pos=<-12727191,34870716,52975971>, r=52899633 +pos=<-32063168,40924402,49558575>, r=74871596 +pos=<18752046,16372097,-9651854>, r=70068867 +pos=<3474631,29804741,98417262>, r=77072884 +pos=<18354169,57026789,74027645>, r=65025959 +pos=<22104105,74882695,61927007>, r=67031041 +pos=<-42133805,38530007,57591711>, r=90581205 +pos=<-47869746,22599340,42855147>, r=77956291 +pos=<-27020782,-4791281,34203354>, r=93149809 +pos=<-18487970,40655084,49627122>, r=61095611 +pos=<10137288,54171533,97007570>, r=93367254 +pos=<21836035,43430190,47217893>, r=78376026 +pos=<8216569,21003453,101684850>, r=78676489 +pos=<-40466865,34952266,70038151>, r=97782720 +pos=<72670731,-8427298,58419388>, r=97862747 +pos=<-26904810,19437248,39548346>, r=63460381 +pos=<-14862223,38537164,6158587>, r=88895667 +pos=<-4093645,28809183,65079634>, r=50307904 +pos=<-13276886,43613687,45971502>, r=55187766 +pos=<49089034,29003918,14560017>, r=57321614 +pos=<-13807521,-29104885,50131321>, r=99255387 +pos=<48476757,37188242,72540714>, r=62665037 +pos=<7140081,51751715,-8561127>, r=94827577 +pos=<-43249072,32737116,53752441>, r=82064216 +pos=<6641528,98591490,47271959>, r=91547386 +pos=<-23305462,10475650,56073326>, r=75115096 +pos=<6053316,21990329,84119652>, r=62287689 +pos=<7023331,60698763,57949984>, r=63950985 +pos=<-36608889,31399128,35446137>, r=74217136 +pos=<6817093,34966536,98116734>, r=78591704 +pos=<4957605,61740316,52702032>, r=61810336 +pos=<-2269508,-8851147,43341014>, r=63321024 +pos=<12839874,52090204,58609561>, r=50185956 +pos=<-24117273,33915884,49793440>, r=60152075 +pos=<74759590,28034712,42456610>, r=54126256 +pos=<-48197949,37668470,48713802>, r=86905688 +pos=<-465248,41562365,60498029>, r=54851108 +pos=<10694430,32208520,48027772>, r=61692668 +pos=<-8548512,14246214,83247198>, r=83761331 +pos=<43950964,33755026,90173201>, r=72338199 +pos=<-14628694,43441676,58236468>, r=68632319 +pos=<106381567,34503222,46141825>, r=91485627 +pos=<-42403687,53189612,46049581>, r=93968393 +pos=<3940021,35797440,82233626>, r=66416478 +pos=<-12215361,4082478,43661351>, r=60012674 +pos=<19860123,68466722,60165468>, r=61097501 +pos=<70777186,32758921,32118468>, r=65206073 +pos=<-38591125,46522298,54596946>, r=92035892 +pos=<22636563,105345403,45688673>, r=80723037 +pos=<-3951303,29434316,22353040>, r=52688125 +pos=<-176419819,31194464,52039201>, r=76587195 +pos=<-3596358,48726226,78390625>, r=83038642 +pos=<7182613,37282188,20126279>, r=51628082 +pos=<-25240363,51483969,55323702>, r=84373768 +pos=<21428319,64401806,57994375>, r=53293330 +pos=<-5939048,7790261,21935573>, r=71754303 +pos=<-14391272,30291007,70042112>, r=67049881 +pos=<-22323827,29920141,55916312>, r=60485891 +pos=<13475129,52193445,63897921>, r=54942071 +pos=<-3994272,15505795,89454649>, r=84155011 +pos=<475865,1537450,69193888>, r=73392255 +pos=<-10815135,44879964,69035166>, r=77056155 +pos=<11306358,28884419,64442081>, r=91273574 +pos=<14678811,33694651,48185622>, r=71901550 +pos=<3756099,71276526,21743645>, r=87431573 +pos=<40262582,59466852,61256380>, r=65445301 +pos=<11616060,70966185,64722364>, r=76397938 +pos=<3872060,39650278,107716165>, r=95819913 +pos=<9586133,45083261,78735554>, r=66558242 +pos=<77865670,42917012,73695024>, r=98936729 +pos=<-1745961,55327607,42088395>, r=56640112 +pos=<26855240,67981174,26878283>, r=61746856 +pos=<-14224458,28877026,31495228>, r=53261041 +pos=<15850501,66941649,70246547>, r=73663230 +pos=<-22483771,25856673,49504583>, r=52343508 +pos=<9442908,53159770,55875115>, r=51917541 +pos=<1959101,903989,50510107>, r=53859027 +pos=<7569188,-24881655,45995388>, r=69519533 +pos=<1336123,50534199,50773018>, r=52296589 +pos=<-6780305,30188574,97998637>, r=87293233 +pos=<-27347231,32710526,48539527>, r=60922750 +pos=<-54109318,45563567,46755290>, r=98753653 +pos=<-23931716,34591305,51177382>, r=62025865 +pos=<1842700,54313361,57870403>, r=62666497 +pos=<9906862,47176518,46588813>, r=49926624 +pos=<-5650338,36212767,99081721>, r=93270578 +pos=<-9210222,73861103,51071528>, r=86469031 +pos=<-48605170,28058111,39410284>, r=78908074 +pos=<6277738,31698726,83207681>, r=60954109 +pos=<5935953,25376812,52194560>, r=66482724 +pos=<-33349449,32090950,46515684>, r=64281651 +pos=<-1144497,68829923,72349587>, r=94649606 +pos=<68150356,106204720,129297951>, r=83514523 +pos=<8426203,98908672,49758875>, r=92566786 +pos=<16538168,48418035,65737293>, r=49942650 +pos=<19573131,82515397,58801909>, r=74069662 +pos=<98906639,46422007,45986912>, r=95774562 +pos=<12340098,62609442,59505078>, r=62099865 +pos=<-28251146,31055125,25461712>, r=75499853 +pos=<19758085,59632651,60443124>, r=52643379 +pos=<-63046046,25663836,40121278>, r=92801960 +pos=<-37359413,31532323,71313730>, r=92530910 +pos=<53387378,31226416,70902974>, r=59975761 +pos=<-111343725,90010574,65438544>, r=96905196 +pos=<39565178,36023094,48981621>, r=96285986 +pos=<-18425354,35959496,54078093>, r=60788536 +pos=<4117058,66844365,17924670>, r=86457430 +pos=<4823188,-14314294,64385895>, r=80088678 +pos=<20323219,61060408,10757887>, r=71634602 +pos=<89860271,38268711,51332073>, r=83920073 +pos=<6829746,30401653,100430131>, r=76327501 +pos=<-18163621,73955629,42658058>, r=91116552 +pos=<-9868198,28983545,82688052>, r=73865474 +pos=<-3955635,32776886,7789254>, r=70598099 +pos=<22115720,88382733,50485824>, r=69078561 +pos=<-25241164,31938266,56917737>, r=66422608 +pos=<14985873,-15753032,55823238>, r=62802267 +pos=<16643466,61628684,29386869>, r=57253552 +pos=<21580242,42328478,123256438>, r=96330398 +pos=<-25199672,13587085,61865724>, r=79689986 +pos=<25598120,-21677261,57401363>, r=63021973 +pos=<20683805,43416073,80207144>, r=55264851 +pos=<-12206963,28525784,76317729>, r=69375956 +pos=<66517337,40023722,63765750>, r=74765959 +pos=<21046583,32632182,66997632>, r=92540759 +pos=<-13138431,65411819,48286547>, r=79162230 +pos=<-33524737,76477821,155964131>, r=73103463 +pos=<-33331228,9961241,69359006>, r=98940886 +pos=<39564979,28572472,53811503>, r=61407169 +pos=<-48869811,21665479,51245298>, r=84661484 +pos=<-8710194,53780076,47547665>, r=62363657 +pos=<-7314943,55087956,46146524>, r=60875047 +pos=<-61837954,25859003,56641091>, r=98831768 +pos=<-5695240,58983811,70577156>, r=87581649 +pos=<-25981379,35101300,31842886>, r=70894580 +pos=<3669996,59130810,1907555>, r=95208068 +pos=<34776272,-4188188,70499131>, r=67808809 +pos=<-35530241,30475154,50076449>, r=68407314 +pos=<-8155622,43149031,72681791>, r=76311918 +pos=<6666752,64359993,46401448>, r=56420132 +pos=<14935236,11018971,47709423>, r=95072999 +pos=<-31457362,28416643,49636691>, r=61836519 +pos=<-16109927,48371152,51014763>, r=67821289 +pos=<42694611,33011663,86560963>, r=66726260 +pos=<10684191,49511278,21069239>, r=59412987 +pos=<-423180,40569321,15553431>, r=67093941 +pos=<-32350990,31916431,66781337>, r=83374335 +pos=<-40417062,33333028,20729982>, r=94675000 +pos=<-5784232,29640751,62496121>, r=50246685 +pos=<-15428974,17471422,52568175>, r=56737766 +pos=<-2932788,33823267,68046768>, r=57128261 +pos=<63579456,43455645,46047101>, r=57541191 +pos=<15403015,31974701,112979009>, r=81876224 +pos=<-24087841,19769551,56050682>, r=66580826 +pos=<-11649390,82772147,39945831>, r=96130620 +pos=<20266288,41030544,49627298>, r=52471876 +pos=<15271488,104802139,55747920>, r=97604129 +pos=<-17294454,29095937,38121063>, r=49924113 +pos=<-28047432,15028531,34900811>, r=73659132 +pos=<63036558,50019938,71871561>, r=89387198 +pos=<-34801957,36642230,53036734>, r=76806612 +pos=<-38144076,30407351,68440798>, r=89317810 +pos=<3512495,54767308,49076598>, r=52656960 +pos=<14274088,34274498,46377106>, r=89548213 +pos=<39329258,25136254,46456590>, r=73770931 +pos=<-43496380,31317940,30852295>, r=85616814 +pos=<14184631,31298574,54769039>, r=52386260 +pos=<80496193,20583845,74488856>, r=92746549 +pos=<-23389071,63823214,32693625>, r=96173548 +pos=<-25690209,44737890,68493032>, r=91246752 +pos=<-27606431,29594954,78055471>, r=87582356 +pos=<72441600,37663099,5449732>, r=98443349 +pos=<64033149,70075201,56633740>, r=95201164 +pos=<-41252112,41584295,58764742>, r=93926622 +pos=<-12824950,60182885,70449830>, r=95783330 +pos=<63858499,1902299,56897189>, r=77198605 +pos=<-35302433,28371559,42263514>, r=63065421 +pos=<-50193553,13029004,178032706>, r=87155339 +pos=<-10241339,30475433,65035094>, r=58077303 +pos=<27176667,88255399,39199151>, r=70021298 +pos=<3789738,63200642,58556644>, r=70293009 +pos=<-29026962,17065408,63626804>, r=81800634 +pos=<-15528112,28599049,55171449>, r=51624044 +pos=<67553889,-12734884,46684710>, r=85318716 +pos=<-22058789,25579659,47800035>, r=50491043 +pos=<65502868,77153034,48367762>, r=95482653 +pos=<52012555,29111973,69892338>, r=55475892 +pos=<7094796,39275693,83735416>, r=68242166 +pos=<1860284,40455320,92877446>, r=83797940 +pos=<11928924,-2446863,70048662>, r=66778312 +pos=<7667696,94196419,41409153>, r=86774357 +pos=<-47571004,37469854,46817463>, r=84183789 +pos=<-4156736,84010739,52365610>, r=92858630 +pos=<6056924,12888978,84519517>, r=71785287 +pos=<-47345906,30387796,45986301>, r=76045882 +pos=<-14305750,38815805,53464135>, r=58911123 +pos=<-5509681,53176769,46879448>, r=57891332 +pos=<-12499446,35923605,56390435>, r=57139055 +pos=<-52764985,37485922,49356853>, r=91933283 +pos=<-995676,157395073,-3073485>, r=52828911 +pos=<20007537,18034710,53163539>, r=53689323 +pos=<14489164,16396768,90904833>, r=66230860 +pos=<-56656961,29846250,59765242>, r=98593988 +pos=<12580077,72518760,77049199>, r=89313340 +pos=<100504676,32770164,49001641>, r=86735485 +pos=<56363428,40982042,51325603>, r=53130348 +pos=<67579027,45292106,26873551>, r=79786057 +pos=<26991023,51464352,68172728>, r=51087111 +pos=<-2477721,38040811,90549029>, r=83393046 +pos=<39812282,49420172,27946843>, r=55074069 +pos=<-7592987,58715561,48320434>, r=66954427 +pos=<7777052,28459937,51985707>, r=53419415 +pos=<-34825568,30793001,25736210>, r=81537269 +pos=<-24303136,54965408,48394944>, r=79988927 +pos=<-23117889,8738217,68644161>, r=89235517 +pos=<-25024083,8306905,47947646>, r=70876621 +pos=<2007442,56985136,59636415>, r=66939562 +pos=<-13687550,71578246,57121637>, r=94712935 +pos=<-16345760,32983233,89061217>, r=90715694 +pos=<86368374,35824210,61445425>, r=88097056 +pos=<-35743614,53334234,57645839>, r=99049305 +pos=<-15191744,62377081,28606960>, r=90616727 +pos=<15180924,74088799,62177344>, r=73410680 +pos=<87747671,31399471,31905651>, r=81030076 +pos=<490300,35168974,87629502>, r=74633619 +pos=<-7639730,47107985,53037366>, r=60110529 +pos=<-15154000,47565888,46724248>, r=61769578 +pos=<-15930553,8949295,49890450>, r=63083820 +pos=<-2085646,59550216,190147611>, r=69262241 +pos=<7225777,50890764,62861738>, r=58852281 +pos=<90275849,20142660,46920592>, r=75399045 +pos=<-26764544,42182428,46746825>, r=68019674 +pos=<76321467,29233298,55996378>, r=66010239 +pos=<-72399950,54572749,137176788>, r=75623903 +pos=<20511710,69381130,54777605>, r=55972482 +pos=<11171812,-1838585,60251989>, r=57130513 +pos=<-15322219,34977106,95397324>, r=98022178 +pos=<45186029,75515109,54316351>, r=79476635 +pos=<-33243023,32685580,54621141>, r=72875433 +pos=<-61584462,35077699,48778369>, r=97765970 +pos=<-2080973,32701858,77315532>, r=64423903 +pos=<-28378799,39591108,22227847>, r=87396852 +pos=<-8099746,62641467,55946146>, r=79012806 +pos=<-24720179,45274695,48132554>, r=70452861 +pos=<20784250,45013508,95099754>, r=71654519 +pos=<-30064753,33988072,46097252>, r=62475758 +pos=<34563348,30488217,55672227>, r=86287854 +pos=<-16742541,7677207,74209817>, r=89487059 +pos=<48717911,60141573,64839376>, r=78157946 +pos=<11980231,77201897,12503508>, r=94373076 +pos=<-35767666,29757894,59267775>, r=77118779 +pos=<-22126819,32362172,682297>, r=95461509 +pos=<-20183006,18654168,80542091>, r=88282618 +pos=<29158741,90530365,43109268>, r=70368234 +pos=<78589607,47357015,57145573>, r=87551217 +pos=<53822697,51713673,83991488>, r=93986944 +pos=<-37287747,28688663,72807970>, r=91110215 +pos=<13542941,37989744,51992083>, r=61754737 +pos=<14525371,30291586,55624740>, r=74352172 +pos=<65594982,25847880,72811378>, r=70903881 +pos=<85028254,32319009,59775298>, r=81581589 +pos=<-47952231,24568531,49936283>, r=79531659 +pos=<-21321958,21913518,49475661>, r=55095834 +pos=<-48453939,34233126,49830769>, r=84843339 +pos=<99391685,35202974,43142729>, r=85240537 +pos=<22710331,34170304,55092906>, r=91207796 +pos=<-12135705,32243191,63938331>, r=60642766 +pos=<-12338157,43480193,54115729>, r=62259632 +pos=<8622864,24881999,3805702>, r=58230495 +pos=<34000374,4364405,71395390>, r=59376643 +pos=<-19712623,50327429,47038637>, r=69404671 +pos=<-8596487,17062414,87164926>, r=84910663 +pos=<-18913938,45008114,51843283>, r=68090880 +pos=<19472967,181579393,106030809>, r=56142937 +pos=<-17173370,-3226764,55066991>, r=81678816 +pos=<63850431,62835473,23871657>, r=96602589 +pos=<-3798894,30299579,101412001>, r=87836232 +pos=<9068586,62089120,57368844>, r=62714847 +pos=<-22474207,29499886,47923819>, r=52223751 +pos=<-45651602,35036414,46323892>, r=79337438 +pos=<-12419250,32111741,56514558>, r=53370983 +pos=<12664542,52854651,103268523>, r=95784065 +pos=<22357114,12328694,108875611>, r=80401468 +pos=<-6746842,50055566,49180574>, r=58308458 +pos=<-27320265,33686937,48286622>, r=61619350 +pos=<-5359976,29458721,92619986>, r=79764181 +pos=<10052919,30248699,46342959>, r=64500134 +pos=<31603672,24458394,109318746>, r=74809324 +pos=<15363324,39635782,101274262>, r=77872183 +pos=<13846270,53578231,29556061>, r=51830690 +pos=<-15354477,46149883,46658194>, r=60488156 +pos=<-569362,85626876,46006904>, r=84528844 +pos=<10749296,42284246,82711135>, r=66571646 +pos=<-14856420,53289609,77345425>, r=97817094 +pos=<-23825436,15929136,64937891>, r=79045870 +pos=<89568342,30383137,46009564>, r=70420359 +pos=<13145554,32649278,85217834>, r=57047183 +pos=<554467,16643477,85598183>, r=74612189 +pos=<36666635,41828463,88364574>, r=71318747 +pos=<12602990,89529451,67821002>, r=97072935 +pos=<-33112360,18329619,59694200>, r=80688742 +pos=<-15561603,38236853,67667639>, r=73791835 +pos=<3519076,58523179,5256274>, r=91402635 +pos=<37058015,73816180,6497217>, r=98165326 +pos=<-485820,34664283,76480969>, r=63956703 +pos=<8046540,50222182,60417372>, r=54918488 +pos=<6698732,2095928,57478145>, r=54895175 +pos=<-110267625,103715108,49404770>, r=83596582 +pos=<14488717,37517183,47868787>, r=90880734 +pos=<11594929,31481958,92334208>, r=64546675 +pos=<13142664,33433973,51871828>, r=78783673 +pos=<14725843,21079396,84588725>, r=54995145 +pos=<17991922,28746415,53178977>, r=62665596 +pos=<21345476,109893878,54658351>, r=95532225 +pos=<99514509,32213492,45962288>, r=82149323 +pos=<37772543,40405568,108402968>, r=91040181 +pos=<16477866,1889108,-9755558>, r=86930037 +pos=<6066766,45074819,93307079>, r=84640752 +pos=<63259627,39790194,63298460>, r=70807277 +pos=<85870661,25697065,48142683>, r=66661876 +pos=<-20063299,13270466,81943036>, r=94947530 +pos=<9219021,14187810,110350611>, r=93155487 +pos=<11396690,79601451,29059476>, r=80800086 +pos=<-5992626,63895408,63403216>, r=85617223 +pos=<13745746,56178190,15154849>, r=68932414 +pos=<-19200598,41415603,54301128>, r=67242872 +pos=<66801369,67709049,33790327>, r=94508881 +pos=<-58054899,31429373,50412427>, r=92222250 +pos=<17725131,19747008,101361033>, r=70100661 +pos=<16315702,21937157,109577476>, r=77536345 +pos=<-21450279,31429149,47689387>, r=52894343 +pos=<16503867,46780903,71008828>, r=53611297 +pos=<-10617311,71781674,53581209>, r=88305651 +pos=<-18369624,34464166,58808640>, r=63968022 +pos=<-44338154,47516775,49329347>, r=93509756 +pos=<7546939,23561808,74615854>, r=49718921 +pos=<-23553075,43233473,30179868>, r=78262286 +pos=<-33728549,33419608,75400040>, r=94873708 +pos=<4130401,-415851,60422323>, r=62919529 +pos=<12199308,42656684,46658363>, r=62914010 +pos=<-10823045,40017720,87358982>, r=90525236 +pos=<54855928,43498518,54679995>, r=57493498 +pos=<12261573,29515175,45893575>, r=97366173 +pos=<15817533,48376146,72425161>, r=57309456 +pos=<22499943,43484899,49303866>, r=84870164 +pos=<15087449,40820405,15442472>, r=51945357 +pos=<2380830,39189079,87564730>, r=76698440 +pos=<10292232,61644825,58639264>, r=62317309 +pos=<-25063352,29824290,49726684>, r=56939825 +pos=<9247300,60592893,82851862>, r=86522910 +pos=<34974237,51631378,71206261>, r=62271044 +pos=<11115341,39008866,88216499>, r=68435471 +pos=<-47347839,33255463,54507917>, r=87436830 +pos=<-12385471,35476634,66586332>, r=66774052 +pos=<40297014,43609070,76102045>, r=64467152 +pos=<-25028316,48459326,70188306>, r=96001387 +pos=<29716238,95743100,36047260>, r=83200834 +pos=<-2195894,57161709,59974579>, r=71657615 +pos=<-34897564,36092514,37195303>, r=75449626 +pos=<-34350080,30930206,62762967>, r=80368703 +pos=<-13299160,-1305686,52546724>, r=73363335 +pos=<74203994,40071747,39943051>, r=68121068 +pos=<-30255218,53252625,55149209>, r=90982504 +pos=<-23708755,36047177,30518158>, r=70892646 +pos=<-42225041,28551593,47086408>, r=70188476 +pos=<45093813,91953991,40089158>, r=90747011 +pos=<20989497,-9578662,65146013>, r=59947021 +pos=<-9469151,9360043,19787978>, r=75862353 +pos=<-10455182,76182076,47046337>, r=86009032 +pos=<1489674,30920418,49075947>, r=50871653 +pos=<-1805815,40895592,59548754>, r=54575822 +pos=<22434664,50411195,76723826>, r=57025799 +pos=<1351173,-35240030,57415985>, r=97516622 +pos=<-32995557,45695405,31582059>, r=88763841 +pos=<96147879,48598772,48672050>, r=97877850 +pos=<71556712,165083816,80525352>, r=61212474 +pos=<-26738516,51821211,51973287>, r=82858872 +pos=<-45126452,24625563,45768892>, r=72481504 +pos=<-1724534,91435747,47738636>, r=93224354 +pos=<-42642617,17009143,50075464>, r=81920769 +pos=<52222152,55156460,54199932>, r=66037534 +pos=<8639285,85433958,47459393>, r=76579513 +pos=<10141717,61817092,48597374>, r=52598556 +pos=<47916267,47143215,50290112>, r=49808644 +pos=<-1999143,50275699,76700962>, r=81301257 +pos=<-41681257,20679616,56340422>, r=83553725 +pos=<35884408,41646080,79776061>, r=61765620 +pos=<4301038,52856724,21630776>, r=68579717 +pos=<-40960612,30439627,37255922>, r=75799466 +pos=<35444048,43762938,84706440>, r=68372926 +pos=<79975658,29137911,50197120>, r=63769730 +pos=<93007,44307904,61961116>, r=58501565 +pos=<-32671755,39076539,66101849>, r=90175907 +pos=<-19991034,51969552,46041742>, r=70328104 +pos=<-35314188,37602800,46861313>, r=72103772 +pos=<37201145,71666894,82972323>, r=96299533 +pos=<-49234235,28079826,57132180>, r=86771712 +pos=<8312877,40022919,72604965>, r=56640475 +pos=<39181205,52790049,92153926>, r=88584204 +pos=<7068698,47606987,62510305>, r=55374127 +pos=<30603349,56814294,106942634>, r=98819430 +pos=<16115552,28332758,35601360>, r=54887656 +pos=<10074393,95989908,47950308>, r=86191298 +pos=<-5591354,49710053,47446079>, r=55073040 +pos=<-16059874,70092354,52417407>, r=90895487 +pos=<-3286599,20110685,83441267>, r=72828890 +pos=<-6936335,22574502,22140566>, r=57762340 +pos=<32992478,36116750,76761537>, r=50329801 +pos=<-89483882,3641127,125934475>, r=84985845 +pos=<45083402,48971622,84039680>, r=82553733 +pos=<16543763,-12232511,59927146>, r=61828172 +pos=<-128930120,71482570,52773218>, r=59057806 +pos=<-3321066,36249470,10553454>, r=70672189 +pos=<11035114,-4452527,60224262>, r=59853336 +pos=<-26291008,49849603,66835908>, r=95302073 +pos=<7937807,81400916,47819246>, r=73607886 +pos=<16576233,48187487,42040402>, r=56973312 +pos=<4344158,75290424,35788694>, r=76812485 +pos=<32189900,-55403075,49857150>, r=95795351 +pos=<17696418,36185949,87820170>, r=58635317 +pos=<777488,12020182,61326632>, r=54740630 +pos=<33863194,35023084,109647702>, r=82992971 +pos=<27201238,50703815,113905343>, r=96269385 +pos=<13342983,51362786,14113529>, r=65561106 +pos=<-3406344,1514525,71500197>, r=79603699 +pos=<-4003952,88211664,52599168>, r=97140440 +pos=<7364870,66805533,30929588>, r=70166122 +pos=<4337235,69741240,49137686>, r=66867686 +pos=<39289283,41543331,80086140>, r=65377837 +pos=<31061019,37187231,96617615>, r=69325024 +pos=<12227872,90873558,49623164>, r=80594302 +pos=<-29205869,34879980,48574906>, r=64986227 +pos=<-23428908,25034353,70988758>, r=75595080 +pos=<31236415,75651801,72043812>, r=83391270 +pos=<-35663336,33550704,50545521>, r=72085007 +pos=<-25373194,33271630,48939058>, r=59909386 +pos=<81186014,21770112,48774152>, r=66535373 +pos=<-36266473,21205391,64408172>, r=85681063 +pos=<46509791,41930052,-8736829>, r=90965014 +pos=<-22028107,15234691,51487555>, r=64492638 +pos=<-20542339,31539802,48757530>, r=53165383 +pos=<13662571,56928981,15523678>, r=69397563 +pos=<-12746344,18867316,85938166>, r=86028894 +pos=<-301007,47558794,60352290>, r=60537813 +pos=<32207624,60299805,78729522>, r=75695968 +pos=<100081770,31328053,46754080>, r=82623316 +pos=<-48070787,30652729,47098499>, r=78147703 +pos=<3499835,47702960,54008261>, r=50536940 +pos=<-30212070,27990135,63986849>, r=74514607 +pos=<-15832151,28224015,56445561>, r=52827166 +pos=<-67978767,28737500,46365512>, r=95407212 +pos=<-30015019,22627881,66498575>, r=80097431 +pos=<-3376964,87518399,46889764>, r=90110663 +pos=<-12133745,41888151,15297059>, r=80379652 +pos=<-3430750,43859378,-4475364>, r=93420295 +pos=<10612582,58698878,71450281>, r=71862044 +pos=<-16853417,30239412,55512427>, r=54930714 +pos=<9856655,-15034177,76105296>, r=87495006 +pos=<19700487,14896792,94233323>, r=65848189 +pos=<90908533,40366432,47407308>, r=83141710 +pos=<53053613,45815347,47231085>, r=50559042 +pos=<91606120,30241005,62870344>, r=89176478 +pos=<6549177,28253488,45947118>, r=89716871 +pos=<-54966251,31984766,51327953>, r=90604410 +pos=<11739879,47302011,70593259>, r=58480946 +pos=<17782015,-43385757,45900297>, r=77715722 +pos=<-22321136,33175591,26785779>, r=70365922 +pos=<7447288,64317364,46803776>, r=55999602 +pos=<7212096,101522192,49782085>, r=96417911 +pos=<9756698,57513943,50726200>, r=50809212 +pos=<53938302,42703477,85380074>, r=86480889 +pos=<6127018,32634301,81765609>, r=60598446 +pos=<16024259,75089269,42148970>, r=58570841 +pos=<-14467950,30833664,53148474>, r=50775521 +pos=<1055620,-8213227,49647151>, r=63016576 +pos=<20109959,34289334,98011242>, r=64516119 +pos=<-51406886,30261849,39781808>, r=83541835 +pos=<21609187,48166640,103039225>, r=81922186 +pos=<-37318020,42076555,46223326>, r=77943551 +pos=<-9802864,50149053,57309602>, r=69587023 +pos=<8892924,30956296,4508427>, r=59209772 +pos=<17951962,38815438,50096954>, r=68485096 +pos=<12306030,97501425,46533603>, r=84054466 +pos=<-37463875,31083117,49553934>, r=70426366 +pos=<92230728,52683980,47015111>, r=96388808 +pos=<9364608,56647782,54993450>, r=54602057 +pos=<8684942,36838535,105538060>, r=86017275 +pos=<-35827611,42789189,57956518>, r=88898907 +pos=<5807845,31720781,7757680>, r=59810369 +pos=<-25365859,48253374,51239130>, r=77183993 +pos=<-13706311,23188045,2328735>, r=83730603 +pos=<-1053434,40958215,58697392>, r=53034540 +pos=<16686564,43884661,76779893>, r=56303739 +pos=<94046858,44171067,48044994>, r=90722205 +pos=<-59177933,25088148,47504944>, r=87806389 +pos=<-18654288,54793837,56331529>, r=82105172 +pos=<113519092,134203172,41554166>, r=95154840 +pos=<9436438,34715386,46078979>, r=73810378 +pos=<49732913,61362619,75247356>, r=90801939 +pos=<-54495041,22320842,50939618>, r=89325794 +pos=<12427539,17900057,11259909>, r=53954136 +pos=<16888421,45562882,95425764>, r=76425888 +pos=<-13394846,17877372,48322242>, r=50051600 +pos=<-20925432,28703245,52084455>, r=54038872 +pos=<8561924,38380609,101695915>, r=83840427 +pos=<76633366,35686884,48280680>, r=65060182 +pos=<15355031,32838431,53406732>, r=83822095 +pos=<-22241568,21612015,21308708>, r=74861862 +pos=<-45540364,39478825,56854957>, r=94199599 +pos=<-130761639,-7225545,18556230>, r=71625415 +pos=<12371981,60358241,50483820>, r=50795545 +pos=<-52881118,38556375,50525246>, r=94288177 +pos=<-5508845,44982595,39309821>, r=52836406 +pos=<-12223578,42705080,48054452>, r=55308618 +pos=<19782229,-391087,65138940>, r=51959480 +pos=<11688897,65712575,56641017>, r=62990663 +pos=<26728983,4877916,77607591>, r=57803924 +pos=<-66749809,31885857,41453884>, r=98836603 +pos=<12947494,40474371,72186292>, r=52038612 +pos=<22710949,73206326,90156950>, r=92977765 +pos=<21418285,58754538,74497516>, r=64159328 +pos=<-14006029,39388620,45791459>, r=51511854 +pos=<32331392,-9548718,53912995>, r=54138363 +pos=<-11103143,48665873,60597818>, r=72692378 +pos=<8404016,40264319,-15387292>, r=88902405 +pos=<-60697351,19761606,51535474>, r=98682907 +pos=<113332017,31654847,49314512>, r=98760760 +pos=<-17968649,23774520,26514627>, r=63220547 +pos=<-7891448,38548696,51246202>, r=50011819 +pos=<-36243928,28580831,31232834>, r=75246710 +pos=<2236746,78152395,33336820>, r=84233689 +pos=<-42646767,27988371,50996303>, r=73957310 +pos=<-12975938,19343337,62716304>, r=62560618 +pos=<-6698310,59281250,50138827>, r=68443906 +pos=<-29169469,6610144,55165008>, r=83936144 +pos=<-859099,48228088,68790664>, r=70203324 +pos=<-53259426,43091307,49454062>, r=98130240 +pos=<40051035,15273208,52961854>, r=55405641 +pos=<8599969,22173989,57555102>, r=96158345 +pos=<11561358,34996323,107452493>, r=83213190 +pos=<12971841,75769901,53455514>, r=68579059 +pos=<-24609077,31137632,12599716>, r=84801836 +pos=<39964941,58818274,67271078>, r=70513393 +pos=<11590874,44091058,16246818>, r=57908243 +pos=<11534010,42492557,73281128>, r=56565109 +pos=<46029692,44356665,33034407>, r=51140346 +pos=<230818789,28332006,48666836>, r=77009932 +pos=<-49307134,28877489,51162598>, r=81672730 +pos=<-24858611,61344602,49583599>, r=88112245 +pos=<-33971422,31026034,46645662>, r=63968617 +pos=<-14920621,60364341,48024490>, r=75635084 +pos=<-18886432,44383739,46645651>, r=62241356 +pos=<63367787,57050728,56716295>, r=81594314 +pos=<-29235501,30020585,46865414>, r=58446946 +pos=<-1116549,51739608,46803263>, r=51985095 +pos=<-12898335,8922965,49532990>, r=59720175 +pos=<11377440,35121435,54012286>, r=63237886 +pos=<-28362629,38084006,47961632>, r=66733755 +pos=<-32732759,53759806,34185847>, r=93961530 +pos=<-2049132,35100887,26872869>, r=51932182 +pos=<10307391,63192491,78308824>, r=83519668 +pos=<-11173886,50879581,47031969>, r=61411041 +pos=<-6714487,69428860,48945046>, r=77413940 +pos=<-35145310,126288277,94537390>, r=86514887 +pos=<15372059,77344628,57152598>, r=71450857 +pos=<-5534049,28501573,47802916>, r=70800310 +pos=<30282369,-27855631,57777471>, r=74260879 +pos=<27578388,34577846,94631718>, r=61246950 +pos=<5377307,28529784,46392652>, r=82994735 +pos=<-9288964,40034367,85892017>, r=87541479 +pos=<32663376,50111633,96347262>, r=83581281 +pos=<64590061,24883190,74402048>, r=72454312 +pos=<6011059,52895297,-9651139>, r=98190405 +pos=<-40075559,29164760,46796031>, r=68361786 +pos=<-27324257,33280398,58797836>, r=71727947 +pos=<65478625,51242475,73962244>, r=95142344 +pos=<-8161052,44514515,51881665>, r=56882708 +pos=<37117480,70516429,65453164>, r=77546136 +pos=<-66556175,24793456,46807708>, r=94782274 +pos=<6745175,-9697218,46249405>, r=55413236 +pos=<-15842202,54067556,49741202>, r=71976478 +pos=<-26234670,32761687,62384539>, r=73706383 +pos=<27047080,45210798,96262259>, r=72979567 +pos=<-54875381,19475504,41999639>, r=88941400 +pos=<15588049,51830394,45712337>, r=63164637 +pos=<78521098,9084198,53510654>, r=81292772 +pos=<-35117158,30884180,40930824>, r=66725315 +pos=<38517388,31310367,53377273>, r=93263507 +pos=<-34824848,35863485,57039123>, r=80052924 +pos=<87999262,21593229,36952685>, r=77127999 +pos=<-14970039,39281480,31602555>, r=64303877 +pos=<30996868,32710257,-7944148>, r=65439616 +pos=<-46544578,32730823,48455778>, r=80056612 +pos=<-25655223,54235827,24268664>, r=97277174 +pos=<-31661104,34739101,46810221>, r=65535871 +pos=<-15725105,33623089,58648908>, r=60322582 +pos=<30366481,48524611,105759957>, r=89110268 +pos=<7896511,67058144,60224279>, r=71711348 +pos=<8886133,36820409,69879921>, r=50139913 +pos=<-35009499,24967338,48346229>, r=64600051 +pos=<12236743,61232811,36406256>, r=54244674 +pos=<32133015,71147471,65672434>, r=73411928 +pos=<-4312430,48491142,58819757>, r=63948774 +pos=<-11255504,48618070,49019953>, r=61218979 +pos=<-36126448,28661597,45905741>, r=63019487 +pos=<6995492,-14641677,39110487>, r=64076982 +pos=<-494882,62507397,74981307>, r=90309172 +pos=<21658971,20515757,32538766>, r=68078733 +pos=<-42721200,2165630,50987236>, r=97754561 +pos=<-46441522,14810192,60365689>, r=98209160 +pos=<48051150,31166319,50307623>, r=70921992 +pos=<28821739,29694631,-1122960>, r=53427671 +pos=<-54273229,34572094,50463893>, r=91634895 +pos=<14673784,34863932,82993530>, r=55509157 +pos=<-32934723,17649588,51138183>, r=72635067 +pos=<-50994378,41060824,52259311>, r=96639953 +pos=<-13412903,29052830,62027839>, r=56819094 +pos=<16028543,72922360,86313287>, r=95532757 +pos=<-29190239,30088199,43593943>, r=57339282 +pos=<-67676350,28809916,49909454>, r=98721154 +pos=<-43374507,39597274,53913745>, r=89211024 +pos=<-27366900,30364601,50115222>, r=60172177 +pos=<16917628,52399768,64291470>, r=52099066 +pos=<41279617,21014635,54307699>, r=93725431 +pos=<1365818,19740622,70504983>, r=55610202 +pos=<-54647289,29012271,49857475>, r=85842468 +pos=<44221414,66917783,53886884>, r=69485079 +pos=<-9940873,70529264,26788845>, r=95336159 +pos=<-2891536,43027095,81243592>, r=79487809 +pos=<16856578,70770998,65638794>, r=71878974 +pos=<48647431,57474901,3221288>, r=96689472 +pos=<18398962,37387340,106423442>, r=77737407 +pos=<6875506,40281303,93455690>, r=79187050 +pos=<2454291,28249463,81600089>, r=59720809 +pos=<-1468549,29220087,631469>, r=71712205 +pos=<1576323,77863026,52114347>, r=80726896 +pos=<11328724,-1103809,57250256>, r=53237238 +pos=<14166873,32412130,88906135>, r=59476952 +pos=<68172516,66679724,50794113>, r=90105431 +pos=<-4882904,63239852,64521058>, r=84969357 +pos=<-39573626,43281992,58908860>, r=94089955 +pos=<47082853,25450033,45728957>, r=77686997 +pos=<30259034,36081601,79825507>, r=50625134 +pos=<13485963,34007713,111156423>, r=84003646 +pos=<-103414983,93539548,30098680>, r=85922019 +pos=<-6802701,-3790574,59234245>, r=76039201 +pos=<82390172,51540341,50478214>, r=88867872 +pos=<5396715,-12159909,37977747>, r=64326869 +pos=<60082922,38998779,61741375>, r=65282109 +pos=<-16364819,10714145,61687053>, r=73549544 +pos=<-58301485,30719708,55794510>, r=97141432 +pos=<16352057,56953747,89166657>, r=82093799 +pos=<-34630538,59464956,51639108>, r=98060041 +pos=<490228,30703545,109025168>, r=91563918 +pos=<-6013632,8426824,52874814>, r=56673453 +pos=<-36209880,25159205,51113229>, r=68375671 +pos=<17796723,1411910,80111570>, r=67114697 +pos=<-31889116,28510083,45862954>, r=58587653 +pos=<19168448,33254095,39684567>, r=98395168 +pos=<-6095859,46062067,73594989>, r=78078378 +pos=<-304797,59105732,57302395>, r=69038374 +pos=<55099745,36449947,86305322>, r=82314003 +pos=<33473188,6098096,-4438050>, r=79487709 +pos=<-31472777,36089404,51315048>, r=71202749 +pos=<15962314,28423814,-7317040>, r=61433573 +pos=<7998189,2801039,69890583>, r=65303215 +pos=<130870385,104831832,11196492>, r=68126888 +pos=<-5327566,58947831,12940865>, r=92989660 +pos=<3824920,57094208,49926985>, r=55521839 +pos=<-1717656,36673098,102114555>, r=92830763 +pos=<-6542148,37528701,53564176>, r=49960544 +pos=<-14811298,29054822,83783336>, r=79975290 +pos=<-37201984,61523961,41570442>, r=98810391 +pos=<20636169,30198837,103026121>, r=64914223 +pos=<10371395,31519349,55590694>, r=62337567 +pos=<31884149,40789942,72870652>, r=50003827 +pos=<-30398435,29198407,42512686>, r=58738952 +pos=<43939568,28346223,78157090>, r=54901870 +pos=<9128846,67552702,83250788>, r=94000232 +pos=<-2588856,30760371,91977867>, r=77653177 +pos=<15962420,82995471,76760935>, r=96119428 +pos=<-33661280,31365698,48813484>, r=66166075 +pos=<-16115499,43852463,46308402>, r=58601848 +pos=<-6987272,33841983,84781289>, r=77936013 +pos=<-485860,34594456,81980122>, r=69386193 +pos=<-15363694,37898885,53146470>, r=58734501 +pos=<-17124380,71830052,45774058>, r=87053925 +pos=<8219084,70226598,55923252>, r=70256199 +pos=<-3903209,29453615,46544603>, r=75288840 +pos=<-9159457,25097083,71581481>, r=61856037 +pos=<-6436575,16618931,70357346>, r=66386656 +pos=<-8806699,29246129,72352585>, r=62730916 +pos=<68862343,36688765,49225208>, r=59235344 +pos=<-79171684,112113447,67348279>, r=92995215 +pos=<2638935,25190324,85791990>, r=64174419 +pos=<14827988,29466545,48474491>, r=98818958 +pos=<-14381380,32037768,62743833>, r=61488450 +pos=<3154619,88011848,41382872>, r=85129150 +pos=<51747013,31306559,79606148>, r=67118845 +pos=<4782291,34063349,70169217>, r=51776099 +pos=<-39091050,45657329,51675336>, r=88749304 +pos=<-26634338,29826468,49344705>, r=58131168 +pos=<28955639,11886714,83389681>, r=58803847 +pos=<-13895377,39956378,49929456>, r=56106810 +pos=<-20174467,38776446,18529455>, r=82076331 +pos=<11908029,50316295,76200518>, r=66934331 +pos=<79036827,16924288,76062556>, r=96520365 +pos=<9584540,67893747,64596741>, r=75231780 +pos=<1999297,28072699,90660851>, r=69059706 +pos=<-4999516,1406744,49697518>, r=59502059 +pos=<-12138046,52832626,53760320>, r=71057036 +pos=<14911107,50532270,74102432>, r=62049081 +pos=<-28076669,-5209886,42939079>, r=85888492 +pos=<-1381979,35962916,89448258>, r=79118686 +pos=<-27555180,38443112,78090455>, r=96414564 +pos=<-45684157,22499678,51249216>, r=80645467 +pos=<-33262343,42412693,21018032>, r=96311801 +pos=<-24933943,30266769,36206604>, r=60648927 +pos=<47087640,55749463,76069992>, r=83366515 +pos=<40948562,39725308,77828570>, r=62961879 +pos=<-21047756,32265813,60780681>, r=66419686 +pos=<37924327,42452651,67877724>, r=52713763 +pos=<-58689938,30781189,50489915>, r=92286565 +pos=<13216582,64885410,61404468>, r=65398749 +pos=<-43382614,29830485,70345833>, r=95884395 +pos=<-20520219,36470699,75190567>, r=84507131 +pos=<14237854,59338973,85949685>, r=83376237 +pos=<-450228,37867875,64907958>, r=55551952 +pos=<17760677,61033651,84995936>, r=80594372 +pos=<22176975,82022403,46533128>, r=58704060 +pos=<22779974,94329178,17857701>, r=95346900 +pos=<-38001053,34049218,49600706>, r=73976424 +pos=<16848379,29946291,48116237>, r=55533891 +pos=<-42631692,35454176,53098888>, r=83510344 +pos=<4649340,48178580,58429391>, r=54284128 +pos=<847183,51607513,81674534>, r=84760407 +pos=<-21437870,4973092,57201053>, r=79877495 +pos=<-31919810,30134447,55487065>, r=69866771 +pos=<-27341158,67125553,48484104>, r=95276520 +pos=<34772295,-8690710,66519732>, r=68327958 +pos=<-31969415,39408252,48343122>, r=72046242 +pos=<102875003,13271850,46851582>, r=94799961 +pos=<-12487583,35034265,55339911>, r=55187220 +pos=<9093156,39769707,84017977>, r=67020115 +pos=<-16380910,41574541,66165228>, r=76446125 +pos=<78145797,37164108,49128463>, r=68897409 +pos=<12696275,29248422,93349910>, r=62227566 +pos=<3806267,80300805,32983373>, r=85166064 +pos=<96882526,36942217,48757938>, r=87041670 +pos=<-171249798,39499790,57712028>, r=97294519 +pos=<-2013420,51530722,55656270>, r=61525906 +pos=<10506453,22608309,43074519>, r=92987198 +pos=<-12980027,57643628,73634339>, r=96583452 +pos=<9759074,34807718,46383535>, r=76510831 +pos=<-46481921,33185083,62928260>, r=94920705 +pos=<-41982125,32478135,69194276>, r=95980083 +pos=<6066850,16557724,-23317282>, r=96233732 +pos=<-27420476,39804614,13027130>, r=95852751 +pos=<-35598484,27994414,43416148>, r=61831662 +pos=<53497255,74968025,34467126>, r=87786515 +pos=<5629165,76030721,52476464>, r=75203884 +pos=<-52112524,15110086,40185629>, r=92357875 +pos=<-23905340,18683396,67786661>, r=79220265 +pos=<1204692,65009004,78621903>, r=94751674 +pos=<-10066560,46695198,48547405>, r=57634798 +pos=<10289802,-10697128,21104545>, r=74844012 +pos=<-40310292,28833507,46959457>, r=68428878 +pos=<-13764816,49841026,61895287>, r=77826610 +pos=<-19679027,58605601,66152788>, r=96763074 +pos=<8809311,33356810,46152100>, r=63432984 +pos=<-29709153,29461995,49058531>, r=60555118 +pos=<-13129092,-9705209,46828679>, r=75874660 +pos=<102118197,31480871,42422516>, r=84965146 +pos=<-32517383,30565130,33503263>, r=71234788 +pos=<9534874,52896280,70697014>, r=66384094 +pos=<16880678,65311318,51702479>, r=52458646 +pos=<-36132788,43209378,55775064>, r=87442665 +pos=<22744530,34380596,134099136>, r=98061118 +pos=<-26547963,41862023,60462772>, r=81198255 +pos=<-545734,40978449,60677738>, r=54527403 +pos=<16538063,68562231,28273188>, r=65405796 +pos=<14494679,58745235,31512009>, r=54393346 +pos=<7791169,67262375,35493930>, r=65632071 +pos=<8485973,48520508,103076567>, r=95436538 +pos=<8214274,28745216,50655896>, r=92680074 +pos=<-6937397,27971689,49092605>, r=65350532 +pos=<-22481435,9380958,40012423>, r=68629066 +pos=<62129884,16597211,12546768>, r=80660497 +pos=<6258688,62081024,87730516>, r=95878363 +pos=<-32278381,28495170,53585234>, r=66684251 +pos=<8040391,72063718,51083757>, r=67432585 +pos=<-5673174,25046673,73686241>, r=60524423 +pos=<-8001243,63756911,61002978>, r=85086692 +pos=<-26577068,41949907,46813510>, r=67665926 +pos=<27314118,87945331,52949180>, r=72667621 +pos=<-20191543,30416348,7242015>, r=85020749 +pos=<-40509210,25805511,61018374>, r=81933846 +pos=<-27572422,16102428,56368833>, r=74050704 +pos=<-11240828,50248391,27895560>, r=75248609 +pos=<34613570,41153477,100115019>, r=80341645 +pos=<15579024,9723842,69284527>, r=50193328 +pos=<-46066212,37488646,47288596>, r=83168980 +pos=<16651399,81480864,60218612>, r=77373965 +pos=<-4490123,12256693,29836426>, r=57938091 +pos=<-9722027,38414943,53203837>, r=53666284 +pos=<-17608773,53047624,65044179>, r=88026024 +pos=<-46201175,24018662,58511638>, r=86905837 +pos=<83707615,22862590,47033198>, r=66223477 +pos=<75278564,31837146,46877582>, r=58452382 +pos=<66228245,28297748,1246309>, r=87068293 +pos=<-41563889,138361221,22834552>, r=92320836 +pos=<-15149458,41692211,57568440>, r=66735557 +pos=<-29959760,29199939,50714596>, r=62199729 +pos=<42142694,49570710,97616140>, r=93788536 +pos=<61202922,61131481,71470186>, r=98263590 +pos=<29827492,38051686,24415070>, r=56692483 +pos=<17592777,73628928,77556835>, r=85918423 +pos=<-20783874,35242533,54629155>, r=62981079 +pos=<64237574,1302210,73405037>, r=94685683 +pos=<-21188594,47968883,69462691>, r=90945802 +pos=<30657831,49880981,-20723938>, r=95051093 +pos=<22864844,93114017,56937539>, r=79512153 +pos=<36531726,66041045,59031978>, r=66063917 +pos=<19846259,-13074428,65015549>, r=64455431 +pos=<-7113733,38738967,15168250>, r=72339348 +pos=<-25341686,54431754,46334838>, r=78433824 +pos=<20656999,57196763,75771625>, r=64636928 +pos=<-22838713,34493030,27829494>, r=71157081 +pos=<-27835555,38366205,61876949>, r=80404149 +pos=<79754868,48144480,60613367>, r=92971746 +pos=<20721233,45043536,93948762>, r=70596524 +pos=<-46680111,37879564,53763782>, r=90648947 +pos=<16009840,86125003,58588086>, r=81028766 +pos=<20025736,5391570,85015946>, r=65810395 +pos=<33720066,104264468,55486952>, r=97930498 +pos=<-63554526,31193768,49947114>, r=97020908 +pos=<-55699886,23371204,32454537>, r=95415201 +pos=<73230725,36900143,48087090>, r=62677110 +pos=<-32963671,28309367,52478944>, r=66077418 +pos=<5939165,55024902,62755578>, r=64166779 +pos=<-24917309,29082130,46444648>, r=52769524 +pos=<7735621,49034186,60918429>, r=54542530 +pos=<4877732,8430499,59198278>, r=52101779 +pos=<83731770,35839732,49766995>, r=73797528 +pos=<-11074931,33743791,62322816>, r=59467077 +pos=<47699715,55835903,55060273>, r=63055430 +pos=<37657191,-9104085,74776203>, r=79882754 +pos=<-46744861,30151111,64292721>, r=93514232 +pos=<-13186319,46003906,17086538>, r=83758581 +pos=<32840031,56015193,64841941>, r=58156157 +pos=<6062205,42632964,47615029>, r=73781872 +pos=<-19799971,51835559,58790016>, r=82751306 +pos=<-30893469,30656893,46300617>, r=60176438 +pos=<-55830501,22240501,57274377>, r=97076042 +pos=<15868849,46019629,96676898>, r=79153313 +pos=<-16265649,52075245,75590161>, r=96256506 +pos=<14624864,56207969,57618910>, r=51527552 +pos=<318934,59504614,60032696>, r=71543938 +pos=<-23487442,41093331,19776590>, r=86459237 +pos=<67237678,41609284,51037661>, r=64343635 +pos=<-19179700,33732993,56360250>, r=61598596 +pos=<-34730837,5580174,61364913>, r=96727618 +pos=<53061020,1668645,85754857>, r=95492537 +pos=<3877306,43959248,85023639>, r=77431037 +pos=<-10413451,33996655,77197477>, r=73933065 +pos=<-15270541,18375898,55749133>, r=58855471 +pos=<37599773,64150517,58789624>, r=64998919 +pos=<6641382,32884368,86779494>, r=65348099 +pos=<-28989825,39572241,63995218>, r=84883334 +pos=<12972158,71582537,87975353>, r=98911274 +pos=<41852603,48069590,65721204>, r=60103061 +pos=<-12895423,34234299,51393776>, r=50848940 +pos=<76683281,42692313,48821155>, r=72655746 +pos=<9795431,-286238,55311954>, r=52014423 +pos=<-12408641,28693619,67844073>, r=61271790 +pos=<18776047,80030396,38475557>, r=64433947 +pos=<75995398,33442514,24888484>, r=78338116 +pos=<-22764877,22172460,58097441>, r=64901579 +pos=<10239772,40250323,68821851>, r=51158213 +pos=<-6984206,11263546,-3408779>, r=94670545 +pos=<-25723496,46861709,48289286>, r=73199930 +pos=<5729735,28403922,117678625>, r=92678286 +pos=<11079147,38654325,86908021>, r=66808654 +pos=<19012903,51490161,13432661>, r=60699507 +pos=<-19708767,24665073,51422478>, r=52677853 +pos=<2549542,80274103,46746108>, r=76796138 +pos=<-48466554,29995042,56395431>, r=87182744 +pos=<86083343,46696534,52688635>, r=89927531 +pos=<19978558,94248897,26059694>, r=89865438 +pos=<21928133,43444423,89266701>, r=63108468 +pos=<-32662150,34466095,53616954>, r=73070642 +pos=<-4767571,24202491,48306992>, r=52750940 +pos=<-6049891,44411137,66256832>, r=69043725 +pos=<14845730,-1633797,-11680131>, r=94009220 +pos=<65363,73430740,49753549>, r=75444608 +pos=<10919543,55374161,60523054>, r=57303105 +pos=<-33344704,36874381,61740346>, r=84284898 +pos=<90823294,32581102,47524970>, r=75388376 +pos=<56762466,39329407,28284461>, r=61595785 +pos=<14326905,38412743,-13806339>, r=79547110 +pos=<-27408929,29564102,49418580>, r=58717093 +pos=<72828690,34540465,56644790>, r=68473289 +pos=<-23879984,-80533415,-13926388>, r=52569551 +pos=<623363,23117915,46129959>, r=71699945 +pos=<-21310687,28343530,48201114>, r=50180986 +pos=<-11268087,54197123,60947343>, r=78738009 +pos=<62637156,43374891,28845119>, r=70955785 +pos=<101486863,29252465,58609523>, r=93807860 +pos=<-7121743,-17618647,50972485>, r=81924604 +pos=<33712412,33093334,104500328>, r=75765083 +pos=<70057598,30520257,59928664>, r=64965508 +pos=<13577885,32272356,41344051>, r=98076208 +pos=<8955771,46905424,22660149>, r=56944295 +pos=<-31671198,35282234,47777117>, r=67056086 +pos=<-28701991,29968381,30147369>, r=70177802 +pos=<46883174,34145057,15459578>, r=59357035 +pos=<-21541824,-3738229,54506228>, r=85997940 +pos=<-7165905,-13698956,55634555>, r=82711088 +pos=<-42136026,37824576,54914702>, r=87201260 +pos=<75444044,34090961,64356096>, r=78350113 +pos=<27070208,76993574,17498441>, r=80354253 +pos=<-24556265,40605071,29335340>, r=77481284 +pos=<7679148,40322729,74549753>, r=59518815 +pos=<64743952,34069862,51081505>, r=54354571 +pos=<7888777,51012156,-6093924>, r=90872090 +pos=<-38312643,6053130,45786004>, r=84257215 +pos=<-10907447,30880694,71717384>, r=65831363 +pos=<-21415341,33770607,55616361>, r=63127773 +pos=<-9268341,12931923,58776983>, r=61325095 +pos=<53680780,36878021,92991425>, r=88009224 +pos=<16325289,32873290,52486621>, r=50056228 +pos=<2379678,52409295,64101601>, r=66456683 +pos=<12407570,48986679,9677595>, r=68556317 +pos=<-23196672,47847216,47491952>, r=70861580 +pos=<17092834,24513176,91350037>, r=55955816 +pos=<8752629,37508985,49239757>, r=72585978 +pos=<52794942,76928483,47757542>, r=81940023 +pos=<12527582,-6613411,50632808>, r=50930382 +pos=<-70810892,45621857,-48305364>, r=62008194 +pos=<-18412210,36869794,57144258>, r=64752285 +pos=<87656632,20763685,66883781>, r=92122439 +pos=<61764769,33809145,-512978>, r=89875236 +pos=<-21591807,57503330,27237264>, r=93512809 +pos=<-8980322,48822102,24813214>, r=74644293 +pos=<-13586166,29673545,54387395>, r=49972553 +pos=<-21336027,12684379,50240160>, r=65103467 +pos=<15312696,61249932,61078049>, r=59340843 +pos=<3820682,55264026,85971673>, r=89740512 +pos=<-8720944,7901096,48785694>, r=55817204 +pos=<46676113,42744663,57067759>, r=50947525 +pos=<63180707,54936070,46238435>, r=68814227 +pos=<-59988823,31676130,52904181>, r=96894648 +pos=<-55767575,34582277,42911408>, r=89093361 +pos=<-24727493,22617024,22771261>, r=74880311 +pos=<30402823,52581940,78464394>, r=65908330 +pos=<-12446120,14245346,47969322>, r=52381926 +pos=<13932111,12087077,52306416>, r=71083363 +pos=<12361114,5008235,62369519>, r=51211858 +pos=<62655763,37235551,16180822>, r=77498932 +pos=<5158458,57101119,21414371>, r=72183092 +pos=<2908218,33006742,52557556>, r=82743046 +pos=<57439166,18173939,101222852>, r=98833513 +pos=<52238468,31780002,45678724>, r=78491149 +pos=<-45793920,10537217,50965371>, r=92433881 +pos=<-13743952,64107054,54632417>, r=84808943 +pos=<-170006460,33686904,57787874>, r=58950081 +pos=<-26862218,29083237,47085032>, r=55356188 +pos=<794530,52505491,57994889>, r=62031400 +pos=<62469765,31544111,56755533>, r=55228669 +pos=<33597386,32945456,56175425>, r=60893404 +pos=<67662625,38142990,51575060>, r=61839764 +pos=<-48808932,29332298,47264670>, r=77731645 +pos=<-13897506,80448804,52473065>, r=99144940 +pos=<-41499426,33500208,34694650>, r=81959864 +pos=<21500730,1820261,108639134>, r=91529831 +pos=<37273144,59821099,54577329>, r=56130643 +pos=<-21429926,6902774,61057229>, r=81796239 +pos=<3340434,50630706,26961101>, r=61983979 +pos=<20112657,-7766263,32920789>, r=50273913 +pos=<66869619,52342243,67598868>, r=91270061 +pos=<6129880,42603189,67116575>, r=55915349 +pos=<6398878,1688559,79467734>, r=77591971 +pos=<14501207,33194081,103787164>, r=74805573 +pos=<-41363813,41379031,51239687>, r=86308022 +pos=<-5072359,37511009,73502277>, r=68411104 +pos=<9979161,47203323,76860857>, r=66410591 +pos=<8272810,70008182,48415971>, r=62477175 +pos=<16131738,39072448,57020881>, r=66650334 +pos=<-18513223,15536711,73318828>, r=82507011 +pos=<-53344764,29150642,46822282>, r=81643567 +pos=<-19488382,39476575,49309757>, r=60600153 +pos=<17795545,86761153,34350936>, r=76269651 +pos=<-39860391,37740470,42830687>, r=76425286 +pos=<75357927,42659157,48122833>, r=70599033 +pos=<67060727,20786860,43203283>, r=50745152 +pos=<11307310,64243278,77782998>, r=83044472 diff --git a/2018/inputs/24.txt b/2018/inputs/24.txt new file mode 100644 index 0000000..0c90bb1 --- /dev/null +++ b/2018/inputs/24.txt @@ -0,0 +1,23 @@ +Immune System: +2991 units each with 8084 hit points (weak to fire) with an attack that does 19 radiation damage at initiative 11 +4513 units each with 3901 hit points (weak to slashing; immune to bludgeoning, radiation) with an attack that does 7 bludgeoning damage at initiative 12 +5007 units each with 9502 hit points (immune to bludgeoning; weak to fire) with an attack that does 16 fire damage at initiative 2 +2007 units each with 5188 hit points (weak to radiation) with an attack that does 23 cold damage at initiative 9 +1680 units each with 1873 hit points (immune to bludgeoning; weak to radiation) with an attack that does 10 bludgeoning damage at initiative 10 +1344 units each with 9093 hit points (immune to bludgeoning, cold; weak to radiation) with an attack that does 63 cold damage at initiative 16 +498 units each with 2425 hit points (immune to fire, bludgeoning, cold) with an attack that does 44 slashing damage at initiative 3 +1166 units each with 7295 hit points with an attack that does 56 bludgeoning damage at initiative 8 +613 units each with 13254 hit points (immune to radiation, cold, fire) with an attack that does 162 radiation damage at initiative 15 +1431 units each with 2848 hit points (weak to radiation) with an attack that does 19 cold damage at initiative 1 + +Infection: +700 units each with 47055 hit points (weak to fire; immune to slashing) with an attack that does 116 fire damage at initiative 14 +2654 units each with 13093 hit points (weak to radiation) with an attack that does 8 radiation damage at initiative 19 +5513 units each with 18026 hit points (immune to radiation; weak to slashing) with an attack that does 6 slashing damage at initiative 20 +89 units each with 48412 hit points (weak to cold) with an attack that does 815 radiation damage at initiative 17 +2995 units each with 51205 hit points (weak to cold) with an attack that does 28 slashing damage at initiative 7 +495 units each with 21912 hit points with an attack that does 82 cold damage at initiative 13 +2911 units each with 13547 hit points with an attack that does 7 slashing damage at initiative 18 +1017 units each with 28427 hit points (immune to fire) with an attack that does 52 fire damage at initiative 4 +2048 units each with 29191 hit points (weak to bludgeoning) with an attack that does 22 bludgeoning damage at initiative 6 +1718 units each with 15725 hit points (immune to cold) with an attack that does 18 slashing damage at initiative 5 diff --git a/2018/inputs/25.txt b/2018/inputs/25.txt new file mode 100644 index 0000000..d359c48 --- /dev/null +++ b/2018/inputs/25.txt @@ -0,0 +1,1248 @@ +-6,2,-8,3 +7,8,-1,-8 +7,-2,-4,-2 +4,-4,2,7 +5,8,-1,6 +-1,6,-4,-5 +-2,-6,-6,-6 +1,4,7,0 +-1,-3,-8,2 +5,-6,-5,-2 +-5,7,4,-2 +-2,6,-1,6 +5,4,0,-7 +1,5,-8,-3 +-3,3,8,2 +4,0,0,6 +4,-8,-3,3 +0,0,-7,-5 +-2,0,5,-3 +2,1,7,-1 +1,6,2,2 +4,4,7,-6 +-1,0,-1,1 +2,4,4,6 +-4,3,-7,2 +-5,-2,8,-7 +6,-8,-1,3 +-8,-6,-7,-3 +4,1,-7,-1 +-7,-5,-4,4 +5,-2,8,-5 +-5,-1,4,-4 +3,-3,8,4 +3,8,-8,-7 +-3,7,7,0 +-7,-5,-3,5 +-4,-5,-3,-2 +6,-8,3,8 +-2,0,8,7 +-4,3,5,7 +-6,3,5,0 +5,2,-3,-3 +0,8,0,5 +-5,-8,-1,-8 +2,6,0,6 +5,-4,0,0 +3,-2,-8,-5 +8,-4,-7,-7 +-3,-7,-8,-2 +6,7,-2,3 +5,0,-6,0 +0,-6,0,2 +8,-4,6,-3 +-5,-4,4,-4 +2,0,3,-1 +3,-5,8,5 +6,-1,5,5 +-6,-5,-4,8 +7,-4,0,5 +5,3,1,6 +-7,2,-3,1 +-4,1,-6,-7 +-4,4,0,8 +-6,4,1,-8 +3,-6,-6,5 +2,-4,-3,2 +-2,2,-2,1 +2,-4,0,0 +3,1,4,8 +-1,3,-7,-5 +-3,-7,2,0 +-2,-2,-8,0 +1,6,0,7 +-6,-3,0,-1 +7,0,-2,-7 +5,-5,-3,0 +7,0,0,5 +-6,5,6,2 +0,8,3,-1 +0,-8,-7,-1 +3,6,7,-7 +-2,4,-8,-3 +3,-3,-6,-4 +-1,-5,0,2 +-7,2,4,0 +-2,7,4,-2 +2,4,-1,5 +-1,-6,-6,4 +4,-6,-7,-2 +-6,6,-4,-2 +5,-5,-2,-6 +4,5,4,0 +3,3,0,-5 +-5,4,3,-2 +-6,1,7,-6 +3,5,-8,5 +-2,8,-2,-2 +-5,6,-2,-7 +-3,-6,7,-4 +-8,-6,7,7 +-5,-7,4,-4 +-8,-8,-6,7 +-7,-1,-2,-1 +3,-1,4,0 +3,6,1,-8 +2,6,-4,0 +-6,4,4,6 +7,7,6,-5 +4,-3,-2,7 +-1,8,2,-2 +3,-1,-4,5 +-2,1,-6,-8 +-3,1,7,-1 +-7,-1,8,6 +4,2,6,-6 +8,-1,8,-8 +4,6,-1,4 +7,-1,6,5 +0,-6,2,3 +-2,-8,-8,-6 +0,6,-4,-8 +4,-8,-7,6 +-3,-3,2,2 +2,1,4,7 +-3,7,-1,-8 +1,1,-2,-5 +3,-6,-4,7 +-3,5,0,8 +3,3,1,0 +1,5,4,6 +7,0,-2,-5 +1,5,-3,7 +-1,-4,3,4 +-4,3,-2,0 +-1,-8,2,0 +-8,-8,3,-3 +-2,-6,5,2 +8,-1,-3,-6 +2,-8,3,-5 +-8,-8,3,4 +-3,-5,-7,0 +0,3,1,3 +-8,5,-6,4 +2,0,4,-2 +-5,1,-7,0 +-5,0,-2,1 +4,-7,0,3 +7,0,4,-1 +0,-3,5,4 +-8,-8,-2,3 +2,5,4,6 +7,0,-8,-7 +-1,8,3,-3 +1,-2,2,-4 +-1,-3,3,-2 +4,6,7,-1 +3,8,2,-3 +-1,-8,8,7 +-8,4,7,-2 +-8,2,-8,-7 +-2,5,0,-5 +-1,-2,-5,-5 +4,6,-2,0 +0,8,0,-4 +2,0,-2,-1 +-8,0,-5,0 +-2,-8,-5,6 +2,0,5,7 +6,0,7,0 +-6,-8,3,-1 +2,2,6,-8 +-8,7,-8,7 +5,0,7,-6 +0,-3,6,-4 +-5,7,-6,-6 +2,5,0,-6 +-6,8,-3,3 +-8,-7,-1,-8 +-1,3,0,0 +1,2,3,-7 +-5,-1,7,2 +4,2,0,2 +-6,-6,-1,-2 +1,0,8,-1 +0,-1,-8,7 +2,2,-6,-4 +-2,3,2,6 +-6,-6,-2,-3 +-2,6,-2,1 +4,0,-8,7 +4,8,1,-1 +4,2,-2,5 +1,-2,-6,1 +1,5,-5,-4 +0,8,7,-6 +8,8,2,-3 +-3,-4,-5,3 +-2,6,-8,-1 +-2,-2,-4,2 +0,6,-3,7 +8,3,-3,7 +6,0,-1,-6 +8,8,3,0 +-7,0,8,7 +-5,7,-2,0 +2,-7,7,3 +8,-5,0,0 +-6,-8,1,-7 +-7,-3,0,5 +5,6,1,-7 +-3,8,-3,6 +-4,0,-4,-5 +7,4,2,1 +-7,-7,-8,6 +7,-7,4,4 +-6,-2,-1,1 +5,7,-6,-5 +1,6,-2,5 +-6,5,-6,3 +-6,-8,0,0 +2,-4,2,8 +0,0,0,-8 +-8,0,-2,2 +0,-4,-8,-8 +1,-5,-8,5 +6,-4,-5,6 +8,4,-5,-1 +8,-7,4,-4 +-7,-6,-8,0 +-2,3,-2,3 +-8,-3,-6,-3 +0,5,5,0 +3,7,-8,6 +0,-7,-5,-1 +1,6,-4,-3 +-4,5,-3,5 +7,-5,-5,8 +-4,4,0,-8 +7,-7,0,2 +6,0,2,-8 +-6,-4,1,0 +-1,0,-2,4 +-4,-8,5,7 +-8,4,-5,-2 +2,8,-8,-8 +-4,7,1,6 +-2,-2,-7,3 +6,4,-1,0 +-1,-7,-4,0 +-4,0,3,0 +0,3,5,2 +-4,-5,-1,0 +8,2,-6,0 +-2,5,-3,8 +7,0,3,-2 +6,0,-5,0 +4,-6,-5,6 +-7,8,0,-1 +8,-2,3,-4 +7,0,-4,7 +-4,-6,-7,-7 +2,8,0,4 +1,-6,5,-6 +4,-7,-2,-2 +4,1,-6,2 +0,7,4,3 +4,1,-1,-5 +1,-4,6,-6 +1,2,-2,-2 +2,-2,6,-5 +-8,6,-6,6 +0,6,8,2 +-3,-2,0,-8 +-6,-5,2,-6 +0,5,-8,-5 +1,-1,7,6 +-6,-3,-7,-3 +-4,-6,-1,0 +8,-3,-6,-2 +-5,-2,6,-1 +-1,0,3,1 +0,2,-6,7 +3,3,5,-2 +8,4,5,-1 +-5,-1,0,-1 +-6,-1,0,6 +2,6,-3,-3 +8,7,-8,4 +-6,-8,-3,0 +-1,-1,0,7 +6,-2,-8,4 +-3,8,3,-1 +6,2,0,4 +0,-3,7,3 +-5,3,-2,-1 +-6,-7,-2,-3 +4,-5,-3,-6 +-7,6,-2,4 +-2,-5,7,0 +1,8,-8,7 +8,3,-3,4 +-3,3,2,-4 +5,-7,4,1 +8,-3,-5,0 +-5,-4,-1,-8 +2,1,-2,-3 +-1,-4,-1,-7 +-7,-8,-7,-2 +3,0,7,4 +6,3,7,7 +0,-2,-4,2 +0,-1,-6,7 +-3,-8,-1,-7 +-8,-6,-6,-4 +-5,-4,-4,0 +0,7,-7,3 +-8,-7,-6,-8 +-5,3,0,-3 +-7,-6,0,7 +-7,6,-6,-2 +-2,8,2,-4 +2,0,0,5 +0,5,-2,0 +8,-7,-7,-1 +-1,3,2,-7 +-3,4,-7,-4 +-6,-3,2,-7 +-7,5,4,3 +5,-1,-6,-2 +3,-7,1,0 +-7,0,-4,-3 +-6,8,-1,0 +3,8,4,-2 +-1,-4,-8,-7 +3,3,8,1 +-5,1,4,5 +8,8,-1,2 +-3,-3,7,-4 +8,-3,2,-4 +6,-8,-6,8 +3,6,3,-2 +-7,-2,6,-4 +-6,-8,-8,5 +6,0,0,7 +-6,7,0,7 +8,0,-6,-3 +0,-3,-7,0 +-2,6,-7,-7 +5,-1,-3,0 +2,3,4,-5 +1,7,-6,0 +3,3,0,-3 +-1,0,-8,-8 +-2,5,-7,4 +7,-1,-8,5 +-2,-1,-1,6 +-2,-6,5,1 +4,-2,5,5 +-7,8,4,7 +-2,-2,6,5 +-6,1,-5,3 +-8,4,0,7 +8,-4,5,5 +-4,8,-4,1 +-8,0,5,4 +8,1,0,0 +-6,-8,-6,-2 +2,-5,0,0 +5,-6,5,-4 +1,2,7,2 +8,-4,6,5 +-6,0,7,6 +6,5,7,-6 +-2,-6,-2,5 +-6,-4,3,1 +6,-8,4,-4 +8,6,1,2 +7,5,7,-2 +7,-2,-6,-1 +4,-2,1,2 +1,1,-3,5 +0,-4,8,4 +5,2,-3,-4 +8,4,1,-3 +-1,1,-8,1 +-1,-1,0,5 +-4,4,6,0 +0,6,-2,6 +-3,4,5,5 +-7,5,4,-4 +2,2,-2,-4 +8,-1,2,-5 +-5,-2,6,-2 +7,2,1,6 +-3,-2,4,-5 +8,8,-7,-8 +0,1,-8,-4 +-3,-6,-3,3 +-4,-4,8,4 +-3,2,-4,-6 +-6,5,-5,-2 +-3,-7,-3,8 +0,6,-1,8 +8,0,7,1 +1,1,-8,-2 +6,-6,-7,3 +4,-5,8,-8 +-3,-6,6,7 +8,-5,2,4 +2,5,-3,-4 +-3,0,-6,7 +-1,-7,7,0 +2,-3,-5,5 +-7,-7,0,-2 +0,-4,7,8 +5,3,7,2 +-2,-7,5,5 +-6,-1,0,-8 +-3,0,8,-5 +-8,-1,1,1 +1,0,-6,8 +-1,-5,8,4 +-5,-4,4,8 +2,-3,0,-4 +-4,-3,0,7 +5,6,5,-5 +-3,-8,-3,-2 +5,8,-8,5 +-7,-2,-2,-2 +7,6,8,6 +0,-6,4,-7 +-1,-4,-7,0 +8,7,-6,6 +6,-5,-1,-3 +5,-2,-2,-3 +6,-3,-5,0 +-8,5,6,-5 +3,-7,7,8 +1,3,-8,0 +-6,8,-5,6 +6,-5,-5,-2 +3,8,1,-8 +-8,5,2,0 +0,5,-3,6 +-5,-7,-8,4 +0,7,0,0 +-5,6,-5,6 +-5,1,6,5 +6,1,-2,-8 +0,-8,3,1 +0,-3,-8,-3 +0,6,0,-2 +-8,0,-7,-5 +-8,2,0,6 +1,6,3,-4 +8,-5,0,-4 +-6,7,0,0 +5,0,1,0 +-8,8,2,8 +-7,4,2,4 +0,3,-2,-4 +-5,5,7,0 +5,0,-1,5 +-7,8,-6,8 +-8,-1,3,-3 +0,-7,-7,-7 +-4,4,8,-2 +1,2,1,-4 +1,-5,-1,8 +-3,8,-2,-2 +8,0,4,-4 +-8,5,-5,3 +-7,-7,-6,-2 +0,-6,-8,-8 +-1,-2,-3,0 +-4,0,1,7 +1,-6,-8,4 +0,8,6,-1 +-8,-5,-7,8 +2,7,-8,4 +-8,4,-3,2 +3,-1,-7,3 +4,-2,-6,-6 +-1,-4,1,-2 +3,-4,2,-6 +2,4,5,-3 +-7,7,1,6 +8,-6,-5,-3 +-7,1,-6,0 +-3,-6,-6,-8 +-8,-5,-6,4 +-5,-1,7,8 +0,7,6,2 +6,-2,-1,5 +0,4,-8,8 +-3,-5,-8,0 +2,-6,-2,-1 +5,8,-6,4 +-5,-1,0,-6 +-8,-5,8,2 +5,6,-3,-3 +-4,-7,2,6 +0,-3,-6,7 +-4,-6,-8,-8 +6,7,1,3 +7,-2,4,-3 +4,2,3,1 +0,8,-3,-8 +-8,0,1,0 +4,5,-4,-2 +-2,-6,4,2 +-4,0,-4,0 +8,-1,2,-2 +5,-7,8,1 +-2,5,-6,1 +6,-7,3,-7 +2,1,0,6 +-8,-3,-1,0 +8,-1,8,-3 +0,-6,6,0 +7,3,7,3 +-8,0,6,-1 +-5,-4,-5,0 +-2,0,3,-7 +0,2,0,0 +-3,6,6,3 +-6,-3,-1,-3 +8,0,1,5 +-7,4,-8,0 +8,8,-5,4 +-2,0,-7,-4 +-8,5,-7,-7 +8,0,-1,4 +8,-7,5,0 +-6,-1,-4,2 +-8,-8,6,-5 +7,2,-3,1 +2,0,2,6 +8,-7,-8,3 +-2,-7,-8,0 +0,3,-1,4 +-8,7,5,3 +0,-4,0,3 +6,6,-2,-6 +-4,8,6,-3 +0,3,0,-4 +6,-2,1,5 +1,4,4,3 +0,-7,4,-1 +1,3,-8,-2 +-5,0,4,0 +8,2,-6,-4 +-8,8,-2,6 +-5,7,-7,-2 +5,0,-4,-4 +-1,-5,3,7 +-2,-3,7,3 +-3,4,2,0 +-7,-8,1,3 +-8,-8,-3,2 +0,5,-8,7 +1,7,-6,5 +2,-6,-5,0 +-8,4,4,2 +7,3,1,-6 +-5,-4,8,2 +-7,7,0,0 +8,6,-1,6 +2,5,3,-7 +-7,3,1,5 +-8,-3,-4,3 +0,-2,0,8 +-7,-7,-5,8 +3,6,3,0 +-4,2,8,-4 +-6,2,6,-3 +0,-7,-6,-7 +0,-6,3,-6 +-4,-5,-5,-2 +1,-7,-2,-5 +5,7,0,4 +2,-1,3,-3 +7,1,-5,8 +0,3,0,2 +5,0,-5,-3 +-2,6,2,5 +6,4,-4,-7 +4,-8,4,8 +-5,-2,-6,7 +-1,-4,-4,5 +-2,-7,3,7 +-3,-8,-2,2 +1,-2,-5,-3 +0,-4,-1,3 +4,8,2,-5 +8,6,-6,1 +-8,-1,1,-4 +5,6,4,-8 +-7,-6,-5,4 +-3,-3,5,0 +-6,7,2,1 +-5,5,-1,0 +1,-8,2,0 +0,-3,-7,6 +4,-4,1,0 +-4,-6,0,4 +4,0,4,0 +4,-7,3,-2 +0,-3,0,4 +2,-3,2,2 +2,0,0,-4 +-8,6,6,4 +7,7,4,-2 +0,5,0,-1 +5,7,3,6 +5,2,4,-3 +5,4,-7,-6 +-8,1,7,2 +0,5,8,-1 +5,-3,-6,0 +-6,0,4,6 +-2,-2,6,-6 +-6,3,5,2 +8,-2,-3,-1 +-8,1,3,-4 +1,-6,-5,-6 +8,-4,6,-1 +-5,-7,-7,-5 +-1,-6,1,-4 +4,2,-3,0 +7,1,-4,4 +2,6,-8,0 +7,7,2,-5 +5,-2,-8,-3 +-5,0,3,2 +-1,6,-1,-4 +6,4,-3,-4 +4,1,4,-6 +3,5,0,-1 +5,-3,7,2 +3,-3,-7,5 +-3,-6,-1,2 +-7,-6,5,5 +-3,-7,1,-7 +5,5,-4,3 +6,-4,0,-1 +-7,-8,-1,7 +6,1,3,8 +8,-3,-5,2 +-3,1,-2,7 +-3,8,3,-4 +0,-8,7,3 +5,0,-4,-3 +3,-8,2,4 +-8,-3,6,-3 +0,6,-5,4 +-2,-8,-2,0 +-4,-4,-4,8 +-6,8,-5,-1 +-8,0,1,1 +-4,3,1,-2 +-1,-7,4,8 +3,0,7,-4 +5,7,3,-1 +7,-8,-3,1 +5,5,0,1 +-3,-1,0,8 +-6,-8,-4,1 +-3,-1,-6,0 +0,-1,0,0 +6,0,0,8 +3,-1,-4,6 +-4,4,0,-5 +3,7,1,7 +-5,0,6,7 +5,-5,2,3 +5,-7,2,1 +-6,1,-3,-6 +7,8,-2,8 +5,4,0,6 +-8,-3,4,-3 +-3,-6,2,6 +1,4,2,5 +0,7,6,-5 +-1,7,5,4 +4,-5,-4,0 +-2,1,4,-7 +-2,0,0,8 +7,0,1,1 +-3,-7,8,6 +-2,-8,6,7 +6,3,-4,5 +5,2,-5,8 +4,-2,5,-2 +8,5,-4,-4 +2,6,-7,6 +-4,-2,-6,-5 +0,5,-6,-1 +5,3,4,3 +4,2,1,5 +6,-6,-8,3 +-7,2,3,-2 +0,2,2,1 +0,1,2,3 +-6,4,1,-4 +7,-4,-1,4 +-5,3,-3,0 +3,8,-3,-4 +-2,-3,4,2 +4,7,-2,4 +4,-4,-3,-8 +1,0,-2,-6 +6,7,-4,0 +-2,-7,2,-2 +0,4,2,2 +-4,8,-1,0 +-4,5,1,1 +-2,-8,-1,4 +2,3,-3,4 +-8,-4,-5,0 +-6,3,0,2 +6,-5,1,0 +4,-2,-8,4 +0,7,-5,-2 +-7,-3,5,-1 +5,7,-4,1 +-3,-3,3,5 +2,0,-4,-4 +-7,0,6,6 +4,-4,-3,-1 +-6,6,-1,-6 +-1,2,1,-8 +-2,3,4,6 +5,8,-4,-8 +0,5,0,-4 +-5,-3,7,7 +5,4,5,-2 +4,-2,8,-5 +-4,2,-7,4 +1,-8,4,-4 +7,8,-7,3 +2,7,-8,-5 +-1,-5,6,-7 +5,-4,7,-2 +0,-3,0,6 +0,-7,-2,2 +4,8,0,-1 +0,-3,5,-3 +5,-6,0,4 +1,-7,2,-2 +-1,0,-3,1 +-4,0,4,-6 +5,3,7,3 +7,-4,7,-8 +-3,-5,3,7 +0,-6,8,2 +4,-6,-1,8 +0,-7,0,-8 +-4,5,0,6 +7,6,-6,2 +-6,-5,-7,3 +0,-1,4,-8 +4,6,-4,4 +-4,-2,5,4 +-8,-8,0,4 +2,-8,4,-1 +2,4,0,0 +-6,-1,8,7 +-6,5,8,-5 +-3,-5,-7,-3 +3,-1,-5,-7 +0,4,-4,-7 +2,-4,-1,-6 +-6,-6,0,5 +0,6,3,-5 +0,-3,8,2 +7,-6,6,-1 +-3,7,-4,-5 +-3,1,3,7 +5,-2,-6,-7 +-6,3,-1,8 +0,0,-4,-2 +-8,2,3,-4 +0,-2,-4,0 +1,8,-3,-7 +-2,-4,3,0 +3,-8,7,0 +-1,-6,3,-4 +3,0,8,4 +3,3,-5,-6 +5,0,-1,-2 +7,1,-4,8 +4,-5,3,-2 +4,-4,0,8 +-4,2,1,-8 +-8,0,-7,-2 +4,-2,0,0 +-8,3,7,-8 +8,-8,6,-5 +-8,0,3,-5 +6,3,-2,-3 +4,0,-5,7 +-1,-5,-6,2 +4,-1,-7,2 +-8,-1,-2,0 +1,7,-7,-2 +5,0,-5,-7 +8,-3,6,-2 +1,-6,2,-3 +6,-1,6,3 +-7,4,3,4 +-7,-5,-5,-4 +-7,2,-8,-4 +-5,8,3,-3 +1,2,-3,4 +-6,-5,-4,1 +5,4,5,7 +0,0,-1,-4 +5,-8,3,-1 +5,6,-5,0 +-7,-3,-6,0 +2,-8,0,1 +1,4,-7,-8 +-4,-7,-6,3 +0,1,-1,0 +-6,-1,6,0 +1,6,-4,-2 +8,-3,0,0 +-2,0,-3,7 +3,8,-4,3 +-8,7,2,0 +1,4,-6,3 +5,-3,4,-4 +-3,-5,5,5 +-6,4,-2,2 +-4,0,2,4 +-7,1,6,1 +-2,2,4,6 +-5,-2,6,0 +-1,4,8,0 +0,8,6,-6 +-6,6,-4,-7 +-6,-7,3,0 +4,-1,3,4 +0,-7,-4,-6 +-6,-5,-5,0 +-2,-5,-4,0 +2,0,-8,6 +-1,1,0,0 +-6,-4,-3,-1 +7,5,-7,1 +-5,-1,3,3 +6,1,0,1 +6,7,6,7 +-3,1,0,-3 +-5,-1,-6,4 +-5,1,1,8 +8,-1,-2,-6 +3,0,6,7 +0,8,4,0 +-8,0,-2,5 +-4,-3,-5,5 +-5,3,2,5 +-2,-3,0,-6 +-3,-4,1,-2 +8,-4,-7,-6 +2,8,6,-7 +3,-1,1,-6 +0,-8,1,3 +-2,-4,8,0 +7,-7,-3,5 +8,5,6,-5 +-3,7,2,8 +6,-1,-7,1 +-4,0,-2,-2 +7,8,1,-3 +-2,5,8,6 +-7,-5,0,3 +-7,3,-1,6 +2,-1,-4,0 +-8,-6,2,-8 +-7,-5,-5,1 +0,-5,-4,4 +5,-2,-3,-8 +-5,-8,1,4 +5,0,7,-4 +8,7,1,-1 +-4,-1,-5,2 +4,8,-6,1 +-3,2,3,4 +-5,-2,1,3 +-3,5,5,4 +-6,4,-1,5 +6,1,3,0 +0,-4,-5,0 +-4,4,2,6 +-7,-8,-6,7 +8,4,5,1 +0,5,-3,-1 +3,6,5,-8 +1,8,3,-6 +3,-3,-5,-8 +-7,5,-5,0 +-6,4,0,-6 +-7,7,6,-3 +-3,-1,7,8 +-7,-7,1,-4 +-7,-1,-8,6 +6,0,-2,2 +-5,-8,0,7 +-5,-4,8,4 +1,5,4,2 +8,8,-2,6 +-3,2,-2,1 +-5,-2,1,-2 +8,8,-8,-4 +-7,-8,8,-4 +0,-6,8,-2 +-6,8,1,0 +-8,0,8,-4 +-6,5,1,2 +1,7,5,-2 +-4,1,0,-7 +2,-8,3,7 +-1,-6,-2,-1 +3,-5,-1,7 +0,-7,2,1 +0,8,2,0 +-1,-2,-8,-2 +6,2,5,0 +7,-8,-8,0 +-2,1,2,6 +-3,-7,-4,2 +7,1,4,-3 +5,4,-1,1 +8,-8,8,-7 +3,7,7,-1 +0,-7,0,-4 +-4,2,7,-7 +-7,2,-5,7 +7,-3,2,0 +-8,1,2,0 +5,8,8,-3 +0,7,-2,7 +-3,0,0,-1 +6,8,3,-1 +1,0,-8,0 +8,-5,6,6 +3,0,0,3 +1,4,-4,4 +-2,-5,-3,3 +7,3,-1,-1 +2,-5,1,-5 +-3,-2,6,6 +0,7,-2,-2 +0,0,3,-7 +-1,-7,2,-2 +-6,-1,0,1 +-4,1,1,8 +-4,-6,1,1 +5,7,3,-3 +8,-2,4,2 +0,-6,5,-8 +4,5,0,-6 +1,0,-2,-1 +-6,0,0,-6 +-5,-7,-4,-6 +-8,8,-5,-2 +1,-7,0,4 +4,6,8,1 +-2,-6,6,6 +7,1,-6,0 +-5,6,-4,0 +-4,1,1,4 +8,-7,-1,4 +-7,8,4,-2 +8,5,-7,3 +2,-5,5,-1 +-5,-5,3,8 +-5,-3,-7,6 +5,2,2,1 +-1,-7,-5,2 +0,7,8,-5 +6,-4,5,0 +-1,5,-2,8 +-8,7,0,7 +-4,8,-1,1 +5,-1,1,-2 +2,-3,8,0 +0,6,-1,1 +-2,7,-7,8 +-6,1,-1,6 +5,7,-6,0 +-5,-1,-6,-6 +-2,3,-8,-5 +1,5,-7,-8 +7,-5,-2,5 +-5,7,5,-2 +-5,0,0,7 +-4,-4,0,0 +-3,0,2,-7 +5,4,3,-1 +-5,-7,7,5 +-2,-3,4,5 +-5,-3,4,2 +-7,0,-5,3 +0,0,-8,8 +0,5,-7,4 +-8,-3,8,-2 +-5,8,-2,-5 +-8,8,0,0 +-8,-3,5,-1 +-6,1,8,-3 +3,7,-6,3 +-6,6,2,5 +1,-4,-3,0 +-8,-8,5,3 +1,-4,8,-2 +4,7,3,1 +7,0,4,0 +0,3,-4,-2 +-7,3,7,4 +-4,-7,-1,3 +1,-7,2,1 +3,3,-5,-1 +5,-7,2,2 +1,-4,-4,0 +-8,5,-3,-1 +3,-3,4,0 +7,0,4,-5 +0,1,1,2 +1,-5,6,-5 +-3,2,7,7 +-3,-3,6,2 +2,-2,0,-3 +3,8,-3,2 +-1,1,3,-4 +2,7,4,8 +7,6,-1,6 +8,8,6,5 +2,8,-6,-7 +-1,-3,-3,3 +4,0,-5,-1 +-4,-4,-1,2 +2,-1,-2,-3 +3,3,-3,1 +-1,3,2,2 +4,1,4,7 +-1,-6,-4,2 +-5,-5,2,-1 +-2,2,0,-5 +-1,-8,5,-2 +-6,1,-1,-1 +-8,-8,0,2 +7,8,-7,-1 +-6,7,0,-6 +-4,4,8,-7 +7,1,5,7 +-5,2,2,-5 +1,-2,-3,0 +0,7,-8,-5 +-1,0,-5,6 +-6,1,-4,-3 +8,2,4,-7 +0,-3,0,-7 +6,-5,-8,-4 +-3,4,-3,7 +0,-1,-8,2 +3,1,-8,0 +-8,1,3,7 +-7,1,8,6 +7,7,-3,7 +4,0,2,-3 +0,-2,1,-7 +-7,6,-3,7 +-3,8,-7,4 +6,4,2,5 +3,-3,6,-7 +6,-8,-3,-1 +-2,-8,-8,4 +-3,-2,1,6 +3,1,-1,-1 +8,6,7,5 +5,7,7,-8 +-7,3,3,4 +8,6,-5,-4 +1,-4,-5,-3 +4,6,-6,-6 +-3,4,0,7 +1,-4,-3,8 +3,-7,-2,1 +2,-4,4,8 +-5,1,-7,5 +0,-5,0,3 +0,7,-8,5 +-8,-2,1,3 +-5,8,8,6 +0,5,4,-1 +0,-8,-7,8 +3,2,1,-7 +2,-3,4,1 +5,4,7,-3 +-8,-3,7,-3 +-2,5,6,-5 +5,0,0,-3 +-4,6,6,1 +8,-2,-5,2 +0,4,-2,3 +-8,-5,-8,6 +-5,0,5,7 +-7,1,-8,4 +7,2,6,-2 +-2,-7,-2,6 +-7,7,0,5 +-5,-3,1,4 +-4,8,2,3 +-7,0,0,-6 +2,4,0,8 +2,7,7,0 +7,4,-4,-3 +2,7,5,7 +-3,4,1,3 +-2,-3,-3,1 +2,8,-1,8 +0,-7,6,8 +1,6,5,5 +-8,-6,-6,-5 +6,-8,-8,-1 +-8,3,3,3 +5,-7,7,-2 +5,8,1,6 +0,2,3,5 +-2,7,-7,-3 +-5,6,1,-5 +6,7,-1,4 +8,-3,6,-7 +5,0,-8,3 +0,6,2,0 +-8,-6,-6,5 +0,7,2,-3 +1,-4,6,-7 +-6,7,0,4 +4,-4,0,4 +6,3,7,-2 +3,-8,2,3 +0,5,3,-8 +2,6,7,4 +2,-7,-5,1 +-8,-3,-2,4 +-7,-7,0,4 +-4,-5,-6,1 +-6,-6,0,-3 +-8,8,-3,-4 +-6,7,1,-6 +-5,4,0,7 +-4,-1,5,3 +5,-7,3,1 +0,-4,-6,-3 +6,-6,-1,-5 +3,1,5,-3 +-1,1,2,-3 +0,7,-1,-7 +-8,0,8,0 +0,8,0,-6 +2,-7,2,0 +0,-1,-2,-7 +-2,0,1,1 +1,-7,8,4 +3,-6,0,7 +0,0,-5,4 +2,-7,0,6 +-6,4,5,-7 +-3,5,7,4 +-2,-1,7,8 +-7,0,-2,-4 +3,-6,6,0 +5,-4,-4,4 +6,8,8,-3 +6,-6,-6,3 +2,-3,-3,-3 +8,-5,-2,0 +-3,5,7,-4 +-7,-8,1,5 +0,-1,-1,-1 +8,1,7,-8 +4,4,2,4 +6,2,-1,2 +-5,6,-6,5 +-2,-5,-3,4 +6,-3,-4,0 +8,8,-5,-7 +2,2,0,-3 +-5,-8,1,2 +7,-6,-2,8 +-5,0,-3,3 +-2,7,-4,-5 +8,-1,-6,1 +7,6,-1,-4 +-3,0,2,1 +0,0,5,0 +-1,8,-2,3 +-3,2,1,-8 +1,7,-7,0 +1,4,-1,0 +6,-4,3,-2 +-1,-6,-2,2 +-2,2,2,2 +2,0,-3,5 +-4,1,-8,-3 +-4,1,5,-7 +-6,8,1,4 +5,3,0,1 +-8,-7,7,-1 +-8,-3,1,-7 +0,2,4,7 +6,7,2,-8 +4,1,2,8 +3,-2,1,-5 +8,2,-7,6 +8,0,5,3 +-7,4,8,-7 +3,8,-1,-7 +-1,-5,-2,0 +-3,0,6,3 +6,5,-3,-2 +1,8,7,-2 +-4,-1,-7,-2 +-6,-1,8,3 +8,-1,5,-6 +5,0,5,2 +-4,8,0,-1 +-5,2,7,-3 +5,-2,-6,5 +4,-4,4,0 +-7,-1,-5,-5 +-8,-5,4,5 +4,-6,-8,3 +7,2,7,-5 +1,6,2,-3 +-3,3,-8,0 +1,-6,7,-3 +-5,8,6,-3 +-3,-2,-4,-6 +7,-7,-2,1 +5,4,-7,-1 +3,-4,-5,-1 +-1,-5,6,-1 +-8,4,-5,1 diff --git a/2018/inputs/3.txt b/2018/inputs/3.txt new file mode 100644 index 0000000..4701818 --- /dev/null +++ b/2018/inputs/3.txt @@ -0,0 +1,1385 @@ +#1 @ 342,645: 25x20 +#2 @ 124,968: 28x19 +#3 @ 680,765: 26x20 +#4 @ 832,699: 12x15 +#5 @ 4,746: 29x14 +#6 @ 926,115: 19x17 +#7 @ 662,587: 28x12 +#8 @ 532,568: 27x23 +#9 @ 860,23: 16x21 +#10 @ 530,562: 12x27 +#11 @ 15,254: 10x27 +#12 @ 375,611: 18x10 +#13 @ 357,389: 22x23 +#14 @ 483,392: 14x16 +#15 @ 426,705: 17x13 +#16 @ 273,918: 23x28 +#17 @ 873,722: 13x13 +#18 @ 429,749: 12x25 +#19 @ 701,937: 14x11 +#20 @ 89,231: 23x26 +#21 @ 704,220: 10x27 +#22 @ 481,847: 21x24 +#23 @ 9,378: 14x19 +#24 @ 682,442: 10x21 +#25 @ 242,63: 21x23 +#26 @ 748,871: 20x13 +#27 @ 784,338: 25x25 +#28 @ 966,669: 20x20 +#29 @ 589,833: 22x25 +#30 @ 489,489: 16x24 +#31 @ 976,478: 4x4 +#32 @ 739,826: 13x15 +#33 @ 783,753: 21x17 +#34 @ 433,367: 22x11 +#35 @ 32,841: 10x20 +#36 @ 258,497: 26x28 +#37 @ 632,776: 18x25 +#38 @ 517,389: 20x14 +#39 @ 446,740: 19x26 +#40 @ 667,455: 15x14 +#41 @ 664,252: 25x26 +#42 @ 227,45: 29x21 +#43 @ 127,138: 29x27 +#44 @ 466,308: 19x17 +#45 @ 356,134: 12x19 +#46 @ 609,640: 28x24 +#47 @ 677,228: 16x27 +#48 @ 149,610: 10x28 +#49 @ 863,498: 21x28 +#50 @ 913,511: 12x27 +#51 @ 748,761: 24x11 +#52 @ 802,288: 10x22 +#53 @ 26,442: 29x20 +#54 @ 85,464: 20x21 +#55 @ 262,944: 21x18 +#56 @ 876,753: 15x10 +#57 @ 105,199: 23x19 +#58 @ 335,848: 23x24 +#59 @ 467,537: 24x22 +#60 @ 552,217: 14x13 +#61 @ 534,820: 10x19 +#62 @ 261,579: 25x13 +#63 @ 541,445: 19x17 +#64 @ 869,769: 28x11 +#65 @ 447,668: 25x26 +#66 @ 42,734: 18x16 +#67 @ 553,233: 13x13 +#68 @ 47,861: 12x16 +#69 @ 33,834: 21x14 +#70 @ 240,174: 29x13 +#71 @ 611,362: 24x14 +#72 @ 899,371: 21x21 +#73 @ 340,5: 23x23 +#74 @ 69,246: 14x18 +#75 @ 432,558: 11x10 +#76 @ 737,175: 27x20 +#77 @ 623,365: 15x22 +#78 @ 666,453: 26x28 +#79 @ 368,774: 25x10 +#80 @ 923,879: 18x16 +#81 @ 37,315: 16x23 +#82 @ 119,279: 18x26 +#83 @ 928,850: 20x18 +#84 @ 896,902: 18x16 +#85 @ 332,590: 28x13 +#86 @ 902,815: 27x21 +#87 @ 215,508: 19x12 +#88 @ 981,57: 10x15 +#89 @ 706,393: 21x24 +#90 @ 975,369: 10x11 +#91 @ 635,845: 29x18 +#92 @ 831,543: 15x16 +#93 @ 296,865: 19x10 +#94 @ 889,189: 24x19 +#95 @ 59,749: 11x22 +#96 @ 739,946: 24x27 +#97 @ 536,759: 27x29 +#98 @ 982,234: 17x11 +#99 @ 639,615: 26x25 +#100 @ 867,397: 26x29 +#101 @ 881,784: 19x19 +#102 @ 215,912: 22x28 +#103 @ 127,336: 10x15 +#104 @ 313,729: 15x12 +#105 @ 695,74: 17x28 +#106 @ 748,187: 11x16 +#107 @ 809,2: 16x27 +#108 @ 891,192: 17x18 +#109 @ 72,920: 16x20 +#110 @ 41,967: 22x28 +#111 @ 91,733: 22x20 +#112 @ 464,641: 13x13 +#113 @ 464,860: 17x10 +#114 @ 623,106: 13x28 +#115 @ 358,85: 24x21 +#116 @ 774,944: 19x28 +#117 @ 752,587: 11x20 +#118 @ 635,103: 25x11 +#119 @ 498,36: 17x11 +#120 @ 227,659: 15x13 +#121 @ 924,553: 13x13 +#122 @ 775,297: 23x24 +#123 @ 479,866: 10x11 +#124 @ 387,798: 11x28 +#125 @ 526,847: 19x27 +#126 @ 747,861: 11x25 +#127 @ 789,652: 14x10 +#128 @ 419,7: 17x13 +#129 @ 356,142: 26x10 +#130 @ 436,239: 14x27 +#131 @ 555,710: 14x23 +#132 @ 871,447: 13x27 +#133 @ 473,730: 14x14 +#134 @ 558,170: 16x18 +#135 @ 888,882: 29x25 +#136 @ 834,147: 24x18 +#137 @ 721,467: 28x12 +#138 @ 223,105: 28x26 +#139 @ 285,326: 28x23 +#140 @ 584,300: 3x6 +#141 @ 710,754: 23x21 +#142 @ 283,892: 21x14 +#143 @ 448,894: 18x3 +#144 @ 380,479: 16x15 +#145 @ 703,57: 16x20 +#146 @ 692,448: 24x11 +#147 @ 926,350: 20x26 +#148 @ 167,528: 25x12 +#149 @ 444,722: 28x21 +#150 @ 166,183: 15x18 +#151 @ 546,472: 29x18 +#152 @ 532,900: 12x22 +#153 @ 215,490: 29x20 +#154 @ 678,458: 25x23 +#155 @ 601,462: 24x11 +#156 @ 484,514: 12x11 +#157 @ 863,763: 10x18 +#158 @ 653,452: 16x23 +#159 @ 464,302: 13x21 +#160 @ 868,65: 21x18 +#161 @ 227,824: 20x11 +#162 @ 111,629: 29x19 +#163 @ 55,554: 27x21 +#164 @ 0,757: 21x17 +#165 @ 418,861: 13x16 +#166 @ 932,903: 12x16 +#167 @ 429,772: 11x14 +#168 @ 706,805: 11x23 +#169 @ 487,24: 26x15 +#170 @ 806,900: 16x16 +#171 @ 580,719: 24x22 +#172 @ 458,481: 20x17 +#173 @ 343,488: 18x11 +#174 @ 734,342: 12x27 +#175 @ 320,439: 4x3 +#176 @ 446,635: 26x25 +#177 @ 552,683: 11x23 +#178 @ 181,168: 26x24 +#179 @ 851,583: 27x28 +#180 @ 879,363: 10x11 +#181 @ 884,139: 11x21 +#182 @ 912,88: 24x27 +#183 @ 52,35: 22x18 +#184 @ 657,705: 11x14 +#185 @ 370,777: 11x17 +#186 @ 801,354: 21x24 +#187 @ 773,546: 16x20 +#188 @ 888,322: 19x11 +#189 @ 807,788: 27x13 +#190 @ 465,956: 19x29 +#191 @ 369,770: 13x21 +#192 @ 311,137: 12x14 +#193 @ 148,150: 19x29 +#194 @ 389,613: 28x25 +#195 @ 429,373: 10x25 +#196 @ 892,148: 20x15 +#197 @ 890,271: 11x19 +#198 @ 58,861: 18x19 +#199 @ 449,255: 9x5 +#200 @ 257,887: 27x15 +#201 @ 383,616: 20x18 +#202 @ 663,657: 18x21 +#203 @ 331,648: 25x13 +#204 @ 509,53: 10x28 +#205 @ 86,287: 15x20 +#206 @ 753,190: 20x20 +#207 @ 922,527: 19x12 +#208 @ 132,948: 20x26 +#209 @ 883,786: 15x21 +#210 @ 117,592: 27x15 +#211 @ 960,611: 13x22 +#212 @ 829,769: 14x19 +#213 @ 669,686: 17x13 +#214 @ 276,787: 27x10 +#215 @ 619,909: 18x22 +#216 @ 418,209: 21x25 +#217 @ 231,831: 27x18 +#218 @ 336,538: 22x18 +#219 @ 180,783: 14x23 +#220 @ 609,263: 22x10 +#221 @ 360,982: 21x16 +#222 @ 775,813: 14x26 +#223 @ 906,198: 10x24 +#224 @ 937,144: 28x28 +#225 @ 475,903: 24x12 +#226 @ 887,149: 11x16 +#227 @ 927,259: 20x25 +#228 @ 71,862: 29x26 +#229 @ 136,954: 26x17 +#230 @ 721,827: 15x13 +#231 @ 769,931: 21x25 +#232 @ 728,119: 13x28 +#233 @ 654,942: 13x27 +#234 @ 434,737: 18x13 +#235 @ 672,331: 27x20 +#236 @ 816,17: 25x21 +#237 @ 251,781: 28x20 +#238 @ 342,209: 16x10 +#239 @ 581,434: 23x22 +#240 @ 782,100: 14x11 +#241 @ 878,831: 14x12 +#242 @ 667,233: 19x28 +#243 @ 237,650: 28x24 +#244 @ 425,738: 11x15 +#245 @ 936,470: 23x23 +#246 @ 68,321: 21x19 +#247 @ 356,539: 27x29 +#248 @ 945,353: 18x23 +#249 @ 906,933: 22x28 +#250 @ 360,812: 10x29 +#251 @ 884,774: 17x27 +#252 @ 413,769: 23x20 +#253 @ 594,75: 21x15 +#254 @ 676,702: 15x11 +#255 @ 233,529: 27x25 +#256 @ 173,236: 15x17 +#257 @ 907,949: 16x13 +#258 @ 809,570: 24x10 +#259 @ 67,678: 29x22 +#260 @ 176,951: 25x18 +#261 @ 754,625: 10x18 +#262 @ 142,270: 26x29 +#263 @ 558,673: 24x19 +#264 @ 224,27: 24x14 +#265 @ 725,829: 7x6 +#266 @ 703,941: 9x3 +#267 @ 880,864: 28x27 +#268 @ 727,445: 25x24 +#269 @ 747,520: 17x15 +#270 @ 850,410: 26x21 +#271 @ 363,964: 10x16 +#272 @ 752,721: 23x16 +#273 @ 295,351: 26x20 +#274 @ 899,877: 26x16 +#275 @ 95,804: 20x28 +#276 @ 543,866: 20x16 +#277 @ 917,887: 19x27 +#278 @ 449,474: 16x22 +#279 @ 673,459: 28x23 +#280 @ 971,786: 13x17 +#281 @ 42,176: 21x18 +#282 @ 531,886: 15x13 +#283 @ 679,438: 15x22 +#284 @ 161,659: 19x25 +#285 @ 838,148: 15x23 +#286 @ 496,732: 26x14 +#287 @ 482,256: 19x26 +#288 @ 389,941: 27x25 +#289 @ 352,255: 23x15 +#290 @ 825,688: 25x24 +#291 @ 894,313: 23x20 +#292 @ 906,553: 21x17 +#293 @ 293,130: 21x13 +#294 @ 549,80: 25x18 +#295 @ 85,871: 20x10 +#296 @ 876,734: 20x24 +#297 @ 831,935: 14x17 +#298 @ 618,819: 23x20 +#299 @ 750,70: 24x14 +#300 @ 749,711: 22x17 +#301 @ 555,801: 17x12 +#302 @ 544,64: 28x21 +#303 @ 114,413: 21x22 +#304 @ 215,526: 13x21 +#305 @ 147,31: 25x12 +#306 @ 679,427: 18x17 +#307 @ 634,930: 23x24 +#308 @ 41,419: 21x28 +#309 @ 892,162: 18x24 +#310 @ 812,886: 19x14 +#311 @ 440,700: 28x13 +#312 @ 586,832: 28x21 +#313 @ 255,687: 13x22 +#314 @ 945,879: 22x16 +#315 @ 480,731: 18x11 +#316 @ 738,731: 15x10 +#317 @ 528,621: 11x16 +#318 @ 243,787: 28x26 +#319 @ 512,493: 22x13 +#320 @ 762,692: 27x11 +#321 @ 316,57: 12x14 +#322 @ 410,860: 17x12 +#323 @ 772,591: 14x24 +#324 @ 813,221: 13x11 +#325 @ 161,271: 12x14 +#326 @ 520,597: 26x19 +#327 @ 577,129: 25x20 +#328 @ 448,31: 10x15 +#329 @ 594,33: 16x27 +#330 @ 170,498: 25x19 +#331 @ 882,833: 6x4 +#332 @ 190,548: 12x26 +#333 @ 639,879: 28x25 +#334 @ 473,817: 19x26 +#335 @ 543,458: 11x23 +#336 @ 676,657: 26x25 +#337 @ 786,353: 28x17 +#338 @ 873,508: 14x17 +#339 @ 208,782: 17x27 +#340 @ 392,542: 10x26 +#341 @ 672,650: 29x23 +#342 @ 446,637: 20x18 +#343 @ 534,58: 16x15 +#344 @ 696,760: 23x17 +#345 @ 265,767: 18x15 +#346 @ 105,750: 12x16 +#347 @ 731,438: 28x10 +#348 @ 535,833: 24x21 +#349 @ 72,531: 18x28 +#350 @ 640,734: 27x21 +#351 @ 156,265: 15x16 +#352 @ 227,299: 24x22 +#353 @ 552,492: 11x29 +#354 @ 605,95: 14x20 +#355 @ 665,490: 11x25 +#356 @ 456,289: 25x12 +#357 @ 876,516: 13x18 +#358 @ 26,163: 20x28 +#359 @ 228,769: 19x11 +#360 @ 766,766: 16x12 +#361 @ 167,654: 13x28 +#362 @ 728,185: 20x25 +#363 @ 321,340: 23x20 +#364 @ 327,175: 18x14 +#365 @ 83,860: 10x19 +#366 @ 361,177: 20x24 +#367 @ 282,505: 18x16 +#368 @ 780,44: 29x28 +#369 @ 854,406: 15x25 +#370 @ 142,928: 10x19 +#371 @ 114,594: 11x20 +#372 @ 775,78: 26x24 +#373 @ 264,791: 28x12 +#374 @ 789,217: 24x20 +#375 @ 931,559: 19x22 +#376 @ 523,549: 22x20 +#377 @ 744,356: 23x24 +#378 @ 630,746: 25x11 +#379 @ 339,201: 11x28 +#380 @ 777,698: 25x14 +#381 @ 198,933: 29x21 +#382 @ 222,919: 27x25 +#383 @ 356,648: 16x19 +#384 @ 237,915: 10x12 +#385 @ 10,864: 17x26 +#386 @ 494,808: 29x23 +#387 @ 440,547: 24x25 +#388 @ 688,247: 10x16 +#389 @ 95,580: 16x19 +#390 @ 374,8: 12x27 +#391 @ 287,332: 20x26 +#392 @ 453,940: 24x22 +#393 @ 344,878: 10x22 +#394 @ 541,277: 16x18 +#395 @ 965,360: 24x12 +#396 @ 280,878: 21x20 +#397 @ 680,384: 25x19 +#398 @ 670,76: 12x12 +#399 @ 540,457: 18x20 +#400 @ 524,406: 17x16 +#401 @ 625,272: 25x22 +#402 @ 100,906: 26x12 +#403 @ 281,871: 7x10 +#404 @ 275,849: 21x26 +#405 @ 357,559: 13x13 +#406 @ 918,753: 25x21 +#407 @ 270,837: 25x17 +#408 @ 780,84: 20x20 +#409 @ 503,893: 11x13 +#410 @ 154,609: 12x23 +#411 @ 871,739: 21x22 +#412 @ 529,698: 27x27 +#413 @ 376,844: 14x23 +#414 @ 498,876: 13x21 +#415 @ 893,958: 15x27 +#416 @ 635,498: 20x20 +#417 @ 571,884: 24x21 +#418 @ 336,586: 24x24 +#419 @ 0,206: 29x16 +#420 @ 655,64: 24x11 +#421 @ 436,648: 28x16 +#422 @ 952,593: 17x11 +#423 @ 643,6: 17x18 +#424 @ 224,166: 29x11 +#425 @ 818,905: 15x14 +#426 @ 18,863: 18x11 +#427 @ 497,902: 15x10 +#428 @ 564,545: 16x29 +#429 @ 657,446: 18x20 +#430 @ 245,25: 17x11 +#431 @ 936,346: 23x24 +#432 @ 127,152: 24x19 +#433 @ 563,928: 19x27 +#434 @ 684,407: 27x13 +#435 @ 737,584: 15x15 +#436 @ 644,837: 16x14 +#437 @ 702,978: 20x15 +#438 @ 422,65: 11x16 +#439 @ 121,142: 13x20 +#440 @ 68,437: 19x16 +#441 @ 121,382: 24x28 +#442 @ 805,910: 29x14 +#443 @ 795,432: 21x20 +#444 @ 269,735: 25x22 +#445 @ 226,877: 11x17 +#446 @ 550,450: 29x18 +#447 @ 606,726: 14x25 +#448 @ 46,546: 10x19 +#449 @ 320,95: 11x25 +#450 @ 935,419: 12x15 +#451 @ 453,862: 13x16 +#452 @ 315,500: 23x12 +#453 @ 181,127: 17x18 +#454 @ 243,907: 19x13 +#455 @ 263,960: 29x22 +#456 @ 509,159: 14x17 +#457 @ 486,810: 23x21 +#458 @ 560,945: 25x13 +#459 @ 6,400: 24x28 +#460 @ 368,783: 17x23 +#461 @ 75,792: 26x29 +#462 @ 543,395: 22x23 +#463 @ 47,464: 19x10 +#464 @ 342,494: 27x24 +#465 @ 911,861: 19x25 +#466 @ 94,272: 23x23 +#467 @ 420,516: 15x26 +#468 @ 146,233: 20x27 +#469 @ 201,907: 10x23 +#470 @ 446,887: 23x16 +#471 @ 468,702: 14x27 +#472 @ 799,865: 23x25 +#473 @ 451,242: 27x20 +#474 @ 915,801: 28x27 +#475 @ 471,445: 23x16 +#476 @ 381,751: 26x28 +#477 @ 903,539: 23x21 +#478 @ 621,280: 13x26 +#479 @ 658,132: 27x19 +#480 @ 136,639: 22x26 +#481 @ 24,185: 22x23 +#482 @ 732,779: 25x25 +#483 @ 760,858: 20x22 +#484 @ 24,408: 26x19 +#485 @ 457,627: 20x16 +#486 @ 353,284: 20x10 +#487 @ 920,899: 10x3 +#488 @ 436,694: 11x17 +#489 @ 849,162: 17x16 +#490 @ 786,236: 27x20 +#491 @ 709,245: 11x28 +#492 @ 462,389: 13x17 +#493 @ 738,88: 27x21 +#494 @ 111,617: 24x24 +#495 @ 896,764: 11x23 +#496 @ 473,321: 23x16 +#497 @ 589,67: 17x16 +#498 @ 183,298: 18x17 +#499 @ 557,675: 10x11 +#500 @ 875,298: 21x17 +#501 @ 128,420: 18x25 +#502 @ 158,17: 27x26 +#503 @ 966,380: 13x29 +#504 @ 571,449: 15x28 +#505 @ 968,404: 12x27 +#506 @ 722,350: 10x24 +#507 @ 247,595: 17x25 +#508 @ 65,734: 22x21 +#509 @ 411,715: 25x12 +#510 @ 123,742: 15x12 +#511 @ 439,687: 19x12 +#512 @ 829,932: 12x13 +#513 @ 893,146: 23x19 +#514 @ 861,131: 15x23 +#515 @ 551,85: 20x7 +#516 @ 957,437: 22x17 +#517 @ 777,65: 22x24 +#518 @ 638,851: 24x21 +#519 @ 116,492: 12x29 +#520 @ 187,785: 3x18 +#521 @ 791,56: 17x27 +#522 @ 406,108: 28x28 +#523 @ 695,252: 21x16 +#524 @ 498,247: 24x17 +#525 @ 301,235: 19x27 +#526 @ 14,173: 13x10 +#527 @ 116,587: 11x29 +#528 @ 170,247: 18x22 +#529 @ 714,745: 20x23 +#530 @ 682,474: 27x19 +#531 @ 838,605: 23x22 +#532 @ 684,330: 20x18 +#533 @ 754,852: 27x25 +#534 @ 885,197: 24x26 +#535 @ 97,256: 16x18 +#536 @ 604,669: 20x19 +#537 @ 612,14: 18x29 +#538 @ 278,738: 8x14 +#539 @ 102,976: 13x15 +#540 @ 50,860: 16x12 +#541 @ 574,411: 16x22 +#542 @ 124,894: 26x20 +#543 @ 848,521: 25x25 +#544 @ 271,287: 25x27 +#545 @ 253,656: 21x16 +#546 @ 547,979: 18x11 +#547 @ 444,332: 12x26 +#548 @ 106,753: 15x16 +#549 @ 886,615: 14x15 +#550 @ 549,216: 27x24 +#551 @ 481,720: 23x13 +#552 @ 505,7: 17x22 +#553 @ 539,106: 28x27 +#554 @ 395,174: 24x12 +#555 @ 547,490: 10x22 +#556 @ 950,79: 21x12 +#557 @ 529,817: 12x23 +#558 @ 40,270: 19x24 +#559 @ 556,127: 25x14 +#560 @ 407,39: 16x26 +#561 @ 130,852: 29x14 +#562 @ 144,368: 27x22 +#563 @ 980,174: 18x22 +#564 @ 285,98: 16x24 +#565 @ 648,686: 16x26 +#566 @ 361,487: 21x16 +#567 @ 471,380: 23x14 +#568 @ 167,331: 23x25 +#569 @ 768,773: 14x16 +#570 @ 328,13: 29x15 +#571 @ 444,697: 14x17 +#572 @ 215,301: 27x27 +#573 @ 238,207: 23x14 +#574 @ 252,346: 21x20 +#575 @ 910,272: 11x18 +#576 @ 751,833: 18x13 +#577 @ 781,221: 10x17 +#578 @ 538,775: 14x26 +#579 @ 982,705: 11x21 +#580 @ 205,805: 25x27 +#581 @ 948,713: 21x12 +#582 @ 647,249: 11x20 +#583 @ 841,156: 19x21 +#584 @ 401,835: 13x28 +#585 @ 637,819: 24x12 +#586 @ 286,241: 19x23 +#587 @ 661,878: 15x24 +#588 @ 115,774: 19x14 +#589 @ 353,655: 22x14 +#590 @ 838,616: 25x23 +#591 @ 573,395: 28x27 +#592 @ 321,67: 26x13 +#593 @ 371,931: 17x19 +#594 @ 765,719: 24x10 +#595 @ 595,574: 21x21 +#596 @ 346,497: 10x16 +#597 @ 67,869: 16x19 +#598 @ 133,284: 10x25 +#599 @ 464,174: 20x25 +#600 @ 613,82: 29x28 +#601 @ 98,519: 27x12 +#602 @ 896,934: 14x17 +#603 @ 645,205: 23x23 +#604 @ 810,96: 9x15 +#605 @ 91,464: 14x23 +#606 @ 798,67: 18x21 +#607 @ 560,243: 27x20 +#608 @ 486,52: 14x12 +#609 @ 623,174: 11x20 +#610 @ 203,404: 10x14 +#611 @ 927,293: 12x10 +#612 @ 457,860: 26x14 +#613 @ 690,648: 13x15 +#614 @ 673,615: 23x22 +#615 @ 399,718: 16x14 +#616 @ 309,695: 23x17 +#617 @ 881,450: 10x24 +#618 @ 879,295: 12x29 +#619 @ 914,865: 5x4 +#620 @ 692,653: 28x26 +#621 @ 468,183: 19x11 +#622 @ 487,258: 13x25 +#623 @ 458,724: 13x16 +#624 @ 793,416: 28x23 +#625 @ 804,843: 28x13 +#626 @ 345,711: 15x20 +#627 @ 679,461: 28x23 +#628 @ 652,655: 20x20 +#629 @ 330,343: 12x13 +#630 @ 919,801: 16x11 +#631 @ 974,473: 10x28 +#632 @ 112,537: 11x18 +#633 @ 680,494: 23x25 +#634 @ 307,283: 16x28 +#635 @ 904,314: 11x25 +#636 @ 718,778: 12x22 +#637 @ 30,550: 23x25 +#638 @ 146,964: 14x18 +#639 @ 167,242: 28x19 +#640 @ 228,443: 17x15 +#641 @ 914,547: 10x15 +#642 @ 931,708: 23x23 +#643 @ 105,180: 16x10 +#644 @ 455,283: 14x16 +#645 @ 491,723: 28x17 +#646 @ 618,6: 17x27 +#647 @ 635,361: 24x25 +#648 @ 883,585: 26x16 +#649 @ 131,346: 17x26 +#650 @ 78,25: 22x12 +#651 @ 611,643: 28x22 +#652 @ 647,114: 15x23 +#653 @ 229,550: 21x28 +#654 @ 190,124: 15x14 +#655 @ 903,330: 13x16 +#656 @ 750,722: 20x19 +#657 @ 26,456: 25x13 +#658 @ 414,283: 16x16 +#659 @ 940,221: 28x25 +#660 @ 585,932: 20x18 +#661 @ 96,398: 20x17 +#662 @ 371,915: 12x19 +#663 @ 819,706: 22x25 +#664 @ 347,500: 15x9 +#665 @ 275,85: 24x10 +#666 @ 435,743: 26x26 +#667 @ 535,568: 22x20 +#668 @ 46,389: 17x25 +#669 @ 584,880: 24x18 +#670 @ 630,266: 18x18 +#671 @ 431,377: 26x14 +#672 @ 559,677: 4x3 +#673 @ 701,439: 16x14 +#674 @ 829,446: 20x11 +#675 @ 555,565: 20x13 +#676 @ 917,846: 14x17 +#677 @ 593,676: 18x16 +#678 @ 542,798: 20x19 +#679 @ 6,372: 24x29 +#680 @ 578,809: 24x24 +#681 @ 64,522: 11x4 +#682 @ 591,896: 13x26 +#683 @ 932,572: 11x25 +#684 @ 867,131: 27x19 +#685 @ 495,889: 23x22 +#686 @ 367,827: 21x13 +#687 @ 232,45: 18x28 +#688 @ 704,711: 11x27 +#689 @ 309,517: 23x13 +#690 @ 429,199: 17x11 +#691 @ 717,52: 20x15 +#692 @ 912,877: 27x25 +#693 @ 447,764: 16x11 +#694 @ 799,769: 28x22 +#695 @ 361,912: 27x26 +#696 @ 891,829: 10x28 +#697 @ 233,895: 20x23 +#698 @ 806,276: 16x13 +#699 @ 377,966: 21x18 +#700 @ 792,875: 20x22 +#701 @ 255,807: 18x19 +#702 @ 634,238: 15x26 +#703 @ 492,519: 13x24 +#704 @ 953,632: 19x26 +#705 @ 684,587: 10x17 +#706 @ 391,424: 16x17 +#707 @ 654,158: 14x27 +#708 @ 118,638: 23x11 +#709 @ 302,282: 17x13 +#710 @ 662,54: 14x19 +#711 @ 909,835: 14x23 +#712 @ 558,971: 18x11 +#713 @ 90,774: 11x28 +#714 @ 745,346: 15x11 +#715 @ 488,860: 22x14 +#716 @ 848,568: 26x23 +#717 @ 6,625: 28x25 +#718 @ 34,388: 15x18 +#719 @ 965,778: 23x24 +#720 @ 103,500: 20x18 +#721 @ 506,222: 29x17 +#722 @ 226,197: 24x25 +#723 @ 129,939: 15x25 +#724 @ 140,644: 11x18 +#725 @ 905,904: 20x25 +#726 @ 423,276: 13x12 +#727 @ 62,511: 17x24 +#728 @ 932,814: 19x26 +#729 @ 9,810: 11x26 +#730 @ 32,624: 16x20 +#731 @ 967,236: 28x18 +#732 @ 616,948: 27x12 +#733 @ 714,733: 15x17 +#734 @ 277,783: 25x24 +#735 @ 482,675: 16x12 +#736 @ 862,11: 19x26 +#737 @ 667,668: 27x15 +#738 @ 131,406: 13x28 +#739 @ 707,788: 26x27 +#740 @ 859,505: 21x21 +#741 @ 968,785: 4x6 +#742 @ 813,939: 11x27 +#743 @ 611,781: 28x17 +#744 @ 298,82: 28x27 +#745 @ 352,828: 16x27 +#746 @ 920,831: 20x23 +#747 @ 967,694: 19x29 +#748 @ 370,50: 25x18 +#749 @ 545,724: 13x16 +#750 @ 102,391: 13x22 +#751 @ 904,122: 22x19 +#752 @ 118,439: 23x10 +#753 @ 793,859: 23x27 +#754 @ 722,798: 27x29 +#755 @ 97,774: 24x10 +#756 @ 326,707: 26x14 +#757 @ 559,909: 28x14 +#758 @ 33,822: 29x21 +#759 @ 508,227: 24x7 +#760 @ 115,427: 26x16 +#761 @ 665,766: 27x25 +#762 @ 303,847: 19x28 +#763 @ 157,535: 19x12 +#764 @ 968,680: 18x10 +#765 @ 668,464: 20x9 +#766 @ 114,534: 27x10 +#767 @ 841,609: 17x21 +#768 @ 972,671: 20x13 +#769 @ 490,506: 27x18 +#770 @ 0,407: 13x26 +#771 @ 626,219: 11x14 +#772 @ 174,512: 12x24 +#773 @ 162,251: 10x18 +#774 @ 612,206: 11x25 +#775 @ 97,517: 11x10 +#776 @ 31,916: 11x17 +#777 @ 261,148: 17x16 +#778 @ 815,577: 26x24 +#779 @ 545,521: 29x23 +#780 @ 842,800: 25x23 +#781 @ 391,437: 23x20 +#782 @ 333,886: 20x14 +#783 @ 109,171: 11x14 +#784 @ 344,483: 28x16 +#785 @ 581,195: 15x24 +#786 @ 608,372: 12x13 +#787 @ 740,279: 14x18 +#788 @ 653,626: 27x22 +#789 @ 308,182: 24x20 +#790 @ 899,219: 16x12 +#791 @ 515,556: 21x11 +#792 @ 171,0: 18x29 +#793 @ 204,304: 27x14 +#794 @ 488,289: 25x25 +#795 @ 479,382: 14x18 +#796 @ 626,889: 25x11 +#797 @ 604,948: 16x10 +#798 @ 182,277: 21x18 +#799 @ 623,205: 24x20 +#800 @ 720,654: 11x25 +#801 @ 731,103: 26x17 +#802 @ 829,581: 14x25 +#803 @ 431,738: 17x29 +#804 @ 524,620: 15x12 +#805 @ 512,539: 23x23 +#806 @ 829,943: 29x18 +#807 @ 93,176: 13x26 +#808 @ 883,796: 12x12 +#809 @ 214,543: 28x16 +#810 @ 518,231: 15x14 +#811 @ 213,502: 21x20 +#812 @ 255,598: 10x22 +#813 @ 352,477: 24x16 +#814 @ 664,653: 15x20 +#815 @ 741,338: 28x26 +#816 @ 361,174: 25x22 +#817 @ 101,582: 14x27 +#818 @ 237,103: 13x12 +#819 @ 814,157: 20x17 +#820 @ 182,216: 28x21 +#821 @ 194,282: 17x18 +#822 @ 247,657: 20x14 +#823 @ 0,647: 14x29 +#824 @ 899,959: 12x23 +#825 @ 151,90: 20x20 +#826 @ 341,562: 25x22 +#827 @ 895,137: 28x18 +#828 @ 853,703: 16x11 +#829 @ 8,934: 11x17 +#830 @ 395,528: 28x13 +#831 @ 874,122: 13x28 +#832 @ 605,187: 19x17 +#833 @ 684,219: 24x24 +#834 @ 382,885: 13x21 +#835 @ 751,858: 19x21 +#836 @ 518,38: 11x27 +#837 @ 812,383: 21x28 +#838 @ 904,886: 21x19 +#839 @ 356,751: 25x24 +#840 @ 586,554: 28x20 +#841 @ 98,582: 10x25 +#842 @ 438,552: 11x21 +#843 @ 231,601: 20x20 +#844 @ 906,176: 11x21 +#845 @ 237,52: 12x23 +#846 @ 81,19: 15x21 +#847 @ 600,731: 19x14 +#848 @ 553,43: 10x22 +#849 @ 703,825: 14x21 +#850 @ 193,283: 10x26 +#851 @ 73,407: 22x26 +#852 @ 226,602: 25x21 +#853 @ 515,223: 26x15 +#854 @ 95,363: 28x13 +#855 @ 927,2: 28x22 +#856 @ 457,470: 16x13 +#857 @ 67,23: 24x14 +#858 @ 435,244: 10x16 +#859 @ 640,450: 29x22 +#860 @ 385,778: 16x23 +#861 @ 734,157: 23x25 +#862 @ 516,727: 11x15 +#863 @ 488,733: 16x12 +#864 @ 83,719: 19x21 +#865 @ 530,287: 15x15 +#866 @ 729,671: 24x16 +#867 @ 240,320: 26x18 +#868 @ 311,583: 13x24 +#869 @ 224,956: 10x13 +#870 @ 662,482: 17x14 +#871 @ 533,896: 12x17 +#872 @ 844,440: 10x26 +#873 @ 104,625: 16x11 +#874 @ 632,431: 25x17 +#875 @ 735,292: 22x24 +#876 @ 74,625: 22x24 +#877 @ 752,738: 24x25 +#878 @ 599,594: 18x10 +#879 @ 220,951: 15x26 +#880 @ 339,67: 14x19 +#881 @ 856,704: 15x22 +#882 @ 829,158: 10x13 +#883 @ 823,838: 27x11 +#884 @ 368,952: 10x15 +#885 @ 32,281: 23x28 +#886 @ 700,84: 11x26 +#887 @ 800,342: 23x9 +#888 @ 392,728: 18x10 +#889 @ 488,802: 22x26 +#890 @ 206,785: 18x25 +#891 @ 411,294: 24x11 +#892 @ 566,932: 24x10 +#893 @ 529,409: 15x17 +#894 @ 477,549: 24x24 +#895 @ 816,957: 14x22 +#896 @ 256,719: 23x20 +#897 @ 860,304: 15x16 +#898 @ 881,268: 27x10 +#899 @ 470,387: 17x10 +#900 @ 173,25: 24x13 +#901 @ 144,28: 26x16 +#902 @ 685,372: 14x23 +#903 @ 695,681: 22x14 +#904 @ 748,874: 29x22 +#905 @ 897,765: 18x17 +#906 @ 880,756: 24x12 +#907 @ 627,112: 24x18 +#908 @ 655,479: 16x11 +#909 @ 392,560: 15x16 +#910 @ 61,740: 23x20 +#911 @ 696,232: 11x20 +#912 @ 452,30: 11x24 +#913 @ 581,289: 16x23 +#914 @ 786,561: 16x19 +#915 @ 774,346: 23x28 +#916 @ 537,171: 25x11 +#917 @ 326,723: 11x27 +#918 @ 224,914: 17x16 +#919 @ 906,176: 25x18 +#920 @ 878,572: 27x25 +#921 @ 391,561: 19x27 +#922 @ 715,976: 19x12 +#923 @ 275,748: 23x19 +#924 @ 381,802: 10x14 +#925 @ 940,217: 24x23 +#926 @ 741,53: 27x15 +#927 @ 104,445: 16x18 +#928 @ 519,127: 27x20 +#929 @ 445,598: 23x21 +#930 @ 126,601: 29x13 +#931 @ 658,225: 24x19 +#932 @ 920,952: 26x23 +#933 @ 110,776: 16x14 +#934 @ 896,945: 24x14 +#935 @ 733,125: 11x17 +#936 @ 849,555: 23x17 +#937 @ 376,546: 24x18 +#938 @ 153,930: 24x24 +#939 @ 470,855: 22x21 +#940 @ 45,321: 27x10 +#941 @ 773,553: 26x14 +#942 @ 749,180: 12x14 +#943 @ 736,631: 28x26 +#944 @ 737,871: 11x14 +#945 @ 447,253: 14x11 +#946 @ 825,628: 27x26 +#947 @ 749,435: 11x20 +#948 @ 919,271: 10x14 +#949 @ 556,558: 10x14 +#950 @ 258,595: 14x28 +#951 @ 324,858: 12x15 +#952 @ 54,735: 24x20 +#953 @ 718,354: 25x10 +#954 @ 954,20: 22x17 +#955 @ 625,176: 15x28 +#956 @ 828,374: 26x14 +#957 @ 946,677: 29x25 +#958 @ 94,678: 12x26 +#959 @ 657,251: 16x22 +#960 @ 537,124: 26x14 +#961 @ 893,609: 14x11 +#962 @ 131,596: 12x13 +#963 @ 436,44: 18x17 +#964 @ 359,651: 18x21 +#965 @ 427,288: 29x14 +#966 @ 521,545: 13x22 +#967 @ 558,231: 17x28 +#968 @ 179,334: 26x28 +#969 @ 801,166: 20x29 +#970 @ 542,41: 25x27 +#971 @ 545,606: 24x29 +#972 @ 278,868: 20x17 +#973 @ 46,956: 16x25 +#974 @ 62,784: 26x15 +#975 @ 346,55: 13x26 +#976 @ 772,213: 22x28 +#977 @ 581,146: 29x17 +#978 @ 283,845: 16x13 +#979 @ 961,683: 19x13 +#980 @ 968,686: 25x17 +#981 @ 637,18: 29x22 +#982 @ 558,932: 24x10 +#983 @ 376,193: 26x10 +#984 @ 884,430: 15x10 +#985 @ 317,13: 21x18 +#986 @ 568,56: 28x13 +#987 @ 661,718: 25x15 +#988 @ 715,672: 20x20 +#989 @ 861,782: 17x26 +#990 @ 455,852: 12x25 +#991 @ 889,802: 17x11 +#992 @ 879,106: 25x23 +#993 @ 867,347: 15x21 +#994 @ 924,422: 18x10 +#995 @ 814,942: 18x29 +#996 @ 84,858: 12x22 +#997 @ 581,427: 28x24 +#998 @ 247,182: 27x21 +#999 @ 971,182: 23x21 +#1000 @ 978,776: 11x17 +#1001 @ 1,786: 13x26 +#1002 @ 977,224: 20x25 +#1003 @ 576,413: 12x12 +#1004 @ 892,182: 23x11 +#1005 @ 680,350: 26x15 +#1006 @ 489,881: 21x15 +#1007 @ 900,891: 21x17 +#1008 @ 591,883: 12x22 +#1009 @ 826,602: 14x24 +#1010 @ 366,486: 23x22 +#1011 @ 711,115: 19x19 +#1012 @ 707,116: 27x10 +#1013 @ 826,817: 27x19 +#1014 @ 315,770: 14x11 +#1015 @ 296,676: 21x26 +#1016 @ 713,373: 19x18 +#1017 @ 7,925: 28x26 +#1018 @ 821,893: 26x19 +#1019 @ 679,85: 28x11 +#1020 @ 2,802: 27x12 +#1021 @ 335,491: 27x22 +#1022 @ 299,337: 12x21 +#1023 @ 804,708: 20x18 +#1024 @ 903,888: 26x19 +#1025 @ 264,744: 29x26 +#1026 @ 813,823: 18x29 +#1027 @ 757,36: 12x18 +#1028 @ 589,217: 14x29 +#1029 @ 761,553: 16x15 +#1030 @ 632,430: 10x13 +#1031 @ 855,795: 28x27 +#1032 @ 93,625: 15x26 +#1033 @ 139,934: 19x20 +#1034 @ 561,850: 12x17 +#1035 @ 834,159: 23x13 +#1036 @ 479,845: 29x16 +#1037 @ 767,935: 10x29 +#1038 @ 506,816: 18x17 +#1039 @ 670,548: 25x22 +#1040 @ 415,58: 14x27 +#1041 @ 943,188: 12x26 +#1042 @ 7,381: 22x17 +#1043 @ 674,568: 12x17 +#1044 @ 410,2: 12x10 +#1045 @ 685,688: 13x23 +#1046 @ 609,566: 18x10 +#1047 @ 484,48: 29x22 +#1048 @ 676,659: 27x14 +#1049 @ 0,812: 12x28 +#1050 @ 282,572: 20x23 +#1051 @ 898,860: 17x25 +#1052 @ 892,949: 14x20 +#1053 @ 580,906: 14x16 +#1054 @ 65,234: 20x19 +#1055 @ 856,479: 10x24 +#1056 @ 475,143: 13x13 +#1057 @ 822,556: 14x27 +#1058 @ 970,678: 22x16 +#1059 @ 488,191: 19x10 +#1060 @ 843,298: 23x10 +#1061 @ 686,225: 17x12 +#1062 @ 224,784: 24x19 +#1063 @ 104,978: 6x10 +#1064 @ 809,756: 29x23 +#1065 @ 851,756: 28x21 +#1066 @ 144,943: 13x26 +#1067 @ 491,667: 10x27 +#1068 @ 383,574: 29x19 +#1069 @ 525,485: 13x11 +#1070 @ 494,721: 21x14 +#1071 @ 670,473: 16x16 +#1072 @ 923,103: 20x23 +#1073 @ 425,367: 27x11 +#1074 @ 975,667: 18x23 +#1075 @ 607,94: 16x25 +#1076 @ 29,617: 10x14 +#1077 @ 741,763: 27x15 +#1078 @ 907,281: 24x21 +#1079 @ 527,545: 21x24 +#1080 @ 751,599: 26x28 +#1081 @ 129,945: 10x28 +#1082 @ 545,718: 17x21 +#1083 @ 833,143: 14x23 +#1084 @ 678,337: 13x22 +#1085 @ 450,473: 10x20 +#1086 @ 883,388: 17x28 +#1087 @ 865,314: 16x21 +#1088 @ 861,408: 20x22 +#1089 @ 582,264: 15x26 +#1090 @ 612,913: 10x11 +#1091 @ 868,575: 11x15 +#1092 @ 854,596: 14x18 +#1093 @ 551,232: 22x24 +#1094 @ 675,898: 24x10 +#1095 @ 70,425: 12x16 +#1096 @ 325,763: 29x19 +#1097 @ 907,855: 16x21 +#1098 @ 770,817: 11x25 +#1099 @ 370,788: 20x22 +#1100 @ 883,426: 22x13 +#1101 @ 718,42: 10x23 +#1102 @ 670,568: 19x28 +#1103 @ 556,702: 23x27 +#1104 @ 224,245: 17x19 +#1105 @ 861,50: 18x25 +#1106 @ 840,622: 21x16 +#1107 @ 827,711: 13x21 +#1108 @ 211,46: 12x16 +#1109 @ 243,918: 19x19 +#1110 @ 855,323: 17x14 +#1111 @ 409,758: 27x24 +#1112 @ 337,193: 26x24 +#1113 @ 272,288: 12x26 +#1114 @ 197,340: 22x21 +#1115 @ 950,574: 16x21 +#1116 @ 311,508: 27x13 +#1117 @ 798,339: 29x17 +#1118 @ 892,173: 10x15 +#1119 @ 779,604: 11x12 +#1120 @ 225,818: 13x15 +#1121 @ 784,25: 19x11 +#1122 @ 88,25: 25x27 +#1123 @ 246,755: 25x28 +#1124 @ 239,175: 26x24 +#1125 @ 398,547: 18x23 +#1126 @ 756,193: 29x25 +#1127 @ 96,680: 4x20 +#1128 @ 916,826: 20x12 +#1129 @ 457,578: 29x29 +#1130 @ 91,576: 23x27 +#1131 @ 618,39: 29x18 +#1132 @ 621,960: 25x21 +#1133 @ 275,936: 14x27 +#1134 @ 130,144: 29x16 +#1135 @ 400,747: 15x29 +#1136 @ 619,221: 20x15 +#1137 @ 734,169: 17x11 +#1138 @ 359,635: 18x16 +#1139 @ 244,349: 29x22 +#1140 @ 202,270: 14x29 +#1141 @ 461,556: 29x28 +#1142 @ 503,155: 24x21 +#1143 @ 857,610: 18x15 +#1144 @ 660,592: 29x27 +#1145 @ 218,446: 12x13 +#1146 @ 149,850: 28x14 +#1147 @ 564,679: 16x11 +#1148 @ 709,112: 28x22 +#1149 @ 465,713: 17x19 +#1150 @ 36,827: 17x21 +#1151 @ 755,284: 14x29 +#1152 @ 313,74: 12x28 +#1153 @ 371,863: 25x26 +#1154 @ 908,817: 10x28 +#1155 @ 561,136: 17x13 +#1156 @ 449,55: 25x14 +#1157 @ 229,617: 18x11 +#1158 @ 841,529: 23x27 +#1159 @ 946,219: 4x17 +#1160 @ 255,612: 15x28 +#1161 @ 617,908: 28x23 +#1162 @ 830,821: 10x15 +#1163 @ 936,168: 15x27 +#1164 @ 275,84: 11x24 +#1165 @ 182,337: 22x18 +#1166 @ 722,642: 17x19 +#1167 @ 120,542: 20x22 +#1168 @ 377,916: 20x26 +#1169 @ 407,724: 25x10 +#1170 @ 380,470: 23x27 +#1171 @ 235,732: 28x15 +#1172 @ 485,445: 19x21 +#1173 @ 8,248: 11x10 +#1174 @ 96,594: 28x10 +#1175 @ 417,110: 13x17 +#1176 @ 316,128: 15x28 +#1177 @ 895,164: 11x10 +#1178 @ 720,148: 28x22 +#1179 @ 932,807: 13x25 +#1180 @ 615,487: 23x12 +#1181 @ 291,846: 21x21 +#1182 @ 931,467: 13x21 +#1183 @ 766,736: 27x13 +#1184 @ 345,728: 19x12 +#1185 @ 781,161: 17x27 +#1186 @ 262,891: 15x25 +#1187 @ 219,755: 12x20 +#1188 @ 681,109: 23x11 +#1189 @ 941,959: 29x16 +#1190 @ 800,13: 23x25 +#1191 @ 51,902: 28x24 +#1192 @ 261,704: 18x12 +#1193 @ 63,438: 20x17 +#1194 @ 428,339: 22x23 +#1195 @ 732,860: 18x25 +#1196 @ 132,750: 23x12 +#1197 @ 771,59: 26x18 +#1198 @ 19,322: 24x17 +#1199 @ 558,119: 11x22 +#1200 @ 213,33: 13x14 +#1201 @ 746,843: 13x12 +#1202 @ 607,223: 15x25 +#1203 @ 744,185: 13x16 +#1204 @ 896,863: 14x11 +#1205 @ 781,653: 20x16 +#1206 @ 519,411: 14x10 +#1207 @ 587,708: 27x14 +#1208 @ 353,41: 29x16 +#1209 @ 555,555: 14x11 +#1210 @ 408,553: 25x22 +#1211 @ 639,190: 27x29 +#1212 @ 149,88: 12x27 +#1213 @ 988,44: 10x20 +#1214 @ 617,812: 26x19 +#1215 @ 308,435: 25x12 +#1216 @ 629,405: 11x29 +#1217 @ 732,761: 11x25 +#1218 @ 802,229: 16x17 +#1219 @ 302,310: 28x26 +#1220 @ 918,368: 16x10 +#1221 @ 66,423: 12x16 +#1222 @ 917,267: 23x28 +#1223 @ 601,956: 3x10 +#1224 @ 653,919: 14x24 +#1225 @ 144,271: 20x16 +#1226 @ 508,421: 27x15 +#1227 @ 519,505: 18x11 +#1228 @ 530,385: 12x13 +#1229 @ 665,446: 18x16 +#1230 @ 520,399: 19x25 +#1231 @ 637,653: 22x29 +#1232 @ 583,956: 14x11 +#1233 @ 484,567: 23x21 +#1234 @ 216,301: 17x12 +#1235 @ 691,507: 12x17 +#1236 @ 854,476: 12x11 +#1237 @ 64,49: 11x16 +#1238 @ 863,564: 16x10 +#1239 @ 360,381: 16x17 +#1240 @ 925,888: 10x18 +#1241 @ 665,330: 12x18 +#1242 @ 228,601: 16x13 +#1243 @ 574,908: 17x13 +#1244 @ 597,953: 14x20 +#1245 @ 954,866: 17x19 +#1246 @ 791,870: 14x12 +#1247 @ 667,476: 13x28 +#1248 @ 662,488: 10x12 +#1249 @ 497,34: 10x27 +#1250 @ 110,132: 22x24 +#1251 @ 177,93: 4x11 +#1252 @ 721,114: 10x20 +#1253 @ 476,376: 21x27 +#1254 @ 384,888: 6x14 +#1255 @ 698,514: 16x26 +#1256 @ 779,308: 16x11 +#1257 @ 701,777: 26x22 +#1258 @ 933,733: 15x26 +#1259 @ 934,70: 24x26 +#1260 @ 72,787: 22x27 +#1261 @ 449,652: 18x15 +#1262 @ 425,558: 16x22 +#1263 @ 622,445: 15x16 +#1264 @ 157,175: 20x23 +#1265 @ 887,212: 21x21 +#1266 @ 514,490: 16x20 +#1267 @ 368,488: 4x6 +#1268 @ 797,41: 18x27 +#1269 @ 91,685: 22x23 +#1270 @ 277,115: 27x28 +#1271 @ 297,360: 27x20 +#1272 @ 195,559: 3x11 +#1273 @ 719,686: 23x10 +#1274 @ 397,818: 29x15 +#1275 @ 487,267: 27x10 +#1276 @ 711,388: 20x18 +#1277 @ 309,496: 27x27 +#1278 @ 414,173: 29x11 +#1279 @ 857,568: 12x18 +#1280 @ 165,155: 19x28 +#1281 @ 656,714: 12x26 +#1282 @ 255,921: 3x12 +#1283 @ 276,163: 12x14 +#1284 @ 634,812: 16x29 +#1285 @ 340,248: 23x23 +#1286 @ 193,268: 12x10 +#1287 @ 383,629: 21x26 +#1288 @ 933,297: 8x16 +#1289 @ 613,167: 13x25 +#1290 @ 852,118: 15x25 +#1291 @ 661,343: 11x20 +#1292 @ 827,119: 14x28 +#1293 @ 636,46: 27x11 +#1294 @ 629,202: 11x15 +#1295 @ 361,286: 18x23 +#1296 @ 539,925: 10x26 +#1297 @ 489,869: 15x18 +#1298 @ 415,45: 26x17 +#1299 @ 94,358: 20x17 +#1300 @ 413,552: 13x17 +#1301 @ 529,918: 16x24 +#1302 @ 400,808: 10x21 +#1303 @ 940,370: 21x27 +#1304 @ 813,185: 29x14 +#1305 @ 95,28: 24x11 +#1306 @ 249,327: 24x16 +#1307 @ 760,926: 26x12 +#1308 @ 732,957: 13x12 +#1309 @ 582,910: 13x13 +#1310 @ 0,162: 17x20 +#1311 @ 747,594: 10x11 +#1312 @ 712,513: 20x23 +#1313 @ 489,795: 26x29 +#1314 @ 474,335: 11x11 +#1315 @ 928,854: 27x16 +#1316 @ 7,377: 14x23 +#1317 @ 923,373: 20x22 +#1318 @ 411,954: 16x11 +#1319 @ 9,935: 20x14 +#1320 @ 887,848: 26x10 +#1321 @ 404,860: 11x11 +#1322 @ 475,281: 24x22 +#1323 @ 710,774: 21x22 +#1324 @ 794,158: 17x24 +#1325 @ 513,797: 25x28 +#1326 @ 707,755: 26x26 +#1327 @ 53,33: 29x24 +#1328 @ 506,184: 13x26 +#1329 @ 829,145: 20x10 +#1330 @ 891,774: 16x12 +#1331 @ 807,597: 26x27 +#1332 @ 375,313: 16x25 +#1333 @ 918,895: 16x11 +#1334 @ 884,128: 24x23 +#1335 @ 340,833: 25x24 +#1336 @ 202,485: 26x10 +#1337 @ 279,681: 21x10 +#1338 @ 199,913: 19x14 +#1339 @ 537,813: 26x29 +#1340 @ 89,723: 10x24 +#1341 @ 286,935: 22x27 +#1342 @ 347,72: 22x25 +#1343 @ 805,893: 11x28 +#1344 @ 917,81: 18x11 +#1345 @ 630,949: 21x16 +#1346 @ 526,905: 22x17 +#1347 @ 908,578: 17x15 +#1348 @ 235,237: 10x25 +#1349 @ 224,798: 20x23 +#1350 @ 759,525: 24x27 +#1351 @ 738,299: 25x16 +#1352 @ 224,888: 25x14 +#1353 @ 319,601: 28x26 +#1354 @ 212,397: 11x25 +#1355 @ 102,538: 21x28 +#1356 @ 457,251: 14x17 +#1357 @ 931,293: 13x24 +#1358 @ 808,93: 14x22 +#1359 @ 593,814: 12x23 +#1360 @ 468,131: 10x21 +#1361 @ 593,251: 15x15 +#1362 @ 362,16: 20x19 +#1363 @ 862,511: 14x11 +#1364 @ 671,626: 17x16 +#1365 @ 473,697: 16x14 +#1366 @ 368,329: 28x18 +#1367 @ 925,194: 24x29 +#1368 @ 875,511: 12x12 +#1369 @ 967,411: 25x27 +#1370 @ 89,411: 15x18 +#1371 @ 307,943: 12x28 +#1372 @ 119,13: 29x16 +#1373 @ 806,710: 15x11 +#1374 @ 544,534: 13x18 +#1375 @ 672,698: 14x17 +#1376 @ 645,848: 23x20 +#1377 @ 889,954: 25x13 +#1378 @ 378,24: 12x14 +#1379 @ 542,442: 22x15 +#1380 @ 42,454: 18x28 +#1381 @ 175,91: 11x22 +#1382 @ 840,533: 12x21 +#1383 @ 792,736: 24x27 +#1384 @ 731,713: 17x27 +#1385 @ 614,449: 22x20 diff --git a/2018/inputs/4.txt b/2018/inputs/4.txt new file mode 100644 index 0000000..4a0ff6e --- /dev/null +++ b/2018/inputs/4.txt @@ -0,0 +1,1088 @@ +[1518-09-17 23:48] Guard #1307 begins shift +[1518-06-03 00:00] Guard #3217 begins shift +[1518-07-28 00:49] falls asleep +[1518-03-30 00:57] falls asleep +[1518-07-01 23:58] Guard #409 begins shift +[1518-04-13 00:25] wakes up +[1518-04-09 00:22] wakes up +[1518-11-02 00:41] falls asleep +[1518-11-21 00:23] falls asleep +[1518-05-03 00:59] wakes up +[1518-11-21 00:02] Guard #1459 begins shift +[1518-08-18 00:27] wakes up +[1518-08-09 00:48] falls asleep +[1518-09-23 00:23] falls asleep +[1518-03-29 23:57] Guard #113 begins shift +[1518-04-16 00:43] wakes up +[1518-05-13 00:33] falls asleep +[1518-05-19 00:58] wakes up +[1518-07-09 00:44] wakes up +[1518-04-26 00:03] falls asleep +[1518-08-24 00:55] falls asleep +[1518-06-30 00:51] falls asleep +[1518-10-14 00:06] falls asleep +[1518-04-28 00:23] falls asleep +[1518-10-05 00:57] wakes up +[1518-09-02 00:56] wakes up +[1518-03-11 00:38] falls asleep +[1518-07-30 00:54] wakes up +[1518-09-15 23:58] Guard #1811 begins shift +[1518-08-08 23:58] Guard #1033 begins shift +[1518-08-07 00:08] falls asleep +[1518-06-13 00:46] wakes up +[1518-10-08 00:54] falls asleep +[1518-06-08 23:46] Guard #557 begins shift +[1518-06-01 00:22] wakes up +[1518-08-05 00:59] wakes up +[1518-03-08 00:03] Guard #3271 begins shift +[1518-07-18 23:59] Guard #449 begins shift +[1518-09-24 00:00] Guard #389 begins shift +[1518-04-22 00:45] wakes up +[1518-07-31 00:41] falls asleep +[1518-03-24 00:02] falls asleep +[1518-05-21 00:29] falls asleep +[1518-05-27 23:59] Guard #449 begins shift +[1518-10-30 00:52] wakes up +[1518-08-09 00:51] wakes up +[1518-03-16 00:54] wakes up +[1518-04-11 00:28] falls asleep +[1518-04-25 00:58] wakes up +[1518-10-06 00:07] falls asleep +[1518-08-15 23:49] Guard #557 begins shift +[1518-10-17 23:51] Guard #739 begins shift +[1518-06-27 00:00] Guard #3217 begins shift +[1518-06-30 00:01] Guard #1237 begins shift +[1518-04-29 00:01] Guard #3271 begins shift +[1518-11-12 00:19] falls asleep +[1518-07-27 00:50] wakes up +[1518-03-06 00:42] falls asleep +[1518-11-17 00:57] wakes up +[1518-07-21 00:48] wakes up +[1518-03-04 00:28] falls asleep +[1518-08-24 00:37] falls asleep +[1518-09-19 00:21] wakes up +[1518-11-05 00:24] wakes up +[1518-06-24 00:02] falls asleep +[1518-10-24 00:55] falls asleep +[1518-06-14 00:56] wakes up +[1518-06-29 00:47] wakes up +[1518-04-15 00:14] wakes up +[1518-08-21 00:08] falls asleep +[1518-09-16 00:48] falls asleep +[1518-10-11 00:42] wakes up +[1518-03-04 00:09] wakes up +[1518-03-13 00:18] falls asleep +[1518-10-28 00:56] wakes up +[1518-03-27 00:20] wakes up +[1518-05-24 00:03] Guard #739 begins shift +[1518-08-31 00:54] wakes up +[1518-06-22 00:50] falls asleep +[1518-06-15 00:45] wakes up +[1518-07-22 23:47] Guard #2647 begins shift +[1518-09-02 00:00] falls asleep +[1518-05-04 00:14] falls asleep +[1518-03-06 00:51] wakes up +[1518-10-02 00:35] wakes up +[1518-10-05 00:20] falls asleep +[1518-05-06 00:53] falls asleep +[1518-10-12 00:47] wakes up +[1518-04-08 00:30] wakes up +[1518-11-19 00:40] falls asleep +[1518-11-13 00:32] falls asleep +[1518-08-21 23:46] Guard #3271 begins shift +[1518-05-31 00:56] falls asleep +[1518-05-18 00:57] wakes up +[1518-05-17 00:56] wakes up +[1518-05-24 23:51] Guard #601 begins shift +[1518-10-30 00:32] wakes up +[1518-10-05 00:13] wakes up +[1518-11-02 00:03] Guard #2647 begins shift +[1518-05-02 00:36] wakes up +[1518-07-29 00:40] wakes up +[1518-07-16 00:53] wakes up +[1518-09-04 00:18] wakes up +[1518-05-11 00:33] falls asleep +[1518-03-09 00:00] Guard #1811 begins shift +[1518-10-24 23:57] Guard #827 begins shift +[1518-11-18 00:46] wakes up +[1518-08-14 00:27] falls asleep +[1518-05-25 00:17] wakes up +[1518-03-03 00:02] Guard #947 begins shift +[1518-05-29 00:00] falls asleep +[1518-06-05 00:04] wakes up +[1518-07-26 00:42] wakes up +[1518-10-01 00:39] falls asleep +[1518-06-22 00:54] wakes up +[1518-09-06 00:24] wakes up +[1518-08-04 00:24] falls asleep +[1518-04-25 00:35] wakes up +[1518-11-11 00:11] falls asleep +[1518-09-27 00:58] wakes up +[1518-09-16 00:15] falls asleep +[1518-07-25 00:55] wakes up +[1518-08-28 00:27] falls asleep +[1518-08-12 00:39] falls asleep +[1518-11-05 00:32] falls asleep +[1518-05-29 23:52] Guard #3209 begins shift +[1518-04-27 00:35] wakes up +[1518-04-20 00:06] falls asleep +[1518-03-21 00:47] falls asleep +[1518-10-18 00:55] wakes up +[1518-09-29 00:31] falls asleep +[1518-09-17 00:40] wakes up +[1518-04-22 00:19] falls asleep +[1518-06-14 00:32] falls asleep +[1518-10-07 23:59] Guard #1307 begins shift +[1518-04-25 00:55] falls asleep +[1518-08-27 00:24] falls asleep +[1518-08-01 23:56] Guard #389 begins shift +[1518-09-04 23:56] Guard #409 begins shift +[1518-09-29 23:56] Guard #449 begins shift +[1518-10-05 00:23] wakes up +[1518-04-04 00:58] wakes up +[1518-08-05 00:54] falls asleep +[1518-07-20 00:46] wakes up +[1518-04-08 00:46] wakes up +[1518-06-18 00:52] wakes up +[1518-05-03 23:59] Guard #1033 begins shift +[1518-11-01 00:37] wakes up +[1518-03-11 00:30] wakes up +[1518-06-06 00:42] wakes up +[1518-06-20 00:06] falls asleep +[1518-04-05 00:55] wakes up +[1518-09-13 23:57] Guard #3217 begins shift +[1518-04-21 00:00] Guard #1459 begins shift +[1518-03-18 00:00] Guard #1307 begins shift +[1518-09-13 00:03] Guard #557 begins shift +[1518-05-28 23:51] Guard #3217 begins shift +[1518-10-23 23:49] Guard #113 begins shift +[1518-03-11 23:59] Guard #113 begins shift +[1518-09-06 00:07] falls asleep +[1518-03-03 00:42] falls asleep +[1518-07-21 00:57] falls asleep +[1518-06-12 00:08] falls asleep +[1518-10-04 23:59] Guard #1237 begins shift +[1518-08-19 00:36] falls asleep +[1518-10-13 00:09] falls asleep +[1518-08-18 00:57] wakes up +[1518-08-28 23:52] Guard #1307 begins shift +[1518-09-09 00:58] wakes up +[1518-10-11 00:14] falls asleep +[1518-07-25 23:50] Guard #1559 begins shift +[1518-07-14 23:59] Guard #1237 begins shift +[1518-09-26 00:58] wakes up +[1518-05-22 23:59] Guard #3067 begins shift +[1518-05-22 00:57] falls asleep +[1518-05-02 00:58] wakes up +[1518-05-14 00:52] wakes up +[1518-04-18 00:51] wakes up +[1518-06-17 00:35] wakes up +[1518-05-18 23:59] Guard #389 begins shift +[1518-08-16 00:12] wakes up +[1518-11-08 00:49] wakes up +[1518-08-18 00:04] Guard #1307 begins shift +[1518-07-13 00:48] wakes up +[1518-08-18 23:58] Guard #1459 begins shift +[1518-03-09 00:52] wakes up +[1518-03-16 00:00] Guard #1237 begins shift +[1518-06-13 00:24] falls asleep +[1518-08-16 00:04] falls asleep +[1518-09-19 00:55] wakes up +[1518-10-04 00:47] wakes up +[1518-05-04 23:50] Guard #389 begins shift +[1518-07-03 00:57] wakes up +[1518-04-24 00:14] falls asleep +[1518-09-03 00:22] wakes up +[1518-11-09 00:54] falls asleep +[1518-09-02 00:36] wakes up +[1518-06-30 00:56] wakes up +[1518-08-26 00:51] wakes up +[1518-04-27 23:56] Guard #1307 begins shift +[1518-11-02 00:10] falls asleep +[1518-09-20 23:57] Guard #1811 begins shift +[1518-03-14 00:48] wakes up +[1518-05-31 00:30] wakes up +[1518-08-07 00:03] Guard #3209 begins shift +[1518-08-07 00:50] falls asleep +[1518-09-25 00:57] wakes up +[1518-10-18 00:08] wakes up +[1518-10-03 00:56] wakes up +[1518-05-27 00:46] wakes up +[1518-06-07 00:18] falls asleep +[1518-06-06 00:55] wakes up +[1518-03-18 00:56] wakes up +[1518-04-04 23:59] Guard #449 begins shift +[1518-09-28 00:59] wakes up +[1518-08-10 00:12] wakes up +[1518-05-30 00:21] wakes up +[1518-11-09 00:57] wakes up +[1518-11-15 00:13] falls asleep +[1518-06-10 23:57] Guard #1811 begins shift +[1518-11-04 00:01] falls asleep +[1518-05-21 00:47] falls asleep +[1518-10-07 00:05] falls asleep +[1518-03-12 00:36] wakes up +[1518-08-09 00:37] wakes up +[1518-09-23 00:58] wakes up +[1518-04-14 00:22] falls asleep +[1518-07-07 00:35] falls asleep +[1518-03-15 00:59] wakes up +[1518-03-14 00:44] falls asleep +[1518-11-06 00:04] Guard #3067 begins shift +[1518-07-14 00:01] Guard #3217 begins shift +[1518-10-23 00:09] falls asleep +[1518-07-01 00:38] wakes up +[1518-11-05 00:51] wakes up +[1518-04-08 00:52] falls asleep +[1518-09-22 00:40] falls asleep +[1518-09-08 00:20] falls asleep +[1518-05-09 00:49] falls asleep +[1518-10-17 00:02] Guard #3067 begins shift +[1518-10-01 23:56] Guard #3217 begins shift +[1518-05-10 00:58] wakes up +[1518-11-11 23:57] Guard #3271 begins shift +[1518-09-27 00:49] falls asleep +[1518-09-30 00:48] wakes up +[1518-06-06 00:01] Guard #601 begins shift +[1518-03-18 23:59] Guard #3217 begins shift +[1518-03-20 23:57] Guard #2647 begins shift +[1518-07-29 00:52] falls asleep +[1518-04-01 23:51] Guard #1459 begins shift +[1518-03-23 00:14] falls asleep +[1518-07-28 00:38] wakes up +[1518-09-04 00:49] wakes up +[1518-06-10 00:57] wakes up +[1518-10-26 00:57] wakes up +[1518-04-01 00:52] wakes up +[1518-07-10 00:47] wakes up +[1518-03-24 23:56] Guard #3217 begins shift +[1518-07-07 00:58] wakes up +[1518-08-10 00:11] falls asleep +[1518-08-22 00:56] falls asleep +[1518-11-03 00:21] wakes up +[1518-03-28 23:59] Guard #947 begins shift +[1518-07-29 00:35] falls asleep +[1518-09-09 00:05] falls asleep +[1518-04-11 00:58] wakes up +[1518-10-12 00:55] wakes up +[1518-11-14 00:44] wakes up +[1518-03-17 00:47] wakes up +[1518-03-29 00:13] falls asleep +[1518-06-04 00:40] falls asleep +[1518-11-16 00:14] falls asleep +[1518-05-11 00:04] Guard #1459 begins shift +[1518-06-03 00:11] falls asleep +[1518-10-22 00:58] wakes up +[1518-04-15 00:57] falls asleep +[1518-07-12 00:59] wakes up +[1518-05-21 00:31] wakes up +[1518-06-27 00:09] falls asleep +[1518-08-07 00:41] wakes up +[1518-10-22 00:11] falls asleep +[1518-09-02 00:43] falls asleep +[1518-05-31 00:28] falls asleep +[1518-05-25 00:07] falls asleep +[1518-07-25 00:13] wakes up +[1518-06-13 00:35] wakes up +[1518-08-17 00:40] falls asleep +[1518-08-02 00:58] wakes up +[1518-03-26 00:23] falls asleep +[1518-11-04 00:59] wakes up +[1518-03-28 00:38] falls asleep +[1518-10-29 23:57] Guard #113 begins shift +[1518-09-11 23:59] Guard #2647 begins shift +[1518-03-09 00:48] falls asleep +[1518-08-18 00:53] wakes up +[1518-09-02 00:46] wakes up +[1518-06-18 00:02] Guard #739 begins shift +[1518-10-22 00:00] Guard #1811 begins shift +[1518-09-23 00:27] wakes up +[1518-08-31 00:38] falls asleep +[1518-09-25 00:39] falls asleep +[1518-08-08 00:03] Guard #2647 begins shift +[1518-09-14 00:23] falls asleep +[1518-08-21 00:04] Guard #877 begins shift +[1518-10-09 00:31] wakes up +[1518-06-20 00:51] wakes up +[1518-06-06 00:17] falls asleep +[1518-08-10 00:17] falls asleep +[1518-05-08 00:57] wakes up +[1518-11-10 00:06] falls asleep +[1518-05-30 23:58] Guard #1559 begins shift +[1518-10-12 00:44] falls asleep +[1518-09-08 00:53] wakes up +[1518-04-08 00:28] falls asleep +[1518-08-17 00:52] wakes up +[1518-05-02 00:57] falls asleep +[1518-05-06 00:56] wakes up +[1518-03-23 00:00] Guard #1811 begins shift +[1518-04-27 00:10] falls asleep +[1518-06-09 00:04] falls asleep +[1518-08-18 00:10] falls asleep +[1518-07-25 00:46] falls asleep +[1518-10-10 00:43] wakes up +[1518-04-19 00:48] wakes up +[1518-10-20 00:49] wakes up +[1518-04-17 00:01] Guard #1237 begins shift +[1518-05-21 00:06] falls asleep +[1518-11-15 00:37] wakes up +[1518-05-04 00:24] wakes up +[1518-10-04 00:01] Guard #2647 begins shift +[1518-03-26 00:00] Guard #389 begins shift +[1518-08-29 00:23] wakes up +[1518-04-02 00:03] falls asleep +[1518-05-14 00:12] falls asleep +[1518-04-14 00:57] wakes up +[1518-06-01 23:56] Guard #449 begins shift +[1518-08-11 23:56] Guard #1811 begins shift +[1518-07-04 00:01] Guard #3271 begins shift +[1518-07-22 00:38] falls asleep +[1518-11-13 23:58] Guard #2647 begins shift +[1518-05-07 00:59] wakes up +[1518-06-22 00:26] falls asleep +[1518-08-28 00:01] Guard #3067 begins shift +[1518-10-31 00:03] Guard #113 begins shift +[1518-06-24 00:48] wakes up +[1518-03-18 00:28] falls asleep +[1518-03-16 00:13] falls asleep +[1518-04-27 00:57] falls asleep +[1518-07-14 00:24] wakes up +[1518-11-18 00:59] wakes up +[1518-05-01 00:00] Guard #739 begins shift +[1518-11-08 23:56] Guard #3209 begins shift +[1518-06-20 00:36] falls asleep +[1518-09-21 00:20] falls asleep +[1518-05-28 00:21] wakes up +[1518-03-05 00:23] falls asleep +[1518-03-30 00:38] wakes up +[1518-07-12 00:56] falls asleep +[1518-04-03 00:25] wakes up +[1518-03-21 00:58] wakes up +[1518-08-11 00:17] falls asleep +[1518-08-12 23:59] Guard #947 begins shift +[1518-04-29 23:53] Guard #947 begins shift +[1518-05-10 00:03] Guard #3209 begins shift +[1518-03-04 00:38] wakes up +[1518-05-14 00:03] Guard #947 begins shift +[1518-03-22 00:57] wakes up +[1518-07-15 00:37] falls asleep +[1518-06-11 00:48] wakes up +[1518-04-14 00:01] Guard #557 begins shift +[1518-07-24 00:49] wakes up +[1518-09-01 00:56] wakes up +[1518-08-26 00:59] wakes up +[1518-08-25 00:15] falls asleep +[1518-07-06 00:04] falls asleep +[1518-07-03 00:03] Guard #557 begins shift +[1518-10-20 00:45] falls asleep +[1518-10-18 00:53] falls asleep +[1518-06-19 00:53] wakes up +[1518-03-27 00:51] falls asleep +[1518-07-11 00:43] falls asleep +[1518-05-03 00:55] falls asleep +[1518-09-21 00:49] falls asleep +[1518-09-20 00:54] wakes up +[1518-06-01 00:04] falls asleep +[1518-05-13 00:37] wakes up +[1518-06-27 00:46] wakes up +[1518-04-03 00:01] Guard #601 begins shift +[1518-03-13 00:55] falls asleep +[1518-10-10 00:13] falls asleep +[1518-10-31 00:21] falls asleep +[1518-03-14 00:54] falls asleep +[1518-04-06 00:02] Guard #1237 begins shift +[1518-10-15 00:48] wakes up +[1518-03-27 00:02] Guard #1559 begins shift +[1518-10-12 00:14] falls asleep +[1518-07-11 00:25] falls asleep +[1518-03-04 00:43] falls asleep +[1518-04-16 00:53] falls asleep +[1518-06-11 00:54] falls asleep +[1518-06-16 00:15] falls asleep +[1518-10-18 00:46] falls asleep +[1518-07-24 00:02] Guard #389 begins shift +[1518-04-04 00:26] wakes up +[1518-04-07 00:21] falls asleep +[1518-04-12 23:56] Guard #2647 begins shift +[1518-07-18 00:49] wakes up +[1518-05-07 00:04] falls asleep +[1518-10-06 00:04] Guard #947 begins shift +[1518-09-18 00:43] wakes up +[1518-04-29 00:33] wakes up +[1518-07-29 00:57] falls asleep +[1518-08-27 00:42] wakes up +[1518-03-16 23:46] Guard #739 begins shift +[1518-05-20 00:23] falls asleep +[1518-07-27 00:09] falls asleep +[1518-08-18 00:37] falls asleep +[1518-06-26 00:01] Guard #1307 begins shift +[1518-09-30 00:20] falls asleep +[1518-04-11 00:44] falls asleep +[1518-04-09 00:12] falls asleep +[1518-03-31 00:03] Guard #1559 begins shift +[1518-06-08 00:00] Guard #449 begins shift +[1518-11-07 00:46] wakes up +[1518-04-11 00:04] Guard #409 begins shift +[1518-03-04 00:56] wakes up +[1518-07-24 00:47] falls asleep +[1518-08-25 00:21] wakes up +[1518-05-24 00:06] falls asleep +[1518-05-08 00:52] falls asleep +[1518-08-29 23:57] Guard #3067 begins shift +[1518-05-18 00:00] falls asleep +[1518-08-19 23:59] Guard #1459 begins shift +[1518-05-31 00:58] wakes up +[1518-06-13 00:00] Guard #947 begins shift +[1518-10-28 00:48] falls asleep +[1518-05-20 23:58] Guard #877 begins shift +[1518-08-20 00:28] falls asleep +[1518-06-17 00:12] falls asleep +[1518-08-19 00:51] falls asleep +[1518-03-03 23:48] Guard #557 begins shift +[1518-10-28 00:30] falls asleep +[1518-03-30 00:11] falls asleep +[1518-06-07 00:53] wakes up +[1518-07-22 00:01] Guard #557 begins shift +[1518-11-11 00:58] wakes up +[1518-08-27 00:00] Guard #3067 begins shift +[1518-06-06 00:19] wakes up +[1518-10-24 00:59] wakes up +[1518-11-03 00:26] falls asleep +[1518-08-19 00:41] wakes up +[1518-03-19 00:33] falls asleep +[1518-10-02 00:53] wakes up +[1518-07-31 23:58] Guard #1723 begins shift +[1518-08-23 00:53] wakes up +[1518-03-13 00:59] wakes up +[1518-10-20 23:59] Guard #449 begins shift +[1518-05-12 00:09] falls asleep +[1518-05-17 23:54] Guard #1811 begins shift +[1518-06-25 00:53] wakes up +[1518-06-17 00:55] wakes up +[1518-05-09 00:24] falls asleep +[1518-08-14 00:01] Guard #739 begins shift +[1518-03-20 00:06] falls asleep +[1518-11-20 00:28] falls asleep +[1518-04-15 00:58] wakes up +[1518-05-22 00:36] wakes up +[1518-04-12 00:04] Guard #877 begins shift +[1518-06-04 23:52] Guard #877 begins shift +[1518-10-09 00:07] falls asleep +[1518-06-05 00:15] falls asleep +[1518-06-28 00:34] wakes up +[1518-11-13 00:37] wakes up +[1518-09-24 00:48] wakes up +[1518-05-15 00:02] Guard #557 begins shift +[1518-05-27 00:21] falls asleep +[1518-11-12 00:34] wakes up +[1518-06-06 00:51] falls asleep +[1518-11-21 00:43] wakes up +[1518-09-01 00:28] falls asleep +[1518-10-13 00:00] Guard #947 begins shift +[1518-11-20 00:46] wakes up +[1518-05-22 00:01] Guard #1559 begins shift +[1518-04-05 00:07] falls asleep +[1518-06-11 23:56] Guard #3209 begins shift +[1518-07-11 00:51] wakes up +[1518-08-30 00:17] falls asleep +[1518-05-12 23:57] Guard #3271 begins shift +[1518-03-15 00:24] falls asleep +[1518-04-26 23:59] Guard #3067 begins shift +[1518-03-09 00:06] falls asleep +[1518-03-09 00:57] wakes up +[1518-03-08 00:58] wakes up +[1518-04-13 00:22] falls asleep +[1518-04-14 23:46] Guard #1033 begins shift +[1518-07-28 00:54] falls asleep +[1518-09-20 00:00] Guard #3067 begins shift +[1518-05-09 00:43] wakes up +[1518-11-01 00:03] Guard #3067 begins shift +[1518-05-12 00:55] wakes up +[1518-03-08 00:09] falls asleep +[1518-03-10 00:40] wakes up +[1518-03-28 00:00] Guard #1459 begins shift +[1518-10-14 00:34] falls asleep +[1518-09-22 00:26] falls asleep +[1518-10-30 00:26] falls asleep +[1518-09-12 00:07] falls asleep +[1518-03-26 00:58] wakes up +[1518-07-20 00:20] falls asleep +[1518-06-28 00:25] falls asleep +[1518-09-12 00:24] wakes up +[1518-05-22 00:13] falls asleep +[1518-08-13 00:42] wakes up +[1518-08-22 00:04] falls asleep +[1518-07-28 23:59] Guard #1559 begins shift +[1518-08-24 23:59] Guard #2647 begins shift +[1518-10-24 00:05] falls asleep +[1518-06-22 00:47] wakes up +[1518-10-26 00:35] falls asleep +[1518-08-10 00:58] wakes up +[1518-03-14 00:57] wakes up +[1518-07-09 00:32] falls asleep +[1518-04-28 00:55] falls asleep +[1518-10-13 00:41] wakes up +[1518-07-02 00:17] falls asleep +[1518-04-17 00:58] wakes up +[1518-05-22 00:58] wakes up +[1518-09-01 00:48] wakes up +[1518-04-01 00:48] falls asleep +[1518-07-01 00:00] Guard #557 begins shift +[1518-04-18 00:40] falls asleep +[1518-03-13 23:57] Guard #449 begins shift +[1518-04-08 00:00] Guard #877 begins shift +[1518-09-16 23:57] Guard #1459 begins shift +[1518-11-06 00:57] wakes up +[1518-07-19 23:56] Guard #1459 begins shift +[1518-03-07 00:42] falls asleep +[1518-06-10 00:02] Guard #1559 begins shift +[1518-06-20 00:25] wakes up +[1518-04-08 00:44] falls asleep +[1518-06-22 00:01] Guard #113 begins shift +[1518-07-08 23:46] Guard #1811 begins shift +[1518-07-23 00:03] falls asleep +[1518-04-23 00:31] falls asleep +[1518-08-20 00:58] wakes up +[1518-09-30 23:57] Guard #3217 begins shift +[1518-10-28 00:00] Guard #449 begins shift +[1518-06-02 00:30] falls asleep +[1518-09-04 00:36] falls asleep +[1518-07-24 00:56] falls asleep +[1518-04-16 00:04] Guard #601 begins shift +[1518-05-20 00:38] wakes up +[1518-10-29 00:33] falls asleep +[1518-07-17 00:42] wakes up +[1518-04-07 00:01] Guard #449 begins shift +[1518-08-29 00:54] wakes up +[1518-04-08 00:54] wakes up +[1518-03-12 00:32] falls asleep +[1518-05-06 00:43] wakes up +[1518-03-05 00:00] Guard #3271 begins shift +[1518-07-30 00:04] Guard #389 begins shift +[1518-07-26 00:00] falls asleep +[1518-10-17 00:23] falls asleep +[1518-09-06 23:53] Guard #389 begins shift +[1518-03-08 00:56] falls asleep +[1518-09-13 00:55] wakes up +[1518-07-20 00:31] wakes up +[1518-10-14 00:02] Guard #557 begins shift +[1518-05-26 00:01] Guard #1811 begins shift +[1518-05-29 00:29] wakes up +[1518-07-08 00:57] falls asleep +[1518-07-10 00:21] falls asleep +[1518-08-24 00:50] wakes up +[1518-03-09 00:09] wakes up +[1518-08-16 00:22] falls asleep +[1518-05-01 00:52] wakes up +[1518-06-01 00:25] falls asleep +[1518-07-01 00:26] wakes up +[1518-09-08 23:52] Guard #389 begins shift +[1518-09-17 00:35] falls asleep +[1518-05-30 00:58] wakes up +[1518-11-11 00:54] wakes up +[1518-04-30 00:37] wakes up +[1518-05-06 23:54] Guard #1033 begins shift +[1518-11-08 00:25] falls asleep +[1518-11-15 23:58] Guard #3217 begins shift +[1518-11-01 00:14] falls asleep +[1518-10-08 00:57] wakes up +[1518-08-18 00:56] falls asleep +[1518-11-10 23:57] Guard #2647 begins shift +[1518-03-21 23:57] Guard #389 begins shift +[1518-09-22 23:59] Guard #3209 begins shift +[1518-08-24 00:58] wakes up +[1518-10-19 23:57] Guard #389 begins shift +[1518-09-07 23:48] Guard #3209 begins shift +[1518-08-10 23:57] Guard #1033 begins shift +[1518-03-13 00:03] Guard #3271 begins shift +[1518-03-19 00:37] wakes up +[1518-06-18 23:59] Guard #877 begins shift +[1518-10-04 00:51] falls asleep +[1518-09-28 00:42] falls asleep +[1518-05-06 00:00] Guard #1459 begins shift +[1518-05-03 00:26] wakes up +[1518-06-26 00:55] wakes up +[1518-09-15 00:59] wakes up +[1518-07-22 00:35] wakes up +[1518-09-03 00:51] wakes up +[1518-07-22 00:58] wakes up +[1518-04-29 00:15] falls asleep +[1518-10-29 00:58] wakes up +[1518-07-27 00:46] falls asleep +[1518-07-29 00:54] wakes up +[1518-11-23 00:54] wakes up +[1518-04-25 23:48] Guard #877 begins shift +[1518-08-16 23:57] Guard #1559 begins shift +[1518-09-25 00:47] falls asleep +[1518-03-06 00:18] wakes up +[1518-10-18 00:00] falls asleep +[1518-10-01 00:48] wakes up +[1518-04-12 00:59] wakes up +[1518-11-13 00:50] falls asleep +[1518-09-10 23:58] Guard #3209 begins shift +[1518-09-27 00:00] Guard #409 begins shift +[1518-09-21 23:51] Guard #3209 begins shift +[1518-11-03 00:11] falls asleep +[1518-11-18 00:06] falls asleep +[1518-03-06 00:56] falls asleep +[1518-07-14 00:17] falls asleep +[1518-08-05 00:40] falls asleep +[1518-04-23 00:43] falls asleep +[1518-09-18 00:00] falls asleep +[1518-08-02 23:56] Guard #2647 begins shift +[1518-09-22 00:34] wakes up +[1518-06-19 00:08] falls asleep +[1518-06-01 00:41] wakes up +[1518-09-08 00:11] wakes up +[1518-04-17 00:54] falls asleep +[1518-05-27 00:02] Guard #3271 begins shift +[1518-08-07 00:53] wakes up +[1518-07-20 00:39] falls asleep +[1518-11-07 23:58] Guard #449 begins shift +[1518-09-24 23:57] Guard #1459 begins shift +[1518-04-28 00:57] wakes up +[1518-08-28 00:53] wakes up +[1518-04-16 00:29] falls asleep +[1518-07-12 00:42] wakes up +[1518-06-22 23:56] Guard #3067 begins shift +[1518-03-20 00:46] wakes up +[1518-05-07 23:50] Guard #409 begins shift +[1518-08-25 00:48] wakes up +[1518-04-06 00:56] falls asleep +[1518-09-03 00:06] falls asleep +[1518-09-10 00:01] falls asleep +[1518-07-17 00:11] falls asleep +[1518-10-23 00:49] wakes up +[1518-05-30 00:03] falls asleep +[1518-10-12 00:51] falls asleep +[1518-11-17 00:00] Guard #1307 begins shift +[1518-03-23 00:28] wakes up +[1518-08-02 00:54] falls asleep +[1518-08-16 00:53] wakes up +[1518-06-09 00:43] wakes up +[1518-04-23 00:50] wakes up +[1518-11-02 00:51] wakes up +[1518-08-25 00:46] falls asleep +[1518-06-27 00:36] wakes up +[1518-04-08 23:57] Guard #1559 begins shift +[1518-07-09 00:58] wakes up +[1518-10-28 23:56] Guard #449 begins shift +[1518-04-02 00:53] wakes up +[1518-05-17 00:45] falls asleep +[1518-03-15 00:04] Guard #601 begins shift +[1518-03-17 00:15] wakes up +[1518-05-05 00:59] wakes up +[1518-05-25 00:03] wakes up +[1518-10-18 23:57] Guard #1559 begins shift +[1518-10-21 00:27] falls asleep +[1518-05-12 00:40] wakes up +[1518-04-06 00:58] wakes up +[1518-05-23 00:20] falls asleep +[1518-07-16 23:56] Guard #1459 begins shift +[1518-06-12 00:51] wakes up +[1518-04-19 00:34] falls asleep +[1518-06-14 00:09] falls asleep +[1518-08-08 00:19] falls asleep +[1518-09-04 00:02] falls asleep +[1518-05-23 00:57] wakes up +[1518-03-27 00:17] falls asleep +[1518-04-15 00:28] falls asleep +[1518-09-23 00:30] falls asleep +[1518-10-08 00:44] wakes up +[1518-08-29 00:29] falls asleep +[1518-08-03 00:52] falls asleep +[1518-10-24 00:45] wakes up +[1518-05-12 00:45] falls asleep +[1518-09-12 00:29] falls asleep +[1518-04-16 00:59] wakes up +[1518-07-11 00:31] wakes up +[1518-07-04 00:39] wakes up +[1518-05-16 00:44] wakes up +[1518-06-21 00:45] wakes up +[1518-07-26 23:58] Guard #3209 begins shift +[1518-05-08 23:58] Guard #877 begins shift +[1518-11-07 00:20] falls asleep +[1518-08-26 00:04] Guard #389 begins shift +[1518-03-11 00:16] falls asleep +[1518-11-17 00:20] falls asleep +[1518-09-10 00:49] wakes up +[1518-05-10 00:36] falls asleep +[1518-05-16 00:55] wakes up +[1518-08-04 00:01] Guard #409 begins shift +[1518-04-26 00:45] wakes up +[1518-09-07 00:46] wakes up +[1518-10-21 00:47] wakes up +[1518-05-15 00:46] wakes up +[1518-08-21 00:50] wakes up +[1518-08-08 00:58] wakes up +[1518-08-26 00:57] falls asleep +[1518-07-02 00:51] wakes up +[1518-03-25 00:16] falls asleep +[1518-08-11 00:59] wakes up +[1518-04-19 00:58] wakes up +[1518-10-15 00:56] falls asleep +[1518-06-15 00:14] falls asleep +[1518-04-03 00:42] wakes up +[1518-11-14 00:18] falls asleep +[1518-05-12 00:02] Guard #947 begins shift +[1518-04-15 00:05] falls asleep +[1518-04-23 00:39] wakes up +[1518-07-22 00:19] falls asleep +[1518-07-31 00:44] wakes up +[1518-10-27 00:43] wakes up +[1518-09-22 00:03] falls asleep +[1518-03-07 00:02] Guard #3067 begins shift +[1518-03-03 00:55] wakes up +[1518-06-02 00:56] wakes up +[1518-03-04 00:23] wakes up +[1518-08-06 00:37] falls asleep +[1518-06-23 23:50] Guard #1559 begins shift +[1518-09-27 00:50] wakes up +[1518-07-08 00:19] falls asleep +[1518-05-09 00:52] wakes up +[1518-03-06 00:02] falls asleep +[1518-06-05 00:01] falls asleep +[1518-05-03 00:47] wakes up +[1518-05-29 00:41] falls asleep +[1518-10-25 23:58] Guard #947 begins shift +[1518-10-14 23:59] Guard #3209 begins shift +[1518-03-04 00:02] falls asleep +[1518-07-28 00:03] Guard #3217 begins shift +[1518-09-12 00:09] wakes up +[1518-03-09 00:35] wakes up +[1518-10-27 00:00] Guard #739 begins shift +[1518-07-29 00:59] wakes up +[1518-11-10 00:34] wakes up +[1518-05-25 00:02] falls asleep +[1518-03-10 00:30] falls asleep +[1518-07-08 00:48] wakes up +[1518-05-19 23:57] Guard #3217 begins shift +[1518-03-31 00:40] wakes up +[1518-08-02 00:28] falls asleep +[1518-11-11 00:57] falls asleep +[1518-06-27 00:45] falls asleep +[1518-07-05 23:53] Guard #1559 begins shift +[1518-10-02 00:17] falls asleep +[1518-06-13 00:45] falls asleep +[1518-10-04 00:18] falls asleep +[1518-06-03 00:59] wakes up +[1518-06-11 00:57] wakes up +[1518-04-04 00:02] Guard #947 begins shift +[1518-04-24 00:45] falls asleep +[1518-03-20 00:00] Guard #1307 begins shift +[1518-11-16 00:58] wakes up +[1518-05-01 23:58] Guard #389 begins shift +[1518-08-06 00:00] Guard #1559 begins shift +[1518-03-05 23:49] Guard #113 begins shift +[1518-06-23 00:56] wakes up +[1518-09-28 00:48] wakes up +[1518-07-19 00:49] wakes up +[1518-07-08 00:58] wakes up +[1518-04-03 00:41] falls asleep +[1518-09-14 00:57] wakes up +[1518-07-25 00:05] falls asleep +[1518-11-12 23:57] Guard #1811 begins shift +[1518-06-10 00:29] falls asleep +[1518-08-21 00:58] wakes up +[1518-03-17 00:43] falls asleep +[1518-03-06 00:59] wakes up +[1518-08-06 00:44] wakes up +[1518-07-04 23:56] Guard #2389 begins shift +[1518-06-21 00:03] falls asleep +[1518-04-10 00:27] falls asleep +[1518-03-30 00:59] wakes up +[1518-03-31 23:57] Guard #449 begins shift +[1518-09-08 00:01] falls asleep +[1518-04-10 00:58] wakes up +[1518-05-30 00:45] falls asleep +[1518-09-26 00:51] falls asleep +[1518-09-20 00:16] falls asleep +[1518-05-08 00:05] falls asleep +[1518-09-13 00:23] falls asleep +[1518-09-12 00:23] falls asleep +[1518-03-31 00:39] falls asleep +[1518-06-08 00:40] falls asleep +[1518-08-23 23:59] Guard #409 begins shift +[1518-09-03 00:35] falls asleep +[1518-06-04 00:00] Guard #1237 begins shift +[1518-11-05 00:01] Guard #3209 begins shift +[1518-07-21 00:36] falls asleep +[1518-10-11 23:59] Guard #601 begins shift +[1518-11-19 00:59] wakes up +[1518-11-17 23:57] Guard #1559 begins shift +[1518-06-07 00:04] Guard #3209 begins shift +[1518-10-15 00:21] falls asleep +[1518-04-07 00:58] wakes up +[1518-07-09 00:19] wakes up +[1518-08-05 00:51] wakes up +[1518-05-01 00:22] wakes up +[1518-03-07 00:59] wakes up +[1518-08-12 00:33] wakes up +[1518-05-03 00:18] falls asleep +[1518-03-10 00:04] Guard #3271 begins shift +[1518-10-31 00:55] wakes up +[1518-07-03 00:48] falls asleep +[1518-05-31 23:52] Guard #3271 begins shift +[1518-05-23 00:37] wakes up +[1518-06-13 00:59] wakes up +[1518-11-06 00:29] falls asleep +[1518-10-27 00:09] falls asleep +[1518-05-07 00:50] falls asleep +[1518-06-28 23:53] Guard #1459 begins shift +[1518-04-04 00:37] falls asleep +[1518-10-09 23:56] Guard #3209 begins shift +[1518-06-29 00:02] falls asleep +[1518-09-16 00:56] wakes up +[1518-05-08 00:31] wakes up +[1518-10-08 00:20] falls asleep +[1518-04-21 00:58] wakes up +[1518-03-09 00:56] falls asleep +[1518-06-13 23:58] Guard #1033 begins shift +[1518-07-22 00:42] wakes up +[1518-05-28 00:11] falls asleep +[1518-06-17 00:00] Guard #3271 begins shift +[1518-09-27 00:56] falls asleep +[1518-04-18 00:00] Guard #947 begins shift +[1518-09-19 00:04] Guard #3209 begins shift +[1518-11-18 00:49] falls asleep +[1518-08-25 00:42] wakes up +[1518-04-20 00:56] wakes up +[1518-08-22 00:47] wakes up +[1518-10-07 00:59] wakes up +[1518-04-18 23:59] Guard #389 begins shift +[1518-07-16 00:23] falls asleep +[1518-07-30 00:17] falls asleep +[1518-04-24 00:03] Guard #877 begins shift +[1518-05-06 00:38] falls asleep +[1518-05-28 00:44] falls asleep +[1518-05-02 23:56] Guard #557 begins shift +[1518-11-17 00:47] falls asleep +[1518-06-18 00:44] falls asleep +[1518-11-04 00:14] wakes up +[1518-06-16 00:30] wakes up +[1518-11-02 00:22] wakes up +[1518-04-22 23:57] Guard #601 begins shift +[1518-06-20 23:50] Guard #3067 begins shift +[1518-07-28 00:06] falls asleep +[1518-08-25 00:28] falls asleep +[1518-11-06 00:47] falls asleep +[1518-05-16 00:49] falls asleep +[1518-09-15 00:40] falls asleep +[1518-09-25 00:44] wakes up +[1518-06-04 00:58] wakes up +[1518-03-08 00:50] wakes up +[1518-10-30 00:58] wakes up +[1518-05-01 00:25] falls asleep +[1518-11-13 00:51] wakes up +[1518-10-06 00:54] wakes up +[1518-04-28 00:51] wakes up +[1518-04-24 00:33] wakes up +[1518-03-25 00:51] wakes up +[1518-11-02 23:58] Guard #877 begins shift +[1518-07-12 00:00] Guard #1459 begins shift +[1518-09-12 00:45] wakes up +[1518-11-11 00:47] falls asleep +[1518-10-08 23:57] Guard #947 begins shift +[1518-06-08 00:59] wakes up +[1518-07-10 00:04] Guard #3217 begins shift +[1518-09-03 23:50] Guard #1459 begins shift +[1518-09-01 23:50] Guard #3271 begins shift +[1518-11-19 23:56] Guard #113 begins shift +[1518-04-22 00:00] Guard #3217 begins shift +[1518-07-20 23:58] Guard #877 begins shift +[1518-09-28 00:03] Guard #3217 begins shift +[1518-03-04 00:18] falls asleep +[1518-09-03 00:03] Guard #1307 begins shift +[1518-09-14 00:48] falls asleep +[1518-09-02 00:49] falls asleep +[1518-03-24 00:46] wakes up +[1518-07-24 00:59] wakes up +[1518-09-01 00:02] Guard #449 begins shift +[1518-04-25 00:24] falls asleep +[1518-06-11 00:28] falls asleep +[1518-07-09 00:49] falls asleep +[1518-08-31 00:02] Guard #409 begins shift +[1518-08-05 00:02] Guard #389 begins shift +[1518-08-22 00:58] wakes up +[1518-09-29 00:52] wakes up +[1518-09-07 00:01] falls asleep +[1518-10-19 00:15] falls asleep +[1518-07-18 00:39] falls asleep +[1518-07-06 23:58] Guard #113 begins shift +[1518-11-10 00:04] Guard #1033 begins shift +[1518-08-15 00:01] Guard #1559 begins shift +[1518-04-12 00:13] falls asleep +[1518-06-05 00:56] wakes up +[1518-10-17 00:54] falls asleep +[1518-10-10 23:58] Guard #1459 begins shift +[1518-08-13 00:14] falls asleep +[1518-10-16 00:02] Guard #2389 begins shift +[1518-07-11 00:01] Guard #557 begins shift +[1518-10-02 00:42] falls asleep +[1518-07-15 23:57] Guard #449 begins shift +[1518-03-07 00:45] wakes up +[1518-11-19 00:02] Guard #389 begins shift +[1518-11-03 00:51] wakes up +[1518-10-22 23:59] Guard #1459 begins shift +[1518-07-08 00:02] Guard #3271 begins shift +[1518-09-16 00:18] wakes up +[1518-05-05 00:00] falls asleep +[1518-09-15 00:01] Guard #2647 begins shift +[1518-05-19 00:46] falls asleep +[1518-10-17 00:48] wakes up +[1518-03-07 00:57] falls asleep +[1518-09-11 00:52] wakes up +[1518-10-13 00:53] falls asleep +[1518-07-13 00:43] falls asleep +[1518-06-26 00:30] falls asleep +[1518-07-28 00:59] wakes up +[1518-08-12 00:15] falls asleep +[1518-06-25 00:21] falls asleep +[1518-05-26 00:38] falls asleep +[1518-07-12 23:59] Guard #1811 begins shift +[1518-05-28 00:47] wakes up +[1518-10-02 23:56] Guard #1307 begins shift +[1518-09-22 00:47] wakes up +[1518-05-07 00:35] wakes up +[1518-08-09 00:17] falls asleep +[1518-10-30 00:42] falls asleep +[1518-04-04 00:18] falls asleep +[1518-03-22 00:44] falls asleep +[1518-06-13 00:57] falls asleep +[1518-05-02 00:29] falls asleep +[1518-08-15 00:55] wakes up +[1518-04-19 00:57] falls asleep +[1518-04-19 23:59] Guard #947 begins shift +[1518-05-02 00:46] falls asleep +[1518-11-15 00:00] Guard #3209 begins shift +[1518-10-13 00:57] wakes up +[1518-04-03 00:07] falls asleep +[1518-08-15 00:20] falls asleep +[1518-03-13 00:47] wakes up +[1518-09-19 00:09] falls asleep +[1518-11-17 00:21] wakes up +[1518-10-19 00:35] wakes up +[1518-05-15 00:40] falls asleep +[1518-11-03 23:48] Guard #1307 begins shift +[1518-04-10 00:04] Guard #1307 begins shift +[1518-06-20 00:04] Guard #3217 begins shift +[1518-05-16 00:04] falls asleep +[1518-07-19 00:12] falls asleep +[1518-10-12 00:23] wakes up +[1518-03-11 00:56] wakes up +[1518-05-23 00:56] falls asleep +[1518-06-28 00:32] falls asleep +[1518-05-11 00:45] wakes up +[1518-04-09 00:33] falls asleep +[1518-10-05 00:10] falls asleep +[1518-06-30 00:37] wakes up +[1518-07-04 00:06] falls asleep +[1518-05-02 00:53] wakes up +[1518-10-06 23:54] Guard #557 begins shift +[1518-08-23 00:17] falls asleep +[1518-09-11 00:19] falls asleep +[1518-03-27 00:58] wakes up +[1518-09-06 00:01] Guard #1237 begins shift +[1518-07-06 00:45] wakes up +[1518-08-04 00:48] wakes up +[1518-09-19 00:25] falls asleep +[1518-04-11 00:31] wakes up +[1518-04-21 00:20] falls asleep +[1518-10-30 00:57] falls asleep +[1518-08-03 00:58] wakes up +[1518-04-27 00:58] wakes up +[1518-10-15 00:58] wakes up +[1518-11-23 00:42] falls asleep +[1518-06-15 00:01] Guard #1559 begins shift +[1518-04-24 00:49] wakes up +[1518-09-21 00:31] wakes up +[1518-05-26 00:41] wakes up +[1518-07-28 00:51] wakes up +[1518-11-22 23:58] Guard #2647 begins shift +[1518-10-28 00:39] wakes up +[1518-09-14 00:37] wakes up +[1518-05-15 23:51] Guard #3217 begins shift +[1518-07-01 00:33] falls asleep +[1518-03-29 00:44] wakes up +[1518-05-22 00:51] wakes up +[1518-10-14 00:54] wakes up +[1518-07-15 00:45] wakes up +[1518-06-14 00:27] wakes up +[1518-07-13 00:55] wakes up +[1518-09-28 00:54] falls asleep +[1518-10-18 00:50] wakes up +[1518-08-26 00:27] falls asleep +[1518-11-04 00:53] falls asleep +[1518-05-01 00:10] falls asleep +[1518-08-02 00:47] wakes up +[1518-04-30 00:05] falls asleep +[1518-09-05 00:56] wakes up +[1518-09-01 00:55] falls asleep +[1518-06-15 23:56] Guard #1559 begins shift +[1518-09-09 23:46] Guard #947 begins shift +[1518-06-06 00:36] falls asleep +[1518-07-24 23:48] Guard #1237 begins shift +[1518-07-01 00:08] falls asleep +[1518-07-12 00:37] falls asleep +[1518-03-30 00:54] wakes up +[1518-06-17 00:48] falls asleep +[1518-11-07 00:03] Guard #1459 begins shift +[1518-03-28 00:58] wakes up +[1518-08-03 00:48] wakes up +[1518-06-09 00:32] falls asleep +[1518-11-05 00:11] falls asleep +[1518-11-21 23:52] Guard #409 begins shift +[1518-11-22 00:04] falls asleep +[1518-08-22 23:59] Guard #113 begins shift +[1518-11-06 00:41] wakes up +[1518-10-03 00:40] falls asleep +[1518-06-25 00:00] Guard #877 begins shift +[1518-05-17 00:00] Guard #449 begins shift +[1518-06-28 00:03] Guard #3271 begins shift +[1518-09-29 00:03] Guard #2647 begins shift +[1518-05-21 00:19] wakes up +[1518-03-30 00:53] falls asleep +[1518-08-14 00:49] wakes up +[1518-06-23 00:37] falls asleep +[1518-07-31 00:00] Guard #3217 begins shift +[1518-06-09 00:29] wakes up +[1518-03-11 00:00] Guard #389 begins shift +[1518-11-11 00:27] wakes up +[1518-08-21 00:57] falls asleep +[1518-08-09 23:56] Guard #1811 begins shift +[1518-04-25 00:04] Guard #2647 begins shift +[1518-07-09 00:03] falls asleep +[1518-09-25 23:58] Guard #1033 begins shift +[1518-07-17 23:58] Guard #409 begins shift +[1518-05-22 00:47] falls asleep +[1518-08-30 00:32] wakes up +[1518-10-14 00:23] wakes up +[1518-10-17 00:56] wakes up +[1518-08-12 00:59] wakes up +[1518-09-21 00:58] wakes up +[1518-09-22 00:22] wakes up +[1518-05-29 00:52] wakes up +[1518-09-05 00:51] falls asleep +[1518-10-05 00:52] falls asleep +[1518-03-09 00:29] falls asleep +[1518-04-09 00:50] wakes up +[1518-10-04 00:59] wakes up +[1518-07-27 00:33] wakes up +[1518-07-13 00:51] falls asleep +[1518-06-28 00:29] wakes up +[1518-07-23 00:44] wakes up +[1518-05-24 00:58] wakes up +[1518-09-24 00:07] falls asleep +[1518-08-19 00:55] wakes up +[1518-04-15 00:53] wakes up +[1518-08-29 00:04] falls asleep +[1518-07-21 00:59] wakes up +[1518-05-03 00:45] falls asleep +[1518-03-17 00:01] falls asleep +[1518-03-05 00:51] wakes up +[1518-07-22 00:46] falls asleep +[1518-06-30 00:14] falls asleep +[1518-08-03 00:32] falls asleep +[1518-11-22 00:08] wakes up +[1518-05-21 00:58] wakes up +[1518-03-23 23:46] Guard #3209 begins shift diff --git a/2018/inputs/5.txt b/2018/inputs/5.txt new file mode 100644 index 0000000..4d4b703 --- /dev/null +++ b/2018/inputs/5.txt @@ -0,0 +1 @@ +XxSsdDIijNnJACszZScZfFhHQyYrRqzdXTtxDEeNnGgOaAcCMcCLlMmogQeEqGgFfGyYuUOIiYyhHlLmUulAUKkudDOoDdaLGRrgoDdDdGgRruUhJLljQqdwWDZzHXxppPTwWCcZzDmfFlLPpdDSsgGtFfTEeTOotyYMOGgkJjKZUuQdNnDhHvVntKkTNqTjJeEVkZzttTYyTDdIiRrqQyYYyxbBXLlKHhvtYyzoKMmiIkaAUvVuvEejoOJUuQoOLlLloOxoOXaAqYYXxyzMmZyoOVhHIiIKfFkiIKAaUukRrKQqASsakLgGlGgLxXhHmcCzZxXMWdUulLJjDwnNYkKFfZzpPVuUvHhbQqIiLRrlEeVvBQJjlLGgjYyJoAalxXuUqgGQLQqOqNJjzZnyOusSUeEFfodcLuUlCcCIiNnGgaADVwWGgvZtTewWENnSszBKkDdeEYytTzpPsSjJpPZkNnIiPpDIideEcCKCcNABbKnpPGgtTNqQGgklLtTuUgGQqaNnnVveEgjJJEejGkKziIAaZmMbopPOgDdGubBIiUZGgzuUoOkMYymvBbVPpmMqQKDdCiDdIcpDjHhIiqQJLlFCcfqxXwWQdsSKkPgdqQDGjcFfCCceEsSkKjJkKKlcuUCsaUuASLAaEekmYqyXxkKYBbeEQuUZzpPeEdeEDKkNnuUQsSTtqufFUNIGginpAXZiJjJjhOWwkKBbogGHsSRNnqQrIzZxXhEeHKlLtTrpPsbBSbBDdlkSsKZXxnwTtWCrRcNfMmPpFzNbBneFfVYyvuUBjJbEzKkZuUkCcKTPptehHfJjEeBbuUioOIIiqQFDdFfvLUVDZaAkKHhEeAaHRrOohVxXHhvNnzQqdoOaAOxsSXogiEeIGvhWwHROoruVtTvaAUDdPpuImMVePCcpEUuFfptFMmfTVvhaAHUuoQwWlLqmMKkONnhNnIisSgGHPwWQVvroDOodgGORqvGgZRrEeMeEkKBbRyYrrzZREepPCcmJSstTNntTjvOoyyxXYzZIiYVUuUunzZBbNWvVPwnNWeVvLnNlpxvVXjJPDdZOozItTiYzRrKkZngGNiIyXiIxYyCcSsEOmMUeEqQAaINCcxXniuOeAamMmMmMRFfoOHhaArMmpPRGgrVVvvIiUudwPpWDuVvspPSbBUzrJmMjjJnNRAamVvfFMaCTTVYyvXxGRrgttkJjYmkKPpMyTtkKHoOhJnNjifFIKTmMuLFftTlwWUtAyYajJyZzmMhHhrRsSHGtTiIgBmEeXxMnNpKkSsDdbBpPPZJjHRrhKQquUkzvQdDVaAWwveEqAaVSAasBbFftQqCcTuuUOVvoUccAaIiCnNCHhXxpPWfybBYOoFwarPptTRRrArRrRusScOoCUMqpPLlfFMmjJHhDdpDOpPoAabBwWdQqfFPDdeCHSHRrhlLszqQZhVvnNodDQqOPVvpcAnNLlfFSoOsiIOoSsJvOoNnVJjxXjkKuEsSEeWbBnNEewpPbBANnakKkKHhMNnrXxjJREyYemoOqQeTbgGBtIWwiIFfHhiCcEKkeHZzhhHRshzkAajlLJKZVvEeCgGdDhHSPpEQqOoescCuUcPYypJaQqFfGgPpAPpeEjZzXxbBNqQfFRPTIRraAFJjsSfibBZztJjrRprlLiIycCBbYKknrvVHNmMneEhSshHGgSbnNgGBqQDwWdUutxXxFfXGNngaYyGgHSshfFrRjAaJAVTKktzMuviJjIVUmbTtgGBzZmMFfwlwWtHhTLfFWYycXxCrEeNsHhSrECceRTJjtyYRrGgrRZsSiIzpjJgGPeEhHWNnwSsZmOoRrMzxSsQqaAzZKtTkWsSyuvVbBVvUYChHOCcoeEciIwZzWlqQLnNpnNmMPwIiTbNnBLaAlJPpSaAsjGTtyYMZzfFmiaOBboAOAalLEejIikKqQSsXxAaJJpzZwBbBbnEearRAmMNDSsdyxqJjlLQHhpSsPEqQeAauUJKkmkKLlMjvVoOPpPpCBbGgoORrtTXuUxfaIwWiAsIKkpPifFSQqZpPAXxazEpKkPtTqQeaAnLdKOokLlDlpNngGcCmhHMrRiIqWwqQVabBARrcCUuviIvpPbBwnNWHONnIioGgOoIiVvAuUaoMrZzRugGUmMmxXMmaANLAalnOhbZBbzMmZzmMuWwnNUJjdDBqQHjJqQaAbBhNdDnzZZztThHeTtDUTtQquaAkCcGgKkjdDJKZzbcCBwWjBacCAYygGiILtTfdDEeLlFkKiQqItkKDAaKkaloOLARraApFfzZtTYkKcJjdDGgDdfFCPpQzZqvVcCgGfTtJjbBCLlAgGacYyFFfyqQYyPVvvCcrRQqVwWkEeFfpPKBcEeCnBbAarRNnNnCcTtNbYyhHGgPOGZzgopHMmNnIdDihyYHhEeLplLPieENnfFXxAavVIJjJLlAavVJjBHqQmMhbiImMbBEejrRQBbjJKkwiIWqKnpYyPVvNbCcZzBrGgRPpiISszZAazZBbzGgZUuyYbBKkoQXxIiTtOolLfFNnUuqjKRLlbBrNnMmkyOoyYWgOozZlLBbYyOojJDaAkKmMtOoXxqQAaTncCBCcaAevVEeMIQqiQqXxsSmEDdWIiwWIiqYyQwhHXJjxxMmXNwWFfnxRrXXtoOTxzZpPrmMsSRpPbefFEkBbKtTMmYyXgGVvWOowRWwreExUuyYFpPfztTGgNoOFfMmnXoEeOBbxRrUuZzxZCczrdDRxMmZzWOowTtJjanfkZzwWoOfFKuoOUFUuHhFfKLlkyHOovVrvVRHhRrSsJTAPiIpjJoSsOQnNqaQxXLlfnNhHnNlLFiIsSqtVvltcPOozSsjJHhLbBlZrLifFIhBbkKHldDsvVcCSMmtTlLBbumMOovVUWyYcCNnRQqrKkwRpmMBUuASsoOqQabAayuUFfEeVvUuTtJjxXmcYyFfCEeUuPzdDZDdpOWwZyVvQqYfWwNnFzWVvwaAARrkKaoiIcCsWFfbQqBGgnNZzyYcjGgJCrkKFfRZFfzZHhzvVUbBumEkaAlLKsEeVvSIiezZhHisSsSeLlEIxXcLlCMFQqfGgmsLlaAMmaACctTAaYySENoODdEeutHhTKFfTtkkgVvWfiIDdLllSSssLbIhHmMeEgRrGiiIufCZzcFUBFMmdDHhqpOoNnWWwKYySseEKkxZKkzXiIdGgzZMmDhyYHsMmIiCcnbHSXxsTTtthRjJhXxJXxjBbUuPQqUTtupLNnVvtTlHjJqQrBJhHHbBkKhyuUYKknNoOcvVTtyYeESsCqQQKkqQqQRrqHmMZfFnNXVvCcXxgGxzmaAMjJvVTtTtRzZjJrPVpPkaAzZnCtTLlTMmtuUAazXJtgGTjRrSsrRqQqWJnQuUjfGHbBRQqhrRHrtTdyAaKkOoSsYQarRxVqkKngQqGpPHfYyPoOvJvVjVrRpMmFcCkwWaAYfQqtDdNMbBmVvqQpSMdDmgGsPEeyHgBbPZDdGgrPsSsGgrRCcSequTtUQoOKkSsfFflPpLFILliWwEkKcCxnNXYeErRyZztTpHhSBbsmMgXxGRrmMReNnEHheGWwgvVgGEzhHRrlHhhRrhHqQHLwtYwQqWbBjJeQqRZzrEfMmKoOXXxxkYObBoqaAQRrCcLlyhNnEOoebNnKrRTaAtuUkbBbBNuAaoOUnbDdGgZzYyKkbBuCXrRxcAaPfFpGFNZznkBboOsSggGiItXxEeTgGGKsSfrRvbcqQCBVbBqWvVbBIiAaRryYTOotHhwMmSqQjaJVJjvcaACrTjJcCSsQqDUTtucCdtIiHhQVxXdDvVkKvLlqPgYdmMDKrRjrRTKktQqOoAawBbDivVIdWnqFBbfZoOzQOoDRrdYLlhHxNhHnGghsSHVUuvsvuUuoOlEefNnFfWwCclLYyYyZzRroOTtFNnhkKiIHKkqMmwWYyMmPGTpIiwWzZTtpPhnNHmToOTttfFYKkPplPpOoLVUBbuRrVfFFJjffSTtsVvJjFcCgCUueEcoQqyYNnqIeEiTtQpCcWtTpPYyycaACYSyYsJiGgrRIGGgDNGgxyuUYXXxhvVHqQnDDsSukKiIEeUeJjmMGgLlGgtTKwWkxXxEeXEHNTtnhSXDbLlBddLlDzZNyYKYDRrXxGgzZdVvSgaAGsWwlbBIWwzZiiIXxLYyuUllLlXxSsvVLVvQqIgOoGeehzwWdDyiICpPIgGNnanNJjWDdwOoiIAicCxXWYEDbBavuUQQqUbBuuiIUHhWzZZzmMwKkqiiIIhYTtyvwPpTtKksSmMnGgDdNRrHhKhxXOXxpIiPzTteEZVWwvRaArCSIixXFfTtQqsclLmMPpCmxmMBbXMQYfYyPCczpPZqvFlLlyHhYHhjlLlLJOkKdsSDXxovMCcmmCcMqQLlVHLlFfhwWADdREerBbpVmlLMJjIiqQvPbeEBqQJjNnvdDVxZzXYVOFTiImkJjKNnDdMkKqQFfUueWwEhHSsxXKkmnVoOrWAawRvglLPpZCcpPYASstTGyLlSsYCcqQeEgIiVvauZzUnZcCzKkNFfTtWstTSWwzZlrRLMmEwWBRrPpbsSCgcWwJcCIAaijCRrmMdBLlrffFFBbdaAkpPKDRPpBwWbuUGgMmpsSPCcQKvVyYwCcSsuIiLlUHHhDTtlLvVkKIidYyhiIXxxXuLlUzwWiITteEmMiINFfnNnZNDnNcGgdDCveEVdjJnYyBbVvhHyYrRwAKkaChHIiMmcCcICcuKkUjNnJyZzYyYoOrRrRWwefFaAHhPpNvfdeEgGdDbFfBbmMJEejAwWaDnNvVdpPRrMrmIBvVbSsiaJjqmCcMQudDfxXPpIihrRkYylLRruRrUaAKoOyYbvVHuuxXUUxGgXSAPpNnKicCXWuUYyweEuaAUlLOgaAGXxtOoTgBbGCczIiZUuXKkXClLeErUVaAvwWlLXcCxnoQPpqFfOecCjJLlEoOzDdZSzZiuUFUuIifbBiISSlLsQoOqEeBqQbrRxXaAIiOojjJJVzqSsrRwWBqQYybQUCeFfclLCspPSEPGgYyfFpGgnNNtTnQqeKkUuMxXvVmRrhQDdCZzcCCUuccoOeEJjxXMmqHDtnNAvVEezfFAaZUuLlDdcIiZzZzCrTtdDRVdDvLsSlTmMGnNfFeEvVqyfaAFQqBbehHELyjFfJGgNyYTtxSsXkKOoSsJjKkQEebsSGQqNnFfYygmMUbBKggOohHWhHXzburReEUyYRroOnNpPBtfRZzrMEemWwFTklLZzZOozSseESYysszZSqHhQRrnNKpPfFDqBCxXcmMgGbQdsSAadDEAoOoOGeObBoLlEgaUDdVvOooOrUaAOouXhHRrdDUHhudDLlPpsVvSxRrUrNBbTtTwWtCyYcqQrRJTtJjWwXxFfHhseEzEemEkKxXtTerRiIHhamaAbcCTtBteETzZINXxniiRrIMYaAyxKkWwzbcCwuUWBMfRruUFVvvVXxmBbCcpfFOoPQcMmMmBbLljJwWVcCSsPpsSvCMoODdYDeEdyPqQplLlFfxXLmJSsVnNvTtIiUuOoFRHRrhwAXxukCcwWfFQuUcgpPGCqWTkYyjWwJKmMAZvVzaBbaQqACmMcnIiNweEWSoOstTBvcCVouqQUkKdzZNqQnHDwnNNnhHuVvJoOcCskKSPpXWVvxyYXwCBPpIibcesSExqbBqmFRxXrhZYCckUAaaXUrlnNLJxXUUvUMmPiQqZkZztTJWwyMmKkSMSaJjNnpPAQfWTtKKkoOBWwbhDDddQAaqHWwBbhrYyRNnAaNRIireEoObBWUuwnoOBbPlLpwyRrYDdTthHNrRnUTEetWwSbBnMmNgHhGsKkdDErRHbBoraAROpvVVvPGEegrRrdDNRrNndLywWYpTtKkPpTILliAatPlDLvVlFsSfKYTcCIxXVvnfFRrWwWwmmMMmMbRrBVvDdRrsSeiIEUpGtVvTCXxcbPpBjbBJBAVvaDqPpcgGCQOoPjJXxpftNXxVvRAaeEKkpPMHhdDbBiImkKKcCsFVvfvVkKSDdQqAafFAaZxXwWNnzlLnMbBmmMqAaQwTKnkMdDdlLzZDCcmuIcCGgzZiWwGRCcrgUiILUAWwaeEXxFfCciXeEfbBlqaAEBbVQqIYyifZzsSFItTDdanEeNsSlLldDoOeEHhMqSsQaAsmRrMjCcJXRrxScCkKJjfvFbBfVvVlXlgGLbBiQiEyzZYyYehtrRTHiIGpOaAokKkGgKTtVvCtUuTfFcCcuUEmMixXITsSwWgExXYBbBvVbaAfJjLdDSsKkDdAaVRrvpPBbZzjJQqSAaNnsyHhsdDzZlLSYbBdxXetTEgGSsYymlauUeYyEfFaNnAALiIXlJjLxjwWPCcoEecCOJjhpwWPbWKFfIizTeEMmlLteEtTRrCcGgrWCcYgGTHhtydNgAaGnDwTiItYWwUhHwLFKksSflWnXxNaABLTtAaMmlPaAheEHpnNOAaSRrCGDdxKkXlKknNIDdiqQqQoOuTJjtUTtXxUUumMtNnTYmMoWWGgwCcYUumMmMPpvnXxnJjjJNNDdXiBbIxVwWTtFfWwLIiSslqLQqNnXxwfFWyYGgDdQevVARryVoKWCcNnwkGgOMmvVwOocCXkKEehHtBhHbICsSciYytTZaAUGgbBuZbBzzsSTDdPpJXxlLNnzZwygpzZwWtTsAaQqvUpiIiIiIPRrgFMmJjWESseEbBewTtfWwrjJYVSanNhHAfFsVvzZbFfzZBhFKgGKoOkcBEeWwoeEObCpnNPpPlEOCczMmGgZoewNnJjUPkKpkPpRrZzAQqaumMqrXtOoTcCNoFfOnNTtnAaPUuEeesSEwWVvpAaeENhbBHnJjNnZvaAAaVQqQqPpgbBGlukAiIaRFpPfrxXaMsBcCaAbBIiPpbOojUutTbhHXcCrZzoOZzRJjmgGMeGgeNnyYmyYdwWDMVklLKrRvVvjJrtTuUWbBUcCuDdlLyoOYyYmMjRrsVcCPpjniSsOoCcgXCcfNnwWFFVvfnWzZkLlgGwWKdDSsGEhHWsAaSZEUXxLlyYMmdDMmrRupPeAaCcWwzwDQqiIqQfVvQHhwWbTobBsSZXUuXxbsSyFtTjGgSkBbnNKGgtWyYEwWevAaEeVMmDdQqOUuiIbBhHqvVQHAgJjGaAjJbBonHwYyUpPnNuJgGjSsTmImMZuFfmPpsSTccCCiIpfiIFPHhTtPpKkUTlwWLtnNSsdRrXxKkAMqQoOrZYywWzOoqQNFfYyjJnNjJZYyvEeVzfjJZzVVvFdDYQqysSfNwkKWrRdTiAWwahHqcCQRrrbTtJNXxnZmmMJjJjgwFmRrRrAaquUKkXTUuDdbtTBkKmMqQlLEeSsGtlTtoOHhSdDKMmsLlPpgjJGvVSoOPpGggGwWhJaASszZaAPpUqeEVacCAfQqiqpPSstEDdxkKaAxXXenleGguflLRDdrqQwWDdVdeEjRrqHhQuAaOoUgBzZAFfajyJjJXxvVvKrNnplGgpPXiIHhxBlHhHtThLNnnNzZbLCYycSdDsCceuzEIielLCcZiUuEqQtTqQiIIioODXxxXdUlLUiIPZhXFfqQzTtZaomMeEvVDBboOdOxXaAWzsRkyYgSqatTAQsOoGCQqcEedDKMNtXxmuUMgdDGpPTgGWwuUmMncCmslCaUuAcLSrMSwAakZzpzZMmeXQlLwLlWAaBqQNnhoOrCcxXLlRMRrKOorQiwWIlOAaoBBbsSTtbqnMmYcChHUYlRkKqQHkaxpPriIoOPpXvhiYyRrqQqQIHUxXjMmmMrRxcnNeAXUpNnPIipoQqOZWweEXQqDvVSsdtOZzogaAaAUqjAaJhFFYykeEKXWwxQJjfFWzGgugGTJXGgKkgpPGSWwSsPiFpMmPvVfIwHhWpelXxLdDqQwWxXiIVrqyYLOfYyFtOoWHhwDJjGgqkZzKPpsyIQqHXxhNniQUuqcCzZzyaJjvVqgGnDVvnGgKkEevVIxXNniVvTndDQhHpPqmpPMqdpdDWwRrPeEiEeOBboZzZZiIVvzzzZhHIDAaMmXxNnQNRrhHtiLsSCDMjJqQmfFPplIiRreEMPKkpNnzZGgPRrQqpBbDdWtHdDqQhzSLlsZMffSsFFmukKbsSQRrqadDXUuxAXYiIyWwpuUgGHpGgAaPHhXxKklLhfFKzZIikPLlxXjJHhtjJTHhNnNnxMfexkKqQsStpEehJjhvVIRrTtkKNvqQVfFAKdvkCuUKkcOJmTtUqQlLtRKkrXjJoOxLKaAhHTttTkYgsSGyBbXxQqpjdjxFfYyXJDFfVvadkSuUmqSshHQqAaBbAaUxXuXxtNnEeaoOyXxYbBkCcgGFNnPhnNHTnNYyoOxXFBuOowWUbCaAthxfFXjJhHHCcYdQvVOkCLlLlcoOEpPGgLleqfwWFQTTtNRluULrntNdyYJDdyYDdaYpPjrvMoOpIitTPaAqQssaUuLlAkKCcSRHcefCSsOoevVrREvVcdwWwWabBADkKgdTIgGiteTtWtbBTwCeEJkIQkKlLMIlLiGgpTiInaAvOkLDvAaFAdDaXzZxwWuUOnzZlLEcCemzZwVvyEePpYWuUbIitOoeETyNndDYOoyiIYmMIoOeFfEVviWyYwUutQqQzQYyYypuQqkKrRLlDrZKkXOLsSeMmrRFfipPJjnfFLfFSLqQCcwMmKkWuUmSarRAsruXpSsPJMmDdPTtpTtpcCcZzCmMVbBlLXxAamMmjuABbauUddfFmMWUiIfEhHEeseETjpPOoHJZruAaUtLrRlgMmodLlyYOoVvuUDdnNSkuUgGwIKKkYyjsPpmJKJjCcFHhfUYyFfeyfRrJmMjFTthqvBfFdocCnFfRcCgGYyBbrRrEqaAsUulLSKMRrOokKRrKkKlLJWIjJiwdDWwcCGgIixGJrRRrAGgaqOogghHGrRKIcEegdJjDGVKWwfFkxQqmeEMCcXIivmMtYyTGuWtTlRyJjYrXxRrZtTFfzLKHhCAacgGuRrAajbpPBTBbtQqrTtOoeEJjXLmMyYeElbBZzlMwIAaOoUuKkiXGghHxWUiVuvVUvvVrwVaEeOghHGEeHhoAwBIUpAagUuuUGfFqQRNnjJhPeEjKkGDdgIZzKpLlaoOKgGALlaFfLDCcLeECOUubBotgGiINnTjJcEBbelIiTlLeEXmAaMxuUtMzZmYyuRrpPOojJcPxIiXEeaAYKkyEeeEBjJwWExfFXejtTJNVqQoOtTfFvRSsrQEjCDdgGcSsgGJXUuxhHlqQthxXkuytTYUKVsIiwWSNPpnBbZHhzFQqflzZMmGgkcOcCGYyEeWwhHDdgANVvNnBbVLeEmMiFpPfLlKksIMRrmUIiKQqkIiZzuTXeExQqSrFqQPpFbByYTuUlMmThHrEFLZzlZnNzfIsdYhJjHWcCRxXEeSueXpPjyYmMnrRNxXrZzmMPpIiiInNRIhHDpPQqdVxXutTUJLYOodrRDxXmlLEgGeMyDVvdikGgbBRriRrdOouvVdXxRvIlLPpwKsSMmHlLhfvVJmMOiRxXjJaAjJrxAaYyEezZDznSssSQqjlsSWwCMAamiIcqKzEzZZzeBbTESsTnqfFprRPZnNGuUmSfFIkQPqQHhjJpqqQQRfyoLLllnPkcKkSXxTtsxXCgPPsSppNnPdAeQqBbvVcZDdOiMmyqJBiIQTklLKPpsbBGgMntTLlNfFTtWwtPsSppzZSjJsnNTAZOxHRrkKvHUutIsEeJjSiBETCctyvVrUrRRAUuXxarNnuIQqYJjwVsSIiZzdTsnmCcQNnTAHhatHhnkKcYDdyCKbByYkGgYywWuuUQLlqxmIZziJJjLAlgGLacXxYyCKwfFxXxXWCchHkKkpPdDgaALlOqUuFfLlcSsqUuPTtEeMWwMnNmJjNnvKkAaiIKhtjJIaAFfrjJQqrRtTRxvVxXWuUPIiTtpAwWeEaKkwlgGLuUIuUjMgGlwWtTFCdDcxXIbdFCcIwEeWjJiCxXTNzZvVdbvVbBBkKCWwFgGfcRAarmuUNRrGgfVbmEeMHhyLlsOefFEQDaAxXXZmMztKqQlLktTYyLlnNrlLVvRTuUPiIHhXuUagGulVvoVeZztbBUuAKTzZtjJkgZxqQXOqQoFrRzaAGgBbPpVsScCMDdpPGgmEeGIWKkrRnNXxwVoOvPpCcbBZziaAEFfEuUeERreYqeEYgyYQBbqGKknNLzOopPCtcCRrAulLhTtuqQnNtTaAFkWdDMmEepPdDJjssfXtTzwaAZiIzYnlLZzvHhbBUpOEXxeyYyYvVIiwWITgjLlJNnXxfFdEeKbBUuZztTRAafFrkPtfFcCTtTdDhHNEzxXZeeurDdRMzZQqmrvVLlRvKkQaApPlLWwLDdEeOoEZtKkTWYSsFfypPbBqnNmnnNNUuMeEGaAgKEekFfEBbGZzvVmMEegKPpkYyzJjRsAaSoqFcCjFxyAajJYRrCYyXIicCXxvqQVEJKqQBbkYpPyjeEhrrRYEeJwpPWlVvLwWRrAzTKzQqxjJPNsSMmYybqQiUXuUhHFyYfbBKCcksSiIxucCvzYGVvjSPpnzYuuUAaUWwYyuEeUFfzFcqSsjYyBbgmqQMWwkKeEdDsyCgCcGWwRrZzIgGiLrVvtYyDXgNfGgPpnNbBDIiqjJQdzZgMJaMJsSGgjVviINuPIZzJCcooOlLqnNQTtOXxrRyTgGkKABbRrUukKrRsdDSGdPEsSepDoceAaEgwWWwhfVvoSsOeEtZiIMkKpPYqQVDoOdvEetTyMmnNjJwVPbytXxjJTyYFTXxtzKzZkbBhIZOnEeYyywWEeYeESUusudDpQqNiInPAlDdkJlOBbaAqQMFfbZzGgTtBieZpPQqEeoQMMhAakSsKHAakKWUuGoOGgKkgoEehHeEQqlLOVvWwPkHNEBOVLpPAamRTtDdrSswWMWwEeqQxRrXeEPLgLQeZyYzERlHhPqmMQOtIvVwaNncJjuUnNzZOqQWRrQqsgGRrSOmCSEOKSHhseHcHhKkCzLXpRrPrIKHhtmQKHnNVxXOMlFdDkcCKTtQVHhyjJUVZNFflLngGgGuUpPkKkrMXxXnerREhbHhpGFyudwvzaAZKkBbALDYpPSHhsjXwqOodDwfFWQWrtWoMmOwKyYiVqQvPpPubHfFUuYcKYyiIqOSsPpovQQSsoEAwWUuvekKueEAAaUuKXxNEeWgGwcbBCKXxhHQAaFQqWmgrUAJjlNAtTanIZbBDdiIzZggTDdnNJjtCtTIpzQqgMFfCcaAmcChiFfUuHhMYBbymMnuMmUqrRFROEeoEeJjhZzahHJjlFYygGAPtmmMnNdDRrZEzOoZaAaFYpHhPzZyAavbBzZPtrFKtJyYjnYyXWwxZzNdDTNOohHFfquzDdZhkKHUCchsSJYQMmDJjuMmCZzbBcoiwWIiIHJjtTtFfSsHxXhTVvIiaUuhAadyOOeEoWDdeXxoOpSsPEZzCcsSipmSLyKksuUSJTonNOXxGVpPczEebQqkKoKOoXdDxKOnaAECcAxXAGgsWwSaZUwWxcCXuKkwehHXxUuUadDAFHORrohfuaMmASsEjcKTDdDdKNgGksYylLsmMnqeXxPxXceEPpCIlLANqQyYEensSTZiImMzSVJBhHBBbBbKktTJIJMmYyGgSsayJYJxkqdDFfQKPpMmWwXjSprRkKDdnIcCbgGBikgUucCGnSCcsfFJLEDKlAagaJjAjrqQRJZzTGlTtjJfFrHWwhRfqRwXxAaPpWcMmZuULZhHzpPmureEjSsJSJjnNnNcoOCOnNdDEeJjBEHwWcCEzwEkhHAPpnNjPpAYykxVlLlLvWwXXPpxGgmMxXOoFfyYPpPpzgGiBuUYgjYyJVvVvtSMYhAJcgGZXemdRCgmXxMFdDpPzZIvQqBYybVxIiXtVPvHxXBGCcuUgbbeERbBPriIWwRYyMEepPmJAawkKaRyoIiOfZGncCrIifqQKkJOojfHbBlLhFyVvPaGgwyYBFXxpPnNuUNnhSsbBlLpPEMmFffFeHPmdDNnMpwWfjpPLyNnqcuWXzOoZtTzZxjJLlUuXxGgQqVEeFBJjoxfFXeLlMmHCcLGbBqvswbnaZoOzCcVvCGXABBbziITmMUutwWKjJfUuuUMwWaAlLiNsSnAaCcEhHmMHhJOoKkjeIrIEUuyFbiaAIWUuwDeEFrRTtFfLoFTtDSsjUuWwWuUcykKTdvBbFyYfVuBSsbUaAdbBDrYBWwbyVNnGNneEgYONnrRIdmVbOxhWhBbuUoOaBAsbhbBvFfVzLlhOLloZzuMmomtTMiSsiZuUoOBkKbPJYyjISsSshHgxXkaAAaKBDdfbBFfFKfuUsYyiqQXxItEeBFdDhHnNyEevHHFPpvVZzLDdlDHhkKnNqgXwWbBZzPJLlKkMJjjJWDdmMWwwKkFDdjSsoEeRzZeBZzNuHhdOoDJdDDWwqIfFiSsXxKxWmMwXqQjJNpjXRMmsnaArJjCcsSpPlLCclXxdpmMmMbBwPpMbBteCcDTeljbfiIGKkbtcVvCTrRfFrnNmrRHTtXxLVFnTtCcCUTKVcCpPVvwWvxXoXxOvaUAagCcTtQzZFcRrAaAxpPxXhHkKJSsugGlgGLbgVvVKkYRrJjlCQqaHKkeEhHIyixUuMmkKqnNczOgyYexbcCBIibBRWkBbKoXDFPcSseaAKkfbBEeAEeHhqQylLCcHhPpEJxXRrSHhUZzzYyTtnNZzEBxmtTtdtTIiDgoORgGuBbDgeksSzbBPsSPWMmITtFfiKkmjUujJlLJMEcsnNNnIwWJYyxWPpSCcsGgCgMbWrRwRrOdDwWHcChGgoIiBDxFfzFAafnuUzmMjJmMgGInNievVEKMmIGgiuwWUhcAaOeGnCcLUulaAXMmxCctKXxkXRrUowVrYyRlLzlpPyYZUojMYyqhkKHzeMmEMdDmrRAJjDdRYlKkPpaREehHxHhtTLjJIilcJjoZzOEIWwrRDdimoOMsSRJCwWMmMmmIiMmMNNnnSNgGThHtnnNmWwvNMOWOdDonjcCcROoOoFPxUPpHhsSuXSvVsMmVvtTJZWGJjDHIkJZzzZoOTNnaCghyYxgZfnNJDdKUNnBPbBplwNeXxbFfcYPRjJrtTpLXxebBEhNnhHzFUEeriXxZZAogGVvzhbBHIECcBbVvZzDMmKgcCDcCdLxDdcCXlwQqjJWVaknNmMdDLJjlIHhLnsSaAJjrrSpbBPwIMZzYeuUUuBHhbwGQqHhZvfFVvVgGsCUuuHhweNRrqipDIidWbBwDddDZYhHlxKfQwUugVLMDdxXfFPpmhiVeWwrlJLlYyvzPpzVfFvZOogmYXpaAPruUAfoPOomFfRXxjtqnfFNOSsoXBXxLlNnaANnbylLxZkRXvgGZziIZyYpmMPxXaAuOoTtVgaAEeGPGgLlzzGgHhSnNsYxtpPTpvxXkHUuoOVjuUJvMmLlbraglLfFqEezWZzuUfFwkhJjBbhgWwewZzWECWREdDmOoJjwWJjxaAXkTQLlqOofCqQetTOgWxXwvVGtAaesSETyFfYxXoxtkKwxXWCcTdKiIkYyDlFEefFyYMPaPpPCcklLXkKnNoOlAdJOSUuYyrRrThHBbqLMxbBhfFOoHCUucmMeXxdDjnuJcCgiInNrfFvVQsSpPAaAmbBMdadRidDYyRrfZzdbBDLlSopPJjXyRiIMCIMojJXxIxeGtiyYKkioldDdDFTbutTUSsKlLmMXxksSLlrJIaKkOoSNnoOUbucyAjeCcXCctTanNnNAWDjJDNndGgVFsCuUcSwWfBpJjxXBbWYyzZvyhUuHYvhHuUftTFCDRSXyYxseEMmnNZQqOYymXxEeyYbRzaIywWxXSsgsSGtaLlNrRDzwWZdAanZzqQpMmJrqPFElTUutJjwzZlwSaAmzZZrRzoSbBsOCpmMPccnNuUOocMYMnNOTtcLlCPpwWyqQeNGgnMmEEPAaKkZRhHrsSjYyJgiIUtLGgTpgTSQGgqZlowWOLzvzkcCrDjIXxkdDKaAEeElIiCTtcIGMmbBVvIjJJeSkuoBPpzZbphHTxXtoGqScBbElLheXxrREeromMORGgyALXxqjkKJnNSDdNnKlLLlkotgLEelPpmSsMqmDdTtVeEvWLFfloOJiIiTtzWwJkiIKrRrRrlLQqOUxsSXxoOlLoOTvbBVBUulLPLlAxIiqQFzZPpDmMdVvoqdDqQNjJnQwlLFfTtWkIZziKfFhgYueEUjJuZlOrRrHhoOxlLOoXpPRooqxXrRQSsOvzZjhHdyYDWwJTYytwWuUXxMbBmAiInNFQqQKtXxRKUuBkgTtGKxoOcCEsctTCPwWpHhbBfiXDpPIiTtdyYFfwWxdnpPqFTPFfpGQZzJetTPUuplLTtwlLtKkaxMiIfMmOoPrLlfFVJFfPCcloOLSsrRejBbSjJsJUuEHLluvVrHAAadiIgIiaAGqTtxDJfoTBbtCcVvbnmMNPpBSsaeUSLhHjSsEvlLVvVjAaLzZYywUDdWNnwcCKkSyYKuULUDdnsRrSrRNuoTtdDSsprRtTTuUPxNCcBbzZrXVMmQqbBkJjMMmmKCTcmwWpPQhHetTjJUucCUHoPpRLlhHrkIWwWRrhbBftzZTmMFPGgnNuVvrFfxXRciqESsYkKyYymPpMeZzucbBSgGwWvVeLlBbzFfhbiILPpxrRrRQqVdGgjJGxXGgmMLlnNJjqnTtNYyvQrxXRZzOVusGCcPmMpgSDdkuoOxcBbChvrSsYfHcChDdFPUzZnNiWeqQvVkcCKEwzZIbIeELlqWDdPtgGjMmPpFfVLlvZzGFfMOmJjIiykcCFfdRrdDDEOTtoDeWwHhdFfDpsSPzZlawWAVvjNEeyHsSRzzJRUurjPpFiWwnfFsoeETbYbBRiIrOoIiOEqQKSwJhHhHEwWncCPpntMmQKkqmccCwvcCcRBcCzNyMmvOoVvjJLYyloOVNnMjGgyAVpPxXqQgrvVxsCbdDBcGQIipPNDdspQNnqPaARrpnsScCTrRXZKsVbBeDkKdZQtTqhpGvVLDidDEnNeydTVcfLlFImWYQZhhawojJjJQORrousSVwfFPenAaAaPpkgGUuKMmAaNpceEVGKkXxXePjTUgLnNlGGgLNnqpNimMvVOtkAlLayYkUuKrRxTBbAatBkKdDknNKkMmnUgOBbooOMmMeEpjvLlSsIqxLlJjZzUKkTtYyAawuUNEJuUjfLkINVuCArRQqkKJZKTRDhkpPIiBtTCvVHAahcLJjaxBbeEBFYSQqxHhdCUlLAmiaAjLlaAJgLlimMITtFfjZYzuDdoPlLIwWaAIipqsxXBAaVvbjJuUGgFXYyadsBbSYXeIYyeEvVijYAQIiOozZcgGBbcvkBLluURVvAdfzWhHwPbRrvVjKkBdrRDguHkKoOAZVPUDdIYrTLlQPpqsSNZcSsdAWziFfLlqQwWmaAMmMQBZzbUpMVvmoiIsyNeGgkKeEFvVrRMVBhHCcMcljMQkPbLzZwJASMmHpPtTHcBbYPpgGsxXZzUuZlkBbKjJgYyDPpSXxghHCuUGpPggfyYOoLnBVvzTIrGchotThHJRlFBvgghHGXxzPLlpHeLgiIiIVgNnGnYWwySDdpSsMglLzZGkavMPDdBbGUrKkaARuqjJQJwWjbBgPpqQQuoaAOnAduDqHhQdUtOoGsSYynEpLlQqbBMmgyrUDMmnKpPkNdTtLacDgGAaxZqQNnOoAKdFfFHTVBafFAbptTFfOoRLihKkccLEiPLAZFCcYfFyImQLlqZcEVveHMDddnMTwWsKwxRnNYWwyugQqGwWPpIKbBPpkjRrSOoExVvJjNPBodDUukKTwhfFpNnWXxIilyHhzxBGOoYPpDdDayXxzRrZkbaPAhqQzZHfgkkKQBrhJjroHfSsCcNiIcCFjUwWPpsSjJVGMhaALVvlHEeyYuUNnLwWDEeIPfFpvVAPpagGJIihGgaCcFfAzZIZDeNnEdzMmUkyVvWcCGwQEYygKkGNukwWymMYcWqQSrRWEIEeYyEJjMmRreZctbAavVECphHXUuxYtoOTHDdhIiWcCrMmRwvVDdAirRCTVsUuSDvVJwWjMmdkKFfwWuoOYduBdaLVyYbfoLyYlEPpFjCmOoMlLMwWmyJjmMVOafFDIBbLoDdbBLlIiUwWuLxvVXlnNkDzZnNcZhHrRMmzllzNnqTeEmvpPCcWBklLDdrqQoUXxZmMxDfeicCUNqmVvGDoOevBUWwusVyRhGgOocCLQDdqhzgNuUwWaAyqFFLLzZZfbBNnFzISjyYQqWwWwhiIHIiJOoYyskQDpPtTBAaMbRbYyBuUrBSZzJYbqCtpAaPTcAqQawDdZcyOxXzHhzZSssbBdPdRUuBeEbrsRarzkLBQqIYoOpPNnbhfFHcGvVgSsShHYynYyKkiIwWHhNGNPtBkKWbyzlIZzoVvwWiIVvbBRrOPVvNnwWpurIyHYHhPpyfHCMmIiJrrRRjNnSstmRXOoOoSBlJjlrIivNrRngPpGNEVvSLpUvVhHXxfFnNPpzpPZtNAoOYyIOoJjQpJjPiIhcCmMXDdYyYgFkZEIidoOdDmNnJlXiIhnDdQqtWjAIiIbBIiiIgGWLlGoOKruFfUTtTtutTUdQqXOAaMQqmEeGsTKkaArTZoWwOsPwWpVvJjFiumhHAaNSsbBzZblLIfFVviBUMmYskCsSMeEbsGgGYyQqgSgGrsSSmMshKkHRKkVvvzwBwjcCJEPqNvsSCRwuCcUHhcSsOMGPJNCcnMmjHhNnRrtTiQqnNZqtmzZMiNNNnnoHCcuZzgogxXgNnGGgBbUuGPpYpHhnNPsDhCcTNqcCKGhPqQSjkgxFfXwUlCcDdozZCXasRuUQGArgOxXGTtznNZxXgoGRFqQmMKkxjJAwMcTtCUkyYKQPpSspUnNAazZLlnNyWwYKkueMBoOmxUuiISsdDbBDVMwWmnRroiqQBIzjCZDdSsVviNIsQqMmHcRrMzpHhCcPdbDXsuFTPjPpqYuUkKsSfFtTUuuicCiIIULAaiFVBsSmQqDkBHhbUdIiBjyWwDtJjcMwWzbBZhgGrvVMJjJfnNenNulLByaAYcZzgGpkXeZziSQqEnsSGgnNNCgYyPqQvWwOoVcCTiuUrROZEkJjGvVkDdzZbaUWnLppPKyYTtkPRrgYYLfiJZNnzYTbroXKbFwWfXGgUnNJpmMPvoOmMbZzbBkNyvmMVtkKTxXEyOBrEeRbMsSmIiMmdDpgFfGPDbBdmMWwpPPVBzZbKfdlLQqrRlHnoXEeVvaAxXJjxPvOtTwWiWxNrRnXYGgyYzZUxLtTIVTtHsiUmaMmeEAaRluiIUfFvpPvhMXxRrVBMmhHblLtiKDKkgaApPcCNwzWvfFeEeHhWMmwvjAaWwoeLlEgbXxQZAFsxXSfHfFkrLDAaIjJvGuUgBbVEffFjnkwLFjxgGcCVTOotjJeEnVvZRrzkIeEaAIiVBbvLewmMWEcRxXaAtyYtcCyYNRrwWBwWbCchsSzZtbBlLhHhLBblbBemOdCVmMvTtWwcCDdBSXGsOvVZoFNtrRuCbBKkfFcUfxkVvVOalvbBVLduULlpnNhgUMmPpRrulLlLHWoYwWLkVbBHfFKUuAaqhwBIibhHIiOpgGkDDdqQZEscxoOfFXCSiIezZPUMmPMtTebqQMHhzujJtTBnNKjogGsyszcMPIoOvAaSTcORXOTtoOhQaqZzWlWwNzZIiPEfYmRIiUuDdbMsSpPDIwWjJeyYEryYzekKEGgsjUxXuYbTtYVIVJFfojkYDdyaAxoOusYkKErmxaWzCzhHZcLkXAlCjJcRrJAZGgzaeEfPyYQTWbBwuUSXOoFfuSVBbcCviUuxitTSokKuUHXYKGZzPpjHhbXECbBVvcDyVlIqnCcEeyfIoOiHYzSWwqSWwsMztHWwbQcCnbBoKuDlyYPpgRVUayYAFWwfbKnNkrRUukIruuYyyYsSoOUbaABCJjZbDdBbnuzzZgmzAaWfrFLiISVvsCNQNjaAUEKkegGuDyYdgGWwJWnxWJtlBLqQlJCOodNnQCVsTNyYpPJjntetlMmBbkvVcCDdQyjJqQHknTtNsxXWKkoIiOfTXyYvoOVprXWifFIwWwWwLrKEeksZztTOHHhZMKbBZmMJjuTqNwRrWohHOzrBbXxHjZzJhMFpwpAaAahLluUlLHRTtDrcCRbZzmeELrRiIldDEmeEIuUjYjJtTtTIrOoRisSIqQpclLOdDoOoftTrxWlMLtzszUuZPpMIiQqrRmgGgWXnNVvFAUNKhHkWCcAFAtTucCRCrRZPOoYOTOhDJjVvhrRkTtKHzjEQfMKScLlYyWsSwfQFZzfspPVgGbTZKUunNIlRoMmDZbBiManLlIHhibrCsHKeElqKkXrmMCJFUrRcCgNMaTDRNnNVCTjcGgCHeytNnSPlPKkpwshXTbFhZzJKAjMmJgwTfpPkkKKxXRrZzRfzZzZvVflLqQLFfBoObgSsUumMUZzdDormXRrpPiaOFUunZoxsSWwXOQTthHkVBxhHttTCchBmgLlGTpPsbhKDgWRrwGnsGgQqnIixjQqOoJlLlmtTkKmGfFlLtHtTZzhHMmiSeERfGpchHhHYyXrnJAnaALeEEeyTgGdbxXGPpmMCMgPqsSVvphfSNnsFAfCckKDvVDddtTkKZTwhmLBbhHNnlWgVrpSEeNjHhChzZmxPpUuubBUPpEeZzoclVvuApPaCMmQQGgYyVvQSoObrbVvTSCcOoHtTgaMQWnNPcFfteGCOCcgGocSBABbSswWtqwLLloEeDdQoOkDdKpPxFfFzZIiDTtfLlQZzvqQViWthVaFYyDzcsSUuNAaqQeKXoAAYVIiBmfFZSubBUgXyWdYyweEeGgevsgEeGMgKiIMMmIimVirRxXUuaQleRrpWwmCMPFBbvNpZzjnNJVvTADyylErReLZzfrcxNnXebCcEeiIRrxroORPcHdDQexXwRVvrzZrRqQTtAWwaZzMmWmCcFIsSAzQFfyEkkKeYicCPpWwIfFkKSXzvbNBbwWvVOonPpBNnLlRIYQqWAwvWwVWZzatkKxmJPpsZqQLXvKkViQqzZApPCcMCcRroOxXXiIUTtuxOEeoEwWYRbBTtwjINvlLcyYCVXHuUhvJkLIilzGllWgbBWgBmMpHCcVpwWPsKLlUuOiIFcCfowoepsetTaXxmMFfNnNuvEXrRlLHpCjSCnoOJjLcClXvdLnXxHWTtKGrxXbBlvpPVriIxmMcGgrQoONnnIYxGbBVRrOooOvyzWwdyGgPpMHfiIRrFtaASrRsYYsSJHhjUulGsFSgGaAdDsQqiIfSDxvVXdXxXxgTIPyYeNAwjvVhbBHNSsAanzMmZFfcCnXxJzZjCUUuJxISeTyYaAthUuOkquTtrHFfcXjxYygtTWzNnZuGgAZVUYNXxnAaFfBbxKkgwWuUqQGWwzIiBrRqQMmEjgUZRryvKkVFkltTLJjlOEeFfXNwWnLYytJjTXxkpPrBttiIYyIYsSdDmMtTKrfofFOyUuLllhUuHqIQiHhImXxaAHzZJlcQxXqxGQnFOofzZNxXdtTFfwKZBbVNAnXxNEekeqQPcjxkhHgTtXxQmGgmGrPCKjJUuxDLlNuspIUVWJJjLgfYsPokKOIWwcCbWKkqgFsSBcCKavVooFpLlPxXpgkPEStTsFxLlHhXnBbErSsqQRHpMvVmbDprsgtTGSZzRIihPZhHzZdbwpPDDddEkeELlKsNnudTTQqnrqUumFZNUIiDsKdikKIFLWnapPGmUHBbWKkjJHOohhHCnNcdDdQqIJjigRVifPtyYnfLlqQFNLlDFMJJjjVtOQtTUuGgqoqXxQWzkmscIwbBNnocZYyYWmMqQZTNCcnSsfwZzaImMhTOocGgCtvcwWXBuQquFCbZeEJjqQVdDsSerLhZzRJjyOoYDdWKkVvBgQqGhGgbBcCZAUupxOSuAPcCypPYpgGavYEfFlDHeXugrrBTrnOoNqQBNFiRrHhmHgQyrRhHDdYrlsSKNnnHhNxWwumgRTwWtMmgqQjiqQBIQqVvirKUgryMmYCLloiarLOxJTSuSsTgjJGfAdyCcwCFzLcMfFCcxTtIXhyYQqHxauCeEcUWFikIiOLDdlGdQNnqDoOywWdDYYyVvThHJjHhLhlLBbsRrPxhTYpPmMmMyMmlWfWoWWsAkmMNnkNyYoWSCYAWwEJdHOoGsVRfFOoqJEejQiIVvrlzzZhwgGWTPxUuEyYOoIRAariPpXTMIFlLiiIWJjEkcCKejZzJZYwUuwFfWhEQHuWwGHhKgyoOkFYybyYBfjJGBbgTcjOGZRrzgoBMeWNlIFNGbPptvVTruvJJoOQEeIiAzLhHyYmGgMIiCctTODtTdaLZdDZsIiSSsaEzNjmjouTVDVUuvmiWwkYyuUPIEeHTtrOJjYtTutfTtiITBEupPSsUNnZzkOUTtZzeUuvVVvExZRHhahKkgGcCcCtCNnTZzzQdUkjJRfFiIrKVVvvHVvfFcngiVKkiSsSTmRQfFwPpRrgIpgOoGGLdOoDlwWLlLEGbSsqykKzYyRLlIintpPcCYaAkPHwWhpvzKdBKOTzZDdyrRpPVvWwbcdhuKqFKGgkKkHpPGSsgsMmgiIIaACcERAaBbkoyWwnLvchHfeoUNeRrMeScCFhBLFZzcCfcwwWXmMDwYztHdDUuWwYzuUHmYzrXMurRYBarRFdDvvUVSdyYBkgGdDkemMgGJPilLlGoqRrRrLWwOowLOAJhROozHhZNitTtTkKITsQXtnXxRMmooFIWlAiTtkwzkNngRGxXvVXwWABGgnAaNBbqQJgbGSsbEGVvgSsfFvVBXeEIGtRlLrGIiKvvoOtklaAfjdDxogMmxXTNTvxAauiIUzsSqQOEejNvVnjJkcCSjtTBeZdDfFKicYukKqQJjUyWgXXxZSOThHtdDuQtezXxTGfiIFfEcmiIHhMfVkXeEgGgAaGgeUUuAyYzZaaYfFylETvVtHheLsFpPfGgSaOnNYHhNnyYsbAnNjWRCcrcGQnQqYuvHgGJgaABNTSNuUdyYMximDahuTdDwWQXxVxyYUIWMtApCczxIAlLOwKpPTtJXAavfFiZbBnrqnNhHqjJmUEHfFFYyJPySQEQVvwWhqQEmMewJNbnzQNlVvLPQHpwLwWlJWShFasowWdFtCDduiIaAizEJWwKpPHhFkKKoVvVDSsYytAeEtjUpJXmdkhHKceBbWXopxSJLaOomQWmMlZIizNEeEpPeGuhHoKcrleTZQquOoUmMqknNKkdDRfFfdDmMFtJbJjfSgGhHGBLeEJjlvlcCLVrhqVvBvVbzqPpyYxWwHJZwdDdXxOBtZtgGTzTgGaqJXsSVIimWFfmKNMOphpPHShlDBjsSsVouBBVFcGeEzRrRSsrZFBvVMpSRUYCjJjmGuUbOfuzyHhkbBGgkfFcdXZHmMWBbRgNmTbBnleEkdfFwAzzMkEguUuUXrtYgGNnyxbBylLYwbBEjDduUJEeSHYyXLxRIsSVMxXmtJqOozbVxgUEeAmMHhasmxXelNqQQqCuPygHtssoDdCcAsSTaBbqPYyEBbeqQnqQNYewzZpOJTaAtTvoXFaYytTAQYIdqQgbpdDDZFFUmevRKkQqraJjxZkKZjKWwlLQqAkKLliIeCxXcfFIizZEjhHGsiKtMpWiIwPQwbJWvVxmVGgvWwfFWeEaAEeDdDankdeEDJaAjSscChHrRLAsNBfMmFYLllovDNZJluUCcAmMMmTDdtvVvXxIiFavNnozzNOocChHnFpkAZCfAcdNgAMnIiNoGoGKqyYPpsQkeEEkYmMLlWZzkMmdOoKHyYYvVUCobYhcCwEeUuOoWVvTtqdDciKktTILHKGLQMmIHhCVwHhFCcjGocpbcCuqQUTtqQDsoBXxLJevKkCZHYcMqfFrMhHYynolQbBVFfvEeUuAbNEendwfFUrUHhiIKkAiIyYRrauRqtsGmMcPIGjEecpPODWVddWSswKZzNAINyYyYpCTrbRGEfhOtZXuUxlLMmzTsHhiImMqQopTtKkVPLEyWwNnAoOQJTPpgniVpJUumMNIntorHhnNacXxeezEqHTPpUrOfapExqBlFdGzNnkKVVXxKWInNLfHzZXSyHhvqDJzbTkKPQehLpxKlLJOooTtuaAUOjCcNcCPUuztDzYyZyHlsSYHnkykzZKlsBbrMSnieBbEXSbCUQtetBbTVlQqLtoJjQqTtHeEcsViIkpjYLnfFwWyYkKwvVkBGaHVedAWwXoCKPpIpBsxaAXSTEezZvputBSPpSQqzDdaYDiGKnNiaoqQayYQZzEQPVnNKpPSsXmbfwOsDPxUuuRgBmMDdsxbcCcCoOGZdhHffrRFFniXSCcFfsxrRAweMDEiIhHULXpxXMmfroaWwAWwUugGCfaYLqIidDdDKePpqgJItuQqUVSOoYdDPhVRDdrwWxWwAaPSzOoTmUaMKkBHGgdppmMpztLlLFUuRyfaAZAipMhHmJwqQYmkKMvaALnYyAIKMseESmdtyYFquUwWcCkxpuddOmBbwWMOnnKkAzLuUlHeyVdpJjPDdcZqmEUugsRrIcTTpRrzZPjJjJjtKVskDMmCcGgPpoSsBHeEjIYOoCcwLlcCDdBbWWBIefhHrRHFfOoeEhDdRBKbBWwkjFIiIlPnqfwFPjDdJgAztTsmhHGyaUuTtGYfAStcjWwkXGkLlKjxAJiMmGgmHbjJbyYyTyYttTYewWSKTtNnuUoYyKzZsqAFIiIXBRqSDbBdKkxBckKHTtYjocCOSGgsDqfyYiIJjFhHlLQKLGaAeWwsAHqvxPuXnNekKsWVaAVeIiLlccZtTzcCzCErPoHOohOdmMeElOYyNnvVpauWVvwfbBdTAUuCcLEyyWlLeucwFeLIRrffXxdDrRLRrpPSFfxgGOogGiIYGSqtKVQqpPkYitCHqIibBEbWwBDdEeoOLleAaCLlcjSvJOoDFODrRdsQVvqBEMmrmYqFLlXxKfMUbapScjPpbuvlLrAahXgGVvViKkepPosAxXLSsXcWyYSVxRXxreEXowZDzXxUJjLUOeyQMmzZAHhMAamNjyYXIixJUrRkKbeOnOGDAXfoOhQqzKfQqFjzPPJUWYNqWCBbckkuuHoSswxXWkOouMmUPNEXwxOxXJXwNbQqOoBkBbvzZMmuUUuBbqVulLCmytsgGaASkdFfDToQqOsLlMWwZCcHheiIuUkRWgpMvVmMgGYyLLkeBxOoaAEgcCqnNQYyQkkKTtySsYfFtxXbjlNsSoOpItBlBblgFfOoxrPdeyzOXsGgplLbBMfhtTeCcEMHhmMmAayYjJfFmMdIisRUGPpHDdhqoZzMjdDwVYNnDdGTtgyxyNnppPPkKJsUuYSTrRhfFHFfzxMTnnlLunKurRUVvwOoWCtTmfFwsLYUhHQquyaQTtFfrnFYWbckSqQsYklJKkjULBRzZrblEgrmMQdaCSxPwOzgmUhSmjJMcEZdlUpRgdLlCcXxewWlTtLEXIYoOyyYiddamchnGspRxtaANnPEpFfxoDmMoIiRymYkvVWwKyTtMVQRrgGRUDduyRGtTFuEYckVvaAsSmFfMxdDXvBedDdCHuMmRkiGHHMmhhhjlUuJtTEUuYQqUOnOMaasSdniILOorsSTQpPqugxICdpaCezBzJoOUujnNeQqwtlGPpHhKkgDAPfYyDDQvvVeEHjrOoRVOcCmuNnUGEeEeoZztjBbgKQqXxDAadTtIiJTtjhpUNaDeGsGbBsCChiIoOVqQLlzPOomMwFkKfrRYftmMTRnqQYsSyySjjWbzxqPsRrSNtqQaUtIiugGUTlLPMPLlqTqwpPWbGHrRTtAaGKkEeMDWRCBRrRrFaAfjGqCqQRrcQgoUuOJjOogTbKkGgdJvVaAjDyTtCIXZzxrIPQlMRrSeEBeEbhHsAaJRmWwMEeViiIXxYIRUuriGseDoldvcNoXfOSsslkTexBbniIcBpXmLWqbFqQCzNmMnZXuglWwvAUrWwffFUuFOUuIVhvbLxTYgzJjdkZnrRDClUpQqNZzYKkRjuLvVNwlkMKSIfjJejsFjuZWwIgTYHHhgqYyIbBuVbGszvyYVfCcIRtlLvVqQDdIgwjIGXxbyiKBbXkMzothtkKYyCcEuPEeLlmIiCcdOvHCPxXpjJzhHsJapSTauUJjfLSgsSrjhHhfjjJdDezAabmYyhHTkuOTkWhMmloSBaoYyYNEmtTHgUtpRrgCRxhcyYoOgGdzcBhiIiVekdYkUbqsXLiekmgnLODwPpwhwMmwfoWXxvvVAbCCciHdDHBbDerveysGHFvfFVhopPykoOjHIErKvrKCCDdLCizZIlLchLYnJKZsSxyYeEoPHhglLSQqQKkqsoOOokZzKVhtcCTUcLlCEaBQocjhEQwWqzZtWTtUpQqPjsSMfpjJAHfFhToOoOqtCBbJSdFdDlLfSsSsmemMaAXVIIiSLlqQOdMSXHhuUMbBIsgVvGcCzhHnNJjhZHgownefCXmMRrpEPTfWwOvLdDvUunNKpmFfiIMslEgPCcEjJeOoHTtYDZpPzAtTLeEJjlBVvpIXzpYyPuUajLXRmLWWLUFfrtQqFFUwlLNndcUNjhQkUZdnNgQlAaLyYkFFqoEdgwWDzZdbKsMYDlxXMpVEXuUFfsPpGgKARQFeEYzZnMEPOYyjJCcGPkKGfFjUOmMoHrWwwWqtTkKtTEePHNvMmVdTyYjJyJjsceuUNJEegFVrRvvLkvVxXEEstTwUuwgGwPdwsMYGoAcMqfTjqwUKbMxYyXFRNGgnrfmBkuWUuQJtwWFQmsJjSCaOgylLmSEMmgGeWDpWnGXxgNaAWtTWtTSeDCcdYyeKUulNniGgIVDpWwPdfGjNnKkqQnuUECSYtDPLkKlcCpnhpKkDdQRhuJgcCpgpPoTfFtpemeENykKMmfqrakVvLvVWVvwIilSyYxevPmLdymjCcJGXxgSqTtQkBGgGDeOQfIiwWfKTyfFYtqsSGDzuPpKqHJnAaudAaDCDdDWuCcCcfdDfTRulcCwvWwVwlqUuQMrxlJSsAVyYvJjZxiPnNbadyqQkVZzvKhphHGpPeLSPkVRcCrBblVoDdFRFfyYrtpePZzxcFECcNWOGhzEeHmMZSstTaASimxsWwmDoWwsAarRivxAaCcEMFfDsjylLYcTQDdtaPFmHheEKktToOJuUuIdDiwTeHJuUCOqbAbBvVeHhusSHxXvoOmMGpOXQqzkjqdDQNylHvVlvVcMmckOoRVpHhkKPkReihJKYDdbBOHfkKhgQBbqSYEVREdoOrRhhPpIcBjJacCmMsSVxXOowOFWWHWWdolcCNGMKEIlxSQBuKyDRrAaKSsEvIHbCZDCHXrcGPTuGwWhHhMenyOAbsbBOdDlLLvVHwKtoUKtMBTtZEuUgGRrJFHJRGslFAtnNsPAjSGgZXxchVgGoDZzMpUelLaATHTOcCZmKxkIYQqBgiJWGiTriFmMZSgBvUiQGhytIgaAFfGiGiBbzUJfjJSJdDMmEiIFiskmKzZLWnvVlUJrynPuGgLcdNzKDZIiGytXlBVXxHvjJinNxXoyYSEesRuaVLGUoOlLkKxzLlZDdcqQfBQiIwlMxbBPbCNLlXEtKLSHhoBNwWFfVvnuUbFyYxBbvVOnUuCVDSsLOdiIESgsSKkyIvkKkEeKrwWVvjRrmfFLqpikKRicDdCcYLlEeBaiIAdDuUtGJbeEEecrwdmKkgTSstNxXUunoOhgBQthtbBTHgGQpmpFftTuVvATnpJjQXTtnjJxvVXyYFiIfcRgGrCNZBwJsSJsYNrFjJYyyoOAaWSspZvHcvVcSgSgEdAnuPHkGJTDdMFfjJmOfFtWwTgMovPpAaJGghVNnqddFpUuadLqQhvKkVHTbMmBWEZbZEcAPDciXnNGoOUtRlNDbBVvGgAAKkmoNLlkKouyejZzLJHOogEeIhHYyKrUhcDOoEbVQqKCyeUIifgiJjIEerYrqkKBsSsSbvgGgGQqWwVvYrOdOXPepTXeErPSgNHCMANnDDxeUsfFSuZzEHhjJDGrPuLjJDzeCkKsHuMGZoWpOoXscADqRGeuLWwaAKyKCBwJjyjJfNRqAMmlSRrWMcMmkNUcCeENrRNGgtmXZsSzrRZJNsvVhOoaAHSnjtsySjYXYiIyvSsWuUJmOQgBburQqSIinNoODAUuayEqQWwCcRJjfBYyMpPmbFrlgGkvVaAKLeYHFmPSxoZYEDGgpCcRXGLLvvVVbTiDWwPyjJNnYsSnLJBTMmfFvVtIiTvVKqGevVrBwIFfiWbRXbEKlcClmPKSskEeGwDdrQqKEzmStKTYMciuUIUvQVKnWxjfFoXWxenpnNfFKWwNnOhUlLUKKwQnywUwWuujpPppZJkZHFjJUuxadgoNoYyEBunakKEeqpyYPYuUEYqQqQyouCcluZdnNzjJWOnNRrvswCdDxlaSOECcIZzvxRrHRAaaAVUsSBJlLCsPABuSRrsmFQqUugGkqZzQfQyMRDdFbHhBfebBbYySDPpdoRreEfdjVsEoOeJQhCcgGcTIIiyvVKpPvkTQPpsgyXsclLBgcCGbCrRlFFiIFfRrijQuUqJnNBbgGlcCEfFfWCRrUxXnswPhHpWSQqNEwIiYYelatDFUuUjJAKkPKkoPHhpCGgBbcLfFDpRecZkKCCbtTBEvvwSExUpXeEeEVCcOoQhaSEglkqUuQdJyhCbuyYUXsQrbLlxiJjfaQSkOksJjEyYXMmxjJBBhMXxIjzZaUGguXJgxoOKJCSZzsTsoOdDaFyOogAYgVvMqQSZaIiGpRrfWtTFQNpLiCcIkDdKifJKkbrCcAaHGTtGgsSfFghMKkjJmFfPiLlIpFfFEiaAbwRrycCiJhLlbOdKFfSvkyYTAacCVvJtcYyUuCZztCiSGGmMNngpPeMTtQzCDvYEhrRZPpaNNooDkKDQqUPXKEQqeQfTDkiaNlVNnyqQWjPIazFYXxrlLiIfvVlTZBbPPqHhuUQPZzDCcsTtSsShbRrmAuMfWWwDrRdRrwFtZspXvHpqcCQyIiDdFfsvTijGQEktTRrQlyAFcXqCcQBbxzZTcCtORFPeECcwWxluedmFfEWaINhHDzIigEeuUBXSbGrUUudDXpdSoiIWFqQBMxkvpUuqeqkKAqtTQOgGAIyYkgIdyXxAIPpifFZsmMsblLTUmMfFJjPVIitbPikcRrOxXxaDEvhAgbfFKWmMNQqeUuElyJPKvSTtChBbOeETNnvETzZqaAucBsxIaANuuUUsuUmRoIvRrDdiIViRDdrOSLiIkuUKYKNhyLhYkKLldmMGZzMbBmcfFCvXxJjVAaNngTZpRzZrZznJFffFjkXkBzZbKtTPlLbBlHEqptBZjdQVIiCcJjYsxhhHSsFlifFwkvvcCZggGZzDfLgGBbbQXePAFoRDduthQePpZdDEECnNAWwROTNinjaAPvINGXxdDYytjqFfaYTtelpvPKkOrRZzSoHwWFiIegmMrBRhHtcPniankXxDdPpDDvZlLzvVuUwsSdopPCJgipvVsSEeCdDgSTQfiSueEUsIFuWPpDunNUiIBafFbBkKbBqLONrXxRmRCcXxfFcCDdQmCyhzEeRrcxQqIiLlXWwVEjlbOPpSdZLlzVvTtBPCOgJCcfWqQvcPpQqihJjHPpMViIQqvrjXxJRmqxXlgLlkJjhlCQHOoyBLlOcuyQqjUuJhksGAaHhgSNnDyYKEewMmeEkKyKePpKqXxSySsYQLlrRLlKXkxXKkKKkxkkrRgOgOqQmaGnDCaFczvVaKPfZcCmFfYyMoeEwWOZNnlLDdqQnNyRPprJjXxYgGahHAOVAfVYyaLjzndVOLybnSoOmMalcCKNkKAdPpwMQqXwCcjBVvWcCqmTkKkIwWSgQqvMmVwWbBBGgbJazdDZBbqQkTtJzCcUuzXuUAVLlEMuffzHhdJjdDIZzivVPBGDiQqyqGgYyfxOVtjoPWEyCcpDdxXGghPpHQAtaOBPpbHhSSThGYpUcnLEYyMSuZzGXvBZzZQGgjTvvVsSirXlxhspPeqQWwsSWXOoTRxuycCYmVKkKkvMAaWDdwUfKkzZFGMmeKmZZaWDKLNtMnGKtTkrwmFmMfMGgOohzZzxDCKmMKYZUFoBgMJNncyursPZzmbAafgfFRrCfhYyyYHgfFGbBxXvbbWwUqdDlLQOvBbSJpuUPbdLHsFfPaAomEenkMwmMUuMZzqQvfUufFFEexjBGUugbQAboxXDWzjhXQCcZjJAuUaEelLQHRbOogvyYVsFBjTdDrKQztELVvRUuCkOvVTtUgnLwrRqMAljrcClLRHhsXPOcCxwECLlDPpMxjvVfFPpPuJHhTaTpPkKvVWwdjJvYyTHhgbBGtOkfRrkjeZIUDdcTfuUIiDOSAfGgHswjBbLlxXIiWPBoObhqpWwnRrqZNBnjWHqeqsMTtmTJjtYpjfwWheuMmSsZzMsSQEeuUQRNzIzZVxjkWoNnaiXZPJjaTmwiuoOIiuUXvqLKklBbtUHwWAdMIXUuJjmAaDUunstYynbGjhUuEeVUyNqgsSZzkquUQKCAawJaQgGqBSyoAdDZzgGAKMmkuEHhGtzZTxfFUYhHyoPeEpOlQqLuKvFCWweoiIOeEFgtZETqYUXxuyESsgGeUoszkKmZzMxGwSsCIkzEeEuUbJsKxuUfTtFBbJjXLlJoZmMaAXxXsjJSVtntMmGOXJDdFeELPpKtTTVNnmMVhkKnNHkFfsSgTgixdCcDWwbQWwsSqeBgPOoPppBGjKkbaFfxblLBgyqQYpqQPrGKZyYWeEUuKIaIiLwifOuwWUOrNTxkKqStnrHjaolWlQiIOgZdDzhHLIiIpjEsRrSXxMmWwKKbDsvOouVdDVflrRLAbyUmLloOMmsSxRZyMhZyBbhTZMmfHhFyWdBbxWClbHoOdfFyYzZIiDfeEsWpPqQKkwoOEmERdDrnyYLluOEFIsSiCVlpPNJjYSsOKreyYimMOoGyYShfQknNUHDCBlLsSNnYzZSskKUutyYoBbsSkbDkZVjJKwWyaATVvNrZYQBgelWyYiHNnhMmIwgPiGWiAgGaIqrMtsIvOoIpSsPGXMmxTtpuUfErzBbZyYReFPNChHhMrVvRLlmuDdpPDqZtTtVvcTcCHArzXMmuoKebtTtFTNnUyowWRhiprRXxKiITaAtIMdvtUOJkKHuUhMJnkKZeAzKkzlzZPpAofFTtlwWZaXxAaqjjVUuURSsFRrfBiIgqGgaAHhQHhnfiLoOnwEmqQbPpwWJCtZzWwKYGkQqgUAaWwhqAaeHWyIiOozWCcwwxXIHhfimtxrReKkFfSsXptFfFfGRrgHZLvSghzZDjkPpKepPaysScswOnYyKmMKaSwwOwFfFlLwLZzYmrRMyttTHXpSHEelyuUYzgGZtKkoOxXgDdoKIfHgGhwOoAkBJjbKRWcCEewoOriqQrRXmClZfcWYDaFsStUdDstjXoCclRgGAIOcRGukRbImMJBbGvyYVrbBGRrKoOPpkSsMwWUXkLRIiqnNOogGjJWwGhMIfnbRtbRRGwWJjVvUxEhdLeyVxXUsvVoXtTPazcCHWwbwKkrHleERKkEvzoOBcfWVvwUUboOvVxCVHzZdDibrRBALlQqIiWwWFtzwyFfeEzMmCONnWEeiCSMKqQZwIiTvmtDdQqTjJfHhjJZzdWwTpuUFmMIyYvAarGDOopPwhHhuMgANwljJfAazqQEeZDCckpPSdunzfMQZzRNttDtTUxXAmMauUQqNnpPSEqQFuGgUfeecCrReEbBWBDLlGBbguUzWwpHPdBCcPhUubBeNtTpPfbBiILlepKWwGUuPJjfOOAktTbyyTtYYfWtTwGdjJDQKkwiIBHdrRDhirRpSyFGljyYbHhBwvzuUZuiPSUndXgKeEPpmMrRkWwpPoORyYrzZGkcpRIigMMqGKXOoOoJCpfFEKanOovzdDkWDqdFfFfDMmgDdQqDSsBbdXCLjlLhAaGgMqiQeEhrRHLYFwWRkyZzXxiLldwWDTTbCcRKtKkcCMmmMjJmMFeEfTlxoYyVvLKfYxXkKRrzuGJebZtTsSXyBbuvzuUaUwtTGvVXJxCmMhRTtUQXxmMdXxPpDKorRzZxXHDdwqKAakQWVvEsiXxXjucNJWanEpkpVNnvDjKkJrcCRdLlKksSPKityWwYSsaAGgLyyaATqHhQhmYDZAaYRrSsgXkKpPGgyigpPGNNcJjCnkKqbQqBlLRCXRLnNRgkYyaAvVwbBwWwWhNluCFfJjcCcpPUDVVvxNchHsJhHcPhxeTCcaAQqtlLVRrLDdlmJjixXQqEeIMUneEAESPtTGgHhEOWHhkzbBZnHhNSvhDsSdPbBbuUGwFfGRvVrsSwLLcCgZKXxyYjZzVxUuniLlJWryeKIhHrnNRikTpPtvWeyYEEewVbBqQkKSsKkmaIRrvVxlzZzKkgGSsSjMmMXHhTdDlLwynNirFfOooOTtHhVZWwxsyEJjFkKfKeYqZaifMwBbDdWEqqQhCpXRLlrBEeECeERFXxYYdatQqPnVfpmzZcMPELqioOIAIvwKlLWwkvVWbYylBbLBSgGsFfksMsSYymCcSGmSmoOMqQVkKEjJKkEfFWDwwWYxJjGszJjMbvyMmayYeaOxnNkKWwTtkUuEAanCZuUdfAyYDdvuUHTwIYZzgnrRNGMmVvzZHhyqFFfdRrgGfXqQqOlWQTaxXbsbBnLlXxNgETGgCpwqmkwWKgGAGULlpBbPuPphtTsMmtBRlLBAasMmqtTIiVvqqJjYycfFULCOQqokKOSsaAWwgiIGXMgGBbNnkrgGRKHCccJnkKTtstTPRuUvGwMHPpLlWtzFfFaHSsPdDQpGmcVvgBDnNtYlNajNRxHhvVhHCiIPgFrsIozcCZOtTVvCchTRraARrCcgMMLXNKkSNdkHBmMStEeMWwGgbHSsTXbcCvKGgRrqzNXxwWfBboAIpPxMqYyfFXqQxQROaAuLjJiIlwWVgGvHhKSTiItnNsZSszkGBblFwWZsSzaAFrnVvNGhHgFTttLlWiIpPXxGgGaOouUVvkjHfBtSsxVvHSWAaLpCcjJfsSFsWwTHhYEhJtcvcCncCrdtAmnGcCBbuIifjJjcmMJjRxQLXxkzZhSAaczZRBzZNAmGgSSssIUuzHhdOcCrLmMaAikztBvpjJGgPwaAWSkKqFCsKkkLlZzmnUuNCcJjOoFqOoeJZTtdHotAaocCzZypzoOYycrUMmafaylQqLxXYwKkJnNjmjJRrMnuaKkfxwEeGSZYyTlmLwRrUuXhDdHRFCPiIiPpyJiBbMekKMGgBgUusSGsSdrcCPWPfmRZfFnJjzhHZQsStUiLlPpIzuQqUaAkmQqzhbBoeESqEeQxXDdgGfFGnNghPKkpHbBRuUlWIiwsSxTtRPxtFyYwSAapPKhaAXxZzYsSqKkKLuUdDTEWwCcSWwfkKtAaTXxFvcqDcHhjbxXLTjIiwXNwjJpRrBbPjJjOoJnJjqeEnIiuQqUcoOtTlfRRrFAawZkKMGZUNBzcURiKoOsSKkBdDuvrGLZAazdUkOvJjuUVNqhHBhTYyZSsmUuSsQoOrBbRsWwhHZyhWwIijJFYNyiIYQieELbkKBdDnaANvYJjdRrCcQqJjeEexBJQqnNgFiuHhUIfkKrRkCcyxhwWnNOiIxXZzsIXVkKvUuIlQlLmMqtTtTLsUxYystTpPGgtqpFjCiIcLaxKlcCZFfwAJjXUuMQOoaRrkKAqReLlySzZUXKJOFWwfjNnviIivyxXFfBcCyHhJSZynNeEZzYRidmBHhrMycCeEZzFVvegGPpHhkuUcCdDKpNnUunLwCcQAqHoxroCtLlsVYSsyipmHhCZSHhYSTtaAOJlLkmjvVJZzlLMbTtyYUuUnNZmSsLlBEmXxBbUupGgupCczYydKPovVsStAaTWIiHQkhvKlyDdOtTwhKkGHAkKaszZJjSPDTtDdAovKXFTnfGyYgZzOzoSuUgxsaAbjJcGgWwDwWojJMMmEbBHHhTfFHnTThuUrRHrClpNnPwWiKBHNGgnhbNvXJfldDWKuPpUtTfFNJFeidlLlRKAhHagGhaSsGDdgrReEzqBUuGVvOnNyYJAapZzPVEVwZWncCFyYfvVGdkrRITNnvmHVaAVLqQkKoOrAMuQqSsIShvigaAGlXgGuuUrHhRnNeEywISsoVpONhLDaAFkXnNxHhEeviRrtTIDdpGgKkRroYxXuURretCcvlLVTHhsYySbBYnKBVwpVvTtKkrRFfPWBbKkjCcuxqQBkxORBtyjIFlyySsAmMwWTtaUuGlYyNwurRiIAaAcCBKgKezoFfqfuUnNvVjJVvpPUuFQItpGceabBAszZQqIVJjvVvvVEAaxKtTtuUTMmPmMpPXIixCbUEFPpxXjPpEemRHVvMmmCaADdTdYoOJUubDuKQHhqVvdOoMbKkvaAmDdsSYyMfIlxGgXflLFfsCcSFZzjJuxXeEUdDFwWfyQPBbSsMmVPpvpJptfUSxIidBDZmChMmSyYDdinPpIwWLRrlzTWwsStrRuUcqQJjJZibEeIAavVGgFfOlsZzpPSLNRrNnoXxOvdXMbmiIEQqICcixXPVvFfqeEumFfWaaBxXiFfIbAOoXyYZzfwWboOBzZayYgJnNjqrSRrMmjJAxDdcOLyYNnuWeKkrREGKiIVvJWwoOsWwoOpHgkQntbBHdSIiyOgGRrNnGUhVvCcOnITdDQNnzfFvMmVImMpMmgdyYDmoCZkKzYykKDdYyWrcVvdDVnQpehHWRrbhHWZLlVELleKkBzZmoOiIciIKIOoiFfStTyunEXxeMUIiIfSFfztRtSkKgeEoxwWDRkgwiBbaJwMmTXxNHxUuLjmOoCgGdUuDcMMzWwZDezKflZzvVLvVGKkyxXujJoOrGgRUxdDKUVvukHqiaBbgGqQnTumRraABbkKMPluUsOonNKkeOoGgeEAanCcVIiRLLbstTetiITEeExrMTcvVhFjJhTtYutTUiRURKkriLCcBbQCcqZYBwbHVvRrHhhcWwCoOTuGgQqhHxXUpkKnWwgCiIcsCBybBcCiEeblBbKZujJURAxXrSDpDRrNnSZoYzhHbBZCwRrWwWzWSsQByzCcZjiIDdMmsqQVvKIiDrRrRdkmMmbhHBbdMmqKJjVviZqQplLzZVvoOPzliXqQxIlrRWwffAaQYFfnGZnaANHFfYdDylHoOrRhDdHrYIivSFfZzTtbbBcCVMFfmEdWwgANnaMQnOdDCcoLlhHCcuIBbIiEFdIimMXzuaAcJjSsCORKxXbwVjJMtQDdLlhHAaZLLZzCdKOlidAovYiImMVvcYyJfezZOFBvlADbUlLXxsSoODuUyXxuUrRaAUXfFxvtcILVeEvcClqQaRrnNyPcJjeBTCQuUqPfSsFpziUuewswCKUneqWgwYygGrRDdhHYKrrRRuiatlLTHhAHRrjidlmgvuYyJfnnNFsShORHUuRbqKGlLiISsFxAasSXapAvVBKsSbBYkKAjGgJjJdygbnNXNnZaAUuHhYwWLlLtTlEeTtLmEeMjJwPHWtOkKzZbpnXesJtTiUuUrXWkSfFkKGgttTmUujJNEeDpPmhEoOlLdDCcWweCYyPvVWwpzMtTiQFfqfzalpEeMmIiIuUeDvVQqqQdllLCCHIlrOlLoFffFIiPQqBWCcwbvthDdpywWYPEefDkacoOCDdzuUKkXdoOkKCAlqQXxuRYfFnNGPexXCcNgwWTDaAaNUwWqRrpmfFVUuGgOovrReEVAyYKcCmPsSsNtTacCANQqnvuYyUwDkKdFfWGQqlmMhDdHELloOhQqjPpoOJZGVDdbfFfLrjFfOHCahHrTtRAgrRRiIiNnEetZbsSNoOmrRMlFGsSLlCcoOlGGSsggLcGqQzZsdMmYybBGjJLzfZzZhHzFbBcCEefFaAlLSSvIiVsyCNnhhsTQRjwWJvAaVrqtTtaeEzZjWlBpKoOeVvEqmhHvVvVJLCVdpPmMDvcCSsmbvmfqQoOEnYDdSOPHpPALQqlahuqFMmfIZwaDCznzZeAaEuUvVuULlvVtaNnAtTXdcCVvDxVvRTtyiupvTtzavtTVhfLIvVFfpPilFUGqQfFbJOoVvwGgUuWBkKpZFDvVjJarbUuKVCCqoOHcChayJgGExRriIqPpxXQPpyiIcCpPDAxfPpxMmXSQUuPNnRriNnlLpOUSsZySszvVJGIMOhHoamMmMucuUDMReEwWYujJUeEymMrVvYbBypPmXsBbyfevVEbXAlbBhHhIihHnNxYyXHhNnHbKmMHdCDdDdlLDdcrtkzjVvbBacUvfFniwHhuUmtTMWKpkKrTtFfBbRPlFuUJjJjjJTthHenWuXGgQiHhAxXaVJxXPIimGLlNEnuTtVvNNnyYkKKbXdwqCcQzZcCkKoOWKTovrRIieVvEVVvInPQDdZzlgGutKwWkJpPpExgvCPuUEpWvvVfFsSUhHqptTPOyybBYYBbWyYAHHzqywMkKKRrkiCvtQYyqDDdYPpKkIdDlLdgIiGlgPLlHOocCzEvSkgGzxtJSsBbjNPSngGpPqiIgSuUMmXHgGhRSFfssSGvaNnYJmQqvVvVvVrYzZyYeEyooOYyORYnqQZbnNrCVWCwWMBbTNhIiqQTtHIiiIzZZzNfEcCooOOFfgGeFejWskeYyoyBAatiIOSsSsSNIfZVUuvZqQoOrhYnzFtNfFnTaAfZJLxXEdOoCcfNnFDdxXeDdKYIIiWPpwiSwWVvsMoKkmgFkKaAfCcJTpIWwiHhwQkWwKHhiBLlvMmPbBVTtvTtuUpeEhHVuHhpyvQqVRnNEaAeVHXUXDdxfFfyYnNmGgLliIIiMdiIDFdDKWwAaDCcdUvVvoqjJAaVQgmMjwWJfFDoOvVvXfFVvlEeBbRrBHZEsCUoOVvQICIiUpAajJHwbBiEeKOzGgKkbBUxXzZYyjJxXuZhuRrEvVqnNnNqQMCivIiEDdeVNnItcdDvxRrMmRnXVvKkOopttTSsRrPPpRrOlkZfFznuUniINPBbpNsYyuWRZzrlJhHzZenNJliIgGsrRCctTaAZzuEAkKPxXpXUfFuHhQqxOVUVvuvBbFrRqQjRYyrdeEeEZzcCXbBwWapPAQsSDMnNmahRUhFiIfbxrRXBivVIQqHhpzZRrjGgvRpFtTmXcCPprRATWwcCWEjqgtfQNDIFhHBbtTEebLlBSeRrwWXbkUurTkqfiIaOoVXxLzUyWwGHkDdSrHUuhRdKkDsCclLhHKgGOfhHmMXaLlpbtXxXxXuoDsSdsFflLSRGOogrRjYyfFrnEeDdNnNaoOPpHhARtTRrZfRrXxGnNgFITHxXhtXxjMmwyYJjJjWwMQGTYyOsQlagGAaYEHezZCPKkpsQgIiOfFPOqQEeUKsjJEVvMmuUjigiGgjJFfjJLAMmaQSsqbBFfEonNOBbcCxXoURruVvjJNnPpOqQoTgGtOebBelLiZzJdRKZqQVHhstGsSXxPtkKjJlRHhrTsSvVusSGiIzpeYKkcFhHcCfPpiICxXyYomysQWwqZnNpOyYogGPEezUuSmlLCZzFfVWwvCLlMsXxlLWLWwWcCLelLaAfsSYyRreEUuNnpQRjPARrdDTYiAnNfFZrBoOMHhozOoAardctcCTcCuUCcVVEeSGgswvVPbvdwxEJiIaYCUJjBusMmAijRJjBCcHhtjcCJfLePpzZXxEjJCcyYODdIHvVhITgWwEeEXiOiILlmsSnIiNCcZziFfcBbBbTtmrYdDXxrRxwUujJWwWOsZzfarRAFIiFJjIrDyYnIiNADmhHMaqRgGGUujUNJEAabBLlRrXKkmlQQqtRsCciIJjoeEHhjDPpeEaQqxXLxKldDiIiILpkXxKApTtcCmDEeTtdfLoQqOXoOZzOoYyLlEcFNnztTXxrpPRZTEetQOoqtxXCcKUusSJjMerwceEGFfHHKikKIaVvLlPpAIiloPpOuULZQLlIiOoGgGAqQRBUuMmAsSavVeEhKVSsPXydDGgZZpvUzVCMmcxrKmMzXYWEewWwxrRhHQBbTJKkpDdKkiIPcqQCdDNnrMpPXsSsSEexUCcjJRrDduLlpOFZzSscvVUuBbiOoIyYkKCcFfCoOjJaRYyxyMNnGHhAahHFZzdjJDfUUNCcnuBbuUfFuIiZVaTtAjiILRvVEsSEeAavCCccIrRHPplvGWqFkzJjAaMmZtoOwWTKkXLuUyzPIwWwWvBbVLlYwWyQlLjJeEnEfFWUcVOfFdDOoYyxXovShRwWrHzzZJjgWCcPpnNEymcXxPpCLliWsDdRRjbBWMmzLlVvkKZUGguwJcdDstTSCNliXxKAvmMGkdeilLZKkOoOazrwWRNnzRrIRcCzYyZufZDdUuaCcAHlyCBEnaAZzIimMWhHqQyYLtTbDCcdukuxXUjFzWwUuARraGXxXHrVvlAaLRGgGTtcKkAteEjBbKAaiQqhdeEJSsjgwzrRHhcDdCjLlMmWwpfvVrCJNwocEeCoOmnRrVMjJscjraAtJjlLTeAaoFfOCgGuUqHvVhVvQoOhHuUMmmMXrALpPKkyraZXvVxQmdDJObBFfeExXuUuIiVntTNyYvgGwCcWuUzxXLZVuUvfFvnNKkBbcCWGguUmMBbSsOuxTLlVSsvHsSBbsShNmMAagFfaAETtoCHoEemMOkZNZtTqQdDFfXdNcCnJjmOoqQBnNbGFfFfCcgiIGSsxXcvVwrcCRsSoOXUiIujUuibBSCekKwpWwpcCEeZXxKEsSGsSEedlLUrJjfCchoOHuUFAMmDdaGAakKTjJMyYkpPKXbjJesoOKkSZuBbsWwjMmeZzYMmazZFEMmCpfJwhvVHWjmMyYSKksdxSsNnSsOwrdDXEGebBoOXxXxEnNuUCJjcoOskVvmMBbKSoXBbxZCQBbFfXIYhHqOovVQiXxiIvaArtJjTdDMmRVqQiIKkpPXcCnNxhGgAcLyphHPiMmITsSHhAaLltyCcYKkvlLaAGGgiTtvVIIiBURrjXxNnqfkKFQXaCVvfBbqGuAVkttTujJrmMpPzZRcNfvlhfFMRBgFtEeTBJNnyYLEFTtftdETLTtlmqQWHhPmMfFFRrzZfDyiIYUujJwWLRNSEeWwrBbBbOhHMmoxeEJPfFnoAaWidDIwOkQdoOjUnUubEJjUuEeVveEtTrOJJjfCcmjphHGqQgxFgGfqPpQGAaQnNkKdUufUunNlLhyYhVzsSZYYyfbOuUpPoTSzZFBbkDCcdCcbYyYykKgxXGGiJxXBbxXjrREepbBzGgIzZIEeOoOUtTHIiZHBSabAyLlYHwHkKIiEeJjXoreERBUcCnNuLxXlvMDirRoyPpvxXRtTDtjJvVYCdDwlLJdxXfPpOVvoOPplfBbsSdBhHfAaYYMYyRrzZmdDyeiXxREeZzmrRFqQkKkIHhibBYyZbanNyYxgcfFALlNuUBWpQqPeESVvWvVdDFfwDdkKxrRXXKkEerRaAxVhAuUaHQglhEqQOWuUwLlSsblLpPfJjvfEeFHhycCYcCqQdDfyYFIiwUCFUAajJufQYlJPpbPpCcLvVlAauUWEebBAphHBbhHYFRgGNgrRzgGRrFYrUuAWNndDjtTpoOtyYTrxXzZBYypPmMBbhVQqpQGaAgAxXaYycCqvTizLlZfGcrePmMpkKEDMJjBeiIEuEedDUuDdAaUbzIiZEDdxzmLlLlMCjgGaHymsTgGGenNEjJyLlbIZaMmAAamZzzZMKaJHhjCcsSJaduUDKeuUUuWZehebossSaAjzZJsSRQqUMlzpEepPHhPLlCLRrlzZrQNnHhEpPkyYKegGFoOmzZMLgtnNGcCLkdelpPiIjomMoOOwWNEexXGgKpqQPNlLKzZkPXxskKJMmYyjyeEjCfFcxXEjJnFfNWjDdJOoweYAjiMAdCcDZYyzlLavVtTmjlLbCcuUbmMjvoOYDdIZziysyYuUkKeIRriEgQqGtaipmMQqOtTpPoEVmMXxxXvQNEeLZdDzlJjbBroOsdHhkKDSRVvdxXDSDdSKnfFkWNnwtkCcCQqKkJjJuULlWeEzpPYyaeEeNuUoKkuILliUkkYyOBEGWwLlVYyvgeZRrCmMdogGOxXDvgMmtmMFfjYlVvzZulLbBAaUPpsMbBPIwhHfFoKkrPpRzZaAYDHAhOJjUFfeEuUoOdqVvpPEeyjMmHQnKkMmQqyYmMtTkjWwJEexXVHhvfRTGjcCJksSKgpVDuwWUdlLOXxoBbKkLRZLlzrlfAeWuUxXPsSpqQWzZwpPnNaAZzZzSsFeXxEfwzjCcxXJMTpaftTaAXxGgLgGHDtTvVhHdmMhlLAHrOofQTtNmIlLHGZPiuUcDdGGRrCIicziLatTUuubBbBzZFfjJRGMwfqoOknLlkaOoUBbEakKlLAVabBkKexXOqQqqVhHgGQMmJjkOoCdDaNnAyiPpIHZzhhXxBchHCUpPpIMmkuUXjJxtThyoOYHTRBlLwoJjOtsqQQqOoiISTdDWvXUuGuUgrRxLlVbxrRFfJiCcIqQSsyLldlyoOIifFYaVWDjJgGYyUYfiIgPBUuHNxmJjCccCLlcCMdDmRKbBZzzvujJYiIvGgMmpPZkKzbBAaWwqkbBBmMuUqQbYyKfLmovTtWwtUuThkqMhFeCcEnNfbBHMygjJGYmbBTkiRlLxlZSJjshEzZQqkALlkKIiaoNnCcdDeWwDvVlkKLJdDjdcCcCscMiIoHRrhsEzZeSmMwNnomDdMEeCAWiToAapLrXxqllLBbuUGlJjplvDdobenhKdzZDpyUuYwmDdmqOySsYWwzEIfbBFbAaBpPmZnpPtyYTNzhOoHoLjbBKLqQanNRaArUrgGLlJjRNozWwiZvBbVUusSzHsSBbjJwWsSZfYBpbBSsvWhHbBoMmCcpfFPWwOWsjJnNOoSTtfFwmzTFHVNZznvXxSTtsmMGCOjgpgYyGeEPGuUtiITJTBbFftgSsTtatYjoOipUnmLlGgAqQjyYRrJIFfpTtaAPxXSsiqQjzpIiPsSZTyYtudDdDUmVvLlNnKUTtukXhHsSxGFIiGiIgfeEFnuUlLGxdZzTRldDWwcYSGRtTKkcCjJrBbJQCfWpPpPwZjJyMmdDmgGMReELlHhrZNLldDsCcdDoOJgyZNnVHhBDdbIBnHhZFZzfzeEDxXbBfFdpXZlLktZaZXxzvOkQZzqhHEeEecCKUuaAdKkcCDoVWwGNnKkKkNngpwiIWPjqQRFfryRjJAaHrRegGoxXOxkoOKczZJnNqQbsJjSBjvVXfdDfFJfnNQfFIkKipPOZziIrZeEevVeEPpQyiIYwiIzmpPMMmmiIMqQeTtZzWGgwlxXqIrRiHhVUPpKkEOoEMmewWDdplLPpPnpwWKjJkvVAtTaqQWwpmMOoPDnNGtioIinNPuVNNnoOaiIAyWDDdGgHhRrdZVvxFqQnNPpkWwKSSkNaAdDnKwKfMyYbBmnNUHUaTOoIgNnGyDdYpPitTcZlyQyeiIRrSsZzEeNniwWIgvZiIfxXzGasZzaASTEIipEeERrHbBlLbBhrRePvOWwVvLpVDDMBbmddvPUAGgxpxdJbUuBjSsRLlrqzZwXxsSWoSwBbzZWrRVvYBvFnMFpbBiIPfGgrRNnmMDNXxSsnOonwWZzKkJjDdLGgltcSsfzZvVDGMmgBiWwfLlLmJiCcVvVgpPGvYtOoTyWwXMuUmLliznNZPpgGTsSaAHkVWjJIcCiwrhHRmpKTtkQCVvQoGmMbBIiuUuUdDhHvMmVljDdMkKcCXUsIiSNqBbMoAYyabrRBOIiNuEeULtTlbBNGgnQqStDvFOofWwWiIyiHhiIRYebTzZhVvEHUuheULlOmMmMobBMvVZzEelLmucCVrRhXozaKklLXxtPXxYyvVLlDdbBTnNqQiIXoOxmStqbjQyYYIozGgyYmMCndDeSsENjJEaBYyaAbzZDlLpCcoOQqSsGKCcNnpNvVYblLBygGlLosQqSdDOKFfkOJjYFrtTaAqKVvEeiMZzmsFfFfMgzQNbBRrtfFCcfhHFTtgGetZiqQIkQLJNXCcxKpUuPPTtpkUutTsSXxfFZOodnSsNXIoVvjBbbBBbWjJzZxyYXwFaAkWlVvbBLhHSsiVaxXAQqJjNnXxfFQqrRrDUDAaIKICclYygGjlxXLvjJyYiJxEUuUmMgGnNsrrRkuUKwZqQzheEHyDqQSioOIimMvrRVPpnNFfeAaRtHhLtGgwWMmRrwWfrlLEIieYyIiRfRstUukKHhHZzhoOGWwgDuUrRdjJoLldmMyYDFfOUuiSdDyYIlgyYGQqQXxuPpHPpBbhUfFqvQqnHOohaoCGgKLvHTKEhHekPpZzLGgCcdFhHfDeqnbNRXxrnnNCcJjjJBDduUKkYybpCUmMWwYyddDGqQfFgWXDdxpPTtDWgqLlQGwdwlDrRHhEepPdOXxokZJcHhCjGEegzAJjzZmMSsPkiJsSSoOsSsYypHGuUgRrrPuibcCOoISsiWXxvdDWRINhHnYyuUQqVvnCcNTdDtuSsmLLrRlgjMmJgGGxRdgGQCcRrqlxMmXLNnDWpPwxXJyYBbUkhHCchGgbBHlBbLOowKkMmUgEeCiaAkcCDWwddPpPpFfDxXZzGaAjJQjgXvVXcCxqQGVvnNgqQnlLNjaAPppPkmBxYyzZuHdDhUXbkJjypPYQIiIiddDDBbSwWsegYyJjGYyFmMfBCcbXxNQqLlbbBBODBgGwWFfoOXlLxhPpHMmbyYbnXxNWgGwutTUVkeEKQHYrREukjMSJiJjIBbkiRrWxTtXKsDOlLGTRmMDXxdPqQpzjhWwJWwUutuUXxJjJBbjStTeyYgGQqFGguBbSBbsJjwDDUJMvDbBGjJxXgfGgqQFdzZPjxQqUmMzZQqpPnNOoOoOpPZzOooKkNnCcaARUCcuhHMLOPpollWwcCskKlQqNtTLlIwWEzXxJoOjZloRrxzRdfFUEePGgMmqZRrqeETtTJfFjmMBVvzZcCIiWwZhbBHFfzMPpLlcwWuUCcHKkhVvbgGBCNofVTwvVWtdlgGksSGgKKUuoVNkKtRrWwPmfFCcWwqwWiIzXxZifFKjQqiIfVvFiDdIcufFUiIZzlLEGgbBDbBTteEGFEzZCcboaAqQAajJoKkzZOOrReEBCheErIsSiZzdDSmiIVvVRkKEUuesSGbBgJyAtWwTjDnKkkKWwPpKJjofQqFvVqEwWyYeDvqQVyTZzcftJjqFeEfQbBphXxYfFZDdsStTziIydDHlLXKkxWwXxvVeMoOmEvVyYOzZyYoNnmMflVqQvUuSsywWBbFfbNnhHdDBhlLeEHzZvMmbBVYLKpPATQMscCKDjFfJAJPciIYyKkCcCJjlTGguMaAjoKNnVDkanDdMnNmGgiCcWwmMHyYsSLlnNHLlPSsTdDEMmSCMmcsCceetTEKkOqQAaoDdRoOHaAhrztTaUKYypPkuAvVZgGqQXEFmDyYdHhEeBUeElLSJjsTwPpwWmCOocpvSsVzdDZLlPLteEILlmFwWfHhMiXxTdFfcljpPJZaVvAXxzcCkKIdyYDNLlxXVWwiIzZCckKvdxXKkNQAaNnIFfiAYZYLlSQjJTtfyYFItKkTeEevMLlmkKVESsiMmZzdxXKkqQTMmlLoyNLlnYlQRhHvaAEsxjtnNUZwqdDffkoQqOKCcnNtThHHQYyhHBbeSsEJjuGBbTxzzZwWoOdDPKlLkTtuKlLkrRHhyYLlxaSUusDAadjJaAEHhVvkKYyCsSXrRJFdDfunNqQVxJjzZRXAtROoZzmMrGgCcgGTKhqQrtTSsMTtprOoRjJfNnFPmLkKyaWwAuEPpePSspOoyiWwIJeEfFjmOooOHhMNzZQLVvqTtRCckwWmOWwogGuUHbqaKkAxYaAyiIEWwPKHhWsKkmSeEZwjJkKDFfdKkAaWwYyAgGinNDdIxHWwrrTtRmMRDqQYydeEOoFfuUzVqaAQwWvpEeulLuTwWtUAEeKONnokWwyUuYtjJTauJYyjNnFfmMepPyYIJjUbBEPXxyYVvRkutTUVMmjYzZgGZzFOYyBbofJtTgNnGuUbrRGJWbqGgQBwDdDSsnuUNHhoxXjvVJQBbqOUuvstTShHzZSsvhHVFwWFgGfUljJtTLEVhHvEeGgLNFfexXEGIigTkKQvVIfFHhVvrRFlAaKwWkLvQuEeMGxXtTeEgmQCcaAqXnNxwWcCjJjGggGHjJsSkIisKkLHhowWQqOTgtnNxvVmxXMsSQxXFfMXxzZTtfEKgGMmkjDdJeWslLSlLGMzjrhHRgjJGPpBzZIiRaUoOuAItDJvVjVCcyYjJYyvlLvYyVnGgAakKSsbBAavTtFRzZrDdMIAqQlLWwKkapPimpPnkKRmbFfBiILlaLlDudDrRlLtMQFfVeEvquUulLfVvFPxXppPUUaAzPAabBLEtTewWlpcCcCilhHLPpfFfKkFMtQqEehFfEepPHTtvKkVWLlhNOyTtYahozTtjJZGSsgwyqWwocYDdyCOQYxlLXTsgGdDBbFUuUufUBbtBbTuUuYyDdRrgGZBbzZzJdDfYyJjYqQpOoPviIVhHAaArROoXxsuUSaicCIBxvVzZzOtgJjGBeEUuIyKkYbBixXJjWxXLlsSeEaAsOomMMmLlphHMsSwWUumDdPSrRwqFvVyYqgGQdhUmclLxXCMhHPpuNnaGgAvsShHVHSgGsQHhqegpbBfFPwNHqQhlLxDnNdGxrDdRDdGgowWOUSspPuvVXnNJjaoOYyAtTINXxJvaBbjJxXASJjJFMmfwRKXxQqakKAVvkEExOeEMvSsFfVmoBJSJjmAKIikWOoWIiwwWwKIiULfIiFzxRpPpqQPQUlLIiKjZzJudDyYIiaAiIWEezZLYSAasdDybBcCxYyRrZnNzpPcCgGwLlLlTtWGgvVYyXiIuUkfOoXxCZzcOuoOUoHWwvyRoOEeHhFfNnwWGCcQhHKkquAaVZzZDZzdYyCckKjJCcoOzIiqQSNhHnyaAlnNLYcqQBbMYynNqQkKmsSCnIiiIcCYFfyyYYyQqNPMmLaASsiIlGYoYyOdDnDdhHeENTtWjMmSsFWwMmfFMmfxJjfFFfWsiQqISDXxPpZzdMmFfMmlLvIiCUuceEYaEZPpzdBbgGDPpqzZQGIigGgoODMmMmdmJxXjMBbAayQqIjtTJJjiQqwMmyFfYOyuIhHiUuLgwWWiIwcMmqVvQCNnwWdDcsoOorRbuSsSsySCcsRZkVvwyYBPpHkmMKUuRriPpUuICLNnlcGgAFfaLlpfmMYyFJMfFuUZzEewrOYyoRhHLlYyxXGghHWxNnXnNcCwWRrZpPPpzLlyYbBDdDyeEtTYWhHwXNnxKkVvHhZzlfFFYyyeyYGtAKkaekEoOeKPgtwWTIqIwAaWmMKCckSbBqQSsoOVvsLJjlxuUHhVvhAaHLFmLAUqQuiLlolLOtTveVvdDQUucCpPLDdZzFGgrnNgxXGkKfFUuHhcCwjJWZzRHhKkxIKkulIiKNwuUvVWHhPpEekNhHndoODDdDderREtIiWbAafFniINSQqsBFfGgNPdDBbuWwvVqQUuUlLYJjypKkRrkrRQqLlpPTfFtAaKkrsSEzkKZowWOiIuUGglLQktTKqGgaANhHsSpPaAnenwzZWnNTyYxmnNMXNnBbFepPEFfCdDcdbdDKtTkYyzZrzZRTtGgGgJoMmOBbjXbBmZzMxgEePuZzNxOoXaAsSTXxtiFfOaAotykhHAiIOoPpaWrRmMwDdyYGgnNnRcChHblLxXBSsTthVLIaAilQqOoUuveuGgJjTtwWbBWolLsAaSOOoKPpwWqQkDLfFlzZdKknNfFPpSsPpkSsHhTvVtHhzZKXCcnNMmcCxxXHdDkTtxXiIwFXxqOorRsSzZgCeEcGoOsNnMmmmMXCcyjZMKkmzIiJYlFfhzZAdDwWaZzHJjLfFSsEetTxdXRrxDQqdDsVvCdDcAaYtbBXxyfFBbYfFOoqRrQTUuSsjjJKbBVvBbAaztTnNIxsFfSXpuFfVuujXxRyYulLVvsdDSxABbuRrEeKzZhpvVPAaHydUupPDgGeEJjDdztTHfBbgGVvMCyYvKkuFfUVfFcQQzZeEjiIUWdhDOjMmJzZbaAUuaAEeVSaAsvteEwKkDdKUpPHhaWzZcTDNndtCrCZzmgGMcfSsPpFWwlSsLfjqQQHhoOsSYrRfTteEFyYcCykKsbBgGSLUulqiNnIdDqgyYGHluULYyhIiZXAlXKkLyYkKlJjmMVvXrRxSwWsxTYWciICwytfFLMkKZMmyjfFJhHRrWwYdDfzZFSjnRTXxtnNeOhHoYybBEHhTtnNZzunNRZzVvrFoOfRziIbBYyZrRuevVAZzqQeEBbQNnqawWHoOhFftTaADyYFBbfaAdZxwGMmSsdDZzGCclDdLxXOokuTtuUBqTtHhOoUunYqQlYYVvUuKkyBbQgLhHgGlAWwsSGNngaBFfbtFfkSsKISsiNnTtjQqJaTdwvVWjJCcErREeUucuZvNnEGgeIigGqQsIsqOqQoQoTtbBBbObBuUNwWkKrReEegGEhHuSsyYtUuAjJakKfRrCcFdvVHtThDPpkLMmlKTRcVtTvxxJjoGgQuhHUUuglLGnLlORrcaACaAoNnNbBHhWkKZrRzAawxXsSyYhHqxvtTVPpIcEeCBbBbkTFftashHACcPpKklLuUabmMBhMmBbBcCHcCFeIiLlEVvqfFeEkKeEQRrEeIiUkKOQqoAyYYydDMRUuXOvVoxmNhHniIBDJjPMmppPFWwVmQeEqMqQBboOnEaAoaAOiWWEzZekYhHyoOdbBDqlLbGgXPpxDWwsIiRrEeTtbBiISyYGAXxBbdDacqQFbBfiIGjJdDDdgZzxXUcCaJzZLljAuewAaWwyVvzGNMtDdRcCrfiOoOyIiYoDdyIiYIovyaMmfVfFQAaVSsvpFluULKklLyqQJjuUvVqdDopJjEePOcFfzYyYysSZLlqQfFoHqjJQkYLlyuUWlfFLVMdDmtTLlHVuUAdTtfujJUFcIiCwPpWrRdDvVeYyexXEgGyMmwcsxXTtDdQQqsSqnNzZSsSMIimFfYZiIUuHhHEDYydEaAqQitYyTHhrRLcIiWbBwChHQMmqyXxnqQNEekyYCiIcdDeBbaYyAEcCncCoUuvVOeEoObBxnNsIiPAaplLXEJjiIehHxddcCdaAJjhHgSsFfjJjHWwTvVtAagGJjhiIIiSswHhYyrbBRPOosSvVhHOEeGEeDdvnNfycCYFvAabBqQyMWwPDdtBbgpQLTtvVTwWtlLlLUVOHhoOoOonNSxXGgwWVvEeWwNnGgFfNnCcQqnQqwgyYGWGwWgDduUKkhuUMmNnHNXZzOoRrXxrvVqQaAuUNdVviIDcCIfFiZImMizkKnBbBOobRFfyNbSsaABbAaGgBJkOhAavVFfHoybBcCGiIpoOxXVvXxWuUoOwRjAJwWlRrLsyTtEeYCcBbQpPqjJMmQgbOsLYylSoCcqQBgGUBLlDdiwWfFZWwzfFIqwWQbTHhtBwWlmMFfLgBbGLlDdKkhHBWwWwHhHCcBbFwWPhHMmJOorRTtjpbUBbujJWwBymMSsFfKkjJgGTzZWMmppPLUulGNnhzZYdDEeLlGCOocgnTyWwDdYLlNnFEONxXJgGjnHhRroeyyYPpsSlLBbFyYLlzZfKmMhNPaZzpPARrpRrRyYkKMmUwWurAaaALlyYVvfFOXxoUuDdmMQsSvaAYyFVGgsSvumMrIiRzBbZUfiWoOwIoOpfFCcPTGghHXxotTOtBYybMmfFwWQqdDSLlzZsXAPpqLldgGrRHrosBbSOtTRhwWDkKDnNhgGWjJVvwFfDdFfVPpvTtoOgFQqYQqzZOoCcyJjJxlLXLlqRvDdVRrrtTbBCcfFYyPpXxWwtTxXvVUuAabBNKtTMmkvVxXEHhzZTtRregWwYyGjKXxhHkJjwfFKkQBbsxXryYHhfFRyYSFfmMxvVHhKktTjJCcYyZcpPNKfFUugGMmvpPMmVvEvVewWpxeEBbbhHdDDdDdBXtjJTeEZzPNCctTadDFfAnjAaJUurzZRHhphHtThjtHhhHtTTNvcCVlmMLnNbBSkZaAHhzwlLGgFfnNJYyyYjJjJjgKkGzZPQVvwLlVvXxjJZteETgAaGDdWwzGKUuYyUneEehHMVMmvmQqMOoNmMIiUDCcjJoOdhHunwSFfaLlSsVzZvACcuUMiIPoWEewHhWIiwVvOgGyYYXxOnNoyTtpnNZOaAxKkTtMzZmIvVmMstTSWwPpBbgGiXLoOlBbosSzWbtTBwyncCNJhHcCjjEeSsHfjJbBFhJZzIiTtvgNnGeEVpZzthYyhBbHkKxXHKkrRTmnNxEeOokKbmmMTtMgGBXMTtpPWwKwWkJjLlPBOoiIbYGgXrRxrRmewWEMCcTRrpPPptMPpmXxYFaTtAfQJOsSoZzjqSsmhQqHMSschHeECylLxXYdLAadDvVlqQqQqQDMsSmRrEKkekOomMhHsZzpPUuUuonNXxjJOSAPpasdDSKJtTRrjhHKkCdPpsSPlKkLpDTLMmYyCcIAaicCeplLsSnpPNPEtFfTLlJjYkIiKyjPphPpXxuUyYYNEeMmmWwhHZzMvYydBbDVkKZzAHpPhnNPpXJjHvVHhKqQOcCotTMmhHkhkmMjJCNnczNnpaADdUuPZIiKaAXZBVjJvbpPvVRryYSsNdGrfNnezTtZEFRwjJduuxXUjJUXZLlzWwxKXxWpPbkKsSBwkiIlLDSsgleEWwuULEMEemsmyYMfkTtKFroTtORkKsSSrRfFeGoOxbBXSsYazbBeEZASnNsXotTOYyxnNSsJOBYybZztTNnyYYykXxXVvxNnmMOBbTASyYINnisauHhUtoxpPXNnxTtnNzZcHhCcCLlXIATtabBAaYyYyqQilkKWCcEFfewsXxSdnUlLuRrNZzqQDOpPoMEexXEesScCWwBiiidDIdDIHhpPHhIyqNnsSQFEeHnNhBbfYbmDdnNuUaAvrRsSVvVaDdRsSrcDdIiCAtTdmMOombBLlMwgGWqQTnoOwWsSaAWFSsfwNyYijQqSsJvVrROokKIlajJAyYkjJOoKbFmMfDdqQJRrztTLBblPpqQZTaQqZCczAXxclLOMmoHHXxhjJoOhnNMmLcCcfyYFCgGlNfFnCHsxXczZCShpPVKkvtdXxYySspPYyEEejJSsNzZkMmKwWnVUukiIKvEeVGSsZzdDwGWwgWgpPXSsZzxRPprQlNnLiIMmPqWCcwTtnNQNvRrVGkKgcCQgBbGysSYqCcpvVPDbBWwuUeAgGDdanhHgGRrNEHbEZSAaszeCcBhcCdlOoadDAWSswLZWwzFSsjJcXvVYmQqGgfFsSxiIXJjoOMlSsLwEeRrJjkKrIiuURWWQqPjTtCcBbodDJrRjIQrRqXxtTxcCXcCjRrpgGPJJlLjNiIgGaAuUqgGQfFcumMPhHpUCZzpPlLYyvVaAAarRgGWwukKBbUwWiItcCNnTvVmeEMMmuzDdpPZWwaAsUuSUngKktbXxBKkqQkKXQqGEegAyYAakKwWanVxXvTQqtHhwWRFoOlLLlgGXxoOfZvBbsxXovsSVJoOLljOoOlLRrSJNypYyPHhyzZYYWBbdDoOraAqQRwqKkQVvnjeEOoSPtQqTNnpIisbOoBJjTLlwWJjYSXxsGgyOosRNnNnndDNsSIqQkeEKiHhIiPphPpHrRkQqKTtuUcCVvkGSUupPsSXGgmMZzYyxIGdDgiEesHhgKxXFpPfhaARrPpEKkQqeHQWwqTgGdDtHjvVJKTtsqoJjOnNbBQiIuUSHhzZkDdSGgJjwOoWqQCsScMmVJjrRaASBbZzdDsvrEqQtLlTeGLlQqDiAloOnNLaoiIOfFYyIfFdgUfjWwTzMmZtJMmFJKkHhdDNzZnjJjbwJmMYyjTrRtWlLOoXXxnMmDSeEHhsdNmMVvDdxBvVyYPVUuvBbLleEOofFNnrRgGMmlLgGpgGjNgGvVwWnzZtTeJjXFWJjHhwfgGXxxzZVTtzvVZwWLlWwvVsSvWwgGrRpPtrRoOTEZzpFwWfPvVISwWsiTaAtYGgoDdLlOyQPHhdDCcpBjXxJbPZgGzpZzqtTOokKOoSsJiBbAaIgGssmMmMSSYyaNNnwWnEQVFfeWwEvpPAavVHhmXxbyYiIfrRFYANnGZzKkgLOolsSaVAIiaYysOouUPpxXQQqqwWQqrcCRMmPVvxXpSbWwOoAaBvPpsjJdDSgKkRrSGjpPJgJjSssGgSsUhHwWuMmAazZzZQzZlSsAaNnuFfUaALqbpPmMYyWwMmBvhHzZVXxXqyYQyYdDqQPpdDxZzhHRLxXlxXEemqQMIirRAaHhTGVFfvgvBbAaFflLvVVHhrRHhRQqsSrRrEYyUXxueVNxXnGgKpPkPpvCcttTPpryYoOGNTtUuQqIiTtEVvIieXxYyxXEiIvCcKkTbBtlaALniIzZNVvVeDdWNnziIZgzZGjGgTtJwHpfyYPpFPGghdhHSsJAajPrvVSsRpDKbzZBknwWyYiLlqQwUcCuWWKkwzZiIITtDdApPacAPRruUyqfFVvQYpcCZiUuAaIpPEqQoySsNnmMYfjJwWFZdDNnLlAalLOnNozoIOovVwWiUjhHJuVvXxlLCcJaAjCcOoVvCciGgIpqlbBLZDdzzZQgpPGwqaXxKkAjBbJmMQUukYJjaZznpPlLNrRALHhaAlBbbBPpywWiIQqsSKIioTtoOOzbdDvDdVBiFfSsjeEGUugzZJEeHhuUmMlfFSsBbRrvVyyYoOYdavVCUucWwADvVtTeEuUJjJHlLhjJrRjVEeYyRKkrFfWwDdRriIAQsSqHhaLMgGmYySszZsgcCGKoOkSBbljJFUufbBbBbBJjHhXxyYEeERKkBbIivVoOeErAaUuJjGgQqFfxXtTRwWwWrxXOoLVwHhWvGgYynNvJjSsmMhHjabBAJYyQqdxXpPDmrGgJlLjRMRwWrVxUEeuXDdDdRYyxXcCTthZzHUukoBbOiIVyFfYvgUuHhsSGvVjuUJVFfvzpPqgGQjJUuxEejJJsSFfUtTujqQkSsKhBrRbNyYZznjiIEcRrQnNqZzNnCeBbJHPpaSiIsATtaPZPpgGzyYlLyyrRvgGVLhHXxzZlYKVvhPpHpPIikMfFFLlfJLRrHWwGjJgegGCrRcEPLlNaAnpPpCsSdbBDIvVluUSsLiJuUSDdsjcGgMmuUvasSbBaAAIiUuTfFnNtHnNhNxXnFfRroOVniINhRqQrwWWwvqQvmMDdLlCcuFfUzZVVBboXxRrOlIimdDYyMtTUuJKktNNnnbBsmMEeSTwelLEWjVvWzZLlwobBpPIijJdDYyKkOWUuwJjyYAaxXxXIfFizZnNEVnNpPvQRrqeQnNMmqghHcXxXxCWwlLGTIAaUuTttTitltiIvVWwIiTAarRZzQNnoOqxXlLsSmMiOosSEegGQqdeEjJKkuUKkCaAKkCcbBcHfFeEhSseEPVvKklLYyGgpDdcCtSsglLrTtRGPphHNnuUfFeAaEnNWwNnPPpOokKcCCcmtTsSGPpgMa diff --git a/2018/inputs/6.txt b/2018/inputs/6.txt new file mode 100644 index 0000000..e544bbd --- /dev/null +++ b/2018/inputs/6.txt @@ -0,0 +1,50 @@ +195, 221 +132, 132 +333, 192 +75, 354 +162, 227 +150, 108 +46, 40 +209, 92 +153, 341 +83, 128 +256, 295 +311, 114 +310, 237 +99, 240 +180, 337 +332, 176 +212, 183 +84, 61 +275, 341 +155, 89 +169, 208 +105, 78 +151, 318 +92, 74 +146, 303 +184, 224 +285, 348 +138, 163 +216, 61 +277, 270 +130, 155 +297, 102 +197, 217 +72, 276 +299, 89 +357, 234 +136, 342 +346, 221 +110, 188 +82, 183 +271, 210 +46, 198 +240, 286 +128, 95 +111, 309 +108, 54 +258, 305 +241, 157 +117, 162 +96, 301 diff --git a/2018/inputs/7.txt b/2018/inputs/7.txt new file mode 100644 index 0000000..3fe80cb --- /dev/null +++ b/2018/inputs/7.txt @@ -0,0 +1,101 @@ +Step E must be finished before step Y can begin. +Step Y must be finished before step T can begin. +Step I must be finished before step C can begin. +Step G must be finished before step F can begin. +Step C must be finished before step P can begin. +Step B must be finished before step Q can begin. +Step Z must be finished before step N can begin. +Step J must be finished before step W can begin. +Step W must be finished before step P can begin. +Step K must be finished before step D can begin. +Step Q must be finished before step L can begin. +Step V must be finished before step D can begin. +Step O must be finished before step M can begin. +Step A must be finished before step P can begin. +Step M must be finished before step L can begin. +Step R must be finished before step S can begin. +Step D must be finished before step X can begin. +Step X must be finished before step N can begin. +Step P must be finished before step T can begin. +Step F must be finished before step N can begin. +Step S must be finished before step L can begin. +Step U must be finished before step N can begin. +Step T must be finished before step L can begin. +Step N must be finished before step H can begin. +Step L must be finished before step H can begin. +Step N must be finished before step L can begin. +Step X must be finished before step F can begin. +Step P must be finished before step F can begin. +Step P must be finished before step H can begin. +Step B must be finished before step D can begin. +Step V must be finished before step H can begin. +Step X must be finished before step S can begin. +Step Q must be finished before step O can begin. +Step Z must be finished before step T can begin. +Step K must be finished before step N can begin. +Step S must be finished before step H can begin. +Step M must be finished before step P can begin. +Step Q must be finished before step D can begin. +Step R must be finished before step U can begin. +Step J must be finished before step P can begin. +Step P must be finished before step S can begin. +Step V must be finished before step U can begin. +Step R must be finished before step T can begin. +Step F must be finished before step S can begin. +Step D must be finished before step T can begin. +Step E must be finished before step N can begin. +Step J must be finished before step N can begin. +Step J must be finished before step A can begin. +Step K must be finished before step U can begin. +Step V must be finished before step N can begin. +Step V must be finished before step S can begin. +Step U must be finished before step L can begin. +Step F must be finished before step U can begin. +Step I must be finished before step T can begin. +Step J must be finished before step L can begin. +Step E must be finished before step T can begin. +Step T must be finished before step N can begin. +Step I must be finished before step G can begin. +Step R must be finished before step D can begin. +Step E must be finished before step B can begin. +Step X must be finished before step H can begin. +Step P must be finished before step L can begin. +Step Z must be finished before step J can begin. +Step O must be finished before step L can begin. +Step E must be finished before step H can begin. +Step F must be finished before step T can begin. +Step A must be finished before step F can begin. +Step U must be finished before step H can begin. +Step F must be finished before step H can begin. +Step C must be finished before step W can begin. +Step A must be finished before step L can begin. +Step V must be finished before step M can begin. +Step U must be finished before step T can begin. +Step E must be finished before step P can begin. +Step Y must be finished before step U can begin. +Step W must be finished before step R can begin. +Step E must be finished before step X can begin. +Step Q must be finished before step U can begin. +Step I must be finished before step F can begin. +Step V must be finished before step F can begin. +Step V must be finished before step T can begin. +Step R must be finished before step P can begin. +Step B must be finished before step A can begin. +Step S must be finished before step T can begin. +Step M must be finished before step F can begin. +Step Y must be finished before step F can begin. +Step C must be finished before step K can begin. +Step D must be finished before step S can begin. +Step O must be finished before step S can begin. +Step M must be finished before step U can begin. +Step Z must be finished before step S can begin. +Step R must be finished before step H can begin. +Step C must be finished before step O can begin. +Step G must be finished before step Q can begin. +Step Z must be finished before step D can begin. +Step B must be finished before step N can begin. +Step I must be finished before step H can begin. +Step I must be finished before step P can begin. +Step E must be finished before step J can begin. +Step V must be finished before step L can begin. +Step B must be finished before step U can begin. diff --git a/2018/inputs/8.txt b/2018/inputs/8.txt new file mode 100644 index 0000000..ecb2263 --- /dev/null +++ b/2018/inputs/8.txt @@ -0,0 +1 @@ +8 11 7 2 4 4 3 6 1 5 0 8 1 6 1 1 5 4 7 3 1 2 3 1 1 1 5 0 9 9 5 2 8 7 5 7 1 4 2 2 1 1 3 1 6 0 8 6 1 8 1 1 5 4 1 3 3 3 1 3 3 1 4 1 2 2 3 3 4 1 9 0 10 1 9 5 2 6 5 6 5 7 1 2 3 1 3 3 2 3 1 1 1 7 0 11 2 5 1 1 8 4 9 1 5 4 7 3 1 3 3 1 1 3 1 7 0 8 5 2 7 8 5 4 1 1 1 1 3 2 1 3 2 3 3 3 2 3 7 1 8 0 9 2 5 4 6 7 2 9 2 1 3 1 3 3 2 1 2 2 1 5 0 9 1 1 6 1 4 2 9 4 3 1 1 2 1 3 1 6 0 9 7 2 9 4 4 5 1 8 6 1 3 1 3 1 1 5 3 3 4 4 3 4 3 7 1 6 0 11 1 3 1 1 1 7 3 8 2 1 6 1 2 1 3 1 1 1 9 0 7 7 2 1 8 1 9 8 2 1 1 3 1 1 3 1 2 1 7 0 8 5 7 1 9 7 6 5 3 1 1 1 2 2 2 2 2 2 1 2 3 2 4 1 4 1 2 5 5 3 4 1 8 0 9 1 3 7 1 2 1 3 9 8 3 1 1 3 3 2 3 1 1 6 0 7 2 4 2 6 8 1 6 2 1 1 3 3 2 1 5 0 10 1 6 6 9 7 8 4 4 9 7 1 2 1 2 3 1 1 4 4 3 6 1 6 0 10 1 7 2 8 1 6 9 3 6 7 2 2 1 3 1 3 1 8 0 8 1 8 9 7 6 1 3 4 1 1 3 2 2 3 2 2 1 6 0 8 1 8 2 3 9 5 1 6 2 1 2 1 2 1 4 2 3 5 5 5 3 4 1 6 0 10 5 7 6 5 7 1 7 4 1 5 1 1 3 2 2 3 1 8 0 7 7 1 8 1 6 4 3 3 3 2 1 3 2 1 1 1 7 0 10 6 1 1 5 9 3 2 3 3 9 3 3 3 1 1 1 1 1 2 1 1 3 5 1 8 0 11 1 3 1 6 6 6 5 1 5 1 6 2 1 3 1 3 2 1 2 1 8 0 6 1 1 2 1 9 9 1 3 1 2 2 3 1 2 1 6 0 9 8 4 2 8 8 7 1 8 1 1 2 2 1 1 2 5 1 1 4 2 3 6 1 8 0 8 4 1 8 1 3 6 9 8 3 1 2 1 3 2 3 1 1 6 0 7 9 1 6 4 9 4 6 1 3 1 1 1 3 1 8 0 7 5 4 1 5 7 1 8 2 1 1 2 2 2 1 2 1 2 1 1 4 4 2 2 3 3 2 4 4 3 7 1 9 0 8 3 3 7 1 1 5 3 3 2 2 1 1 2 1 2 3 1 1 9 0 8 5 9 8 9 4 4 8 1 1 3 2 3 2 1 1 1 1 1 9 0 8 3 6 5 1 8 4 5 2 1 1 3 2 2 1 1 1 3 1 1 5 5 5 5 1 3 4 1 8 0 8 8 5 8 6 7 1 3 5 1 2 3 1 2 3 2 1 1 8 0 9 4 2 8 6 6 2 2 1 2 3 1 1 1 1 3 1 3 1 6 0 7 5 4 4 2 2 2 1 1 1 2 3 1 1 5 5 2 3 3 6 1 8 0 6 1 5 6 4 3 8 1 3 2 1 2 3 2 1 1 6 0 11 7 1 3 7 3 5 3 9 1 5 6 3 2 1 1 1 1 1 7 0 8 7 6 2 8 5 1 3 4 3 2 1 3 2 2 2 1 4 5 4 2 1 3 4 1 6 0 11 7 4 1 1 8 4 6 3 9 2 8 1 1 3 3 3 1 1 8 0 7 1 4 9 2 1 4 6 1 2 2 3 1 3 3 3 1 6 0 8 7 6 2 1 8 4 8 7 2 1 3 1 3 2 2 1 5 3 4 4 4 4 5 4 3 4 1 7 0 10 1 3 1 7 1 1 7 9 5 7 1 2 1 1 3 3 1 1 6 0 11 4 1 7 7 2 4 6 1 7 8 3 1 1 2 1 3 2 1 9 0 9 6 2 9 1 9 9 5 6 1 2 2 1 2 3 3 3 1 3 2 2 2 1 3 5 1 8 0 11 4 8 7 1 3 2 3 6 1 3 9 2 1 2 3 3 2 1 3 1 8 0 6 4 4 3 6 1 2 1 3 3 1 3 2 2 1 1 9 0 10 7 5 1 7 6 1 3 6 6 6 3 3 2 1 1 2 1 1 2 3 1 2 5 5 3 6 1 9 0 10 9 9 2 1 6 4 4 4 1 2 1 2 1 1 3 3 1 1 1 1 6 0 8 1 4 6 1 4 5 8 6 2 1 2 1 1 1 1 7 0 7 3 9 1 1 1 1 1 1 3 1 3 1 3 3 3 3 5 4 2 2 3 5 1 5 0 8 7 6 5 7 1 9 4 5 1 2 1 2 1 1 8 0 10 5 3 2 8 3 6 1 7 9 1 1 3 1 1 2 1 3 2 1 6 0 10 2 6 1 6 9 9 7 6 1 4 2 1 2 3 2 1 5 4 3 1 2 3 4 1 5 0 10 6 2 1 7 1 1 7 5 1 8 1 1 1 1 1 1 7 0 6 1 3 7 4 7 1 3 2 3 1 1 1 1 1 5 0 8 6 5 1 4 4 1 7 2 2 1 2 3 1 3 4 2 5 2 4 6 5 5 4 3 7 1 9 0 6 4 4 1 8 4 1 1 3 1 2 2 2 1 3 1 1 5 0 8 1 3 2 8 1 5 5 5 3 2 3 3 1 1 6 0 7 2 1 8 7 2 7 8 1 2 2 2 3 3 3 5 4 2 5 5 4 3 7 1 6 0 10 6 7 5 1 7 7 5 1 9 1 2 3 1 3 2 2 1 6 0 7 8 6 4 5 6 5 1 2 3 1 1 3 2 1 7 0 7 9 1 1 1 6 3 9 2 1 3 2 2 1 2 2 5 1 4 3 5 1 3 7 1 6 0 7 4 6 1 5 3 1 3 1 3 2 1 1 1 1 9 0 9 1 3 8 4 5 7 9 2 5 3 3 2 1 3 1 2 3 1 1 9 0 8 2 5 6 1 5 5 1 8 2 3 1 2 1 1 2 3 1 3 4 1 2 4 3 2 3 7 1 5 0 9 4 8 1 8 7 1 1 7 6 1 2 1 3 2 1 8 0 8 8 3 5 4 1 3 3 3 1 1 2 1 2 1 1 2 1 5 0 8 1 5 7 8 5 7 3 5 3 3 1 2 1 2 2 5 4 3 5 1 3 6 1 5 0 10 8 6 1 6 7 3 4 2 1 7 2 2 1 2 3 1 5 0 7 4 2 9 1 3 5 1 3 3 3 1 1 1 5 0 11 7 8 2 5 9 5 2 2 5 1 7 1 3 1 1 1 2 4 1 3 4 2 7 3 5 2 5 3 3 5 1 9 0 11 6 2 2 1 7 8 4 6 8 9 1 2 3 1 1 1 1 3 3 3 1 5 0 11 3 4 8 3 9 1 2 5 4 1 2 2 1 1 3 3 1 8 0 6 2 1 2 8 1 1 3 2 1 2 3 2 1 2 1 3 3 3 4 3 4 1 8 0 9 9 8 4 1 3 6 4 1 3 1 2 2 1 2 2 2 1 1 8 0 8 1 9 1 1 7 2 1 5 1 3 2 1 1 2 1 3 1 7 0 6 1 8 7 8 5 4 1 3 2 2 2 1 2 3 5 1 2 3 4 1 9 0 6 1 1 2 7 2 8 2 3 3 3 2 1 3 1 3 1 6 0 9 9 7 7 3 8 5 2 6 1 1 3 1 1 3 2 1 7 0 8 5 4 5 1 7 3 8 1 2 3 1 3 1 3 3 2 3 3 3 3 6 1 6 0 6 1 1 1 6 6 3 2 3 3 2 3 1 1 9 0 10 6 6 9 5 9 2 9 7 6 1 1 1 2 2 3 1 1 1 2 1 5 0 10 4 1 7 4 2 8 3 3 7 3 3 1 3 1 2 2 3 5 2 3 3 3 4 1 6 0 8 4 3 7 7 5 2 4 1 1 1 3 3 1 1 1 8 0 10 5 9 8 3 9 1 1 8 4 7 1 1 3 3 1 2 3 3 1 8 0 8 4 9 1 1 9 4 6 3 1 1 1 1 1 1 3 1 3 2 2 3 3 7 5 4 5 3 5 1 8 0 7 1 6 1 8 5 9 2 2 1 3 3 3 1 3 1 1 5 0 9 3 6 2 2 4 1 4 1 7 1 2 2 1 2 1 9 0 6 4 7 1 1 1 8 2 1 1 1 2 1 2 2 1 4 3 2 4 5 3 6 1 7 0 10 3 2 6 2 1 5 7 8 9 5 1 2 1 3 2 2 3 1 7 0 6 3 6 6 1 4 6 1 1 1 3 2 1 3 1 7 0 9 6 1 3 1 3 8 5 9 4 1 2 2 2 1 1 3 2 3 2 1 2 3 3 4 1 5 0 11 1 3 8 7 7 7 7 2 2 3 1 3 1 1 1 2 1 9 0 10 4 5 1 3 2 8 8 8 3 9 3 1 1 2 3 1 2 2 3 1 7 0 6 6 3 1 3 2 4 3 1 3 1 3 3 2 2 1 3 4 3 5 1 5 0 10 7 8 5 2 3 3 7 1 6 6 1 1 3 1 1 1 9 0 8 5 1 6 1 2 7 4 3 1 3 2 2 1 3 2 2 3 1 9 0 8 9 8 1 4 4 9 3 8 3 2 3 2 1 1 1 1 1 4 4 4 3 1 4 4 6 5 3 5 5 6 3 5 5 3 5 1 6 0 11 8 3 8 1 1 1 6 6 7 5 6 2 3 1 1 3 2 1 9 0 7 4 1 2 1 8 1 2 1 1 1 2 3 3 3 2 2 1 7 0 7 5 6 4 7 3 1 1 1 2 1 2 1 2 2 4 4 1 3 2 3 5 1 9 0 8 5 8 2 3 6 1 9 9 3 1 3 1 3 1 2 3 2 1 8 0 10 2 7 5 2 2 1 5 1 7 9 1 1 3 2 3 1 2 2 1 8 0 8 8 7 5 9 9 8 1 1 1 1 2 1 1 1 2 2 2 2 2 2 2 3 5 1 7 0 11 7 2 2 5 7 1 4 9 4 6 4 2 3 3 2 3 2 1 1 9 0 7 1 3 3 5 2 1 9 3 1 1 2 3 1 3 3 2 1 7 0 10 1 7 6 1 9 3 6 2 4 4 1 1 1 2 2 3 3 2 2 1 2 1 3 4 1 9 0 7 3 6 9 6 7 1 3 1 2 1 2 1 1 1 2 1 1 8 0 10 1 3 9 1 3 8 7 6 6 4 2 2 1 3 2 1 1 1 1 5 0 6 9 8 1 3 5 4 2 2 3 1 3 5 2 3 5 3 4 1 7 0 9 2 9 6 9 1 2 9 2 2 3 1 1 3 3 2 2 1 6 0 11 9 7 3 4 2 9 5 1 6 5 4 3 1 2 3 1 3 1 6 0 7 5 9 3 9 1 1 6 1 1 3 2 3 3 2 3 3 4 6 5 3 5 4 5 3 3 5 1 7 0 6 9 1 6 2 1 6 1 1 3 2 3 3 1 1 7 0 10 6 1 2 9 7 1 8 5 9 1 1 3 2 3 1 2 2 1 7 0 11 2 6 4 4 1 2 2 5 6 2 8 1 3 3 1 3 2 3 4 1 1 5 4 3 4 1 8 0 7 1 6 5 8 5 8 9 1 2 3 3 3 1 2 1 1 5 0 8 3 5 2 4 1 9 4 5 3 1 2 3 3 1 9 0 9 9 2 1 7 2 9 8 5 1 3 1 3 2 2 1 2 1 2 4 3 4 1 3 5 1 9 0 10 5 5 6 1 5 5 6 1 3 7 2 1 1 1 1 1 2 1 2 1 5 0 6 1 5 7 2 3 9 1 2 3 2 3 1 7 0 10 7 8 4 8 9 8 2 1 2 5 1 2 2 1 2 3 3 3 4 4 1 3 3 4 1 8 0 6 3 4 7 1 3 1 3 3 1 3 2 3 3 3 1 5 0 7 6 2 7 4 3 1 1 1 2 3 2 1 1 5 0 8 1 1 4 5 6 3 5 7 3 1 1 3 2 3 1 5 2 3 6 1 6 0 10 1 8 1 1 2 2 5 5 1 3 2 1 1 1 3 1 1 6 0 8 4 2 1 7 7 8 8 5 1 3 1 2 1 1 1 9 0 7 5 8 3 6 1 7 5 3 3 1 2 1 2 3 3 2 5 5 5 2 1 1 2 4 5 4 4 3 5 1 9 0 8 2 1 8 2 4 1 3 4 1 3 2 1 2 1 1 2 2 1 9 0 6 8 8 1 8 8 6 1 1 1 2 1 3 2 2 1 1 7 0 7 7 8 1 8 7 7 8 1 1 1 1 1 3 3 3 5 2 5 2 3 6 1 9 0 8 9 2 8 3 4 7 1 1 1 3 3 3 2 1 2 3 1 1 6 0 7 2 1 9 4 1 3 1 1 2 3 1 2 2 1 5 0 9 8 2 2 7 3 4 1 6 3 1 2 2 1 2 4 3 1 2 1 5 3 7 1 8 0 7 1 6 2 5 3 8 3 2 1 1 1 1 2 3 1 1 8 0 10 5 2 1 1 1 5 7 1 4 9 2 1 1 2 2 2 1 3 1 6 0 10 5 4 8 1 6 2 7 1 6 1 1 3 3 1 3 3 5 3 5 1 5 1 5 3 7 1 8 0 9 6 5 9 1 1 8 5 5 7 2 1 2 1 2 1 3 3 1 6 0 7 9 8 1 2 1 2 5 1 2 1 2 3 1 1 8 0 6 5 3 1 5 3 7 1 3 3 1 1 1 1 1 4 1 1 2 1 3 1 1 2 2 6 5 4 3 6 1 6 0 6 9 5 7 8 1 4 3 1 2 1 2 1 1 8 0 8 4 6 3 1 9 7 1 6 1 1 3 1 3 3 2 3 1 7 0 6 1 1 8 2 3 3 3 1 1 2 2 1 1 4 1 1 2 2 2 3 4 1 6 0 8 8 5 1 1 5 1 7 9 3 1 3 1 1 3 1 5 0 10 6 9 5 9 3 5 2 8 1 1 1 1 2 1 1 1 5 0 10 3 6 7 9 9 1 6 4 2 8 2 1 3 1 1 2 1 2 4 3 7 1 8 0 8 1 3 7 9 5 8 8 3 1 1 1 1 3 1 3 2 1 5 0 10 8 1 9 9 1 5 9 8 4 3 1 2 3 2 3 1 6 0 6 9 9 5 1 7 9 1 2 1 1 3 3 2 3 2 4 1 3 1 3 4 1 7 0 10 3 5 8 9 6 4 1 8 9 1 3 3 1 1 2 3 1 1 6 0 6 3 8 2 1 2 5 3 2 2 1 1 1 1 6 0 10 3 2 6 6 1 2 1 6 4 4 1 1 3 1 3 1 1 5 2 2 3 6 1 5 0 6 2 6 6 1 1 9 1 2 3 2 1 1 8 0 6 6 3 3 6 1 1 3 2 3 2 1 3 2 1 1 8 0 9 1 1 6 8 4 6 2 9 9 3 3 2 2 1 1 3 1 2 1 5 1 3 3 1 5 6 6 5 4 3 4 1 7 0 7 3 5 1 9 7 3 3 1 1 1 2 1 1 3 1 6 0 9 8 7 7 2 1 1 4 5 7 1 1 1 1 2 1 1 8 0 11 8 7 9 1 1 2 9 7 1 8 1 1 2 2 2 3 2 2 2 5 4 2 2 3 6 1 9 0 10 5 4 3 9 1 1 6 9 4 5 1 1 1 3 1 1 3 1 1 1 5 0 6 1 2 1 6 4 8 2 2 3 2 1 1 7 0 6 5 4 5 5 1 1 3 1 2 3 1 3 3 1 1 3 2 1 1 3 4 1 7 0 10 4 4 9 1 5 8 1 2 7 8 2 3 1 1 3 3 2 1 7 0 7 4 9 4 4 1 4 4 3 3 1 2 1 1 1 1 5 0 11 5 3 6 6 4 8 6 5 6 1 3 1 1 1 1 1 4 1 3 3 3 4 1 8 0 8 9 8 1 6 9 8 5 6 1 2 1 1 1 1 1 2 1 8 0 9 1 3 3 5 9 1 1 3 6 1 1 3 2 2 1 1 3 1 8 0 10 8 3 5 6 2 5 7 4 1 4 1 2 1 3 3 1 2 1 2 3 5 3 3 5 1 8 0 11 5 4 9 9 7 9 4 2 7 5 1 3 1 2 1 1 1 2 1 1 5 0 6 1 1 9 9 1 8 2 2 3 2 1 1 7 0 7 3 1 4 2 2 5 5 1 2 3 3 1 3 1 3 1 3 5 1 2 2 7 6 5 3 3 5 1 9 0 10 1 2 7 9 6 4 5 6 9 1 2 2 2 1 2 1 3 2 3 1 5 0 6 8 7 5 1 2 5 3 2 1 2 3 1 6 0 7 9 4 2 9 2 3 1 1 1 3 3 1 1 4 5 3 2 3 3 5 1 8 0 9 3 4 3 1 9 9 3 1 4 1 3 1 2 3 2 2 3 1 9 0 9 7 7 3 8 9 9 1 5 8 2 1 2 2 1 3 2 3 3 1 7 0 9 4 1 6 4 5 4 3 9 1 3 3 1 2 2 2 3 5 5 2 2 2 3 5 1 7 0 7 1 5 7 1 5 1 4 3 1 1 1 2 1 3 1 6 0 6 1 3 2 1 4 5 1 1 3 3 2 1 1 9 0 10 9 4 5 3 8 5 1 3 3 5 2 3 3 1 2 1 1 3 1 1 1 3 5 1 3 7 1 8 0 7 7 3 4 5 1 1 1 1 2 2 1 1 2 1 3 1 9 0 10 9 1 5 3 7 2 2 1 1 7 3 3 1 2 3 3 1 2 1 1 5 0 11 1 1 3 3 3 4 5 2 6 5 1 1 2 2 2 3 1 4 1 2 5 2 4 3 4 1 7 0 8 7 1 8 1 4 2 5 8 1 2 2 2 1 3 2 1 6 0 7 3 5 9 4 1 6 1 1 3 2 3 2 2 1 5 0 6 5 8 6 3 9 1 3 3 1 2 1 3 4 4 2 5 3 2 6 4 2 7 3 5 4 3 5 1 6 0 10 3 5 9 1 1 3 7 1 1 2 1 1 2 3 3 2 1 9 0 7 8 2 9 2 4 1 1 1 1 2 3 2 2 2 1 2 1 7 0 7 6 1 1 8 6 8 6 1 3 1 3 2 2 3 5 3 1 2 3 3 7 1 6 0 11 4 2 7 6 1 2 8 8 1 7 1 2 3 2 1 2 1 1 5 0 9 1 9 1 3 6 7 6 4 4 2 1 3 2 2 1 9 0 8 2 9 1 5 7 2 4 6 2 2 3 2 1 3 1 3 1 5 3 1 4 3 3 4 3 4 1 9 0 8 3 5 3 2 1 2 3 7 1 1 3 1 2 1 3 1 2 1 6 0 8 1 5 7 9 3 7 4 7 1 3 3 2 3 3 1 9 0 8 8 2 9 7 1 6 7 2 1 2 1 2 3 3 3 1 3 5 2 3 2 3 6 1 5 0 6 5 3 2 1 5 7 1 1 3 3 1 1 8 0 10 7 1 7 1 4 5 9 7 9 8 3 3 1 2 1 1 3 1 1 6 0 7 7 1 3 8 1 7 4 1 1 3 3 2 2 2 3 2 2 3 2 3 4 1 8 0 6 2 4 4 6 9 1 3 3 1 3 1 3 3 1 1 8 0 6 9 1 2 9 8 3 1 2 2 1 2 1 1 2 1 7 0 6 1 5 1 9 1 2 3 1 1 3 3 2 1 1 3 2 5 1 3 4 3 5 3 3 4 1 6 0 11 9 5 9 6 3 9 9 4 4 1 2 1 3 1 1 3 3 1 9 0 7 8 8 1 3 5 4 7 2 3 3 2 1 3 2 2 1 1 7 0 10 9 9 1 7 7 4 7 8 1 7 3 1 3 3 1 3 3 3 1 4 2 3 5 1 7 0 11 2 9 9 1 5 7 1 1 5 6 8 3 3 3 1 3 2 2 1 6 0 7 5 7 1 2 6 9 5 1 1 3 1 3 1 1 7 0 8 1 3 2 2 2 5 4 8 3 1 3 3 3 1 2 2 5 5 1 2 3 4 1 7 0 10 4 3 3 5 1 4 9 9 3 1 1 2 2 1 1 2 3 1 8 0 7 8 5 8 7 2 2 1 1 2 1 1 3 3 2 1 1 9 0 7 3 7 5 1 1 5 3 3 1 1 2 2 1 1 1 1 4 2 1 2 3 4 1 5 0 7 4 4 1 6 8 6 1 2 2 1 3 1 1 8 0 6 1 5 9 9 1 2 2 3 2 2 1 3 3 1 1 6 0 9 6 5 4 2 3 1 5 2 1 3 3 1 1 1 2 2 4 5 2 3 5 1 7 0 10 1 7 1 4 1 1 1 1 1 2 2 2 3 3 2 2 1 1 5 0 8 7 6 3 1 1 9 4 1 1 1 2 1 1 1 8 0 9 1 9 1 8 3 1 2 9 5 3 1 2 2 2 1 1 2 3 2 3 5 2 4 5 5 4 3 3 6 1 5 0 6 3 1 5 1 1 9 1 2 1 1 1 1 8 0 9 6 1 3 9 4 4 4 8 6 1 2 2 2 1 3 1 1 1 8 0 7 2 8 1 7 3 3 1 2 1 1 3 3 2 1 3 5 3 3 1 4 5 3 7 1 5 0 6 4 2 5 5 1 1 1 1 2 1 2 1 6 0 6 8 9 9 3 1 7 1 3 3 2 1 1 1 7 0 6 9 3 6 9 1 3 1 1 1 2 1 1 2 1 4 2 2 1 5 5 3 4 1 6 0 6 2 3 9 1 5 3 3 3 1 3 1 1 1 5 0 9 1 1 7 2 8 1 6 2 7 1 3 1 3 2 1 8 0 7 1 9 1 5 2 5 9 2 1 1 1 3 2 2 3 2 1 3 4 3 7 1 8 0 8 8 1 2 7 6 1 9 2 1 3 2 3 2 3 3 2 1 5 0 6 9 8 9 8 6 1 1 3 2 3 1 1 6 0 6 5 1 3 7 1 1 1 2 2 1 1 1 3 1 3 2 2 3 1 2 4 4 5 3 3 7 1 8 0 8 8 2 1 2 3 4 5 2 2 2 1 1 2 3 2 3 1 9 0 11 2 8 2 9 6 1 5 9 9 7 5 3 2 2 3 2 2 1 3 1 1 9 0 9 5 1 1 9 2 1 6 5 4 2 1 3 3 2 2 1 3 1 3 3 3 5 2 2 2 3 5 1 8 0 6 7 7 1 5 9 1 3 1 2 2 3 2 1 3 1 9 0 7 2 9 1 2 4 5 3 2 2 1 3 2 1 2 2 2 1 9 0 7 9 1 1 3 1 4 9 1 3 3 2 1 2 1 3 2 4 2 2 1 4 3 7 1 5 0 11 9 9 5 6 3 1 9 5 7 5 3 1 2 3 1 2 1 7 0 7 5 9 1 3 7 2 1 1 3 3 1 1 1 3 1 5 0 9 3 3 1 5 4 4 2 8 1 1 1 1 2 1 4 4 2 2 5 2 2 3 5 1 9 0 10 2 4 2 1 5 6 2 3 9 6 1 1 1 3 2 1 2 3 3 1 8 0 8 1 7 7 5 7 5 5 9 2 2 1 1 2 1 1 3 1 7 0 9 9 4 4 6 1 5 1 4 1 3 2 1 3 1 2 2 5 2 2 3 3 3 7 1 9 0 10 3 1 9 6 4 7 1 8 8 2 1 2 3 2 2 3 1 2 3 1 6 0 11 9 6 5 3 8 1 8 1 7 5 7 1 2 3 2 1 1 1 8 0 9 3 5 2 1 6 8 9 5 3 3 3 1 2 1 1 3 3 3 3 5 4 3 2 3 2 5 5 5 3 3 6 1 7 0 6 1 8 1 1 8 1 1 2 3 1 1 2 2 1 9 0 10 2 3 6 9 9 7 3 5 1 3 2 2 3 2 2 3 1 2 1 1 8 0 6 9 1 7 1 4 8 1 3 3 2 2 2 1 2 2 2 5 4 1 1 3 4 1 9 0 9 2 2 2 4 9 1 2 8 7 2 3 1 1 3 1 2 1 1 1 8 0 7 4 7 5 4 1 1 7 2 2 1 2 1 1 3 3 1 9 0 10 8 5 1 9 4 5 8 7 2 1 2 2 3 2 2 1 1 3 2 5 3 1 1 3 7 1 6 0 10 8 1 6 8 3 4 6 6 3 7 1 1 3 3 3 1 1 8 0 8 3 1 7 5 1 4 2 2 1 3 1 3 3 3 1 3 1 7 0 9 1 9 8 7 3 3 6 3 6 1 1 1 3 2 3 1 1 3 5 3 2 4 4 3 4 1 8 0 6 8 7 8 4 9 1 1 3 2 1 1 3 3 1 1 8 0 9 8 4 1 9 2 2 7 4 1 3 1 2 3 2 1 2 3 1 8 0 11 2 7 8 5 1 3 1 8 3 7 5 2 3 3 2 3 1 1 3 4 5 5 1 3 7 1 5 0 10 7 8 9 5 9 6 4 3 2 1 3 1 1 3 1 1 7 0 8 4 4 3 5 3 7 9 1 3 1 1 1 1 1 2 1 5 0 8 2 3 5 8 4 8 1 2 2 3 1 3 3 3 3 5 3 2 4 4 6 5 1 5 3 3 5 1 8 0 8 6 1 6 6 6 1 9 7 3 1 3 3 2 2 1 3 1 9 0 9 3 6 3 1 1 1 2 9 2 1 3 2 3 3 1 3 3 3 1 7 0 9 1 2 5 2 1 7 9 9 6 2 3 1 2 2 3 2 4 1 1 1 1 3 4 1 6 0 6 1 6 9 9 2 4 1 2 3 1 1 2 1 5 0 7 1 1 5 2 9 8 9 1 1 1 3 2 1 8 0 9 9 5 1 1 6 9 6 6 9 1 1 2 1 1 3 3 1 2 3 2 2 3 6 1 8 0 6 1 8 4 4 6 9 3 1 3 2 2 1 2 1 1 7 0 7 1 3 5 3 1 7 1 2 3 3 2 2 2 1 1 7 0 8 2 6 8 6 1 1 5 6 2 1 2 1 3 1 2 4 4 3 2 2 3 3 6 1 8 0 10 5 8 3 9 1 9 8 3 5 6 1 1 2 1 1 2 2 2 1 8 0 8 4 1 2 7 1 7 5 9 2 1 1 2 3 2 2 3 1 7 0 8 4 1 8 2 5 6 4 8 3 1 1 1 2 1 3 3 2 3 3 4 5 3 6 1 9 0 6 2 4 1 9 1 2 3 2 2 1 1 3 2 1 1 1 8 0 10 4 2 8 8 5 5 9 5 1 5 2 3 2 3 1 3 2 1 1 6 0 10 7 6 1 2 1 6 1 2 5 3 3 3 3 1 3 1 4 2 1 1 3 3 7 4 1 5 4 3 4 1 5 0 9 8 8 7 5 3 3 4 1 5 2 3 1 3 2 1 8 0 7 8 9 6 6 1 1 1 3 2 3 1 1 1 2 3 1 8 0 8 8 4 1 2 7 1 5 8 3 3 3 1 2 2 2 2 1 5 2 4 3 7 1 6 0 11 3 6 9 1 6 9 5 1 6 4 2 1 2 1 3 3 1 1 8 0 7 1 1 6 4 7 9 7 3 2 1 1 3 1 1 2 1 8 0 6 1 1 3 9 1 9 3 1 3 1 3 2 2 2 3 3 3 1 3 5 1 3 5 1 8 0 8 7 2 6 8 1 1 2 9 1 3 3 3 1 2 3 1 1 7 0 11 9 5 3 3 4 9 8 7 9 4 1 1 1 3 3 2 3 2 1 9 0 9 9 3 1 6 1 6 8 4 1 3 3 3 3 1 2 1 1 2 4 5 1 5 4 3 4 1 7 0 8 1 2 2 4 9 6 1 1 3 1 3 1 2 1 3 1 6 0 7 3 4 5 9 7 1 5 3 2 2 1 1 2 1 9 0 6 5 3 1 4 5 1 1 1 3 1 3 1 1 3 1 1 4 1 2 3 6 1 5 0 6 7 1 6 8 3 1 1 1 3 1 3 1 7 0 9 1 2 2 9 8 7 7 1 9 1 2 3 1 2 3 1 1 8 0 11 7 5 6 5 1 4 4 4 7 1 4 2 3 3 3 1 1 3 2 5 5 3 5 2 3 5 1 7 5 8 8 1 6 2 4 5 3 4 1 9 0 8 3 8 1 3 6 9 4 1 1 2 3 3 1 3 2 3 1 1 7 0 10 8 5 2 1 3 4 7 2 3 5 3 1 3 1 3 1 3 1 8 0 7 2 1 4 3 9 1 6 1 1 3 2 3 2 3 2 3 4 5 4 3 7 1 6 0 6 1 1 7 9 9 5 1 1 1 2 3 3 1 7 0 10 8 7 4 5 6 4 1 1 3 7 1 2 2 3 3 3 3 1 6 0 7 4 3 7 1 3 8 2 3 2 1 1 1 1 2 3 1 4 4 2 1 3 7 1 7 0 6 7 3 6 3 7 1 3 1 1 3 2 2 1 1 8 0 6 4 5 6 9 1 5 3 1 1 1 3 2 1 2 1 6 0 10 7 6 5 6 4 2 3 3 1 6 3 1 2 3 1 3 3 3 4 5 2 2 4 3 5 1 9 0 9 8 1 3 7 4 9 9 1 1 2 1 1 1 1 2 2 1 3 1 6 0 9 3 7 4 2 1 6 8 4 9 1 3 3 3 1 1 1 7 0 6 4 6 8 7 3 1 2 2 3 2 2 1 2 1 4 2 5 4 6 6 2 5 1 5 4 3 4 1 6 0 9 1 2 7 3 3 9 1 6 9 1 2 3 2 1 3 1 5 0 8 3 8 8 9 9 2 5 1 3 1 1 3 1 1 9 0 6 7 4 1 4 1 9 1 3 1 2 1 1 2 1 1 3 1 3 1 3 4 1 9 0 9 4 1 1 4 3 7 6 4 6 3 1 2 1 3 2 1 1 1 1 6 0 7 8 1 6 5 8 3 1 3 2 3 3 2 1 1 6 0 11 2 3 3 6 1 3 7 1 7 7 1 2 3 2 1 1 3 4 3 4 1 3 4 1 5 0 9 1 5 4 7 6 1 1 5 3 3 2 1 1 2 1 6 0 10 6 9 1 5 5 5 9 8 6 3 1 1 3 3 1 1 1 6 0 11 1 9 3 2 3 1 4 9 2 4 4 2 2 1 1 3 3 2 3 3 4 3 6 1 9 0 6 1 9 9 6 6 2 1 3 3 1 3 2 3 3 1 1 6 0 9 7 5 1 1 4 4 9 4 1 3 3 2 1 1 1 1 6 0 7 5 7 1 8 7 3 9 3 1 2 2 2 1 3 1 4 3 3 2 3 5 1 7 0 10 6 1 1 6 1 9 4 9 2 3 1 2 3 3 2 3 3 1 7 0 8 1 6 1 2 4 1 2 8 1 1 1 2 3 1 2 1 7 0 6 2 3 1 4 2 6 3 1 1 1 1 3 1 3 2 3 3 1 7 3 4 3 5 3 3 4 1 9 0 8 1 4 6 6 4 9 1 2 2 2 2 2 2 1 3 3 2 1 6 0 7 6 1 1 5 9 5 7 1 3 3 3 1 1 1 8 0 10 6 1 3 3 1 7 2 8 9 9 1 1 2 3 2 2 3 1 1 3 3 2 3 6 1 7 0 6 8 2 2 7 1 6 2 1 3 2 1 2 3 1 6 0 8 2 5 1 8 1 7 6 6 2 3 1 2 1 2 1 7 0 9 6 3 9 1 7 3 5 2 8 1 3 1 1 1 1 2 4 1 5 3 5 3 3 4 1 6 0 8 3 1 1 9 2 8 2 1 2 3 3 1 2 1 1 7 0 6 1 9 4 4 8 1 3 1 2 1 3 1 1 1 9 0 10 5 2 5 9 4 2 1 8 1 5 3 3 1 3 1 1 3 3 2 2 3 4 5 3 7 1 8 0 11 7 6 3 6 2 1 6 3 5 3 1 3 1 3 3 1 3 3 2 1 9 0 8 5 4 3 4 7 1 4 2 3 3 2 1 3 1 3 1 3 1 8 0 6 1 9 1 5 2 4 1 1 3 1 3 2 2 2 5 5 4 4 4 3 1 3 4 1 8 0 9 3 2 1 6 5 9 6 5 7 2 3 1 2 3 2 3 2 1 5 0 11 7 6 8 6 4 3 1 8 2 1 6 1 1 3 1 1 1 5 0 9 3 1 8 3 9 4 8 8 9 2 3 2 2 1 5 1 4 1 3 5 2 5 3 3 5 1 5 0 9 7 8 2 2 2 2 5 1 5 1 3 1 2 1 1 5 0 7 1 4 2 8 1 6 1 1 3 1 3 2 1 5 0 8 2 7 2 9 1 6 1 8 3 3 1 2 2 3 5 1 3 4 3 5 1 6 0 6 9 7 1 2 3 8 2 2 2 3 1 1 1 6 0 8 1 4 8 8 9 8 6 2 1 3 1 1 2 1 1 9 0 11 7 2 1 1 7 6 3 2 6 7 2 1 1 1 1 3 2 3 3 2 1 4 3 4 4 3 6 1 5 0 10 2 9 1 1 7 1 3 9 2 6 1 3 1 3 2 1 7 0 6 1 7 8 2 8 2 2 1 1 3 3 2 1 1 9 0 10 8 5 7 3 1 2 7 1 6 1 1 2 2 3 1 2 1 1 3 4 2 5 3 4 4 3 7 1 5 0 11 1 8 2 3 7 8 2 1 3 7 4 1 2 2 1 1 1 9 0 9 6 2 7 6 9 3 6 2 1 2 1 2 2 2 1 1 1 1 1 7 0 7 3 9 8 1 4 1 6 3 1 2 2 2 1 3 2 1 2 5 4 1 3 3 6 1 8 0 11 4 6 2 5 2 5 5 5 1 3 1 3 1 1 3 1 1 2 1 1 9 0 8 2 5 7 9 1 3 5 1 1 2 1 2 1 1 1 2 3 1 6 0 11 7 1 3 2 8 9 7 8 5 1 1 2 3 3 1 2 2 3 5 3 1 3 2 1 4 4 5 4 3 4 1 9 0 7 4 9 7 2 7 1 8 3 3 3 1 2 1 1 1 3 1 5 0 7 8 1 2 8 5 3 7 1 2 3 1 2 1 5 0 6 1 5 7 6 1 8 2 3 3 2 1 3 2 4 2 3 4 1 9 0 7 1 5 4 7 8 1 3 3 1 1 3 1 3 2 1 1 1 7 0 11 6 6 3 2 2 3 1 3 9 6 3 1 1 1 2 3 2 2 1 9 0 6 1 1 3 3 4 3 2 3 1 1 1 1 1 1 3 3 3 3 3 3 7 1 5 0 9 9 1 5 5 4 8 2 5 4 1 1 2 2 2 1 7 0 9 5 1 6 8 5 3 7 4 1 1 2 1 3 2 1 2 1 9 0 8 7 8 3 7 5 4 1 5 2 3 2 1 1 1 1 1 3 5 3 1 2 1 3 1 3 4 1 9 0 6 1 6 5 6 8 4 3 3 1 1 3 2 2 1 1 1 9 0 7 9 5 3 1 5 2 1 3 2 3 2 1 1 3 1 3 1 5 0 9 3 1 8 1 4 4 5 9 6 1 2 1 1 2 1 2 1 1 3 7 1 5 0 11 7 4 4 6 1 7 6 1 1 6 2 2 1 1 3 2 1 9 0 6 1 9 9 1 3 6 3 1 1 2 1 1 1 2 1 1 8 0 7 8 7 2 2 1 6 3 2 3 1 1 2 2 3 1 4 5 5 1 4 5 2 3 4 1 5 4 5 3 4 1 6 0 10 6 9 8 8 5 5 8 1 4 7 2 1 1 1 2 3 1 8 0 7 6 3 2 4 7 4 1 1 3 2 1 3 3 2 3 1 9 0 11 6 9 3 7 8 6 5 6 4 1 7 2 2 2 1 1 1 2 1 3 3 3 3 3 3 6 1 5 0 7 3 8 6 2 7 1 9 1 1 1 2 1 1 6 0 8 8 9 7 1 1 7 2 6 1 1 2 3 1 3 1 8 0 8 1 6 9 2 6 6 3 6 3 1 3 2 1 3 2 1 3 4 1 4 2 1 3 5 1 9 0 6 2 6 7 3 1 2 2 2 1 2 3 2 1 2 3 1 9 0 7 7 5 7 6 1 8 1 1 1 2 1 1 3 3 3 2 1 9 0 7 6 8 4 1 2 1 3 3 3 3 3 1 2 3 1 2 2 1 5 2 3 3 6 1 8 0 7 1 1 5 7 9 1 3 3 1 3 3 1 1 2 1 1 7 0 11 5 9 1 3 5 8 5 8 2 2 8 3 2 3 1 2 1 3 1 5 0 9 6 9 4 2 1 1 3 6 2 1 3 3 1 1 3 3 4 3 5 5 2 3 6 1 1 2 8 7 3 5 3 3 6 1 6 0 6 1 1 1 8 7 6 1 2 3 3 1 3 1 8 0 9 1 3 7 5 6 7 5 1 6 3 3 1 1 1 1 3 2 1 7 0 7 2 1 8 9 3 8 1 3 2 1 3 2 2 1 2 2 2 1 3 4 3 7 1 5 0 9 2 2 9 6 7 9 7 1 7 3 2 1 1 1 1 8 0 7 7 6 8 1 2 6 8 3 3 1 1 3 2 2 1 1 9 0 9 1 1 7 1 3 2 5 5 5 3 1 1 2 1 3 2 1 3 5 4 1 5 3 1 1 3 7 1 9 0 7 2 1 1 7 5 5 3 1 3 1 3 1 2 1 3 3 1 7 0 10 2 3 7 7 3 6 2 3 1 7 3 2 3 1 2 2 3 1 9 0 8 9 7 7 3 9 3 1 4 3 1 1 1 1 3 3 1 1 3 4 1 1 3 4 3 3 5 1 9 0 9 1 2 3 9 6 3 7 6 1 1 1 2 1 1 3 2 3 1 1 9 0 6 1 9 1 4 3 3 2 1 1 3 3 1 3 1 3 1 8 0 11 3 3 1 3 6 7 1 8 6 4 3 3 3 1 2 1 1 1 1 1 5 4 1 1 3 5 1 8 0 8 4 8 1 6 3 1 6 3 3 2 2 3 1 3 3 3 1 5 0 10 1 1 8 1 1 7 1 5 4 6 3 3 1 1 3 1 6 0 7 1 9 5 1 3 2 6 1 3 3 2 2 1 3 4 1 2 4 2 3 2 5 3 3 6 1 6 0 10 3 7 9 5 6 1 7 2 3 1 2 2 3 1 1 2 1 7 0 7 1 7 5 6 2 6 7 1 1 1 2 1 1 2 1 9 0 11 3 6 7 9 8 8 8 7 3 1 3 3 1 2 1 1 1 3 2 3 3 3 3 1 4 3 3 7 1 5 0 7 8 3 6 1 3 6 4 2 1 2 1 3 1 6 0 10 7 4 6 9 1 6 5 5 2 8 1 1 1 1 2 2 1 8 0 6 2 6 8 7 1 2 3 2 2 1 3 1 1 2 2 2 2 5 3 1 4 3 4 1 5 0 6 2 1 7 4 4 5 3 2 1 3 1 1 8 0 10 4 4 5 1 1 7 2 2 8 6 2 1 3 3 1 2 1 1 1 6 0 6 6 6 1 3 6 3 2 1 2 1 1 1 1 4 1 2 3 6 1 5 0 7 1 8 5 2 7 3 4 1 1 2 2 2 1 6 0 8 7 8 1 7 7 4 1 1 2 3 3 2 3 1 1 6 0 8 8 1 1 4 8 4 4 4 1 3 2 3 1 1 4 3 5 2 1 2 3 5 1 8 0 6 1 3 8 5 2 1 2 1 1 2 2 1 2 1 1 7 0 10 9 6 9 8 4 8 1 2 2 4 1 1 1 1 2 2 1 1 5 0 7 1 7 3 9 6 1 3 2 1 2 2 2 5 3 5 1 1 3 7 4 5 4 3 5 1 5 0 6 5 1 5 2 4 6 1 3 1 2 3 1 7 0 7 1 8 4 1 5 1 3 3 1 2 1 1 1 1 1 5 0 9 5 1 1 4 8 1 4 6 8 2 2 2 3 1 4 2 2 2 4 3 4 1 6 0 10 8 2 9 4 6 2 1 7 9 3 2 2 1 2 2 2 1 5 0 7 1 4 9 4 7 9 6 1 1 2 2 3 1 6 0 10 1 1 3 5 6 2 4 5 4 3 3 1 3 1 1 1 5 3 5 3 3 4 1 5 0 7 1 1 5 3 4 7 9 1 2 1 3 1 1 6 0 10 7 6 7 8 2 2 5 8 3 1 2 2 1 1 3 3 1 8 0 11 2 1 3 8 9 1 5 4 7 3 4 1 1 3 1 2 2 3 2 1 1 4 2 3 6 1 9 0 8 2 9 1 1 7 4 8 7 1 3 2 1 2 3 2 1 2 1 8 0 10 1 7 3 6 1 6 1 9 3 3 2 3 1 1 2 2 1 2 1 6 0 9 2 4 2 1 6 6 8 4 1 2 1 3 1 1 1 2 1 3 2 4 2 3 7 1 7 0 11 7 7 9 6 3 3 4 5 5 1 5 1 2 1 3 3 1 1 1 6 0 8 6 6 7 2 9 1 6 5 2 3 2 2 2 1 1 5 0 6 3 1 1 2 4 2 1 2 2 1 2 3 3 4 2 5 5 2 4 2 4 3 5 5 3 7 1 7 0 6 1 9 3 8 7 1 3 3 3 2 3 1 2 1 5 0 9 3 7 1 6 1 2 7 4 3 3 1 1 1 3 1 5 0 11 1 8 9 9 9 6 1 8 6 8 3 3 1 1 1 1 2 3 5 2 2 1 4 3 5 1 5 0 8 8 3 5 4 1 1 9 5 1 3 1 3 1 1 8 0 7 1 7 5 1 6 4 8 2 1 3 2 1 1 3 2 1 9 0 11 9 3 1 4 9 8 6 9 3 8 8 3 3 3 3 2 1 1 1 2 3 2 3 2 1 3 4 1 5 0 8 1 7 5 3 9 3 3 9 2 1 2 2 1 1 5 0 7 3 1 9 3 9 3 6 3 3 3 2 1 1 5 0 9 5 6 4 8 3 1 1 7 6 3 1 3 3 1 3 5 5 3 3 4 1 8 0 8 1 3 1 6 1 5 9 8 3 3 1 1 2 3 1 1 1 8 0 8 1 7 8 1 9 6 9 6 1 1 2 1 1 2 2 3 1 6 0 7 4 8 2 4 7 7 1 1 2 1 1 2 1 2 3 3 5 3 7 1 5 0 10 9 2 9 7 1 2 1 1 4 2 3 1 2 1 1 1 8 0 10 4 1 1 2 1 5 7 3 7 5 2 1 1 2 1 2 2 1 1 7 0 7 4 4 5 1 4 2 1 1 2 1 3 3 3 3 1 1 1 2 2 1 4 1 3 6 1 6 5 4 3 7 1 7 0 6 7 3 3 5 8 1 1 1 2 2 3 3 1 1 5 0 8 8 1 8 8 4 9 1 1 2 3 1 3 3 1 5 0 7 8 8 8 1 5 5 1 3 1 2 1 1 1 4 3 1 5 5 3 3 5 1 5 0 10 3 9 5 9 5 9 8 3 1 2 1 1 1 1 1 1 9 0 7 6 2 1 3 3 7 2 2 2 2 3 1 2 3 1 2 1 5 0 9 3 7 3 7 1 9 7 3 7 3 2 2 1 2 2 1 4 1 5 3 7 1 5 0 7 1 8 6 6 9 5 5 2 3 2 1 1 1 8 0 9 5 3 2 1 5 3 7 3 9 3 2 3 3 1 2 1 3 1 6 0 10 1 6 5 8 9 5 3 1 2 6 1 2 3 2 1 1 4 5 3 4 3 2 3 3 5 1 5 0 11 7 5 2 1 4 7 4 9 4 3 6 1 1 2 1 2 1 7 0 8 6 8 6 6 1 3 3 1 1 1 1 2 3 1 3 1 8 0 7 3 1 9 4 8 7 4 1 1 3 1 3 3 2 1 2 4 3 4 1 3 6 1 6 0 8 9 1 3 7 2 1 1 1 2 3 1 2 2 1 1 6 0 8 3 5 4 6 6 3 7 1 1 1 1 2 2 1 1 7 0 10 3 6 4 1 1 7 1 6 1 8 1 2 2 2 1 1 1 2 2 3 3 3 3 1 7 2 5 5 5 3 4 1 6 0 9 1 7 1 1 8 6 2 5 1 1 1 2 1 1 1 1 5 0 11 9 2 1 2 7 5 5 8 6 1 7 1 3 1 1 2 1 7 0 7 4 7 8 4 7 1 8 3 3 3 2 2 1 1 1 3 1 2 3 6 1 7 0 9 7 5 1 2 7 9 8 3 7 3 3 1 3 1 1 1 1 6 0 9 6 6 1 3 9 3 8 4 7 1 1 1 1 3 2 1 6 0 7 8 5 6 6 1 5 5 1 2 3 1 3 1 1 2 3 3 5 5 3 6 1 5 0 6 3 4 1 1 7 9 3 2 2 2 1 1 9 0 11 7 1 2 6 7 2 8 5 4 5 7 2 2 3 1 1 2 2 3 1 1 6 0 9 6 6 2 9 5 7 2 1 6 1 1 2 3 3 3 4 2 3 1 2 2 3 7 1 7 0 11 2 9 8 1 1 7 7 4 6 7 5 3 1 2 1 2 3 3 1 6 0 7 9 2 1 3 2 7 8 3 3 2 2 1 1 1 5 0 10 5 5 3 1 8 5 2 2 3 6 1 2 1 2 2 1 4 2 3 2 2 2 3 4 1 5 0 7 1 3 7 2 9 2 9 1 3 3 2 1 1 9 0 7 5 1 4 4 3 3 1 1 1 1 2 1 2 3 1 2 1 8 0 11 3 6 1 3 3 2 8 6 2 6 7 3 1 1 1 2 1 1 3 5 3 5 3 3 3 4 7 4 5 5 3 5 1 6 0 8 3 2 8 1 9 6 1 9 3 1 1 2 2 1 1 9 0 8 1 9 4 6 1 9 9 8 1 3 2 3 1 2 2 3 3 1 8 0 9 5 3 1 9 6 6 7 7 4 1 1 1 1 2 3 1 1 1 1 1 5 4 3 6 1 9 0 11 1 7 4 2 7 4 8 9 3 5 4 1 1 3 3 1 1 2 1 3 1 7 0 9 1 2 2 7 5 5 9 5 3 2 2 3 1 3 3 3 1 8 0 6 1 6 1 2 4 1 3 1 1 2 1 3 1 1 2 2 3 2 3 4 3 7 1 7 0 8 5 9 7 1 5 1 7 7 2 1 1 1 2 1 1 1 9 0 8 3 4 9 3 6 1 2 3 3 2 2 1 2 3 2 1 1 1 8 0 6 2 4 5 5 7 1 3 2 3 1 2 2 2 2 1 1 5 5 3 4 1 3 7 1 8 0 9 1 6 3 9 4 1 9 4 8 2 3 2 3 2 1 1 1 1 9 0 10 4 1 4 5 2 6 1 6 2 2 1 3 3 1 3 2 3 2 2 1 5 0 6 1 9 9 6 5 1 3 1 2 1 1 1 1 2 4 3 3 4 3 7 1 9 0 7 5 5 5 5 1 3 3 3 2 1 3 2 1 2 3 1 1 7 0 6 6 9 7 9 1 5 1 2 3 1 1 3 1 1 9 0 11 5 3 7 6 7 4 8 1 1 8 3 2 1 2 3 2 1 3 1 1 2 3 3 1 4 4 2 4 1 7 5 3 9 7 8 7 2 5 4 3 7 1 6 0 8 9 1 1 7 4 1 1 2 3 2 1 3 2 2 1 8 0 7 8 4 5 4 4 1 2 1 2 2 1 3 3 2 1 1 6 0 10 7 8 4 1 1 7 5 9 5 2 1 1 1 3 1 1 1 2 2 1 5 4 4 3 5 1 8 0 10 3 1 2 1 8 1 5 4 2 7 2 1 3 2 3 2 1 3 1 8 0 10 4 1 8 6 8 6 4 2 5 1 1 2 2 3 2 2 1 1 1 5 0 9 1 5 8 4 1 7 6 7 1 1 1 2 2 2 4 1 3 3 1 3 7 1 8 0 8 1 6 3 2 6 7 2 7 2 2 3 3 1 1 2 1 1 7 0 9 7 1 3 4 5 8 9 1 6 3 1 2 2 2 1 2 1 5 0 7 8 1 8 4 2 5 6 3 1 3 2 2 2 5 3 1 4 2 1 3 5 1 8 0 10 1 1 5 7 3 7 5 1 3 7 1 2 3 1 3 1 2 1 1 8 0 9 3 1 2 1 1 7 8 1 6 3 3 2 1 2 1 1 1 1 5 0 11 5 4 1 5 2 1 6 2 2 6 9 3 3 3 2 1 4 1 1 3 2 3 4 1 7 0 7 5 9 1 2 7 3 9 1 2 3 2 3 2 3 1 5 0 7 4 7 5 8 1 5 3 2 3 3 1 1 1 6 0 9 2 2 8 5 3 1 2 1 6 3 2 2 1 1 3 4 1 3 5 5 1 4 3 4 4 3 5 1 8 0 10 9 5 8 8 3 3 3 1 8 1 2 3 2 1 2 1 3 2 1 6 0 11 4 9 1 2 8 6 7 7 9 6 4 2 1 1 1 3 2 1 6 0 8 2 3 1 3 6 4 8 8 2 1 3 2 3 1 1 2 4 3 2 3 4 1 9 0 10 5 6 5 8 4 1 5 8 1 5 1 3 1 2 1 1 1 2 1 1 8 0 7 6 2 8 3 9 6 1 2 1 1 3 2 3 2 2 1 7 0 6 9 9 2 5 6 1 1 2 3 1 2 3 2 1 5 4 2 3 5 1 6 0 6 1 4 4 1 9 1 1 1 2 1 3 2 1 5 0 10 9 9 4 1 6 5 3 8 3 9 3 1 3 3 1 1 8 0 9 6 8 1 3 8 6 1 4 5 3 1 2 3 3 1 3 2 3 5 2 4 3 3 6 1 7 0 6 8 1 2 4 5 9 1 3 2 3 3 2 1 1 6 0 6 6 1 8 7 5 1 2 3 1 2 1 1 1 5 0 8 9 1 7 5 3 9 5 5 2 1 2 2 1 1 2 2 2 4 1 4 1 6 5 4 3 3 5 1 9 0 10 3 6 1 2 9 6 8 2 9 5 1 2 1 1 3 3 2 1 3 1 9 0 9 6 3 4 7 5 1 6 4 9 1 2 2 1 3 1 1 2 1 1 8 0 8 7 2 6 6 1 3 8 1 1 3 3 1 1 1 1 1 2 3 1 2 5 3 5 1 7 0 10 8 8 8 1 8 5 4 6 1 3 2 2 2 3 1 3 1 1 8 0 10 1 2 1 8 7 3 2 2 6 3 1 3 2 2 3 3 1 1 1 5 0 11 1 9 6 7 1 8 8 8 2 6 6 2 2 2 1 2 4 3 2 1 4 3 6 1 7 0 10 3 6 1 7 9 3 3 1 8 9 3 3 2 3 2 1 3 1 9 0 7 2 2 2 4 5 9 1 2 2 2 2 2 1 1 3 2 1 7 0 7 1 1 3 9 5 3 4 1 1 1 2 1 3 1 3 2 3 1 4 3 3 7 1 6 0 10 6 7 4 3 1 1 8 4 3 6 2 1 1 3 1 3 1 7 0 6 1 1 4 2 8 3 1 2 1 1 1 2 2 1 9 0 10 6 9 1 8 5 5 4 8 5 1 2 3 3 2 1 2 1 3 3 4 2 2 5 3 3 1 4 2 3 5 5 3 6 1 7 0 9 9 9 8 1 7 5 1 3 3 2 3 2 1 3 1 1 1 7 0 7 4 1 9 9 3 1 8 1 1 3 1 2 1 1 1 9 0 9 9 9 8 5 2 7 2 5 1 2 1 1 1 2 2 3 1 3 1 4 1 2 3 5 3 4 1 7 0 6 7 4 4 3 6 1 1 3 2 1 1 2 3 1 6 0 6 3 1 9 5 5 5 3 3 1 1 2 1 1 9 0 8 8 8 4 5 4 1 5 7 1 3 2 3 1 3 2 2 2 1 4 3 5 3 6 1 9 0 10 7 7 2 9 5 1 4 2 1 4 3 2 3 3 2 1 2 3 1 1 9 0 8 1 6 4 7 1 4 9 1 1 3 2 3 3 2 2 2 3 1 6 0 9 9 8 6 6 6 1 6 4 9 3 2 1 3 3 1 1 2 4 1 3 4 3 5 1 6 0 10 3 1 7 3 9 7 5 6 7 8 2 1 1 1 2 2 1 5 0 8 1 9 1 4 8 1 2 5 1 2 1 3 2 1 7 0 9 4 6 9 6 1 6 8 5 6 1 3 1 1 1 1 2 3 2 1 3 1 3 5 1 7 0 6 9 8 8 1 3 5 1 2 1 1 3 2 3 1 9 0 8 4 8 7 9 3 7 1 7 2 2 1 3 1 1 2 3 2 1 9 0 7 3 2 8 1 8 3 2 3 3 1 1 3 1 1 1 1 1 2 3 3 4 5 5 5 2 2 5 3 3 5 1 7 0 8 1 1 1 5 1 8 5 3 3 2 1 2 1 2 2 1 7 0 9 5 1 8 1 5 4 8 6 5 1 1 2 3 1 2 3 1 6 0 10 1 9 8 4 5 7 1 7 5 1 3 1 2 2 1 1 2 2 1 2 5 3 5 1 6 0 9 8 3 3 1 2 5 1 3 6 1 2 2 3 1 2 1 6 0 8 5 2 5 1 4 4 4 1 3 1 2 2 1 1 1 5 0 10 6 3 3 1 3 7 5 3 8 8 1 3 2 2 1 1 3 4 2 5 3 6 1 9 0 8 6 8 1 4 8 1 6 8 1 3 2 3 1 3 3 1 3 1 7 0 7 7 1 1 1 3 4 9 2 1 3 2 2 1 2 1 8 0 8 3 6 2 8 5 1 6 1 2 2 2 3 1 1 2 1 4 1 1 3 1 3 3 6 1 8 0 10 3 2 9 1 3 1 6 8 4 3 1 1 2 1 2 2 2 2 1 8 0 10 4 1 3 7 4 4 2 3 6 1 1 1 3 1 2 1 3 1 1 5 0 8 8 9 1 3 1 6 5 2 2 1 1 2 3 2 5 2 2 3 1 3 6 1 7 0 6 6 6 1 1 2 3 2 1 3 1 2 2 3 1 5 0 11 9 3 2 7 4 7 6 3 1 6 6 3 3 1 2 1 1 8 0 11 9 1 5 8 7 1 2 1 1 9 2 1 2 1 2 2 1 1 1 2 4 3 5 2 3 3 2 1 5 3 3 4 1 9 0 6 8 8 5 6 1 2 2 3 3 1 2 2 2 2 1 1 7 0 6 9 7 9 1 3 9 3 3 1 1 2 1 2 1 5 0 6 2 5 1 5 9 5 1 2 1 2 1 3 5 5 2 3 7 1 7 0 7 2 2 2 1 3 5 1 1 3 1 2 2 3 3 1 9 0 10 4 1 3 9 5 4 4 1 5 1 3 2 2 3 2 1 1 2 3 1 8 0 11 2 9 6 8 3 6 1 1 1 4 4 3 1 3 1 3 1 2 3 2 1 4 5 4 4 1 3 6 1 7 0 8 1 3 6 4 1 5 7 7 1 2 1 3 3 1 2 1 5 0 10 9 1 4 1 3 3 8 4 5 6 3 2 1 1 2 1 9 0 9 2 6 9 1 5 9 6 4 4 3 1 1 1 2 2 2 2 3 2 2 1 2 5 1 3 7 1 6 0 8 9 1 4 4 1 2 6 8 1 1 1 3 3 3 1 5 0 8 1 6 7 1 4 4 8 3 2 2 3 3 1 1 6 0 10 1 4 8 7 1 2 9 8 9 7 1 2 2 3 1 3 5 5 2 4 2 2 3 3 4 1 5 0 8 1 5 8 2 7 9 8 1 3 3 3 1 1 1 5 0 9 5 1 2 4 6 8 2 4 1 3 3 3 1 1 1 7 0 7 7 4 9 4 1 7 1 3 1 3 3 3 3 1 5 5 2 1 3 1 4 5 5 3 4 1 8 0 10 7 1 9 2 7 1 6 9 6 8 1 1 2 3 3 2 3 1 1 7 0 7 3 1 9 8 1 4 2 1 3 3 2 2 3 2 1 7 0 10 5 6 5 7 8 1 6 6 8 4 2 1 1 3 2 3 3 2 2 5 3 3 6 1 9 0 9 7 9 4 5 1 1 5 7 2 1 1 1 2 3 3 1 1 1 1 6 0 9 9 2 5 3 7 1 1 8 3 1 1 3 3 3 1 1 6 0 9 5 2 7 2 1 8 1 8 1 1 1 1 2 1 3 3 5 1 1 2 4 3 4 1 8 0 10 3 6 3 8 4 5 1 6 8 2 1 1 1 2 1 2 1 2 1 7 0 7 1 5 6 1 4 5 9 1 3 2 2 1 3 1 1 8 0 8 9 2 9 9 6 8 1 1 3 3 3 2 1 1 1 3 1 4 3 4 3 4 1 6 0 10 3 9 2 3 9 1 1 4 2 1 2 2 1 1 3 3 1 7 0 10 1 5 1 7 2 1 2 2 8 3 1 1 1 1 2 1 3 1 8 0 6 9 8 1 3 4 6 1 1 3 2 3 2 2 3 3 5 5 4 3 6 1 5 0 11 1 8 8 4 9 1 3 4 3 7 5 2 1 1 2 3 1 8 0 7 1 3 5 6 7 6 4 1 1 1 3 2 1 1 1 1 7 0 11 3 3 7 3 7 7 8 3 3 5 1 3 3 1 3 3 2 2 2 5 5 4 2 5 6 1 6 5 3 4 5 6 3 5 3 3 6 1 6 0 8 1 1 3 4 2 1 1 7 3 1 1 3 1 1 1 8 0 8 4 1 1 9 2 9 9 4 1 1 3 1 1 3 3 1 1 5 0 10 1 2 9 3 8 5 9 3 4 8 3 2 3 1 2 3 5 2 5 3 4 3 5 1 9 0 6 2 3 7 1 6 7 2 1 2 3 2 2 2 3 1 1 6 0 9 8 1 8 9 5 7 4 1 4 2 1 1 3 1 2 1 6 0 9 6 8 6 1 5 2 1 3 6 1 3 1 2 1 1 3 3 3 2 5 3 5 1 9 0 7 6 3 3 3 1 3 3 1 3 1 1 2 1 2 2 2 1 9 0 10 3 6 8 7 4 4 9 1 1 3 3 2 2 3 2 1 2 1 1 1 6 0 6 1 8 4 3 8 8 1 2 1 3 3 3 3 3 2 4 1 3 6 1 8 0 11 8 9 6 2 1 1 1 9 8 2 5 2 1 3 2 1 1 1 1 1 9 0 10 9 5 8 1 1 4 4 1 7 7 2 3 1 1 2 2 3 2 3 1 6 0 11 1 5 8 9 5 7 6 8 6 1 6 1 1 1 1 2 3 4 1 1 4 2 3 3 4 1 9 0 9 4 1 9 6 6 9 8 1 2 2 3 1 2 1 3 2 2 1 1 6 0 9 3 7 1 2 2 5 4 2 2 1 2 2 1 3 2 1 7 0 9 5 5 1 6 1 5 1 6 6 2 3 1 1 1 1 1 1 5 4 5 3 4 5 4 4 3 5 1 7 0 7 5 6 5 7 1 4 9 3 3 1 3 1 1 3 1 5 0 9 1 1 9 9 2 9 9 5 9 2 1 3 1 1 1 8 0 8 8 1 4 6 4 7 8 4 1 3 3 1 3 2 3 3 3 3 5 1 4 3 7 1 9 0 7 6 8 2 1 8 3 9 3 1 3 3 2 3 1 1 3 1 7 0 8 1 5 9 4 2 7 2 9 1 1 1 1 2 1 1 1 5 0 11 8 5 1 4 2 6 1 1 4 9 4 1 1 1 2 1 3 2 5 3 1 4 4 3 4 1 7 0 11 9 5 7 1 8 1 2 7 9 7 5 1 1 2 3 2 3 1 1 6 0 10 2 1 9 3 8 3 1 5 4 5 3 2 1 3 1 1 1 9 0 10 3 5 8 9 4 3 1 6 3 3 3 3 2 3 1 2 3 3 2 3 1 1 4 3 7 1 9 0 8 1 1 8 5 2 6 8 7 2 3 3 2 1 1 1 1 3 1 6 0 7 7 5 8 3 1 1 1 1 2 1 3 1 1 1 6 0 7 1 8 3 8 2 5 5 3 2 2 2 3 1 3 2 5 3 3 5 2 2 6 4 5 5 5 3 6 1 9 0 10 8 9 6 9 9 6 1 1 7 3 3 2 2 1 1 3 1 2 1 1 6 0 11 1 4 7 8 9 5 4 2 1 6 1 1 2 1 1 3 3 1 8 0 8 8 1 7 6 7 5 7 9 2 2 3 2 1 3 3 3 1 3 5 2 1 3 3 5 1 5 0 9 3 7 2 1 2 7 5 1 1 3 2 2 1 1 1 8 0 6 7 1 6 9 1 8 3 2 3 2 2 1 1 1 1 7 0 9 7 2 9 4 1 8 1 1 1 2 1 2 3 1 1 3 2 1 4 4 3 3 4 1 7 0 7 9 7 1 6 2 6 1 2 3 1 1 2 1 2 1 9 0 8 9 9 3 3 5 3 1 1 2 1 1 1 2 1 3 1 3 1 5 0 6 1 1 6 6 2 5 1 2 3 3 1 4 2 3 5 3 4 1 5 0 10 2 6 1 4 1 7 4 2 3 2 1 2 2 3 2 1 7 0 11 1 3 5 1 3 3 7 1 5 1 5 2 1 3 2 1 2 1 1 8 0 8 4 1 8 2 8 4 3 1 2 3 1 2 2 1 2 2 2 2 1 3 3 4 1 8 0 8 5 6 9 5 7 4 1 4 1 3 3 2 2 3 2 1 1 5 0 10 4 5 5 2 7 6 3 1 9 5 1 2 2 2 1 1 8 0 7 2 9 5 1 2 5 6 3 1 1 3 1 1 1 3 2 3 1 4 2 2 4 2 3 5 3 3 4 1 6 0 11 1 8 7 7 1 6 6 5 3 1 2 1 2 3 3 1 1 1 5 0 9 5 1 1 8 1 9 3 3 6 3 1 1 2 3 1 5 0 11 9 5 6 8 6 2 1 8 7 4 1 1 3 2 1 1 2 4 1 1 3 6 1 9 0 6 9 3 3 4 1 7 1 3 2 1 1 1 2 3 1 1 6 0 10 1 3 8 2 8 5 4 8 2 8 1 2 3 2 3 2 1 5 0 7 7 4 4 7 1 7 8 1 3 3 1 3 2 4 1 3 2 3 3 6 1 5 0 9 4 5 7 7 3 2 2 1 5 1 3 3 3 1 1 6 0 11 3 5 1 5 4 9 9 4 2 9 7 3 3 1 1 3 2 1 7 0 10 9 7 8 1 9 3 2 2 9 6 2 3 1 2 2 1 3 3 3 3 1 2 1 3 7 1 6 0 7 7 6 4 7 8 5 1 2 3 1 2 3 1 1 9 0 7 7 4 1 5 5 7 8 3 1 1 1 3 3 1 2 2 1 8 0 6 3 1 8 2 4 3 1 2 3 1 1 2 2 2 5 4 1 2 4 1 1 3 6 1 5 0 6 3 7 1 6 4 6 2 3 1 1 1 1 8 0 10 1 8 3 1 5 1 4 1 3 6 1 2 1 2 2 1 2 1 1 5 0 11 8 5 2 3 4 4 4 5 1 1 8 3 1 3 3 2 3 1 2 1 2 1 4 2 1 5 3 3 4 1 7 0 9 1 1 9 6 3 9 2 5 5 3 3 1 2 2 1 3 1 8 0 9 6 9 8 4 8 1 6 2 4 1 1 1 2 1 1 2 3 1 7 0 9 6 8 4 4 1 1 3 1 2 1 3 2 2 3 1 3 3 5 1 2 3 6 1 9 0 7 7 5 1 9 9 3 6 3 1 3 2 1 2 3 1 1 1 6 0 6 7 1 6 9 2 3 2 3 2 3 3 1 1 6 0 8 3 6 5 9 1 7 9 7 2 1 3 2 1 1 3 5 1 3 1 3 3 4 1 5 0 8 1 2 9 1 9 7 7 5 3 3 2 1 1 1 5 0 11 5 5 8 3 1 7 5 8 4 1 1 1 1 3 3 2 1 7 0 10 8 3 2 1 7 2 8 7 9 7 1 2 1 3 3 1 3 1 2 2 1 3 6 1 6 0 10 2 8 7 5 1 7 1 8 4 1 3 1 1 2 2 2 1 6 0 9 8 9 8 1 9 1 1 1 3 2 1 2 2 1 1 1 5 0 8 1 5 1 5 8 6 4 6 3 3 2 1 2 4 2 3 2 2 2 3 4 1 8 0 6 4 4 6 5 1 9 2 1 2 1 3 1 2 1 1 8 0 10 2 1 1 8 1 3 2 1 2 1 2 1 3 3 3 1 2 2 1 6 0 8 2 4 1 1 3 4 7 1 2 1 3 1 1 1 1 1 3 3 3 5 2 4 3 3 7 1 6 0 10 1 2 4 5 3 5 9 7 8 1 1 1 3 1 3 2 1 5 0 8 7 1 4 1 2 7 4 1 3 1 3 3 2 1 9 0 11 9 9 7 4 3 4 4 9 1 2 3 1 2 1 3 1 2 1 3 1 2 3 4 3 2 2 1 3 6 1 9 0 10 3 4 6 5 8 1 1 9 2 2 3 3 2 2 2 2 1 2 3 1 5 0 9 4 1 3 9 9 5 5 1 1 1 3 2 1 3 1 9 0 9 1 6 2 6 9 2 1 9 9 1 1 1 3 3 1 1 2 1 3 3 1 1 1 3 3 6 1 5 0 11 2 7 7 3 1 1 3 8 1 9 6 1 1 1 1 3 1 9 0 8 7 3 1 7 9 5 1 8 2 1 1 1 1 2 2 3 3 1 9 0 11 9 1 7 1 8 1 1 3 4 6 3 2 1 2 2 3 2 3 1 1 3 5 4 4 5 5 3 4 1 7 0 6 9 2 6 1 1 1 3 3 3 1 3 1 1 1 6 0 11 9 2 2 1 2 5 7 7 4 5 7 1 3 3 1 1 2 1 6 0 7 6 1 9 9 1 3 5 2 1 1 1 3 2 4 4 3 1 1 2 1 8 7 5 7 2 4 5 3 6 1 7 0 8 1 6 7 2 5 2 1 1 2 2 2 1 2 1 2 1 9 0 9 9 4 3 4 5 9 1 2 8 3 1 1 2 2 1 3 1 1 1 7 0 7 6 4 8 2 1 4 8 3 3 1 1 2 2 2 5 2 5 4 1 3 3 7 1 8 0 9 8 7 3 3 6 1 5 1 9 3 3 3 1 3 2 1 3 1 6 0 11 4 7 4 3 8 7 1 7 1 2 8 1 1 3 2 1 3 1 5 0 8 9 1 1 8 7 2 2 1 1 1 1 1 2 4 5 1 5 3 5 3 3 4 1 5 0 6 8 7 2 1 1 1 3 1 2 3 2 1 5 0 6 9 5 1 5 7 3 2 2 1 1 3 1 5 0 6 9 4 1 3 1 5 1 2 1 3 1 3 4 2 3 3 7 1 6 0 9 9 8 3 1 7 6 8 7 8 3 3 2 1 1 1 1 7 0 10 2 7 5 2 8 7 6 1 3 2 2 1 3 1 1 1 2 1 6 0 7 1 1 8 9 2 7 2 2 3 1 1 3 2 5 5 5 3 4 2 4 4 2 2 3 1 5 4 3 6 1 9 0 8 7 5 1 9 3 4 7 6 3 2 1 2 1 1 3 2 2 1 5 0 6 9 8 7 3 8 1 1 1 3 1 2 1 9 0 10 8 5 5 3 1 3 5 4 1 7 2 1 2 3 1 1 1 2 1 4 1 1 1 5 2 3 6 1 6 0 6 9 9 1 2 4 1 1 1 1 2 2 3 1 5 0 6 8 2 4 5 6 1 2 1 1 1 2 1 9 0 7 4 1 2 2 2 4 5 2 2 1 3 3 2 2 2 1 2 1 2 5 1 1 3 5 1 7 0 11 5 3 1 7 1 8 8 8 4 9 9 3 3 1 1 3 1 3 1 5 0 10 6 5 1 3 8 8 7 2 1 5 3 2 3 1 1 1 8 0 11 1 1 3 7 8 3 5 9 5 2 3 1 1 3 3 2 1 1 3 3 5 3 3 1 3 5 1 5 0 8 9 1 6 5 1 4 8 1 3 1 3 1 2 1 5 0 6 1 6 2 9 9 4 3 2 3 1 1 1 5 0 11 3 5 4 2 4 1 1 1 3 4 6 2 1 3 2 2 3 4 4 1 5 3 7 1 9 0 8 1 5 9 2 6 8 4 1 3 3 1 1 3 3 3 3 3 1 7 0 8 4 1 1 1 7 2 5 5 1 2 1 3 1 1 1 1 8 0 8 8 5 9 2 5 7 4 1 2 1 1 1 1 1 2 2 1 4 2 2 5 3 5 4 2 1 7 5 3 3 6 1 9 0 9 5 1 7 6 2 1 9 3 1 1 2 1 3 2 3 1 1 1 1 7 0 9 6 1 5 4 4 1 3 5 4 1 1 3 3 1 2 3 1 6 0 7 5 3 8 3 7 7 1 2 3 2 3 2 1 4 1 5 2 5 2 3 7 1 8 0 8 2 3 6 6 4 1 1 4 3 2 3 3 2 2 1 2 1 9 0 10 4 2 5 3 6 3 9 2 1 1 1 2 3 2 2 1 3 1 3 1 6 0 9 5 4 8 8 3 1 1 3 6 3 2 3 3 1 1 4 3 2 5 3 5 3 3 5 1 5 0 11 1 6 8 1 2 3 5 7 7 3 8 1 3 2 1 3 1 6 0 10 6 9 3 7 5 5 1 1 5 6 1 3 2 1 1 2 1 5 0 10 3 7 3 1 5 1 7 6 2 9 2 2 1 2 1 5 2 2 1 2 3 7 1 8 0 6 6 5 1 1 3 7 2 1 3 2 1 2 1 2 1 7 0 7 7 5 4 3 8 1 3 1 2 3 1 1 1 3 1 7 0 11 4 4 6 7 6 1 5 7 2 8 1 2 3 3 1 2 3 1 1 4 1 1 5 5 1 3 6 1 5 0 9 6 2 4 3 5 1 5 1 7 3 3 2 1 2 1 9 0 10 6 1 3 1 8 9 3 8 5 4 1 1 2 3 1 3 3 1 2 1 7 0 9 5 3 7 5 4 1 1 1 6 1 2 1 3 2 2 1 2 1 2 3 1 5 6 1 6 5 3 3 7 1 6 0 9 8 1 9 8 7 1 5 3 2 1 3 1 3 3 1 1 5 0 8 8 3 8 5 1 1 5 4 1 3 1 2 3 1 6 0 9 6 7 2 3 1 5 5 7 5 1 1 2 1 3 3 5 3 1 1 5 4 5 3 4 1 8 0 6 8 6 7 1 5 8 1 1 1 1 2 1 1 2 1 7 0 9 1 5 7 9 1 9 9 1 4 1 3 2 2 1 2 1 1 5 0 11 6 7 1 2 8 3 2 7 4 6 5 1 1 1 3 3 3 3 1 4 3 6 1 8 0 9 8 2 2 1 6 6 9 2 1 3 2 3 3 2 2 1 2 1 7 0 7 4 7 1 1 2 8 3 2 1 1 3 2 3 3 1 9 0 6 8 1 1 1 7 2 1 1 2 3 2 1 1 3 2 1 5 3 5 3 1 3 5 1 5 0 7 8 3 3 1 7 7 1 2 3 3 3 1 1 8 0 11 3 1 6 8 7 1 5 2 9 5 6 1 1 2 1 2 2 3 1 1 6 0 7 1 6 2 6 9 1 1 2 1 1 1 1 2 2 4 2 5 4 3 5 1 7 0 9 3 9 3 8 8 1 2 2 8 3 1 2 1 3 2 3 1 5 0 7 1 8 4 7 7 2 6 2 3 1 3 1 1 7 0 9 9 1 4 8 7 8 9 9 1 3 2 3 2 3 2 1 2 5 4 2 5 5 5 6 5 4 3 4 1 8 0 11 2 5 5 4 1 6 4 1 4 1 4 2 2 3 1 2 2 2 1 1 6 0 9 1 8 3 5 6 1 2 3 2 1 2 2 2 1 3 1 5 0 8 8 1 5 8 1 5 2 7 2 2 1 3 1 4 3 2 3 3 7 1 5 0 7 7 6 9 1 6 1 7 3 1 3 1 1 1 5 0 6 7 8 3 1 2 8 1 3 3 2 3 1 9 0 9 7 9 3 1 7 1 9 9 4 1 1 1 2 1 1 3 3 2 2 1 3 3 3 1 5 3 6 1 7 0 11 7 1 3 2 1 1 6 5 4 5 5 1 2 1 3 1 3 3 1 6 0 6 1 2 9 7 7 1 2 1 2 3 1 3 1 8 0 10 6 9 1 9 8 9 3 4 1 5 1 1 1 1 2 1 1 1 3 3 3 5 1 4 3 7 1 5 0 8 8 3 4 8 7 1 7 9 1 3 1 2 1 1 6 0 11 9 1 7 1 6 8 8 9 3 5 5 3 2 1 2 1 1 1 5 0 9 9 9 7 1 7 1 2 1 4 2 2 2 1 2 3 3 1 5 1 1 3 3 6 1 7 0 10 3 4 8 6 8 6 1 9 3 3 1 2 3 3 1 2 3 1 9 0 9 1 9 8 3 9 1 8 7 2 1 3 1 3 1 3 3 2 3 1 7 0 8 9 1 4 8 7 5 5 6 1 2 3 3 3 3 2 4 5 4 2 4 1 4 5 5 7 5 4 3 4 1 5 0 8 8 1 6 6 6 8 8 1 1 1 1 2 2 1 6 0 10 5 9 1 3 8 8 9 7 2 9 3 1 3 2 2 1 1 6 0 8 5 7 2 1 3 3 6 1 3 1 1 1 2 1 2 1 2 4 3 4 1 7 0 10 1 2 2 5 9 1 1 7 1 6 3 2 2 3 3 1 2 1 8 0 10 1 9 4 7 7 8 3 3 9 4 2 1 2 3 1 2 2 1 1 7 0 8 7 4 6 4 1 2 6 7 1 2 1 2 1 1 2 1 5 5 3 3 5 1 5 0 10 6 7 2 1 5 1 9 8 8 9 2 1 1 1 1 1 8 0 10 2 1 9 6 1 1 4 7 9 5 1 3 3 2 3 1 3 1 1 5 0 11 5 4 7 7 5 9 5 5 7 1 7 1 1 1 1 3 4 3 1 1 2 3 7 1 8 0 9 9 5 1 7 6 5 7 4 8 1 1 3 3 3 1 1 2 1 5 0 9 1 8 5 3 4 8 5 1 6 1 2 3 1 3 1 5 0 7 1 6 6 8 7 3 7 3 1 3 1 3 1 2 5 2 3 5 3 3 4 1 6 0 10 1 4 2 2 6 8 6 6 3 6 1 3 1 2 1 2 1 7 0 11 3 3 2 1 1 9 1 1 4 7 7 1 3 1 1 1 2 3 1 8 0 11 6 2 1 4 3 9 8 4 4 6 2 2 2 1 1 1 2 2 2 3 3 3 5 1 4 4 6 5 5 3 7 1 7 0 7 6 6 3 2 7 1 5 3 3 1 3 1 3 1 1 6 0 11 5 7 1 2 5 5 1 5 5 9 4 1 1 1 3 1 2 1 6 0 7 5 5 6 5 4 1 8 1 1 2 2 1 2 3 3 5 5 2 3 2 3 5 1 6 0 9 4 6 5 8 4 5 1 1 5 1 3 1 1 3 3 1 7 0 10 3 2 1 9 3 2 3 4 9 1 1 3 1 2 1 1 2 1 8 0 9 9 1 3 1 1 4 4 9 9 3 3 1 3 1 3 2 2 1 3 3 2 2 3 7 1 8 0 6 1 7 2 7 1 5 1 3 3 1 1 3 2 3 1 9 0 9 3 2 4 1 9 1 8 1 9 3 1 3 1 3 3 1 1 1 1 6 0 9 5 5 1 6 4 7 2 8 6 1 2 3 1 1 2 2 4 2 1 4 1 2 3 6 1 9 0 10 1 5 1 3 7 4 6 3 7 2 3 1 1 1 2 1 1 3 2 1 9 0 6 7 4 1 1 1 8 2 2 1 2 3 2 3 1 2 1 8 0 6 8 1 5 2 8 4 1 3 2 2 3 2 1 1 1 2 5 1 4 2 3 4 1 8 0 11 1 5 8 3 4 7 8 5 6 5 8 3 3 3 2 3 1 2 3 1 5 0 6 1 7 9 6 1 1 2 2 1 2 1 1 5 0 11 4 1 4 1 7 4 3 3 2 2 3 1 3 2 1 1 4 2 3 3 4 7 4 3 2 7 5 7 6 10 3 1 4 3 1 4 6 2 diff --git a/2018/inputs/9.txt b/2018/inputs/9.txt new file mode 100644 index 0000000..eaf3e92 --- /dev/null +++ b/2018/inputs/9.txt @@ -0,0 +1 @@ +438 players; last marble is worth 71626 points diff --git a/2018/license.org b/2018/license.org new file mode 100644 index 0000000..8d31e87 --- /dev/null +++ b/2018/license.org @@ -0,0 +1,21 @@ +* The MIT License + +Copyright (c) 2018 Justin Worthe + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/2018/readme.org b/2018/readme.org new file mode 100644 index 0000000..7fe82e4 --- /dev/null +++ b/2018/readme.org @@ -0,0 +1,38 @@ +* Advent of Code 2018 + +** What is Advent of Code? + +Advent of Code is a programming advent calendar. On the 25 days of +December leading up to Christmas, each morning a new programming +challenge is unlocked. The race is then on to see who can solve the +challenge and get the answer to their particular input first. + +It's a lot of fun. I have my solutions posted here so that I can share +them with my friends, as well as the broader community if they're +interested. + +** A note on error handling and code quality + +The only important metric to consider in terms of taking the Advent of +Code challenges seriously from a competitive point of view is how +quickly you arrive at an answer for your particular input. + +These solutions should not in any way be seen as an example of good +coding standards in Rust. The error handling in particular is +appalling. The reason for this is that I can look at the input data +and be certain that some error cases won't come up, like empty +lists. I can also assume that things like file system access will +always work because I'm only running it on my machine under my +supervision. + +When my assumptions are wrong, the program panics and dies, but I'm +currently there programming it when it's running so that isn't really +a big deal. + +The short version of what I'm trying to say is that even though I use +~unwrap~ all over the place in this particular repo, I still think +it's a really bad idea to use it in a real project. + +** License + +See [[./license.org]]. diff --git a/2018/src/bin/day_1.rs b/2018/src/bin/day_1.rs new file mode 100644 index 0000000..4693579 --- /dev/null +++ b/2018/src/bin/day_1.rs @@ -0,0 +1,32 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +extern crate im_rc; + +use std::error::Error; +use std::path::PathBuf; + +use im_rc::HashSet; + +// cargo watch -cs "cargo run --release --bin day_1" + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/1.txt"))?; + let input_ints: Vec<i32> = input.iter().map(|str| str.parse::<i32>().unwrap()).collect(); + + println!("Input: {:?}", input_ints); + + let sum: i32 = input_ints.iter().sum(); + println!("Sum: {}", sum); + + let first_repeat = input_ints.iter().cycle().try_fold((0, HashSet::new()), |(acc, seen), &i| { + if seen.contains(&acc) { + Err(acc) + } else { + Ok((acc + i, seen.update(acc))) + } + }).err().unwrap(); + println!("First repeat: {}", first_repeat); + + Ok(()) +} diff --git a/2018/src/bin/day_10.rs b/2018/src/bin/day_10.rs new file mode 100644 index 0000000..082be7c --- /dev/null +++ b/2018/src/bin/day_10.rs @@ -0,0 +1,82 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::str::FromStr; + +use std::error::Error; +use std::path::PathBuf; + +use std::i32; + +// cargo watch -cs "cargo run --release --bin day_10" + + + +#[derive(Debug, Clone)] +struct Star { + x: i32, + y: i32, + dx: i32, + dy: i32 +} + +impl FromStr for Star { + type Err = Box<Error>; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + let split = s + .split(|c: char| c != '-' && !c.is_numeric()) + .filter(|s| !s.is_empty()) + .map(|s| s.parse()) + .collect::<Result<Vec<i32>, _>>()?; + + Ok(Star { + x: split[0], + y: split[1], + dx: split[2], + dy: split[3] + }) + } +} + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/10.txt"))?; + let mut stars = input.iter().map(|line| line.parse::<Star>().unwrap()).collect::<Vec<_>>(); + + //debug!(input); + //debug!(stars); + + let screen_width = 80; + let screen_height = 80; + + for seconds in 0..1000000 { + let min_x = stars.iter().map(|s| s.x).min().unwrap(); + let max_x = stars.iter().map(|s| s.x).max().unwrap(); + let min_y = stars.iter().map(|s| s.y).min().unwrap(); + let max_y = stars.iter().map(|s| s.y).max().unwrap(); + + if max_x - min_x < screen_width && max_y - min_y < screen_height { + debug!(seconds); + for y in min_y..max_y+1 { + for x in min_x..max_x+1 { + let star_at_point = stars.iter().any(|s| s.x == x && s.y == y); + if star_at_point { + print!("#"); + } else { + print!(" "); + } + } + println!(); + } + println!(); + println!(); + } + + for star in &mut stars { + star.x += star.dx; + star.y += star.dy; + } + } + + Ok(()) +} diff --git a/2018/src/bin/day_11.rs b/2018/src/bin/day_11.rs new file mode 100644 index 0000000..0e458a3 --- /dev/null +++ b/2018/src/bin/day_11.rs @@ -0,0 +1,66 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::i32; + +// cargo watch -cs "cargo run --release --bin day_11" + +fn main() -> Result<(), Box<Error>> { + let input = 1723; + + println!("Input: {:?}", input); + + let powers = precompute_powers(input); + + let power_per_size = (1..300).map(|size| { + (1..302-size).map(|left| { + (1..302-size).map(|top| { + (power_for_block(left, top, size, &powers), (left, top, size)) + }).max_by_key(|(p, _)| *p).unwrap() + }).max_by_key(|(p, _)| *p).unwrap() + }).collect::<Vec<_>>(); + + let (max_power_at_size_3, coordinate_at_size_3) = power_per_size[2]; // index from 0 vs 1 + debug!(max_power_at_size_3); + debug!(coordinate_at_size_3); + + let (max_power, coordinate) = power_per_size.iter().max_by_key(|(p, _)| p).unwrap(); + + debug!(max_power); + debug!(coordinate); + + Ok(()) +} + +fn power_for_block(left: i32, top: i32, size: i32, powers: &[[i32;300];300]) -> i32 { + (left..left+size).map(|x| { + (top..top+size).map(|y| { + powers[x as usize - 1][y as usize - 1] + }).sum::<i32>() + }).sum() +} + +fn precompute_powers(input: i32) -> [[i32;300];300] { + let mut powers: [[i32;300];300] = [[0;300];300]; + for x in 1..301 { + for y in 1..301 { + powers[x as usize - 1][y as usize - 1] = power_from_coordinates(x, y, input); + } + } + powers +} + +fn power_from_coordinates(x: i32, y: i32, input: i32) -> i32 { + let rack_id = x + 10; + ((((rack_id * y) + input) * rack_id / 100) % 10) - 5 +} + + +#[test] +fn power_from_coord_example() { + assert_eq!(power_from_coordinates(3, 5, 8), 4); + assert_eq!(power_from_coordinates(122, 79, 57), -5); + assert_eq!(power_from_coordinates(217,196, 39), 0); + assert_eq!(power_from_coordinates(101, 153, 71), 4); +} diff --git a/2018/src/bin/day_12.rs b/2018/src/bin/day_12.rs new file mode 100644 index 0000000..65a966d --- /dev/null +++ b/2018/src/bin/day_12.rs @@ -0,0 +1,102 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +use std::str::FromStr; + +// cargo watch -cs "cargo run --release --bin day_12" + +use std::collections::HashSet; + +#[derive(Debug)] +struct Rule { + input: [bool; 5], + output: bool +} + +impl FromStr for Rule { + type Err = Box<Error>; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + //##..# => # + let mut input = [false; 5]; + let mut iter = s.chars().filter(|c| *c == '#' || *c == '.'); + for (i, c) in iter.by_ref().take(5).enumerate() { + if c == '#' { + input[i] = true; + } + } + Ok(Rule { + input, + output: iter.next() == Some('#') + }) + } +} + +impl Rule { + fn matches(&self, state: &HashSet<i64>, index: i64) -> bool { + self.input.iter().enumerate().all(|(i, expected)| { + let pot_index = index - 2 + i as i64; + *expected == state.contains(&pot_index) + }) + } +} + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/12.txt"))?; + + println!("Input: {:?}", input); + + let mut initial_state: HashSet<i64> = HashSet::new(); + for (i, c) in input[0].chars().filter(|c| *c == '#' || *c == '.').enumerate() { + if c == '#' { + initial_state.insert(i as i64); + } + } + let rules = input.iter().skip(1).map(|line| line.parse()).collect::<Result<Vec<Rule>, Box<Error>>>()?; + + debug!(initial_state); + debug!(rules); + + let part1_time = 20; + let part2_time = 50000000000; + + let part1_final_state = iterate_states(&initial_state, &rules, part1_time); + let sum_of_part1_pot_numbers: i64 = part1_final_state.iter().sum(); + debug!(sum_of_part1_pot_numbers); + + let part2_final_state = iterate_states(&initial_state, &rules, part2_time); + let sum_of_part2_pot_numbers: i64 = part2_final_state.iter().sum(); + debug!(sum_of_part2_pot_numbers); + + Ok(()) +} + +fn iterate_states(initial_state: &HashSet<i64>, rules: &[Rule], time: i64) -> HashSet<i64> { + let mut current_state = initial_state.clone(); + for current_time in 0..time { + let mut new_state = HashSet::new(); + let min = current_state.iter().min().cloned().unwrap_or(-1) - 2; + let max = current_state.iter().max().cloned().unwrap_or(-1) + 2; + + for i in min..max+1 { + if rules.iter().find(|r| r.matches(¤t_state, i)).expect("No matching rule").output { + new_state.insert(i as i64); + } + } + + if current_state.iter().map(|v| v + 1).collect::<HashSet<i64>>() == new_state { + // Iterations are just shifting 1 to the right at this + // point. Found by inspecting a debugging log of the + // generations. + + let remaining_iterations = time-current_time; + return current_state.iter().map(|v| v + remaining_iterations).collect::<HashSet<i64>>(); + } + + current_state = new_state; + } + current_state +} diff --git a/2018/src/bin/day_13.rs b/2018/src/bin/day_13.rs new file mode 100644 index 0000000..005f216 --- /dev/null +++ b/2018/src/bin/day_13.rs @@ -0,0 +1,249 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +// cargo watch -cs "cargo run --release --bin day_13" + +#[derive(Debug)] +enum Road { + LeftRight, + UpDown, + LeftUpRightDown, + RightUpLeftDown, + Intersection, + None +} + +#[derive(Debug)] +struct Cart { + next_turn: TurnDirection, + facing: FacingDirection, + x: usize, + y: usize, + crashed: bool + +} + +#[derive(Debug, Clone, Copy)] +enum FacingDirection { + Up, + Down, + Left, + Right +} + +#[derive(Debug, Clone, Copy)] +enum TurnDirection { + Left, + Straight, + Right +} + +impl TurnDirection { + fn next(&self) -> TurnDirection { + use TurnDirection::*; + + match *self { + Left => Straight, + Straight => Right, + Right => Left + } + } + + fn rotate(&self, facing: &FacingDirection) -> FacingDirection { + match *self { + TurnDirection::Left => match *facing { + FacingDirection::Up => FacingDirection::Left, + FacingDirection::Left => FacingDirection::Down, + FacingDirection::Down => FacingDirection::Right, + FacingDirection::Right => FacingDirection::Up + }, + TurnDirection::Right => match *facing { + FacingDirection::Up => FacingDirection::Right, + FacingDirection::Left => FacingDirection::Up, + FacingDirection::Down => FacingDirection::Left, + FacingDirection::Right => FacingDirection::Down + }, + TurnDirection::Straight => facing.clone() + } + } +} + + + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/13.txt"))?; + +// for i in &input { +// println!("{}", i); +// } + + let mut map: Vec<Vec<Road>> = Vec::new(); + let mut carts: Vec<Cart> = Vec::new(); + + for (y, line) in input.iter().enumerate() { + let mut map_row = Vec::new(); + for (x, c) in line.chars().enumerate() { + let tile = match c { + ' ' => Road::None, + '-' => Road::LeftRight, + '|' => Road::UpDown, + '/' => Road::LeftUpRightDown, + '\\' => Road::RightUpLeftDown, + '+' => Road::Intersection, + '^' => { + carts.push(Cart { + next_turn: TurnDirection::Left, + facing: FacingDirection::Up, + x: x, + y: y, + crashed: false + }); + Road::UpDown + }, + '<' => { + carts.push(Cart { + next_turn: TurnDirection::Left, + facing: FacingDirection::Left, + x: x, + y: y, + crashed: false + }); + Road::LeftRight + }, + 'v' => { + carts.push(Cart { + next_turn: TurnDirection::Left, + facing: FacingDirection::Down, + x: x, + y: y, + crashed: false + }); + Road::UpDown + }, + '>' => { + carts.push(Cart { + next_turn: TurnDirection::Left, + facing: FacingDirection::Right, + x: x, + y: y, + crashed: false + }); + Road::LeftRight + }, + + _ => { + panic!("Unknown character {}", c); + } + }; + map_row.push(tile); + } + map.push(map_row); + } + + while carts.len() > 1 { + carts.sort_unstable_by(|a, b| a.y.cmp(&b.y).then(a.x.cmp(&b.x))); + + for i in 0..carts.len() { + { + let mut cart = &mut carts[i]; + let road = &map[cart.y][cart.x]; + + match (road, cart.facing, cart.next_turn) { + (Road::LeftRight, FacingDirection::Left, _) => { + cart.x -= 1; + }, + (Road::LeftRight, FacingDirection::Right, _) => { + cart.x += 1; + }, + (Road::LeftRight, _, _) => { + panic!("Sideways cart heading left-right"); + }, + + (Road::UpDown, FacingDirection::Up, _) => { + cart.y -= 1; + }, + (Road::UpDown, FacingDirection::Down, _) => { + cart.y += 1; + }, + (Road::UpDown, _, _) => { + panic!("Sideways cart heading up-down"); + }, + + // / + (Road::LeftUpRightDown, FacingDirection::Down, _) => { + cart.x -= 1; + cart.facing = FacingDirection::Left; + }, + (Road::LeftUpRightDown, FacingDirection::Right, _) => { + cart.y -= 1; + cart.facing = FacingDirection::Up; + }, + (Road::LeftUpRightDown, FacingDirection::Left, _) => { + cart.y += 1; + cart.facing = FacingDirection::Down; + }, + (Road::LeftUpRightDown, FacingDirection::Up, _) => { + cart.x += 1; + cart.facing = FacingDirection::Right; + }, + + // \ + (Road::RightUpLeftDown, FacingDirection::Up, _) => { + cart.x -= 1; + cart.facing = FacingDirection::Left; + }, + (Road::RightUpLeftDown, FacingDirection::Left, _) => { + cart.y -= 1; + cart.facing = FacingDirection::Up; + }, + (Road::RightUpLeftDown, FacingDirection::Right, _) => { + cart.y += 1; + cart.facing = FacingDirection::Down; + }, + (Road::RightUpLeftDown, FacingDirection::Down, _) => { + cart.x += 1; + cart.facing = FacingDirection::Right; + }, + + (Road::Intersection, f, d) => { + cart.facing = d.rotate(&f); + cart.next_turn = d.next(); + match cart.facing { + FacingDirection::Up => { cart.y -= 1 }, + FacingDirection::Down => { cart.y += 1 }, + FacingDirection::Left => { cart.x -= 1 }, + FacingDirection::Right => { cart.x += 1 }, + } + }, + + (Road::None, _, _) => { + panic!("Offroad cart!"); + } + + } + + } + + let collisions = carts.iter() + .enumerate() + .filter(|(other_i, other)| *other_i != i && other.x == carts[i].x && other.y == carts[i].y) + .map(|(other_i, _)| other_i) + .collect::<Vec<_>>(); + for other_i in collisions { + let crash_location = (carts[i].x, carts[i].y); + debug!(crash_location); + carts[i].crashed = true; + carts[other_i].crashed = true; + } + } + + carts.retain(|cart| !cart.crashed); + } + + debug!(carts); + + Ok(()) +} diff --git a/2018/src/bin/day_14.rs b/2018/src/bin/day_14.rs new file mode 100644 index 0000000..cb16623 --- /dev/null +++ b/2018/src/bin/day_14.rs @@ -0,0 +1,111 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +// cargo watch -cs "cargo run --release --bin day_14" + +fn main() -> Result<(), Box<Error>> { + let input = 540561; + + let scoreboard = find_ten_scoreboard_after(input); + + println!("Result: "); + scoreboard.iter().for_each(|s| { + print!("{}", s); + }); + println!(); + + let first_occurence = find_first_occurence_of(input); + debug!(first_occurence); + + Ok(()) +} + +fn find_ten_scoreboard_after(input: usize) -> Vec<usize> { + let mut scoreboard = vec!(3,7); + let mut elf1_pos = 0; + let mut elf2_pos = 1; + + while scoreboard.len() < (input + 10) { + let next = scoreboard[elf1_pos] + scoreboard[elf2_pos]; + for digit in number_to_digits_vec(next) { + scoreboard.push(digit); + } + + elf1_pos = (elf1_pos + 1 + scoreboard[elf1_pos]) % scoreboard.len(); + elf2_pos = (elf2_pos + 1 + scoreboard[elf2_pos]) % scoreboard.len(); + } + + scoreboard.iter().skip(input).take(10).cloned().collect() +} + +fn find_first_occurence_of(input: usize) -> usize { + let target_sequence = number_to_digits_vec(input); + debug!(target_sequence); + + let mut scoreboard = vec!(3,7); + let mut elf1_pos = 0; + let mut elf2_pos = 1; + let mut target_index = None; + + while target_index.is_none() { + let next = scoreboard[elf1_pos] + scoreboard[elf2_pos]; + for digit in number_to_digits_vec(next) { + scoreboard.push(digit); + } + + elf1_pos = (elf1_pos + 1 + scoreboard[elf1_pos]) % scoreboard.len(); + elf2_pos = (elf2_pos + 1 + scoreboard[elf2_pos]) % scoreboard.len(); + + if scoreboard.len() >= target_sequence.len() + 2 { + for potential_target_index in scoreboard.len()-target_sequence.len()-2..scoreboard.len()-target_sequence.len()+1 { + let found = scoreboard.iter() + .skip(potential_target_index) + .take(target_sequence.len()) + .zip(target_sequence.iter()) + .all(|(a, b)| a == b); + if found { + target_index = Some(potential_target_index); + } + } + } + } + + target_index.unwrap() +} + +fn number_to_digits_vec(input: usize) -> Vec<usize> { + if input == 0 { + return vec!(0); + } + + let mut result = Vec::new(); + let mut acc = input; + while acc > 0 { + result.push(acc % 10); + acc /= 10; + } + result.reverse(); + result +} + +#[test] +fn vectorification() { + assert_eq!(number_to_digits_vec(10), vec!(1, 0)); + assert_eq!(number_to_digits_vec(1), vec!(1)); + assert_eq!(number_to_digits_vec(0), vec!(0)); +} + +#[test] +fn part1_examples() { + assert_eq!(find_ten_scoreboard_after(9), vec!(5,1,5,8,9,1,6,7,7,9)); + assert_eq!(find_ten_scoreboard_after(2018), vec!(5,9,4,1,4,2,9,8,8,2)); +} + +#[test] +fn part2_examples() { + assert_eq!(find_first_occurence_of(51589), 9); + assert_eq!(find_first_occurence_of(59414), 2018); +} diff --git a/2018/src/bin/day_15.rs b/2018/src/bin/day_15.rs new file mode 100644 index 0000000..c6f3cf2 --- /dev/null +++ b/2018/src/bin/day_15.rs @@ -0,0 +1,272 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +// cargo watch -cs "cargo run --release --bin day_15" + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/15.txt"))?; + + let (round_hp_product, _) = calculate_round_hp_product(&input, 3); + debug!(round_hp_product); + + for power in 3.. { + let (round_hp_product_without_losses, elf_losses) = calculate_round_hp_product(&input, power); + if (elf_losses == 0) { + debug!(round_hp_product_without_losses); + break; + } + } + + Ok(()) +} + +fn calculate_round_hp_product(input: &[String], elf_power: i32) -> (i32, usize) { + let goblin_power = 3; + let initial_hp = 200; + + let mut map = Vec::new(); + let mut units = Vec::new(); + + for (y, line) in input.iter().enumerate() { + let mut map_row = Vec::new(); + for (x, c) in line.chars().enumerate() { + map_row.push(c == '#'); + + let maybe_unit = match c { + 'G' => Some(Unit { + team: false, + x: x as i32, + y: y as i32, + hp: initial_hp + }), + 'E' => Some(Unit { + team: true, + x: x as i32, + y: y as i32, + hp: initial_hp + }), + _ => None + }; + if let Some(unit) = maybe_unit { + units.push(unit); + } + } + + map.push(map_row); + } + let start_elves = units.iter().filter(|u| u.team).count(); + + for round in 0.. { + // debug!(round); + // debug!(units); + // debug_print(&units, &map); + units.sort_unstable_by(|a, b| a.y.cmp(&b.y).then(a.x.cmp(&b.x))); + + for i in 0..units.len() { + if units[i].hp > 0 { + let battle_over = !units.iter().any(|other| other.hp > 0 && other.team != units[i].team); + if battle_over { + println!("Battle over"); + let hp_sum = units.iter().filter(|u| u.hp > 0).map(|u| u.hp).sum::<i32>(); + debug!(round); + debug!(hp_sum); + + let elf_losses = start_elves - units.iter().filter(|u| u.team).count(); + debug!(elf_losses); + return (round * hp_sum, elf_losses); + } + + let is_next_to_opponent = unit_at_point(!units[i].team, units[i].x-1, units[i].y, &units) + .or_else(|| unit_at_point(!units[i].team, units[i].x+1, units[i].y, &units)) + .or_else(|| unit_at_point(!units[i].team, units[i].x, units[i].y-1, &units)) + .or_else(|| unit_at_point(!units[i].team, units[i].x, units[i].y+1, &units)).is_some(); + if !is_next_to_opponent { + if let Some((next_x, next_y)) = find_next_step(i, &units, &map) { + units[i].x = next_x; + units[i].y = next_y; + } + } + + let mut attack_candidates = adjacent_units(!units[i].team, units[i].x, units[i].y, &units); + attack_candidates.sort_by(|&a, &b| units[a].hp.cmp(&units[b].hp)); + if let Some(&to_attack) = attack_candidates.first() { + let attack_power = if units[i].team { elf_power } else { goblin_power }; + units[to_attack].hp -= attack_power; + } + } + } + + units.retain(|u| u.hp > 0); + } + + panic!("Match ended unexpectedly"); +} + +fn find_next_step(i: usize, units: &[Unit], map: &Vec<Vec<bool>>) -> Option<(i32, i32)> { + let mut explored = vec!(Explored { + x: units[i].x, + y: units[i].y, + distance: 0, + parent: 0 + }); + + let mut explored_index = 0; + let mut distance_found = None; + while explored_index < explored.len() && distance_found.map_or(true, |distance| explored[explored_index].distance < distance) { + let distance = explored[explored_index].distance; + for (new_x, new_y) in adjacent_empty_spaces(explored[explored_index].x, explored[explored_index].y, &map, &units, &explored) { + explored.push(Explored { + x: new_x, + y: new_y, + distance: distance + 1, + parent: explored_index + }); + + if adjacent_units(!units[i].team, new_x, new_y, &units).len() > 0 { + distance_found = Some(distance + 1); + } + } + explored_index += 1; + } + + if let Some(distance) = distance_found { + let mut candidates = explored.iter().enumerate() + .filter(|(_,e)| e.distance == distance) + .filter(|(_,e)| adjacent_units(!units[i].team, e.x, e.y, &units).len() > 0) + .collect::<Vec<_>>(); + candidates.sort_by(|(_,a), (_,b)| a.y.cmp(&b.y).then(a.x.cmp(&b.x))); + let (best_index, _) = candidates[0]; + + let mut result_index = best_index; + let mut next_index = best_index; + while next_index != 0 { + result_index = next_index; + next_index = explored[result_index].parent; + } + return Some((explored[result_index].x, explored[result_index].y)); + } + None +} + +fn adjacent_empty_spaces(x: i32, y: i32, map: &Vec<Vec<bool>>, units: &[Unit], explored: &[Explored]) -> Vec<(i32, i32)> { + [(x, y-1), (x-1, y), (x+1, y), (x, y+1)].iter() + .filter(|(x, y)| *x >= 0 && *y >= 0) + .filter(|(x, y)| !explored.iter().any(|e| e.x == *x && e.y == *y)) + .filter(|(x, y)| !units.iter().any(|e| e.hp > 0 && e.x == *x && e.y == *y)) + .filter(|(x, y)| !map[*y as usize][*x as usize]) + .cloned() + .collect() +} + +fn adjacent_units(team: bool, x: i32, y: i32, units: &[Unit]) -> Vec<usize> { + [(x, y-1), (x-1, y), (x+1, y), (x, y+1)].iter() + .filter_map(|(x, y)| unit_at_point(team, *x, *y, units)) + .collect() +} + +fn unit_at_point(team: bool, x: i32, y: i32, units: &[Unit]) -> Option<usize> { + units.iter().enumerate() + .find(|(_, u)| u.hp > 0 && u.team == team && u.x == x && u.y == y) + .map(|(i, _)| i) +} + +#[derive(Debug, Clone)] +struct Unit { + team: bool, + x: i32, + y: i32, + hp: i32 +} + +#[derive(Debug)] +struct Explored { + x: i32, + y: i32, + distance: u32, + parent: usize +} + + +fn debug_print(units: &[Unit], map: &Vec<Vec<bool>>) { + for (y, line) in map.iter().enumerate() { + for (x, wall) in line.iter().enumerate() { + let unit = units.iter().find(|u| u.hp > 0 && u.x == x as i32 && u.y == y as i32); + print!("{}", match (wall, unit) { + (true, _) => '#', + (false, Some(unit)) if unit.team => 'E', + (false, Some(_)) => 'G', + (false, None) => '.' + }); + } + println!(); + } + println!(); + println!(); +} + +fn part_1_test(input: &[&str]) -> i32 { + let owned_input = input.iter() + .map(|&line| line.to_owned()) + .collect::<Vec<String>>(); + let (product, _) = calculate_round_hp_product(&owned_input, 3); + product +} + +#[test] +fn example_1() { + let input = vec!( + "#######", + "#.G...#", + "#...EG#", + "#.#.#G#", + "#..G#E#", + "#.....#", + "#######"); + assert_eq!(part_1_test(&input), 27730); +} + +#[test] +fn example_2() { + let input = vec!( + "#######", + "#G..#E#", + "#E#E.E#", + "#G.##.#", + "#...#E#", + "#...E.#", + "#######" + ); + assert_eq!(part_1_test(&input), 36334); +} + +#[test] +fn example_3() { + let input = vec!( + "#######", + "#E.G#.#", + "#.#G..#", + "#G.#.G#", + "#G..#.#", + "#...E.#", + "#######" + ); + assert_eq!(part_1_test(&input), 27755); +} + +#[test] +fn example_4() { + let input = vec!( + "#######", + "#.E...#", + "#.#..G#", + "#.###.#", + "#E#G#G#", + "#...#G#", + "#######" + ); + assert_eq!(part_1_test(&input), 28944); +} + diff --git a/2018/src/bin/day_16.rs b/2018/src/bin/day_16.rs new file mode 100644 index 0000000..275ec45 --- /dev/null +++ b/2018/src/bin/day_16.rs @@ -0,0 +1,205 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +use std::collections::{HashMap, HashSet}; + +// cargo watch -cs "cargo run --release --bin day_16" + +struct Instruction { + op: Op, + a: i32, + b: i32, + c: i32 +} + +impl Instruction { + fn execute(&self, registers: &[i32; 4]) -> [i32; 4] { + use Op::*; + + let mut result_registers = registers.clone(); + + result_registers[self.c as usize] = match self.op { + Addr => registers[self.a as usize] + registers[self.b as usize], + Addi => registers[self.a as usize] + self.b, + Mulr => registers[self.a as usize] * registers[self.b as usize], + Muli => registers[self.a as usize] * self.b, + Banr => registers[self.a as usize] & registers[self.b as usize], + Bani => registers[self.a as usize] & self.b, + Borr => registers[self.a as usize] | registers[self.b as usize], + Bori => registers[self.a as usize] | self.b, + Setr => registers[self.a as usize], + Seti => self.a, + Gtir => if self.a > registers[self.b as usize] { 1 } else { 0 }, + Gtri => if registers[self.a as usize] > self.b { 1 } else { 0 }, + Gtrr => if registers[self.a as usize] > registers[self.b as usize] { 1 } else { 0 }, + Eqir => if self.a == registers[self.b as usize] { 1 } else { 0 }, + Eqri => if registers[self.a as usize] == self.b { 1 } else { 0 }, + Eqrr => if registers[self.a as usize] == registers[self.b as usize] { 1 } else { 0 } + }; + + result_registers + } +} + +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] +enum Op { + Addr, + Addi, + Mulr, + Muli, + Banr, + Bani, + Borr, + Bori, + Setr, + Seti, + Gtir, + Gtri, + Gtrr, + Eqir, + Eqri, + Eqrr +} + +impl Op { + fn all() -> [Op; 16] { + use Op::*; + [ + Addr, + Addi, + Mulr, + Muli, + Banr, + Bani, + Borr, + Bori, + Setr, + Seti, + Gtir, + Gtri, + Gtrr, + Eqir, + Eqri, + Eqrr + ] + } +} + +struct UnknownInstruction { + before: [i32; 4], + after: [i32; 4], + opcode: i32, + a: i32, + b: i32, + c: i32 +} + +impl UnknownInstruction { + fn possible_matches(&self) -> HashSet<Op> { + Op::all() + .iter() + .filter(|&&op| { + let instruction = Instruction { + op: op, + a: self.a, + b: self.b, + c: self.c + }; + let result = instruction.execute(&self.before); + result == self.after + }) + .cloned() + .collect() + } +} + +fn main() -> Result<(), Box<Error>> { + let input_part_1 = read_file(&PathBuf::from("inputs/16_1.txt"))?; + + let unknown_instructions: Vec<UnknownInstruction> = input_part_1.chunks(3) + .map(|chunk| { + let mut before_iter = chunk[0].trim_matches(|c: char| !c.is_numeric()).split(", ").map(|c| c.parse::<i32>().unwrap()); + let before = [ + before_iter.next().unwrap(), + before_iter.next().unwrap(), + before_iter.next().unwrap(), + before_iter.next().unwrap(), + ]; + let mut after_iter = chunk[2].trim_matches(|c: char| !c.is_numeric()).split(", ").map(|c| c.parse::<i32>().unwrap()); + let after = [ + after_iter.next().unwrap(), + after_iter.next().unwrap(), + after_iter.next().unwrap(), + after_iter.next().unwrap(), + ]; + let mut instruction_iter = chunk[1].split_whitespace().map(|c| c.parse::<i32>().unwrap()); + UnknownInstruction { + before, after, + opcode: instruction_iter.next().unwrap(), + a: instruction_iter.next().unwrap(), + b: instruction_iter.next().unwrap(), + c: instruction_iter.next().unwrap(), + } + }) + .collect(); + + let matches_more_then_3 = unknown_instructions.iter() + .filter(|unknown| { + unknown.possible_matches().len() >= 3 + }) + .count(); + + debug!(matches_more_then_3); + + + let mut opcodes: HashMap<i32, HashSet<Op>> = HashMap::new(); + for unknown in unknown_instructions { + let matches = unknown.possible_matches(); + let to_insert = match opcodes.get(&unknown.opcode) { + None => matches, + Some(existing) => existing.intersection(&matches).cloned().collect() + }; + opcodes.insert(unknown.opcode, to_insert); + } + debug!(opcodes); + + let mut known_opcodes: HashMap<i32, Op> = HashMap::new(); + + while known_opcodes.len() < 16 { + let (opcode, op) = { + let (opcode, opset) = opcodes.iter().find(|(_,set)| set.len() == 1).unwrap(); + let op = opset.iter().next().unwrap().clone(); + (opcode.clone(), op) + }; + known_opcodes.insert(opcode, op); + opcodes.iter_mut().for_each(|(_, set)| { + set.remove(&op); + }); + } + debug!(known_opcodes); + + + let input_part_2 = read_file(&PathBuf::from("inputs/16_2.txt"))?; + let instructions: Vec<Instruction> = input_part_2.iter() + .map(|line| { + let mut instruction_iter = line.split_whitespace().map(|c| c.parse::<i32>().unwrap()); + Instruction { + op: known_opcodes.get(&instruction_iter.next().unwrap()).unwrap().clone(), + a: instruction_iter.next().unwrap(), + b: instruction_iter.next().unwrap(), + c: instruction_iter.next().unwrap(), + } + }) + .collect(); + + let mut registers = [0; 4]; + for instruction in instructions { + registers = instruction.execute(®isters); + } + debug!(registers); + + Ok(()) +} diff --git a/2018/src/bin/day_17.rs b/2018/src/bin/day_17.rs new file mode 100644 index 0000000..f479c3a --- /dev/null +++ b/2018/src/bin/day_17.rs @@ -0,0 +1,175 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +// cargo watch -cs "cargo run --release --bin day_17" + +struct CoordBuilder { + xmin: Option<usize>, + xmax: Option<usize>, + ymin: Option<usize>, + ymax: Option<usize> +} + +#[derive(Debug)] +struct Coord { + xmin: usize, + xmax: usize, + ymin: usize, + ymax: usize +} + +impl CoordBuilder { + fn new() -> CoordBuilder { + CoordBuilder { + xmin: None, + xmax: None, + ymin: None, + ymax: None + } + } + + fn build(&self) -> Coord { + Coord { + xmin: self.xmin.unwrap(), + xmax: self.xmax.unwrap(), + ymin: self.ymin.unwrap(), + ymax: self.ymax.unwrap(), + } + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +enum Tile { + Clay, + RunningWater, + HalfSettledWater, + SettledWater, + Sand +} + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/17.txt"))?; + + let clay_coords = input.iter().map(|line| { + let mut builder = CoordBuilder::new(); + for split in line.split(", ") { + if split.starts_with("x=") { + let mut range_split = split + .trim_matches(|c: char| !c.is_numeric()) + .split("..") + .map(|s| s.parse().unwrap()); + if let Some(min) = range_split.next() { + builder.xmin = Some(min); + builder.xmax = Some(min+1); + } + if let Some(max) = range_split.next() { + builder.xmax = Some(max+1); + } + } else { + let mut range_split = split + .trim_matches(|c: char| !c.is_numeric()) + .split("..") + .map(|s| s.parse().unwrap()); + if let Some(min) = range_split.next() { + builder.ymin = Some(min); + builder.ymax = Some(min+1); + } + if let Some(max) = range_split.next() { + builder.ymax = Some(max+1); + } + } + } + builder.build() + }).collect::<Vec<_>>(); + + let range = CoordinateSystem { + xmin: clay_coords.iter().min_by_key(|coord| coord.xmin).unwrap().xmin-2, + xmax: clay_coords.iter().max_by_key(|coord| coord.xmax).unwrap().xmax+2, + ymin: clay_coords.iter().min_by_key(|coord| coord.ymin).unwrap().ymin, + ymax: clay_coords.iter().max_by_key(|coord| coord.ymax).unwrap().ymax + }; + + debug!(range); + + + let mut map = vec!(Tile::Sand; range.vector_size()); + for coord in clay_coords { + for y in coord.ymin..coord.ymax { + for x in coord.xmin..coord.xmax { + map[range.to_vec(x, y)] = Tile::Clay; + } + } + } + + debug!(map[range.to_vec(500, range.ymin)]); + map[range.to_vec(500, range.ymin)] = Tile::RunningWater; + + let mut last_iter = Vec::new(); + while last_iter != map { + last_iter = map.clone(); + for y in range.ymin..range.ymax-1 { + for x in range.xmin..range.xmax { + match map[range.to_vec(x, y)] { + Tile::RunningWater => { + if map[range.to_vec(x, y+1)] == Tile::Sand { + map[range.to_vec(x, y+1)] = Tile::RunningWater; + } + if map[range.to_vec(x-1, y)] == Tile::Sand && (map[range.to_vec(x, y+1)] == Tile::Clay || map[range.to_vec(x, y+1)] == Tile::SettledWater) { + map[range.to_vec(x-1, y)] = Tile::RunningWater; + } + if map[range.to_vec(x+1, y)] == Tile::Sand && (map[range.to_vec(x, y+1)] == Tile::Clay || map[range.to_vec(x, y+1)] == Tile::SettledWater) { + map[range.to_vec(x+1, y)] = Tile::RunningWater; + } + if (map[range.to_vec(x-1, y)] == Tile::Clay || map[range.to_vec(x-1, y)] == Tile::HalfSettledWater) && (map[range.to_vec(x, y+1)] == Tile::Clay || map[range.to_vec(x, y+1)] == Tile::SettledWater) { + map[range.to_vec(x, y)] = Tile::HalfSettledWater; + } + }, + Tile::HalfSettledWater => { + if map[range.to_vec(x+1, y)] == Tile::Clay { + for xleft in 0.. { + if map[range.to_vec(x-xleft, y)] == Tile::HalfSettledWater { + map[range.to_vec(x-xleft, y)] = Tile::SettledWater; + } else { + break; + } + } + } + }, + _ => {} + } + } + } + } + + let water_tiles = map.iter() + .filter(|&&t| t == Tile::RunningWater || t == Tile::SettledWater || t == Tile::HalfSettledWater) + .count(); + debug!(water_tiles); + + let settled_water_tiles = map.iter() + .filter(|&&t| t == Tile::SettledWater) + .count(); + debug!(settled_water_tiles); + + Ok(()) +} + +#[derive(Debug)] +struct CoordinateSystem { + xmin: usize, + xmax: usize, + ymin: usize, + ymax: usize +} + +impl CoordinateSystem { + fn vector_size(&self) -> usize { + (self.xmax - self.xmin) * (self.ymax - self.ymin) + } + fn to_vec(&self, x: usize, y: usize) -> usize { + ((y - self.ymin) * (self.xmax - self.xmin)) + (x - self.xmin) + } +} diff --git a/2018/src/bin/day_18.rs b/2018/src/bin/day_18.rs new file mode 100644 index 0000000..3908ea7 --- /dev/null +++ b/2018/src/bin/day_18.rs @@ -0,0 +1,123 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +extern crate arrayvec; +use arrayvec::ArrayVec; + +use std::error::Error; +use std::path::PathBuf; + +use std::collections::HashMap; + +// cargo watch -cs "cargo run --release --bin day_18" + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +enum State { + Open, + Trees, + Lumber +} + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/18.txt"))?; + +// println!("Input: {:?}", input); + + let map = input.iter().map(|line| { + line.chars().map(|c| match c { + '.' => State::Open, + '|' => State::Trees, + '#' => State::Lumber, + _ => panic!("Unknown character {}", c) + }).collect::<Vec<_>>() + }).collect::<Vec<_>>(); +// debug!(map); + + let after_10 = simulate(&map, 10); + let trees_count_10: usize = after_10.iter().map(|row| row.iter().filter(|&&x| x == State::Trees).count()).sum(); + let lumber_count_10: usize = after_10.iter().map(|row| row.iter().filter(|&&x| x == State::Lumber).count()).sum(); + debug!(trees_count_10); + debug!(lumber_count_10); + debug!(trees_count_10 * lumber_count_10); + + let after_many = simulate(&map, 1000000000); + let trees_count_many: usize = after_many.iter().map(|row| row.iter().filter(|&&x| x == State::Trees).count()).sum(); + let lumber_count_many: usize = after_many.iter().map(|row| row.iter().filter(|&&x| x == State::Lumber).count()).sum(); + debug!(trees_count_many); + debug!(lumber_count_many); + debug!(trees_count_many * lumber_count_many); + + + Ok(()) +} + + +fn simulate(start_map: &Vec<Vec<State>>, duration: u32) -> Vec<Vec<State>> { + let mut previous_maps = HashMap::new(); + + let mut map = start_map.clone(); + + let mut t = 0; + while t < duration { + let map0 = map.clone(); + for y in 0..map.len() { + for x in 0..map[y].len() { + let adjacent = [ + (x.wrapping_sub(1), y.wrapping_sub(1)), + (x, y.wrapping_sub(1)), + (x+1, y.wrapping_sub(1)), + (x.wrapping_sub(1), y), + (x+1, y), + (x.wrapping_sub(1), y+1), + (x, y+1), + (x+1, y+1) + ].iter().map(|&(other_x,other_y)| { + if other_y >= map0.len() || other_x >= map0[other_y].len() { + State::Open + } else { + map0[other_y][other_x] + } + }).collect::<ArrayVec<[State; 8]>>(); + + let adjacent_trees = adjacent.iter().filter(|&&x| x == State::Trees).count(); + let adjacent_lumber = adjacent.iter().filter(|&&x| x == State::Lumber).count(); + + map[y][x] = match (map0[y][x], adjacent_trees, adjacent_lumber) { + (State::Open, trees, _) if trees >= 3 => State::Trees, + (State::Open, _, _) => State::Open, + (State::Trees, _, lumber) if lumber >= 3 => State::Lumber, + (State::Trees, _, _) => State::Trees, + (State::Lumber, trees, lumber) if trees >= 1 && lumber >= 1 => State::Lumber, + (State::Lumber, _, _) => State::Open + } + } + } + + t += match previous_maps.get(&map) { + Some(previous_t) => { + let period = t + 1 - previous_t; + let whole_periods = (duration - t - 1) / period; + (period * whole_periods) + 1 + }, + None => 1 + }; + previous_maps.insert(map.clone(), t); + } + + map +} + +fn debug_print(map: &Vec<Vec<State>>) { + for row in map { + for c in row { + print!("{}", match c { + State::Open => '.', + State::Trees => '|', + State::Lumber => '#' + }); + } + println!(); + } + println!(); + println!(); +} diff --git a/2018/src/bin/day_19.rs b/2018/src/bin/day_19.rs new file mode 100644 index 0000000..37ffef1 --- /dev/null +++ b/2018/src/bin/day_19.rs @@ -0,0 +1,139 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +// cargo watch -cs "cargo run --release --bin day_19" + +#[derive(Debug)] +struct Instruction { + op: Op, + a: i32, + b: i32, + c: i32 +} + +impl Instruction { + fn execute(&self, counter_register: usize, registers: &mut [i32; 6]) -> i32{ + use Op::*; + + registers[self.c as usize] = match self.op { + Addr => registers[self.a as usize] + registers[self.b as usize], + Addi => registers[self.a as usize] + self.b, + Mulr => registers[self.a as usize] * registers[self.b as usize], + Muli => registers[self.a as usize] * self.b, + Banr => registers[self.a as usize] & registers[self.b as usize], + Bani => registers[self.a as usize] & self.b, + Borr => registers[self.a as usize] | registers[self.b as usize], + Bori => registers[self.a as usize] | self.b, + Setr => registers[self.a as usize], + Seti => self.a, + Gtir => if self.a > registers[self.b as usize] { 1 } else { 0 }, + Gtri => if registers[self.a as usize] > self.b { 1 } else { 0 }, + Gtrr => if registers[self.a as usize] > registers[self.b as usize] { 1 } else { 0 }, + Eqir => if self.a == registers[self.b as usize] { 1 } else { 0 }, + Eqri => if registers[self.a as usize] == self.b { 1 } else { 0 }, + Eqrr => if registers[self.a as usize] == registers[self.b as usize] { 1 } else { 0 }, + }; + + registers[counter_register]+1 + } +} + +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] +enum Op { + Addr, + Addi, + Mulr, + Muli, + Banr, + Bani, + Borr, + Bori, + Setr, + Seti, + Gtir, + Gtri, + Gtrr, + Eqir, + Eqri, + Eqrr +} + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/19.txt"))?; + + println!("Input: {:?}", input); + + let mut input_iter = input.iter(); + let counter_register: usize = input_iter.next() + .map(|line| line.split_whitespace().nth(1).unwrap().parse().unwrap()) + .unwrap(); + + let instructions: Vec<Instruction> = input_iter + .map(|line| { + let mut instruction_iter = line.split_whitespace(); + Instruction { + op: match instruction_iter.next().unwrap() { + "addr" => Op::Addr, + "addi" => Op::Addi, + "mulr" => Op::Mulr, + "muli" => Op::Muli, + "banr" => Op::Banr, + "bani" => Op::Bani, + "borr" => Op::Borr, + "bori" => Op::Bori, + "setr" => Op::Setr, + "seti" => Op::Seti, + "gtir" => Op::Gtir, + "gtri" => Op::Gtri, + "gtrr" => Op::Gtrr, + "eqir" => Op::Eqir, + "eqri" => Op::Eqri, + "eqrr" => Op::Eqrr, + _ => panic!("unknown instruction") + }, + a: instruction_iter.next().unwrap().parse().unwrap(), + b: instruction_iter.next().unwrap().parse().unwrap(), + c: instruction_iter.next().unwrap().parse().unwrap(), + } + }) + .collect(); + + debug!(counter_register); + debug!(instructions); + + let part1_registers = execute_program(&instructions, counter_register, [0; 6]); + debug!(part1_registers); + + //let part2_registers = execute_program(&instructions, counter_register, [1, 0, 0, 0, 0, 0]); + //debug!(part2_registers); + part2(); + + Ok(()) +} + +fn execute_program(instructions: &Vec<Instruction>, counter_register: usize, registers: [i32; 6]) -> [i32; 6] { + let mut counter_val: i32 = 0; + let mut registers = registers.clone(); + while counter_val >= 0 && counter_val < instructions.len() as i32 { + registers[counter_register] = counter_val; + counter_val = instructions[counter_val as usize].execute(counter_register, &mut registers); + } + + registers +} + + + +fn part2() { + let r1 = ((27*28)+29)*30*14*32 + (11 * 19 * 2 * 2) + (3 * 22) + 9; + let mut r0 = 0; + for r5 in 1..r1+1 { + if r1 % r5 == 0 { + r0 += r1 / r5; + } + } + debug!(r0); +} diff --git a/2018/src/bin/day_2.rs b/2018/src/bin/day_2.rs new file mode 100644 index 0000000..7700871 --- /dev/null +++ b/2018/src/bin/day_2.rs @@ -0,0 +1,53 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +extern crate im_rc; +use im_rc::HashMap; + +// cargo watch -cs "cargo run --release --bin day_2" + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/2.txt"))?; + + println!("Input: {:?}", input); + + let (twice, thrice) = input.iter().fold((0,0), |(twice, thrice), next| { + let occurances = next.chars().fold(HashMap::new(), |occurances, c| { + let counter = occurances.get(&c).cloned().unwrap_or(0); + occurances.update(c, counter + 1) + }); + let has_twice = occurances.values().any(|count| *count == 2); + let has_thrice = occurances.values().any(|count| *count == 3); + + ( + twice + if has_twice { 1 } else { 0 }, + thrice + if has_thrice { 1 } else { 0 }, + ) + }); + + println!("Twice: {}", twice); + println!("Thrice: {}", thrice); + + let checksum = twice * thrice; + println!("Checksum: {}", checksum); + + for i in &input { + for j in &input { + let diff = i.chars().zip(j.chars()).fold(0, |diff, (x, y)| { + if x != y { + diff + 1 + } else { + diff + } + }); + if diff == 1 { + println!("Diff of 1: {} + {}", i, j); + } + } + } + + Ok(()) +} diff --git a/2018/src/bin/day_20.rs b/2018/src/bin/day_20.rs new file mode 100644 index 0000000..6486d72 --- /dev/null +++ b/2018/src/bin/day_20.rs @@ -0,0 +1,137 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +use std::collections::{HashSet, HashMap}; + +// cargo watch -cs "cargo run --release --bin day_20" + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +enum Dir { + N, S, E, W +} + +#[derive(Debug)] +struct Room { + doors: HashSet<Dir> +} + +impl Room { + fn new() -> Room { + Room { + doors: HashSet::new() + } + } +} + +fn main() -> Result<(), Box<Error>> { + let input = &read_file(&PathBuf::from("inputs/20.txt"))?[0]; + + println!("Input: {:?}", input); + + let rooms = populate_rooms(input); + let distances = distance_map(&rooms); + + debug!(distance_to_furthest_room(&distances)); + debug!(distances_more_than_1000(&distances)); + + Ok(()) +} + +fn populate_rooms(input: &str) -> HashMap<(i32, i32), Room> { + let mut rooms: HashMap<(i32, i32), Room> = HashMap::new(); + rooms.insert((0,0), Room::new()); + + let mut coords = vec!((0, 0)); + + let mut coord_stack: Vec<(Vec<(i32, i32)>, Vec<(i32, i32)>)> = Vec::new(); + + for c in input.chars() { + match c { + '^' | '$' => {}, + 'E' => { + for coord in &mut coords { + rooms.get_mut(coord).unwrap().doors.insert(Dir::E); + coord.0 += 1; + rooms.entry(*coord).or_insert(Room::new()); + } + }, + 'W' => { + for coord in &mut coords { + rooms.get_mut(coord).unwrap().doors.insert(Dir::W); + coord.0 -= 1; + rooms.entry(*coord).or_insert(Room::new()); + } + }, + 'N' => { + for coord in &mut coords { + rooms.get_mut(coord).unwrap().doors.insert(Dir::N); + coord.1 -= 1; + rooms.entry(*coord).or_insert(Room::new()); + } + }, + 'S' => { + for coord in &mut coords { + rooms.get_mut(coord).unwrap().doors.insert(Dir::S); + coord.1 += 1; + rooms.entry(*coord).or_insert(Room::new()); + } + }, + '(' => { + coord_stack.push((coords.clone(), Vec::new())); + }, + '|' => { + coord_stack.last_mut().unwrap().1.append(&mut coords); + coords = coord_stack.last().unwrap().0.clone(); + }, + ')' => { + coord_stack.last_mut().unwrap().1.append(&mut coords); + coords = coord_stack.pop().unwrap().1; + coords.sort(); + coords.dedup(); + }, + c => { + panic!("Unknown character {}", c); + } + } + } + + debug!(rooms.len()); + + rooms +} + +fn distance_map(rooms: &HashMap<(i32, i32), Room>) -> HashMap<(i32, i32), u32> { + let mut distances: HashMap<(i32, i32), u32> = HashMap::new(); + distances.insert((0,0), 0); + + while distances.len() < rooms.len() { + let current_max = *distances.values().max().unwrap(); + let new_distances = distances.iter() + .filter(|(_, &d)| d == current_max) + .flat_map(|(&coord, _)| { + let room = rooms.get(&coord).unwrap(); + room.doors.iter().map(|dir| match dir { + Dir::N => (coord.0, coord.1-1), + Dir::S => (coord.0, coord.1+1), + Dir::W => (coord.0-1, coord.1), + Dir::E => (coord.0+1, coord.1) + }).collect::<Vec<_>>() + }) + .collect::<Vec<_>>(); + for coord in new_distances { + distances.entry(coord).or_insert(current_max + 1); + } + } + distances +} + +fn distance_to_furthest_room(distances: &HashMap<(i32, i32), u32>) -> u32 { + distances.values().max().unwrap().clone() +} + +fn distances_more_than_1000(distances: &HashMap<(i32, i32), u32>) -> u32 { + distances.values().filter(|&&x| x >= 1000).count() as u32 +} diff --git a/2018/src/bin/day_21.rs b/2018/src/bin/day_21.rs new file mode 100644 index 0000000..0d9a97c --- /dev/null +++ b/2018/src/bin/day_21.rs @@ -0,0 +1,137 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; +use std::u32; + +use std::collections::HashMap; +// cargo watch -cs "cargo run --release --bin day_21" + +use std::i32; + +#[derive(Debug)] +struct Instruction { + op: Op, + a: i32, + b: i32, + c: i32 +} + +impl Instruction { + fn execute(&self, counter_register: usize, registers: &mut [i32; 6]) -> i32{ + use Op::*; + + registers[self.c as usize] = match self.op { + Addr => registers[self.a as usize].wrapping_add(registers[self.b as usize]), + Addi => registers[self.a as usize].wrapping_add(self.b), + Mulr => registers[self.a as usize].wrapping_mul(registers[self.b as usize]), + Muli => registers[self.a as usize].wrapping_mul(self.b), + Banr => registers[self.a as usize] & registers[self.b as usize], + Bani => registers[self.a as usize] & self.b, + Borr => registers[self.a as usize] | registers[self.b as usize], + Bori => registers[self.a as usize] | self.b, + Setr => registers[self.a as usize], + Seti => self.a, + Gtir => if self.a > registers[self.b as usize] { 1 } else { 0 }, + Gtri => if registers[self.a as usize] > self.b { 1 } else { 0 }, + Gtrr => if registers[self.a as usize] > registers[self.b as usize] { 1 } else { 0 }, + Eqir => if self.a == registers[self.b as usize] { 1 } else { 0 }, + Eqri => if registers[self.a as usize] == self.b { 1 } else { 0 }, + Eqrr => if registers[self.a as usize] == registers[self.b as usize] { 1 } else { 0 }, + }; + + registers[counter_register]+1 + } +} + +#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] +enum Op { + Addr, + Addi, + Mulr, + Muli, + Banr, + Bani, + Borr, + Bori, + Setr, + Seti, + Gtir, + Gtri, + Gtrr, + Eqir, + Eqri, + Eqrr +} + + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/21.txt"))?; + + let mut input_iter = input.iter(); + let counter_register: usize = input_iter.next() + .map(|line| line.split_whitespace().nth(1).unwrap().parse().unwrap()) + .unwrap(); + + let instructions: Vec<Instruction> = input_iter + .map(|line| { + let mut instruction_iter = line.split_whitespace(); + Instruction { + op: match instruction_iter.next().unwrap() { + "addr" => Op::Addr, + "addi" => Op::Addi, + "mulr" => Op::Mulr, + "muli" => Op::Muli, + "banr" => Op::Banr, + "bani" => Op::Bani, + "borr" => Op::Borr, + "bori" => Op::Bori, + "setr" => Op::Setr, + "seti" => Op::Seti, + "gtir" => Op::Gtir, + "gtri" => Op::Gtri, + "gtrr" => Op::Gtrr, + "eqir" => Op::Eqir, + "eqri" => Op::Eqri, + "eqrr" => Op::Eqrr, + _ => panic!("unknown instruction") + }, + a: instruction_iter.next().unwrap().parse().unwrap(), + b: instruction_iter.next().unwrap().parse().unwrap(), + c: instruction_iter.next().unwrap().parse().unwrap(), + } + }) + .collect(); + + execute_program(&instructions, counter_register, [0, 0, 0, 0, 0, 0]); + + Ok(()) +} + +fn execute_program(instructions: &Vec<Instruction>, counter_register: usize, registers: [i32; 6]) { + let mut instructions_executed: u64 = 0; + let mut counter_val: i32 = 0; + let mut registers = registers.clone(); + let mut halting_values = HashMap::new(); + + while counter_val >= 0 && counter_val < instructions.len() as i32 { + if counter_val == 28 { + if halting_values.contains_key(®isters[4]) { + break; + } + halting_values.entry(registers[4]).or_insert(instructions_executed+2); + } + registers[counter_register] = counter_val; + counter_val = instructions[counter_val as usize].execute(counter_register, &mut registers); + instructions_executed += 1; + } + + let (min_halting, min_halting_time) = halting_values.iter().min_by_key(|&(_, v)| v).unwrap(); + debug!(min_halting); + debug!(min_halting_time); + let (max_halting, max_halting_time) = halting_values.iter().max_by_key(|&(_, v)| v).unwrap(); + debug!(max_halting); + debug!(max_halting_time); + +} diff --git a/2018/src/bin/day_22.rs b/2018/src/bin/day_22.rs new file mode 100644 index 0000000..f9013cf --- /dev/null +++ b/2018/src/bin/day_22.rs @@ -0,0 +1,165 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +use std::u32; +use std::collections::{HashMap, HashSet}; + +// cargo watch -cs "cargo run --release --bin day_22" + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +struct Position { + x: u32, + y: u32, + equipment: u32 // 0 = nothing, 1 = torch, 2 = climbing +} + +impl Position { + fn adjacent(&self, map: &Vec<Vec<u32>>) -> Vec<(Position, u32)> { + let all_adjacent = [ + (Position { + x: self.x.saturating_sub(1), + ..*self + }, 1), + (Position { + y: self.y.saturating_sub(1), + ..*self + }, 1), + (Position { + x: self.x+1, + ..*self + }, 1), + (Position { + y: self.y+1, + ..*self + }, 1), + (Position { + equipment: (self.equipment+1)%3, + ..*self + }, 7), + (Position { + equipment: (self.equipment+2)%3, + ..*self + }, 7) + ]; + all_adjacent.iter() + .filter(|(p, _)| { + let region = map[p.y as usize][p.x as usize]; + let out_of_bounds = self == p; + let invalid_equipment = (region == 0 && p.equipment == 0) || + (region == 1 && p.equipment == 1) || + (region == 2 && p.equipment == 2); + !out_of_bounds && !invalid_equipment + }) + .cloned() + .collect() + } +} + +fn main() -> Result<(), Box<Error>> { + let input = &read_file(&PathBuf::from("inputs/22.txt"))?; + + let depth: u32 = input[0].trim_matches(|c: char| !c.is_numeric()).parse().unwrap(); + debug!(depth); + let mut input_target_iter = input[1] + .split(|c: char| !c.is_numeric()) + .filter(|s| !s.is_empty()) + .map(|s| s.parse::<u32>().unwrap()); + + let target_x = input_target_iter.next().unwrap(); + let target_y = input_target_iter.next().unwrap(); + + debug!((target_x, target_y)); + + let mut map_width = target_x; + let mut map_height = target_y; + let mut map = build_map(map_width, map_height, depth, target_x, target_y); + + let risk: u32 = map.iter().take((target_y+1) as usize).map(|row| row.iter().take((target_x+1) as usize).sum::<u32>()).sum(); + debug!(risk); + + + let mut distances = HashMap::new(); + let mut unexplored = HashSet::new(); + let initial = Position { + x: 0, + y: 0, + equipment: 1 + }; + let target = Position { + x: target_x, + y: target_y, + equipment: 1 + }; + distances.insert(initial, 0); + unexplored.insert(initial); + + while !distances.contains_key(&target) || unexplored.contains(&target) { + let (current, current_distance) = unexplored.iter() + .map(|unexp| (unexp.clone(), distances.get(unexp).cloned().unwrap())) + .min_by_key(|(_, d)| *d) + .unwrap(); + + if current.y+1 >= map_height { + map_height *= 2; + map = build_map(map_width, map_height, depth, target_x, target_y); + debug!(map_height); + } + if current.x+1 >= map_width { + map_width *= 2; + map = build_map(map_width, map_height, depth, target_x, target_y); + debug!(map_width); + } + + for (adjacent, further) in current.adjacent(&map) { + let distance = current_distance + further; + let best_previous_distance = distances.get(&adjacent).cloned().unwrap_or(u32::MAX); + if best_previous_distance > distance { + distances.insert(adjacent, distance); + unexplored.insert(adjacent); + } + + } + unexplored.remove(¤t); + } + + debug!(distances.get(&target)); + + Ok(()) +} + + +fn build_map(max_x: u32, max_y: u32, depth: u32, target_x: u32, target_y: u32) -> Vec<Vec<u32>> { + let mut geologic_index: Vec<Vec<u32>> = Vec::new(); + let mut erosion_level: Vec<Vec<u32>> = Vec::new(); + let mut region_type: Vec<Vec<u32>> = Vec::new(); + + for y in 0..max_y { + let mut geologic_row = Vec::new(); + let mut erosion_row = Vec::new(); + let mut type_row = Vec::new(); + + for x in 0..max_x { + let index = match (x, y) { + (0, 0) => 0, + (x, y) if x == target_x && y == target_y => 0, + (x, 0) => x*16807, + (0, y) => y*48271, + (x, y) => erosion_row[(x-1) as usize] * erosion_level[(y-1) as usize][x as usize] + }; + let erosion = (index + depth) % 20183; + let block_type = erosion % 3; + + geologic_row.push(index); + erosion_row.push(erosion); + type_row.push(block_type); + } + + geologic_index.push(geologic_row); + erosion_level.push(erosion_row); + region_type.push(type_row); + } + region_type +} diff --git a/2018/src/bin/day_23.rs b/2018/src/bin/day_23.rs new file mode 100644 index 0000000..463f3d3 --- /dev/null +++ b/2018/src/bin/day_23.rs @@ -0,0 +1,114 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; +use std::cmp; + +// cargo watch -cs "cargo run --release --bin day_23" + +#[derive(Debug, Clone)] +struct Bot { + radius: i64, + position: Position +} + +#[derive(Debug, Clone)] +struct Position { + x: i64, + y: i64, + z: i64 +} + +impl Position { + fn distance(&self, other: &Position) -> i64 { + (other.z - self.z).abs() + + (other.y - self.y).abs() + + (other.x - self.x).abs() + } +} + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/23.txt"))?; + + let mut bots: Vec<Bot> = input.iter().map(|line| { + let mut line_iter = line.split(|c: char| c != '-' && !c.is_numeric()) + .filter(|s| !s.is_empty()) + .map(|s| s.parse::<i64>().unwrap()); + Bot { + position: Position { + x: line_iter.next().unwrap(), + y: line_iter.next().unwrap(), + z: line_iter.next().unwrap() + }, + radius: line_iter.next().unwrap() + } + }).collect(); + + let biggest_radius = bots.iter().max_by_key(|bot| bot.radius).unwrap(); + let biggest_radius_in_range_count = bots.iter() + .filter(|bot| biggest_radius.position.distance(&bot.position) <= biggest_radius.radius) + .count(); + debug!(biggest_radius); + debug!(biggest_radius_in_range_count); + + + let min_x = bots.iter().min_by_key(|bot| bot.position.x).unwrap().position.x; + let max_x = bots.iter().max_by_key(|bot| bot.position.x).unwrap().position.x; + debug!(min_x); + debug!(max_x); + let min_y = bots.iter().min_by_key(|bot| bot.position.y).unwrap().position.y; + let max_y = bots.iter().max_by_key(|bot| bot.position.y).unwrap().position.y; + debug!(min_y); + debug!(max_y); + let min_z = bots.iter().min_by_key(|bot| bot.position.z).unwrap().position.z; + let max_z = bots.iter().max_by_key(|bot| bot.position.z).unwrap().position.z; + debug!(min_z); + debug!(max_z); + + let origin = Position { x: 0, y: 0, z: 0 }; + + let mut radius = cmp::max(max_x - min_x, cmp::max(max_y-min_y, max_z-min_z)); + let mut center = origin.clone(); + + while radius > 0 { + let delta = 0.8; + let new_radius = if radius == 1 { 0 } else { (radius as f32 * delta) as i64 }; + let deltas = [-1.0, -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 1.0]; + let subs: Vec<Position> = deltas.iter().flat_map(|&dx| { + deltas.iter().flat_map(|&dy| { + deltas.iter().map(|&dz| { + Position { + x: center.x + (radius as f32 * dx) as i64, + y: center.y + (radius as f32 * dy) as i64, + z: center.z + (radius as f32 * dz) as i64 + } + }).collect::<Vec<_>>() + }).collect::<Vec<_>>() + }).collect(); + + center = subs.iter() + .map(|new_center| { + (new_center, bots.iter() + .filter(|bot| bot.position.distance(&new_center) <= bot.radius + new_radius) + .count()) + }) + .max_by(|(a_center, a_bots), (b_center, b_bots)| { + a_bots.cmp(&b_bots).then(b_center.distance(&origin).cmp(&a_center.distance(&origin))) + }) + .map(|(center, _)| center) + .unwrap().clone(); + + radius = new_radius; + } + + let connected_in_radius = bots.iter() + .filter(|bot| bot.position.distance(¢er) <= bot.radius) + .count(); + debug!(connected_in_radius); + debug!(center); + let distance_to_origin = center.distance(&origin); + debug!(distance_to_origin); + + Ok(()) +} diff --git a/2018/src/bin/day_24.rs b/2018/src/bin/day_24.rs new file mode 100644 index 0000000..d52f7d0 --- /dev/null +++ b/2018/src/bin/day_24.rs @@ -0,0 +1,217 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; +use std::str::FromStr; + +use std::collections::HashMap; + +// cargo watch -cs "cargo run --release --bin day_24" + +#[derive(Debug, Clone)] +struct Army { + units: u32, + hp: u32, + weaknesses: Vec<String>, + immunities: Vec<String>, + damage_type: String, + damage: u32, + initiative: u32 +} + +impl Army { + fn effective_power(&self) -> u32 { + self.units * self.damage + } + + fn actual_damage(&self, other: &Army) -> u32 { + let modifier = if other.weaknesses.contains(&self.damage_type) { + 2 + } else if other.immunities.contains(&self.damage_type) { + 0 + } else { + 1 + }; + self.effective_power() * modifier + } +} + +impl FromStr for Army { + type Err = Box<Error>; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + // 2991 units each with 8084 hit points (weak to fire) with an attack that does 19 radiation damage at initiative 11 + let mut words = s.split_whitespace(); + let units = words.next().unwrap().parse()?; + let hp = words.nth(3).unwrap().parse()?; + let _ = words.nth(1); + + let mut weaknesses = Vec::new(); + let mut immunities = Vec::new(); + + let mut bracket_handled = false; + while !bracket_handled { + let maybe_weak_or_immune = words.next().unwrap().trim_matches(|c: char| !c.is_alphabetic()); + if maybe_weak_or_immune == "weak" { + let mut weakness = words.nth(1).unwrap(); + weaknesses.push(weakness.trim_matches(|c: char| !c.is_alphabetic()).to_string()); + while weakness.ends_with(',') { + weakness = words.next().unwrap(); + weaknesses.push(weakness.trim_matches(|c: char| !c.is_alphabetic()).to_string()); + } + } + else if maybe_weak_or_immune == "immune" { + let mut immunity = words.nth(1).unwrap(); + immunities.push(immunity.trim_matches(|c: char| !c.is_alphabetic()).to_string()); + while immunity.ends_with(',') { + immunity = words.next().unwrap(); + immunities.push(immunity.trim_matches(|c: char| !c.is_alphabetic()).to_string()); + } + } + else { + bracket_handled = true; + } + } + let damage = words.nth(4).unwrap().parse()?; + let damage_type = words.next().unwrap().to_string(); + let initiative = words.nth(3).unwrap().parse()?; + + Ok(Army { + units, hp, weaknesses, immunities, damage_type, damage, initiative + }) + } +} + + + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/24.txt"))?; + + let mut input_iter = input.iter(); + let _ = input_iter.next(); + let immune_army: Vec<Army> = input_iter.by_ref() + .take_while(|&line| line != "Infection:") + .map(|line| line.parse().unwrap()) + .collect(); + let infection_army: Vec<Army> = input_iter + .map(|line| line.parse().unwrap()) + .collect(); + + let (unboosted_immune_army_size, unboosted_infection_army_size) = simulate(&immune_army, &infection_army, 0); + debug!(unboosted_immune_army_size); + debug!(unboosted_infection_army_size); + + for boost in 0.. { + debug!(boost); + let (immune_army_size, infection_army_size) = simulate(&immune_army, &infection_army, boost); + debug!(immune_army_size); + debug!(infection_army_size); + if immune_army_size > 0 { + break; + } + } + + Ok(()) +} + + +fn target_selection(targeting_army: &Vec<Army>, targeted_army: &Vec<Army>) -> HashMap<usize, usize> { + let mut targets = HashMap::new(); + for (i, army) in targeting_army.iter().enumerate() { + let best_target = (0..targeted_army.len()) + .filter(|potential_target| !targets.values().any(|targeted| targeted == potential_target)) + .fold(None, |best_target, next| { + let next_actual_damage = army.actual_damage(&targeted_army[next]); + let last_best_actual_damage = best_target.map(|best_target| army.actual_damage(&targeted_army[best_target])).unwrap_or(0); + let next_effective_power = targeted_army[next].effective_power(); + let last_best_effective_power = best_target.map(|best_target: usize| targeted_army[best_target].effective_power()).unwrap_or(0); + let next_initiative = targeted_army[next].initiative; + let last_best_initiative = best_target.map(|best_target| targeted_army[best_target].initiative).unwrap_or(0); + if next_actual_damage == 0 && last_best_actual_damage == 0 { + None + } else if next_actual_damage > last_best_actual_damage { + Some(next) + } else if next_actual_damage == last_best_actual_damage && next_effective_power > last_best_effective_power { + Some(next) + } else if next_actual_damage == last_best_actual_damage && next_effective_power == last_best_effective_power && next_initiative > last_best_initiative { + Some(next) + } else { + best_target + } + }); + + if let Some(best_target) = best_target { + targets.insert(i, best_target); + } + } + + targets +} + +fn attack(aggressor: &Army, target: &mut Army) { + let damage = aggressor.actual_damage(target); + let units_destroyed = damage / target.hp; + target.units = target.units.saturating_sub(units_destroyed); +} + + +fn simulate(immune_army: &[Army], infection_army: &[Army], boost: u32) -> (u32, u32) { + let mut infection_army = Vec::from(infection_army); + + let mut immune_army: Vec<Army> = immune_army.iter().map(|army| Army { + damage: army.damage + boost, + ..army.clone() + }).collect(); + + let mut watchdog_sum = immune_army.iter().map(|a| a.units).sum::<u32>() + infection_army.iter().map(|a| a.units).sum::<u32>(); + while immune_army.len() > 0 && infection_army.len() > 0 { + immune_army.sort_by(|a, b| b.effective_power().cmp(&a.effective_power()).then(b.initiative.cmp(&a.initiative))); + infection_army.sort_by(|a, b| b.effective_power().cmp(&a.effective_power()).then(b.initiative.cmp(&a.initiative))); + + let mut immune_targets = target_selection(&immune_army, &infection_army); + let mut infection_targets = target_selection(&infection_army, &immune_army); + + while immune_targets.len() > 0 || infection_targets.len() > 0 { + let next_immune = immune_targets.keys() + .map(|&k| (k, immune_army[k].initiative.clone())) + .max_by_key(|(_, initiative)| *initiative); + let next_infection = infection_targets.keys() + .map(|&k| (k, infection_army[k].initiative.clone())) + .max_by_key(|(_, initiative)| *initiative); + match (next_immune, next_infection) { + (None, None) => { + panic!("No targets left") + }, + (Some((immune_key, immune_init)), Some((_infect_key, infect_init))) if immune_init > infect_init => { + attack(&immune_army[immune_key], &mut infection_army[*immune_targets.get(&immune_key).unwrap()]); + immune_targets.remove(&immune_key); + }, + (Some((_immune_key, _immune_init)), Some((infect_key, _infect_init))) => { + attack(&infection_army[infect_key], &mut immune_army[*infection_targets.get(&infect_key).unwrap()]); + infection_targets.remove(&infect_key); + }, + (Some((immune_key, _immune_init)), None) => { + attack(&immune_army[immune_key], &mut infection_army[*immune_targets.get(&immune_key).unwrap()]); + immune_targets.remove(&immune_key); + }, + (None, Some((infect_key, _infect_init))) => { + attack(&infection_army[infect_key], &mut immune_army[*infection_targets.get(&infect_key).unwrap()]); + infection_targets.remove(&infect_key); + } + }; + } + + immune_army.retain(|a| a.units > 0); + infection_army.retain(|a| a.units > 0); + + let new_watchdog_sum = immune_army.iter().map(|a| a.units).sum::<u32>() + infection_army.iter().map(|a| a.units).sum::<u32>(); + if watchdog_sum == new_watchdog_sum { + // Stalemate! Everyone loses. + return (0, 0); + } + watchdog_sum = new_watchdog_sum; + } + + (immune_army.iter().map(|a| a.units).sum(), infection_army.iter().map(|a| a.units).sum()) +} diff --git a/2018/src/bin/day_25.rs b/2018/src/bin/day_25.rs new file mode 100644 index 0000000..9e74f49 --- /dev/null +++ b/2018/src/bin/day_25.rs @@ -0,0 +1,47 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +// cargo watch -cs "cargo run --release --bin day_25" + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/25.txt"))?; + + let mut constellations: Vec<Vec<Vec<i32>>> = input.iter() + .map(|line| line.split(',').map(|x| x.parse().unwrap()).collect::<Vec<_>>()) + .map(|points| vec!(points)) + .collect(); + + // debug!(constellations); + + while join_constellations(&mut constellations) { + } + + debug!(constellations.len()); + + Ok(()) +} + +fn distance(xs: &[i32], ys: &[i32]) -> i32 { + xs.iter().zip(ys.iter()).map(|(x,y)| (x - y).abs()).sum() +} + +fn join_constellations(constellations: &mut Vec<Vec<Vec<i32>>>) -> bool { + for i in 0..constellations.len()-1 { + for j in i+1..constellations.len() { + let connected = constellations[i].iter().any(|ci| { + constellations[j].iter().any(|cj| { + distance(&ci, &cj) <= 3 + }) + }); + if connected { + let mut to_join = constellations.remove(j); + constellations[i].append(&mut to_join); + return true; + } + } + } + false +} diff --git a/2018/src/bin/day_3.rs b/2018/src/bin/day_3.rs new file mode 100644 index 0000000..685e288 --- /dev/null +++ b/2018/src/bin/day_3.rs @@ -0,0 +1,76 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::str::FromStr; + +use std::error::Error; +use std::path::PathBuf; + +use std::collections::HashMap; + +// cargo watch -cs "cargo run --release --bin day_3" + +#[derive(Debug)] +struct Claim { + id: u32, + x: u32, + y: u32, + w: u32, + h: u32 +} + +impl FromStr for Claim { + type Err = Box<Error>; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + //#123 @ 3,2: 5x4 + let split = s + .split(|c: char| !c.is_numeric()) + .filter(|s| !s.is_empty()) + .map(|s| s.parse()) + .collect::<Result<Vec<u32>, _>>()?; + + Ok(Claim { + id: split[0], + x: split[1], + y: split[2], + w: split[3], + h: split[4] + }) + } +} + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/3.txt"))?; + let claims = input.iter().map(|line| line.parse::<Claim>()).collect::<Result<Vec<_>, _>>()?; + + let mut claimed = HashMap::new(); + for claim in &claims { + for x in claim.x..claim.x+claim.w { + for y in claim.y..claim.y+claim.h { + *claimed.entry((x,y)).or_insert(0) += 1; + } + } + } + + let conflicts = claimed.values().filter(|&x| *x > 1).count(); + println!("Conflicts: {}", conflicts); + + let conflict_free = claims.iter().filter(|c| check_for_conflicts(c, &claimed)).collect::<Vec<_>>(); + + println!("Conflict free: {:?}", conflict_free); + + Ok(()) +} + + +fn check_for_conflicts(claim: &Claim, claimed: &HashMap<(u32, u32), u32>) -> bool { + for x in claim.x..claim.x+claim.w { + for y in claim.y..claim.y+claim.h { + if claimed.get(&(x,y)).map_or(false, |c| *c > 1) { + return false; + } + } + } + true +} diff --git a/2018/src/bin/day_4.rs b/2018/src/bin/day_4.rs new file mode 100644 index 0000000..2010cf8 --- /dev/null +++ b/2018/src/bin/day_4.rs @@ -0,0 +1,116 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::str::FromStr; + +use std::error::Error; +use std::path::PathBuf; +use std::collections::HashMap; + +// cargo watch -cs "cargo run --release --bin day_4" + +#[derive(Debug, PartialOrd, Ord, PartialEq, Eq)] +struct Event { + date: String, + hour: u32, + minute: u32, + what: EventType +} + +#[derive(Debug, PartialOrd, Ord, PartialEq, Eq)] +enum EventType { + BeginShift(u32), + Asleep, + Awake +} + +impl FromStr for Event { + type Err = Box<Error>; + + fn from_str(s: &str) -> Result<Self, Self::Err> { + let date = s.split_whitespace().nth(0).unwrap().trim_matches('[').to_string(); + let time = s.split_whitespace().nth(1).unwrap().trim_matches(']'); + let hour = time.split(':').nth(0).unwrap().parse().unwrap(); + let minute = time.split(':').nth(1).unwrap().parse().unwrap(); + let guard = s.split_whitespace().nth(3).and_then(|x| x.trim_matches('#').parse().ok()); + + let what = match s.split_whitespace().nth(2).unwrap() { + "Guard" => EventType::BeginShift(guard.unwrap()), + "falls" => EventType::Asleep, + "wakes" => EventType::Awake, + _ => panic!("Unknown event") + }; + + Ok(Event { + date, + hour, + minute, + what + }) + } +} + +#[derive(Debug)] +struct GuardSleepStats { + per_minute: HashMap<u32, u32> +} + +impl GuardSleepStats { + fn new() -> GuardSleepStats { + GuardSleepStats { + per_minute: HashMap::new() + } + } + fn total(&self) -> u32 { + self.per_minute.values().sum() + } +} + + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/4.txt"))?; + + //println!("Input: {:?}", input); + + let mut events: Vec<Event> = input.iter().map(|line| line.parse().unwrap()).collect(); + events.sort(); + //println!("Events: {:?}", events); + + + let mut sleep = HashMap::new(); + let mut current_guard = 0; + let mut last_asleep = 0; + for event in events { + match event.what { + EventType::BeginShift(guard) => current_guard = guard, + EventType::Asleep => last_asleep = event.minute, + EventType::Awake => { + for i in last_asleep..event.minute { + *sleep + .entry(current_guard) + .or_insert(GuardSleepStats::new()) + .per_minute + .entry(i) + .or_insert(0) += 1 + } + } + } + } + + println!("Stats: {:?}", sleep); + + let (sleepiest_guard, sleepiest_stats) = sleep.iter().max_by_key(|(_,v)| v.total()).unwrap().clone(); + println!("Sleepiest guard: {:?}", sleepiest_guard); + let (sleepiest_minute, sleepiest_occurances) = sleepiest_stats.per_minute.iter().max_by_key(|(_,v)| *v).unwrap().clone(); + println!("Sleepiest minute: {:?}", sleepiest_minute); + println!("Part 1 answer: {}", sleepiest_guard * sleepiest_minute); + + + let (specific_minute_offender, specific_minute_stats) = sleep.iter().max_by_key(|(_,v)| v.per_minute.values().max().unwrap()).unwrap().clone(); + println!("Specific minute: {:?}", specific_minute_offender); + let (specific_minute_minute, specific_minute_occurances) = specific_minute_stats.per_minute.iter().max_by_key(|(_,v)| *v).unwrap().clone(); + println!("Specific Minute minute: {:?}", specific_minute_minute); + println!("Part 2 answer: {}", specific_minute_offender * specific_minute_minute); + + Ok(()) +} diff --git a/2018/src/bin/day_5.rs b/2018/src/bin/day_5.rs new file mode 100644 index 0000000..2b24d4c --- /dev/null +++ b/2018/src/bin/day_5.rs @@ -0,0 +1,53 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; +use std::cmp; + +// cargo watch -cs "cargo run --release --bin day_5" + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/5.txt"))?; + + //println!("Input: {:?}", input); + let polymer = { + let mut polymer: Vec<char> = input[0].chars().collect(); + reduce(&mut polymer); + polymer + }; + + debug!(polymer.len()); + + + let mut min_length = polymer.len(); + for c in "abcdefghijklmnopqrstuvwxyz".chars() { + let mut polymer_without_char = polymer.clone(); + polymer_without_char.retain(|x| x.to_ascii_lowercase() != c); + reduce(&mut polymer_without_char); + min_length = cmp::min(min_length, polymer_without_char.len()); + } + + debug!(min_length); + + Ok(()) +} + + +fn reduce(polymer: &mut Vec<char>) { + let mut had_reductions = true; + while had_reductions { + had_reductions = false; + + for i in 0..polymer.len()-1 { + if polymer[i].to_ascii_lowercase() == polymer[i+1].to_ascii_lowercase() && polymer[i] != polymer[i+1] { + had_reductions = true; + polymer.remove(i+1); + polymer.remove(i); + + // break isn't efficient, but does prevent indexing issues after removing + break; + } + } + } +} diff --git a/2018/src/bin/day_6.rs b/2018/src/bin/day_6.rs new file mode 100644 index 0000000..16c8782 --- /dev/null +++ b/2018/src/bin/day_6.rs @@ -0,0 +1,103 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +use std::collections::{HashSet, HashMap}; + +// cargo watch -cs "cargo run --release --bin day_6" + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/6.txt"))?; + let coordinates = input.iter().map(|line| { + let mut split = line.split(|c: char| !c.is_numeric()); + let x: i32 = split.next().unwrap().parse().unwrap(); + let _ = split.next(); + let y: i32 = split.next().unwrap().parse().unwrap(); + (x, y) + }).collect::<Vec<_>>(); + debug!(coordinates); + + let min_x = coordinates.iter().map(|(x, _)| x).min().unwrap().clone(); + let max_x = coordinates.iter().map(|(x, _)| x).max().unwrap().clone(); + let min_y = coordinates.iter().map(|(_, y)| y).min().unwrap().clone(); + let max_y = coordinates.iter().map(|(_, y)| y).max().unwrap().clone(); + + debug!(min_x); + debug!(max_x); + debug!(min_y); + debug!(max_y); + + let mut infinite = HashSet::new(); + for x in min_x..max_x+1 { + for y in &[0, max_y] { + if let Some(coord) = find_closest(&coordinates, x, *y) { + infinite.insert(coord); + } + } + } + for y in min_y..max_y+1 { + for x in &[0, max_x] { + if let Some(coord) = find_closest(&coordinates, *x, y) { + infinite.insert(coord); + } + } + } + + debug!(infinite); + + + let mut areas = HashMap::new(); + for x in min_x..max_x+1 { + for y in min_y..max_y+1 { + if let Some(coord) = find_closest(&coordinates, x, y) { + *areas.entry(coord).or_insert(0) += 1; + } + } + } + + debug!(areas); + + let biggest_non_infinite = areas.iter() + .filter(|(k,_)| !infinite.contains(&k)) + .max_by_key(|(_,v)| *v); + debug!(biggest_non_infinite); + + + + let safe_distance = 10000; + let mut safe_size = 0; + for x in min_x..max_x+1 { + for y in min_y..max_y+1 { + let distance_sum: i32 = coordinates.iter() + .map(|(x1, y1)| manhattan_distance(*x1, *y1, x, y)) + .sum(); + if distance_sum < safe_distance { + safe_size += 1; + } + } + } + debug!(safe_size); + + Ok(()) +} + +fn find_closest(coordinates: &Vec<(i32, i32)>, x: i32, y: i32) -> Option<usize> { + let mut distances = coordinates.iter() + .map(|(x1, y1)| manhattan_distance(*x1, *y1, x, y)) + .enumerate() + .collect::<Vec<_>>(); + distances.sort_by_key(|(_, d)| *d); + + if distances[0] == distances[1] { + None + } + else { + distances.first().map(|(i, _)| *i) + } +} + +fn manhattan_distance(x1: i32, y1: i32, x2: i32, y2: i32) -> i32 { + (x2-x1).abs() + (y2-y1).abs() +} diff --git a/2018/src/bin/day_7.rs b/2018/src/bin/day_7.rs new file mode 100644 index 0000000..ec9d0be --- /dev/null +++ b/2018/src/bin/day_7.rs @@ -0,0 +1,135 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +use std::collections::{HashMap, HashSet}; + +// cargo watch -cs "cargo run --release --bin day_7" + +fn main() -> Result<(), Box<Error>> { + let input = read_file(&PathBuf::from("inputs/7.txt"))?; + + //println!("Input: {:?}", input); + + let (all_steps, blockers) = parse(&input); + + + let mut serial_ordered = Vec::new(); + let mut remaining_steps = all_steps.clone(); + let mut remaining_blockers = blockers.clone(); + + while !remaining_steps.is_empty() { + let mut unblocked: Vec<char> = remaining_steps.iter() + .filter(|c| remaining_blockers.get(c).map(|blockers| blockers.is_empty()).unwrap_or(true)) + .cloned() + .collect(); + unblocked.sort(); + + let next_step = unblocked.first().unwrap().clone(); + + serial_ordered.push(next_step); + remaining_steps.remove(&next_step); + for (_k, mut v) in &mut remaining_blockers { + v.retain(|c| *c != next_step); + } + } + + debug!(serial_ordered); + for c in serial_ordered { + print!("{}", c); + } + println!(); + + + let workers = 5; + let mut worker_tasks: Vec<Task> = Vec::new(); + let mut parallel_ordered = Vec::new(); + let mut remaining_steps = all_steps.clone(); + let mut remaining_blockers = blockers.clone(); + let mut current_time = 0; + + while !remaining_steps.is_empty() { + let mut unblocked: Vec<char> = remaining_steps.iter() + .filter(|c| + remaining_blockers.get(c).map(|blockers| blockers.is_empty()).unwrap_or(true) + && !worker_tasks.iter().any(|w| w.t == **c) + ) + .cloned() + .collect(); + unblocked.sort(); + + let next_unblocked = if worker_tasks.len() < workers { + unblocked.first().cloned() + } else { + None + }; + + if let Some(next_task) = next_unblocked { + worker_tasks.push(Task { + t: next_task, + completion: current_time + time(next_task) + }); + } + else { + //Advance time + worker_tasks.sort_by_key(|w| w.completion); + let complete = worker_tasks.swap_remove(0); + current_time = complete.completion; + let next_step = complete.t; + + parallel_ordered.push(next_step); + remaining_steps.remove(&next_step); + for (_k, mut v) in &mut remaining_blockers { + v.retain(|c| *c != next_step); + } + } + + + } + + debug!(parallel_ordered); + for c in parallel_ordered { + print!("{}", c); + } + println!(); + debug!(current_time); + + + Ok(()) +} + +#[derive(Debug, Copy, Clone, PartialEq, Eq)] +struct Task { + t: char, + completion: u32 +} + + +fn parse(input: &Vec<String>) -> (HashSet<char>, HashMap<char, Vec<char>>) { + let mut blockers = HashMap::new(); + let mut all_steps = HashSet::new(); + + for line in input { + //Step I must be finished before step C can begin. + let mut split = line.split_whitespace(); + let blocker: char = split.nth(1).and_then(|x| x.chars().nth(0)).unwrap(); + let blocked: char = split.nth(5).and_then(|x| x.chars().nth(0)).unwrap(); + + blockers.entry(blocked).or_insert(Vec::new()).push(blocker); + all_steps.insert(blocker); + all_steps.insert(blocked); + } + + debug!(all_steps); + debug!(blockers); + + (all_steps, blockers) +} + +fn time(c: char) -> u32 { + let base_time = 60; + let char_time = c as u32 - 'A' as u32 + 1; + base_time + char_time +} diff --git a/2018/src/bin/day_8.rs b/2018/src/bin/day_8.rs new file mode 100644 index 0000000..59813b0 --- /dev/null +++ b/2018/src/bin/day_8.rs @@ -0,0 +1,66 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; +use std::path::PathBuf; + +use std::slice::Iter; + +// cargo watch -cs "cargo run --release --bin day_8" + +fn main() -> Result<(), Box<Error>> { + let input: Vec<u32> = read_file(&PathBuf::from("inputs/8.txt")) + .map(|lines| lines[0] + .split_whitespace() + .map(|s| s.parse().unwrap()) + .collect() + )?; + + //println!("Input: {:?}", input); + + let metadata_sum = sum_metadata(&mut input.iter()); + debug!(metadata_sum); + + let value = node_value(&mut input.iter()); + debug!(value); + + Ok(()) +} + +fn sum_metadata(iter: &mut Iter<'_, u32>) -> u32 { + let num_children = iter.next().unwrap().clone(); + let num_metadata = iter.next().unwrap().clone(); + + let children_sum: u32 = (0..num_children) + .map(|_| sum_metadata(iter)) + .sum(); + + let metadata_sum: u32 = (0..num_metadata) + .map(|_| iter.next().unwrap()) + .sum(); + + children_sum + metadata_sum +} + + +fn node_value(iter: &mut Iter<'_, u32>) -> u32 { + let num_children = iter.next().unwrap().clone(); + let num_metadata = iter.next().unwrap().clone(); + + let node_values: Vec<u32> = (0..num_children) + .map(|_| node_value(iter)) + .collect(); + + let metadata: Vec<u32> = (0..num_metadata) + .map(|_| iter.next().unwrap().clone()) + .collect(); + + if num_children == 0 { + metadata.iter().sum() + } else { + metadata.iter() + .filter(|m| **m > 0 && **m-1 < num_children) + .map(|m| node_values[*m as usize - 1]) + .sum() + } +} diff --git a/2018/src/bin/day_9.rs b/2018/src/bin/day_9.rs new file mode 100644 index 0000000..3f85620 --- /dev/null +++ b/2018/src/bin/day_9.rs @@ -0,0 +1,91 @@ +extern crate advent_of_code_2018; +use advent_of_code_2018::*; + +use std::error::Error; + +use std::collections::LinkedList; + +// cargo watch -cs "cargo run --release --bin day_9" + +fn main() -> Result<(), Box<Error>> { + debug!(get_winning_player_score(438, 71626)); + debug!(get_winning_player_score(438, 71626*100)); + + Ok(()) +} + + +fn get_winning_player_score(players: usize, last_marble_score: u32) -> u32 { + let mut marbles_head = LinkedList::new(); + let mut marbles_tail = LinkedList::new(); + marbles_head.push_back(0); + + let mut current_player = 0; + let mut next_marble = 1; + let mut scores = vec!(0; players); + + while next_marble <= last_marble_score { + if next_marble % 23 == 0 { + move_backwards(&mut marbles_head, &mut marbles_tail, 7); + let removed = marbles_head.pop_back().expect("Going backwards should have ended with pushing to head"); + move_forward(&mut marbles_head, &mut marbles_tail, 1); + + let score = next_marble + removed; + scores[current_player] += score; + } else { + move_forward(&mut marbles_head, &mut marbles_tail, 1); + marbles_head.push_back(next_marble); + } + + next_marble += 1; + current_player = (current_player + 1) % players; + } + + scores.iter().max().unwrap().clone() +} + +// WARNING: These don't play well with empty lists +fn move_forward(marbles_head: &mut LinkedList<u32>, marbles_tail: &mut LinkedList<u32>, i: usize) { + if i != 0 { + match marbles_tail.pop_front() { + Some(marble) => { + marbles_head.push_back(marble); + move_forward(marbles_head, marbles_tail, i-1); + }, + None => { + marbles_tail.append(marbles_head); + move_forward(marbles_head, marbles_tail, i); + }, + } + } +} + +fn move_backwards(marbles_head: &mut LinkedList<u32>, marbles_tail: &mut LinkedList<u32>, i: usize) { + if i != 0 { + match marbles_head.pop_back() { + Some(marble) => { + marbles_tail.push_front(marble); + move_backwards(marbles_head, marbles_tail, i-1); + }, + None => { + marbles_head.append(marbles_tail); + move_backwards(marbles_head, marbles_tail, i); + }, + } + } +} + + +#[test] +fn trivial() { + assert_eq!(get_winning_player_score(9, 32), 32); +} + +#[test] +fn examples() { + assert_eq!(get_winning_player_score(10, 1618), 8317); + assert_eq!(get_winning_player_score(13, 7999), 146373); + assert_eq!(get_winning_player_score(17, 1104), 2764); + assert_eq!(get_winning_player_score(21, 6111), 54718); + assert_eq!(get_winning_player_score(30, 5807), 37305); +} diff --git a/2018/src/lib.rs b/2018/src/lib.rs new file mode 100644 index 0000000..72520fe --- /dev/null +++ b/2018/src/lib.rs @@ -0,0 +1,31 @@ +use std::path::PathBuf; +use std::io::BufReader; +use std::io::prelude::*; +use std::fs::File; + +/// Reads a specified file into a vector of strings, one line of the +/// file per string. Fails if any part of reading the file fails. +pub fn read_file(file: &PathBuf) -> Result<Vec<String>, std::io::Error> { + let file = File::open(file)?; + let file_reader = BufReader::new(file); + file_reader.lines() + .collect::<Result<Vec<_>, _>>() + .map(preprocess_file_lines) +} + +/// Removes any empty lines and makes sure that lines don't have +/// problematic whitespace. +pub fn preprocess_file_lines(lines: Vec<String>) -> Vec<String> { + lines.iter() + .filter(|line| line.len() > 0) + .map(|line| line.trim_right().to_string()) + .collect() +} + + +#[macro_export] +macro_rules! debug { + ( $x:expr ) => { + println!("{} = {:?}", stringify!($x), $x); + }; +} |