From af075edb24b5298301f5a6d444a54a5ab6af7a6e Mon Sep 17 00:00:00 2001 From: Trevor Merritt Date: Fri, 19 Sep 2025 10:40:28 -0400 Subject: [PATCH] more successes. --- 2015/src/bin/2015_01a.rs | 2 +- 2015/src/bin/2015_07a.rs | 35 +- 2015/src/bin/2015_07a_CHATGPT.rs | 2 +- 2015/src/bin/2015_08a.rs | 76 +- 2015/src/bin/2015_11a.rs | 24 +- 2016/src/bin/2016_02a.rs | 75 +- 2016/src/bin/2016_04a.rs | 3 + 2016/src/bin/2016_07a.rs | 108 ++- 2016/src/bin/2016_08a.rs | 30 +- 2016/src/bin/2016_09a.rs | 60 +- 2016/src/bin/2016_15a.rs | 54 ++ 2016/src/bin/2016_15b.rs | 57 ++ 2016/src/bin/2016_17a.rs | 0 2018/Cargo.toml | 1 + 2018/src/bin/2018_02a.rs | 1 + 2018/src/bin/2018_03a.rs | 111 +++ 2018/src/bin/2018_04a.rs | 89 ++ 2018/src/bin/2018_05a.rs | 26 + Cargo.lock | 289 ++++++ README | 2 +- data/2016_09_data.txt | 1 + data/2016_15_data.txt | 6 + data/2018_03_data.txt | 1407 ++++++++++++++++++++++++++++++ data/2018_04_data.txt | 1110 +++++++++++++++++++++++ data/2018_05_data.txt | 1 + 25 files changed, 3425 insertions(+), 145 deletions(-) create mode 100644 2016/src/bin/2016_15a.rs create mode 100644 2016/src/bin/2016_15b.rs create mode 100644 2016/src/bin/2016_17a.rs create mode 100644 2018/src/bin/2018_03a.rs create mode 100644 2018/src/bin/2018_04a.rs create mode 100644 2018/src/bin/2018_05a.rs create mode 100644 data/2016_09_data.txt create mode 100644 data/2016_15_data.txt create mode 100644 data/2018_03_data.txt create mode 100644 data/2018_04_data.txt create mode 100644 data/2018_05_data.txt diff --git a/2015/src/bin/2015_01a.rs b/2015/src/bin/2015_01a.rs index e2c70c4..ddc628b 100644 --- a/2015/src/bin/2015_01a.rs +++ b/2015/src/bin/2015_01a.rs @@ -39,4 +39,4 @@ fn main() { } println!("Ending on floor {}", current_floor); } -// 232 \ No newline at end of file +// 232 diff --git a/2015/src/bin/2015_07a.rs b/2015/src/bin/2015_07a.rs index 5373e8f..aa07718 100644 --- a/2015/src/bin/2015_07a.rs +++ b/2015/src/bin/2015_07a.rs @@ -23,63 +23,60 @@ fn identify_wires(input: &str) -> Vec { working } -fn parse_instruction(input: &str) -> Option { +fn parse_instruction(input: &str) -> Actions { let parts : Vec<_> = input.split_whitespace().collect(); match parts.len() { 3 => { - Some(Actions::Connection { a: parts[0].to_string(), z: parts[2].to_string() }) + Actions::Connection { a: parts[0].to_string(), z: parts[2].to_string() } }, 4 => { // NOT match parts[0] { "NOT" => { - Some(Actions::NOT { a: parts[1].to_string(), z: parts[3].to_string()} ) }, + Actions::NOT { a: parts[1].to_string(), z: parts[3].to_string()} }, _ => { - println!("UNHANDLED 4 PART -> {input}"); - Some(Actions::Connection { a: "__".to_string(), z: "__".to_string() }) + unreachable!("UNHANDLED 4 PART -> {input}"); } } } 5 => { match parts[1] { "RSHIFT" => { - Some(Actions::RSHIFT { + Actions::RSHIFT { a: parts[0].to_string(), d: parts[2].parse::().unwrap(), z: parts[4].to_string(), - }) + } }, "LSHIFT" => { - Some(Actions::LSHIFT { + Actions::LSHIFT { a: parts[0].to_string(), d: parts[2].parse::().unwrap(), z: parts[4].to_string() - }) + } }, "AND" => { - Some(Actions::AND { + Actions::AND { a: parts[0].to_string(), b: parts[2].to_string(), z: parts[4].to_string(), - }) + } }, "OR" => { - Some(Actions::OR { + Actions::OR { a: parts[0].to_string(), b: parts[2].to_string(), z: parts[4].to_string(), - }) + } }, _ => { - println!("UNHANDLED 5 PART -> {input}"); - None + unreachable!("UNHANDLED 5 PART -> {input}"); } } }, _ => { - println!("Unhandled {} part -> {input}", parts.len()); - None + unreachable!("Unhandled {} part -> {input}", parts.len()); } } } @@ -92,8 +89,6 @@ fn main() { for line in lines { let parsed = parse_instruction(line); - if parsed.is_some() { - println!("PARSED [[{line}]] into [[{parsed:?}]]"); - } + println!("PARSED [[{line}]] into [[{parsed:?}]]"); } } diff --git a/2015/src/bin/2015_07a_CHATGPT.rs b/2015/src/bin/2015_07a_CHATGPT.rs index 99477fb..1dc67b2 100644 --- a/2015/src/bin/2015_07a_CHATGPT.rs +++ b/2015/src/bin/2015_07a_CHATGPT.rs @@ -5,11 +5,11 @@ use core::read_data; enum Expr { Value(u16), Wire(String), + Not(Box), And(Box, Box), Or(Box, Box), LShift(Box, u8), RShift(Box, u8), - Not(Box), } fn parse_expr(token: &str) -> Expr { diff --git a/2015/src/bin/2015_08a.rs b/2015/src/bin/2015_08a.rs index d2efb32..79ba754 100644 --- a/2015/src/bin/2015_08a.rs +++ b/2015/src/bin/2015_08a.rs @@ -1,55 +1,51 @@ -use core::read_data; +use std::fs; fn parsed_string(input: &str) -> String { let mut output = String::new(); - let mut chars = input.chars().peekable(); - while let Some(char) = chars.next() { - match char { - '\\' => { - match chars.next() { - Some('n') => output.push('\n'), - Some('t') => output.push('\t'), - Some('\\') => output.push('\\'), - Some('"') => output.push('"'), - Some('x') => { - let hi = chars.next().unwrap(); - let lo = chars.next().unwrap(); - let value = u8::from_str_radix(&format!("{hi}{lo}"), 16).unwrap(); - output.push(value as char) - } - Some(other) => output.push(other), - None => {} + // Skip the surrounding quotes + let mut chars = input[1..input.len() - 1].chars().peekable(); + + while let Some(ch) = chars.next() { + match ch { + '\\' => match chars.next() { + Some('\\') => output.push('\\'), + Some('"') => output.push('"'), + Some('n') => output.push('\n'), + Some('t') => output.push('\t'), + Some('x') => { + // Must be exactly two hex digits + let hi = chars.next().expect("Incomplete \\x escape"); + let lo = chars.next().expect("Incomplete \\x escape"); + let hex = format!("{hi}{lo}"); + let value = u8::from_str_radix(&hex, 16) + .expect("Invalid hex escape in input"); + output.push(value as char); } - } - '"' => {} - _ => output.push(char) + Some(other) => panic!("Invalid escape: \\{other}"), + None => panic!("Dangling backslash"), + }, + _ => output.push(ch), } } + output } +use core::read_data; fn main() { - let mut char_count = 0; - let mut mem_count = 0; + // Read your puzzle input file + let input = read_data("2015_08_data.txt"); - let binding = read_data("2015_08_data.txt"); - let lines = binding.lines(); - let binding = vec![ - r#""""#, - r#""abc""#, - r#""aaa\"aaa""#, - r#"\x27"# - ].join("\n"); - let lines = binding.lines(); + let mut raw_total = 0; + let mut mem_total = 0; - for line in lines { - let raw_size = line.len(); - let parsed = parsed_string(line).len(); - println!("||{line}|| -> raw: {raw_size} parsed: {parsed}"); - char_count += parsed; - mem_count += raw_size; + for line in input.lines() { + let raw_len = line.len(); + let mem_len = parsed_string(line).len(); + raw_total += raw_len; + mem_total += mem_len; } - println!("{} - {} = {}", char_count, mem_count, 0); - println!("{}", mem_count - char_count); + + println!("Part 1: {} - {} = {}", raw_total, mem_total, raw_total - mem_total); } diff --git a/2015/src/bin/2015_11a.rs b/2015/src/bin/2015_11a.rs index 4c33427..28d20c8 100644 --- a/2015/src/bin/2015_11a.rs +++ b/2015/src/bin/2015_11a.rs @@ -1,3 +1,19 @@ +fn next_password(input: &str) -> Vec { + // increment the last character. + + let mut work: Vec<_> = input.clone().chars().collect(); + let wlen = input.len(); + print!("[[{work:?}]] "); + if work[wlen - 1] == 'z' { + + } else { + work[wlen - 1] = (work[wlen - 1] as u8 + 1) as char; + } + println!(" became {work:?}"); + + work +} + fn includes_straight(input: &str) -> bool { true } @@ -19,8 +35,10 @@ fn includes_pair(input: &str) -> bool { false } -fn find_next_password(input: &str) -> String {} - +fn find_next_password(input: &str) -> String { + let next_password = next_password(input).join(""); + next_password +} fn main() { let params = vec![ @@ -31,4 +49,4 @@ fn main() { for (input, output) in params { assert_eq!(find_next_password(input), output.to_string()); } -} \ No newline at end of file +} diff --git a/2016/src/bin/2016_02a.rs b/2016/src/bin/2016_02a.rs index 37911d6..c45eca8 100644 --- a/2016/src/bin/2016_02a.rs +++ b/2016/src/bin/2016_02a.rs @@ -43,37 +43,52 @@ struct Location { fn main() { let mut current_position = Location { x: 1, y: 1 }; - // let directions = read_data("2016_02_data.txt"); - let directions = "ULL\nRRDDD\nLURDL\nUUUUUD"; - - for next_direction in directions.chars() { - match next_direction { - 'R' => { - if current_position.x < 3 { - current_position.x += 1; + let directions = read_data("2016_02_data.txt"); + //let directions = "ULL\nRRDDD\nLURDL\nUUUUUD"; + for line_of_directions in directions.lines() { + println!("Processing directions of {line_of_directions} starting at {}x{}", current_position.x, current_position.y); + for current_direction in line_of_directions.chars() { + // print!(" [{current_direction}] "); + match current_direction { + 'U' => { + if current_position.y > 0 { + current_position.y -= 1; + //println!("Moving up.") + } else { + //println!("At Edge"); + } + }, + 'D' => { + if current_position.y < 2 { + current_position.y += 1; + //println!("Moving down."); + } else { + //println!("At Edge"); + } + }, + 'L' => { + if current_position.x > 0 { + current_position.x -= 1; + //println!("Moving left."); + } else { + //println!("At Edge"); + } + }, + 'R' => { + if current_position.x < 2 { + current_position.x += 1; + //println!("Moving right."); + } else { + //println!("At Edge"); + } } - }, - 'L' => { - if current_position.x > 0 { - current_position.x -= 1; - } - }, - 'U' => { - if current_position.y < 3 { - current_position.y += 1; - } - }, - 'D' => { - if current_position.y > 0 { - current_position.y -= 1; - } - }, - '\n' => { - println!("At {current_position:?}"); -7 }, - _ => { unreachable!("Invalid direction"); } + _ => { unreachable!("invalid direction.") } + } + // println!("Ending line at {}x{}", current_position.x, current_position.y); + // } + println!("CELL = {}", (current_position.x + 1) + (current_position.y * 3)); } + println!("Ending at {}x{}", current_position.x, current_position.y); } -// 2445 is wrong. -// 3775 is wrong. +// 84452 diff --git a/2016/src/bin/2016_04a.rs b/2016/src/bin/2016_04a.rs index 141f8aa..65a98df 100644 --- a/2016/src/bin/2016_04a.rs +++ b/2016/src/bin/2016_04a.rs @@ -9,6 +9,7 @@ struct EncryptedRoom { fn main() { let binding = read_data("2016_04_data.txt"); + let inputs = binding.lines(); for line in inputs { @@ -40,6 +41,8 @@ fn main() { println!("HASH: {hash:?}"); // now find the 5 most frequently occurring characters in alphabetical order // once we have the new value, compare it to the checksum + for (k, v) in hash { + } } } diff --git a/2016/src/bin/2016_07a.rs b/2016/src/bin/2016_07a.rs index 4f31122..f609fcc 100644 --- a/2016/src/bin/2016_07a.rs +++ b/2016/src/bin/2016_07a.rs @@ -1,23 +1,5 @@ -// While snooping around the local network of EBHQ, you compile a list of IP addresses (they're -// IPv7, of course; IPv6 is much too limited). You'd like to figure out which IPs support TLS -// (transport-layer snooping). -// -// An IP supports TLS if it has an Autonomous Bridge Bypass Annotation, or ABBA. An ABBA is any -// four-character sequence which consists of a pair of two different characters followed by the -// reverse of that pair, such as xyyx or abba. However, the IP also must not have an ABBA within -// any hypernet sequences, which are contained by square brackets. -// -// For example: -// -// abba[mnop]qrst supports TLS (abba outside square brackets). -// abcd[bddb]xyyx does not support TLS (bddb is within square brackets, even though xyyx is outside -// square brackets). -// aaaa[qwer]tyui does not support TLS (aaaa is invalid; the interior characters must be different). -// ioxxoj[asdfgh]zxcvbn supports TLS (oxxo is outside square brackets, even though it's within a -// larger string). -// How many IPs in your puzzle input support TLS? - use core::read_data; + fn has_abba(input: &str) -> bool { let chars: Vec = input.chars().collect(); @@ -31,24 +13,29 @@ fn has_abba(input: &str) -> bool { false } -fn extract_hypernet(input: &str) -> (String, String) { - let mut payload = String::new(); - let mut real_balance = String::from(input); - while real_balance.contains('[') { - let (prefix, balance) = real_balance.split_once('[').unwrap(); - let (tmp, t_balance) = balance.split_once(']').unwrap(); - payload = format!("{}{}", payload, tmp.to_string()); - real_balance = format!("{}{}", prefix, t_balance); - // extract the text between the '[' and ']' characters +/// Split the address into supernet (outside brackets) and hypernet (inside brackets) parts. +fn split_address(input: &str) -> (Vec, Vec) { + let mut supernets = Vec::new(); + let mut hypernets = Vec::new(); + let mut rest = input; + + while let Some((prefix, balance)) = rest.split_once('[') { + let (inside, suffix) = balance.split_once(']').unwrap(); + supernets.push(prefix.to_string()); + hypernets.push(inside.to_string()); + rest = suffix; } - (real_balance, payload.to_string()) + if !rest.is_empty() { + supernets.push(rest.to_string()); + } + + (supernets, hypernets) } -fn has_tls(address: &str, hypernet: &str) -> bool { - let abba = has_abba(address); - let noabba = !has_abba(hypernet); - println!("[{address}] ABBA: {abba} [{hypernet}] NOABBA: {noabba}"); - abba && noabba +fn has_tls(supernets: &[String], hypernets: &[String]) -> bool { + let has_outside = supernets.iter().any(|s| has_abba(s)); + let has_inside = hypernets.iter().any(|h| has_abba(h)); + has_outside && !has_inside } fn main() { @@ -57,27 +44,64 @@ fn main() { ("abba[mnop]qrst", true), ("abcd[bddb]xyyx", false), ("aaaa[qwer]tyui", false), - ("ioxxoj[asdfgh]zxcvbn", true) + ("ioxxoj[asdfgh]zxcvbn", true), + ("aaa[qwer]abba", true), // tricky case: should be valid ]; for (input, expected) in params { println!("------------------Testing [[{input}]]"); - let (address, hypernet) = extract_hypernet(input); - println!("[[{input}]] = ADD: {address} HN: {hypernet}"); - assert_eq!(has_tls(address.as_str(), hypernet.as_str()), expected) + let (supernets, hypernets) = split_address(input); + println!( + "[[{input}]] = SUPERNETS: {:?} HYPERNETS: {:?}", + supernets, hypernets + ); + assert_eq!(has_tls(&supernets, &hypernets), expected) } let binding = read_data("2016_07_data.txt"); let lines = binding.lines(); for line in lines { - let (address, hypernet) = extract_hypernet(line); - println!("Processing ||||{line}|||| -> {}/{}", address, hypernet); - if has_tls(address.as_str(), hypernet.as_str()) { + let (supernets, hypernets) = split_address(line); + if has_tls(&supernets, &hypernets) { num_good += 1; } } println!("Found {num_good} good addresses."); } +#[cfg(test)] +mod test { + use crate::{has_abba, split_address, has_tls}; -// 132 too high + #[test] + fn abba_tests() { + let params = vec![ + ("abba", true), + ("aabb", false), + ("ioxxoj", true), + ("aaaa", false), + ]; + + for (input, result) in params { + assert_eq!(has_abba(input), result, "failed on {input}"); + } + } + + #[test] + fn split_and_tls_tests() { + let cases = vec![ + ("abba[mnop]qrst", true), + ("abcd[bddb]xyyx", false), + ("aaaa[qwer]tyui", false), + ("ioxxoj[asdfgh]zxcvbn", true), + ("aaa[qwer]abba", true), // confirms split works + ]; + + for (input, expected) in cases { + let (sup, hyp) = split_address(input); + assert_eq!(has_tls(&sup, &hyp), expected, "failed on {input}"); + } + } +} + +// 118 with ChatGPT to explain how merging the hypernet sections cause problems. \ No newline at end of file diff --git a/2016/src/bin/2016_08a.rs b/2016/src/bin/2016_08a.rs index 8721576..a750d24 100644 --- a/2016/src/bin/2016_08a.rs +++ b/2016/src/bin/2016_08a.rs @@ -1,5 +1,5 @@ -const SCREEN_COLS: usize = 50; -const SCREEN_ROWS: usize = 6; +const SCREEN_COLS: usize = 8; +const SCREEN_ROWS: usize = 3; const SCREEN_SIZE: usize = SCREEN_COLS * SCREEN_ROWS; #[derive(Debug, Copy, Clone)] @@ -9,20 +9,31 @@ enum Actions { RotateColumn(u32, u32) } +struct World { + width: u32, + height: u32, + memory: Box<[bool]> +} + impl Actions { // rotate a column 1 time. fn rotate_column(&self, column_index: u32, target: &mut [bool; SCREEN_SIZE]) { let first_value = target[column_index as usize]; - for index in (SCREEN_COLS..0).rev() { + let mut last_value = false; + for index in (0..SCREEN_COLS).rev() { let offset = index as u32 * SCREEN_COLS as u32 + column_index; - println!("index = {index} offset = {offset}"); + let next_offset = offset + SCREEN_COLS as u32; + println!("index: {} offset: {} next_offset: {}", + index, offset, next_offset); + last_value = target[offset as usize]; + target[offset as usize] = last_value; } } // rotate a row 1 time. fn rotate_row(&self, row_index: u32, target: &mut [bool; SCREEN_SIZE]) { for index in (SCREEN_ROWS..0).rev() { - let offset = index as u32 * SCREEN_COLS as u32 + index; + let offset = index as u32 * SCREEN_COLS as u32 + index as u32; println!("index = {index} offset = {offset}"); } } @@ -95,6 +106,13 @@ fn dump_screen(to_display: &[bool; SCREEN_SIZE]) { fn main() { let mut screen_space:[bool; SCREEN_SIZE] = [false; SCREEN_SIZE]; + + let mut world = World { + width: 8, + height: 3, + memory: Box::new([false; 8*3]), + }; + let directions = vec![ "rect 3x2", "rotate column x=1 by 1", @@ -109,3 +127,5 @@ fn main() { dump_screen(&screen_space); } } + + diff --git a/2016/src/bin/2016_09a.rs b/2016/src/bin/2016_09a.rs index cf74f49..cb932e6 100644 --- a/2016/src/bin/2016_09a.rs +++ b/2016/src/bin/2016_09a.rs @@ -1,3 +1,59 @@ -fn main() { +use std::ptr::hash; +use core::read_data; +/// Calculate the decompressed length of a string. +/// If `recursive` is true, markers are expanded recursively (Part 2). +/// If `recursive` is false, markers are expanded only once (Part 1). +fn decompressed_len(input: &str, recursive: bool) -> usize { + let mut total = 0; + let mut i = 0; + let binding = input.to_ascii_uppercase(); + let bytes = binding.as_bytes(); -} \ No newline at end of file + while i < bytes.len() { + if bytes[i] == b'(' { + // find end of marker + let end = input[i..].find(')').unwrap() + i; + let marker = &input[i + 1..end]; + let (a, b) = marker.split_once('x').unwrap(); + let a: usize = a.parse().unwrap(); + let b: usize = b.parse().unwrap(); + i = end + 1; + + let segment = &input[i..i + a]; + let seg_len = if recursive { + decompressed_len(segment, true) + } else { + segment.len() + }; + total += seg_len * b; + i += a; + } else { + total += 1; + i += 1; + } + } + total +} + + +fn main() { + let puzzle_input = read_data("2016_09_data.txt"); + let params = vec![ + ("ADVENT", 6), + ("A(1x5)BC", 7), + ("(3x3)XYZ", 9), + ("A(2x2)BCD(2x2)EFG", 11), + ("(6x1)(1x3)A", 6), + ("X(8x2)(3x3)ABCY", 18), + (puzzle_input.as_str(), 100) + ]; + + for (input, size) in params { + + let decompressed_size = decompressed_len(input, false); + println!("Tested {} char string for expanded size of {} -> Calculated {}", input.len(), size, decompressed_size); + + } +} + +// 138735 ChatGPT held my hand through this as parsing text is not my strong point. \ No newline at end of file diff --git a/2016/src/bin/2016_15a.rs b/2016/src/bin/2016_15a.rs new file mode 100644 index 0000000..e80a6e7 --- /dev/null +++ b/2016/src/bin/2016_15a.rs @@ -0,0 +1,54 @@ +use core::read_data; + +struct Disc { + pub id: u32, + pub num_slots: u32, + pub current_slot: u32, +} + +fn parse_disc(input: &str) -> Disc { + // Example line: + // "Disc #1 has 5 positions; at time=0, it is at position 4." + let parts: Vec<&str> = input + .trim_end_matches('.') + .split_whitespace() + .collect(); + + let id = parts[1][1..].parse::().unwrap(); // "#1" → "1" + let num_slots = parts[3].parse::().unwrap(); // "5" + let current_slot = parts[11].parse::().unwrap(); // "4" + + Disc { id, num_slots, current_slot } +} + +fn holes_line_up(discs: &Vec, time: u32) -> bool { + for disc in discs { + // Puzzle logic: capsule reaches disc `id` at time + id + if (disc.current_slot + time + disc.id) % disc.num_slots != 0 { + return false; + } + } + true +} + +fn main() { + let binding = read_data("2016_15_data.txt"); + let inputs = binding.lines(); + let mut discs = vec![]; + + for line in inputs { + let new_disc = parse_disc(line); + discs.push(new_disc); + } + + println!("Discs loaded. Searching for the correct release time..."); + + let mut time = 0; + while !holes_line_up(&discs, time) { + time += 1; + } + + println!("Capsule falls through at time {time}."); +} + +// 317371 diff --git a/2016/src/bin/2016_15b.rs b/2016/src/bin/2016_15b.rs new file mode 100644 index 0000000..e739f5e --- /dev/null +++ b/2016/src/bin/2016_15b.rs @@ -0,0 +1,57 @@ +use core::read_data; + +struct Disc { + pub id: u32, + pub num_slots: u32, + pub current_slot: u32, +} + +fn parse_disc(input: &str) -> Disc { + // Example line: + // "Disc #1 has 5 positions; at time=0, it is at position 4." + let parts: Vec<&str> = input + .trim_end_matches('.') + .split_whitespace() + .collect(); + + let id = parts[1][1..].parse::().unwrap(); // "#1" → "1" + let num_slots = parts[3].parse::().unwrap(); // "5" + let current_slot = parts[11].parse::().unwrap(); // "4" + + Disc { id, num_slots, current_slot } +} + +fn holes_line_up(discs: &Vec, time: u32) -> bool { + for disc in discs { + // Puzzle logic: capsule reaches disc `id` at time + id + if (disc.current_slot + time + disc.id) % disc.num_slots != 0 { + return false; + } + } + true +} + +fn main() { + let binding = read_data("2016_15_data.txt"); + let inputs = binding.lines(); + let mut discs = vec![]; + + for line in inputs { + let new_disc = parse_disc(line); + discs.push(new_disc); + } + + println!("Discs loaded. Searching for the correct release time..."); + discs.push(Disc { id: 7, num_slots: 11, current_slot: 0 }); + + let mut time = 0; + while !holes_line_up(&discs, time) { + time += 1; + } + + println!("Capsule falls through at time {time}."); +} + +// 2080951 help from ChatGPT to understand +// that each disc ticks 1/time unit, but they dont all tick at that second, +// they cascade. diff --git a/2016/src/bin/2016_17a.rs b/2016/src/bin/2016_17a.rs new file mode 100644 index 0000000..e69de29 diff --git a/2018/Cargo.toml b/2018/Cargo.toml index 47bbc60..c05a130 100644 --- a/2018/Cargo.toml +++ b/2018/Cargo.toml @@ -5,3 +5,4 @@ edition = "2024" [dependencies] core = { path = "../core" } +chrono = "0.4" \ No newline at end of file diff --git a/2018/src/bin/2018_02a.rs b/2018/src/bin/2018_02a.rs index ac09f88..9f05cab 100644 --- a/2018/src/bin/2018_02a.rs +++ b/2018/src/bin/2018_02a.rs @@ -32,3 +32,4 @@ fn main() { } println!("Found {num_good} good boxes? / Checksum {}", num_two * num_three); } +// Checksum 5434 \ No newline at end of file diff --git a/2018/src/bin/2018_03a.rs b/2018/src/bin/2018_03a.rs new file mode 100644 index 0000000..e90ef17 --- /dev/null +++ b/2018/src/bin/2018_03a.rs @@ -0,0 +1,111 @@ +use core::read_data; + +pub const WORLD_WIDTH: u32 = 1000; +pub const WORLD_HEIGHT: u32 = 1000; +pub const WORLD_SIZE: u32 = WORLD_WIDTH * WORLD_HEIGHT; + +#[derive(Debug)] +struct Point { + pub x: u32, + pub y: u32 +} + +#[derive(Debug)] +struct Region { + pub elf: u32, + pub start: Point, + pub end: Point, + pub size: Point +} + +impl Region { + fn new_with_size(start: Point, size: Point) -> Region { + Region { + elf: 0, + end: Point { x: start.x + size.x, y: start.y + size.y }, + start, + size + } + } + + // fn new_with_end(start: Point, end: Point) -> Region { + // + // } +} + +fn apply_region(to_claim: &Region, world: &mut [u32; WORLD_SIZE as usize]) { + println!("Claiming from {}x{} to {}x{}", + to_claim.start.x, + to_claim.start.y, + to_claim.end.x, + to_claim.end.y + ); + + for y in to_claim.start.y..to_claim.end.y { + for x in to_claim.start.x..to_claim.end.x { + let offset = y * WORLD_WIDTH + x; + world[offset as usize] += 1; + } + } +} + + +/// convert a single line of input into a region claim. +fn line_to_region(input: &str) -> Region { + // [[# @ : + let (elf, balance) = input.split_once("@").unwrap(); + let (_, elf_id) = elf.split_once('#').unwrap(); + let (start_point, size_point) = balance.split_once(": ").unwrap(); + let (start_x, start_y) = start_point.trim().split_once(',').unwrap(); + let (size_x, size_y) =size_point.trim().split_once('x').unwrap(); + let start = Point { + x: start_x.parse().unwrap(), + y: start_y.parse().unwrap() + }; + let size = Point { + x: size_x.parse().unwrap(), + y: size_y.parse().unwrap() + }; + let end = Point { + x: start.x + size.x, + y: start.y + size.y, + }; + + println!("ELF: [[{elf_id}]] START_POINT: [[{start_x}x{start_y}]] SIZE: [[{size_x}x{size_y}]] END: [[{}x{}]]", + end.x, end.y + ); + + let mut working = Region { + elf: elf_id.trim().parse().unwrap(), + start, + end, + size, + }; + println!("Decoded [[{input}]] to [[{working:?}]]"); + working +} + +fn main() { + let binding = read_data("2018_03_data.txt"); + let lines = binding.lines(); + let mut world = [0x00u32; WORLD_SIZE as usize]; + + for line in lines { + apply_region( + &line_to_region( + line + ), &mut world + ); + } + // now count the areas with a value >=2 + let mut num_multiclaimed = 0; + for offset in 0..WORLD_SIZE { + if world[offset as usize] >= 2 { + num_multiclaimed += 1; + } + } + + println!("There are {num_multiclaimed} multi-claimed squares."); +} + +// 120419 too high diff --git a/2018/src/bin/2018_04a.rs b/2018/src/bin/2018_04a.rs new file mode 100644 index 0000000..61c616e --- /dev/null +++ b/2018/src/bin/2018_04a.rs @@ -0,0 +1,89 @@ +use std::collections::HashMap; +use chrono::{NaiveDateTime, Timelike}; +use core::read_data; +use crate::WorkEvent::*; + +#[derive(Debug)] +enum WorkEvent { + // [1518-09-07 00:00] Guard #2383 begins shift + StartShift(u32), + // [1518-08-20 00:17] falls asleep + FallAsleep, + // [1518-05-09 00:58] wakes up + WakeUp +} + +fn parse_line(input: &str) -> (WorkEvent, NaiveDateTime) { + let (mut date, balance) = input.split_once("] ").unwrap(); + let mut event = FallAsleep; + + if balance.contains('#') { + let (_, guard_id_plus_junk) = balance.split_once("#").unwrap(); + let (guard_id, _) = guard_id_plus_junk.split_once(" ").unwrap(); + event = StartShift(guard_id.parse().unwrap()); + } else { + if !balance.contains("falls") { + event = WakeUp + } + } + + let parsed = NaiveDateTime::parse_from_str(date.strip_prefix('[').unwrap(), "%Y-%m-%d %H:%M").unwrap(); + (event, parsed) +} + +fn main() { + let binding = read_data("2018_04_data.txt"); + let lines = binding.lines(); + + let mut worklog = HashMap::new(); + + for line in lines { + // println!("-- LINE = __{line}__ --"); + let (event, when) = parse_line(line); + worklog.insert(when, event); + // println!("--"); + } + println!("Loaded {} work events. Sorting...", worklog.len()); + let mut items: Vec<_> = worklog.iter().collect(); + items.sort_by(|a, b| a.0.cmp(& b.0)); + + let mut sleeping_guard = 0; + let mut sleep_time = NaiveDateTime::default(); + let mut working_guard = 0; + let mut guard_sleep_log = HashMap::new(); + let mut minute_sleep_log: HashMap> = HashMap::new(); + for index in 0..=60 { + minute_sleep_log.insert(index, HashMap::new()); + } + + for (k, v) in items { + println!("K: {k} V: {v:?}"); + match v { + StartShift(guard_id) => { + working_guard = *guard_id; + // println!("Guard {guard_id} started at {k:?}"); + } + FallAsleep => { + // println!("Guard {working_guard} is now sleeping at {k:?}"); + sleeping_guard = working_guard; + sleep_time = *k; + } + WakeUp => { + let sleep_duration = k.signed_duration_since(sleep_time); + // println!("Guard {sleeping_guard} is now waking up at {k:?}, was sleeping for {} minutes.", sleep_duration.num_minutes()); + *guard_sleep_log.entry(sleeping_guard).or_insert(0) += sleep_duration.num_minutes(); + sleeping_guard = 0; + // println!("Sleep from {} to {} for {}", sleep_time.minute(), k.minute(), working_guard); + for minute in sleep_time.minute()..=k.minute() { + println!("Marking sleep at {minute} for {working_guard}"); + minute_sleep_log.entry(minute).or_insert(HashMap::from((working_guard, 1))); + println!("MSL has {} entries.", minute_sleep_log.len()); + } + } + } + // println!("--"); + } + + println!("Guard Sleep Log:"); + println!("{guard_sleep_log:?}"); +} diff --git a/2018/src/bin/2018_05a.rs b/2018/src/bin/2018_05a.rs new file mode 100644 index 0000000..b67aed2 --- /dev/null +++ b/2018/src/bin/2018_05a.rs @@ -0,0 +1,26 @@ +fn process(input: &str) -> (String, u32) { + let num_changes = 0; + let mut peekables = input.chars().peekable(); + while let Some(current_char) = peekables.next() { + println!("Checking {current_char} and {}", peekables.next().unwrap()); + } + + (String::new(), num_changes) +} + +fn process_recursively(input: &str) -> String { + let mut working_str = input; + println!("RECURSIVE START: {}", input.len()); + let mut need_again = true; + while need_again { + let (working, last_count) = process(working_str); + if last_count > 0 { need_again = true; } + let w2 = working.clone(); + working_str = w2.as_str(); + } + "dabCBAcaDA".to_string() +} + +fn main() { + assert_eq!(process_recursively("dabAcCaCBAcCcaDA"), "dabCBAcaDA"); +} \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 57e6e2e..25f2320 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,6 +11,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + [[package]] name = "aoc2015" version = "0.1.0" @@ -38,6 +47,7 @@ dependencies = [ name = "aoc2018" version = "0.1.0" dependencies = [ + "chrono", "core", ] @@ -84,6 +94,12 @@ dependencies = [ "regex", ] +[[package]] +name = "autocfg" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" + [[package]] name = "block-buffer" version = "0.10.4" @@ -93,16 +109,51 @@ dependencies = [ "generic-array", ] +[[package]] +name = "bumpalo" +version = "3.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c5e41b57b8bba42a04676d81cb89e9ee8e859a1a66f80a5a72e1cb76b34d43" + +[[package]] +name = "cc" +version = "1.2.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5252b3d2648e5eedbc1a6f501e3c795e07025c1e93bbf8bbdd6eef7f447a6d54" +dependencies = [ + "find-msvc-tools", + "shlex", +] + [[package]] name = "cfg-if" version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2fd1289c04a9ea8cb22300a459a72a385d7c73d3259e2ed7dcb2af674838cfa9" +[[package]] +name = "chrono" +version = "0.4.42" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "145052bdd345b87320e369255277e3fb5152762ad123a901ef5c262dd38fe8d2" +dependencies = [ + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-link 0.2.0", +] + [[package]] name = "core" version = "0.1.0" +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + [[package]] name = "crypto-common" version = "0.1.6" @@ -123,6 +174,12 @@ dependencies = [ "crypto-common", ] +[[package]] +name = "find-msvc-tools" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" + [[package]] name = "generic-array" version = "0.14.7" @@ -133,6 +190,52 @@ dependencies = [ "version_check", ] +[[package]] +name = "iana-time-zone" +version = "0.1.63" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "log", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "js-sys" +version = "0.3.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c0b063578492ceec17683ef2f8c5e89121fbd0b172cbc280635ab7567db2738" +dependencies = [ + "once_cell", + "wasm-bindgen", +] + +[[package]] +name = "libc" +version = "0.2.175" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" + +[[package]] +name = "log" +version = "0.4.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432" + [[package]] name = "md-5" version = "0.10.6" @@ -149,6 +252,39 @@ version = "2.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.21.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42f5e15c9953c5e4ccceeb2e7382a716482c34515315f7b03532b8b4e8393d2d" + +[[package]] +name = "proc-macro2" +version = "1.0.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89ae43fd86e4158d6db51ad8e2b80f313af9cc74f5c0e03ccb87de09998732de" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +dependencies = [ + "proc-macro2", +] + [[package]] name = "regex" version = "1.11.2" @@ -178,14 +314,167 @@ version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +[[package]] +name = "rustversion" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d" + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "syn" +version = "2.0.106" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ede7c438028d4436d71104916910f5bb611972c5cfd7f89b8300a8186e6fada6" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + [[package]] name = "typenum" version = "1.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" +[[package]] +name = "unicode-ident" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f63a545481291138910575129486daeaf8ac54aee4387fe7906919f7830c7d9d" + [[package]] name = "version_check" version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "wasm-bindgen" +version = "0.2.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e14915cadd45b529bb8d1f343c4ed0ac1de926144b746e2710f9cd05df6603b" +dependencies = [ + "cfg-if", + "once_cell", + "rustversion", + "wasm-bindgen-macro", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e28d1ba982ca7923fd01448d5c30c6864d0a14109560296a162f80f305fb93bb" +dependencies = [ + "bumpalo", + "log", + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c3d463ae3eff775b0c45df9da45d68837702ac35af998361e2c84e7c5ec1b0d" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7bb4ce89b08211f923caf51d527662b75bdc9c9c7aab40f86dcb9fb85ac552aa" +dependencies = [ + "proc-macro2", + "quote", + "syn", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.101" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f143854a3b13752c6950862c906306adb27c7e839f7414cec8fea35beab624c1" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "windows-core" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0fdd3ddb90610c7638aa2b3a3ab2904fb9e5cdbecc643ddb3647212781c4ae3" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-link 0.1.3", + "windows-result", + "windows-strings", +] + +[[package]] +name = "windows-implement" +version = "0.60.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.59.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-link" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" + +[[package]] +name = "windows-link" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45e46c0661abb7180e7b9c281db115305d49ca1709ab8242adf09666d2173c65" + +[[package]] +name = "windows-result" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56f42bd332cc6c8eac5af113fc0c1fd6a8fd2aa08a0119358686e5160d0586c6" +dependencies = [ + "windows-link 0.1.3", +] + +[[package]] +name = "windows-strings" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6c93f3a0c3b36176cb1327a4958a0353d5d166c2a35cb268ace15e91d3b57" +dependencies = [ + "windows-link 0.1.3", +] diff --git a/README b/README index 9637488..0f793bc 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -Trevors AOC workspace. +Trevor's AOC workspace. This is not for the public. If you aren't Trevor, please go away now. diff --git a/data/2016_09_data.txt b/data/2016_09_data.txt new file mode 100644 index 0000000..816f461 --- /dev/null +++ b/data/2016_09_data.txt @@ -0,0 +1 @@ +(6x9)JUORKH(10x13)LNWIKDMACM(126x14)(21x8)QLKUJNVVZIQGGFCJZMPHK(2x1)ZH(59x3)(38x14)KELEPIDYLCGJUBCXACRSOCEZYXLOFJSADZAYXN(8x11)HORSWAQU(21x2)YEZNNYDLDSTGWMQFSMTEZ(111x14)(14x14)IMLQOUGGZSUMFQ(73x10)(5x8)KWHRS(6x1)OQMANE(6x4)FALFZJ(3x3)OAQ(26x15)LALOJKTKJWTMRDDQQVCSDHJYGF(4x12)OXMQ(63x6)(6x10)OSJMJX(9x13)(4x2)FAUQ(29x13)UDCLMPVICKKUFMPQUENGCRIUGHOKM(7x7)JNKRSAT(79x7)(11x1)(5x13)RUQIL(47x12)HDIEMWYDIMTVXSIRZSRMIMZVMCEIUOMJDGHQXPWDFLOYIWL(3x5)IHX(1x6)M(33x3)ORLXEMAAICHAIJUIPKKWPWZMVXJSCZZYG(9x11)TIMKMEBMC(9930x13)(1513x15)(779x2)(333x4)(197x8)(27x4)IVLXTLXGDDQPWQOAXDEISEOTSAW(68x4)(4x13)OOZQ(3x5)NIN(10x12)UDGXNSJXLP(17x6)FZETGJDTLNUQRLHWU(4x13)AIZY(9x10)HESLLDOPY(69x1)(5x13)LULVA(10x1)CBTQWNWMRT(3x11)UYT(4x13)APGU(17x2)ADKQUAPCVNCXGBUGI(8x7)EGCQRTUU(108x11)(30x14)(2x13)LW(16x7)OTSCBRYUGBHSLRHU(2x1)KT(58x4)(3x12)SBW(7x15)IJTOSYM(30x8)MGFBFVKJDCFQHTLVSLZSSRVALHIYUN(25x4)(19x6)(5x2)ULAFN(4x1)LZBJ(60x10)(33x1)(26x14)FXVHHVMIQZBNSJRJWVQQBTLCJT(14x15)MCNCQPHNNPDVLT(326x1)(90x6)(8x9)(2x10)QQ(7x9)(2x9)QA(15x5)(3x12)YYF(1x9)E(2x5)PN(30x10)(16x1)DNOMTDTPGQECFDZR(2x11)PO(83x9)(18x6)(6x6)WCIAVF(2x4)PG(4x10)LMEG(2x9)TM(7x8)CYTGIPV(23x13)(1x9)V(1x15)E(4x14)EFSQ(102x15)(19x4)(6x5)GOXZGT(3x2)VQM(5x12)ZPRXJ(17x1)(10x15)RJNMNYZGHQ(37x2)(11x8)BZHBHSYQFZR(7x3)ISJOGDR(3x8)HEC(25x2)(19x6)(7x7)WKDHBGA(2x1)HH(2x11)TS(297x11)(289x14)(6x13)QERECU(4x3)IKNT(13x7)(7x11)(1x13)C(242x1)(28x4)(22x3)PHZYSAKYKBEGOCKKMRKOOO(12x1)RJDMLFYCFSIP(90x1)(17x2)YMAFXOHNVIPPURYIK(7x15)UYDUWQX(33x9)AIRWLTEJXUBYKOIBBDABIUKOYZXOPEGIW(9x11)RMBVBJFRV(88x9)(8x10)UQXEIUOO(24x2)OJEVOVTOFTKJSBPOOUPDZHGM(5x14)OWMBL(8x13)DKXEFKWI(12x12)WDCXEDVGOCPY(299x2)(239x3)(172x5)(67x7)(5x8)SYGVZ(5x8)DREXA(6x1)FNDUMM(30x2)PMYQAWIEQSOAWKGTANFXJVIPIXAVXK(5x5)ANQRI(83x3)(15x12)TGXTICPXLKWBCIP(13x5)DVMOKEUOBYENI(10x14)MIBPUUQJWN(12x3)GRHQZIDWWGLK(2x7)WR(11x7)(5x15)EIKHL(36x12)(21x4)AJDVITQLAQQOJJOFFKNLS(3x11)EZR(5x2)YHNYY(6x7)YCSGKC(18x13)ZEIUSEMQHQWMZVPLNZ(2x9)NN(79x7)(73x7)(67x3)(60x10)(9x5)TGBRMOCPG(32x2)FDWNZGDQFMFCQUHYSAOQAOTEIUBCDNIW(2x12)JM(24x15)IRWDGUFXLEKCWDNZRVBNRYSS(1280x14)(193x2)(12x4)(6x10)ZHTRGA(155x7)(34x8)(27x12)(5x10)VXVVJ(4x5)PLYR(2x4)YO(10x2)XXATONMJPD(7x5)(1x15)L(72x8)(21x7)(4x13)QGHA(5x15)BYFQB(18x5)(12x9)GHLYVOFFOHII(15x4)XQRPRDSSBORQHKA(3x11)LVM(8x8)IYHEOOSI(575x5)(289x5)(15x3)WUJJUHESVBKMKWI(144x1)(27x8)(21x2)ZWKIBQKYDICTDWZJSMFMB(85x4)(2x11)YJ(9x9)NEIHAQFQS(3x13)FMR(18x7)HTTQTCRJQAOGPSGCEP(24x3)FGXUVDQTTFSBUWGYWIWIVLNH(13x12)(1x3)A(1x13)H(14x9)(9x5)(4x3)SJAA(74x13)(18x6)FKPLHFUKSNVZXJTTYB(21x3)(15x8)LDLRHRRFVCEAEZW(17x8)BUQDCTSPWOMNYXSXQ(10x5)GYOKDVURIQ(10x1)ZSXQJVASBA(244x5)(237x3)(56x1)(2x3)IH(8x5)JPNMZEJU(15x10)SOIGFVVDBCHWLUX(8x11)IMNGAHMV(36x11)(6x6)AVOERJ(1x15)I(11x15)TGRCPFFXZWN(80x2)(2x11)UD(3x4)AJO(19x12)FQOHLQVIFPAEBOCLBOD(7x13)ZLCBKLN(18x12)BOEPSWVDLNKVUFDHKV(39x15)(10x4)AYYJAXAJXB(10x10)EWKJCLSLBE(1x6)C(6x12)EMSRFU(2x8)PX(483x14)(186x8)(178x12)(6x9)VJVAVY(65x1)(1x5)F(2x6)GE(4x13)BUJP(9x14)IMEJXLWER(20x12)HUUEGUTSDWPZHFZKXVFV(59x8)(5x13)VYEFV(25x6)DWBRYFPBHUNYZJUMZXCKFIHIE(1x11)F(5x8)DLUUQ(1x2)K(19x6)PPXCSNESTBPIWHDFLGG(4x10)NHOY(273x3)(18x9)SEWPNVRXHLBCKGESND(31x1)(1x6)J(19x5)SIQBBERDYWEKHMAJEWB(58x1)(43x13)(15x13)BKGAXDZLFQHWDIS(7x7)JWIGQYE(4x9)DHHW(3x6)OHR(140x13)(28x15)(10x12)JOMQKBRMDS(5x13)PUVLJ(44x7)(4x13)DKZR(16x15)NQDHKHTUOJOXBWWY(5x13)BAOCL(34x10)(28x1)JCJWLCJRLTIFXVJQBKHWOTLJFIVI(9x4)YFQNAGIPW(2478x7)(1083x5)(417x15)(117x10)(92x11)(31x1)XHEFNUFJDMXCTUQFXSZMYHFEHXUVGYQ(7x2)ZITTPBY(9x14)SSCNHQYKS(22x5)UVJATRGWLHAIVMQAGJMHEK(4x4)IUEZ(4x5)YKGS(96x14)(12x1)ZELBJAPFUHLZ(72x4)(2x14)NP(6x8)SMHEEP(14x11)HKYNMOLKTUVIXZ(15x1)NSAGJXXSAYRTIUK(5x15)NPRBV(182x9)(76x12)(4x9)LLZF(35x11)DLKHAYYAZXRSZKTEHJNIZQERZANTBHDVFQM(13x6)XPSSVVUTYEUKX(1x2)X(33x14)(2x11)IG(11x8)FPEMVSXFOHQ(3x6)BRW(46x11)(1x3)Q(3x10)ZHT(3x7)VNL(1x7)R(10x12)GZWTUNGVDQ(1x1)Y(120x10)(14x9)PBYCGWOFRQUZWJ(83x6)(17x12)(3x4)EAM(4x6)CJOU(53x6)(13x5)INHCJBTGHXSDE(19x8)CWOKMSSFKYMDMSLRSPA(4x6)XDUP(6x4)LYNJVO(2x7)AD(509x1)(188x4)(74x10)(41x9)FUNFGSCSMVNLSJIJIBJZMBXKRACPLVGYEVJVRXTLF(1x7)O(15x5)ZIFCLBIMIFPOFVA(8x5)(2x10)SA(3x15)SYB(29x12)(2x4)LR(15x13)SUPSUGVKOEIHPAZ(43x9)(18x6)IONNEOWXXVFDIQOMQM(1x14)N(7x7)VICZLXN(253x1)(26x11)(2x15)OF(4x4)EINM(4x7)VPFW(90x2)(2x12)OS(18x15)IHDJBISYOELRBFBMRT(16x5)ZWDVZWPFHTFZRHGM(6x15)RMASVP(17x8)HHEQZPDKXKRYHABWF(64x9)(24x4)XXMFXKEZKTMCOQDOYEXVQWGY(12x14)IXJHAYHVQVBG(9x11)OEOVLDHWO(47x10)(14x6)OQYNLIFVBHCLDV(21x7)GNVWPMWHRPNVRYWBOKXXH(2x1)GE(25x9)(3x3)YHT(10x10)WGUTPDXLCO(10x4)PTGWGFREXV(2x8)CP(569x3)(119x13)(56x1)(50x5)(1x5)T(25x8)QVDBRPILAVKKPNKCWACDVQKAM(8x1)UDZHAVIS(44x10)(32x5)(8x9)WVPZVSEF(12x10)EBBNJTJBZPSH(1x5)I(1x2)M(1x10)K(27x1)(2x4)IV(14x1)(9x8)(4x4)JVUB(112x15)(99x2)(49x3)(1x14)C(1x5)D(2x14)WK(5x15)XXYUI(11x9)KLPOYCKHWFV(14x6)GVHBCOJYAOCJAH(10x3)BATKUDEPLN(3x2)SPJ(2x1)TA(275x3)(41x4)(18x5)(2x12)PT(4x15)MAUM(11x6)(5x15)RFIRF(220x15)(29x11)XWFPDWBZOCIASNAPTYSYUUVQCLCYG(5x7)LJJUN(34x4)(1x1)I(4x3)DPAN(12x12)LFHZRFTTUZLE(46x13)(6x5)FMHJMK(2x7)PZ(9x13)SATIDLMYD(7x10)RXCEUNC(75x9)(5x15)WCKRG(15x3)MYYAJYGJIBOWXOX(29x1)AABPHEDEUZZCJICBHSJZFVGLJCQMX(3x1)UNW(803x15)(441x13)(65x6)(59x2)(8x4)VCYBDQQS(15x9)MHGZPTDZETHSKLL(7x2)NMOFOIS(7x14)KUAWWUP(15x8)GNNUKIVQVUVZULA(161x1)(87x6)(4x4)BHUM(1x14)W(40x2)HZRMQLYLMDMWKBSXEAOHCJVANHFGTEAPXAALYUNE(18x14)MIGSNNUDEKHXIVPAOP(62x6)(1x13)B(12x8)SJKLEEFTVPLM(4x3)WONT(5x9)TAESF(12x5)AQTLVIYDFKZV(53x9)SWGZYFRQBSYVZRKBUETKECZABCQOBKWTLUXIIRCYXIYYCIZPWXYLJ(114x13)(65x12)(33x12)FYYFQQIQMKTPWLRATCIXJWQWZHDZEMDSX(19x9)RDXSFWGCVHIAEFRATQB(8x4)SMHSAZUP(22x14)(1x4)O(2x9)TL(3x10)JWD(325x11)(107x6)(80x10)(1x9)I(7x14)VRZNXOX(17x5)SXTYFBITZSWXLUUFJ(11x3)LOCMMDXNMXN(15x6)ESLRVLYBOQKPEZA(2x3)ES(7x11)EDZPYNR(69x15)(8x15)HATTKOTD(1x15)C(1x14)O(35x1)(2x1)CW(21x13)MQITCFLIILUSRLVQGSKXW(121x6)(12x15)(6x13)HZQFNF(9x9)UIDOFTGVI(57x8)(15x14)DJHSOBMGQLFKFTQ(11x6)QWKTRHFEAGK(2x4)IH(6x5)ZHDHJX(10x15)ACPQGUGWIL(3x2)QMK(2x3)OT(15x6)NZGYKDPCNTWTZCH(3552x13)(852x7)(284x12)(277x1)(8x11)TGYIXQNL(40x13)(17x9)LWDCCCCWVOGYOWYZP(3x8)ZVN(3x10)SDQ(3x3)DWU(123x2)(10x14)NSZEKFDZRL(26x2)ENELBBZQLDXFNGFSVGYFTSJPBP(19x5)STCNNNFTTGNFSHLQIMV(7x14)BMGHAMA(30x9)LWDBIXXPHDSHEHLGUWINWVVCSQLNYK(72x1)(5x3)SMBBE(1x15)U(4x3)XLJH(12x6)LYEVOLDUQOII(22x3)UYBOYDZYRBWIHVBZJZJIBD(10x15)ORGFBMUTUK(535x12)(100x8)(6x15)PJFDCS(29x7)(4x2)RERM(4x1)BFHS(6x7)GNJACX(13x6)THUMFYQLTLTCJ(28x8)RTDQHJQHMBOOPZUEWWKMSANXGGQL(56x7)(50x4)(4x2)EUXN(3x12)LWU(2x13)YV(12x8)PXZISAYRVHIE(1x4)L(77x13)(70x12)(24x14)XLKAJZMEOBGJQOZFGDAARDDF(4x13)HMEZ(22x13)TRAZZTZVHZFJQBCVPUERWP(116x7)(8x13)FQQDJSSI(21x4)(3x3)GUX(1x12)J(1x7)F(26x14)(12x6)JVDQPKZGKVQJ(2x13)DV(36x7)(10x4)HVKCDIWLKC(8x5)LGTFQODZ(1x12)L(152x5)(4x6)CURR(80x1)(17x15)GUVFWMLWUJEGNLRVL(6x7)NJXRSS(7x14)AKRRJPI(8x5)DQVRMWFL(12x15)UMLQPEZXZYIZ(10x10)FTKQEWMORC(25x8)(4x1)NPOF(2x4)ZB(4x5)MNGN(4x1)SVFL(819x3)(422x1)(161x5)(63x11)(10x9)LMWKXPVXUD(12x11)NVMYGSXJQBVT(2x12)XS(14x1)LCJFACSGQHOPUG(44x6)(31x9)IYNFDKSDSHMXTGMRIOPAQJRHQBFEKDH(2x4)SX(14x3)HIZENUSZORNUXE(7x2)(1x12)C(3x10)LQD(246x14)(79x13)(32x14)FBUFQJMOZAUHZPGKGNZOTHLBIYETINMF(13x1)GKCLXCMWWPDZV(15x7)MNXJKTCLCEEKJCJ(39x4)(14x14)QYBWZMQBFIWBYQ(12x6)VHQHHLDLMOBZ(93x2)(40x1)TYXOJHUCXHXFBLOHLFUUDAHEWHQJFIUZMAGFRGWP(2x7)MS(9x13)VVJYBKHTL(19x4)IEBQYXDIHQGRMTODBIF(5x6)GWEDR(1x3)M(345x13)(185x7)(8x14)ZXFOFWFV(9x8)EZMSOIYCO(61x13)(33x11)OFPSLJWRGPSLTALOWBSVBFAAYMKCPMYTY(9x6)IUDMWEHGP(1x10)H(6x9)QPVXCO(71x11)(1x11)Y(5x14)PSMCR(7x2)ZAZQZSB(24x14)DCIFQYMEDXSNYMDBSIPOWQUL(5x5)OWYAX(4x5)ISZB(7x3)HWLAEOE(125x9)(45x13)(21x11)YRXZKZQVBPNYBKZIFSYMH(2x13)EL(3x14)HXM(6x15)YQWWDS(5x10)VWCRE(44x7)(8x6)ONMUMKWM(24x15)OBREAALATPCTXPSADMXUXKDK(31x8)(25x8)(18x15)(1x6)K(6x15)WFSHOE(1064x8)(180x12)(91x7)(2x9)UQ(77x10)(14x9)KQHDSHPDIDEWFX(7x13)DBZDGLP(17x1)PEQPQFLLLGAZMPJLK(5x8)DTSJE(5x10)JGHKO(16x10)(2x7)LP(3x11)PDI(40x10)(1x7)Y(27x13)IXDUDNKRJKLBBKIVORLOGMGJWCQ(8x6)(3x2)RTB(323x5)(79x9)(44x13)(19x1)VGWKUHADQZUENXNLNGP(12x10)HCFBPZQRWQEQ(3x10)PLL(12x13)(7x2)GVCTUOT(118x1)(57x15)(13x12)XQESMYXNDFYYW(1x8)G(3x6)XFU(17x8)BHBGTSSJBGGFRPPRT(48x7)(10x1)BLQHPNBCVO(8x13)QAYCKEPP(11x14)FBTYJKKUQCA(4x4)JNWW(97x11)(33x3)WYMAFQHRKESJTBRMNMOARAUYBABCIIZHH(11x8)DTIJCCBXCHK(4x2)ZLMO(25x11)(1x3)L(2x6)EN(7x1)FBJYMYH(11x4)GRWQQFIQDAL(89x9)(83x7)(23x14)QSLZVMSWOGEMUVQUMMBBXZS(33x5)(7x11)ZCEHLWD(14x2)BSRRFIINKZJUTM(9x3)XBPUGZIBI(426x11)(144x11)(10x2)ZVQMPUEXDS(7x14)(2x3)NP(8x8)(2x10)WY(31x4)(8x14)MQXSEJDJ(2x7)FW(4x13)XEQJ(59x3)(17x11)MTJKGUKCQPWDUSFMV(3x6)VDL(8x6)OHZZPPZE(8x12)JMJZCIBE(267x9)(6x7)QQULTD(109x3)(32x9)KHIFGECKKBYSJQUPZYCSWRGOISZBQZMP(5x11)WWVRO(53x13)RNKMDBXJEJEYGREGYLVFXJAGXKPLZGSBEGCLRHUBWMMIMMSEJLKVS(20x10)(1x12)Q(1x4)J(1x10)T(44x7)(3x1)HQS(2x14)OY(4x3)NYOT(3x11)HRB(5x3)AWNPF(57x4)(51x4)NRDWDRLNIEMNTPTKPXWYVRZVJXCEPIWDOZHHSPWTINYYPNKRIJM(788x7)(373x2)(13x13)OMNINNXSMZGVU(110x10)(9x4)MUCJLTXXY(23x8)(16x10)QPEZTMHGTAZMDZFT(4x12)QARM(50x15)(3x11)XOH(16x6)YBLZLQWJABJGQWOU(4x1)PMXY(4x15)OHDQ(118x4)(5x11)EPKSP(24x4)AWIBAENYEFRILVCXFWNDTDKD(1x4)B(65x2)(12x2)YLEUJZAKLKME(24x13)TTXHIHEKQRZMJJYYKWQLCBJP(10x2)FCVCPOTJEU(102x12)(76x14)(7x12)UZQCZAB(3x1)XMW(9x1)UJSGSEURM(11x13)BOKCOFUHRNM(17x1)AEMFGQNASPGQHPXUB(1x13)P(6x11)CVFTDM(166x1)(74x3)(3x12)ONA(36x9)(29x12)AGQWRIAFZDTLKFAWUBZVULOQIYWPP(17x9)AKFFQIWNYGWXFBZZN(71x7)(31x2)XOIACTRUJMFXAVRZUMXKBXZFREZNVJJ(27x15)(20x12)EWQHGQNTXRUIOVHORPOV(3x12)TVU(117x1)(109x14)(10x12)BEIZCDNSAS(86x7)(27x9)FURZRGYPYLGCCCEKYZJPGYYDBQQ(5x2)SBYXR(25x4)ZXXGJHSMUOPRERLXZXQJLECBO(6x15)JUOYIW(91x3)(23x14)MGGWDYYRPCJTIYELCDIZVHS(2x12)KD(6x3)BCDBJV(19x3)(13x4)RXIRDQSOWIPGW(11x1)QGAYMDNYTSL(8x11)FJQAMNNG(1063x13)(250x5)(60x10)(24x11)(8x12)BJYJZMJY(5x8)BJXMU(7x14)NZTAXLS(4x8)VBAT(2x3)HO(176x5)(169x4)(13x15)TWSLJCGYWHLHA(73x6)(36x12)AOUGLFXLSSEWZXFMZUNGDGZVCYYJZUPNKRIH(3x3)UFP(3x1)QIQ(8x15)NPNWNAWS(50x15)(3x6)YIW(1x10)D(10x14)FCLZEIFJWG(1x12)N(6x8)AZDFPX(7x13)DICRGNA(799x2)(533x11)(276x6)(100x9)(17x5)LPMZDSXVBZCMEDFQB(24x8)TCDTFHHXXVEQIVVZCESDANQS(10x15)EPDXGVSSBQ(7x13)WQSTXRF(10x11)RIBWTNVIOX(3x15)VSF(61x6)(8x15)TWCPLZZZ(8x9)AVRPJLHR(21x9)QDODHNZHZERQGXTVKLHYW(1x13)U(53x11)(2x15)RC(32x12)CWBFTTDPKPGPZVZFIJHVLZRCOPJRNFOJ(1x1)I(26x11)CDUFFOGUBYLOBYJNLCWGPDRSMS(201x12)(8x5)(3x1)YIC(8x10)BDXPEMTD(64x4)(10x1)RBHVYIUNFH(5x14)KYIHZ(14x2)TGSOMUZWRGPUNE(11x3)QJHVUCUELOW(8x14)VKMCUJKE(83x11)(1x11)L(5x12)WLWRL(4x12)NQVE(36x3)FJDUVTWHNITJXXVVUMFUDALUXKSIPQFJOEDT(8x1)GDWDODFR(35x2)(22x13)(4x14)OSLD(7x4)VWJVMIF(1x6)H(10x6)VDQYBSDXHG(149x10)(16x14)DROZRQNSVIJWCMPZ(67x6)(54x6)NDDMSLQZBUOSOSAFMDFQGMQBMSGREAKGVTMWIRQPTESMEACCZIOGQH(1x15)J(8x10)CFHPKNID(24x1)(18x2)EMDBIEKPGRSNYXDATP(4x4)HSHR(79x9)(51x1)(2x12)BB(6x15)LNUMRD(25x8)(10x6)FBWLKYGCNJ(3x13)XRN(16x7)(3x9)ONH(2x10)HS(47x1)(2x2)MS(34x9)VLUZLSWIOQZSOBREZDZXEQYKYWTNHHWRNZ(9x6)(4x4)WMMX(78x9)(17x7)(1x10)J(4x14)WZCZ(49x9)(3x5)IPZ(35x7)ROJEZWTCDQCBOWTBEEJCVWBPNMBNXJDJZMG(183x15)(3x6)KRR(54x13)(3x11)JXV(4x7)WRTT(1x6)Q(16x15)LLQNPHNXKWRMAGKX(2x1)ID(21x15)UGXWFMKPKPUMLJCQDBWGS(4x1)NZTP(71x2)(21x7)PKYTHOAENWACXNCPHTTTU(14x12)ZFQGENBKFBMONH(1x7)G(10x10)VSHYAMJWEV(33x7)(4x6)LAZL(12x9)KIDULBTPZHYR(1x4)U(143x8)(29x3)(22x13)LQNQIWKSHNSMJZKWJQWDQA(79x10)(1x8)V(35x12)BTLWYXERIMYWZOFPFAVAAZOFQAHKQXAPOWO(24x13)RLAORQSPJCCOLZLXDAAOXYHY(16x1)MZLJXILHCLGHOAPW(12x3)(7x1)ELWCOIZ \ No newline at end of file diff --git a/data/2016_15_data.txt b/data/2016_15_data.txt new file mode 100644 index 0000000..c5d5019 --- /dev/null +++ b/data/2016_15_data.txt @@ -0,0 +1,6 @@ +Disc #1 has 17 positions; at time=0, it is at position 1. +Disc #2 has 7 positions; at time=0, it is at position 0. +Disc #3 has 19 positions; at time=0, it is at position 2. +Disc #4 has 5 positions; at time=0, it is at position 0. +Disc #5 has 3 positions; at time=0, it is at position 0. +Disc #6 has 13 positions; at time=0, it is at position 5. diff --git a/data/2018_03_data.txt b/data/2018_03_data.txt new file mode 100644 index 0000000..0e535de --- /dev/null +++ b/data/2018_03_data.txt @@ -0,0 +1,1407 @@ +#1 @ 520,746: 4x20 +#2 @ 274,680: 19x26 +#3 @ 928,402: 16x24 +#4 @ 338,969: 27x15 +#5 @ 48,306: 21x16 +#6 @ 418,87: 13x20 +#7 @ 271,316: 16x20 +#8 @ 697,513: 20x25 +#9 @ 120,479: 28x13 +#10 @ 974,8: 17x12 +#11 @ 615,355: 11x29 +#12 @ 687,970: 20x29 +#13 @ 176,605: 24x11 +#14 @ 512,252: 11x11 +#15 @ 839,821: 20x10 +#16 @ 242,267: 29x14 +#17 @ 702,795: 11x14 +#18 @ 695,516: 14x18 +#19 @ 108,169: 28x12 +#20 @ 13,973: 27x18 +#21 @ 1,580: 14x28 +#22 @ 319,694: 19x27 +#23 @ 149,828: 11x23 +#24 @ 619,935: 11x26 +#25 @ 727,746: 6x3 +#26 @ 808,336: 21x17 +#27 @ 71,335: 10x17 +#28 @ 335,307: 16x19 +#29 @ 524,551: 18x17 +#30 @ 486,831: 16x28 +#31 @ 193,548: 22x29 +#32 @ 29,815: 20x18 +#33 @ 719,847: 26x24 +#34 @ 721,350: 19x18 +#35 @ 870,260: 10x20 +#36 @ 246,702: 29x27 +#37 @ 342,892: 16x22 +#38 @ 919,512: 25x13 +#39 @ 646,154: 23x13 +#40 @ 573,181: 21x25 +#41 @ 175,929: 29x17 +#42 @ 694,104: 10x13 +#43 @ 778,869: 27x21 +#44 @ 296,748: 23x29 +#45 @ 139,481: 29x18 +#46 @ 228,790: 29x23 +#47 @ 497,517: 12x24 +#48 @ 753,926: 12x11 +#49 @ 234,780: 17x28 +#50 @ 932,553: 12x17 +#51 @ 584,9: 12x20 +#52 @ 57,516: 29x28 +#53 @ 788,669: 29x18 +#54 @ 188,303: 25x20 +#55 @ 281,262: 20x28 +#56 @ 98,714: 28x11 +#57 @ 900,534: 12x22 +#58 @ 660,720: 27x10 +#59 @ 754,940: 25x27 +#60 @ 867,499: 23x24 +#61 @ 0,941: 16x10 +#62 @ 855,807: 10x23 +#63 @ 122,283: 22x19 +#64 @ 940,539: 15x22 +#65 @ 223,971: 22x26 +#66 @ 784,516: 21x26 +#67 @ 395,354: 13x28 +#68 @ 566,199: 25x18 +#69 @ 78,648: 3x15 +#70 @ 11,971: 18x11 +#71 @ 442,407: 5x17 +#72 @ 224,61: 24x14 +#73 @ 71,380: 26x28 +#74 @ 528,411: 26x14 +#75 @ 653,973: 19x25 +#76 @ 76,329: 12x18 +#77 @ 59,295: 11x22 +#78 @ 597,430: 18x25 +#79 @ 512,533: 28x23 +#80 @ 523,946: 20x17 +#81 @ 485,575: 10x26 +#82 @ 455,563: 16x29 +#83 @ 450,846: 13x17 +#84 @ 305,601: 19x22 +#85 @ 579,715: 7x16 +#86 @ 553,26: 25x21 +#87 @ 593,174: 21x16 +#88 @ 551,427: 12x16 +#89 @ 581,266: 22x13 +#90 @ 362,647: 12x18 +#91 @ 209,850: 12x15 +#92 @ 483,327: 12x12 +#93 @ 570,825: 10x15 +#94 @ 598,903: 14x28 +#95 @ 248,136: 11x16 +#96 @ 94,631: 13x23 +#97 @ 230,226: 16x23 +#98 @ 737,891: 13x18 +#99 @ 720,613: 26x15 +#100 @ 62,620: 23x14 +#101 @ 81,716: 24x24 +#102 @ 646,657: 10x15 +#103 @ 661,247: 22x28 +#104 @ 534,265: 19x22 +#105 @ 527,277: 14x11 +#106 @ 201,166: 17x20 +#107 @ 492,220: 27x25 +#108 @ 682,798: 22x21 +#109 @ 420,367: 11x11 +#110 @ 945,223: 13x25 +#111 @ 358,886: 29x16 +#112 @ 117,417: 12x24 +#113 @ 138,88: 26x18 +#114 @ 586,144: 12x28 +#115 @ 451,87: 18x10 +#116 @ 44,656: 14x23 +#117 @ 914,694: 26x23 +#118 @ 330,329: 13x28 +#119 @ 375,739: 22x18 +#120 @ 960,829: 10x19 +#121 @ 1,610: 14x19 +#122 @ 827,527: 12x16 +#123 @ 867,668: 27x28 +#124 @ 838,70: 4x8 +#125 @ 329,576: 15x17 +#126 @ 160,874: 26x19 +#127 @ 722,563: 22x29 +#128 @ 545,419: 18x27 +#129 @ 339,506: 10x17 +#130 @ 96,931: 21x10 +#131 @ 777,497: 27x23 +#132 @ 841,346: 24x23 +#133 @ 309,625: 10x24 +#134 @ 543,429: 21x15 +#135 @ 404,388: 28x26 +#136 @ 872,173: 10x24 +#137 @ 170,894: 26x12 +#138 @ 73,643: 10x14 +#139 @ 186,651: 28x15 +#140 @ 61,344: 22x19 +#141 @ 744,966: 22x27 +#142 @ 387,78: 10x15 +#143 @ 205,923: 14x24 +#144 @ 83,859: 17x19 +#145 @ 608,492: 18x19 +#146 @ 499,754: 23x29 +#147 @ 520,311: 23x22 +#148 @ 915,489: 27x23 +#149 @ 566,608: 23x15 +#150 @ 242,946: 25x20 +#151 @ 952,425: 28x10 +#152 @ 676,57: 11x29 +#153 @ 744,719: 22x11 +#154 @ 84,860: 22x15 +#155 @ 581,77: 29x22 +#156 @ 175,769: 25x10 +#157 @ 204,635: 24x24 +#158 @ 959,204: 16x10 +#159 @ 19,846: 24x20 +#160 @ 479,583: 15x27 +#161 @ 769,377: 16x24 +#162 @ 954,670: 16x27 +#163 @ 857,392: 12x3 +#164 @ 627,391: 24x14 +#165 @ 506,871: 11x16 +#166 @ 169,876: 12x13 +#167 @ 842,717: 12x13 +#168 @ 964,191: 23x14 +#169 @ 201,910: 18x29 +#170 @ 332,712: 10x14 +#171 @ 533,262: 27x23 +#172 @ 413,884: 10x29 +#173 @ 707,356: 25x29 +#174 @ 617,351: 10x27 +#175 @ 914,173: 12x25 +#176 @ 60,314: 19x10 +#177 @ 534,872: 21x19 +#178 @ 527,423: 19x19 +#179 @ 232,245: 13x23 +#180 @ 983,953: 13x20 +#181 @ 781,377: 17x26 +#182 @ 387,935: 19x22 +#183 @ 173,335: 20x10 +#184 @ 690,365: 13x23 +#185 @ 514,384: 7x7 +#186 @ 115,382: 28x28 +#187 @ 435,889: 28x25 +#188 @ 345,489: 24x13 +#189 @ 200,777: 25x29 +#190 @ 126,342: 18x21 +#191 @ 653,333: 13x12 +#192 @ 578,953: 16x16 +#193 @ 529,763: 16x22 +#194 @ 244,393: 11x11 +#195 @ 963,678: 13x12 +#196 @ 916,592: 20x10 +#197 @ 480,702: 23x17 +#198 @ 851,952: 19x16 +#199 @ 163,762: 25x15 +#200 @ 823,209: 22x22 +#201 @ 600,634: 27x20 +#202 @ 231,241: 10x24 +#203 @ 835,195: 14x18 +#204 @ 707,670: 11x19 +#205 @ 325,85: 15x21 +#206 @ 3,930: 25x26 +#207 @ 394,623: 28x16 +#208 @ 402,471: 13x7 +#209 @ 551,979: 27x14 +#210 @ 670,233: 11x16 +#211 @ 916,158: 11x26 +#212 @ 668,615: 13x13 +#213 @ 729,952: 17x16 +#214 @ 553,103: 17x11 +#215 @ 518,422: 26x15 +#216 @ 494,236: 24x25 +#217 @ 461,53: 20x27 +#218 @ 574,242: 5x5 +#219 @ 13,458: 10x16 +#220 @ 157,649: 27x13 +#221 @ 288,440: 15x19 +#222 @ 167,374: 24x20 +#223 @ 120,158: 12x28 +#224 @ 807,188: 25x14 +#225 @ 725,955: 10x23 +#226 @ 319,321: 17x29 +#227 @ 867,64: 26x15 +#228 @ 198,899: 11x10 +#229 @ 411,610: 14x17 +#230 @ 29,222: 19x15 +#231 @ 73,12: 14x28 +#232 @ 986,813: 10x24 +#233 @ 80,634: 27x24 +#234 @ 709,45: 21x28 +#235 @ 673,354: 29x12 +#236 @ 247,299: 12x20 +#237 @ 713,913: 23x18 +#238 @ 587,28: 24x25 +#239 @ 548,845: 13x28 +#240 @ 386,2: 27x13 +#241 @ 421,173: 10x17 +#242 @ 336,645: 14x14 +#243 @ 723,786: 27x28 +#244 @ 536,401: 23x27 +#245 @ 801,55: 22x25 +#246 @ 38,917: 15x15 +#247 @ 81,738: 15x20 +#248 @ 594,343: 29x16 +#249 @ 348,961: 21x21 +#250 @ 512,782: 14x21 +#251 @ 915,463: 12x22 +#252 @ 41,259: 15x16 +#253 @ 290,550: 12x28 +#254 @ 130,186: 26x27 +#255 @ 437,179: 23x24 +#256 @ 127,190: 12x29 +#257 @ 267,659: 15x11 +#258 @ 922,494: 12x20 +#259 @ 459,871: 15x21 +#260 @ 286,911: 11x20 +#261 @ 172,497: 10x14 +#262 @ 26,145: 19x17 +#263 @ 115,788: 12x13 +#264 @ 696,390: 10x25 +#265 @ 927,445: 26x17 +#266 @ 686,301: 20x15 +#267 @ 453,248: 22x18 +#268 @ 675,953: 22x28 +#269 @ 34,463: 27x18 +#270 @ 763,500: 16x16 +#271 @ 393,691: 19x26 +#272 @ 157,212: 20x22 +#273 @ 576,701: 20x16 +#274 @ 11,795: 29x29 +#275 @ 977,425: 11x27 +#276 @ 93,949: 10x11 +#277 @ 621,379: 21x11 +#278 @ 238,308: 25x20 +#279 @ 329,914: 10x14 +#280 @ 423,467: 14x23 +#281 @ 896,166: 20x17 +#282 @ 175,32: 20x28 +#283 @ 88,852: 19x18 +#284 @ 441,814: 26x13 +#285 @ 476,815: 20x24 +#286 @ 797,49: 22x18 +#287 @ 193,460: 20x18 +#288 @ 541,352: 19x10 +#289 @ 966,373: 11x14 +#290 @ 10,60: 17x22 +#291 @ 855,443: 20x22 +#292 @ 58,494: 11x23 +#293 @ 965,357: 20x23 +#294 @ 453,686: 15x15 +#295 @ 389,740: 10x27 +#296 @ 928,371: 29x20 +#297 @ 635,752: 27x25 +#298 @ 941,508: 29x22 +#299 @ 639,104: 26x23 +#300 @ 626,701: 29x19 +#301 @ 504,535: 24x26 +#302 @ 83,843: 15x27 +#303 @ 867,972: 28x12 +#304 @ 617,372: 29x15 +#305 @ 198,29: 22x22 +#306 @ 71,811: 13x22 +#307 @ 613,277: 19x16 +#308 @ 521,875: 17x26 +#309 @ 249,439: 10x15 +#310 @ 177,750: 21x23 +#311 @ 899,412: 15x14 +#312 @ 587,410: 28x29 +#313 @ 609,22: 26x15 +#314 @ 180,744: 23x14 +#315 @ 869,432: 18x19 +#316 @ 497,460: 26x29 +#317 @ 384,575: 12x14 +#318 @ 730,796: 13x21 +#319 @ 900,292: 21x28 +#320 @ 553,451: 13x29 +#321 @ 8,456: 13x18 +#322 @ 42,312: 12x14 +#323 @ 231,798: 25x26 +#324 @ 567,55: 29x23 +#325 @ 254,646: 13x21 +#326 @ 652,103: 24x23 +#327 @ 60,719: 11x27 +#328 @ 692,915: 29x22 +#329 @ 75,485: 16x19 +#330 @ 802,114: 27x19 +#331 @ 802,255: 25x22 +#332 @ 976,684: 12x20 +#333 @ 6,934: 18x24 +#334 @ 520,297: 21x22 +#335 @ 311,641: 13x13 +#336 @ 535,759: 23x22 +#337 @ 667,248: 13x18 +#338 @ 768,603: 16x26 +#339 @ 116,759: 27x17 +#340 @ 658,63: 24x16 +#341 @ 920,120: 22x27 +#342 @ 829,201: 25x20 +#343 @ 145,53: 20x12 +#344 @ 954,669: 21x10 +#345 @ 644,238: 24x18 +#346 @ 161,395: 26x16 +#347 @ 569,207: 15x20 +#348 @ 368,786: 12x14 +#349 @ 564,634: 12x21 +#350 @ 374,474: 20x22 +#351 @ 422,879: 28x11 +#352 @ 265,844: 13x29 +#353 @ 827,412: 21x15 +#354 @ 826,105: 14x13 +#355 @ 163,262: 13x12 +#356 @ 506,37: 10x14 +#357 @ 539,905: 16x12 +#358 @ 169,610: 21x17 +#359 @ 764,369: 12x23 +#360 @ 31,975: 11x25 +#361 @ 826,184: 29x13 +#362 @ 881,951: 14x18 +#363 @ 237,775: 12x12 +#364 @ 70,393: 17x11 +#365 @ 585,150: 12x17 +#366 @ 68,921: 26x29 +#367 @ 389,138: 10x23 +#368 @ 351,784: 24x23 +#369 @ 395,968: 27x12 +#370 @ 68,261: 11x19 +#371 @ 702,953: 16x16 +#372 @ 167,253: 17x25 +#373 @ 873,976: 14x18 +#374 @ 715,953: 11x29 +#375 @ 669,363: 24x18 +#376 @ 390,677: 28x18 +#377 @ 839,134: 18x13 +#378 @ 357,923: 26x10 +#379 @ 526,400: 18x17 +#380 @ 230,71: 18x29 +#381 @ 162,420: 19x20 +#382 @ 37,888: 18x20 +#383 @ 965,435: 13x25 +#384 @ 336,284: 14x26 +#385 @ 956,814: 10x26 +#386 @ 577,970: 14x13 +#387 @ 762,141: 22x19 +#388 @ 182,31: 19x19 +#389 @ 307,323: 12x26 +#390 @ 957,612: 24x18 +#391 @ 513,872: 18x27 +#392 @ 916,378: 15x19 +#393 @ 927,343: 27x16 +#394 @ 897,197: 24x12 +#395 @ 224,929: 24x20 +#396 @ 13,664: 12x14 +#397 @ 570,227: 14x26 +#398 @ 99,323: 18x12 +#399 @ 129,508: 20x12 +#400 @ 302,832: 26x10 +#401 @ 274,940: 19x29 +#402 @ 230,803: 11x23 +#403 @ 148,592: 22x14 +#404 @ 11,138: 20x10 +#405 @ 732,923: 11x22 +#406 @ 929,115: 16x27 +#407 @ 189,438: 22x28 +#408 @ 551,165: 26x19 +#409 @ 685,962: 15x13 +#410 @ 310,571: 15x27 +#411 @ 356,643: 16x25 +#412 @ 813,260: 17x16 +#413 @ 909,457: 16x16 +#414 @ 359,801: 12x17 +#415 @ 715,347: 15x21 +#416 @ 252,541: 24x26 +#417 @ 807,416: 23x14 +#418 @ 737,501: 28x13 +#419 @ 175,631: 18x23 +#420 @ 131,921: 27x24 +#421 @ 971,185: 24x16 +#422 @ 354,859: 16x20 +#423 @ 78,549: 29x24 +#424 @ 799,657: 23x21 +#425 @ 181,152: 22x18 +#426 @ 223,297: 22x14 +#427 @ 970,833: 11x16 +#428 @ 794,138: 18x19 +#429 @ 396,367: 25x11 +#430 @ 639,158: 13x27 +#431 @ 558,697: 18x22 +#432 @ 190,868: 18x17 +#433 @ 957,5: 12x29 +#434 @ 397,180: 29x14 +#435 @ 777,665: 15x17 +#436 @ 949,138: 24x10 +#437 @ 554,848: 3x13 +#438 @ 619,629: 24x17 +#439 @ 336,85: 21x14 +#440 @ 141,933: 26x24 +#441 @ 15,940: 4x9 +#442 @ 660,334: 21x16 +#443 @ 516,400: 13x18 +#444 @ 236,785: 14x26 +#445 @ 408,431: 14x23 +#446 @ 340,597: 27x27 +#447 @ 493,318: 29x11 +#448 @ 690,824: 10x19 +#449 @ 105,51: 29x11 +#450 @ 439,777: 27x27 +#451 @ 484,773: 26x28 +#452 @ 529,432: 24x13 +#453 @ 211,460: 20x20 +#454 @ 129,362: 15x28 +#455 @ 940,352: 20x12 +#456 @ 875,596: 14x24 +#457 @ 877,243: 11x17 +#458 @ 2,378: 20x24 +#459 @ 364,598: 24x22 +#460 @ 937,532: 13x22 +#461 @ 936,822: 15x15 +#462 @ 913,355: 15x11 +#463 @ 661,170: 12x14 +#464 @ 725,791: 22x13 +#465 @ 672,143: 22x18 +#466 @ 487,873: 21x21 +#467 @ 286,276: 28x11 +#468 @ 690,972: 11x24 +#469 @ 123,209: 20x16 +#470 @ 671,208: 29x13 +#471 @ 286,191: 22x21 +#472 @ 842,812: 26x10 +#473 @ 245,576: 22x28 +#474 @ 486,258: 27x29 +#475 @ 658,152: 28x26 +#476 @ 0,444: 22x14 +#477 @ 341,236: 28x29 +#478 @ 458,163: 28x28 +#479 @ 495,458: 20x17 +#480 @ 89,824: 25x19 +#481 @ 549,618: 21x21 +#482 @ 322,705: 29x10 +#483 @ 909,522: 19x27 +#484 @ 435,679: 22x13 +#485 @ 492,963: 29x28 +#486 @ 272,263: 15x19 +#487 @ 381,613: 27x20 +#488 @ 909,540: 16x26 +#489 @ 620,429: 24x12 +#490 @ 610,339: 28x10 +#491 @ 861,444: 10x21 +#492 @ 299,441: 20x15 +#493 @ 593,334: 17x12 +#494 @ 428,613: 18x12 +#495 @ 106,486: 12x7 +#496 @ 951,211: 22x27 +#497 @ 641,250: 17x24 +#498 @ 487,574: 12x23 +#499 @ 658,164: 17x10 +#500 @ 917,322: 13x15 +#501 @ 149,764: 20x26 +#502 @ 874,965: 11x27 +#503 @ 228,357: 11x26 +#504 @ 791,120: 22x20 +#505 @ 681,594: 12x13 +#506 @ 934,928: 23x25 +#507 @ 34,426: 12x23 +#508 @ 647,157: 20x16 +#509 @ 950,939: 19x12 +#510 @ 257,278: 17x24 +#511 @ 379,920: 27x16 +#512 @ 142,649: 20x23 +#513 @ 445,276: 16x20 +#514 @ 652,459: 27x14 +#515 @ 886,163: 19x24 +#516 @ 244,374: 17x22 +#517 @ 776,484: 14x23 +#518 @ 414,664: 12x29 +#519 @ 547,248: 22x18 +#520 @ 640,148: 18x13 +#521 @ 769,142: 21x10 +#522 @ 354,205: 26x20 +#523 @ 616,496: 12x26 +#524 @ 876,86: 15x18 +#525 @ 187,53: 15x19 +#526 @ 423,757: 17x21 +#527 @ 749,748: 27x23 +#528 @ 44,735: 18x26 +#529 @ 221,407: 26x25 +#530 @ 287,304: 23x18 +#531 @ 64,95: 16x24 +#532 @ 888,370: 16x25 +#533 @ 97,773: 24x18 +#534 @ 398,468: 22x16 +#535 @ 909,261: 17x17 +#536 @ 212,602: 12x22 +#537 @ 759,413: 28x15 +#538 @ 280,310: 28x23 +#539 @ 548,782: 13x23 +#540 @ 303,547: 29x28 +#541 @ 542,886: 25x15 +#542 @ 656,136: 16x14 +#543 @ 394,345: 13x12 +#544 @ 677,99: 29x16 +#545 @ 581,616: 14x25 +#546 @ 350,517: 25x18 +#547 @ 922,211: 19x13 +#548 @ 219,767: 23x13 +#549 @ 84,970: 19x18 +#550 @ 223,349: 22x16 +#551 @ 400,591: 21x27 +#552 @ 324,898: 24x22 +#553 @ 380,83: 24x10 +#554 @ 676,240: 13x19 +#555 @ 881,905: 26x23 +#556 @ 667,96: 10x14 +#557 @ 709,323: 10x14 +#558 @ 65,561: 20x21 +#559 @ 334,497: 12x28 +#560 @ 39,468: 15x17 +#561 @ 315,675: 10x10 +#562 @ 876,595: 25x18 +#563 @ 59,982: 21x15 +#564 @ 634,821: 12x12 +#565 @ 935,438: 10x24 +#566 @ 144,191: 21x27 +#567 @ 648,612: 24x13 +#568 @ 648,170: 22x28 +#569 @ 484,302: 21x18 +#570 @ 927,137: 11x25 +#571 @ 327,512: 14x23 +#572 @ 125,752: 16x16 +#573 @ 648,147: 24x14 +#574 @ 805,287: 15x18 +#575 @ 450,235: 16x16 +#576 @ 284,257: 22x21 +#577 @ 492,835: 27x16 +#578 @ 213,221: 28x25 +#579 @ 825,417: 17x27 +#580 @ 860,534: 24x23 +#581 @ 486,714: 14x14 +#582 @ 273,907: 19x26 +#583 @ 844,194: 12x15 +#584 @ 736,491: 29x21 +#585 @ 706,929: 25x13 +#586 @ 348,780: 8x17 +#587 @ 388,491: 12x12 +#588 @ 559,270: 15x14 +#589 @ 580,7: 26x22 +#590 @ 764,501: 16x21 +#591 @ 852,663: 17x16 +#592 @ 172,554: 14x25 +#593 @ 652,707: 10x11 +#594 @ 740,897: 27x11 +#595 @ 212,772: 28x15 +#596 @ 546,625: 13x20 +#597 @ 313,683: 23x20 +#598 @ 101,432: 18x14 +#599 @ 256,773: 29x27 +#600 @ 347,761: 15x14 +#601 @ 483,567: 28x17 +#602 @ 538,581: 21x14 +#603 @ 749,48: 19x22 +#604 @ 88,309: 16x20 +#605 @ 781,292: 24x23 +#606 @ 630,345: 28x21 +#607 @ 848,948: 25x15 +#608 @ 35,921: 20x17 +#609 @ 190,343: 12x21 +#610 @ 798,539: 11x19 +#611 @ 747,422: 29x27 +#612 @ 355,956: 20x10 +#613 @ 468,167: 20x28 +#614 @ 663,264: 18x20 +#615 @ 257,785: 18x22 +#616 @ 163,503: 22x29 +#617 @ 390,500: 21x19 +#618 @ 60,254: 21x17 +#619 @ 352,400: 21x25 +#620 @ 83,921: 15x26 +#621 @ 135,275: 18x23 +#622 @ 131,331: 17x27 +#623 @ 16,191: 26x21 +#624 @ 949,871: 11x20 +#625 @ 445,182: 26x12 +#626 @ 5,451: 19x17 +#627 @ 760,64: 19x18 +#628 @ 443,3: 11x14 +#629 @ 610,355: 28x14 +#630 @ 38,686: 11x29 +#631 @ 948,338: 12x12 +#632 @ 321,505: 19x21 +#633 @ 854,390: 21x16 +#634 @ 202,43: 25x15 +#635 @ 63,303: 26x22 +#636 @ 520,866: 15x15 +#637 @ 68,8: 20x28 +#638 @ 821,784: 15x21 +#639 @ 305,656: 14x29 +#640 @ 170,403: 29x25 +#641 @ 383,739: 4x9 +#642 @ 692,327: 28x23 +#643 @ 676,258: 15x25 +#644 @ 457,175: 27x11 +#645 @ 706,898: 25x21 +#646 @ 950,456: 22x24 +#647 @ 364,207: 12x15 +#648 @ 238,39: 26x28 +#649 @ 117,772: 18x15 +#650 @ 746,413: 27x20 +#651 @ 182,28: 17x15 +#652 @ 182,160: 15x10 +#653 @ 592,148: 27x20 +#654 @ 206,601: 16x24 +#655 @ 556,134: 12x16 +#656 @ 528,307: 21x24 +#657 @ 262,190: 29x14 +#658 @ 945,218: 26x16 +#659 @ 57,339: 27x11 +#660 @ 242,586: 14x11 +#661 @ 174,900: 28x17 +#662 @ 973,695: 14x21 +#663 @ 430,402: 21x27 +#664 @ 882,627: 14x12 +#665 @ 374,714: 28x26 +#666 @ 211,871: 10x19 +#667 @ 259,941: 10x22 +#668 @ 84,648: 7x5 +#669 @ 60,869: 29x13 +#670 @ 443,819: 28x20 +#671 @ 103,513: 15x24 +#672 @ 57,795: 16x17 +#673 @ 55,893: 28x13 +#674 @ 400,466: 28x23 +#675 @ 359,314: 25x13 +#676 @ 388,518: 16x27 +#677 @ 964,662: 14x16 +#678 @ 421,55: 23x23 +#679 @ 355,774: 16x13 +#680 @ 72,351: 27x28 +#681 @ 78,168: 10x12 +#682 @ 514,422: 18x23 +#683 @ 93,267: 10x11 +#684 @ 160,352: 19x17 +#685 @ 968,442: 3x14 +#686 @ 313,587: 10x18 +#687 @ 737,340: 13x27 +#688 @ 944,828: 29x23 +#689 @ 26,707: 19x25 +#690 @ 774,375: 22x26 +#691 @ 428,817: 21x16 +#692 @ 522,755: 26x27 +#693 @ 419,382: 14x19 +#694 @ 507,445: 20x14 +#695 @ 490,324: 20x20 +#696 @ 83,643: 27x25 +#697 @ 231,90: 29x22 +#698 @ 802,675: 10x14 +#699 @ 192,552: 15x12 +#700 @ 310,346: 16x18 +#701 @ 902,444: 26x21 +#702 @ 760,712: 12x26 +#703 @ 772,68: 15x16 +#704 @ 341,343: 26x12 +#705 @ 635,795: 12x26 +#706 @ 754,426: 19x24 +#707 @ 675,762: 10x26 +#708 @ 392,335: 22x18 +#709 @ 694,197: 28x29 +#710 @ 433,628: 18x15 +#711 @ 51,258: 20x17 +#712 @ 640,458: 24x14 +#713 @ 221,982: 10x16 +#714 @ 409,863: 21x20 +#715 @ 186,749: 24x21 +#716 @ 869,759: 23x14 +#717 @ 950,24: 27x25 +#718 @ 30,516: 12x13 +#719 @ 729,536: 26x28 +#720 @ 927,404: 14x29 +#721 @ 763,303: 27x20 +#722 @ 283,563: 27x14 +#723 @ 720,542: 13x21 +#724 @ 100,939: 23x25 +#725 @ 216,447: 29x29 +#726 @ 347,204: 26x19 +#727 @ 156,272: 21x16 +#728 @ 756,666: 20x11 +#729 @ 538,584: 10x16 +#730 @ 698,395: 19x17 +#731 @ 356,34: 17x24 +#732 @ 558,418: 29x10 +#733 @ 855,61: 25x26 +#734 @ 379,247: 17x9 +#735 @ 393,352: 25x18 +#736 @ 426,759: 8x16 +#737 @ 588,511: 15x28 +#738 @ 803,205: 12x25 +#739 @ 264,387: 11x23 +#740 @ 172,292: 28x20 +#741 @ 623,647: 28x16 +#742 @ 109,916: 10x28 +#743 @ 139,807: 15x17 +#744 @ 854,284: 21x20 +#745 @ 919,251: 25x22 +#746 @ 162,838: 25x10 +#747 @ 47,977: 15x16 +#748 @ 82,526: 11x29 +#749 @ 483,919: 25x17 +#750 @ 259,929: 13x18 +#751 @ 637,964: 15x29 +#752 @ 227,697: 12x25 +#753 @ 869,592: 17x12 +#754 @ 151,425: 11x10 +#755 @ 393,886: 24x11 +#756 @ 143,434: 29x18 +#757 @ 647,115: 11x16 +#758 @ 919,707: 10x29 +#759 @ 390,308: 12x25 +#760 @ 832,197: 17x29 +#761 @ 495,442: 25x24 +#762 @ 796,32: 25x21 +#763 @ 530,817: 25x17 +#764 @ 909,574: 24x14 +#765 @ 20,939: 11x10 +#766 @ 192,928: 14x13 +#767 @ 28,395: 23x17 +#768 @ 724,627: 17x14 +#769 @ 447,931: 16x16 +#770 @ 649,965: 11x21 +#771 @ 700,939: 22x18 +#772 @ 296,772: 15x20 +#773 @ 237,600: 28x20 +#774 @ 675,48: 28x22 +#775 @ 218,570: 12x27 +#776 @ 467,318: 25x15 +#777 @ 358,873: 25x20 +#778 @ 142,505: 16x24 +#779 @ 25,184: 17x26 +#780 @ 487,980: 16x14 +#781 @ 492,962: 15x21 +#782 @ 907,567: 15x27 +#783 @ 135,318: 17x18 +#784 @ 220,879: 10x13 +#785 @ 689,210: 14x11 +#786 @ 133,381: 16x25 +#787 @ 166,624: 22x27 +#788 @ 187,162: 10x11 +#789 @ 139,522: 10x19 +#790 @ 559,131: 18x17 +#791 @ 484,554: 29x24 +#792 @ 359,417: 10x24 +#793 @ 634,807: 10x15 +#794 @ 485,29: 24x16 +#795 @ 877,59: 11x29 +#796 @ 754,758: 19x20 +#797 @ 77,877: 20x14 +#798 @ 918,42: 16x21 +#799 @ 621,381: 12x16 +#800 @ 400,603: 29x26 +#801 @ 49,665: 10x14 +#802 @ 623,123: 29x19 +#803 @ 659,963: 13x13 +#804 @ 384,930: 23x13 +#805 @ 45,892: 4x12 +#806 @ 118,444: 26x15 +#807 @ 163,498: 24x19 +#808 @ 677,83: 20x21 +#809 @ 6,606: 16x16 +#810 @ 466,604: 28x25 +#811 @ 361,890: 10x27 +#812 @ 138,388: 7x13 +#813 @ 217,578: 15x19 +#814 @ 105,207: 26x13 +#815 @ 369,491: 26x26 +#816 @ 946,287: 20x22 +#817 @ 282,448: 20x23 +#818 @ 214,38: 29x20 +#819 @ 544,467: 16x13 +#820 @ 423,366: 28x11 +#821 @ 862,256: 26x13 +#822 @ 606,18: 27x16 +#823 @ 244,260: 16x29 +#824 @ 930,807: 28x19 +#825 @ 966,413: 10x26 +#826 @ 558,201: 29x15 +#827 @ 390,916: 11x21 +#828 @ 773,899: 25x23 +#829 @ 479,274: 14x23 +#830 @ 387,162: 14x4 +#831 @ 448,751: 20x16 +#832 @ 532,17: 10x20 +#833 @ 329,971: 20x15 +#834 @ 379,495: 10x26 +#835 @ 867,967: 21x14 +#836 @ 623,266: 17x21 +#837 @ 814,542: 22x24 +#838 @ 113,769: 28x13 +#839 @ 18,210: 12x18 +#840 @ 706,855: 24x28 +#841 @ 43,412: 17x20 +#842 @ 594,144: 20x16 +#843 @ 918,491: 15x14 +#844 @ 570,810: 14x26 +#845 @ 956,743: 22x18 +#846 @ 432,907: 17x21 +#847 @ 593,699: 21x18 +#848 @ 108,908: 22x14 +#849 @ 250,394: 11x24 +#850 @ 783,511: 18x13 +#851 @ 879,273: 10x11 +#852 @ 933,453: 11x26 +#853 @ 803,865: 13x26 +#854 @ 359,841: 10x14 +#855 @ 744,662: 23x10 +#856 @ 260,413: 14x10 +#857 @ 857,954: 11x23 +#858 @ 434,780: 23x27 +#859 @ 968,701: 10x21 +#860 @ 615,507: 10x28 +#861 @ 716,935: 27x18 +#862 @ 385,576: 14x10 +#863 @ 737,340: 12x11 +#864 @ 453,864: 22x13 +#865 @ 439,8: 24x11 +#866 @ 694,353: 16x20 +#867 @ 223,200: 12x29 +#868 @ 409,44: 23x22 +#869 @ 654,72: 23x13 +#870 @ 560,167: 18x12 +#871 @ 755,520: 14x15 +#872 @ 906,62: 16x10 +#873 @ 162,911: 24x29 +#874 @ 88,265: 19x16 +#875 @ 670,69: 12x24 +#876 @ 954,527: 20x11 +#877 @ 704,526: 10x17 +#878 @ 343,972: 24x22 +#879 @ 153,427: 6x5 +#880 @ 228,793: 22x25 +#881 @ 713,381: 15x22 +#882 @ 502,170: 17x11 +#883 @ 175,259: 29x28 +#884 @ 133,809: 24x27 +#885 @ 466,300: 19x27 +#886 @ 516,429: 7x9 +#887 @ 737,787: 19x27 +#888 @ 767,345: 18x28 +#889 @ 696,826: 15x26 +#890 @ 248,416: 20x28 +#891 @ 85,166: 14x11 +#892 @ 794,882: 21x27 +#893 @ 429,908: 20x15 +#894 @ 742,902: 12x25 +#895 @ 341,782: 26x14 +#896 @ 940,777: 16x10 +#897 @ 850,341: 26x17 +#898 @ 557,791: 17x28 +#899 @ 277,657: 19x15 +#900 @ 774,326: 27x24 +#901 @ 853,655: 20x22 +#902 @ 180,923: 15x13 +#903 @ 318,808: 18x14 +#904 @ 212,90: 24x18 +#905 @ 595,278: 23x20 +#906 @ 150,57: 19x22 +#907 @ 967,366: 10x8 +#908 @ 625,789: 18x25 +#909 @ 404,508: 12x22 +#910 @ 330,484: 28x28 +#911 @ 70,736: 15x13 +#912 @ 521,791: 25x28 +#913 @ 90,824: 15x17 +#914 @ 780,342: 27x28 +#915 @ 14,944: 21x20 +#916 @ 510,927: 29x23 +#917 @ 385,159: 28x11 +#918 @ 68,204: 26x13 +#919 @ 460,933: 11x10 +#920 @ 437,860: 20x18 +#921 @ 642,95: 10x19 +#922 @ 828,719: 22x20 +#923 @ 373,366: 13x16 +#924 @ 209,889: 14x22 +#925 @ 544,914: 22x29 +#926 @ 536,416: 23x12 +#927 @ 930,215: 17x16 +#928 @ 644,98: 5x12 +#929 @ 365,374: 28x18 +#930 @ 961,363: 22x15 +#931 @ 647,728: 17x18 +#932 @ 883,499: 11x17 +#933 @ 751,904: 28x28 +#934 @ 285,267: 13x14 +#935 @ 587,664: 27x11 +#936 @ 43,106: 28x10 +#937 @ 218,352: 28x21 +#938 @ 724,64: 11x25 +#939 @ 206,461: 11x15 +#940 @ 101,45: 10x14 +#941 @ 154,585: 21x17 +#942 @ 715,435: 29x14 +#943 @ 861,527: 17x27 +#944 @ 418,351: 22x20 +#945 @ 517,166: 26x16 +#946 @ 748,492: 24x29 +#947 @ 473,760: 11x13 +#948 @ 854,590: 24x23 +#949 @ 349,211: 22x14 +#950 @ 26,350: 25x16 +#951 @ 364,31: 28x25 +#952 @ 496,218: 15x18 +#953 @ 760,386: 11x19 +#954 @ 79,899: 28x29 +#955 @ 529,9: 10x22 +#956 @ 746,581: 24x21 +#957 @ 710,978: 19x11 +#958 @ 518,744: 11x25 +#959 @ 656,702: 17x10 +#960 @ 554,122: 10x25 +#961 @ 55,667: 29x11 +#962 @ 162,755: 20x21 +#963 @ 668,822: 11x19 +#964 @ 231,420: 26x17 +#965 @ 572,710: 21x26 +#966 @ 267,87: 15x21 +#967 @ 354,601: 18x22 +#968 @ 377,737: 25x21 +#969 @ 707,344: 21x28 +#970 @ 710,403: 21x14 +#971 @ 116,782: 28x12 +#972 @ 184,437: 25x29 +#973 @ 427,633: 25x15 +#974 @ 380,662: 21x14 +#975 @ 742,523: 18x22 +#976 @ 335,678: 26x17 +#977 @ 919,550: 22x19 +#978 @ 128,38: 25x14 +#979 @ 392,163: 26x13 +#980 @ 631,644: 20x15 +#981 @ 117,517: 28x18 +#982 @ 861,159: 27x17 +#983 @ 504,210: 18x23 +#984 @ 11,401: 29x16 +#985 @ 611,349: 24x12 +#986 @ 446,62: 16x25 +#987 @ 408,332: 15x24 +#988 @ 813,147: 14x24 +#989 @ 297,267: 13x11 +#990 @ 150,893: 10x29 +#991 @ 453,798: 21x29 +#992 @ 563,33: 21x18 +#993 @ 717,652: 21x29 +#994 @ 719,166: 14x16 +#995 @ 887,378: 15x20 +#996 @ 393,481: 16x29 +#997 @ 581,516: 20x28 +#998 @ 376,245: 25x14 +#999 @ 297,418: 24x29 +#1000 @ 41,388: 15x13 +#1001 @ 233,380: 20x14 +#1002 @ 644,430: 13x13 +#1003 @ 480,88: 16x14 +#1004 @ 552,29: 21x11 +#1005 @ 929,571: 13x29 +#1006 @ 736,881: 28x18 +#1007 @ 798,407: 20x20 +#1008 @ 149,813: 21x10 +#1009 @ 545,166: 22x11 +#1010 @ 437,599: 15x22 +#1011 @ 736,578: 17x23 +#1012 @ 972,173: 11x19 +#1013 @ 694,701: 10x29 +#1014 @ 399,532: 22x26 +#1015 @ 716,588: 27x29 +#1016 @ 571,276: 10x19 +#1017 @ 371,748: 22x14 +#1018 @ 349,957: 27x17 +#1019 @ 644,917: 18x17 +#1020 @ 863,292: 28x22 +#1021 @ 134,484: 14x28 +#1022 @ 337,584: 14x19 +#1023 @ 729,881: 14x26 +#1024 @ 515,349: 27x17 +#1025 @ 320,476: 19x14 +#1026 @ 911,576: 19x6 +#1027 @ 650,439: 17x15 +#1028 @ 690,684: 27x27 +#1029 @ 349,346: 12x5 +#1030 @ 945,759: 11x26 +#1031 @ 427,829: 16x15 +#1032 @ 225,277: 25x14 +#1033 @ 287,300: 15x25 +#1034 @ 130,357: 27x18 +#1035 @ 927,910: 27x28 +#1036 @ 807,785: 22x11 +#1037 @ 389,568: 27x25 +#1038 @ 563,120: 16x19 +#1039 @ 755,505: 10x10 +#1040 @ 81,646: 24x11 +#1041 @ 609,625: 19x28 +#1042 @ 886,286: 17x19 +#1043 @ 434,177: 20x24 +#1044 @ 938,220: 24x23 +#1045 @ 596,898: 10x13 +#1046 @ 711,319: 18x10 +#1047 @ 732,258: 19x13 +#1048 @ 327,804: 11x21 +#1049 @ 415,77: 13x29 +#1050 @ 456,26: 15x23 +#1051 @ 556,612: 17x26 +#1052 @ 52,339: 29x14 +#1053 @ 492,745: 27x24 +#1054 @ 681,414: 22x19 +#1055 @ 683,603: 10x29 +#1056 @ 96,959: 12x16 +#1057 @ 570,664: 21x12 +#1058 @ 555,742: 16x22 +#1059 @ 145,182: 12x10 +#1060 @ 555,555: 13x26 +#1061 @ 794,201: 27x27 +#1062 @ 565,945: 18x20 +#1063 @ 294,531: 19x29 +#1064 @ 765,574: 14x19 +#1065 @ 160,897: 16x12 +#1066 @ 427,776: 13x24 +#1067 @ 294,838: 14x16 +#1068 @ 935,895: 13x28 +#1069 @ 962,830: 16x17 +#1070 @ 454,238: 20x14 +#1071 @ 811,290: 20x28 +#1072 @ 634,619: 20x11 +#1073 @ 677,184: 29x26 +#1074 @ 568,98: 22x22 +#1075 @ 366,10: 24x16 +#1076 @ 353,588: 16x28 +#1077 @ 572,693: 18x26 +#1078 @ 101,40: 21x16 +#1079 @ 450,226: 13x16 +#1080 @ 470,480: 19x27 +#1081 @ 925,274: 14x28 +#1082 @ 551,436: 17x14 +#1083 @ 792,510: 18x23 +#1084 @ 929,548: 12x10 +#1085 @ 333,780: 18x18 +#1086 @ 886,111: 24x26 +#1087 @ 539,576: 23x12 +#1088 @ 259,852: 23x17 +#1089 @ 233,84: 18x18 +#1090 @ 75,563: 12x19 +#1091 @ 329,55: 16x15 +#1092 @ 826,975: 13x11 +#1093 @ 36,828: 20x24 +#1094 @ 725,740: 18x24 +#1095 @ 371,861: 25x22 +#1096 @ 399,624: 11x25 +#1097 @ 240,303: 15x28 +#1098 @ 831,711: 21x23 +#1099 @ 720,258: 14x21 +#1100 @ 510,377: 19x25 +#1101 @ 578,11: 22x20 +#1102 @ 347,590: 25x13 +#1103 @ 321,927: 14x17 +#1104 @ 481,742: 29x26 +#1105 @ 959,179: 17x26 +#1106 @ 127,758: 25x21 +#1107 @ 950,404: 28x17 +#1108 @ 827,282: 16x28 +#1109 @ 716,884: 22x28 +#1110 @ 16,351: 29x18 +#1111 @ 384,571: 28x29 +#1112 @ 801,211: 29x11 +#1113 @ 203,594: 23x12 +#1114 @ 47,482: 14x12 +#1115 @ 543,104: 28x27 +#1116 @ 391,127: 27x22 +#1117 @ 236,954: 12x18 +#1118 @ 550,613: 17x25 +#1119 @ 10,509: 21x11 +#1120 @ 347,828: 19x29 +#1121 @ 933,322: 23x26 +#1122 @ 915,735: 24x18 +#1123 @ 859,615: 28x15 +#1124 @ 808,655: 17x26 +#1125 @ 441,869: 17x12 +#1126 @ 301,189: 11x22 +#1127 @ 763,68: 26x27 +#1128 @ 1,568: 26x13 +#1129 @ 635,114: 14x27 +#1130 @ 278,641: 27x24 +#1131 @ 84,470: 28x19 +#1132 @ 65,618: 19x22 +#1133 @ 150,468: 26x25 +#1134 @ 367,142: 29x25 +#1135 @ 447,80: 27x22 +#1136 @ 159,101: 11x17 +#1137 @ 345,777: 15x24 +#1138 @ 344,654: 20x24 +#1139 @ 636,72: 29x17 +#1140 @ 44,299: 25x23 +#1141 @ 360,787: 25x15 +#1142 @ 642,768: 24x20 +#1143 @ 810,734: 10x25 +#1144 @ 594,328: 18x29 +#1145 @ 228,40: 26x29 +#1146 @ 781,430: 20x23 +#1147 @ 537,297: 26x16 +#1148 @ 757,399: 16x17 +#1149 @ 567,270: 16x23 +#1150 @ 837,821: 12x11 +#1151 @ 343,573: 16x26 +#1152 @ 964,204: 20x20 +#1153 @ 902,154: 17x19 +#1154 @ 484,460: 28x29 +#1155 @ 815,872: 18x25 +#1156 @ 198,936: 10x11 +#1157 @ 390,686: 20x16 +#1158 @ 255,406: 17x27 +#1159 @ 665,62: 17x21 +#1160 @ 840,825: 16x24 +#1161 @ 704,407: 24x12 +#1162 @ 507,524: 14x28 +#1163 @ 521,425: 14x6 +#1164 @ 435,783: 18x18 +#1165 @ 171,841: 21x13 +#1166 @ 7,278: 14x22 +#1167 @ 946,881: 13x24 +#1168 @ 900,415: 22x28 +#1169 @ 635,184: 22x29 +#1170 @ 348,249: 16x13 +#1171 @ 840,460: 25x17 +#1172 @ 262,858: 16x12 +#1173 @ 248,625: 20x24 +#1174 @ 424,400: 29x22 +#1175 @ 539,406: 25x17 +#1176 @ 376,733: 15x28 +#1177 @ 456,754: 7x5 +#1178 @ 876,602: 10x20 +#1179 @ 88,486: 21x28 +#1180 @ 291,650: 24x13 +#1181 @ 86,953: 12x26 +#1182 @ 646,251: 18x17 +#1183 @ 503,322: 16x14 +#1184 @ 819,973: 28x16 +#1185 @ 434,587: 15x20 +#1186 @ 125,209: 20x20 +#1187 @ 493,988: 10x10 +#1188 @ 804,750: 14x25 +#1189 @ 26,315: 18x12 +#1190 @ 457,909: 27x19 +#1191 @ 126,487: 28x25 +#1192 @ 234,603: 10x29 +#1193 @ 386,617: 29x23 +#1194 @ 753,61: 13x26 +#1195 @ 956,521: 27x28 +#1196 @ 442,823: 10x20 +#1197 @ 501,514: 27x17 +#1198 @ 727,974: 17x14 +#1199 @ 533,298: 23x12 +#1200 @ 295,555: 24x22 +#1201 @ 525,801: 14x26 +#1202 @ 232,60: 10x15 +#1203 @ 74,971: 22x27 +#1204 @ 31,208: 12x22 +#1205 @ 118,45: 22x16 +#1206 @ 799,342: 28x23 +#1207 @ 786,881: 20x21 +#1208 @ 588,199: 11x29 +#1209 @ 904,53: 21x19 +#1210 @ 638,933: 16x19 +#1211 @ 771,478: 13x23 +#1212 @ 503,231: 20x20 +#1213 @ 351,161: 18x20 +#1214 @ 535,574: 24x10 +#1215 @ 679,780: 17x12 +#1216 @ 106,425: 26x20 +#1217 @ 937,206: 20x19 +#1218 @ 706,865: 15x21 +#1219 @ 480,568: 13x22 +#1220 @ 397,945: 20x26 +#1221 @ 836,64: 15x19 +#1222 @ 119,504: 28x16 +#1223 @ 63,761: 16x14 +#1224 @ 247,99: 27x20 +#1225 @ 920,118: 21x18 +#1226 @ 451,42: 29x27 +#1227 @ 69,143: 28x14 +#1228 @ 197,411: 16x23 +#1229 @ 832,138: 13x11 +#1230 @ 195,593: 23x16 +#1231 @ 168,220: 10x21 +#1232 @ 40,981: 11x14 +#1233 @ 68,207: 10x11 +#1234 @ 836,2: 22x19 +#1235 @ 834,19: 29x20 +#1236 @ 788,153: 28x29 +#1237 @ 667,684: 15x19 +#1238 @ 221,717: 13x11 +#1239 @ 386,642: 24x29 +#1240 @ 8,258: 28x27 +#1241 @ 919,326: 15x26 +#1242 @ 867,666: 18x23 +#1243 @ 853,760: 20x24 +#1244 @ 825,423: 16x27 +#1245 @ 831,202: 21x13 +#1246 @ 107,43: 12x22 +#1247 @ 366,170: 21x15 +#1248 @ 519,235: 13x11 +#1249 @ 33,698: 27x19 +#1250 @ 615,630: 26x16 +#1251 @ 325,695: 17x19 +#1252 @ 494,39: 17x23 +#1253 @ 559,34: 27x29 +#1254 @ 978,813: 20x28 +#1255 @ 499,885: 10x22 +#1256 @ 847,515: 19x23 +#1257 @ 950,119: 21x28 +#1258 @ 967,692: 15x15 +#1259 @ 55,753: 22x15 +#1260 @ 444,777: 29x16 +#1261 @ 371,580: 29x18 +#1262 @ 628,622: 29x18 +#1263 @ 850,724: 18x22 +#1264 @ 817,287: 22x27 +#1265 @ 708,900: 3x10 +#1266 @ 43,667: 11x20 +#1267 @ 731,444: 20x10 +#1268 @ 706,475: 16x10 +#1269 @ 139,42: 28x23 +#1270 @ 744,375: 27x27 +#1271 @ 410,867: 13x27 +#1272 @ 787,18: 13x15 +#1273 @ 210,847: 15x25 +#1274 @ 399,516: 13x19 +#1275 @ 771,854: 23x17 +#1276 @ 262,834: 27x29 +#1277 @ 237,136: 29x13 +#1278 @ 823,716: 23x21 +#1279 @ 711,529: 23x26 +#1280 @ 736,514: 25x18 +#1281 @ 438,779: 14x12 +#1282 @ 140,516: 19x18 +#1283 @ 740,940: 29x15 +#1284 @ 767,387: 29x18 +#1285 @ 95,935: 16x17 +#1286 @ 535,406: 14x25 +#1287 @ 987,970: 11x17 +#1288 @ 786,350: 22x15 +#1289 @ 416,669: 5x10 +#1290 @ 759,442: 28x29 +#1291 @ 532,145: 22x15 +#1292 @ 58,438: 19x26 +#1293 @ 156,760: 29x13 +#1294 @ 9,211: 10x11 +#1295 @ 712,346: 19x28 +#1296 @ 183,28: 10x26 +#1297 @ 543,115: 22x22 +#1298 @ 909,733: 22x29 +#1299 @ 473,755: 21x14 +#1300 @ 722,844: 26x26 +#1301 @ 14,53: 26x22 +#1302 @ 179,534: 14x24 +#1303 @ 204,860: 17x12 +#1304 @ 749,568: 23x13 +#1305 @ 541,177: 24x14 +#1306 @ 476,826: 21x14 +#1307 @ 935,746: 28x21 +#1308 @ 172,261: 12x22 +#1309 @ 481,585: 11x27 +#1310 @ 658,696: 13x19 +#1311 @ 839,714: 23x23 +#1312 @ 703,956: 10x11 +#1313 @ 961,825: 11x12 +#1314 @ 621,961: 18x16 +#1315 @ 648,685: 28x14 +#1316 @ 508,250: 12x21 +#1317 @ 829,808: 28x26 +#1318 @ 459,577: 28x11 +#1319 @ 978,15: 13x18 +#1320 @ 735,660: 15x13 +#1321 @ 906,442: 17x12 +#1322 @ 825,896: 22x29 +#1323 @ 940,614: 24x27 +#1324 @ 914,490: 16x27 +#1325 @ 155,338: 29x25 +#1326 @ 952,342: 16x18 +#1327 @ 796,417: 26x10 +#1328 @ 226,224: 14x22 +#1329 @ 396,314: 17x22 +#1330 @ 102,50: 13x13 +#1331 @ 705,151: 28x25 +#1332 @ 147,528: 28x11 +#1333 @ 649,245: 10x11 +#1334 @ 942,285: 17x24 +#1335 @ 200,35: 20x13 +#1336 @ 423,262: 29x24 +#1337 @ 304,201: 10x10 +#1338 @ 909,110: 22x15 +#1339 @ 577,568: 25x29 +#1340 @ 205,448: 11x28 +#1341 @ 598,368: 26x19 +#1342 @ 236,912: 24x17 +#1343 @ 717,817: 20x27 +#1344 @ 76,643: 10x28 +#1345 @ 161,462: 26x17 +#1346 @ 700,889: 11x25 +#1347 @ 864,619: 19x17 +#1348 @ 199,857: 24x21 +#1349 @ 959,173: 24x20 +#1350 @ 366,874: 10x13 +#1351 @ 144,509: 11x26 +#1352 @ 252,922: 11x25 +#1353 @ 243,917: 28x18 +#1354 @ 703,883: 21x11 +#1355 @ 622,934: 23x11 +#1356 @ 889,520: 24x23 +#1357 @ 556,275: 29x27 +#1358 @ 524,129: 13x23 +#1359 @ 442,840: 23x16 +#1360 @ 761,55: 22x21 +#1361 @ 566,547: 25x28 +#1362 @ 807,670: 17x24 +#1363 @ 312,58: 26x19 +#1364 @ 275,943: 10x27 +#1365 @ 699,482: 23x11 +#1366 @ 182,267: 21x15 +#1367 @ 438,580: 20x11 +#1368 @ 127,494: 13x26 +#1369 @ 279,297: 15x29 +#1370 @ 333,912: 25x28 +#1371 @ 131,169: 18x26 +#1372 @ 394,413: 15x13 +#1373 @ 465,96: 23x10 +#1374 @ 306,283: 10x27 +#1375 @ 620,430: 18x25 +#1376 @ 680,300: 14x22 +#1377 @ 218,447: 27x23 +#1378 @ 648,606: 12x28 +#1379 @ 19,669: 20x12 +#1380 @ 70,150: 11x28 +#1381 @ 420,367: 17x12 +#1382 @ 660,807: 23x18 +#1383 @ 520,573: 29x15 +#1384 @ 152,23: 28x26 +#1385 @ 45,666: 21x22 +#1386 @ 139,517: 15x11 +#1387 @ 98,483: 24x19 +#1388 @ 812,205: 17x11 +#1389 @ 583,610: 11x14 +#1390 @ 335,532: 18x12 +#1391 @ 349,495: 12x26 +#1392 @ 150,468: 16x25 +#1393 @ 881,922: 17x21 +#1394 @ 14,306: 15x18 +#1395 @ 264,540: 15x19 +#1396 @ 367,319: 29x11 +#1397 @ 770,599: 15x13 +#1398 @ 916,40: 22x27 +#1399 @ 876,521: 22x15 +#1400 @ 743,667: 19x24 +#1401 @ 172,390: 28x11 +#1402 @ 930,276: 12x27 +#1403 @ 656,975: 12x17 +#1404 @ 607,484: 17x25 +#1405 @ 499,30: 12x11 +#1406 @ 181,431: 23x12 +#1407 @ 699,840: 28x17 \ No newline at end of file diff --git a/data/2018_04_data.txt b/data/2018_04_data.txt new file mode 100644 index 0000000..b20dea1 --- /dev/null +++ b/data/2018_04_data.txt @@ -0,0 +1,1110 @@ +[1518-11-22 00:00] Guard #1231 begins shift +[1518-04-13 00:00] falls asleep +[1518-09-09 00:02] falls asleep +[1518-04-06 00:58] wakes up +[1518-04-28 00:19] falls asleep +[1518-03-25 00:52] wakes up +[1518-04-12 00:56] falls asleep +[1518-10-25 00:09] falls asleep +[1518-09-07 00:00] Guard #2383 begins shift +[1518-08-20 00:17] falls asleep +[1518-05-09 00:58] wakes up +[1518-05-16 00:16] falls asleep +[1518-08-25 23:57] Guard #3499 begins shift +[1518-10-09 00:51] falls asleep +[1518-10-04 00:53] wakes up +[1518-04-09 00:57] wakes up +[1518-09-09 00:37] wakes up +[1518-05-30 00:58] wakes up +[1518-04-23 00:43] wakes up +[1518-05-16 00:58] wakes up +[1518-05-02 23:56] Guard #3371 begins shift +[1518-07-06 00:48] wakes up +[1518-06-14 00:24] falls asleep +[1518-10-22 00:30] falls asleep +[1518-07-09 00:57] wakes up +[1518-09-13 23:58] Guard #283 begins shift +[1518-05-04 00:54] wakes up +[1518-03-24 00:58] wakes up +[1518-09-15 00:26] falls asleep +[1518-10-17 00:02] Guard #1171 begins shift +[1518-05-04 00:40] wakes up +[1518-10-13 00:42] falls asleep +[1518-11-22 00:54] wakes up +[1518-06-25 00:24] falls asleep +[1518-03-01 23:59] Guard #1033 begins shift +[1518-06-13 00:20] falls asleep +[1518-10-18 00:36] falls asleep +[1518-03-11 00:20] wakes up +[1518-07-24 00:01] Guard #2729 begins shift +[1518-02-28 23:57] Guard #2729 begins shift +[1518-07-04 00:03] Guard #3533 begins shift +[1518-07-02 00:04] Guard #1171 begins shift +[1518-07-10 00:18] falls asleep +[1518-04-12 00:49] wakes up +[1518-04-29 00:49] falls asleep +[1518-05-24 00:13] wakes up +[1518-04-09 00:36] wakes up +[1518-07-02 23:48] Guard #1033 begins shift +[1518-10-20 00:46] falls asleep +[1518-09-20 00:50] wakes up +[1518-06-16 00:36] wakes up +[1518-06-29 00:00] Guard #1021 begins shift +[1518-02-27 00:25] wakes up +[1518-04-22 00:41] falls asleep +[1518-05-10 00:58] wakes up +[1518-07-27 00:12] falls asleep +[1518-09-04 00:58] wakes up +[1518-09-29 00:50] falls asleep +[1518-09-02 00:02] Guard #3371 begins shift +[1518-08-29 00:54] wakes up +[1518-04-23 00:00] falls asleep +[1518-10-31 00:40] wakes up +[1518-03-17 00:02] wakes up +[1518-05-21 00:32] falls asleep +[1518-04-24 00:46] wakes up +[1518-02-20 00:57] wakes up +[1518-02-18 00:43] wakes up +[1518-09-19 00:21] wakes up +[1518-08-30 00:59] wakes up +[1518-06-04 00:51] wakes up +[1518-06-30 00:50] falls asleep +[1518-07-02 00:14] falls asleep +[1518-08-11 00:35] wakes up +[1518-04-12 00:00] Guard #419 begins shift +[1518-02-25 00:02] falls asleep +[1518-11-22 00:25] wakes up +[1518-07-07 00:21] falls asleep +[1518-11-06 23:56] Guard #1033 begins shift +[1518-09-21 00:16] wakes up +[1518-04-29 00:50] wakes up +[1518-06-16 00:08] falls asleep +[1518-09-01 00:46] falls asleep +[1518-04-18 00:54] wakes up +[1518-07-14 23:58] Guard #2383 begins shift +[1518-04-20 00:48] wakes up +[1518-05-30 00:26] falls asleep +[1518-10-27 00:53] wakes up +[1518-10-04 00:51] falls asleep +[1518-08-18 00:34] falls asleep +[1518-07-29 23:57] Guard #1553 begins shift +[1518-09-09 00:05] wakes up +[1518-06-26 00:58] wakes up +[1518-05-07 00:54] wakes up +[1518-10-30 00:49] falls asleep +[1518-03-24 00:24] falls asleep +[1518-06-18 00:54] falls asleep +[1518-09-03 00:14] falls asleep +[1518-02-17 00:24] falls asleep +[1518-08-04 00:27] falls asleep +[1518-02-19 00:46] wakes up +[1518-10-28 00:56] wakes up +[1518-02-17 23:56] Guard #1297 begins shift +[1518-09-07 23:58] Guard #1297 begins shift +[1518-03-09 00:56] wakes up +[1518-03-13 00:07] falls asleep +[1518-11-06 00:56] wakes up +[1518-07-03 00:50] wakes up +[1518-08-07 00:01] Guard #1723 begins shift +[1518-08-22 00:12] falls asleep +[1518-04-20 00:02] Guard #1193 begins shift +[1518-03-23 00:33] wakes up +[1518-06-27 00:33] wakes up +[1518-08-21 23:58] Guard #1231 begins shift +[1518-04-03 00:50] falls asleep +[1518-07-24 00:22] falls asleep +[1518-08-06 00:23] falls asleep +[1518-08-10 00:02] Guard #2729 begins shift +[1518-08-27 00:59] wakes up +[1518-05-10 00:57] falls asleep +[1518-08-02 00:33] falls asleep +[1518-03-14 00:45] wakes up +[1518-08-14 00:00] Guard #283 begins shift +[1518-05-08 00:53] wakes up +[1518-03-31 00:04] wakes up +[1518-05-03 00:48] wakes up +[1518-06-13 00:24] wakes up +[1518-10-10 00:08] wakes up +[1518-06-13 00:02] wakes up +[1518-10-18 00:21] wakes up +[1518-08-16 00:01] Guard #1033 begins shift +[1518-10-01 00:07] falls asleep +[1518-02-18 00:52] wakes up +[1518-09-24 00:45] falls asleep +[1518-03-28 00:47] falls asleep +[1518-02-25 00:13] wakes up +[1518-09-28 00:38] falls asleep +[1518-08-13 00:26] wakes up +[1518-10-31 00:58] wakes up +[1518-11-22 00:39] falls asleep +[1518-07-11 00:57] wakes up +[1518-09-02 00:49] wakes up +[1518-07-10 00:41] falls asleep +[1518-09-11 00:42] wakes up +[1518-03-15 00:11] falls asleep +[1518-04-24 00:20] falls asleep +[1518-11-16 00:49] wakes up +[1518-07-05 00:38] wakes up +[1518-09-25 00:00] Guard #3533 begins shift +[1518-07-02 00:46] falls asleep +[1518-07-28 00:22] falls asleep +[1518-10-20 00:57] wakes up +[1518-06-02 00:44] falls asleep +[1518-05-28 00:35] falls asleep +[1518-06-29 00:09] falls asleep +[1518-05-21 00:04] Guard #1193 begins shift +[1518-08-05 00:57] wakes up +[1518-08-29 00:47] falls asleep +[1518-10-19 23:51] Guard #2729 begins shift +[1518-06-12 00:25] wakes up +[1518-08-27 23:51] Guard #419 begins shift +[1518-07-08 00:32] wakes up +[1518-04-19 00:26] falls asleep +[1518-05-14 00:16] falls asleep +[1518-10-26 00:51] falls asleep +[1518-05-25 23:57] Guard #3533 begins shift +[1518-11-14 00:02] falls asleep +[1518-06-03 23:58] Guard #1033 begins shift +[1518-10-11 00:53] wakes up +[1518-08-30 00:03] Guard #1901 begins shift +[1518-08-13 00:49] wakes up +[1518-07-20 23:56] Guard #1021 begins shift +[1518-04-21 00:45] falls asleep +[1518-05-01 00:45] falls asleep +[1518-03-05 00:48] wakes up +[1518-06-07 00:03] Guard #3371 begins shift +[1518-06-09 00:24] falls asleep +[1518-06-23 00:00] falls asleep +[1518-06-11 00:02] falls asleep +[1518-06-29 23:50] Guard #2129 begins shift +[1518-04-17 00:52] wakes up +[1518-03-25 23:49] Guard #1171 begins shift +[1518-07-02 00:32] wakes up +[1518-08-20 00:28] wakes up +[1518-10-17 00:10] falls asleep +[1518-04-01 00:00] Guard #3371 begins shift +[1518-03-31 00:10] falls asleep +[1518-07-11 00:03] falls asleep +[1518-04-29 00:44] wakes up +[1518-07-01 00:45] wakes up +[1518-05-11 00:57] wakes up +[1518-06-08 00:17] wakes up +[1518-09-10 00:59] wakes up +[1518-10-09 00:43] wakes up +[1518-10-12 00:59] wakes up +[1518-04-14 00:28] falls asleep +[1518-03-28 00:44] wakes up +[1518-06-11 00:51] falls asleep +[1518-04-07 00:01] Guard #2707 begins shift +[1518-08-03 23:59] Guard #1553 begins shift +[1518-06-16 23:58] Guard #2447 begins shift +[1518-08-08 00:41] wakes up +[1518-11-03 00:06] falls asleep +[1518-10-05 00:52] wakes up +[1518-08-17 00:44] wakes up +[1518-08-26 00:27] wakes up +[1518-04-24 23:58] Guard #1033 begins shift +[1518-11-11 00:52] falls asleep +[1518-06-22 23:54] Guard #1021 begins shift +[1518-06-17 23:58] Guard #2707 begins shift +[1518-04-20 00:24] wakes up +[1518-03-17 00:01] falls asleep +[1518-08-20 00:43] wakes up +[1518-05-01 00:27] wakes up +[1518-09-27 23:58] Guard #2447 begins shift +[1518-08-19 00:03] Guard #2707 begins shift +[1518-07-22 00:44] falls asleep +[1518-03-25 00:00] falls asleep +[1518-05-22 00:32] falls asleep +[1518-06-19 00:19] falls asleep +[1518-06-02 00:54] falls asleep +[1518-08-23 00:52] wakes up +[1518-05-13 00:42] wakes up +[1518-05-21 23:57] Guard #2383 begins shift +[1518-03-01 00:47] wakes up +[1518-10-16 00:40] wakes up +[1518-07-17 23:50] Guard #2383 begins shift +[1518-06-03 00:51] wakes up +[1518-05-15 00:42] falls asleep +[1518-03-08 00:33] falls asleep +[1518-07-05 00:50] wakes up +[1518-06-11 00:56] wakes up +[1518-02-28 00:18] falls asleep +[1518-05-29 00:44] wakes up +[1518-07-07 00:31] wakes up +[1518-07-13 00:03] Guard #2539 begins shift +[1518-10-20 00:00] falls asleep +[1518-03-29 00:16] falls asleep +[1518-02-13 00:02] Guard #1021 begins shift +[1518-11-04 00:03] Guard #1553 begins shift +[1518-02-14 00:30] falls asleep +[1518-04-26 00:19] falls asleep +[1518-03-27 00:02] Guard #2129 begins shift +[1518-09-27 00:50] wakes up +[1518-07-31 00:25] wakes up +[1518-05-12 00:59] wakes up +[1518-04-22 00:07] falls asleep +[1518-04-12 00:58] wakes up +[1518-06-10 00:54] wakes up +[1518-05-25 00:59] wakes up +[1518-06-26 00:03] Guard #3371 begins shift +[1518-10-30 00:04] Guard #1993 begins shift +[1518-02-15 00:28] wakes up +[1518-08-03 00:22] falls asleep +[1518-07-29 00:58] wakes up +[1518-10-06 00:00] Guard #1193 begins shift +[1518-09-06 00:08] falls asleep +[1518-05-18 23:57] Guard #3119 begins shift +[1518-09-22 00:12] wakes up +[1518-11-05 00:41] falls asleep +[1518-11-10 00:55] wakes up +[1518-08-15 00:28] wakes up +[1518-05-10 00:52] wakes up +[1518-08-08 23:57] Guard #1193 begins shift +[1518-08-30 00:46] falls asleep +[1518-11-08 23:59] Guard #1193 begins shift +[1518-11-14 23:57] Guard #1033 begins shift +[1518-04-13 00:42] wakes up +[1518-11-02 00:56] wakes up +[1518-10-06 00:56] wakes up +[1518-10-01 00:45] falls asleep +[1518-11-23 00:11] falls asleep +[1518-08-15 00:00] Guard #1553 begins shift +[1518-11-10 00:04] Guard #1993 begins shift +[1518-05-27 00:11] falls asleep +[1518-06-02 00:57] wakes up +[1518-07-12 00:37] wakes up +[1518-05-04 00:14] wakes up +[1518-07-21 23:59] Guard #2129 begins shift +[1518-09-03 00:43] wakes up +[1518-11-12 00:08] wakes up +[1518-09-30 23:56] Guard #2129 begins shift +[1518-02-20 00:53] falls asleep +[1518-10-19 00:03] Guard #1231 begins shift +[1518-05-18 00:36] wakes up +[1518-03-30 00:58] wakes up +[1518-10-21 00:00] falls asleep +[1518-08-03 00:50] wakes up +[1518-04-12 00:08] falls asleep +[1518-07-20 00:06] wakes up +[1518-09-08 00:44] falls asleep +[1518-09-06 00:53] wakes up +[1518-11-11 00:02] falls asleep +[1518-08-12 00:38] wakes up +[1518-07-06 00:04] Guard #1553 begins shift +[1518-03-18 00:02] Guard #2707 begins shift +[1518-03-05 00:00] Guard #2729 begins shift +[1518-10-26 00:55] falls asleep +[1518-02-22 00:59] wakes up +[1518-10-29 00:16] falls asleep +[1518-05-01 23:57] Guard #283 begins shift +[1518-09-28 00:48] wakes up +[1518-09-17 00:36] falls asleep +[1518-10-22 00:26] wakes up +[1518-09-15 23:56] Guard #2447 begins shift +[1518-09-03 00:36] wakes up +[1518-06-12 00:01] Guard #1901 begins shift +[1518-09-16 00:17] falls asleep +[1518-07-17 00:02] Guard #2729 begins shift +[1518-03-13 23:58] Guard #419 begins shift +[1518-08-15 00:39] falls asleep +[1518-05-23 00:01] Guard #3371 begins shift +[1518-08-30 00:34] wakes up +[1518-02-23 23:56] Guard #2129 begins shift +[1518-03-30 23:49] Guard #3119 begins shift +[1518-02-12 00:22] falls asleep +[1518-09-24 00:07] falls asleep +[1518-10-13 00:50] wakes up +[1518-02-19 00:29] falls asleep +[1518-02-17 00:37] wakes up +[1518-09-12 23:51] Guard #3119 begins shift +[1518-07-22 23:58] Guard #1033 begins shift +[1518-08-01 00:23] wakes up +[1518-03-21 00:35] falls asleep +[1518-10-14 00:32] falls asleep +[1518-11-23 00:43] wakes up +[1518-05-29 00:12] falls asleep +[1518-08-11 00:01] Guard #1171 begins shift +[1518-04-09 00:02] Guard #2707 begins shift +[1518-03-30 00:56] falls asleep +[1518-02-15 00:50] falls asleep +[1518-03-02 00:53] wakes up +[1518-04-09 00:50] falls asleep +[1518-07-25 00:54] wakes up +[1518-07-27 00:45] falls asleep +[1518-10-20 23:53] Guard #1021 begins shift +[1518-02-11 00:05] falls asleep +[1518-04-25 00:40] falls asleep +[1518-08-18 00:57] falls asleep +[1518-09-26 23:58] Guard #1033 begins shift +[1518-04-30 00:41] wakes up +[1518-10-05 00:51] falls asleep +[1518-03-11 00:28] wakes up +[1518-10-22 23:57] Guard #2447 begins shift +[1518-11-12 00:04] Guard #1193 begins shift +[1518-04-26 00:15] wakes up +[1518-10-29 00:35] falls asleep +[1518-06-25 00:04] Guard #3119 begins shift +[1518-06-12 00:48] falls asleep +[1518-11-07 00:48] falls asleep +[1518-04-26 00:55] wakes up +[1518-04-25 23:54] Guard #2963 begins shift +[1518-08-20 00:42] falls asleep +[1518-04-29 00:07] falls asleep +[1518-05-28 00:02] Guard #2729 begins shift +[1518-07-01 00:00] Guard #2539 begins shift +[1518-04-03 00:52] wakes up +[1518-07-27 00:00] Guard #1993 begins shift +[1518-02-27 00:07] falls asleep +[1518-11-19 23:59] Guard #3371 begins shift +[1518-07-20 00:00] falls asleep +[1518-04-17 00:36] falls asleep +[1518-10-17 00:56] wakes up +[1518-11-18 00:56] falls asleep +[1518-08-09 00:33] falls asleep +[1518-09-21 00:53] wakes up +[1518-08-04 00:48] wakes up +[1518-04-22 23:53] Guard #2963 begins shift +[1518-03-01 00:14] falls asleep +[1518-06-02 00:03] Guard #1553 begins shift +[1518-03-20 00:01] falls asleep +[1518-08-18 00:02] Guard #1993 begins shift +[1518-05-11 00:24] falls asleep +[1518-08-11 00:13] falls asleep +[1518-07-14 00:04] Guard #2447 begins shift +[1518-05-28 00:52] falls asleep +[1518-03-12 00:01] Guard #3119 begins shift +[1518-10-18 00:02] falls asleep +[1518-07-16 00:31] wakes up +[1518-02-14 00:47] wakes up +[1518-07-30 23:59] Guard #1021 begins shift +[1518-06-28 00:48] falls asleep +[1518-10-23 00:09] falls asleep +[1518-03-28 00:58] wakes up +[1518-08-30 00:21] falls asleep +[1518-04-21 00:09] falls asleep +[1518-11-09 00:48] wakes up +[1518-05-07 23:54] Guard #1033 begins shift +[1518-06-20 00:00] Guard #419 begins shift +[1518-09-29 00:55] wakes up +[1518-05-12 00:00] Guard #2129 begins shift +[1518-06-22 00:59] wakes up +[1518-02-18 00:09] falls asleep +[1518-06-24 00:01] Guard #283 begins shift +[1518-07-31 00:23] falls asleep +[1518-06-27 00:04] Guard #1021 begins shift +[1518-10-16 00:20] falls asleep +[1518-07-14 00:47] wakes up +[1518-08-28 00:00] falls asleep +[1518-05-04 23:50] Guard #3371 begins shift +[1518-04-21 00:25] falls asleep +[1518-10-02 00:00] Guard #1231 begins shift +[1518-07-06 00:39] falls asleep +[1518-03-08 00:53] wakes up +[1518-05-10 00:42] falls asleep +[1518-07-20 00:44] falls asleep +[1518-06-10 00:25] wakes up +[1518-05-19 00:54] falls asleep +[1518-08-24 00:05] falls asleep +[1518-09-02 00:39] falls asleep +[1518-06-07 00:06] falls asleep +[1518-05-24 00:51] wakes up +[1518-03-21 00:00] Guard #1171 begins shift +[1518-08-19 00:49] wakes up +[1518-05-18 00:40] falls asleep +[1518-04-05 23:59] Guard #2539 begins shift +[1518-04-09 00:20] falls asleep +[1518-05-21 00:42] falls asleep +[1518-07-10 00:20] wakes up +[1518-03-02 23:56] Guard #419 begins shift +[1518-08-12 00:23] falls asleep +[1518-03-31 00:44] falls asleep +[1518-08-25 00:43] falls asleep +[1518-06-09 00:01] Guard #1171 begins shift +[1518-06-30 00:59] wakes up +[1518-03-14 00:30] falls asleep +[1518-03-23 00:49] falls asleep +[1518-09-08 23:49] Guard #2383 begins shift +[1518-09-04 00:01] Guard #3371 begins shift +[1518-05-01 00:14] falls asleep +[1518-06-19 00:24] wakes up +[1518-10-29 00:02] Guard #2447 begins shift +[1518-11-18 00:04] Guard #2729 begins shift +[1518-09-04 00:08] falls asleep +[1518-09-29 23:58] Guard #2707 begins shift +[1518-10-02 00:47] wakes up +[1518-10-31 00:27] wakes up +[1518-08-27 00:00] Guard #1297 begins shift +[1518-11-09 00:21] falls asleep +[1518-04-20 00:45] falls asleep +[1518-07-17 00:56] falls asleep +[1518-10-25 00:24] wakes up +[1518-10-15 00:54] wakes up +[1518-11-04 00:21] wakes up +[1518-02-13 23:56] Guard #2447 begins shift +[1518-07-30 00:53] falls asleep +[1518-07-05 00:41] falls asleep +[1518-11-11 00:39] wakes up +[1518-07-31 00:29] falls asleep +[1518-08-18 00:36] wakes up +[1518-03-31 00:41] wakes up +[1518-06-27 23:57] Guard #1033 begins shift +[1518-07-25 00:37] wakes up +[1518-11-20 00:55] wakes up +[1518-06-30 00:14] wakes up +[1518-06-21 00:30] falls asleep +[1518-11-13 00:38] wakes up +[1518-05-18 00:09] falls asleep +[1518-07-08 00:37] falls asleep +[1518-06-08 00:03] falls asleep +[1518-09-18 00:14] wakes up +[1518-11-09 00:53] falls asleep +[1518-05-08 00:27] wakes up +[1518-04-16 23:57] Guard #3499 begins shift +[1518-09-13 00:22] wakes up +[1518-03-29 23:57] Guard #1193 begins shift +[1518-05-20 00:57] wakes up +[1518-05-15 00:55] wakes up +[1518-08-30 23:54] Guard #1553 begins shift +[1518-03-03 00:41] wakes up +[1518-10-01 00:34] wakes up +[1518-03-30 00:42] falls asleep +[1518-04-22 00:59] wakes up +[1518-03-06 00:36] wakes up +[1518-11-18 00:52] falls asleep +[1518-05-16 00:34] wakes up +[1518-02-13 00:37] wakes up +[1518-02-22 00:30] wakes up +[1518-09-23 23:56] Guard #1993 begins shift +[1518-11-08 00:35] falls asleep +[1518-04-18 00:23] falls asleep +[1518-06-16 00:01] Guard #1171 begins shift +[1518-06-01 00:10] falls asleep +[1518-11-16 00:55] falls asleep +[1518-04-28 00:40] wakes up +[1518-08-24 00:44] wakes up +[1518-07-07 00:00] Guard #1993 begins shift +[1518-05-16 00:01] Guard #1171 begins shift +[1518-11-16 23:58] Guard #1297 begins shift +[1518-11-14 00:09] wakes up +[1518-10-10 00:34] falls asleep +[1518-10-28 00:18] falls asleep +[1518-06-07 00:47] wakes up +[1518-11-23 00:37] falls asleep +[1518-08-03 00:00] Guard #2447 begins shift +[1518-10-03 23:57] Guard #1297 begins shift +[1518-07-10 00:02] Guard #1171 begins shift +[1518-04-01 00:53] wakes up +[1518-05-17 00:35] falls asleep +[1518-06-25 00:51] wakes up +[1518-06-09 00:48] wakes up +[1518-05-03 00:26] falls asleep +[1518-09-07 00:15] falls asleep +[1518-03-06 23:58] Guard #1901 begins shift +[1518-03-22 23:57] Guard #1901 begins shift +[1518-06-26 00:32] falls asleep +[1518-02-17 00:04] Guard #1193 begins shift +[1518-04-06 00:52] falls asleep +[1518-03-11 00:53] wakes up +[1518-02-12 00:50] falls asleep +[1518-04-03 23:59] Guard #2707 begins shift +[1518-04-14 23:57] Guard #3533 begins shift +[1518-10-07 23:50] Guard #3371 begins shift +[1518-03-15 00:56] falls asleep +[1518-10-19 00:57] falls asleep +[1518-09-24 00:36] wakes up +[1518-08-21 00:47] wakes up +[1518-02-22 00:46] falls asleep +[1518-11-15 00:30] wakes up +[1518-02-21 23:59] Guard #2729 begins shift +[1518-03-11 00:48] falls asleep +[1518-11-04 00:17] falls asleep +[1518-07-18 00:00] falls asleep +[1518-06-18 23:59] Guard #3371 begins shift +[1518-04-18 00:53] falls asleep +[1518-10-08 00:33] wakes up +[1518-02-25 00:24] falls asleep +[1518-04-21 00:39] wakes up +[1518-06-04 00:30] wakes up +[1518-11-21 00:09] falls asleep +[1518-06-13 00:35] falls asleep +[1518-09-30 00:34] falls asleep +[1518-11-09 00:33] wakes up +[1518-07-03 00:02] falls asleep +[1518-03-31 00:50] wakes up +[1518-05-08 00:51] falls asleep +[1518-08-16 00:57] wakes up +[1518-10-23 23:58] Guard #3119 begins shift +[1518-09-15 00:03] Guard #1297 begins shift +[1518-05-20 00:48] falls asleep +[1518-10-01 00:49] wakes up +[1518-11-08 00:00] Guard #1021 begins shift +[1518-05-20 00:01] falls asleep +[1518-07-29 00:02] Guard #1231 begins shift +[1518-09-17 00:51] wakes up +[1518-02-23 00:22] falls asleep +[1518-02-26 00:41] wakes up +[1518-02-26 00:13] falls asleep +[1518-04-02 00:38] falls asleep +[1518-05-06 23:51] Guard #1033 begins shift +[1518-06-18 00:59] wakes up +[1518-06-28 00:50] wakes up +[1518-02-24 00:28] wakes up +[1518-08-21 00:14] falls asleep +[1518-03-10 00:31] falls asleep +[1518-05-06 00:03] falls asleep +[1518-11-13 00:21] falls asleep +[1518-09-19 00:01] Guard #1901 begins shift +[1518-03-12 00:12] falls asleep +[1518-10-22 00:48] wakes up +[1518-08-17 00:03] falls asleep +[1518-04-06 00:47] wakes up +[1518-07-16 00:18] falls asleep +[1518-06-02 00:46] wakes up +[1518-04-23 00:17] wakes up +[1518-11-18 00:53] wakes up +[1518-10-09 00:57] falls asleep +[1518-03-06 00:02] falls asleep +[1518-10-30 00:28] falls asleep +[1518-11-16 00:03] Guard #2129 begins shift +[1518-02-20 23:57] Guard #1193 begins shift +[1518-06-14 00:30] wakes up +[1518-05-04 00:26] falls asleep +[1518-06-30 00:46] wakes up +[1518-07-27 00:39] wakes up +[1518-06-05 00:36] wakes up +[1518-03-15 00:57] wakes up +[1518-10-21 23:56] Guard #1193 begins shift +[1518-04-04 00:32] falls asleep +[1518-08-22 23:51] Guard #1993 begins shift +[1518-05-12 00:11] falls asleep +[1518-10-18 00:50] wakes up +[1518-08-27 00:51] falls asleep +[1518-10-17 23:49] Guard #3119 begins shift +[1518-09-24 00:49] wakes up +[1518-04-25 00:59] wakes up +[1518-03-23 00:27] falls asleep +[1518-05-27 00:01] Guard #1171 begins shift +[1518-10-24 00:55] wakes up +[1518-06-30 00:03] falls asleep +[1518-10-11 00:50] falls asleep +[1518-09-05 00:53] falls asleep +[1518-08-23 00:00] falls asleep +[1518-06-29 00:27] falls asleep +[1518-03-05 00:06] falls asleep +[1518-03-09 00:14] falls asleep +[1518-09-22 00:04] falls asleep +[1518-10-27 23:59] Guard #1021 begins shift +[1518-10-30 00:52] wakes up +[1518-09-18 00:58] wakes up +[1518-06-18 00:32] wakes up +[1518-11-01 00:31] falls asleep +[1518-04-08 00:54] wakes up +[1518-03-13 00:52] wakes up +[1518-07-08 00:47] falls asleep +[1518-05-09 00:50] falls asleep +[1518-10-31 00:33] falls asleep +[1518-03-20 00:51] wakes up +[1518-09-11 00:02] Guard #3119 begins shift +[1518-09-12 00:58] wakes up +[1518-10-26 23:46] Guard #3499 begins shift +[1518-07-26 00:13] falls asleep +[1518-03-27 00:31] wakes up +[1518-09-20 00:30] falls asleep +[1518-07-27 00:47] wakes up +[1518-11-19 00:17] falls asleep +[1518-07-29 00:28] falls asleep +[1518-07-30 00:59] wakes up +[1518-05-03 23:53] Guard #1297 begins shift +[1518-08-11 23:58] Guard #1297 begins shift +[1518-05-14 23:48] Guard #3119 begins shift +[1518-07-26 00:00] Guard #1171 begins shift +[1518-03-18 00:15] falls asleep +[1518-06-14 00:09] falls asleep +[1518-03-24 23:54] Guard #1553 begins shift +[1518-04-07 00:54] wakes up +[1518-05-04 00:01] falls asleep +[1518-02-15 00:55] wakes up +[1518-04-20 00:11] falls asleep +[1518-07-12 00:10] falls asleep +[1518-03-15 00:46] wakes up +[1518-06-20 00:26] wakes up +[1518-05-30 00:34] falls asleep +[1518-03-07 23:58] Guard #2539 begins shift +[1518-04-23 00:42] falls asleep +[1518-08-06 00:37] wakes up +[1518-09-26 00:47] falls asleep +[1518-05-10 23:59] Guard #2447 begins shift +[1518-06-04 00:12] falls asleep +[1518-06-23 00:44] wakes up +[1518-02-16 00:17] falls asleep +[1518-02-18 00:49] falls asleep +[1518-05-25 00:45] falls asleep +[1518-06-02 23:59] Guard #2963 begins shift +[1518-03-10 00:00] Guard #2963 begins shift +[1518-11-08 00:50] wakes up +[1518-10-24 00:29] falls asleep +[1518-06-09 00:51] falls asleep +[1518-11-20 23:56] Guard #1901 begins shift +[1518-02-12 00:04] Guard #1901 begins shift +[1518-02-27 23:58] Guard #1021 begins shift +[1518-11-22 00:13] falls asleep +[1518-09-20 00:48] falls asleep +[1518-06-15 00:05] falls asleep +[1518-04-26 23:58] Guard #1901 begins shift +[1518-10-14 00:37] wakes up +[1518-10-04 00:19] falls asleep +[1518-03-13 00:02] Guard #1033 begins shift +[1518-06-13 00:00] falls asleep +[1518-04-03 00:02] Guard #1033 begins shift +[1518-06-14 23:52] Guard #1553 begins shift +[1518-09-27 00:36] falls asleep +[1518-02-24 00:25] falls asleep +[1518-02-21 00:35] wakes up +[1518-10-21 00:42] wakes up +[1518-08-16 00:25] falls asleep +[1518-07-14 00:28] falls asleep +[1518-10-03 00:01] falls asleep +[1518-05-15 00:02] falls asleep +[1518-09-02 00:27] wakes up +[1518-03-11 00:18] falls asleep +[1518-07-28 00:48] wakes up +[1518-09-13 00:53] falls asleep +[1518-09-18 00:04] Guard #1021 begins shift +[1518-07-23 00:41] wakes up +[1518-10-14 00:40] falls asleep +[1518-11-03 00:30] falls asleep +[1518-03-10 00:41] wakes up +[1518-10-11 00:44] wakes up +[1518-05-07 00:38] wakes up +[1518-07-19 23:50] Guard #1993 begins shift +[1518-08-01 00:17] falls asleep +[1518-05-28 00:47] wakes up +[1518-04-06 00:29] falls asleep +[1518-10-18 00:13] falls asleep +[1518-11-03 00:51] wakes up +[1518-07-19 00:03] Guard #3119 begins shift +[1518-09-21 00:14] falls asleep +[1518-08-31 00:04] falls asleep +[1518-06-10 00:52] falls asleep +[1518-07-17 00:58] wakes up +[1518-08-08 00:31] falls asleep +[1518-09-22 00:41] wakes up +[1518-05-04 00:52] falls asleep +[1518-02-12 00:52] wakes up +[1518-11-23 00:20] wakes up +[1518-08-25 00:54] wakes up +[1518-02-11 00:43] falls asleep +[1518-06-30 00:35] falls asleep +[1518-10-29 00:59] wakes up +[1518-10-14 00:02] Guard #1297 begins shift +[1518-08-02 00:00] Guard #2707 begins shift +[1518-07-12 00:01] Guard #2963 begins shift +[1518-08-20 00:54] wakes up +[1518-10-17 00:53] falls asleep +[1518-07-31 00:56] wakes up +[1518-05-05 00:50] wakes up +[1518-08-10 00:31] falls asleep +[1518-09-20 00:35] wakes up +[1518-11-16 00:44] falls asleep +[1518-07-11 00:12] wakes up +[1518-11-11 00:58] wakes up +[1518-05-19 23:50] Guard #1901 begins shift +[1518-11-07 00:14] falls asleep +[1518-11-21 00:58] wakes up +[1518-09-10 00:00] Guard #2129 begins shift +[1518-09-11 00:21] falls asleep +[1518-04-09 23:56] Guard #2729 begins shift +[1518-08-24 00:12] wakes up +[1518-11-17 00:26] wakes up +[1518-10-08 00:54] wakes up +[1518-11-16 00:58] wakes up +[1518-07-19 00:20] falls asleep +[1518-04-21 00:49] wakes up +[1518-09-13 00:57] wakes up +[1518-03-12 00:39] wakes up +[1518-03-28 00:03] Guard #3499 begins shift +[1518-11-18 00:19] falls asleep +[1518-08-10 00:50] wakes up +[1518-03-21 00:39] wakes up +[1518-03-13 00:51] falls asleep +[1518-03-02 00:16] falls asleep +[1518-02-19 00:00] Guard #3499 begins shift +[1518-04-04 00:53] wakes up +[1518-07-09 00:03] falls asleep +[1518-04-11 00:50] wakes up +[1518-08-13 00:37] falls asleep +[1518-05-11 00:55] falls asleep +[1518-09-26 00:02] Guard #1901 begins shift +[1518-08-24 00:24] falls asleep +[1518-07-16 00:26] falls asleep +[1518-08-19 00:19] falls asleep +[1518-10-20 00:34] wakes up +[1518-03-28 00:07] falls asleep +[1518-04-08 00:10] falls asleep +[1518-04-01 00:14] falls asleep +[1518-06-09 23:50] Guard #1033 begins shift +[1518-10-13 00:01] Guard #3119 begins shift +[1518-07-24 00:46] wakes up +[1518-10-13 00:10] falls asleep +[1518-08-26 00:25] falls asleep +[1518-09-02 00:13] falls asleep +[1518-05-30 23:58] Guard #1723 begins shift +[1518-11-05 00:54] wakes up +[1518-11-18 00:57] wakes up +[1518-07-22 00:53] wakes up +[1518-02-15 23:57] Guard #2383 begins shift +[1518-09-10 00:30] falls asleep +[1518-11-17 00:08] falls asleep +[1518-11-06 00:25] falls asleep +[1518-08-15 00:42] wakes up +[1518-08-22 00:29] wakes up +[1518-06-15 00:30] wakes up +[1518-08-18 00:59] wakes up +[1518-06-06 00:20] falls asleep +[1518-11-07 00:32] wakes up +[1518-05-29 00:03] Guard #1193 begins shift +[1518-06-13 00:55] wakes up +[1518-11-03 00:04] Guard #3371 begins shift +[1518-06-21 00:58] wakes up +[1518-06-19 00:47] falls asleep +[1518-10-09 00:54] wakes up +[1518-03-22 00:39] falls asleep +[1518-10-09 23:48] Guard #1993 begins shift +[1518-08-15 00:22] falls asleep +[1518-04-24 00:02] Guard #1193 begins shift +[1518-05-27 00:35] wakes up +[1518-10-13 00:39] wakes up +[1518-08-28 00:22] wakes up +[1518-09-01 00:23] falls asleep +[1518-08-09 00:47] wakes up +[1518-11-15 00:27] falls asleep +[1518-03-28 23:59] Guard #3371 begins shift +[1518-10-26 00:59] wakes up +[1518-02-27 00:01] Guard #1021 begins shift +[1518-03-04 00:23] wakes up +[1518-04-19 00:54] wakes up +[1518-06-12 00:41] wakes up +[1518-03-18 00:52] wakes up +[1518-10-11 23:57] Guard #2729 begins shift +[1518-08-09 00:12] falls asleep +[1518-04-27 23:56] Guard #1193 begins shift +[1518-07-25 00:51] falls asleep +[1518-04-28 00:57] wakes up +[1518-03-23 00:52] wakes up +[1518-11-12 00:57] wakes up +[1518-02-26 00:03] Guard #1993 begins shift +[1518-07-13 00:45] wakes up +[1518-10-22 00:14] falls asleep +[1518-10-31 00:43] falls asleep +[1518-04-02 00:50] wakes up +[1518-08-16 23:50] Guard #2729 begins shift +[1518-03-03 00:08] falls asleep +[1518-05-01 00:04] Guard #1231 begins shift +[1518-03-24 00:56] falls asleep +[1518-08-24 23:57] Guard #3119 begins shift +[1518-10-30 00:46] wakes up +[1518-06-09 00:59] wakes up +[1518-11-10 23:48] Guard #1021 begins shift +[1518-11-05 23:58] Guard #2729 begins shift +[1518-08-13 00:04] Guard #1171 begins shift +[1518-06-07 23:54] Guard #2383 begins shift +[1518-02-12 00:38] wakes up +[1518-05-18 00:55] wakes up +[1518-10-17 00:45] wakes up +[1518-06-14 00:14] wakes up +[1518-09-16 23:59] Guard #1193 begins shift +[1518-07-29 00:52] wakes up +[1518-03-05 23:50] Guard #1231 begins shift +[1518-03-19 23:46] Guard #2707 begins shift +[1518-03-04 00:59] wakes up +[1518-10-09 00:59] wakes up +[1518-09-26 00:52] wakes up +[1518-07-23 00:19] falls asleep +[1518-03-15 00:04] Guard #2383 begins shift +[1518-04-16 00:01] Guard #283 begins shift +[1518-06-14 00:01] Guard #2963 begins shift +[1518-11-05 00:01] Guard #2447 begins shift +[1518-07-08 00:57] wakes up +[1518-07-08 23:51] Guard #1171 begins shift +[1518-04-18 00:42] wakes up +[1518-07-29 00:57] falls asleep +[1518-09-21 00:26] falls asleep +[1518-04-12 23:53] Guard #1231 begins shift +[1518-08-05 00:03] Guard #3499 begins shift +[1518-02-28 00:52] wakes up +[1518-03-29 00:57] wakes up +[1518-10-11 00:07] falls asleep +[1518-09-18 00:12] falls asleep +[1518-02-27 00:13] wakes up +[1518-06-22 00:25] falls asleep +[1518-06-01 00:01] Guard #2729 begins shift +[1518-10-27 00:05] falls asleep +[1518-10-04 23:59] Guard #3119 begins shift +[1518-06-10 23:53] Guard #1901 begins shift +[1518-03-19 00:56] wakes up +[1518-04-21 23:58] Guard #2707 begins shift +[1518-06-05 00:33] falls asleep +[1518-10-19 00:54] wakes up +[1518-05-12 23:59] Guard #3371 begins shift +[1518-05-15 00:05] wakes up +[1518-05-03 00:57] wakes up +[1518-05-05 00:01] falls asleep +[1518-05-30 00:00] Guard #3499 begins shift +[1518-07-15 00:31] wakes up +[1518-10-08 00:36] falls asleep +[1518-09-03 00:02] Guard #1993 begins shift +[1518-06-03 00:39] falls asleep +[1518-05-13 23:57] Guard #419 begins shift +[1518-10-02 23:53] Guard #1231 begins shift +[1518-07-26 00:52] wakes up +[1518-05-07 00:03] falls asleep +[1518-06-01 00:55] wakes up +[1518-07-25 00:14] falls asleep +[1518-09-23 00:41] wakes up +[1518-08-02 00:57] wakes up +[1518-11-01 00:56] wakes up +[1518-10-18 00:03] wakes up +[1518-04-11 00:04] Guard #1297 begins shift +[1518-03-11 00:26] falls asleep +[1518-09-26 00:55] falls asleep +[1518-05-21 00:34] wakes up +[1518-10-19 00:20] falls asleep +[1518-06-12 00:18] falls asleep +[1518-06-02 00:51] wakes up +[1518-04-13 23:59] Guard #1193 begins shift +[1518-03-27 00:39] wakes up +[1518-03-31 00:00] falls asleep +[1518-07-05 00:37] falls asleep +[1518-05-28 00:59] wakes up +[1518-08-27 00:44] wakes up +[1518-04-21 00:22] wakes up +[1518-11-13 23:53] Guard #2963 begins shift +[1518-05-23 00:50] wakes up +[1518-10-14 00:53] wakes up +[1518-04-27 00:53] wakes up +[1518-11-12 23:58] Guard #1193 begins shift +[1518-11-01 00:00] Guard #2129 begins shift +[1518-07-01 00:10] falls asleep +[1518-08-31 00:20] wakes up +[1518-10-09 00:04] Guard #2129 begins shift +[1518-09-13 00:04] falls asleep +[1518-09-16 00:57] wakes up +[1518-10-15 00:00] Guard #1901 begins shift +[1518-08-29 00:03] Guard #2707 begins shift +[1518-09-01 00:04] Guard #2707 begins shift +[1518-09-23 00:02] Guard #3499 begins shift +[1518-05-19 00:55] wakes up +[1518-06-20 00:09] falls asleep +[1518-04-20 23:57] Guard #1231 begins shift +[1518-06-05 00:04] Guard #3371 begins shift +[1518-10-26 00:48] wakes up +[1518-02-11 00:28] wakes up +[1518-05-06 00:57] wakes up +[1518-04-10 00:36] falls asleep +[1518-04-28 00:47] falls asleep +[1518-09-01 00:51] wakes up +[1518-02-22 00:20] falls asleep +[1518-03-23 23:56] Guard #1297 begins shift +[1518-03-15 23:46] Guard #2729 begins shift +[1518-07-16 00:49] wakes up +[1518-07-24 23:57] Guard #1553 begins shift +[1518-09-03 00:40] falls asleep +[1518-04-10 00:45] wakes up +[1518-03-19 00:00] Guard #1901 begins shift +[1518-07-08 00:41] wakes up +[1518-08-27 00:43] falls asleep +[1518-11-19 00:01] Guard #1231 begins shift +[1518-05-17 00:49] wakes up +[1518-02-11 00:52] wakes up +[1518-10-09 00:33] falls asleep +[1518-04-30 00:04] falls asleep +[1518-07-18 00:41] wakes up +[1518-06-05 23:59] Guard #2539 begins shift +[1518-10-04 00:44] wakes up +[1518-03-26 00:14] wakes up +[1518-09-12 00:27] falls asleep +[1518-10-26 00:03] Guard #1901 begins shift +[1518-06-12 00:28] falls asleep +[1518-03-30 00:48] wakes up +[1518-03-28 00:43] falls asleep +[1518-11-03 00:26] wakes up +[1518-05-05 23:52] Guard #2129 begins shift +[1518-03-21 23:59] Guard #1193 begins shift +[1518-09-22 00:23] falls asleep +[1518-06-09 00:44] falls asleep +[1518-07-21 00:09] falls asleep +[1518-05-16 00:43] falls asleep +[1518-05-01 00:51] wakes up +[1518-03-09 00:01] Guard #2729 begins shift +[1518-07-07 23:56] Guard #419 begins shift +[1518-05-10 00:03] Guard #2539 begins shift +[1518-08-19 23:57] Guard #1171 begins shift +[1518-06-17 00:16] falls asleep +[1518-09-19 00:20] falls asleep +[1518-06-26 00:49] falls asleep +[1518-03-27 00:37] falls asleep +[1518-07-16 00:41] falls asleep +[1518-02-21 00:11] falls asleep +[1518-08-06 00:01] Guard #3119 begins shift +[1518-09-21 23:50] Guard #1171 begins shift +[1518-10-03 00:49] wakes up +[1518-09-07 00:30] wakes up +[1518-04-07 00:41] falls asleep +[1518-02-16 00:35] wakes up +[1518-05-20 00:34] wakes up +[1518-10-06 00:36] falls asleep +[1518-02-23 00:02] Guard #1901 begins shift +[1518-06-10 00:02] falls asleep +[1518-06-27 00:29] falls asleep +[1518-09-18 00:17] falls asleep +[1518-02-24 23:47] Guard #419 begins shift +[1518-04-10 00:39] wakes up +[1518-03-22 00:57] wakes up +[1518-09-03 00:46] falls asleep +[1518-02-13 00:11] falls asleep +[1518-07-05 00:02] Guard #1553 begins shift +[1518-03-07 00:16] falls asleep +[1518-02-25 00:49] wakes up +[1518-09-03 00:47] wakes up +[1518-11-02 00:02] Guard #2729 begins shift +[1518-06-04 00:40] falls asleep +[1518-05-03 00:55] falls asleep +[1518-09-26 00:58] wakes up +[1518-11-07 00:58] wakes up +[1518-09-30 00:55] wakes up +[1518-02-27 00:22] falls asleep +[1518-10-12 00:35] falls asleep +[1518-06-21 00:01] Guard #1033 begins shift +[1518-09-05 00:59] wakes up +[1518-07-19 00:40] wakes up +[1518-04-05 00:42] wakes up +[1518-11-22 23:56] Guard #2447 begins shift +[1518-05-22 00:47] wakes up +[1518-05-24 00:01] falls asleep +[1518-05-23 00:15] falls asleep +[1518-06-17 00:50] wakes up +[1518-06-26 00:34] wakes up +[1518-10-10 00:05] falls asleep +[1518-06-19 00:58] wakes up +[1518-05-13 00:18] falls asleep +[1518-09-23 00:17] falls asleep +[1518-09-20 23:57] Guard #1901 begins shift +[1518-08-07 23:58] Guard #3119 begins shift +[1518-05-21 00:59] wakes up +[1518-06-18 00:31] falls asleep +[1518-05-24 00:25] falls asleep +[1518-06-09 00:26] wakes up +[1518-04-22 00:34] wakes up +[1518-09-05 00:00] Guard #2539 begins shift +[1518-05-14 00:50] wakes up +[1518-11-09 00:56] wakes up +[1518-10-26 00:26] falls asleep +[1518-02-15 00:14] falls asleep +[1518-07-13 00:44] falls asleep +[1518-03-03 23:59] Guard #2447 begins shift +[1518-07-27 23:57] Guard #1231 begins shift +[1518-02-23 00:56] wakes up +[1518-02-20 00:02] Guard #1231 begins shift +[1518-10-10 23:56] Guard #1901 begins shift +[1518-10-24 23:59] Guard #2383 begins shift +[1518-03-19 00:51] falls asleep +[1518-10-10 00:41] wakes up +[1518-03-16 00:00] falls asleep +[1518-08-13 00:24] falls asleep +[1518-11-12 00:28] falls asleep +[1518-09-15 00:54] wakes up +[1518-07-11 00:34] falls asleep +[1518-02-15 00:00] Guard #1033 begins shift +[1518-05-23 23:51] Guard #1297 begins shift +[1518-05-25 00:01] Guard #1231 begins shift +[1518-04-14 00:42] wakes up +[1518-06-11 00:38] wakes up +[1518-02-10 23:47] Guard #1033 begins shift +[1518-07-10 00:58] wakes up +[1518-05-15 00:09] falls asleep +[1518-07-20 00:56] wakes up +[1518-08-01 00:04] Guard #2729 begins shift +[1518-03-24 00:52] wakes up +[1518-04-02 00:03] Guard #2447 begins shift +[1518-09-06 00:00] Guard #1193 begins shift +[1518-03-04 00:20] falls asleep +[1518-08-01 00:39] falls asleep +[1518-04-26 00:00] falls asleep +[1518-08-20 00:48] falls asleep +[1518-06-12 00:57] wakes up +[1518-07-16 00:01] Guard #1021 begins shift +[1518-08-21 00:00] Guard #3119 begins shift +[1518-03-07 00:53] wakes up +[1518-07-21 00:49] wakes up +[1518-06-29 00:47] wakes up +[1518-10-31 00:14] falls asleep +[1518-05-08 23:58] Guard #1993 begins shift +[1518-09-19 23:59] Guard #1297 begins shift +[1518-08-23 23:48] Guard #419 begins shift +[1518-06-29 00:21] wakes up +[1518-04-17 23:57] Guard #3371 begins shift +[1518-11-20 00:08] falls asleep +[1518-04-05 00:23] falls asleep +[1518-06-22 00:03] Guard #1901 begins shift +[1518-09-04 00:39] falls asleep +[1518-03-16 00:02] wakes up +[1518-11-19 00:50] wakes up +[1518-06-12 23:50] Guard #1033 begins shift +[1518-10-16 00:00] Guard #1021 begins shift +[1518-03-11 00:03] Guard #1231 begins shift +[1518-03-16 23:46] Guard #2707 begins shift +[1518-05-25 00:11] falls asleep +[1518-04-04 23:57] Guard #1021 begins shift +[1518-05-07 00:42] falls asleep +[1518-05-30 00:28] wakes up +[1518-10-07 00:01] Guard #283 begins shift +[1518-09-28 23:58] Guard #1901 begins shift +[1518-11-18 00:49] wakes up +[1518-07-15 00:13] falls asleep +[1518-09-12 00:01] Guard #2539 begins shift +[1518-05-04 00:38] falls asleep +[1518-04-11 00:33] falls asleep +[1518-08-05 00:51] falls asleep +[1518-04-18 23:59] Guard #2729 begins shift +[1518-03-26 00:05] falls asleep +[1518-10-29 00:24] wakes up +[1518-07-02 00:53] wakes up +[1518-05-17 23:56] Guard #1297 begins shift +[1518-05-25 00:20] wakes up +[1518-10-15 00:49] falls asleep +[1518-11-02 00:41] falls asleep +[1518-08-01 00:48] wakes up +[1518-04-29 23:50] Guard #3119 begins shift +[1518-11-12 00:07] falls asleep +[1518-09-01 00:27] wakes up +[1518-05-17 00:03] Guard #3119 begins shift +[1518-04-08 00:02] Guard #1901 begins shift +[1518-06-02 00:49] falls asleep +[1518-05-08 00:03] falls asleep +[1518-11-09 00:40] falls asleep +[1518-10-08 00:04] falls asleep +[1518-10-19 00:58] wakes up +[1518-09-04 00:18] wakes up +[1518-10-26 00:52] wakes up +[1518-03-13 00:19] wakes up +[1518-06-06 00:47] wakes up +[1518-08-09 00:25] wakes up +[1518-10-23 00:31] wakes up +[1518-10-02 00:18] falls asleep +[1518-03-27 00:17] falls asleep +[1518-07-08 00:11] falls asleep +[1518-05-11 00:45] wakes up +[1518-07-10 23:51] Guard #1171 begins shift +[1518-03-04 00:43] falls asleep +[1518-04-10 00:43] falls asleep +[1518-05-15 00:15] wakes up +[1518-09-08 00:51] wakes up +[1518-11-10 00:22] falls asleep +[1518-09-09 00:30] falls asleep +[1518-07-16 00:22] wakes up +[1518-10-30 23:58] Guard #3371 begins shift +[1518-04-27 00:48] falls asleep +[1518-03-28 00:38] wakes up +[1518-05-04 00:29] wakes up +[1518-04-28 23:59] Guard #1021 begins shift \ No newline at end of file diff --git a/data/2018_05_data.txt b/data/2018_05_data.txt new file mode 100644 index 0000000..090d6f3 --- /dev/null +++ b/data/2018_05_data.txt @@ -0,0 +1 @@ +HKkOohaAXxHrjUbByYuFfJMmOoZdDWVGgvwzZzUuUrRueERkIiKhnNpPdDXTtxMmwLlWGBbgTtoOmHOofSsFhrwWRWwytTwgGrRWYdcCUYyuqQHhpPiILPaApeElEeaAjJVvoiICIicdDOmnNMNZznoOgJmMFfjcCCcxXAaWiIwyYWwaAakBbLlJRrBbbBQqXrRNnHhcvVCxZzjKnrRNsSgGvVMmrqQWaAXxwRaAbHhBLlfkKCmMchiIHwRZJUujVvMmzrPsSpWZyYAaznHhNlLTtfSssSFuYjJyUWVvLlwqWZzqdDvVQNDdnzZGzZFqQfXxoOuUCcgRrSsHhbFfJPpjBdDyllLLdOoBXxtTqQRdDrrRbAalLyYvVqQYoOyDrRfFfFKZzkXxxAyAGgRNnrrRbJjzZWwBPpzZnNaYvVUsJjSRgHeEEehwWGrvVuZzfSsJjFaoOXesSDdHhwWEHwWMKkmkKeEABZzbahtTHhMpPxxXbTttTBhHXVvlLNngGyYvVpXxERrewiIVYyvWzTtEesuaAXxUUuuUSPpKqQwWkNnrBbRrRXVZzvjJAaIluULJjixoPpVvDdrQqRzfpPHRrhqQISsirwWNYynaARrzxXpPxXuURUulLrSswkKWLDdRFfrrRssShtTHNnkKYYylLlGieElLIgLqQIiySQsSqmMyYwWyIioOYbBlZMdDmnNzBQqbUfFuCcGYEeIiEeuUOqQoypPnNMmbBgHLlKdDkFqQfEAaeQBbqYbBnNPpyAHkvVfFgKkGIiKhuUFfaMmsLltTLOqQochfFgBbGHiICiIYEeUDdSssSKZzkaAuDdWeEweErRySZlLpoOPzpPjSiIsUuJjJPpkKDdAasxtTXCtTclDddlLDeEgkjJKrhHUBxXbVvDdhHNSsMhHmNnqNnsPpSoOQRrBFBbvKkBbkSsKQeEqqQQyYyYYrRyZPpzDdCNsSnwWGgcqxXCtNnTcOJjqCchHQegGEeEJjSsjdCcOoWwyVvYlLDnsSKnNkNKkQqAaJAaqQYTtDdSsipPItTyRKkrBdDblGWwJjganNABTtbLCcNNndnNDkKdzZDWwzaAZEeUdDzBbZrPpRHKkVDXxdvhoOWhHnNjZzJwkJjyYJjKLpPlvVMmRyCcnNYRrAfFtTbiINOonuUBEenNaCctpPTCTmMaAttrRTrVvCcpPTtRRJjrmMcnNnNnNpPrvrRgGcClUuLjJQqfkKxXWmXxMrkKIDdiRwFrbBRzYyZVfNnFKWwvVOokdDoUfLleEJjFuUUuNnJjbBEPcCrRkKmMpeEUubBeGgQRrqrhNnxuZzjJUPpcCLzZlXHeEHzfFaAZiNxXnqQEeIiFfIUulLGgTtHhwWhsCiIcgGWbYWwTtyBAfFlLfgZzGFXxGgOolLAaabBbShoODdHAatbUuDdvVTlVvLVvkPeEpKORSsrntTNCJjchKkEbBefFDMmdHhmMHFGgpPnNRrnNDOVkKHhXNnxvPrRMjJmpdDCcAalLEeybBYrQngVvjIiJGcKKEnNtTiTTttIyYejkgkKGKJkhHjvNaAaAnVJkKRriIjJhHvSsVQlLqTMUuitTImyYthIzFfZiyPpYHlgGLWwKCckKkzZbBNniHhwWRrfjJFrRyYtTbBZjQqdDGgTtWwJBbQqPpLbBlNhHnQqjXxJdDjKkpuUPlLAvREeryUurRxXYbGFfPpGgUuoqQNnOYXxHhsSTYhHhHytJbEJjehHBjgGGgsSyykKYYHNnhzZuUzzZRNnfFTtrjJeEZuUcCnvVNoOTtebBMmEcCPbaATzwWZtSOoCcjEeDXxdMcOoyYtTEeXCHhcjJZzUnNeEAadWwIiwWDsnNSupPxKkBbFmMcCiIrQqRygGOTtfOoFTtGgXxEeiILSsloVvJEkKXoOeExejrOoLiIMmUulTGKkOoaAhHCUuKkHhcoGgOTtCciIYyYygVvkKkKDvjJdlnNSceECsLcCDNwWVvnLxdDQqXxUuedDEkKXfFWwLVvlsSdDkKdDvwWMyYJjmPpjJVzZcCIigiIGgoOXpPxdDkKcClLVvpPIPpihHKkIbNnBPqjJQpGglGgnNLZXxziMlkKLsNnSxKwCcWkXpcmcCMCtTxXPoQqiIaiIzZnNAOMmckKCryYRcmMWkKwCzZmPpoOtTqNnxXLIilzpPZbrRJjIiuUBQMXxPPuUpZzpmpPOXxoMoOBHhbgPpGmeECcDdgGYGgiIJjyOomcBbsEeEexWnNlLOowXNntTjJAaqwWdvVtLlOopPeERrmMCcTeFfZbPRrpxyYhHcCWhHwaAhhHHthHTXjJcCsSeSsunNUdnlfqdBbDrRUuQFQqRLIBbiRroOccCkKSsCxXlQkxXLlKqiIsSWwmMrRrRrfiGgIGsSXAaLlsSxgfFpPlDdLxXkKJjFJClLjJcjLKZzkkKMmkYMmyIHhiJjmXszbBenqQJjIiWwNEvVKZzkMmaqQlLRronOoTtNfUuFhDdHbBUFfjJuMhHmvyCcYLoOyYlVxXGifFeEPpIbiIDdSqQsCckKRrAaqSPpsQBjJbEedDgGBYYynOBboNEEeeaqQeEAxXFfaTtFfwWrRAvPNnbRrBDLVvlPpHPpKkhxXpZzpPPjJdGkpPkKKgGgYyMnNerRbnZzqQNwWmMwOoObwxjJXkKxFfavAUuaVQqiIVvhHZzAQouLlKkDTtdJARramMjUxXOqdDjJorJjlLRhkKHOCcsSiIhHfMjJKkmFWxXwzZXtTcCLlWkKBaALlKkotrwWxXAaREeeEgGJpPjCcLlzZAasSiphCECcecPpYypYyJvVjuUfFrGglLMmdDRBNnbmiIpyYPyvcsSCVAaveEFRrbBfnNgDdLIoOUKkuUumMiHhlvVXeEsStTyYxGcdDtBbTUrwUVksvVSKxXvIiuqQoOQqJjWRMaAGOogmrsSRqQFfcCgXxAaPpogYyGJjrRQHhulLUqOGvVPpvVRrFWwfrpfFeIiWwSTRrtsNzeErELleRHhnvUusSVjaAcCJNAaVJzZjvsSoRrORrZoOqSsSoQqfFOmsSbByYRwWMmrMYcCyPpsufFMMjJmldlLDpPPWfUuPPpxXpQvVMmqqSnNsQMmFRrwWwWwzjuUJoAaZzOZpPpPrRMmdfXxFDXJjxfFEeOyJjqQhJQhHQGgcIiCqUCcujJbBqCmPpMdZhHiIeExZzDOodlLHjJfUOoNnLIiIVIiviDduUlAayYWTFftPpwLlCQqPpcLRkSvVsKrdDLlhHgiIDpXxOoPCYyDrRdSscdkmPpMKlgnNnVvNOzZVvJgGTtHhnNjoMmzZdkKDIkKiBvlLVoObGcCRLrgGTiHhtTNnVvYySkKLlsFfItBbYrRyYqQHhOWuUkiUuSRrsIWwcwWHhCGNngCUuSciIJjRrRQqrLlCqbGgbQqWwJjBZztThHRxXrWPeEmMpRBbbGgBIAaiWgqQHhRrIiGjTBbZzZgGdDVvMcqQiICWGgwLlmzgdUTtEeuHhDaAGfoOFFfUHhuSiIsXIZjPpzZJSsoGgQfFqOhHhMmLlUucCHpdDPmMvVmMlLoDhUuHeuUEuUdMmgtIiVrRvjJSsdBYybPtAHpPhMPpmtfFaAHuVvUAagGGIQqilzZLmHhMgCtTmMyYvEXxWwrFeEfeJjEeEdDRsgGSKkgGOoMXxaAXHhxMmMQrRKkMVvaAyYmSsuwWUUuBozZObZmMxXzBbKkqQUuqmOZzdcCDMmBbzZdDpPQqvVTtmcCpIinMJssSSjeERUuCcNnVapPAvqMmglLGSsxNnQFLlzBlQqjJrRfFLekKEdDVvuUNnTtcwiIbBKkmMWgGxFfXkKVvCFfMUumcCTtEeNnSsLlMmWwPpIiPpoZzODmMcXxClLdeEcCLMmQqEmfFwWpPejJlVvLEeUucHhRrCIiJjWwEeUChHcuLDdlxXHhBzLlNniIZLfFldpPDAyYNKknpPNdDUuyzZECcQhHbBqHMEemhFsSfeYuUfMqQmtOFfgGoHhTnNMmFnINniwWaAhXmMuOofeEgyEeoOuUcCYKkOoCtTGgcWkKWwwlQEeXxwoOWdAaPpoAaOwaANoOnNKkiIyYnVvWWmMIZrOowwWWRjJnCDdcNftGgHhFfPsSayYAjJpaAFfHZzrRhzZPijUOouJxXXxXIzZJnNSscCDdNnQqrRYPMSrNWwnNneVuZzUYzzZZQOoFfqQqcCoOnNyLRrlPTtkKXxgFfOOrkKsSRooDRcYypPiDewHoOhyrRiInNUuoOSVioOIRrbBHqQhoOUPyYHhFfpuvpJxXjUTQWwqpPljkKkKJwDdDKkDdlSsoOyYLrCcOoVAagGLgGnWGgwNlzZvCdDcEeqQqQzZWwOoKbBzuUlLZZzTtDkKdxXbBcCCcQqiuUUucCIKkeEZWATtZzawmVvBtTLhgGUuyzZYgGHDdlQzZqHhYzZtEOoVdDvKdDdDkeTQqysSpPOVPRrNKkESsikKuUCGgZmuIiKsSkuiBbISsyYvVXxEqQNnEwWOJjoRresvVlvVGgNYoOKkykKQqZznqQLmzZpPMkEeOpPUAaUuueEANnbQTtqtjJTBndDNOFfaASsrbBRbBPpoFsSfEetQqTUueEDAnNaTtIiiISLGglhHZzjJZgdDDdGzWwZwDdWtTtoOBbTagDdOoKCcuUkGAoOgGdDsSooWzXxZAoOaWUuwzgprRPSmMdDJjZbBzNfIiFpPfWgGwzZcbbBqQBzJjTtZrSfnAaNtTtTJNnlLzRKkjJVsSOoWwRrvhBbHXOorRxiIsRrmMSwWJxyYAaDxXuFfpPUkTtBbKhjBueEUbcChoOHCJjcSkGgKsJoOosSBbNOonBbAHhaOnNLrRlYnNJjyDdsdGgDoORsSZhHbfFBGgRZzvVrcCMmzokKOwIQqjRrJgGEebYxXSsyBiHiIqCcQJPwHKuUQqkPpPeEphDuNnrRMmUdQqvVcCWwWzZOoOYylLopjJTiItQgIatTtDdTKkAYyiNngUuGgLlLlMWlqLlcsSKmRGkAaQqKuQYyqpPuUXxNnQqHhvVlLuUOoFfMfRYJjAaHhyJjDVvNnxQqXGgdxIXxiLlWpCcvVKHjJhyYJjbqQNbBOXxoIinJjyYKkamMJjAIWwiGsSgUuKgyYGkBpPbBrRUVtTCcvzZuUDdzQqlpPXxySsIDdfFdiIaAOoWwdDDwWIiYybBmBlEeVzZvsSuUgGwWMMmAyYAdDFfatMmTKNnkamLPHhpdVvCcDaAaAlLnNuRrUNxXKkTtPpsDNneBmMPpSsblxfDIiscCSdWwXxcWwCFXaALEHhaRkAaRrKyYDHNqQnhVvUFfuTtVvgeEGTLCKkcluUrReEQmMqnNBMCxoDdOXiIUurvVReZzOoGgNnkKEcsDdlYyLkKSlLWjJwPQqpoadDAzZOjtTJdirRjJIDaAvVjuUJTtfctTRrCFOozAauUyYZPpzZeExXxwzZWDddDXVtTvfZziUuIFbGwBoOXxbWzZUlLSfRrFsuNcOoGnNgCcYNZfFZYyzoOznYyMTpPzYyOoKHhIiaAkZTTcCHhFlLVzZvfCJHvVvVSshWwjcPnCcNfFnNiIpoDdOtlLjOobBAknNKIZziVcUuxuUXEeSsUuAlvOoVDdTwhmMaAHINnSLlswWsSYrTtRyKkxXDdijJADnZzNdaWeExEeUuXoOguUrsSqQxUuXAaNndDabBSsAFfoOUuMFfIieEGgmRaIpPWwusSUiqvVpPrRGbiIxJjZzNnXBFSFfscCfMGDdnNgoOjToXxOMmfpbyYzPEqMIiDmmuUMttTCIcCihkoOKHdDcBVvjJYyzZeEYSaAeEsWwjJdDlLZTvzZVtnNTfhHJjFOoPpdhAaGgHtqQTHhiIsYnOoqRrGgXxXmBbEYyeUlLuBPpbnNGgMfOoFOodoHhbiWwIBSsUuOSsfGgFFfFlLfVvZSszDWwqWTtwljJFDhTtfFBboAaAlMmQqLkiqQunXxNUOobBIivQqQzZqOoIiyAaulLHjJhUJjlLlWHUucChwtTsgGSqXlLxHhQqQaASsgndDRlNnLrNGLZfFiIDQCpPciIcvVCXxVauUxXAvwWNEeoOcNZUpPnshHSNueVRbkKBrTtvcFZzXxBbSjXxJBShywWYruUReENncCfbBLTUOoOoLlkeCcEKucgKsSNVvnooOqBbWCcwWwDfFaFfAuUFfvwWVvVsSWJYytTjZzTtwxXxXqQqQtTdMnVJjbBGgItTiwAaCgaVvABbBGKkgbGGIJjiSswWBUuIiHianaAoYpPyjlLJZXxzdTtDYHMmUuhSdDsnNyueEsScfFeECUVvPuUwzZdtTDzdDygOoGhLlfIiFUUXxumMzTtsSZvVYyuJuUUyYvQqwqQWdKkDVbBoEeBpiIFfPoOFsSfLlVvaATxzZXBbtqmtkKTMOocClLkKdHTtWwqQhKuUFVvXxfTMmHhskAakKKSSstiZGgzoOYyIkDHKWmeEZzoOMgpPYDcCHaAjJOpJjsSdWHhZzTCiIRrKJjkAaefoWXxMHcChyYmOMmowEexXZzOtxLlyEeAaVvLFfYNJrRjnqQyoVvOIiyfFBqQdDphHUdDuQqxduEedVvDwWIiNnUUXmSsUuMTtkKxiIranNAgGESseRtDdUumMfFtOoTylMmLYMrRmRVvMmrEeQdDEdDeiIlLuUqJVpPRHhrvOqHhINnivVqvVQQKkSsdDohHcHxGgxXmMiIXhwowWOWWWLlwLRlEetTBimMIQXxqIibeRrEQiZTtzVvSNnjJmbvVBVvpnNPrsSaAiIJJiIcCrRkXYtKkWHhuUVvvVTpuUbuUyPauPzZpownNhyJjbdDBiIYAbBIoZzOaRvOoVYNmMFfJxXlLjCCcsGgbnyYRrNIdDGgihaEZygJpPjMmOPCcskKCcWwvcCVSpdcrRfwJjlLrRveEVHAaXxRrDkOoKlLCcshHIiByYdoODtBbzZTmkIJjiKPpMSBbPpIiSVdDuhdDDdHQtTqQIiJhHyhHrVvDdYeEepPEUZzuWwCcUWwLouUjJXCcxnTuAOoadhHztOolLXxIHhZzdDiWwQSsoymMYgAcgGCcaAmxAaKkXxFsSfWwGgLFFAXxaknNRrsSSsKkKFfeEpPoFlLfBbGgZzzZbBZzPHpPPpDdhpKkYySRrswOXxsNoOnMmZmMzkEeKRZUAgGajJeEavVAdDGRdHhmMUuUufmCcMzZFfDctxztTZuUXgGzJjZYlKkLOXGDdMHJjHpPHwmMeESODdossbBSCcWhcsXpPaFfMoOmCmLfqQFlZsSxZzlzZdDLxSspcCPmMLlmlLMyYRrCckKxrRXeGnzYyZjGgJvVHhUjJZFfWwzVvVAYyRrdJhttTfFTqQDvVdQPEepkKqUJjucCHKDrkKXxMgmMGmRAEOEPplLoSsHhoOUdyYDEeNnQmMqcCJjuDdXxrEeHGoOVNfFTtsSnNPAPpMyYmFfavVAapHWIiAEeeHpYybNeaAVvPpEQqSskArRXxEeYyoORDZzhizFfZtTIYyHQqeEtTcQqLlOoRrYiZpPBbzOeZzfFWwRrKkjNnJZgGrRYyzIxXrRKiIPpCckTtvZZzvVxXfRrRfZzFNDdtTIiVJhHwWwhHDeiIEKhBQqwWaAajNnbBmMHhYyUusSAaRrrbBIuURrbBFuUizzpYyXyDroOlLRNnYycoLlVvQqhHOkpPUufSsFUZzaAxoyYOYuiImMXxUBbylgGAPpRrzXhHvGgiMwxXgEeKkGpPuSsCcvuCcHhvVXxUaOoAalLgGXaAijJZzhHYyIyYiYYbBTtGgyVvrcCRyDdPpVvSshHMOomRsCPpPpSVBbBbXxvEeJjsckYySsCuUclMmLOoKdDqXoOyXxYJjQqPpxXlLpPwdIkKvVDdeEMmtTiDbPFfpbYyrRrRkKcCDVvAazHhIiyIAaifiIzYyZvVNYynaAvVyVvgGjJpGgjVFfRKmnHhRrNcCADwWdbBaOGPpgSRXxFfgGrsRHhKknNryYPUNnGtgrBdDbPpiIzZAmMdNnDWHhYvVGgyiILMmRkKlSsCYycYBnUulPqQPpCfFcOoSdDelRrLSgGKfxjYyJBbuMmVvsZlLsSXxwLxIDpPdiXIfFizyYZxVWwvtTjJPkKmMpXQqQqUkKuwLLllWqQGRmMrMmkQqiIPpXxHWXxwhKhGgzZHJQqdDjfFhTaNnAgJjdDWwlLNscCSnfFIINnPVoOyYvpxgGYykKlzdaAAsSacadqEdDRmMcEeCreEeyYbtQfZzsgGeXuUxEAaLljEecCSsCcyYxXLBblNqQcCnkKRrxyIigGsSYKOoxYyXkrRdYyDQlLFrWLrUVtcWwChyCxlLfFGlLzOoEeZgBbXcRrueEUMPbBhJjYyXxuUZtEedhMMmAaSCcssSmYaATIilLMLlvVmOotyHeEPpFfiIXxqQdlbBLDhHGTtEwWMmegFVTqQtBDdbyxtpPTbwWAagiIGjUYfFHYyhTtPpbByulKQqkKnbBAafFNAxXUlLuJSsDdoOuZzBmMbfFBbdkxyYiyYIzrenNSTtsVIiFftpPvoOvVpLlpeBtTkKkKbrjJQmIKkUhHcoOwuUngGgGnNdRrRrDPqjJSsQIQqimiIuRrdgxXgUxUvVuXYRiIwWyYBIiCczZrRRrAPHhpBbGgUIisHUuhQYyUFfuqyGggGfNnEwoOZPiIYyYHhypuljJrRQNnRrlLLdqKksSQbWwBSTlLfHhFDINnzLUuYylpCYhHmTJQvkKNnVAVNRTtrsSncoOCrrRBBbAQqanNbRKQqkvoOiIYyLPplyYYsSMevBFTtfbIGgjIiJOrRdDgkKOZzoWwMlLmGiuYyMoOeEAbBZvMvKkVjJmJZzjmMnwxXWpgWnNwGrHhIiwnvVixXanjJVsSFfYyzcIgRrGfaLlASsoOzKFfoOwWkpPuUZFqQiJjMmKDNndyDdYlLSsUPJjpcCuJzoOZQqSuUsjlJjZzWCcwoPZjJzBkMmYyaAcUuCqQdlLTYpyYPytDcmbUfXahjgGJHAxGgFPpQaUijJjJIKkFfuJjHjGgaAJJpPjwWhrRCcLlsrRTfMmYySHhtDdTNxXaTtptTlLfIilbBMmAkKesvVEeIioOSZDuUdtQqTgWlLlqqAMmaQURmlQqupKyYRrkPUvdakgGKADMKrRkxqUuQkKXmIiQqVkZzyHhYMmLlXxBbfFOUuMYsVvSYylLeLWBjJbLOoukKAOzZowWMmaFfUIilVUzZueEIiPoOIPpiptpPrRZzuUTJmUCcFoOwrRWaAfQqQYyqhnNhHBbHXlLxYyzZTpPpTtaAPpDMmiIBWCcuZzXJbBWwjybBYcejdZWwyYhVvbBNnJjyYftLmMyOnNPpopYkrRcdyYDKfFkxuUPVvqQpqNnQhnNpPHxsSXXCgGNntrRgOoEedDyYyWMmFEeqGZlLgGRrzAahJoVvUAaSsbBukphHPHhrRznNDdAadPpDHhzZdbBoOpPbPnNpwWBNXxnDaRrpPLlSstDdIUuiTVvtfhKkHFQHhRYyoOrnNSLltTgGkLnkKNOgDdZvVzGbZQqzBoOEPmMppxXPoDEemMsHhSEeMcHhCqWwQsMVGluUuhHgGUHhZzkcCdcrRZzxXCuUUrRzoEmMDHAajJSsyYOMmmMuUOKHNnhnvWbBwpPOobPefFeVLsSlvQGgqGiIiOlLoHwWhhrRHAaAYjJTtPwWYYyyFEekKfYcfXfFsDdnydDYNyuhxaAjvpPVCdDwOoWPTMfFmtOuJjUwWyPpSZzaWQqIilqQUutTSmMPpXxztIiTzNnJpPjIwWwWfHYkjJFfKBbymCcWIiHhjJwVmMJLljvjJOTSszZivdDVEeHfFLbpPxGgOoXBhzMbQqWwzZeFfvVrNnxXckKCemMEuVvvxbUWwuzZcCpPHRrHhpCrRStTtTDxXYdsSDkKIuUyYNnCczZKPpOokcKETtevvVVaADxfFXTxwWBHhHWwhcCQqbXPpiIRrTtkDzZdKQqhttTTHPJjbpcvVCcsbBSIiToOtVvHeoOEPphiPpoeEOAaQeqsMmaAbFbBmMLdDbBjJiItTGZJjuUzgwkRrkJFzZUufbPpYMTtmAaAmSsUuPmUuMUpoqRrQZzJjYyObBFxYyKkjJwWEeZHhzRrSHiWaaAYyAwdDBBoFfWweEvVSDwWAIiadsOIiFyYYykKrRkKQTtOtdwWDTGgrapqQHfFELlIyoWHhUuYyLWwUVviBrMmClRGguUWmxbBMHhmXmPpMPAaAapUuOokNnLqQloOfFbSsSsIfFiBeEoOOoqNNsSOonMmXgXckKSHhsCUAadAPpEeTtXxAXJjxSsSLlzqvVCcHPpyaAnNYFfYIqsSIiQtKkTTqQYyPmMeECcpIhHnNaBHOHCQfFlLjJqlYyzyYyYfFZCcJwWjLKkDdoOOoQCcqcqQvVejJfFEhyeEYaARrStTsSsgvPpOEeoVGPNnxXzbFfyYnFfDLldHhXxDQqwpPDSsmMMmdEecCTtHhIiHhkKCcUuPpnWCcCXxAqQaJjTmMYGgFgGfiiRrICcIyuLhYkKaAySRrjmBSPiqdDHhQDdTknxXXxNnJEepXxgGTfFnXxcmtxRrTtXsSavIiPpUYyuUTHhyOoYtdDHPKkpmyIUuiYOzZrRonxXNnoONTCctUrUGgJxXfFjaAXxkuUKdyptrkKRTnNnsSxmMIiXCcTvgGVkKIiGEekhHywrRWIdIXFwWkKOhHgXhTteuUHhEcCgGdFfDybyYBNnrNlOUVHhMmQqvdDAaNMmzguURNnrgGWGgwdACcpPavVkgdDZzuUGfFKYyHJzZjubwWKkwXoBhHVGgsFfEeiUKkfMmHhFiTtxXnJjNxKqQkXzJPfCBbcgeAaEjrRCDsSdnNcJHzZDzQKkKSsRXxjJIYMrIiPTZztMmCmMcGgSsCnDUudsSdDjqSskhHoOPNWBbrfrRWqQxXwFPpXxjJxXBzZGyYuUSsNnMmgbHhBbrRjJhHhHSJUHuQTtxYLlyXVqSslJzZyYtTjzZOXIiOnNrlLidgGLTaDFeEfdAfAiIaZCXxKkpPLuUlcvnIFempPKkBLlinsyYSAabTFzZfvHrqFPYyCcpWweEfIpPcUGrRgrRfjJOoFmMWiIGgWwTtwHhAahEOoeVuUAzHhdiraARIiIeumAaMuUKkZzmfXxeEXyYxHfFIEpPrVvIieEhHLldDYtZdfFfFoODhHGgUEeIicFfnNCbPytZzKZzkTYPpWwNPpEGgehDdqlLMmLtyYJUEgGewjJQqKoZAOnbdsFfPpyYRgGXbBDdEepIixmXLqgniiFfIqZHDHOlNnNnWSsDdJFfjPpVvAIiamMQkKoMmOdKkrRDcXebkKBpPrRNMmnJDdjOwSDcTDdtXsSYNnEVvCcoGgHJjDdhHhoOgdDfWwygGYFnRDMOFfoeEYymSiIZBIiIisSvfFVaAxXKkDnNhHxXpLlMCcuUmkVWwEfOxXtTjAbBVvfFNMfHusFqPpEsSeQCfgYyiIXbIiBbRsSYMmsaWdcCeECcJjyuUSsvVIgGuUcyWwYkKwWUuCMaAMmmzZVjfAaUuctTohPRrpbzZBKkpQXvuzbpHvLxYyfZzFvVYeEXxPpyUjOovVTvVxXiItMmbTtLljJfuiiIILYylUtzhrNnNnGwWrRtTPpYzVTuUtQYyJjqTxXtgXxXcGgESoOwWsmMmMnNwiIdDLeENJNUuiBbnNfFYgBbtHhcCrRNjwFfdDWUOZDdzFWwOonqQgGNSsflLExKkZDdmMzuVUSLyYpJBbjbBPlWpjJXlwWLxZzEeoOBwWDRmnrDCcNngLXxlAhSswMmWtnigGIXYXxSpPNbbnNBOoETteqsUqhHQNnAauTCLlSscucCpPNnmMWMdDmTtwUoOaAMeEyYItWwQSsqwBbSKGWwceQDdgGVvMMmvXrREexpOlLtToOoGgEWwezZoOquPYykKpeNOoxgrKkRNYyiIBGpyCchFFkKfBbJjcCYiIyczpdDSfGgwWFWFAapqgGigaRrMfFRyYhHHvVHoJjPpOoOzZDOokkKFftZuUnRreEwWZLALyYdDQqmnTtQqwBbWxXwWAaNipPxXIJBisDfFdgAazZHhdDGgGWqQwHUuGgoOowWOJjZpPAavgGVbuUhHAaBYsEIieMmVXxknClxtqQgSZzPuUpLVWsRrWwWDQOoAavEecEYyYyeOoCYboOfvnNVJYyjzjbqQnEeaANgGikKZzRrmhHMbcsOoSzZROocXxwWCrRQGgkXdlLHKYykhDZqQzMtTtDMXmMOlLaAlLIDdVpPHhLXtTPpwPpeEvpOzwruUfFRHtOfFoTXNnxhTRrtXbBTBdDmsSXTugFfIvvBdDlqfHhBsxXSbjjJJQJjqoOYytTQFNnHaASshSvVfFiXEeLlNnDdLbZzgeHhEAaVfJRifjJcuUkKWlThpntmMTIisScGgCAaavVAJjMmbhkjJifCLuMmzMAaYyehHYyEIiczZCPKpPEEeUuIierHzZvVTYytHvhHWwVUuxzZNnciIlTtAasInjJNOnNTcCcvVVvCdDwMZUuxXcCzwsSgGWhUuHOCcHhlxGRrfFaAPCpzZAfTtJfFgGVVNnvvzKgGkJDkNzZnKzaxAxXayYnNWpPSTSDjJJBbxWOowbnNyYXINniVvBbubBUHOfipAsSTiLenNRIirUfzZFuQqUYtpPWveEZzVWbOoCwWYyTBddDRtTDqQCAuUYfXxtTFDMmfhYyHOBZzOoOdjFSQqCcsfSsQgaARrNngGyYpPpPGQBEUdDuxXLpWKEDdyrRYrRdEeDeIifFxXHJuUjsaALlSCczkdGqQgxPDNnEeCczTttTeEZQqHZIixdDWmcCMQwWqhpPHvZzLqBvVvVVHhWaAFfwqTlLFfyBIYOoCcvzfFiYymYyRrBegGECzZcvVHYyYNnlLhbMbfVvFPpBrRJjOonSGgsMWXWsSzlLBbaARyYQqrRWptTYTtyPjXgGtDAaRSYyIiIkKiMmMmvIWwdDiKiIhmIiMJjEbBekZzuWwmMRQqwDdWqOoQQZzVvvevaAVzpIyYiJjUurnYyTaKxXkKyKkYVvkSKwBpPkKbNnWsbwQfFqJLPplcCZzXEMQqmFJheEjJNlLsynKkCcCZgGzGgcfVhHRRVvEeOopwJrpvZzeCFACdtTpPSsdoOtIiTdDrREFqMmUebWyYMmDCFWwZzdxqQqOoDduUhzRvzZsSVnIiNxXAaGgmGgnNMXosCcShcCHVgGGgWaAEQdDsCtTAacWwMdDAhHifFRrGgSsiVJBOoeECzXxLIimMrbEeKksBlWpinNniCcGeINniclLzZBCFjSQqsaHhLlKdDDyEeYdqPpQGPByzRmMWwEeCccCtTSswWsgOyQDsSQdivVDdIEeykhfFHpsSmuUuyyYYUMjJKkZyHXxFfmNALlpPauUjJVlLhWNyNnYnwMapPvTpBzzZZSsSfFiIskfIiFeFfLABbaLlhHiPpIfFMmIixiIcvuKkOOorQqVvyYjqQEUTPpIZidVvPpWHhXxYzZywIcCGGggGXxAhHaGgvVIGxXrIqwWITtmMDqWvcHhFklLKGrRSxpPXEwJjYymuqQaWOowXGSpPFHeeEmMjmLliDCUucdCBbVvcIXYylSsslcVMmvgXZKkdDpIGgijDdQIiqwqQWfFytTiCpRwWeYBmFjJLmoOtTKwXxXxpPaAZzNNNgGEeqQaGgItRRrrRrTStEeTxrRYwAJjasSVvGXyvdDKkxoOXVYiIeExpVvsQJjeXxJkdAyYZOooOTQqfFlLMerRRtwWpDdCZjNnNwSsRrwzZnSkKsSsNTavjJHhqVvWuWwCJjCcWFfWqEjmFfqHTcCHhIymMVvzJlLeELQZzzrRPpZwVvWScukKnwifbBOZzIizLlQyYCMTMmtmwWqVzIiZEevJfZQzZAwNDdTgDrRdIiGKyRrbBnZzNZzBfFjJQqbjJSxXsuFAafzIiZHhtTzgdzZKhHynwJVvjhHAaRrPpWNFfaAZzJjRHhFUuviHhdbXxHMmaAIXxWQqPoOrVvLnzZNiIlRVdDEepbXaAjJCtTdDcZXxlLPFxXrklQqAgGJCcMmCdDNnNSvXwWIixYTmMnNgCchHgGSdDsPDsSoEeOdZzAaOoGKFJjxpgFaAzygGuUYbBefwWYkwWwsoOSrvvqkMmKjJDrOgJjpeEUuWeEwPvREcRrComMuksZKBgtIiTkCeEPpKDdTtkKhHtTDdgpNnQVRrxDdJjpWOceKdqQtTAdDafKVscCSmCjJgFtTPxQqiIhCrRxXnQzmEhHYQNnWwWTtSFfljaWCcwvxJVvFFfnNZmMzZcCfuUHFtZdmMrRVvFbRrZQXxdDdDqTtNLVvtTSslVNnvOouUeEUhHKkhHCjiGgIJMmkNnFfKoOjfWtkKZzjJTnNFCmjFfVXxmnNMviwUuWsRnCccCjTtwhNpYXDdpPxDeXGfpcIiIuUgGseEjJvVZNuxkKXUhQkKTeECLlaVvfhldDXKLltTdlLDNzZIRrqRrfFQMwbBWkKZzmMmMOoQquBUubUJjmFiINTZhHHjJSAOMfFLlRpPCXxuUVvfFUubkPphHxXviguUxXpPOuUsQrhWSsWwtTrOfFQTtzzihHtfRryYOogGyhHuUYGwWtTgnUuziUuJYRsnEFfOELxXkKQLONnuUoeEiPpIBcCBbSEkKeSsrRvVMOoTtTeaAFeECRxpEehCcCvVceEwWbBAaUrkhHalvarONnoPpdDtTvHhVUuiIUlMRryUGnOoNEePppbQLlFJRrbDrMniIEeCcuUfsUXMmOoQquZzUNnxaQqywWEeYjNnJlAaBbiFfPpulfFValAkOoTtqfrRMFfmFCclbBJezYoOkKRrpPAaZOgGdsBbRrNHgGGnxXXVvdarRRqQqxXRkfedTtBbDEsSSsPiIpZOoTtshHfHhFjDExXYyoOSsHhYutTFhvVpaApOoAaPnNwWyYPwsSbBhfFHWUplLTtOoksuUEoOsGgSeVvhWgGpvVNlLqEeSshLDdxtZzTXZzuUyXxwEGgekKpznNZelfrDZGoOgyNAQzWwZqKksWwILgGeCmMqQlqLlQRrLDxgXxGTtSsQqWMbBDdmXxQqNnwlicgGCIustTlLpDdZzPtimMQeEnNkxXKoOCcwFfWbBsEhHDPpdOohHRrpeYyhLOeLoNnOWiIINnFfxAROjVvoRpPXoPpFdoGzgGXqvzZuxzLlZhUSsIicGhqQRrhrmMLlzZuUwWAaAamRrpPVGggcgzXxHlLGghaAtThQqwWHYyjJZzZzeEbsvOoVxPAfXfFtTOoxlLNoOgtTUbkKrlLAaGJjPSsgGaAJjJKsRvVbtkpPJjnmMlLNinNmtmNIiZzwWnfFtiAaIbwWajJvVhHNkOMWddzZGiIoeZYEeMaTQqIOzocfTfOhEnGgNjJevnNVOooLlHhEDPpwWlIwKGnNgOWkKlrRZlLsvVGgBBbDQgAcazQiIWzoOLHgxbBIZrxXsQqcCAHhaPLyiioOgDHhdsMmnwYKkyEBbeIiWDdjJSeZzzToBtTxqxhtvVwWexXqoOenNasCUTtDfFHhvMsQoPpGIJjigLNuSsFfXxXxUDdWwogGIZvVCrWKTtnQqJjyvmMojFcLlCUgsSGoOfFHmWMZuUlLvVDdBWAXxVvwdBbqSsQnNCczvVZqFfRrPpQOozJgSxQLhsSrRMmEahfGYCcmFfMLrRQpEgVcctTCQhXgrRlLGYydDfJwJKQGzEeZdCcXyaMnNMmmhHeEwWGxDzZYgwWGyBpSlLkKsmaATPZudDvbupPcjJCfrDdCXxgLrxXxXmMhFfHrAaVCcvAbBquqQhHUiImMjQtPpFZwWdDmIlLkKJkqjJfkKdDRrMLlXxefkKTyOTtqnNqqQquLlzZUQPpnKkRruUNeuXWdyKkvwqQZizZITmMKzfEXgGNRlitXQLlaAbuUKeENnfFogiINJjScoHhcCIiRqQpPvgvVDlDdjfRuUKkrDdfFFJLdBbGVpKrewIiYlLskKrznNahHQxdDfPxGgXFUbBqgvVGRrMXeAAaWwZcagYYyugUudpSsoOPpjfYFYGBjkgGrRMmCcBbIHgKkRrGrZjPgGgvkhOoHhRjJXxTZcuPpUbtTeEKkBTtXfFlLcClPuKdzQqZGZzDcSsRrvVjdqtsSSsTNngGjrRLlorROJcCxLlzVTfFzwWZvVtTdrRGgaTUutHjvVYnwWNUumpGgSxXsjJsnvVNhOoeBbGCLlcgWwpZzKhVuNbWBHoOOhYVcCviQVrRKkCcuwWUWwTgtTGtlLuqkJNnCpPcHBbocYKpPYXDeJtyYSHjugsUFfusSckKmMzZnuUpPkKkgpYLvmMazLlrtmMDUHuUMjQTtqxTSTtcxwsEshWwHpPUrCfqzRkKrXTtiINeDdLyYcYyYyoPNnlQleEyEJsSsxpPPpnIXQyzNnZSsUuYGgFfqjJAJjBENnebvbMOdDfFuBwWbQpPfdBbTtsOlUuLoXwAHkdPplLUuNnrRGNDdBbnATMNniIoAanNKIikKefFpPEQwxHhLlKUudDZlLRrtlfFsSMIqQuUoOimrRRYyswWYLFfloOwfrRFWjJwWyJfxeEtpBboOguxTtXenNmMAHJTlpYPlLXxpgGXxsaCbBeJjWwENRfCzZcFbbIiLHAaDcCCcxzZkMgGKctEeThHCQDdPOoVZZXbBKkpPDQqdhXxBxXbHeoixXrRjuMmPpTlrWgnNGwNfFeEXxnAFVvnNXxrpjJOLloPsSSxvfvVgQqGBgGbkRrKEetLbBLlFvekbQWVvmslLvZWnsSaOoqQAbQqXxWxqOicCZBbFHhfMmGgYWnxythHqwEtTUuyqQRrYUHHtTaxeVYGgzZAazZysSSsBbGgZzqOSstEetTwWwOolLbzZfglLNyYnDdGKkdrQtTHXrRxkzqQqKkpmQzqQAIiyYaXxIQlpFfHWBbPpDDddDYvUuMuUENNRrrRnnfFbBNPGMmqZMziOoIJGgLlbzZkKBqcmouUmgGMXxOkuVqQQJmMjFCcCRCJPQquNoHhfFaHhYbBBbNEzZLbaAWGgvxOLlzZueGgjJEURryIuajSsKYykJAUpPsSOoieTdrFhAlWwASzZsgGUbHhMtTucBAaBFmtPjJxznNlLOCesJjfyYrNpGTfdzZznhSwBbzZKGgsLGglhHScpetTzhQqkLloObJjBoOzJpNniwWSxWwYbuVfgGFfxXYlLykAXtAxGXUXxhhHHOfFmjJLWDSsdtTuerRLlFLlovVBUzZdGgBbdDSyXcCiLlOoBAEnOSslBbToOoOXxfFkTcwmDyYpPUudrXxGkKpVvfVvclyYLTzZdBbJVvLBbkKGFIorzQXxskKSRrQqGVvaUrRUzhHZNKspHhRzVEeSsvzZVvNARLlkKuoOUZXxFNnVkKgGvyTZztUPpoONSjwIgpoOpHhjJxcCJIwGggipPJmsSMjbGgBWnAEejqQXpPOGoOmMgoOGgoKkLsSlsYYywWAPpaAHlFCQqhBPJjJYYXGgbeEBGRrowWjJPpyGrRxAapPrrGlLkwWDNyYLeEtwWiITEJixXIzGPTkKCroOaoUYyuPpqQGgLllLlBeUuDIidrqQkFcXlLxxXCrUMmGbGgNwvVojtRrTJWwEeOsSWfFaHNniIeExHLxXsSqtpWwPTQvQLKGHYSqNnqQgGRRAJzZtTvVjIfNaZMTEeVvLWwtgGXmbEeWwuTtUAkUuKSATIiUQdsLuFlJjLrAafFwhHGPkKHDdkKMXxMmmpPpksSRrXVRWaAyhHuhNgUOoHfWybtTgGHJSsIiEXxAfFakoFVlXxvvoVqQvLSEeCcQkspPSujNnCcJIOVpPpcgkfFNoOVwxXhoOlLpuUMmUUuXMNnTzyKuUkYdqBblLyYwfjEeIkBfFaiISRNdDZEeUutTzsSqOFUmYtiBFRhHrfrjXHnNUuheExYyAaDotuUTaAOCccqWwmtTMMmTtqeDDMcvlLYyAvQqqWiIeEOpPDdmMnNovVlLYySsVCcmAZzeEuYKkyIiCcRCcPpEcAGJhHXYfsxBjJkxVvWwXrRieEsXwrCfBbYEjyLlXvjJBbzrGgaAnIrdXyCQOgGhHozcuLlUsPpETzHhqIbBbBcdSsYBQZEVveBbEezRKQnDrbkCcDdrAaRByyYYblLClDAadLgGCKTtoqjJiwiIubBNnnnlnkKIGgiIilyYLNoOVvcwuUgyYrIicCBbsYySNrqLlNwWwVEFiEUvVWwkLlEebPAapfFBjzreLwFZIkKDdJiEkKeOotSsKybBYkAFqQfaOIilcXhmLDcCdeIDdRBbtTmiIEeYVCTflBbZyYlTtzKwvVZGgcFEnToOGafqQQqYyfTtFrkkYwkFcTtCiusSkKInNgGWwihKQWwkgGKaAKksSReEyYjydHhUYJjpPyuJBYrLRrKkXNzZKkHTEgkbQfFqHgJwPMAOTzZvseExJjwjYdDOkKwFfWVqXbzZDeEdboCVvcDnNWwdmMfjnNJrRzjhJcSxnNHhkKoOztefvYdHTtoXxVCaRhHIiAiIagLOobBavFHhBTkKiMmAalKYykdfaATxXLIAaigohAuHpFfHhwIMmHhQUuDdqigGoOTUkxXTTvhCtTcHIjuYyTArgGbBYhHbIxQqRMKaAkvVeRrDuSXZFfHzZhNXxhkTNnodDXxUuPNnMXvJAOBbBbPLvAcCazduEeeEyZlbPpBKHhGpPoQyxqQcHAahCfKfFNkKFgsRpPqMGgJLlWzIiSQDJjJttMYjJytbNdSRwWDFlDdZhNrLlqhywWuUHysSrUuRlGgkKLYKXQoOFvVyvVYNnIMmiAwPpXIhHinNbOoXxEeBVvIaAFfsZanhHNfKOofFxXMmwkLYuxKKkyubTtvtTJZYFTtfTtgGAaYybByKZzkTMVOwQBbDjluFDfFdfRGoYdiKiYCcEenNgGspMlLmzTsSNnUBbOoEeERncqQFRCcrjJfyZgSsLltmfIiFMsUuhHQJiYaeWxYyCcIXPppFULWwHKRrxqefFZzmuqQkDPebqQWwNnpPvxnhHCGgvVuGgXKbBOsSDSnNsokKQTtVRrvNHkKaAhBVvoRzZrOxXLcuNoOquUQnUdudkBbvVBafECcQyGtTgYUuDdyLnPpIjJjJdDiexXWZzbOTtoBVvimktDrrrrRCbmmqZtwJXxjjJXxpaAPLlpUuWwWwCcxGIwLldqvMlyYLKkdSIilbDwMmgGjTyYgGtQVAMfyTtQUuyebGqcCchHNnChHIgGsSPpHBcCkTnbZRBtjNnRrJTaFfrRAaaFKkHGgmMrfICclLEmMXxeDdssdDjKkJUulXwiIkKZOoUNCbHWwbIFfibtRHiwYpkvVrRYXxVvyrpPRrkWGAyVvCaIMfyipmMZfbBQQRDdiHhImMxcyYCXfUuFEVwWPkKpvrJyGomSsnuCWHhHJjFfshpWTOFsKkSPpYJRyzZZgfFgnqQPXsEeSFfDsSiaACcVKlMNnOPLlFGoPggZilLIkbOokcDdzYyHhZHrRiIeqQNOoEdEeGgwWYerRCcEEeWueQqnlDnGzBVJlLpPfNIinFjTRrBbSLpPBdvVtCvAOoWsMIOVaLUulnNlxwnNWXkdRlWLPpMyxznNdDXxCcsfUjOONoOiWwbBdRrTtMmfPMIiCrkKToOfFKtTUuaQQqIAXhyYHBeIAaiaAzffybYtTFiqJcNiCcOikppmMxnNnNahHNQGPCOvVoOBboSkKsBYyfFpWwbKkRDqaGPpqVvOoUuzZxUtTJjRreEVlNpPUuSsqRrvNDeEdnrafVvvFenNrRgQqDrJxXKkoruURKfFbWXzZtzZpsVvSEeGgMfZzFiOoLlgxSsLJCGflLJjgQDPyYLasnfWPyQqYeSsQlLkxhHXFfKrRsrPSdDsePbkNXxedYyNncCVNrRFDdfoOEoLlJiIKNaAaAQqszZLlSnNiAaYdBbDyIHRJjlLsQlpPuULdDEbNTTUugIiNLlpPYIzZzZDPpGgvNnVKyIiYQmMqEEePpwWVsAIGMmtTaYyKeEMeIsVSsckKRdugOoGKMMKkEdDTtAtBfFKucMYmMtrRKxYuJFXEeumMUiuAireEKkdDycRrzZBtmNnFfwWXRVzZxXvyYZzqIiTtfIvJZzouVOoSNRrZpMAxcCqmMaFfhHWibhKxXkeEHBYyIwyVlXxeECctmvYPbglTpFfNnvlIcpPCEBvVbUfFUxlRrJjUuFJtTjgHVfFvvfaukKVmAeEslLrTSCIicHNZzhHMmHhCAaMmIfFivbBJewfcCFWIcrRRWoOwtTwXxoQqkKOIskKSdNnGeEgDgCcLnCgSiIhHUpCeWcCFfQFdDSgGTZeLldDEJzMoLzZlNnOamyEBbTPpaRKhWFfUTyVvrGLAPHUuqQJoOHhRrjexuNPpUmMHpRVvBbrOoPhAnVEeMqYyEDkDdhUWwlLQxhTQFzQqCFPpiIfcZAafxkKsqkKuCRjJupLMmlMYEgGeHtpFlLONGjmkdGgDlLskKykPqRRzxXxXDSsxrIirJbBwKtlqAkKaPpQLVYyeSsuRCxCccmSYchsIzZekIkKgGrRyxXHIihTovHhDGgZJQjJQZWwzSvVbrxlgGrMYyjcImUJJTDoOdJfFUujqXxFmdDlmxvVqnNweEEeLLTtppPPlAxNnrRqtTTsTPpeEctTIikMaOoAWXxypyeEafKHkKhzojJdWwbBfEehHFjaqQkKAkWwUuURtbSSssNmZJagGoOAjZPpYzZKsdDmSsZSsTtcwWeNnZzbBkyFgMwAjXCcxBbQqCaCmCLlcMhHGgCnNAwhZinBbNyhBeIiVvyYNQqSsnsSjYqVvlLQuWwInTtEQOlPdsrRSjCcAdaUzkQbBhybBYsTtHKgnggDuUpPkfFScCstTDvlodDLlAaPhlakKgOobiIBLpPwWFVLldDmrRYiBbiwWIECYQBUiIslLRWwwGxXtTdZzOoDtLmPXmEGpPwWgtThHcwfxYxxFoOwLoSpCcPRTCcULrRlOjTtAtAyYiVvrRdshUugwWGzZjJGSjgGXVmMjyYvCcmMVSsppNnciIltNqQjWMotTEhBzFfqQZOKexxMmZzIyWcxXCxXCyZjvWUukSsMmUhxXHuKyTmjWnORaAcwWbPJjpTSPVMQqNLlgPBbQqahlaMIHbBhrhHsSyuyYUdmzJVvNGraAiIRWEgeEyGnNCcpPlzmMXxSsCKCDTDdvAvVaCWMmxMZzuHhuwWEeBBBSlLclLAaCLEezgwWDDrGbvblLBbSHTLlsvheElQqqlpPLtTkiIkKKkRrZKkUxXuzvuGsgvHYYosSwIxJjWwllLfFOoxdDBgucWwWOdDucArylBALlUufAiskKZUlYnADhKUuACkVkwWwDnAVvavlZzGgMzZcFyhHdWwnOoNFfDpPKksSvVWwaCcSFqnNLlLlMLbSPpcCgDYevVEhHMADpArouUZFmVvMgGfQqwoOIiPIMrRtQFYsqESseEuMlLmAtTSOiIwYxEjsEFfiIenGgNDyYlkdwFhjJOgGoBnHhukFfzhaxJGCzZTWGgHhckXxdLlJMvwYybAHjSxMOolLRuUhlLFfbMMmDZrRahHAzSkKssScLlMmCdmmMOIiBFfHAfjORUuruQICdRfpbYSxyWvfFVmMqkWgGgGgPpliILezhZrRBBvFkBXxkKShGgkKdhMKrEWxHBbVzZvowWPCcplQIqxXCcImWJSsbBjqgGeIAdHJjFiyYIfWWDgpPGudpPDdifFBbYyINcCdOocyYCDbtiITlLBzZnjhwOrRVvyYdzXinNxRzgBJSIqUuTNsuUAYksSkiPOoDAaLHygQqGdovUWwcTtCTtGgcEDMmjJvOOMmBYBbywWNnkEAdDEJPMyUskKlLSGnNghsRPHzMQqcUChSsHyRGhmUkNnlXuVwWjJvUxdDiHAaOVztFyeYwkrKkRmwuUsaZeHeZytvfKOoPgthHTHhhHWKQqIAGgyYaiQqkwydDDYyeERlLSsRWsSXJuEerJiIhIiVvpPNRjzoBXXxxNnrlmgmMJjDdGoOJjZPJszOUuBzZVXmVvMnMmGgIqQWmLTjOooOJPvoxCclhOJzZcIIiiskKSCcClLTTtPptlHmJjLlPpQqMhpPKImnNMhHhEetieEVvaAwhHWtUuUAAGQmUUEgYHZiUCDdciIsDaipIxxXYyKRfFAIPzWpPHJdDaKDAnPIuBjJbYSMwWAlyYMOPEaAuRrFkJepJprNSVvgKMmYuUMmvZzbnHhmvVAaPpnNCOgGIWwJERQlLXxDvVVviIdcCqrwWYCBHvTthYMmyIinNOoZxCcZFfdDjJlkEdCcppPPcCDJjGOulzeEkKZFpbBgUxytTXxxXNlLcsSHGGpPmXxJBbTBbQqDPgGtgGdLBblAMXgLHMyYBeEbBgWchHXxoOZbvpFCuUFfuEuRLlzPcCpZpPnNBbpXCckPUTtYXWDDARrcwMmWCgNofegxGBlduUTwWtDLdDWMmBWOyYflbYZbkxHhXwJMmqXxQNhHqlLYyRPDeZueEUtkQqeEFfKjJKhSHINnQwWJgGWzPkmWwMKyjZdAkPdDBbzrwWqifFImPRreOovVXqPgNQlXuUSsoOZziIIbRrFFfyYbBrgGouYFLVvjJevPXwvVXDgGgGZzXVCKhDdqgQTtuUuPpSQdqZzGrRFzJjSPFlaAAarAzxNUeEvGbBrfmlLpWhVlzZBaACcgMhHSfUGgiGwMTlOvbYnDkKVHQYQqoxiIOoqRqMnNbrsSckVvnYgGwejiHkDPHDuDdJjpQvVlLqQBbqQpvVPQEtuoxduTtrOAaBaxhSjJZWzZFfjJsqffFfFxhadXzZtoGrQyYkKUucCxhWxNrRSsKkeEBkFfTuUDaAQWoJcUuuvVyYAaRfFvdUAaBzqQZZdCNFDaAdaASzRdDrYyzZzZEeDfdDFQqgJjGftTQqFdodvWeKcCzdFjJNVbRBHkKKKkbMhHmBkvVzKGSffsVQqqxoOxYyScCsuGtBiReEeEeEffrrRMmkKAaDuUQKkjyYmBbMJxPmpPfgGRxsmiSOodDsShHgOTwZzWtqQHpVvXxPboSsKkOMDdDPpxDfMdeEQqTLoYmaGgtTAinNOoFfIpwWSPQEfaDdceEmxXMdKaAhpTEeDMwWOqDhIbGWHfFdDmMeJuUjexOjFyykMmiIKQIRYrxdorRfGkAaJsEajEVzBOWvSKksVJvVKkjwoMgQbWZKkrSdPlWwLflwWFfuCconSiPpRrtTwbhHlLBdDaBDYGDoOlLzucaotTgtbrKVKwyBZQqwIPGgwbIiBWxmgmMtUvVuLlUzHEFTtfoXxOlLTKnlyYECcmllLMYTtlLZznxwkMtANlGgddzBCSTGUoOsQZzPpgFnGSgxXGsEZWwCcbIiiEYvlMrqZiTPpcittBTkKtbroFfOpPRfuUFsSIiLQqeElVSsbXdPNIlLpPlwFfSQoQYSkKsywWlphWkhtyYiytyDXllfFMmHJjuZqGCVDYydmMAoojQSjTiICcvOaAdcUucDavVssxBIioodDEzzZrRlAarVvRzpKQqZRkKTHhqFGgNvxGqsFfSsLYylSAuUaHJyCvvVPOYyDwWdvPtZnuXxvwkQqKyViIijJqcqQNWNdFIXJjxXwcChcPpxXCGglEHfqQonzZAyHzdRkReCRCgqQGcFvwQqHhdjevHhVkKgGtchAEtlLxqwWmMQSaAYotOeEhjPpPIfeNAanEpWvfezZZzWBbNawXoOxYyvMmGqQOzZeEogjjXXEerRYbWDdiITJjWHhwpOfFOfQAgGhUjJHnzUuUZKreZzEbZNSsSsghHpLBFxxXHhPQqkGgIirEVDUSgvpPVQqVwUuBMaOeTYeLlRrSToWwESsEaBeEWwTmyDdNsngGkaALncrYZsAEFqQnNomcyHmEfzZFeykKmSpUyYOouPsGkHkjJIiGglrYFgaAGLjJPtMmxXUBDNvwJjWnbBNSQqwjJbmDEeseaeEnNTtIiGaHhWwpvNgGVtTzZfinRrBRLlsSrbRbWdMiIJfibeWBxutTpgGZzlmZzjJODvVJJMsqAJJjBHiIgGIiOzFajzSVCcOoOovDdXxuUJkKoOhCcQqTtRBkshHqQBIJjwSTJwDdWOAaqmkKMjJQkIiWwQqKorRbBQqizMlNnpKzcpjIiMRrmPmMZzpJWAafYyDkJjQlLqAbBadDKdtkKTblgGXVhHRusqrovCHVRJYgGsHaANlBbLnNnYyEyWuoOkTIifEHeEpSfFZzsBlXeXKtTTtEFAafmyRRnOozZAnKAftdDjqcGYnNRYbGXzZVuTsJJjjkZzLEhVvBbAQqRbGvvqOpvcGJieyEakxdGLdaVIMPpmiWtTYuUpQmMqAaZzrReEgZoXGqFsVvGgchaToEeuUyibPpBWwIQSsqCcEHVAFgSfbHBbhBbUIiLZoQtTfFqtBbueHYsmMFPABbaCAhHagyUUuLNUVvcyYujFoYtqQqaGgZFHzZlcCcCNOoMmnJasODdFfFcsiISnOrRoNFOoaAhHftCmJnQqlWEiIDxWfPVlLDPuYTUSOWeEuUdAffpIekDnKcDdHjJhCaXxFjJMGgNvyYHMzgoOUiCNOmMEejdxXDrqxXQFSsVCEejJctpnNpPWLpoAaCcOFfVHAjezYQkdgGhHTXMCBvBMfcCNgZUuzaAhHdIbBiiIAEYiuzGkrwWFvVfEeTtxlGIubqQEtOogGyhafFANnjRGNhhHSsBeRFfFKtznUHrRTsCJssXlLPkKRrpxSSqQjcStRrhuNZTkfrEbXxHngGgrJHYTOoeqQBYyUigLXRrRKKkgZUjJIyAaeaDBbnXaAxNGnoVvnNBbOcaACHhKPpkFmbVbcmxUutgGDsSWwKqyiIZAaEJahvFfPlwhHPTvgGfRJhRrHKkpPoncIuFfGgGAaZmcChVMmnGgmoOjJfAkNlLyYdKEiPFFUuaDeEwoaAsutyxXUpdeEvpZzFwXdewLNjMdDcTFfhgGHCxXfoIiSATtaAjNNnvVnLYUucoKeRrEkOCysShfLlzAQTyOfJUONnFfoLULlulCunPplzZhHuYGcUjJupfSyhEUTOzZzluBFZzsGfavhRrepPYOtAHCSfQgxOzGVvWwPeEjBbJymZzMwvADlgDIiXTtKAeYEIjgCVPTtoXxQUueEVDdVgLluUXxBraHoOelKpPStUvxgbBByrCcygyfFYCBbQJTPpFaJwWjkNaqQNrrYMekxExLbPBbhewBbWkKTtJjtTFkKsStKoOxXUKkwYeyYaRrAuUhSfFGgyYyjrvhcgIiGUuVORQzZGgSUrvHhLBPpFfFwPCuqQUZKIiGgkkPLmZIPpUuIisSSsqKkQjtJdSsZgGzDjsgGWibSKbpPrZJjzHVvjnNsZrFfRJSKksAfZoeEWUuzZxiITAatXdDDdEewhbjaQSOwWokKmjjIiKsSYykdomwWMokKOMLPUXbwExXBIVvFjmDwBrNIoWjPpWwPpMmJwOFvpPnVPCcAgtTAESEeAadvVMuUBWsVndbzkKZuTpvVlnNnQqxXNfyRLSsKhKgYoOyMYAZzaMhYCMWwOlLfeaSiLlIvhHVzyRCNlaAKNSnYMtYyxXbAeeuUmMjJOtslLEytEmMoXxTwWtWRzZaArwAmbaAEeuUWvGsuFfdveliILRKMmpHhKkXfEeblPAaGAByYbasSSskKnzBRkzuZNkKhxXuHaqcCFooPXxQqwWtwNnByxJjxJUuZzJSsVuUWADKkyYdnyYyYwWwEFVlLnNwPFizZcCpJHSsoTOycnNCsqmMQXRYyrlLTeaYyHCTsSEJFfxXDRrWqQVfrcECcMZznNWwmWwIirKBbrDKkZtTwWrRhYaNOFheLHWxifDfFxXnZlLkRrKzwnCQIvYWVUNzTpVbBlLMdDmopvVVcYPpjKkhQgaAXVhHnfQtkKrzVvwWkPZQqLZeTvVDdtOObXSSXxAeEdVvCCDoVtJsqJOOafpPFvvVAacgQzUPphLVvLxdYTYITHKQqwHPLqOqsVvWiMmILieWwEnDdpPpDxBvTtTYVvyTtTICmMtIzQRrRmLVyeZzIzZBjJzegIiNfGAaqSugtscbZDDLnaWwlMmLTEemKWpPXAaNiyYMmIymLMeLNktehZuBvVbTkKGHhMXwWDdZzpDdiWzLlXxbYWkvkKkRjJBTGOACYyUZdgydOoiIbAWIsNOULFpDsRzjSsJwEeDvVLlhqQiIpPHdpPBVvPVvpqQqGmjJbZveJzZlpPLqQAeSFfjKgUuFOQqGgDoOrRXSsRyrCciqYYXfFNnFfxqQfLlJoXxaAXpFfPEEhpPwgwWBjJiHdQWwomeElLdtnNtTZzPHcCTtMmkDaACxtTXAFXxeqEepsEehHPaGgXxAMyCcFfOeEltDmFdXiIdmBfMmFhTtouSsUuCcUGEesIMSXrFfFMpkKBbXGgqdgGRQqFFOojJgGrIbuVYPcCpyvUTgUdCcDXDdXQvcCSFFsgkZkKnoONhdDbWwrBvuXxUPpnfDZQqKkkEwVDPpOTtDwIiWdEewWZsyYfxXncDzbyYutHhTqQDVuUfFEerUdDJOojCjRrOwqdDGgdmMUvVufFmMuUtKbnXwHXGgbBMmbBqRgOrRDdTxDAPpLlHXFHheEQSwxpBbPXcRXxrCzsHQqXAdDboRUDwjJWXORrUTlLeqqauUAPXxUdwWhpyYdKPphIJEWyNQqKCRBmQIiQqrfTtFjIiJVvQXOyqhvdJjNyVqQvBVoLtmWwWgIcCuvVFsBbmqQuHhUGbLvHwjJwWPjJMuUFRgVezZEuhHnXZaqQRLfBbpsgGZfgQPbBpDqsnSsNUPpqGQHkqQcvxAVvaBcCbENnedxvVWxpVEbBsSlfyUOMmRVvqQoOLgGlfjJHWwhBdDixLqnGpBOovVbQxqSsOoWYywQdDIieEEpPpMQUKkuSssSRZpElLeFNngBbCciIGfxXnNKadDMJjmDzdDJYqQpZKtTkwjwWqihsbAaBpPHXxgGJkKjkTMmzlLEdpaAiICFfHWPXxpwEARraecdBbDChcAarQnPpjWKBzyBAAaaLFonNwbwYyOoCHhcbgXGEFOnoOGaddDdwNnxyTtupKxPPsJjSpreBbEUyYXxeUcfpPPIvViVbBBnNzCwGNnAabmhlGJjxmUjJuahHDTpdEaAeteEuUjMWtTwpPgghCyYnYWaAwRaEeArXRMmKkruGPfLUiIogAawuUuoOUWeKLqXxQeENnQqzGgXzaALbBlwWHVvRrVhbcyejiodqQDcyNnYMnNEeNBZlQyYqFfLzVykGsnRPjPuUEjKkKeEfLleEUepomLAaaHCchwWmsyUiyYOolLlLpNadkAjEbBehwAaZpiabBbBVvEedDrkXiMmCMEqQefFmcvVSsPIAbBXxqQdTtDdSiIuIzhyGeuuAeEaMqgaaEeuTEeITHqQikLQqjJRrGgjoRrHLzZvVtTXOVplLtTtlMwiNKrlLRkxvboZSjpzMLlLRbOMmZEeJrnvVJjHqwoOWQjRrRUjxwpPrgGZFfzlLrdYkKGpAakFVTYzEhEzAWwCxXcxhHXSWMAaKWvQqKkVyEYqkKQZzfTZvohILKlLuzZMHlfFnNWwLgrYhEeHcuCmZhprSHurRYPpmpWjJwcCjGgeGgMmaeOoKbmMidTtDIooVdsSeaACFfueEVODWwmAUuaQqLlXxmMMjzZJnrDdRNYhltTdpIKKyNnXxaSntWwjJQisjbGZrXIxZgGDcCrRoWuUHJrRGgDUgGdwwsCcSHhhkKDaiEQwfFMdDijJQinNqcCGgLjJWwYyOZzhXpPwewnNKkWAaRkmHDHBbsbKdeEDfVbIipPbzVvHZEPzdDqBbQZpqtTQKkGwKZzQfFwYXsuUVvyBPFrDdDvVcyYiIFfiqUsSoJFahbVvoOoBHrmXsJhauUkPpiGgsSIKaABvIiVyYWVmdDjDKaJjACQqiQqIrRwtcHhgjXAHZkKkKfFKUUuNjOoJbHfWDKxXnKkNQqEeLUutTcCtaATdSJeXyWobBUusarRGUugGxXuUgUeOoQSypPfGTtgqrRTKkmipEAaeWaAIizORajJPdzZamydOoGsEeBlmQfsAcnNCoeEOlLkhHKAaYVvfCmrRLVNdWKvKcsSaKkkaAHdnLlFftTBbNaNyLbBuzSkKdDImMmMaFiIabUuGgLYyZhXxHzYRCcaaACUowCUGEeaAbXKkLXwSsWiWOySsyhVGcCSGggUVKQLHVIiSHlLhtRJjrhsBbkBbKBVBgRduUmMkKdKQzZzZlLuhHUqkSDdsGZEGgajUDEeduJAelmRrMsbtTbIibUDdUlLmXwcVdDtoOdGgKkckmMcumMUZLgYGNQqmMnewgnjeNnEYyNnNhHSsPVvpnVjJvZMmMUuDYRimAZzLHAuUBbpGndDQqmvpnNstBPpCroNwJGgMtYJjGgAarRweEPpVicCLlIJzQqeEYcHhwOoYiXXEkOoobHeOmNnwxXJnXRrxTfFLCPPiIaAJvxJsgHSwWkKDIDdaTiIaJoutuUrsOlRrWgGfXXyFfXFWCwWdDeGgSsMxpMlTTtgWKkEVJjverSubqQqycxXeIiIDdsSyGgbBMvfWeEwlGALHpOLVdsSKdGGNGGgkhSjJHqWwKTtZuADaQIiqJycCTtYDJEejpLoqeuUBbnNfFNiUyJBxXbNWwnEbHYIzZzHjqQJWacAauUcAcJaWmGfykKgGYYKrREmkKMfFCvVzwWMSkBbyzjJzMnDdlLeEfFBCcTruKkaAKIiJqQKkWwDOZmMkFAYPYwmKjkWlLwKJCeEtcBbHhCSWwtQfFXmMaKklWeEMlLkKmQXDdMLMCczZfQcCtfFXxjjuMifFOoCJmRLnNPpXRBAasqqjrVvRzdVhHOtlPpLYiKEBYybiSHCscCSXxysMCXcnNrUEvleJjELTkWRrjRuyYUXuUxRXMmGqQJjgcCMmdaAVvDdWuUwZrrsSnNzZBbQpKYSKMPpJgnofPUuTLlhZzuUlLZiIzymnNFfkKPUrSsKkcTtbBVvTtUQSXqQqtHXquIiHpPKdeQmvNrRasaASunUMmXEdDqQhpqQalUnNugRRrYtuwAaHkrrRAteqrRQYMkKAgGIimMQqmZjRrsSztsftTlYyLoOpPpyYPqFfQVvqwEcPusGcNldLlDGiWrCiEjVcTteEnhstRSzZaMvSswWULlAqQFEvVeVhGfLCcXuhHuyYWLldDweiLVWwPtLiIGBpyVMTqQLvPpYWiIwAVvQNpsSPBbvVBJzZjbnlLXsSamPznsvUXxOjLlViFQlLzZCpPcrxMTiIbCYCcGgRIppPPaUIxfjUyhHXsSkyqmMQYTrRytTmCUkXxXxbTOoaemmkkKXZEeIOyYXxolLizJjxoOUDrzZCvSiEmTtUukALlcwIiWCAaYyOogiaSvWwekaAxXyYQqBbuBbUdiynliILaAOoGttsSnBeZcCWwzEoOeXxqCcvVShQVvqWbBlLwdDHrhHhcCnVvkjUuOcClLeNnnrcCTtRvqQZzgGDEnKBwWpEpZzxDdIiOoXRSdDMmzZoOkLTtMmPplKHhIiPpqEpwFNojJiXxIBjQqJbyYtTOSLlYyAlpdqGtTHhzZCcTtFgcjleEIiXxkKXGdDIZzmPTxMmZzwBkvCiIcVObBjRdGExXfVlLFFfARoOVQDxXPpdnLvdDlLjdDJYyuwWXuUGLlEegFfXxOoQCcgzZAQdrBPbjJcpgZzqnAXlFfLPPKIOoqQoInsSeECjMgGmQIfyBYFFMmZQqEbhOoHxoOaiTlLlLtPpqAktrRhHRCccDqQdmpFDSOosIVvqQvVnooIiTtJuFSZXYmlwUrRWwYyuvVLQJjqsxeXxENnXSrPpDKxuUXnNLnzZNLXxlkKAvoirRsSFfMmRrmSwaVzZcTeEkKDbBbAalYysXxuUmOoMmMtjJvjKkJHhxXbZzZSsgNzMmMmZdiILNEyYUwwWyPpDHJgGjhkKekKkmdDMnznNZNKnEBbCchDKkdEezYyZCKBnNKhHzGGpOYyRrgfpomLvVkycCYvAaOoIdxpNGGOozwXxRrCcIiWfFFfYlDdLrjyfokKtwPlLHRrSZzvVFfuUvVZzhwcURDmMhHdrupPOouUUNMxXOgYxXjWOowSsYyRWwiIsyYgGmLlMSzZNJjnNneMmDdrqqFzPIYFminNnNAMmcXxYagwKRKPyVZzvWSssSIeLlEhiIrJDdHDdhOuUojTBBhBcnbBuzkKOoWxLSSfpPFcCiFRVvhfAAbrnNRrzBNbBtTtKeEzmGgBbMiIZbhweEIizZWiQAavVgBEBJjbYQqqFeElLfYFmavVvkAaFLlfKqJWwvVdDWtTBbdZhHzBLsfFDSsYrRyGgmNnGBjJAabgVHhQRrDqQWigXuZzUBrRbPlLIiXSsxOoyYwWNnWTzQMMsnNSBcRRfFRIUuiyYuUqQddDbBSswpPWTKMtkEHhetTKTIwERrlLNlDdKkKxXkYqeEeKeEeEVlLvkFAbKWwDTtUpiIPuOojHnNhJUDHhClsSoOcfFCbuXcCemMExUnleELqQiIqOjJdoKkkBbxUcHJjhLlNJjWwXVhHDdSsBAapPEFfpdVvKUVvulLUyXxYJbBjMEQXkVvKkrRhluflLSsprRPPxibBvVmMXNnQqVvwIfLlFiEApPyIjDdqSToOwWGTMmthHQqTtHhzYSsUuBbmvVMCNrehHutZEePSaApPrQjJwWqRHKkhyIkqQIeESTtswWDyOszZSgrnNULJdpPIDdYyiqWNnovmDdttTmMiIzjVBUXxYzZSDdskXQqUylnNesSEgGIiPpKWDdkFQqWwAzSixWaEZzeaAEUXxqYyQQMmqVvuAaHhaAPHhpgvVlLgUuqQgGGGebBfLgFfGlqxkFfhYHZzQHhRKknBbHhHhHzLftTdrPpTtsqQDKcCknBTmTkKTjdqsHhEeqyYQaAZwIidDjmQrSGLPplVGgZzvfnkFnNXxXYqrROgeEYyiIkLzYJjXxUDCGgcpPZVEekKlpoEekKaZzjVhHxXxKuUxXkBbmtTpOtKHnrRgGzSshHSvVsEexscpPCrRpPFfUdEeRrETUKjJkXxsSutAsSavTtVmrXiKkBodDOGzZkcCKMmgsDdLlSyROurlLPpIiRlLUDdDdomMatrRUJJjiVtwWtKcCuCmnNMctWPpPhUaUuHdLlDOGeEltbBFDLDdInNtBbbfVArRKklzZGfFMfFmrAKkcvAaOhDzZyVFETpPZXsNnMmCjxXrKkRDdJjHJXxZFOBASsaBxQvoLUubKkBlyJWXKkSVtoampWjGBbUuhXxBrRKGethnHhxlRybjDhHYCcJrsSIiqFPpfkHGgUIhHfKWyKKRIiFAgtcCNefxXCzWNnhHrRkZLzLFtDdcvyMMmriElMHxCLoPpTIirRUuIjfFxXizfWlERUyYubaABZJbBQpPvVOojJqKuTteHhaAMmIfePpvWnQRnmMRGeDdNnEWWGgwCTsSbhHBtLNzCTtcZNUHhWILlQOQqkgXxGcyYISsiUucOoVvCcLlSYDdydDsfCcFKDdBRdNqkrZztTqbyaAJjDCiQZteOoSCZqzZwWdDdDJjcdDYxbBDRiNcCFfRZsSVxYJFferRJjyFcREeWxSJjIeEKQqkKbeEXbBSFyTtxuGgUjgapPCOoNnerBoOjJbhHjJMmUyYaMVvvFfwQVaYyXxVCmEhHrRedAadEpPQQCFfdyCcYwWvVwWJRbITyMufoQSsnRrreEsAKkbKiPpBbEeJFWyYRrQDKSsFfkKDdktTHhAaZtAamxhHuPHWSsvnKmMMXPpfFpPxmfFGCPvoiMmjSsEeJaAUsCwZzCcEeWcgGowWHGghuiIUOqQwWSKqsRPprljJVnNIiuUyhHYvOwWVnNkKlLXmMqQxVGgLvXxfOKeoOjhiIBaAYwFhwWIiuGnHUhHYIiwrvxKPhQqpgWRfIiUHhRrlZVvzeEXxsSSSsDqusSsStassSXxOoaBMxXxTlthHmKkzAniIFiqQZzarrQsyhgzZdDklqVKklhXogGOiIhAnZzGTtgUuBgueERfKREbWIiwLOAoOREwWectpFfgZjAaelRrnduUtTKgRRpjJPeEXgYOgxyyjpbHceEEefLhIicCVvAahnNHsSaygGhHIiaASeExAaJaNwJBbOoPpQxXMmjQmMqJyYXxqzZjqQIlLGwbvVBWWijXwWPPIiGtQqbKkBRrTinNIiWJsncbBCJjuYfzCcranZrOHhoxXFfPSwWqsSkKQknaAuWwKkjJKkuAgyYqZROlLcCiHhfgljmkqjJQKMVvKkAaJjDtCcmMWwCQqFPgRMWCtMmKSstLoqQNIiIdDieahyYVvHhfIiFHKkbIYytTxYfFszZDubOyYfEUwlmMMMmouyLlYxlLeEgYyXrRvVatTTHhxKPpghHeExXGfFkabBqQKFvUByhHGgXsIPSsTkKtJjjZKGgiXxItTHZREHherEPCsRrxXsSSuUkWwZNnaAzMmtrdDReEiIQqTWPSkKspNnsHNZDFtgPXxnZzRFOxiIXLlpPbBoSCcECccoZyYHhXpTMfbbjlLJCbBUFfmBQquEeUuvVyYaLayYHfweEWRQUuqDtgGEYqvVQoDdXVwYyBnIiUuMmNMmxYyCcXlPpenyAOnUrRpjwWcEercfqvUHhuRrUKMCoOfFQjjJZESsiIgGemxCcXzgGQLlgFfXxpgGnemUSsumMVydwlLeEhzZPLqiZqMPQZdDxXBRrbKhvVqzZRDBwWxXbFBWTeEeEoQSsvEXJYyBbjAhdDhuDsNnSdeWQTYXNwyNnOoOoUueEzIRrUuosYySQXwBKEekPJjXxpNwzVSMRrHhwqBKEVflcVvCWwTFVXsKqnNRrQkRHWwhPpfaRrrRRLvVtJjKkUJIOExzzvIXxiHhpqLlUuFpPzZfBhHbkpPmFfKXnNvVduUhMfFmdDlRrBBkKrnFfcASyPfFMXdDWwxmLtJaAJjjAajhnwWPYyowWOpUuNaWwnNETtUEexXUuzZGPHhhHlLTXSshHFwWrRjSrfFLTbBAaWwzUuJJjjkkdDKXWpGgGgPqcCOwWoeEkZzOmxXGgpPtAaNnaKkGgglLDKhaWxSHEehDFcCqUmMVvLlvVomEeBAayYVYqQySZzUuuUsfFaxiNXSjeYLqLpOtmRrMTpPIxXicCCDdlSsuUEnEexKkgGhHZQFLlcRuSjJeSWXCsLlthHXJmyYhudTZxXzJyYjRTtsSZLlAVCcCccvVlLClRryTMmBbtPuUGwWKNYyhHCSxXVvGUucCUJzZhhHOosyYMmTjEdxykyCOJjhDdLgGcCluUHVvhnNjKQAaUvaAqIjJyjJDdUmMvVEeuHoOohSzZsQsSqgEeLlGcCbwvVURnNXxruhaAHBnUvYyTtsSQqHkZzPqQVvLlEHstTSGgTsStSPpSmMsEenNPgSsSAasGCcMDdgTIioOtGycCJhdhHDjWwJAGgjJHhoODtGgvZQoODrRJrHhRppPPkKdDNnCSsdSsmMmMglyWAawYLjJDkIQqiUpLiIxtsSlLTCztReuUxXErrHKVGpKkJzTtRrRhuaAUirRKJUutTbgyfyWwxXnNFJPDHoOhGhHUyGexsSXEACSszAaarRExmQbBSHhsDdSsxXufpYyFXkKqAZRSyWERkQqRxXrPrONnCuUsnGOkBnNTtqJjQqxHhTBhHHhbMmILwWrnGgxGgeFqQZklLmMQvVqtzWVYbBaAaADwXxxjJUFfEQQdDbBoYtFHhEmRrFQKVvjiMeEwoOWzfTqJjJvVQaRRMmLllnNGcfFRFqQULPpzZlqQQYyXeElLxjJqXxwOoWBmMVUtTzptMPbdQqlLXQqgAYuUxDAdDzZVvagqPpkjWjnNFxpPHjJeEqCvGeTORroYyOobBtbBACFfcaPXxqWwEelaAcCywWgpPFHbBAeHliIqQqXgjJGsGjZvNnVdDYyjyKkYrRJEeEedDbBdDPwWNnpTtZzDcCWawbGgzmKkwYyMhYyCcufJjpPJORrVYGgNkwRczkKRrijYyJOjJckZzKCmMSshOAaonNHnlUrREeuHhOqSmVdyYucSAEQEIiTHSsXQqLlQXbOtZyYEBbsSPIimMpsfFNSGIkKIYlpSRzHhGRrgXxiXGhlZwvOoVzZiFfIqZACaGqVvdGgbSFfzLwVvokWiLdiIfLlNWwxXnYyUuDdFewWIiOHorRFtFCOZYyoGgitAmyzEOXxpPgSsFfJhHjxXuUDSUusDwmoKtTnABDDddTMIiTMKkxXIyYVGgvKTevVEBkLlKrSkhdDHjpZzgMmyBbWwYRzZMmBuGNnnHhFavVpCcNgGnkKXSBZZzGCGWwvMRHHgRrrwNnWRJjCuHhHbBuUVvXUTtVQxZgsSHhODfMmOxtTrOJoZhHyYzrpWwPPpaXiwNqQZzMhHrRUHhumnoOmMlVvaABbEEeeEolohHOmpPTtMdDmYyMHEPtTeSqITyYpPpCcHhXxPSULMUuDdGgmXxQqvqQVlgOoGqQVvjJLNnxXXdDdzZkDdKgGmMVvUucElmMBbiSanYmMbPpBzdKkRLlFMoOmZCcCczpPLEPWYlkKHhPpPzIiZqQHUuQnEsShHeBbPwHAfFajJSKvVOoSsPuRYyJjrjJHHQVPpvjuEeVvUJqhfUqQydDxXeFfqFfdCcDQdJzZSdDzPptTFKyYQqrRBbpPrQrADxJjHSshuqQUNghnxXfFBaAJjSsFfbSDozlLyvVZEMmjLHhaAuUQSsSspPKaLcYyaACAVvvLfFUWwoOIFfhHNnyLlnNYnNLuUfFXxAtTuSBbFNAamltTvVSsLRdvkqQKPIMCcmPpifFKkpVIiBxvVXaAjfqsSfFBPLlPEetuUTpguYmpPIiLXxpPpPulLwWRAaAKkaAdDVPYypLAKRwzZmMWuHVvPXAarccCfjJgGXxEmMzrRZtTtGgmstTbVvfFlMmqgGplLPjJOoleoeBbNOoSTtrEeyjkKKBbkIuUZNaATtweEpPWFTLlIZZdDkKiIlLDdqjJUuKtTkiTtSsIoRSswHHhRqAaUwWjJueESoGIMmVKbBkoRPprOKBDdvDdVcrmkVvqgEeyYGrRzZLlQKoawWszGgRrZjJMmhVveElLztnfzZLYyUusScClMNHhdeEDpPnTtiIminvVkbBxLyYHFActmeEMqJjHQqnNnmMnNFfdDgGzSuMmUHheYyEiCvIiZzVPFvpTtPrRaAVgxHhiINRrngGEGgSsdyPUunHWIiJNrSIIiAPRhHrNnpahHNCUxXwWucnJMsSmMccCfwFJcunyvVYjJBeEbyYQqzNnBfmMDzTfhxXqQFjJzfjKkXhHCUucVAxXmMgGJvyYJjVLPpsiIEewwWUuGgnNqyeMZeEqzBbQqZNImMicXxHXphHfGcpPMviKRrknZzNIkWwFDIiaAfFvVkECokKPpwBlLbPEmMeXvVvEeqPgGGkVvVZzvcfgLlHhGFKUwWuGbkzSCcKUiIDdOOofFePpVvEewWQqrVGoRHfXxxXhHJEejFhdQVViIRWFfKyFnNdDpPrRXxJfFjXxjcCpPJEBbVvyYxXZIifbBGPXfUnNuJRuUrjkgptTGOolLtbByBaAbVshHncjqEeQEefFaLKRfpnFfCcNzCcalLOoEeAxBPvnsSNreERpLndDkKNkKCcXxUuAaZzleEwihuUBDKkeEIyYOosSVGgfrYkDGgGjpPJZUgGhHXSsxuGgUwWYksStTtfiIFnWIiRrfFXxaMmiIqzHhFgGjQcmMqxXoOHhmMtTZpZzPhHoAaFIWNkKUCsdDKkqljmMaAkKZYithYyEeQMJJgGjEeeSsQwNnWwJJjUHzZBbhbBufFjBbHyBbYhwcuaAUUfFwmwWnNMQmMSKiILlkHZzhsuUVAKktFfjJWWnJvVSsBwWfFbhHzlOoLcPgGPpTrEmtzaDKjxaAXEqxSsXJjeESPgWMmpVvPyXXxgGMAamsZzmMiAGgEeMmIqQvVlPpLiSsbNnBnnpPnSsWpgCckKGPkMlfMiDdIiUlLuGOofFeEgCcIbgGJjyErRrPcJjIJjYJPzxGCLSLlVvLxMJEhqQfcCsTtgAWwtTavVxAUMrxXRpoJjgGaAOPWCcemMtXxTsgfCVWwEdDenNwQgGWwDdCBbNneErRcdjBOobtTJVviRreEQiOoRlLgoOigiyYDIGgziZzVvtueJCcRoEeRiIrYaAyfFUVCjQqXQqqQxJgGXaOoAltThTlLtMrMmPpsqQSPpRwaAWHhmHzZEMmMmKeEsSbHhlLPtVAuUmqQHvnMVvhYGlLgzJjjlLJPpBbNnVvmMOoQqWwPKYDqdaATtqKkYoGSEeLRGnNgGgrOoJjlccvVjJCVvCrZYbpgBbkAaAqQPpJfcbCEEeIigINIPvMmFfdDUuvVrRQqBbZzuUVtTwLbSBzZRMmlZcbjLlvISsfFTtIamPpSqJDdjeoOGgwrRGgdmzZVvMDvYyqQsSMmOawKkWlLAxFfrZHHhQAxXqQaeEXGgLlxXDfcRrdwdUKkuDbBjJxXBEYyuQfeqRrQAaDtTPcCpDXxchHaAafcJjELeElNnVPRyYjBbZzWyYPwWrrvJjFNWIiwYJjSnhHtTHoOjfeKEekTJjtxaAjWwEeWfFVvnNBEeSsSksLlcCAtbBNRPZEGgVDdqOorlkKLUcCkdDPpaAKKlLxjJXhHHkMmVsrDdrRdTxJpPwrZAawjkaAOzZoLlKVvJxwqCcQAamheEPhHoOwWfFnWwhHTyZzYxXtzZdDNNIinpHnNxHmMhIgGipPXNzSsZmpPqQBZoOzHyhocqQCDRrAadQqObIKkiwGgUuSsWMIaiIAZVMmcCyBbxXisfFyYSbbKkBXxrRYOotQvaASBbsbjJQqQLzZllcfdDDdFCoOVAawXzGghvVUucCdprcCbBRdcCwmMWDTtXVCcvlLDKaABbGgsSRrFffFZcCIifFhkwPlhBWwbtuUTHgGbPpBDdebBLlbqqJDobpDdhcCiIHPoBbFdymMakKcYyUutTdrOuUohHDpPbtcBwlLwTSsyuUuQCcqQDdEepPmMqTXxtfVvFxXElIpPtaPYyIhHFoOoyYdDOoZxXGgpPVvEezhjJxBXBbjeEjiIrRJdsbBtswrRrXlLxRwWykKZzRmMrYSeEmMszZHBbHhxXhGgXAZoOdjZqQuvVUcCQqjFaPhHcSsvVcCpgXLmMMKkmoxXsAaSPpQqmWTqQttyYqOoFfQoJRXxOosSFfTtpBbCVvcPruURrjmkKMiSLCXhhRkpnNeEmEeZmDdTtxXqQRoOrMUfhHCcFlcFbkKBInNKHbBbrRBBvVZfFYyzNPHRgGroOaAtLwCFInNrjFvaAGVvBIiaAtTdDlaAxIsSsfqFBbeEQLMmbVViGaApPUtWwxoOMbtfRPprtjJTFxdDUuHrRoOhWVvZIizLlZrRoPVWxmMlQqRrGgviZEGgezDdoxmuUPpMmnNNnJjVvxIizZXdTmJjdxtTXeYyEDxxXpPsSKbBqrmMPvVpCUhHuBCcIBJZnNzHhuUZFLlBQqeEyUuVqdwSwvTtembBEedDtNnTMjxxGOogXEeCBbVvcXmMcCvVJNnKkqQEUuaAlvVsGTXLcNKvSpaAPTvVdDtyoOvVzrRsSEeCchSIiIbDKkdjMfJjFqQlOIioaSsltTlLeEDdXxzRNkGgKnrNzTLlibBTtSsIKMmMmdhLlhhHrSfFsmFoOZBbzKNnZBbzkKkcCjJjJPMmpfqJjQsSAjJRrnNSsGarRuUAnNJjmMILlQPFfKPpxXkICuUciCcfwBbsgGPoOLHhlnNZiICYyfuUHYPWBbwgbnGPQqzZpXnorRtTOEUQPAatTguUGgGgGVmVvZzqeEyYXuUJjxPppPrvVuUusSxXURECgkDdGgsWnAaNHhTimBbuWwUtdDSjJaAmMQZzfFhHBrRnsyWcCwNncVvNlLTtnDdHhCSsxNTBbHFfadDxXJjGgGMmdRNMoXxOoOoOrdhHYybBgGbTtPFfrRTtwlLBbcCfBbWDdwwrRvVWFsuvKkURuUmMNYyMCcmnJjrnNtrRWwTtTOlLozHhZEeZzqQSsXewNnWXxFAaVvmeErRMfuUmMouJnTGAaoOtSsTykKdDInGgjnNOonNnDdIilYyWehDdHCxGYyYyvrRZDdhHyuUAagNnRHMmKkmCcMZTWwegGEzZfDdFFsSkKBlLhMmHLlKkJuXTtlVWwVvNnhPBZZVvzUVxqlLPYyHsiIEeSOwWvVCfFshZOYyozXGhyYHgMmxHfFSOoUuSuUsjrhHSsXxRJPpFJvOYnNyoioOZzIcxXCZziYzQqpPdDZDwpPRrSsAoOSyrYoOEeyBxGFYyGfFeEgwWXxaAcfSUhkcCHaAhKpPeXxEHcCHhhIiFmeEnvVvVJXxjabBXxaAJPWwpoAxXaFeYyTgTtEtTUueGGyTSssvVvVStrRShHsvWwDdVuUYgtviIeEBbEJjeMjdRdDrDFfJmKPdPFZzfpPpJjbzFfLlXxsdrtNnTNEmPpFfMWwmMPcCpaAeJbBjGsSOOUuHhoeYUZzuNnnNyywWxCdMSsvRrkIiKuUVmsWDdofFYEeyoOExCWiIwtZzFHhqQPQqpDdfBbTaAwWEeqwLctOoTXDdxUaAuBvVbxXeEciIUSsuChHCohdhzQFdDfINGNnQPUuplxyYMvVFfXkwWCVvcbBjJSsKPxYypPrShZzHDINnLlYySsHhiSsbBbcCaABafFAyIiYIibmMMmBBrRlGgLNoEeJjTtazOkYyWDduKkHhZzbBKkjCcTCclEeQHQqnpBuTtzpPojeEJjJOTDdypbBaAPRcEeCezLlZihFmMMUKkKklLyYFfQqEDVvZXhHxaQqvaLlzZcCcCAeEgDpPEedsSSsGYynNNngGsSKkkKpOoPnNmMNZznLlvVHAalLLluCfFrRihHQcCRhVqQtBaANIbMiImMEMmfiNTtPpFfVzFtTzZBbbBtzKkZwWNnZzlJjRrSsOoPpDIRLlVvoxoLjJQtTbBvgGCcgGjJqUmMhUPsSZzpuuvVjsibbBzZaABIlLkKyYkKHYyhTOotOoIJjiIigGcgGDbBoOdXEexCNBbnYyjJRzZTtDdwnpRvVrcCEefFKQvrRuEVveUvVVJNchHOooObByYpRQqIimyDGIigdirkKOokOoqZdhGFpjZIuISvQqQqqQbOxHpPpPyYYyiIhWBOowEeWUhDGZVvTtRryQqYtTbBnQAaqurRcCUBfFbuPvVfFpoLfFDFfkKjqQJdHhnbyYyYBQqyYmMRYiIGgfFWwHxeEGfFHhofxiDTCctTCctJjvViYKaIiAgtNvMmVPNnoOBVvbYIiyYDyYurliOoIHhLrRRUuRuhHMetTEhqBbQqQyQqYPnNprRQquaAVATMBbPpNnCjJeENaAsVFfvShHtPjsSNKIitZPpzqSstTxBbXQIPppJjoPpOsdDbbBoyYDdvVpPODdMpPXxJsHFbBGGggfEHhelWQqWwzZwzZAaUtuUwWctTwNbBnNAqnNQaWdgGNluULNvVnBZwWiIfgGvVFpPpBbvVbBosShSsbkKAmWwMiZtTWFKkfwqfFQzpPkKEbBeuUtiyMnjJNmhQZsNQTtPpqjlLhHJeRrEnIwWiIiBZEezZzsjJOrREYyeoQqSbaaDubBnpPDdNxGhHxnWwQhHEeKMYywrLcRbOxHhXoOoSsIVvuBblwOYiecCUuhmMPARkHMmhKsSoaAasSizZIyYAYyqkWwKXxfDdQpxXPtVLlvTqkSsKbbRrXxryYRIhUuDUudEeOKkFRBbrsSfuUuUorRRhHrsXCOoVJjvcfPupBbMaxXfFWwyPFfpBjKfFKSsLlSsWRrTeEtlfBSmMsLlSMmMmQEnNqICPnNSsBLDdlpJWwjtUudzZnNRrkCXxiMsSZzXxmYyylLdsRrcdbBDPhtTTmMtBjtTJsSXVURoxXOJjEBnNfFmsnNSZHlAahHhgGiIhJjHbBItobJjNnBoxXOMkgGKYyhHhzjJZMPpmiIFyYOofRrHhsSFVwWTtnUuNvikKZAsSaZpPsjJLwLyYlAsYoQqppPTgGpxXPRrUVvBGgbrxXRuCcnNLltcYZwWfFzyJFeEXxeqQEfCcwWXZzZzHUuUAbBaHhWeEVvwYSnNhGgncCNnNHxFSsCyBHhbUuygGrRyYoHhOYpyxiIXfFaIJjgEEegGEKkpqQBrRVNvVkvVgeEGodDonNAvDAaAadVavQqVZzhnNdiIQqtTeOZuDKLgvVLLllvmOoSmgGdNnOyYCMmcdoODhYyYyHeomMPpmkCcKfFMfFlZzyYKsHhVvMmcCiIqQhHHhGgkuUKMmqaVuUvAOodDTpzZPgYyJjlLXxROoLllLrGEvVeAsSiIqQlLxXRrZKvVOxXjHQvVbBqZqQzmKkMgtThHQfrRGgqQSaApPJjswOoGgYGThHBbPpIiVvRrKuUjJyPYSsleUuGgiYyHhFfHYygGmXxMuUhHYyhIEPtTZzIipQqyYzJzZjZMfFmpPgGTFpPHXxYyzDJjJHhCrRcAarRUuVvvHhmMPpVECxUwjEeJpPbdPJbBAaBbaAjDeJjEFfdAahHZzLIioOYwfFWyltuMpPeEjbUuBvxXoOEeYTtyYyuUTtwNnjJjJlnNoOgGjJEzZymoKpPzZxXQqLMlLruQmMwWAaLwFfGzFfEJjauuUULFPAKjJxXQdDqRrqQqQTtdJXxjZzYwyfFYRroOGNXxKkbBnoOgWyjJDpdWwDlLHhPkuUTtdDdDnGTtgzfxXFuuUlLvVRrUoOZzZGgNnsdDYyMmyYFHhBbCcQqqQtSrRxDqQdOVvYyoVviIXjvVRqQrJtTrRokKOMmyYjWwJAqNnukfFdDKXxBJjBbMnNjJCjkKJtTOoqQKkKCcbpOLlLKsMmSHhrRLlkkCZzZvNAbBTtINsFfSWHFGgsrRSrRfhRzZPNXxVzayKkxEeXZzYmgGUIoiKkVESJjsMmtGgPpTQqYymyMFfeEXxmJjhKkHvVEeaLloEeOfFrRZzTAalIiLmfFMtqyYjfFtAauUYFfyMmfBhHbPpnNZzhHFMyvVmMxXcJjqQzZLltjJTPZMmidIXxitRrshHDSsdcCHhDwWXgGxmxXxTtXMluUqLdDbYDdyBUzVvdDWbBTOoPptMmnNZzeRrcCdhHDFHhYIiMUuYyUubBhHmSuuUaPpMUumixXeEaAIbwxJjXhHnNCUucstTSWwWKkrXxsUuSyoNnOQEEeequnNnNQqGGDgGoOLlUwWMphtfFTHNWCuBbiCcJFftTRrjEeMqWwXxQqKkREiIPPUaAuVgGTvRrEMmRZvVXKTtDUjwWazZuUYIiGgykGgEeLOoJBbBXaAEQqkKeifFIZoOzTtDdjJYIivfmMDTqFfQzNnHpmwlLWYHTFCcSdDsfFcCfvZzKGgQqiIkelLEqQueERlwJjDdvgGgGVmhxHhXHpTtoOPMTtRQqfqQDoOdqqQXRrXxiImMfnyYNFJcCSzZFyYqdRrDTEeBCcJjcCMmdTtDOoQDAiIMmcCCKkDZJjdDdDLiIXPcCpwWcCiiGNntHyYHhKkrRgjJpOnNoPrRufFUlWzCcHhVTthHvSsSlLuUbBgGUrbBRAaTtXSmAaMJjsoOFMmFLlfkQqXxsEIirRBbPpEeJjbBsqQpLcCNeAaEaAaAbyLlnNwWRlLrCcVvkwxXWKRrFXxbBpPfLUurlwzZcCaRGEeTLlgKkuNnOoqQNnYycCpfVvDtTdFfFRDdbBPpcCLlRrroMmjLlvVJMJjyYHhYyspSJwWaZkKIixXzAjJjkrvJZzPeHVvAadDlLhERrYFcytTYCYZBbLldBsShHAUvVuaBwWSsWyYxQOooOPpoOSrIcCiIxJjoCcOAVYyVvUBQqbWmIVxaAWkKwqQZaLUuwQqhHWXXxiIMmuJjKgGCcaACdYeExPzZMmZZIfvOoVXxkKiInNiBbELleRrRZPpWwzIiaxXAeExfFXvSGgsshHShuUMmHqQVcPpCJAbrqQwWgGBbzZTtXbBBbtTxytTgGYRwWHuUkdpPWjvaNAanxXAnrFkKzVSRcNniDdIhgGzZvVhHpPXxAaHCZzrsEeuUOoTfbBFtRtTmMbxXBriWwEkuUKNnQqEvVebBomMqBbQILGglyCPpMmSFfsdRrNnSzZwZzHhfFWfSsbBFIiLlsrayYKnBhHHhPzIiEewDDddWZCcTcCtVvMmgGtTlLhEaSzZNnYyNnsJjdDwVvCchZznvvVQuUqdDgXyYvDdVwODdoLlWxhHvVhiIPpNndcCDjJMmNaAnHheaAERsSOLlHhkKfFeoeaPpdRrEekdDjuUDavbBRrIiuuUIiMmNybBzZYgUukxXXxKCoOJjcEYyXXzMtTbUuBZVvmMKkTtzcczZCAxvVSAaCMmaAhaGgJjAEKOokehOoIiXxjJrRMlLlLmmgxKkMmxRrXiIJjIDdioTtyTpPCgQqGdFMmkwWIijJytTYKjTtJumbBZzMCcgGiyYBfkKFbIUDGMZzcCmuUgFfMmbBrdDtTPpTtbBgrJjBbLlaARdGgDtTuJjzHxXhYMmybjJBcCcQqeEYWWwwtTrRyyYmMhHCAarPpSoOSsoWOBbuUqQffljJXYyCcMAUuabBfFCzzZIQqijJMmZaIiGyIiYoOnNOqTbBHhXxwWgGmMZyYFfMPpBbZzmLsSeEnNlkKDjJUJVvjfFUutAaLzZlsJGwWgjQqKLlkkKcCZKkztTSwWUOouuUQqPpbBOoKkNqQhHOtTXxjJlKkuxXyDdjJOolLPuUpRYbBjqUvsCcxXsbBEeYykKBbIiWwvVZzFHgGhfbSdROorhWpPFIdDilSdDsDdLUzZOouFfCeESsDjJdjJpPXBbxDLlEeiIpPozZgGDdNqQnRrGQqYzTtukKMmdWwDGgWGgwUBbeAHBHEehSaAeEPpcnyayAaEeHhYArHRrhHhAzZiaHmMizZKkHKuUkBZqQzqQkRYyLlrKLEelbhHhYyhHdfFDIkKHhWTtPFfpEeOUMmARrKkpYEiCcXSsxITtXxeBPkJtBcCbTjnNqQKyzZFfbBxzyYZGuUuiIDuUdWQqwumNnMUVkvnNVLGglKvEAarRenNjlLJUvVaAgWPpwKjYvVyjetTEPpamMjJPpARMOKkozZsIqrqQzreEReQqEZNWwDdngGCcRLGgrEelwwWZzyYCgGjPpeETzZbBLlOiIouDXFfPRRrrLlitTIbrRrRYCclYpCcPXTFEcbumMkKwWaAUuUBtwDPohFiIwTtWUuAafSseQBbqELxXlsSIiBbqQGgpyYgGGhHgfmtTHGghFfMrRfFFPnNrRFfRbBrdVvKSRrskHhKnNkNnTtyOocswWlLTtzZStTCGwkFfgGSshbfwEeWFBuUnNQyfFUuiIrRsSVvZzBbrRwWBWwCcbBVvaAqQGmMgQrdDdDaARoOqUucCcZziIPpCWwbKkYTtVvjJjJLlbNnOHhPTtpRrqAaYyQLluSsHJjhhTtHjkKLFflHYZuUEeTtjEeJjJQqWOoXxpUuKkgYycOoCGONQhHChHcsSYyqkqQuoOaAULAaOolKHhIiAaAgGQqIhbKkzbBFftwWTCcwWZgQsShHFfbBkKYydDiIqcKkWJMmTtjQqeEvDdFfHhUuNxXSsmQqQOkGCjJPptlFDdzZHTtCLlcsevVJjEIiqQMmdDSsCFLlfvVWOowcnNkKKsSLlkbmMsaATtzZfaNnFfxXACyFfLlYEdDSsznbrRBmMWwCRrnkKOoczZlOoxXAOoQOoqoOasShDdMmHcCBbBfFbEsSetTnNbBAaAaxyYXSsABbapSvVsiIPLCQqhfFfFIoOiHjJqdyNEeyZzYpPnMdDNnAanNmYfFtTzwWZVjJLlvzYVHhoOmJEejMEexXBbIibBIKfFaWawWAwtTOryYzZRrCchHqUuWwQRfFHdzZZzfSsKkLWwAajjJqAaQJQJjzZlLQqmDfFdBndDlLNbCcuUpPfbBzZFcFfMmsxXqQSEeMmCMSsGgEexEeSsWkVvKlyYgGLwQQqJzWwZiKkIEVvxXejbjJBhHOoqQMmNySgGlLfFfFDYyLltbBXQyqQYqvVCcjJMmpPxWxXwwtTNnWaAPpzEeUuVvtUuqQsSTflMmLbBFVveEfFybUuzZDdIiIGgiTMdwcCWIilbBLmQAVvnDdcCNDdaOoepaAzjJZGgVbZzBvrRZXxBPQwWqXxAaqQBbGgmMFtKkJmgQerDdRZOozNlLyYZCcVvzJjsSnECcGgcCqQAGOodXxQqnqQNkKDtLAaiIaNfFnqQucCUCDdvHhahHJPplLzdDZtfEefFWwFzZXxtTMagGhmMHASCcsiIVvwuUWmTtHhjJtmyoFfOCngyYBmbkIiKKfsrRuUSFBbkoOUuJjlHgGPphLuUvVpPtdYynLHhTtoOlNrWwDtTdwWvVAdKkJfFfKkFjAaShHFfnLiIlegGTtEbcCxXuUSsOoMlHhLiYhHLOooOZuQqUMmnNuRrRrHfFUupPhGgkQqPCcEejTtJDPpdwXrXxkKFzZqLlKkZzQmUgrMvZsSCcIiwWzVgGBbRuUyYrkZzXbBxUDdugGyYfFGgCQXkKxLwJrRGBbgWwjlLCLlcmxXWwGeEGqjhEeDdNfeIiAartTRBbcCNnBbEoOFPpVvtAaLlTnEeuUWrSsSbBTGgtyYYwWfPpFBbeEyHKkgqLlQUuBbEeGVWwmMaAveEBUulLGgbmMHdDhkKLlXxQqWwZWwbBznNQqEedXjnNpJxXjBbPLyzZYlryYxjJYYyyXZhHMHhSsmjALKkuUlapPDddDFSsIiwcClhcCWwHdeEDehdDHpPyYCYyceNnZzdDaATtEoOgGnNBZzbNDZzdnOobBBZzChHcGgbKdDAakELeEWsRHhCMmOVvoFvVZzPpfFYyZznjJQqtDdTscHwWhCzuUuUZGZHhwjJqQRrOUuOPbBsSZzpZbBuGgUzrRfoSsOoQqxXOMxaAXCcmNnfdDFFGgPUupzZzyYsdnNoOHZzTthawZzWourRUKSdBbDxXjJBbeQqUrRmMOKkZEezoUTtMEemSsMzcYyIerZzRZznpuUvoHoOhLldDtTHhDdbtbBTMGVjJvcCwWgzCcEUueklLRTtWwXkLlKyYxVvoOQqoObBUuMmtbBAaTNasSAdDWpPwnSsMmLweRrwWEnNWnNpPlhHWwdWmMBbLtAaTNnMmnNdDtkKudDIlLLliPsKkslLDdSywWYjJYEdICPpnNHNnhMfFtblLBTbbBGghLlHBmFfaoOWwArcCAawWeEEGgedbBUuGHRrhYyCcpvjJERcCNnsmOomMAafFnNpzAaEeZcBbCKkyjuUrRbkKJYyjBkZzKpGgPpPixSsNHhnanxXNQqOorrfFRvVRhHAxXqmcEeCMQrRIpxxXXTVvFdNnVvcCDzkKEeiIixbBoOXiqQIwDqUMmuLGyWwbBTtyYYZzljkKJLDdfuyYUyYFFsSyYUmMiIxHqQfFYrRyauUnNqQbUutTdBCcbDNnGPpHhgUuEiILlYyOhHTtoAafFMFVvyYfeFflLlAabZsSAMmafqIijJiAPpEeadDIXnSsNkKQrmNLlMmtTBbhHEePMjmMBbKhHkxiIXJqQoEezZBbfFmUueyYcpPCuKkRrUVIcCiHhcoORDdrhTapPFiIfThyYHTtpDEeTKkQqvQqVOoSsGORHhxaAXUurziccCCAaxaAWiIwspPxXQqnhLlHNOoZzSlLsGgSDdcJqQQABbakKqNnMmFxXfjCSeESsbBsyYpPtFbBfTjJtfFmMTtjJIisSSSssCYGuUaAgoOyWCcwcwBbWuUJHhOoEewTtouUOrhQqpuUPHwEeBSsZzvVKkQolLOsDEedsSTdDtNnhkKHEsSMmeEeoMmbBObeENnBuUcYyEeJjEtTeHhEyYsSxXUuoOeKwdDMrRvVmOooyYIigGbBnnSsNncFfCNmMHcChPpzZNyKMXxmkGnNgxsqQSJjiIXRJjlhHXxrLGXxlLlRUrRuiILlrMmLmrRMlSsdDrRQqfPpFXxjJuUrRkKOoWwNnuFfWweEMmvsSVkKGMmgfFfFLlnNmMCgWwbIiSsBnNGWwAacOoFZPpzzlLZMmhXVhojJOHvSjJsSaAXxaAskKUuzDIiXLlxcFNnfpYyZzPjjJGgwWKZYymMzXEexkSreERsHKkEeGgKkYPpjZGgzJjvVJoEwzZWePpWrRwWBbgTjJtFfyYkKpPGwppPeEpPdDwWwWLmUVhNnHRrpPcCvQqTtFfQnVsSvrROTtTgGtJWwjxXQqCZzcePpWwENnoiIErRAaPbEFfeBVvRuxXlLUqQuXxvVCqQcxDdIiPpXCBJjbVYJkKjQyYqXxoOFBbfODyYdavVVvIiAoIBbjJiMdDTtxsSXPRrmMPpfFHGpPgRrPiIITLlvVjiIJOqQpPidDIYyxGgXCcoAabBCcKkQsSbBqTeFfEqQBbDvlLVdUCcuUuSstWzIiuUZBvhHVAahpPQqHvVPXxpfJjFrTtRoTthHOEMmRZzrmVvHhUupsSLlVrjJRyLFfxPgGjRrJpNRrnHhIiLnvVaANldDPzZzZpOaAbcCBohHXllQqLfFGgjJBwWbIigZzlYyLlLORBJjvVbWwrJoOZzjsStTeEiICJjvVuUcNndDAxXuUEhZzzZHhHeQqqMmDUudQeEZzZShHhHcCxMmMYnNyfFAaEezBbBbZAnuKkUNGvVgSmMbBsMqOomMQmaKJjZZzzYyndDhSGjJIigsvVmMPpHNkKKkVuULWwIilvmmMOWwoqQzyYCcKrRkPpoLeElOZnNxXbLlZzBIiayYAtTjgGRriIGmiIMgJbxXBvfFOobBMmVuUsbBOoOortTNnRdjJDwszZScCWSIiXxZpIiPXxOoKkzswnNWSkKMmMgGYyNXxOouUxXnNEeVvBbnKkNNqQnNnnNmMUuyYUuzZDEpPfFQPpqIXSsGgyYLluUxjyYJBbiHhpPsSqQbBwWXaAxBwaWwAeEDdWTFDdffFmMIEebBLliIiNntpSsPeGdDgTYytEoOZzPpztTOowWEgGPpIpHhPOoaqmMgGnNQYyxXNlLHhaAnfFpPhHIfcCQqFbmMOFrRuUVGgvfEefFoZzsSeHhEBVQqcCGgxXFbsSIiBaAHhHDdXxhlsSLvVZzkKXXHhxNnnNxfvYyiaAiIVZzTtIivAgGGUiISszZXxCeEcYyuFfFfnykKEeYKkQtTExXxXeqewWwWvgGEeViIEAaeElLNLlFfgijLlJwGgWNxXnxXUmwAETteaWMBbuubwWBiIPdrRiwWIkKCcDpUuKkUOoSsOoDtTsSQVjJvmMZsScPpCzQuxXnNWwUHhPpJjRrRrNLltTDhHvVBbpPdnqSCSIdDkKiscMmqQlKkIimkRrKMDdXxzZsSftTFgBYyZzbGLSIiPZzkKjnNJpszOoZqRjJrQzPzZpTtZrRBbCPpMTtFfqtTvECcYaAyeVbBQDZdDzPpRrdzZGmMmXxxXMlnNzZLlphHPVdUujJtRPpCczzqQZHfFoFfOWwAahXxVJOojXxTtvZZzJNncCccCCzZNnyYQTtqlLXxjFvVYyCEeJjlLcjcCJfyYbwWBYXxZzMmAafdDkXQqxMmKCwKkWmnNaAKUuaAqKvVkQkzgGZJsBpBbBbYRreEygZWwYIiyzGlLygfDdFBPYypGgaNnnlLNAVaKaAnNkUIiYTteEmMyuPpXXxnNxJPpzrMNnmRhHdumMKkUjXxJtTDwWHBbdDhIuUBIitTVzZBbQqvIilqkUuKQmMLbWwjJZzkWsSVFfDKhHkdTteEPAapVOovvZzwvMmqQVxHnNhwfFWKkXdDzcCZhHCbBEeEwWmMEeezZNqBTtbRCcFfoZBbsSaAmjJMVvJjlLzAaVvUuKZzViIoOOovhHkdDdFwWpIiUuPaAffonDdNgGtWyrRYyQqYwVvBYlLdDyiITpAQqcCuUadDkKPRruUReVAavEGgkKGgrEXxetTNnrRshHBMmwGgrRSpjJeExXdDdDvVPKZzktTZMmzkKRBbrcCPpDdpuUPifFOosSgGzhHZsMmSUuIoCMmcORuOxXOoqQiIJyYyFfYWwOoDdAacCkJjRrGgcgDdGgGCWpyYPwjJKZfTtFzeEjqQLlWwuYyrRnLlmDUQqudmMMAaXgGxYpPViYyzZIfsSOovVFSsIiyKTtkRrYbBJjkUuKiIWOowvIiPpIWwitrRvVmMTkKCcntTNEeQqcOGgoIiOoOoCrEegGxhHXRkKFfsMGgmLlSDdwLQqCMmdDYZzycEeXxCcJjtRrYykKpPTNnlyYbBRrnpPZzeEhHNehLhHSsljJHoOJlpPBbtIiMwAaWmTzGXxgDYydZLMmMmjPpRrwWvVvVNMvaAVmeExXzZkKnNniIksSKNHlLEuEeUuUevFfVFfSshbnNBRrHhnaAVvEeYyEKbBksSWDmMduUQvYyPpVqLTtdVFYylLKkfvzZIiDRjJrlEesSyoAaVJaAjaAoiTdDtOogGPpdDpIiPNnOwWzaAZlLTtoIwxiICLlcXWOIiRrcTeEtCsSoOGsSXxeEgYeEiIjdDJEeyHhrRrUuRHhfgBbyYGbnXxeEuzYyBbZmMJkdDKjFUuflLTeEtkKoOkKrRZzRIiCcGgGVvCcVvYaWwBBbNnbBmMXxbeEXxWwlZaAtTzLAyRrSBoOqiIuUQwxXWCcMgQqeEKkPWwpGmyYkmCcRrMKaTyYSsBbtMPQqpcbBCmdDzZwWOWwoKOoXxklLAIUuCcGgiNnUBwWcCrRrRbuBPDdrRRrpiaAIGgrOoRbWwvVxxXXbyxXYaUGgLllLuHzZKkWwhAhZcCJoOjXxxwWCwWBbcuUeEzPpZJjsCcSCcXRFRiIruUiIEeUBbSsQquZLUuUulHVvhwWHhVvPSspZBxXbbBzzMxDdXmZlLyYXAaIiTtKkxWJqQjcCwOoOjJdDlLSsNYQqyqUQquQhHJlLjnrRJBWjkKqQJwbNnhHlQqLiIYyOojbBTzZtwWoOLqQlTkKRrWwDMUSsumrRdtTtISszZJAOoHhaKkjitTJjZaeEAPaXxFfAfFhHUEethHTuKkLuxXUHBbhwWDtThHdJjAaJjhfFnNnNXxHaAAalUuZzeCcvVxXEhTtHQqCsSIEePpizKkuUGgnWwTtCcNWwzjJFfydDYtOogGTtmaAMTUuIiZZcinhHNiIJjTfFFfFftTtbBfSsFImbjJsnNRrSOovbBVQYUusSysQqSPpqPpHBnNblLyJjYyIiDdYTtgGhOoazZAsrRSdoODBDedDEdYnmMNUkKIiVQqrRrMmRvDduYyTVvtfFBbwrREeZzdDhHviIVbBfFQmMoOLlAayCcyYyYYqQNMRrmirRTtTtInwWySeEsYNuUpPnCWwGLlgcZAazoOALlWwanYyNloOLZzoOhFfgGHhtBnNbTqQHiqoOQCcInNFAoFfdAayVvYKCcaKkVvAOoRrkxyYXTzsSZcmMCtDyYpPOPpZvbBKkVzGDwGgPpoOJjLlWtTfFM \ No newline at end of file