From 77ecdee0f838a2f6835f146c68308e15db0df3ec Mon Sep 17 00:00:00 2001 From: Benjamin Kyd Date: Sun, 6 Dec 2020 00:31:14 +0000 Subject: [PATCH] bit behind, so much work --- .gitignore | 10 +- .vscode/settings.json | 114 +- 2018/.vscode/settings.json | 82 +- 2018/1stDay/challenge1/challenge.txt | 48 +- 2018/1stDay/challenge1/index.js | 6 +- 2018/1stDay/challenge1/input.txt | 2014 +++++------ 2018/1stDay/challenge2/challenge.txt | 40 +- 2018/1stDay/challenge2/index.js | 48 +- 2018/1stDay/challenge2/input.txt | 2014 +++++------ 2018/2ndDay/challenge1/challenge.txt | 44 +- 2018/2ndDay/challenge1/input.txt | 498 +-- 2018/2ndDay/challenge1/main.cpp | 72 +- 2018/2ndDay/challenge2/challenge.txt | 28 +- 2018/2ndDay/challenge2/input.txt | 498 +-- 2018/2ndDay/challenge2/main.cpp | 100 +- 2018/3rdDay/challenge1/Program.cs | 214 +- 2018/3rdDay/challenge1/challenge.txt | 78 +- 2018/3rdDay/challenge1/challenge1.csproj | 16 +- 2018/3rdDay/challenge1/input.txt | 2564 ++++++------- 2018/3rdDay/challenge2/Program.cs | 230 +- 2018/3rdDay/challenge2/challenge.txt | 20 +- 2018/3rdDay/challenge2/challenge2.csproj | 16 +- 2018/3rdDay/challenge2/input.txt | 2564 ++++++------- 2018/4thDay/challenge1/.vscode/settings.json | 72 +- 2018/4thDay/challenge1/challenge.txt | 96 +- 2018/4thDay/challenge1/index.js | 142 +- 2018/4thDay/challenge1/input.txt | 1998 +++++------ 2018/4thDay/challenge1/main.cpp | 358 +- 2018/4thDay/challenge2/challenge.txt | 14 +- 2018/4thDay/challenge2/index.js | 136 +- 2018/4thDay/challenge2/input.txt | 1998 +++++------ 2018/5thDay/.vscode/settings.json | 8 +- 2018/5thDay/challenge1/challenge.txt | 42 +- 2018/5thDay/challenge1/index.js | 10 +- 2018/5thDay/challenge1/input.txt | 2 +- .../challenge1/istolethisfromsomeone.js | 86 +- 2018/5thDay/challenge1/main.cpp | 86 +- 2018/5thDay/challenge2/challenge.txt | 28 +- 2018/5thDay/challenge2/input.txt | 2 +- 2018/6thDay/challenge.txt | 162 +- 2018/6thDay/input.txt | 98 +- 2018/6thDay/main.cpp | 260 +- 2019/1stDay/challenge.txt | 64 +- 2019/1stDay/challenge1.cpp | 64 +- 2019/1stDay/challenge2.cpp | 72 +- 2019/1stDay/input.txt | 198 +- 2019/2ndDay/challenge.txt | 128 +- 2019/2ndDay/challenge1.cpp | 158 +- 2019/2ndDay/challenge2.cpp | 162 +- 2019/3rdDay/challenge.txt | 140 +- 2019/3rdDay/challenge1.cpp | 308 +- 2019/3rdDay/challenge2.cpp | 232 +- 2019/3rdDay/input.txt | 2 +- 2019/4thDay/challenge.txt | 50 +- 2019/4thDay/challenge1.cpp | 90 +- 2019/4thDay/challenge2.cpp | 88 +- 2019/5thDay/challenge.txt | 94 +- 2019/5thDay/challenge1.cpp | 106 +- 2019/6thDay/challenge.txt | 102 +- 2019/6thDay/challenge1.cpp | 112 +- 2019/6thDay/input.txt | 3176 ++++++++--------- 2020/3.js | 30 + 2020/3.txt | 323 ++ 2020/4.js | 15 + 2020/4.txt | 1133 ++++++ README.md | 6 +- 66 files changed, 12636 insertions(+), 11133 deletions(-) create mode 100644 2020/3.js create mode 100644 2020/3.txt create mode 100644 2020/4.js create mode 100644 2020/4.txt diff --git a/.gitignore b/.gitignore index d8df003..25e240f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ -.vscode/ -.vs/ -.exe/ -.o/ -*.o +.vscode/ +.vs/ +.exe/ +.o/ +*.o diff --git a/.vscode/settings.json b/.vscode/settings.json index 070c565..a74281e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,57 +1,59 @@ -{ - "files.associations": { - "iosfwd": "cpp", - "vector": "cpp", - "cctype": "cpp", - "cmath": "cpp", - "cstddef": "cpp", - "cstdint": "cpp", - "cstdio": "cpp", - "cstdlib": "cpp", - "cstring": "cpp", - "cwchar": "cpp", - "exception": "cpp", - "fstream": "cpp", - "initializer_list": "cpp", - "ios": "cpp", - "iostream": "cpp", - "istream": "cpp", - "limits": "cpp", - "memory": "cpp", - "new": "cpp", - "ostream": "cpp", - "sstream": "cpp", - "stdexcept": "cpp", - "streambuf": "cpp", - "string": "cpp", - "system_error": "cpp", - "tuple": "cpp", - "type_traits": "cpp", - "typeinfo": "cpp", - "utility": "cpp", - "xfacet": "cpp", - "xiosbase": "cpp", - "xlocale": "cpp", - "xlocinfo": "cpp", - "xlocnum": "cpp", - "xmemory": "cpp", - "xmemory0": "cpp", - "xstddef": "cpp", - "xstring": "cpp", - "xtr1common": "cpp", - "xutility": "cpp", - "algorithm": "cpp", - "concepts": "cpp", - "ctime": "cpp", - "iomanip": "cpp", - "iterator": "cpp", - "list": "cpp", - "map": "cpp", - "set": "cpp", - "unordered_map": "cpp", - "xhash": "cpp", - "xlocmon": "cpp", - "xloctime": "cpp", - "xtree": "cpp" - } +{ + "files.associations": { + "iosfwd": "cpp", + "vector": "cpp", + "cctype": "cpp", + "cmath": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "cwchar": "cpp", + "exception": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "ios": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "memory": "cpp", + "new": "cpp", + "ostream": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "string": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "typeinfo": "cpp", + "utility": "cpp", + "xfacet": "cpp", + "xiosbase": "cpp", + "xlocale": "cpp", + "xlocinfo": "cpp", + "xlocnum": "cpp", + "xmemory": "cpp", + "xmemory0": "cpp", + "xstddef": "cpp", + "xstring": "cpp", + "xtr1common": "cpp", + "xutility": "cpp", + "algorithm": "cpp", + "concepts": "cpp", + "ctime": "cpp", + "iomanip": "cpp", + "iterator": "cpp", + "list": "cpp", + "map": "cpp", + "set": "cpp", + "unordered_map": "cpp", + "xhash": "cpp", + "xlocmon": "cpp", + "xloctime": "cpp", + "xtree": "cpp", + "atomic": "cpp", + "compare": "cpp" + } } \ No newline at end of file diff --git a/2018/.vscode/settings.json b/2018/.vscode/settings.json index cd89cd1..246fd10 100644 --- a/2018/.vscode/settings.json +++ b/2018/.vscode/settings.json @@ -1,42 +1,42 @@ -{ - "files.associations": { - "cmath": "cpp", - "cstddef": "cpp", - "cstdint": "cpp", - "cstdio": "cpp", - "cstdlib": "cpp", - "cstring": "cpp", - "cwchar": "cpp", - "exception": "cpp", - "fstream": "cpp", - "initializer_list": "cpp", - "ios": "cpp", - "iosfwd": "cpp", - "iostream": "cpp", - "istream": "cpp", - "limits": "cpp", - "memory": "cpp", - "new": "cpp", - "ostream": "cpp", - "stdexcept": "cpp", - "streambuf": "cpp", - "string": "cpp", - "system_error": "cpp", - "tuple": "cpp", - "type_traits": "cpp", - "typeinfo": "cpp", - "utility": "cpp", - "vector": "cpp", - "xfacet": "cpp", - "xiosbase": "cpp", - "xlocale": "cpp", - "xlocinfo": "cpp", - "xlocnum": "cpp", - "xmemory": "cpp", - "xmemory0": "cpp", - "xstddef": "cpp", - "xstring": "cpp", - "xtr1common": "cpp", - "xutility": "cpp" - } +{ + "files.associations": { + "cmath": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "cwchar": "cpp", + "exception": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "ios": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "memory": "cpp", + "new": "cpp", + "ostream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "string": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "typeinfo": "cpp", + "utility": "cpp", + "vector": "cpp", + "xfacet": "cpp", + "xiosbase": "cpp", + "xlocale": "cpp", + "xlocinfo": "cpp", + "xlocnum": "cpp", + "xmemory": "cpp", + "xmemory0": "cpp", + "xstddef": "cpp", + "xstring": "cpp", + "xtr1common": "cpp", + "xutility": "cpp" + } } \ No newline at end of file diff --git a/2018/1stDay/challenge1/challenge.txt b/2018/1stDay/challenge1/challenge.txt index 7d8ae37..f102ae1 100644 --- a/2018/1stDay/challenge1/challenge.txt +++ b/2018/1stDay/challenge1/challenge.txt @@ -1,25 +1,25 @@ ---- Day 1: Chronal Calibration --- -"We've detected some temporal anomalies," one of Santa's Elves at the Temporal Anomaly Research and Detection Instrument Station tells you. She sounded pretty worried when she called you down here. "At 500-year intervals into the past, someone has been changing Santa's history!" - -"The good news is that the changes won't propagate to our time stream for another 25 days, and we have a device" - she attaches something to your wrist - "that will let you fix the changes with no such propagation delay. It's configured to send you 500 years further into the past every few days; that was the best we could do on such short notice." - -"The bad news is that we are detecting roughly fifty anomalies throughout time; the device will indicate fixed anomalies with stars. The other bad news is that we only have one device and you're the best person for the job! Good lu--" She taps a button on the device and you suddenly feel like you're falling. To save Christmas, you need to get all fifty stars by December 25th. - -Collect stars by solving puzzles. Two puzzles will be made available on each day in the advent calendar; the second puzzle is unlocked when you complete the first. Each puzzle grants one star. Good luck! - -After feeling like you've been falling for a few minutes, you look at the device's tiny screen. "Error: Device must be calibrated before first use. Frequency drift detected. Cannot maintain destination lock." Below the message, the device shows a sequence of changes in frequency (your puzzle input). A value like +6 means the current frequency increases by 6; a value like -3 means the current frequency decreases by 3. - -For example, if the device displays frequency changes of +1, -2, +3, +1, then starting from a frequency of zero, the following changes would occur: - -Current frequency 0, change of +1; resulting frequency 1. -Current frequency 1, change of -2; resulting frequency -1. -Current frequency -1, change of +3; resulting frequency 2. -Current frequency 2, change of +1; resulting frequency 3. -In this example, the resulting frequency is 3. - -Here are other example situations: - -+1, +1, +1 results in 3 -+1, +1, -2 results in 0 --1, -2, -3 results in -6 +--- Day 1: Chronal Calibration --- +"We've detected some temporal anomalies," one of Santa's Elves at the Temporal Anomaly Research and Detection Instrument Station tells you. She sounded pretty worried when she called you down here. "At 500-year intervals into the past, someone has been changing Santa's history!" + +"The good news is that the changes won't propagate to our time stream for another 25 days, and we have a device" - she attaches something to your wrist - "that will let you fix the changes with no such propagation delay. It's configured to send you 500 years further into the past every few days; that was the best we could do on such short notice." + +"The bad news is that we are detecting roughly fifty anomalies throughout time; the device will indicate fixed anomalies with stars. The other bad news is that we only have one device and you're the best person for the job! Good lu--" She taps a button on the device and you suddenly feel like you're falling. To save Christmas, you need to get all fifty stars by December 25th. + +Collect stars by solving puzzles. Two puzzles will be made available on each day in the advent calendar; the second puzzle is unlocked when you complete the first. Each puzzle grants one star. Good luck! + +After feeling like you've been falling for a few minutes, you look at the device's tiny screen. "Error: Device must be calibrated before first use. Frequency drift detected. Cannot maintain destination lock." Below the message, the device shows a sequence of changes in frequency (your puzzle input). A value like +6 means the current frequency increases by 6; a value like -3 means the current frequency decreases by 3. + +For example, if the device displays frequency changes of +1, -2, +3, +1, then starting from a frequency of zero, the following changes would occur: + +Current frequency 0, change of +1; resulting frequency 1. +Current frequency 1, change of -2; resulting frequency -1. +Current frequency -1, change of +3; resulting frequency 2. +Current frequency 2, change of +1; resulting frequency 3. +In this example, the resulting frequency is 3. + +Here are other example situations: + ++1, +1, +1 results in 3 ++1, +1, -2 results in 0 +-1, -2, -3 results in -6 Starting with a frequency of zero, what is the resulting frequency after all of the changes in frequency have been applied? \ No newline at end of file diff --git a/2018/1stDay/challenge1/index.js b/2018/1stDay/challenge1/index.js index 452be34..6f1a155 100644 --- a/2018/1stDay/challenge1/index.js +++ b/2018/1stDay/challenge1/index.js @@ -1,3 +1,3 @@ -const fs = require('fs'); -let input = fs.readFileSync('input.txt').toString().split('\n').join(''); -console.log(eval(input)); +const fs = require('fs'); +let input = fs.readFileSync('input.txt').toString().split('\n').join(''); +console.log(eval(input)); diff --git a/2018/1stDay/challenge1/input.txt b/2018/1stDay/challenge1/input.txt index 0d7449e..7e75bc5 100644 --- a/2018/1stDay/challenge1/input.txt +++ b/2018/1stDay/challenge1/input.txt @@ -1,1008 +1,1008 @@ -+15 --7 -+16 -+5 -+12 -+16 --4 -+10 --1 -+14 --16 -+6 -+4 -+11 --2 -+5 -+4 -+12 -+13 -+5 -+16 -+18 --3 --2 -+9 --10 -+12 --10 --17 -+12 --14 --14 -+11 -+1 --16 -+11 --5 -+20 --1 -+14 --15 --10 --5 -+4 --17 --13 --2 --12 --15 -+12 -+8 --3 -+13 -+17 -+21 -+21 -+8 -+9 --5 --15 --19 --9 --17 --5 -+15 -+12 -+14 -+19 --2 -+15 --6 -+19 --2 -+4 --5 --8 --4 -+10 -+1 --5 -+10 -+12 -+14 --2 -+11 --3 --15 --6 -+14 -+3 -+8 -+10 -+14 -+11 -+18 -+3 --4 --5 --13 -+17 --12 --8 --5 -+7 -+7 --10 --19 -+17 -+1 -+17 --5 --9 --10 --9 --1 --3 --14 -+11 -+1 -+11 -+1 -+2 --17 -+4 -+19 -+17 -+6 -+18 --4 -+3 --13 -+7 --3 -+19 -+5 -+2 -+6 -+12 -+5 --7 -+10 -+16 --9 --16 -+11 -+10 -+2 -+7 --16 -+6 -+16 -+17 -+11 -+11 --14 -+11 --16 --13 -+6 -+8 -+10 --4 --5 -+2 -+5 --18 -+19 --11 --5 --5 --5 --16 --5 -+16 -+7 --10 --20 --14 --18 -+13 -+9 --10 -+18 --7 --8 --4 -+13 -+9 -+18 -+20 --10 --14 --22 --21 --10 -+20 --7 --9 -+1 -+11 -+6 -+12 -+14 --5 -+16 -+13 -+8 --2 --13 --2 -+11 -+21 -+9 --5 -+1 -+18 -+6 -+18 --17 -+3 -+7 --2 --3 -+1 -+7 -+17 -+16 -+4 -+13 -+7 -+17 --18 -+17 -+2 -+19 --11 -+2 -+2 -+1 --16 --19 --4 --17 --8 --5 -+12 --8 -+19 -+3 -+17 -+3 -+3 -+8 -+3 --13 -+12 --7 -+9 -+16 -+15 -+3 --6 --10 -+14 --13 --8 -+4 -+12 -+19 -+17 -+18 --12 --11 -+7 --1 --7 --28 --19 --6 -+2 -+15 -+3 --12 --15 -+5 --15 --8 --16 --17 -+8 --7 -+3 -+6 --18 -+10 --17 --9 --13 -+20 --13 --12 --12 -+9 --2 -+6 --10 --1 -+14 --18 --14 -+2 -+25 --16 --17 -+19 -+8 -+14 --15 --17 -+40 -+21 --19 -+4 -+3 --2 -+9 --2 --3 -+15 --9 --18 -+9 -+7 -+27 -+3 -+8 -+6 -+2 --13 -+4 --16 -+26 --15 --8 --16 -+17 --18 -+33 -+9 -+68 -+8 -+20 --9 --8 -+28 -+15 -+15 -+9 -+12 -+20 -+5 -+16 -+22 --5 -+8 -+14 -+6 -+6 -+10 -+10 -+7 --13 --8 -+10 -+9 -+13 --15 --15 -+13 -+8 -+5 -+25 --10 -+21 -+16 -+10 --16 -+1 --57 -+13 --20 --30 -+2 -+7 -+15 --18 --28 --13 -+1 --9 --6 --2 --13 -+11 --4 --1 --9 --13 --13 -+12 --14 -+12 --13 --7 --2 --15 --2 -+3 -+32 -+13 -+12 --4 --19 --5 -+22 --29 --24 --25 --6 --12 --9 -+3 --15 -+3 --5 -+20 --10 --34 --77 --9 --9 --23 --6 -+8 -+9 -+47 --82 --21 -+38 --61 -+11 --65 --37 --22 -+2 -+12 --26 --20 --4 -+6 --7 -+14 -+6 -+11 -+19 --32 -+10 --74 -+9 --64 --59 --92 --10 --92 --18 --23 --64754 --2 --16 --6 --19 -+6 --12 --10 -+14 -+9 -+11 -+12 -+15 -+2 --14 --11 -+13 --1 --18 --3 -+19 -+16 -+12 -+14 --19 --11 -+9 --7 -+13 -+20 --1 -+2 -+13 -+10 -+15 -+15 -+13 --15 --7 --10 -+9 -+2 -+7 -+18 --9 -+6 --8 -+4 -+18 --17 -+12 -+14 -+14 --15 --12 --17 -+18 --16 -+6 --13 --23 --5 -+9 --10 --16 --19 -+1 -+12 --18 --9 --1 -+5 --9 -+11 -+1 -+1 -+17 --20 -+5 --17 --13 --9 --18 --11 --19 --13 -+11 --4 -+19 --5 -+9 -+18 -+8 --12 --10 --14 -+17 -+20 -+12 -+15 --22 --12 -+9 --5 --19 -+18 -+19 --8 --23 --18 --1 --4 --16 -+1 --16 -+19 --11 --19 --8 --15 --12 --4 --15 -+10 -+3 -+15 --19 -+11 -+5 -+8 --19 -+3 --18 -+4 --8 -+1 -+5 --13 --20 -+7 --8 --2 -+16 -+13 --8 --12 -+2 -+3 -+13 --9 -+15 -+9 --16 --1 --21 -+8 --17 --6 --2 --18 --10 --6 --13 --19 --1 -+10 --3 --9 --9 -+8 -+2 -+17 --3 -+5 --6 --17 -+13 -+16 --10 -+3 -+12 -+15 --13 --12 --23 -+10 -+16 -+3 --14 --6 --14 -+11 -+13 -+20 -+8 --15 -+19 --10 -+1 --6 -+14 -+13 -+7 --15 --1 --5 --3 --19 -+4 -+7 --13 --12 --19 -+4 --2 --15 --1 -+10 --13 --1 --10 -+7 -+11 --1 --9 -+14 --9 --15 -+14 --7 --15 --16 --14 -+12 --5 --5 -+11 --5 -+7 -+18 --1 --14 --14 --1 --12 -+1 -+1 -+6 -+18 --11 --12 --14 --2 -+1 --3 --20 --8 --8 --3 -+17 -+7 -+4 -+21 -+19 --10 -+6 -+20 -+16 --17 -+7 --11 -+7 -+8 --2 -+20 --14 -+21 -+4 -+3 -+3 --7 -+23 --17 --24 -+5 -+15 --27 --10 --2 --12 --23 -+2 --25 --11 -+19 --30 --17 --15 -+2 -+16 -+8 -+10 -+1 --15 --10 -+9 --18 --17 -+23 --15 -+17 -+6 --19 -+15 --7 -+2 --15 -+21 --24 --15 --4 -+14 -+2 -+18 -+34 -+6 -+8 --19 --6 --12 -+3 --15 --12 --37 -+2 -+9 --22 --31 --5 -+1 --16 -+19 -+10 --19 --22 --14 --6 --18 -+10 --6 -+17 -+18 --19 --15 -+3 --16 -+20 -+10 --19 -+10 --6 -+20 -+19 -+11 --17 -+13 --20 --4 -+20 --18 --12 --8 --18 --18 -+6 --2 -+5 --17 --7 --12 --5 --9 -+11 --9 --11 --12 --4 --4 --1 --2 -+14 --13 -+17 --12 --19 -+23 -+12 --5 -+16 -+15 --9 --12 --11 --17 --17 --6 -+22 -+21 -+12 -+19 -+13 -+22 -+19 --11 -+2 --7 -+8 --12 --18 -+6 --5 --13 --34 --11 --1 --4 -+20 -+63 --4 --14 --24 --20 --31 --90 --8 --9 --21 --16 -+27 --19 --9 --183 --3 --10 --16 -+9 --10 -+11 -+11 -+19 -+32 --2 --3 --81 -+12 -+16 -+5 --1 -+17 --28 -+32 -+22 -+39 --115 --2 -+183 -+108 -+1 --19 -+14 -+3 -+39 --10 -+33 -+14 --161 --885 --63592 --9 --10 -+3 --4 --4 -+19 -+16 -+20 -+14 --3 --18 --10 --5 --7 -+17 --16 -+5 --4 --18 -+10 -+1 -+18 -+1 -+2 --19 --6 --19 --12 --13 --4 -+20 --7 -+2 --4 -+15 --21 --4 --16 --5 -+17 --10 -+9 --5 -+18 -+21 --6 -+9 --19 --6 -+17 --2 --5 -+24 ++15 +-7 ++16 ++5 ++12 ++16 +-4 ++10 +-1 ++14 +-16 ++6 ++4 ++11 +-2 ++5 ++4 ++12 ++13 ++5 ++16 ++18 +-3 +-2 ++9 +-10 ++12 +-10 +-17 ++12 +-14 +-14 ++11 ++1 +-16 ++11 +-5 ++20 +-1 ++14 +-15 +-10 +-5 ++4 +-17 +-13 +-2 +-12 +-15 ++12 ++8 +-3 ++13 ++17 ++21 ++21 ++8 ++9 +-5 +-15 +-19 +-9 +-17 +-5 ++15 ++12 ++14 ++19 +-2 ++15 +-6 ++19 +-2 ++4 +-5 +-8 +-4 ++10 ++1 +-5 ++10 ++12 ++14 +-2 ++11 +-3 +-15 +-6 ++14 ++3 ++8 ++10 ++14 ++11 ++18 ++3 +-4 +-5 +-13 ++17 +-12 +-8 +-5 ++7 ++7 +-10 +-19 ++17 ++1 ++17 +-5 +-9 +-10 +-9 +-1 +-3 +-14 ++11 ++1 ++11 ++1 ++2 +-17 ++4 ++19 ++17 ++6 ++18 +-4 ++3 +-13 ++7 +-3 ++19 ++5 ++2 ++6 ++12 ++5 +-7 ++10 ++16 +-9 +-16 ++11 ++10 ++2 ++7 +-16 ++6 ++16 ++17 ++11 ++11 +-14 ++11 +-16 +-13 ++6 ++8 ++10 +-4 +-5 ++2 ++5 +-18 ++19 +-11 +-5 +-5 +-5 +-16 +-5 ++16 ++7 +-10 +-20 +-14 +-18 ++13 ++9 +-10 ++18 +-7 +-8 +-4 ++13 ++9 ++18 ++20 +-10 +-14 +-22 +-21 +-10 ++20 +-7 +-9 ++1 ++11 ++6 ++12 ++14 +-5 ++16 ++13 ++8 +-2 +-13 +-2 ++11 ++21 ++9 +-5 ++1 ++18 ++6 ++18 +-17 ++3 ++7 +-2 +-3 ++1 ++7 ++17 ++16 ++4 ++13 ++7 ++17 +-18 ++17 ++2 ++19 +-11 ++2 ++2 ++1 +-16 +-19 +-4 +-17 +-8 +-5 ++12 +-8 ++19 ++3 ++17 ++3 ++3 ++8 ++3 +-13 ++12 +-7 ++9 ++16 ++15 ++3 +-6 +-10 ++14 +-13 +-8 ++4 ++12 ++19 ++17 ++18 +-12 +-11 ++7 +-1 +-7 +-28 +-19 +-6 ++2 ++15 ++3 +-12 +-15 ++5 +-15 +-8 +-16 +-17 ++8 +-7 ++3 ++6 +-18 ++10 +-17 +-9 +-13 ++20 +-13 +-12 +-12 ++9 +-2 ++6 +-10 +-1 ++14 +-18 +-14 ++2 ++25 +-16 +-17 ++19 ++8 ++14 +-15 +-17 ++40 ++21 +-19 ++4 ++3 +-2 ++9 +-2 +-3 ++15 +-9 +-18 ++9 ++7 ++27 ++3 ++8 ++6 ++2 +-13 ++4 +-16 ++26 +-15 +-8 +-16 ++17 +-18 ++33 ++9 ++68 ++8 ++20 +-9 +-8 ++28 ++15 ++15 ++9 ++12 ++20 ++5 ++16 ++22 +-5 ++8 ++14 ++6 ++6 ++10 ++10 ++7 +-13 +-8 ++10 ++9 ++13 +-15 +-15 ++13 ++8 ++5 ++25 +-10 ++21 ++16 ++10 +-16 ++1 +-57 ++13 +-20 +-30 ++2 ++7 ++15 +-18 +-28 +-13 ++1 +-9 +-6 +-2 +-13 ++11 +-4 +-1 +-9 +-13 +-13 ++12 +-14 ++12 +-13 +-7 +-2 +-15 +-2 ++3 ++32 ++13 ++12 +-4 +-19 +-5 ++22 +-29 +-24 +-25 +-6 +-12 +-9 ++3 +-15 ++3 +-5 ++20 +-10 +-34 +-77 +-9 +-9 +-23 +-6 ++8 ++9 ++47 +-82 +-21 ++38 +-61 ++11 +-65 +-37 +-22 ++2 ++12 +-26 +-20 +-4 ++6 +-7 ++14 ++6 ++11 ++19 +-32 ++10 +-74 ++9 +-64 +-59 +-92 +-10 +-92 +-18 +-23 +-64754 +-2 +-16 +-6 +-19 ++6 +-12 +-10 ++14 ++9 ++11 ++12 ++15 ++2 +-14 +-11 ++13 +-1 +-18 +-3 ++19 ++16 ++12 ++14 +-19 +-11 ++9 +-7 ++13 ++20 +-1 ++2 ++13 ++10 ++15 ++15 ++13 +-15 +-7 +-10 ++9 ++2 ++7 ++18 +-9 ++6 +-8 ++4 ++18 +-17 ++12 ++14 ++14 +-15 +-12 +-17 ++18 +-16 ++6 +-13 +-23 +-5 ++9 +-10 +-16 +-19 ++1 ++12 +-18 +-9 +-1 ++5 +-9 ++11 ++1 ++1 ++17 +-20 ++5 +-17 +-13 +-9 +-18 +-11 +-19 +-13 ++11 +-4 ++19 +-5 ++9 ++18 ++8 +-12 +-10 +-14 ++17 ++20 ++12 ++15 +-22 +-12 ++9 +-5 +-19 ++18 ++19 +-8 +-23 +-18 +-1 +-4 +-16 ++1 +-16 ++19 +-11 +-19 +-8 +-15 +-12 +-4 +-15 ++10 ++3 ++15 +-19 ++11 ++5 ++8 +-19 ++3 +-18 ++4 +-8 ++1 ++5 +-13 +-20 ++7 +-8 +-2 ++16 ++13 +-8 +-12 ++2 ++3 ++13 +-9 ++15 ++9 +-16 +-1 +-21 ++8 +-17 +-6 +-2 +-18 +-10 +-6 +-13 +-19 +-1 ++10 +-3 +-9 +-9 ++8 ++2 ++17 +-3 ++5 +-6 +-17 ++13 ++16 +-10 ++3 ++12 ++15 +-13 +-12 +-23 ++10 ++16 ++3 +-14 +-6 +-14 ++11 ++13 ++20 ++8 +-15 ++19 +-10 ++1 +-6 ++14 ++13 ++7 +-15 +-1 +-5 +-3 +-19 ++4 ++7 +-13 +-12 +-19 ++4 +-2 +-15 +-1 ++10 +-13 +-1 +-10 ++7 ++11 +-1 +-9 ++14 +-9 +-15 ++14 +-7 +-15 +-16 +-14 ++12 +-5 +-5 ++11 +-5 ++7 ++18 +-1 +-14 +-14 +-1 +-12 ++1 ++1 ++6 ++18 +-11 +-12 +-14 +-2 ++1 +-3 +-20 +-8 +-8 +-3 ++17 ++7 ++4 ++21 ++19 +-10 ++6 ++20 ++16 +-17 ++7 +-11 ++7 ++8 +-2 ++20 +-14 ++21 ++4 ++3 ++3 +-7 ++23 +-17 +-24 ++5 ++15 +-27 +-10 +-2 +-12 +-23 ++2 +-25 +-11 ++19 +-30 +-17 +-15 ++2 ++16 ++8 ++10 ++1 +-15 +-10 ++9 +-18 +-17 ++23 +-15 ++17 ++6 +-19 ++15 +-7 ++2 +-15 ++21 +-24 +-15 +-4 ++14 ++2 ++18 ++34 ++6 ++8 +-19 +-6 +-12 ++3 +-15 +-12 +-37 ++2 ++9 +-22 +-31 +-5 ++1 +-16 ++19 ++10 +-19 +-22 +-14 +-6 +-18 ++10 +-6 ++17 ++18 +-19 +-15 ++3 +-16 ++20 ++10 +-19 ++10 +-6 ++20 ++19 ++11 +-17 ++13 +-20 +-4 ++20 +-18 +-12 +-8 +-18 +-18 ++6 +-2 ++5 +-17 +-7 +-12 +-5 +-9 ++11 +-9 +-11 +-12 +-4 +-4 +-1 +-2 ++14 +-13 ++17 +-12 +-19 ++23 ++12 +-5 ++16 ++15 +-9 +-12 +-11 +-17 +-17 +-6 ++22 ++21 ++12 ++19 ++13 ++22 ++19 +-11 ++2 +-7 ++8 +-12 +-18 ++6 +-5 +-13 +-34 +-11 +-1 +-4 ++20 ++63 +-4 +-14 +-24 +-20 +-31 +-90 +-8 +-9 +-21 +-16 ++27 +-19 +-9 +-183 +-3 +-10 +-16 ++9 +-10 ++11 ++11 ++19 ++32 +-2 +-3 +-81 ++12 ++16 ++5 +-1 ++17 +-28 ++32 ++22 ++39 +-115 +-2 ++183 ++108 ++1 +-19 ++14 ++3 ++39 +-10 ++33 ++14 +-161 +-885 +-63592 +-9 +-10 ++3 +-4 +-4 ++19 ++16 ++20 ++14 +-3 +-18 +-10 +-5 +-7 ++17 +-16 ++5 +-4 +-18 ++10 ++1 ++18 ++1 ++2 +-19 +-6 +-19 +-12 +-13 +-4 ++20 +-7 ++2 +-4 ++15 +-21 +-4 +-16 +-5 ++17 +-10 ++9 +-5 ++18 ++21 +-6 ++9 +-19 +-6 ++17 +-2 +-5 ++24 +130793 \ No newline at end of file diff --git a/2018/1stDay/challenge2/challenge.txt b/2018/1stDay/challenge2/challenge.txt index a19d994..8d3aa31 100644 --- a/2018/1stDay/challenge2/challenge.txt +++ b/2018/1stDay/challenge2/challenge.txt @@ -1,21 +1,21 @@ ---- Part Two --- -You notice that the device repeats the same frequency change list over and over. To calibrate the device, you need to find the first frequency it reaches twice. - -For example, using the same list of changes above, the device would loop as follows: - -Current frequency 0, change of +1; resulting frequency 1. -Current frequency 1, change of -2; resulting frequency -1. -Current frequency -1, change of +3; resulting frequency 2. -Current frequency 2, change of +1; resulting frequency 3. -(At this point, the device continues from the start of the list.) -Current frequency 3, change of +1; resulting frequency 4. -Current frequency 4, change of -2; resulting frequency 2, which has already been seen. -In this example, the first frequency reached twice is 2. Note that your device might need to repeat its list of frequency changes many times before a duplicate frequency is found, and that duplicates might be found while in the middle of processing the list. - -Here are other examples: - -+1, -1 first reaches 0 twice. -+3, +3, +4, -2, -4 first reaches 10 twice. --6, +3, +8, +5, -6 first reaches 5 twice. -+7, +7, -2, -7, -4 first reaches 14 twice. +--- Part Two --- +You notice that the device repeats the same frequency change list over and over. To calibrate the device, you need to find the first frequency it reaches twice. + +For example, using the same list of changes above, the device would loop as follows: + +Current frequency 0, change of +1; resulting frequency 1. +Current frequency 1, change of -2; resulting frequency -1. +Current frequency -1, change of +3; resulting frequency 2. +Current frequency 2, change of +1; resulting frequency 3. +(At this point, the device continues from the start of the list.) +Current frequency 3, change of +1; resulting frequency 4. +Current frequency 4, change of -2; resulting frequency 2, which has already been seen. +In this example, the first frequency reached twice is 2. Note that your device might need to repeat its list of frequency changes many times before a duplicate frequency is found, and that duplicates might be found while in the middle of processing the list. + +Here are other examples: + ++1, -1 first reaches 0 twice. ++3, +3, +4, -2, -4 first reaches 10 twice. +-6, +3, +8, +5, -6 first reaches 5 twice. ++7, +7, -2, -7, -4 first reaches 14 twice. What is the first frequency your device reaches twice? \ No newline at end of file diff --git a/2018/1stDay/challenge2/index.js b/2018/1stDay/challenge2/index.js index 76b25d3..b83fb27 100644 --- a/2018/1stDay/challenge2/index.js +++ b/2018/1stDay/challenge2/index.js @@ -1,24 +1,24 @@ -const fs = require('fs'); -let input = fs.readFileSync('input.txt') - .toString() - .split('\n') - .map((x) => parseInt(x)); - -let seenFrequencies = new Set([0]); -let total = 0; -let i = 0; - -while (true) { - if (i === input.length) { - i = 0; - continue; - } - total += input[i]; - if (seenFrequencies.has(total)) { - break; - } - seenFrequencies.add(total); - i++; -} - -console.log(total) +const fs = require('fs'); +let input = fs.readFileSync('input.txt') + .toString() + .split('\n') + .map((x) => parseInt(x)); + +let seenFrequencies = new Set([0]); +let total = 0; +let i = 0; + +while (true) { + if (i === input.length) { + i = 0; + continue; + } + total += input[i]; + if (seenFrequencies.has(total)) { + break; + } + seenFrequencies.add(total); + i++; +} + +console.log(total) diff --git a/2018/1stDay/challenge2/input.txt b/2018/1stDay/challenge2/input.txt index 0d7449e..7e75bc5 100644 --- a/2018/1stDay/challenge2/input.txt +++ b/2018/1stDay/challenge2/input.txt @@ -1,1008 +1,1008 @@ -+15 --7 -+16 -+5 -+12 -+16 --4 -+10 --1 -+14 --16 -+6 -+4 -+11 --2 -+5 -+4 -+12 -+13 -+5 -+16 -+18 --3 --2 -+9 --10 -+12 --10 --17 -+12 --14 --14 -+11 -+1 --16 -+11 --5 -+20 --1 -+14 --15 --10 --5 -+4 --17 --13 --2 --12 --15 -+12 -+8 --3 -+13 -+17 -+21 -+21 -+8 -+9 --5 --15 --19 --9 --17 --5 -+15 -+12 -+14 -+19 --2 -+15 --6 -+19 --2 -+4 --5 --8 --4 -+10 -+1 --5 -+10 -+12 -+14 --2 -+11 --3 --15 --6 -+14 -+3 -+8 -+10 -+14 -+11 -+18 -+3 --4 --5 --13 -+17 --12 --8 --5 -+7 -+7 --10 --19 -+17 -+1 -+17 --5 --9 --10 --9 --1 --3 --14 -+11 -+1 -+11 -+1 -+2 --17 -+4 -+19 -+17 -+6 -+18 --4 -+3 --13 -+7 --3 -+19 -+5 -+2 -+6 -+12 -+5 --7 -+10 -+16 --9 --16 -+11 -+10 -+2 -+7 --16 -+6 -+16 -+17 -+11 -+11 --14 -+11 --16 --13 -+6 -+8 -+10 --4 --5 -+2 -+5 --18 -+19 --11 --5 --5 --5 --16 --5 -+16 -+7 --10 --20 --14 --18 -+13 -+9 --10 -+18 --7 --8 --4 -+13 -+9 -+18 -+20 --10 --14 --22 --21 --10 -+20 --7 --9 -+1 -+11 -+6 -+12 -+14 --5 -+16 -+13 -+8 --2 --13 --2 -+11 -+21 -+9 --5 -+1 -+18 -+6 -+18 --17 -+3 -+7 --2 --3 -+1 -+7 -+17 -+16 -+4 -+13 -+7 -+17 --18 -+17 -+2 -+19 --11 -+2 -+2 -+1 --16 --19 --4 --17 --8 --5 -+12 --8 -+19 -+3 -+17 -+3 -+3 -+8 -+3 --13 -+12 --7 -+9 -+16 -+15 -+3 --6 --10 -+14 --13 --8 -+4 -+12 -+19 -+17 -+18 --12 --11 -+7 --1 --7 --28 --19 --6 -+2 -+15 -+3 --12 --15 -+5 --15 --8 --16 --17 -+8 --7 -+3 -+6 --18 -+10 --17 --9 --13 -+20 --13 --12 --12 -+9 --2 -+6 --10 --1 -+14 --18 --14 -+2 -+25 --16 --17 -+19 -+8 -+14 --15 --17 -+40 -+21 --19 -+4 -+3 --2 -+9 --2 --3 -+15 --9 --18 -+9 -+7 -+27 -+3 -+8 -+6 -+2 --13 -+4 --16 -+26 --15 --8 --16 -+17 --18 -+33 -+9 -+68 -+8 -+20 --9 --8 -+28 -+15 -+15 -+9 -+12 -+20 -+5 -+16 -+22 --5 -+8 -+14 -+6 -+6 -+10 -+10 -+7 --13 --8 -+10 -+9 -+13 --15 --15 -+13 -+8 -+5 -+25 --10 -+21 -+16 -+10 --16 -+1 --57 -+13 --20 --30 -+2 -+7 -+15 --18 --28 --13 -+1 --9 --6 --2 --13 -+11 --4 --1 --9 --13 --13 -+12 --14 -+12 --13 --7 --2 --15 --2 -+3 -+32 -+13 -+12 --4 --19 --5 -+22 --29 --24 --25 --6 --12 --9 -+3 --15 -+3 --5 -+20 --10 --34 --77 --9 --9 --23 --6 -+8 -+9 -+47 --82 --21 -+38 --61 -+11 --65 --37 --22 -+2 -+12 --26 --20 --4 -+6 --7 -+14 -+6 -+11 -+19 --32 -+10 --74 -+9 --64 --59 --92 --10 --92 --18 --23 --64754 --2 --16 --6 --19 -+6 --12 --10 -+14 -+9 -+11 -+12 -+15 -+2 --14 --11 -+13 --1 --18 --3 -+19 -+16 -+12 -+14 --19 --11 -+9 --7 -+13 -+20 --1 -+2 -+13 -+10 -+15 -+15 -+13 --15 --7 --10 -+9 -+2 -+7 -+18 --9 -+6 --8 -+4 -+18 --17 -+12 -+14 -+14 --15 --12 --17 -+18 --16 -+6 --13 --23 --5 -+9 --10 --16 --19 -+1 -+12 --18 --9 --1 -+5 --9 -+11 -+1 -+1 -+17 --20 -+5 --17 --13 --9 --18 --11 --19 --13 -+11 --4 -+19 --5 -+9 -+18 -+8 --12 --10 --14 -+17 -+20 -+12 -+15 --22 --12 -+9 --5 --19 -+18 -+19 --8 --23 --18 --1 --4 --16 -+1 --16 -+19 --11 --19 --8 --15 --12 --4 --15 -+10 -+3 -+15 --19 -+11 -+5 -+8 --19 -+3 --18 -+4 --8 -+1 -+5 --13 --20 -+7 --8 --2 -+16 -+13 --8 --12 -+2 -+3 -+13 --9 -+15 -+9 --16 --1 --21 -+8 --17 --6 --2 --18 --10 --6 --13 --19 --1 -+10 --3 --9 --9 -+8 -+2 -+17 --3 -+5 --6 --17 -+13 -+16 --10 -+3 -+12 -+15 --13 --12 --23 -+10 -+16 -+3 --14 --6 --14 -+11 -+13 -+20 -+8 --15 -+19 --10 -+1 --6 -+14 -+13 -+7 --15 --1 --5 --3 --19 -+4 -+7 --13 --12 --19 -+4 --2 --15 --1 -+10 --13 --1 --10 -+7 -+11 --1 --9 -+14 --9 --15 -+14 --7 --15 --16 --14 -+12 --5 --5 -+11 --5 -+7 -+18 --1 --14 --14 --1 --12 -+1 -+1 -+6 -+18 --11 --12 --14 --2 -+1 --3 --20 --8 --8 --3 -+17 -+7 -+4 -+21 -+19 --10 -+6 -+20 -+16 --17 -+7 --11 -+7 -+8 --2 -+20 --14 -+21 -+4 -+3 -+3 --7 -+23 --17 --24 -+5 -+15 --27 --10 --2 --12 --23 -+2 --25 --11 -+19 --30 --17 --15 -+2 -+16 -+8 -+10 -+1 --15 --10 -+9 --18 --17 -+23 --15 -+17 -+6 --19 -+15 --7 -+2 --15 -+21 --24 --15 --4 -+14 -+2 -+18 -+34 -+6 -+8 --19 --6 --12 -+3 --15 --12 --37 -+2 -+9 --22 --31 --5 -+1 --16 -+19 -+10 --19 --22 --14 --6 --18 -+10 --6 -+17 -+18 --19 --15 -+3 --16 -+20 -+10 --19 -+10 --6 -+20 -+19 -+11 --17 -+13 --20 --4 -+20 --18 --12 --8 --18 --18 -+6 --2 -+5 --17 --7 --12 --5 --9 -+11 --9 --11 --12 --4 --4 --1 --2 -+14 --13 -+17 --12 --19 -+23 -+12 --5 -+16 -+15 --9 --12 --11 --17 --17 --6 -+22 -+21 -+12 -+19 -+13 -+22 -+19 --11 -+2 --7 -+8 --12 --18 -+6 --5 --13 --34 --11 --1 --4 -+20 -+63 --4 --14 --24 --20 --31 --90 --8 --9 --21 --16 -+27 --19 --9 --183 --3 --10 --16 -+9 --10 -+11 -+11 -+19 -+32 --2 --3 --81 -+12 -+16 -+5 --1 -+17 --28 -+32 -+22 -+39 --115 --2 -+183 -+108 -+1 --19 -+14 -+3 -+39 --10 -+33 -+14 --161 --885 --63592 --9 --10 -+3 --4 --4 -+19 -+16 -+20 -+14 --3 --18 --10 --5 --7 -+17 --16 -+5 --4 --18 -+10 -+1 -+18 -+1 -+2 --19 --6 --19 --12 --13 --4 -+20 --7 -+2 --4 -+15 --21 --4 --16 --5 -+17 --10 -+9 --5 -+18 -+21 --6 -+9 --19 --6 -+17 --2 --5 -+24 ++15 +-7 ++16 ++5 ++12 ++16 +-4 ++10 +-1 ++14 +-16 ++6 ++4 ++11 +-2 ++5 ++4 ++12 ++13 ++5 ++16 ++18 +-3 +-2 ++9 +-10 ++12 +-10 +-17 ++12 +-14 +-14 ++11 ++1 +-16 ++11 +-5 ++20 +-1 ++14 +-15 +-10 +-5 ++4 +-17 +-13 +-2 +-12 +-15 ++12 ++8 +-3 ++13 ++17 ++21 ++21 ++8 ++9 +-5 +-15 +-19 +-9 +-17 +-5 ++15 ++12 ++14 ++19 +-2 ++15 +-6 ++19 +-2 ++4 +-5 +-8 +-4 ++10 ++1 +-5 ++10 ++12 ++14 +-2 ++11 +-3 +-15 +-6 ++14 ++3 ++8 ++10 ++14 ++11 ++18 ++3 +-4 +-5 +-13 ++17 +-12 +-8 +-5 ++7 ++7 +-10 +-19 ++17 ++1 ++17 +-5 +-9 +-10 +-9 +-1 +-3 +-14 ++11 ++1 ++11 ++1 ++2 +-17 ++4 ++19 ++17 ++6 ++18 +-4 ++3 +-13 ++7 +-3 ++19 ++5 ++2 ++6 ++12 ++5 +-7 ++10 ++16 +-9 +-16 ++11 ++10 ++2 ++7 +-16 ++6 ++16 ++17 ++11 ++11 +-14 ++11 +-16 +-13 ++6 ++8 ++10 +-4 +-5 ++2 ++5 +-18 ++19 +-11 +-5 +-5 +-5 +-16 +-5 ++16 ++7 +-10 +-20 +-14 +-18 ++13 ++9 +-10 ++18 +-7 +-8 +-4 ++13 ++9 ++18 ++20 +-10 +-14 +-22 +-21 +-10 ++20 +-7 +-9 ++1 ++11 ++6 ++12 ++14 +-5 ++16 ++13 ++8 +-2 +-13 +-2 ++11 ++21 ++9 +-5 ++1 ++18 ++6 ++18 +-17 ++3 ++7 +-2 +-3 ++1 ++7 ++17 ++16 ++4 ++13 ++7 ++17 +-18 ++17 ++2 ++19 +-11 ++2 ++2 ++1 +-16 +-19 +-4 +-17 +-8 +-5 ++12 +-8 ++19 ++3 ++17 ++3 ++3 ++8 ++3 +-13 ++12 +-7 ++9 ++16 ++15 ++3 +-6 +-10 ++14 +-13 +-8 ++4 ++12 ++19 ++17 ++18 +-12 +-11 ++7 +-1 +-7 +-28 +-19 +-6 ++2 ++15 ++3 +-12 +-15 ++5 +-15 +-8 +-16 +-17 ++8 +-7 ++3 ++6 +-18 ++10 +-17 +-9 +-13 ++20 +-13 +-12 +-12 ++9 +-2 ++6 +-10 +-1 ++14 +-18 +-14 ++2 ++25 +-16 +-17 ++19 ++8 ++14 +-15 +-17 ++40 ++21 +-19 ++4 ++3 +-2 ++9 +-2 +-3 ++15 +-9 +-18 ++9 ++7 ++27 ++3 ++8 ++6 ++2 +-13 ++4 +-16 ++26 +-15 +-8 +-16 ++17 +-18 ++33 ++9 ++68 ++8 ++20 +-9 +-8 ++28 ++15 ++15 ++9 ++12 ++20 ++5 ++16 ++22 +-5 ++8 ++14 ++6 ++6 ++10 ++10 ++7 +-13 +-8 ++10 ++9 ++13 +-15 +-15 ++13 ++8 ++5 ++25 +-10 ++21 ++16 ++10 +-16 ++1 +-57 ++13 +-20 +-30 ++2 ++7 ++15 +-18 +-28 +-13 ++1 +-9 +-6 +-2 +-13 ++11 +-4 +-1 +-9 +-13 +-13 ++12 +-14 ++12 +-13 +-7 +-2 +-15 +-2 ++3 ++32 ++13 ++12 +-4 +-19 +-5 ++22 +-29 +-24 +-25 +-6 +-12 +-9 ++3 +-15 ++3 +-5 ++20 +-10 +-34 +-77 +-9 +-9 +-23 +-6 ++8 ++9 ++47 +-82 +-21 ++38 +-61 ++11 +-65 +-37 +-22 ++2 ++12 +-26 +-20 +-4 ++6 +-7 ++14 ++6 ++11 ++19 +-32 ++10 +-74 ++9 +-64 +-59 +-92 +-10 +-92 +-18 +-23 +-64754 +-2 +-16 +-6 +-19 ++6 +-12 +-10 ++14 ++9 ++11 ++12 ++15 ++2 +-14 +-11 ++13 +-1 +-18 +-3 ++19 ++16 ++12 ++14 +-19 +-11 ++9 +-7 ++13 ++20 +-1 ++2 ++13 ++10 ++15 ++15 ++13 +-15 +-7 +-10 ++9 ++2 ++7 ++18 +-9 ++6 +-8 ++4 ++18 +-17 ++12 ++14 ++14 +-15 +-12 +-17 ++18 +-16 ++6 +-13 +-23 +-5 ++9 +-10 +-16 +-19 ++1 ++12 +-18 +-9 +-1 ++5 +-9 ++11 ++1 ++1 ++17 +-20 ++5 +-17 +-13 +-9 +-18 +-11 +-19 +-13 ++11 +-4 ++19 +-5 ++9 ++18 ++8 +-12 +-10 +-14 ++17 ++20 ++12 ++15 +-22 +-12 ++9 +-5 +-19 ++18 ++19 +-8 +-23 +-18 +-1 +-4 +-16 ++1 +-16 ++19 +-11 +-19 +-8 +-15 +-12 +-4 +-15 ++10 ++3 ++15 +-19 ++11 ++5 ++8 +-19 ++3 +-18 ++4 +-8 ++1 ++5 +-13 +-20 ++7 +-8 +-2 ++16 ++13 +-8 +-12 ++2 ++3 ++13 +-9 ++15 ++9 +-16 +-1 +-21 ++8 +-17 +-6 +-2 +-18 +-10 +-6 +-13 +-19 +-1 ++10 +-3 +-9 +-9 ++8 ++2 ++17 +-3 ++5 +-6 +-17 ++13 ++16 +-10 ++3 ++12 ++15 +-13 +-12 +-23 ++10 ++16 ++3 +-14 +-6 +-14 ++11 ++13 ++20 ++8 +-15 ++19 +-10 ++1 +-6 ++14 ++13 ++7 +-15 +-1 +-5 +-3 +-19 ++4 ++7 +-13 +-12 +-19 ++4 +-2 +-15 +-1 ++10 +-13 +-1 +-10 ++7 ++11 +-1 +-9 ++14 +-9 +-15 ++14 +-7 +-15 +-16 +-14 ++12 +-5 +-5 ++11 +-5 ++7 ++18 +-1 +-14 +-14 +-1 +-12 ++1 ++1 ++6 ++18 +-11 +-12 +-14 +-2 ++1 +-3 +-20 +-8 +-8 +-3 ++17 ++7 ++4 ++21 ++19 +-10 ++6 ++20 ++16 +-17 ++7 +-11 ++7 ++8 +-2 ++20 +-14 ++21 ++4 ++3 ++3 +-7 ++23 +-17 +-24 ++5 ++15 +-27 +-10 +-2 +-12 +-23 ++2 +-25 +-11 ++19 +-30 +-17 +-15 ++2 ++16 ++8 ++10 ++1 +-15 +-10 ++9 +-18 +-17 ++23 +-15 ++17 ++6 +-19 ++15 +-7 ++2 +-15 ++21 +-24 +-15 +-4 ++14 ++2 ++18 ++34 ++6 ++8 +-19 +-6 +-12 ++3 +-15 +-12 +-37 ++2 ++9 +-22 +-31 +-5 ++1 +-16 ++19 ++10 +-19 +-22 +-14 +-6 +-18 ++10 +-6 ++17 ++18 +-19 +-15 ++3 +-16 ++20 ++10 +-19 ++10 +-6 ++20 ++19 ++11 +-17 ++13 +-20 +-4 ++20 +-18 +-12 +-8 +-18 +-18 ++6 +-2 ++5 +-17 +-7 +-12 +-5 +-9 ++11 +-9 +-11 +-12 +-4 +-4 +-1 +-2 ++14 +-13 ++17 +-12 +-19 ++23 ++12 +-5 ++16 ++15 +-9 +-12 +-11 +-17 +-17 +-6 ++22 ++21 ++12 ++19 ++13 ++22 ++19 +-11 ++2 +-7 ++8 +-12 +-18 ++6 +-5 +-13 +-34 +-11 +-1 +-4 ++20 ++63 +-4 +-14 +-24 +-20 +-31 +-90 +-8 +-9 +-21 +-16 ++27 +-19 +-9 +-183 +-3 +-10 +-16 ++9 +-10 ++11 ++11 ++19 ++32 +-2 +-3 +-81 ++12 ++16 ++5 +-1 ++17 +-28 ++32 ++22 ++39 +-115 +-2 ++183 ++108 ++1 +-19 ++14 ++3 ++39 +-10 ++33 ++14 +-161 +-885 +-63592 +-9 +-10 ++3 +-4 +-4 ++19 ++16 ++20 ++14 +-3 +-18 +-10 +-5 +-7 ++17 +-16 ++5 +-4 +-18 ++10 ++1 ++18 ++1 ++2 +-19 +-6 +-19 +-12 +-13 +-4 ++20 +-7 ++2 +-4 ++15 +-21 +-4 +-16 +-5 ++17 +-10 ++9 +-5 ++18 ++21 +-6 ++9 +-19 +-6 ++17 +-2 +-5 ++24 +130793 \ No newline at end of file diff --git a/2018/2ndDay/challenge1/challenge.txt b/2018/2ndDay/challenge1/challenge.txt index ec98100..1dea787 100644 --- a/2018/2ndDay/challenge1/challenge.txt +++ b/2018/2ndDay/challenge1/challenge.txt @@ -1,23 +1,23 @@ ---- Day 2: Inventory Management System --- -You stop falling through time, catch your breath, and check the screen on the device. "Destination reached. Current Year: 1518. Current Location: North Pole Utility Closet 83N10." You made it! Now, to find those anomalies. - -Outside the utility closet, you hear footsteps and a voice. "...I'm not sure either. But now that so many people have chimneys, maybe he could sneak in that way?" Another voice responds, "Actually, we've been working on a new kind of suit that would let him fit through tight spaces like that. But, I heard that a few days ago, they lost the prototype fabric, the design plans, everything! Nobody on the team can even seem to remember important details of the project!" - -"Wouldn't they have had enough fabric to fill several boxes in the warehouse? They'd be stored together, so the box IDs should be similar. Too bad it would take forever to search the warehouse for two similar box IDs..." They walk too far away to hear any more. - -Late at night, you sneak to the warehouse - who knows what kinds of paradoxes you could cause if you were discovered - and use your fancy wrist device to quickly scan every box and produce a list of the likely candidates (your puzzle input). - -To make sure you didn't miss any, you scan the likely candidate boxes again, counting the number that have an ID containing exactly two of any letter and then separately counting those with exactly three of any letter. You can multiply those two counts together to get a rudimentary checksum and compare it to what your device predicts. - -For example, if you see the following box IDs: - -abcdef contains no letters that appear exactly two or three times. -bababc contains two a and three b, so it counts for both. -abbcde contains two b, but no letter appears exactly three times. -abcccd contains three c, but no letter appears exactly two times. -aabcdd contains two a and two d, but it only counts once. -abcdee contains two e. -ababab contains three a and three b, but it only counts once. -Of these box IDs, four of them contain a letter which appears exactly twice, and three of them contain a letter which appears exactly three times. Multiplying these together produces a checksum of 4 * 3 = 12. - +--- Day 2: Inventory Management System --- +You stop falling through time, catch your breath, and check the screen on the device. "Destination reached. Current Year: 1518. Current Location: North Pole Utility Closet 83N10." You made it! Now, to find those anomalies. + +Outside the utility closet, you hear footsteps and a voice. "...I'm not sure either. But now that so many people have chimneys, maybe he could sneak in that way?" Another voice responds, "Actually, we've been working on a new kind of suit that would let him fit through tight spaces like that. But, I heard that a few days ago, they lost the prototype fabric, the design plans, everything! Nobody on the team can even seem to remember important details of the project!" + +"Wouldn't they have had enough fabric to fill several boxes in the warehouse? They'd be stored together, so the box IDs should be similar. Too bad it would take forever to search the warehouse for two similar box IDs..." They walk too far away to hear any more. + +Late at night, you sneak to the warehouse - who knows what kinds of paradoxes you could cause if you were discovered - and use your fancy wrist device to quickly scan every box and produce a list of the likely candidates (your puzzle input). + +To make sure you didn't miss any, you scan the likely candidate boxes again, counting the number that have an ID containing exactly two of any letter and then separately counting those with exactly three of any letter. You can multiply those two counts together to get a rudimentary checksum and compare it to what your device predicts. + +For example, if you see the following box IDs: + +abcdef contains no letters that appear exactly two or three times. +bababc contains two a and three b, so it counts for both. +abbcde contains two b, but no letter appears exactly three times. +abcccd contains three c, but no letter appears exactly two times. +aabcdd contains two a and two d, but it only counts once. +abcdee contains two e. +ababab contains three a and three b, but it only counts once. +Of these box IDs, four of them contain a letter which appears exactly twice, and three of them contain a letter which appears exactly three times. Multiplying these together produces a checksum of 4 * 3 = 12. + What is the checksum for your list of box IDs? \ No newline at end of file diff --git a/2018/2ndDay/challenge1/input.txt b/2018/2ndDay/challenge1/input.txt index 14b68f3..2a82cec 100644 --- a/2018/2ndDay/challenge1/input.txt +++ b/2018/2ndDay/challenge1/input.txt @@ -1,250 +1,250 @@ -ybruvapdgixszyckwtfqjonsie -mbruvapxghslyyckwtfqjonsie -mbruvapdghslzyckwtkujonsie -rwruvapdghxlzyckwtfqjcnsie -obruvapdgtxlzyckwtfqionsie -lbruvapdghxqzyckwtfqjfnsie -mbrunapdghxlzyccatfqjonsie -mbruvapdghxlzyokltfqjdnsie -ybruvapdghxlzmckwtfqjmnsie -mbruwaadghxdzyckwtfqjonsie -muruvapdghxlzyckvtfqjonsim -mbruvapdghxlkyckwtxqjonjie -mbruvaqdghxlzyckwtfqjrnnie -mwruvapdghdlzyckttfqjonsie -mbruvapdgtelzyckwxfqjonsie -mbruvapdohxlzvckwtfqjonhie -mbrugapdgbxlzyckwtfqjynsie -mbruvapdghxlzyckwtlqjonjiu -mbruvapwghxlzyckwafqjonbie -wbruvapdghxlhyckwtfqjonsii -mbruvapdghxlzyckwtcqnonsiq -mbyuvapighxlzybkwtfqjonsie -mbrrvapdghxvzyckwtfqjonsio -mhruvapdghrlzyckwtfzjonsie -mtruvapvghxlzyckwtfnjonsie -mmrlhapdghxlzyckwtfqjonsie -mbruvapdgpxlzyjkwtfqjovsie -mbrucapdghxlzymkwtzqjonsie -mbeuvafdghxlzyckwtfqjonwie -mbruvapcghxlayckwtfqjonsii -mbruvabdghxlzyckwtfqyansie -mbruvjpdghxlzyckwtfqgfnsie -lbruvapdghxlzyckwtfqjonriv -mbrupapdghxlzycjwtfqronsie -mbpuvapdthxlzymkwtfqjonsie -mbiuvapdgixlzyckwxfqjonsie -mbruvapdghxyzyckwtfcjonsbe -mbrurapkghxlzyckwtfqjonzie -mbrufapdrhxlzyciwtfqjonsie -mbruvapdghxlzbckwtfqjoisae -ubruhapdghxlzuckwtfqjonsie -mbruvapdjhulzyckwtfqjonshe -mbruwapdgyxlzyckntfqjonsie -mwruvapdghplzyckwtfqjonsme -mbruvapjghtlzyckwtfqgonsie -pbruvapdghhlzyckwtfrjonsie -mbruvgpdihxqzyckwtfqjonsie -mbruvahdohxlzyckwtfijonsie -ibuuvapdghxlzyckwtfqjofsie -mbruvandghxlzyckwtfqjrnxie -mbrjvlpdghxlzyckwgfqjonsie -mbruvapogfxlzyckotfqjonsie -mbruvrpdghxlzyckutfejonsie -mbruvbpdghxlzyhkwtfqjonsip -mbruvapdghxlzyckmnfqjensie -mbruvapdghvlzyckwtfqjowsix -mbruvakdgholzwckwtfqjonsie -mbruvapdghxlzackwtfqconsae -mbruvapdghxlzyqvwtfqjlnsie -mprrvapdgfxlzyckwtfqjonsie -mbrunacdghxlhyckwtfqjonsie -obruvapdgsxlzyckwtfqjonvie -murcvapdghslzyckwtfqjonsie -mbruvapdghxlzyzkwmftjonsie -mbrwvapdgtvlzyckwtfqjonsie -mbxuvapdghxlzqcnwtfqjonsie -mbruvaddghxboyckwtfqjonsie -mhruvwndghxlzyckwtfqjonsie -mbrdvapdghxlzyckwmpqjonsie -mbruvapdgyxlzyckizfqjonsie -mbruvapdghxlzlckwtfqeowsie -mbruvbpdgrxlzyckwtfqjonsxe -mbruqapoghxlzyckwtvqjonsie -mbouhapdghmlzyckwtfqjonsie -mbruvapjghxidyckwtfqjonsie -mbsuvapkghxlkyckwtfqjonsie -mbruvlpdghxlzycrwtfqjonsis -mcrueapdghxlzyckwtfqjynsie -muruvapngbxlzyckwtfqjonsie -mbruvapdghxlzycawtfyjojsie -mbruvbpdghxczyjkwtfqjonsie -ybduvapdghxnzyckwtfqjonsie -mbruvbpdghxlzyckwtfbjousie -mbouvapdghxlzycbwtfqponsie -mbruvaedghplzycgwtfqjonsie -mbrhvapdghxlzyckytfqjgnsie -mbruvapdqbxleyckwtfqjonsie -mbruvapddhhldyckwtfqjonsie -mbruvapdghxlwrckwtfqjondie -mbruvapdmhxlzyckwtfqkonsve -xbbuvapdghxlzyckwtfkjonsie -mbruvapdghxlzyckwcfqjunkie -mbruvapdghxlzyckwtfqxonfib -mbrtvapkghxlzyckwtfqeonsie -mbruvazdghxldymkwtfqjonsie -kbruvapddhxlzfckwtfqjonsie -mbouvapdghxlpyckwtfqjoosie -mbauvapdghxlzyckwtfqjszsie -mbruvapdghtlzyckntfqtonsie -mbruvipdggxlzbckwtfqjonsie -mbruqapdghrlzyckwtfqjznsie -myruvacdghxlzyckwifqjonsie -mbruvapdghxlzuckwtfkjocsie -mwjuvapdghxlzyckwtfqjonsxe -mbruvapxghxlzickwtfqjobsie -mbrupapdghxtlyckwtfqjonsie -meruvapdjjxlzyckwtfqjonsie -mbruvkodghxlzyckwofqjonsie -mbruvapdgexlzyckwtgkjonsie -mbruvapwghxlzyckwtcqjonsiw -mbruvapdghxlzykkwtfqtoxsie -mbruvapdahxlzycgwtfwjonsie -mbruvapdgwxlhyckhtfqjonsie -mbruvapbghxlzycbhmfqjonsie -mbruvapdghxvzyzkwtfqjonsin -mbrcvapdqhxlzyckwyfqjonsie -zbruvaxdghxlzyckwgfqjonsie -mtruvapdghxlilckwtfqjonsie -bbruvapdghxlzyckwtfmjonsxe -mbruvajdghxlzyckwtfqfwnsie -mbruvapdgkxlzyckwtfqionpie -rbruvapdghxlryckwdfqjonsie -mbruvandghxlzyckwmfvjonsie -mbruvahdghxlzeckwtfqjonsme -mbruvnpcghxlzyckwtfqjobsie -mbruvapdghqlzyckwtfbjonsiy -mbruvavdghxlzyckwufqjodsie -mbruvapdghxlzyckwtfzmovsie -mbruvlpdghxuzyckwtfqjoesie -mbruvopdghxlzycwwtfqjansie -obruvapdghglzybkwtfqjonsie -mbpuvlpdghxlcyckwtfqjonsie -mbruvaidghxlzyckwtfmjonoie -mbruvapdihxzzyckwtfqjonsiy -mbquvapdghxlzyckwtfqconsme -mbruvapdghslzyckqtfqjojsie -mbrzdapdghxmzyckwtfqjonsie -mwruvapdghxozyckwtfqjonsxe -muruvapdgfxlzyckwtfqjojsie -wtruvapdghxlzyckvtfqjonsie -mbruvapdghxlzyckysfqjxnsie -mbruvrpdghxczyckktfqjonsie -mbquvapdghxlryckwtfqjonsne -mbruvapdghflzycvwtfqjpnsie -mbruvapughclzyckwtfqjonsin -mbrhvapdghxlpyckwtfqjonsre -mbruvapdgtxlzyckwtfqjoosit -mbrupapnghxhzyckwtfqjonsie -mmvuvapdvhxlzyckwtfqjonsie -mbruvaptghxlzyckwtfqjotsse -mgruvapvghxlzyckwtfqjonsix -mbrupapdghxszyckwtfqjunsie -mbruvkpdghelzyckwtfqjpnsie -mbruvrrdghjlzyckwtfqjonsie -mbruvapdghnlzyckwtfkjonsze -mbruvwpdghxlzyckwtfqhoysie -mbrsvapdfhxlzyckwtfqjobsie -mbruvapdgexezymkwtfqjonsie -ybruvapdghxlzyckwtfqxonsiw -mrruvapdghxdzyckwtfqjossie -mbruvapdghtlzyckwtfqconsiu -mbrpvapdghxlzlckwpfqjonsie -mbruvjpdghslzyckwtfqjjnsie -mhruvapoghxlzyckwtfvjonsie -mbrubqpdghvlzyckwtfqjonsie -mbruvapdghxlzackwtfqconsiw -mbruvapdgnxlzkckwtfqjdnsie -mbrudapgghelzyckwtfqjonsie -mbruvapdghxlzlakwbfqjonsie -mbpuvapdghxlzyckwtuqjonjie -abruvapdghxlzykkwtfqjonzie -mbrupupdghxlsyckwtfqjonsie -mbrsvupdghxlzyckwtfqjonkie -mxruvgpdghxllyckwtfqjonsie -mbrnvapdghxlzycbwtfqfonsie -mbrbxapdghxlzyckttfqjonsie -mbnuvapdghxlzyxkwtmqjonsie -mbrfvapdghjlzickwtfqjonsie -mbhuvupdghxlzyxkwtfqjonsie -mbrcvapdghxluyckwtfqjznsie -mbruvapdghxlzyckwofqjoxsiz -mbrevapdghxloyckwtfqjonnie -mbruvipdghnlzyckwtfqjopsie -mbxxvaptghxlzyckwtfqjonsie -mbruvcpdghxlztckwtjqjonsie -mqruvlpdghxlzyckotfqjonsie -mbruvapdgqxlzyckwtfqjpvsie -mbruvapdgvxlzyjkwtfqjbnsie -mbruvapdghxlgyckwtfqcocsie -mbruvapdghxkwyckwtfqjoqsie -mbrgvavdghxlzyckwxfqjonsie -qbruqapdgvxlzyckwtfqjonsie -mbauvapdghxlzgckwtfqjunsie -mbruvapdgdxluyckwtfqjoosie -mbruvapdghxlzykkwtfqwobsie -mbruvapdghxlzhcnwtfqjonqie -mbruvapdghxlzycbhmfqjonsie -mbruvapdghxluyczwtfqjontie -mbruvapnghxlzyckwnfqjonbie -moruvapdghxlzcckwtfqponsie -mbruvapfgxxlzyckwtfqjunsie -mbruvapdghxlryckvtfejonsie -mbrzvapdghxlzvcbwtfqjonsie -mbruvapdgqxlzyckwcfqjonsce -abruvupdrhxlzyckwtfqjonsie -mbrubaptghxlzyckwtfqjondie -mgruvapdgpxlzyckwtfijonsie -mbruvapdghxczlckwtfujonsie -mbruvapdgmmlzyckwtfqjonsir -mbruvapdhhxltyckwtfdjonsie -mbruvapdghxlzyckwtfdjjnste -mbrdvzpdghxlcyckwtfqjonsie -mbruvapdghxlzyckwtnqbonsim -mbrovapdghxlzyckwtfpjousie -mymuvapdghxlzyjkwtfqjonsie -mbpuvapdghxlzyckwtfljcnsie -mbrxvapdghxlzyclwtfqjonpie -mbrueapdghxlzyckwtfqjopsia -mbruvapdghxlzycdwtfqjbfsie -tbruvavdghxlzyckwtmqjonsie -mbduvapdghxlzyckwrfqjrnsie -mkrsvapughxlzyckwtfqjonsie -mbruvapdghylzyckwtfqtolsie -mgruvapdglxldyckwtfqjonsie -mbrunapdghclzyckwtfqjonsiy -mbruvapdgrxlxyckwtfgjonsie -mbruvapdghxpzbckftfqjonsie -mbruvcpdghxyzyckotfqjonsie -mbruvapdghxlsyckwtfqcqnsie -mbruvapdghxlzzckwtfqjonskf -mbruvppdghxlzfckwtfqjgnsie -mbhuvapdghxlzytkwtfqjonoie -mbruvapdghxlzvrkwtfqjjnsie -mbmuvapdghxuzyckwtfqjonsze -mbruvapdghnlzycnwtfqjonsil -mbruvapdgholzyckitfqjonsia -mbruxapdghxlmyckwtfqbonsie -mbauvapdgholzyckwtfqjolsie -mbruvapdghxlzyckwtfqjotslq -dbrutapdghxlzyckwtfqjonsiv -mbruvapdzhxlyyckwtfbjonsie -mmruaapsghxlzyckwtfqjonsie -mbruvaldgqxqzyckwtfqjonsie -mbruvaodghxdzyjkwtfqjonsie -mbrcmatdghxlzyckwtfqjonsie -mbrqvapdgtxlzycewtfqjonsie -mjruvapdghzlzyckwtfqjonrie -mbruvapdghxopcckwtfqjonsie -mbruvapdghxszycwwtfqjoqsie +ybruvapdgixszyckwtfqjonsie +mbruvapxghslyyckwtfqjonsie +mbruvapdghslzyckwtkujonsie +rwruvapdghxlzyckwtfqjcnsie +obruvapdgtxlzyckwtfqionsie +lbruvapdghxqzyckwtfqjfnsie +mbrunapdghxlzyccatfqjonsie +mbruvapdghxlzyokltfqjdnsie +ybruvapdghxlzmckwtfqjmnsie +mbruwaadghxdzyckwtfqjonsie +muruvapdghxlzyckvtfqjonsim +mbruvapdghxlkyckwtxqjonjie +mbruvaqdghxlzyckwtfqjrnnie +mwruvapdghdlzyckttfqjonsie +mbruvapdgtelzyckwxfqjonsie +mbruvapdohxlzvckwtfqjonhie +mbrugapdgbxlzyckwtfqjynsie +mbruvapdghxlzyckwtlqjonjiu +mbruvapwghxlzyckwafqjonbie +wbruvapdghxlhyckwtfqjonsii +mbruvapdghxlzyckwtcqnonsiq +mbyuvapighxlzybkwtfqjonsie +mbrrvapdghxvzyckwtfqjonsio +mhruvapdghrlzyckwtfzjonsie +mtruvapvghxlzyckwtfnjonsie +mmrlhapdghxlzyckwtfqjonsie +mbruvapdgpxlzyjkwtfqjovsie +mbrucapdghxlzymkwtzqjonsie +mbeuvafdghxlzyckwtfqjonwie +mbruvapcghxlayckwtfqjonsii +mbruvabdghxlzyckwtfqyansie +mbruvjpdghxlzyckwtfqgfnsie +lbruvapdghxlzyckwtfqjonriv +mbrupapdghxlzycjwtfqronsie +mbpuvapdthxlzymkwtfqjonsie +mbiuvapdgixlzyckwxfqjonsie +mbruvapdghxyzyckwtfcjonsbe +mbrurapkghxlzyckwtfqjonzie +mbrufapdrhxlzyciwtfqjonsie +mbruvapdghxlzbckwtfqjoisae +ubruhapdghxlzuckwtfqjonsie +mbruvapdjhulzyckwtfqjonshe +mbruwapdgyxlzyckntfqjonsie +mwruvapdghplzyckwtfqjonsme +mbruvapjghtlzyckwtfqgonsie +pbruvapdghhlzyckwtfrjonsie +mbruvgpdihxqzyckwtfqjonsie +mbruvahdohxlzyckwtfijonsie +ibuuvapdghxlzyckwtfqjofsie +mbruvandghxlzyckwtfqjrnxie +mbrjvlpdghxlzyckwgfqjonsie +mbruvapogfxlzyckotfqjonsie +mbruvrpdghxlzyckutfejonsie +mbruvbpdghxlzyhkwtfqjonsip +mbruvapdghxlzyckmnfqjensie +mbruvapdghvlzyckwtfqjowsix +mbruvakdgholzwckwtfqjonsie +mbruvapdghxlzackwtfqconsae +mbruvapdghxlzyqvwtfqjlnsie +mprrvapdgfxlzyckwtfqjonsie +mbrunacdghxlhyckwtfqjonsie +obruvapdgsxlzyckwtfqjonvie +murcvapdghslzyckwtfqjonsie +mbruvapdghxlzyzkwmftjonsie +mbrwvapdgtvlzyckwtfqjonsie +mbxuvapdghxlzqcnwtfqjonsie +mbruvaddghxboyckwtfqjonsie +mhruvwndghxlzyckwtfqjonsie +mbrdvapdghxlzyckwmpqjonsie +mbruvapdgyxlzyckizfqjonsie +mbruvapdghxlzlckwtfqeowsie +mbruvbpdgrxlzyckwtfqjonsxe +mbruqapoghxlzyckwtvqjonsie +mbouhapdghmlzyckwtfqjonsie +mbruvapjghxidyckwtfqjonsie +mbsuvapkghxlkyckwtfqjonsie +mbruvlpdghxlzycrwtfqjonsis +mcrueapdghxlzyckwtfqjynsie +muruvapngbxlzyckwtfqjonsie +mbruvapdghxlzycawtfyjojsie +mbruvbpdghxczyjkwtfqjonsie +ybduvapdghxnzyckwtfqjonsie +mbruvbpdghxlzyckwtfbjousie +mbouvapdghxlzycbwtfqponsie +mbruvaedghplzycgwtfqjonsie +mbrhvapdghxlzyckytfqjgnsie +mbruvapdqbxleyckwtfqjonsie +mbruvapddhhldyckwtfqjonsie +mbruvapdghxlwrckwtfqjondie +mbruvapdmhxlzyckwtfqkonsve +xbbuvapdghxlzyckwtfkjonsie +mbruvapdghxlzyckwcfqjunkie +mbruvapdghxlzyckwtfqxonfib +mbrtvapkghxlzyckwtfqeonsie +mbruvazdghxldymkwtfqjonsie +kbruvapddhxlzfckwtfqjonsie +mbouvapdghxlpyckwtfqjoosie +mbauvapdghxlzyckwtfqjszsie +mbruvapdghtlzyckntfqtonsie +mbruvipdggxlzbckwtfqjonsie +mbruqapdghrlzyckwtfqjznsie +myruvacdghxlzyckwifqjonsie +mbruvapdghxlzuckwtfkjocsie +mwjuvapdghxlzyckwtfqjonsxe +mbruvapxghxlzickwtfqjobsie +mbrupapdghxtlyckwtfqjonsie +meruvapdjjxlzyckwtfqjonsie +mbruvkodghxlzyckwofqjonsie +mbruvapdgexlzyckwtgkjonsie +mbruvapwghxlzyckwtcqjonsiw +mbruvapdghxlzykkwtfqtoxsie +mbruvapdahxlzycgwtfwjonsie +mbruvapdgwxlhyckhtfqjonsie +mbruvapbghxlzycbhmfqjonsie +mbruvapdghxvzyzkwtfqjonsin +mbrcvapdqhxlzyckwyfqjonsie +zbruvaxdghxlzyckwgfqjonsie +mtruvapdghxlilckwtfqjonsie +bbruvapdghxlzyckwtfmjonsxe +mbruvajdghxlzyckwtfqfwnsie +mbruvapdgkxlzyckwtfqionpie +rbruvapdghxlryckwdfqjonsie +mbruvandghxlzyckwmfvjonsie +mbruvahdghxlzeckwtfqjonsme +mbruvnpcghxlzyckwtfqjobsie +mbruvapdghqlzyckwtfbjonsiy +mbruvavdghxlzyckwufqjodsie +mbruvapdghxlzyckwtfzmovsie +mbruvlpdghxuzyckwtfqjoesie +mbruvopdghxlzycwwtfqjansie +obruvapdghglzybkwtfqjonsie +mbpuvlpdghxlcyckwtfqjonsie +mbruvaidghxlzyckwtfmjonoie +mbruvapdihxzzyckwtfqjonsiy +mbquvapdghxlzyckwtfqconsme +mbruvapdghslzyckqtfqjojsie +mbrzdapdghxmzyckwtfqjonsie +mwruvapdghxozyckwtfqjonsxe +muruvapdgfxlzyckwtfqjojsie +wtruvapdghxlzyckvtfqjonsie +mbruvapdghxlzyckysfqjxnsie +mbruvrpdghxczyckktfqjonsie +mbquvapdghxlryckwtfqjonsne +mbruvapdghflzycvwtfqjpnsie +mbruvapughclzyckwtfqjonsin +mbrhvapdghxlpyckwtfqjonsre +mbruvapdgtxlzyckwtfqjoosit +mbrupapnghxhzyckwtfqjonsie +mmvuvapdvhxlzyckwtfqjonsie +mbruvaptghxlzyckwtfqjotsse +mgruvapvghxlzyckwtfqjonsix +mbrupapdghxszyckwtfqjunsie +mbruvkpdghelzyckwtfqjpnsie +mbruvrrdghjlzyckwtfqjonsie +mbruvapdghnlzyckwtfkjonsze +mbruvwpdghxlzyckwtfqhoysie +mbrsvapdfhxlzyckwtfqjobsie +mbruvapdgexezymkwtfqjonsie +ybruvapdghxlzyckwtfqxonsiw +mrruvapdghxdzyckwtfqjossie +mbruvapdghtlzyckwtfqconsiu +mbrpvapdghxlzlckwpfqjonsie +mbruvjpdghslzyckwtfqjjnsie +mhruvapoghxlzyckwtfvjonsie +mbrubqpdghvlzyckwtfqjonsie +mbruvapdghxlzackwtfqconsiw +mbruvapdgnxlzkckwtfqjdnsie +mbrudapgghelzyckwtfqjonsie +mbruvapdghxlzlakwbfqjonsie +mbpuvapdghxlzyckwtuqjonjie +abruvapdghxlzykkwtfqjonzie +mbrupupdghxlsyckwtfqjonsie +mbrsvupdghxlzyckwtfqjonkie +mxruvgpdghxllyckwtfqjonsie +mbrnvapdghxlzycbwtfqfonsie +mbrbxapdghxlzyckttfqjonsie +mbnuvapdghxlzyxkwtmqjonsie +mbrfvapdghjlzickwtfqjonsie +mbhuvupdghxlzyxkwtfqjonsie +mbrcvapdghxluyckwtfqjznsie +mbruvapdghxlzyckwofqjoxsiz +mbrevapdghxloyckwtfqjonnie +mbruvipdghnlzyckwtfqjopsie +mbxxvaptghxlzyckwtfqjonsie +mbruvcpdghxlztckwtjqjonsie +mqruvlpdghxlzyckotfqjonsie +mbruvapdgqxlzyckwtfqjpvsie +mbruvapdgvxlzyjkwtfqjbnsie +mbruvapdghxlgyckwtfqcocsie +mbruvapdghxkwyckwtfqjoqsie +mbrgvavdghxlzyckwxfqjonsie +qbruqapdgvxlzyckwtfqjonsie +mbauvapdghxlzgckwtfqjunsie +mbruvapdgdxluyckwtfqjoosie +mbruvapdghxlzykkwtfqwobsie +mbruvapdghxlzhcnwtfqjonqie +mbruvapdghxlzycbhmfqjonsie +mbruvapdghxluyczwtfqjontie +mbruvapnghxlzyckwnfqjonbie +moruvapdghxlzcckwtfqponsie +mbruvapfgxxlzyckwtfqjunsie +mbruvapdghxlryckvtfejonsie +mbrzvapdghxlzvcbwtfqjonsie +mbruvapdgqxlzyckwcfqjonsce +abruvupdrhxlzyckwtfqjonsie +mbrubaptghxlzyckwtfqjondie +mgruvapdgpxlzyckwtfijonsie +mbruvapdghxczlckwtfujonsie +mbruvapdgmmlzyckwtfqjonsir +mbruvapdhhxltyckwtfdjonsie +mbruvapdghxlzyckwtfdjjnste +mbrdvzpdghxlcyckwtfqjonsie +mbruvapdghxlzyckwtnqbonsim +mbrovapdghxlzyckwtfpjousie +mymuvapdghxlzyjkwtfqjonsie +mbpuvapdghxlzyckwtfljcnsie +mbrxvapdghxlzyclwtfqjonpie +mbrueapdghxlzyckwtfqjopsia +mbruvapdghxlzycdwtfqjbfsie +tbruvavdghxlzyckwtmqjonsie +mbduvapdghxlzyckwrfqjrnsie +mkrsvapughxlzyckwtfqjonsie +mbruvapdghylzyckwtfqtolsie +mgruvapdglxldyckwtfqjonsie +mbrunapdghclzyckwtfqjonsiy +mbruvapdgrxlxyckwtfgjonsie +mbruvapdghxpzbckftfqjonsie +mbruvcpdghxyzyckotfqjonsie +mbruvapdghxlsyckwtfqcqnsie +mbruvapdghxlzzckwtfqjonskf +mbruvppdghxlzfckwtfqjgnsie +mbhuvapdghxlzytkwtfqjonoie +mbruvapdghxlzvrkwtfqjjnsie +mbmuvapdghxuzyckwtfqjonsze +mbruvapdghnlzycnwtfqjonsil +mbruvapdgholzyckitfqjonsia +mbruxapdghxlmyckwtfqbonsie +mbauvapdgholzyckwtfqjolsie +mbruvapdghxlzyckwtfqjotslq +dbrutapdghxlzyckwtfqjonsiv +mbruvapdzhxlyyckwtfbjonsie +mmruaapsghxlzyckwtfqjonsie +mbruvaldgqxqzyckwtfqjonsie +mbruvaodghxdzyjkwtfqjonsie +mbrcmatdghxlzyckwtfqjonsie +mbrqvapdgtxlzycewtfqjonsie +mjruvapdghzlzyckwtfqjonrie +mbruvapdghxopcckwtfqjonsie +mbruvapdghxszycwwtfqjoqsie mbruvapdgoxezyckwtjqjonsie \ No newline at end of file diff --git a/2018/2ndDay/challenge1/main.cpp b/2018/2ndDay/challenge1/main.cpp index dd50ca9..d6a4e92 100644 --- a/2018/2ndDay/challenge1/main.cpp +++ b/2018/2ndDay/challenge1/main.cpp @@ -1,36 +1,36 @@ -#include -#include -#include - -bool isRepeat(std::string line, int repeats) { - for (char c = 'a'; c <= 'z'; ++c) { - int count = 0; - for (size_t i = 0; i < line.size(); ++i) { - if (line[i] == c) - ++count; - } - if (count == repeats) - return true; - } - return false; -} - -int checkSum(std::string fileName) { - std::fstream input(fileName); - std::string line; - int doubles = 0; - int triples = 0; - - while (!input.eof()) { - std::getline(input, line); - if (isRepeat(line, 2)) - ++doubles; - if (isRepeat(line, 3)) - ++triples; - } - return doubles * triples; -} - -int main(int argc, char** argv) { - std::cout << "Found: " << checkSum("input.txt") << std::endl; -} +#include +#include +#include + +bool isRepeat(std::string line, int repeats) { + for (char c = 'a'; c <= 'z'; ++c) { + int count = 0; + for (size_t i = 0; i < line.size(); ++i) { + if (line[i] == c) + ++count; + } + if (count == repeats) + return true; + } + return false; +} + +int checkSum(std::string fileName) { + std::fstream input(fileName); + std::string line; + int doubles = 0; + int triples = 0; + + while (!input.eof()) { + std::getline(input, line); + if (isRepeat(line, 2)) + ++doubles; + if (isRepeat(line, 3)) + ++triples; + } + return doubles * triples; +} + +int main(int argc, char** argv) { + std::cout << "Found: " << checkSum("input.txt") << std::endl; +} diff --git a/2018/2ndDay/challenge2/challenge.txt b/2018/2ndDay/challenge2/challenge.txt index 1ac2e8d..91d8648 100644 --- a/2018/2ndDay/challenge2/challenge.txt +++ b/2018/2ndDay/challenge2/challenge.txt @@ -1,15 +1,15 @@ ---- Part Two --- -Confident that your list of box IDs is complete, you're ready to find the boxes full of prototype fabric. - -The boxes will have IDs which differ by exactly one character at the same position in both strings. For example, given the following box IDs: - -abcde -fghij -klmno -pqrst -fguij -axcye -wvxyz -The IDs abcde and axcye are close, but they differ by two characters (the second and fourth). However, the IDs fghij and fguij differ by exactly one character, the third (h and u). Those must be the correct boxes. - +--- Part Two --- +Confident that your list of box IDs is complete, you're ready to find the boxes full of prototype fabric. + +The boxes will have IDs which differ by exactly one character at the same position in both strings. For example, given the following box IDs: + +abcde +fghij +klmno +pqrst +fguij +axcye +wvxyz +The IDs abcde and axcye are close, but they differ by two characters (the second and fourth). However, the IDs fghij and fguij differ by exactly one character, the third (h and u). Those must be the correct boxes. + What letters are common between the two correct box IDs? (In the example above, this is found by removing the differing character from either ID, producing fgij.) \ No newline at end of file diff --git a/2018/2ndDay/challenge2/input.txt b/2018/2ndDay/challenge2/input.txt index 14b68f3..2a82cec 100644 --- a/2018/2ndDay/challenge2/input.txt +++ b/2018/2ndDay/challenge2/input.txt @@ -1,250 +1,250 @@ -ybruvapdgixszyckwtfqjonsie -mbruvapxghslyyckwtfqjonsie -mbruvapdghslzyckwtkujonsie -rwruvapdghxlzyckwtfqjcnsie -obruvapdgtxlzyckwtfqionsie -lbruvapdghxqzyckwtfqjfnsie -mbrunapdghxlzyccatfqjonsie -mbruvapdghxlzyokltfqjdnsie -ybruvapdghxlzmckwtfqjmnsie -mbruwaadghxdzyckwtfqjonsie -muruvapdghxlzyckvtfqjonsim -mbruvapdghxlkyckwtxqjonjie -mbruvaqdghxlzyckwtfqjrnnie -mwruvapdghdlzyckttfqjonsie -mbruvapdgtelzyckwxfqjonsie -mbruvapdohxlzvckwtfqjonhie -mbrugapdgbxlzyckwtfqjynsie -mbruvapdghxlzyckwtlqjonjiu -mbruvapwghxlzyckwafqjonbie -wbruvapdghxlhyckwtfqjonsii -mbruvapdghxlzyckwtcqnonsiq -mbyuvapighxlzybkwtfqjonsie -mbrrvapdghxvzyckwtfqjonsio -mhruvapdghrlzyckwtfzjonsie -mtruvapvghxlzyckwtfnjonsie -mmrlhapdghxlzyckwtfqjonsie -mbruvapdgpxlzyjkwtfqjovsie -mbrucapdghxlzymkwtzqjonsie -mbeuvafdghxlzyckwtfqjonwie -mbruvapcghxlayckwtfqjonsii -mbruvabdghxlzyckwtfqyansie -mbruvjpdghxlzyckwtfqgfnsie -lbruvapdghxlzyckwtfqjonriv -mbrupapdghxlzycjwtfqronsie -mbpuvapdthxlzymkwtfqjonsie -mbiuvapdgixlzyckwxfqjonsie -mbruvapdghxyzyckwtfcjonsbe -mbrurapkghxlzyckwtfqjonzie -mbrufapdrhxlzyciwtfqjonsie -mbruvapdghxlzbckwtfqjoisae -ubruhapdghxlzuckwtfqjonsie -mbruvapdjhulzyckwtfqjonshe -mbruwapdgyxlzyckntfqjonsie -mwruvapdghplzyckwtfqjonsme -mbruvapjghtlzyckwtfqgonsie -pbruvapdghhlzyckwtfrjonsie -mbruvgpdihxqzyckwtfqjonsie -mbruvahdohxlzyckwtfijonsie -ibuuvapdghxlzyckwtfqjofsie -mbruvandghxlzyckwtfqjrnxie -mbrjvlpdghxlzyckwgfqjonsie -mbruvapogfxlzyckotfqjonsie -mbruvrpdghxlzyckutfejonsie -mbruvbpdghxlzyhkwtfqjonsip -mbruvapdghxlzyckmnfqjensie -mbruvapdghvlzyckwtfqjowsix -mbruvakdgholzwckwtfqjonsie -mbruvapdghxlzackwtfqconsae -mbruvapdghxlzyqvwtfqjlnsie -mprrvapdgfxlzyckwtfqjonsie -mbrunacdghxlhyckwtfqjonsie -obruvapdgsxlzyckwtfqjonvie -murcvapdghslzyckwtfqjonsie -mbruvapdghxlzyzkwmftjonsie -mbrwvapdgtvlzyckwtfqjonsie -mbxuvapdghxlzqcnwtfqjonsie -mbruvaddghxboyckwtfqjonsie -mhruvwndghxlzyckwtfqjonsie -mbrdvapdghxlzyckwmpqjonsie -mbruvapdgyxlzyckizfqjonsie -mbruvapdghxlzlckwtfqeowsie -mbruvbpdgrxlzyckwtfqjonsxe -mbruqapoghxlzyckwtvqjonsie -mbouhapdghmlzyckwtfqjonsie -mbruvapjghxidyckwtfqjonsie -mbsuvapkghxlkyckwtfqjonsie -mbruvlpdghxlzycrwtfqjonsis -mcrueapdghxlzyckwtfqjynsie -muruvapngbxlzyckwtfqjonsie -mbruvapdghxlzycawtfyjojsie -mbruvbpdghxczyjkwtfqjonsie -ybduvapdghxnzyckwtfqjonsie -mbruvbpdghxlzyckwtfbjousie -mbouvapdghxlzycbwtfqponsie -mbruvaedghplzycgwtfqjonsie -mbrhvapdghxlzyckytfqjgnsie -mbruvapdqbxleyckwtfqjonsie -mbruvapddhhldyckwtfqjonsie -mbruvapdghxlwrckwtfqjondie -mbruvapdmhxlzyckwtfqkonsve -xbbuvapdghxlzyckwtfkjonsie -mbruvapdghxlzyckwcfqjunkie -mbruvapdghxlzyckwtfqxonfib -mbrtvapkghxlzyckwtfqeonsie -mbruvazdghxldymkwtfqjonsie -kbruvapddhxlzfckwtfqjonsie -mbouvapdghxlpyckwtfqjoosie -mbauvapdghxlzyckwtfqjszsie -mbruvapdghtlzyckntfqtonsie -mbruvipdggxlzbckwtfqjonsie -mbruqapdghrlzyckwtfqjznsie -myruvacdghxlzyckwifqjonsie -mbruvapdghxlzuckwtfkjocsie -mwjuvapdghxlzyckwtfqjonsxe -mbruvapxghxlzickwtfqjobsie -mbrupapdghxtlyckwtfqjonsie -meruvapdjjxlzyckwtfqjonsie -mbruvkodghxlzyckwofqjonsie -mbruvapdgexlzyckwtgkjonsie -mbruvapwghxlzyckwtcqjonsiw -mbruvapdghxlzykkwtfqtoxsie -mbruvapdahxlzycgwtfwjonsie -mbruvapdgwxlhyckhtfqjonsie -mbruvapbghxlzycbhmfqjonsie -mbruvapdghxvzyzkwtfqjonsin -mbrcvapdqhxlzyckwyfqjonsie -zbruvaxdghxlzyckwgfqjonsie -mtruvapdghxlilckwtfqjonsie -bbruvapdghxlzyckwtfmjonsxe -mbruvajdghxlzyckwtfqfwnsie -mbruvapdgkxlzyckwtfqionpie -rbruvapdghxlryckwdfqjonsie -mbruvandghxlzyckwmfvjonsie -mbruvahdghxlzeckwtfqjonsme -mbruvnpcghxlzyckwtfqjobsie -mbruvapdghqlzyckwtfbjonsiy -mbruvavdghxlzyckwufqjodsie -mbruvapdghxlzyckwtfzmovsie -mbruvlpdghxuzyckwtfqjoesie -mbruvopdghxlzycwwtfqjansie -obruvapdghglzybkwtfqjonsie -mbpuvlpdghxlcyckwtfqjonsie -mbruvaidghxlzyckwtfmjonoie -mbruvapdihxzzyckwtfqjonsiy -mbquvapdghxlzyckwtfqconsme -mbruvapdghslzyckqtfqjojsie -mbrzdapdghxmzyckwtfqjonsie -mwruvapdghxozyckwtfqjonsxe -muruvapdgfxlzyckwtfqjojsie -wtruvapdghxlzyckvtfqjonsie -mbruvapdghxlzyckysfqjxnsie -mbruvrpdghxczyckktfqjonsie -mbquvapdghxlryckwtfqjonsne -mbruvapdghflzycvwtfqjpnsie -mbruvapughclzyckwtfqjonsin -mbrhvapdghxlpyckwtfqjonsre -mbruvapdgtxlzyckwtfqjoosit -mbrupapnghxhzyckwtfqjonsie -mmvuvapdvhxlzyckwtfqjonsie -mbruvaptghxlzyckwtfqjotsse -mgruvapvghxlzyckwtfqjonsix -mbrupapdghxszyckwtfqjunsie -mbruvkpdghelzyckwtfqjpnsie -mbruvrrdghjlzyckwtfqjonsie -mbruvapdghnlzyckwtfkjonsze -mbruvwpdghxlzyckwtfqhoysie -mbrsvapdfhxlzyckwtfqjobsie -mbruvapdgexezymkwtfqjonsie -ybruvapdghxlzyckwtfqxonsiw -mrruvapdghxdzyckwtfqjossie -mbruvapdghtlzyckwtfqconsiu -mbrpvapdghxlzlckwpfqjonsie -mbruvjpdghslzyckwtfqjjnsie -mhruvapoghxlzyckwtfvjonsie -mbrubqpdghvlzyckwtfqjonsie -mbruvapdghxlzackwtfqconsiw -mbruvapdgnxlzkckwtfqjdnsie -mbrudapgghelzyckwtfqjonsie -mbruvapdghxlzlakwbfqjonsie -mbpuvapdghxlzyckwtuqjonjie -abruvapdghxlzykkwtfqjonzie -mbrupupdghxlsyckwtfqjonsie -mbrsvupdghxlzyckwtfqjonkie -mxruvgpdghxllyckwtfqjonsie -mbrnvapdghxlzycbwtfqfonsie -mbrbxapdghxlzyckttfqjonsie -mbnuvapdghxlzyxkwtmqjonsie -mbrfvapdghjlzickwtfqjonsie -mbhuvupdghxlzyxkwtfqjonsie -mbrcvapdghxluyckwtfqjznsie -mbruvapdghxlzyckwofqjoxsiz -mbrevapdghxloyckwtfqjonnie -mbruvipdghnlzyckwtfqjopsie -mbxxvaptghxlzyckwtfqjonsie -mbruvcpdghxlztckwtjqjonsie -mqruvlpdghxlzyckotfqjonsie -mbruvapdgqxlzyckwtfqjpvsie -mbruvapdgvxlzyjkwtfqjbnsie -mbruvapdghxlgyckwtfqcocsie -mbruvapdghxkwyckwtfqjoqsie -mbrgvavdghxlzyckwxfqjonsie -qbruqapdgvxlzyckwtfqjonsie -mbauvapdghxlzgckwtfqjunsie -mbruvapdgdxluyckwtfqjoosie -mbruvapdghxlzykkwtfqwobsie -mbruvapdghxlzhcnwtfqjonqie -mbruvapdghxlzycbhmfqjonsie -mbruvapdghxluyczwtfqjontie -mbruvapnghxlzyckwnfqjonbie -moruvapdghxlzcckwtfqponsie -mbruvapfgxxlzyckwtfqjunsie -mbruvapdghxlryckvtfejonsie -mbrzvapdghxlzvcbwtfqjonsie -mbruvapdgqxlzyckwcfqjonsce -abruvupdrhxlzyckwtfqjonsie -mbrubaptghxlzyckwtfqjondie -mgruvapdgpxlzyckwtfijonsie -mbruvapdghxczlckwtfujonsie -mbruvapdgmmlzyckwtfqjonsir -mbruvapdhhxltyckwtfdjonsie -mbruvapdghxlzyckwtfdjjnste -mbrdvzpdghxlcyckwtfqjonsie -mbruvapdghxlzyckwtnqbonsim -mbrovapdghxlzyckwtfpjousie -mymuvapdghxlzyjkwtfqjonsie -mbpuvapdghxlzyckwtfljcnsie -mbrxvapdghxlzyclwtfqjonpie -mbrueapdghxlzyckwtfqjopsia -mbruvapdghxlzycdwtfqjbfsie -tbruvavdghxlzyckwtmqjonsie -mbduvapdghxlzyckwrfqjrnsie -mkrsvapughxlzyckwtfqjonsie -mbruvapdghylzyckwtfqtolsie -mgruvapdglxldyckwtfqjonsie -mbrunapdghclzyckwtfqjonsiy -mbruvapdgrxlxyckwtfgjonsie -mbruvapdghxpzbckftfqjonsie -mbruvcpdghxyzyckotfqjonsie -mbruvapdghxlsyckwtfqcqnsie -mbruvapdghxlzzckwtfqjonskf -mbruvppdghxlzfckwtfqjgnsie -mbhuvapdghxlzytkwtfqjonoie -mbruvapdghxlzvrkwtfqjjnsie -mbmuvapdghxuzyckwtfqjonsze -mbruvapdghnlzycnwtfqjonsil -mbruvapdgholzyckitfqjonsia -mbruxapdghxlmyckwtfqbonsie -mbauvapdgholzyckwtfqjolsie -mbruvapdghxlzyckwtfqjotslq -dbrutapdghxlzyckwtfqjonsiv -mbruvapdzhxlyyckwtfbjonsie -mmruaapsghxlzyckwtfqjonsie -mbruvaldgqxqzyckwtfqjonsie -mbruvaodghxdzyjkwtfqjonsie -mbrcmatdghxlzyckwtfqjonsie -mbrqvapdgtxlzycewtfqjonsie -mjruvapdghzlzyckwtfqjonrie -mbruvapdghxopcckwtfqjonsie -mbruvapdghxszycwwtfqjoqsie +ybruvapdgixszyckwtfqjonsie +mbruvapxghslyyckwtfqjonsie +mbruvapdghslzyckwtkujonsie +rwruvapdghxlzyckwtfqjcnsie +obruvapdgtxlzyckwtfqionsie +lbruvapdghxqzyckwtfqjfnsie +mbrunapdghxlzyccatfqjonsie +mbruvapdghxlzyokltfqjdnsie +ybruvapdghxlzmckwtfqjmnsie +mbruwaadghxdzyckwtfqjonsie +muruvapdghxlzyckvtfqjonsim +mbruvapdghxlkyckwtxqjonjie +mbruvaqdghxlzyckwtfqjrnnie +mwruvapdghdlzyckttfqjonsie +mbruvapdgtelzyckwxfqjonsie +mbruvapdohxlzvckwtfqjonhie +mbrugapdgbxlzyckwtfqjynsie +mbruvapdghxlzyckwtlqjonjiu +mbruvapwghxlzyckwafqjonbie +wbruvapdghxlhyckwtfqjonsii +mbruvapdghxlzyckwtcqnonsiq +mbyuvapighxlzybkwtfqjonsie +mbrrvapdghxvzyckwtfqjonsio +mhruvapdghrlzyckwtfzjonsie +mtruvapvghxlzyckwtfnjonsie +mmrlhapdghxlzyckwtfqjonsie +mbruvapdgpxlzyjkwtfqjovsie +mbrucapdghxlzymkwtzqjonsie +mbeuvafdghxlzyckwtfqjonwie +mbruvapcghxlayckwtfqjonsii +mbruvabdghxlzyckwtfqyansie +mbruvjpdghxlzyckwtfqgfnsie +lbruvapdghxlzyckwtfqjonriv +mbrupapdghxlzycjwtfqronsie +mbpuvapdthxlzymkwtfqjonsie +mbiuvapdgixlzyckwxfqjonsie +mbruvapdghxyzyckwtfcjonsbe +mbrurapkghxlzyckwtfqjonzie +mbrufapdrhxlzyciwtfqjonsie +mbruvapdghxlzbckwtfqjoisae +ubruhapdghxlzuckwtfqjonsie +mbruvapdjhulzyckwtfqjonshe +mbruwapdgyxlzyckntfqjonsie +mwruvapdghplzyckwtfqjonsme +mbruvapjghtlzyckwtfqgonsie +pbruvapdghhlzyckwtfrjonsie +mbruvgpdihxqzyckwtfqjonsie +mbruvahdohxlzyckwtfijonsie +ibuuvapdghxlzyckwtfqjofsie +mbruvandghxlzyckwtfqjrnxie +mbrjvlpdghxlzyckwgfqjonsie +mbruvapogfxlzyckotfqjonsie +mbruvrpdghxlzyckutfejonsie +mbruvbpdghxlzyhkwtfqjonsip +mbruvapdghxlzyckmnfqjensie +mbruvapdghvlzyckwtfqjowsix +mbruvakdgholzwckwtfqjonsie +mbruvapdghxlzackwtfqconsae +mbruvapdghxlzyqvwtfqjlnsie +mprrvapdgfxlzyckwtfqjonsie +mbrunacdghxlhyckwtfqjonsie +obruvapdgsxlzyckwtfqjonvie +murcvapdghslzyckwtfqjonsie +mbruvapdghxlzyzkwmftjonsie +mbrwvapdgtvlzyckwtfqjonsie +mbxuvapdghxlzqcnwtfqjonsie +mbruvaddghxboyckwtfqjonsie +mhruvwndghxlzyckwtfqjonsie +mbrdvapdghxlzyckwmpqjonsie +mbruvapdgyxlzyckizfqjonsie +mbruvapdghxlzlckwtfqeowsie +mbruvbpdgrxlzyckwtfqjonsxe +mbruqapoghxlzyckwtvqjonsie +mbouhapdghmlzyckwtfqjonsie +mbruvapjghxidyckwtfqjonsie +mbsuvapkghxlkyckwtfqjonsie +mbruvlpdghxlzycrwtfqjonsis +mcrueapdghxlzyckwtfqjynsie +muruvapngbxlzyckwtfqjonsie +mbruvapdghxlzycawtfyjojsie +mbruvbpdghxczyjkwtfqjonsie +ybduvapdghxnzyckwtfqjonsie +mbruvbpdghxlzyckwtfbjousie +mbouvapdghxlzycbwtfqponsie +mbruvaedghplzycgwtfqjonsie +mbrhvapdghxlzyckytfqjgnsie +mbruvapdqbxleyckwtfqjonsie +mbruvapddhhldyckwtfqjonsie +mbruvapdghxlwrckwtfqjondie +mbruvapdmhxlzyckwtfqkonsve +xbbuvapdghxlzyckwtfkjonsie +mbruvapdghxlzyckwcfqjunkie +mbruvapdghxlzyckwtfqxonfib +mbrtvapkghxlzyckwtfqeonsie +mbruvazdghxldymkwtfqjonsie +kbruvapddhxlzfckwtfqjonsie +mbouvapdghxlpyckwtfqjoosie +mbauvapdghxlzyckwtfqjszsie +mbruvapdghtlzyckntfqtonsie +mbruvipdggxlzbckwtfqjonsie +mbruqapdghrlzyckwtfqjznsie +myruvacdghxlzyckwifqjonsie +mbruvapdghxlzuckwtfkjocsie +mwjuvapdghxlzyckwtfqjonsxe +mbruvapxghxlzickwtfqjobsie +mbrupapdghxtlyckwtfqjonsie +meruvapdjjxlzyckwtfqjonsie +mbruvkodghxlzyckwofqjonsie +mbruvapdgexlzyckwtgkjonsie +mbruvapwghxlzyckwtcqjonsiw +mbruvapdghxlzykkwtfqtoxsie +mbruvapdahxlzycgwtfwjonsie +mbruvapdgwxlhyckhtfqjonsie +mbruvapbghxlzycbhmfqjonsie +mbruvapdghxvzyzkwtfqjonsin +mbrcvapdqhxlzyckwyfqjonsie +zbruvaxdghxlzyckwgfqjonsie +mtruvapdghxlilckwtfqjonsie +bbruvapdghxlzyckwtfmjonsxe +mbruvajdghxlzyckwtfqfwnsie +mbruvapdgkxlzyckwtfqionpie +rbruvapdghxlryckwdfqjonsie +mbruvandghxlzyckwmfvjonsie +mbruvahdghxlzeckwtfqjonsme +mbruvnpcghxlzyckwtfqjobsie +mbruvapdghqlzyckwtfbjonsiy +mbruvavdghxlzyckwufqjodsie +mbruvapdghxlzyckwtfzmovsie +mbruvlpdghxuzyckwtfqjoesie +mbruvopdghxlzycwwtfqjansie +obruvapdghglzybkwtfqjonsie +mbpuvlpdghxlcyckwtfqjonsie +mbruvaidghxlzyckwtfmjonoie +mbruvapdihxzzyckwtfqjonsiy +mbquvapdghxlzyckwtfqconsme +mbruvapdghslzyckqtfqjojsie +mbrzdapdghxmzyckwtfqjonsie +mwruvapdghxozyckwtfqjonsxe +muruvapdgfxlzyckwtfqjojsie +wtruvapdghxlzyckvtfqjonsie +mbruvapdghxlzyckysfqjxnsie +mbruvrpdghxczyckktfqjonsie +mbquvapdghxlryckwtfqjonsne +mbruvapdghflzycvwtfqjpnsie +mbruvapughclzyckwtfqjonsin +mbrhvapdghxlpyckwtfqjonsre +mbruvapdgtxlzyckwtfqjoosit +mbrupapnghxhzyckwtfqjonsie +mmvuvapdvhxlzyckwtfqjonsie +mbruvaptghxlzyckwtfqjotsse +mgruvapvghxlzyckwtfqjonsix +mbrupapdghxszyckwtfqjunsie +mbruvkpdghelzyckwtfqjpnsie +mbruvrrdghjlzyckwtfqjonsie +mbruvapdghnlzyckwtfkjonsze +mbruvwpdghxlzyckwtfqhoysie +mbrsvapdfhxlzyckwtfqjobsie +mbruvapdgexezymkwtfqjonsie +ybruvapdghxlzyckwtfqxonsiw +mrruvapdghxdzyckwtfqjossie +mbruvapdghtlzyckwtfqconsiu +mbrpvapdghxlzlckwpfqjonsie +mbruvjpdghslzyckwtfqjjnsie +mhruvapoghxlzyckwtfvjonsie +mbrubqpdghvlzyckwtfqjonsie +mbruvapdghxlzackwtfqconsiw +mbruvapdgnxlzkckwtfqjdnsie +mbrudapgghelzyckwtfqjonsie +mbruvapdghxlzlakwbfqjonsie +mbpuvapdghxlzyckwtuqjonjie +abruvapdghxlzykkwtfqjonzie +mbrupupdghxlsyckwtfqjonsie +mbrsvupdghxlzyckwtfqjonkie +mxruvgpdghxllyckwtfqjonsie +mbrnvapdghxlzycbwtfqfonsie +mbrbxapdghxlzyckttfqjonsie +mbnuvapdghxlzyxkwtmqjonsie +mbrfvapdghjlzickwtfqjonsie +mbhuvupdghxlzyxkwtfqjonsie +mbrcvapdghxluyckwtfqjznsie +mbruvapdghxlzyckwofqjoxsiz +mbrevapdghxloyckwtfqjonnie +mbruvipdghnlzyckwtfqjopsie +mbxxvaptghxlzyckwtfqjonsie +mbruvcpdghxlztckwtjqjonsie +mqruvlpdghxlzyckotfqjonsie +mbruvapdgqxlzyckwtfqjpvsie +mbruvapdgvxlzyjkwtfqjbnsie +mbruvapdghxlgyckwtfqcocsie +mbruvapdghxkwyckwtfqjoqsie +mbrgvavdghxlzyckwxfqjonsie +qbruqapdgvxlzyckwtfqjonsie +mbauvapdghxlzgckwtfqjunsie +mbruvapdgdxluyckwtfqjoosie +mbruvapdghxlzykkwtfqwobsie +mbruvapdghxlzhcnwtfqjonqie +mbruvapdghxlzycbhmfqjonsie +mbruvapdghxluyczwtfqjontie +mbruvapnghxlzyckwnfqjonbie +moruvapdghxlzcckwtfqponsie +mbruvapfgxxlzyckwtfqjunsie +mbruvapdghxlryckvtfejonsie +mbrzvapdghxlzvcbwtfqjonsie +mbruvapdgqxlzyckwcfqjonsce +abruvupdrhxlzyckwtfqjonsie +mbrubaptghxlzyckwtfqjondie +mgruvapdgpxlzyckwtfijonsie +mbruvapdghxczlckwtfujonsie +mbruvapdgmmlzyckwtfqjonsir +mbruvapdhhxltyckwtfdjonsie +mbruvapdghxlzyckwtfdjjnste +mbrdvzpdghxlcyckwtfqjonsie +mbruvapdghxlzyckwtnqbonsim +mbrovapdghxlzyckwtfpjousie +mymuvapdghxlzyjkwtfqjonsie +mbpuvapdghxlzyckwtfljcnsie +mbrxvapdghxlzyclwtfqjonpie +mbrueapdghxlzyckwtfqjopsia +mbruvapdghxlzycdwtfqjbfsie +tbruvavdghxlzyckwtmqjonsie +mbduvapdghxlzyckwrfqjrnsie +mkrsvapughxlzyckwtfqjonsie +mbruvapdghylzyckwtfqtolsie +mgruvapdglxldyckwtfqjonsie +mbrunapdghclzyckwtfqjonsiy +mbruvapdgrxlxyckwtfgjonsie +mbruvapdghxpzbckftfqjonsie +mbruvcpdghxyzyckotfqjonsie +mbruvapdghxlsyckwtfqcqnsie +mbruvapdghxlzzckwtfqjonskf +mbruvppdghxlzfckwtfqjgnsie +mbhuvapdghxlzytkwtfqjonoie +mbruvapdghxlzvrkwtfqjjnsie +mbmuvapdghxuzyckwtfqjonsze +mbruvapdghnlzycnwtfqjonsil +mbruvapdgholzyckitfqjonsia +mbruxapdghxlmyckwtfqbonsie +mbauvapdgholzyckwtfqjolsie +mbruvapdghxlzyckwtfqjotslq +dbrutapdghxlzyckwtfqjonsiv +mbruvapdzhxlyyckwtfbjonsie +mmruaapsghxlzyckwtfqjonsie +mbruvaldgqxqzyckwtfqjonsie +mbruvaodghxdzyjkwtfqjonsie +mbrcmatdghxlzyckwtfqjonsie +mbrqvapdgtxlzycewtfqjonsie +mjruvapdghzlzyckwtfqjonrie +mbruvapdghxopcckwtfqjonsie +mbruvapdghxszycwwtfqjoqsie mbruvapdgoxezyckwtjqjonsie \ No newline at end of file diff --git a/2018/2ndDay/challenge2/main.cpp b/2018/2ndDay/challenge2/main.cpp index 10884c1..ffaa4b5 100644 --- a/2018/2ndDay/challenge2/main.cpp +++ b/2018/2ndDay/challenge2/main.cpp @@ -1,50 +1,50 @@ -#include -#include -#include -#include - -std::string equalLetters(std::string fileName) { - std::fstream input(fileName); - std::string line; - std::string a; - std::string b; - std::string answer; - std::vector lines; - - while (!input.eof()) { - std::getline(input, line); - lines.push_back(line); - } - - for (size_t i = 0; i < lines.size(); ++i) { - int count = 0; - a = lines[i]; - - for (size_t j = i + 1; j < lines.size(); ++j) { - b = lines[j]; - count = 0; - - for (size_t k = 0; k < a.size(); ++k) { - if (a[k] != b[k]) - ++count; - if (count > 1) - break; - } - if (count == 1) - break; - } - if (count == 1) - break; - } - - for (size_t i = 0; i < a.size(); ++i) { - if (a[i] == b[i]) - answer += a[i]; - } - - return answer; -} - -int main(int argc, char** argv) { - std::cout << "Found: " << equalLetters("input.txt") << std::endl; -} +#include +#include +#include +#include + +std::string equalLetters(std::string fileName) { + std::fstream input(fileName); + std::string line; + std::string a; + std::string b; + std::string answer; + std::vector lines; + + while (!input.eof()) { + std::getline(input, line); + lines.push_back(line); + } + + for (size_t i = 0; i < lines.size(); ++i) { + int count = 0; + a = lines[i]; + + for (size_t j = i + 1; j < lines.size(); ++j) { + b = lines[j]; + count = 0; + + for (size_t k = 0; k < a.size(); ++k) { + if (a[k] != b[k]) + ++count; + if (count > 1) + break; + } + if (count == 1) + break; + } + if (count == 1) + break; + } + + for (size_t i = 0; i < a.size(); ++i) { + if (a[i] == b[i]) + answer += a[i]; + } + + return answer; +} + +int main(int argc, char** argv) { + std::cout << "Found: " << equalLetters("input.txt") << std::endl; +} diff --git a/2018/3rdDay/challenge1/Program.cs b/2018/3rdDay/challenge1/Program.cs index ec907d4..95fbb98 100644 --- a/2018/3rdDay/challenge1/Program.cs +++ b/2018/3rdDay/challenge1/Program.cs @@ -1,107 +1,107 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; - -namespace challenge1 { - class Program { - static string[] Lines {get; set;} - static List Claims {get; set;} - - static void Main(string[] args) { - Claims = new List(); - Console.WriteLine("Reading input.txt"); - Lines = File.ReadAllLines("./input.txt"); - foreach (string line in Lines) { - Claim current = new Claim(line); - Claims.Add(current); - current.Print(); - } - Fabric fabric = new Fabric(Claims); - Console.WriteLine("Found: " + fabric.CalculateOverlaps() + " overlaps"); - } - - public static void printArray(string[] arr) { - foreach (string str in arr) { - Console.WriteLine(str); - } - } - } - - class Claim { - public int ID {get; set;} - public int X {get; set;} - public int Y {get; set;} - public int W {get; set;} - public int H {get; set;} - public string Source {get; set;} - - public Claim(string source) { - this.Source = source; - ParseSource(); - } - - private void ParseSource() { - Console.WriteLine("Parsing: " + this.Source); - string[] source = this.Source.Split('#'); - string[] idAndRest = source[1].Split('@'); - this.ID = int.Parse(idAndRest[0]); - string[] fromSides = idAndRest[1].Split(','); - string[] afterColon = fromSides[1].Split(':'); - this.X = int.Parse(fromSides[0]); - this.Y = int.Parse(afterColon[0]); - string[] dimensions = afterColon[1].Split('x'); - this.W = int.Parse(dimensions[0]); - this.H = int.Parse(dimensions[1]); - } - - public void Print() { - Console.WriteLine("Claim ID: " + this.ID); - Console.WriteLine("X, Y: " + this.X + ',' + this.Y); - Console.WriteLine("Dimensions: " + this.W + 'x' + this.H); - Console.WriteLine("Parsed from source: " + this.Source); - Console.WriteLine(); - } - } - - class Fabric { - public List Claims; - - private int[,] Board; - - public Fabric(List claims) { - this.Claims = claims; - this.Board = new int[10000, 10000]; - - for (int i = 0; i < 10000; i++) { - for (int j = 0; j < 10000; j++) { - Board[i, j] = 0; - } - } - } - - public int CalculateOverlaps() { - int overlaps = 0; - - int i = 0; - foreach (Claim claim in this.Claims) { - Console.WriteLine("Processing claim ID: " + claim.ID); - - for (int x = claim.X; x < claim.X + claim.W; x++) { - for (int y = claim.Y; y < claim.Y + claim.H; y++) { - Board[x, y]++; - } - } - i++; - } - - for (i = 0; i < 10000; i++) { - for (int j = 0; j < 10000; j++) { - if (Board[i,j] > 1) overlaps++; - } - } - - return overlaps; - } - } -} +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; + +namespace challenge1 { + class Program { + static string[] Lines {get; set;} + static List Claims {get; set;} + + static void Main(string[] args) { + Claims = new List(); + Console.WriteLine("Reading input.txt"); + Lines = File.ReadAllLines("./input.txt"); + foreach (string line in Lines) { + Claim current = new Claim(line); + Claims.Add(current); + current.Print(); + } + Fabric fabric = new Fabric(Claims); + Console.WriteLine("Found: " + fabric.CalculateOverlaps() + " overlaps"); + } + + public static void printArray(string[] arr) { + foreach (string str in arr) { + Console.WriteLine(str); + } + } + } + + class Claim { + public int ID {get; set;} + public int X {get; set;} + public int Y {get; set;} + public int W {get; set;} + public int H {get; set;} + public string Source {get; set;} + + public Claim(string source) { + this.Source = source; + ParseSource(); + } + + private void ParseSource() { + Console.WriteLine("Parsing: " + this.Source); + string[] source = this.Source.Split('#'); + string[] idAndRest = source[1].Split('@'); + this.ID = int.Parse(idAndRest[0]); + string[] fromSides = idAndRest[1].Split(','); + string[] afterColon = fromSides[1].Split(':'); + this.X = int.Parse(fromSides[0]); + this.Y = int.Parse(afterColon[0]); + string[] dimensions = afterColon[1].Split('x'); + this.W = int.Parse(dimensions[0]); + this.H = int.Parse(dimensions[1]); + } + + public void Print() { + Console.WriteLine("Claim ID: " + this.ID); + Console.WriteLine("X, Y: " + this.X + ',' + this.Y); + Console.WriteLine("Dimensions: " + this.W + 'x' + this.H); + Console.WriteLine("Parsed from source: " + this.Source); + Console.WriteLine(); + } + } + + class Fabric { + public List Claims; + + private int[,] Board; + + public Fabric(List claims) { + this.Claims = claims; + this.Board = new int[10000, 10000]; + + for (int i = 0; i < 10000; i++) { + for (int j = 0; j < 10000; j++) { + Board[i, j] = 0; + } + } + } + + public int CalculateOverlaps() { + int overlaps = 0; + + int i = 0; + foreach (Claim claim in this.Claims) { + Console.WriteLine("Processing claim ID: " + claim.ID); + + for (int x = claim.X; x < claim.X + claim.W; x++) { + for (int y = claim.Y; y < claim.Y + claim.H; y++) { + Board[x, y]++; + } + } + i++; + } + + for (i = 0; i < 10000; i++) { + for (int j = 0; j < 10000; j++) { + if (Board[i,j] > 1) overlaps++; + } + } + + return overlaps; + } + } +} diff --git a/2018/3rdDay/challenge1/challenge.txt b/2018/3rdDay/challenge1/challenge.txt index c24e866..a9794a0 100644 --- a/2018/3rdDay/challenge1/challenge.txt +++ b/2018/3rdDay/challenge1/challenge.txt @@ -1,40 +1,40 @@ ---- Day 3: No Matter How You Slice It --- -The Elves managed to locate the chimney-squeeze prototype fabric for Santa's suit (thanks to someone who helpfully wrote its box IDs on the wall of the warehouse in the middle of the night). Unfortunately, anomalies are still affecting them - nobody can even agree on how to cut the fabric. - -The whole piece of fabric they're working on is a very large square - at least 1000 inches on each side. - -Each Elf has made a claim about which area of fabric would be ideal for Santa's suit. All claims have an ID and consist of a single rectangle with edges parallel to the edges of the fabric. Each claim's rectangle is defined as follows: - -The number of inches between the left edge of the fabric and the left edge of the rectangle. -The number of inches between the top edge of the fabric and the top edge of the rectangle. -The width of the rectangle in inches. -The height of the rectangle in inches. -A claim like #123 @ 3,2: 5x4 means that claim ID 123 specifies a rectangle 3 inches from the left edge, 2 inches from the top edge, 5 inches wide, and 4 inches tall. Visually, it claims the square inches of fabric represented by # (and ignores the square inches of fabric represented by .) in the diagram below: - -........... -........... -...#####... -...#####... -...#####... -...#####... -........... -........... -........... -The problem is that many of the claims overlap, causing two or more claims to cover part of the same areas. For example, consider the following claims: - -#1 @ 1,3: 4x4 -#2 @ 3,1: 4x4 -#3 @ 5,5: 2x2 -Visually, these claim the following areas: - -........ -...2222. -...2222. -.11XX22. -.11XX22. -.111133. -.111133. -........ -The four square inches marked with X are claimed by both 1 and 2. (Claim 3, while adjacent to the others, does not overlap either of them.) - +--- Day 3: No Matter How You Slice It --- +The Elves managed to locate the chimney-squeeze prototype fabric for Santa's suit (thanks to someone who helpfully wrote its box IDs on the wall of the warehouse in the middle of the night). Unfortunately, anomalies are still affecting them - nobody can even agree on how to cut the fabric. + +The whole piece of fabric they're working on is a very large square - at least 1000 inches on each side. + +Each Elf has made a claim about which area of fabric would be ideal for Santa's suit. All claims have an ID and consist of a single rectangle with edges parallel to the edges of the fabric. Each claim's rectangle is defined as follows: + +The number of inches between the left edge of the fabric and the left edge of the rectangle. +The number of inches between the top edge of the fabric and the top edge of the rectangle. +The width of the rectangle in inches. +The height of the rectangle in inches. +A claim like #123 @ 3,2: 5x4 means that claim ID 123 specifies a rectangle 3 inches from the left edge, 2 inches from the top edge, 5 inches wide, and 4 inches tall. Visually, it claims the square inches of fabric represented by # (and ignores the square inches of fabric represented by .) in the diagram below: + +........... +........... +...#####... +...#####... +...#####... +...#####... +........... +........... +........... +The problem is that many of the claims overlap, causing two or more claims to cover part of the same areas. For example, consider the following claims: + +#1 @ 1,3: 4x4 +#2 @ 3,1: 4x4 +#3 @ 5,5: 2x2 +Visually, these claim the following areas: + +........ +...2222. +...2222. +.11XX22. +.11XX22. +.111133. +.111133. +........ +The four square inches marked with X are claimed by both 1 and 2. (Claim 3, while adjacent to the others, does not overlap either of them.) + If the Elves all proceed with their own plans, none of them will have enough fabric. How many square inches of fabric are within two or more claims? \ No newline at end of file diff --git a/2018/3rdDay/challenge1/challenge1.csproj b/2018/3rdDay/challenge1/challenge1.csproj index 23df604..e5e0e16 100644 --- a/2018/3rdDay/challenge1/challenge1.csproj +++ b/2018/3rdDay/challenge1/challenge1.csproj @@ -1,8 +1,8 @@ - - - - Exe - netcoreapp2.1 - - - + + + + Exe + netcoreapp2.1 + + + diff --git a/2018/3rdDay/challenge1/input.txt b/2018/3rdDay/challenge1/input.txt index 0a0580f..df117e2 100644 --- a/2018/3rdDay/challenge1/input.txt +++ b/2018/3rdDay/challenge1/input.txt @@ -1,1283 +1,1283 @@ -#1 @ 179,662: 16x27 -#2 @ 609,961: 25x21 -#3 @ 73,376: 23x28 -#4 @ 599,405: 26x25 -#5 @ 28,933: 19x29 -#6 @ 441,852: 29x23 -#7 @ 512,396: 15x17 -#8 @ 702,415: 14x10 -#9 @ 730,587: 27x21 -#10 @ 252,715: 17x27 -#11 @ 541,822: 21x13 -#12 @ 901,802: 12x24 -#13 @ 759,349: 15x26 -#14 @ 862,839: 22x25 -#15 @ 862,576: 17x16 -#16 @ 265,967: 11x25 -#17 @ 124,444: 23x25 -#18 @ 971,141: 25x15 -#19 @ 864,246: 22x27 -#20 @ 841,34: 17x15 -#21 @ 173,462: 19x22 -#22 @ 122,22: 27x20 -#23 @ 327,178: 12x19 -#24 @ 576,663: 21x10 -#25 @ 410,958: 11x12 -#26 @ 676,145: 14x10 -#27 @ 177,676: 10x22 -#28 @ 663,60: 23x15 -#29 @ 686,352: 24x19 -#30 @ 68,618: 18x12 -#31 @ 20,643: 19x18 -#32 @ 683,128: 19x22 -#33 @ 88,45: 28x25 -#34 @ 442,736: 20x29 -#35 @ 824,825: 13x13 -#36 @ 668,253: 25x27 -#37 @ 254,404: 27x25 -#38 @ 712,260: 26x17 -#39 @ 588,470: 21x20 -#40 @ 114,148: 11x26 -#41 @ 242,409: 17x26 -#42 @ 342,481: 24x21 -#43 @ 104,187: 27x12 -#44 @ 440,919: 13x22 -#45 @ 177,312: 22x15 -#46 @ 249,925: 29x15 -#47 @ 376,750: 19x20 -#48 @ 157,760: 21x21 -#49 @ 760,833: 28x15 -#50 @ 955,909: 26x12 -#51 @ 941,896: 17x25 -#52 @ 154,33: 29x20 -#53 @ 236,275: 27x29 -#54 @ 848,800: 11x18 -#55 @ 950,130: 28x24 -#56 @ 351,564: 21x11 -#57 @ 32,70: 17x11 -#58 @ 215,219: 22x18 -#59 @ 816,714: 15x21 -#60 @ 738,879: 16x27 -#61 @ 218,896: 26x27 -#62 @ 953,363: 16x19 -#63 @ 836,508: 28x13 -#64 @ 839,14: 12x21 -#65 @ 831,683: 24x15 -#66 @ 809,698: 12x26 -#67 @ 887,296: 23x11 -#68 @ 770,771: 29x21 -#69 @ 383,762: 14x25 -#70 @ 542,962: 28x14 -#71 @ 236,286: 18x10 -#72 @ 517,363: 12x18 -#73 @ 171,753: 16x17 -#74 @ 272,910: 18x20 -#75 @ 658,202: 25x14 -#76 @ 534,906: 18x25 -#77 @ 468,342: 27x12 -#78 @ 426,350: 28x26 -#79 @ 277,968: 12x20 -#80 @ 390,877: 10x27 -#81 @ 859,603: 26x12 -#82 @ 491,937: 13x16 -#83 @ 19,883: 20x15 -#84 @ 47,400: 27x15 -#85 @ 627,191: 14x26 -#86 @ 164,326: 17x28 -#87 @ 768,216: 20x24 -#88 @ 947,765: 15x19 -#89 @ 917,142: 11x20 -#90 @ 351,87: 24x29 -#91 @ 872,451: 29x10 -#92 @ 749,900: 20x26 -#93 @ 935,30: 25x12 -#94 @ 221,943: 15x10 -#95 @ 344,602: 12x24 -#96 @ 677,578: 16x26 -#97 @ 452,606: 21x10 -#98 @ 2,722: 19x22 -#99 @ 310,605: 17x29 -#100 @ 262,390: 26x23 -#101 @ 640,499: 19x13 -#102 @ 852,924: 26x16 -#103 @ 309,81: 20x16 -#104 @ 108,918: 18x11 -#105 @ 249,160: 9x17 -#106 @ 26,62: 26x25 -#107 @ 407,587: 14x24 -#108 @ 956,98: 18x27 -#109 @ 944,459: 16x26 -#110 @ 209,699: 28x25 -#111 @ 710,856: 12x22 -#112 @ 744,288: 27x25 -#113 @ 489,344: 20x21 -#114 @ 438,488: 12x16 -#115 @ 884,95: 15x22 -#116 @ 60,617: 24x24 -#117 @ 957,191: 10x11 -#118 @ 315,527: 22x23 -#119 @ 199,117: 18x26 -#120 @ 255,642: 10x15 -#121 @ 957,962: 11x14 -#122 @ 193,131: 10x13 -#123 @ 2,931: 21x11 -#124 @ 36,961: 27x23 -#125 @ 863,38: 29x14 -#126 @ 31,731: 13x15 -#127 @ 357,741: 28x15 -#128 @ 209,354: 27x23 -#129 @ 524,8: 22x20 -#130 @ 302,247: 15x12 -#131 @ 76,857: 10x16 -#132 @ 531,502: 24x10 -#133 @ 559,962: 17x15 -#134 @ 233,710: 29x15 -#135 @ 762,70: 15x24 -#136 @ 934,186: 25x20 -#137 @ 808,252: 29x29 -#138 @ 550,694: 22x19 -#139 @ 265,368: 23x25 -#140 @ 640,637: 11x14 -#141 @ 736,484: 15x10 -#142 @ 946,571: 27x17 -#143 @ 332,174: 20x20 -#144 @ 797,775: 11x23 -#145 @ 684,63: 22x13 -#146 @ 932,36: 20x12 -#147 @ 375,882: 19x17 -#148 @ 656,227: 12x20 -#149 @ 455,223: 12x15 -#150 @ 732,619: 20x20 -#151 @ 292,615: 19x29 -#152 @ 615,0: 15x28 -#153 @ 463,174: 16x15 -#154 @ 322,456: 27x15 -#155 @ 352,224: 10x15 -#156 @ 966,673: 29x21 -#157 @ 527,42: 23x27 -#158 @ 632,775: 15x15 -#159 @ 871,805: 22x15 -#160 @ 667,240: 15x27 -#161 @ 607,880: 25x25 -#162 @ 447,44: 10x21 -#163 @ 445,126: 17x15 -#164 @ 844,933: 11x29 -#165 @ 471,423: 24x27 -#166 @ 715,867: 16x16 -#167 @ 778,279: 10x18 -#168 @ 490,630: 23x16 -#169 @ 687,301: 28x13 -#170 @ 476,432: 11x18 -#171 @ 123,794: 23x26 -#172 @ 738,256: 22x25 -#173 @ 336,60: 26x28 -#174 @ 698,766: 4x10 -#175 @ 511,10: 13x10 -#176 @ 580,702: 18x20 -#177 @ 218,620: 13x22 -#178 @ 476,488: 13x25 -#179 @ 154,617: 14x29 -#180 @ 620,563: 11x6 -#181 @ 168,433: 28x10 -#182 @ 60,685: 10x24 -#183 @ 880,680: 18x18 -#184 @ 859,616: 17x25 -#185 @ 114,80: 26x19 -#186 @ 236,868: 25x10 -#187 @ 135,13: 26x29 -#188 @ 810,677: 22x10 -#189 @ 938,932: 16x14 -#190 @ 427,434: 14x11 -#191 @ 83,731: 29x23 -#192 @ 960,148: 25x16 -#193 @ 577,669: 24x16 -#194 @ 67,267: 18x29 -#195 @ 603,928: 15x26 -#196 @ 881,39: 29x11 -#197 @ 963,957: 19x23 -#198 @ 891,868: 12x13 -#199 @ 799,34: 14x12 -#200 @ 529,785: 24x27 -#201 @ 596,936: 12x21 -#202 @ 832,289: 13x10 -#203 @ 664,232: 17x22 -#204 @ 171,345: 24x26 -#205 @ 283,521: 28x22 -#206 @ 702,469: 14x10 -#207 @ 490,531: 21x27 -#208 @ 411,388: 26x21 -#209 @ 120,780: 13x28 -#210 @ 711,391: 24x12 -#211 @ 347,848: 22x13 -#212 @ 956,507: 20x18 -#213 @ 844,696: 20x26 -#214 @ 550,230: 28x25 -#215 @ 71,625: 14x26 -#216 @ 701,305: 29x23 -#217 @ 629,488: 21x14 -#218 @ 966,362: 10x26 -#219 @ 802,763: 17x19 -#220 @ 631,858: 22x17 -#221 @ 175,656: 24x26 -#222 @ 822,185: 17x15 -#223 @ 110,390: 11x19 -#224 @ 328,13: 28x26 -#225 @ 479,262: 22x12 -#226 @ 178,796: 25x25 -#227 @ 23,782: 18x21 -#228 @ 597,578: 10x12 -#229 @ 692,683: 26x29 -#230 @ 268,713: 21x28 -#231 @ 112,197: 21x15 -#232 @ 619,282: 21x19 -#233 @ 765,56: 21x29 -#234 @ 96,163: 29x11 -#235 @ 229,927: 18x29 -#236 @ 588,775: 27x29 -#237 @ 498,293: 23x15 -#238 @ 311,166: 14x25 -#239 @ 134,371: 27x28 -#240 @ 450,173: 24x16 -#241 @ 700,398: 28x12 -#242 @ 216,282: 25x10 -#243 @ 886,817: 16x15 -#244 @ 291,967: 29x25 -#245 @ 406,283: 14x20 -#246 @ 601,779: 26x28 -#247 @ 767,213: 20x10 -#248 @ 802,36: 15x17 -#249 @ 264,361: 19x27 -#250 @ 565,236: 23x28 -#251 @ 260,394: 21x18 -#252 @ 506,427: 17x26 -#253 @ 479,946: 28x10 -#254 @ 463,505: 24x19 -#255 @ 42,314: 27x27 -#256 @ 901,709: 26x14 -#257 @ 716,194: 21x29 -#258 @ 404,285: 18x21 -#259 @ 838,243: 29x28 -#260 @ 276,510: 23x11 -#261 @ 66,605: 29x16 -#262 @ 225,3: 26x16 -#263 @ 451,355: 22x21 -#264 @ 423,41: 19x17 -#265 @ 942,912: 14x11 -#266 @ 915,613: 22x11 -#267 @ 316,786: 25x24 -#268 @ 640,185: 24x17 -#269 @ 4,564: 29x18 -#270 @ 535,912: 21x16 -#271 @ 95,633: 13x17 -#272 @ 517,170: 21x19 -#273 @ 857,812: 14x23 -#274 @ 682,515: 12x21 -#275 @ 615,847: 22x14 -#276 @ 547,47: 26x18 -#277 @ 461,552: 19x28 -#278 @ 866,29: 28x28 -#279 @ 725,878: 17x15 -#280 @ 604,454: 19x24 -#281 @ 529,452: 28x12 -#282 @ 731,633: 23x22 -#283 @ 505,447: 27x18 -#284 @ 75,694: 12x16 -#285 @ 212,909: 29x13 -#286 @ 96,630: 15x29 -#287 @ 168,34: 28x18 -#288 @ 935,481: 23x26 -#289 @ 892,235: 27x16 -#290 @ 942,945: 13x15 -#291 @ 759,221: 13x25 -#292 @ 604,339: 10x27 -#293 @ 699,313: 17x23 -#294 @ 319,716: 22x24 -#295 @ 718,219: 26x26 -#296 @ 11,917: 13x19 -#297 @ 666,632: 13x24 -#298 @ 85,791: 25x29 -#299 @ 179,204: 20x17 -#300 @ 292,234: 27x11 -#301 @ 527,488: 15x19 -#302 @ 651,158: 22x10 -#303 @ 727,98: 25x25 -#304 @ 452,9: 23x26 -#305 @ 520,386: 23x22 -#306 @ 755,196: 26x11 -#307 @ 321,107: 13x25 -#308 @ 654,563: 20x25 -#309 @ 188,228: 11x23 -#310 @ 416,355: 22x19 -#311 @ 679,567: 12x8 -#312 @ 319,282: 17x27 -#313 @ 276,620: 23x23 -#314 @ 50,242: 11x19 -#315 @ 759,918: 23x19 -#316 @ 599,84: 18x21 -#317 @ 675,230: 15x28 -#318 @ 96,480: 13x13 -#319 @ 386,254: 24x19 -#320 @ 682,199: 22x19 -#321 @ 14,819: 12x14 -#322 @ 231,451: 19x17 -#323 @ 36,396: 27x13 -#324 @ 459,917: 18x26 -#325 @ 149,874: 11x10 -#326 @ 182,325: 11x25 -#327 @ 142,279: 17x12 -#328 @ 954,276: 27x24 -#329 @ 512,263: 16x19 -#330 @ 446,841: 25x25 -#331 @ 79,247: 15x11 -#332 @ 378,881: 20x17 -#333 @ 958,324: 18x22 -#334 @ 583,501: 13x23 -#335 @ 966,133: 16x20 -#336 @ 236,395: 19x19 -#337 @ 588,910: 18x10 -#338 @ 35,406: 20x25 -#339 @ 326,404: 20x29 -#340 @ 293,761: 16x24 -#341 @ 420,371: 5x5 -#342 @ 694,764: 12x17 -#343 @ 617,15: 10x14 -#344 @ 859,915: 11x15 -#345 @ 522,430: 20x17 -#346 @ 727,180: 15x14 -#347 @ 208,679: 11x16 -#348 @ 523,670: 28x22 -#349 @ 512,436: 15x13 -#350 @ 170,11: 25x18 -#351 @ 353,588: 23x12 -#352 @ 201,605: 26x12 -#353 @ 561,681: 15x12 -#354 @ 500,357: 12x12 -#355 @ 813,438: 26x26 -#356 @ 759,853: 14x28 -#357 @ 152,737: 27x27 -#358 @ 646,721: 11x13 -#359 @ 588,446: 15x21 -#360 @ 713,927: 21x28 -#361 @ 189,43: 21x29 -#362 @ 655,722: 29x22 -#363 @ 614,184: 17x14 -#364 @ 465,10: 12x19 -#365 @ 493,612: 11x24 -#366 @ 594,442: 13x18 -#367 @ 392,893: 11x16 -#368 @ 77,740: 12x21 -#369 @ 628,138: 12x27 -#370 @ 173,500: 20x11 -#371 @ 363,587: 13x27 -#372 @ 852,276: 25x19 -#373 @ 410,949: 13x10 -#374 @ 359,948: 25x25 -#375 @ 546,677: 11x29 -#376 @ 854,582: 23x19 -#377 @ 761,145: 11x10 -#378 @ 300,888: 22x17 -#379 @ 284,791: 27x16 -#380 @ 758,255: 13x20 -#381 @ 453,16: 21x16 -#382 @ 525,183: 21x22 -#383 @ 114,307: 18x15 -#384 @ 556,225: 28x20 -#385 @ 463,19: 19x13 -#386 @ 601,579: 24x14 -#387 @ 314,870: 19x21 -#388 @ 541,438: 22x17 -#389 @ 704,543: 26x11 -#390 @ 420,537: 21x22 -#391 @ 728,211: 10x17 -#392 @ 232,822: 25x16 -#393 @ 482,339: 16x17 -#394 @ 460,129: 22x18 -#395 @ 223,181: 24x28 -#396 @ 270,740: 25x24 -#397 @ 220,22: 16x17 -#398 @ 416,414: 15x21 -#399 @ 391,524: 10x20 -#400 @ 448,282: 12x29 -#401 @ 247,862: 16x13 -#402 @ 967,527: 17x20 -#403 @ 279,637: 12x15 -#404 @ 792,166: 16x29 -#405 @ 597,902: 21x12 -#406 @ 375,729: 11x13 -#407 @ 404,395: 15x27 -#408 @ 852,581: 27x17 -#409 @ 97,859: 14x19 -#410 @ 867,477: 23x24 -#411 @ 419,139: 20x23 -#412 @ 395,956: 23x15 -#413 @ 498,388: 22x24 -#414 @ 880,814: 13x19 -#415 @ 845,417: 12x25 -#416 @ 498,357: 27x29 -#417 @ 366,739: 24x29 -#418 @ 86,66: 20x23 -#419 @ 619,871: 17x4 -#420 @ 896,449: 25x24 -#421 @ 414,64: 13x27 -#422 @ 308,77: 27x10 -#423 @ 105,927: 15x12 -#424 @ 213,110: 18x26 -#425 @ 912,820: 12x15 -#426 @ 755,643: 22x13 -#427 @ 850,256: 17x12 -#428 @ 581,456: 18x29 -#429 @ 881,461: 28x22 -#430 @ 204,903: 27x19 -#431 @ 12,578: 22x13 -#432 @ 69,762: 22x27 -#433 @ 140,879: 15x18 -#434 @ 548,924: 20x23 -#435 @ 256,293: 28x22 -#436 @ 583,438: 29x27 -#437 @ 31,936: 17x11 -#438 @ 53,289: 23x26 -#439 @ 753,871: 16x27 -#440 @ 64,856: 21x28 -#441 @ 832,962: 11x15 -#442 @ 305,969: 17x29 -#443 @ 562,103: 24x24 -#444 @ 243,231: 18x11 -#445 @ 210,19: 10x29 -#446 @ 62,702: 28x18 -#447 @ 167,127: 13x29 -#448 @ 751,334: 12x20 -#449 @ 404,236: 27x28 -#450 @ 869,107: 20x18 -#451 @ 167,687: 22x22 -#452 @ 79,449: 29x19 -#453 @ 821,288: 15x26 -#454 @ 235,926: 18x10 -#455 @ 902,705: 16x18 -#456 @ 777,189: 23x25 -#457 @ 560,141: 23x17 -#458 @ 711,900: 28x12 -#459 @ 650,864: 23x19 -#460 @ 965,91: 25x29 -#461 @ 366,589: 24x18 -#462 @ 262,423: 25x21 -#463 @ 775,176: 25x10 -#464 @ 634,899: 24x15 -#465 @ 330,489: 21x16 -#466 @ 711,668: 28x14 -#467 @ 283,699: 17x15 -#468 @ 12,741: 14x11 -#469 @ 10,532: 17x19 -#470 @ 763,148: 12x17 -#471 @ 630,884: 13x26 -#472 @ 39,381: 12x19 -#473 @ 313,382: 4x17 -#474 @ 617,862: 22x18 -#475 @ 113,120: 20x21 -#476 @ 913,322: 26x17 -#477 @ 197,33: 22x15 -#478 @ 760,220: 22x29 -#479 @ 395,195: 17x4 -#480 @ 25,469: 16x19 -#481 @ 289,620: 13x20 -#482 @ 41,395: 15x21 -#483 @ 50,148: 24x22 -#484 @ 787,117: 29x24 -#485 @ 456,623: 28x15 -#486 @ 938,37: 19x10 -#487 @ 475,340: 16x22 -#488 @ 221,808: 28x22 -#489 @ 387,452: 17x19 -#490 @ 835,789: 21x23 -#491 @ 153,456: 29x20 -#492 @ 462,344: 19x13 -#493 @ 927,8: 16x27 -#494 @ 172,734: 19x15 -#495 @ 562,52: 27x15 -#496 @ 781,826: 19x26 -#497 @ 204,123: 17x13 -#498 @ 839,514: 26x25 -#499 @ 324,417: 29x11 -#500 @ 746,828: 19x11 -#501 @ 737,580: 18x14 -#502 @ 802,22: 28x20 -#503 @ 974,392: 19x17 -#504 @ 426,55: 16x14 -#505 @ 845,795: 19x13 -#506 @ 261,102: 10x27 -#507 @ 415,400: 14x22 -#508 @ 62,0: 19x29 -#509 @ 643,429: 28x10 -#510 @ 713,121: 18x19 -#511 @ 829,23: 17x16 -#512 @ 268,80: 10x11 -#513 @ 826,654: 28x29 -#514 @ 73,96: 19x18 -#515 @ 696,417: 22x13 -#516 @ 253,437: 26x29 -#517 @ 842,523: 16x10 -#518 @ 274,960: 28x10 -#519 @ 410,317: 16x22 -#520 @ 334,981: 26x18 -#521 @ 183,480: 25x29 -#522 @ 794,659: 26x26 -#523 @ 416,188: 25x10 -#524 @ 735,400: 17x21 -#525 @ 836,779: 15x26 -#526 @ 913,298: 12x15 -#527 @ 28,507: 10x18 -#528 @ 596,697: 20x20 -#529 @ 322,163: 12x20 -#530 @ 626,94: 21x10 -#531 @ 39,391: 14x10 -#532 @ 894,108: 11x29 -#533 @ 384,173: 25x18 -#534 @ 557,974: 11x23 -#535 @ 780,805: 10x11 -#536 @ 448,734: 27x14 -#537 @ 68,349: 27x17 -#538 @ 215,700: 15x13 -#539 @ 921,309: 26x16 -#540 @ 312,665: 15x3 -#541 @ 301,946: 16x22 -#542 @ 798,747: 11x22 -#543 @ 850,675: 28x28 -#544 @ 438,425: 11x18 -#545 @ 477,537: 16x25 -#546 @ 869,878: 22x22 -#547 @ 830,106: 26x15 -#548 @ 16,880: 23x28 -#549 @ 89,598: 25x10 -#550 @ 911,746: 25x20 -#551 @ 132,268: 27x14 -#552 @ 107,54: 22x16 -#553 @ 617,920: 17x25 -#554 @ 888,796: 17x17 -#555 @ 911,21: 21x13 -#556 @ 901,126: 12x28 -#557 @ 501,378: 25x26 -#558 @ 231,749: 28x10 -#559 @ 534,889: 12x24 -#560 @ 388,923: 17x14 -#561 @ 113,84: 15x28 -#562 @ 924,424: 19x27 -#563 @ 669,933: 29x22 -#564 @ 317,796: 22x24 -#565 @ 149,894: 18x11 -#566 @ 815,914: 21x17 -#567 @ 686,540: 28x10 -#568 @ 531,331: 20x24 -#569 @ 459,576: 15x28 -#570 @ 127,520: 15x24 -#571 @ 466,572: 13x26 -#572 @ 935,555: 18x19 -#573 @ 461,946: 12x20 -#574 @ 918,162: 11x12 -#575 @ 279,305: 21x15 -#576 @ 650,714: 15x13 -#577 @ 486,776: 12x27 -#578 @ 81,253: 20x17 -#579 @ 906,18: 22x14 -#580 @ 306,26: 16x16 -#581 @ 184,724: 17x28 -#582 @ 751,225: 15x10 -#583 @ 26,783: 21x11 -#584 @ 103,41: 21x26 -#585 @ 283,5: 12x24 -#586 @ 733,375: 13x27 -#587 @ 193,973: 11x21 -#588 @ 47,306: 19x14 -#589 @ 964,124: 11x19 -#590 @ 856,321: 19x12 -#591 @ 437,655: 29x14 -#592 @ 368,437: 25x24 -#593 @ 537,154: 28x17 -#594 @ 574,451: 11x13 -#595 @ 963,342: 21x26 -#596 @ 250,492: 22x18 -#597 @ 962,740: 22x14 -#598 @ 697,784: 29x22 -#599 @ 153,323: 23x23 -#600 @ 534,713: 13x12 -#601 @ 75,73: 22x18 -#602 @ 166,755: 15x12 -#603 @ 273,622: 22x12 -#604 @ 660,432: 10x24 -#605 @ 119,965: 25x25 -#606 @ 751,294: 28x14 -#607 @ 676,358: 13x11 -#608 @ 204,588: 17x29 -#609 @ 792,828: 21x14 -#610 @ 163,141: 27x12 -#611 @ 159,33: 22x19 -#612 @ 158,364: 13x15 -#613 @ 711,929: 16x14 -#614 @ 811,654: 18x29 -#615 @ 903,828: 24x20 -#616 @ 323,111: 23x26 -#617 @ 891,258: 28x28 -#618 @ 551,826: 25x12 -#619 @ 660,935: 29x19 -#620 @ 41,27: 28x19 -#621 @ 590,491: 26x24 -#622 @ 174,31: 10x25 -#623 @ 563,817: 21x25 -#624 @ 961,746: 13x27 -#625 @ 599,403: 13x11 -#626 @ 852,661: 22x27 -#627 @ 84,473: 18x19 -#628 @ 580,98: 28x27 -#629 @ 138,506: 28x15 -#630 @ 981,544: 16x26 -#631 @ 418,908: 23x24 -#632 @ 371,926: 22x25 -#633 @ 701,291: 11x20 -#634 @ 66,889: 28x25 -#635 @ 641,689: 14x26 -#636 @ 177,960: 10x16 -#637 @ 60,39: 20x18 -#638 @ 378,445: 14x25 -#639 @ 113,794: 17x16 -#640 @ 197,627: 22x16 -#641 @ 324,530: 12x25 -#642 @ 8,206: 18x29 -#643 @ 359,893: 23x15 -#644 @ 795,198: 19x17 -#645 @ 239,900: 12x20 -#646 @ 504,343: 19x10 -#647 @ 708,677: 29x10 -#648 @ 63,697: 14x12 -#649 @ 403,203: 25x18 -#650 @ 305,183: 16x18 -#651 @ 609,447: 20x22 -#652 @ 508,394: 16x29 -#653 @ 178,144: 29x27 -#654 @ 870,490: 23x19 -#655 @ 130,855: 27x14 -#656 @ 333,563: 25x14 -#657 @ 862,252: 18x16 -#658 @ 40,384: 20x29 -#659 @ 639,299: 13x10 -#660 @ 869,856: 12x23 -#661 @ 35,495: 13x28 -#662 @ 545,322: 16x26 -#663 @ 671,566: 11x12 -#664 @ 342,10: 10x17 -#665 @ 932,940: 21x14 -#666 @ 726,480: 11x11 -#667 @ 249,632: 17x21 -#668 @ 939,830: 11x14 -#669 @ 812,241: 19x25 -#670 @ 739,641: 15x21 -#671 @ 307,873: 21x25 -#672 @ 845,687: 13x11 -#673 @ 953,676: 26x17 -#674 @ 137,960: 26x13 -#675 @ 853,498: 29x13 -#676 @ 396,599: 17x17 -#677 @ 431,839: 27x27 -#678 @ 745,290: 23x16 -#679 @ 336,849: 12x23 -#680 @ 852,492: 28x15 -#681 @ 467,781: 25x23 -#682 @ 525,668: 18x15 -#683 @ 941,189: 25x24 -#684 @ 130,323: 17x26 -#685 @ 410,612: 12x20 -#686 @ 967,499: 13x23 -#687 @ 947,263: 16x22 -#688 @ 158,434: 13x13 -#689 @ 920,298: 13x15 -#690 @ 361,415: 16x21 -#691 @ 302,600: 21x20 -#692 @ 65,356: 20x24 -#693 @ 855,427: 13x12 -#694 @ 877,366: 10x10 -#695 @ 138,415: 20x14 -#696 @ 818,653: 27x12 -#697 @ 829,540: 15x29 -#698 @ 636,121: 19x28 -#699 @ 324,960: 16x23 -#700 @ 680,614: 10x11 -#701 @ 380,819: 21x21 -#702 @ 873,107: 11x15 -#703 @ 42,644: 11x17 -#704 @ 62,860: 17x21 -#705 @ 728,704: 27x27 -#706 @ 604,488: 17x25 -#707 @ 418,252: 28x14 -#708 @ 715,408: 28x17 -#709 @ 747,225: 21x13 -#710 @ 124,787: 18x18 -#711 @ 394,376: 29x18 -#712 @ 182,552: 13x16 -#713 @ 129,424: 19x23 -#714 @ 852,526: 18x12 -#715 @ 849,634: 21x19 -#716 @ 220,22: 14x21 -#717 @ 327,870: 18x15 -#718 @ 627,170: 10x13 -#719 @ 108,768: 17x22 -#720 @ 870,303: 11x28 -#721 @ 616,917: 19x18 -#722 @ 118,316: 10x11 -#723 @ 476,355: 12x13 -#724 @ 235,946: 23x12 -#725 @ 310,723: 24x21 -#726 @ 28,483: 14x28 -#727 @ 746,202: 26x12 -#728 @ 736,404: 19x28 -#729 @ 973,143: 21x26 -#730 @ 226,9: 18x24 -#731 @ 717,746: 29x26 -#732 @ 793,668: 28x19 -#733 @ 446,177: 11x25 -#734 @ 86,243: 27x11 -#735 @ 73,13: 15x25 -#736 @ 225,706: 13x13 -#737 @ 852,950: 25x10 -#738 @ 502,427: 13x15 -#739 @ 950,504: 26x17 -#740 @ 761,290: 21x24 -#741 @ 90,378: 28x29 -#742 @ 431,457: 27x13 -#743 @ 196,666: 15x29 -#744 @ 439,105: 10x29 -#745 @ 788,261: 28x10 -#746 @ 947,904: 13x12 -#747 @ 328,973: 17x25 -#748 @ 255,758: 22x26 -#749 @ 320,426: 21x21 -#750 @ 735,258: 16x24 -#751 @ 883,333: 21x25 -#752 @ 5,510: 10x23 -#753 @ 389,972: 20x14 -#754 @ 671,937: 18x10 -#755 @ 728,342: 20x18 -#756 @ 247,617: 26x13 -#757 @ 301,241: 25x19 -#758 @ 971,653: 18x25 -#759 @ 807,30: 25x14 -#760 @ 318,525: 14x12 -#761 @ 640,618: 26x24 -#762 @ 788,253: 25x26 -#763 @ 393,192: 23x12 -#764 @ 522,920: 13x26 -#765 @ 232,204: 14x18 -#766 @ 953,862: 22x25 -#767 @ 41,239: 22x18 -#768 @ 760,535: 11x25 -#769 @ 84,868: 28x26 -#770 @ 920,703: 19x26 -#771 @ 678,544: 27x17 -#772 @ 814,591: 18x11 -#773 @ 15,181: 18x10 -#774 @ 725,661: 22x11 -#775 @ 241,691: 18x17 -#776 @ 84,81: 14x29 -#777 @ 909,818: 14x23 -#778 @ 357,478: 27x25 -#779 @ 537,878: 24x15 -#780 @ 812,832: 16x18 -#781 @ 528,394: 24x29 -#782 @ 411,603: 15x12 -#783 @ 94,727: 10x16 -#784 @ 968,146: 24x27 -#785 @ 755,195: 22x11 -#786 @ 948,802: 21x13 -#787 @ 509,266: 10x28 -#788 @ 626,463: 21x19 -#789 @ 766,203: 19x22 -#790 @ 450,28: 12x24 -#791 @ 290,589: 25x12 -#792 @ 294,195: 22x28 -#793 @ 481,949: 22x20 -#794 @ 732,708: 25x13 -#795 @ 292,706: 17x20 -#796 @ 502,6: 13x10 -#797 @ 119,382: 29x23 -#798 @ 300,953: 16x22 -#799 @ 978,231: 18x16 -#800 @ 119,409: 23x12 -#801 @ 390,634: 27x13 -#802 @ 958,124: 19x21 -#803 @ 423,437: 27x13 -#804 @ 394,299: 27x19 -#805 @ 973,910: 24x10 -#806 @ 462,133: 29x11 -#807 @ 529,750: 17x15 -#808 @ 80,744: 12x17 -#809 @ 56,99: 19x17 -#810 @ 926,721: 12x28 -#811 @ 916,569: 27x15 -#812 @ 723,376: 13x27 -#813 @ 852,824: 26x23 -#814 @ 953,944: 17x10 -#815 @ 786,937: 28x17 -#816 @ 188,705: 17x24 -#817 @ 543,456: 13x18 -#818 @ 676,918: 20x10 -#819 @ 97,706: 24x29 -#820 @ 722,656: 29x18 -#821 @ 182,328: 24x15 -#822 @ 490,397: 28x20 -#823 @ 247,217: 19x20 -#824 @ 217,592: 12x21 -#825 @ 452,201: 14x25 -#826 @ 348,612: 11x26 -#827 @ 652,935: 22x21 -#828 @ 650,925: 29x21 -#829 @ 495,247: 15x29 -#830 @ 594,561: 20x15 -#831 @ 220,460: 29x25 -#832 @ 642,117: 12x20 -#833 @ 235,533: 24x13 -#834 @ 285,755: 14x11 -#835 @ 739,473: 23x21 -#836 @ 268,387: 20x16 -#837 @ 459,275: 28x10 -#838 @ 493,572: 13x21 -#839 @ 320,720: 18x20 -#840 @ 168,757: 5x6 -#841 @ 496,368: 29x18 -#842 @ 419,45: 15x22 -#843 @ 749,524: 23x19 -#844 @ 413,68: 25x19 -#845 @ 250,698: 16x27 -#846 @ 101,697: 26x13 -#847 @ 968,332: 11x19 -#848 @ 953,137: 19x11 -#849 @ 134,396: 27x19 -#850 @ 891,465: 13x28 -#851 @ 40,931: 24x18 -#852 @ 170,775: 25x10 -#853 @ 187,26: 18x15 -#854 @ 677,28: 19x17 -#855 @ 752,274: 22x16 -#856 @ 217,376: 15x17 -#857 @ 379,249: 15x28 -#858 @ 308,661: 25x16 -#859 @ 514,704: 28x16 -#860 @ 281,235: 26x23 -#861 @ 430,650: 15x28 -#862 @ 784,125: 26x25 -#863 @ 212,123: 19x14 -#864 @ 946,191: 15x8 -#865 @ 405,399: 21x27 -#866 @ 443,484: 19x16 -#867 @ 769,626: 17x25 -#868 @ 119,786: 29x19 -#869 @ 890,20: 26x28 -#870 @ 12,161: 11x24 -#871 @ 957,869: 11x12 -#872 @ 332,736: 28x15 -#873 @ 178,967: 27x10 -#874 @ 323,441: 23x10 -#875 @ 229,436: 28x16 -#876 @ 734,578: 23x17 -#877 @ 433,614: 25x27 -#878 @ 30,160: 28x18 -#879 @ 217,279: 26x21 -#880 @ 621,130: 27x15 -#881 @ 465,601: 26x28 -#882 @ 231,580: 25x11 -#883 @ 300,512: 25x23 -#884 @ 422,258: 22x19 -#885 @ 308,530: 15x13 -#886 @ 164,202: 10x12 -#887 @ 412,181: 18x21 -#888 @ 121,766: 25x18 -#889 @ 177,945: 14x16 -#890 @ 30,162: 13x26 -#891 @ 437,565: 23x27 -#892 @ 454,280: 26x27 -#893 @ 379,526: 23x12 -#894 @ 834,707: 13x5 -#895 @ 859,357: 24x28 -#896 @ 891,303: 16x14 -#897 @ 385,116: 28x20 -#898 @ 53,12: 24x22 -#899 @ 428,979: 24x20 -#900 @ 916,602: 28x17 -#901 @ 19,739: 16x21 -#902 @ 871,32: 18x22 -#903 @ 207,110: 12x16 -#904 @ 932,15: 26x19 -#905 @ 691,232: 11x18 -#906 @ 965,799: 20x20 -#907 @ 241,526: 24x23 -#908 @ 931,915: 18x14 -#909 @ 662,584: 24x14 -#910 @ 30,148: 10x17 -#911 @ 50,466: 24x29 -#912 @ 265,504: 22x10 -#913 @ 59,857: 28x24 -#914 @ 170,780: 18x27 -#915 @ 436,51: 27x12 -#916 @ 921,139: 16x17 -#917 @ 532,377: 16x23 -#918 @ 237,188: 20x27 -#919 @ 672,653: 11x20 -#920 @ 333,546: 13x18 -#921 @ 830,191: 25x27 -#922 @ 745,644: 24x23 -#923 @ 877,371: 17x28 -#924 @ 926,426: 12x19 -#925 @ 731,977: 13x21 -#926 @ 12,122: 14x14 -#927 @ 65,896: 17x28 -#928 @ 126,609: 29x13 -#929 @ 557,244: 24x22 -#930 @ 80,21: 14x24 -#931 @ 725,184: 18x28 -#932 @ 654,181: 18x12 -#933 @ 439,283: 14x21 -#934 @ 974,95: 26x15 -#935 @ 235,9: 10x17 -#936 @ 306,422: 24x21 -#937 @ 383,952: 29x10 -#938 @ 738,201: 23x15 -#939 @ 254,624: 26x19 -#940 @ 421,672: 17x14 -#941 @ 221,751: 12x28 -#942 @ 730,768: 13x18 -#943 @ 342,13: 17x18 -#944 @ 594,639: 24x17 -#945 @ 127,323: 16x12 -#946 @ 861,701: 13x10 -#947 @ 696,541: 28x24 -#948 @ 804,363: 12x25 -#949 @ 958,296: 29x13 -#950 @ 126,868: 16x20 -#951 @ 916,483: 26x15 -#952 @ 318,52: 19x22 -#953 @ 240,938: 18x11 -#954 @ 849,275: 16x11 -#955 @ 712,412: 27x26 -#956 @ 913,613: 14x15 -#957 @ 756,476: 20x18 -#958 @ 656,906: 14x11 -#959 @ 461,633: 12x26 -#960 @ 398,208: 19x12 -#961 @ 490,333: 14x14 -#962 @ 816,658: 16x27 -#963 @ 579,562: 17x19 -#964 @ 961,552: 16x29 -#965 @ 393,947: 27x19 -#966 @ 68,464: 18x13 -#967 @ 318,537: 21x13 -#968 @ 904,171: 28x13 -#969 @ 629,974: 23x22 -#970 @ 415,366: 15x19 -#971 @ 401,976: 26x13 -#972 @ 18,44: 26x12 -#973 @ 18,804: 27x26 -#974 @ 134,446: 25x22 -#975 @ 158,464: 19x13 -#976 @ 623,437: 9x3 -#977 @ 376,181: 19x15 -#978 @ 738,397: 26x27 -#979 @ 338,207: 20x23 -#980 @ 218,403: 27x17 -#981 @ 530,937: 27x10 -#982 @ 134,958: 11x19 -#983 @ 675,514: 13x17 -#984 @ 891,383: 10x27 -#985 @ 935,748: 15x11 -#986 @ 943,956: 25x22 -#987 @ 18,649: 11x14 -#988 @ 740,243: 21x10 -#989 @ 404,309: 14x22 -#990 @ 134,19: 13x19 -#991 @ 406,381: 14x23 -#992 @ 428,395: 18x13 -#993 @ 121,971: 18x15 -#994 @ 62,794: 25x17 -#995 @ 134,403: 20x13 -#996 @ 347,567: 20x29 -#997 @ 615,358: 3x18 -#998 @ 852,28: 15x16 -#999 @ 259,379: 27x24 -#1000 @ 268,617: 20x20 -#1001 @ 956,657: 20x22 -#1002 @ 924,876: 26x18 -#1003 @ 748,411: 12x14 -#1004 @ 882,249: 29x10 -#1005 @ 979,25: 21x17 -#1006 @ 559,126: 25x28 -#1007 @ 569,712: 28x13 -#1008 @ 623,781: 25x16 -#1009 @ 422,607: 25x10 -#1010 @ 613,904: 11x26 -#1011 @ 128,411: 16x17 -#1012 @ 9,195: 22x12 -#1013 @ 83,362: 14x23 -#1014 @ 617,149: 26x18 -#1015 @ 382,436: 12x21 -#1016 @ 613,855: 23x16 -#1017 @ 956,222: 24x17 -#1018 @ 400,977: 12x15 -#1019 @ 181,333: 18x17 -#1020 @ 610,174: 25x14 -#1021 @ 825,26: 13x24 -#1022 @ 296,778: 26x14 -#1023 @ 465,135: 24x16 -#1024 @ 638,807: 10x14 -#1025 @ 547,697: 19x15 -#1026 @ 103,663: 15x21 -#1027 @ 71,113: 20x28 -#1028 @ 325,498: 27x28 -#1029 @ 525,808: 23x19 -#1030 @ 828,949: 15x27 -#1031 @ 46,699: 11x18 -#1032 @ 676,396: 29x29 -#1033 @ 552,889: 25x27 -#1034 @ 943,865: 15x22 -#1035 @ 480,310: 27x20 -#1036 @ 714,270: 29x17 -#1037 @ 647,711: 18x15 -#1038 @ 590,431: 24x16 -#1039 @ 675,554: 20x26 -#1040 @ 287,13: 17x20 -#1041 @ 886,310: 16x28 -#1042 @ 219,353: 15x22 -#1043 @ 215,12: 14x17 -#1044 @ 307,541: 29x22 -#1045 @ 151,734: 22x22 -#1046 @ 517,785: 14x24 -#1047 @ 617,89: 15x26 -#1048 @ 726,978: 13x22 -#1049 @ 404,546: 25x29 -#1050 @ 395,372: 23x15 -#1051 @ 249,583: 21x21 -#1052 @ 941,455: 23x15 -#1053 @ 801,651: 19x11 -#1054 @ 186,120: 10x22 -#1055 @ 562,177: 11x10 -#1056 @ 504,441: 14x29 -#1057 @ 401,274: 11x16 -#1058 @ 69,463: 24x28 -#1059 @ 409,955: 20x27 -#1060 @ 856,263: 26x20 -#1061 @ 747,821: 23x11 -#1062 @ 243,158: 20x22 -#1063 @ 694,957: 27x10 -#1064 @ 370,666: 29x23 -#1065 @ 74,640: 14x24 -#1066 @ 330,223: 11x21 -#1067 @ 93,659: 27x10 -#1068 @ 916,571: 20x24 -#1069 @ 681,208: 10x26 -#1070 @ 62,125: 27x28 -#1071 @ 163,527: 14x24 -#1072 @ 353,71: 23x22 -#1073 @ 938,1: 12x27 -#1074 @ 561,956: 20x26 -#1075 @ 850,491: 29x23 -#1076 @ 762,231: 16x28 -#1077 @ 391,96: 13x24 -#1078 @ 359,435: 14x17 -#1079 @ 150,326: 15x20 -#1080 @ 615,695: 29x17 -#1081 @ 477,123: 24x14 -#1082 @ 851,99: 12x26 -#1083 @ 328,627: 22x29 -#1084 @ 925,616: 14x23 -#1085 @ 59,897: 23x19 -#1086 @ 152,379: 23x15 -#1087 @ 255,415: 19x22 -#1088 @ 921,476: 19x24 -#1089 @ 946,215: 23x16 -#1090 @ 384,725: 23x11 -#1091 @ 612,353: 18x29 -#1092 @ 443,193: 22x20 -#1093 @ 41,141: 18x10 -#1094 @ 288,10: 24x19 -#1095 @ 623,908: 11x20 -#1096 @ 424,159: 27x19 -#1097 @ 896,878: 16x29 -#1098 @ 466,334: 27x18 -#1099 @ 589,755: 23x25 -#1100 @ 341,592: 13x27 -#1101 @ 220,387: 16x12 -#1102 @ 958,510: 15x9 -#1103 @ 252,435: 11x23 -#1104 @ 143,853: 15x10 -#1105 @ 841,205: 14x29 -#1106 @ 439,456: 11x19 -#1107 @ 937,828: 18x21 -#1108 @ 725,650: 24x26 -#1109 @ 851,222: 19x26 -#1110 @ 248,423: 5x4 -#1111 @ 740,325: 10x23 -#1112 @ 474,960: 20x22 -#1113 @ 943,946: 11x26 -#1114 @ 590,580: 18x25 -#1115 @ 472,370: 19x17 -#1116 @ 804,427: 29x16 -#1117 @ 679,42: 16x14 -#1118 @ 318,272: 12x28 -#1119 @ 372,878: 10x12 -#1120 @ 685,223: 16x26 -#1121 @ 853,19: 23x12 -#1122 @ 532,63: 27x18 -#1123 @ 456,320: 28x19 -#1124 @ 888,828: 25x24 -#1125 @ 348,461: 19x25 -#1126 @ 873,395: 15x13 -#1127 @ 705,451: 27x28 -#1128 @ 730,589: 11x26 -#1129 @ 667,727: 20x24 -#1130 @ 101,130: 24x23 -#1131 @ 563,688: 28x21 -#1132 @ 5,143: 26x19 -#1133 @ 522,671: 19x23 -#1134 @ 481,350: 19x23 -#1135 @ 4,125: 25x18 -#1136 @ 118,943: 26x24 -#1137 @ 371,834: 20x26 -#1138 @ 523,751: 22x10 -#1139 @ 92,181: 18x16 -#1140 @ 904,145: 20x17 -#1141 @ 280,513: 25x28 -#1142 @ 43,61: 17x19 -#1143 @ 602,643: 12x9 -#1144 @ 499,293: 12x10 -#1145 @ 155,345: 28x25 -#1146 @ 572,503: 17x21 -#1147 @ 537,595: 28x12 -#1148 @ 256,841: 18x25 -#1149 @ 621,431: 16x14 -#1150 @ 657,258: 23x12 -#1151 @ 305,436: 24x18 -#1152 @ 907,820: 12x15 -#1153 @ 65,744: 26x23 -#1154 @ 230,861: 18x17 -#1155 @ 333,12: 23x24 -#1156 @ 248,418: 23x27 -#1157 @ 469,958: 19x12 -#1158 @ 35,931: 11x14 -#1159 @ 288,563: 10x29 -#1160 @ 43,378: 14x11 -#1161 @ 88,739: 12x25 -#1162 @ 804,900: 21x29 -#1163 @ 381,76: 22x24 -#1164 @ 30,502: 16x14 -#1165 @ 527,603: 12x14 -#1166 @ 956,209: 15x19 -#1167 @ 960,546: 29x14 -#1168 @ 188,744: 10x19 -#1169 @ 175,744: 12x29 -#1170 @ 133,778: 22x21 -#1171 @ 174,205: 14x20 -#1172 @ 690,959: 21x12 -#1173 @ 619,491: 13x22 -#1174 @ 813,594: 18x12 -#1175 @ 876,607: 29x13 -#1176 @ 900,6: 19x18 -#1177 @ 967,721: 13x25 -#1178 @ 189,232: 19x26 -#1179 @ 827,553: 24x18 -#1180 @ 402,245: 28x17 -#1181 @ 162,896: 14x17 -#1182 @ 914,1: 22x27 -#1183 @ 208,134: 22x19 -#1184 @ 526,331: 29x22 -#1185 @ 145,202: 22x13 -#1186 @ 409,861: 25x13 -#1187 @ 801,730: 28x18 -#1188 @ 624,487: 20x15 -#1189 @ 393,687: 15x29 -#1190 @ 279,958: 15x29 -#1191 @ 653,395: 26x27 -#1192 @ 179,26: 10x19 -#1193 @ 260,76: 29x25 -#1194 @ 859,406: 18x10 -#1195 @ 296,932: 21x23 -#1196 @ 301,974: 16x26 -#1197 @ 727,757: 29x10 -#1198 @ 657,397: 17x20 -#1199 @ 442,937: 18x26 -#1200 @ 29,508: 19x15 -#1201 @ 636,245: 24x12 -#1202 @ 960,402: 28x12 -#1203 @ 139,256: 17x29 -#1204 @ 168,117: 23x15 -#1205 @ 770,785: 27x29 -#1206 @ 752,276: 21x21 -#1207 @ 883,889: 13x13 -#1208 @ 62,918: 21x10 -#1209 @ 163,517: 17x12 -#1210 @ 470,613: 19x11 -#1211 @ 451,661: 26x29 -#1212 @ 211,38: 19x13 -#1213 @ 539,439: 19x28 -#1214 @ 339,229: 23x21 -#1215 @ 591,542: 26x25 -#1216 @ 41,643: 29x21 -#1217 @ 806,823: 14x19 -#1218 @ 628,245: 11x18 -#1219 @ 378,619: 20x19 -#1220 @ 250,444: 14x22 -#1221 @ 713,891: 17x12 -#1222 @ 144,430: 27x21 -#1223 @ 125,200: 27x29 -#1224 @ 525,664: 15x22 -#1225 @ 369,485: 23x27 -#1226 @ 868,564: 29x20 -#1227 @ 642,700: 11x12 -#1228 @ 951,6: 14x25 -#1229 @ 532,331: 24x13 -#1230 @ 937,480: 15x12 -#1231 @ 81,65: 27x25 -#1232 @ 153,263: 11x26 -#1233 @ 970,364: 14x19 -#1234 @ 143,454: 26x27 -#1235 @ 495,574: 7x15 -#1236 @ 850,209: 20x17 -#1237 @ 126,965: 23x29 -#1238 @ 870,675: 23x28 -#1239 @ 308,376: 14x28 -#1240 @ 578,755: 14x24 -#1241 @ 844,481: 23x22 -#1242 @ 734,769: 25x16 -#1243 @ 723,219: 22x27 -#1244 @ 159,695: 23x18 -#1245 @ 754,285: 26x22 -#1246 @ 345,974: 26x23 -#1247 @ 29,69: 27x12 -#1248 @ 181,784: 15x12 -#1249 @ 682,616: 5x6 -#1250 @ 208,28: 27x28 -#1251 @ 665,234: 18x23 -#1252 @ 961,288: 11x22 -#1253 @ 363,57: 19x21 -#1254 @ 662,137: 25x24 -#1255 @ 7,41: 21x15 -#1256 @ 693,784: 12x28 -#1257 @ 186,543: 29x13 -#1258 @ 596,354: 13x10 -#1259 @ 824,705: 28x16 -#1260 @ 468,614: 25x20 -#1261 @ 542,10: 28x18 -#1262 @ 231,942: 18x29 -#1263 @ 979,39: 12x13 -#1264 @ 345,77: 16x25 -#1265 @ 715,127: 14x28 -#1266 @ 618,560: 16x16 -#1267 @ 687,397: 22x25 -#1268 @ 880,229: 16x18 -#1269 @ 806,358: 29x16 -#1270 @ 106,846: 23x29 -#1271 @ 61,299: 16x14 -#1272 @ 644,818: 19x22 -#1273 @ 557,157: 29x24 -#1274 @ 29,710: 25x28 -#1275 @ 207,585: 21x27 -#1276 @ 83,715: 26x14 -#1277 @ 325,51: 13x10 -#1278 @ 717,97: 16x12 -#1279 @ 602,139: 26x11 -#1280 @ 26,933: 29x12 -#1281 @ 815,755: 13x22 -#1282 @ 786,950: 23x21 +#1 @ 179,662: 16x27 +#2 @ 609,961: 25x21 +#3 @ 73,376: 23x28 +#4 @ 599,405: 26x25 +#5 @ 28,933: 19x29 +#6 @ 441,852: 29x23 +#7 @ 512,396: 15x17 +#8 @ 702,415: 14x10 +#9 @ 730,587: 27x21 +#10 @ 252,715: 17x27 +#11 @ 541,822: 21x13 +#12 @ 901,802: 12x24 +#13 @ 759,349: 15x26 +#14 @ 862,839: 22x25 +#15 @ 862,576: 17x16 +#16 @ 265,967: 11x25 +#17 @ 124,444: 23x25 +#18 @ 971,141: 25x15 +#19 @ 864,246: 22x27 +#20 @ 841,34: 17x15 +#21 @ 173,462: 19x22 +#22 @ 122,22: 27x20 +#23 @ 327,178: 12x19 +#24 @ 576,663: 21x10 +#25 @ 410,958: 11x12 +#26 @ 676,145: 14x10 +#27 @ 177,676: 10x22 +#28 @ 663,60: 23x15 +#29 @ 686,352: 24x19 +#30 @ 68,618: 18x12 +#31 @ 20,643: 19x18 +#32 @ 683,128: 19x22 +#33 @ 88,45: 28x25 +#34 @ 442,736: 20x29 +#35 @ 824,825: 13x13 +#36 @ 668,253: 25x27 +#37 @ 254,404: 27x25 +#38 @ 712,260: 26x17 +#39 @ 588,470: 21x20 +#40 @ 114,148: 11x26 +#41 @ 242,409: 17x26 +#42 @ 342,481: 24x21 +#43 @ 104,187: 27x12 +#44 @ 440,919: 13x22 +#45 @ 177,312: 22x15 +#46 @ 249,925: 29x15 +#47 @ 376,750: 19x20 +#48 @ 157,760: 21x21 +#49 @ 760,833: 28x15 +#50 @ 955,909: 26x12 +#51 @ 941,896: 17x25 +#52 @ 154,33: 29x20 +#53 @ 236,275: 27x29 +#54 @ 848,800: 11x18 +#55 @ 950,130: 28x24 +#56 @ 351,564: 21x11 +#57 @ 32,70: 17x11 +#58 @ 215,219: 22x18 +#59 @ 816,714: 15x21 +#60 @ 738,879: 16x27 +#61 @ 218,896: 26x27 +#62 @ 953,363: 16x19 +#63 @ 836,508: 28x13 +#64 @ 839,14: 12x21 +#65 @ 831,683: 24x15 +#66 @ 809,698: 12x26 +#67 @ 887,296: 23x11 +#68 @ 770,771: 29x21 +#69 @ 383,762: 14x25 +#70 @ 542,962: 28x14 +#71 @ 236,286: 18x10 +#72 @ 517,363: 12x18 +#73 @ 171,753: 16x17 +#74 @ 272,910: 18x20 +#75 @ 658,202: 25x14 +#76 @ 534,906: 18x25 +#77 @ 468,342: 27x12 +#78 @ 426,350: 28x26 +#79 @ 277,968: 12x20 +#80 @ 390,877: 10x27 +#81 @ 859,603: 26x12 +#82 @ 491,937: 13x16 +#83 @ 19,883: 20x15 +#84 @ 47,400: 27x15 +#85 @ 627,191: 14x26 +#86 @ 164,326: 17x28 +#87 @ 768,216: 20x24 +#88 @ 947,765: 15x19 +#89 @ 917,142: 11x20 +#90 @ 351,87: 24x29 +#91 @ 872,451: 29x10 +#92 @ 749,900: 20x26 +#93 @ 935,30: 25x12 +#94 @ 221,943: 15x10 +#95 @ 344,602: 12x24 +#96 @ 677,578: 16x26 +#97 @ 452,606: 21x10 +#98 @ 2,722: 19x22 +#99 @ 310,605: 17x29 +#100 @ 262,390: 26x23 +#101 @ 640,499: 19x13 +#102 @ 852,924: 26x16 +#103 @ 309,81: 20x16 +#104 @ 108,918: 18x11 +#105 @ 249,160: 9x17 +#106 @ 26,62: 26x25 +#107 @ 407,587: 14x24 +#108 @ 956,98: 18x27 +#109 @ 944,459: 16x26 +#110 @ 209,699: 28x25 +#111 @ 710,856: 12x22 +#112 @ 744,288: 27x25 +#113 @ 489,344: 20x21 +#114 @ 438,488: 12x16 +#115 @ 884,95: 15x22 +#116 @ 60,617: 24x24 +#117 @ 957,191: 10x11 +#118 @ 315,527: 22x23 +#119 @ 199,117: 18x26 +#120 @ 255,642: 10x15 +#121 @ 957,962: 11x14 +#122 @ 193,131: 10x13 +#123 @ 2,931: 21x11 +#124 @ 36,961: 27x23 +#125 @ 863,38: 29x14 +#126 @ 31,731: 13x15 +#127 @ 357,741: 28x15 +#128 @ 209,354: 27x23 +#129 @ 524,8: 22x20 +#130 @ 302,247: 15x12 +#131 @ 76,857: 10x16 +#132 @ 531,502: 24x10 +#133 @ 559,962: 17x15 +#134 @ 233,710: 29x15 +#135 @ 762,70: 15x24 +#136 @ 934,186: 25x20 +#137 @ 808,252: 29x29 +#138 @ 550,694: 22x19 +#139 @ 265,368: 23x25 +#140 @ 640,637: 11x14 +#141 @ 736,484: 15x10 +#142 @ 946,571: 27x17 +#143 @ 332,174: 20x20 +#144 @ 797,775: 11x23 +#145 @ 684,63: 22x13 +#146 @ 932,36: 20x12 +#147 @ 375,882: 19x17 +#148 @ 656,227: 12x20 +#149 @ 455,223: 12x15 +#150 @ 732,619: 20x20 +#151 @ 292,615: 19x29 +#152 @ 615,0: 15x28 +#153 @ 463,174: 16x15 +#154 @ 322,456: 27x15 +#155 @ 352,224: 10x15 +#156 @ 966,673: 29x21 +#157 @ 527,42: 23x27 +#158 @ 632,775: 15x15 +#159 @ 871,805: 22x15 +#160 @ 667,240: 15x27 +#161 @ 607,880: 25x25 +#162 @ 447,44: 10x21 +#163 @ 445,126: 17x15 +#164 @ 844,933: 11x29 +#165 @ 471,423: 24x27 +#166 @ 715,867: 16x16 +#167 @ 778,279: 10x18 +#168 @ 490,630: 23x16 +#169 @ 687,301: 28x13 +#170 @ 476,432: 11x18 +#171 @ 123,794: 23x26 +#172 @ 738,256: 22x25 +#173 @ 336,60: 26x28 +#174 @ 698,766: 4x10 +#175 @ 511,10: 13x10 +#176 @ 580,702: 18x20 +#177 @ 218,620: 13x22 +#178 @ 476,488: 13x25 +#179 @ 154,617: 14x29 +#180 @ 620,563: 11x6 +#181 @ 168,433: 28x10 +#182 @ 60,685: 10x24 +#183 @ 880,680: 18x18 +#184 @ 859,616: 17x25 +#185 @ 114,80: 26x19 +#186 @ 236,868: 25x10 +#187 @ 135,13: 26x29 +#188 @ 810,677: 22x10 +#189 @ 938,932: 16x14 +#190 @ 427,434: 14x11 +#191 @ 83,731: 29x23 +#192 @ 960,148: 25x16 +#193 @ 577,669: 24x16 +#194 @ 67,267: 18x29 +#195 @ 603,928: 15x26 +#196 @ 881,39: 29x11 +#197 @ 963,957: 19x23 +#198 @ 891,868: 12x13 +#199 @ 799,34: 14x12 +#200 @ 529,785: 24x27 +#201 @ 596,936: 12x21 +#202 @ 832,289: 13x10 +#203 @ 664,232: 17x22 +#204 @ 171,345: 24x26 +#205 @ 283,521: 28x22 +#206 @ 702,469: 14x10 +#207 @ 490,531: 21x27 +#208 @ 411,388: 26x21 +#209 @ 120,780: 13x28 +#210 @ 711,391: 24x12 +#211 @ 347,848: 22x13 +#212 @ 956,507: 20x18 +#213 @ 844,696: 20x26 +#214 @ 550,230: 28x25 +#215 @ 71,625: 14x26 +#216 @ 701,305: 29x23 +#217 @ 629,488: 21x14 +#218 @ 966,362: 10x26 +#219 @ 802,763: 17x19 +#220 @ 631,858: 22x17 +#221 @ 175,656: 24x26 +#222 @ 822,185: 17x15 +#223 @ 110,390: 11x19 +#224 @ 328,13: 28x26 +#225 @ 479,262: 22x12 +#226 @ 178,796: 25x25 +#227 @ 23,782: 18x21 +#228 @ 597,578: 10x12 +#229 @ 692,683: 26x29 +#230 @ 268,713: 21x28 +#231 @ 112,197: 21x15 +#232 @ 619,282: 21x19 +#233 @ 765,56: 21x29 +#234 @ 96,163: 29x11 +#235 @ 229,927: 18x29 +#236 @ 588,775: 27x29 +#237 @ 498,293: 23x15 +#238 @ 311,166: 14x25 +#239 @ 134,371: 27x28 +#240 @ 450,173: 24x16 +#241 @ 700,398: 28x12 +#242 @ 216,282: 25x10 +#243 @ 886,817: 16x15 +#244 @ 291,967: 29x25 +#245 @ 406,283: 14x20 +#246 @ 601,779: 26x28 +#247 @ 767,213: 20x10 +#248 @ 802,36: 15x17 +#249 @ 264,361: 19x27 +#250 @ 565,236: 23x28 +#251 @ 260,394: 21x18 +#252 @ 506,427: 17x26 +#253 @ 479,946: 28x10 +#254 @ 463,505: 24x19 +#255 @ 42,314: 27x27 +#256 @ 901,709: 26x14 +#257 @ 716,194: 21x29 +#258 @ 404,285: 18x21 +#259 @ 838,243: 29x28 +#260 @ 276,510: 23x11 +#261 @ 66,605: 29x16 +#262 @ 225,3: 26x16 +#263 @ 451,355: 22x21 +#264 @ 423,41: 19x17 +#265 @ 942,912: 14x11 +#266 @ 915,613: 22x11 +#267 @ 316,786: 25x24 +#268 @ 640,185: 24x17 +#269 @ 4,564: 29x18 +#270 @ 535,912: 21x16 +#271 @ 95,633: 13x17 +#272 @ 517,170: 21x19 +#273 @ 857,812: 14x23 +#274 @ 682,515: 12x21 +#275 @ 615,847: 22x14 +#276 @ 547,47: 26x18 +#277 @ 461,552: 19x28 +#278 @ 866,29: 28x28 +#279 @ 725,878: 17x15 +#280 @ 604,454: 19x24 +#281 @ 529,452: 28x12 +#282 @ 731,633: 23x22 +#283 @ 505,447: 27x18 +#284 @ 75,694: 12x16 +#285 @ 212,909: 29x13 +#286 @ 96,630: 15x29 +#287 @ 168,34: 28x18 +#288 @ 935,481: 23x26 +#289 @ 892,235: 27x16 +#290 @ 942,945: 13x15 +#291 @ 759,221: 13x25 +#292 @ 604,339: 10x27 +#293 @ 699,313: 17x23 +#294 @ 319,716: 22x24 +#295 @ 718,219: 26x26 +#296 @ 11,917: 13x19 +#297 @ 666,632: 13x24 +#298 @ 85,791: 25x29 +#299 @ 179,204: 20x17 +#300 @ 292,234: 27x11 +#301 @ 527,488: 15x19 +#302 @ 651,158: 22x10 +#303 @ 727,98: 25x25 +#304 @ 452,9: 23x26 +#305 @ 520,386: 23x22 +#306 @ 755,196: 26x11 +#307 @ 321,107: 13x25 +#308 @ 654,563: 20x25 +#309 @ 188,228: 11x23 +#310 @ 416,355: 22x19 +#311 @ 679,567: 12x8 +#312 @ 319,282: 17x27 +#313 @ 276,620: 23x23 +#314 @ 50,242: 11x19 +#315 @ 759,918: 23x19 +#316 @ 599,84: 18x21 +#317 @ 675,230: 15x28 +#318 @ 96,480: 13x13 +#319 @ 386,254: 24x19 +#320 @ 682,199: 22x19 +#321 @ 14,819: 12x14 +#322 @ 231,451: 19x17 +#323 @ 36,396: 27x13 +#324 @ 459,917: 18x26 +#325 @ 149,874: 11x10 +#326 @ 182,325: 11x25 +#327 @ 142,279: 17x12 +#328 @ 954,276: 27x24 +#329 @ 512,263: 16x19 +#330 @ 446,841: 25x25 +#331 @ 79,247: 15x11 +#332 @ 378,881: 20x17 +#333 @ 958,324: 18x22 +#334 @ 583,501: 13x23 +#335 @ 966,133: 16x20 +#336 @ 236,395: 19x19 +#337 @ 588,910: 18x10 +#338 @ 35,406: 20x25 +#339 @ 326,404: 20x29 +#340 @ 293,761: 16x24 +#341 @ 420,371: 5x5 +#342 @ 694,764: 12x17 +#343 @ 617,15: 10x14 +#344 @ 859,915: 11x15 +#345 @ 522,430: 20x17 +#346 @ 727,180: 15x14 +#347 @ 208,679: 11x16 +#348 @ 523,670: 28x22 +#349 @ 512,436: 15x13 +#350 @ 170,11: 25x18 +#351 @ 353,588: 23x12 +#352 @ 201,605: 26x12 +#353 @ 561,681: 15x12 +#354 @ 500,357: 12x12 +#355 @ 813,438: 26x26 +#356 @ 759,853: 14x28 +#357 @ 152,737: 27x27 +#358 @ 646,721: 11x13 +#359 @ 588,446: 15x21 +#360 @ 713,927: 21x28 +#361 @ 189,43: 21x29 +#362 @ 655,722: 29x22 +#363 @ 614,184: 17x14 +#364 @ 465,10: 12x19 +#365 @ 493,612: 11x24 +#366 @ 594,442: 13x18 +#367 @ 392,893: 11x16 +#368 @ 77,740: 12x21 +#369 @ 628,138: 12x27 +#370 @ 173,500: 20x11 +#371 @ 363,587: 13x27 +#372 @ 852,276: 25x19 +#373 @ 410,949: 13x10 +#374 @ 359,948: 25x25 +#375 @ 546,677: 11x29 +#376 @ 854,582: 23x19 +#377 @ 761,145: 11x10 +#378 @ 300,888: 22x17 +#379 @ 284,791: 27x16 +#380 @ 758,255: 13x20 +#381 @ 453,16: 21x16 +#382 @ 525,183: 21x22 +#383 @ 114,307: 18x15 +#384 @ 556,225: 28x20 +#385 @ 463,19: 19x13 +#386 @ 601,579: 24x14 +#387 @ 314,870: 19x21 +#388 @ 541,438: 22x17 +#389 @ 704,543: 26x11 +#390 @ 420,537: 21x22 +#391 @ 728,211: 10x17 +#392 @ 232,822: 25x16 +#393 @ 482,339: 16x17 +#394 @ 460,129: 22x18 +#395 @ 223,181: 24x28 +#396 @ 270,740: 25x24 +#397 @ 220,22: 16x17 +#398 @ 416,414: 15x21 +#399 @ 391,524: 10x20 +#400 @ 448,282: 12x29 +#401 @ 247,862: 16x13 +#402 @ 967,527: 17x20 +#403 @ 279,637: 12x15 +#404 @ 792,166: 16x29 +#405 @ 597,902: 21x12 +#406 @ 375,729: 11x13 +#407 @ 404,395: 15x27 +#408 @ 852,581: 27x17 +#409 @ 97,859: 14x19 +#410 @ 867,477: 23x24 +#411 @ 419,139: 20x23 +#412 @ 395,956: 23x15 +#413 @ 498,388: 22x24 +#414 @ 880,814: 13x19 +#415 @ 845,417: 12x25 +#416 @ 498,357: 27x29 +#417 @ 366,739: 24x29 +#418 @ 86,66: 20x23 +#419 @ 619,871: 17x4 +#420 @ 896,449: 25x24 +#421 @ 414,64: 13x27 +#422 @ 308,77: 27x10 +#423 @ 105,927: 15x12 +#424 @ 213,110: 18x26 +#425 @ 912,820: 12x15 +#426 @ 755,643: 22x13 +#427 @ 850,256: 17x12 +#428 @ 581,456: 18x29 +#429 @ 881,461: 28x22 +#430 @ 204,903: 27x19 +#431 @ 12,578: 22x13 +#432 @ 69,762: 22x27 +#433 @ 140,879: 15x18 +#434 @ 548,924: 20x23 +#435 @ 256,293: 28x22 +#436 @ 583,438: 29x27 +#437 @ 31,936: 17x11 +#438 @ 53,289: 23x26 +#439 @ 753,871: 16x27 +#440 @ 64,856: 21x28 +#441 @ 832,962: 11x15 +#442 @ 305,969: 17x29 +#443 @ 562,103: 24x24 +#444 @ 243,231: 18x11 +#445 @ 210,19: 10x29 +#446 @ 62,702: 28x18 +#447 @ 167,127: 13x29 +#448 @ 751,334: 12x20 +#449 @ 404,236: 27x28 +#450 @ 869,107: 20x18 +#451 @ 167,687: 22x22 +#452 @ 79,449: 29x19 +#453 @ 821,288: 15x26 +#454 @ 235,926: 18x10 +#455 @ 902,705: 16x18 +#456 @ 777,189: 23x25 +#457 @ 560,141: 23x17 +#458 @ 711,900: 28x12 +#459 @ 650,864: 23x19 +#460 @ 965,91: 25x29 +#461 @ 366,589: 24x18 +#462 @ 262,423: 25x21 +#463 @ 775,176: 25x10 +#464 @ 634,899: 24x15 +#465 @ 330,489: 21x16 +#466 @ 711,668: 28x14 +#467 @ 283,699: 17x15 +#468 @ 12,741: 14x11 +#469 @ 10,532: 17x19 +#470 @ 763,148: 12x17 +#471 @ 630,884: 13x26 +#472 @ 39,381: 12x19 +#473 @ 313,382: 4x17 +#474 @ 617,862: 22x18 +#475 @ 113,120: 20x21 +#476 @ 913,322: 26x17 +#477 @ 197,33: 22x15 +#478 @ 760,220: 22x29 +#479 @ 395,195: 17x4 +#480 @ 25,469: 16x19 +#481 @ 289,620: 13x20 +#482 @ 41,395: 15x21 +#483 @ 50,148: 24x22 +#484 @ 787,117: 29x24 +#485 @ 456,623: 28x15 +#486 @ 938,37: 19x10 +#487 @ 475,340: 16x22 +#488 @ 221,808: 28x22 +#489 @ 387,452: 17x19 +#490 @ 835,789: 21x23 +#491 @ 153,456: 29x20 +#492 @ 462,344: 19x13 +#493 @ 927,8: 16x27 +#494 @ 172,734: 19x15 +#495 @ 562,52: 27x15 +#496 @ 781,826: 19x26 +#497 @ 204,123: 17x13 +#498 @ 839,514: 26x25 +#499 @ 324,417: 29x11 +#500 @ 746,828: 19x11 +#501 @ 737,580: 18x14 +#502 @ 802,22: 28x20 +#503 @ 974,392: 19x17 +#504 @ 426,55: 16x14 +#505 @ 845,795: 19x13 +#506 @ 261,102: 10x27 +#507 @ 415,400: 14x22 +#508 @ 62,0: 19x29 +#509 @ 643,429: 28x10 +#510 @ 713,121: 18x19 +#511 @ 829,23: 17x16 +#512 @ 268,80: 10x11 +#513 @ 826,654: 28x29 +#514 @ 73,96: 19x18 +#515 @ 696,417: 22x13 +#516 @ 253,437: 26x29 +#517 @ 842,523: 16x10 +#518 @ 274,960: 28x10 +#519 @ 410,317: 16x22 +#520 @ 334,981: 26x18 +#521 @ 183,480: 25x29 +#522 @ 794,659: 26x26 +#523 @ 416,188: 25x10 +#524 @ 735,400: 17x21 +#525 @ 836,779: 15x26 +#526 @ 913,298: 12x15 +#527 @ 28,507: 10x18 +#528 @ 596,697: 20x20 +#529 @ 322,163: 12x20 +#530 @ 626,94: 21x10 +#531 @ 39,391: 14x10 +#532 @ 894,108: 11x29 +#533 @ 384,173: 25x18 +#534 @ 557,974: 11x23 +#535 @ 780,805: 10x11 +#536 @ 448,734: 27x14 +#537 @ 68,349: 27x17 +#538 @ 215,700: 15x13 +#539 @ 921,309: 26x16 +#540 @ 312,665: 15x3 +#541 @ 301,946: 16x22 +#542 @ 798,747: 11x22 +#543 @ 850,675: 28x28 +#544 @ 438,425: 11x18 +#545 @ 477,537: 16x25 +#546 @ 869,878: 22x22 +#547 @ 830,106: 26x15 +#548 @ 16,880: 23x28 +#549 @ 89,598: 25x10 +#550 @ 911,746: 25x20 +#551 @ 132,268: 27x14 +#552 @ 107,54: 22x16 +#553 @ 617,920: 17x25 +#554 @ 888,796: 17x17 +#555 @ 911,21: 21x13 +#556 @ 901,126: 12x28 +#557 @ 501,378: 25x26 +#558 @ 231,749: 28x10 +#559 @ 534,889: 12x24 +#560 @ 388,923: 17x14 +#561 @ 113,84: 15x28 +#562 @ 924,424: 19x27 +#563 @ 669,933: 29x22 +#564 @ 317,796: 22x24 +#565 @ 149,894: 18x11 +#566 @ 815,914: 21x17 +#567 @ 686,540: 28x10 +#568 @ 531,331: 20x24 +#569 @ 459,576: 15x28 +#570 @ 127,520: 15x24 +#571 @ 466,572: 13x26 +#572 @ 935,555: 18x19 +#573 @ 461,946: 12x20 +#574 @ 918,162: 11x12 +#575 @ 279,305: 21x15 +#576 @ 650,714: 15x13 +#577 @ 486,776: 12x27 +#578 @ 81,253: 20x17 +#579 @ 906,18: 22x14 +#580 @ 306,26: 16x16 +#581 @ 184,724: 17x28 +#582 @ 751,225: 15x10 +#583 @ 26,783: 21x11 +#584 @ 103,41: 21x26 +#585 @ 283,5: 12x24 +#586 @ 733,375: 13x27 +#587 @ 193,973: 11x21 +#588 @ 47,306: 19x14 +#589 @ 964,124: 11x19 +#590 @ 856,321: 19x12 +#591 @ 437,655: 29x14 +#592 @ 368,437: 25x24 +#593 @ 537,154: 28x17 +#594 @ 574,451: 11x13 +#595 @ 963,342: 21x26 +#596 @ 250,492: 22x18 +#597 @ 962,740: 22x14 +#598 @ 697,784: 29x22 +#599 @ 153,323: 23x23 +#600 @ 534,713: 13x12 +#601 @ 75,73: 22x18 +#602 @ 166,755: 15x12 +#603 @ 273,622: 22x12 +#604 @ 660,432: 10x24 +#605 @ 119,965: 25x25 +#606 @ 751,294: 28x14 +#607 @ 676,358: 13x11 +#608 @ 204,588: 17x29 +#609 @ 792,828: 21x14 +#610 @ 163,141: 27x12 +#611 @ 159,33: 22x19 +#612 @ 158,364: 13x15 +#613 @ 711,929: 16x14 +#614 @ 811,654: 18x29 +#615 @ 903,828: 24x20 +#616 @ 323,111: 23x26 +#617 @ 891,258: 28x28 +#618 @ 551,826: 25x12 +#619 @ 660,935: 29x19 +#620 @ 41,27: 28x19 +#621 @ 590,491: 26x24 +#622 @ 174,31: 10x25 +#623 @ 563,817: 21x25 +#624 @ 961,746: 13x27 +#625 @ 599,403: 13x11 +#626 @ 852,661: 22x27 +#627 @ 84,473: 18x19 +#628 @ 580,98: 28x27 +#629 @ 138,506: 28x15 +#630 @ 981,544: 16x26 +#631 @ 418,908: 23x24 +#632 @ 371,926: 22x25 +#633 @ 701,291: 11x20 +#634 @ 66,889: 28x25 +#635 @ 641,689: 14x26 +#636 @ 177,960: 10x16 +#637 @ 60,39: 20x18 +#638 @ 378,445: 14x25 +#639 @ 113,794: 17x16 +#640 @ 197,627: 22x16 +#641 @ 324,530: 12x25 +#642 @ 8,206: 18x29 +#643 @ 359,893: 23x15 +#644 @ 795,198: 19x17 +#645 @ 239,900: 12x20 +#646 @ 504,343: 19x10 +#647 @ 708,677: 29x10 +#648 @ 63,697: 14x12 +#649 @ 403,203: 25x18 +#650 @ 305,183: 16x18 +#651 @ 609,447: 20x22 +#652 @ 508,394: 16x29 +#653 @ 178,144: 29x27 +#654 @ 870,490: 23x19 +#655 @ 130,855: 27x14 +#656 @ 333,563: 25x14 +#657 @ 862,252: 18x16 +#658 @ 40,384: 20x29 +#659 @ 639,299: 13x10 +#660 @ 869,856: 12x23 +#661 @ 35,495: 13x28 +#662 @ 545,322: 16x26 +#663 @ 671,566: 11x12 +#664 @ 342,10: 10x17 +#665 @ 932,940: 21x14 +#666 @ 726,480: 11x11 +#667 @ 249,632: 17x21 +#668 @ 939,830: 11x14 +#669 @ 812,241: 19x25 +#670 @ 739,641: 15x21 +#671 @ 307,873: 21x25 +#672 @ 845,687: 13x11 +#673 @ 953,676: 26x17 +#674 @ 137,960: 26x13 +#675 @ 853,498: 29x13 +#676 @ 396,599: 17x17 +#677 @ 431,839: 27x27 +#678 @ 745,290: 23x16 +#679 @ 336,849: 12x23 +#680 @ 852,492: 28x15 +#681 @ 467,781: 25x23 +#682 @ 525,668: 18x15 +#683 @ 941,189: 25x24 +#684 @ 130,323: 17x26 +#685 @ 410,612: 12x20 +#686 @ 967,499: 13x23 +#687 @ 947,263: 16x22 +#688 @ 158,434: 13x13 +#689 @ 920,298: 13x15 +#690 @ 361,415: 16x21 +#691 @ 302,600: 21x20 +#692 @ 65,356: 20x24 +#693 @ 855,427: 13x12 +#694 @ 877,366: 10x10 +#695 @ 138,415: 20x14 +#696 @ 818,653: 27x12 +#697 @ 829,540: 15x29 +#698 @ 636,121: 19x28 +#699 @ 324,960: 16x23 +#700 @ 680,614: 10x11 +#701 @ 380,819: 21x21 +#702 @ 873,107: 11x15 +#703 @ 42,644: 11x17 +#704 @ 62,860: 17x21 +#705 @ 728,704: 27x27 +#706 @ 604,488: 17x25 +#707 @ 418,252: 28x14 +#708 @ 715,408: 28x17 +#709 @ 747,225: 21x13 +#710 @ 124,787: 18x18 +#711 @ 394,376: 29x18 +#712 @ 182,552: 13x16 +#713 @ 129,424: 19x23 +#714 @ 852,526: 18x12 +#715 @ 849,634: 21x19 +#716 @ 220,22: 14x21 +#717 @ 327,870: 18x15 +#718 @ 627,170: 10x13 +#719 @ 108,768: 17x22 +#720 @ 870,303: 11x28 +#721 @ 616,917: 19x18 +#722 @ 118,316: 10x11 +#723 @ 476,355: 12x13 +#724 @ 235,946: 23x12 +#725 @ 310,723: 24x21 +#726 @ 28,483: 14x28 +#727 @ 746,202: 26x12 +#728 @ 736,404: 19x28 +#729 @ 973,143: 21x26 +#730 @ 226,9: 18x24 +#731 @ 717,746: 29x26 +#732 @ 793,668: 28x19 +#733 @ 446,177: 11x25 +#734 @ 86,243: 27x11 +#735 @ 73,13: 15x25 +#736 @ 225,706: 13x13 +#737 @ 852,950: 25x10 +#738 @ 502,427: 13x15 +#739 @ 950,504: 26x17 +#740 @ 761,290: 21x24 +#741 @ 90,378: 28x29 +#742 @ 431,457: 27x13 +#743 @ 196,666: 15x29 +#744 @ 439,105: 10x29 +#745 @ 788,261: 28x10 +#746 @ 947,904: 13x12 +#747 @ 328,973: 17x25 +#748 @ 255,758: 22x26 +#749 @ 320,426: 21x21 +#750 @ 735,258: 16x24 +#751 @ 883,333: 21x25 +#752 @ 5,510: 10x23 +#753 @ 389,972: 20x14 +#754 @ 671,937: 18x10 +#755 @ 728,342: 20x18 +#756 @ 247,617: 26x13 +#757 @ 301,241: 25x19 +#758 @ 971,653: 18x25 +#759 @ 807,30: 25x14 +#760 @ 318,525: 14x12 +#761 @ 640,618: 26x24 +#762 @ 788,253: 25x26 +#763 @ 393,192: 23x12 +#764 @ 522,920: 13x26 +#765 @ 232,204: 14x18 +#766 @ 953,862: 22x25 +#767 @ 41,239: 22x18 +#768 @ 760,535: 11x25 +#769 @ 84,868: 28x26 +#770 @ 920,703: 19x26 +#771 @ 678,544: 27x17 +#772 @ 814,591: 18x11 +#773 @ 15,181: 18x10 +#774 @ 725,661: 22x11 +#775 @ 241,691: 18x17 +#776 @ 84,81: 14x29 +#777 @ 909,818: 14x23 +#778 @ 357,478: 27x25 +#779 @ 537,878: 24x15 +#780 @ 812,832: 16x18 +#781 @ 528,394: 24x29 +#782 @ 411,603: 15x12 +#783 @ 94,727: 10x16 +#784 @ 968,146: 24x27 +#785 @ 755,195: 22x11 +#786 @ 948,802: 21x13 +#787 @ 509,266: 10x28 +#788 @ 626,463: 21x19 +#789 @ 766,203: 19x22 +#790 @ 450,28: 12x24 +#791 @ 290,589: 25x12 +#792 @ 294,195: 22x28 +#793 @ 481,949: 22x20 +#794 @ 732,708: 25x13 +#795 @ 292,706: 17x20 +#796 @ 502,6: 13x10 +#797 @ 119,382: 29x23 +#798 @ 300,953: 16x22 +#799 @ 978,231: 18x16 +#800 @ 119,409: 23x12 +#801 @ 390,634: 27x13 +#802 @ 958,124: 19x21 +#803 @ 423,437: 27x13 +#804 @ 394,299: 27x19 +#805 @ 973,910: 24x10 +#806 @ 462,133: 29x11 +#807 @ 529,750: 17x15 +#808 @ 80,744: 12x17 +#809 @ 56,99: 19x17 +#810 @ 926,721: 12x28 +#811 @ 916,569: 27x15 +#812 @ 723,376: 13x27 +#813 @ 852,824: 26x23 +#814 @ 953,944: 17x10 +#815 @ 786,937: 28x17 +#816 @ 188,705: 17x24 +#817 @ 543,456: 13x18 +#818 @ 676,918: 20x10 +#819 @ 97,706: 24x29 +#820 @ 722,656: 29x18 +#821 @ 182,328: 24x15 +#822 @ 490,397: 28x20 +#823 @ 247,217: 19x20 +#824 @ 217,592: 12x21 +#825 @ 452,201: 14x25 +#826 @ 348,612: 11x26 +#827 @ 652,935: 22x21 +#828 @ 650,925: 29x21 +#829 @ 495,247: 15x29 +#830 @ 594,561: 20x15 +#831 @ 220,460: 29x25 +#832 @ 642,117: 12x20 +#833 @ 235,533: 24x13 +#834 @ 285,755: 14x11 +#835 @ 739,473: 23x21 +#836 @ 268,387: 20x16 +#837 @ 459,275: 28x10 +#838 @ 493,572: 13x21 +#839 @ 320,720: 18x20 +#840 @ 168,757: 5x6 +#841 @ 496,368: 29x18 +#842 @ 419,45: 15x22 +#843 @ 749,524: 23x19 +#844 @ 413,68: 25x19 +#845 @ 250,698: 16x27 +#846 @ 101,697: 26x13 +#847 @ 968,332: 11x19 +#848 @ 953,137: 19x11 +#849 @ 134,396: 27x19 +#850 @ 891,465: 13x28 +#851 @ 40,931: 24x18 +#852 @ 170,775: 25x10 +#853 @ 187,26: 18x15 +#854 @ 677,28: 19x17 +#855 @ 752,274: 22x16 +#856 @ 217,376: 15x17 +#857 @ 379,249: 15x28 +#858 @ 308,661: 25x16 +#859 @ 514,704: 28x16 +#860 @ 281,235: 26x23 +#861 @ 430,650: 15x28 +#862 @ 784,125: 26x25 +#863 @ 212,123: 19x14 +#864 @ 946,191: 15x8 +#865 @ 405,399: 21x27 +#866 @ 443,484: 19x16 +#867 @ 769,626: 17x25 +#868 @ 119,786: 29x19 +#869 @ 890,20: 26x28 +#870 @ 12,161: 11x24 +#871 @ 957,869: 11x12 +#872 @ 332,736: 28x15 +#873 @ 178,967: 27x10 +#874 @ 323,441: 23x10 +#875 @ 229,436: 28x16 +#876 @ 734,578: 23x17 +#877 @ 433,614: 25x27 +#878 @ 30,160: 28x18 +#879 @ 217,279: 26x21 +#880 @ 621,130: 27x15 +#881 @ 465,601: 26x28 +#882 @ 231,580: 25x11 +#883 @ 300,512: 25x23 +#884 @ 422,258: 22x19 +#885 @ 308,530: 15x13 +#886 @ 164,202: 10x12 +#887 @ 412,181: 18x21 +#888 @ 121,766: 25x18 +#889 @ 177,945: 14x16 +#890 @ 30,162: 13x26 +#891 @ 437,565: 23x27 +#892 @ 454,280: 26x27 +#893 @ 379,526: 23x12 +#894 @ 834,707: 13x5 +#895 @ 859,357: 24x28 +#896 @ 891,303: 16x14 +#897 @ 385,116: 28x20 +#898 @ 53,12: 24x22 +#899 @ 428,979: 24x20 +#900 @ 916,602: 28x17 +#901 @ 19,739: 16x21 +#902 @ 871,32: 18x22 +#903 @ 207,110: 12x16 +#904 @ 932,15: 26x19 +#905 @ 691,232: 11x18 +#906 @ 965,799: 20x20 +#907 @ 241,526: 24x23 +#908 @ 931,915: 18x14 +#909 @ 662,584: 24x14 +#910 @ 30,148: 10x17 +#911 @ 50,466: 24x29 +#912 @ 265,504: 22x10 +#913 @ 59,857: 28x24 +#914 @ 170,780: 18x27 +#915 @ 436,51: 27x12 +#916 @ 921,139: 16x17 +#917 @ 532,377: 16x23 +#918 @ 237,188: 20x27 +#919 @ 672,653: 11x20 +#920 @ 333,546: 13x18 +#921 @ 830,191: 25x27 +#922 @ 745,644: 24x23 +#923 @ 877,371: 17x28 +#924 @ 926,426: 12x19 +#925 @ 731,977: 13x21 +#926 @ 12,122: 14x14 +#927 @ 65,896: 17x28 +#928 @ 126,609: 29x13 +#929 @ 557,244: 24x22 +#930 @ 80,21: 14x24 +#931 @ 725,184: 18x28 +#932 @ 654,181: 18x12 +#933 @ 439,283: 14x21 +#934 @ 974,95: 26x15 +#935 @ 235,9: 10x17 +#936 @ 306,422: 24x21 +#937 @ 383,952: 29x10 +#938 @ 738,201: 23x15 +#939 @ 254,624: 26x19 +#940 @ 421,672: 17x14 +#941 @ 221,751: 12x28 +#942 @ 730,768: 13x18 +#943 @ 342,13: 17x18 +#944 @ 594,639: 24x17 +#945 @ 127,323: 16x12 +#946 @ 861,701: 13x10 +#947 @ 696,541: 28x24 +#948 @ 804,363: 12x25 +#949 @ 958,296: 29x13 +#950 @ 126,868: 16x20 +#951 @ 916,483: 26x15 +#952 @ 318,52: 19x22 +#953 @ 240,938: 18x11 +#954 @ 849,275: 16x11 +#955 @ 712,412: 27x26 +#956 @ 913,613: 14x15 +#957 @ 756,476: 20x18 +#958 @ 656,906: 14x11 +#959 @ 461,633: 12x26 +#960 @ 398,208: 19x12 +#961 @ 490,333: 14x14 +#962 @ 816,658: 16x27 +#963 @ 579,562: 17x19 +#964 @ 961,552: 16x29 +#965 @ 393,947: 27x19 +#966 @ 68,464: 18x13 +#967 @ 318,537: 21x13 +#968 @ 904,171: 28x13 +#969 @ 629,974: 23x22 +#970 @ 415,366: 15x19 +#971 @ 401,976: 26x13 +#972 @ 18,44: 26x12 +#973 @ 18,804: 27x26 +#974 @ 134,446: 25x22 +#975 @ 158,464: 19x13 +#976 @ 623,437: 9x3 +#977 @ 376,181: 19x15 +#978 @ 738,397: 26x27 +#979 @ 338,207: 20x23 +#980 @ 218,403: 27x17 +#981 @ 530,937: 27x10 +#982 @ 134,958: 11x19 +#983 @ 675,514: 13x17 +#984 @ 891,383: 10x27 +#985 @ 935,748: 15x11 +#986 @ 943,956: 25x22 +#987 @ 18,649: 11x14 +#988 @ 740,243: 21x10 +#989 @ 404,309: 14x22 +#990 @ 134,19: 13x19 +#991 @ 406,381: 14x23 +#992 @ 428,395: 18x13 +#993 @ 121,971: 18x15 +#994 @ 62,794: 25x17 +#995 @ 134,403: 20x13 +#996 @ 347,567: 20x29 +#997 @ 615,358: 3x18 +#998 @ 852,28: 15x16 +#999 @ 259,379: 27x24 +#1000 @ 268,617: 20x20 +#1001 @ 956,657: 20x22 +#1002 @ 924,876: 26x18 +#1003 @ 748,411: 12x14 +#1004 @ 882,249: 29x10 +#1005 @ 979,25: 21x17 +#1006 @ 559,126: 25x28 +#1007 @ 569,712: 28x13 +#1008 @ 623,781: 25x16 +#1009 @ 422,607: 25x10 +#1010 @ 613,904: 11x26 +#1011 @ 128,411: 16x17 +#1012 @ 9,195: 22x12 +#1013 @ 83,362: 14x23 +#1014 @ 617,149: 26x18 +#1015 @ 382,436: 12x21 +#1016 @ 613,855: 23x16 +#1017 @ 956,222: 24x17 +#1018 @ 400,977: 12x15 +#1019 @ 181,333: 18x17 +#1020 @ 610,174: 25x14 +#1021 @ 825,26: 13x24 +#1022 @ 296,778: 26x14 +#1023 @ 465,135: 24x16 +#1024 @ 638,807: 10x14 +#1025 @ 547,697: 19x15 +#1026 @ 103,663: 15x21 +#1027 @ 71,113: 20x28 +#1028 @ 325,498: 27x28 +#1029 @ 525,808: 23x19 +#1030 @ 828,949: 15x27 +#1031 @ 46,699: 11x18 +#1032 @ 676,396: 29x29 +#1033 @ 552,889: 25x27 +#1034 @ 943,865: 15x22 +#1035 @ 480,310: 27x20 +#1036 @ 714,270: 29x17 +#1037 @ 647,711: 18x15 +#1038 @ 590,431: 24x16 +#1039 @ 675,554: 20x26 +#1040 @ 287,13: 17x20 +#1041 @ 886,310: 16x28 +#1042 @ 219,353: 15x22 +#1043 @ 215,12: 14x17 +#1044 @ 307,541: 29x22 +#1045 @ 151,734: 22x22 +#1046 @ 517,785: 14x24 +#1047 @ 617,89: 15x26 +#1048 @ 726,978: 13x22 +#1049 @ 404,546: 25x29 +#1050 @ 395,372: 23x15 +#1051 @ 249,583: 21x21 +#1052 @ 941,455: 23x15 +#1053 @ 801,651: 19x11 +#1054 @ 186,120: 10x22 +#1055 @ 562,177: 11x10 +#1056 @ 504,441: 14x29 +#1057 @ 401,274: 11x16 +#1058 @ 69,463: 24x28 +#1059 @ 409,955: 20x27 +#1060 @ 856,263: 26x20 +#1061 @ 747,821: 23x11 +#1062 @ 243,158: 20x22 +#1063 @ 694,957: 27x10 +#1064 @ 370,666: 29x23 +#1065 @ 74,640: 14x24 +#1066 @ 330,223: 11x21 +#1067 @ 93,659: 27x10 +#1068 @ 916,571: 20x24 +#1069 @ 681,208: 10x26 +#1070 @ 62,125: 27x28 +#1071 @ 163,527: 14x24 +#1072 @ 353,71: 23x22 +#1073 @ 938,1: 12x27 +#1074 @ 561,956: 20x26 +#1075 @ 850,491: 29x23 +#1076 @ 762,231: 16x28 +#1077 @ 391,96: 13x24 +#1078 @ 359,435: 14x17 +#1079 @ 150,326: 15x20 +#1080 @ 615,695: 29x17 +#1081 @ 477,123: 24x14 +#1082 @ 851,99: 12x26 +#1083 @ 328,627: 22x29 +#1084 @ 925,616: 14x23 +#1085 @ 59,897: 23x19 +#1086 @ 152,379: 23x15 +#1087 @ 255,415: 19x22 +#1088 @ 921,476: 19x24 +#1089 @ 946,215: 23x16 +#1090 @ 384,725: 23x11 +#1091 @ 612,353: 18x29 +#1092 @ 443,193: 22x20 +#1093 @ 41,141: 18x10 +#1094 @ 288,10: 24x19 +#1095 @ 623,908: 11x20 +#1096 @ 424,159: 27x19 +#1097 @ 896,878: 16x29 +#1098 @ 466,334: 27x18 +#1099 @ 589,755: 23x25 +#1100 @ 341,592: 13x27 +#1101 @ 220,387: 16x12 +#1102 @ 958,510: 15x9 +#1103 @ 252,435: 11x23 +#1104 @ 143,853: 15x10 +#1105 @ 841,205: 14x29 +#1106 @ 439,456: 11x19 +#1107 @ 937,828: 18x21 +#1108 @ 725,650: 24x26 +#1109 @ 851,222: 19x26 +#1110 @ 248,423: 5x4 +#1111 @ 740,325: 10x23 +#1112 @ 474,960: 20x22 +#1113 @ 943,946: 11x26 +#1114 @ 590,580: 18x25 +#1115 @ 472,370: 19x17 +#1116 @ 804,427: 29x16 +#1117 @ 679,42: 16x14 +#1118 @ 318,272: 12x28 +#1119 @ 372,878: 10x12 +#1120 @ 685,223: 16x26 +#1121 @ 853,19: 23x12 +#1122 @ 532,63: 27x18 +#1123 @ 456,320: 28x19 +#1124 @ 888,828: 25x24 +#1125 @ 348,461: 19x25 +#1126 @ 873,395: 15x13 +#1127 @ 705,451: 27x28 +#1128 @ 730,589: 11x26 +#1129 @ 667,727: 20x24 +#1130 @ 101,130: 24x23 +#1131 @ 563,688: 28x21 +#1132 @ 5,143: 26x19 +#1133 @ 522,671: 19x23 +#1134 @ 481,350: 19x23 +#1135 @ 4,125: 25x18 +#1136 @ 118,943: 26x24 +#1137 @ 371,834: 20x26 +#1138 @ 523,751: 22x10 +#1139 @ 92,181: 18x16 +#1140 @ 904,145: 20x17 +#1141 @ 280,513: 25x28 +#1142 @ 43,61: 17x19 +#1143 @ 602,643: 12x9 +#1144 @ 499,293: 12x10 +#1145 @ 155,345: 28x25 +#1146 @ 572,503: 17x21 +#1147 @ 537,595: 28x12 +#1148 @ 256,841: 18x25 +#1149 @ 621,431: 16x14 +#1150 @ 657,258: 23x12 +#1151 @ 305,436: 24x18 +#1152 @ 907,820: 12x15 +#1153 @ 65,744: 26x23 +#1154 @ 230,861: 18x17 +#1155 @ 333,12: 23x24 +#1156 @ 248,418: 23x27 +#1157 @ 469,958: 19x12 +#1158 @ 35,931: 11x14 +#1159 @ 288,563: 10x29 +#1160 @ 43,378: 14x11 +#1161 @ 88,739: 12x25 +#1162 @ 804,900: 21x29 +#1163 @ 381,76: 22x24 +#1164 @ 30,502: 16x14 +#1165 @ 527,603: 12x14 +#1166 @ 956,209: 15x19 +#1167 @ 960,546: 29x14 +#1168 @ 188,744: 10x19 +#1169 @ 175,744: 12x29 +#1170 @ 133,778: 22x21 +#1171 @ 174,205: 14x20 +#1172 @ 690,959: 21x12 +#1173 @ 619,491: 13x22 +#1174 @ 813,594: 18x12 +#1175 @ 876,607: 29x13 +#1176 @ 900,6: 19x18 +#1177 @ 967,721: 13x25 +#1178 @ 189,232: 19x26 +#1179 @ 827,553: 24x18 +#1180 @ 402,245: 28x17 +#1181 @ 162,896: 14x17 +#1182 @ 914,1: 22x27 +#1183 @ 208,134: 22x19 +#1184 @ 526,331: 29x22 +#1185 @ 145,202: 22x13 +#1186 @ 409,861: 25x13 +#1187 @ 801,730: 28x18 +#1188 @ 624,487: 20x15 +#1189 @ 393,687: 15x29 +#1190 @ 279,958: 15x29 +#1191 @ 653,395: 26x27 +#1192 @ 179,26: 10x19 +#1193 @ 260,76: 29x25 +#1194 @ 859,406: 18x10 +#1195 @ 296,932: 21x23 +#1196 @ 301,974: 16x26 +#1197 @ 727,757: 29x10 +#1198 @ 657,397: 17x20 +#1199 @ 442,937: 18x26 +#1200 @ 29,508: 19x15 +#1201 @ 636,245: 24x12 +#1202 @ 960,402: 28x12 +#1203 @ 139,256: 17x29 +#1204 @ 168,117: 23x15 +#1205 @ 770,785: 27x29 +#1206 @ 752,276: 21x21 +#1207 @ 883,889: 13x13 +#1208 @ 62,918: 21x10 +#1209 @ 163,517: 17x12 +#1210 @ 470,613: 19x11 +#1211 @ 451,661: 26x29 +#1212 @ 211,38: 19x13 +#1213 @ 539,439: 19x28 +#1214 @ 339,229: 23x21 +#1215 @ 591,542: 26x25 +#1216 @ 41,643: 29x21 +#1217 @ 806,823: 14x19 +#1218 @ 628,245: 11x18 +#1219 @ 378,619: 20x19 +#1220 @ 250,444: 14x22 +#1221 @ 713,891: 17x12 +#1222 @ 144,430: 27x21 +#1223 @ 125,200: 27x29 +#1224 @ 525,664: 15x22 +#1225 @ 369,485: 23x27 +#1226 @ 868,564: 29x20 +#1227 @ 642,700: 11x12 +#1228 @ 951,6: 14x25 +#1229 @ 532,331: 24x13 +#1230 @ 937,480: 15x12 +#1231 @ 81,65: 27x25 +#1232 @ 153,263: 11x26 +#1233 @ 970,364: 14x19 +#1234 @ 143,454: 26x27 +#1235 @ 495,574: 7x15 +#1236 @ 850,209: 20x17 +#1237 @ 126,965: 23x29 +#1238 @ 870,675: 23x28 +#1239 @ 308,376: 14x28 +#1240 @ 578,755: 14x24 +#1241 @ 844,481: 23x22 +#1242 @ 734,769: 25x16 +#1243 @ 723,219: 22x27 +#1244 @ 159,695: 23x18 +#1245 @ 754,285: 26x22 +#1246 @ 345,974: 26x23 +#1247 @ 29,69: 27x12 +#1248 @ 181,784: 15x12 +#1249 @ 682,616: 5x6 +#1250 @ 208,28: 27x28 +#1251 @ 665,234: 18x23 +#1252 @ 961,288: 11x22 +#1253 @ 363,57: 19x21 +#1254 @ 662,137: 25x24 +#1255 @ 7,41: 21x15 +#1256 @ 693,784: 12x28 +#1257 @ 186,543: 29x13 +#1258 @ 596,354: 13x10 +#1259 @ 824,705: 28x16 +#1260 @ 468,614: 25x20 +#1261 @ 542,10: 28x18 +#1262 @ 231,942: 18x29 +#1263 @ 979,39: 12x13 +#1264 @ 345,77: 16x25 +#1265 @ 715,127: 14x28 +#1266 @ 618,560: 16x16 +#1267 @ 687,397: 22x25 +#1268 @ 880,229: 16x18 +#1269 @ 806,358: 29x16 +#1270 @ 106,846: 23x29 +#1271 @ 61,299: 16x14 +#1272 @ 644,818: 19x22 +#1273 @ 557,157: 29x24 +#1274 @ 29,710: 25x28 +#1275 @ 207,585: 21x27 +#1276 @ 83,715: 26x14 +#1277 @ 325,51: 13x10 +#1278 @ 717,97: 16x12 +#1279 @ 602,139: 26x11 +#1280 @ 26,933: 29x12 +#1281 @ 815,755: 13x22 +#1282 @ 786,950: 23x21 #1283 @ 403,978: 29x19 \ No newline at end of file diff --git a/2018/3rdDay/challenge2/Program.cs b/2018/3rdDay/challenge2/Program.cs index 7682c50..4a89819 100644 --- a/2018/3rdDay/challenge2/Program.cs +++ b/2018/3rdDay/challenge2/Program.cs @@ -1,115 +1,115 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.IO; - -namespace challenge2 { - class Program { - static string[] Lines {get; set;} - static List Claims {get; set;} - - static void Main(string[] args) { - Claims = new List(); - Console.WriteLine("Reading input.txt"); - Lines = File.ReadAllLines("./input.txt"); - foreach (string line in Lines) { - Claim current = new Claim(line); - Claims.Add(current); - current.Print(); - } - Fabric fabric = new Fabric(Claims); - Console.WriteLine("Found ID: " + fabric.CalculateOverlaps()); - } - - public static void printArray(string[] arr) { - foreach (string str in arr) { - Console.WriteLine(str); - } - } - } - - class Claim { - public int ID {get; set;} - public int X {get; set;} - public int Y {get; set;} - public int W {get; set;} - public int H {get; set;} - public string Source {get; set;} - - public Claim(string source) { - this.Source = source; - ParseSource(); - } - - private void ParseSource() { - Console.WriteLine("Parsing: " + this.Source); - string[] source = this.Source.Split('#'); - string[] idAndRest = source[1].Split('@'); - this.ID = int.Parse(idAndRest[0]); - string[] fromSides = idAndRest[1].Split(','); - string[] afterColon = fromSides[1].Split(':'); - this.X = int.Parse(fromSides[0]); - this.Y = int.Parse(afterColon[0]); - string[] dimensions = afterColon[1].Split('x'); - this.W = int.Parse(dimensions[0]); - this.H = int.Parse(dimensions[1]); - } - - public void Print() { - Console.WriteLine("Claim ID: " + this.ID); - Console.WriteLine("X, Y: " + this.X + ',' + this.Y); - Console.WriteLine("Dimensions: " + this.W + 'x' + this.H); - Console.WriteLine("Parsed from source: " + this.Source); - Console.WriteLine(); - } - } - - class Fabric { - public List Claims; - - private int[,] Board; - - public Fabric(List claims) { - this.Claims = claims; - this.Board = new int[10000, 10000]; - - for (int i = 0; i < 10000; i++) { - for (int j = 0; j < 10000; j++) { - Board[i, j] = 0; - } - } - } - - public int CalculateOverlaps() { - int overlaps = 0; - - foreach (Claim claim in this.Claims) { - for (int x = claim.X; x < claim.X + claim.W; x++) { - for (int y = claim.Y; y < claim.Y + claim.H; y++) { - Board[x, y]++; - } - } - } - - foreach (Claim claim in this.Claims) { - bool isValid = true; - Console.WriteLine("Processing claim ID: " + claim.ID); - - for (int x = claim.X; x < claim.X + claim.W; x++) { - for (int y = claim.Y; y < claim.Y + claim.H; y++) { - if(this.Board[x,y] != 1) { - isValid = false; - break; - } - } - if (!isValid) break; - } - if (isValid) { - overlaps = claim.ID; - break; - } - } - return overlaps; - } - } -} +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; + +namespace challenge2 { + class Program { + static string[] Lines {get; set;} + static List Claims {get; set;} + + static void Main(string[] args) { + Claims = new List(); + Console.WriteLine("Reading input.txt"); + Lines = File.ReadAllLines("./input.txt"); + foreach (string line in Lines) { + Claim current = new Claim(line); + Claims.Add(current); + current.Print(); + } + Fabric fabric = new Fabric(Claims); + Console.WriteLine("Found ID: " + fabric.CalculateOverlaps()); + } + + public static void printArray(string[] arr) { + foreach (string str in arr) { + Console.WriteLine(str); + } + } + } + + class Claim { + public int ID {get; set;} + public int X {get; set;} + public int Y {get; set;} + public int W {get; set;} + public int H {get; set;} + public string Source {get; set;} + + public Claim(string source) { + this.Source = source; + ParseSource(); + } + + private void ParseSource() { + Console.WriteLine("Parsing: " + this.Source); + string[] source = this.Source.Split('#'); + string[] idAndRest = source[1].Split('@'); + this.ID = int.Parse(idAndRest[0]); + string[] fromSides = idAndRest[1].Split(','); + string[] afterColon = fromSides[1].Split(':'); + this.X = int.Parse(fromSides[0]); + this.Y = int.Parse(afterColon[0]); + string[] dimensions = afterColon[1].Split('x'); + this.W = int.Parse(dimensions[0]); + this.H = int.Parse(dimensions[1]); + } + + public void Print() { + Console.WriteLine("Claim ID: " + this.ID); + Console.WriteLine("X, Y: " + this.X + ',' + this.Y); + Console.WriteLine("Dimensions: " + this.W + 'x' + this.H); + Console.WriteLine("Parsed from source: " + this.Source); + Console.WriteLine(); + } + } + + class Fabric { + public List Claims; + + private int[,] Board; + + public Fabric(List claims) { + this.Claims = claims; + this.Board = new int[10000, 10000]; + + for (int i = 0; i < 10000; i++) { + for (int j = 0; j < 10000; j++) { + Board[i, j] = 0; + } + } + } + + public int CalculateOverlaps() { + int overlaps = 0; + + foreach (Claim claim in this.Claims) { + for (int x = claim.X; x < claim.X + claim.W; x++) { + for (int y = claim.Y; y < claim.Y + claim.H; y++) { + Board[x, y]++; + } + } + } + + foreach (Claim claim in this.Claims) { + bool isValid = true; + Console.WriteLine("Processing claim ID: " + claim.ID); + + for (int x = claim.X; x < claim.X + claim.W; x++) { + for (int y = claim.Y; y < claim.Y + claim.H; y++) { + if(this.Board[x,y] != 1) { + isValid = false; + break; + } + } + if (!isValid) break; + } + if (isValid) { + overlaps = claim.ID; + break; + } + } + return overlaps; + } + } +} diff --git a/2018/3rdDay/challenge2/challenge.txt b/2018/3rdDay/challenge2/challenge.txt index b75bc6e..32d6b40 100644 --- a/2018/3rdDay/challenge2/challenge.txt +++ b/2018/3rdDay/challenge2/challenge.txt @@ -1,11 +1,11 @@ - -Your puzzle answer was 109143. - -The first half of this puzzle is complete! It provides one gold star: * - ---- Part Two --- -Amidst the chaos, you notice that exactly one claim doesn't overlap by even a single square inch of fabric with any other claim. If you can somehow draw attention to it, maybe the Elves will be able to make Santa's suit after all! - -For example, in the claims above, only claim 3 is intact after all claims are made. - + +Your puzzle answer was 109143. + +The first half of this puzzle is complete! It provides one gold star: * + +--- Part Two --- +Amidst the chaos, you notice that exactly one claim doesn't overlap by even a single square inch of fabric with any other claim. If you can somehow draw attention to it, maybe the Elves will be able to make Santa's suit after all! + +For example, in the claims above, only claim 3 is intact after all claims are made. + What is the ID of the only claim that doesn't overlap? \ No newline at end of file diff --git a/2018/3rdDay/challenge2/challenge2.csproj b/2018/3rdDay/challenge2/challenge2.csproj index 23df604..e5e0e16 100644 --- a/2018/3rdDay/challenge2/challenge2.csproj +++ b/2018/3rdDay/challenge2/challenge2.csproj @@ -1,8 +1,8 @@ - - - - Exe - netcoreapp2.1 - - - + + + + Exe + netcoreapp2.1 + + + diff --git a/2018/3rdDay/challenge2/input.txt b/2018/3rdDay/challenge2/input.txt index 0a0580f..df117e2 100644 --- a/2018/3rdDay/challenge2/input.txt +++ b/2018/3rdDay/challenge2/input.txt @@ -1,1283 +1,1283 @@ -#1 @ 179,662: 16x27 -#2 @ 609,961: 25x21 -#3 @ 73,376: 23x28 -#4 @ 599,405: 26x25 -#5 @ 28,933: 19x29 -#6 @ 441,852: 29x23 -#7 @ 512,396: 15x17 -#8 @ 702,415: 14x10 -#9 @ 730,587: 27x21 -#10 @ 252,715: 17x27 -#11 @ 541,822: 21x13 -#12 @ 901,802: 12x24 -#13 @ 759,349: 15x26 -#14 @ 862,839: 22x25 -#15 @ 862,576: 17x16 -#16 @ 265,967: 11x25 -#17 @ 124,444: 23x25 -#18 @ 971,141: 25x15 -#19 @ 864,246: 22x27 -#20 @ 841,34: 17x15 -#21 @ 173,462: 19x22 -#22 @ 122,22: 27x20 -#23 @ 327,178: 12x19 -#24 @ 576,663: 21x10 -#25 @ 410,958: 11x12 -#26 @ 676,145: 14x10 -#27 @ 177,676: 10x22 -#28 @ 663,60: 23x15 -#29 @ 686,352: 24x19 -#30 @ 68,618: 18x12 -#31 @ 20,643: 19x18 -#32 @ 683,128: 19x22 -#33 @ 88,45: 28x25 -#34 @ 442,736: 20x29 -#35 @ 824,825: 13x13 -#36 @ 668,253: 25x27 -#37 @ 254,404: 27x25 -#38 @ 712,260: 26x17 -#39 @ 588,470: 21x20 -#40 @ 114,148: 11x26 -#41 @ 242,409: 17x26 -#42 @ 342,481: 24x21 -#43 @ 104,187: 27x12 -#44 @ 440,919: 13x22 -#45 @ 177,312: 22x15 -#46 @ 249,925: 29x15 -#47 @ 376,750: 19x20 -#48 @ 157,760: 21x21 -#49 @ 760,833: 28x15 -#50 @ 955,909: 26x12 -#51 @ 941,896: 17x25 -#52 @ 154,33: 29x20 -#53 @ 236,275: 27x29 -#54 @ 848,800: 11x18 -#55 @ 950,130: 28x24 -#56 @ 351,564: 21x11 -#57 @ 32,70: 17x11 -#58 @ 215,219: 22x18 -#59 @ 816,714: 15x21 -#60 @ 738,879: 16x27 -#61 @ 218,896: 26x27 -#62 @ 953,363: 16x19 -#63 @ 836,508: 28x13 -#64 @ 839,14: 12x21 -#65 @ 831,683: 24x15 -#66 @ 809,698: 12x26 -#67 @ 887,296: 23x11 -#68 @ 770,771: 29x21 -#69 @ 383,762: 14x25 -#70 @ 542,962: 28x14 -#71 @ 236,286: 18x10 -#72 @ 517,363: 12x18 -#73 @ 171,753: 16x17 -#74 @ 272,910: 18x20 -#75 @ 658,202: 25x14 -#76 @ 534,906: 18x25 -#77 @ 468,342: 27x12 -#78 @ 426,350: 28x26 -#79 @ 277,968: 12x20 -#80 @ 390,877: 10x27 -#81 @ 859,603: 26x12 -#82 @ 491,937: 13x16 -#83 @ 19,883: 20x15 -#84 @ 47,400: 27x15 -#85 @ 627,191: 14x26 -#86 @ 164,326: 17x28 -#87 @ 768,216: 20x24 -#88 @ 947,765: 15x19 -#89 @ 917,142: 11x20 -#90 @ 351,87: 24x29 -#91 @ 872,451: 29x10 -#92 @ 749,900: 20x26 -#93 @ 935,30: 25x12 -#94 @ 221,943: 15x10 -#95 @ 344,602: 12x24 -#96 @ 677,578: 16x26 -#97 @ 452,606: 21x10 -#98 @ 2,722: 19x22 -#99 @ 310,605: 17x29 -#100 @ 262,390: 26x23 -#101 @ 640,499: 19x13 -#102 @ 852,924: 26x16 -#103 @ 309,81: 20x16 -#104 @ 108,918: 18x11 -#105 @ 249,160: 9x17 -#106 @ 26,62: 26x25 -#107 @ 407,587: 14x24 -#108 @ 956,98: 18x27 -#109 @ 944,459: 16x26 -#110 @ 209,699: 28x25 -#111 @ 710,856: 12x22 -#112 @ 744,288: 27x25 -#113 @ 489,344: 20x21 -#114 @ 438,488: 12x16 -#115 @ 884,95: 15x22 -#116 @ 60,617: 24x24 -#117 @ 957,191: 10x11 -#118 @ 315,527: 22x23 -#119 @ 199,117: 18x26 -#120 @ 255,642: 10x15 -#121 @ 957,962: 11x14 -#122 @ 193,131: 10x13 -#123 @ 2,931: 21x11 -#124 @ 36,961: 27x23 -#125 @ 863,38: 29x14 -#126 @ 31,731: 13x15 -#127 @ 357,741: 28x15 -#128 @ 209,354: 27x23 -#129 @ 524,8: 22x20 -#130 @ 302,247: 15x12 -#131 @ 76,857: 10x16 -#132 @ 531,502: 24x10 -#133 @ 559,962: 17x15 -#134 @ 233,710: 29x15 -#135 @ 762,70: 15x24 -#136 @ 934,186: 25x20 -#137 @ 808,252: 29x29 -#138 @ 550,694: 22x19 -#139 @ 265,368: 23x25 -#140 @ 640,637: 11x14 -#141 @ 736,484: 15x10 -#142 @ 946,571: 27x17 -#143 @ 332,174: 20x20 -#144 @ 797,775: 11x23 -#145 @ 684,63: 22x13 -#146 @ 932,36: 20x12 -#147 @ 375,882: 19x17 -#148 @ 656,227: 12x20 -#149 @ 455,223: 12x15 -#150 @ 732,619: 20x20 -#151 @ 292,615: 19x29 -#152 @ 615,0: 15x28 -#153 @ 463,174: 16x15 -#154 @ 322,456: 27x15 -#155 @ 352,224: 10x15 -#156 @ 966,673: 29x21 -#157 @ 527,42: 23x27 -#158 @ 632,775: 15x15 -#159 @ 871,805: 22x15 -#160 @ 667,240: 15x27 -#161 @ 607,880: 25x25 -#162 @ 447,44: 10x21 -#163 @ 445,126: 17x15 -#164 @ 844,933: 11x29 -#165 @ 471,423: 24x27 -#166 @ 715,867: 16x16 -#167 @ 778,279: 10x18 -#168 @ 490,630: 23x16 -#169 @ 687,301: 28x13 -#170 @ 476,432: 11x18 -#171 @ 123,794: 23x26 -#172 @ 738,256: 22x25 -#173 @ 336,60: 26x28 -#174 @ 698,766: 4x10 -#175 @ 511,10: 13x10 -#176 @ 580,702: 18x20 -#177 @ 218,620: 13x22 -#178 @ 476,488: 13x25 -#179 @ 154,617: 14x29 -#180 @ 620,563: 11x6 -#181 @ 168,433: 28x10 -#182 @ 60,685: 10x24 -#183 @ 880,680: 18x18 -#184 @ 859,616: 17x25 -#185 @ 114,80: 26x19 -#186 @ 236,868: 25x10 -#187 @ 135,13: 26x29 -#188 @ 810,677: 22x10 -#189 @ 938,932: 16x14 -#190 @ 427,434: 14x11 -#191 @ 83,731: 29x23 -#192 @ 960,148: 25x16 -#193 @ 577,669: 24x16 -#194 @ 67,267: 18x29 -#195 @ 603,928: 15x26 -#196 @ 881,39: 29x11 -#197 @ 963,957: 19x23 -#198 @ 891,868: 12x13 -#199 @ 799,34: 14x12 -#200 @ 529,785: 24x27 -#201 @ 596,936: 12x21 -#202 @ 832,289: 13x10 -#203 @ 664,232: 17x22 -#204 @ 171,345: 24x26 -#205 @ 283,521: 28x22 -#206 @ 702,469: 14x10 -#207 @ 490,531: 21x27 -#208 @ 411,388: 26x21 -#209 @ 120,780: 13x28 -#210 @ 711,391: 24x12 -#211 @ 347,848: 22x13 -#212 @ 956,507: 20x18 -#213 @ 844,696: 20x26 -#214 @ 550,230: 28x25 -#215 @ 71,625: 14x26 -#216 @ 701,305: 29x23 -#217 @ 629,488: 21x14 -#218 @ 966,362: 10x26 -#219 @ 802,763: 17x19 -#220 @ 631,858: 22x17 -#221 @ 175,656: 24x26 -#222 @ 822,185: 17x15 -#223 @ 110,390: 11x19 -#224 @ 328,13: 28x26 -#225 @ 479,262: 22x12 -#226 @ 178,796: 25x25 -#227 @ 23,782: 18x21 -#228 @ 597,578: 10x12 -#229 @ 692,683: 26x29 -#230 @ 268,713: 21x28 -#231 @ 112,197: 21x15 -#232 @ 619,282: 21x19 -#233 @ 765,56: 21x29 -#234 @ 96,163: 29x11 -#235 @ 229,927: 18x29 -#236 @ 588,775: 27x29 -#237 @ 498,293: 23x15 -#238 @ 311,166: 14x25 -#239 @ 134,371: 27x28 -#240 @ 450,173: 24x16 -#241 @ 700,398: 28x12 -#242 @ 216,282: 25x10 -#243 @ 886,817: 16x15 -#244 @ 291,967: 29x25 -#245 @ 406,283: 14x20 -#246 @ 601,779: 26x28 -#247 @ 767,213: 20x10 -#248 @ 802,36: 15x17 -#249 @ 264,361: 19x27 -#250 @ 565,236: 23x28 -#251 @ 260,394: 21x18 -#252 @ 506,427: 17x26 -#253 @ 479,946: 28x10 -#254 @ 463,505: 24x19 -#255 @ 42,314: 27x27 -#256 @ 901,709: 26x14 -#257 @ 716,194: 21x29 -#258 @ 404,285: 18x21 -#259 @ 838,243: 29x28 -#260 @ 276,510: 23x11 -#261 @ 66,605: 29x16 -#262 @ 225,3: 26x16 -#263 @ 451,355: 22x21 -#264 @ 423,41: 19x17 -#265 @ 942,912: 14x11 -#266 @ 915,613: 22x11 -#267 @ 316,786: 25x24 -#268 @ 640,185: 24x17 -#269 @ 4,564: 29x18 -#270 @ 535,912: 21x16 -#271 @ 95,633: 13x17 -#272 @ 517,170: 21x19 -#273 @ 857,812: 14x23 -#274 @ 682,515: 12x21 -#275 @ 615,847: 22x14 -#276 @ 547,47: 26x18 -#277 @ 461,552: 19x28 -#278 @ 866,29: 28x28 -#279 @ 725,878: 17x15 -#280 @ 604,454: 19x24 -#281 @ 529,452: 28x12 -#282 @ 731,633: 23x22 -#283 @ 505,447: 27x18 -#284 @ 75,694: 12x16 -#285 @ 212,909: 29x13 -#286 @ 96,630: 15x29 -#287 @ 168,34: 28x18 -#288 @ 935,481: 23x26 -#289 @ 892,235: 27x16 -#290 @ 942,945: 13x15 -#291 @ 759,221: 13x25 -#292 @ 604,339: 10x27 -#293 @ 699,313: 17x23 -#294 @ 319,716: 22x24 -#295 @ 718,219: 26x26 -#296 @ 11,917: 13x19 -#297 @ 666,632: 13x24 -#298 @ 85,791: 25x29 -#299 @ 179,204: 20x17 -#300 @ 292,234: 27x11 -#301 @ 527,488: 15x19 -#302 @ 651,158: 22x10 -#303 @ 727,98: 25x25 -#304 @ 452,9: 23x26 -#305 @ 520,386: 23x22 -#306 @ 755,196: 26x11 -#307 @ 321,107: 13x25 -#308 @ 654,563: 20x25 -#309 @ 188,228: 11x23 -#310 @ 416,355: 22x19 -#311 @ 679,567: 12x8 -#312 @ 319,282: 17x27 -#313 @ 276,620: 23x23 -#314 @ 50,242: 11x19 -#315 @ 759,918: 23x19 -#316 @ 599,84: 18x21 -#317 @ 675,230: 15x28 -#318 @ 96,480: 13x13 -#319 @ 386,254: 24x19 -#320 @ 682,199: 22x19 -#321 @ 14,819: 12x14 -#322 @ 231,451: 19x17 -#323 @ 36,396: 27x13 -#324 @ 459,917: 18x26 -#325 @ 149,874: 11x10 -#326 @ 182,325: 11x25 -#327 @ 142,279: 17x12 -#328 @ 954,276: 27x24 -#329 @ 512,263: 16x19 -#330 @ 446,841: 25x25 -#331 @ 79,247: 15x11 -#332 @ 378,881: 20x17 -#333 @ 958,324: 18x22 -#334 @ 583,501: 13x23 -#335 @ 966,133: 16x20 -#336 @ 236,395: 19x19 -#337 @ 588,910: 18x10 -#338 @ 35,406: 20x25 -#339 @ 326,404: 20x29 -#340 @ 293,761: 16x24 -#341 @ 420,371: 5x5 -#342 @ 694,764: 12x17 -#343 @ 617,15: 10x14 -#344 @ 859,915: 11x15 -#345 @ 522,430: 20x17 -#346 @ 727,180: 15x14 -#347 @ 208,679: 11x16 -#348 @ 523,670: 28x22 -#349 @ 512,436: 15x13 -#350 @ 170,11: 25x18 -#351 @ 353,588: 23x12 -#352 @ 201,605: 26x12 -#353 @ 561,681: 15x12 -#354 @ 500,357: 12x12 -#355 @ 813,438: 26x26 -#356 @ 759,853: 14x28 -#357 @ 152,737: 27x27 -#358 @ 646,721: 11x13 -#359 @ 588,446: 15x21 -#360 @ 713,927: 21x28 -#361 @ 189,43: 21x29 -#362 @ 655,722: 29x22 -#363 @ 614,184: 17x14 -#364 @ 465,10: 12x19 -#365 @ 493,612: 11x24 -#366 @ 594,442: 13x18 -#367 @ 392,893: 11x16 -#368 @ 77,740: 12x21 -#369 @ 628,138: 12x27 -#370 @ 173,500: 20x11 -#371 @ 363,587: 13x27 -#372 @ 852,276: 25x19 -#373 @ 410,949: 13x10 -#374 @ 359,948: 25x25 -#375 @ 546,677: 11x29 -#376 @ 854,582: 23x19 -#377 @ 761,145: 11x10 -#378 @ 300,888: 22x17 -#379 @ 284,791: 27x16 -#380 @ 758,255: 13x20 -#381 @ 453,16: 21x16 -#382 @ 525,183: 21x22 -#383 @ 114,307: 18x15 -#384 @ 556,225: 28x20 -#385 @ 463,19: 19x13 -#386 @ 601,579: 24x14 -#387 @ 314,870: 19x21 -#388 @ 541,438: 22x17 -#389 @ 704,543: 26x11 -#390 @ 420,537: 21x22 -#391 @ 728,211: 10x17 -#392 @ 232,822: 25x16 -#393 @ 482,339: 16x17 -#394 @ 460,129: 22x18 -#395 @ 223,181: 24x28 -#396 @ 270,740: 25x24 -#397 @ 220,22: 16x17 -#398 @ 416,414: 15x21 -#399 @ 391,524: 10x20 -#400 @ 448,282: 12x29 -#401 @ 247,862: 16x13 -#402 @ 967,527: 17x20 -#403 @ 279,637: 12x15 -#404 @ 792,166: 16x29 -#405 @ 597,902: 21x12 -#406 @ 375,729: 11x13 -#407 @ 404,395: 15x27 -#408 @ 852,581: 27x17 -#409 @ 97,859: 14x19 -#410 @ 867,477: 23x24 -#411 @ 419,139: 20x23 -#412 @ 395,956: 23x15 -#413 @ 498,388: 22x24 -#414 @ 880,814: 13x19 -#415 @ 845,417: 12x25 -#416 @ 498,357: 27x29 -#417 @ 366,739: 24x29 -#418 @ 86,66: 20x23 -#419 @ 619,871: 17x4 -#420 @ 896,449: 25x24 -#421 @ 414,64: 13x27 -#422 @ 308,77: 27x10 -#423 @ 105,927: 15x12 -#424 @ 213,110: 18x26 -#425 @ 912,820: 12x15 -#426 @ 755,643: 22x13 -#427 @ 850,256: 17x12 -#428 @ 581,456: 18x29 -#429 @ 881,461: 28x22 -#430 @ 204,903: 27x19 -#431 @ 12,578: 22x13 -#432 @ 69,762: 22x27 -#433 @ 140,879: 15x18 -#434 @ 548,924: 20x23 -#435 @ 256,293: 28x22 -#436 @ 583,438: 29x27 -#437 @ 31,936: 17x11 -#438 @ 53,289: 23x26 -#439 @ 753,871: 16x27 -#440 @ 64,856: 21x28 -#441 @ 832,962: 11x15 -#442 @ 305,969: 17x29 -#443 @ 562,103: 24x24 -#444 @ 243,231: 18x11 -#445 @ 210,19: 10x29 -#446 @ 62,702: 28x18 -#447 @ 167,127: 13x29 -#448 @ 751,334: 12x20 -#449 @ 404,236: 27x28 -#450 @ 869,107: 20x18 -#451 @ 167,687: 22x22 -#452 @ 79,449: 29x19 -#453 @ 821,288: 15x26 -#454 @ 235,926: 18x10 -#455 @ 902,705: 16x18 -#456 @ 777,189: 23x25 -#457 @ 560,141: 23x17 -#458 @ 711,900: 28x12 -#459 @ 650,864: 23x19 -#460 @ 965,91: 25x29 -#461 @ 366,589: 24x18 -#462 @ 262,423: 25x21 -#463 @ 775,176: 25x10 -#464 @ 634,899: 24x15 -#465 @ 330,489: 21x16 -#466 @ 711,668: 28x14 -#467 @ 283,699: 17x15 -#468 @ 12,741: 14x11 -#469 @ 10,532: 17x19 -#470 @ 763,148: 12x17 -#471 @ 630,884: 13x26 -#472 @ 39,381: 12x19 -#473 @ 313,382: 4x17 -#474 @ 617,862: 22x18 -#475 @ 113,120: 20x21 -#476 @ 913,322: 26x17 -#477 @ 197,33: 22x15 -#478 @ 760,220: 22x29 -#479 @ 395,195: 17x4 -#480 @ 25,469: 16x19 -#481 @ 289,620: 13x20 -#482 @ 41,395: 15x21 -#483 @ 50,148: 24x22 -#484 @ 787,117: 29x24 -#485 @ 456,623: 28x15 -#486 @ 938,37: 19x10 -#487 @ 475,340: 16x22 -#488 @ 221,808: 28x22 -#489 @ 387,452: 17x19 -#490 @ 835,789: 21x23 -#491 @ 153,456: 29x20 -#492 @ 462,344: 19x13 -#493 @ 927,8: 16x27 -#494 @ 172,734: 19x15 -#495 @ 562,52: 27x15 -#496 @ 781,826: 19x26 -#497 @ 204,123: 17x13 -#498 @ 839,514: 26x25 -#499 @ 324,417: 29x11 -#500 @ 746,828: 19x11 -#501 @ 737,580: 18x14 -#502 @ 802,22: 28x20 -#503 @ 974,392: 19x17 -#504 @ 426,55: 16x14 -#505 @ 845,795: 19x13 -#506 @ 261,102: 10x27 -#507 @ 415,400: 14x22 -#508 @ 62,0: 19x29 -#509 @ 643,429: 28x10 -#510 @ 713,121: 18x19 -#511 @ 829,23: 17x16 -#512 @ 268,80: 10x11 -#513 @ 826,654: 28x29 -#514 @ 73,96: 19x18 -#515 @ 696,417: 22x13 -#516 @ 253,437: 26x29 -#517 @ 842,523: 16x10 -#518 @ 274,960: 28x10 -#519 @ 410,317: 16x22 -#520 @ 334,981: 26x18 -#521 @ 183,480: 25x29 -#522 @ 794,659: 26x26 -#523 @ 416,188: 25x10 -#524 @ 735,400: 17x21 -#525 @ 836,779: 15x26 -#526 @ 913,298: 12x15 -#527 @ 28,507: 10x18 -#528 @ 596,697: 20x20 -#529 @ 322,163: 12x20 -#530 @ 626,94: 21x10 -#531 @ 39,391: 14x10 -#532 @ 894,108: 11x29 -#533 @ 384,173: 25x18 -#534 @ 557,974: 11x23 -#535 @ 780,805: 10x11 -#536 @ 448,734: 27x14 -#537 @ 68,349: 27x17 -#538 @ 215,700: 15x13 -#539 @ 921,309: 26x16 -#540 @ 312,665: 15x3 -#541 @ 301,946: 16x22 -#542 @ 798,747: 11x22 -#543 @ 850,675: 28x28 -#544 @ 438,425: 11x18 -#545 @ 477,537: 16x25 -#546 @ 869,878: 22x22 -#547 @ 830,106: 26x15 -#548 @ 16,880: 23x28 -#549 @ 89,598: 25x10 -#550 @ 911,746: 25x20 -#551 @ 132,268: 27x14 -#552 @ 107,54: 22x16 -#553 @ 617,920: 17x25 -#554 @ 888,796: 17x17 -#555 @ 911,21: 21x13 -#556 @ 901,126: 12x28 -#557 @ 501,378: 25x26 -#558 @ 231,749: 28x10 -#559 @ 534,889: 12x24 -#560 @ 388,923: 17x14 -#561 @ 113,84: 15x28 -#562 @ 924,424: 19x27 -#563 @ 669,933: 29x22 -#564 @ 317,796: 22x24 -#565 @ 149,894: 18x11 -#566 @ 815,914: 21x17 -#567 @ 686,540: 28x10 -#568 @ 531,331: 20x24 -#569 @ 459,576: 15x28 -#570 @ 127,520: 15x24 -#571 @ 466,572: 13x26 -#572 @ 935,555: 18x19 -#573 @ 461,946: 12x20 -#574 @ 918,162: 11x12 -#575 @ 279,305: 21x15 -#576 @ 650,714: 15x13 -#577 @ 486,776: 12x27 -#578 @ 81,253: 20x17 -#579 @ 906,18: 22x14 -#580 @ 306,26: 16x16 -#581 @ 184,724: 17x28 -#582 @ 751,225: 15x10 -#583 @ 26,783: 21x11 -#584 @ 103,41: 21x26 -#585 @ 283,5: 12x24 -#586 @ 733,375: 13x27 -#587 @ 193,973: 11x21 -#588 @ 47,306: 19x14 -#589 @ 964,124: 11x19 -#590 @ 856,321: 19x12 -#591 @ 437,655: 29x14 -#592 @ 368,437: 25x24 -#593 @ 537,154: 28x17 -#594 @ 574,451: 11x13 -#595 @ 963,342: 21x26 -#596 @ 250,492: 22x18 -#597 @ 962,740: 22x14 -#598 @ 697,784: 29x22 -#599 @ 153,323: 23x23 -#600 @ 534,713: 13x12 -#601 @ 75,73: 22x18 -#602 @ 166,755: 15x12 -#603 @ 273,622: 22x12 -#604 @ 660,432: 10x24 -#605 @ 119,965: 25x25 -#606 @ 751,294: 28x14 -#607 @ 676,358: 13x11 -#608 @ 204,588: 17x29 -#609 @ 792,828: 21x14 -#610 @ 163,141: 27x12 -#611 @ 159,33: 22x19 -#612 @ 158,364: 13x15 -#613 @ 711,929: 16x14 -#614 @ 811,654: 18x29 -#615 @ 903,828: 24x20 -#616 @ 323,111: 23x26 -#617 @ 891,258: 28x28 -#618 @ 551,826: 25x12 -#619 @ 660,935: 29x19 -#620 @ 41,27: 28x19 -#621 @ 590,491: 26x24 -#622 @ 174,31: 10x25 -#623 @ 563,817: 21x25 -#624 @ 961,746: 13x27 -#625 @ 599,403: 13x11 -#626 @ 852,661: 22x27 -#627 @ 84,473: 18x19 -#628 @ 580,98: 28x27 -#629 @ 138,506: 28x15 -#630 @ 981,544: 16x26 -#631 @ 418,908: 23x24 -#632 @ 371,926: 22x25 -#633 @ 701,291: 11x20 -#634 @ 66,889: 28x25 -#635 @ 641,689: 14x26 -#636 @ 177,960: 10x16 -#637 @ 60,39: 20x18 -#638 @ 378,445: 14x25 -#639 @ 113,794: 17x16 -#640 @ 197,627: 22x16 -#641 @ 324,530: 12x25 -#642 @ 8,206: 18x29 -#643 @ 359,893: 23x15 -#644 @ 795,198: 19x17 -#645 @ 239,900: 12x20 -#646 @ 504,343: 19x10 -#647 @ 708,677: 29x10 -#648 @ 63,697: 14x12 -#649 @ 403,203: 25x18 -#650 @ 305,183: 16x18 -#651 @ 609,447: 20x22 -#652 @ 508,394: 16x29 -#653 @ 178,144: 29x27 -#654 @ 870,490: 23x19 -#655 @ 130,855: 27x14 -#656 @ 333,563: 25x14 -#657 @ 862,252: 18x16 -#658 @ 40,384: 20x29 -#659 @ 639,299: 13x10 -#660 @ 869,856: 12x23 -#661 @ 35,495: 13x28 -#662 @ 545,322: 16x26 -#663 @ 671,566: 11x12 -#664 @ 342,10: 10x17 -#665 @ 932,940: 21x14 -#666 @ 726,480: 11x11 -#667 @ 249,632: 17x21 -#668 @ 939,830: 11x14 -#669 @ 812,241: 19x25 -#670 @ 739,641: 15x21 -#671 @ 307,873: 21x25 -#672 @ 845,687: 13x11 -#673 @ 953,676: 26x17 -#674 @ 137,960: 26x13 -#675 @ 853,498: 29x13 -#676 @ 396,599: 17x17 -#677 @ 431,839: 27x27 -#678 @ 745,290: 23x16 -#679 @ 336,849: 12x23 -#680 @ 852,492: 28x15 -#681 @ 467,781: 25x23 -#682 @ 525,668: 18x15 -#683 @ 941,189: 25x24 -#684 @ 130,323: 17x26 -#685 @ 410,612: 12x20 -#686 @ 967,499: 13x23 -#687 @ 947,263: 16x22 -#688 @ 158,434: 13x13 -#689 @ 920,298: 13x15 -#690 @ 361,415: 16x21 -#691 @ 302,600: 21x20 -#692 @ 65,356: 20x24 -#693 @ 855,427: 13x12 -#694 @ 877,366: 10x10 -#695 @ 138,415: 20x14 -#696 @ 818,653: 27x12 -#697 @ 829,540: 15x29 -#698 @ 636,121: 19x28 -#699 @ 324,960: 16x23 -#700 @ 680,614: 10x11 -#701 @ 380,819: 21x21 -#702 @ 873,107: 11x15 -#703 @ 42,644: 11x17 -#704 @ 62,860: 17x21 -#705 @ 728,704: 27x27 -#706 @ 604,488: 17x25 -#707 @ 418,252: 28x14 -#708 @ 715,408: 28x17 -#709 @ 747,225: 21x13 -#710 @ 124,787: 18x18 -#711 @ 394,376: 29x18 -#712 @ 182,552: 13x16 -#713 @ 129,424: 19x23 -#714 @ 852,526: 18x12 -#715 @ 849,634: 21x19 -#716 @ 220,22: 14x21 -#717 @ 327,870: 18x15 -#718 @ 627,170: 10x13 -#719 @ 108,768: 17x22 -#720 @ 870,303: 11x28 -#721 @ 616,917: 19x18 -#722 @ 118,316: 10x11 -#723 @ 476,355: 12x13 -#724 @ 235,946: 23x12 -#725 @ 310,723: 24x21 -#726 @ 28,483: 14x28 -#727 @ 746,202: 26x12 -#728 @ 736,404: 19x28 -#729 @ 973,143: 21x26 -#730 @ 226,9: 18x24 -#731 @ 717,746: 29x26 -#732 @ 793,668: 28x19 -#733 @ 446,177: 11x25 -#734 @ 86,243: 27x11 -#735 @ 73,13: 15x25 -#736 @ 225,706: 13x13 -#737 @ 852,950: 25x10 -#738 @ 502,427: 13x15 -#739 @ 950,504: 26x17 -#740 @ 761,290: 21x24 -#741 @ 90,378: 28x29 -#742 @ 431,457: 27x13 -#743 @ 196,666: 15x29 -#744 @ 439,105: 10x29 -#745 @ 788,261: 28x10 -#746 @ 947,904: 13x12 -#747 @ 328,973: 17x25 -#748 @ 255,758: 22x26 -#749 @ 320,426: 21x21 -#750 @ 735,258: 16x24 -#751 @ 883,333: 21x25 -#752 @ 5,510: 10x23 -#753 @ 389,972: 20x14 -#754 @ 671,937: 18x10 -#755 @ 728,342: 20x18 -#756 @ 247,617: 26x13 -#757 @ 301,241: 25x19 -#758 @ 971,653: 18x25 -#759 @ 807,30: 25x14 -#760 @ 318,525: 14x12 -#761 @ 640,618: 26x24 -#762 @ 788,253: 25x26 -#763 @ 393,192: 23x12 -#764 @ 522,920: 13x26 -#765 @ 232,204: 14x18 -#766 @ 953,862: 22x25 -#767 @ 41,239: 22x18 -#768 @ 760,535: 11x25 -#769 @ 84,868: 28x26 -#770 @ 920,703: 19x26 -#771 @ 678,544: 27x17 -#772 @ 814,591: 18x11 -#773 @ 15,181: 18x10 -#774 @ 725,661: 22x11 -#775 @ 241,691: 18x17 -#776 @ 84,81: 14x29 -#777 @ 909,818: 14x23 -#778 @ 357,478: 27x25 -#779 @ 537,878: 24x15 -#780 @ 812,832: 16x18 -#781 @ 528,394: 24x29 -#782 @ 411,603: 15x12 -#783 @ 94,727: 10x16 -#784 @ 968,146: 24x27 -#785 @ 755,195: 22x11 -#786 @ 948,802: 21x13 -#787 @ 509,266: 10x28 -#788 @ 626,463: 21x19 -#789 @ 766,203: 19x22 -#790 @ 450,28: 12x24 -#791 @ 290,589: 25x12 -#792 @ 294,195: 22x28 -#793 @ 481,949: 22x20 -#794 @ 732,708: 25x13 -#795 @ 292,706: 17x20 -#796 @ 502,6: 13x10 -#797 @ 119,382: 29x23 -#798 @ 300,953: 16x22 -#799 @ 978,231: 18x16 -#800 @ 119,409: 23x12 -#801 @ 390,634: 27x13 -#802 @ 958,124: 19x21 -#803 @ 423,437: 27x13 -#804 @ 394,299: 27x19 -#805 @ 973,910: 24x10 -#806 @ 462,133: 29x11 -#807 @ 529,750: 17x15 -#808 @ 80,744: 12x17 -#809 @ 56,99: 19x17 -#810 @ 926,721: 12x28 -#811 @ 916,569: 27x15 -#812 @ 723,376: 13x27 -#813 @ 852,824: 26x23 -#814 @ 953,944: 17x10 -#815 @ 786,937: 28x17 -#816 @ 188,705: 17x24 -#817 @ 543,456: 13x18 -#818 @ 676,918: 20x10 -#819 @ 97,706: 24x29 -#820 @ 722,656: 29x18 -#821 @ 182,328: 24x15 -#822 @ 490,397: 28x20 -#823 @ 247,217: 19x20 -#824 @ 217,592: 12x21 -#825 @ 452,201: 14x25 -#826 @ 348,612: 11x26 -#827 @ 652,935: 22x21 -#828 @ 650,925: 29x21 -#829 @ 495,247: 15x29 -#830 @ 594,561: 20x15 -#831 @ 220,460: 29x25 -#832 @ 642,117: 12x20 -#833 @ 235,533: 24x13 -#834 @ 285,755: 14x11 -#835 @ 739,473: 23x21 -#836 @ 268,387: 20x16 -#837 @ 459,275: 28x10 -#838 @ 493,572: 13x21 -#839 @ 320,720: 18x20 -#840 @ 168,757: 5x6 -#841 @ 496,368: 29x18 -#842 @ 419,45: 15x22 -#843 @ 749,524: 23x19 -#844 @ 413,68: 25x19 -#845 @ 250,698: 16x27 -#846 @ 101,697: 26x13 -#847 @ 968,332: 11x19 -#848 @ 953,137: 19x11 -#849 @ 134,396: 27x19 -#850 @ 891,465: 13x28 -#851 @ 40,931: 24x18 -#852 @ 170,775: 25x10 -#853 @ 187,26: 18x15 -#854 @ 677,28: 19x17 -#855 @ 752,274: 22x16 -#856 @ 217,376: 15x17 -#857 @ 379,249: 15x28 -#858 @ 308,661: 25x16 -#859 @ 514,704: 28x16 -#860 @ 281,235: 26x23 -#861 @ 430,650: 15x28 -#862 @ 784,125: 26x25 -#863 @ 212,123: 19x14 -#864 @ 946,191: 15x8 -#865 @ 405,399: 21x27 -#866 @ 443,484: 19x16 -#867 @ 769,626: 17x25 -#868 @ 119,786: 29x19 -#869 @ 890,20: 26x28 -#870 @ 12,161: 11x24 -#871 @ 957,869: 11x12 -#872 @ 332,736: 28x15 -#873 @ 178,967: 27x10 -#874 @ 323,441: 23x10 -#875 @ 229,436: 28x16 -#876 @ 734,578: 23x17 -#877 @ 433,614: 25x27 -#878 @ 30,160: 28x18 -#879 @ 217,279: 26x21 -#880 @ 621,130: 27x15 -#881 @ 465,601: 26x28 -#882 @ 231,580: 25x11 -#883 @ 300,512: 25x23 -#884 @ 422,258: 22x19 -#885 @ 308,530: 15x13 -#886 @ 164,202: 10x12 -#887 @ 412,181: 18x21 -#888 @ 121,766: 25x18 -#889 @ 177,945: 14x16 -#890 @ 30,162: 13x26 -#891 @ 437,565: 23x27 -#892 @ 454,280: 26x27 -#893 @ 379,526: 23x12 -#894 @ 834,707: 13x5 -#895 @ 859,357: 24x28 -#896 @ 891,303: 16x14 -#897 @ 385,116: 28x20 -#898 @ 53,12: 24x22 -#899 @ 428,979: 24x20 -#900 @ 916,602: 28x17 -#901 @ 19,739: 16x21 -#902 @ 871,32: 18x22 -#903 @ 207,110: 12x16 -#904 @ 932,15: 26x19 -#905 @ 691,232: 11x18 -#906 @ 965,799: 20x20 -#907 @ 241,526: 24x23 -#908 @ 931,915: 18x14 -#909 @ 662,584: 24x14 -#910 @ 30,148: 10x17 -#911 @ 50,466: 24x29 -#912 @ 265,504: 22x10 -#913 @ 59,857: 28x24 -#914 @ 170,780: 18x27 -#915 @ 436,51: 27x12 -#916 @ 921,139: 16x17 -#917 @ 532,377: 16x23 -#918 @ 237,188: 20x27 -#919 @ 672,653: 11x20 -#920 @ 333,546: 13x18 -#921 @ 830,191: 25x27 -#922 @ 745,644: 24x23 -#923 @ 877,371: 17x28 -#924 @ 926,426: 12x19 -#925 @ 731,977: 13x21 -#926 @ 12,122: 14x14 -#927 @ 65,896: 17x28 -#928 @ 126,609: 29x13 -#929 @ 557,244: 24x22 -#930 @ 80,21: 14x24 -#931 @ 725,184: 18x28 -#932 @ 654,181: 18x12 -#933 @ 439,283: 14x21 -#934 @ 974,95: 26x15 -#935 @ 235,9: 10x17 -#936 @ 306,422: 24x21 -#937 @ 383,952: 29x10 -#938 @ 738,201: 23x15 -#939 @ 254,624: 26x19 -#940 @ 421,672: 17x14 -#941 @ 221,751: 12x28 -#942 @ 730,768: 13x18 -#943 @ 342,13: 17x18 -#944 @ 594,639: 24x17 -#945 @ 127,323: 16x12 -#946 @ 861,701: 13x10 -#947 @ 696,541: 28x24 -#948 @ 804,363: 12x25 -#949 @ 958,296: 29x13 -#950 @ 126,868: 16x20 -#951 @ 916,483: 26x15 -#952 @ 318,52: 19x22 -#953 @ 240,938: 18x11 -#954 @ 849,275: 16x11 -#955 @ 712,412: 27x26 -#956 @ 913,613: 14x15 -#957 @ 756,476: 20x18 -#958 @ 656,906: 14x11 -#959 @ 461,633: 12x26 -#960 @ 398,208: 19x12 -#961 @ 490,333: 14x14 -#962 @ 816,658: 16x27 -#963 @ 579,562: 17x19 -#964 @ 961,552: 16x29 -#965 @ 393,947: 27x19 -#966 @ 68,464: 18x13 -#967 @ 318,537: 21x13 -#968 @ 904,171: 28x13 -#969 @ 629,974: 23x22 -#970 @ 415,366: 15x19 -#971 @ 401,976: 26x13 -#972 @ 18,44: 26x12 -#973 @ 18,804: 27x26 -#974 @ 134,446: 25x22 -#975 @ 158,464: 19x13 -#976 @ 623,437: 9x3 -#977 @ 376,181: 19x15 -#978 @ 738,397: 26x27 -#979 @ 338,207: 20x23 -#980 @ 218,403: 27x17 -#981 @ 530,937: 27x10 -#982 @ 134,958: 11x19 -#983 @ 675,514: 13x17 -#984 @ 891,383: 10x27 -#985 @ 935,748: 15x11 -#986 @ 943,956: 25x22 -#987 @ 18,649: 11x14 -#988 @ 740,243: 21x10 -#989 @ 404,309: 14x22 -#990 @ 134,19: 13x19 -#991 @ 406,381: 14x23 -#992 @ 428,395: 18x13 -#993 @ 121,971: 18x15 -#994 @ 62,794: 25x17 -#995 @ 134,403: 20x13 -#996 @ 347,567: 20x29 -#997 @ 615,358: 3x18 -#998 @ 852,28: 15x16 -#999 @ 259,379: 27x24 -#1000 @ 268,617: 20x20 -#1001 @ 956,657: 20x22 -#1002 @ 924,876: 26x18 -#1003 @ 748,411: 12x14 -#1004 @ 882,249: 29x10 -#1005 @ 979,25: 21x17 -#1006 @ 559,126: 25x28 -#1007 @ 569,712: 28x13 -#1008 @ 623,781: 25x16 -#1009 @ 422,607: 25x10 -#1010 @ 613,904: 11x26 -#1011 @ 128,411: 16x17 -#1012 @ 9,195: 22x12 -#1013 @ 83,362: 14x23 -#1014 @ 617,149: 26x18 -#1015 @ 382,436: 12x21 -#1016 @ 613,855: 23x16 -#1017 @ 956,222: 24x17 -#1018 @ 400,977: 12x15 -#1019 @ 181,333: 18x17 -#1020 @ 610,174: 25x14 -#1021 @ 825,26: 13x24 -#1022 @ 296,778: 26x14 -#1023 @ 465,135: 24x16 -#1024 @ 638,807: 10x14 -#1025 @ 547,697: 19x15 -#1026 @ 103,663: 15x21 -#1027 @ 71,113: 20x28 -#1028 @ 325,498: 27x28 -#1029 @ 525,808: 23x19 -#1030 @ 828,949: 15x27 -#1031 @ 46,699: 11x18 -#1032 @ 676,396: 29x29 -#1033 @ 552,889: 25x27 -#1034 @ 943,865: 15x22 -#1035 @ 480,310: 27x20 -#1036 @ 714,270: 29x17 -#1037 @ 647,711: 18x15 -#1038 @ 590,431: 24x16 -#1039 @ 675,554: 20x26 -#1040 @ 287,13: 17x20 -#1041 @ 886,310: 16x28 -#1042 @ 219,353: 15x22 -#1043 @ 215,12: 14x17 -#1044 @ 307,541: 29x22 -#1045 @ 151,734: 22x22 -#1046 @ 517,785: 14x24 -#1047 @ 617,89: 15x26 -#1048 @ 726,978: 13x22 -#1049 @ 404,546: 25x29 -#1050 @ 395,372: 23x15 -#1051 @ 249,583: 21x21 -#1052 @ 941,455: 23x15 -#1053 @ 801,651: 19x11 -#1054 @ 186,120: 10x22 -#1055 @ 562,177: 11x10 -#1056 @ 504,441: 14x29 -#1057 @ 401,274: 11x16 -#1058 @ 69,463: 24x28 -#1059 @ 409,955: 20x27 -#1060 @ 856,263: 26x20 -#1061 @ 747,821: 23x11 -#1062 @ 243,158: 20x22 -#1063 @ 694,957: 27x10 -#1064 @ 370,666: 29x23 -#1065 @ 74,640: 14x24 -#1066 @ 330,223: 11x21 -#1067 @ 93,659: 27x10 -#1068 @ 916,571: 20x24 -#1069 @ 681,208: 10x26 -#1070 @ 62,125: 27x28 -#1071 @ 163,527: 14x24 -#1072 @ 353,71: 23x22 -#1073 @ 938,1: 12x27 -#1074 @ 561,956: 20x26 -#1075 @ 850,491: 29x23 -#1076 @ 762,231: 16x28 -#1077 @ 391,96: 13x24 -#1078 @ 359,435: 14x17 -#1079 @ 150,326: 15x20 -#1080 @ 615,695: 29x17 -#1081 @ 477,123: 24x14 -#1082 @ 851,99: 12x26 -#1083 @ 328,627: 22x29 -#1084 @ 925,616: 14x23 -#1085 @ 59,897: 23x19 -#1086 @ 152,379: 23x15 -#1087 @ 255,415: 19x22 -#1088 @ 921,476: 19x24 -#1089 @ 946,215: 23x16 -#1090 @ 384,725: 23x11 -#1091 @ 612,353: 18x29 -#1092 @ 443,193: 22x20 -#1093 @ 41,141: 18x10 -#1094 @ 288,10: 24x19 -#1095 @ 623,908: 11x20 -#1096 @ 424,159: 27x19 -#1097 @ 896,878: 16x29 -#1098 @ 466,334: 27x18 -#1099 @ 589,755: 23x25 -#1100 @ 341,592: 13x27 -#1101 @ 220,387: 16x12 -#1102 @ 958,510: 15x9 -#1103 @ 252,435: 11x23 -#1104 @ 143,853: 15x10 -#1105 @ 841,205: 14x29 -#1106 @ 439,456: 11x19 -#1107 @ 937,828: 18x21 -#1108 @ 725,650: 24x26 -#1109 @ 851,222: 19x26 -#1110 @ 248,423: 5x4 -#1111 @ 740,325: 10x23 -#1112 @ 474,960: 20x22 -#1113 @ 943,946: 11x26 -#1114 @ 590,580: 18x25 -#1115 @ 472,370: 19x17 -#1116 @ 804,427: 29x16 -#1117 @ 679,42: 16x14 -#1118 @ 318,272: 12x28 -#1119 @ 372,878: 10x12 -#1120 @ 685,223: 16x26 -#1121 @ 853,19: 23x12 -#1122 @ 532,63: 27x18 -#1123 @ 456,320: 28x19 -#1124 @ 888,828: 25x24 -#1125 @ 348,461: 19x25 -#1126 @ 873,395: 15x13 -#1127 @ 705,451: 27x28 -#1128 @ 730,589: 11x26 -#1129 @ 667,727: 20x24 -#1130 @ 101,130: 24x23 -#1131 @ 563,688: 28x21 -#1132 @ 5,143: 26x19 -#1133 @ 522,671: 19x23 -#1134 @ 481,350: 19x23 -#1135 @ 4,125: 25x18 -#1136 @ 118,943: 26x24 -#1137 @ 371,834: 20x26 -#1138 @ 523,751: 22x10 -#1139 @ 92,181: 18x16 -#1140 @ 904,145: 20x17 -#1141 @ 280,513: 25x28 -#1142 @ 43,61: 17x19 -#1143 @ 602,643: 12x9 -#1144 @ 499,293: 12x10 -#1145 @ 155,345: 28x25 -#1146 @ 572,503: 17x21 -#1147 @ 537,595: 28x12 -#1148 @ 256,841: 18x25 -#1149 @ 621,431: 16x14 -#1150 @ 657,258: 23x12 -#1151 @ 305,436: 24x18 -#1152 @ 907,820: 12x15 -#1153 @ 65,744: 26x23 -#1154 @ 230,861: 18x17 -#1155 @ 333,12: 23x24 -#1156 @ 248,418: 23x27 -#1157 @ 469,958: 19x12 -#1158 @ 35,931: 11x14 -#1159 @ 288,563: 10x29 -#1160 @ 43,378: 14x11 -#1161 @ 88,739: 12x25 -#1162 @ 804,900: 21x29 -#1163 @ 381,76: 22x24 -#1164 @ 30,502: 16x14 -#1165 @ 527,603: 12x14 -#1166 @ 956,209: 15x19 -#1167 @ 960,546: 29x14 -#1168 @ 188,744: 10x19 -#1169 @ 175,744: 12x29 -#1170 @ 133,778: 22x21 -#1171 @ 174,205: 14x20 -#1172 @ 690,959: 21x12 -#1173 @ 619,491: 13x22 -#1174 @ 813,594: 18x12 -#1175 @ 876,607: 29x13 -#1176 @ 900,6: 19x18 -#1177 @ 967,721: 13x25 -#1178 @ 189,232: 19x26 -#1179 @ 827,553: 24x18 -#1180 @ 402,245: 28x17 -#1181 @ 162,896: 14x17 -#1182 @ 914,1: 22x27 -#1183 @ 208,134: 22x19 -#1184 @ 526,331: 29x22 -#1185 @ 145,202: 22x13 -#1186 @ 409,861: 25x13 -#1187 @ 801,730: 28x18 -#1188 @ 624,487: 20x15 -#1189 @ 393,687: 15x29 -#1190 @ 279,958: 15x29 -#1191 @ 653,395: 26x27 -#1192 @ 179,26: 10x19 -#1193 @ 260,76: 29x25 -#1194 @ 859,406: 18x10 -#1195 @ 296,932: 21x23 -#1196 @ 301,974: 16x26 -#1197 @ 727,757: 29x10 -#1198 @ 657,397: 17x20 -#1199 @ 442,937: 18x26 -#1200 @ 29,508: 19x15 -#1201 @ 636,245: 24x12 -#1202 @ 960,402: 28x12 -#1203 @ 139,256: 17x29 -#1204 @ 168,117: 23x15 -#1205 @ 770,785: 27x29 -#1206 @ 752,276: 21x21 -#1207 @ 883,889: 13x13 -#1208 @ 62,918: 21x10 -#1209 @ 163,517: 17x12 -#1210 @ 470,613: 19x11 -#1211 @ 451,661: 26x29 -#1212 @ 211,38: 19x13 -#1213 @ 539,439: 19x28 -#1214 @ 339,229: 23x21 -#1215 @ 591,542: 26x25 -#1216 @ 41,643: 29x21 -#1217 @ 806,823: 14x19 -#1218 @ 628,245: 11x18 -#1219 @ 378,619: 20x19 -#1220 @ 250,444: 14x22 -#1221 @ 713,891: 17x12 -#1222 @ 144,430: 27x21 -#1223 @ 125,200: 27x29 -#1224 @ 525,664: 15x22 -#1225 @ 369,485: 23x27 -#1226 @ 868,564: 29x20 -#1227 @ 642,700: 11x12 -#1228 @ 951,6: 14x25 -#1229 @ 532,331: 24x13 -#1230 @ 937,480: 15x12 -#1231 @ 81,65: 27x25 -#1232 @ 153,263: 11x26 -#1233 @ 970,364: 14x19 -#1234 @ 143,454: 26x27 -#1235 @ 495,574: 7x15 -#1236 @ 850,209: 20x17 -#1237 @ 126,965: 23x29 -#1238 @ 870,675: 23x28 -#1239 @ 308,376: 14x28 -#1240 @ 578,755: 14x24 -#1241 @ 844,481: 23x22 -#1242 @ 734,769: 25x16 -#1243 @ 723,219: 22x27 -#1244 @ 159,695: 23x18 -#1245 @ 754,285: 26x22 -#1246 @ 345,974: 26x23 -#1247 @ 29,69: 27x12 -#1248 @ 181,784: 15x12 -#1249 @ 682,616: 5x6 -#1250 @ 208,28: 27x28 -#1251 @ 665,234: 18x23 -#1252 @ 961,288: 11x22 -#1253 @ 363,57: 19x21 -#1254 @ 662,137: 25x24 -#1255 @ 7,41: 21x15 -#1256 @ 693,784: 12x28 -#1257 @ 186,543: 29x13 -#1258 @ 596,354: 13x10 -#1259 @ 824,705: 28x16 -#1260 @ 468,614: 25x20 -#1261 @ 542,10: 28x18 -#1262 @ 231,942: 18x29 -#1263 @ 979,39: 12x13 -#1264 @ 345,77: 16x25 -#1265 @ 715,127: 14x28 -#1266 @ 618,560: 16x16 -#1267 @ 687,397: 22x25 -#1268 @ 880,229: 16x18 -#1269 @ 806,358: 29x16 -#1270 @ 106,846: 23x29 -#1271 @ 61,299: 16x14 -#1272 @ 644,818: 19x22 -#1273 @ 557,157: 29x24 -#1274 @ 29,710: 25x28 -#1275 @ 207,585: 21x27 -#1276 @ 83,715: 26x14 -#1277 @ 325,51: 13x10 -#1278 @ 717,97: 16x12 -#1279 @ 602,139: 26x11 -#1280 @ 26,933: 29x12 -#1281 @ 815,755: 13x22 -#1282 @ 786,950: 23x21 +#1 @ 179,662: 16x27 +#2 @ 609,961: 25x21 +#3 @ 73,376: 23x28 +#4 @ 599,405: 26x25 +#5 @ 28,933: 19x29 +#6 @ 441,852: 29x23 +#7 @ 512,396: 15x17 +#8 @ 702,415: 14x10 +#9 @ 730,587: 27x21 +#10 @ 252,715: 17x27 +#11 @ 541,822: 21x13 +#12 @ 901,802: 12x24 +#13 @ 759,349: 15x26 +#14 @ 862,839: 22x25 +#15 @ 862,576: 17x16 +#16 @ 265,967: 11x25 +#17 @ 124,444: 23x25 +#18 @ 971,141: 25x15 +#19 @ 864,246: 22x27 +#20 @ 841,34: 17x15 +#21 @ 173,462: 19x22 +#22 @ 122,22: 27x20 +#23 @ 327,178: 12x19 +#24 @ 576,663: 21x10 +#25 @ 410,958: 11x12 +#26 @ 676,145: 14x10 +#27 @ 177,676: 10x22 +#28 @ 663,60: 23x15 +#29 @ 686,352: 24x19 +#30 @ 68,618: 18x12 +#31 @ 20,643: 19x18 +#32 @ 683,128: 19x22 +#33 @ 88,45: 28x25 +#34 @ 442,736: 20x29 +#35 @ 824,825: 13x13 +#36 @ 668,253: 25x27 +#37 @ 254,404: 27x25 +#38 @ 712,260: 26x17 +#39 @ 588,470: 21x20 +#40 @ 114,148: 11x26 +#41 @ 242,409: 17x26 +#42 @ 342,481: 24x21 +#43 @ 104,187: 27x12 +#44 @ 440,919: 13x22 +#45 @ 177,312: 22x15 +#46 @ 249,925: 29x15 +#47 @ 376,750: 19x20 +#48 @ 157,760: 21x21 +#49 @ 760,833: 28x15 +#50 @ 955,909: 26x12 +#51 @ 941,896: 17x25 +#52 @ 154,33: 29x20 +#53 @ 236,275: 27x29 +#54 @ 848,800: 11x18 +#55 @ 950,130: 28x24 +#56 @ 351,564: 21x11 +#57 @ 32,70: 17x11 +#58 @ 215,219: 22x18 +#59 @ 816,714: 15x21 +#60 @ 738,879: 16x27 +#61 @ 218,896: 26x27 +#62 @ 953,363: 16x19 +#63 @ 836,508: 28x13 +#64 @ 839,14: 12x21 +#65 @ 831,683: 24x15 +#66 @ 809,698: 12x26 +#67 @ 887,296: 23x11 +#68 @ 770,771: 29x21 +#69 @ 383,762: 14x25 +#70 @ 542,962: 28x14 +#71 @ 236,286: 18x10 +#72 @ 517,363: 12x18 +#73 @ 171,753: 16x17 +#74 @ 272,910: 18x20 +#75 @ 658,202: 25x14 +#76 @ 534,906: 18x25 +#77 @ 468,342: 27x12 +#78 @ 426,350: 28x26 +#79 @ 277,968: 12x20 +#80 @ 390,877: 10x27 +#81 @ 859,603: 26x12 +#82 @ 491,937: 13x16 +#83 @ 19,883: 20x15 +#84 @ 47,400: 27x15 +#85 @ 627,191: 14x26 +#86 @ 164,326: 17x28 +#87 @ 768,216: 20x24 +#88 @ 947,765: 15x19 +#89 @ 917,142: 11x20 +#90 @ 351,87: 24x29 +#91 @ 872,451: 29x10 +#92 @ 749,900: 20x26 +#93 @ 935,30: 25x12 +#94 @ 221,943: 15x10 +#95 @ 344,602: 12x24 +#96 @ 677,578: 16x26 +#97 @ 452,606: 21x10 +#98 @ 2,722: 19x22 +#99 @ 310,605: 17x29 +#100 @ 262,390: 26x23 +#101 @ 640,499: 19x13 +#102 @ 852,924: 26x16 +#103 @ 309,81: 20x16 +#104 @ 108,918: 18x11 +#105 @ 249,160: 9x17 +#106 @ 26,62: 26x25 +#107 @ 407,587: 14x24 +#108 @ 956,98: 18x27 +#109 @ 944,459: 16x26 +#110 @ 209,699: 28x25 +#111 @ 710,856: 12x22 +#112 @ 744,288: 27x25 +#113 @ 489,344: 20x21 +#114 @ 438,488: 12x16 +#115 @ 884,95: 15x22 +#116 @ 60,617: 24x24 +#117 @ 957,191: 10x11 +#118 @ 315,527: 22x23 +#119 @ 199,117: 18x26 +#120 @ 255,642: 10x15 +#121 @ 957,962: 11x14 +#122 @ 193,131: 10x13 +#123 @ 2,931: 21x11 +#124 @ 36,961: 27x23 +#125 @ 863,38: 29x14 +#126 @ 31,731: 13x15 +#127 @ 357,741: 28x15 +#128 @ 209,354: 27x23 +#129 @ 524,8: 22x20 +#130 @ 302,247: 15x12 +#131 @ 76,857: 10x16 +#132 @ 531,502: 24x10 +#133 @ 559,962: 17x15 +#134 @ 233,710: 29x15 +#135 @ 762,70: 15x24 +#136 @ 934,186: 25x20 +#137 @ 808,252: 29x29 +#138 @ 550,694: 22x19 +#139 @ 265,368: 23x25 +#140 @ 640,637: 11x14 +#141 @ 736,484: 15x10 +#142 @ 946,571: 27x17 +#143 @ 332,174: 20x20 +#144 @ 797,775: 11x23 +#145 @ 684,63: 22x13 +#146 @ 932,36: 20x12 +#147 @ 375,882: 19x17 +#148 @ 656,227: 12x20 +#149 @ 455,223: 12x15 +#150 @ 732,619: 20x20 +#151 @ 292,615: 19x29 +#152 @ 615,0: 15x28 +#153 @ 463,174: 16x15 +#154 @ 322,456: 27x15 +#155 @ 352,224: 10x15 +#156 @ 966,673: 29x21 +#157 @ 527,42: 23x27 +#158 @ 632,775: 15x15 +#159 @ 871,805: 22x15 +#160 @ 667,240: 15x27 +#161 @ 607,880: 25x25 +#162 @ 447,44: 10x21 +#163 @ 445,126: 17x15 +#164 @ 844,933: 11x29 +#165 @ 471,423: 24x27 +#166 @ 715,867: 16x16 +#167 @ 778,279: 10x18 +#168 @ 490,630: 23x16 +#169 @ 687,301: 28x13 +#170 @ 476,432: 11x18 +#171 @ 123,794: 23x26 +#172 @ 738,256: 22x25 +#173 @ 336,60: 26x28 +#174 @ 698,766: 4x10 +#175 @ 511,10: 13x10 +#176 @ 580,702: 18x20 +#177 @ 218,620: 13x22 +#178 @ 476,488: 13x25 +#179 @ 154,617: 14x29 +#180 @ 620,563: 11x6 +#181 @ 168,433: 28x10 +#182 @ 60,685: 10x24 +#183 @ 880,680: 18x18 +#184 @ 859,616: 17x25 +#185 @ 114,80: 26x19 +#186 @ 236,868: 25x10 +#187 @ 135,13: 26x29 +#188 @ 810,677: 22x10 +#189 @ 938,932: 16x14 +#190 @ 427,434: 14x11 +#191 @ 83,731: 29x23 +#192 @ 960,148: 25x16 +#193 @ 577,669: 24x16 +#194 @ 67,267: 18x29 +#195 @ 603,928: 15x26 +#196 @ 881,39: 29x11 +#197 @ 963,957: 19x23 +#198 @ 891,868: 12x13 +#199 @ 799,34: 14x12 +#200 @ 529,785: 24x27 +#201 @ 596,936: 12x21 +#202 @ 832,289: 13x10 +#203 @ 664,232: 17x22 +#204 @ 171,345: 24x26 +#205 @ 283,521: 28x22 +#206 @ 702,469: 14x10 +#207 @ 490,531: 21x27 +#208 @ 411,388: 26x21 +#209 @ 120,780: 13x28 +#210 @ 711,391: 24x12 +#211 @ 347,848: 22x13 +#212 @ 956,507: 20x18 +#213 @ 844,696: 20x26 +#214 @ 550,230: 28x25 +#215 @ 71,625: 14x26 +#216 @ 701,305: 29x23 +#217 @ 629,488: 21x14 +#218 @ 966,362: 10x26 +#219 @ 802,763: 17x19 +#220 @ 631,858: 22x17 +#221 @ 175,656: 24x26 +#222 @ 822,185: 17x15 +#223 @ 110,390: 11x19 +#224 @ 328,13: 28x26 +#225 @ 479,262: 22x12 +#226 @ 178,796: 25x25 +#227 @ 23,782: 18x21 +#228 @ 597,578: 10x12 +#229 @ 692,683: 26x29 +#230 @ 268,713: 21x28 +#231 @ 112,197: 21x15 +#232 @ 619,282: 21x19 +#233 @ 765,56: 21x29 +#234 @ 96,163: 29x11 +#235 @ 229,927: 18x29 +#236 @ 588,775: 27x29 +#237 @ 498,293: 23x15 +#238 @ 311,166: 14x25 +#239 @ 134,371: 27x28 +#240 @ 450,173: 24x16 +#241 @ 700,398: 28x12 +#242 @ 216,282: 25x10 +#243 @ 886,817: 16x15 +#244 @ 291,967: 29x25 +#245 @ 406,283: 14x20 +#246 @ 601,779: 26x28 +#247 @ 767,213: 20x10 +#248 @ 802,36: 15x17 +#249 @ 264,361: 19x27 +#250 @ 565,236: 23x28 +#251 @ 260,394: 21x18 +#252 @ 506,427: 17x26 +#253 @ 479,946: 28x10 +#254 @ 463,505: 24x19 +#255 @ 42,314: 27x27 +#256 @ 901,709: 26x14 +#257 @ 716,194: 21x29 +#258 @ 404,285: 18x21 +#259 @ 838,243: 29x28 +#260 @ 276,510: 23x11 +#261 @ 66,605: 29x16 +#262 @ 225,3: 26x16 +#263 @ 451,355: 22x21 +#264 @ 423,41: 19x17 +#265 @ 942,912: 14x11 +#266 @ 915,613: 22x11 +#267 @ 316,786: 25x24 +#268 @ 640,185: 24x17 +#269 @ 4,564: 29x18 +#270 @ 535,912: 21x16 +#271 @ 95,633: 13x17 +#272 @ 517,170: 21x19 +#273 @ 857,812: 14x23 +#274 @ 682,515: 12x21 +#275 @ 615,847: 22x14 +#276 @ 547,47: 26x18 +#277 @ 461,552: 19x28 +#278 @ 866,29: 28x28 +#279 @ 725,878: 17x15 +#280 @ 604,454: 19x24 +#281 @ 529,452: 28x12 +#282 @ 731,633: 23x22 +#283 @ 505,447: 27x18 +#284 @ 75,694: 12x16 +#285 @ 212,909: 29x13 +#286 @ 96,630: 15x29 +#287 @ 168,34: 28x18 +#288 @ 935,481: 23x26 +#289 @ 892,235: 27x16 +#290 @ 942,945: 13x15 +#291 @ 759,221: 13x25 +#292 @ 604,339: 10x27 +#293 @ 699,313: 17x23 +#294 @ 319,716: 22x24 +#295 @ 718,219: 26x26 +#296 @ 11,917: 13x19 +#297 @ 666,632: 13x24 +#298 @ 85,791: 25x29 +#299 @ 179,204: 20x17 +#300 @ 292,234: 27x11 +#301 @ 527,488: 15x19 +#302 @ 651,158: 22x10 +#303 @ 727,98: 25x25 +#304 @ 452,9: 23x26 +#305 @ 520,386: 23x22 +#306 @ 755,196: 26x11 +#307 @ 321,107: 13x25 +#308 @ 654,563: 20x25 +#309 @ 188,228: 11x23 +#310 @ 416,355: 22x19 +#311 @ 679,567: 12x8 +#312 @ 319,282: 17x27 +#313 @ 276,620: 23x23 +#314 @ 50,242: 11x19 +#315 @ 759,918: 23x19 +#316 @ 599,84: 18x21 +#317 @ 675,230: 15x28 +#318 @ 96,480: 13x13 +#319 @ 386,254: 24x19 +#320 @ 682,199: 22x19 +#321 @ 14,819: 12x14 +#322 @ 231,451: 19x17 +#323 @ 36,396: 27x13 +#324 @ 459,917: 18x26 +#325 @ 149,874: 11x10 +#326 @ 182,325: 11x25 +#327 @ 142,279: 17x12 +#328 @ 954,276: 27x24 +#329 @ 512,263: 16x19 +#330 @ 446,841: 25x25 +#331 @ 79,247: 15x11 +#332 @ 378,881: 20x17 +#333 @ 958,324: 18x22 +#334 @ 583,501: 13x23 +#335 @ 966,133: 16x20 +#336 @ 236,395: 19x19 +#337 @ 588,910: 18x10 +#338 @ 35,406: 20x25 +#339 @ 326,404: 20x29 +#340 @ 293,761: 16x24 +#341 @ 420,371: 5x5 +#342 @ 694,764: 12x17 +#343 @ 617,15: 10x14 +#344 @ 859,915: 11x15 +#345 @ 522,430: 20x17 +#346 @ 727,180: 15x14 +#347 @ 208,679: 11x16 +#348 @ 523,670: 28x22 +#349 @ 512,436: 15x13 +#350 @ 170,11: 25x18 +#351 @ 353,588: 23x12 +#352 @ 201,605: 26x12 +#353 @ 561,681: 15x12 +#354 @ 500,357: 12x12 +#355 @ 813,438: 26x26 +#356 @ 759,853: 14x28 +#357 @ 152,737: 27x27 +#358 @ 646,721: 11x13 +#359 @ 588,446: 15x21 +#360 @ 713,927: 21x28 +#361 @ 189,43: 21x29 +#362 @ 655,722: 29x22 +#363 @ 614,184: 17x14 +#364 @ 465,10: 12x19 +#365 @ 493,612: 11x24 +#366 @ 594,442: 13x18 +#367 @ 392,893: 11x16 +#368 @ 77,740: 12x21 +#369 @ 628,138: 12x27 +#370 @ 173,500: 20x11 +#371 @ 363,587: 13x27 +#372 @ 852,276: 25x19 +#373 @ 410,949: 13x10 +#374 @ 359,948: 25x25 +#375 @ 546,677: 11x29 +#376 @ 854,582: 23x19 +#377 @ 761,145: 11x10 +#378 @ 300,888: 22x17 +#379 @ 284,791: 27x16 +#380 @ 758,255: 13x20 +#381 @ 453,16: 21x16 +#382 @ 525,183: 21x22 +#383 @ 114,307: 18x15 +#384 @ 556,225: 28x20 +#385 @ 463,19: 19x13 +#386 @ 601,579: 24x14 +#387 @ 314,870: 19x21 +#388 @ 541,438: 22x17 +#389 @ 704,543: 26x11 +#390 @ 420,537: 21x22 +#391 @ 728,211: 10x17 +#392 @ 232,822: 25x16 +#393 @ 482,339: 16x17 +#394 @ 460,129: 22x18 +#395 @ 223,181: 24x28 +#396 @ 270,740: 25x24 +#397 @ 220,22: 16x17 +#398 @ 416,414: 15x21 +#399 @ 391,524: 10x20 +#400 @ 448,282: 12x29 +#401 @ 247,862: 16x13 +#402 @ 967,527: 17x20 +#403 @ 279,637: 12x15 +#404 @ 792,166: 16x29 +#405 @ 597,902: 21x12 +#406 @ 375,729: 11x13 +#407 @ 404,395: 15x27 +#408 @ 852,581: 27x17 +#409 @ 97,859: 14x19 +#410 @ 867,477: 23x24 +#411 @ 419,139: 20x23 +#412 @ 395,956: 23x15 +#413 @ 498,388: 22x24 +#414 @ 880,814: 13x19 +#415 @ 845,417: 12x25 +#416 @ 498,357: 27x29 +#417 @ 366,739: 24x29 +#418 @ 86,66: 20x23 +#419 @ 619,871: 17x4 +#420 @ 896,449: 25x24 +#421 @ 414,64: 13x27 +#422 @ 308,77: 27x10 +#423 @ 105,927: 15x12 +#424 @ 213,110: 18x26 +#425 @ 912,820: 12x15 +#426 @ 755,643: 22x13 +#427 @ 850,256: 17x12 +#428 @ 581,456: 18x29 +#429 @ 881,461: 28x22 +#430 @ 204,903: 27x19 +#431 @ 12,578: 22x13 +#432 @ 69,762: 22x27 +#433 @ 140,879: 15x18 +#434 @ 548,924: 20x23 +#435 @ 256,293: 28x22 +#436 @ 583,438: 29x27 +#437 @ 31,936: 17x11 +#438 @ 53,289: 23x26 +#439 @ 753,871: 16x27 +#440 @ 64,856: 21x28 +#441 @ 832,962: 11x15 +#442 @ 305,969: 17x29 +#443 @ 562,103: 24x24 +#444 @ 243,231: 18x11 +#445 @ 210,19: 10x29 +#446 @ 62,702: 28x18 +#447 @ 167,127: 13x29 +#448 @ 751,334: 12x20 +#449 @ 404,236: 27x28 +#450 @ 869,107: 20x18 +#451 @ 167,687: 22x22 +#452 @ 79,449: 29x19 +#453 @ 821,288: 15x26 +#454 @ 235,926: 18x10 +#455 @ 902,705: 16x18 +#456 @ 777,189: 23x25 +#457 @ 560,141: 23x17 +#458 @ 711,900: 28x12 +#459 @ 650,864: 23x19 +#460 @ 965,91: 25x29 +#461 @ 366,589: 24x18 +#462 @ 262,423: 25x21 +#463 @ 775,176: 25x10 +#464 @ 634,899: 24x15 +#465 @ 330,489: 21x16 +#466 @ 711,668: 28x14 +#467 @ 283,699: 17x15 +#468 @ 12,741: 14x11 +#469 @ 10,532: 17x19 +#470 @ 763,148: 12x17 +#471 @ 630,884: 13x26 +#472 @ 39,381: 12x19 +#473 @ 313,382: 4x17 +#474 @ 617,862: 22x18 +#475 @ 113,120: 20x21 +#476 @ 913,322: 26x17 +#477 @ 197,33: 22x15 +#478 @ 760,220: 22x29 +#479 @ 395,195: 17x4 +#480 @ 25,469: 16x19 +#481 @ 289,620: 13x20 +#482 @ 41,395: 15x21 +#483 @ 50,148: 24x22 +#484 @ 787,117: 29x24 +#485 @ 456,623: 28x15 +#486 @ 938,37: 19x10 +#487 @ 475,340: 16x22 +#488 @ 221,808: 28x22 +#489 @ 387,452: 17x19 +#490 @ 835,789: 21x23 +#491 @ 153,456: 29x20 +#492 @ 462,344: 19x13 +#493 @ 927,8: 16x27 +#494 @ 172,734: 19x15 +#495 @ 562,52: 27x15 +#496 @ 781,826: 19x26 +#497 @ 204,123: 17x13 +#498 @ 839,514: 26x25 +#499 @ 324,417: 29x11 +#500 @ 746,828: 19x11 +#501 @ 737,580: 18x14 +#502 @ 802,22: 28x20 +#503 @ 974,392: 19x17 +#504 @ 426,55: 16x14 +#505 @ 845,795: 19x13 +#506 @ 261,102: 10x27 +#507 @ 415,400: 14x22 +#508 @ 62,0: 19x29 +#509 @ 643,429: 28x10 +#510 @ 713,121: 18x19 +#511 @ 829,23: 17x16 +#512 @ 268,80: 10x11 +#513 @ 826,654: 28x29 +#514 @ 73,96: 19x18 +#515 @ 696,417: 22x13 +#516 @ 253,437: 26x29 +#517 @ 842,523: 16x10 +#518 @ 274,960: 28x10 +#519 @ 410,317: 16x22 +#520 @ 334,981: 26x18 +#521 @ 183,480: 25x29 +#522 @ 794,659: 26x26 +#523 @ 416,188: 25x10 +#524 @ 735,400: 17x21 +#525 @ 836,779: 15x26 +#526 @ 913,298: 12x15 +#527 @ 28,507: 10x18 +#528 @ 596,697: 20x20 +#529 @ 322,163: 12x20 +#530 @ 626,94: 21x10 +#531 @ 39,391: 14x10 +#532 @ 894,108: 11x29 +#533 @ 384,173: 25x18 +#534 @ 557,974: 11x23 +#535 @ 780,805: 10x11 +#536 @ 448,734: 27x14 +#537 @ 68,349: 27x17 +#538 @ 215,700: 15x13 +#539 @ 921,309: 26x16 +#540 @ 312,665: 15x3 +#541 @ 301,946: 16x22 +#542 @ 798,747: 11x22 +#543 @ 850,675: 28x28 +#544 @ 438,425: 11x18 +#545 @ 477,537: 16x25 +#546 @ 869,878: 22x22 +#547 @ 830,106: 26x15 +#548 @ 16,880: 23x28 +#549 @ 89,598: 25x10 +#550 @ 911,746: 25x20 +#551 @ 132,268: 27x14 +#552 @ 107,54: 22x16 +#553 @ 617,920: 17x25 +#554 @ 888,796: 17x17 +#555 @ 911,21: 21x13 +#556 @ 901,126: 12x28 +#557 @ 501,378: 25x26 +#558 @ 231,749: 28x10 +#559 @ 534,889: 12x24 +#560 @ 388,923: 17x14 +#561 @ 113,84: 15x28 +#562 @ 924,424: 19x27 +#563 @ 669,933: 29x22 +#564 @ 317,796: 22x24 +#565 @ 149,894: 18x11 +#566 @ 815,914: 21x17 +#567 @ 686,540: 28x10 +#568 @ 531,331: 20x24 +#569 @ 459,576: 15x28 +#570 @ 127,520: 15x24 +#571 @ 466,572: 13x26 +#572 @ 935,555: 18x19 +#573 @ 461,946: 12x20 +#574 @ 918,162: 11x12 +#575 @ 279,305: 21x15 +#576 @ 650,714: 15x13 +#577 @ 486,776: 12x27 +#578 @ 81,253: 20x17 +#579 @ 906,18: 22x14 +#580 @ 306,26: 16x16 +#581 @ 184,724: 17x28 +#582 @ 751,225: 15x10 +#583 @ 26,783: 21x11 +#584 @ 103,41: 21x26 +#585 @ 283,5: 12x24 +#586 @ 733,375: 13x27 +#587 @ 193,973: 11x21 +#588 @ 47,306: 19x14 +#589 @ 964,124: 11x19 +#590 @ 856,321: 19x12 +#591 @ 437,655: 29x14 +#592 @ 368,437: 25x24 +#593 @ 537,154: 28x17 +#594 @ 574,451: 11x13 +#595 @ 963,342: 21x26 +#596 @ 250,492: 22x18 +#597 @ 962,740: 22x14 +#598 @ 697,784: 29x22 +#599 @ 153,323: 23x23 +#600 @ 534,713: 13x12 +#601 @ 75,73: 22x18 +#602 @ 166,755: 15x12 +#603 @ 273,622: 22x12 +#604 @ 660,432: 10x24 +#605 @ 119,965: 25x25 +#606 @ 751,294: 28x14 +#607 @ 676,358: 13x11 +#608 @ 204,588: 17x29 +#609 @ 792,828: 21x14 +#610 @ 163,141: 27x12 +#611 @ 159,33: 22x19 +#612 @ 158,364: 13x15 +#613 @ 711,929: 16x14 +#614 @ 811,654: 18x29 +#615 @ 903,828: 24x20 +#616 @ 323,111: 23x26 +#617 @ 891,258: 28x28 +#618 @ 551,826: 25x12 +#619 @ 660,935: 29x19 +#620 @ 41,27: 28x19 +#621 @ 590,491: 26x24 +#622 @ 174,31: 10x25 +#623 @ 563,817: 21x25 +#624 @ 961,746: 13x27 +#625 @ 599,403: 13x11 +#626 @ 852,661: 22x27 +#627 @ 84,473: 18x19 +#628 @ 580,98: 28x27 +#629 @ 138,506: 28x15 +#630 @ 981,544: 16x26 +#631 @ 418,908: 23x24 +#632 @ 371,926: 22x25 +#633 @ 701,291: 11x20 +#634 @ 66,889: 28x25 +#635 @ 641,689: 14x26 +#636 @ 177,960: 10x16 +#637 @ 60,39: 20x18 +#638 @ 378,445: 14x25 +#639 @ 113,794: 17x16 +#640 @ 197,627: 22x16 +#641 @ 324,530: 12x25 +#642 @ 8,206: 18x29 +#643 @ 359,893: 23x15 +#644 @ 795,198: 19x17 +#645 @ 239,900: 12x20 +#646 @ 504,343: 19x10 +#647 @ 708,677: 29x10 +#648 @ 63,697: 14x12 +#649 @ 403,203: 25x18 +#650 @ 305,183: 16x18 +#651 @ 609,447: 20x22 +#652 @ 508,394: 16x29 +#653 @ 178,144: 29x27 +#654 @ 870,490: 23x19 +#655 @ 130,855: 27x14 +#656 @ 333,563: 25x14 +#657 @ 862,252: 18x16 +#658 @ 40,384: 20x29 +#659 @ 639,299: 13x10 +#660 @ 869,856: 12x23 +#661 @ 35,495: 13x28 +#662 @ 545,322: 16x26 +#663 @ 671,566: 11x12 +#664 @ 342,10: 10x17 +#665 @ 932,940: 21x14 +#666 @ 726,480: 11x11 +#667 @ 249,632: 17x21 +#668 @ 939,830: 11x14 +#669 @ 812,241: 19x25 +#670 @ 739,641: 15x21 +#671 @ 307,873: 21x25 +#672 @ 845,687: 13x11 +#673 @ 953,676: 26x17 +#674 @ 137,960: 26x13 +#675 @ 853,498: 29x13 +#676 @ 396,599: 17x17 +#677 @ 431,839: 27x27 +#678 @ 745,290: 23x16 +#679 @ 336,849: 12x23 +#680 @ 852,492: 28x15 +#681 @ 467,781: 25x23 +#682 @ 525,668: 18x15 +#683 @ 941,189: 25x24 +#684 @ 130,323: 17x26 +#685 @ 410,612: 12x20 +#686 @ 967,499: 13x23 +#687 @ 947,263: 16x22 +#688 @ 158,434: 13x13 +#689 @ 920,298: 13x15 +#690 @ 361,415: 16x21 +#691 @ 302,600: 21x20 +#692 @ 65,356: 20x24 +#693 @ 855,427: 13x12 +#694 @ 877,366: 10x10 +#695 @ 138,415: 20x14 +#696 @ 818,653: 27x12 +#697 @ 829,540: 15x29 +#698 @ 636,121: 19x28 +#699 @ 324,960: 16x23 +#700 @ 680,614: 10x11 +#701 @ 380,819: 21x21 +#702 @ 873,107: 11x15 +#703 @ 42,644: 11x17 +#704 @ 62,860: 17x21 +#705 @ 728,704: 27x27 +#706 @ 604,488: 17x25 +#707 @ 418,252: 28x14 +#708 @ 715,408: 28x17 +#709 @ 747,225: 21x13 +#710 @ 124,787: 18x18 +#711 @ 394,376: 29x18 +#712 @ 182,552: 13x16 +#713 @ 129,424: 19x23 +#714 @ 852,526: 18x12 +#715 @ 849,634: 21x19 +#716 @ 220,22: 14x21 +#717 @ 327,870: 18x15 +#718 @ 627,170: 10x13 +#719 @ 108,768: 17x22 +#720 @ 870,303: 11x28 +#721 @ 616,917: 19x18 +#722 @ 118,316: 10x11 +#723 @ 476,355: 12x13 +#724 @ 235,946: 23x12 +#725 @ 310,723: 24x21 +#726 @ 28,483: 14x28 +#727 @ 746,202: 26x12 +#728 @ 736,404: 19x28 +#729 @ 973,143: 21x26 +#730 @ 226,9: 18x24 +#731 @ 717,746: 29x26 +#732 @ 793,668: 28x19 +#733 @ 446,177: 11x25 +#734 @ 86,243: 27x11 +#735 @ 73,13: 15x25 +#736 @ 225,706: 13x13 +#737 @ 852,950: 25x10 +#738 @ 502,427: 13x15 +#739 @ 950,504: 26x17 +#740 @ 761,290: 21x24 +#741 @ 90,378: 28x29 +#742 @ 431,457: 27x13 +#743 @ 196,666: 15x29 +#744 @ 439,105: 10x29 +#745 @ 788,261: 28x10 +#746 @ 947,904: 13x12 +#747 @ 328,973: 17x25 +#748 @ 255,758: 22x26 +#749 @ 320,426: 21x21 +#750 @ 735,258: 16x24 +#751 @ 883,333: 21x25 +#752 @ 5,510: 10x23 +#753 @ 389,972: 20x14 +#754 @ 671,937: 18x10 +#755 @ 728,342: 20x18 +#756 @ 247,617: 26x13 +#757 @ 301,241: 25x19 +#758 @ 971,653: 18x25 +#759 @ 807,30: 25x14 +#760 @ 318,525: 14x12 +#761 @ 640,618: 26x24 +#762 @ 788,253: 25x26 +#763 @ 393,192: 23x12 +#764 @ 522,920: 13x26 +#765 @ 232,204: 14x18 +#766 @ 953,862: 22x25 +#767 @ 41,239: 22x18 +#768 @ 760,535: 11x25 +#769 @ 84,868: 28x26 +#770 @ 920,703: 19x26 +#771 @ 678,544: 27x17 +#772 @ 814,591: 18x11 +#773 @ 15,181: 18x10 +#774 @ 725,661: 22x11 +#775 @ 241,691: 18x17 +#776 @ 84,81: 14x29 +#777 @ 909,818: 14x23 +#778 @ 357,478: 27x25 +#779 @ 537,878: 24x15 +#780 @ 812,832: 16x18 +#781 @ 528,394: 24x29 +#782 @ 411,603: 15x12 +#783 @ 94,727: 10x16 +#784 @ 968,146: 24x27 +#785 @ 755,195: 22x11 +#786 @ 948,802: 21x13 +#787 @ 509,266: 10x28 +#788 @ 626,463: 21x19 +#789 @ 766,203: 19x22 +#790 @ 450,28: 12x24 +#791 @ 290,589: 25x12 +#792 @ 294,195: 22x28 +#793 @ 481,949: 22x20 +#794 @ 732,708: 25x13 +#795 @ 292,706: 17x20 +#796 @ 502,6: 13x10 +#797 @ 119,382: 29x23 +#798 @ 300,953: 16x22 +#799 @ 978,231: 18x16 +#800 @ 119,409: 23x12 +#801 @ 390,634: 27x13 +#802 @ 958,124: 19x21 +#803 @ 423,437: 27x13 +#804 @ 394,299: 27x19 +#805 @ 973,910: 24x10 +#806 @ 462,133: 29x11 +#807 @ 529,750: 17x15 +#808 @ 80,744: 12x17 +#809 @ 56,99: 19x17 +#810 @ 926,721: 12x28 +#811 @ 916,569: 27x15 +#812 @ 723,376: 13x27 +#813 @ 852,824: 26x23 +#814 @ 953,944: 17x10 +#815 @ 786,937: 28x17 +#816 @ 188,705: 17x24 +#817 @ 543,456: 13x18 +#818 @ 676,918: 20x10 +#819 @ 97,706: 24x29 +#820 @ 722,656: 29x18 +#821 @ 182,328: 24x15 +#822 @ 490,397: 28x20 +#823 @ 247,217: 19x20 +#824 @ 217,592: 12x21 +#825 @ 452,201: 14x25 +#826 @ 348,612: 11x26 +#827 @ 652,935: 22x21 +#828 @ 650,925: 29x21 +#829 @ 495,247: 15x29 +#830 @ 594,561: 20x15 +#831 @ 220,460: 29x25 +#832 @ 642,117: 12x20 +#833 @ 235,533: 24x13 +#834 @ 285,755: 14x11 +#835 @ 739,473: 23x21 +#836 @ 268,387: 20x16 +#837 @ 459,275: 28x10 +#838 @ 493,572: 13x21 +#839 @ 320,720: 18x20 +#840 @ 168,757: 5x6 +#841 @ 496,368: 29x18 +#842 @ 419,45: 15x22 +#843 @ 749,524: 23x19 +#844 @ 413,68: 25x19 +#845 @ 250,698: 16x27 +#846 @ 101,697: 26x13 +#847 @ 968,332: 11x19 +#848 @ 953,137: 19x11 +#849 @ 134,396: 27x19 +#850 @ 891,465: 13x28 +#851 @ 40,931: 24x18 +#852 @ 170,775: 25x10 +#853 @ 187,26: 18x15 +#854 @ 677,28: 19x17 +#855 @ 752,274: 22x16 +#856 @ 217,376: 15x17 +#857 @ 379,249: 15x28 +#858 @ 308,661: 25x16 +#859 @ 514,704: 28x16 +#860 @ 281,235: 26x23 +#861 @ 430,650: 15x28 +#862 @ 784,125: 26x25 +#863 @ 212,123: 19x14 +#864 @ 946,191: 15x8 +#865 @ 405,399: 21x27 +#866 @ 443,484: 19x16 +#867 @ 769,626: 17x25 +#868 @ 119,786: 29x19 +#869 @ 890,20: 26x28 +#870 @ 12,161: 11x24 +#871 @ 957,869: 11x12 +#872 @ 332,736: 28x15 +#873 @ 178,967: 27x10 +#874 @ 323,441: 23x10 +#875 @ 229,436: 28x16 +#876 @ 734,578: 23x17 +#877 @ 433,614: 25x27 +#878 @ 30,160: 28x18 +#879 @ 217,279: 26x21 +#880 @ 621,130: 27x15 +#881 @ 465,601: 26x28 +#882 @ 231,580: 25x11 +#883 @ 300,512: 25x23 +#884 @ 422,258: 22x19 +#885 @ 308,530: 15x13 +#886 @ 164,202: 10x12 +#887 @ 412,181: 18x21 +#888 @ 121,766: 25x18 +#889 @ 177,945: 14x16 +#890 @ 30,162: 13x26 +#891 @ 437,565: 23x27 +#892 @ 454,280: 26x27 +#893 @ 379,526: 23x12 +#894 @ 834,707: 13x5 +#895 @ 859,357: 24x28 +#896 @ 891,303: 16x14 +#897 @ 385,116: 28x20 +#898 @ 53,12: 24x22 +#899 @ 428,979: 24x20 +#900 @ 916,602: 28x17 +#901 @ 19,739: 16x21 +#902 @ 871,32: 18x22 +#903 @ 207,110: 12x16 +#904 @ 932,15: 26x19 +#905 @ 691,232: 11x18 +#906 @ 965,799: 20x20 +#907 @ 241,526: 24x23 +#908 @ 931,915: 18x14 +#909 @ 662,584: 24x14 +#910 @ 30,148: 10x17 +#911 @ 50,466: 24x29 +#912 @ 265,504: 22x10 +#913 @ 59,857: 28x24 +#914 @ 170,780: 18x27 +#915 @ 436,51: 27x12 +#916 @ 921,139: 16x17 +#917 @ 532,377: 16x23 +#918 @ 237,188: 20x27 +#919 @ 672,653: 11x20 +#920 @ 333,546: 13x18 +#921 @ 830,191: 25x27 +#922 @ 745,644: 24x23 +#923 @ 877,371: 17x28 +#924 @ 926,426: 12x19 +#925 @ 731,977: 13x21 +#926 @ 12,122: 14x14 +#927 @ 65,896: 17x28 +#928 @ 126,609: 29x13 +#929 @ 557,244: 24x22 +#930 @ 80,21: 14x24 +#931 @ 725,184: 18x28 +#932 @ 654,181: 18x12 +#933 @ 439,283: 14x21 +#934 @ 974,95: 26x15 +#935 @ 235,9: 10x17 +#936 @ 306,422: 24x21 +#937 @ 383,952: 29x10 +#938 @ 738,201: 23x15 +#939 @ 254,624: 26x19 +#940 @ 421,672: 17x14 +#941 @ 221,751: 12x28 +#942 @ 730,768: 13x18 +#943 @ 342,13: 17x18 +#944 @ 594,639: 24x17 +#945 @ 127,323: 16x12 +#946 @ 861,701: 13x10 +#947 @ 696,541: 28x24 +#948 @ 804,363: 12x25 +#949 @ 958,296: 29x13 +#950 @ 126,868: 16x20 +#951 @ 916,483: 26x15 +#952 @ 318,52: 19x22 +#953 @ 240,938: 18x11 +#954 @ 849,275: 16x11 +#955 @ 712,412: 27x26 +#956 @ 913,613: 14x15 +#957 @ 756,476: 20x18 +#958 @ 656,906: 14x11 +#959 @ 461,633: 12x26 +#960 @ 398,208: 19x12 +#961 @ 490,333: 14x14 +#962 @ 816,658: 16x27 +#963 @ 579,562: 17x19 +#964 @ 961,552: 16x29 +#965 @ 393,947: 27x19 +#966 @ 68,464: 18x13 +#967 @ 318,537: 21x13 +#968 @ 904,171: 28x13 +#969 @ 629,974: 23x22 +#970 @ 415,366: 15x19 +#971 @ 401,976: 26x13 +#972 @ 18,44: 26x12 +#973 @ 18,804: 27x26 +#974 @ 134,446: 25x22 +#975 @ 158,464: 19x13 +#976 @ 623,437: 9x3 +#977 @ 376,181: 19x15 +#978 @ 738,397: 26x27 +#979 @ 338,207: 20x23 +#980 @ 218,403: 27x17 +#981 @ 530,937: 27x10 +#982 @ 134,958: 11x19 +#983 @ 675,514: 13x17 +#984 @ 891,383: 10x27 +#985 @ 935,748: 15x11 +#986 @ 943,956: 25x22 +#987 @ 18,649: 11x14 +#988 @ 740,243: 21x10 +#989 @ 404,309: 14x22 +#990 @ 134,19: 13x19 +#991 @ 406,381: 14x23 +#992 @ 428,395: 18x13 +#993 @ 121,971: 18x15 +#994 @ 62,794: 25x17 +#995 @ 134,403: 20x13 +#996 @ 347,567: 20x29 +#997 @ 615,358: 3x18 +#998 @ 852,28: 15x16 +#999 @ 259,379: 27x24 +#1000 @ 268,617: 20x20 +#1001 @ 956,657: 20x22 +#1002 @ 924,876: 26x18 +#1003 @ 748,411: 12x14 +#1004 @ 882,249: 29x10 +#1005 @ 979,25: 21x17 +#1006 @ 559,126: 25x28 +#1007 @ 569,712: 28x13 +#1008 @ 623,781: 25x16 +#1009 @ 422,607: 25x10 +#1010 @ 613,904: 11x26 +#1011 @ 128,411: 16x17 +#1012 @ 9,195: 22x12 +#1013 @ 83,362: 14x23 +#1014 @ 617,149: 26x18 +#1015 @ 382,436: 12x21 +#1016 @ 613,855: 23x16 +#1017 @ 956,222: 24x17 +#1018 @ 400,977: 12x15 +#1019 @ 181,333: 18x17 +#1020 @ 610,174: 25x14 +#1021 @ 825,26: 13x24 +#1022 @ 296,778: 26x14 +#1023 @ 465,135: 24x16 +#1024 @ 638,807: 10x14 +#1025 @ 547,697: 19x15 +#1026 @ 103,663: 15x21 +#1027 @ 71,113: 20x28 +#1028 @ 325,498: 27x28 +#1029 @ 525,808: 23x19 +#1030 @ 828,949: 15x27 +#1031 @ 46,699: 11x18 +#1032 @ 676,396: 29x29 +#1033 @ 552,889: 25x27 +#1034 @ 943,865: 15x22 +#1035 @ 480,310: 27x20 +#1036 @ 714,270: 29x17 +#1037 @ 647,711: 18x15 +#1038 @ 590,431: 24x16 +#1039 @ 675,554: 20x26 +#1040 @ 287,13: 17x20 +#1041 @ 886,310: 16x28 +#1042 @ 219,353: 15x22 +#1043 @ 215,12: 14x17 +#1044 @ 307,541: 29x22 +#1045 @ 151,734: 22x22 +#1046 @ 517,785: 14x24 +#1047 @ 617,89: 15x26 +#1048 @ 726,978: 13x22 +#1049 @ 404,546: 25x29 +#1050 @ 395,372: 23x15 +#1051 @ 249,583: 21x21 +#1052 @ 941,455: 23x15 +#1053 @ 801,651: 19x11 +#1054 @ 186,120: 10x22 +#1055 @ 562,177: 11x10 +#1056 @ 504,441: 14x29 +#1057 @ 401,274: 11x16 +#1058 @ 69,463: 24x28 +#1059 @ 409,955: 20x27 +#1060 @ 856,263: 26x20 +#1061 @ 747,821: 23x11 +#1062 @ 243,158: 20x22 +#1063 @ 694,957: 27x10 +#1064 @ 370,666: 29x23 +#1065 @ 74,640: 14x24 +#1066 @ 330,223: 11x21 +#1067 @ 93,659: 27x10 +#1068 @ 916,571: 20x24 +#1069 @ 681,208: 10x26 +#1070 @ 62,125: 27x28 +#1071 @ 163,527: 14x24 +#1072 @ 353,71: 23x22 +#1073 @ 938,1: 12x27 +#1074 @ 561,956: 20x26 +#1075 @ 850,491: 29x23 +#1076 @ 762,231: 16x28 +#1077 @ 391,96: 13x24 +#1078 @ 359,435: 14x17 +#1079 @ 150,326: 15x20 +#1080 @ 615,695: 29x17 +#1081 @ 477,123: 24x14 +#1082 @ 851,99: 12x26 +#1083 @ 328,627: 22x29 +#1084 @ 925,616: 14x23 +#1085 @ 59,897: 23x19 +#1086 @ 152,379: 23x15 +#1087 @ 255,415: 19x22 +#1088 @ 921,476: 19x24 +#1089 @ 946,215: 23x16 +#1090 @ 384,725: 23x11 +#1091 @ 612,353: 18x29 +#1092 @ 443,193: 22x20 +#1093 @ 41,141: 18x10 +#1094 @ 288,10: 24x19 +#1095 @ 623,908: 11x20 +#1096 @ 424,159: 27x19 +#1097 @ 896,878: 16x29 +#1098 @ 466,334: 27x18 +#1099 @ 589,755: 23x25 +#1100 @ 341,592: 13x27 +#1101 @ 220,387: 16x12 +#1102 @ 958,510: 15x9 +#1103 @ 252,435: 11x23 +#1104 @ 143,853: 15x10 +#1105 @ 841,205: 14x29 +#1106 @ 439,456: 11x19 +#1107 @ 937,828: 18x21 +#1108 @ 725,650: 24x26 +#1109 @ 851,222: 19x26 +#1110 @ 248,423: 5x4 +#1111 @ 740,325: 10x23 +#1112 @ 474,960: 20x22 +#1113 @ 943,946: 11x26 +#1114 @ 590,580: 18x25 +#1115 @ 472,370: 19x17 +#1116 @ 804,427: 29x16 +#1117 @ 679,42: 16x14 +#1118 @ 318,272: 12x28 +#1119 @ 372,878: 10x12 +#1120 @ 685,223: 16x26 +#1121 @ 853,19: 23x12 +#1122 @ 532,63: 27x18 +#1123 @ 456,320: 28x19 +#1124 @ 888,828: 25x24 +#1125 @ 348,461: 19x25 +#1126 @ 873,395: 15x13 +#1127 @ 705,451: 27x28 +#1128 @ 730,589: 11x26 +#1129 @ 667,727: 20x24 +#1130 @ 101,130: 24x23 +#1131 @ 563,688: 28x21 +#1132 @ 5,143: 26x19 +#1133 @ 522,671: 19x23 +#1134 @ 481,350: 19x23 +#1135 @ 4,125: 25x18 +#1136 @ 118,943: 26x24 +#1137 @ 371,834: 20x26 +#1138 @ 523,751: 22x10 +#1139 @ 92,181: 18x16 +#1140 @ 904,145: 20x17 +#1141 @ 280,513: 25x28 +#1142 @ 43,61: 17x19 +#1143 @ 602,643: 12x9 +#1144 @ 499,293: 12x10 +#1145 @ 155,345: 28x25 +#1146 @ 572,503: 17x21 +#1147 @ 537,595: 28x12 +#1148 @ 256,841: 18x25 +#1149 @ 621,431: 16x14 +#1150 @ 657,258: 23x12 +#1151 @ 305,436: 24x18 +#1152 @ 907,820: 12x15 +#1153 @ 65,744: 26x23 +#1154 @ 230,861: 18x17 +#1155 @ 333,12: 23x24 +#1156 @ 248,418: 23x27 +#1157 @ 469,958: 19x12 +#1158 @ 35,931: 11x14 +#1159 @ 288,563: 10x29 +#1160 @ 43,378: 14x11 +#1161 @ 88,739: 12x25 +#1162 @ 804,900: 21x29 +#1163 @ 381,76: 22x24 +#1164 @ 30,502: 16x14 +#1165 @ 527,603: 12x14 +#1166 @ 956,209: 15x19 +#1167 @ 960,546: 29x14 +#1168 @ 188,744: 10x19 +#1169 @ 175,744: 12x29 +#1170 @ 133,778: 22x21 +#1171 @ 174,205: 14x20 +#1172 @ 690,959: 21x12 +#1173 @ 619,491: 13x22 +#1174 @ 813,594: 18x12 +#1175 @ 876,607: 29x13 +#1176 @ 900,6: 19x18 +#1177 @ 967,721: 13x25 +#1178 @ 189,232: 19x26 +#1179 @ 827,553: 24x18 +#1180 @ 402,245: 28x17 +#1181 @ 162,896: 14x17 +#1182 @ 914,1: 22x27 +#1183 @ 208,134: 22x19 +#1184 @ 526,331: 29x22 +#1185 @ 145,202: 22x13 +#1186 @ 409,861: 25x13 +#1187 @ 801,730: 28x18 +#1188 @ 624,487: 20x15 +#1189 @ 393,687: 15x29 +#1190 @ 279,958: 15x29 +#1191 @ 653,395: 26x27 +#1192 @ 179,26: 10x19 +#1193 @ 260,76: 29x25 +#1194 @ 859,406: 18x10 +#1195 @ 296,932: 21x23 +#1196 @ 301,974: 16x26 +#1197 @ 727,757: 29x10 +#1198 @ 657,397: 17x20 +#1199 @ 442,937: 18x26 +#1200 @ 29,508: 19x15 +#1201 @ 636,245: 24x12 +#1202 @ 960,402: 28x12 +#1203 @ 139,256: 17x29 +#1204 @ 168,117: 23x15 +#1205 @ 770,785: 27x29 +#1206 @ 752,276: 21x21 +#1207 @ 883,889: 13x13 +#1208 @ 62,918: 21x10 +#1209 @ 163,517: 17x12 +#1210 @ 470,613: 19x11 +#1211 @ 451,661: 26x29 +#1212 @ 211,38: 19x13 +#1213 @ 539,439: 19x28 +#1214 @ 339,229: 23x21 +#1215 @ 591,542: 26x25 +#1216 @ 41,643: 29x21 +#1217 @ 806,823: 14x19 +#1218 @ 628,245: 11x18 +#1219 @ 378,619: 20x19 +#1220 @ 250,444: 14x22 +#1221 @ 713,891: 17x12 +#1222 @ 144,430: 27x21 +#1223 @ 125,200: 27x29 +#1224 @ 525,664: 15x22 +#1225 @ 369,485: 23x27 +#1226 @ 868,564: 29x20 +#1227 @ 642,700: 11x12 +#1228 @ 951,6: 14x25 +#1229 @ 532,331: 24x13 +#1230 @ 937,480: 15x12 +#1231 @ 81,65: 27x25 +#1232 @ 153,263: 11x26 +#1233 @ 970,364: 14x19 +#1234 @ 143,454: 26x27 +#1235 @ 495,574: 7x15 +#1236 @ 850,209: 20x17 +#1237 @ 126,965: 23x29 +#1238 @ 870,675: 23x28 +#1239 @ 308,376: 14x28 +#1240 @ 578,755: 14x24 +#1241 @ 844,481: 23x22 +#1242 @ 734,769: 25x16 +#1243 @ 723,219: 22x27 +#1244 @ 159,695: 23x18 +#1245 @ 754,285: 26x22 +#1246 @ 345,974: 26x23 +#1247 @ 29,69: 27x12 +#1248 @ 181,784: 15x12 +#1249 @ 682,616: 5x6 +#1250 @ 208,28: 27x28 +#1251 @ 665,234: 18x23 +#1252 @ 961,288: 11x22 +#1253 @ 363,57: 19x21 +#1254 @ 662,137: 25x24 +#1255 @ 7,41: 21x15 +#1256 @ 693,784: 12x28 +#1257 @ 186,543: 29x13 +#1258 @ 596,354: 13x10 +#1259 @ 824,705: 28x16 +#1260 @ 468,614: 25x20 +#1261 @ 542,10: 28x18 +#1262 @ 231,942: 18x29 +#1263 @ 979,39: 12x13 +#1264 @ 345,77: 16x25 +#1265 @ 715,127: 14x28 +#1266 @ 618,560: 16x16 +#1267 @ 687,397: 22x25 +#1268 @ 880,229: 16x18 +#1269 @ 806,358: 29x16 +#1270 @ 106,846: 23x29 +#1271 @ 61,299: 16x14 +#1272 @ 644,818: 19x22 +#1273 @ 557,157: 29x24 +#1274 @ 29,710: 25x28 +#1275 @ 207,585: 21x27 +#1276 @ 83,715: 26x14 +#1277 @ 325,51: 13x10 +#1278 @ 717,97: 16x12 +#1279 @ 602,139: 26x11 +#1280 @ 26,933: 29x12 +#1281 @ 815,755: 13x22 +#1282 @ 786,950: 23x21 #1283 @ 403,978: 29x19 \ No newline at end of file diff --git a/2018/4thDay/challenge1/.vscode/settings.json b/2018/4thDay/challenge1/.vscode/settings.json index 28679f5..e0ee39e 100644 --- a/2018/4thDay/challenge1/.vscode/settings.json +++ b/2018/4thDay/challenge1/.vscode/settings.json @@ -1,37 +1,37 @@ -{ - "files.associations": { - "cctype": "cpp", - "clocale": "cpp", - "cmath": "cpp", - "cstddef": "cpp", - "cstdio": "cpp", - "cstdlib": "cpp", - "cwchar": "cpp", - "cwctype": "cpp", - "array": "cpp", - "*.tcc": "cpp", - "cstdint": "cpp", - "deque": "cpp", - "unordered_map": "cpp", - "vector": "cpp", - "exception": "cpp", - "fstream": "cpp", - "initializer_list": "cpp", - "iosfwd": "cpp", - "iostream": "cpp", - "istream": "cpp", - "limits": "cpp", - "new": "cpp", - "optional": "cpp", - "ostream": "cpp", - "sstream": "cpp", - "stdexcept": "cpp", - "streambuf": "cpp", - "string_view": "cpp", - "system_error": "cpp", - "type_traits": "cpp", - "tuple": "cpp", - "typeinfo": "cpp", - "utility": "cpp" - } +{ + "files.associations": { + "cctype": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "cstddef": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "array": "cpp", + "*.tcc": "cpp", + "cstdint": "cpp", + "deque": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "new": "cpp", + "optional": "cpp", + "ostream": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "streambuf": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "type_traits": "cpp", + "tuple": "cpp", + "typeinfo": "cpp", + "utility": "cpp" + } } \ No newline at end of file diff --git a/2018/4thDay/challenge1/challenge.txt b/2018/4thDay/challenge1/challenge.txt index dc5fc3a..2c60c69 100644 --- a/2018/4thDay/challenge1/challenge.txt +++ b/2018/4thDay/challenge1/challenge.txt @@ -1,49 +1,49 @@ ---- Day 4: Repose Record --- -You've sneaked into another supply closet - this time, it's across from the prototype suit manufacturing lab. You need to sneak inside and fix the issues with the suit, but there's a guard stationed outside the lab, so this is as close as you can safely get. - -As you search the closet for anything that might help, you discover that you're not the first person to want to sneak in. Covering the walls, someone has spent an hour starting every midnight for the past few months secretly observing this guard post! They've been writing down the ID of the one guard on duty that night - the Elves seem to have decided that one guard was enough for the overnight shift - as well as when they fall asleep or wake up while at their post (your puzzle input). - -For example, consider the following records, which have already been organized into chronological order: - -[1518-11-01 00:00] Guard #10 begins shift -[1518-11-01 00:05] falls asleep -[1518-11-01 00:25] wakes up -[1518-11-01 00:30] falls asleep -[1518-11-01 00:55] wakes up -[1518-11-01 23:58] Guard #99 begins shift -[1518-11-02 00:40] falls asleep -[1518-11-02 00:50] wakes up -[1518-11-03 00:05] Guard #10 begins shift -[1518-11-03 00:24] falls asleep -[1518-11-03 00:29] wakes up -[1518-11-04 00:02] Guard #99 begins shift -[1518-11-04 00:36] falls asleep -[1518-11-04 00:46] wakes up -[1518-11-05 00:03] Guard #99 begins shift -[1518-11-05 00:45] falls asleep -[1518-11-05 00:55] wakes up -Timestamps are written using year-month-day hour:minute format. The guard falling asleep or waking up is always the one whose shift most recently started. Because all asleep/awake times are during the midnight hour (00:00 - 00:59), only the minute portion (00 - 59) is relevant for those events. - -Visually, these records show that the guards are asleep at these times: - -Date ID Minute - 000000000011111111112222222222333333333344444444445555555555 - 012345678901234567890123456789012345678901234567890123456789 -11-01 #10 .....####################.....#########################..... -11-02 #99 ........................................##########.......... -11-03 #10 ........................#####............................... -11-04 #99 ....................................##########.............. -11-05 #99 .............................................##########..... -The columns are Date, which shows the month-day portion of the relevant day; ID, which shows the guard on duty that day; and Minute, which shows the minutes during which the guard was asleep within the midnight hour. (The Minute column's header shows the minute's ten's digit in the first row and the one's digit in the second row.) Awake is shown as ., and asleep is shown as #. - -Note that guards count as asleep on the minute they fall asleep, and they count as awake on the minute they wake up. For example, because Guard #10 wakes up at 00:25 on 1518-11-01, minute 25 is marked as awake. - -If you can figure out the guard most likely to be asleep at a specific time, you might be able to trick that guard into working tonight so you can have the best chance of sneaking in. You have two strategies for choosing the best guard/minute combination. - -Strategy 1: Find the guard that has the most minutes asleep. What minute does that guard spend asleep the most? - -In the example above, Guard #10 spent the most minutes asleep, a total of 50 minutes (20+25+5), while Guard #99 only slept for a total of 30 minutes (10+10+10). Guard #10 was asleep most during minute 24 (on two days, whereas any other minute the guard was asleep was only seen on one day). - -While this example listed the entries in chronological order, your entries are in the order you found them. You'll need to organize them before they can be analyzed. - +--- Day 4: Repose Record --- +You've sneaked into another supply closet - this time, it's across from the prototype suit manufacturing lab. You need to sneak inside and fix the issues with the suit, but there's a guard stationed outside the lab, so this is as close as you can safely get. + +As you search the closet for anything that might help, you discover that you're not the first person to want to sneak in. Covering the walls, someone has spent an hour starting every midnight for the past few months secretly observing this guard post! They've been writing down the ID of the one guard on duty that night - the Elves seem to have decided that one guard was enough for the overnight shift - as well as when they fall asleep or wake up while at their post (your puzzle input). + +For example, consider the following records, which have already been organized into chronological order: + +[1518-11-01 00:00] Guard #10 begins shift +[1518-11-01 00:05] falls asleep +[1518-11-01 00:25] wakes up +[1518-11-01 00:30] falls asleep +[1518-11-01 00:55] wakes up +[1518-11-01 23:58] Guard #99 begins shift +[1518-11-02 00:40] falls asleep +[1518-11-02 00:50] wakes up +[1518-11-03 00:05] Guard #10 begins shift +[1518-11-03 00:24] falls asleep +[1518-11-03 00:29] wakes up +[1518-11-04 00:02] Guard #99 begins shift +[1518-11-04 00:36] falls asleep +[1518-11-04 00:46] wakes up +[1518-11-05 00:03] Guard #99 begins shift +[1518-11-05 00:45] falls asleep +[1518-11-05 00:55] wakes up +Timestamps are written using year-month-day hour:minute format. The guard falling asleep or waking up is always the one whose shift most recently started. Because all asleep/awake times are during the midnight hour (00:00 - 00:59), only the minute portion (00 - 59) is relevant for those events. + +Visually, these records show that the guards are asleep at these times: + +Date ID Minute + 000000000011111111112222222222333333333344444444445555555555 + 012345678901234567890123456789012345678901234567890123456789 +11-01 #10 .....####################.....#########################..... +11-02 #99 ........................................##########.......... +11-03 #10 ........................#####............................... +11-04 #99 ....................................##########.............. +11-05 #99 .............................................##########..... +The columns are Date, which shows the month-day portion of the relevant day; ID, which shows the guard on duty that day; and Minute, which shows the minutes during which the guard was asleep within the midnight hour. (The Minute column's header shows the minute's ten's digit in the first row and the one's digit in the second row.) Awake is shown as ., and asleep is shown as #. + +Note that guards count as asleep on the minute they fall asleep, and they count as awake on the minute they wake up. For example, because Guard #10 wakes up at 00:25 on 1518-11-01, minute 25 is marked as awake. + +If you can figure out the guard most likely to be asleep at a specific time, you might be able to trick that guard into working tonight so you can have the best chance of sneaking in. You have two strategies for choosing the best guard/minute combination. + +Strategy 1: Find the guard that has the most minutes asleep. What minute does that guard spend asleep the most? + +In the example above, Guard #10 spent the most minutes asleep, a total of 50 minutes (20+25+5), while Guard #99 only slept for a total of 30 minutes (10+10+10). Guard #10 was asleep most during minute 24 (on two days, whereas any other minute the guard was asleep was only seen on one day). + +While this example listed the entries in chronological order, your entries are in the order you found them. You'll need to organize them before they can be analyzed. + What is the ID of the guard you chose multiplied by the minute you chose? (In the above example, the answer would be 10 * 24 = 240.) \ No newline at end of file diff --git a/2018/4thDay/challenge1/index.js b/2018/4thDay/challenge1/index.js index adad249..c2128cf 100644 --- a/2018/4thDay/challenge1/index.js +++ b/2018/4thDay/challenge1/index.js @@ -1,71 +1,71 @@ -class Guard { - constructor (id) { - this.id = id; - this.minutesAsleep = Array.from({ length: 60 }).map(() => 0); - this.fellAsleepAt = null; - } - - sleep (fellAsleepAt) { - this.fellAsleepAt = fellAsleepAt; - } - - awake (awokeAt) { - for (let i = this.fellAsleepAt; i < awokeAt; i++) { - this.minutesAsleep[i] += 1; - } - } - - get totalSleepMinutes () { - return this.minutesAsleep.reduce((a, b) => a + b, 0); - } - - get sleepiestMinute () { - return this.minutesAsleep - .map((value, index) => ({ index, value })) - .sort((a, b) => b.value - a.value)[0].index; - } -} - -const sleep = (input) => { - const guards = {}; - const schedule = input - .split('\n') - .map((x) => x.trim()) - .sort() - .map((x) => { - const parts = x.match(/\[(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})\] (.*)/); - - return { - minute: +parts[5], - message: parts[6], - }; - }); - - let currentGuard = null; - - for (let i = 0; i < schedule.length; i++) { - const { message, minute } = schedule[i]; - - if (/Guard/.test(message)) { - const parts = message.match(/Guard #(\d+) begins shift/); - const guardId = +parts[1]; - const guard = guards[guardId] ? guards[guardId] : new Guard(guardId); - - currentGuard = guards[guardId] = guard; - } else if (message === 'falls asleep') { - currentGuard.sleep(minute); - } else if (message === 'wakes up') { - currentGuard.awake(minute); - } - } - const sleepiestGuard = Object - .keys(guards) - .map((guardId) => guards[guardId]) - .sort((a, b) => b.totalSleepMinutes - a.totalSleepMinutes)[0]; - - return sleepiestGuard.id * sleepiestGuard.sleepiestMinute; -} - -const fs = require('fs'); -console.log(sleep(fs.readFileSync("input.txt").toString())); - +class Guard { + constructor (id) { + this.id = id; + this.minutesAsleep = Array.from({ length: 60 }).map(() => 0); + this.fellAsleepAt = null; + } + + sleep (fellAsleepAt) { + this.fellAsleepAt = fellAsleepAt; + } + + awake (awokeAt) { + for (let i = this.fellAsleepAt; i < awokeAt; i++) { + this.minutesAsleep[i] += 1; + } + } + + get totalSleepMinutes () { + return this.minutesAsleep.reduce((a, b) => a + b, 0); + } + + get sleepiestMinute () { + return this.minutesAsleep + .map((value, index) => ({ index, value })) + .sort((a, b) => b.value - a.value)[0].index; + } +} + +const sleep = (input) => { + const guards = {}; + const schedule = input + .split('\n') + .map((x) => x.trim()) + .sort() + .map((x) => { + const parts = x.match(/\[(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})\] (.*)/); + + return { + minute: +parts[5], + message: parts[6], + }; + }); + + let currentGuard = null; + + for (let i = 0; i < schedule.length; i++) { + const { message, minute } = schedule[i]; + + if (/Guard/.test(message)) { + const parts = message.match(/Guard #(\d+) begins shift/); + const guardId = +parts[1]; + const guard = guards[guardId] ? guards[guardId] : new Guard(guardId); + + currentGuard = guards[guardId] = guard; + } else if (message === 'falls asleep') { + currentGuard.sleep(minute); + } else if (message === 'wakes up') { + currentGuard.awake(minute); + } + } + const sleepiestGuard = Object + .keys(guards) + .map((guardId) => guards[guardId]) + .sort((a, b) => b.totalSleepMinutes - a.totalSleepMinutes)[0]; + + return sleepiestGuard.id * sleepiestGuard.sleepiestMinute; +} + +const fs = require('fs'); +console.log(sleep(fs.readFileSync("input.txt").toString())); + diff --git a/2018/4thDay/challenge1/input.txt b/2018/4thDay/challenge1/input.txt index 6a4973b..b48fee8 100644 --- a/2018/4thDay/challenge1/input.txt +++ b/2018/4thDay/challenge1/input.txt @@ -1,1000 +1,1000 @@ -[1518-09-24 00:59] wakes up -[1518-05-22 00:47] wakes up -[1518-05-08 00:02] Guard #2719 begins shift -[1518-11-12 00:00] Guard #3011 begins shift -[1518-04-12 00:57] wakes up -[1518-05-21 00:32] wakes up -[1518-11-12 00:30] falls asleep -[1518-08-23 00:39] wakes up -[1518-10-18 00:48] wakes up -[1518-09-16 00:28] falls asleep -[1518-04-07 00:54] falls asleep -[1518-10-26 00:38] wakes up -[1518-03-18 00:12] falls asleep -[1518-05-23 00:01] Guard #2027 begins shift -[1518-05-31 00:09] falls asleep -[1518-05-19 00:09] falls asleep -[1518-05-28 00:02] Guard #2719 begins shift -[1518-09-24 00:04] falls asleep -[1518-03-31 00:42] falls asleep -[1518-09-04 00:52] wakes up -[1518-08-27 23:48] Guard #1657 begins shift -[1518-08-18 00:22] falls asleep -[1518-07-28 00:45] wakes up -[1518-11-15 00:31] falls asleep -[1518-09-20 00:46] wakes up -[1518-07-11 00:54] falls asleep -[1518-09-19 00:00] Guard #2027 begins shift -[1518-06-01 00:58] wakes up -[1518-06-03 00:56] wakes up -[1518-05-18 00:52] falls asleep -[1518-10-25 00:05] falls asleep -[1518-04-15 00:33] wakes up -[1518-08-11 23:59] Guard #3023 begins shift -[1518-08-06 00:18] falls asleep -[1518-08-23 00:34] falls asleep -[1518-08-05 00:22] wakes up -[1518-04-22 23:58] Guard #1657 begins shift -[1518-06-30 00:54] wakes up -[1518-11-21 00:14] wakes up -[1518-06-18 23:54] Guard #3361 begins shift -[1518-10-27 00:51] wakes up -[1518-10-01 00:26] falls asleep -[1518-06-30 00:38] wakes up -[1518-05-05 00:33] wakes up -[1518-03-12 00:24] wakes up -[1518-07-26 00:33] wakes up -[1518-03-22 00:16] wakes up -[1518-04-21 00:58] wakes up -[1518-08-08 23:58] Guard #563 begins shift -[1518-05-23 00:25] wakes up -[1518-08-25 00:44] wakes up -[1518-04-29 00:57] wakes up -[1518-09-23 23:53] Guard #2027 begins shift -[1518-03-31 00:00] Guard #743 begins shift -[1518-04-05 00:02] Guard #3011 begins shift -[1518-10-16 00:00] Guard #659 begins shift -[1518-06-24 00:58] wakes up -[1518-05-06 23:59] Guard #2719 begins shift -[1518-03-21 00:55] falls asleep -[1518-08-21 00:29] falls asleep -[1518-07-19 00:14] falls asleep -[1518-09-03 00:01] falls asleep -[1518-10-25 00:54] wakes up -[1518-10-21 23:47] Guard #743 begins shift -[1518-05-21 00:26] falls asleep -[1518-05-11 00:47] wakes up -[1518-05-06 00:23] falls asleep -[1518-11-18 00:47] wakes up -[1518-08-04 00:04] falls asleep -[1518-06-19 00:05] wakes up -[1518-11-05 23:57] Guard #3119 begins shift -[1518-11-11 00:00] Guard #743 begins shift -[1518-09-23 00:56] wakes up -[1518-09-19 00:40] wakes up -[1518-06-16 00:00] Guard #3089 begins shift -[1518-09-15 00:43] wakes up -[1518-03-30 00:54] wakes up -[1518-06-20 00:01] falls asleep -[1518-09-18 00:00] Guard #3119 begins shift -[1518-06-15 00:25] falls asleep -[1518-08-14 00:47] falls asleep -[1518-06-29 00:48] falls asleep -[1518-08-28 00:08] wakes up -[1518-03-17 23:57] Guard #3089 begins shift -[1518-06-06 23:50] Guard #1657 begins shift -[1518-08-13 00:01] Guard #2927 begins shift -[1518-06-09 00:00] Guard #563 begins shift -[1518-08-16 00:49] wakes up -[1518-06-19 00:04] falls asleep -[1518-07-10 00:39] falls asleep -[1518-07-22 23:58] Guard #3023 begins shift -[1518-06-16 23:53] Guard #149 begins shift -[1518-05-25 23:50] Guard #1013 begins shift -[1518-05-12 00:01] Guard #3089 begins shift -[1518-08-01 00:46] wakes up -[1518-06-28 00:46] wakes up -[1518-10-08 00:34] wakes up -[1518-09-16 00:42] wakes up -[1518-09-22 00:04] Guard #1013 begins shift -[1518-09-07 00:45] falls asleep -[1518-05-12 00:49] falls asleep -[1518-09-14 00:29] falls asleep -[1518-03-29 23:54] Guard #3023 begins shift -[1518-05-06 00:03] Guard #3361 begins shift -[1518-09-03 00:30] falls asleep -[1518-07-13 00:51] wakes up -[1518-09-15 00:09] falls asleep -[1518-04-28 00:06] falls asleep -[1518-08-14 00:39] wakes up -[1518-11-04 00:08] falls asleep -[1518-08-19 00:24] wakes up -[1518-11-05 00:57] wakes up -[1518-08-23 00:02] Guard #2719 begins shift -[1518-06-08 00:53] falls asleep -[1518-05-08 00:30] falls asleep -[1518-04-06 00:49] wakes up -[1518-09-15 00:04] Guard #2719 begins shift -[1518-11-08 00:52] wakes up -[1518-05-03 23:57] Guard #2719 begins shift -[1518-08-29 00:26] wakes up -[1518-09-24 00:16] wakes up -[1518-07-21 00:53] wakes up -[1518-10-06 00:52] falls asleep -[1518-07-30 00:31] falls asleep -[1518-07-12 00:50] wakes up -[1518-08-11 00:54] wakes up -[1518-03-22 00:00] Guard #2027 begins shift -[1518-08-22 00:04] falls asleep -[1518-10-08 00:00] Guard #1657 begins shift -[1518-11-06 00:48] falls asleep -[1518-05-31 00:46] wakes up -[1518-10-28 00:40] wakes up -[1518-07-08 00:22] wakes up -[1518-06-05 23:57] Guard #1993 begins shift -[1518-05-03 00:46] wakes up -[1518-07-25 23:56] Guard #149 begins shift -[1518-07-22 00:56] wakes up -[1518-11-06 00:41] wakes up -[1518-06-07 00:50] wakes up -[1518-04-28 00:02] Guard #149 begins shift -[1518-09-27 00:08] falls asleep -[1518-10-05 00:17] falls asleep -[1518-09-23 00:01] Guard #881 begins shift -[1518-05-24 00:59] wakes up -[1518-05-30 00:01] Guard #743 begins shift -[1518-06-18 00:28] wakes up -[1518-06-11 00:08] falls asleep -[1518-08-30 00:25] falls asleep -[1518-04-29 00:08] falls asleep -[1518-05-01 00:50] wakes up -[1518-03-12 00:20] falls asleep -[1518-08-02 00:41] wakes up -[1518-10-14 00:58] wakes up -[1518-10-16 23:53] Guard #2843 begins shift -[1518-11-06 00:58] wakes up -[1518-04-19 00:03] Guard #2719 begins shift -[1518-07-23 23:59] Guard #3083 begins shift -[1518-04-21 00:41] falls asleep -[1518-11-18 00:54] falls asleep -[1518-04-03 00:45] falls asleep -[1518-05-03 00:58] wakes up -[1518-06-27 00:20] wakes up -[1518-08-26 00:17] falls asleep -[1518-05-04 00:44] falls asleep -[1518-05-03 00:16] wakes up -[1518-04-03 00:04] Guard #2843 begins shift -[1518-09-04 00:03] Guard #3023 begins shift -[1518-03-11 00:00] Guard #1163 begins shift -[1518-05-03 00:57] falls asleep -[1518-06-16 00:51] wakes up -[1518-05-04 00:41] wakes up -[1518-09-25 00:00] Guard #1163 begins shift -[1518-04-02 00:56] wakes up -[1518-07-12 00:39] falls asleep -[1518-06-26 00:52] falls asleep -[1518-03-15 00:00] Guard #563 begins shift -[1518-06-07 00:22] falls asleep -[1518-04-19 00:31] falls asleep -[1518-05-11 00:04] Guard #2927 begins shift -[1518-04-03 00:35] wakes up -[1518-09-30 00:01] Guard #1993 begins shift -[1518-11-14 23:57] Guard #2017 begins shift -[1518-05-16 00:41] falls asleep -[1518-09-23 00:51] wakes up -[1518-08-27 00:35] falls asleep -[1518-04-29 00:22] falls asleep -[1518-03-30 00:27] wakes up -[1518-09-07 00:13] wakes up -[1518-11-17 00:00] Guard #1993 begins shift -[1518-11-20 23:46] Guard #3361 begins shift -[1518-03-22 00:25] falls asleep -[1518-05-01 00:38] wakes up -[1518-11-02 23:56] Guard #659 begins shift -[1518-09-22 00:39] falls asleep -[1518-08-13 23:47] Guard #2027 begins shift -[1518-09-30 00:11] wakes up -[1518-06-11 23:58] Guard #2857 begins shift -[1518-08-21 00:53] wakes up -[1518-06-23 00:00] falls asleep -[1518-10-22 00:03] falls asleep -[1518-11-20 00:55] wakes up -[1518-05-17 23:57] Guard #3119 begins shift -[1518-06-14 23:57] Guard #1163 begins shift -[1518-08-19 00:00] Guard #2843 begins shift -[1518-07-11 00:08] falls asleep -[1518-10-01 00:03] Guard #2857 begins shift -[1518-10-23 00:34] wakes up -[1518-04-18 00:13] falls asleep -[1518-05-06 00:39] wakes up -[1518-08-30 00:00] Guard #2843 begins shift -[1518-03-30 00:46] falls asleep -[1518-09-18 00:25] wakes up -[1518-08-09 23:56] Guard #3119 begins shift -[1518-09-15 23:57] Guard #3023 begins shift -[1518-04-19 00:50] wakes up -[1518-08-03 00:22] wakes up -[1518-03-21 00:56] wakes up -[1518-03-24 23:57] Guard #3011 begins shift -[1518-03-22 00:45] wakes up -[1518-04-24 00:58] wakes up -[1518-08-27 00:45] wakes up -[1518-06-22 00:23] falls asleep -[1518-09-16 23:58] Guard #659 begins shift -[1518-03-30 00:01] falls asleep -[1518-04-04 00:46] falls asleep -[1518-10-06 00:54] wakes up -[1518-09-18 00:09] falls asleep -[1518-05-22 00:55] falls asleep -[1518-11-11 00:53] falls asleep -[1518-06-20 00:38] wakes up -[1518-06-14 00:58] wakes up -[1518-08-16 00:04] Guard #149 begins shift -[1518-04-04 00:57] wakes up -[1518-07-26 00:59] wakes up -[1518-09-29 00:03] Guard #563 begins shift -[1518-09-10 00:21] falls asleep -[1518-09-02 23:47] Guard #1993 begins shift -[1518-10-08 00:52] wakes up -[1518-10-18 00:45] falls asleep -[1518-04-22 00:33] wakes up -[1518-08-26 00:47] wakes up -[1518-11-02 00:04] Guard #2857 begins shift -[1518-03-25 00:44] falls asleep -[1518-07-17 00:07] falls asleep -[1518-04-05 00:26] falls asleep -[1518-08-11 00:43] falls asleep -[1518-06-13 23:59] Guard #3023 begins shift -[1518-06-29 00:00] Guard #2017 begins shift -[1518-11-20 00:36] wakes up -[1518-07-13 23:56] Guard #2857 begins shift -[1518-09-07 23:52] Guard #149 begins shift -[1518-04-24 23:58] Guard #3011 begins shift -[1518-03-19 00:47] falls asleep -[1518-07-04 23:56] Guard #653 begins shift -[1518-06-21 00:30] falls asleep -[1518-03-13 00:15] wakes up -[1518-03-13 00:23] falls asleep -[1518-08-10 00:21] falls asleep -[1518-10-01 23:47] Guard #1657 begins shift -[1518-03-26 00:03] Guard #1163 begins shift -[1518-08-18 00:53] falls asleep -[1518-05-02 00:12] falls asleep -[1518-05-26 00:42] falls asleep -[1518-10-31 00:21] wakes up -[1518-05-14 23:59] Guard #1013 begins shift -[1518-05-25 00:48] wakes up -[1518-08-25 00:52] falls asleep -[1518-06-17 00:05] falls asleep -[1518-06-16 00:14] falls asleep -[1518-04-16 00:51] wakes up -[1518-05-18 23:56] Guard #2017 begins shift -[1518-06-22 00:45] wakes up -[1518-05-30 00:59] wakes up -[1518-07-17 00:14] falls asleep -[1518-10-19 00:20] falls asleep -[1518-05-12 23:52] Guard #3361 begins shift -[1518-09-26 00:27] falls asleep -[1518-09-05 00:00] Guard #3023 begins shift -[1518-11-22 23:58] Guard #2719 begins shift -[1518-09-12 00:00] falls asleep -[1518-08-06 00:34] wakes up -[1518-06-20 00:43] falls asleep -[1518-06-08 00:59] wakes up -[1518-08-28 00:03] falls asleep -[1518-09-02 00:08] falls asleep -[1518-08-29 00:56] wakes up -[1518-07-01 00:56] wakes up -[1518-04-13 00:00] Guard #2719 begins shift -[1518-05-29 00:55] wakes up -[1518-04-14 00:54] falls asleep -[1518-04-20 00:26] falls asleep -[1518-06-20 00:50] wakes up -[1518-09-01 00:52] falls asleep -[1518-11-10 00:21] falls asleep -[1518-06-18 00:26] falls asleep -[1518-07-23 00:26] falls asleep -[1518-08-18 00:41] wakes up -[1518-07-29 00:20] wakes up -[1518-03-21 00:31] wakes up -[1518-04-14 00:55] wakes up -[1518-08-01 00:35] falls asleep -[1518-08-13 00:07] falls asleep -[1518-06-04 00:03] falls asleep -[1518-06-01 00:00] Guard #2857 begins shift -[1518-07-20 00:18] falls asleep -[1518-05-09 00:02] Guard #3011 begins shift -[1518-10-27 00:37] falls asleep -[1518-07-30 23:59] Guard #2719 begins shift -[1518-05-13 00:00] falls asleep -[1518-03-24 00:29] wakes up -[1518-10-25 00:49] falls asleep -[1518-03-31 00:36] wakes up -[1518-11-17 00:08] falls asleep -[1518-05-26 00:01] falls asleep -[1518-07-21 23:57] Guard #149 begins shift -[1518-06-18 00:36] falls asleep -[1518-07-09 00:34] falls asleep -[1518-06-03 00:43] falls asleep -[1518-04-15 00:38] falls asleep -[1518-06-24 23:56] Guard #2719 begins shift -[1518-07-25 00:29] falls asleep -[1518-03-21 00:05] falls asleep -[1518-10-20 00:04] Guard #1163 begins shift -[1518-04-27 00:51] wakes up -[1518-07-07 00:02] Guard #2843 begins shift -[1518-07-18 00:58] wakes up -[1518-04-11 00:04] Guard #2719 begins shift -[1518-08-17 00:57] wakes up -[1518-11-11 00:57] wakes up -[1518-06-18 00:48] wakes up -[1518-11-11 00:42] wakes up -[1518-06-21 00:55] falls asleep -[1518-10-12 00:54] wakes up -[1518-08-15 00:47] wakes up -[1518-06-24 00:57] falls asleep -[1518-10-14 00:16] falls asleep -[1518-03-28 00:30] wakes up -[1518-05-26 00:47] wakes up -[1518-06-02 00:04] Guard #743 begins shift -[1518-04-12 00:01] Guard #2927 begins shift -[1518-07-18 00:00] Guard #3083 begins shift -[1518-08-11 00:31] wakes up -[1518-06-27 00:33] falls asleep -[1518-08-10 00:51] wakes up -[1518-04-27 00:26] falls asleep -[1518-07-01 00:37] wakes up -[1518-07-01 00:00] Guard #2017 begins shift -[1518-10-26 00:58] wakes up -[1518-11-17 00:53] wakes up -[1518-06-23 23:56] Guard #3089 begins shift -[1518-07-27 00:38] wakes up -[1518-11-17 00:39] wakes up -[1518-04-14 00:29] wakes up -[1518-05-26 00:53] wakes up -[1518-07-27 00:02] Guard #2857 begins shift -[1518-08-07 00:06] falls asleep -[1518-08-23 00:57] wakes up -[1518-07-22 00:30] falls asleep -[1518-08-01 00:04] Guard #653 begins shift -[1518-04-08 00:33] wakes up -[1518-08-17 00:00] Guard #3023 begins shift -[1518-03-13 00:09] falls asleep -[1518-04-24 00:29] falls asleep -[1518-05-28 00:07] falls asleep -[1518-08-08 00:08] falls asleep -[1518-07-10 00:56] wakes up -[1518-03-12 23:56] Guard #881 begins shift -[1518-03-11 00:09] falls asleep -[1518-09-08 00:04] falls asleep -[1518-08-01 23:59] Guard #3119 begins shift -[1518-06-19 00:08] falls asleep -[1518-05-04 00:51] wakes up -[1518-10-13 00:35] wakes up -[1518-06-11 00:00] Guard #2027 begins shift -[1518-05-01 00:47] falls asleep -[1518-08-15 00:29] falls asleep -[1518-06-28 00:14] falls asleep -[1518-09-26 23:58] Guard #1163 begins shift -[1518-10-10 00:54] wakes up -[1518-08-25 00:53] wakes up -[1518-07-31 00:37] wakes up -[1518-09-18 00:48] falls asleep -[1518-07-09 00:47] wakes up -[1518-11-17 00:23] falls asleep -[1518-08-26 00:03] Guard #2719 begins shift -[1518-06-17 00:40] wakes up -[1518-06-08 00:29] wakes up -[1518-03-24 00:03] Guard #1657 begins shift -[1518-09-26 00:52] wakes up -[1518-08-14 23:59] Guard #2843 begins shift -[1518-08-06 00:01] Guard #149 begins shift -[1518-11-23 00:22] falls asleep -[1518-10-19 00:45] wakes up -[1518-09-27 00:49] wakes up -[1518-06-26 00:20] falls asleep -[1518-09-07 00:57] wakes up -[1518-11-14 00:04] Guard #743 begins shift -[1518-03-16 00:12] wakes up -[1518-09-18 00:54] wakes up -[1518-10-29 23:58] Guard #3119 begins shift -[1518-04-13 23:49] Guard #1013 begins shift -[1518-09-19 00:47] falls asleep -[1518-11-07 23:58] Guard #3119 begins shift -[1518-06-21 00:00] Guard #881 begins shift -[1518-09-01 00:53] wakes up -[1518-03-20 23:50] Guard #881 begins shift -[1518-09-10 00:55] wakes up -[1518-07-29 00:34] falls asleep -[1518-09-05 00:18] falls asleep -[1518-07-03 00:58] wakes up -[1518-04-28 00:52] wakes up -[1518-08-08 00:33] wakes up -[1518-04-22 00:00] falls asleep -[1518-03-19 00:15] wakes up -[1518-08-14 00:52] wakes up -[1518-07-11 00:56] wakes up -[1518-07-14 23:56] Guard #2017 begins shift -[1518-08-04 23:57] Guard #2027 begins shift -[1518-07-03 00:55] falls asleep -[1518-10-30 00:24] falls asleep -[1518-11-07 00:09] falls asleep -[1518-05-12 00:22] falls asleep -[1518-08-17 23:59] Guard #743 begins shift -[1518-08-23 00:50] falls asleep -[1518-10-29 00:04] Guard #1163 begins shift -[1518-07-04 00:54] wakes up -[1518-03-16 00:59] wakes up -[1518-08-25 00:14] falls asleep -[1518-10-30 23:52] Guard #2843 begins shift -[1518-05-17 00:54] wakes up -[1518-06-04 00:38] wakes up -[1518-05-16 00:46] wakes up -[1518-09-08 00:43] wakes up -[1518-09-01 00:21] falls asleep -[1518-06-17 23:59] Guard #1013 begins shift -[1518-09-27 23:59] Guard #3119 begins shift -[1518-05-17 00:03] Guard #1657 begins shift -[1518-04-21 23:46] Guard #2843 begins shift -[1518-09-11 00:35] falls asleep -[1518-10-01 00:31] wakes up -[1518-08-12 00:39] wakes up -[1518-10-04 00:01] Guard #1013 begins shift -[1518-08-02 23:50] Guard #1657 begins shift -[1518-05-04 00:36] falls asleep -[1518-06-05 00:39] falls asleep -[1518-07-04 00:36] wakes up -[1518-05-19 00:53] falls asleep -[1518-10-07 00:59] wakes up -[1518-06-30 00:49] falls asleep -[1518-06-17 00:18] wakes up -[1518-06-25 00:39] wakes up -[1518-09-28 00:31] falls asleep -[1518-08-24 00:24] wakes up -[1518-08-10 00:08] falls asleep -[1518-04-06 00:02] Guard #1163 begins shift -[1518-04-11 00:38] wakes up -[1518-07-02 00:52] wakes up -[1518-07-07 00:57] wakes up -[1518-04-30 00:15] falls asleep -[1518-04-17 00:48] wakes up -[1518-03-16 00:25] falls asleep -[1518-10-06 00:40] wakes up -[1518-10-13 00:00] falls asleep -[1518-05-30 23:56] Guard #2857 begins shift -[1518-06-06 00:54] wakes up -[1518-04-15 00:57] wakes up -[1518-06-21 00:57] wakes up -[1518-10-24 23:51] Guard #149 begins shift -[1518-03-26 00:44] wakes up -[1518-08-31 00:52] wakes up -[1518-03-28 00:51] falls asleep -[1518-10-25 23:47] Guard #3023 begins shift -[1518-07-14 00:52] wakes up -[1518-05-09 00:19] falls asleep -[1518-10-06 00:18] falls asleep -[1518-08-10 00:18] wakes up -[1518-05-19 00:28] wakes up -[1518-08-04 00:36] wakes up -[1518-06-13 00:49] falls asleep -[1518-04-16 00:09] falls asleep -[1518-05-20 00:38] wakes up -[1518-04-24 00:01] Guard #2719 begins shift -[1518-05-10 00:58] wakes up -[1518-11-23 00:41] wakes up -[1518-04-17 00:21] falls asleep -[1518-11-21 00:00] falls asleep -[1518-08-29 00:15] falls asleep -[1518-08-19 23:57] Guard #2843 begins shift -[1518-11-01 00:59] wakes up -[1518-05-03 00:00] Guard #2857 begins shift -[1518-10-02 00:32] wakes up -[1518-08-07 23:57] Guard #3089 begins shift -[1518-10-29 00:51] falls asleep -[1518-03-17 00:08] falls asleep -[1518-03-19 00:32] falls asleep -[1518-07-30 00:41] wakes up -[1518-07-14 00:11] falls asleep -[1518-07-16 00:04] Guard #2927 begins shift -[1518-03-14 00:30] falls asleep -[1518-10-05 00:46] wakes up -[1518-08-06 23:57] Guard #1993 begins shift -[1518-04-23 00:44] falls asleep -[1518-10-18 00:26] wakes up -[1518-04-15 00:52] wakes up -[1518-04-01 00:03] Guard #2719 begins shift -[1518-11-05 00:00] Guard #149 begins shift -[1518-05-07 00:17] falls asleep -[1518-10-10 00:00] Guard #3361 begins shift -[1518-07-28 00:00] Guard #743 begins shift -[1518-03-31 00:34] falls asleep -[1518-05-05 00:11] falls asleep -[1518-07-29 00:16] falls asleep -[1518-08-21 23:50] Guard #2927 begins shift -[1518-03-22 00:49] falls asleep -[1518-06-07 23:56] Guard #1163 begins shift -[1518-10-15 00:00] Guard #2027 begins shift -[1518-08-24 00:34] falls asleep -[1518-07-28 00:41] falls asleep -[1518-11-13 00:49] wakes up -[1518-07-02 00:32] falls asleep -[1518-09-21 00:17] falls asleep -[1518-09-02 00:00] Guard #3011 begins shift -[1518-04-15 00:02] falls asleep -[1518-09-26 00:00] Guard #1657 begins shift -[1518-05-03 00:12] falls asleep -[1518-09-09 00:44] wakes up -[1518-04-04 00:36] wakes up -[1518-05-23 23:59] Guard #3083 begins shift -[1518-04-07 00:58] wakes up -[1518-05-18 00:53] wakes up -[1518-05-15 00:56] wakes up -[1518-08-17 00:25] falls asleep -[1518-05-13 00:39] wakes up -[1518-06-24 00:18] falls asleep -[1518-04-07 00:50] wakes up -[1518-05-17 00:32] wakes up -[1518-06-19 00:32] wakes up -[1518-07-09 00:01] Guard #2719 begins shift -[1518-03-13 00:53] wakes up -[1518-06-02 00:44] wakes up -[1518-10-31 00:01] falls asleep -[1518-10-05 00:00] Guard #1013 begins shift -[1518-06-25 00:36] falls asleep -[1518-05-08 00:37] wakes up -[1518-07-02 00:49] falls asleep -[1518-05-12 00:55] wakes up -[1518-05-21 00:00] Guard #3023 begins shift -[1518-07-04 00:51] falls asleep -[1518-08-25 00:02] Guard #3011 begins shift -[1518-10-29 00:52] wakes up -[1518-04-03 00:50] wakes up -[1518-04-16 00:43] falls asleep -[1518-11-06 00:28] falls asleep -[1518-04-10 00:05] falls asleep -[1518-06-19 00:15] wakes up -[1518-04-14 00:06] wakes up -[1518-06-27 00:34] wakes up -[1518-05-27 00:52] wakes up -[1518-10-05 00:59] wakes up -[1518-09-19 00:58] wakes up -[1518-05-31 00:11] wakes up -[1518-09-14 00:59] wakes up -[1518-10-28 00:35] falls asleep -[1518-08-11 00:04] Guard #1163 begins shift -[1518-08-29 00:04] Guard #881 begins shift -[1518-09-25 00:22] falls asleep -[1518-06-30 00:04] Guard #1657 begins shift -[1518-05-04 00:56] wakes up -[1518-11-07 00:13] wakes up -[1518-06-30 00:19] falls asleep -[1518-08-22 00:09] wakes up -[1518-08-18 00:55] wakes up -[1518-05-28 00:46] wakes up -[1518-09-04 00:10] falls asleep -[1518-08-30 00:43] wakes up -[1518-03-11 00:32] wakes up -[1518-04-27 00:00] Guard #743 begins shift -[1518-10-20 00:26] wakes up -[1518-05-20 00:00] Guard #743 begins shift -[1518-04-03 23:59] Guard #3011 begins shift -[1518-07-29 00:59] wakes up -[1518-07-17 00:10] wakes up -[1518-04-07 00:04] Guard #2843 begins shift -[1518-07-15 00:52] wakes up -[1518-11-22 00:19] falls asleep -[1518-04-23 00:48] wakes up -[1518-07-19 00:52] wakes up -[1518-04-07 23:57] Guard #1163 begins shift -[1518-07-08 00:01] Guard #1993 begins shift -[1518-07-23 00:46] wakes up -[1518-07-21 00:01] Guard #3119 begins shift -[1518-03-16 00:03] Guard #3083 begins shift -[1518-03-28 00:56] wakes up -[1518-09-30 00:09] falls asleep -[1518-09-07 00:02] Guard #2017 begins shift -[1518-07-10 00:01] Guard #1993 begins shift -[1518-10-15 00:53] wakes up -[1518-10-08 00:18] falls asleep -[1518-06-26 00:54] wakes up -[1518-03-12 00:36] falls asleep -[1518-03-16 00:06] falls asleep -[1518-08-06 00:47] wakes up -[1518-10-22 00:29] wakes up -[1518-09-02 00:58] wakes up -[1518-07-18 00:12] falls asleep -[1518-09-19 23:58] Guard #1013 begins shift -[1518-08-31 00:10] falls asleep -[1518-03-24 00:18] falls asleep -[1518-04-18 00:30] wakes up -[1518-11-09 00:30] falls asleep -[1518-05-21 00:38] falls asleep -[1518-10-29 00:23] wakes up -[1518-10-23 00:00] Guard #2027 begins shift -[1518-10-09 00:09] falls asleep -[1518-09-11 00:53] falls asleep -[1518-07-04 00:32] falls asleep -[1518-07-31 00:32] falls asleep -[1518-09-01 00:58] wakes up -[1518-07-24 00:50] wakes up -[1518-07-26 00:49] falls asleep -[1518-11-18 00:15] falls asleep -[1518-04-13 00:31] falls asleep -[1518-09-03 00:22] wakes up -[1518-08-30 23:58] Guard #3361 begins shift -[1518-04-30 00:52] wakes up -[1518-06-15 00:56] falls asleep -[1518-07-02 00:56] falls asleep -[1518-04-19 23:56] Guard #1657 begins shift -[1518-10-09 00:03] Guard #1657 begins shift -[1518-10-07 00:02] Guard #1163 begins shift -[1518-05-24 00:29] falls asleep -[1518-05-23 00:06] falls asleep -[1518-07-10 23:58] Guard #1993 begins shift -[1518-07-03 00:00] Guard #743 begins shift -[1518-06-14 00:54] falls asleep -[1518-09-19 00:39] falls asleep -[1518-07-19 00:01] Guard #2017 begins shift -[1518-11-11 00:18] falls asleep -[1518-04-17 00:02] Guard #1013 begins shift -[1518-05-02 00:56] wakes up -[1518-08-29 00:55] falls asleep -[1518-11-17 00:11] wakes up -[1518-04-02 00:28] falls asleep -[1518-04-28 23:57] Guard #3083 begins shift -[1518-07-28 00:28] wakes up -[1518-09-22 00:47] wakes up -[1518-03-20 00:00] Guard #1657 begins shift -[1518-07-20 00:25] wakes up -[1518-09-06 00:52] wakes up -[1518-10-18 00:38] wakes up -[1518-07-24 00:25] falls asleep -[1518-11-07 00:02] Guard #149 begins shift -[1518-08-15 00:52] falls asleep -[1518-10-20 00:12] falls asleep -[1518-04-09 00:56] wakes up -[1518-09-26 00:18] wakes up -[1518-09-06 00:02] falls asleep -[1518-03-14 00:03] Guard #149 begins shift -[1518-06-06 00:38] falls asleep -[1518-11-13 00:44] falls asleep -[1518-10-23 23:57] Guard #1153 begins shift -[1518-10-28 00:50] falls asleep -[1518-05-14 00:57] wakes up -[1518-09-13 00:36] falls asleep -[1518-09-25 00:42] wakes up -[1518-11-22 00:51] wakes up -[1518-05-09 00:35] wakes up -[1518-10-31 23:59] Guard #2927 begins shift -[1518-11-14 00:26] wakes up -[1518-07-27 00:33] falls asleep -[1518-11-02 00:55] wakes up -[1518-04-08 23:58] Guard #3119 begins shift -[1518-11-16 00:08] falls asleep -[1518-09-30 00:37] falls asleep -[1518-04-10 00:59] wakes up -[1518-10-15 00:10] falls asleep -[1518-08-02 00:58] wakes up -[1518-07-05 00:59] wakes up -[1518-05-05 00:45] falls asleep -[1518-04-06 00:10] falls asleep -[1518-10-18 00:11] falls asleep -[1518-07-12 00:00] Guard #149 begins shift -[1518-06-24 00:40] wakes up -[1518-09-05 00:28] wakes up -[1518-03-18 00:38] wakes up -[1518-10-18 00:36] falls asleep -[1518-11-16 00:19] wakes up -[1518-08-05 00:06] falls asleep -[1518-04-26 00:00] Guard #3083 begins shift -[1518-03-22 00:52] wakes up -[1518-10-21 00:23] falls asleep -[1518-04-02 00:47] falls asleep -[1518-04-20 00:41] wakes up -[1518-11-19 23:57] Guard #1013 begins shift -[1518-09-26 00:58] wakes up -[1518-06-26 00:00] Guard #2927 begins shift -[1518-09-01 00:01] Guard #1657 begins shift -[1518-10-22 00:44] wakes up -[1518-11-20 00:50] falls asleep -[1518-10-25 00:41] wakes up -[1518-11-02 00:12] falls asleep -[1518-06-22 00:28] wakes up -[1518-11-04 00:39] wakes up -[1518-05-27 00:04] Guard #653 begins shift -[1518-07-24 00:46] falls asleep -[1518-11-14 00:08] falls asleep -[1518-03-19 00:40] wakes up -[1518-09-03 00:50] wakes up -[1518-07-16 00:59] wakes up -[1518-11-12 00:45] wakes up -[1518-10-11 00:17] falls asleep -[1518-10-30 00:40] wakes up -[1518-08-03 00:00] falls asleep -[1518-03-18 00:46] wakes up -[1518-08-06 00:44] falls asleep -[1518-10-11 00:50] wakes up -[1518-05-21 00:57] wakes up -[1518-09-01 00:43] wakes up -[1518-09-11 00:00] Guard #3011 begins shift -[1518-09-13 00:55] wakes up -[1518-10-27 00:04] Guard #149 begins shift -[1518-05-02 00:03] Guard #149 begins shift -[1518-09-14 00:00] Guard #3119 begins shift -[1518-07-08 00:14] falls asleep -[1518-06-02 00:28] falls asleep -[1518-03-19 00:57] wakes up -[1518-08-13 00:22] wakes up -[1518-05-01 00:04] Guard #653 begins shift -[1518-06-19 00:23] falls asleep -[1518-11-18 00:02] Guard #3011 begins shift -[1518-11-13 00:17] falls asleep -[1518-07-22 00:50] falls asleep -[1518-04-15 00:55] falls asleep -[1518-07-02 00:58] wakes up -[1518-03-28 00:28] falls asleep -[1518-07-01 00:50] falls asleep -[1518-05-31 00:35] falls asleep -[1518-05-13 00:27] wakes up -[1518-10-17 00:05] falls asleep -[1518-06-15 00:57] wakes up -[1518-11-10 00:45] wakes up -[1518-04-04 00:18] falls asleep -[1518-09-20 23:57] Guard #743 begins shift -[1518-10-29 00:11] falls asleep -[1518-05-01 00:25] falls asleep -[1518-11-22 00:40] wakes up -[1518-11-13 00:02] falls asleep -[1518-09-11 00:50] wakes up -[1518-09-12 23:56] Guard #653 begins shift -[1518-07-11 00:38] wakes up -[1518-03-22 23:59] Guard #659 begins shift -[1518-04-09 00:18] falls asleep -[1518-08-23 23:53] Guard #2927 begins shift -[1518-07-02 00:04] Guard #1993 begins shift -[1518-08-21 00:00] Guard #1993 begins shift -[1518-10-05 00:53] falls asleep -[1518-03-22 00:14] falls asleep -[1518-09-06 00:15] wakes up -[1518-09-24 00:57] falls asleep -[1518-08-14 00:03] falls asleep -[1518-05-25 00:41] falls asleep -[1518-04-23 00:28] wakes up -[1518-04-12 00:45] wakes up -[1518-05-10 00:14] falls asleep -[1518-03-26 23:54] Guard #3023 begins shift -[1518-05-11 00:54] wakes up -[1518-11-05 00:29] falls asleep -[1518-10-03 00:34] wakes up -[1518-04-09 23:50] Guard #653 begins shift -[1518-04-28 00:22] wakes up -[1518-07-07 00:08] falls asleep -[1518-03-28 00:01] Guard #2927 begins shift -[1518-07-05 23:58] Guard #1153 begins shift -[1518-11-23 00:37] falls asleep -[1518-09-05 00:59] wakes up -[1518-04-10 00:56] falls asleep -[1518-11-18 00:44] falls asleep -[1518-10-08 00:39] falls asleep -[1518-09-10 00:02] Guard #2017 begins shift -[1518-03-19 00:02] falls asleep -[1518-04-01 00:07] falls asleep -[1518-10-05 23:57] Guard #3023 begins shift -[1518-11-01 00:46] falls asleep -[1518-07-03 00:34] falls asleep -[1518-10-23 00:18] falls asleep -[1518-07-07 00:46] wakes up -[1518-07-26 00:07] falls asleep -[1518-08-27 00:04] Guard #3011 begins shift -[1518-04-08 00:17] falls asleep -[1518-05-22 00:56] wakes up -[1518-10-22 00:36] falls asleep -[1518-04-14 00:02] falls asleep -[1518-07-25 00:37] wakes up -[1518-08-03 23:50] Guard #2843 begins shift -[1518-03-31 00:56] wakes up -[1518-07-04 00:00] Guard #3023 begins shift -[1518-11-16 00:00] Guard #2027 begins shift -[1518-03-27 00:01] falls asleep -[1518-09-01 00:57] falls asleep -[1518-11-22 00:49] falls asleep -[1518-07-05 00:38] falls asleep -[1518-05-27 00:29] falls asleep -[1518-08-12 00:32] falls asleep -[1518-05-22 00:34] falls asleep -[1518-05-11 00:21] falls asleep -[1518-06-19 23:52] Guard #2927 begins shift -[1518-04-23 00:26] falls asleep -[1518-03-11 23:56] Guard #1993 begins shift -[1518-08-16 00:14] falls asleep -[1518-10-30 00:56] wakes up -[1518-03-18 00:43] falls asleep -[1518-11-03 23:58] Guard #881 begins shift -[1518-03-14 00:39] wakes up -[1518-09-12 00:57] wakes up -[1518-11-17 00:47] falls asleep -[1518-04-16 00:38] wakes up -[1518-09-23 00:54] falls asleep -[1518-08-20 00:39] wakes up -[1518-06-08 00:25] falls asleep -[1518-03-20 00:10] falls asleep -[1518-07-01 00:21] falls asleep -[1518-03-24 00:44] wakes up -[1518-07-17 00:59] wakes up -[1518-06-23 00:38] wakes up -[1518-04-02 00:02] Guard #2857 begins shift -[1518-07-15 00:51] falls asleep -[1518-09-11 23:52] Guard #1163 begins shift -[1518-04-26 00:40] falls asleep -[1518-03-29 00:20] falls asleep -[1518-07-30 00:00] Guard #3361 begins shift -[1518-06-05 00:49] wakes up -[1518-10-26 00:00] falls asleep -[1518-07-03 00:51] wakes up -[1518-10-12 00:46] falls asleep -[1518-10-21 00:57] wakes up -[1518-07-25 00:02] falls asleep -[1518-04-15 23:56] Guard #3119 begins shift -[1518-10-17 00:19] wakes up -[1518-06-05 00:45] falls asleep -[1518-07-28 00:17] falls asleep -[1518-06-22 00:43] falls asleep -[1518-07-25 00:24] wakes up -[1518-09-20 00:40] falls asleep -[1518-07-17 00:00] Guard #743 begins shift -[1518-03-16 23:59] Guard #2017 begins shift -[1518-09-05 00:36] falls asleep -[1518-08-11 00:14] falls asleep -[1518-04-12 00:48] falls asleep -[1518-05-20 00:23] falls asleep -[1518-04-11 00:33] falls asleep -[1518-09-08 23:58] Guard #1163 begins shift -[1518-09-09 00:09] falls asleep -[1518-04-02 00:40] wakes up -[1518-06-11 00:54] wakes up -[1518-09-05 23:50] Guard #2017 begins shift -[1518-11-22 00:04] falls asleep -[1518-04-29 00:19] wakes up -[1518-05-19 00:57] wakes up -[1518-05-26 00:34] wakes up -[1518-05-17 00:10] falls asleep -[1518-04-01 00:54] wakes up -[1518-04-18 00:00] Guard #3083 begins shift -[1518-04-25 00:59] wakes up -[1518-06-22 00:02] Guard #2027 begins shift -[1518-08-20 00:34] falls asleep -[1518-05-25 00:00] Guard #3023 begins shift -[1518-07-20 00:03] Guard #3011 begins shift -[1518-03-27 00:59] wakes up -[1518-06-05 00:42] wakes up -[1518-08-19 00:19] falls asleep -[1518-11-23 00:32] wakes up -[1518-04-12 00:26] falls asleep -[1518-10-10 00:39] falls asleep -[1518-11-15 00:51] wakes up -[1518-09-27 00:38] wakes up -[1518-10-12 23:53] Guard #653 begins shift -[1518-05-03 00:25] falls asleep -[1518-10-09 00:49] wakes up -[1518-11-08 00:30] falls asleep -[1518-05-26 00:50] falls asleep -[1518-11-13 00:41] wakes up -[1518-09-30 00:41] wakes up -[1518-04-14 00:22] falls asleep -[1518-05-04 00:54] falls asleep -[1518-05-05 00:03] Guard #2027 begins shift -[1518-04-05 00:44] wakes up -[1518-07-24 00:42] wakes up -[1518-06-07 00:08] wakes up -[1518-10-02 00:00] falls asleep -[1518-06-12 00:16] falls asleep -[1518-04-10 00:34] wakes up -[1518-07-13 00:02] Guard #2719 begins shift -[1518-04-21 00:03] Guard #881 begins shift -[1518-10-11 00:04] Guard #2927 begins shift -[1518-06-02 23:56] Guard #3011 begins shift -[1518-03-12 00:38] wakes up -[1518-06-26 23:48] Guard #3023 begins shift -[1518-05-16 00:07] falls asleep -[1518-04-28 00:48] falls asleep -[1518-05-22 00:02] Guard #881 begins shift -[1518-03-18 23:48] Guard #3089 begins shift -[1518-08-08 00:57] wakes up -[1518-09-21 00:21] wakes up -[1518-04-29 23:58] Guard #2843 begins shift -[1518-03-17 00:52] wakes up -[1518-06-10 00:00] Guard #563 begins shift -[1518-09-28 00:57] wakes up -[1518-05-16 00:22] wakes up -[1518-04-03 00:13] falls asleep -[1518-10-04 00:44] wakes up -[1518-06-27 00:01] falls asleep -[1518-06-26 00:49] wakes up -[1518-05-29 00:28] falls asleep -[1518-06-29 00:56] wakes up -[1518-11-20 00:21] falls asleep -[1518-10-03 00:07] falls asleep -[1518-05-16 00:00] Guard #1993 begins shift -[1518-09-06 00:34] falls asleep -[1518-05-17 00:38] falls asleep -[1518-07-28 23:56] Guard #2857 begins shift -[1518-06-13 00:54] wakes up -[1518-06-01 00:30] falls asleep -[1518-11-09 00:57] wakes up -[1518-11-22 00:06] wakes up -[1518-10-04 00:09] falls asleep -[1518-10-19 00:00] Guard #3023 begins shift -[1518-11-09 23:58] Guard #881 begins shift -[1518-10-28 00:02] Guard #2719 begins shift -[1518-04-13 00:45] wakes up -[1518-05-15 00:35] falls asleep -[1518-10-12 00:00] Guard #3119 begins shift -[1518-04-07 00:46] falls asleep -[1518-03-29 00:03] Guard #2027 begins shift -[1518-03-24 00:43] falls asleep -[1518-04-26 00:49] wakes up -[1518-09-26 00:15] falls asleep -[1518-08-24 00:40] wakes up -[1518-04-14 23:54] Guard #2857 begins shift -[1518-03-20 00:32] wakes up -[1518-10-13 00:50] falls asleep -[1518-11-12 23:48] Guard #3119 begins shift -[1518-07-07 00:56] falls asleep -[1518-10-21 00:03] Guard #3023 begins shift -[1518-08-15 00:53] wakes up -[1518-05-07 00:55] wakes up -[1518-08-08 00:53] falls asleep -[1518-08-02 00:49] falls asleep -[1518-11-18 00:56] wakes up -[1518-10-30 00:50] falls asleep -[1518-11-18 00:41] wakes up -[1518-05-30 00:16] falls asleep -[1518-06-28 00:00] Guard #3011 begins shift -[1518-09-23 00:17] falls asleep -[1518-10-26 00:54] falls asleep -[1518-10-08 00:31] falls asleep -[1518-06-04 23:59] Guard #149 begins shift -[1518-09-07 00:08] falls asleep -[1518-06-03 23:52] Guard #1993 begins shift -[1518-07-21 00:14] falls asleep -[1518-06-13 00:00] Guard #2927 begins shift -[1518-07-24 23:48] Guard #149 begins shift -[1518-10-08 00:25] wakes up -[1518-10-03 00:03] Guard #743 begins shift -[1518-05-09 23:57] Guard #2027 begins shift -[1518-06-21 00:49] wakes up -[1518-07-13 00:34] falls asleep -[1518-03-26 00:13] falls asleep -[1518-05-12 00:28] wakes up -[1518-09-27 00:42] falls asleep -[1518-05-29 00:04] Guard #2719 begins shift -[1518-05-13 23:56] Guard #3011 begins shift -[1518-10-28 00:56] wakes up -[1518-07-02 00:37] wakes up -[1518-06-17 00:32] falls asleep -[1518-05-13 00:36] falls asleep -[1518-04-25 00:46] falls asleep -[1518-06-07 00:01] falls asleep -[1518-10-13 00:59] wakes up -[1518-11-09 00:02] Guard #3011 begins shift -[1518-09-26 00:57] falls asleep -[1518-09-11 00:54] wakes up -[1518-05-14 00:29] falls asleep -[1518-08-02 00:29] falls asleep -[1518-08-24 00:00] falls asleep -[1518-11-13 00:13] wakes up -[1518-05-05 00:56] wakes up -[1518-06-22 23:54] Guard #2843 begins shift -[1518-08-07 00:48] wakes up -[1518-11-19 00:00] Guard #659 begins shift -[1518-07-22 00:34] wakes up -[1518-03-29 00:54] wakes up -[1518-10-07 00:30] falls asleep -[1518-11-21 23:51] Guard #1013 begins shift -[1518-10-18 00:03] Guard #2027 begins shift -[1518-03-25 00:56] wakes up -[1518-07-16 00:38] falls asleep -[1518-06-12 00:59] wakes up -[1518-10-14 00:00] Guard #2027 begins shift -[1518-05-11 00:52] falls asleep +[1518-09-24 00:59] wakes up +[1518-05-22 00:47] wakes up +[1518-05-08 00:02] Guard #2719 begins shift +[1518-11-12 00:00] Guard #3011 begins shift +[1518-04-12 00:57] wakes up +[1518-05-21 00:32] wakes up +[1518-11-12 00:30] falls asleep +[1518-08-23 00:39] wakes up +[1518-10-18 00:48] wakes up +[1518-09-16 00:28] falls asleep +[1518-04-07 00:54] falls asleep +[1518-10-26 00:38] wakes up +[1518-03-18 00:12] falls asleep +[1518-05-23 00:01] Guard #2027 begins shift +[1518-05-31 00:09] falls asleep +[1518-05-19 00:09] falls asleep +[1518-05-28 00:02] Guard #2719 begins shift +[1518-09-24 00:04] falls asleep +[1518-03-31 00:42] falls asleep +[1518-09-04 00:52] wakes up +[1518-08-27 23:48] Guard #1657 begins shift +[1518-08-18 00:22] falls asleep +[1518-07-28 00:45] wakes up +[1518-11-15 00:31] falls asleep +[1518-09-20 00:46] wakes up +[1518-07-11 00:54] falls asleep +[1518-09-19 00:00] Guard #2027 begins shift +[1518-06-01 00:58] wakes up +[1518-06-03 00:56] wakes up +[1518-05-18 00:52] falls asleep +[1518-10-25 00:05] falls asleep +[1518-04-15 00:33] wakes up +[1518-08-11 23:59] Guard #3023 begins shift +[1518-08-06 00:18] falls asleep +[1518-08-23 00:34] falls asleep +[1518-08-05 00:22] wakes up +[1518-04-22 23:58] Guard #1657 begins shift +[1518-06-30 00:54] wakes up +[1518-11-21 00:14] wakes up +[1518-06-18 23:54] Guard #3361 begins shift +[1518-10-27 00:51] wakes up +[1518-10-01 00:26] falls asleep +[1518-06-30 00:38] wakes up +[1518-05-05 00:33] wakes up +[1518-03-12 00:24] wakes up +[1518-07-26 00:33] wakes up +[1518-03-22 00:16] wakes up +[1518-04-21 00:58] wakes up +[1518-08-08 23:58] Guard #563 begins shift +[1518-05-23 00:25] wakes up +[1518-08-25 00:44] wakes up +[1518-04-29 00:57] wakes up +[1518-09-23 23:53] Guard #2027 begins shift +[1518-03-31 00:00] Guard #743 begins shift +[1518-04-05 00:02] Guard #3011 begins shift +[1518-10-16 00:00] Guard #659 begins shift +[1518-06-24 00:58] wakes up +[1518-05-06 23:59] Guard #2719 begins shift +[1518-03-21 00:55] falls asleep +[1518-08-21 00:29] falls asleep +[1518-07-19 00:14] falls asleep +[1518-09-03 00:01] falls asleep +[1518-10-25 00:54] wakes up +[1518-10-21 23:47] Guard #743 begins shift +[1518-05-21 00:26] falls asleep +[1518-05-11 00:47] wakes up +[1518-05-06 00:23] falls asleep +[1518-11-18 00:47] wakes up +[1518-08-04 00:04] falls asleep +[1518-06-19 00:05] wakes up +[1518-11-05 23:57] Guard #3119 begins shift +[1518-11-11 00:00] Guard #743 begins shift +[1518-09-23 00:56] wakes up +[1518-09-19 00:40] wakes up +[1518-06-16 00:00] Guard #3089 begins shift +[1518-09-15 00:43] wakes up +[1518-03-30 00:54] wakes up +[1518-06-20 00:01] falls asleep +[1518-09-18 00:00] Guard #3119 begins shift +[1518-06-15 00:25] falls asleep +[1518-08-14 00:47] falls asleep +[1518-06-29 00:48] falls asleep +[1518-08-28 00:08] wakes up +[1518-03-17 23:57] Guard #3089 begins shift +[1518-06-06 23:50] Guard #1657 begins shift +[1518-08-13 00:01] Guard #2927 begins shift +[1518-06-09 00:00] Guard #563 begins shift +[1518-08-16 00:49] wakes up +[1518-06-19 00:04] falls asleep +[1518-07-10 00:39] falls asleep +[1518-07-22 23:58] Guard #3023 begins shift +[1518-06-16 23:53] Guard #149 begins shift +[1518-05-25 23:50] Guard #1013 begins shift +[1518-05-12 00:01] Guard #3089 begins shift +[1518-08-01 00:46] wakes up +[1518-06-28 00:46] wakes up +[1518-10-08 00:34] wakes up +[1518-09-16 00:42] wakes up +[1518-09-22 00:04] Guard #1013 begins shift +[1518-09-07 00:45] falls asleep +[1518-05-12 00:49] falls asleep +[1518-09-14 00:29] falls asleep +[1518-03-29 23:54] Guard #3023 begins shift +[1518-05-06 00:03] Guard #3361 begins shift +[1518-09-03 00:30] falls asleep +[1518-07-13 00:51] wakes up +[1518-09-15 00:09] falls asleep +[1518-04-28 00:06] falls asleep +[1518-08-14 00:39] wakes up +[1518-11-04 00:08] falls asleep +[1518-08-19 00:24] wakes up +[1518-11-05 00:57] wakes up +[1518-08-23 00:02] Guard #2719 begins shift +[1518-06-08 00:53] falls asleep +[1518-05-08 00:30] falls asleep +[1518-04-06 00:49] wakes up +[1518-09-15 00:04] Guard #2719 begins shift +[1518-11-08 00:52] wakes up +[1518-05-03 23:57] Guard #2719 begins shift +[1518-08-29 00:26] wakes up +[1518-09-24 00:16] wakes up +[1518-07-21 00:53] wakes up +[1518-10-06 00:52] falls asleep +[1518-07-30 00:31] falls asleep +[1518-07-12 00:50] wakes up +[1518-08-11 00:54] wakes up +[1518-03-22 00:00] Guard #2027 begins shift +[1518-08-22 00:04] falls asleep +[1518-10-08 00:00] Guard #1657 begins shift +[1518-11-06 00:48] falls asleep +[1518-05-31 00:46] wakes up +[1518-10-28 00:40] wakes up +[1518-07-08 00:22] wakes up +[1518-06-05 23:57] Guard #1993 begins shift +[1518-05-03 00:46] wakes up +[1518-07-25 23:56] Guard #149 begins shift +[1518-07-22 00:56] wakes up +[1518-11-06 00:41] wakes up +[1518-06-07 00:50] wakes up +[1518-04-28 00:02] Guard #149 begins shift +[1518-09-27 00:08] falls asleep +[1518-10-05 00:17] falls asleep +[1518-09-23 00:01] Guard #881 begins shift +[1518-05-24 00:59] wakes up +[1518-05-30 00:01] Guard #743 begins shift +[1518-06-18 00:28] wakes up +[1518-06-11 00:08] falls asleep +[1518-08-30 00:25] falls asleep +[1518-04-29 00:08] falls asleep +[1518-05-01 00:50] wakes up +[1518-03-12 00:20] falls asleep +[1518-08-02 00:41] wakes up +[1518-10-14 00:58] wakes up +[1518-10-16 23:53] Guard #2843 begins shift +[1518-11-06 00:58] wakes up +[1518-04-19 00:03] Guard #2719 begins shift +[1518-07-23 23:59] Guard #3083 begins shift +[1518-04-21 00:41] falls asleep +[1518-11-18 00:54] falls asleep +[1518-04-03 00:45] falls asleep +[1518-05-03 00:58] wakes up +[1518-06-27 00:20] wakes up +[1518-08-26 00:17] falls asleep +[1518-05-04 00:44] falls asleep +[1518-05-03 00:16] wakes up +[1518-04-03 00:04] Guard #2843 begins shift +[1518-09-04 00:03] Guard #3023 begins shift +[1518-03-11 00:00] Guard #1163 begins shift +[1518-05-03 00:57] falls asleep +[1518-06-16 00:51] wakes up +[1518-05-04 00:41] wakes up +[1518-09-25 00:00] Guard #1163 begins shift +[1518-04-02 00:56] wakes up +[1518-07-12 00:39] falls asleep +[1518-06-26 00:52] falls asleep +[1518-03-15 00:00] Guard #563 begins shift +[1518-06-07 00:22] falls asleep +[1518-04-19 00:31] falls asleep +[1518-05-11 00:04] Guard #2927 begins shift +[1518-04-03 00:35] wakes up +[1518-09-30 00:01] Guard #1993 begins shift +[1518-11-14 23:57] Guard #2017 begins shift +[1518-05-16 00:41] falls asleep +[1518-09-23 00:51] wakes up +[1518-08-27 00:35] falls asleep +[1518-04-29 00:22] falls asleep +[1518-03-30 00:27] wakes up +[1518-09-07 00:13] wakes up +[1518-11-17 00:00] Guard #1993 begins shift +[1518-11-20 23:46] Guard #3361 begins shift +[1518-03-22 00:25] falls asleep +[1518-05-01 00:38] wakes up +[1518-11-02 23:56] Guard #659 begins shift +[1518-09-22 00:39] falls asleep +[1518-08-13 23:47] Guard #2027 begins shift +[1518-09-30 00:11] wakes up +[1518-06-11 23:58] Guard #2857 begins shift +[1518-08-21 00:53] wakes up +[1518-06-23 00:00] falls asleep +[1518-10-22 00:03] falls asleep +[1518-11-20 00:55] wakes up +[1518-05-17 23:57] Guard #3119 begins shift +[1518-06-14 23:57] Guard #1163 begins shift +[1518-08-19 00:00] Guard #2843 begins shift +[1518-07-11 00:08] falls asleep +[1518-10-01 00:03] Guard #2857 begins shift +[1518-10-23 00:34] wakes up +[1518-04-18 00:13] falls asleep +[1518-05-06 00:39] wakes up +[1518-08-30 00:00] Guard #2843 begins shift +[1518-03-30 00:46] falls asleep +[1518-09-18 00:25] wakes up +[1518-08-09 23:56] Guard #3119 begins shift +[1518-09-15 23:57] Guard #3023 begins shift +[1518-04-19 00:50] wakes up +[1518-08-03 00:22] wakes up +[1518-03-21 00:56] wakes up +[1518-03-24 23:57] Guard #3011 begins shift +[1518-03-22 00:45] wakes up +[1518-04-24 00:58] wakes up +[1518-08-27 00:45] wakes up +[1518-06-22 00:23] falls asleep +[1518-09-16 23:58] Guard #659 begins shift +[1518-03-30 00:01] falls asleep +[1518-04-04 00:46] falls asleep +[1518-10-06 00:54] wakes up +[1518-09-18 00:09] falls asleep +[1518-05-22 00:55] falls asleep +[1518-11-11 00:53] falls asleep +[1518-06-20 00:38] wakes up +[1518-06-14 00:58] wakes up +[1518-08-16 00:04] Guard #149 begins shift +[1518-04-04 00:57] wakes up +[1518-07-26 00:59] wakes up +[1518-09-29 00:03] Guard #563 begins shift +[1518-09-10 00:21] falls asleep +[1518-09-02 23:47] Guard #1993 begins shift +[1518-10-08 00:52] wakes up +[1518-10-18 00:45] falls asleep +[1518-04-22 00:33] wakes up +[1518-08-26 00:47] wakes up +[1518-11-02 00:04] Guard #2857 begins shift +[1518-03-25 00:44] falls asleep +[1518-07-17 00:07] falls asleep +[1518-04-05 00:26] falls asleep +[1518-08-11 00:43] falls asleep +[1518-06-13 23:59] Guard #3023 begins shift +[1518-06-29 00:00] Guard #2017 begins shift +[1518-11-20 00:36] wakes up +[1518-07-13 23:56] Guard #2857 begins shift +[1518-09-07 23:52] Guard #149 begins shift +[1518-04-24 23:58] Guard #3011 begins shift +[1518-03-19 00:47] falls asleep +[1518-07-04 23:56] Guard #653 begins shift +[1518-06-21 00:30] falls asleep +[1518-03-13 00:15] wakes up +[1518-03-13 00:23] falls asleep +[1518-08-10 00:21] falls asleep +[1518-10-01 23:47] Guard #1657 begins shift +[1518-03-26 00:03] Guard #1163 begins shift +[1518-08-18 00:53] falls asleep +[1518-05-02 00:12] falls asleep +[1518-05-26 00:42] falls asleep +[1518-10-31 00:21] wakes up +[1518-05-14 23:59] Guard #1013 begins shift +[1518-05-25 00:48] wakes up +[1518-08-25 00:52] falls asleep +[1518-06-17 00:05] falls asleep +[1518-06-16 00:14] falls asleep +[1518-04-16 00:51] wakes up +[1518-05-18 23:56] Guard #2017 begins shift +[1518-06-22 00:45] wakes up +[1518-05-30 00:59] wakes up +[1518-07-17 00:14] falls asleep +[1518-10-19 00:20] falls asleep +[1518-05-12 23:52] Guard #3361 begins shift +[1518-09-26 00:27] falls asleep +[1518-09-05 00:00] Guard #3023 begins shift +[1518-11-22 23:58] Guard #2719 begins shift +[1518-09-12 00:00] falls asleep +[1518-08-06 00:34] wakes up +[1518-06-20 00:43] falls asleep +[1518-06-08 00:59] wakes up +[1518-08-28 00:03] falls asleep +[1518-09-02 00:08] falls asleep +[1518-08-29 00:56] wakes up +[1518-07-01 00:56] wakes up +[1518-04-13 00:00] Guard #2719 begins shift +[1518-05-29 00:55] wakes up +[1518-04-14 00:54] falls asleep +[1518-04-20 00:26] falls asleep +[1518-06-20 00:50] wakes up +[1518-09-01 00:52] falls asleep +[1518-11-10 00:21] falls asleep +[1518-06-18 00:26] falls asleep +[1518-07-23 00:26] falls asleep +[1518-08-18 00:41] wakes up +[1518-07-29 00:20] wakes up +[1518-03-21 00:31] wakes up +[1518-04-14 00:55] wakes up +[1518-08-01 00:35] falls asleep +[1518-08-13 00:07] falls asleep +[1518-06-04 00:03] falls asleep +[1518-06-01 00:00] Guard #2857 begins shift +[1518-07-20 00:18] falls asleep +[1518-05-09 00:02] Guard #3011 begins shift +[1518-10-27 00:37] falls asleep +[1518-07-30 23:59] Guard #2719 begins shift +[1518-05-13 00:00] falls asleep +[1518-03-24 00:29] wakes up +[1518-10-25 00:49] falls asleep +[1518-03-31 00:36] wakes up +[1518-11-17 00:08] falls asleep +[1518-05-26 00:01] falls asleep +[1518-07-21 23:57] Guard #149 begins shift +[1518-06-18 00:36] falls asleep +[1518-07-09 00:34] falls asleep +[1518-06-03 00:43] falls asleep +[1518-04-15 00:38] falls asleep +[1518-06-24 23:56] Guard #2719 begins shift +[1518-07-25 00:29] falls asleep +[1518-03-21 00:05] falls asleep +[1518-10-20 00:04] Guard #1163 begins shift +[1518-04-27 00:51] wakes up +[1518-07-07 00:02] Guard #2843 begins shift +[1518-07-18 00:58] wakes up +[1518-04-11 00:04] Guard #2719 begins shift +[1518-08-17 00:57] wakes up +[1518-11-11 00:57] wakes up +[1518-06-18 00:48] wakes up +[1518-11-11 00:42] wakes up +[1518-06-21 00:55] falls asleep +[1518-10-12 00:54] wakes up +[1518-08-15 00:47] wakes up +[1518-06-24 00:57] falls asleep +[1518-10-14 00:16] falls asleep +[1518-03-28 00:30] wakes up +[1518-05-26 00:47] wakes up +[1518-06-02 00:04] Guard #743 begins shift +[1518-04-12 00:01] Guard #2927 begins shift +[1518-07-18 00:00] Guard #3083 begins shift +[1518-08-11 00:31] wakes up +[1518-06-27 00:33] falls asleep +[1518-08-10 00:51] wakes up +[1518-04-27 00:26] falls asleep +[1518-07-01 00:37] wakes up +[1518-07-01 00:00] Guard #2017 begins shift +[1518-10-26 00:58] wakes up +[1518-11-17 00:53] wakes up +[1518-06-23 23:56] Guard #3089 begins shift +[1518-07-27 00:38] wakes up +[1518-11-17 00:39] wakes up +[1518-04-14 00:29] wakes up +[1518-05-26 00:53] wakes up +[1518-07-27 00:02] Guard #2857 begins shift +[1518-08-07 00:06] falls asleep +[1518-08-23 00:57] wakes up +[1518-07-22 00:30] falls asleep +[1518-08-01 00:04] Guard #653 begins shift +[1518-04-08 00:33] wakes up +[1518-08-17 00:00] Guard #3023 begins shift +[1518-03-13 00:09] falls asleep +[1518-04-24 00:29] falls asleep +[1518-05-28 00:07] falls asleep +[1518-08-08 00:08] falls asleep +[1518-07-10 00:56] wakes up +[1518-03-12 23:56] Guard #881 begins shift +[1518-03-11 00:09] falls asleep +[1518-09-08 00:04] falls asleep +[1518-08-01 23:59] Guard #3119 begins shift +[1518-06-19 00:08] falls asleep +[1518-05-04 00:51] wakes up +[1518-10-13 00:35] wakes up +[1518-06-11 00:00] Guard #2027 begins shift +[1518-05-01 00:47] falls asleep +[1518-08-15 00:29] falls asleep +[1518-06-28 00:14] falls asleep +[1518-09-26 23:58] Guard #1163 begins shift +[1518-10-10 00:54] wakes up +[1518-08-25 00:53] wakes up +[1518-07-31 00:37] wakes up +[1518-09-18 00:48] falls asleep +[1518-07-09 00:47] wakes up +[1518-11-17 00:23] falls asleep +[1518-08-26 00:03] Guard #2719 begins shift +[1518-06-17 00:40] wakes up +[1518-06-08 00:29] wakes up +[1518-03-24 00:03] Guard #1657 begins shift +[1518-09-26 00:52] wakes up +[1518-08-14 23:59] Guard #2843 begins shift +[1518-08-06 00:01] Guard #149 begins shift +[1518-11-23 00:22] falls asleep +[1518-10-19 00:45] wakes up +[1518-09-27 00:49] wakes up +[1518-06-26 00:20] falls asleep +[1518-09-07 00:57] wakes up +[1518-11-14 00:04] Guard #743 begins shift +[1518-03-16 00:12] wakes up +[1518-09-18 00:54] wakes up +[1518-10-29 23:58] Guard #3119 begins shift +[1518-04-13 23:49] Guard #1013 begins shift +[1518-09-19 00:47] falls asleep +[1518-11-07 23:58] Guard #3119 begins shift +[1518-06-21 00:00] Guard #881 begins shift +[1518-09-01 00:53] wakes up +[1518-03-20 23:50] Guard #881 begins shift +[1518-09-10 00:55] wakes up +[1518-07-29 00:34] falls asleep +[1518-09-05 00:18] falls asleep +[1518-07-03 00:58] wakes up +[1518-04-28 00:52] wakes up +[1518-08-08 00:33] wakes up +[1518-04-22 00:00] falls asleep +[1518-03-19 00:15] wakes up +[1518-08-14 00:52] wakes up +[1518-07-11 00:56] wakes up +[1518-07-14 23:56] Guard #2017 begins shift +[1518-08-04 23:57] Guard #2027 begins shift +[1518-07-03 00:55] falls asleep +[1518-10-30 00:24] falls asleep +[1518-11-07 00:09] falls asleep +[1518-05-12 00:22] falls asleep +[1518-08-17 23:59] Guard #743 begins shift +[1518-08-23 00:50] falls asleep +[1518-10-29 00:04] Guard #1163 begins shift +[1518-07-04 00:54] wakes up +[1518-03-16 00:59] wakes up +[1518-08-25 00:14] falls asleep +[1518-10-30 23:52] Guard #2843 begins shift +[1518-05-17 00:54] wakes up +[1518-06-04 00:38] wakes up +[1518-05-16 00:46] wakes up +[1518-09-08 00:43] wakes up +[1518-09-01 00:21] falls asleep +[1518-06-17 23:59] Guard #1013 begins shift +[1518-09-27 23:59] Guard #3119 begins shift +[1518-05-17 00:03] Guard #1657 begins shift +[1518-04-21 23:46] Guard #2843 begins shift +[1518-09-11 00:35] falls asleep +[1518-10-01 00:31] wakes up +[1518-08-12 00:39] wakes up +[1518-10-04 00:01] Guard #1013 begins shift +[1518-08-02 23:50] Guard #1657 begins shift +[1518-05-04 00:36] falls asleep +[1518-06-05 00:39] falls asleep +[1518-07-04 00:36] wakes up +[1518-05-19 00:53] falls asleep +[1518-10-07 00:59] wakes up +[1518-06-30 00:49] falls asleep +[1518-06-17 00:18] wakes up +[1518-06-25 00:39] wakes up +[1518-09-28 00:31] falls asleep +[1518-08-24 00:24] wakes up +[1518-08-10 00:08] falls asleep +[1518-04-06 00:02] Guard #1163 begins shift +[1518-04-11 00:38] wakes up +[1518-07-02 00:52] wakes up +[1518-07-07 00:57] wakes up +[1518-04-30 00:15] falls asleep +[1518-04-17 00:48] wakes up +[1518-03-16 00:25] falls asleep +[1518-10-06 00:40] wakes up +[1518-10-13 00:00] falls asleep +[1518-05-30 23:56] Guard #2857 begins shift +[1518-06-06 00:54] wakes up +[1518-04-15 00:57] wakes up +[1518-06-21 00:57] wakes up +[1518-10-24 23:51] Guard #149 begins shift +[1518-03-26 00:44] wakes up +[1518-08-31 00:52] wakes up +[1518-03-28 00:51] falls asleep +[1518-10-25 23:47] Guard #3023 begins shift +[1518-07-14 00:52] wakes up +[1518-05-09 00:19] falls asleep +[1518-10-06 00:18] falls asleep +[1518-08-10 00:18] wakes up +[1518-05-19 00:28] wakes up +[1518-08-04 00:36] wakes up +[1518-06-13 00:49] falls asleep +[1518-04-16 00:09] falls asleep +[1518-05-20 00:38] wakes up +[1518-04-24 00:01] Guard #2719 begins shift +[1518-05-10 00:58] wakes up +[1518-11-23 00:41] wakes up +[1518-04-17 00:21] falls asleep +[1518-11-21 00:00] falls asleep +[1518-08-29 00:15] falls asleep +[1518-08-19 23:57] Guard #2843 begins shift +[1518-11-01 00:59] wakes up +[1518-05-03 00:00] Guard #2857 begins shift +[1518-10-02 00:32] wakes up +[1518-08-07 23:57] Guard #3089 begins shift +[1518-10-29 00:51] falls asleep +[1518-03-17 00:08] falls asleep +[1518-03-19 00:32] falls asleep +[1518-07-30 00:41] wakes up +[1518-07-14 00:11] falls asleep +[1518-07-16 00:04] Guard #2927 begins shift +[1518-03-14 00:30] falls asleep +[1518-10-05 00:46] wakes up +[1518-08-06 23:57] Guard #1993 begins shift +[1518-04-23 00:44] falls asleep +[1518-10-18 00:26] wakes up +[1518-04-15 00:52] wakes up +[1518-04-01 00:03] Guard #2719 begins shift +[1518-11-05 00:00] Guard #149 begins shift +[1518-05-07 00:17] falls asleep +[1518-10-10 00:00] Guard #3361 begins shift +[1518-07-28 00:00] Guard #743 begins shift +[1518-03-31 00:34] falls asleep +[1518-05-05 00:11] falls asleep +[1518-07-29 00:16] falls asleep +[1518-08-21 23:50] Guard #2927 begins shift +[1518-03-22 00:49] falls asleep +[1518-06-07 23:56] Guard #1163 begins shift +[1518-10-15 00:00] Guard #2027 begins shift +[1518-08-24 00:34] falls asleep +[1518-07-28 00:41] falls asleep +[1518-11-13 00:49] wakes up +[1518-07-02 00:32] falls asleep +[1518-09-21 00:17] falls asleep +[1518-09-02 00:00] Guard #3011 begins shift +[1518-04-15 00:02] falls asleep +[1518-09-26 00:00] Guard #1657 begins shift +[1518-05-03 00:12] falls asleep +[1518-09-09 00:44] wakes up +[1518-04-04 00:36] wakes up +[1518-05-23 23:59] Guard #3083 begins shift +[1518-04-07 00:58] wakes up +[1518-05-18 00:53] wakes up +[1518-05-15 00:56] wakes up +[1518-08-17 00:25] falls asleep +[1518-05-13 00:39] wakes up +[1518-06-24 00:18] falls asleep +[1518-04-07 00:50] wakes up +[1518-05-17 00:32] wakes up +[1518-06-19 00:32] wakes up +[1518-07-09 00:01] Guard #2719 begins shift +[1518-03-13 00:53] wakes up +[1518-06-02 00:44] wakes up +[1518-10-31 00:01] falls asleep +[1518-10-05 00:00] Guard #1013 begins shift +[1518-06-25 00:36] falls asleep +[1518-05-08 00:37] wakes up +[1518-07-02 00:49] falls asleep +[1518-05-12 00:55] wakes up +[1518-05-21 00:00] Guard #3023 begins shift +[1518-07-04 00:51] falls asleep +[1518-08-25 00:02] Guard #3011 begins shift +[1518-10-29 00:52] wakes up +[1518-04-03 00:50] wakes up +[1518-04-16 00:43] falls asleep +[1518-11-06 00:28] falls asleep +[1518-04-10 00:05] falls asleep +[1518-06-19 00:15] wakes up +[1518-04-14 00:06] wakes up +[1518-06-27 00:34] wakes up +[1518-05-27 00:52] wakes up +[1518-10-05 00:59] wakes up +[1518-09-19 00:58] wakes up +[1518-05-31 00:11] wakes up +[1518-09-14 00:59] wakes up +[1518-10-28 00:35] falls asleep +[1518-08-11 00:04] Guard #1163 begins shift +[1518-08-29 00:04] Guard #881 begins shift +[1518-09-25 00:22] falls asleep +[1518-06-30 00:04] Guard #1657 begins shift +[1518-05-04 00:56] wakes up +[1518-11-07 00:13] wakes up +[1518-06-30 00:19] falls asleep +[1518-08-22 00:09] wakes up +[1518-08-18 00:55] wakes up +[1518-05-28 00:46] wakes up +[1518-09-04 00:10] falls asleep +[1518-08-30 00:43] wakes up +[1518-03-11 00:32] wakes up +[1518-04-27 00:00] Guard #743 begins shift +[1518-10-20 00:26] wakes up +[1518-05-20 00:00] Guard #743 begins shift +[1518-04-03 23:59] Guard #3011 begins shift +[1518-07-29 00:59] wakes up +[1518-07-17 00:10] wakes up +[1518-04-07 00:04] Guard #2843 begins shift +[1518-07-15 00:52] wakes up +[1518-11-22 00:19] falls asleep +[1518-04-23 00:48] wakes up +[1518-07-19 00:52] wakes up +[1518-04-07 23:57] Guard #1163 begins shift +[1518-07-08 00:01] Guard #1993 begins shift +[1518-07-23 00:46] wakes up +[1518-07-21 00:01] Guard #3119 begins shift +[1518-03-16 00:03] Guard #3083 begins shift +[1518-03-28 00:56] wakes up +[1518-09-30 00:09] falls asleep +[1518-09-07 00:02] Guard #2017 begins shift +[1518-07-10 00:01] Guard #1993 begins shift +[1518-10-15 00:53] wakes up +[1518-10-08 00:18] falls asleep +[1518-06-26 00:54] wakes up +[1518-03-12 00:36] falls asleep +[1518-03-16 00:06] falls asleep +[1518-08-06 00:47] wakes up +[1518-10-22 00:29] wakes up +[1518-09-02 00:58] wakes up +[1518-07-18 00:12] falls asleep +[1518-09-19 23:58] Guard #1013 begins shift +[1518-08-31 00:10] falls asleep +[1518-03-24 00:18] falls asleep +[1518-04-18 00:30] wakes up +[1518-11-09 00:30] falls asleep +[1518-05-21 00:38] falls asleep +[1518-10-29 00:23] wakes up +[1518-10-23 00:00] Guard #2027 begins shift +[1518-10-09 00:09] falls asleep +[1518-09-11 00:53] falls asleep +[1518-07-04 00:32] falls asleep +[1518-07-31 00:32] falls asleep +[1518-09-01 00:58] wakes up +[1518-07-24 00:50] wakes up +[1518-07-26 00:49] falls asleep +[1518-11-18 00:15] falls asleep +[1518-04-13 00:31] falls asleep +[1518-09-03 00:22] wakes up +[1518-08-30 23:58] Guard #3361 begins shift +[1518-04-30 00:52] wakes up +[1518-06-15 00:56] falls asleep +[1518-07-02 00:56] falls asleep +[1518-04-19 23:56] Guard #1657 begins shift +[1518-10-09 00:03] Guard #1657 begins shift +[1518-10-07 00:02] Guard #1163 begins shift +[1518-05-24 00:29] falls asleep +[1518-05-23 00:06] falls asleep +[1518-07-10 23:58] Guard #1993 begins shift +[1518-07-03 00:00] Guard #743 begins shift +[1518-06-14 00:54] falls asleep +[1518-09-19 00:39] falls asleep +[1518-07-19 00:01] Guard #2017 begins shift +[1518-11-11 00:18] falls asleep +[1518-04-17 00:02] Guard #1013 begins shift +[1518-05-02 00:56] wakes up +[1518-08-29 00:55] falls asleep +[1518-11-17 00:11] wakes up +[1518-04-02 00:28] falls asleep +[1518-04-28 23:57] Guard #3083 begins shift +[1518-07-28 00:28] wakes up +[1518-09-22 00:47] wakes up +[1518-03-20 00:00] Guard #1657 begins shift +[1518-07-20 00:25] wakes up +[1518-09-06 00:52] wakes up +[1518-10-18 00:38] wakes up +[1518-07-24 00:25] falls asleep +[1518-11-07 00:02] Guard #149 begins shift +[1518-08-15 00:52] falls asleep +[1518-10-20 00:12] falls asleep +[1518-04-09 00:56] wakes up +[1518-09-26 00:18] wakes up +[1518-09-06 00:02] falls asleep +[1518-03-14 00:03] Guard #149 begins shift +[1518-06-06 00:38] falls asleep +[1518-11-13 00:44] falls asleep +[1518-10-23 23:57] Guard #1153 begins shift +[1518-10-28 00:50] falls asleep +[1518-05-14 00:57] wakes up +[1518-09-13 00:36] falls asleep +[1518-09-25 00:42] wakes up +[1518-11-22 00:51] wakes up +[1518-05-09 00:35] wakes up +[1518-10-31 23:59] Guard #2927 begins shift +[1518-11-14 00:26] wakes up +[1518-07-27 00:33] falls asleep +[1518-11-02 00:55] wakes up +[1518-04-08 23:58] Guard #3119 begins shift +[1518-11-16 00:08] falls asleep +[1518-09-30 00:37] falls asleep +[1518-04-10 00:59] wakes up +[1518-10-15 00:10] falls asleep +[1518-08-02 00:58] wakes up +[1518-07-05 00:59] wakes up +[1518-05-05 00:45] falls asleep +[1518-04-06 00:10] falls asleep +[1518-10-18 00:11] falls asleep +[1518-07-12 00:00] Guard #149 begins shift +[1518-06-24 00:40] wakes up +[1518-09-05 00:28] wakes up +[1518-03-18 00:38] wakes up +[1518-10-18 00:36] falls asleep +[1518-11-16 00:19] wakes up +[1518-08-05 00:06] falls asleep +[1518-04-26 00:00] Guard #3083 begins shift +[1518-03-22 00:52] wakes up +[1518-10-21 00:23] falls asleep +[1518-04-02 00:47] falls asleep +[1518-04-20 00:41] wakes up +[1518-11-19 23:57] Guard #1013 begins shift +[1518-09-26 00:58] wakes up +[1518-06-26 00:00] Guard #2927 begins shift +[1518-09-01 00:01] Guard #1657 begins shift +[1518-10-22 00:44] wakes up +[1518-11-20 00:50] falls asleep +[1518-10-25 00:41] wakes up +[1518-11-02 00:12] falls asleep +[1518-06-22 00:28] wakes up +[1518-11-04 00:39] wakes up +[1518-05-27 00:04] Guard #653 begins shift +[1518-07-24 00:46] falls asleep +[1518-11-14 00:08] falls asleep +[1518-03-19 00:40] wakes up +[1518-09-03 00:50] wakes up +[1518-07-16 00:59] wakes up +[1518-11-12 00:45] wakes up +[1518-10-11 00:17] falls asleep +[1518-10-30 00:40] wakes up +[1518-08-03 00:00] falls asleep +[1518-03-18 00:46] wakes up +[1518-08-06 00:44] falls asleep +[1518-10-11 00:50] wakes up +[1518-05-21 00:57] wakes up +[1518-09-01 00:43] wakes up +[1518-09-11 00:00] Guard #3011 begins shift +[1518-09-13 00:55] wakes up +[1518-10-27 00:04] Guard #149 begins shift +[1518-05-02 00:03] Guard #149 begins shift +[1518-09-14 00:00] Guard #3119 begins shift +[1518-07-08 00:14] falls asleep +[1518-06-02 00:28] falls asleep +[1518-03-19 00:57] wakes up +[1518-08-13 00:22] wakes up +[1518-05-01 00:04] Guard #653 begins shift +[1518-06-19 00:23] falls asleep +[1518-11-18 00:02] Guard #3011 begins shift +[1518-11-13 00:17] falls asleep +[1518-07-22 00:50] falls asleep +[1518-04-15 00:55] falls asleep +[1518-07-02 00:58] wakes up +[1518-03-28 00:28] falls asleep +[1518-07-01 00:50] falls asleep +[1518-05-31 00:35] falls asleep +[1518-05-13 00:27] wakes up +[1518-10-17 00:05] falls asleep +[1518-06-15 00:57] wakes up +[1518-11-10 00:45] wakes up +[1518-04-04 00:18] falls asleep +[1518-09-20 23:57] Guard #743 begins shift +[1518-10-29 00:11] falls asleep +[1518-05-01 00:25] falls asleep +[1518-11-22 00:40] wakes up +[1518-11-13 00:02] falls asleep +[1518-09-11 00:50] wakes up +[1518-09-12 23:56] Guard #653 begins shift +[1518-07-11 00:38] wakes up +[1518-03-22 23:59] Guard #659 begins shift +[1518-04-09 00:18] falls asleep +[1518-08-23 23:53] Guard #2927 begins shift +[1518-07-02 00:04] Guard #1993 begins shift +[1518-08-21 00:00] Guard #1993 begins shift +[1518-10-05 00:53] falls asleep +[1518-03-22 00:14] falls asleep +[1518-09-06 00:15] wakes up +[1518-09-24 00:57] falls asleep +[1518-08-14 00:03] falls asleep +[1518-05-25 00:41] falls asleep +[1518-04-23 00:28] wakes up +[1518-04-12 00:45] wakes up +[1518-05-10 00:14] falls asleep +[1518-03-26 23:54] Guard #3023 begins shift +[1518-05-11 00:54] wakes up +[1518-11-05 00:29] falls asleep +[1518-10-03 00:34] wakes up +[1518-04-09 23:50] Guard #653 begins shift +[1518-04-28 00:22] wakes up +[1518-07-07 00:08] falls asleep +[1518-03-28 00:01] Guard #2927 begins shift +[1518-07-05 23:58] Guard #1153 begins shift +[1518-11-23 00:37] falls asleep +[1518-09-05 00:59] wakes up +[1518-04-10 00:56] falls asleep +[1518-11-18 00:44] falls asleep +[1518-10-08 00:39] falls asleep +[1518-09-10 00:02] Guard #2017 begins shift +[1518-03-19 00:02] falls asleep +[1518-04-01 00:07] falls asleep +[1518-10-05 23:57] Guard #3023 begins shift +[1518-11-01 00:46] falls asleep +[1518-07-03 00:34] falls asleep +[1518-10-23 00:18] falls asleep +[1518-07-07 00:46] wakes up +[1518-07-26 00:07] falls asleep +[1518-08-27 00:04] Guard #3011 begins shift +[1518-04-08 00:17] falls asleep +[1518-05-22 00:56] wakes up +[1518-10-22 00:36] falls asleep +[1518-04-14 00:02] falls asleep +[1518-07-25 00:37] wakes up +[1518-08-03 23:50] Guard #2843 begins shift +[1518-03-31 00:56] wakes up +[1518-07-04 00:00] Guard #3023 begins shift +[1518-11-16 00:00] Guard #2027 begins shift +[1518-03-27 00:01] falls asleep +[1518-09-01 00:57] falls asleep +[1518-11-22 00:49] falls asleep +[1518-07-05 00:38] falls asleep +[1518-05-27 00:29] falls asleep +[1518-08-12 00:32] falls asleep +[1518-05-22 00:34] falls asleep +[1518-05-11 00:21] falls asleep +[1518-06-19 23:52] Guard #2927 begins shift +[1518-04-23 00:26] falls asleep +[1518-03-11 23:56] Guard #1993 begins shift +[1518-08-16 00:14] falls asleep +[1518-10-30 00:56] wakes up +[1518-03-18 00:43] falls asleep +[1518-11-03 23:58] Guard #881 begins shift +[1518-03-14 00:39] wakes up +[1518-09-12 00:57] wakes up +[1518-11-17 00:47] falls asleep +[1518-04-16 00:38] wakes up +[1518-09-23 00:54] falls asleep +[1518-08-20 00:39] wakes up +[1518-06-08 00:25] falls asleep +[1518-03-20 00:10] falls asleep +[1518-07-01 00:21] falls asleep +[1518-03-24 00:44] wakes up +[1518-07-17 00:59] wakes up +[1518-06-23 00:38] wakes up +[1518-04-02 00:02] Guard #2857 begins shift +[1518-07-15 00:51] falls asleep +[1518-09-11 23:52] Guard #1163 begins shift +[1518-04-26 00:40] falls asleep +[1518-03-29 00:20] falls asleep +[1518-07-30 00:00] Guard #3361 begins shift +[1518-06-05 00:49] wakes up +[1518-10-26 00:00] falls asleep +[1518-07-03 00:51] wakes up +[1518-10-12 00:46] falls asleep +[1518-10-21 00:57] wakes up +[1518-07-25 00:02] falls asleep +[1518-04-15 23:56] Guard #3119 begins shift +[1518-10-17 00:19] wakes up +[1518-06-05 00:45] falls asleep +[1518-07-28 00:17] falls asleep +[1518-06-22 00:43] falls asleep +[1518-07-25 00:24] wakes up +[1518-09-20 00:40] falls asleep +[1518-07-17 00:00] Guard #743 begins shift +[1518-03-16 23:59] Guard #2017 begins shift +[1518-09-05 00:36] falls asleep +[1518-08-11 00:14] falls asleep +[1518-04-12 00:48] falls asleep +[1518-05-20 00:23] falls asleep +[1518-04-11 00:33] falls asleep +[1518-09-08 23:58] Guard #1163 begins shift +[1518-09-09 00:09] falls asleep +[1518-04-02 00:40] wakes up +[1518-06-11 00:54] wakes up +[1518-09-05 23:50] Guard #2017 begins shift +[1518-11-22 00:04] falls asleep +[1518-04-29 00:19] wakes up +[1518-05-19 00:57] wakes up +[1518-05-26 00:34] wakes up +[1518-05-17 00:10] falls asleep +[1518-04-01 00:54] wakes up +[1518-04-18 00:00] Guard #3083 begins shift +[1518-04-25 00:59] wakes up +[1518-06-22 00:02] Guard #2027 begins shift +[1518-08-20 00:34] falls asleep +[1518-05-25 00:00] Guard #3023 begins shift +[1518-07-20 00:03] Guard #3011 begins shift +[1518-03-27 00:59] wakes up +[1518-06-05 00:42] wakes up +[1518-08-19 00:19] falls asleep +[1518-11-23 00:32] wakes up +[1518-04-12 00:26] falls asleep +[1518-10-10 00:39] falls asleep +[1518-11-15 00:51] wakes up +[1518-09-27 00:38] wakes up +[1518-10-12 23:53] Guard #653 begins shift +[1518-05-03 00:25] falls asleep +[1518-10-09 00:49] wakes up +[1518-11-08 00:30] falls asleep +[1518-05-26 00:50] falls asleep +[1518-11-13 00:41] wakes up +[1518-09-30 00:41] wakes up +[1518-04-14 00:22] falls asleep +[1518-05-04 00:54] falls asleep +[1518-05-05 00:03] Guard #2027 begins shift +[1518-04-05 00:44] wakes up +[1518-07-24 00:42] wakes up +[1518-06-07 00:08] wakes up +[1518-10-02 00:00] falls asleep +[1518-06-12 00:16] falls asleep +[1518-04-10 00:34] wakes up +[1518-07-13 00:02] Guard #2719 begins shift +[1518-04-21 00:03] Guard #881 begins shift +[1518-10-11 00:04] Guard #2927 begins shift +[1518-06-02 23:56] Guard #3011 begins shift +[1518-03-12 00:38] wakes up +[1518-06-26 23:48] Guard #3023 begins shift +[1518-05-16 00:07] falls asleep +[1518-04-28 00:48] falls asleep +[1518-05-22 00:02] Guard #881 begins shift +[1518-03-18 23:48] Guard #3089 begins shift +[1518-08-08 00:57] wakes up +[1518-09-21 00:21] wakes up +[1518-04-29 23:58] Guard #2843 begins shift +[1518-03-17 00:52] wakes up +[1518-06-10 00:00] Guard #563 begins shift +[1518-09-28 00:57] wakes up +[1518-05-16 00:22] wakes up +[1518-04-03 00:13] falls asleep +[1518-10-04 00:44] wakes up +[1518-06-27 00:01] falls asleep +[1518-06-26 00:49] wakes up +[1518-05-29 00:28] falls asleep +[1518-06-29 00:56] wakes up +[1518-11-20 00:21] falls asleep +[1518-10-03 00:07] falls asleep +[1518-05-16 00:00] Guard #1993 begins shift +[1518-09-06 00:34] falls asleep +[1518-05-17 00:38] falls asleep +[1518-07-28 23:56] Guard #2857 begins shift +[1518-06-13 00:54] wakes up +[1518-06-01 00:30] falls asleep +[1518-11-09 00:57] wakes up +[1518-11-22 00:06] wakes up +[1518-10-04 00:09] falls asleep +[1518-10-19 00:00] Guard #3023 begins shift +[1518-11-09 23:58] Guard #881 begins shift +[1518-10-28 00:02] Guard #2719 begins shift +[1518-04-13 00:45] wakes up +[1518-05-15 00:35] falls asleep +[1518-10-12 00:00] Guard #3119 begins shift +[1518-04-07 00:46] falls asleep +[1518-03-29 00:03] Guard #2027 begins shift +[1518-03-24 00:43] falls asleep +[1518-04-26 00:49] wakes up +[1518-09-26 00:15] falls asleep +[1518-08-24 00:40] wakes up +[1518-04-14 23:54] Guard #2857 begins shift +[1518-03-20 00:32] wakes up +[1518-10-13 00:50] falls asleep +[1518-11-12 23:48] Guard #3119 begins shift +[1518-07-07 00:56] falls asleep +[1518-10-21 00:03] Guard #3023 begins shift +[1518-08-15 00:53] wakes up +[1518-05-07 00:55] wakes up +[1518-08-08 00:53] falls asleep +[1518-08-02 00:49] falls asleep +[1518-11-18 00:56] wakes up +[1518-10-30 00:50] falls asleep +[1518-11-18 00:41] wakes up +[1518-05-30 00:16] falls asleep +[1518-06-28 00:00] Guard #3011 begins shift +[1518-09-23 00:17] falls asleep +[1518-10-26 00:54] falls asleep +[1518-10-08 00:31] falls asleep +[1518-06-04 23:59] Guard #149 begins shift +[1518-09-07 00:08] falls asleep +[1518-06-03 23:52] Guard #1993 begins shift +[1518-07-21 00:14] falls asleep +[1518-06-13 00:00] Guard #2927 begins shift +[1518-07-24 23:48] Guard #149 begins shift +[1518-10-08 00:25] wakes up +[1518-10-03 00:03] Guard #743 begins shift +[1518-05-09 23:57] Guard #2027 begins shift +[1518-06-21 00:49] wakes up +[1518-07-13 00:34] falls asleep +[1518-03-26 00:13] falls asleep +[1518-05-12 00:28] wakes up +[1518-09-27 00:42] falls asleep +[1518-05-29 00:04] Guard #2719 begins shift +[1518-05-13 23:56] Guard #3011 begins shift +[1518-10-28 00:56] wakes up +[1518-07-02 00:37] wakes up +[1518-06-17 00:32] falls asleep +[1518-05-13 00:36] falls asleep +[1518-04-25 00:46] falls asleep +[1518-06-07 00:01] falls asleep +[1518-10-13 00:59] wakes up +[1518-11-09 00:02] Guard #3011 begins shift +[1518-09-26 00:57] falls asleep +[1518-09-11 00:54] wakes up +[1518-05-14 00:29] falls asleep +[1518-08-02 00:29] falls asleep +[1518-08-24 00:00] falls asleep +[1518-11-13 00:13] wakes up +[1518-05-05 00:56] wakes up +[1518-06-22 23:54] Guard #2843 begins shift +[1518-08-07 00:48] wakes up +[1518-11-19 00:00] Guard #659 begins shift +[1518-07-22 00:34] wakes up +[1518-03-29 00:54] wakes up +[1518-10-07 00:30] falls asleep +[1518-11-21 23:51] Guard #1013 begins shift +[1518-10-18 00:03] Guard #2027 begins shift +[1518-03-25 00:56] wakes up +[1518-07-16 00:38] falls asleep +[1518-06-12 00:59] wakes up +[1518-10-14 00:00] Guard #2027 begins shift +[1518-05-11 00:52] falls asleep [1518-06-15 00:49] wakes up \ No newline at end of file diff --git a/2018/4thDay/challenge1/main.cpp b/2018/4thDay/challenge1/main.cpp index 08e37b4..64d6923 100644 --- a/2018/4thDay/challenge1/main.cpp +++ b/2018/4thDay/challenge1/main.cpp @@ -1,180 +1,180 @@ -#include -#include -#include -#include -#include -#include -#include - -enum class State {begin, sleep, awaken}; -struct Action -{ - State state; - int64_t guard_id; -}; - -struct Event -{ - int64_t month, day, hour, minute; - Action action; -}; - - -std::istream &operator>>(std::istream &is, Action &action) -{ - std::string element; - is >> element; - if(element=="Guard") - { - action.state=State::begin; - char c; - is >> c >> action.guard_id; - } - else if(element=="falls") - { - action.state=State::sleep; - } - else if(element=="wakes") - { - action.state=State::awaken; - } - else - { - throw std::runtime_error("Invalid input"); - } - std::getline(is,element); - return is; -} - -std::istream &operator>>(std::istream &is, Event &event) -{ - char c; - int64_t year; - is >> c; - if(is.good()) - { - is >> year >> c >> event.month >> c >> event.day - >> event.hour >> c >> event.minute >> c - >> event.action; - - if(event.hour==23) - { - event.minute=0; - } - } - return is; -} - - - -std::ostream &operator<<(std::ostream &os, const Action &action) -{ - switch(action.state) - { - case State::begin: - os << "Guard #" << action.guard_id << " begins shift"; - break; - case State::sleep: - os << "falls asleep"; - break; - case State::awaken: - os << "wakes up"; - break; - default: - os << "What?"; - break; - } - return os; -} - -std::ostream &operator<<(std::ostream &os, const Event &event) -{ - os << "[1518-" - << std::setw(2) << std::setfill('0') << event.month << "-" - << std::setw(2) << std::setfill('0') << event.day << " " - << std::setw(2) << std::setfill('0') << event.hour << ":" - << std::setw(2) << std::setfill('0') << event.minute << "] " - << event.action; - return os; -} - -std::pair max_incident(const std::vector> &incidents) -{ - std::vector sleep_incidents(60,0); - for(auto ×: incidents) - { - for(size_t time=times.first; time events(std::istream_iterator(infile), {}); - - std::map>> guards; - - int64_t guard_id; - int64_t start(-1); - for(auto &event: events) - { - switch(event.action.state) - { - case State::begin: - guard_id=event.action.guard_id; - break; - case State::sleep: - start=event.minute; - break; - case State::awaken: - guards[guard_id].emplace_back(start,event.minute); - break; - } - } - - int64_t max_time_guard, max_time(0); - for(auto &guard: guards) - { - int64_t total_time(0); - for(auto &time: guard.second) - { - total_time+=time.second-time.first; - } - if(total_time>max_time) - { - max_time_guard=guard.first; - max_time=total_time; - } - } - - auto [max_incidents,max_minute]=max_incident(guards[max_time_guard]); - std::cout << "Part 1: " << (max_minute*max_time_guard) << "\n"; - - std::vector num_incidents(guards.size()); - int64_t max_guard_incidents(0), max_guard_minute(0), max_guard_id(-1); - for(auto &guard: guards) - { - auto [incidents,minute]=max_incident(guard.second); - if(incidents>max_guard_incidents) - { - max_guard_incidents=incidents; - max_guard_minute=minute; - max_guard_id=guard.first; - } - } - std::cout << "Part 2: " << (max_guard_id * max_guard_minute) << "\n"; +#include +#include +#include +#include +#include +#include +#include + +enum class State {begin, sleep, awaken}; +struct Action +{ + State state; + int64_t guard_id; +}; + +struct Event +{ + int64_t month, day, hour, minute; + Action action; +}; + + +std::istream &operator>>(std::istream &is, Action &action) +{ + std::string element; + is >> element; + if(element=="Guard") + { + action.state=State::begin; + char c; + is >> c >> action.guard_id; + } + else if(element=="falls") + { + action.state=State::sleep; + } + else if(element=="wakes") + { + action.state=State::awaken; + } + else + { + throw std::runtime_error("Invalid input"); + } + std::getline(is,element); + return is; +} + +std::istream &operator>>(std::istream &is, Event &event) +{ + char c; + int64_t year; + is >> c; + if(is.good()) + { + is >> year >> c >> event.month >> c >> event.day + >> event.hour >> c >> event.minute >> c + >> event.action; + + if(event.hour==23) + { + event.minute=0; + } + } + return is; +} + + + +std::ostream &operator<<(std::ostream &os, const Action &action) +{ + switch(action.state) + { + case State::begin: + os << "Guard #" << action.guard_id << " begins shift"; + break; + case State::sleep: + os << "falls asleep"; + break; + case State::awaken: + os << "wakes up"; + break; + default: + os << "What?"; + break; + } + return os; +} + +std::ostream &operator<<(std::ostream &os, const Event &event) +{ + os << "[1518-" + << std::setw(2) << std::setfill('0') << event.month << "-" + << std::setw(2) << std::setfill('0') << event.day << " " + << std::setw(2) << std::setfill('0') << event.hour << ":" + << std::setw(2) << std::setfill('0') << event.minute << "] " + << event.action; + return os; +} + +std::pair max_incident(const std::vector> &incidents) +{ + std::vector sleep_incidents(60,0); + for(auto ×: incidents) + { + for(size_t time=times.first; time events(std::istream_iterator(infile), {}); + + std::map>> guards; + + int64_t guard_id; + int64_t start(-1); + for(auto &event: events) + { + switch(event.action.state) + { + case State::begin: + guard_id=event.action.guard_id; + break; + case State::sleep: + start=event.minute; + break; + case State::awaken: + guards[guard_id].emplace_back(start,event.minute); + break; + } + } + + int64_t max_time_guard, max_time(0); + for(auto &guard: guards) + { + int64_t total_time(0); + for(auto &time: guard.second) + { + total_time+=time.second-time.first; + } + if(total_time>max_time) + { + max_time_guard=guard.first; + max_time=total_time; + } + } + + auto [max_incidents,max_minute]=max_incident(guards[max_time_guard]); + std::cout << "Part 1: " << (max_minute*max_time_guard) << "\n"; + + std::vector num_incidents(guards.size()); + int64_t max_guard_incidents(0), max_guard_minute(0), max_guard_id(-1); + for(auto &guard: guards) + { + auto [incidents,minute]=max_incident(guard.second); + if(incidents>max_guard_incidents) + { + max_guard_incidents=incidents; + max_guard_minute=minute; + max_guard_id=guard.first; + } + } + std::cout << "Part 2: " << (max_guard_id * max_guard_minute) << "\n"; } \ No newline at end of file diff --git a/2018/4thDay/challenge2/challenge.txt b/2018/4thDay/challenge2/challenge.txt index 4f67796..c4e2000 100644 --- a/2018/4thDay/challenge2/challenge.txt +++ b/2018/4thDay/challenge2/challenge.txt @@ -1,7 +1,7 @@ ---- Part Two --- -Strategy 2: Of all guards, which guard is most frequently asleep on the same minute? - -In the example above, Guard #99 spent minute 45 asleep more than any other guard or minute - three times in total. (In all other cases, any guard spent any minute asleep at most twice.) - -What is the ID of the guard you chose multiplied by the minute you chose? (In the above example, the answer would be 99 * 45 = 4455.) - +--- Part Two --- +Strategy 2: Of all guards, which guard is most frequently asleep on the same minute? + +In the example above, Guard #99 spent minute 45 asleep more than any other guard or minute - three times in total. (In all other cases, any guard spent any minute asleep at most twice.) + +What is the ID of the guard you chose multiplied by the minute you chose? (In the above example, the answer would be 99 * 45 = 4455.) + diff --git a/2018/4thDay/challenge2/index.js b/2018/4thDay/challenge2/index.js index 3909930..0b39532 100644 --- a/2018/4thDay/challenge2/index.js +++ b/2018/4thDay/challenge2/index.js @@ -1,68 +1,68 @@ -class Guard { - constructor (id) { - this.id = id; - this.minutesAsleep = Array.from({ length: 60 }).map(() => 0); - this.fellAsleepAt = null; - } - - sleep (fellAsleepAt) { - this.fellAsleepAt = fellAsleepAt; - } - - awake (awokeAt) { - for (let i = this.fellAsleepAt; i < awokeAt; i++) { - this.minutesAsleep[i] += 1; - } - } - - get sleepiestMinute () { - return this.minutesAsleep - .map((value, index) => ({ index, value })) - .sort((a, b) => b.value - a.value)[0].index; - } - } - -const sleep = (input) => { - const guards = {}; - const schedule = input - .split('\n') - .map((x) => x.trim()) - .sort() - .map((x) => { - const parts = x.match(/\[(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})\] (.*)/); - - return { - minute: +parts[5], - message: parts[6], - }; - }); - - let currentGuard = null; - - for (let i = 0; i < schedule.length; i++) { - const { message, minute } = schedule[i]; - - if (/Guard/.test(message)) { - const parts = message.match(/Guard #(\d+) begins shift/); - const guardId = +parts[1]; - const guard = guards[guardId] ? guards[guardId] : new Guard(guardId); - - currentGuard = guards[guardId] = guard; - } else if (message === 'falls asleep') { - currentGuard.sleep(minute); - } else if (message === 'wakes up') { - currentGuard.awake(minute); - } - } - - const sleepiestGuard = Object - .keys(guards) - .map((guardId) => guards[guardId]) - .sort((a, b) => b.minutesAsleep[b.sleepiestMinute] - - a.minutesAsleep[a.sleepiestMinute])[0]; - - return sleepiestGuard.id * sleepiestGuard.sleepiestMinute; -}; - -const fs = require('fs'); -console.log(sleep(fs.readFileSync("input.txt").toString())); +class Guard { + constructor (id) { + this.id = id; + this.minutesAsleep = Array.from({ length: 60 }).map(() => 0); + this.fellAsleepAt = null; + } + + sleep (fellAsleepAt) { + this.fellAsleepAt = fellAsleepAt; + } + + awake (awokeAt) { + for (let i = this.fellAsleepAt; i < awokeAt; i++) { + this.minutesAsleep[i] += 1; + } + } + + get sleepiestMinute () { + return this.minutesAsleep + .map((value, index) => ({ index, value })) + .sort((a, b) => b.value - a.value)[0].index; + } + } + +const sleep = (input) => { + const guards = {}; + const schedule = input + .split('\n') + .map((x) => x.trim()) + .sort() + .map((x) => { + const parts = x.match(/\[(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})\] (.*)/); + + return { + minute: +parts[5], + message: parts[6], + }; + }); + + let currentGuard = null; + + for (let i = 0; i < schedule.length; i++) { + const { message, minute } = schedule[i]; + + if (/Guard/.test(message)) { + const parts = message.match(/Guard #(\d+) begins shift/); + const guardId = +parts[1]; + const guard = guards[guardId] ? guards[guardId] : new Guard(guardId); + + currentGuard = guards[guardId] = guard; + } else if (message === 'falls asleep') { + currentGuard.sleep(minute); + } else if (message === 'wakes up') { + currentGuard.awake(minute); + } + } + + const sleepiestGuard = Object + .keys(guards) + .map((guardId) => guards[guardId]) + .sort((a, b) => b.minutesAsleep[b.sleepiestMinute] - + a.minutesAsleep[a.sleepiestMinute])[0]; + + return sleepiestGuard.id * sleepiestGuard.sleepiestMinute; +}; + +const fs = require('fs'); +console.log(sleep(fs.readFileSync("input.txt").toString())); diff --git a/2018/4thDay/challenge2/input.txt b/2018/4thDay/challenge2/input.txt index 6a4973b..b48fee8 100644 --- a/2018/4thDay/challenge2/input.txt +++ b/2018/4thDay/challenge2/input.txt @@ -1,1000 +1,1000 @@ -[1518-09-24 00:59] wakes up -[1518-05-22 00:47] wakes up -[1518-05-08 00:02] Guard #2719 begins shift -[1518-11-12 00:00] Guard #3011 begins shift -[1518-04-12 00:57] wakes up -[1518-05-21 00:32] wakes up -[1518-11-12 00:30] falls asleep -[1518-08-23 00:39] wakes up -[1518-10-18 00:48] wakes up -[1518-09-16 00:28] falls asleep -[1518-04-07 00:54] falls asleep -[1518-10-26 00:38] wakes up -[1518-03-18 00:12] falls asleep -[1518-05-23 00:01] Guard #2027 begins shift -[1518-05-31 00:09] falls asleep -[1518-05-19 00:09] falls asleep -[1518-05-28 00:02] Guard #2719 begins shift -[1518-09-24 00:04] falls asleep -[1518-03-31 00:42] falls asleep -[1518-09-04 00:52] wakes up -[1518-08-27 23:48] Guard #1657 begins shift -[1518-08-18 00:22] falls asleep -[1518-07-28 00:45] wakes up -[1518-11-15 00:31] falls asleep -[1518-09-20 00:46] wakes up -[1518-07-11 00:54] falls asleep -[1518-09-19 00:00] Guard #2027 begins shift -[1518-06-01 00:58] wakes up -[1518-06-03 00:56] wakes up -[1518-05-18 00:52] falls asleep -[1518-10-25 00:05] falls asleep -[1518-04-15 00:33] wakes up -[1518-08-11 23:59] Guard #3023 begins shift -[1518-08-06 00:18] falls asleep -[1518-08-23 00:34] falls asleep -[1518-08-05 00:22] wakes up -[1518-04-22 23:58] Guard #1657 begins shift -[1518-06-30 00:54] wakes up -[1518-11-21 00:14] wakes up -[1518-06-18 23:54] Guard #3361 begins shift -[1518-10-27 00:51] wakes up -[1518-10-01 00:26] falls asleep -[1518-06-30 00:38] wakes up -[1518-05-05 00:33] wakes up -[1518-03-12 00:24] wakes up -[1518-07-26 00:33] wakes up -[1518-03-22 00:16] wakes up -[1518-04-21 00:58] wakes up -[1518-08-08 23:58] Guard #563 begins shift -[1518-05-23 00:25] wakes up -[1518-08-25 00:44] wakes up -[1518-04-29 00:57] wakes up -[1518-09-23 23:53] Guard #2027 begins shift -[1518-03-31 00:00] Guard #743 begins shift -[1518-04-05 00:02] Guard #3011 begins shift -[1518-10-16 00:00] Guard #659 begins shift -[1518-06-24 00:58] wakes up -[1518-05-06 23:59] Guard #2719 begins shift -[1518-03-21 00:55] falls asleep -[1518-08-21 00:29] falls asleep -[1518-07-19 00:14] falls asleep -[1518-09-03 00:01] falls asleep -[1518-10-25 00:54] wakes up -[1518-10-21 23:47] Guard #743 begins shift -[1518-05-21 00:26] falls asleep -[1518-05-11 00:47] wakes up -[1518-05-06 00:23] falls asleep -[1518-11-18 00:47] wakes up -[1518-08-04 00:04] falls asleep -[1518-06-19 00:05] wakes up -[1518-11-05 23:57] Guard #3119 begins shift -[1518-11-11 00:00] Guard #743 begins shift -[1518-09-23 00:56] wakes up -[1518-09-19 00:40] wakes up -[1518-06-16 00:00] Guard #3089 begins shift -[1518-09-15 00:43] wakes up -[1518-03-30 00:54] wakes up -[1518-06-20 00:01] falls asleep -[1518-09-18 00:00] Guard #3119 begins shift -[1518-06-15 00:25] falls asleep -[1518-08-14 00:47] falls asleep -[1518-06-29 00:48] falls asleep -[1518-08-28 00:08] wakes up -[1518-03-17 23:57] Guard #3089 begins shift -[1518-06-06 23:50] Guard #1657 begins shift -[1518-08-13 00:01] Guard #2927 begins shift -[1518-06-09 00:00] Guard #563 begins shift -[1518-08-16 00:49] wakes up -[1518-06-19 00:04] falls asleep -[1518-07-10 00:39] falls asleep -[1518-07-22 23:58] Guard #3023 begins shift -[1518-06-16 23:53] Guard #149 begins shift -[1518-05-25 23:50] Guard #1013 begins shift -[1518-05-12 00:01] Guard #3089 begins shift -[1518-08-01 00:46] wakes up -[1518-06-28 00:46] wakes up -[1518-10-08 00:34] wakes up -[1518-09-16 00:42] wakes up -[1518-09-22 00:04] Guard #1013 begins shift -[1518-09-07 00:45] falls asleep -[1518-05-12 00:49] falls asleep -[1518-09-14 00:29] falls asleep -[1518-03-29 23:54] Guard #3023 begins shift -[1518-05-06 00:03] Guard #3361 begins shift -[1518-09-03 00:30] falls asleep -[1518-07-13 00:51] wakes up -[1518-09-15 00:09] falls asleep -[1518-04-28 00:06] falls asleep -[1518-08-14 00:39] wakes up -[1518-11-04 00:08] falls asleep -[1518-08-19 00:24] wakes up -[1518-11-05 00:57] wakes up -[1518-08-23 00:02] Guard #2719 begins shift -[1518-06-08 00:53] falls asleep -[1518-05-08 00:30] falls asleep -[1518-04-06 00:49] wakes up -[1518-09-15 00:04] Guard #2719 begins shift -[1518-11-08 00:52] wakes up -[1518-05-03 23:57] Guard #2719 begins shift -[1518-08-29 00:26] wakes up -[1518-09-24 00:16] wakes up -[1518-07-21 00:53] wakes up -[1518-10-06 00:52] falls asleep -[1518-07-30 00:31] falls asleep -[1518-07-12 00:50] wakes up -[1518-08-11 00:54] wakes up -[1518-03-22 00:00] Guard #2027 begins shift -[1518-08-22 00:04] falls asleep -[1518-10-08 00:00] Guard #1657 begins shift -[1518-11-06 00:48] falls asleep -[1518-05-31 00:46] wakes up -[1518-10-28 00:40] wakes up -[1518-07-08 00:22] wakes up -[1518-06-05 23:57] Guard #1993 begins shift -[1518-05-03 00:46] wakes up -[1518-07-25 23:56] Guard #149 begins shift -[1518-07-22 00:56] wakes up -[1518-11-06 00:41] wakes up -[1518-06-07 00:50] wakes up -[1518-04-28 00:02] Guard #149 begins shift -[1518-09-27 00:08] falls asleep -[1518-10-05 00:17] falls asleep -[1518-09-23 00:01] Guard #881 begins shift -[1518-05-24 00:59] wakes up -[1518-05-30 00:01] Guard #743 begins shift -[1518-06-18 00:28] wakes up -[1518-06-11 00:08] falls asleep -[1518-08-30 00:25] falls asleep -[1518-04-29 00:08] falls asleep -[1518-05-01 00:50] wakes up -[1518-03-12 00:20] falls asleep -[1518-08-02 00:41] wakes up -[1518-10-14 00:58] wakes up -[1518-10-16 23:53] Guard #2843 begins shift -[1518-11-06 00:58] wakes up -[1518-04-19 00:03] Guard #2719 begins shift -[1518-07-23 23:59] Guard #3083 begins shift -[1518-04-21 00:41] falls asleep -[1518-11-18 00:54] falls asleep -[1518-04-03 00:45] falls asleep -[1518-05-03 00:58] wakes up -[1518-06-27 00:20] wakes up -[1518-08-26 00:17] falls asleep -[1518-05-04 00:44] falls asleep -[1518-05-03 00:16] wakes up -[1518-04-03 00:04] Guard #2843 begins shift -[1518-09-04 00:03] Guard #3023 begins shift -[1518-03-11 00:00] Guard #1163 begins shift -[1518-05-03 00:57] falls asleep -[1518-06-16 00:51] wakes up -[1518-05-04 00:41] wakes up -[1518-09-25 00:00] Guard #1163 begins shift -[1518-04-02 00:56] wakes up -[1518-07-12 00:39] falls asleep -[1518-06-26 00:52] falls asleep -[1518-03-15 00:00] Guard #563 begins shift -[1518-06-07 00:22] falls asleep -[1518-04-19 00:31] falls asleep -[1518-05-11 00:04] Guard #2927 begins shift -[1518-04-03 00:35] wakes up -[1518-09-30 00:01] Guard #1993 begins shift -[1518-11-14 23:57] Guard #2017 begins shift -[1518-05-16 00:41] falls asleep -[1518-09-23 00:51] wakes up -[1518-08-27 00:35] falls asleep -[1518-04-29 00:22] falls asleep -[1518-03-30 00:27] wakes up -[1518-09-07 00:13] wakes up -[1518-11-17 00:00] Guard #1993 begins shift -[1518-11-20 23:46] Guard #3361 begins shift -[1518-03-22 00:25] falls asleep -[1518-05-01 00:38] wakes up -[1518-11-02 23:56] Guard #659 begins shift -[1518-09-22 00:39] falls asleep -[1518-08-13 23:47] Guard #2027 begins shift -[1518-09-30 00:11] wakes up -[1518-06-11 23:58] Guard #2857 begins shift -[1518-08-21 00:53] wakes up -[1518-06-23 00:00] falls asleep -[1518-10-22 00:03] falls asleep -[1518-11-20 00:55] wakes up -[1518-05-17 23:57] Guard #3119 begins shift -[1518-06-14 23:57] Guard #1163 begins shift -[1518-08-19 00:00] Guard #2843 begins shift -[1518-07-11 00:08] falls asleep -[1518-10-01 00:03] Guard #2857 begins shift -[1518-10-23 00:34] wakes up -[1518-04-18 00:13] falls asleep -[1518-05-06 00:39] wakes up -[1518-08-30 00:00] Guard #2843 begins shift -[1518-03-30 00:46] falls asleep -[1518-09-18 00:25] wakes up -[1518-08-09 23:56] Guard #3119 begins shift -[1518-09-15 23:57] Guard #3023 begins shift -[1518-04-19 00:50] wakes up -[1518-08-03 00:22] wakes up -[1518-03-21 00:56] wakes up -[1518-03-24 23:57] Guard #3011 begins shift -[1518-03-22 00:45] wakes up -[1518-04-24 00:58] wakes up -[1518-08-27 00:45] wakes up -[1518-06-22 00:23] falls asleep -[1518-09-16 23:58] Guard #659 begins shift -[1518-03-30 00:01] falls asleep -[1518-04-04 00:46] falls asleep -[1518-10-06 00:54] wakes up -[1518-09-18 00:09] falls asleep -[1518-05-22 00:55] falls asleep -[1518-11-11 00:53] falls asleep -[1518-06-20 00:38] wakes up -[1518-06-14 00:58] wakes up -[1518-08-16 00:04] Guard #149 begins shift -[1518-04-04 00:57] wakes up -[1518-07-26 00:59] wakes up -[1518-09-29 00:03] Guard #563 begins shift -[1518-09-10 00:21] falls asleep -[1518-09-02 23:47] Guard #1993 begins shift -[1518-10-08 00:52] wakes up -[1518-10-18 00:45] falls asleep -[1518-04-22 00:33] wakes up -[1518-08-26 00:47] wakes up -[1518-11-02 00:04] Guard #2857 begins shift -[1518-03-25 00:44] falls asleep -[1518-07-17 00:07] falls asleep -[1518-04-05 00:26] falls asleep -[1518-08-11 00:43] falls asleep -[1518-06-13 23:59] Guard #3023 begins shift -[1518-06-29 00:00] Guard #2017 begins shift -[1518-11-20 00:36] wakes up -[1518-07-13 23:56] Guard #2857 begins shift -[1518-09-07 23:52] Guard #149 begins shift -[1518-04-24 23:58] Guard #3011 begins shift -[1518-03-19 00:47] falls asleep -[1518-07-04 23:56] Guard #653 begins shift -[1518-06-21 00:30] falls asleep -[1518-03-13 00:15] wakes up -[1518-03-13 00:23] falls asleep -[1518-08-10 00:21] falls asleep -[1518-10-01 23:47] Guard #1657 begins shift -[1518-03-26 00:03] Guard #1163 begins shift -[1518-08-18 00:53] falls asleep -[1518-05-02 00:12] falls asleep -[1518-05-26 00:42] falls asleep -[1518-10-31 00:21] wakes up -[1518-05-14 23:59] Guard #1013 begins shift -[1518-05-25 00:48] wakes up -[1518-08-25 00:52] falls asleep -[1518-06-17 00:05] falls asleep -[1518-06-16 00:14] falls asleep -[1518-04-16 00:51] wakes up -[1518-05-18 23:56] Guard #2017 begins shift -[1518-06-22 00:45] wakes up -[1518-05-30 00:59] wakes up -[1518-07-17 00:14] falls asleep -[1518-10-19 00:20] falls asleep -[1518-05-12 23:52] Guard #3361 begins shift -[1518-09-26 00:27] falls asleep -[1518-09-05 00:00] Guard #3023 begins shift -[1518-11-22 23:58] Guard #2719 begins shift -[1518-09-12 00:00] falls asleep -[1518-08-06 00:34] wakes up -[1518-06-20 00:43] falls asleep -[1518-06-08 00:59] wakes up -[1518-08-28 00:03] falls asleep -[1518-09-02 00:08] falls asleep -[1518-08-29 00:56] wakes up -[1518-07-01 00:56] wakes up -[1518-04-13 00:00] Guard #2719 begins shift -[1518-05-29 00:55] wakes up -[1518-04-14 00:54] falls asleep -[1518-04-20 00:26] falls asleep -[1518-06-20 00:50] wakes up -[1518-09-01 00:52] falls asleep -[1518-11-10 00:21] falls asleep -[1518-06-18 00:26] falls asleep -[1518-07-23 00:26] falls asleep -[1518-08-18 00:41] wakes up -[1518-07-29 00:20] wakes up -[1518-03-21 00:31] wakes up -[1518-04-14 00:55] wakes up -[1518-08-01 00:35] falls asleep -[1518-08-13 00:07] falls asleep -[1518-06-04 00:03] falls asleep -[1518-06-01 00:00] Guard #2857 begins shift -[1518-07-20 00:18] falls asleep -[1518-05-09 00:02] Guard #3011 begins shift -[1518-10-27 00:37] falls asleep -[1518-07-30 23:59] Guard #2719 begins shift -[1518-05-13 00:00] falls asleep -[1518-03-24 00:29] wakes up -[1518-10-25 00:49] falls asleep -[1518-03-31 00:36] wakes up -[1518-11-17 00:08] falls asleep -[1518-05-26 00:01] falls asleep -[1518-07-21 23:57] Guard #149 begins shift -[1518-06-18 00:36] falls asleep -[1518-07-09 00:34] falls asleep -[1518-06-03 00:43] falls asleep -[1518-04-15 00:38] falls asleep -[1518-06-24 23:56] Guard #2719 begins shift -[1518-07-25 00:29] falls asleep -[1518-03-21 00:05] falls asleep -[1518-10-20 00:04] Guard #1163 begins shift -[1518-04-27 00:51] wakes up -[1518-07-07 00:02] Guard #2843 begins shift -[1518-07-18 00:58] wakes up -[1518-04-11 00:04] Guard #2719 begins shift -[1518-08-17 00:57] wakes up -[1518-11-11 00:57] wakes up -[1518-06-18 00:48] wakes up -[1518-11-11 00:42] wakes up -[1518-06-21 00:55] falls asleep -[1518-10-12 00:54] wakes up -[1518-08-15 00:47] wakes up -[1518-06-24 00:57] falls asleep -[1518-10-14 00:16] falls asleep -[1518-03-28 00:30] wakes up -[1518-05-26 00:47] wakes up -[1518-06-02 00:04] Guard #743 begins shift -[1518-04-12 00:01] Guard #2927 begins shift -[1518-07-18 00:00] Guard #3083 begins shift -[1518-08-11 00:31] wakes up -[1518-06-27 00:33] falls asleep -[1518-08-10 00:51] wakes up -[1518-04-27 00:26] falls asleep -[1518-07-01 00:37] wakes up -[1518-07-01 00:00] Guard #2017 begins shift -[1518-10-26 00:58] wakes up -[1518-11-17 00:53] wakes up -[1518-06-23 23:56] Guard #3089 begins shift -[1518-07-27 00:38] wakes up -[1518-11-17 00:39] wakes up -[1518-04-14 00:29] wakes up -[1518-05-26 00:53] wakes up -[1518-07-27 00:02] Guard #2857 begins shift -[1518-08-07 00:06] falls asleep -[1518-08-23 00:57] wakes up -[1518-07-22 00:30] falls asleep -[1518-08-01 00:04] Guard #653 begins shift -[1518-04-08 00:33] wakes up -[1518-08-17 00:00] Guard #3023 begins shift -[1518-03-13 00:09] falls asleep -[1518-04-24 00:29] falls asleep -[1518-05-28 00:07] falls asleep -[1518-08-08 00:08] falls asleep -[1518-07-10 00:56] wakes up -[1518-03-12 23:56] Guard #881 begins shift -[1518-03-11 00:09] falls asleep -[1518-09-08 00:04] falls asleep -[1518-08-01 23:59] Guard #3119 begins shift -[1518-06-19 00:08] falls asleep -[1518-05-04 00:51] wakes up -[1518-10-13 00:35] wakes up -[1518-06-11 00:00] Guard #2027 begins shift -[1518-05-01 00:47] falls asleep -[1518-08-15 00:29] falls asleep -[1518-06-28 00:14] falls asleep -[1518-09-26 23:58] Guard #1163 begins shift -[1518-10-10 00:54] wakes up -[1518-08-25 00:53] wakes up -[1518-07-31 00:37] wakes up -[1518-09-18 00:48] falls asleep -[1518-07-09 00:47] wakes up -[1518-11-17 00:23] falls asleep -[1518-08-26 00:03] Guard #2719 begins shift -[1518-06-17 00:40] wakes up -[1518-06-08 00:29] wakes up -[1518-03-24 00:03] Guard #1657 begins shift -[1518-09-26 00:52] wakes up -[1518-08-14 23:59] Guard #2843 begins shift -[1518-08-06 00:01] Guard #149 begins shift -[1518-11-23 00:22] falls asleep -[1518-10-19 00:45] wakes up -[1518-09-27 00:49] wakes up -[1518-06-26 00:20] falls asleep -[1518-09-07 00:57] wakes up -[1518-11-14 00:04] Guard #743 begins shift -[1518-03-16 00:12] wakes up -[1518-09-18 00:54] wakes up -[1518-10-29 23:58] Guard #3119 begins shift -[1518-04-13 23:49] Guard #1013 begins shift -[1518-09-19 00:47] falls asleep -[1518-11-07 23:58] Guard #3119 begins shift -[1518-06-21 00:00] Guard #881 begins shift -[1518-09-01 00:53] wakes up -[1518-03-20 23:50] Guard #881 begins shift -[1518-09-10 00:55] wakes up -[1518-07-29 00:34] falls asleep -[1518-09-05 00:18] falls asleep -[1518-07-03 00:58] wakes up -[1518-04-28 00:52] wakes up -[1518-08-08 00:33] wakes up -[1518-04-22 00:00] falls asleep -[1518-03-19 00:15] wakes up -[1518-08-14 00:52] wakes up -[1518-07-11 00:56] wakes up -[1518-07-14 23:56] Guard #2017 begins shift -[1518-08-04 23:57] Guard #2027 begins shift -[1518-07-03 00:55] falls asleep -[1518-10-30 00:24] falls asleep -[1518-11-07 00:09] falls asleep -[1518-05-12 00:22] falls asleep -[1518-08-17 23:59] Guard #743 begins shift -[1518-08-23 00:50] falls asleep -[1518-10-29 00:04] Guard #1163 begins shift -[1518-07-04 00:54] wakes up -[1518-03-16 00:59] wakes up -[1518-08-25 00:14] falls asleep -[1518-10-30 23:52] Guard #2843 begins shift -[1518-05-17 00:54] wakes up -[1518-06-04 00:38] wakes up -[1518-05-16 00:46] wakes up -[1518-09-08 00:43] wakes up -[1518-09-01 00:21] falls asleep -[1518-06-17 23:59] Guard #1013 begins shift -[1518-09-27 23:59] Guard #3119 begins shift -[1518-05-17 00:03] Guard #1657 begins shift -[1518-04-21 23:46] Guard #2843 begins shift -[1518-09-11 00:35] falls asleep -[1518-10-01 00:31] wakes up -[1518-08-12 00:39] wakes up -[1518-10-04 00:01] Guard #1013 begins shift -[1518-08-02 23:50] Guard #1657 begins shift -[1518-05-04 00:36] falls asleep -[1518-06-05 00:39] falls asleep -[1518-07-04 00:36] wakes up -[1518-05-19 00:53] falls asleep -[1518-10-07 00:59] wakes up -[1518-06-30 00:49] falls asleep -[1518-06-17 00:18] wakes up -[1518-06-25 00:39] wakes up -[1518-09-28 00:31] falls asleep -[1518-08-24 00:24] wakes up -[1518-08-10 00:08] falls asleep -[1518-04-06 00:02] Guard #1163 begins shift -[1518-04-11 00:38] wakes up -[1518-07-02 00:52] wakes up -[1518-07-07 00:57] wakes up -[1518-04-30 00:15] falls asleep -[1518-04-17 00:48] wakes up -[1518-03-16 00:25] falls asleep -[1518-10-06 00:40] wakes up -[1518-10-13 00:00] falls asleep -[1518-05-30 23:56] Guard #2857 begins shift -[1518-06-06 00:54] wakes up -[1518-04-15 00:57] wakes up -[1518-06-21 00:57] wakes up -[1518-10-24 23:51] Guard #149 begins shift -[1518-03-26 00:44] wakes up -[1518-08-31 00:52] wakes up -[1518-03-28 00:51] falls asleep -[1518-10-25 23:47] Guard #3023 begins shift -[1518-07-14 00:52] wakes up -[1518-05-09 00:19] falls asleep -[1518-10-06 00:18] falls asleep -[1518-08-10 00:18] wakes up -[1518-05-19 00:28] wakes up -[1518-08-04 00:36] wakes up -[1518-06-13 00:49] falls asleep -[1518-04-16 00:09] falls asleep -[1518-05-20 00:38] wakes up -[1518-04-24 00:01] Guard #2719 begins shift -[1518-05-10 00:58] wakes up -[1518-11-23 00:41] wakes up -[1518-04-17 00:21] falls asleep -[1518-11-21 00:00] falls asleep -[1518-08-29 00:15] falls asleep -[1518-08-19 23:57] Guard #2843 begins shift -[1518-11-01 00:59] wakes up -[1518-05-03 00:00] Guard #2857 begins shift -[1518-10-02 00:32] wakes up -[1518-08-07 23:57] Guard #3089 begins shift -[1518-10-29 00:51] falls asleep -[1518-03-17 00:08] falls asleep -[1518-03-19 00:32] falls asleep -[1518-07-30 00:41] wakes up -[1518-07-14 00:11] falls asleep -[1518-07-16 00:04] Guard #2927 begins shift -[1518-03-14 00:30] falls asleep -[1518-10-05 00:46] wakes up -[1518-08-06 23:57] Guard #1993 begins shift -[1518-04-23 00:44] falls asleep -[1518-10-18 00:26] wakes up -[1518-04-15 00:52] wakes up -[1518-04-01 00:03] Guard #2719 begins shift -[1518-11-05 00:00] Guard #149 begins shift -[1518-05-07 00:17] falls asleep -[1518-10-10 00:00] Guard #3361 begins shift -[1518-07-28 00:00] Guard #743 begins shift -[1518-03-31 00:34] falls asleep -[1518-05-05 00:11] falls asleep -[1518-07-29 00:16] falls asleep -[1518-08-21 23:50] Guard #2927 begins shift -[1518-03-22 00:49] falls asleep -[1518-06-07 23:56] Guard #1163 begins shift -[1518-10-15 00:00] Guard #2027 begins shift -[1518-08-24 00:34] falls asleep -[1518-07-28 00:41] falls asleep -[1518-11-13 00:49] wakes up -[1518-07-02 00:32] falls asleep -[1518-09-21 00:17] falls asleep -[1518-09-02 00:00] Guard #3011 begins shift -[1518-04-15 00:02] falls asleep -[1518-09-26 00:00] Guard #1657 begins shift -[1518-05-03 00:12] falls asleep -[1518-09-09 00:44] wakes up -[1518-04-04 00:36] wakes up -[1518-05-23 23:59] Guard #3083 begins shift -[1518-04-07 00:58] wakes up -[1518-05-18 00:53] wakes up -[1518-05-15 00:56] wakes up -[1518-08-17 00:25] falls asleep -[1518-05-13 00:39] wakes up -[1518-06-24 00:18] falls asleep -[1518-04-07 00:50] wakes up -[1518-05-17 00:32] wakes up -[1518-06-19 00:32] wakes up -[1518-07-09 00:01] Guard #2719 begins shift -[1518-03-13 00:53] wakes up -[1518-06-02 00:44] wakes up -[1518-10-31 00:01] falls asleep -[1518-10-05 00:00] Guard #1013 begins shift -[1518-06-25 00:36] falls asleep -[1518-05-08 00:37] wakes up -[1518-07-02 00:49] falls asleep -[1518-05-12 00:55] wakes up -[1518-05-21 00:00] Guard #3023 begins shift -[1518-07-04 00:51] falls asleep -[1518-08-25 00:02] Guard #3011 begins shift -[1518-10-29 00:52] wakes up -[1518-04-03 00:50] wakes up -[1518-04-16 00:43] falls asleep -[1518-11-06 00:28] falls asleep -[1518-04-10 00:05] falls asleep -[1518-06-19 00:15] wakes up -[1518-04-14 00:06] wakes up -[1518-06-27 00:34] wakes up -[1518-05-27 00:52] wakes up -[1518-10-05 00:59] wakes up -[1518-09-19 00:58] wakes up -[1518-05-31 00:11] wakes up -[1518-09-14 00:59] wakes up -[1518-10-28 00:35] falls asleep -[1518-08-11 00:04] Guard #1163 begins shift -[1518-08-29 00:04] Guard #881 begins shift -[1518-09-25 00:22] falls asleep -[1518-06-30 00:04] Guard #1657 begins shift -[1518-05-04 00:56] wakes up -[1518-11-07 00:13] wakes up -[1518-06-30 00:19] falls asleep -[1518-08-22 00:09] wakes up -[1518-08-18 00:55] wakes up -[1518-05-28 00:46] wakes up -[1518-09-04 00:10] falls asleep -[1518-08-30 00:43] wakes up -[1518-03-11 00:32] wakes up -[1518-04-27 00:00] Guard #743 begins shift -[1518-10-20 00:26] wakes up -[1518-05-20 00:00] Guard #743 begins shift -[1518-04-03 23:59] Guard #3011 begins shift -[1518-07-29 00:59] wakes up -[1518-07-17 00:10] wakes up -[1518-04-07 00:04] Guard #2843 begins shift -[1518-07-15 00:52] wakes up -[1518-11-22 00:19] falls asleep -[1518-04-23 00:48] wakes up -[1518-07-19 00:52] wakes up -[1518-04-07 23:57] Guard #1163 begins shift -[1518-07-08 00:01] Guard #1993 begins shift -[1518-07-23 00:46] wakes up -[1518-07-21 00:01] Guard #3119 begins shift -[1518-03-16 00:03] Guard #3083 begins shift -[1518-03-28 00:56] wakes up -[1518-09-30 00:09] falls asleep -[1518-09-07 00:02] Guard #2017 begins shift -[1518-07-10 00:01] Guard #1993 begins shift -[1518-10-15 00:53] wakes up -[1518-10-08 00:18] falls asleep -[1518-06-26 00:54] wakes up -[1518-03-12 00:36] falls asleep -[1518-03-16 00:06] falls asleep -[1518-08-06 00:47] wakes up -[1518-10-22 00:29] wakes up -[1518-09-02 00:58] wakes up -[1518-07-18 00:12] falls asleep -[1518-09-19 23:58] Guard #1013 begins shift -[1518-08-31 00:10] falls asleep -[1518-03-24 00:18] falls asleep -[1518-04-18 00:30] wakes up -[1518-11-09 00:30] falls asleep -[1518-05-21 00:38] falls asleep -[1518-10-29 00:23] wakes up -[1518-10-23 00:00] Guard #2027 begins shift -[1518-10-09 00:09] falls asleep -[1518-09-11 00:53] falls asleep -[1518-07-04 00:32] falls asleep -[1518-07-31 00:32] falls asleep -[1518-09-01 00:58] wakes up -[1518-07-24 00:50] wakes up -[1518-07-26 00:49] falls asleep -[1518-11-18 00:15] falls asleep -[1518-04-13 00:31] falls asleep -[1518-09-03 00:22] wakes up -[1518-08-30 23:58] Guard #3361 begins shift -[1518-04-30 00:52] wakes up -[1518-06-15 00:56] falls asleep -[1518-07-02 00:56] falls asleep -[1518-04-19 23:56] Guard #1657 begins shift -[1518-10-09 00:03] Guard #1657 begins shift -[1518-10-07 00:02] Guard #1163 begins shift -[1518-05-24 00:29] falls asleep -[1518-05-23 00:06] falls asleep -[1518-07-10 23:58] Guard #1993 begins shift -[1518-07-03 00:00] Guard #743 begins shift -[1518-06-14 00:54] falls asleep -[1518-09-19 00:39] falls asleep -[1518-07-19 00:01] Guard #2017 begins shift -[1518-11-11 00:18] falls asleep -[1518-04-17 00:02] Guard #1013 begins shift -[1518-05-02 00:56] wakes up -[1518-08-29 00:55] falls asleep -[1518-11-17 00:11] wakes up -[1518-04-02 00:28] falls asleep -[1518-04-28 23:57] Guard #3083 begins shift -[1518-07-28 00:28] wakes up -[1518-09-22 00:47] wakes up -[1518-03-20 00:00] Guard #1657 begins shift -[1518-07-20 00:25] wakes up -[1518-09-06 00:52] wakes up -[1518-10-18 00:38] wakes up -[1518-07-24 00:25] falls asleep -[1518-11-07 00:02] Guard #149 begins shift -[1518-08-15 00:52] falls asleep -[1518-10-20 00:12] falls asleep -[1518-04-09 00:56] wakes up -[1518-09-26 00:18] wakes up -[1518-09-06 00:02] falls asleep -[1518-03-14 00:03] Guard #149 begins shift -[1518-06-06 00:38] falls asleep -[1518-11-13 00:44] falls asleep -[1518-10-23 23:57] Guard #1153 begins shift -[1518-10-28 00:50] falls asleep -[1518-05-14 00:57] wakes up -[1518-09-13 00:36] falls asleep -[1518-09-25 00:42] wakes up -[1518-11-22 00:51] wakes up -[1518-05-09 00:35] wakes up -[1518-10-31 23:59] Guard #2927 begins shift -[1518-11-14 00:26] wakes up -[1518-07-27 00:33] falls asleep -[1518-11-02 00:55] wakes up -[1518-04-08 23:58] Guard #3119 begins shift -[1518-11-16 00:08] falls asleep -[1518-09-30 00:37] falls asleep -[1518-04-10 00:59] wakes up -[1518-10-15 00:10] falls asleep -[1518-08-02 00:58] wakes up -[1518-07-05 00:59] wakes up -[1518-05-05 00:45] falls asleep -[1518-04-06 00:10] falls asleep -[1518-10-18 00:11] falls asleep -[1518-07-12 00:00] Guard #149 begins shift -[1518-06-24 00:40] wakes up -[1518-09-05 00:28] wakes up -[1518-03-18 00:38] wakes up -[1518-10-18 00:36] falls asleep -[1518-11-16 00:19] wakes up -[1518-08-05 00:06] falls asleep -[1518-04-26 00:00] Guard #3083 begins shift -[1518-03-22 00:52] wakes up -[1518-10-21 00:23] falls asleep -[1518-04-02 00:47] falls asleep -[1518-04-20 00:41] wakes up -[1518-11-19 23:57] Guard #1013 begins shift -[1518-09-26 00:58] wakes up -[1518-06-26 00:00] Guard #2927 begins shift -[1518-09-01 00:01] Guard #1657 begins shift -[1518-10-22 00:44] wakes up -[1518-11-20 00:50] falls asleep -[1518-10-25 00:41] wakes up -[1518-11-02 00:12] falls asleep -[1518-06-22 00:28] wakes up -[1518-11-04 00:39] wakes up -[1518-05-27 00:04] Guard #653 begins shift -[1518-07-24 00:46] falls asleep -[1518-11-14 00:08] falls asleep -[1518-03-19 00:40] wakes up -[1518-09-03 00:50] wakes up -[1518-07-16 00:59] wakes up -[1518-11-12 00:45] wakes up -[1518-10-11 00:17] falls asleep -[1518-10-30 00:40] wakes up -[1518-08-03 00:00] falls asleep -[1518-03-18 00:46] wakes up -[1518-08-06 00:44] falls asleep -[1518-10-11 00:50] wakes up -[1518-05-21 00:57] wakes up -[1518-09-01 00:43] wakes up -[1518-09-11 00:00] Guard #3011 begins shift -[1518-09-13 00:55] wakes up -[1518-10-27 00:04] Guard #149 begins shift -[1518-05-02 00:03] Guard #149 begins shift -[1518-09-14 00:00] Guard #3119 begins shift -[1518-07-08 00:14] falls asleep -[1518-06-02 00:28] falls asleep -[1518-03-19 00:57] wakes up -[1518-08-13 00:22] wakes up -[1518-05-01 00:04] Guard #653 begins shift -[1518-06-19 00:23] falls asleep -[1518-11-18 00:02] Guard #3011 begins shift -[1518-11-13 00:17] falls asleep -[1518-07-22 00:50] falls asleep -[1518-04-15 00:55] falls asleep -[1518-07-02 00:58] wakes up -[1518-03-28 00:28] falls asleep -[1518-07-01 00:50] falls asleep -[1518-05-31 00:35] falls asleep -[1518-05-13 00:27] wakes up -[1518-10-17 00:05] falls asleep -[1518-06-15 00:57] wakes up -[1518-11-10 00:45] wakes up -[1518-04-04 00:18] falls asleep -[1518-09-20 23:57] Guard #743 begins shift -[1518-10-29 00:11] falls asleep -[1518-05-01 00:25] falls asleep -[1518-11-22 00:40] wakes up -[1518-11-13 00:02] falls asleep -[1518-09-11 00:50] wakes up -[1518-09-12 23:56] Guard #653 begins shift -[1518-07-11 00:38] wakes up -[1518-03-22 23:59] Guard #659 begins shift -[1518-04-09 00:18] falls asleep -[1518-08-23 23:53] Guard #2927 begins shift -[1518-07-02 00:04] Guard #1993 begins shift -[1518-08-21 00:00] Guard #1993 begins shift -[1518-10-05 00:53] falls asleep -[1518-03-22 00:14] falls asleep -[1518-09-06 00:15] wakes up -[1518-09-24 00:57] falls asleep -[1518-08-14 00:03] falls asleep -[1518-05-25 00:41] falls asleep -[1518-04-23 00:28] wakes up -[1518-04-12 00:45] wakes up -[1518-05-10 00:14] falls asleep -[1518-03-26 23:54] Guard #3023 begins shift -[1518-05-11 00:54] wakes up -[1518-11-05 00:29] falls asleep -[1518-10-03 00:34] wakes up -[1518-04-09 23:50] Guard #653 begins shift -[1518-04-28 00:22] wakes up -[1518-07-07 00:08] falls asleep -[1518-03-28 00:01] Guard #2927 begins shift -[1518-07-05 23:58] Guard #1153 begins shift -[1518-11-23 00:37] falls asleep -[1518-09-05 00:59] wakes up -[1518-04-10 00:56] falls asleep -[1518-11-18 00:44] falls asleep -[1518-10-08 00:39] falls asleep -[1518-09-10 00:02] Guard #2017 begins shift -[1518-03-19 00:02] falls asleep -[1518-04-01 00:07] falls asleep -[1518-10-05 23:57] Guard #3023 begins shift -[1518-11-01 00:46] falls asleep -[1518-07-03 00:34] falls asleep -[1518-10-23 00:18] falls asleep -[1518-07-07 00:46] wakes up -[1518-07-26 00:07] falls asleep -[1518-08-27 00:04] Guard #3011 begins shift -[1518-04-08 00:17] falls asleep -[1518-05-22 00:56] wakes up -[1518-10-22 00:36] falls asleep -[1518-04-14 00:02] falls asleep -[1518-07-25 00:37] wakes up -[1518-08-03 23:50] Guard #2843 begins shift -[1518-03-31 00:56] wakes up -[1518-07-04 00:00] Guard #3023 begins shift -[1518-11-16 00:00] Guard #2027 begins shift -[1518-03-27 00:01] falls asleep -[1518-09-01 00:57] falls asleep -[1518-11-22 00:49] falls asleep -[1518-07-05 00:38] falls asleep -[1518-05-27 00:29] falls asleep -[1518-08-12 00:32] falls asleep -[1518-05-22 00:34] falls asleep -[1518-05-11 00:21] falls asleep -[1518-06-19 23:52] Guard #2927 begins shift -[1518-04-23 00:26] falls asleep -[1518-03-11 23:56] Guard #1993 begins shift -[1518-08-16 00:14] falls asleep -[1518-10-30 00:56] wakes up -[1518-03-18 00:43] falls asleep -[1518-11-03 23:58] Guard #881 begins shift -[1518-03-14 00:39] wakes up -[1518-09-12 00:57] wakes up -[1518-11-17 00:47] falls asleep -[1518-04-16 00:38] wakes up -[1518-09-23 00:54] falls asleep -[1518-08-20 00:39] wakes up -[1518-06-08 00:25] falls asleep -[1518-03-20 00:10] falls asleep -[1518-07-01 00:21] falls asleep -[1518-03-24 00:44] wakes up -[1518-07-17 00:59] wakes up -[1518-06-23 00:38] wakes up -[1518-04-02 00:02] Guard #2857 begins shift -[1518-07-15 00:51] falls asleep -[1518-09-11 23:52] Guard #1163 begins shift -[1518-04-26 00:40] falls asleep -[1518-03-29 00:20] falls asleep -[1518-07-30 00:00] Guard #3361 begins shift -[1518-06-05 00:49] wakes up -[1518-10-26 00:00] falls asleep -[1518-07-03 00:51] wakes up -[1518-10-12 00:46] falls asleep -[1518-10-21 00:57] wakes up -[1518-07-25 00:02] falls asleep -[1518-04-15 23:56] Guard #3119 begins shift -[1518-10-17 00:19] wakes up -[1518-06-05 00:45] falls asleep -[1518-07-28 00:17] falls asleep -[1518-06-22 00:43] falls asleep -[1518-07-25 00:24] wakes up -[1518-09-20 00:40] falls asleep -[1518-07-17 00:00] Guard #743 begins shift -[1518-03-16 23:59] Guard #2017 begins shift -[1518-09-05 00:36] falls asleep -[1518-08-11 00:14] falls asleep -[1518-04-12 00:48] falls asleep -[1518-05-20 00:23] falls asleep -[1518-04-11 00:33] falls asleep -[1518-09-08 23:58] Guard #1163 begins shift -[1518-09-09 00:09] falls asleep -[1518-04-02 00:40] wakes up -[1518-06-11 00:54] wakes up -[1518-09-05 23:50] Guard #2017 begins shift -[1518-11-22 00:04] falls asleep -[1518-04-29 00:19] wakes up -[1518-05-19 00:57] wakes up -[1518-05-26 00:34] wakes up -[1518-05-17 00:10] falls asleep -[1518-04-01 00:54] wakes up -[1518-04-18 00:00] Guard #3083 begins shift -[1518-04-25 00:59] wakes up -[1518-06-22 00:02] Guard #2027 begins shift -[1518-08-20 00:34] falls asleep -[1518-05-25 00:00] Guard #3023 begins shift -[1518-07-20 00:03] Guard #3011 begins shift -[1518-03-27 00:59] wakes up -[1518-06-05 00:42] wakes up -[1518-08-19 00:19] falls asleep -[1518-11-23 00:32] wakes up -[1518-04-12 00:26] falls asleep -[1518-10-10 00:39] falls asleep -[1518-11-15 00:51] wakes up -[1518-09-27 00:38] wakes up -[1518-10-12 23:53] Guard #653 begins shift -[1518-05-03 00:25] falls asleep -[1518-10-09 00:49] wakes up -[1518-11-08 00:30] falls asleep -[1518-05-26 00:50] falls asleep -[1518-11-13 00:41] wakes up -[1518-09-30 00:41] wakes up -[1518-04-14 00:22] falls asleep -[1518-05-04 00:54] falls asleep -[1518-05-05 00:03] Guard #2027 begins shift -[1518-04-05 00:44] wakes up -[1518-07-24 00:42] wakes up -[1518-06-07 00:08] wakes up -[1518-10-02 00:00] falls asleep -[1518-06-12 00:16] falls asleep -[1518-04-10 00:34] wakes up -[1518-07-13 00:02] Guard #2719 begins shift -[1518-04-21 00:03] Guard #881 begins shift -[1518-10-11 00:04] Guard #2927 begins shift -[1518-06-02 23:56] Guard #3011 begins shift -[1518-03-12 00:38] wakes up -[1518-06-26 23:48] Guard #3023 begins shift -[1518-05-16 00:07] falls asleep -[1518-04-28 00:48] falls asleep -[1518-05-22 00:02] Guard #881 begins shift -[1518-03-18 23:48] Guard #3089 begins shift -[1518-08-08 00:57] wakes up -[1518-09-21 00:21] wakes up -[1518-04-29 23:58] Guard #2843 begins shift -[1518-03-17 00:52] wakes up -[1518-06-10 00:00] Guard #563 begins shift -[1518-09-28 00:57] wakes up -[1518-05-16 00:22] wakes up -[1518-04-03 00:13] falls asleep -[1518-10-04 00:44] wakes up -[1518-06-27 00:01] falls asleep -[1518-06-26 00:49] wakes up -[1518-05-29 00:28] falls asleep -[1518-06-29 00:56] wakes up -[1518-11-20 00:21] falls asleep -[1518-10-03 00:07] falls asleep -[1518-05-16 00:00] Guard #1993 begins shift -[1518-09-06 00:34] falls asleep -[1518-05-17 00:38] falls asleep -[1518-07-28 23:56] Guard #2857 begins shift -[1518-06-13 00:54] wakes up -[1518-06-01 00:30] falls asleep -[1518-11-09 00:57] wakes up -[1518-11-22 00:06] wakes up -[1518-10-04 00:09] falls asleep -[1518-10-19 00:00] Guard #3023 begins shift -[1518-11-09 23:58] Guard #881 begins shift -[1518-10-28 00:02] Guard #2719 begins shift -[1518-04-13 00:45] wakes up -[1518-05-15 00:35] falls asleep -[1518-10-12 00:00] Guard #3119 begins shift -[1518-04-07 00:46] falls asleep -[1518-03-29 00:03] Guard #2027 begins shift -[1518-03-24 00:43] falls asleep -[1518-04-26 00:49] wakes up -[1518-09-26 00:15] falls asleep -[1518-08-24 00:40] wakes up -[1518-04-14 23:54] Guard #2857 begins shift -[1518-03-20 00:32] wakes up -[1518-10-13 00:50] falls asleep -[1518-11-12 23:48] Guard #3119 begins shift -[1518-07-07 00:56] falls asleep -[1518-10-21 00:03] Guard #3023 begins shift -[1518-08-15 00:53] wakes up -[1518-05-07 00:55] wakes up -[1518-08-08 00:53] falls asleep -[1518-08-02 00:49] falls asleep -[1518-11-18 00:56] wakes up -[1518-10-30 00:50] falls asleep -[1518-11-18 00:41] wakes up -[1518-05-30 00:16] falls asleep -[1518-06-28 00:00] Guard #3011 begins shift -[1518-09-23 00:17] falls asleep -[1518-10-26 00:54] falls asleep -[1518-10-08 00:31] falls asleep -[1518-06-04 23:59] Guard #149 begins shift -[1518-09-07 00:08] falls asleep -[1518-06-03 23:52] Guard #1993 begins shift -[1518-07-21 00:14] falls asleep -[1518-06-13 00:00] Guard #2927 begins shift -[1518-07-24 23:48] Guard #149 begins shift -[1518-10-08 00:25] wakes up -[1518-10-03 00:03] Guard #743 begins shift -[1518-05-09 23:57] Guard #2027 begins shift -[1518-06-21 00:49] wakes up -[1518-07-13 00:34] falls asleep -[1518-03-26 00:13] falls asleep -[1518-05-12 00:28] wakes up -[1518-09-27 00:42] falls asleep -[1518-05-29 00:04] Guard #2719 begins shift -[1518-05-13 23:56] Guard #3011 begins shift -[1518-10-28 00:56] wakes up -[1518-07-02 00:37] wakes up -[1518-06-17 00:32] falls asleep -[1518-05-13 00:36] falls asleep -[1518-04-25 00:46] falls asleep -[1518-06-07 00:01] falls asleep -[1518-10-13 00:59] wakes up -[1518-11-09 00:02] Guard #3011 begins shift -[1518-09-26 00:57] falls asleep -[1518-09-11 00:54] wakes up -[1518-05-14 00:29] falls asleep -[1518-08-02 00:29] falls asleep -[1518-08-24 00:00] falls asleep -[1518-11-13 00:13] wakes up -[1518-05-05 00:56] wakes up -[1518-06-22 23:54] Guard #2843 begins shift -[1518-08-07 00:48] wakes up -[1518-11-19 00:00] Guard #659 begins shift -[1518-07-22 00:34] wakes up -[1518-03-29 00:54] wakes up -[1518-10-07 00:30] falls asleep -[1518-11-21 23:51] Guard #1013 begins shift -[1518-10-18 00:03] Guard #2027 begins shift -[1518-03-25 00:56] wakes up -[1518-07-16 00:38] falls asleep -[1518-06-12 00:59] wakes up -[1518-10-14 00:00] Guard #2027 begins shift -[1518-05-11 00:52] falls asleep +[1518-09-24 00:59] wakes up +[1518-05-22 00:47] wakes up +[1518-05-08 00:02] Guard #2719 begins shift +[1518-11-12 00:00] Guard #3011 begins shift +[1518-04-12 00:57] wakes up +[1518-05-21 00:32] wakes up +[1518-11-12 00:30] falls asleep +[1518-08-23 00:39] wakes up +[1518-10-18 00:48] wakes up +[1518-09-16 00:28] falls asleep +[1518-04-07 00:54] falls asleep +[1518-10-26 00:38] wakes up +[1518-03-18 00:12] falls asleep +[1518-05-23 00:01] Guard #2027 begins shift +[1518-05-31 00:09] falls asleep +[1518-05-19 00:09] falls asleep +[1518-05-28 00:02] Guard #2719 begins shift +[1518-09-24 00:04] falls asleep +[1518-03-31 00:42] falls asleep +[1518-09-04 00:52] wakes up +[1518-08-27 23:48] Guard #1657 begins shift +[1518-08-18 00:22] falls asleep +[1518-07-28 00:45] wakes up +[1518-11-15 00:31] falls asleep +[1518-09-20 00:46] wakes up +[1518-07-11 00:54] falls asleep +[1518-09-19 00:00] Guard #2027 begins shift +[1518-06-01 00:58] wakes up +[1518-06-03 00:56] wakes up +[1518-05-18 00:52] falls asleep +[1518-10-25 00:05] falls asleep +[1518-04-15 00:33] wakes up +[1518-08-11 23:59] Guard #3023 begins shift +[1518-08-06 00:18] falls asleep +[1518-08-23 00:34] falls asleep +[1518-08-05 00:22] wakes up +[1518-04-22 23:58] Guard #1657 begins shift +[1518-06-30 00:54] wakes up +[1518-11-21 00:14] wakes up +[1518-06-18 23:54] Guard #3361 begins shift +[1518-10-27 00:51] wakes up +[1518-10-01 00:26] falls asleep +[1518-06-30 00:38] wakes up +[1518-05-05 00:33] wakes up +[1518-03-12 00:24] wakes up +[1518-07-26 00:33] wakes up +[1518-03-22 00:16] wakes up +[1518-04-21 00:58] wakes up +[1518-08-08 23:58] Guard #563 begins shift +[1518-05-23 00:25] wakes up +[1518-08-25 00:44] wakes up +[1518-04-29 00:57] wakes up +[1518-09-23 23:53] Guard #2027 begins shift +[1518-03-31 00:00] Guard #743 begins shift +[1518-04-05 00:02] Guard #3011 begins shift +[1518-10-16 00:00] Guard #659 begins shift +[1518-06-24 00:58] wakes up +[1518-05-06 23:59] Guard #2719 begins shift +[1518-03-21 00:55] falls asleep +[1518-08-21 00:29] falls asleep +[1518-07-19 00:14] falls asleep +[1518-09-03 00:01] falls asleep +[1518-10-25 00:54] wakes up +[1518-10-21 23:47] Guard #743 begins shift +[1518-05-21 00:26] falls asleep +[1518-05-11 00:47] wakes up +[1518-05-06 00:23] falls asleep +[1518-11-18 00:47] wakes up +[1518-08-04 00:04] falls asleep +[1518-06-19 00:05] wakes up +[1518-11-05 23:57] Guard #3119 begins shift +[1518-11-11 00:00] Guard #743 begins shift +[1518-09-23 00:56] wakes up +[1518-09-19 00:40] wakes up +[1518-06-16 00:00] Guard #3089 begins shift +[1518-09-15 00:43] wakes up +[1518-03-30 00:54] wakes up +[1518-06-20 00:01] falls asleep +[1518-09-18 00:00] Guard #3119 begins shift +[1518-06-15 00:25] falls asleep +[1518-08-14 00:47] falls asleep +[1518-06-29 00:48] falls asleep +[1518-08-28 00:08] wakes up +[1518-03-17 23:57] Guard #3089 begins shift +[1518-06-06 23:50] Guard #1657 begins shift +[1518-08-13 00:01] Guard #2927 begins shift +[1518-06-09 00:00] Guard #563 begins shift +[1518-08-16 00:49] wakes up +[1518-06-19 00:04] falls asleep +[1518-07-10 00:39] falls asleep +[1518-07-22 23:58] Guard #3023 begins shift +[1518-06-16 23:53] Guard #149 begins shift +[1518-05-25 23:50] Guard #1013 begins shift +[1518-05-12 00:01] Guard #3089 begins shift +[1518-08-01 00:46] wakes up +[1518-06-28 00:46] wakes up +[1518-10-08 00:34] wakes up +[1518-09-16 00:42] wakes up +[1518-09-22 00:04] Guard #1013 begins shift +[1518-09-07 00:45] falls asleep +[1518-05-12 00:49] falls asleep +[1518-09-14 00:29] falls asleep +[1518-03-29 23:54] Guard #3023 begins shift +[1518-05-06 00:03] Guard #3361 begins shift +[1518-09-03 00:30] falls asleep +[1518-07-13 00:51] wakes up +[1518-09-15 00:09] falls asleep +[1518-04-28 00:06] falls asleep +[1518-08-14 00:39] wakes up +[1518-11-04 00:08] falls asleep +[1518-08-19 00:24] wakes up +[1518-11-05 00:57] wakes up +[1518-08-23 00:02] Guard #2719 begins shift +[1518-06-08 00:53] falls asleep +[1518-05-08 00:30] falls asleep +[1518-04-06 00:49] wakes up +[1518-09-15 00:04] Guard #2719 begins shift +[1518-11-08 00:52] wakes up +[1518-05-03 23:57] Guard #2719 begins shift +[1518-08-29 00:26] wakes up +[1518-09-24 00:16] wakes up +[1518-07-21 00:53] wakes up +[1518-10-06 00:52] falls asleep +[1518-07-30 00:31] falls asleep +[1518-07-12 00:50] wakes up +[1518-08-11 00:54] wakes up +[1518-03-22 00:00] Guard #2027 begins shift +[1518-08-22 00:04] falls asleep +[1518-10-08 00:00] Guard #1657 begins shift +[1518-11-06 00:48] falls asleep +[1518-05-31 00:46] wakes up +[1518-10-28 00:40] wakes up +[1518-07-08 00:22] wakes up +[1518-06-05 23:57] Guard #1993 begins shift +[1518-05-03 00:46] wakes up +[1518-07-25 23:56] Guard #149 begins shift +[1518-07-22 00:56] wakes up +[1518-11-06 00:41] wakes up +[1518-06-07 00:50] wakes up +[1518-04-28 00:02] Guard #149 begins shift +[1518-09-27 00:08] falls asleep +[1518-10-05 00:17] falls asleep +[1518-09-23 00:01] Guard #881 begins shift +[1518-05-24 00:59] wakes up +[1518-05-30 00:01] Guard #743 begins shift +[1518-06-18 00:28] wakes up +[1518-06-11 00:08] falls asleep +[1518-08-30 00:25] falls asleep +[1518-04-29 00:08] falls asleep +[1518-05-01 00:50] wakes up +[1518-03-12 00:20] falls asleep +[1518-08-02 00:41] wakes up +[1518-10-14 00:58] wakes up +[1518-10-16 23:53] Guard #2843 begins shift +[1518-11-06 00:58] wakes up +[1518-04-19 00:03] Guard #2719 begins shift +[1518-07-23 23:59] Guard #3083 begins shift +[1518-04-21 00:41] falls asleep +[1518-11-18 00:54] falls asleep +[1518-04-03 00:45] falls asleep +[1518-05-03 00:58] wakes up +[1518-06-27 00:20] wakes up +[1518-08-26 00:17] falls asleep +[1518-05-04 00:44] falls asleep +[1518-05-03 00:16] wakes up +[1518-04-03 00:04] Guard #2843 begins shift +[1518-09-04 00:03] Guard #3023 begins shift +[1518-03-11 00:00] Guard #1163 begins shift +[1518-05-03 00:57] falls asleep +[1518-06-16 00:51] wakes up +[1518-05-04 00:41] wakes up +[1518-09-25 00:00] Guard #1163 begins shift +[1518-04-02 00:56] wakes up +[1518-07-12 00:39] falls asleep +[1518-06-26 00:52] falls asleep +[1518-03-15 00:00] Guard #563 begins shift +[1518-06-07 00:22] falls asleep +[1518-04-19 00:31] falls asleep +[1518-05-11 00:04] Guard #2927 begins shift +[1518-04-03 00:35] wakes up +[1518-09-30 00:01] Guard #1993 begins shift +[1518-11-14 23:57] Guard #2017 begins shift +[1518-05-16 00:41] falls asleep +[1518-09-23 00:51] wakes up +[1518-08-27 00:35] falls asleep +[1518-04-29 00:22] falls asleep +[1518-03-30 00:27] wakes up +[1518-09-07 00:13] wakes up +[1518-11-17 00:00] Guard #1993 begins shift +[1518-11-20 23:46] Guard #3361 begins shift +[1518-03-22 00:25] falls asleep +[1518-05-01 00:38] wakes up +[1518-11-02 23:56] Guard #659 begins shift +[1518-09-22 00:39] falls asleep +[1518-08-13 23:47] Guard #2027 begins shift +[1518-09-30 00:11] wakes up +[1518-06-11 23:58] Guard #2857 begins shift +[1518-08-21 00:53] wakes up +[1518-06-23 00:00] falls asleep +[1518-10-22 00:03] falls asleep +[1518-11-20 00:55] wakes up +[1518-05-17 23:57] Guard #3119 begins shift +[1518-06-14 23:57] Guard #1163 begins shift +[1518-08-19 00:00] Guard #2843 begins shift +[1518-07-11 00:08] falls asleep +[1518-10-01 00:03] Guard #2857 begins shift +[1518-10-23 00:34] wakes up +[1518-04-18 00:13] falls asleep +[1518-05-06 00:39] wakes up +[1518-08-30 00:00] Guard #2843 begins shift +[1518-03-30 00:46] falls asleep +[1518-09-18 00:25] wakes up +[1518-08-09 23:56] Guard #3119 begins shift +[1518-09-15 23:57] Guard #3023 begins shift +[1518-04-19 00:50] wakes up +[1518-08-03 00:22] wakes up +[1518-03-21 00:56] wakes up +[1518-03-24 23:57] Guard #3011 begins shift +[1518-03-22 00:45] wakes up +[1518-04-24 00:58] wakes up +[1518-08-27 00:45] wakes up +[1518-06-22 00:23] falls asleep +[1518-09-16 23:58] Guard #659 begins shift +[1518-03-30 00:01] falls asleep +[1518-04-04 00:46] falls asleep +[1518-10-06 00:54] wakes up +[1518-09-18 00:09] falls asleep +[1518-05-22 00:55] falls asleep +[1518-11-11 00:53] falls asleep +[1518-06-20 00:38] wakes up +[1518-06-14 00:58] wakes up +[1518-08-16 00:04] Guard #149 begins shift +[1518-04-04 00:57] wakes up +[1518-07-26 00:59] wakes up +[1518-09-29 00:03] Guard #563 begins shift +[1518-09-10 00:21] falls asleep +[1518-09-02 23:47] Guard #1993 begins shift +[1518-10-08 00:52] wakes up +[1518-10-18 00:45] falls asleep +[1518-04-22 00:33] wakes up +[1518-08-26 00:47] wakes up +[1518-11-02 00:04] Guard #2857 begins shift +[1518-03-25 00:44] falls asleep +[1518-07-17 00:07] falls asleep +[1518-04-05 00:26] falls asleep +[1518-08-11 00:43] falls asleep +[1518-06-13 23:59] Guard #3023 begins shift +[1518-06-29 00:00] Guard #2017 begins shift +[1518-11-20 00:36] wakes up +[1518-07-13 23:56] Guard #2857 begins shift +[1518-09-07 23:52] Guard #149 begins shift +[1518-04-24 23:58] Guard #3011 begins shift +[1518-03-19 00:47] falls asleep +[1518-07-04 23:56] Guard #653 begins shift +[1518-06-21 00:30] falls asleep +[1518-03-13 00:15] wakes up +[1518-03-13 00:23] falls asleep +[1518-08-10 00:21] falls asleep +[1518-10-01 23:47] Guard #1657 begins shift +[1518-03-26 00:03] Guard #1163 begins shift +[1518-08-18 00:53] falls asleep +[1518-05-02 00:12] falls asleep +[1518-05-26 00:42] falls asleep +[1518-10-31 00:21] wakes up +[1518-05-14 23:59] Guard #1013 begins shift +[1518-05-25 00:48] wakes up +[1518-08-25 00:52] falls asleep +[1518-06-17 00:05] falls asleep +[1518-06-16 00:14] falls asleep +[1518-04-16 00:51] wakes up +[1518-05-18 23:56] Guard #2017 begins shift +[1518-06-22 00:45] wakes up +[1518-05-30 00:59] wakes up +[1518-07-17 00:14] falls asleep +[1518-10-19 00:20] falls asleep +[1518-05-12 23:52] Guard #3361 begins shift +[1518-09-26 00:27] falls asleep +[1518-09-05 00:00] Guard #3023 begins shift +[1518-11-22 23:58] Guard #2719 begins shift +[1518-09-12 00:00] falls asleep +[1518-08-06 00:34] wakes up +[1518-06-20 00:43] falls asleep +[1518-06-08 00:59] wakes up +[1518-08-28 00:03] falls asleep +[1518-09-02 00:08] falls asleep +[1518-08-29 00:56] wakes up +[1518-07-01 00:56] wakes up +[1518-04-13 00:00] Guard #2719 begins shift +[1518-05-29 00:55] wakes up +[1518-04-14 00:54] falls asleep +[1518-04-20 00:26] falls asleep +[1518-06-20 00:50] wakes up +[1518-09-01 00:52] falls asleep +[1518-11-10 00:21] falls asleep +[1518-06-18 00:26] falls asleep +[1518-07-23 00:26] falls asleep +[1518-08-18 00:41] wakes up +[1518-07-29 00:20] wakes up +[1518-03-21 00:31] wakes up +[1518-04-14 00:55] wakes up +[1518-08-01 00:35] falls asleep +[1518-08-13 00:07] falls asleep +[1518-06-04 00:03] falls asleep +[1518-06-01 00:00] Guard #2857 begins shift +[1518-07-20 00:18] falls asleep +[1518-05-09 00:02] Guard #3011 begins shift +[1518-10-27 00:37] falls asleep +[1518-07-30 23:59] Guard #2719 begins shift +[1518-05-13 00:00] falls asleep +[1518-03-24 00:29] wakes up +[1518-10-25 00:49] falls asleep +[1518-03-31 00:36] wakes up +[1518-11-17 00:08] falls asleep +[1518-05-26 00:01] falls asleep +[1518-07-21 23:57] Guard #149 begins shift +[1518-06-18 00:36] falls asleep +[1518-07-09 00:34] falls asleep +[1518-06-03 00:43] falls asleep +[1518-04-15 00:38] falls asleep +[1518-06-24 23:56] Guard #2719 begins shift +[1518-07-25 00:29] falls asleep +[1518-03-21 00:05] falls asleep +[1518-10-20 00:04] Guard #1163 begins shift +[1518-04-27 00:51] wakes up +[1518-07-07 00:02] Guard #2843 begins shift +[1518-07-18 00:58] wakes up +[1518-04-11 00:04] Guard #2719 begins shift +[1518-08-17 00:57] wakes up +[1518-11-11 00:57] wakes up +[1518-06-18 00:48] wakes up +[1518-11-11 00:42] wakes up +[1518-06-21 00:55] falls asleep +[1518-10-12 00:54] wakes up +[1518-08-15 00:47] wakes up +[1518-06-24 00:57] falls asleep +[1518-10-14 00:16] falls asleep +[1518-03-28 00:30] wakes up +[1518-05-26 00:47] wakes up +[1518-06-02 00:04] Guard #743 begins shift +[1518-04-12 00:01] Guard #2927 begins shift +[1518-07-18 00:00] Guard #3083 begins shift +[1518-08-11 00:31] wakes up +[1518-06-27 00:33] falls asleep +[1518-08-10 00:51] wakes up +[1518-04-27 00:26] falls asleep +[1518-07-01 00:37] wakes up +[1518-07-01 00:00] Guard #2017 begins shift +[1518-10-26 00:58] wakes up +[1518-11-17 00:53] wakes up +[1518-06-23 23:56] Guard #3089 begins shift +[1518-07-27 00:38] wakes up +[1518-11-17 00:39] wakes up +[1518-04-14 00:29] wakes up +[1518-05-26 00:53] wakes up +[1518-07-27 00:02] Guard #2857 begins shift +[1518-08-07 00:06] falls asleep +[1518-08-23 00:57] wakes up +[1518-07-22 00:30] falls asleep +[1518-08-01 00:04] Guard #653 begins shift +[1518-04-08 00:33] wakes up +[1518-08-17 00:00] Guard #3023 begins shift +[1518-03-13 00:09] falls asleep +[1518-04-24 00:29] falls asleep +[1518-05-28 00:07] falls asleep +[1518-08-08 00:08] falls asleep +[1518-07-10 00:56] wakes up +[1518-03-12 23:56] Guard #881 begins shift +[1518-03-11 00:09] falls asleep +[1518-09-08 00:04] falls asleep +[1518-08-01 23:59] Guard #3119 begins shift +[1518-06-19 00:08] falls asleep +[1518-05-04 00:51] wakes up +[1518-10-13 00:35] wakes up +[1518-06-11 00:00] Guard #2027 begins shift +[1518-05-01 00:47] falls asleep +[1518-08-15 00:29] falls asleep +[1518-06-28 00:14] falls asleep +[1518-09-26 23:58] Guard #1163 begins shift +[1518-10-10 00:54] wakes up +[1518-08-25 00:53] wakes up +[1518-07-31 00:37] wakes up +[1518-09-18 00:48] falls asleep +[1518-07-09 00:47] wakes up +[1518-11-17 00:23] falls asleep +[1518-08-26 00:03] Guard #2719 begins shift +[1518-06-17 00:40] wakes up +[1518-06-08 00:29] wakes up +[1518-03-24 00:03] Guard #1657 begins shift +[1518-09-26 00:52] wakes up +[1518-08-14 23:59] Guard #2843 begins shift +[1518-08-06 00:01] Guard #149 begins shift +[1518-11-23 00:22] falls asleep +[1518-10-19 00:45] wakes up +[1518-09-27 00:49] wakes up +[1518-06-26 00:20] falls asleep +[1518-09-07 00:57] wakes up +[1518-11-14 00:04] Guard #743 begins shift +[1518-03-16 00:12] wakes up +[1518-09-18 00:54] wakes up +[1518-10-29 23:58] Guard #3119 begins shift +[1518-04-13 23:49] Guard #1013 begins shift +[1518-09-19 00:47] falls asleep +[1518-11-07 23:58] Guard #3119 begins shift +[1518-06-21 00:00] Guard #881 begins shift +[1518-09-01 00:53] wakes up +[1518-03-20 23:50] Guard #881 begins shift +[1518-09-10 00:55] wakes up +[1518-07-29 00:34] falls asleep +[1518-09-05 00:18] falls asleep +[1518-07-03 00:58] wakes up +[1518-04-28 00:52] wakes up +[1518-08-08 00:33] wakes up +[1518-04-22 00:00] falls asleep +[1518-03-19 00:15] wakes up +[1518-08-14 00:52] wakes up +[1518-07-11 00:56] wakes up +[1518-07-14 23:56] Guard #2017 begins shift +[1518-08-04 23:57] Guard #2027 begins shift +[1518-07-03 00:55] falls asleep +[1518-10-30 00:24] falls asleep +[1518-11-07 00:09] falls asleep +[1518-05-12 00:22] falls asleep +[1518-08-17 23:59] Guard #743 begins shift +[1518-08-23 00:50] falls asleep +[1518-10-29 00:04] Guard #1163 begins shift +[1518-07-04 00:54] wakes up +[1518-03-16 00:59] wakes up +[1518-08-25 00:14] falls asleep +[1518-10-30 23:52] Guard #2843 begins shift +[1518-05-17 00:54] wakes up +[1518-06-04 00:38] wakes up +[1518-05-16 00:46] wakes up +[1518-09-08 00:43] wakes up +[1518-09-01 00:21] falls asleep +[1518-06-17 23:59] Guard #1013 begins shift +[1518-09-27 23:59] Guard #3119 begins shift +[1518-05-17 00:03] Guard #1657 begins shift +[1518-04-21 23:46] Guard #2843 begins shift +[1518-09-11 00:35] falls asleep +[1518-10-01 00:31] wakes up +[1518-08-12 00:39] wakes up +[1518-10-04 00:01] Guard #1013 begins shift +[1518-08-02 23:50] Guard #1657 begins shift +[1518-05-04 00:36] falls asleep +[1518-06-05 00:39] falls asleep +[1518-07-04 00:36] wakes up +[1518-05-19 00:53] falls asleep +[1518-10-07 00:59] wakes up +[1518-06-30 00:49] falls asleep +[1518-06-17 00:18] wakes up +[1518-06-25 00:39] wakes up +[1518-09-28 00:31] falls asleep +[1518-08-24 00:24] wakes up +[1518-08-10 00:08] falls asleep +[1518-04-06 00:02] Guard #1163 begins shift +[1518-04-11 00:38] wakes up +[1518-07-02 00:52] wakes up +[1518-07-07 00:57] wakes up +[1518-04-30 00:15] falls asleep +[1518-04-17 00:48] wakes up +[1518-03-16 00:25] falls asleep +[1518-10-06 00:40] wakes up +[1518-10-13 00:00] falls asleep +[1518-05-30 23:56] Guard #2857 begins shift +[1518-06-06 00:54] wakes up +[1518-04-15 00:57] wakes up +[1518-06-21 00:57] wakes up +[1518-10-24 23:51] Guard #149 begins shift +[1518-03-26 00:44] wakes up +[1518-08-31 00:52] wakes up +[1518-03-28 00:51] falls asleep +[1518-10-25 23:47] Guard #3023 begins shift +[1518-07-14 00:52] wakes up +[1518-05-09 00:19] falls asleep +[1518-10-06 00:18] falls asleep +[1518-08-10 00:18] wakes up +[1518-05-19 00:28] wakes up +[1518-08-04 00:36] wakes up +[1518-06-13 00:49] falls asleep +[1518-04-16 00:09] falls asleep +[1518-05-20 00:38] wakes up +[1518-04-24 00:01] Guard #2719 begins shift +[1518-05-10 00:58] wakes up +[1518-11-23 00:41] wakes up +[1518-04-17 00:21] falls asleep +[1518-11-21 00:00] falls asleep +[1518-08-29 00:15] falls asleep +[1518-08-19 23:57] Guard #2843 begins shift +[1518-11-01 00:59] wakes up +[1518-05-03 00:00] Guard #2857 begins shift +[1518-10-02 00:32] wakes up +[1518-08-07 23:57] Guard #3089 begins shift +[1518-10-29 00:51] falls asleep +[1518-03-17 00:08] falls asleep +[1518-03-19 00:32] falls asleep +[1518-07-30 00:41] wakes up +[1518-07-14 00:11] falls asleep +[1518-07-16 00:04] Guard #2927 begins shift +[1518-03-14 00:30] falls asleep +[1518-10-05 00:46] wakes up +[1518-08-06 23:57] Guard #1993 begins shift +[1518-04-23 00:44] falls asleep +[1518-10-18 00:26] wakes up +[1518-04-15 00:52] wakes up +[1518-04-01 00:03] Guard #2719 begins shift +[1518-11-05 00:00] Guard #149 begins shift +[1518-05-07 00:17] falls asleep +[1518-10-10 00:00] Guard #3361 begins shift +[1518-07-28 00:00] Guard #743 begins shift +[1518-03-31 00:34] falls asleep +[1518-05-05 00:11] falls asleep +[1518-07-29 00:16] falls asleep +[1518-08-21 23:50] Guard #2927 begins shift +[1518-03-22 00:49] falls asleep +[1518-06-07 23:56] Guard #1163 begins shift +[1518-10-15 00:00] Guard #2027 begins shift +[1518-08-24 00:34] falls asleep +[1518-07-28 00:41] falls asleep +[1518-11-13 00:49] wakes up +[1518-07-02 00:32] falls asleep +[1518-09-21 00:17] falls asleep +[1518-09-02 00:00] Guard #3011 begins shift +[1518-04-15 00:02] falls asleep +[1518-09-26 00:00] Guard #1657 begins shift +[1518-05-03 00:12] falls asleep +[1518-09-09 00:44] wakes up +[1518-04-04 00:36] wakes up +[1518-05-23 23:59] Guard #3083 begins shift +[1518-04-07 00:58] wakes up +[1518-05-18 00:53] wakes up +[1518-05-15 00:56] wakes up +[1518-08-17 00:25] falls asleep +[1518-05-13 00:39] wakes up +[1518-06-24 00:18] falls asleep +[1518-04-07 00:50] wakes up +[1518-05-17 00:32] wakes up +[1518-06-19 00:32] wakes up +[1518-07-09 00:01] Guard #2719 begins shift +[1518-03-13 00:53] wakes up +[1518-06-02 00:44] wakes up +[1518-10-31 00:01] falls asleep +[1518-10-05 00:00] Guard #1013 begins shift +[1518-06-25 00:36] falls asleep +[1518-05-08 00:37] wakes up +[1518-07-02 00:49] falls asleep +[1518-05-12 00:55] wakes up +[1518-05-21 00:00] Guard #3023 begins shift +[1518-07-04 00:51] falls asleep +[1518-08-25 00:02] Guard #3011 begins shift +[1518-10-29 00:52] wakes up +[1518-04-03 00:50] wakes up +[1518-04-16 00:43] falls asleep +[1518-11-06 00:28] falls asleep +[1518-04-10 00:05] falls asleep +[1518-06-19 00:15] wakes up +[1518-04-14 00:06] wakes up +[1518-06-27 00:34] wakes up +[1518-05-27 00:52] wakes up +[1518-10-05 00:59] wakes up +[1518-09-19 00:58] wakes up +[1518-05-31 00:11] wakes up +[1518-09-14 00:59] wakes up +[1518-10-28 00:35] falls asleep +[1518-08-11 00:04] Guard #1163 begins shift +[1518-08-29 00:04] Guard #881 begins shift +[1518-09-25 00:22] falls asleep +[1518-06-30 00:04] Guard #1657 begins shift +[1518-05-04 00:56] wakes up +[1518-11-07 00:13] wakes up +[1518-06-30 00:19] falls asleep +[1518-08-22 00:09] wakes up +[1518-08-18 00:55] wakes up +[1518-05-28 00:46] wakes up +[1518-09-04 00:10] falls asleep +[1518-08-30 00:43] wakes up +[1518-03-11 00:32] wakes up +[1518-04-27 00:00] Guard #743 begins shift +[1518-10-20 00:26] wakes up +[1518-05-20 00:00] Guard #743 begins shift +[1518-04-03 23:59] Guard #3011 begins shift +[1518-07-29 00:59] wakes up +[1518-07-17 00:10] wakes up +[1518-04-07 00:04] Guard #2843 begins shift +[1518-07-15 00:52] wakes up +[1518-11-22 00:19] falls asleep +[1518-04-23 00:48] wakes up +[1518-07-19 00:52] wakes up +[1518-04-07 23:57] Guard #1163 begins shift +[1518-07-08 00:01] Guard #1993 begins shift +[1518-07-23 00:46] wakes up +[1518-07-21 00:01] Guard #3119 begins shift +[1518-03-16 00:03] Guard #3083 begins shift +[1518-03-28 00:56] wakes up +[1518-09-30 00:09] falls asleep +[1518-09-07 00:02] Guard #2017 begins shift +[1518-07-10 00:01] Guard #1993 begins shift +[1518-10-15 00:53] wakes up +[1518-10-08 00:18] falls asleep +[1518-06-26 00:54] wakes up +[1518-03-12 00:36] falls asleep +[1518-03-16 00:06] falls asleep +[1518-08-06 00:47] wakes up +[1518-10-22 00:29] wakes up +[1518-09-02 00:58] wakes up +[1518-07-18 00:12] falls asleep +[1518-09-19 23:58] Guard #1013 begins shift +[1518-08-31 00:10] falls asleep +[1518-03-24 00:18] falls asleep +[1518-04-18 00:30] wakes up +[1518-11-09 00:30] falls asleep +[1518-05-21 00:38] falls asleep +[1518-10-29 00:23] wakes up +[1518-10-23 00:00] Guard #2027 begins shift +[1518-10-09 00:09] falls asleep +[1518-09-11 00:53] falls asleep +[1518-07-04 00:32] falls asleep +[1518-07-31 00:32] falls asleep +[1518-09-01 00:58] wakes up +[1518-07-24 00:50] wakes up +[1518-07-26 00:49] falls asleep +[1518-11-18 00:15] falls asleep +[1518-04-13 00:31] falls asleep +[1518-09-03 00:22] wakes up +[1518-08-30 23:58] Guard #3361 begins shift +[1518-04-30 00:52] wakes up +[1518-06-15 00:56] falls asleep +[1518-07-02 00:56] falls asleep +[1518-04-19 23:56] Guard #1657 begins shift +[1518-10-09 00:03] Guard #1657 begins shift +[1518-10-07 00:02] Guard #1163 begins shift +[1518-05-24 00:29] falls asleep +[1518-05-23 00:06] falls asleep +[1518-07-10 23:58] Guard #1993 begins shift +[1518-07-03 00:00] Guard #743 begins shift +[1518-06-14 00:54] falls asleep +[1518-09-19 00:39] falls asleep +[1518-07-19 00:01] Guard #2017 begins shift +[1518-11-11 00:18] falls asleep +[1518-04-17 00:02] Guard #1013 begins shift +[1518-05-02 00:56] wakes up +[1518-08-29 00:55] falls asleep +[1518-11-17 00:11] wakes up +[1518-04-02 00:28] falls asleep +[1518-04-28 23:57] Guard #3083 begins shift +[1518-07-28 00:28] wakes up +[1518-09-22 00:47] wakes up +[1518-03-20 00:00] Guard #1657 begins shift +[1518-07-20 00:25] wakes up +[1518-09-06 00:52] wakes up +[1518-10-18 00:38] wakes up +[1518-07-24 00:25] falls asleep +[1518-11-07 00:02] Guard #149 begins shift +[1518-08-15 00:52] falls asleep +[1518-10-20 00:12] falls asleep +[1518-04-09 00:56] wakes up +[1518-09-26 00:18] wakes up +[1518-09-06 00:02] falls asleep +[1518-03-14 00:03] Guard #149 begins shift +[1518-06-06 00:38] falls asleep +[1518-11-13 00:44] falls asleep +[1518-10-23 23:57] Guard #1153 begins shift +[1518-10-28 00:50] falls asleep +[1518-05-14 00:57] wakes up +[1518-09-13 00:36] falls asleep +[1518-09-25 00:42] wakes up +[1518-11-22 00:51] wakes up +[1518-05-09 00:35] wakes up +[1518-10-31 23:59] Guard #2927 begins shift +[1518-11-14 00:26] wakes up +[1518-07-27 00:33] falls asleep +[1518-11-02 00:55] wakes up +[1518-04-08 23:58] Guard #3119 begins shift +[1518-11-16 00:08] falls asleep +[1518-09-30 00:37] falls asleep +[1518-04-10 00:59] wakes up +[1518-10-15 00:10] falls asleep +[1518-08-02 00:58] wakes up +[1518-07-05 00:59] wakes up +[1518-05-05 00:45] falls asleep +[1518-04-06 00:10] falls asleep +[1518-10-18 00:11] falls asleep +[1518-07-12 00:00] Guard #149 begins shift +[1518-06-24 00:40] wakes up +[1518-09-05 00:28] wakes up +[1518-03-18 00:38] wakes up +[1518-10-18 00:36] falls asleep +[1518-11-16 00:19] wakes up +[1518-08-05 00:06] falls asleep +[1518-04-26 00:00] Guard #3083 begins shift +[1518-03-22 00:52] wakes up +[1518-10-21 00:23] falls asleep +[1518-04-02 00:47] falls asleep +[1518-04-20 00:41] wakes up +[1518-11-19 23:57] Guard #1013 begins shift +[1518-09-26 00:58] wakes up +[1518-06-26 00:00] Guard #2927 begins shift +[1518-09-01 00:01] Guard #1657 begins shift +[1518-10-22 00:44] wakes up +[1518-11-20 00:50] falls asleep +[1518-10-25 00:41] wakes up +[1518-11-02 00:12] falls asleep +[1518-06-22 00:28] wakes up +[1518-11-04 00:39] wakes up +[1518-05-27 00:04] Guard #653 begins shift +[1518-07-24 00:46] falls asleep +[1518-11-14 00:08] falls asleep +[1518-03-19 00:40] wakes up +[1518-09-03 00:50] wakes up +[1518-07-16 00:59] wakes up +[1518-11-12 00:45] wakes up +[1518-10-11 00:17] falls asleep +[1518-10-30 00:40] wakes up +[1518-08-03 00:00] falls asleep +[1518-03-18 00:46] wakes up +[1518-08-06 00:44] falls asleep +[1518-10-11 00:50] wakes up +[1518-05-21 00:57] wakes up +[1518-09-01 00:43] wakes up +[1518-09-11 00:00] Guard #3011 begins shift +[1518-09-13 00:55] wakes up +[1518-10-27 00:04] Guard #149 begins shift +[1518-05-02 00:03] Guard #149 begins shift +[1518-09-14 00:00] Guard #3119 begins shift +[1518-07-08 00:14] falls asleep +[1518-06-02 00:28] falls asleep +[1518-03-19 00:57] wakes up +[1518-08-13 00:22] wakes up +[1518-05-01 00:04] Guard #653 begins shift +[1518-06-19 00:23] falls asleep +[1518-11-18 00:02] Guard #3011 begins shift +[1518-11-13 00:17] falls asleep +[1518-07-22 00:50] falls asleep +[1518-04-15 00:55] falls asleep +[1518-07-02 00:58] wakes up +[1518-03-28 00:28] falls asleep +[1518-07-01 00:50] falls asleep +[1518-05-31 00:35] falls asleep +[1518-05-13 00:27] wakes up +[1518-10-17 00:05] falls asleep +[1518-06-15 00:57] wakes up +[1518-11-10 00:45] wakes up +[1518-04-04 00:18] falls asleep +[1518-09-20 23:57] Guard #743 begins shift +[1518-10-29 00:11] falls asleep +[1518-05-01 00:25] falls asleep +[1518-11-22 00:40] wakes up +[1518-11-13 00:02] falls asleep +[1518-09-11 00:50] wakes up +[1518-09-12 23:56] Guard #653 begins shift +[1518-07-11 00:38] wakes up +[1518-03-22 23:59] Guard #659 begins shift +[1518-04-09 00:18] falls asleep +[1518-08-23 23:53] Guard #2927 begins shift +[1518-07-02 00:04] Guard #1993 begins shift +[1518-08-21 00:00] Guard #1993 begins shift +[1518-10-05 00:53] falls asleep +[1518-03-22 00:14] falls asleep +[1518-09-06 00:15] wakes up +[1518-09-24 00:57] falls asleep +[1518-08-14 00:03] falls asleep +[1518-05-25 00:41] falls asleep +[1518-04-23 00:28] wakes up +[1518-04-12 00:45] wakes up +[1518-05-10 00:14] falls asleep +[1518-03-26 23:54] Guard #3023 begins shift +[1518-05-11 00:54] wakes up +[1518-11-05 00:29] falls asleep +[1518-10-03 00:34] wakes up +[1518-04-09 23:50] Guard #653 begins shift +[1518-04-28 00:22] wakes up +[1518-07-07 00:08] falls asleep +[1518-03-28 00:01] Guard #2927 begins shift +[1518-07-05 23:58] Guard #1153 begins shift +[1518-11-23 00:37] falls asleep +[1518-09-05 00:59] wakes up +[1518-04-10 00:56] falls asleep +[1518-11-18 00:44] falls asleep +[1518-10-08 00:39] falls asleep +[1518-09-10 00:02] Guard #2017 begins shift +[1518-03-19 00:02] falls asleep +[1518-04-01 00:07] falls asleep +[1518-10-05 23:57] Guard #3023 begins shift +[1518-11-01 00:46] falls asleep +[1518-07-03 00:34] falls asleep +[1518-10-23 00:18] falls asleep +[1518-07-07 00:46] wakes up +[1518-07-26 00:07] falls asleep +[1518-08-27 00:04] Guard #3011 begins shift +[1518-04-08 00:17] falls asleep +[1518-05-22 00:56] wakes up +[1518-10-22 00:36] falls asleep +[1518-04-14 00:02] falls asleep +[1518-07-25 00:37] wakes up +[1518-08-03 23:50] Guard #2843 begins shift +[1518-03-31 00:56] wakes up +[1518-07-04 00:00] Guard #3023 begins shift +[1518-11-16 00:00] Guard #2027 begins shift +[1518-03-27 00:01] falls asleep +[1518-09-01 00:57] falls asleep +[1518-11-22 00:49] falls asleep +[1518-07-05 00:38] falls asleep +[1518-05-27 00:29] falls asleep +[1518-08-12 00:32] falls asleep +[1518-05-22 00:34] falls asleep +[1518-05-11 00:21] falls asleep +[1518-06-19 23:52] Guard #2927 begins shift +[1518-04-23 00:26] falls asleep +[1518-03-11 23:56] Guard #1993 begins shift +[1518-08-16 00:14] falls asleep +[1518-10-30 00:56] wakes up +[1518-03-18 00:43] falls asleep +[1518-11-03 23:58] Guard #881 begins shift +[1518-03-14 00:39] wakes up +[1518-09-12 00:57] wakes up +[1518-11-17 00:47] falls asleep +[1518-04-16 00:38] wakes up +[1518-09-23 00:54] falls asleep +[1518-08-20 00:39] wakes up +[1518-06-08 00:25] falls asleep +[1518-03-20 00:10] falls asleep +[1518-07-01 00:21] falls asleep +[1518-03-24 00:44] wakes up +[1518-07-17 00:59] wakes up +[1518-06-23 00:38] wakes up +[1518-04-02 00:02] Guard #2857 begins shift +[1518-07-15 00:51] falls asleep +[1518-09-11 23:52] Guard #1163 begins shift +[1518-04-26 00:40] falls asleep +[1518-03-29 00:20] falls asleep +[1518-07-30 00:00] Guard #3361 begins shift +[1518-06-05 00:49] wakes up +[1518-10-26 00:00] falls asleep +[1518-07-03 00:51] wakes up +[1518-10-12 00:46] falls asleep +[1518-10-21 00:57] wakes up +[1518-07-25 00:02] falls asleep +[1518-04-15 23:56] Guard #3119 begins shift +[1518-10-17 00:19] wakes up +[1518-06-05 00:45] falls asleep +[1518-07-28 00:17] falls asleep +[1518-06-22 00:43] falls asleep +[1518-07-25 00:24] wakes up +[1518-09-20 00:40] falls asleep +[1518-07-17 00:00] Guard #743 begins shift +[1518-03-16 23:59] Guard #2017 begins shift +[1518-09-05 00:36] falls asleep +[1518-08-11 00:14] falls asleep +[1518-04-12 00:48] falls asleep +[1518-05-20 00:23] falls asleep +[1518-04-11 00:33] falls asleep +[1518-09-08 23:58] Guard #1163 begins shift +[1518-09-09 00:09] falls asleep +[1518-04-02 00:40] wakes up +[1518-06-11 00:54] wakes up +[1518-09-05 23:50] Guard #2017 begins shift +[1518-11-22 00:04] falls asleep +[1518-04-29 00:19] wakes up +[1518-05-19 00:57] wakes up +[1518-05-26 00:34] wakes up +[1518-05-17 00:10] falls asleep +[1518-04-01 00:54] wakes up +[1518-04-18 00:00] Guard #3083 begins shift +[1518-04-25 00:59] wakes up +[1518-06-22 00:02] Guard #2027 begins shift +[1518-08-20 00:34] falls asleep +[1518-05-25 00:00] Guard #3023 begins shift +[1518-07-20 00:03] Guard #3011 begins shift +[1518-03-27 00:59] wakes up +[1518-06-05 00:42] wakes up +[1518-08-19 00:19] falls asleep +[1518-11-23 00:32] wakes up +[1518-04-12 00:26] falls asleep +[1518-10-10 00:39] falls asleep +[1518-11-15 00:51] wakes up +[1518-09-27 00:38] wakes up +[1518-10-12 23:53] Guard #653 begins shift +[1518-05-03 00:25] falls asleep +[1518-10-09 00:49] wakes up +[1518-11-08 00:30] falls asleep +[1518-05-26 00:50] falls asleep +[1518-11-13 00:41] wakes up +[1518-09-30 00:41] wakes up +[1518-04-14 00:22] falls asleep +[1518-05-04 00:54] falls asleep +[1518-05-05 00:03] Guard #2027 begins shift +[1518-04-05 00:44] wakes up +[1518-07-24 00:42] wakes up +[1518-06-07 00:08] wakes up +[1518-10-02 00:00] falls asleep +[1518-06-12 00:16] falls asleep +[1518-04-10 00:34] wakes up +[1518-07-13 00:02] Guard #2719 begins shift +[1518-04-21 00:03] Guard #881 begins shift +[1518-10-11 00:04] Guard #2927 begins shift +[1518-06-02 23:56] Guard #3011 begins shift +[1518-03-12 00:38] wakes up +[1518-06-26 23:48] Guard #3023 begins shift +[1518-05-16 00:07] falls asleep +[1518-04-28 00:48] falls asleep +[1518-05-22 00:02] Guard #881 begins shift +[1518-03-18 23:48] Guard #3089 begins shift +[1518-08-08 00:57] wakes up +[1518-09-21 00:21] wakes up +[1518-04-29 23:58] Guard #2843 begins shift +[1518-03-17 00:52] wakes up +[1518-06-10 00:00] Guard #563 begins shift +[1518-09-28 00:57] wakes up +[1518-05-16 00:22] wakes up +[1518-04-03 00:13] falls asleep +[1518-10-04 00:44] wakes up +[1518-06-27 00:01] falls asleep +[1518-06-26 00:49] wakes up +[1518-05-29 00:28] falls asleep +[1518-06-29 00:56] wakes up +[1518-11-20 00:21] falls asleep +[1518-10-03 00:07] falls asleep +[1518-05-16 00:00] Guard #1993 begins shift +[1518-09-06 00:34] falls asleep +[1518-05-17 00:38] falls asleep +[1518-07-28 23:56] Guard #2857 begins shift +[1518-06-13 00:54] wakes up +[1518-06-01 00:30] falls asleep +[1518-11-09 00:57] wakes up +[1518-11-22 00:06] wakes up +[1518-10-04 00:09] falls asleep +[1518-10-19 00:00] Guard #3023 begins shift +[1518-11-09 23:58] Guard #881 begins shift +[1518-10-28 00:02] Guard #2719 begins shift +[1518-04-13 00:45] wakes up +[1518-05-15 00:35] falls asleep +[1518-10-12 00:00] Guard #3119 begins shift +[1518-04-07 00:46] falls asleep +[1518-03-29 00:03] Guard #2027 begins shift +[1518-03-24 00:43] falls asleep +[1518-04-26 00:49] wakes up +[1518-09-26 00:15] falls asleep +[1518-08-24 00:40] wakes up +[1518-04-14 23:54] Guard #2857 begins shift +[1518-03-20 00:32] wakes up +[1518-10-13 00:50] falls asleep +[1518-11-12 23:48] Guard #3119 begins shift +[1518-07-07 00:56] falls asleep +[1518-10-21 00:03] Guard #3023 begins shift +[1518-08-15 00:53] wakes up +[1518-05-07 00:55] wakes up +[1518-08-08 00:53] falls asleep +[1518-08-02 00:49] falls asleep +[1518-11-18 00:56] wakes up +[1518-10-30 00:50] falls asleep +[1518-11-18 00:41] wakes up +[1518-05-30 00:16] falls asleep +[1518-06-28 00:00] Guard #3011 begins shift +[1518-09-23 00:17] falls asleep +[1518-10-26 00:54] falls asleep +[1518-10-08 00:31] falls asleep +[1518-06-04 23:59] Guard #149 begins shift +[1518-09-07 00:08] falls asleep +[1518-06-03 23:52] Guard #1993 begins shift +[1518-07-21 00:14] falls asleep +[1518-06-13 00:00] Guard #2927 begins shift +[1518-07-24 23:48] Guard #149 begins shift +[1518-10-08 00:25] wakes up +[1518-10-03 00:03] Guard #743 begins shift +[1518-05-09 23:57] Guard #2027 begins shift +[1518-06-21 00:49] wakes up +[1518-07-13 00:34] falls asleep +[1518-03-26 00:13] falls asleep +[1518-05-12 00:28] wakes up +[1518-09-27 00:42] falls asleep +[1518-05-29 00:04] Guard #2719 begins shift +[1518-05-13 23:56] Guard #3011 begins shift +[1518-10-28 00:56] wakes up +[1518-07-02 00:37] wakes up +[1518-06-17 00:32] falls asleep +[1518-05-13 00:36] falls asleep +[1518-04-25 00:46] falls asleep +[1518-06-07 00:01] falls asleep +[1518-10-13 00:59] wakes up +[1518-11-09 00:02] Guard #3011 begins shift +[1518-09-26 00:57] falls asleep +[1518-09-11 00:54] wakes up +[1518-05-14 00:29] falls asleep +[1518-08-02 00:29] falls asleep +[1518-08-24 00:00] falls asleep +[1518-11-13 00:13] wakes up +[1518-05-05 00:56] wakes up +[1518-06-22 23:54] Guard #2843 begins shift +[1518-08-07 00:48] wakes up +[1518-11-19 00:00] Guard #659 begins shift +[1518-07-22 00:34] wakes up +[1518-03-29 00:54] wakes up +[1518-10-07 00:30] falls asleep +[1518-11-21 23:51] Guard #1013 begins shift +[1518-10-18 00:03] Guard #2027 begins shift +[1518-03-25 00:56] wakes up +[1518-07-16 00:38] falls asleep +[1518-06-12 00:59] wakes up +[1518-10-14 00:00] Guard #2027 begins shift +[1518-05-11 00:52] falls asleep [1518-06-15 00:49] wakes up \ No newline at end of file diff --git a/2018/5thDay/.vscode/settings.json b/2018/5thDay/.vscode/settings.json index e2c18d1..bad000f 100644 --- a/2018/5thDay/.vscode/settings.json +++ b/2018/5thDay/.vscode/settings.json @@ -1,5 +1,5 @@ -{ - "files.associations": { - "ostream": "cpp" - } +{ + "files.associations": { + "ostream": "cpp" + } } \ No newline at end of file diff --git a/2018/5thDay/challenge1/challenge.txt b/2018/5thDay/challenge1/challenge.txt index 622dc48..7b923b9 100644 --- a/2018/5thDay/challenge1/challenge.txt +++ b/2018/5thDay/challenge1/challenge.txt @@ -1,22 +1,22 @@ ---- Day 5: Alchemical Reduction --- -You've managed to sneak in to the prototype suit manufacturing lab. The Elves are making decent progress, but are still struggling with the suit's size reduction capabilities. - -While the very latest in 1518 alchemical technology might have solved their problem eventually, you can do better. You scan the chemical composition of the suit's material and discover that it is formed by extremely long polymers (one of which is available as your puzzle input). - -The polymer is formed by smaller units which, when triggered, react with each other such that two adjacent units of the same type and opposite polarity are destroyed. Units' types are represented by letters; units' polarity is represented by capitalization. For instance, r and R are units with the same type but opposite polarity, whereas r and s are entirely different types and do not react. - -For example: - -In aA, a and A react, leaving nothing behind. -In abBA, bB destroys itself, leaving aA. As above, this then destroys itself, leaving nothing. -In abAB, no two adjacent units are of the same type, and so nothing happens. -In aabAAB, even though aa and AA are of the same type, their polarities match, and so nothing happens. -Now, consider a larger example, dabAcCaCBAcCcaDA: - -dabAcCaCBAcCcaDA The first 'cC' is removed. -dabAaCBAcCcaDA This creates 'Aa', which is removed. -dabCBAcCcaDA Either 'cC' or 'Cc' are removed (the result is the same). -dabCBAcaDA No further actions can be taken. -After all possible reactions, the resulting polymer contains 10 units. - +--- Day 5: Alchemical Reduction --- +You've managed to sneak in to the prototype suit manufacturing lab. The Elves are making decent progress, but are still struggling with the suit's size reduction capabilities. + +While the very latest in 1518 alchemical technology might have solved their problem eventually, you can do better. You scan the chemical composition of the suit's material and discover that it is formed by extremely long polymers (one of which is available as your puzzle input). + +The polymer is formed by smaller units which, when triggered, react with each other such that two adjacent units of the same type and opposite polarity are destroyed. Units' types are represented by letters; units' polarity is represented by capitalization. For instance, r and R are units with the same type but opposite polarity, whereas r and s are entirely different types and do not react. + +For example: + +In aA, a and A react, leaving nothing behind. +In abBA, bB destroys itself, leaving aA. As above, this then destroys itself, leaving nothing. +In abAB, no two adjacent units are of the same type, and so nothing happens. +In aabAAB, even though aa and AA are of the same type, their polarities match, and so nothing happens. +Now, consider a larger example, dabAcCaCBAcCcaDA: + +dabAcCaCBAcCcaDA The first 'cC' is removed. +dabAaCBAcCcaDA This creates 'Aa', which is removed. +dabCBAcCcaDA Either 'cC' or 'Cc' are removed (the result is the same). +dabCBAcaDA No further actions can be taken. +After all possible reactions, the resulting polymer contains 10 units. + How many units remain after fully reacting the polymer you scanned? (Note: in this puzzle and others, the input is large; if you copy/paste your input, make sure you get the whole thing.) \ No newline at end of file diff --git a/2018/5thDay/challenge1/index.js b/2018/5thDay/challenge1/index.js index 938d0e3..ef34aca 100644 --- a/2018/5thDay/challenge1/index.js +++ b/2018/5thDay/challenge1/index.js @@ -1,5 +1,5 @@ -const day4 = require('./istolethisfromsomeone'); -const fs = require('fs'); - -console.log('Part 1: ' + day4.part1(fs.readFileSync('input.txt').toString())); -console.log('Part 2: ' + day4.part2(fs.readFileSync('input.txt').toString())); +const day4 = require('./istolethisfromsomeone'); +const fs = require('fs'); + +console.log('Part 1: ' + day4.part1(fs.readFileSync('input.txt').toString())); +console.log('Part 2: ' + day4.part2(fs.readFileSync('input.txt').toString())); diff --git a/2018/5thDay/challenge1/input.txt b/2018/5thDay/challenge1/input.txt index ab145ca..bf67ae7 100644 --- a/2018/5thDay/challenge1/input.txt +++ b/2018/5thDay/challenge1/input.txt @@ -1 +1 @@ -kLltgGTKFjdDpPkKcCJjJhHfmMAjJasSFfHEesYMmTtrRBjJmcCMbDdmMyOoUuGLrRlJeEMmxtTXjKzRroOmpjJqVvQPMZAXoOxeEZtTzLYyqQnNlMmafFLlRrkEeNkKtTngGlOoLXxtTLDdBblRCcqQrFfLQAaqeEZMgGbBOoFfyTtIizZuUsSYmbzTiItQqOouUGgZBCcsSHhxXIrOoRizlUuZjJefFCcEgGMmMmRrXlLyYcCxvVCcyYcCZhHzyYWwcXxlLCeECcOCcozHnYyNftTJjFSsrRTtqQSFfFfYxXysSsrMKkmeeEEdDRHhNCcgGnQqiIqQLlkKbPpBQOlDdLoqhjJtzZfFiIVvTMJjSgGsmyGPpgUhHuoIzZiOYkKPpUuqBbQcHhCTiZrRLJEkKuUejlTNiInNntdDxXzAauUOLkKloIdDzuUjJvpPViIbBiOGgoIJnNFfYyjbBZWwSsdDsSUuBUCnXxNgGcKJjkCcuUWwiIcCCcDdsSDUumMdSSuUPpyaUuqmMQAYkFfnNKMmsCgGVvyYJjcnNlLVeEvEesQqvVEMmeWMmwBbyvVYUuavJjVTtAJCczcCZgGcYyCjJEejuupPUStTsPphHgGafFAvVGgzWwAafiIygGUupsSPYfFFLlzrRZFaeEAWjJTXWwxFftcCjJfFkYyKwuUJKkfFBbMnNmIPlLZyYzzZpijnlLwWNLlfGUuTtglHFvVfHhhYywbBvVVLlsSvKeEoOkZzYyZzWGxXgzZBUgGaAvVuCwWNncjJbDdQqGgAatTFAaftLsLNnuJjUlfFSPpmMfFFflmlLMThFfXxHUuEcCrRXxezZrnNRsSWwWwZUuzFfTtiIaAvaOoAVGPpRdDrgWdDtSsGgaAfFopPhHVvOksBbSKOntTLlNjJKkhHGEeGgjtTaMyYmPpAJuUHhZGgzvVDdmMNnFCcfgzZgxXRHhrGzZOovVcLlCUuoCDdchHOuUsSvVNAanoTcCwUuchVIivHFcCuUHzZFfCcTCcthykKYXxUuzZOHhoIsSiVvDFXxIMmifmdDMdIbBNReEgGrrFRrcCfkKRnNnNgGnoOxyYRrXAjSsJoOgSsGgGAawWazyvrRtTVYvVLfFtEeSsiIHhiIqQTlzCcdDhHuUuUuUZRrZVDdWwQJAajqvHGoONnQqWyYLeENWcCwpPybByvxXVnNgGYYOoQBbqifFiIlLgGImsSIiMGgnjJVvGNEenIigeEnNvGgXgGhHKkXIiEhHvVeFfDdxxxXzGgZpCPpcXxCcGgRrliILZzBbCqQGgbBZOoYyiIhHUYyuLuUlGZzgzcPpPeRrEOoRryYbwWBYyrRlLbioOIeEBiZzaAaANsCcjJVvSEkAaEMaAAalCDdcuNnnpPWwNkaADdKCfJjFcpjJIiPWAGgawWAaVZzzlLXxZHhvxRrdcCRrYsSyjJmBbMufFdDWwLfFYyvVlInNpQgGZzqPyYifGggGFSvVTorROtEeDdajJJjNnAjBbiINncCuhHUxXJsHZzrROodCcDnNgQqGtBbThRhHrGBMmbrxKtTkswWSJntTNgGOHhouwWUzZjzugGdDzKkrKkRZtTgGhHUeEZerRmMFfZvVvVzJjdDWwjoOvVJEhHQqLljnNtXyYLlENnbBeyYTQqtmIiHKkhMMmpuQKaAkqbyYckMsSmuUMmxpPXOkKwWoQqYdrRvVDgGNnJOoVvkCcWwKXSuUdDsgGnNzZwWoOPpFzhEetFfvsSVdDMdBbtTDJjmiICTtcTITtpPVvcCiZwWFfnNlPpLFfCulLUcfFQwWwDdXxWKqlLaCcZMmzGgAUukzZRGgzZcCJjsSyWIioOwYCmMcrjFRrSsdDjPzZpJpPfJqQZzKRUZziIurcCsSaAeTttrRTEjJlOoLYmMuUPpZzyzWwZGGsSgvVxUuTyDdYtpPoOXeEMOomSsZLKsSklnNbAlLCcJiIjaBmMoOOodDHbRrocCOoOaiIABhLoBbOXxVvlgbLlBGtNnTExXWfFnNwbBecCELlhHkqjJVvqQQKezZxXzZUuaAzHhcCWwtvVhkKHQoOaAYbByXxMmdQqDdbBJjDXxjwWJlLxXhHiIALAKOokJjoOalZzcCvVIiawWKcCgGWUYHhyvVaNbIiBnAoOrRuVsSvbBJjdfFuYyFfUoOzWwjaAlLYyhHJZqQJoOjnNkKeRFfriTtIHhEVtTKZzhHEenNrRRrczZbBiIIieyYEecCEGgjJJjQSSssqCbBnNTtqQEEFFffkKPOHNnhDdofpPrRNnFfbBYgGxXytKaAkTVjPpqsShNnrRiIHJjQJMeQsSqEGqQwWgSsdDLlWwaAnNTtbzZBOoruVvRCcqQOGgoMyYmrjDdvVfvVFJoKkOwWeEFfeEzZCgGcuUtIiIiFfsSgGyYTDjgGzZPHhnNLlGgePpVvEHhpJdhUuBbJjHqQUqVpPvETsStSsZSszQSMmWwOmMnNhaAHDWwNneESsiYyIToOtddbieFfEIAJjhHcQvVqCjJRraBDLlIiJieEIjUuaiIAIiuUQqDdTtWwuUeTKktDddDKktTjJdDELXxlckKCBbwbaRrABSsWJthxXHTsSGgSXxsUzZBDaApPdbaAyYUsVvbdDBzZTtTtjyYJsSNmMVvTtnmMQSFfsqRrOouvILlitTaAKKkkYyeENnxwWXVJjoOuUEemMgGSTtsnNzPpNYynbBZGaZpPRrgGzZTtTtKkzqUuPpyYQbBTtZsSzGgAftTpPxwWAaXaFfAPptTqQjRrJCcFEekKyYDLldkzZKfFNjOoJpPEeFfpPnqQWpPMmUUnNuufCXxcZzjibBgGIJdDFvLmMAXxeEaFfmMHXXxxepPRrwsSWTtAaRTtrVvtSsQqTPoOIihPpHKkpYQVvqYsSVvQJjqFfqwWQyGgfFUzpPZyNndDwWtTiIDdYOoyYzZJtRryYxrRmMHhXlDdyYzSsZxgGXLiQqbuUBwWCccrRzZkwWfFWBDdboljJcChHVvLGgMmaAcCwWJMmaMMmmjzkKcYyJmMjWwmMbgGgGOxQqXnNMmoHhBXHhxCVvCmMNIiRidDIrXVvxeEtTtTyYnEeKkuUmJjmMOoGgiIMlgLlQqEMmexXGLclLyYfFQEeHhXgvlFfLdDwWnNMmvzZWCcgGwMmWODYydiIowvVbPpBEeIAFfnNMVvmadBbDiLlCyYaqvVQIiyYAqQtTiIcaAlLQRuUrhHYVvTUucCtyPpbBcmCcFfZzMpNFzCcUuaARrUqvVQuSsZwWcCsScrRCfrRVGgveYyESXxsMmWWwWlLIiwCtNnSsBbjJXxSsDSslLdmVxsSchHCXjlwWOQuUqXhHSssVAgGalLvSMAPpKkCcLlRramdnQqNCiIVvcgzZNnFDdkKMmzZfBbBbGuUmXukKUxIiaAGgAaWwcivrRVjJrjJQCCcLlEAWwaecaFfAtTWwqjNnLlJzZMsSmzltIiALlhHUuoGgOaZziJKkYyqQjfFgGCcIoIidDTtuhHiIZzlYyuMLlmUSsuvVbaIsrKmWwMkXCcOoxoOXCcoONngGVvTtSWRrkKmclLCNnxjJXMHiIfFkhHKerRMOomYTtyEhIiwosLgGEdDZzEeqQTtAaUUuurRcCMVvmepPzjtTvVJiIBjJyYbgdDSsGrRpPtgMmGTkJjhtTraARBbHhTzYyOlxOgGoXfFxXMmfFdVuUiIxPpKjJkKkWQqwtTkKZZznchHMqQmzZAFeEGgagGAfdDTbaDdGbBgJjcCHhABxXULegZzGEliILKkZzmMbBlOoJjIiubBamNnMWwVvxXhZpPuJjUCcPpzaPWwuAaUxXucjJCIgbrRBvVGgVnaASXxsNAaHhNnIiiIHBblLCtTuURKkCcGgAsSIxXVvimMueEbQqNvVnBifFILRjJUukKrZlLzfhHFWwVrRlLvxXuUMUuuUKiIkmZmEeMaAcClLETtdSlLxAaXsNxGzZDSIvRrVpPYyxrFfPpGXiItTzZxgKkKkoOJjmaAqBbNKJjkZnNoOjJnNzdDJjKHuUTVvLlthkMmMlrRLmmMQepYyIiZzvPpwAadDZzQqwWGwWgFjJfvVbpgaAGNVvndmMerQqIiREDzZFXxfOfFoJxXLljeESUuswWUuPNsSHhGgsSfeEFTiIKkOoRkKrGkpPnlwknNKxXkKAajEeJpeEESserDdEehHAPcCprmQquqQUMvVIxXiHhRXxEeaAajusSXxzZXxbRrnPpHCcNZUmMXxJjLlpPVoOLlhHbBIiGgvuGgcCcCRRrsBbLlMmWwWwvkHhKVSIhHuuICcpPiEeYjJcCZzDFfdynVvcCNLlEesSntTNHhpMxXiIwTtARraeEWLLllJWwhHQEgtTGebBPdWkHhKnNyYuUwDpsSnNwWHhmAaMHYGgVvSsyJjoOhgvVubAjgFTtFINVvAMmatTGgSsnwWpPGyiAZzeEditLlWwyfsSFSIisvVgGAyoOYyYkXxjciLldDIbBSsfFgGumMUxXZHhEetcCcCTzJiIYaveEtTVAIvqQfqbBFffFeEQEeFgtQKkhHfFAalFyYroOoORuUfAaXzZGgxfFlTtfFLuUurRUeExXaATxXzZIIVvYyCckpQqRrFfFfJKkINnIiWwijRrJJxjJWwXCGguAajJUlLcLlkKhzgGXxlRrxXXCcYAaqQtTyxZzLRrhDdHXxJjiHhINnaAgIioOypPYnNuULlkxXkKrUuhHRIiBbxLjJlLlXKvVLlSsFfsSpPCcfBbnzZSsAaUjJJjYyuNnNBcCbaArwWRLlUuzYyoTtEeoDdOoOKWulMmLUkKIiOPQqxXUjvKkVkrcCRKFlLruzZDdUPOopxgGWwvXxVvqQxXxpPXVsBbSXWxyYXJbmPpMBjsAaLYaQqtacCATAhYNnNMmdsSwWsWwseDdEIiJsSfFRrjzZdDKkbEedDJjcCSsGxewWEXqTpPtQIifFTeEtzZgAuKkUaSDWwdsYYyjhHzZJdDyTxXNtTeEIilLklLdDKnYyWaAdYhHaApyYPiIyrytTcCYQqpPPXxMmllLLpBbpPCKkcyHhFDdlLHhnbxXxXBNlKWwkKPKkzEexTtXZJsGgLOoJjyYIiTQqqQOotveExhHXPpGgVTzZrbBsSgauNnjdDIYyPpuUiLtAaCcTWwnNlrRwMmWZzYPpyJrRTtZzqIiQNOoDdmFUsqpMmPHhQSuSsvqZjaaAAeEJdDuUunRDdDHhseEdDMUrRuiImlfeEFSCcsWwYCPpcNnyQMmOoEehEiVpPnNlhHWwLRrwoOWpPGaAgVvXphHPlLhHkaAKxsSNnrgGzZYyRkKUuXfpPFoEtTeOcrRCMqXwWhHLaAAaFfsSdPpDHhKkLlSsOvVXGsSgxouUogUuPpQqbBDdXxcizZICGdqBbQqQJRrgGmMjbsSkKQqBeVvTsSgGtEqQCTtFfjJcqQMmAaRrbBkKbzZBqgFfMBuUWwYyMaAmrxXWjVoOvKwWkBlLbAatXxYdDRxXryOoeYyEOoDtTVvyYvTepPEtVjlLJXxQqvVHheEFZzfdDWzMmgsSGZwSlgGLwWzxrRXsSAaAabOooOQhHqdDXxPaApIBbdDimMrRdafFPpAEeOozZAaVVvvijQqsSJIDFfqqQYOoyQBTnRjJxTtXjJRrCIicKkBbZBbzrNaAIisViIsSczZCdDEevSJjeAaEtBPzZLlYyGfFJjAaVvQBzZzJPpPpaQquUwWiISdDdDsBbBbpLlPwZzWNZSZEvVezseGgyzxZzXFyYTtgEdDegGUCuUdfgGkKFDuUwTtqQWceEdDvVoOaGgseESRUusSUuJjhHLJjfFlGoHhoOCTtJjqIvVbkrDdEeCxXkQqKGgmbBQqCIKlKkLkiZzASOokKsShHYydWwFfhHDjJcCkKfjJFHhOWwmMvVoyYrRumMUJjkKOhAaqQHhQqHKkiIeEbBmFfYnNyMxrRnNzZBbeEcpPQqCAgPpftnNnIiNTZzuJHtTuUbBiEOoSyYzEeAaKkZpPGgzOoKkLlUsSuOoxxXyGgmwzoOHhqJSsmfyYFeVIsbBSgWPpWPpSsEQTCctbBdwWGgDMGscCSuUpSsJjaAPceEowZzWqhHbpPqiIPpQEeXUuxRiIjrkKRJDXxxXdjJbBdDmMFNnJjNeEXxnsSfiIJxXmMWwtTJeEsSGgNDdpPCctsSsSZzYFfHhuTQIiiIqhHbPpPGlEeLLllgGUuLgNnRPpEdNVvbuUBbBBbRQfFQqqrpLSsiIlQqPxGgeEXzZaAPpBbVvIiFfeEeOQlLqcCEeWiIwonJHhjAaNvXawWAvSshHdDBbdDKkOkYyKHhGwWKlYWiIwdmwVvWcjmMcJRKpzZxXdDPxLlncCNPKkpJnNjPpDdJjGgXSKkhHsNiuUInOwWeYyEgGommAaMqQMNnxXyYdDDyjrTtiuIkKiYsSyGgMmlUuLMfFSsjeEzZJmaAkKVcCvZzwWLlTYvVOXxpyYfFDGgjaAJgGWwstTrPpcCikBbgGKQgGSsNnkKcnNPfFWwxmtTjQOHtTNQqiIfUOomMnDdhHNkxoOSsDdPpSsXYyWiLlIwKbBkGLXxtLhHlAcdDCxlLXfFayAaZVVKsSVvkKkNnmMgGgGZjJfFzTtviPpIJjwWGgAoOaLHLLWwlCcZbBiIzeyYpPaAxXOYVvynNbiIGqwWsKkvVVeEkNndxivsSeEVvfFBYyFfjwWJBbSsHhjlLLwWrRuUlKkKBbpEeWwPYiIvVykdDJGVRrVvvUuQeEOoEeiIyJkKaARrfFaAzZMmOoIiAaSyYsUsSQgGgGKvjJSSsIijJZMmzZzQJjqAaKkYyNnpVvPAjJaEPLltTGgpWuUTbBnNtSssdRrDSwPpWWwXAaxwisSrSsRIeEaAoOPggGpPVeoLGglCcUuOEGrRgvgGbZzBLlaVvAzZvKkVeDdDddDEowWLlOxfFjJftTAafBbFffFFbpjWjZzuRFiIfrQwqQRvVruYykKtRauUlAUuaFfLAPzZpPWwpoUSiIsuGgfgGvVFXxnNtTLlnDdTnUuAaNCcgFTwpPiIWMzZzofFOZPpnNfFkUuKFNOTtvAvVaVpPojJvfFVnrSsRWxXsSKdDjJkHUgAaGcQqsSnirdQEeHrRhqueEJjUDTtwHhWjJaGxXgAvDdVSwWxXszZKnNSqlLlLQtVvTnpPNJjbBbBpqQPYgGrRyRrGgSshaDdJbBnAsKkhHDZkKzmMCcdOouUdyYzZWxXqPpQOowDSJGgjdYyDCTtnNiICtSZPpJjwWWwzmXhHxgGBbMqQoONjUuDdYhiINAanZLSslzKcCfFyYkfvVFeiIAHwozZOqQhlLPDdcCFfpFfpPAaehHXxGgDQqGgwWhHNIiCKIikkLlKKRrhJyYYUhHujJUKzRNeQLlqEnVvgGacCArFfWRxpNfFIZzUnNzZuiYpPMeYyDddDSuUlLsdXxlLcCLVvnyvVGgYdWaAaAwDOfFSRrbBsQqkKBblOovVSsZzKfXxeEAcKYoOykCtTabOjRrJoJjzeEAawWZwWBpQqticCITPLGSMQVXxvqIjJKkpjeEJrQveEeEVwMDMmUuNcOaAAaoCEepMmhoOHQjJmFfGkTLltWwNXxftqQlkoOpPpmDdpPMNAanIizNnNuUnNyYLlClLqgGdDgnPpNZzgnJjRRrWmMDCcdfFwZzriwWFfzZFeFfEfWwmjUuJMbMmjaAJvWwVnNkKzpPKGqGLlgwkhxXzZbBZtTzlqQNRTtALLTtllLTpnPpNoOMsSxXmRrDdFfDefLlTtHhfiIcKkWwkKCcxXsSmMOogGqFfQiIiIGgwWwWxNnhHcvPpOoVPpysSQqWHSjXWwxXxEekKRrJeEsgEUuehHBcLCYbBQqyYxcpPsSFfsRrzZzXxZyJjTtYdDXOoxwWbZzGgcCpgvKkJjDdWCAahcjMmJwWbBhHgBgGIoOEeiIibjYyaALlinNyYmMIiAnHhNVvaIzZpPYBbTJjxGguIFUuOwWofFYqkKQydDgJjGYKxXkzBbjJLluUiIqIiQeEUuZysXxSjNqQEefFoOjtTAalLnNIilzZGgCYmMxDdXsvVSeEgGQaAuUqQzZtEepaAPdDDHhyYyYZOMmtToIHhiTXxtvVzdEsJjvVWHhjzZPkKpWwWYTwWtxXyYoOcXxCKkvOjjJGguUItEemoNnOMIyYfFXdXxsSvVDxnGgEpPefFNiTtTOodHheEDHhfAZzMfFSMmvJjhrRHVdtLluYWIiVfFcCtThHAaKQcCqjpnNILNUwWuMmZFNnRruUdDfJaYyzZjJbBACcLlbBkGpPJGgukgGKNBbfFnTtiIiImMKAancCHqmMzZvVcCKGgkWwQuUqHhAadDQaoOAnNSTmKkWXxEIRQquUhqQsrGuOoULeEpPlZzgGbBBbtwWwKmMCqQdDcaAqQrjJxXWUuwDdMmdDocIcuUFfUuMmqQCSyOoYfyYwWfjkKsSYkKaAZYCqQUBbwIitPpprRbBkVVvNnUuIiOoLlAmEomXxmhHtTiIdUuTthHrRAaAvLlViIGgaODingGNIMmlLMDMmUukZzKxXrRWiRTtoOQquRrBboIzfFeqQWwUMVvmLlfFiIiINnoOlLAaixXXxHhIgKkZzVxxXXvGOoFpsTtzMjsSCckJjJXxdDtTGCZzMmAzaAZawOoWeZoOZzWMsSAYyamGgwfNnuUxXFoOWsSwsSzFfQoOAamDdMWwGsmEQqrRFfzZAxKkXeETvVxyHhYgnxBbhtyYTOUkKuOJjoJiIjJVvEHUBboOBVCcKjJqQdDkwWnMmrnNmUuMBbRLFwWftTTtgGiIElCgUPmMpMqoOQmuoOaAFUuflLnuosSyrRYKkpUuPtQqQeEPpoGgmMyYuUCzMmmTtOoxXMFBbiIfFhHfTtqceESXVZzdxXDdSIXxBNnESxXOoyADaOoNnGgKukSstTXGgUuuUNnxMtTfwiIDzkVWwvKbCcWEeEeEeSjJspPYywAaJrRjBNnQqnNpBXKuUkFrGuUydbBDbYcDeElLHzPpZveEaAVmMgpPGuUvVJnzZXPprRxJjtRquUQhvBbEdmMDeVFfYrmMYfFcBZzvVzoYyOjNuUnYyJQqZsSjClLCccSslcAPpaCCfFpPIigiILlvZzVyMmqQKkvslMKkmtcCiInNqQsQqIiqQSzNNfVvoAaOKVMpTtncCNCcBbPvVSdnlLXoOvwPIRtTtMmeRVvAariIGgeEzZSsOoEUuOoSsTLdDlrRPcVvnWyYwjgYVxXRDJjSkjJEeIaNaGguHhUnYsSyvVwWNoOiIyYqOobzZBZzXbNnBbOoPaAyYKkTSEKXreEeTtJjxcCwreEyYOpPbByYzJjZCcoyJjYAaRtTiNnIYyrbBNneEDdRraAyRGFCfFOtTOoofFcHoMxjMNnlVtTAaOkiaWwOGQqgVQqAawWgupPZzUuUPzWwDdZIScCsHhisSpoOSdUuvVexwWXKkgznQfsbmCcraUuCcAFRDuNnUdDdcCgzbRDMyYmdIiaAzZrVvotrwWhHUuFzZJbDjJhHdAlLtTuUfFagCMmcGjSViIvFfSYvVQqyITHXmMbqQaSsABbGgqRrQsSBSsNnjMmIkKVvDdZzTmzZgGmwWMyfFYpacCApProOvkMXoOxmKVtTlLSsCGgoOcSKoxXpXxFiIaAHhyWxxXXADdaZdTHQPCKkdDJBgGbgXxzHGgXWtoOTwVvpAabBHhxAvkhHeEISKQiCQqTtcoocCSssrRSgTihHIsZIzmtGgTRgWxXqVvQwHbBtFLBblfTjDdPlfcCFLWwNfFqIimesOoRSsURrQleEJjWyFfMmQJjBbVvBboBboaVvAMmOVzZnSHhVvsYyPFfeqydDaAOOostahIPpiozZOKkHQqegCcipPIGSFSLlhHpvVGaVvuUALlQqWwgRrsSqQcsQzZqIOolLsSZQqhpvqQCcFkKWwfLlLlHmfFUBKkzZJvVBbjPzZOFnNTRreMmEtSsHhqXkKxuWJjqtTFfmMrRqQQQqwdDUvLlDdmNqQnGcCrLllLUSfCcwdDWuhHmMmMAILaBbAriIrJZzjQqQnEeGEegnNqyYCcIiPpcCaAckAzZxjJXtcSsrRCTCcEmzZZzMxXlXQYyqwIiyJjKkgyYzZHhGXaAxYGjXxxvVCcSsSnNsKkVQbBqdFfDabBAzsSZcCVvUuYymYyAaqQMdovVLlOpVvWwPaASbBsDvDdfUuFXJBQWVvwMmuiIWwzZuUMOhbBHOLrzZRlNncQqeOhHbaAVNnMmvaGwWilLTtIhqoOooOZJiQqgNiIwqQLLljoiDpAaqQYyaAWQtTqwPrRYyNlLPbKkpPxXpttLcCloOiQqsSuUfNpPTtnSxDobzZpKkPzEeMNoLaAlOMmatTzOoGxMGglHGghmhHSUusIYyiyYwWJWNKkRrNDdnkKniIVyFffFYONnXxzZqQlxXwEevoOEeVWFNdDFfkkoxaAXWvVwMUumXxMDdmFfOnNTyYvVeEKRqQEYyeyiItTQlLCnNcWxOoXyYIpPuUFJjzZkKdDQqgGsSUeEuIiPxUWOowuUumcwJlLjCpPcJsnsStTNSjGIiiVmMnNUSXxsoOvVlLESLcCSstTGsSeUuErsSeERGgJjaXxAlLZzTtNngkKlhYyHhHnnNNjplLkKtFbBKLlXiIxwkKoOWUisKaAkieEIXxSaAaAjcCJAaeEqjJQxheEFNnDjXxIGguTCFfgEejxXZoOzQnLlAaZzXxNZzLlqbBSSSnVvyYMmNrIizZFfRWiIxhQSpPqQmKkCuUcghzYyZXxgGqQCcokKOJGgKklLkKpPuhHhXOoUuMmCcbBdDhtVYJGgjbByvGIruUIirRiJLgGTtWwlZPpiZFJpTbBtSsFfUuPQsJSsjAabPpYdPcChHCGgPwWEeBWwbIPNOZzaMmHhdDAoCccfFSsuqQUBbbEevOeEJjBbgiISsSsJjiCcavBgdDTaRlLFShcCHYpJjPQmmMyvVYrXxXLPwzZfFlkApPaKkZaAaAzhHQqCcmDdbBqVvnNPpQMKDVNnfFvYvtKkKYykaiIUcCZLhHlyKkdOCQqceYyrRELDdlvdDtTWxXwCcgfFDzJjuUDdlzvVWwaAZrRXhHqHhQqQojNpPnJlLgCcpPGyYjJpPanVDafFnNxXvVsSPaAaAIJjUtEeKbBmMNVvlpHhUgGuyYyYcIizZEIieSsNfyJjdeVBXxbvLdDyvVUuYPplLiOrTZaRqQrAzTteLacCdIYCcyvVWwtTEeIKkcCfFdmJpPZzTtzZBbjJwTtHhWAzZosJNnsAaSbMghFBbBsSHqQhdDbsSbAaIiBkdDtssShgmyYMoOGDdeyFfnbQqfaAaACcnUtTgpQqwWzeLLlEzZKgGkeJzZZzrREeEXEuUlzvVZzoOuUZKRxXfxXFDvAoMmHRxQzZeEpBVvhmEjmMMmRwvVWrJJbtTBJfHhFtTwWjWwlLHiIhZzRLlrjAlLruaJjzZtTWwhqDdlPpLtbJjBusRNnrjWwbVvXbkOoOHhoKQYRBbBbDdDdqLlSSCMQQqbsoOwQSbkPhSszZHPpVvNnPyPpDcCdEeYwUuWpDdwvVstTMmXYySVvsxMmnWpupPPpbBKkKNdDUcCRSmwUuEevTocPIQqdEgKBEeCDskKmsSRdDNhPpHnsFfehyYeKkENEeQPlIiJZsSKkNDgjJyYFbBwDdqMmncBbVvCsSNvmqndDNvhFfHfPeEZqHOolLhzZSskQqTtKYylvVnNfFTtbbBDOonNfehmMgPdDpGHtFTtSgGNpknaAhHNVQqSsaASsHhvAaEekAsSJvfwWFrpHGWBlLLvIiZzzkdSsDKxXUuWwCcLehDFfwWvVRrWbsFqZzQfqrLofNncCFObhMmUnziItTwQLhPpmMHlqxrRXlLVvzZcyhUfFuHhHWwgGOoBfFbkKYNnxlrdfFLWwVvDEhSiIMmbBUuTcCdDtrRkKCcnoUvwWVueeICcikKaATvVtQPmMzenPPbBJjTKkPSlFfBbLRtZzVvogGxXOOopPxrKkNnUYyLluyYIiBlCcxXYynBbeGgEBWZOoeEfFMkMXOofkHwWxXGghKSlWxbZjkKpPJbuUBSszZznNZOobBjJzCcBBfNntrwANcdDCndUcnAUEeuUubBwWkjJKuYcMmRkKrRrgGcNnCgTsStcmMCmkXgSZzsGxgqRKkVoAaHLuxyyYXxjRHhruUflOotTfIfFiFcCLQcCqFJcjJFEeZJjaAfIjpPWlrRHhHhbBdZzdjPxnNXmcwWSsykKYNCbBomMbBCcUugOonNQEelZXxznmMyYNfFHOPpBbyYoGgakKvmFXtbbBBkiFjwyYxqQKrWIAaiwRegGEgqQBpPbeGgEyYWzSMmbBbdDSsiIaAfFzZMmJjfFMmXoOxvtAgmMGezUjENnecCeBbEJnMCcwrRAwWPsIiiIaUuuDUjiIcCFfvBbQqVTZzIixXQpVvPNWwGnNgfFhHTCctxXvWipknNKPchHCIpPvUuVerxGgEePCcqQpYmMXxZQqzyqeEzZQXtqQSsTLlisSlLemMiIdSsUuYyDwWQqQqtTsLlpPaASuUkJvVbHhBiLlvVjJXxBUNnuGgbjSnNMPJjpKcCkuHhSyflLIMNnSsAlLrRGNphLUuloOsuUSgGtgVUgGupPdkbBEecCTWwoOapPbfyPAaibBKkvqtAXrRpPdDxbBeCcgGJRSPpGgxcoORoOOoHhXTzdDZiIbBRWKaAkKzHvMVTyqQGgYcCRnpPsIUilAaMFFbBffJyYMrRgGmooOAkSvVPpsKNcrRCRrnpALqBbQfSsQqzbBMmhqQHUuNnKzocOKkoCvVqGVAaNnZmMSsIqQUivVSQqUaZzgXOoPpOoAaCqxXxEepPxSnPSYnzZNWwiwlCaAvVEzrrRlAaHhPpLNnjJRZXUuxkKoOZhHwlZBbpbBPxXOopMmPEetTszaAeWwlLtLlkKOERzQqTtcCKkRfzwWtNKsSPmcCAaIiMnxvLtTaAPpgGncCNdRrseECcvgGjDdJtTfaArpPVvRjJOoGnMmJjjcCpPSsJZcVQqXgGXxMmxvHhCSJWwXxKzAEefFaTfjJeHhQqHFfLvVvVBFLloONndkicyFxHhEeUuwvvOofSsOioOFBbzHhWymcaGAaRVgGavVtqPpsSQHFOokKEAaFfnNYyWwiBbpPaAkKIixXHhIrRblvVZzLlYyepPpPZznNXBEqulLhEgGMLmlLDdKkxXeEbfFZzBHXxhmTfFnNdPpMmfoOfNhzNnxXyizzotEcCerMmqQLsIFyYfoOFQTtqOoXxfJIiNhkKsSOdDofTtoiIOYwlwWgGjWZlLCbBBHhjqQYqKkuUwWOUEgGeELleUufFjJaJjEeHhKZgfRoOryyYYXxFKkkanNAHPmMphKIKDdyaLfkmAfqQhIjJjqAQUuqqFbVbBZzvCqJjkKxXQtRrWwcCONuUnSKkOoevTBbtHWwOBbTHjJhOzZnNRrCcXxBbJXxGnkKtyYuUoOTGxXoOrRllLEeLrPWIiwzZIiDdXUuxZzkKKrRkoOpyCcYBbZiKbBRTnNHcdUuMmUuDdYyfthHTFzXevVExAiIaqurZSuUEuUUuefWaAwBgGxqxXQnfFMmVvNQqxIUbhbBhvVWyVvjNnpqVvesDdSGoOlLoDsSdvsmvVMQqfFSLpPlDdVuTVVNcCniFoOLlzlLZfyYHQjelLEzZECZzGDdtJDdTtPSdDsFfvgGVIiqRkDbxyuUYRrtyYGvVrRSsjJvBbTtVoOAPWwpHhXxEuSsLluUZzJjJjBSsKMkKmOLdiEHhewWIoOqXxMmVvuSsUjGfFyYaNnAwWkxnNXfrRMNkKJjMaFWwWFltMsdLlsSISdDCceEBbcIiCaLlrRNKrJnFfRnKkBbUJjiIShHoOsuvcHhCcCguGgUQqzXPpxPiDuSsUsWUuwIsmMjJiIpvzoOpSsyzzZZSskKzOoqGXSYGgysxWYzZbpPdrRDgGhHLZxXkKSEesaUuCIZlJjqwkewEhgGpbBWwPuUHFfoYGgVvoOUuyOLaAlEetpDdwWVvhHLltTkKMdDmVvjsqRNwdJjDWZxXyYyYkBaAxXkUuKwWsSwWTdutKDQqdDdDqnNPRrgGXCDkGgFBEeiPpIfzZcfFYFfaQqJjZEksSKepfFPzHwnqQNPWwpFfaAEeKkGgtjJTzfoHhNVaAFfmEQqeMnuUDWuvVUcCFgGpSdDsQqPPxLRrkKmMQbBnNqlXbnNsaAWwEVvebtFJjmzZjJMrdtUXxrTMqYRrlxcCqQvVGgUrbAaLlAyBYzcXeNsSnTtENcVvnOoNWwCFhHVvsSOEtTtxdDXiIIzbBZYynjJXkCcKxNEHheeuJjHqQhMuJsXxUsSJkVBMKksSmbxXvcFTuUCJjPEevVpYjJMhHTtMjJmvVKkupwdnZzuRKAeEkbBQrAeEfFaRQqYyNmALlXxpYyeEYiIrKCcvVDPXxjJgGuUiIRZLlzriITtgGVkKIUulLMaAiIGJeEtRrTzZUbWuUkKDdwBqQFfLlUvVurRuEeSsUEjVPpUbBunNtgGlhgGHvsBankKEriIwZztTaAcCKkvWwdGgmOotPJjJbTtJjPCwWiXxIIbGgijuyYptTEHhMlbBZcCakQvgGVEeAamRFfhHPpdzZiguUDEsSwgGWsCPnrReEDdmMXQjJvvVdkXBImmQhnSsarUusSUjwoOWoOTtkoOYyXxPpgrRzZswWPpGgSJnNncCNsSAhwWIilLWmidogGxXFVvWwfsOQuUsSsGgVnNEQSFfnXfFydDdlCJjMzAatTNnCEhHeGMFUagSsGVCWwWwcTtGgdTtjJDRNnZzrYpLyAUuAzZYCpPiKooOCNnDdYVvyOjJoFfcdDzpNnPVvnNwJjWjpPNbBnwWJjJFfdbUiODuHHhpZxvLCjJXpPQTycfBLlbNOonloyYCECcPpJjqtLFflTGgQpZkKEeDDdfXxFyLjUoGgREqJjDdnNIDcJvVNKdDpnNnLlfAaCctsLcZzClPpCcMmdklTmMtYypGUhtTOoXxOouDLldxXTWwVFBbSVvssYMmmMyhqQniYWEeGxjUuJXlyYXxLtNnvVKkhHUuBJjmMEeTtNnGaiVNUCzQqZFiSbBnNiIKHTwdGglclLjlLUqeEQPlQqLgIqhXGgPpMPpmjrRuIaAHhorhCchsQqvVTtSLJjljZzJBxyYXdDPpeGnMmgGgGxXVDRVvOSQqFIpPUIiuoOlLiGGwWHLJQCsEzZKtHWsSXJFfWJjQitTRlUytVSsOoRoOrNktTzgGxXZdDqgYKkMKkeHHhhuUaAXxskKiUuqQWwUJjoiIOHZJRrjzDdZqQLECmMcpPZzCcexpPsiISasSrIlZzgGzZLfFCysHoUuoOKXxEqQekDzZdBbPpJjOhfFxXKUnYlLyyJMCcmjYXxqSszAaDyYBLmAaaIuUkOoKWwCcnNapPAcfFjjtyYjmpwCcMmnsqtTqGtBpvlBzZqSmZJZzfFjdtaADFfyNAaXfFMeaLUuytTaSXtxbuVwWvnvADdaCEvyrRYYyIkKySsvVgGYIibDazXyYwWgGNnxXsSwTtejJElzoSDdbBsNWeElErLPFCckKfBbdihHAaWGRkKrMPjGCcgJkOoFtqQIiDPpvVdtTbMmSsilGLlrJjRrRCGXCcKDdYaAtpeEWXcCxlaALwEBmMLlpMxXyYmzYTtyZyrnNRTtQQxlLXPnyQqYVmPHhvVqfFmCmtTjJgVvQmBVvSsDmMCcdVuUmYyMPPpppPSPpDDdErRVfghumGglLMUMeEdGgllCFXxeEHhcAaCdLOGIaAiHhaLljXNWbBKkHhcaAurRbrfFsAalnAaOQYySfFoOWJjyYuSsvgmkaUocCOTtgGciNKIFfkKnNivakoOKwuUyDMaADddDmpPdOpHDCcjJzSssSPpuoOEeUHhZzqQZaYyMmHzIVvhHvVDdiuuUUZtTAaKVhHvsSkUuhAdCcKcYovrRVOWeEOevfJyaAIjJbBXxHJjhMZgsyYQbBqSvVHzPzZoOYFZzmTFfKhwWPpkKHlLmGrJjRgpfFPYyPpMMVPpEjVvJvggiTtIZrRzGuUUfwWmMpuUFZWbBDhhHHsSsSCHGgGfVbBLdYAdDWfFBbYyGLjWwJxxCcLliSjJZzKQkUdDvVutUuVlDxXirRxsSiIXIKYFfyMczZtoxAnNKAbeQLlqzfFOfJjdDzZvlLwJFfjxsSKRuUhxPpXJuDoOpNWJSxCcXmMeXnmMOoEGHhdDJPpjgJjeUcvyYczZClHLYCcOYyrRvVoykqQjJcCEyWwYSDnNEwdJizZIeEOoBVbjYMmgFffFoOOoFfdnXxGgNPpzOoVRrDdIcCbBBbrRlExXOoAaiutXxIiTJjsHAaCGgcyYjZzVNnvxXsXxmTRrtvMiIXxmVMAapLiXYqQdDAhHzGVQUqQzkKiIgGuUdDkSfFgpPDdmCwXxWOqZzEIzjPpPHhBkKrGgRrFDdGgNntTcTusSwWeEYyhHCcalpPGcCmXVGEesSacwcCVCvVuURPpZzTZztxfHuarRPptbjgvVGaNnAqQJBDHhpPdzZTScXxCWlLagGBbAHhtTwuyKkYJDsSxXJYrRyLugPPGgKJfzSsqVtTIivnrwpqZzmMLlHhlLPixEeAZzeEyYiIdDavQZzqMmsFfSXxVXoOGARragglLYTJpHhZThziItlgGjXaBkKQqMmbgFfACcaaQRuUrDdPqQpyGmusFLcClwWvVDdLuUFMpOjJPpnNhHoDWDfFHhdwAadDEeSsdaVvqGqQgWKkwHhWwJSsjaAKxXdxXDPeEjJIiRnNxrRXPpTgGgGJjWifmMwGgWRrxLgVvBbIihGFdeUuSQurZWPpwfFXxYyRrqbBadJjDCcpujYFeEDdswWSfVekKRrMmsEeSpLkRzZtockwunNUkPIffiIdrRGgDVxynNnvmMQqcOoXxCMzwLyeZEezuJRUuFfRaAaKJwWfFzQqiIVvPsSPphjsSNnnfEfFNjJJvVjhyFTtrRAdeETtvVhHzZXxHCgGcQoYPbBLlvfsSibBNnlLvVoOGdVjJfFDKoOIiLTtMmxNQWNmUhHuMdfFVyYmMeEMmhHtTEyhHRtVjUdcCZbZKkUufFzZYweeEKSsIiiqqXPGgpxrKkRmMcLloOsSvVNWGgsSffFWgGwRCtTwWRrbBmvxdDZZzHFfXBbxZsmMSzjaAoOPpTjORrYySskKQAEcCeGgBbSsPvVpfFiQcCzZDESsBWwpOowWORfsnxAyPbBKkqGgQqWwOfFoQpIlOwWUuYyfYJaTtAJbrREeKkAaiIwWffUuXxiaWOoIiLVaqyuFynNYLlvkKRTthHLlNnNpbMtPRJHhjzlLdDHhJiZHhyYcmMCfFtlLeEOhTtkGPiIpgKnBRrtTQqatmaAmVvbLRiwWsSIOQqeEUXrwwnNFUZzjYyUAaZNaEjiCcuYOoMjejJRrSmJjcjcdDFfDJjJfFEepXxBHBbhZaAfPiIxWwyYXbohHmEpoOgOfFTtXxosSnKkZjJmMETRBvVbaAfUeZcsLlFYNnyVuzUuXgjCrRJKtxuUBbXHmMmkrRSNngGssWGjrMmZzzXxZxvLtTNNmukYIidGKkgwPpRfFrXPnNxAeQqxXFccAHiLwMUMTvVtXxabBToIRpPrJNMmrRhHEsSXhHlGgadMUZKeUxXoqQnPpgNnLlpgCaAqYyvVXxsCjoOIppPFtBRrLMYtLCclwXxsSEeWPpgfmvoYyWDdweRrjdDJFbBBDdMmxdDwWdDCKXzpPxnNIIMmJjKkcSiIQqxXSCcIkKmpPJljJLvVKkIrrJkEeOnaAtJjFWglLSHRWZNGgfFHwWvRrSEDbgFZeofFcRQhOoHUVvXxuJjTtKltTlOoAzCGgNnXSLMmlmTUtHhTutMiLlpTYyGnNoOTnyvjJVPbSERmMbvhvVTtHXJjxoOmMtZcHhwDVCtTLyrCRjJrcXCcaAnNXeaAxXkCcVmMmSzSgGrBbRsyYNOFYSsyEefoHhJmifydDJjRJCcNnSsvVXbgGfYFfpTtelRawdTQIlczZCZelRaArTtepyhHxXWErasdoycqQWwArhtTcCVAaIfvVFDbBaYJRzZXCHRroODOeEoXxcIBVmMDrRLldqQvMcHvCcCcOoWHrniMHhGEfGGAWqGlLgQLlPlLAGgxXdDJQPwkKoOWpBYsSbBePpyoTTttOHFJYyQqjFBRrakgAazEezxXrRSsrRZToZnsSxXBbypPOozBbuUozUijIbiIurmbfFEeLlBMlZRrHaVGgmMnNgXPxXGnedDxRtTrmMCUjJAauWPppGHoFXxUaiuPZTmQUXxhEzZXxxXeJKeEjuNsSzuIddDVHhvDeeAaEjkTtuhHFqQrnofUKkDhGdWwlLOXWwWwAqMmvAeEHYNtTYynJvVhhJUuLlIuUzJBbiwWKkgXxdfAsCECdDmMnNcvLSsTtzWxoOQTtTtQzZUOaAzUuZQqoNobwEgGoxRruLwuXkKQqxMiILlmgeENkElnNLbQyYJjqCVvPiICgBbHQLlcYyCcCvVPpbdSsDqQWiIOMxXCjJXLKgrleEVwWWwEcfIfkIiRryYkKJjCcLLldQGXxRrurRHhZOeEolYTnWWwNnwZzNWhcVsskKSpPllzvVNkSJXxiKAusaASoeEmKkLlMDdMmyOoljKRbyIVviYBdPpDJKhOoLeBbsDdRrgoOpsLdJANpUAavWwhHpvYyiIXaAAmRXeExfTtFrMalvGGNnIiVDVvifFIiZzgaAZJSyYkvVBbRvVfeENLKkWcCrjJZfnNFEWWUutoOThfFGFzjJxXZhqQqWyYQqQMwWmPQpiQSCvTxLjJFfOHfBbvVGgGqPwWpQgqQhVvAGgeEaFfHnNyBbgIimzxXQLlhBduGReTKsSNOLhHgAhDhrvVhHRWwlZQQgGQqGIIZzvVuSsUvZzVKvRrVVvvwfsSgGUNAzZbBBJjbfmSknNFnmMNayYsSzZsTtWwSmssxwWZPalLRrVoOrqRroYPNtHUuKkhSMmbpPPrNnwWRrAaOozmZJfeyYHymlfYBcsrQrNnUaAupliMwpNrmRooDdORyXqQwWyffxnZujJkKFJjlhmZoOzEeIJjNbFfEHuUJrHhoCEugSsYoiInsSDzaCcYVGRXxaAHhriSiEgQeHhEqMWlLAakDrXuNvVnPxCnNPtsLTFLZJCfjJEeRrevtTVkuUKEFVZzFEtTDtRrlPfFfLiKklneQmfwWNKARApGItTijoOuZhSQKkbBqZzsyzZYfFSNrfjJhunqQfqPpPjXWwXKkkFjJCcPpInNwwWQXxkQqghHHQZxXzZaAirbBSsPCtYGcvzSsIiyRwWgGYmjEeZzJPhtpKkYflkKLFwfFWycCXAaZdaynrRNMLbBeILlzBDVKBbZzkvdsDdnoONrRNbMWFvVziIZZJjOozSQqhFHhfMmIZxLapoOFfzZfFiGgIDtmrRIiKoMtMrRwWnNwWrbmMBuOgQLMgGsSRrKBbkKkvsEeStTSsaApPpPbRrKKnNEetEHhuOjcCcCJZzJBbjVpNedePpEKAazvVZSvVGOkKNxXKkcnNzoMmOjQEgGnReEZNncCRrpFIwxFgVDdanuFfFILhAhHaoOJYJibOoqQWwGgkJmWsHhSgGIigdJTtjHESsGpPJQMeEPatTBQjMCcRYpPmMSsSfjJrRjEGDNSjjJJjJAqDdQmdPBkHVnbIiSPpwRfFGgsuOozrsSeHQUuqhERIkmMZJIVuUnyoOWRrwWdDaWwngsmZzswWKdDUNPbznNFfIiEnVvLlhHuULjJeTCqQqCdDcxXQshHhHTtSDdiIEbBolqLXxlHVJjHNKSGgRAaAuAOVveEcEzZeHaAhIiXxxXlKkzZMAeEdWNnJrriginNCLxXlcRMNYFvKkVUIiuvVlLDVmMKsrRuUQqXfFRrNqppPIpPigBbwoOWgSWzkmMSMmzYfUPdOosyYSNtvVgkDdgOoGoGkKjnpkKKnEeAjiKkNnOEenGujJGKkTtTBbBjmkMHaWiLlAXUVvugGRvVwEepPWKUuBbGdDgRrMXxmgCQqcoyYfYCVjJGgvNcCUxZAlVeBaPnTtTiIWSswtidKAaiiTzZTmyYTtvVXxRniIXVdReyhGgFJyfNDGwAaokKLlONnHMszJjzpPSzKkzDdjJbwjfymIilLZzKrZSyzZSsEdPpLloQgrRqfFIikYCFsEeXxnxXZNWnUNzPovLbBlDhHdMmzwWsRbiItwMmWTeEtTCILRruUaALzOSYzRfdDVmWVvltMmRrTtTsShHcCmyeDYydEYODuNUnKSVvozYyZyYPGNwFYpPDhuvVfFSsUzfFSJwWjkqoAaOQEeKHhAUunNNYTepkKPMmEtBbyIiYyhcClXxArCcOQmsSfFkpPKriKyTcAHhhxXHyQqzMeUvXPpLlaDdAxVRhczqgkKyYGUfhofJuUSCYCXqTtOXCcHhRrkhTdrRrRaMbBrRzZmgWSCCcLlnvDTtfLlrezZlGzBvuUVyYUuQqxBPpbtYmxvhHarsYWeEOWbBBbhHOYdpxSInlLiINfFEMmeygjTJjGdBbjcTboOqVvMkKwWfGWpVitfxXVgsSRfoDknYyVmMvJwbBxpvUfkRrzqSsAaOWbBSgiIGbwFfygGYEenNLlLlKDXxFtJewIEePpisxXSSrWwCEXeEiMmprAHkKfxtMlWUVxYKkbBXlcOVKkvccCCkqwaAVvWQxhQxXrRnrnNNvVHhnfFlydDLrRcmGnNafFAgMClnNTUOodDVvsGpLJvfFvVutHhTfYKkOdDNOFfdDrRPREacCAFyHidDTNSWOoVvOoEewgEoOqvUumMvYymkcYxUBbbBaAlLDaGgAEfkvdVkKrRmMfFOozYapPxXbGgYvYQqaARJjExHhRoHPFvzeCLlcbBzvwvKfeSIutTkEnrAaRlIPYlLyrRIgGHhfFTjvbThXzeELlZrNBbrOoAwoCcOWPXCzZNnXxIiRrbBvfrRFXfWHOolLSKkspPRyrUFzeTJgwWDUYyxtfVZBTtgGuqjJEhdIxCYrRwPOgKkqHxPyYpqrIpbEAjJalxhjqQbZzMMzVhHuUWweUgRKkpPrKkfFsFgGCcYyDPmMgGyYgsfFiZBapjnNswjGqxtBCgGVrqQnNwYyWxkKpEbJjYNqQPSETtekZHhSFfszgjefhJjJCGjkPpwhHNqzZlWdDfHhxXcgPpznxXVQqQlOQgPpevVDdOoOfQQqqFBaPqQZVAaUgGuuHAazgGUuzAaHexJjUtBiUuItFfTtTwWaXOwcCmJaAbmiBUPeMmZGMfTtXlKZzHFswSyKDCcdLrRgGqdDssSGUugfbNhYyhzZHLleaHBSxOoIiXqeEkzKkZCvRaCsaAYykKScrWGcCzZNnFcCVvnNnNKhHkwpxeyMzrXoakpHpgmYyMGGBLJhHWkuUYuVonqQYlIWwSsQNDdvkKkBIvnNVlLibUuHhvlLVqhOoLAaEeHhnEetWsJMHKNYYkKDZzdYyGMmCcgXiiIfgGPsOrTQqqBVvZzDnhHgehBbQFfGgzZmlaAyYIypxkOJjokKlLLnQfFMYkkKjbBJKnBsSpHSEibRiVvkvHpCJhlLHxXmnNAKfrRkvHdGkKnMmCCcpPKYiGgcFvXSMOrZzRrRQuUqZEeRmIQKiHPpplLnasjvHEdDCkzcCIAeEZBGlPpLkXzZSLlOochHLlfpMeETttfGVcCZQbVgyYFfGVgGvsjJgpSFnNFffWAallLLdPpjxXRgRlLFwPsFkzCnwTDoMRZYtsSvVnSroOfgGREehHsnNyYyQqYSSoOsgGkejNynwjJWJKkxeEPZzpshHdsSzXxAPpaDNniIWrolLSsNdmwWWbbjJdQqDlbkiIVyBbYsvHxFUaAkKsSqYSswWLHoXwOONuUJSqrPlLpvGglZzLOeeEXEefFxERxlAEwVvBJdDiCOocpPSwWDIipcCiwcCcNnsSOoCFMfFEkLeUXVcCvxMlCnwJAajoUufqUVvuQUuFzWwZOOBbDgGKkeOoEwWyYNIinxkKMLDpaAXJjxaAflRBbHhrmMsSMmlLlbixSTtsCcdaiYjXxAoOOFehPbSyVvllgzNmMnUlZzAVvJjymMYmMRRLlrJjCeEmMFhHhHovVORdsrVlVvgRrZNYyBbnOFAHOoAwkMmKFLVKkxPnikKSswzaAxXZOosXZxvHyoOxTtGfZJlXxLZHMSmgGDOohXxVyYviILbtOqQXoOWwxipPDoOUBAaqUuCvquBKYyubBLlDWNnnbpsSPpPudCBXXxnOdDhNMmkPBtiLlohHCctTRELlfFKtTrzZZtTdMmyYqnfvUusfFtTkrRdOLYdjJSsDtJfVTtvaAiIEeiYDdyqQUBbCQcCDxyaDzZdDMMgGmmfOsVxsSeEnNSJHEelLpKukGEQqxXIosSkVNnfFvcfZzZWhfsSPDApmcLugQqqDUuumKIkJoXxOZzcNzPGgwWpkKvXxGAaigbqlLNUZUsSuMmPwxLTRrzRuUuzLlgICILEdGIbxPRrQEeqOWWoOJjsKkVvKytwWdkpHqQoBbyYZzYyqQJjqUEXGwcyYwWTtCIwLBbkKOkKfFkKnzSpPcpmQTcCMLlKkbTXxriEetFNaoOTQvedQOoXFQFfgGWwXxDvZzVAadvNuUnWwVUCmdSsTiASNEgGQqLZLrRXtWEKMmtJMFursSesSBpBsSucczLnvVNsSlvHhOXrFfSTqPxXsSEZzeBZzhceEYTTtRparRAJMsKkqFwgqQxdDvSYKqQmHWXVEtjJzZcLdMgGmbBDeMchHCvaCcAuakzpuqWzkyTIiaUDxUaARrJjSePpmLfmMIwsvAIiaRpHhuUMmbambpQFUgGdQbJjzFfZKQKYTDESHBJgKmxXhWjJwfOofLlWwbhHBRwXdpPjRrJEDJjbBgYuJHUkMLdDXxqQlmgmdDuUKWSsHhfhBIuUfvVPlFYytTfsSNgGnBSsblmqpJjPMmMmUuQOkBbfEfFiCWLvwgAtfOoWGLYVUIiWGMDAapVvVgMmGGxmijymJHhCKVZVtTHBeEbrfVQgpJYypjuUwWNjKwWoONIFpPPXjJMRzZZEWwewWaAJjcClLQcPtwWNNnTtLTtdDedVNnEevCfFsaBAaIiOPTvwTlwIfjbArvPTtpVvuKkfqrRrjgYyHNNDIspPdDuUSOogMJrRzRdxwWyYhoqktVvLrJZnKuUIbBgGLJtNrmnUqCcwWVQtpHljEHhmMnwoOyLZRXHubMwzZWwqVhPgTHLlRrRrFCmRwWmkOBbrrPTJbBshHIiSjhHxzhCEWWwwpPBTtOLloFOocUuZdrRbJCckrRKSeEsFtSstTfkWBbwwWcCzkKQeDdooOPlSfLVTrfRCCcOChzspLlPuYHvVhzsdxePpEGebBHHPxXSsWSCQOtJSdDsaQcCyYjJIDdiqGEJjkkECmGHhyGajJTvgPbyMzZmNVhScCVegWwMmmMlnNXQuHGgOTxXAeasBlvWqdsxCKHwVvpMmTXHqiXhLNCcqYSsDdyIUdvVDZgIvWScqQUzKUwWuUigwWjykKAdXKVvDdyYnYOomMnqkWwCiCcFnNIifIIAauBbuUxhHXAbRJlTFgzaAwPpwWWrwWCUurLkKSaoOArYMbTtBbBOohHcwRkTfspPrUGgXnpPNuwtTRSsgWwdOPVEenBPfVvEePqQpCJzFUuVunbjaAVpwsiASZzisCrdwwWWyYwTIJIiBNnbjSsQWvTDoOpPWdoxSeBAByMmwWVWqQwmOqQgGvVoMnNuGYyFqISrOPNOWwEeeoFrIciIlwXVvLlunukzZMmCJTpPtWwRueAlXLTnNSshJAlLcNgejJWwEwWLBoOkQYkOdDOoFfkKfFsZaesShFTIYLhnNdZzjlXyYSEMTvCatvVwSZcgOVvsNBMDuYFXxbSsYcCyawWzlCcLwTMGaACWcpEewQsYlbpApPagBnuURrTabBBiwpSdPwMofJurVMsCzplsmHLNIJmOKkoxpcCPUuwZvVzWACqQUuLlcavVaPYchgowGyzZKbgHumjQFfqbBYoJzchHwWCeWkYyoOoeFqqYyuHGIPpiRyxhFSsfcQqejJGDPpCcdBbbiBbQqISmEvIxnAaNEecTehHlEeCiIjCwWJjcHIsSVWwzQMokkLWPGMiImAaOogptOVNnkhPMwwWhwWTKkAIOPUrsFSorWuvjkWRrjFfVvJLlBxXbDsSdtTImshBTtEfQBFfcjJDBHhHVjgqeugGmqWqjcLlmEGfcezxXZDTtdzqQEPYBWeEAiIafuSshgTMzxmMLXwWMmBbWxXWwLlgGsMSspPLiNEpngGzZXXkbrWwRHhaABxfhABbTtaLoOxTCqEeDzUuNniBeEPxjJotLhHJjlwbBWTpCcPtmXpPECTaAtcJhHIFfhUuyGItfHrBbELAalUSsDikegfFsIipDEeXvlSmONnpPHqwIwOopxXPpuyirgzKVvJXXUXtTsybBYKQqRAaVRjDqwWTwGKkIiMPhgGrRvGdkvdAafFwWRFIiuyYUsRjvktTKZzCxXxWIbQdDUzzfUNntyhIfcgGhShHTNIopPAoHNnhYhCoOcsrRFoOkKVMmbXEpHvpPUCYOnCTyLfLvVMeXhzqQUUlnFfNLGaAaxLdvKpGfFCcgvbBExanNWZRFuGnZzWsKgGwpPvJnRrtTSsNaAjTylBySsfFhHYPLxXRrlpcWwYyTWsSAfSshHhoJXLGHMMmmyCciBCcrAaRbIYlLhOoglxjOHtaATFbBawUutCfFbLYtVpPWkSwJjNgUfrzwKkAXeVPwWBbkVMmDlXSsAvVglJjLuuZHxVvEmlFlYtcoONoVvycuDdVHAahhPexqQBvpPzZEoOeyzZYTyYtWwfFfSbBHyOTtaOintsHJjCYyFiHYTxXuFZZuqBiwXcVJrSfPprDUKkuxXNnVKDgVHpTtmgWtQdJrvrkSxuxxjkZGRIYZzUlhHfFLBxXbPSsWiWQNnqQhoMsTtLVxdPxXStTGEKIduaAerjJRcCRFfhFTigYHsSDFfdijexjJBbMTIiOxnNXXzZpHhbIZdNnWwQctXlHFXoOKxxfFfZzFNPeuUqVvQkRrKnIlmSwSsBbxoOlxXXZJjmtGHUFcCAaFbBfwbWwypeNnZECFgeMtTCphHPJQwMzZmIiQMURrEQXxGJvwWhqQbdCbqFeoOsSbEeBbHSMiYyBMPpmbLlDdwKGtTgaAMmXxEeAaJVUwROVvsfCPpcSRupoiatwxOoXEeKkWHWmpHKvoTPiIrzZRpwlKKXxOpPmMmqZbBbBvRrihJclLEeLEtIiCrRoOXiVeMqnNQsBBbgEkKCyYWwHXYrghUoOVvQQwWfEOKwEcCpPbBZjOpPyARraJMUhqQGBkYgWOaAGHCypANnZzXOoMjinlhMSLPZcSuUmvRUjFOoOHhmWpneENAaDsPwDdWWInNNnbAtumMlLUlLNbGeEFYyfBbnNPBLyIiSqWPCwcgmSstCcSsWZABbBfyUdmXxbjJnSoGCzpPsWtTKIiksSTAcVtmesxdDLJDWwHlyitfHKkEAeEzHhSjUVvuJJjyfFYoBKyqKoOblrRXxGzZvVnCajHtlxLaEUrjcCcqQzZKUNDdUsSxWLqQqQCiQmMqcCZzSsiIMmRfOEoXHhxnpoRsiQfgULlWTtwvYbahVvHbIidIiDvVEsXCcODwdYytIiVnrRNLlnnNNwaAqitWMmDhHRcSrRAaIiIsaIiVBbvLGglISQqWPvJtTBNgGUvOofHhZjcFpbNbBvpnNoDyYGrWbBkbBKUxOouRwWSFtKrWCOobBmyRyYslRuUcRZGftLjrBEebBqQaMmUiNSsncKQNmMyNkxUuDaKsSHhkYYyJjJGCcIwpQqPWqAeEaQOouksaASZumMCsGgwkKViGzYyuiQCcnljJHxIQhxtkKPWhkcXSDQwyYVLbSAGgEaHhtDdUDdCcvVuohUqxLvVGEveExzZaAXtTsGgHvnyYVwWxXvvVYBMKPpkmpGVAaVvtAgYpCcPrRgMceKKegAzZEAaejToqcswphhEgXPkKpNnNnDMmHhSZFfyYpZkKZoOzzPpMboOBmPyAaUSZHcocrFRKktvlFsLUupOEqZKoOoOFGgTfjBDIKkizNnCfbwWKkgGecAaHZRrXtRuUrpRRoKMunNUrgGCcMcfhRryYtGgGpHGgQJjqvQWNnmGsSgBtTUueEhHUhxiIGgryYzlwWGgdDYaAWNePpYyJLkuUKhPTqvQuNMREePpnqJjQkKTjcClikNzjRlTbxXBKQOHQqXDrZNnzUuZjVvmGimMdnntThGJRQGgFUVRfaApPFaBJFiWLtyYWVtpoQqrRbsSAScDElnTpOoCqjJzrmxpfivVnkKkJnJGAagPjPUuGqvFRmMhvzUuvkcjMYJIKkLlMXgvPdyYmwsSWgwuvylgwFTaAaTtBbGlLuUWVNnlwWwcayYAsSIewWwWFKofbBFyGgYgGGeEoOZzgMLNnLpFcCiwWbHFwkdfFDMGVvWwDdKutjJThjUysYySGdeDxWQwWqXxrRrYyeEoOFFDrRxXyYdmMHMkGjNvVnbhsedtykqkBqDTtufqQqPBMATtBgGPcCrVyYSWBsSbiFlMEsRraAuXdDduAtYKZwQUPZKAEeUYyuUrDdsSRVmmMERraAlCTgGzZxdDXIiGgevxwhMUudDkysVXGWfQHotTOhSmjPWwrtyCHlLbbtTBsSpQtHhqQCcCcsjoOJBPprgGRbRxowWwXBblLxWSsHhVZCCYyUUuCcbHhjJPbsSFfEUuRUgkKGfmjNMmZTtUuzdDMmIinTIiYykgGewTxlzPplenOosaItDMYgGycuqfxqXwWxDEYyVqtAnzZfyYTIiIpPRtBdkKDlLQqmtqMNLlnPCsZNKSskFfoBbcCKkFfNnlWIiiGgeoOEWgxfFeKkuQOoxtTuUXTtBbOhPJFKkfjQqpLlOoPKDTYEemMklDARradLSIcCiwwPzZpoZzRrCLlgGITtiaAcpXBjJiEegDYyelicxXiGZSslDMmdtTLURrrZtlXWpMmzuxXYynQBGIgVZpPnCCcjvVKikMUdQGUlCMUMqJjQmVvuPaAadpFTtHkKwJjzFCdDKOiegKUlLkRrPhjsXvSoFdsSAmMYXdqcuInNiIkKPpFjTyloDByYbBbKSVFNQZzHhFfHhDEePpzTqQhHWwKTtktRZztTkeryoOooOOYOITbxXQqVvxXPpnNpKnoOHHhqIiQoNxBbbCccjJDUBNyvVYwDdCcdUIwWikbUgGQVcQkKbuHhdCcoOIoTBILlilHdMsLlmJjiIhzjJjzFgXfFYhVXzxSWITtBoObNpXvlfWaRrhakKIifFfKaAkoNYynCcfFcCzWwGLFKkfvRSDrFfxfFXfcaAvVWwriIaLAauZGLLOUuoXxcChHYsBpHEfoWwaJyIADXIBLOoyYKkLFPdlmXMnSspPNmdjdDJoWyYNcLmuElBbKemfWIPKkdTaAtuPpUsIjbQqWEebBdDeaLXroQbBqhHhHGgVMmRQmMsRXxrAajnWwpPooWxOhRrjJlyQDduEgOoGefDdXhVSxXvXxKBLBVCclLvbBBwUuMyYDnQqORwTtsSOodgLlGIiZDWwSXjeEXxuUbfFBNYnJEKsCcqQSrFRsNFfTyYsSYyyzZNnzrrUIiuRmEAaeUbBuOdtDdWKkXxNcZsEeScyYuUCKfSpWfrMmGrJDvTtVwstTNZzYyncCPGvVrRSvBqaAtTzvgTtFTmPFCsxKgbSszaiZKceMmSshVJSANPhIDdkqiMrzuUojmMaAJmsxvVxXVLOolfZzCFfIPpykkWwKcAaCcNgLlDZzhVKcCuUFvVkarRTtMeyYuUEjGgHhchPpHPhVKIrBIeshPbkKNZzymqNlAaBbKXkKOGgMmoPgGYjZUuznNJcCiwWLUuMDuUHhdmMqkKHEMmGNdbQCctRhHohHSYypFIxFfZzyynkhmjOoSwTNhJjHuUlFfqNnQHQAaKxXLlVnqiIiRrLyeEpPNbBOvKcCkUyFRrLlfKwZzgPpgGNnGiIjlbgyYPhPjJQqKuUAMmOxRZVvPpbBAaZzmYEXPWAafiIgwRoOArJjFnNfVcAaKGgQsbwWSsuUIihfFiIZzAEAaVvHnBFuUjJSQTtHhlDdWwkYsWSfhfFkLxFmgzGgEpubIMBRrMmjMxXWoxAmMgiOoSshwIiWeEHIGQqbTuRrtTXEfFhZZCchUvzpAbopPwWEGqoLqvNfFZGCFMmoRpPzZrOMmwLQnBbVvWKJqLlQHhgcGggGjRmMMmrJoOjHdDFdDEJGKspnVvyBePXFfRvWwcbTXPpQgJgGWKkSJPPiIpATiItRrbzISAeEaGmZYyzMpdJjfSbBpPfFGgjJGuSssKkSETtnNsSfFhHvZmmBUuJHAaXLeBPpnNPiCcRDdQuUXhQNIivVnGopmMWyeEcyYXZziMmDHEeeQeERrsSUbzaFfPpAvFTXusSdGjtsScCEZfuRYrhgGHhkKTtzZwFsSxVTtVvNnngGNcxDdhiIHvyYVpaRnRxHtBVHhJticCpieELaAUuQLlqNebfFBxXKUisECcFfFkVxXWVZEZVTtfTtaAVKkVvvphOrWwBbXeryVyBrRtTGgAyZfFvDsSVKhHiIFerRduMmHhcWwtTAaaRrACXyCKMAaFfnNVsSVQeGsvVntOfFoIOohYfXxJUujergaAGpooOcCnoXxyFKkwWUVgGlLjlPgSutagGBbAYLzZZzRNqHpPXKVvoCLxyKkXoOvzZuyYwLmWwTXFuURrhaRIiPIxXJjQqxecRFUufsSsWEjTVvfsSdkyqQYWEaAefFBswoUuGgQNGgnvVZKeEFubBVPxXXCcWjNzZRrKdeEOFAaRrrGvPpFTIwWvPIiwgSyYsFmQBtCJcCsSBbQEerRqAaDgtXqQxJlLGYuUItTiOoisAaXwWPDykKoiIQqbBwowySRAVCcXMyGFfxXgTEeXbOwWoVvzZzIiZfFeEZgLfFERFdVNcswGXxbBmMkKADtGUugHKxoQxUMmucycsjoOFOHFZzutRrVvTQZLsSwWHhqQlqQCHSsNnrujJvVEKkmZRrDdYdDuUamMCtYktKkTIRMqaAoRAaaLmMHnMmAaasZwWHbBGgdyfZzWntTsSEmMeXxKkwjJWgPppOskNunUdoMyYqQLwMvFrZyOGgosotTZllwWeEickKBrSYCIicyZVOLMmlpZnuNIwjJWiwbBnflLFzfHhFNSfcyLldDKQgGExXeGCcqOTtuULlDeBdiIsSZzDbSsYszaAvVRkMYFBbJWBQqqQZZwxXWTSstsZJJjZzHIihjZSmzxXZJjSshQqWgdnFYEejmMfHYwWZztTgGEcCIiQquUrDeEvFfxNrSswWMttIInNkDIfFNsSpAbErRvpPLarRzXtTubqtTQXxPpiIBeEncRrCcyFOGQCnNcqDdAaGgkpPrUuxQUuEjJeqaQqIiIwgGAmMhmKCcMJHhiIblLtgUgYyNojJIJaNfqQFkPWwjJNJgtTOOcCoKGTfuUFnnNOAarRjAiIaJoDLwWCclpHhuFxaOoAhHXiInNuWwUyZsKZwsGGXxxXuhHyYoOUPQnGgOoSCcsxSkIivzZdGgUufynmrcCIGYUuyIqQRRjOojJwDJjamzNnZDNndLHhtTvVCoabwWBUarpPsknhvhLFDHhdflQxXLRrEeOecSstElNeoOZBcpPmMCpnuZzkSMYylLSGNAzZwYNBbvijzKiZUSaAOorWmMsBTtNvhQqxXKbpDMaVhyYHvsnbBfFdgyYeJFiIxXsYyMmWwyYGgyaArmBbVvJqUuQoOzZqRrbApmqjpCcPgehmMDGsSwMjBbKBzZIjahHAyfFjQqHlcCiolLOfUNAvVaAvGfXWvVifPeEzrNIieeEqJTtoOZCnImNlLnMiogDfFdXJjxsSjJoOymMYTtoOskDEeEncCPvoUkKevVTkkBVbPpBpPsSmlqGoURmuUTmyYOkMTuUdPwXxWAlXzZziEegsSGOjsSJoWwHsfwmBnWwJjiISbZifFtTElmoOXxjJYADzxPTGgHpMyDdrYSRrsZYywjoOJWVCgyTcpRBbMUumIzBbqqbBQhGcCrRKqWifKxKkxzZJEuUcCepbBVvQFoONUHvVFRFfnsHzUJIiGggzZmMPaWwrakPpnpMmSsPFMqEJjNFFfpsSLTdAaeNnfvcfFjqQzlccCCftlSTtFfseEzmQqMuDHhdUuUjJZSqQlLTcCpQqTtyYcAaXpUJBbjxSscCTtzZRdDbAaBdKcCwFfmmMGpPgGeIsIxXgpPsBbSvyAJjKkZdNOyWwGUfFecORrhHRjheBniMHLfZzUzNXsSFFYxbBHhXxYBbroOoOOoHhOriCcIMRnPWwgGWmpPILPUuyYlLJjRBbqRYvVqQySCbxXyFLpKkPMYhgxnNXGEtSsTTWwrEeRtFCcjzMmMZFfRpfFBGgsTnpstTSJjyOQHhRoOvlLAsSpzvVXSSMJjyYAHhfKhHQqsMFoOanuGgFJjWLlLlVdCcDkiigqqzWxXYynNwLnNHdHaGVYyvlNnpPoYEeynktEriIgUDbHXxqTtoOZMIiGQNnrReErCfPpFwWRrcRquUYhAeiIApPaEnNrRaHEHhevGjSsTtJgVFholXTZzxXttrKdDkRzZjJsbBSVcHUuhsqOoIWwPqpFfqyYwQHwQqWfSsAagHwrxXRwerLlDdRzlLIIQqiiRwAaxXlhHnFrFfKJjsjuUzGIiIddDvlNnLgIigVLUuAaxlLVPVuPnQqqQajDgGllLmFfMSPGSElHkWwNnjrklLSsJLYQWwHhqQqGguSTtsUOhHkKUakIxRrFfXjszZKnZLsSLwWQqSvCjuUJHwtyLcClLmMGgEezUgqDlCcoOzZrRSmbBMsfFfeEwcCCcvVWFKoOFiFOoChDdKHhrRnNkHvVejJvLZzaARLlgGGkKkloOPbBpxKWwkKkcmowOoBPpOoqhgGGcMmpxXcAaRrIiBeaAKnGSZzsUWlUXOexQqsSXWzbaABZwWBOmMnuuUqqtTXwOoZCkKclVemMcSaFUuYdOoDyfFTtSsDcCGIjNnuUZMHkKIihmijHHjqQwWJjcCNnBbTtyNmMnOohaVQaHSshxoDgHfFducCFONRflmfFMLESVvJjsepPULlsSgGKJEZziUZzGgZnUJOokjHhMaAcCmmMHuAaqMtzpUIAufOHhhgPwXxcTtNnXxXENNngpfFMLnNuUeElmpPxnNGLlvAjJhzLRUBxXttTTiJIuZOYyuUZyYyYAaYcCPpNztToOHhOtTYzZAayUutZyYXAXqQNBbnxaxGKAaARXxOorbmMffhYEybYyqjapaTtsSAwaggGfPpbBFgFegBbeEtTQFfqWwmIZzNRVvVvIiyYhwyYVhCmVfFvbwWiQqinNICxXQqfFWwyYcCsSvcCVdbBhcxIirIijyLlDVvBbdaAVvAdivZzfFwWHRaCYODScCLltTARnNRrcCeEewYPEnpPNLEzlLLiqtDWArLEhHPtTBbyFBxPpwWGgfNIiyajJAYYnNynFUDduSsjriILlQqbBYFIRrMjDdncCZsMvvRBbrVfFKExkKxRYlQquUcaAvUudWCOozTVWwBresBCcpKkqvVQsSFfYNtjFfJbBICcwWiEeMmkKTtgTttPXxlLISmMsmVVKkvvVvMsxcZaCffhHFFYycLLLlkrRqcCrtTfFFMmfCuJjUBbdDoOCcEeOEdDzDdfBuUaAbGBdGNngesVCchnCczwrhssSGwfoOQrpPRRraAqTlLAaAaNoKjwyYWRRBbtTOoisSXxlLjMissCiiXZcCxGgoOkcXOoLlAabfjJEOFfGgVUCcuMFGTMvVmJIijyzZTtvOoVZzvVbBmSsleEOobTXxfPiYyJeEiIEecSMmQcGvVPzZGNHhCcOjJuEkgGzuCcmDZzvVOLloALxdDDdenjiOtJjAGgmunNmWLllVjJvRrIkKhSsayYCLltTCBbVvfqQEaHhXsSpNfFjMmJyYnxYmFfxnNXMGgTtsSyNnhHWDiIyoOYyKIiUMnWwnlXUuxBbVOUuoMluULeEmXRjGgJJguUGgxXJjwSOoVvJjpPKMJjhUuTkjcJGGgxZWwUvfiISCzEuFrtcCezNfFRrGosSOPeMOBpFQYyqzbSsSsMTdDtcCmPEeMzZmjCcduXxUFfTtOIiotTcCCJCMsJjLvVlCcEJmyUIJPpeAmMnRrzzZuJuRQqrRaArfWSsWOokKRxMbBmuaAOokKolBbLrlDdSsFfBMoWSOoxXsaAmMpPwOCcMTAbjrRJNHPpoTzWwVrRvIjZrpTWeEwmBPQQqqnCctZzTrYHhyVPpWwIiwWsSiIfUYQkOoKAvlgGwAILlBDdbFLlrRFUuBjjhtIiJjTHyFHhlLDdoLikKPpxkKXYWwaXNSFvnXxNVrYcCyayYAhHGgovVPbedqIJhHwXxWDLlbBzZBfFuUrQqaARbtTqgGQlLRrdDdXNnCcxjEeFfoOaqfkpeEPKFTtSsoJtJLGglNnmMhzXVcCMcrFwnNnGgSsImUuyYUuGgMfFPMmpMAGgdDawtTWmiYyeJjEHhnNCQqQQekfFKEIkxXEWyRrzVRrvhHLVvlUIgGiuBzDuuUFrRfJvAaTdDrlLYevDcCnwqnXlzZnNnuUcCNkdlLKkvrRDVvgIRrnNFlLVCcnxXEeNpyOqhyYrRDarcCuUoORNnsSfhHeEYJjHyYnkKeFNGgJHaAIiprRZjpPkArLlrjUGzZgEYlvVSsWOoZmVNhHkYyTtKqQEeueEUYtTMmXnEeNPpvwWdgSvVsGkKbqQqQBDFFWwtTipKWKCLlOTtTwSsWrKlzZrRPpbBPCYCcyZpPzchHEaAvSsyMmJUPAQzRUqsEDfgRroOHGhqQKCxXclLkHBbljJXjJFIwtnTtNpAazZPrxXpxXDdkNnsSQAaAPmxXfWxTtXlLwlfSsTtSUMgYvVTgGtWwhHgGqeEAGIOoiAKkxJLTyYiIZHtjKkJzqpPrRQPjtyGNcCnhHdDrRIpZzSNnxnrRlLoONXsTtsSQPWfFRuUNQZFjklLppGUjJlUujdjUiIyYsAZzaCcuUAahHEeAaQqAUhexXEFXXWwxnNnNOoruUcLbCoOlAajrRJDdYyLcBlvWCOoEeAgvVvTtxMgawWSsAuULACzZcnNEeUtCSgLlzsSZGsfWwRpeEgGPwWIieeEiIECcbEeJtTjpNnJZieQoyCcUuBbTtYlZzgGLcMzDdhkxXKHZGpPaADfFdaAsqQKuUZuUuCcqvgZhHaqQydDxIIiVvlQqPFfSJqQhfFSTUqQucjJCtBbUPpIJjeLMmIcCiiqQvZDGTtyJBvbjHhDrRWedstTdDGWwgnNeKDdlobfFBOhwWiGgIiIyGgYLzZVCupPBbNxSlLsEsjwnuUPmMyYVvdUfFCcjHuUiIrkXFYyfLyPpYlWVFokblLBBSsbKZEBPpakajJXqQGSzsSZiIsgCcOBbTCvVmOWwKkpPokPpQqdLvfFTKPpqksIXXlFfaAGgMmgwgGkKacuURrCypPDlvFghcdnNwFfzfPZqQzFughHGGVeVvyYvmAaunNUkvVtZzMfypVvZlLhuWwUGzmBiIbiYqQxXjFVuUbBEokKwdDyCxXkhhHPoYUuyYWmMAzZVWwkQqnICOowWuBfFbwWXxGgAKMGVUwsqQtTqoNLSTlLtRtTBUDeEOojJtEOoeTdrRCGgRrwnsZzSxbBJAKkNneEgWRrwRrolDPShHspfuUgGcLLDmOoHGiIFvKkedsxvVXvXvVKkRrxOoBbbMqIiBbbBGFMmVmMvnNfRrMchHMgGQpZzMyCcYnNGgvNpPpqZzqUuYWwlLPvVzlLZxFfXbeUBbaAuPpPnNLOolyYlLTyuUHhkTtUuxgcZzoOMmgHpPhLITKGgktUupvVvVPBXxTfTtRLlcCrjJKpwWmzZgwMmkKvVxXIvVDplROoeqlLdFfDQLaAwhHnZzOHhPpZLEeVtTvWxZzZQqcCnNAZzddDBXxmMigGVecJjVNUBXTxYQWGgwvVOoqysvVAYWwUujAaJlAEAataAVvTBQXxqRrbmxnYdUuFfjJTXxDOoBqQbzMsQgGbLyYVPbpPTgQTlLeUuEtRrQSoOVvNWUuPMXxJGqQgTTtLiIlJJpPCiAMPplDdbdxXeuUKeEkYyEYyjJZoOQiIHhYyWCcwGgNujJoOwWKkkyYfFSmMmMSsFuUNGgnIifYcXxfAaFiRABbjJXlObBeEozFfhuIisSoeEOUuMmiITtISBPpbEtTFMmfmdDXxinNIUuBbyWwjWwJKkGQyIiVvYKnbBvTYVvuLnNrIqwyYcCjxwhTuWwUuYBbywWUkeScuUqjlhxXgdDgfAaqRrQsovVrGgdvNgqQjUuJAaEOYypPoNnbtTtTHHROOoiIiVvUJaAxDdHQiVvGUEeuEeYyjJsSZzpuTtJldDLCVVvvLDWthRrksIfckKuoOnwAaWNnrRvItLlTtTAgzHhZbTZzrRZzgHhwyINHSfvyYtAaUHpPuatTAgQqOoPLKcCDSTeEFfiIsSFNPDdknjCRrdRriXgGwWxQeeErbKbBkBAacnKkNCOhhHHcCuJlYdzPEaAeuFsXVvxSRrfUDdwWeKkvVrRcOLFWPpEewCYtmMqnaAMmNhgGAwWaIiHxclacCUuvVAgGVXzPhUOoMwWmdoIjJuBDXxWdDqQePpEwFfeEZOnNkIXxcyFAafaaYlPyBbvXxAukKfmgIizZcZKkWwmPpaAcaSsALDTtfFXxYxFfNFfsbnNJjBqevTtLlDdLldDwWSkKYyqoIiSSsODUuIMqQwHkKajJFfjCcLlOdDGIiSsGggFvVfoGKnNKkyYJuRANHSsqDdMrRGgnNEeMibxKDXxVhHqxNAaaAnqQWwKOLlokNdDpcSYyvVedGkKIjJDrhHMaAFoOfFfwWCPpbPphHBPTtpcwWqHhKEeXxJjQqAzLmePUeEJIcCHhiDxXdgGIQqBFfsSidDcpBjgGpTMDVzZnNWRDddDVvsSeNAbSVVvLTenNEKkCcvJOoepPiIiIjJrRuSsBgGbjMhHmjJgmivOopIincCNdnNcLTtlCklCcxXovVOLRygGeSskKECQqcjJPEyYeaFfubBUMnyYrUuPpmMSsRNPpnqzZduUDOXxoeEKayYEtDWoOwdTeXxdDkZzLlrULZzIigPpVvGGgwWlNrRJhHjDZzWPiIUuUmyyYHhctfCVOovKVvfbuUjJBFjueEQEeqSdDjUmGbBgGTteLlEJjgUmMHTthEiqQnNTeVvoQqdiIDDdfBbrRnMmxLPplCbBcCZybYaBRukKXLRkFfKryQmiItDdZzsSsSiIFfRulaALTDPpRfTBOohHSXxgGfFZzBpfzZXxwPpdNwPnNpbBWvBbdXxfFDnSrRsRsSrZKkzXEexPpfFOaAQqFZWwLTtlWhGgAyCiIFDdZzbCcPcCpfKzZdcrRByYbxAaznNZpYyQdkvVTUDtdJbBDQqNnValLlLVvAtBbIgGoOiTvdjhHDbEeUuCcKznrHhQSJtTMYyNnmPTrRBbPpqQeWEKPpWNnQLOoPpzicAXxzlBywgDdOoQZKkYqDdQvVvVvVPRrpPZVPgmMfsSFGSjJcCiSEeCcdIpZGVNhqnNQuUHkKrmCcgAahMmHGZRrzmMMeENsSZzjfFRkKknAsiDSmTMTtmLnNfdDIicCwvVfAnaAfFNmpPHhnmFKWUYyuRroOFfwCcTtrBbRgPptTJQDlokbUearRJjjAkMmKlIiwiIWKkLaJgdDjJTLlXiIBdKrQsZzbmMzpPZBSUuYyCcpjOoTsQqSogGOgceeEnNwrvVRYyTtWJqhOojJIYyvvtJjdDUOgxXrREhRrMVvmHGsSEesgGSgQiIPJhHYwHbsSBHBhHuLlgGijLlEeJXTtcClLZzXbaAHrRhFEesTtpPzRUMmQZqQDQqgGYVvyCGgadDBbAXxNnhtrkSmMsIzPPpBbDdoNBbnBbNvMmVnfUHhuFOoOpQqRgNgnEGgeNKkjEkKlrKkqbBQcCRzZqoOQLeotohVTmMtEsuUHhomMTZzcBrCcRfRYeEyDBbdrQgGaIuUqQpPhHXxivVQhHeEJiHFavVMKVvFeEuUlASsYkiGzLlkEKkeOoAuoDdQyJbSuUscziIwfFJgGLWQdDNnVvqrRyYymKkZzWwMFHiInYyTvVXxtTtfkKFUukeEKyYIijiSbBlwWGgRTcCpIqmMQvViPOyhsSsSHqeEQYyYARrXxauUHhrRKkGmMgZwWBbZCcIYZIiLlHVmMvnFFDpPtMoODVvdMUVvuQqlmfhHFepPGvVNnRrEegFnNcChHnNfNnOhehHETtHoHUQebIixeEEvVLBYyTtefhmMFCcfrRlLuUTTtAzZvTtrxXdVCQqcHhvPpDeWwCcHhEgACGgjJFwWecCBbEfMYWwwJjLFflZbBjJwWWfFTtNhHnwtTwWfIoFVVWXJzZuGYlLZzLlyeEpPgQqUDdjfYCGgTtIZzKyYDNnvVkKfblaAhEFtiwVvWIUuZtEemMVvYytEeTTkpPlLRAarjszZYyzNgJjGpPgFVSDLloOIinNRrloOTtJjbnNkKBVdDXwWNSsphuDdUHkPpBbnTZFrVdDfCcFvCcbZreoTEemMwWJeEjEZVvsSAaSFNnfyYzLpPWzqHoOhuUQecgGfKkFLWaARrIOoxXyswWxXqQpNIisBswWAaRrchHCSbXErRwXxWeiIXrRQcxGAusSspyYhHMmPBbIkvVKGgZzlLvVuizkKvgQcJHhhHjRrymMYEdDeCOZQvVdKkDqkBbswmMWSNnZjJuUFlIuCcFWwvVfUpPiaPaOZBWwbGgzQiIqjmLlLIbBYVvyAauiIdDjpPJDdiSatTANrtkKvmEeuUiIQqVhZqQkgGjmMJwrAuUaFfZIizYytxrtTRrCXcCjJBbsrhKJjkHTuURrtjZzEPZhHzpalLcCTuUQVvVIpYWAawfFefiuUIFZPpzsSEFZgGwiIWzBAtWEewpFHhfPKDvGCcvVOXxoTJjezZPpEHVvfFPuUnZzgVvTtamqQiFYsUmHhsYRryJWwIjsSjJKXxOueEUokKENOQqoaAnZzIRsSlrRWpPAawqQPpLEWwNnbBcCwVOaAoOozZvVnqoOIitJudiIUALlSpaAaWYysSmNXyYxiIjJuZGgaAEaTVNnuUAaNnBsvVZGgyYqQwpPiwWAaIDBbCcdQqcCDxXdqQGkKsSmMkXOoWUumMxXeEJfIKTmMuUxfIiMVvMmyYCcoBVvPppPbOVAhEcCeLqGOceEOonCMpjJkKTbBtJDDLwJEewWiFlLDdXxzfCJjYlLXUlgGOoDdkgGKhAaZiIzOvUuRrQqrQGCTtcKIQqihtTiIgHhGBbHCcMKkGSeEFfjJsSsSsCyChWwHcUaNCISsiuDaWRTFbXhHIiwLlFYyDYHhydfLsqQrRFxUumKrRmzwDdbfJjUQquKkFXxdDLlRrWwNLbRYyXlLTMpPpPQqmpPCcrsWwrRSggGwskKmMbBgMmwWwWGHhSiIrRWwmZzMXxWGsFfptppNEZeuUEPpfFpqLlEEONUuFqLTtAalQfsHedlmMDRCcLmMIiXgGuXxUCoOWkKIiZNuZxXzDdSsYKfFMmQqkzZRZrRzryHBlSsRQhxXHGgKQqkMmSBHQqdDOasSMmAohVRrvtTTtIwWwWiwdDSsdEeHZAatFfWgGwTzElZJjVlbNnwdgmKkMydkKDYuUyYGvgGkKVEekKrnNRCjJcAamsSMDgKkhPRXxVjaKKoOPHhXxnsEeQqfTKkELlFgGdBLQSAaszpFdDVQxXqvVQMQqeEVUuOoQWfciICEeFfNnGbbBBduOofFFsSBbqQrRfNBbnUnCZzczjJjLplLdDquNnURrsSdAxuUXtTaDtrRTKntqQUuTNknHEkKFZzfSrXxMSrRsSdcPpbmMkKTtBbgGkHEehzZGscCBiIbjJwlLIiWPpSNnIwWieDipCOtjJJjVTtUuLWwlrRLBblWMsruHLlFfhniIkSsmMUPdDZzwBbNFfSWEefFtVvfFzZBbTdDpKBsSmMsqPpWTCctqKkQSBbBqNnfDdFmYymMcsTtyYbBskKuUQrNKknyqOfFouUBxBJcCkKSUYTtyTQHTHhtXxATtUTtFfoORXxuiIUaeMhHHbzZPqXfCcvVgGFrhjJOaVdkKXxrkdOoDpPLfBbnNFeQqoOxeTdbBDtjlEIWSswiZQZzqPKkXyYGiIgtTQLlqxIifWeEwTtiIsSoOFGDdSQqsVvuNTtFXjJxgGBNAaYeEExXlLPpYyHPphHpOoPSTKBbxXzZfHGEFfemFfBjSOaAQqajJsSjZqQBblLLlzdDhHIiMDiDAlEyYtsSRoIpfFrnNjJRPlEDYWgGwFTtpPgcKkFfCGjJnCPasSALtTVvfFnkTubcCBipgCfuUFcGSslLVvFAhHfFazZfFfFfAdNnvTtNoQqzZDdOjCcJAdBbqQnNdDDYyODNdoODndxzQqZBvPxXYyGgEepVbLXxDdZdGVCQwWtTqcoDYzukAEeaKATHhVsSoOydKLlkYyOoLGgSUuqkKQsJjWpgGXfFxJjlxYyRMjJqWwmMyshalGgLAarRAkKHfWwrAtGXxbaVvAMmaTtgdDGWhBbHwoOAFjPpJfEehHGgVAIGoVBevVZzENncCLlpUsSsSuiIPMmHhTtCuUnpPpzQqZipoOcczZCLlYbBypDyiIqQRLlrOocCBSqQqWwYmMEeyylLYjfpyYPztcCyOoYgGTyaAYbBIzjIXnNxRVvrRIiiiwWIPpgTHrRxUrRuHZzKkfcCFhHhpPyYNnnNjvvVSsVSsOoRSsrJHDdLrRlfFiINnUjcpPCHqQbBGAaGgMdDAFcCvVhHfGpPgaxXTtsACsSsScjJjJsSaXxPpqHXCcwkKsmMSsIiWnNwMmssJcCdDJIiAatTjGTtcRrtuUUiRgiIlLGWLlsSoOQqoOwrJJjdfHXIzZuGMPpmgkfTrRPIiSsiYyIUurRHhJvcCeEVseuiIvIMcCnNmgCxXcDdVvgXxGWDtcCTOodFfCMXpfiwqYjJOornNkthHhBbHmOoMKKBbnfLEeaAovFfGghHNnlLweEjvVmMHhwWgGcbBCMmwWMUpPuljmMJBbJjLLjvVhtTHMmJmGgXMpPmgZAFSsHhfoOdFfDnmkKjhHJZPpBwWyYEeOrAaRdXUudDqQIistiIYyTSRcCrsFIpPpPTTPBZzZzpEefKkxsSXFRrWwnpPEeTFftlqQOosdDSZzLImMiSsdokKOIOJluUWnGIxXjzWwcPpBbFfCOQPMmpiIHzZgABIioECwmMEeWjJoAJjaoxXmUUuqbTLWwKjJkltbuUGgBbBgVvhHWxLGCcOoggsSLlGeaKCQJjNqRRGgQqlqQiagGUBbFsiEeIuRQqgaTtAPpMEeVQPpfokKpXxfFcCbuMhLVzZvWwlVKbBkNnPHQqzseESiSCGgPsfFsWwSYyJhlIiLiIrRHjuwWUfsgGEUuvVAsPkKaGAaqQQqgAWwpiISTtLlkaAKTDdHhNnSoBbYlLGLlkKgQvVEpUEeyYUqQuoOrRsJjHhiISuUpPyEeYQFfquNVqQvvjwWJOqydDYpPDdYDdwLqurSkKEMyYQnpKfFHhzZkibxXBIyYJCcjJhEeGrMZizStGSsdDOOIQqqkvVsiKBpPbVakKgGIXxijJTtXFfUuPvVxhZnNHcbBsSChGbBlLNRrnDdjUuoOmMcpqhtDzwYsSfJjPOEeksOoofMmFOAKNnkjJaRegGEPocCOMtxXeEEeiJxXCXxcxhnNtissSdDsJmMBjfpPVvVvRTzHhZbBQqzZOoFfOAaRrBbeiIEfFBRrkJjKZgOosSGGShHsDdoRrOSsRrrfaARpxxXXJjPpPMBSqQNFfnFqsSyYNZGEkKLlDmMEeqQJjgGdDpPBhHbKksBbGQqvTtgMmGozZkKzZAPkKlLpRrFhhHHfLlIKSsoMgGgGtTnNmvkKLIpPBbinNmJXmXxOfFhfFCcfLtuUTrmMwWRlgrswWlLlLSYyKMmIiRrsSSskYgYJjyHhgGGeEprRPpErRePSsoOjJAaSeEHhsDdfAaFRWXEBbyDMmjQqJdLlYmMRhHxbBkcCZzkhHKLlcCBbestSsAKkgGMmDnNSsqQlLdaxPyYpFfXpWwBVvxypPYQyEeJjQqwWNnYEeJjAnAiKseErRdrWwvRrhHyGJNEeyYCZxXzHhpKkIiqQEerxXihHxiIXpuUYcCoOyaAWVPpxWwQjJHhqSsNYyDgGYysrRmwWwWvkDdFHdDhGgQqbBnnZWOQqowTLSVYGcLJOoLlbCXxyRyHrXxTNjCcHhJjtTgGhoOdKkrieEIDdRClLAGgTlLuUtaLOolrRJjoOyPpBuKtzZqQTUpPpPukUYSnYyraARIiKkNzZsgFfMfFmRrRfxyWwYAXxabUuPQqfFZdWlLFmwaAaApKkPWKZzURrkAaeiIETMmMuUTtmtxXHhAdaMmfOoFYseTXxtUubqQtTFWOowfgoOGUupPLliKkYDdysQqoNnOrRcCbpPXaAxVvBDHhoOZhHcCzSsqdDQvxsCQVvnRrNZcOBbqTONnXRrPpOoxiIaAJjUBbsSUuNLLllFfoXxOGcChHcMmLtTeRrLlGEeglZzpPNisSITNntvVtUuTvbuFfhdqQkYykKKXxDejJjjJoQqHXNUuGXtNnaJjeMSdDeEgquUEcgcCjhHQqKoOJmjJCcZysSYlOcCoHhLSeEaAOfxXFoxXWwzZPfMmwWQqfFaAIioOEeufFGgFfcXGgxCEZkKVLFfyYlUuvtTIiGgiOkKUrnkKNlLIuUYmMywTtHhKnULluNkdmfFdqIidYyDQwWeEoDMMOOaAWwsSoeMWwDddDDdxXIizZrRJjavVENnehHvHhbBKPIiUuTIiWCcwWHhuqQMmyYIzZysSYiRrmFcCfFfRrMcKhHkyziDdIyJjJFBXxblLBbDdFsvVimMgcCGCOWwBbRFfeVvEYymeEQqMQqiIUuHhkWcCTtuUsSrRmUuMVvxVvfFXTgPpxXvVsUuSRrRShHHPmyYMpEeLlrlLiTteEeXxwMtXxsEexXqDdUuUuMmGgZzQhhHNkUpPcXNnxdDCsSwoOWjIiShHsgKjoOwWmMUXGgxuZzJjvVzkKnISUuMxAaXmsiliPwGtTgWmMwWJKkkpPxmMXqQEKXxXxfenNEFkMmelLvIiwgGyYJjWHhwyhTtHoOUTDsxXmFfaFfCcPpsBbSFaSVvsAPpKkxXyYtTiPOopJQqoCqQcSsVJjWwjJYyWQqwPppGgPNfFZznPjJpywDdcCTtOokKLlJwmMbBcrRCzRtTpPAarZSyYYyeTMmqbBZzhHQqHhdKkDychIiHLyYJnGdNQqnccCCDgJiIfiUXTttWwKkgGtTStTsXrRxmlLMyLPhHplJrBbtTZzRGjJlIFfioOcqQCLlSsLaNnAcCmxXMJjCHZzNncwVYyoOGPbBnNBhCcHtTzWwYyZzZHTthlLqQCXyYylLbxXBgGzZclCxXohHOnNbGhoOwYsSCBbYyXCBLlwWpdDPFfbcCAhHaFcpyYPiHhICFeEEzZcCdqQPmWwBblLMAaeEgGtlazZeEwWrrRcjJCnMmMmQqAaTUuEesSteEiuUsSxXPpIOhDdHoLHKYyWaDFfdAcCNnnNQgtuUTyHhYkZBNrRxXAaRrjJBbtTCcOokKnUuQqZzINyYuzZhkKHNnWwuUrcCRUxXGLlEeoOGFPpfwWQrlLRnRrNlNnxXsSLcqMNnmQnZxrRQqIHhiIiTtXPZzWqQwKfFLTdziLlDdLUulIWXxwweEbBWMmZDdmMDFnfFKhkKHWwIigMjJqhHPnJjxkKXdMmyYmWfFCWwceECcqTtRUuRrmMPjsSJXximdDsYwWyglZkKLUulzKkFkbBLYyxdvVuUKkDIidDSliILsnWcCwNuUXohHjNnJqQNlaANVvnDEnNvVJjQqPpmVoOvyaAAlYyLacCNnnPXFCcTbBIitfrcCexXElLvVweEZkuyTtjHMmkmMrRMmcnXtxXTBbsSxwWZzdIiEiIAaHaAhHJlLUujWvVbBhaOvVLlBbIiSspPopTtPcCcCBbVmMJjvEHyuUxXIiJzzZkKAauUtTZnBEedDbMWQqwmsQlLqTtgPpdDKkGTIiccamVvMNjAtToONxXBbCcnaAtTHlsSLmMCcjuUJHhpPRsSrTtBbAcxXQqdDCEepPayngGNYeEskbBRrRBbILlNsPpSXJjvVxCuhDdzZuUwfrRBUuYybAIAaivVcCGgaGTtgxTtXfvnNVpSsGPpHhgPfFmMFkKmtxXkKfxXMgkKHjJhGzZaAmGtNOVvCcrkQTRrtqKdDLltTeETIDAOoadDnnNNPpdiUWqayTtYAkKTtmMkKfFUJyYwAaJPBFXlLGTnNlLuUtYypELleewWaAjJYzZysVkpcCPlLqaAsoOkBbrJjRKMscCjJSiGgImSoOuVvmMCcjYqgjimyYMILlJMmEebRrXVvxiPpuUIJjYyPYypIiYnNPIipdQqDyoOVKJjsSkvGgOobWwBVEeFfmMIBbXFfDrRKvDdkyYKZzdDSiIOoWEBbewQgoOBKkaAoskKSFfEaBbAoOluUtTTkKthrgGRwzZWAbBalyYVMZJjztdDXXxxTmfFSsSsaaAoOrRtTVvHHhgGRriIhAKFfXxqQkdDOolLEeTtWRfKkFrwvuUvzocCODcCceECdXxsSYbBZzXxmMGgkKTqdDQlgAOoJjaKuhSsEeDdHKkFnCcQqhNnsSoqJovVNnVvOzZdDjJMKkqQkKIizZXpCqIiQyYtTjKkJjJqjJIIimaAMSsqCcQEeRmMWwmMSjoOCsScsFfSBbAaoIiOIljJLiJGgAadcCAaPoOoytXyYjJxUUugGuUNnnDdNIRJNdDyYnrLJjlfCcFLlAaMmRHhBbYxXyYdkwWWwCuUcLlJjEegGrjgGRrCBbJCRrMDWwyVfAaFRrvLXJjxmMkgoVxVMmEnDTterHhVvpyYBxXtdDagGJFfjAHhTtwWUwdDWnNyOovHhVTmMbzjJZBnjJiIPRrCctTaAUuICcipDdjWwgGjZzrTOotIiOZzoWwEeXnNxMmBQgGjJOxXWwRodDYyOrCKkuUgAamqBbewwSsTtGiuWwUvEgGFAapPQqiIfMjgAaGbBWwsSFfQZXxsSOoZzWDdMYKkNnpPXdDlLUVvuhBbRruUDDLlzZddsSxXwWjAaJEeBgGbfFGgzZHMmYykKZlLGgXxsevVaAvVwWUuWwaAPhHWwjJhHJxXiiIIjpxupPUPAapRrZhHSsGgvVzaAXItThAaKktTxXjjXxJUFvVuUEewWiIuUGakKjJdDXShHCcjfGgIYSsTtyiQqFJGNngsGeEMdvVDmgoIYyJjUuiPrRpCchgTtqQGHUusacjdDJCcsSuUpPyYjJVvMcKklLQqQaAnNsJjSoZzOLlzZxXqQqvVRYtbAaBbBTyuUmMgGKGglLciznNZICdDuUkKNngGKjJdDHhkBUuiQwWfFmMcIbBXxiOcCgxXsSqQrzZLfFlPpPpmMAEeubBzZGfnNaMmAZSsYEdBbDSIiBnUumMNMmbsyVVvpTtPwWvYzqQnAuRryYHhUzZOojWdDNtTnPpuUwAaIiZOoZzLlQqbbBrRNntaAqQTvbBqbBKkQGgOoVqgpkhHKbgcCGdDZvVWwWwsKkdzZMxXUuzZvqmMQVUumDdJjOqQiIoQEelLhfFHeErRCPpcqaAaAfUuUuFTVdDHqQhAauUvKkpIiPcjJCLlJcCJjwyYGgrRRbmxGgvVXcCoOyYxXGQFfDOZzRrlKrRkFfEnNeNIirGgRnxGgqQvQqVkKQmxvvVcEemMCAauUxXSNnnNLzZlfFgHPphrRPpGgvQqVGMmjJXvVxeEaqQAsrRTODdoIieQqbBSsEoOtsTtSIeQqHqLkVvKcCnTtCcfOoFNzZSkKpPgGdVvTVvDUcCudrRtbBGxXgpPDnNdTtrEeNCcoOlEeeELUGgWwnNiUuIzlyYLLlYyCBblLNqQnOcWHhwaACrRoOopPVvdnNDbNnBzEeqQCuUDdeEVvcZNncTttzZTMDdmiIQXMUumxzZtTgGVXxDdvVeEWwfMUucCbBnUOgGoiIuwWUAGRtBbTSsKZzQqCcWwKkkGZzgteElrRiAaIZzRMmrQqMJjJjumMUmHhjJwWmMSjdDpYypPfFyYzZkMKkKMmkmkKXCcRrxLuHhvVUPpPpAafYHlLhpPdAaDPoOlGgLlLgCpJjPcrRGOopRQqeEmMjJEKXxkebBDDfFyYdZjJJIijdDzGgMmKkKkrRvICcIiiVGgwZDdztxXxXNnBOoSZzmMpyYPbBSDnEeyKkOUXxtRruUTzZupPoYycCQqHhHgGnNMmLlNnMyYAaGgnNmAQqWwjJaJkKikKIcSEeoVvOLlsLlQPpqfFuUYyxyYiJjIqQXCjyYHoOvVvVkKhUuyPpeEIiRrUtTOovVuMQQqqQqmWwcClSuUwbBRCLleoOEcfYnNyqQBBbCcbfFaAyqdiItTDQYDdnXxNiLlOoIIiJuUuRroxXEeOrRowWVvOqQTeEtpgGoZQSsqXxzeEaAKLYylqQVxXvhsSsSpWFfwiUuIbyYBPdDSsTtnNGgHkKkKWwiIkFfgGPUupvqQsSAjJaYyVrsSDdRwixXIkwWOMmRrsSSsWwuUwGkKgCcWGgZQtjUuJTqFTtlyYLcgGCPUFfupGZHjSOoLlrRhHsjgGwWWwtTrRjKzZkJEehSiIIiSxXsJjZzkKEelYyLVvNLlhauUAHeEiInsHkKHNWDdwnhfFPDdIiDdpQNkKnbbBBqPoOKiiGqQCcLlgzZDdrRGCcgtWwqRrQjJLwMtwWJjcpPCcCTgGhCcJjHniIlLNJZzjmWDSsqQNndqQMmmMqNlLnEeNnTyYuUbeEBMWwmdeEDNnYFfRrRryHhzZPpvVGgGDEYSsyedsShHSsVWwAaJjmeEMiFftTyZzjCJwWdjKkJDKvtsSTVhDdKxFEefXkqQHpFfRrMfFlLmOnNoPJtTjNvVnaYcCrRNnLlFmeEMfTlLIvByLlYuUgGGJxdDXjbLlBwWgbzCJjcZVrRXxOoeEBiIbcBbCDrRaIYgiffNaAnGZzeMmEJaqUuQBxXUGwWwwWqQWyYJeEjqjmPUmMsSSsUEeiviIjJVBbDFfdrzoOwqQpLlPIDdiWwKkWWGgwxXXuUxqQnCctThIHhiZzNjJeyYEJjBbBUUOoqQsoOSuUuvwWYyOocCpPVjJLlcxXCEehHJKKkuULlhHBOobkQqRhHDdGyYwWGguUgxXbZzBPCckKFMmftTgGWLmRrmMQqBbLpPCcOouzZUzZlMNYAamMyJjKgZzYyYyHhvVdALllLaDtnUurKkRdDNqQkKvVnDdtXxTBfaAzUuZzZKkFwWWVPENnqQqwWneEQWwMbBfFvVEywWoOYvViIeRrlLVvFfRwlLWXiUuHeEhlLEerxDVuUvdXlhHtTRrLRIbBqQisdrhHRKkNngXrRsbBSRrmMkKbBWwnaAhHDtTXxezRrlBMmAazUrRurRhjJHZdDbUarEPpebBBdDbcEeFfnNhtTexXEXxSsXxaAqDdQstUuTPpSfFqQjMmhHjJGgWwYyYyJvSsOAaorRGiEeeDlLKsSJjMmkyYdPpxXEUmMGgpKkZzgkKgWwGNdrRDLlJjnqQGOtTopPyaAqQgGaAYAYGgyYyZJjdDpPzUXxzVvlLZAbBajTtJmMEeuLaAJjLIuUillTBbtTaAtSsjfFJHFfPpEaAeAlLOOzZLlhHooOotapPKjJkUwWuMmtTCVvIisSQqSaAsNzXvOomMxXxGgalLAlLbKkBXDyYLqMmQHDSsdSsvyYVOJjohoZqQIitxXaAxXEcCuRrUcCbBeDdLlBSsbPpBbKkYNYeqQEqQynJjyhxXHHYytTWiIwYyWwZiIrRSszKFfZaAAcCapKkPlSFfXxOlLuUsHhiHhkKvVCcVCaDdzZhHrRkKfFINxXnWwiIXxivVvVAdDceEvIxEeSsFOofXxfNnFqQkKDKMKkmgGkdRSUuPpiAGBbgwgGDdSstTKhHsSknoOeENtnNTKkDsnNSdWmpPMBUqQLbKkBNnOotTtrRMmLllLTHhUHfFhbBIiEeCcOTLZRpPIJaaAjJeEAjuIWwiICAaciUCBLQJjKKkQqkhHqpPlbYWwyWKkyYEewMABbVvaEemMbBGbBJxXjgRrAQMXxmpPQqDVvEeHhvVdqyYFYyfaGgJQqjvJjVVvgBuUKkbfFPpdDhHmMGDAYyAaaXxxETyYtexXxoOxXWwRrHhTngGNLlYylLuUtnNRrNnXolLieoUuOLlzZEAamMmBbeENbByYnFfYyYXxyMfFxXIcCLfFpPJveEMsSYZzyRrGgIiTWwGOoMmgOocCNoRrOHhnCccgNKkcRrJjEeCnGNMmqQsSNnnJjwpYyPNnndDdAaDPCLgGlqQWhHwtTqxWDdhHwXjjJRrJFfyYUuNnqQCFfnNcQqQVvqOoqCcYyQCeyYAaQaAqEedUdsSDaAfFupPrRqQHhDEHhvaAajsSJAKkVJjxXGgcVvkKVVUuPpGPpxhRrHkKvVKMmMmLlfFkqTpcAaAaCHhPcCGglLVvtvrRVvHhrRVLlcgGXZTtzxyYIiCFfARriIaZzTtHhuUZuUuuUUTYytjQYyqJJAjCclLZzZzxXLlvwWhhHMmHNnpfFDdPVJjHhtTIaxXSsAOoiPpsSwyYxkKXvVWrSEesRkKOwKCjJBbzZIhHTbByLlYsSjTtTtfKkFwWuYyPpwWmMeEXxeEvVTtDdKkygNnGvVvVsSaZBbzAiIHhQCcqEhIJjilLlkEeWJjwXxoOOobBvVvVJjKVKkYyVvwqwWQgGdDvNnVHiIhPpgWLlGgTJjtwpgGPFQqfUSuWwuOotTpPhHUukwWAaMSsxXcCyYmQCcNnqOpPowWsRrSvVFIifaAbBrncCVvSsNgGfOoFnNRiIKKfFkJjsSHhCcHhOopPcEeuUCYFfYyNnPpdDyvVjPqQpxrRXhFfHhXxIiHQqhHPmNnaAzvVdDZMoOnNpomMZzTUutuDrRdIHhiZzUTfFPprRtpPdDZkKmMzNnaLlsSWwAuYyVvrRNnUVUuviIsrRzXxEeZqgGOjJCcoLlNneEpPCcpPRrWwpPqqQXxIiQLlelsSeELwWXxlbdDOyKkYmMsMmiISoBLfpYlLyVvPFoOjiIJQagGARmWwiTtqOoQIvSsjJcMmCFAawBbWnNiIKkOvVPklLKbKkBpoZxdDXqQlLzVsSvBZzBbtTUuYmMydWwXxDnYpPyxXNTPDdpzZzZiIbBVvIiAatqQOoVveErbCVvFfcBRbRZzOoreEiFfaNnTtAUuhmFfMFfNnrRZzYyHIJJjjpneENxXjlLwWJeEWHhKkwbhjJbBoCcZwWzZzOlLyYHmMBVJjkIiKbBveSseAWwaiIQIiqGgJjWwSskzZolLHhOaAkKEeoOhvVxXHVgGvOVvovDwfWKkwFuUkKkkKjJtTQqwVMmUulLvPpvnRrNTtNnIGtTgesSEGgCgGDdrRhWwHciIibByYaAQqHSshDdJCcjVOoWCaAIbBircCRnCXxxXcNcjYyfFUuDlLXxdwWJqjMmJYStTsCcTtDEedbBIiAapPEekKQqNnxjJXJjrRyhrRHTbBmMpRPCcZzpeEfFrTTNnttfFPfFEefFxXNAaTtdnNDaAnCcjJKkPgGpWwdjJDDLldtTGgJjrRGgGgFfWKkkKwZzgSRrgGcCsldmMDLxXmMqQmMeETWwUzZeEuBbGvVbBuUgQqOxxXXdDPXxFfmdDMpWCcwGgCcoKwWLldCcDnNkKxXkUutpPnNeEpoOJjPLlcCQWwBbkpQqmTtMPEeMmzZveEVFfMmXmMxqQeEArRQqaqSvVszSYyyYsEeErRVxoOXvMbzZBecCEYyGgDdvVmuxXUPxXYypeZzFDaGgIiAmBbMcCdFfXxPpdJjDfoOrRKnNkchHFLlfCSIiDdPpAaHxXZUuMmBbffEekDdKPpFIiKkYyHelLEhqrRQxmMjCczfFZXxqJjTCctQnNQIilLqmTuUtfQiIqgGFMHMFWwfWwBbkKmXKmMkNnxXxhmdDdDPpMJjEfFTtedDQqheEjJvtjJBbTVPcCphHmlxXLNDvVdttTTnMNnqQHtTtTXDdxiFfXxIEeQqclYyLvVPCcpChHobBOxBIibXdDyDdjDdJveEVKYyCylLYKkUuCPbBpoOcJmMjYybLPQaAqplBTtYyUuoOBEeIiUBbsSZzNnEerRxOIioXXxKdDRrxXkrRKkHbQqBhkGuUgjJNUunKPcCyoOYXqWNnwQxVvZzxMmYyGjJglwWSHhtTsLJjvVTeEbjJfFbBBuPpUGgmMJjtggGmAZzaMClLcqQwCcWuULlBbTGxXOoglLpPtzoOzZZGQqaxXAQqmyYMkKTqXxkKQyBbYQqsSJbQqBqQUIiuuUXMbBwWjJmvVRRrgQOoYyyYqUDZZzlLzvbBaAWwVTtsSNnXBGgmCchzZHBbMbWwBbwEeLlQyPpEeYqfFOoHhocCpPdDzOoIkHhMmKxXYyiZODdvVkKojJOjCcGgJLlULNnxXOHhomqkKQzzZZlFfLQWwqWwqQCNnBblLbBaRrAcOcCyYoDZzPpeElLdZzjJQHhqhHwWeFfUedDEjcCJzZujPpvrRVdcCDryYRZzlLoOJKfFYyHhvVeujJGgUHhnrGwbNnBWgxXRIhHVsSFtffFAaNnGRrnNRLsjJSlCcrRrgbBtTFgGhHTlmMSsLrRsHhAaSaAflOowgFqQfCchzZlqQLvVApPgGXxgUJjuGgGDdaibBiIlLvTmMmpPMzZoDdOmMtrRsoOSpRZzvVryYPdDSfFsDdpPqdOoDwWQikKIvKTtuUkVhkeoOEKdDHPpVvSwWszZYECcTtgGyYeyYytQqTUurTiIPkKeEhmMHpdDtRJFfBEebiIjlJjZzdAaDMmcChRWSswrHLIiJAajAaSNcDNndCnsIBbiKkmMrLlRrRDdVqQRrcCMmoOlLfSWwsHqQSsbBAaZzbBPpGgIiRreuUqXxQNnXxEhBMSsmaOoxXiIWwYybBvVARrVZzvHYyXxhTtqXxgGQRrkfFJjaAJjKuURgGMmrKktTmMcCFfsCcSMmLhCcqQHXxlbRrTtNnYuUjJTtCcyUQqQqCiIcuCiIsSEbBwWeuUtHhTLZcVvCHZzVvrRVJjvhadDNnbPBxXbHhRrYyVvpwWazZAbBHhhHskaAKSDtTdBXxAQkKcCqbBxXxbBkKXrRdDSiYyIDdswWbbBxrRXiItIijVvUupPcCeEmMhHJkKAauUDkKoOdghgGHyoOoOYsSHOohmMRrbBHLeElbTtIiBhvUuVGFftTgSQqWwQtTZzqKBbLlkMjJfrRFmkAaTtKzZpQGoOOogqdDPjJpPfsSZzFHhrRPpPpyYsSh +kLltgGTKFjdDpPkKcCJjJhHfmMAjJasSFfHEesYMmTtrRBjJmcCMbDdmMyOoUuGLrRlJeEMmxtTXjKzRroOmpjJqVvQPMZAXoOxeEZtTzLYyqQnNlMmafFLlRrkEeNkKtTngGlOoLXxtTLDdBblRCcqQrFfLQAaqeEZMgGbBOoFfyTtIizZuUsSYmbzTiItQqOouUGgZBCcsSHhxXIrOoRizlUuZjJefFCcEgGMmMmRrXlLyYcCxvVCcyYcCZhHzyYWwcXxlLCeECcOCcozHnYyNftTJjFSsrRTtqQSFfFfYxXysSsrMKkmeeEEdDRHhNCcgGnQqiIqQLlkKbPpBQOlDdLoqhjJtzZfFiIVvTMJjSgGsmyGPpgUhHuoIzZiOYkKPpUuqBbQcHhCTiZrRLJEkKuUejlTNiInNntdDxXzAauUOLkKloIdDzuUjJvpPViIbBiOGgoIJnNFfYyjbBZWwSsdDsSUuBUCnXxNgGcKJjkCcuUWwiIcCCcDdsSDUumMdSSuUPpyaUuqmMQAYkFfnNKMmsCgGVvyYJjcnNlLVeEvEesQqvVEMmeWMmwBbyvVYUuavJjVTtAJCczcCZgGcYyCjJEejuupPUStTsPphHgGafFAvVGgzWwAafiIygGUupsSPYfFFLlzrRZFaeEAWjJTXWwxFftcCjJfFkYyKwuUJKkfFBbMnNmIPlLZyYzzZpijnlLwWNLlfGUuTtglHFvVfHhhYywbBvVVLlsSvKeEoOkZzYyZzWGxXgzZBUgGaAvVuCwWNncjJbDdQqGgAatTFAaftLsLNnuJjUlfFSPpmMfFFflmlLMThFfXxHUuEcCrRXxezZrnNRsSWwWwZUuzFfTtiIaAvaOoAVGPpRdDrgWdDtSsGgaAfFopPhHVvOksBbSKOntTLlNjJKkhHGEeGgjtTaMyYmPpAJuUHhZGgzvVDdmMNnFCcfgzZgxXRHhrGzZOovVcLlCUuoCDdchHOuUsSvVNAanoTcCwUuchVIivHFcCuUHzZFfCcTCcthykKYXxUuzZOHhoIsSiVvDFXxIMmifmdDMdIbBNReEgGrrFRrcCfkKRnNnNgGnoOxyYRrXAjSsJoOgSsGgGAawWazyvrRtTVYvVLfFtEeSsiIHhiIqQTlzCcdDhHuUuUuUZRrZVDdWwQJAajqvHGoONnQqWyYLeENWcCwpPybByvxXVnNgGYYOoQBbqifFiIlLgGImsSIiMGgnjJVvGNEenIigeEnNvGgXgGhHKkXIiEhHvVeFfDdxxxXzGgZpCPpcXxCcGgRrliILZzBbCqQGgbBZOoYyiIhHUYyuLuUlGZzgzcPpPeRrEOoRryYbwWBYyrRlLbioOIeEBiZzaAaANsCcjJVvSEkAaEMaAAalCDdcuNnnpPWwNkaADdKCfJjFcpjJIiPWAGgawWAaVZzzlLXxZHhvxRrdcCRrYsSyjJmBbMufFdDWwLfFYyvVlInNpQgGZzqPyYifGggGFSvVTorROtEeDdajJJjNnAjBbiINncCuhHUxXJsHZzrROodCcDnNgQqGtBbThRhHrGBMmbrxKtTkswWSJntTNgGOHhouwWUzZjzugGdDzKkrKkRZtTgGhHUeEZerRmMFfZvVvVzJjdDWwjoOvVJEhHQqLljnNtXyYLlENnbBeyYTQqtmIiHKkhMMmpuQKaAkqbyYckMsSmuUMmxpPXOkKwWoQqYdrRvVDgGNnJOoVvkCcWwKXSuUdDsgGnNzZwWoOPpFzhEetFfvsSVdDMdBbtTDJjmiICTtcTITtpPVvcCiZwWFfnNlPpLFfCulLUcfFQwWwDdXxWKqlLaCcZMmzGgAUukzZRGgzZcCJjsSyWIioOwYCmMcrjFRrSsdDjPzZpJpPfJqQZzKRUZziIurcCsSaAeTttrRTEjJlOoLYmMuUPpZzyzWwZGGsSgvVxUuTyDdYtpPoOXeEMOomSsZLKsSklnNbAlLCcJiIjaBmMoOOodDHbRrocCOoOaiIABhLoBbOXxVvlgbLlBGtNnTExXWfFnNwbBecCELlhHkqjJVvqQQKezZxXzZUuaAzHhcCWwtvVhkKHQoOaAYbByXxMmdQqDdbBJjDXxjwWJlLxXhHiIALAKOokJjoOalZzcCvVIiawWKcCgGWUYHhyvVaNbIiBnAoOrRuVsSvbBJjdfFuYyFfUoOzWwjaAlLYyhHJZqQJoOjnNkKeRFfriTtIHhEVtTKZzhHEenNrRRrczZbBiIIieyYEecCEGgjJJjQSSssqCbBnNTtqQEEFFffkKPOHNnhDdofpPrRNnFfbBYgGxXytKaAkTVjPpqsShNnrRiIHJjQJMeQsSqEGqQwWgSsdDLlWwaAnNTtbzZBOoruVvRCcqQOGgoMyYmrjDdvVfvVFJoKkOwWeEFfeEzZCgGcuUtIiIiFfsSgGyYTDjgGzZPHhnNLlGgePpVvEHhpJdhUuBbJjHqQUqVpPvETsStSsZSszQSMmWwOmMnNhaAHDWwNneESsiYyIToOtddbieFfEIAJjhHcQvVqCjJRraBDLlIiJieEIjUuaiIAIiuUQqDdTtWwuUeTKktDddDKktTjJdDELXxlckKCBbwbaRrABSsWJthxXHTsSGgSXxsUzZBDaApPdbaAyYUsVvbdDBzZTtTtjyYJsSNmMVvTtnmMQSFfsqRrOouvILlitTaAKKkkYyeENnxwWXVJjoOuUEemMgGSTtsnNzPpNYynbBZGaZpPRrgGzZTtTtKkzqUuPpyYQbBTtZsSzGgAftTpPxwWAaXaFfAPptTqQjRrJCcFEekKyYDLldkzZKfFNjOoJpPEeFfpPnqQWpPMmUUnNuufCXxcZzjibBgGIJdDFvLmMAXxeEaFfmMHXXxxepPRrwsSWTtAaRTtrVvtSsQqTPoOIihPpHKkpYQVvqYsSVvQJjqFfqwWQyGgfFUzpPZyNndDwWtTiIDdYOoyYzZJtRryYxrRmMHhXlDdyYzSsZxgGXLiQqbuUBwWCccrRzZkwWfFWBDdboljJcChHVvLGgMmaAcCwWJMmaMMmmjzkKcYyJmMjWwmMbgGgGOxQqXnNMmoHhBXHhxCVvCmMNIiRidDIrXVvxeEtTtTyYnEeKkuUmJjmMOoGgiIMlgLlQqEMmexXGLclLyYfFQEeHhXgvlFfLdDwWnNMmvzZWCcgGwMmWODYydiIowvVbPpBEeIAFfnNMVvmadBbDiLlCyYaqvVQIiyYAqQtTiIcaAlLQRuUrhHYVvTUucCtyPpbBcmCcFfZzMpNFzCcUuaARrUqvVQuSsZwWcCsScrRCfrRVGgveYyESXxsMmWWwWlLIiwCtNnSsBbjJXxSsDSslLdmVxsSchHCXjlwWOQuUqXhHSssVAgGalLvSMAPpKkCcLlRramdnQqNCiIVvcgzZNnFDdkKMmzZfBbBbGuUmXukKUxIiaAGgAaWwcivrRVjJrjJQCCcLlEAWwaecaFfAtTWwqjNnLlJzZMsSmzltIiALlhHUuoGgOaZziJKkYyqQjfFgGCcIoIidDTtuhHiIZzlYyuMLlmUSsuvVbaIsrKmWwMkXCcOoxoOXCcoONngGVvTtSWRrkKmclLCNnxjJXMHiIfFkhHKerRMOomYTtyEhIiwosLgGEdDZzEeqQTtAaUUuurRcCMVvmepPzjtTvVJiIBjJyYbgdDSsGrRpPtgMmGTkJjhtTraARBbHhTzYyOlxOgGoXfFxXMmfFdVuUiIxPpKjJkKkWQqwtTkKZZznchHMqQmzZAFeEGgagGAfdDTbaDdGbBgJjcCHhABxXULegZzGEliILKkZzmMbBlOoJjIiubBamNnMWwVvxXhZpPuJjUCcPpzaPWwuAaUxXucjJCIgbrRBvVGgVnaASXxsNAaHhNnIiiIHBblLCtTuURKkCcGgAsSIxXVvimMueEbQqNvVnBifFILRjJUukKrZlLzfhHFWwVrRlLvxXuUMUuuUKiIkmZmEeMaAcClLETtdSlLxAaXsNxGzZDSIvRrVpPYyxrFfPpGXiItTzZxgKkKkoOJjmaAqBbNKJjkZnNoOjJnNzdDJjKHuUTVvLlthkMmMlrRLmmMQepYyIiZzvPpwAadDZzQqwWGwWgFjJfvVbpgaAGNVvndmMerQqIiREDzZFXxfOfFoJxXLljeESUuswWUuPNsSHhGgsSfeEFTiIKkOoRkKrGkpPnlwknNKxXkKAajEeJpeEESserDdEehHAPcCprmQquqQUMvVIxXiHhRXxEeaAajusSXxzZXxbRrnPpHCcNZUmMXxJjLlpPVoOLlhHbBIiGgvuGgcCcCRRrsBbLlMmWwWwvkHhKVSIhHuuICcpPiEeYjJcCZzDFfdynVvcCNLlEesSntTNHhpMxXiIwTtARraeEWLLllJWwhHQEgtTGebBPdWkHhKnNyYuUwDpsSnNwWHhmAaMHYGgVvSsyJjoOhgvVubAjgFTtFINVvAMmatTGgSsnwWpPGyiAZzeEditLlWwyfsSFSIisvVgGAyoOYyYkXxjciLldDIbBSsfFgGumMUxXZHhEetcCcCTzJiIYaveEtTVAIvqQfqbBFffFeEQEeFgtQKkhHfFAalFyYroOoORuUfAaXzZGgxfFlTtfFLuUurRUeExXaATxXzZIIVvYyCckpQqRrFfFfJKkINnIiWwijRrJJxjJWwXCGguAajJUlLcLlkKhzgGXxlRrxXXCcYAaqQtTyxZzLRrhDdHXxJjiHhINnaAgIioOypPYnNuULlkxXkKrUuhHRIiBbxLjJlLlXKvVLlSsFfsSpPCcfBbnzZSsAaUjJJjYyuNnNBcCbaArwWRLlUuzYyoTtEeoDdOoOKWulMmLUkKIiOPQqxXUjvKkVkrcCRKFlLruzZDdUPOopxgGWwvXxVvqQxXxpPXVsBbSXWxyYXJbmPpMBjsAaLYaQqtacCATAhYNnNMmdsSwWsWwseDdEIiJsSfFRrjzZdDKkbEedDJjcCSsGxewWEXqTpPtQIifFTeEtzZgAuKkUaSDWwdsYYyjhHzZJdDyTxXNtTeEIilLklLdDKnYyWaAdYhHaApyYPiIyrytTcCYQqpPPXxMmllLLpBbpPCKkcyHhFDdlLHhnbxXxXBNlKWwkKPKkzEexTtXZJsGgLOoJjyYIiTQqqQOotveExhHXPpGgVTzZrbBsSgauNnjdDIYyPpuUiLtAaCcTWwnNlrRwMmWZzYPpyJrRTtZzqIiQNOoDdmFUsqpMmPHhQSuSsvqZjaaAAeEJdDuUunRDdDHhseEdDMUrRuiImlfeEFSCcsWwYCPpcNnyQMmOoEehEiVpPnNlhHWwLRrwoOWpPGaAgVvXphHPlLhHkaAKxsSNnrgGzZYyRkKUuXfpPFoEtTeOcrRCMqXwWhHLaAAaFfsSdPpDHhKkLlSsOvVXGsSgxouUogUuPpQqbBDdXxcizZICGdqBbQqQJRrgGmMjbsSkKQqBeVvTsSgGtEqQCTtFfjJcqQMmAaRrbBkKbzZBqgFfMBuUWwYyMaAmrxXWjVoOvKwWkBlLbAatXxYdDRxXryOoeYyEOoDtTVvyYvTepPEtVjlLJXxQqvVHheEFZzfdDWzMmgsSGZwSlgGLwWzxrRXsSAaAabOooOQhHqdDXxPaApIBbdDimMrRdafFPpAEeOozZAaVVvvijQqsSJIDFfqqQYOoyQBTnRjJxTtXjJRrCIicKkBbZBbzrNaAIisViIsSczZCdDEevSJjeAaEtBPzZLlYyGfFJjAaVvQBzZzJPpPpaQquUwWiISdDdDsBbBbpLlPwZzWNZSZEvVezseGgyzxZzXFyYTtgEdDegGUCuUdfgGkKFDuUwTtqQWceEdDvVoOaGgseESRUusSUuJjhHLJjfFlGoHhoOCTtJjqIvVbkrDdEeCxXkQqKGgmbBQqCIKlKkLkiZzASOokKsShHYydWwFfhHDjJcCkKfjJFHhOWwmMvVoyYrRumMUJjkKOhAaqQHhQqHKkiIeEbBmFfYnNyMxrRnNzZBbeEcpPQqCAgPpftnNnIiNTZzuJHtTuUbBiEOoSyYzEeAaKkZpPGgzOoKkLlUsSuOoxxXyGgmwzoOHhqJSsmfyYFeVIsbBSgWPpWPpSsEQTCctbBdwWGgDMGscCSuUpSsJjaAPceEowZzWqhHbpPqiIPpQEeXUuxRiIjrkKRJDXxxXdjJbBdDmMFNnJjNeEXxnsSfiIJxXmMWwtTJeEsSGgNDdpPCctsSsSZzYFfHhuTQIiiIqhHbPpPGlEeLLllgGUuLgNnRPpEdNVvbuUBbBBbRQfFQqqrpLSsiIlQqPxGgeEXzZaAPpBbVvIiFfeEeOQlLqcCEeWiIwonJHhjAaNvXawWAvSshHdDBbdDKkOkYyKHhGwWKlYWiIwdmwVvWcjmMcJRKpzZxXdDPxLlncCNPKkpJnNjPpDdJjGgXSKkhHsNiuUInOwWeYyEgGommAaMqQMNnxXyYdDDyjrTtiuIkKiYsSyGgMmlUuLMfFSsjeEzZJmaAkKVcCvZzwWLlTYvVOXxpyYfFDGgjaAJgGWwstTrPpcCikBbgGKQgGSsNnkKcnNPfFWwxmtTjQOHtTNQqiIfUOomMnDdhHNkxoOSsDdPpSsXYyWiLlIwKbBkGLXxtLhHlAcdDCxlLXfFayAaZVVKsSVvkKkNnmMgGgGZjJfFzTtviPpIJjwWGgAoOaLHLLWwlCcZbBiIzeyYpPaAxXOYVvynNbiIGqwWsKkvVVeEkNndxivsSeEVvfFBYyFfjwWJBbSsHhjlLLwWrRuUlKkKBbpEeWwPYiIvVykdDJGVRrVvvUuQeEOoEeiIyJkKaARrfFaAzZMmOoIiAaSyYsUsSQgGgGKvjJSSsIijJZMmzZzQJjqAaKkYyNnpVvPAjJaEPLltTGgpWuUTbBnNtSssdRrDSwPpWWwXAaxwisSrSsRIeEaAoOPggGpPVeoLGglCcUuOEGrRgvgGbZzBLlaVvAzZvKkVeDdDddDEowWLlOxfFjJftTAafBbFffFFbpjWjZzuRFiIfrQwqQRvVruYykKtRauUlAUuaFfLAPzZpPWwpoUSiIsuGgfgGvVFXxnNtTLlnDdTnUuAaNCcgFTwpPiIWMzZzofFOZPpnNfFkUuKFNOTtvAvVaVpPojJvfFVnrSsRWxXsSKdDjJkHUgAaGcQqsSnirdQEeHrRhqueEJjUDTtwHhWjJaGxXgAvDdVSwWxXszZKnNSqlLlLQtVvTnpPNJjbBbBpqQPYgGrRyRrGgSshaDdJbBnAsKkhHDZkKzmMCcdOouUdyYzZWxXqPpQOowDSJGgjdYyDCTtnNiICtSZPpJjwWWwzmXhHxgGBbMqQoONjUuDdYhiINAanZLSslzKcCfFyYkfvVFeiIAHwozZOqQhlLPDdcCFfpFfpPAaehHXxGgDQqGgwWhHNIiCKIikkLlKKRrhJyYYUhHujJUKzRNeQLlqEnVvgGacCArFfWRxpNfFIZzUnNzZuiYpPMeYyDddDSuUlLsdXxlLcCLVvnyvVGgYdWaAaAwDOfFSRrbBsQqkKBblOovVSsZzKfXxeEAcKYoOykCtTabOjRrJoJjzeEAawWZwWBpQqticCITPLGSMQVXxvqIjJKkpjeEJrQveEeEVwMDMmUuNcOaAAaoCEepMmhoOHQjJmFfGkTLltWwNXxftqQlkoOpPpmDdpPMNAanIizNnNuUnNyYLlClLqgGdDgnPpNZzgnJjRRrWmMDCcdfFwZzriwWFfzZFeFfEfWwmjUuJMbMmjaAJvWwVnNkKzpPKGqGLlgwkhxXzZbBZtTzlqQNRTtALLTtllLTpnPpNoOMsSxXmRrDdFfDefLlTtHhfiIcKkWwkKCcxXsSmMOogGqFfQiIiIGgwWwWxNnhHcvPpOoVPpysSQqWHSjXWwxXxEekKRrJeEsgEUuehHBcLCYbBQqyYxcpPsSFfsRrzZzXxZyJjTtYdDXOoxwWbZzGgcCpgvKkJjDdWCAahcjMmJwWbBhHgBgGIoOEeiIibjYyaALlinNyYmMIiAnHhNVvaIzZpPYBbTJjxGguIFUuOwWofFYqkKQydDgJjGYKxXkzBbjJLluUiIqIiQeEUuZysXxSjNqQEefFoOjtTAalLnNIilzZGgCYmMxDdXsvVSeEgGQaAuUqQzZtEepaAPdDDHhyYyYZOMmtToIHhiTXxtvVzdEsJjvVWHhjzZPkKpWwWYTwWtxXyYoOcXxCKkvOjjJGguUItEemoNnOMIyYfFXdXxsSvVDxnGgEpPefFNiTtTOodHheEDHhfAZzMfFSMmvJjhrRHVdtLluYWIiVfFcCtThHAaKQcCqjpnNILNUwWuMmZFNnRruUdDfJaYyzZjJbBACcLlbBkGpPJGgukgGKNBbfFnTtiIiImMKAancCHqmMzZvVcCKGgkWwQuUqHhAadDQaoOAnNSTmKkWXxEIRQquUhqQsrGuOoULeEpPlZzgGbBBbtwWwKmMCqQdDcaAqQrjJxXWUuwDdMmdDocIcuUFfUuMmqQCSyOoYfyYwWfjkKsSYkKaAZYCqQUBbwIitPpprRbBkVVvNnUuIiOoLlAmEomXxmhHtTiIdUuTthHrRAaAvLlViIGgaODingGNIMmlLMDMmUukZzKxXrRWiRTtoOQquRrBboIzfFeqQWwUMVvmLlfFiIiINnoOlLAaixXXxHhIgKkZzVxxXXvGOoFpsTtzMjsSCckJjJXxdDtTGCZzMmAzaAZawOoWeZoOZzWMsSAYyamGgwfNnuUxXFoOWsSwsSzFfQoOAamDdMWwGsmEQqrRFfzZAxKkXeETvVxyHhYgnxBbhtyYTOUkKuOJjoJiIjJVvEHUBboOBVCcKjJqQdDkwWnMmrnNmUuMBbRLFwWftTTtgGiIElCgUPmMpMqoOQmuoOaAFUuflLnuosSyrRYKkpUuPtQqQeEPpoGgmMyYuUCzMmmTtOoxXMFBbiIfFhHfTtqceESXVZzdxXDdSIXxBNnESxXOoyADaOoNnGgKukSstTXGgUuuUNnxMtTfwiIDzkVWwvKbCcWEeEeEeSjJspPYywAaJrRjBNnQqnNpBXKuUkFrGuUydbBDbYcDeElLHzPpZveEaAVmMgpPGuUvVJnzZXPprRxJjtRquUQhvBbEdmMDeVFfYrmMYfFcBZzvVzoYyOjNuUnYyJQqZsSjClLCccSslcAPpaCCfFpPIigiILlvZzVyMmqQKkvslMKkmtcCiInNqQsQqIiqQSzNNfVvoAaOKVMpTtncCNCcBbPvVSdnlLXoOvwPIRtTtMmeRVvAariIGgeEzZSsOoEUuOoSsTLdDlrRPcVvnWyYwjgYVxXRDJjSkjJEeIaNaGguHhUnYsSyvVwWNoOiIyYqOobzZBZzXbNnBbOoPaAyYKkTSEKXreEeTtJjxcCwreEyYOpPbByYzJjZCcoyJjYAaRtTiNnIYyrbBNneEDdRraAyRGFCfFOtTOoofFcHoMxjMNnlVtTAaOkiaWwOGQqgVQqAawWgupPZzUuUPzWwDdZIScCsHhisSpoOSdUuvVexwWXKkgznQfsbmCcraUuCcAFRDuNnUdDdcCgzbRDMyYmdIiaAzZrVvotrwWhHUuFzZJbDjJhHdAlLtTuUfFagCMmcGjSViIvFfSYvVQqyITHXmMbqQaSsABbGgqRrQsSBSsNnjMmIkKVvDdZzTmzZgGmwWMyfFYpacCApProOvkMXoOxmKVtTlLSsCGgoOcSKoxXpXxFiIaAHhyWxxXXADdaZdTHQPCKkdDJBgGbgXxzHGgXWtoOTwVvpAabBHhxAvkhHeEISKQiCQqTtcoocCSssrRSgTihHIsZIzmtGgTRgWxXqVvQwHbBtFLBblfTjDdPlfcCFLWwNfFqIimesOoRSsURrQleEJjWyFfMmQJjBbVvBboBboaVvAMmOVzZnSHhVvsYyPFfeqydDaAOOostahIPpiozZOKkHQqegCcipPIGSFSLlhHpvVGaVvuUALlQqWwgRrsSqQcsQzZqIOolLsSZQqhpvqQCcFkKWwfLlLlHmfFUBKkzZJvVBbjPzZOFnNTRreMmEtSsHhqXkKxuWJjqtTFfmMrRqQQQqwdDUvLlDdmNqQnGcCrLllLUSfCcwdDWuhHmMmMAILaBbAriIrJZzjQqQnEeGEegnNqyYCcIiPpcCaAckAzZxjJXtcSsrRCTCcEmzZZzMxXlXQYyqwIiyJjKkgyYzZHhGXaAxYGjXxxvVCcSsSnNsKkVQbBqdFfDabBAzsSZcCVvUuYymYyAaqQMdovVLlOpVvWwPaASbBsDvDdfUuFXJBQWVvwMmuiIWwzZuUMOhbBHOLrzZRlNncQqeOhHbaAVNnMmvaGwWilLTtIhqoOooOZJiQqgNiIwqQLLljoiDpAaqQYyaAWQtTqwPrRYyNlLPbKkpPxXpttLcCloOiQqsSuUfNpPTtnSxDobzZpKkPzEeMNoLaAlOMmatTzOoGxMGglHGghmhHSUusIYyiyYwWJWNKkRrNDdnkKniIVyFffFYONnXxzZqQlxXwEevoOEeVWFNdDFfkkoxaAXWvVwMUumXxMDdmFfOnNTyYvVeEKRqQEYyeyiItTQlLCnNcWxOoXyYIpPuUFJjzZkKdDQqgGsSUeEuIiPxUWOowuUumcwJlLjCpPcJsnsStTNSjGIiiVmMnNUSXxsoOvVlLESLcCSstTGsSeUuErsSeERGgJjaXxAlLZzTtNngkKlhYyHhHnnNNjplLkKtFbBKLlXiIxwkKoOWUisKaAkieEIXxSaAaAjcCJAaeEqjJQxheEFNnDjXxIGguTCFfgEejxXZoOzQnLlAaZzXxNZzLlqbBSSSnVvyYMmNrIizZFfRWiIxhQSpPqQmKkCuUcghzYyZXxgGqQCcokKOJGgKklLkKpPuhHhXOoUuMmCcbBdDhtVYJGgjbByvGIruUIirRiJLgGTtWwlZPpiZFJpTbBtSsFfUuPQsJSsjAabPpYdPcChHCGgPwWEeBWwbIPNOZzaMmHhdDAoCccfFSsuqQUBbbEevOeEJjBbgiISsSsJjiCcavBgdDTaRlLFShcCHYpJjPQmmMyvVYrXxXLPwzZfFlkApPaKkZaAaAzhHQqCcmDdbBqVvnNPpQMKDVNnfFvYvtKkKYykaiIUcCZLhHlyKkdOCQqceYyrRELDdlvdDtTWxXwCcgfFDzJjuUDdlzvVWwaAZrRXhHqHhQqQojNpPnJlLgCcpPGyYjJpPanVDafFnNxXvVsSPaAaAIJjUtEeKbBmMNVvlpHhUgGuyYyYcIizZEIieSsNfyJjdeVBXxbvLdDyvVUuYPplLiOrTZaRqQrAzTteLacCdIYCcyvVWwtTEeIKkcCfFdmJpPZzTtzZBbjJwTtHhWAzZosJNnsAaSbMghFBbBsSHqQhdDbsSbAaIiBkdDtssShgmyYMoOGDdeyFfnbQqfaAaACcnUtTgpQqwWzeLLlEzZKgGkeJzZZzrREeEXEuUlzvVZzoOuUZKRxXfxXFDvAoMmHRxQzZeEpBVvhmEjmMMmRwvVWrJJbtTBJfHhFtTwWjWwlLHiIhZzRLlrjAlLruaJjzZtTWwhqDdlPpLtbJjBusRNnrjWwbVvXbkOoOHhoKQYRBbBbDdDdqLlSSCMQQqbsoOwQSbkPhSszZHPpVvNnPyPpDcCdEeYwUuWpDdwvVstTMmXYySVvsxMmnWpupPPpbBKkKNdDUcCRSmwUuEevTocPIQqdEgKBEeCDskKmsSRdDNhPpHnsFfehyYeKkENEeQPlIiJZsSKkNDgjJyYFbBwDdqMmncBbVvCsSNvmqndDNvhFfHfPeEZqHOolLhzZSskQqTtKYylvVnNfFTtbbBDOonNfehmMgPdDpGHtFTtSgGNpknaAhHNVQqSsaASsHhvAaEekAsSJvfwWFrpHGWBlLLvIiZzzkdSsDKxXUuWwCcLehDFfwWvVRrWbsFqZzQfqrLofNncCFObhMmUnziItTwQLhPpmMHlqxrRXlLVvzZcyhUfFuHhHWwgGOoBfFbkKYNnxlrdfFLWwVvDEhSiIMmbBUuTcCdDtrRkKCcnoUvwWVueeICcikKaATvVtQPmMzenPPbBJjTKkPSlFfBbLRtZzVvogGxXOOopPxrKkNnUYyLluyYIiBlCcxXYynBbeGgEBWZOoeEfFMkMXOofkHwWxXGghKSlWxbZjkKpPJbuUBSszZznNZOobBjJzCcBBfNntrwANcdDCndUcnAUEeuUubBwWkjJKuYcMmRkKrRrgGcNnCgTsStcmMCmkXgSZzsGxgqRKkVoAaHLuxyyYXxjRHhruUflOotTfIfFiFcCLQcCqFJcjJFEeZJjaAfIjpPWlrRHhHhbBdZzdjPxnNXmcwWSsykKYNCbBomMbBCcUugOonNQEelZXxznmMyYNfFHOPpBbyYoGgakKvmFXtbbBBkiFjwyYxqQKrWIAaiwRegGEgqQBpPbeGgEyYWzSMmbBbdDSsiIaAfFzZMmJjfFMmXoOxvtAgmMGezUjENnecCeBbEJnMCcwrRAwWPsIiiIaUuuDUjiIcCFfvBbQqVTZzIixXQpVvPNWwGnNgfFhHTCctxXvWipknNKPchHCIpPvUuVerxGgEePCcqQpYmMXxZQqzyqeEzZQXtqQSsTLlisSlLemMiIdSsUuYyDwWQqQqtTsLlpPaASuUkJvVbHhBiLlvVjJXxBUNnuGgbjSnNMPJjpKcCkuHhSyflLIMNnSsAlLrRGNphLUuloOsuUSgGtgVUgGupPdkbBEecCTWwoOapPbfyPAaibBKkvqtAXrRpPdDxbBeCcgGJRSPpGgxcoORoOOoHhXTzdDZiIbBRWKaAkKzHvMVTyqQGgYcCRnpPsIUilAaMFFbBffJyYMrRgGmooOAkSvVPpsKNcrRCRrnpALqBbQfSsQqzbBMmhqQHUuNnKzocOKkoCvVqGVAaNnZmMSsIqQUivVSQqUaZzgXOoPpOoAaCqxXxEepPxSnPSYnzZNWwiwlCaAvVEzrrRlAaHhPpLNnjJRZXUuxkKoOZhHwlZBbpbBPxXOopMmPEetTszaAeWwlLtLlkKOERzQqTtcCKkRfzwWtNKsSPmcCAaIiMnxvLtTaAPpgGncCNdRrseECcvgGjDdJtTfaArpPVvRjJOoGnMmJjjcCpPSsJZcVQqXgGXxMmxvHhCSJWwXxKzAEefFaTfjJeHhQqHFfLvVvVBFLloONndkicyFxHhEeUuwvvOofSsOioOFBbzHhWymcaGAaRVgGavVtqPpsSQHFOokKEAaFfnNYyWwiBbpPaAkKIixXHhIrRblvVZzLlYyepPpPZznNXBEqulLhEgGMLmlLDdKkxXeEbfFZzBHXxhmTfFnNdPpMmfoOfNhzNnxXyizzotEcCerMmqQLsIFyYfoOFQTtqOoXxfJIiNhkKsSOdDofTtoiIOYwlwWgGjWZlLCbBBHhjqQYqKkuUwWOUEgGeELleUufFjJaJjEeHhKZgfRoOryyYYXxFKkkanNAHPmMphKIKDdyaLfkmAfqQhIjJjqAQUuqqFbVbBZzvCqJjkKxXQtRrWwcCONuUnSKkOoevTBbtHWwOBbTHjJhOzZnNRrCcXxBbJXxGnkKtyYuUoOTGxXoOrRllLEeLrPWIiwzZIiDdXUuxZzkKKrRkoOpyCcYBbZiKbBRTnNHcdUuMmUuDdYyfthHTFzXevVExAiIaqurZSuUEuUUuefWaAwBgGxqxXQnfFMmVvNQqxIUbhbBhvVWyVvjNnpqVvesDdSGoOlLoDsSdvsmvVMQqfFSLpPlDdVuTVVNcCniFoOLlzlLZfyYHQjelLEzZECZzGDdtJDdTtPSdDsFfvgGVIiqRkDbxyuUYRrtyYGvVrRSsjJvBbTtVoOAPWwpHhXxEuSsLluUZzJjJjBSsKMkKmOLdiEHhewWIoOqXxMmVvuSsUjGfFyYaNnAwWkxnNXfrRMNkKJjMaFWwWFltMsdLlsSISdDCceEBbcIiCaLlrRNKrJnFfRnKkBbUJjiIShHoOsuvcHhCcCguGgUQqzXPpxPiDuSsUsWUuwIsmMjJiIpvzoOpSsyzzZZSskKzOoqGXSYGgysxWYzZbpPdrRDgGhHLZxXkKSEesaUuCIZlJjqwkewEhgGpbBWwPuUHFfoYGgVvoOUuyOLaAlEetpDdwWVvhHLltTkKMdDmVvjsqRNwdJjDWZxXyYyYkBaAxXkUuKwWsSwWTdutKDQqdDdDqnNPRrgGXCDkGgFBEeiPpIfzZcfFYFfaQqJjZEksSKepfFPzHwnqQNPWwpFfaAEeKkGgtjJTzfoHhNVaAFfmEQqeMnuUDWuvVUcCFgGpSdDsQqPPxLRrkKmMQbBnNqlXbnNsaAWwEVvebtFJjmzZjJMrdtUXxrTMqYRrlxcCqQvVGgUrbAaLlAyBYzcXeNsSnTtENcVvnOoNWwCFhHVvsSOEtTtxdDXiIIzbBZYynjJXkCcKxNEHheeuJjHqQhMuJsXxUsSJkVBMKksSmbxXvcFTuUCJjPEevVpYjJMhHTtMjJmvVKkupwdnZzuRKAeEkbBQrAeEfFaRQqYyNmALlXxpYyeEYiIrKCcvVDPXxjJgGuUiIRZLlzriITtgGVkKIUulLMaAiIGJeEtRrTzZUbWuUkKDdwBqQFfLlUvVurRuEeSsUEjVPpUbBunNtgGlhgGHvsBankKEriIwZztTaAcCKkvWwdGgmOotPJjJbTtJjPCwWiXxIIbGgijuyYptTEHhMlbBZcCakQvgGVEeAamRFfhHPpdzZiguUDEsSwgGWsCPnrReEDdmMXQjJvvVdkXBImmQhnSsarUusSUjwoOWoOTtkoOYyXxPpgrRzZswWPpGgSJnNncCNsSAhwWIilLWmidogGxXFVvWwfsOQuUsSsGgVnNEQSFfnXfFydDdlCJjMzAatTNnCEhHeGMFUagSsGVCWwWwcTtGgdTtjJDRNnZzrYpLyAUuAzZYCpPiKooOCNnDdYVvyOjJoFfcdDzpNnPVvnNwJjWjpPNbBnwWJjJFfdbUiODuHHhpZxvLCjJXpPQTycfBLlbNOonloyYCECcPpJjqtLFflTGgQpZkKEeDDdfXxFyLjUoGgREqJjDdnNIDcJvVNKdDpnNnLlfAaCctsLcZzClPpCcMmdklTmMtYypGUhtTOoXxOouDLldxXTWwVFBbSVvssYMmmMyhqQniYWEeGxjUuJXlyYXxLtNnvVKkhHUuBJjmMEeTtNnGaiVNUCzQqZFiSbBnNiIKHTwdGglclLjlLUqeEQPlQqLgIqhXGgPpMPpmjrRuIaAHhorhCchsQqvVTtSLJjljZzJBxyYXdDPpeGnMmgGgGxXVDRVvOSQqFIpPUIiuoOlLiGGwWHLJQCsEzZKtHWsSXJFfWJjQitTRlUytVSsOoRoOrNktTzgGxXZdDqgYKkMKkeHHhhuUaAXxskKiUuqQWwUJjoiIOHZJRrjzDdZqQLECmMcpPZzCcexpPsiISasSrIlZzgGzZLfFCysHoUuoOKXxEqQekDzZdBbPpJjOhfFxXKUnYlLyyJMCcmjYXxqSszAaDyYBLmAaaIuUkOoKWwCcnNapPAcfFjjtyYjmpwCcMmnsqtTqGtBpvlBzZqSmZJZzfFjdtaADFfyNAaXfFMeaLUuytTaSXtxbuVwWvnvADdaCEvyrRYYyIkKySsvVgGYIibDazXyYwWgGNnxXsSwTtejJElzoSDdbBsNWeElErLPFCckKfBbdihHAaWGRkKrMPjGCcgJkOoFtqQIiDPpvVdtTbMmSsilGLlrJjRrRCGXCcKDdYaAtpeEWXcCxlaALwEBmMLlpMxXyYmzYTtyZyrnNRTtQQxlLXPnyQqYVmPHhvVqfFmCmtTjJgVvQmBVvSsDmMCcdVuUmYyMPPpppPSPpDDdErRVfghumGglLMUMeEdGgllCFXxeEHhcAaCdLOGIaAiHhaLljXNWbBKkHhcaAurRbrfFsAalnAaOQYySfFoOWJjyYuSsvgmkaUocCOTtgGciNKIFfkKnNivakoOKwuUyDMaADddDmpPdOpHDCcjJzSssSPpuoOEeUHhZzqQZaYyMmHzIVvhHvVDdiuuUUZtTAaKVhHvsSkUuhAdCcKcYovrRVOWeEOevfJyaAIjJbBXxHJjhMZgsyYQbBqSvVHzPzZoOYFZzmTFfKhwWPpkKHlLmGrJjRgpfFPYyPpMMVPpEjVvJvggiTtIZrRzGuUUfwWmMpuUFZWbBDhhHHsSsSCHGgGfVbBLdYAdDWfFBbYyGLjWwJxxCcLliSjJZzKQkUdDvVutUuVlDxXirRxsSiIXIKYFfyMczZtoxAnNKAbeQLlqzfFOfJjdDzZvlLwJFfjxsSKRuUhxPpXJuDoOpNWJSxCcXmMeXnmMOoEGHhdDJPpjgJjeUcvyYczZClHLYCcOYyrRvVoykqQjJcCEyWwYSDnNEwdJizZIeEOoBVbjYMmgFffFoOOoFfdnXxGgNPpzOoVRrDdIcCbBBbrRlExXOoAaiutXxIiTJjsHAaCGgcyYjZzVNnvxXsXxmTRrtvMiIXxmVMAapLiXYqQdDAhHzGVQUqQzkKiIgGuUdDkSfFgpPDdmCwXxWOqZzEIzjPpPHhBkKrGgRrFDdGgNntTcTusSwWeEYyhHCcalpPGcCmXVGEesSacwcCVCvVuURPpZzTZztxfHuarRPptbjgvVGaNnAqQJBDHhpPdzZTScXxCWlLagGBbAHhtTwuyKkYJDsSxXJYrRyLugPPGgKJfzSsqVtTIivnrwpqZzmMLlHhlLPixEeAZzeEyYiIdDavQZzqMmsFfSXxVXoOGARragglLYTJpHhZThziItlgGjXaBkKQqMmbgFfACcaaQRuUrDdPqQpyGmusFLcClwWvVDdLuUFMpOjJPpnNhHoDWDfFHhdwAadDEeSsdaVvqGqQgWKkwHhWwJSsjaAKxXdxXDPeEjJIiRnNxrRXPpTgGgGJjWifmMwGgWRrxLgVvBbIihGFdeUuSQurZWPpwfFXxYyRrqbBadJjDCcpujYFeEDdswWSfVekKRrMmsEeSpLkRzZtockwunNUkPIffiIdrRGgDVxynNnvmMQqcOoXxCMzwLyeZEezuJRUuFfRaAaKJwWfFzQqiIVvPsSPphjsSNnnfEfFNjJJvVjhyFTtrRAdeETtvVhHzZXxHCgGcQoYPbBLlvfsSibBNnlLvVoOGdVjJfFDKoOIiLTtMmxNQWNmUhHuMdfFVyYmMeEMmhHtTEyhHRtVjUdcCZbZKkUufFzZYweeEKSsIiiqqXPGgpxrKkRmMcLloOsSvVNWGgsSffFWgGwRCtTwWRrbBmvxdDZZzHFfXBbxZsmMSzjaAoOPpTjORrYySskKQAEcCeGgBbSsPvVpfFiQcCzZDESsBWwpOowWORfsnxAyPbBKkqGgQqWwOfFoQpIlOwWUuYyfYJaTtAJbrREeKkAaiIwWffUuXxiaWOoIiLVaqyuFynNYLlvkKRTthHLlNnNpbMtPRJHhjzlLdDHhJiZHhyYcmMCfFtlLeEOhTtkGPiIpgKnBRrtTQqatmaAmVvbLRiwWsSIOQqeEUXrwwnNFUZzjYyUAaZNaEjiCcuYOoMjejJRrSmJjcjcdDFfDJjJfFEepXxBHBbhZaAfPiIxWwyYXbohHmEpoOgOfFTtXxosSnKkZjJmMETRBvVbaAfUeZcsLlFYNnyVuzUuXgjCrRJKtxuUBbXHmMmkrRSNngGssWGjrMmZzzXxZxvLtTNNmukYIidGKkgwPpRfFrXPnNxAeQqxXFccAHiLwMUMTvVtXxabBToIRpPrJNMmrRhHEsSXhHlGgadMUZKeUxXoqQnPpgNnLlpgCaAqYyvVXxsCjoOIppPFtBRrLMYtLCclwXxsSEeWPpgfmvoYyWDdweRrjdDJFbBBDdMmxdDwWdDCKXzpPxnNIIMmJjKkcSiIQqxXSCcIkKmpPJljJLvVKkIrrJkEeOnaAtJjFWglLSHRWZNGgfFHwWvRrSEDbgFZeofFcRQhOoHUVvXxuJjTtKltTlOoAzCGgNnXSLMmlmTUtHhTutMiLlpTYyGnNoOTnyvjJVPbSERmMbvhvVTtHXJjxoOmMtZcHhwDVCtTLyrCRjJrcXCcaAnNXeaAxXkCcVmMmSzSgGrBbRsyYNOFYSsyEefoHhJmifydDJjRJCcNnSsvVXbgGfYFfpTtelRawdTQIlczZCZelRaArTtepyhHxXWErasdoycqQWwArhtTcCVAaIfvVFDbBaYJRzZXCHRroODOeEoXxcIBVmMDrRLldqQvMcHvCcCcOoWHrniMHhGEfGGAWqGlLgQLlPlLAGgxXdDJQPwkKoOWpBYsSbBePpyoTTttOHFJYyQqjFBRrakgAazEezxXrRSsrRZToZnsSxXBbypPOozBbuUozUijIbiIurmbfFEeLlBMlZRrHaVGgmMnNgXPxXGnedDxRtTrmMCUjJAauWPppGHoFXxUaiuPZTmQUXxhEzZXxxXeJKeEjuNsSzuIddDVHhvDeeAaEjkTtuhHFqQrnofUKkDhGdWwlLOXWwWwAqMmvAeEHYNtTYynJvVhhJUuLlIuUzJBbiwWKkgXxdfAsCECdDmMnNcvLSsTtzWxoOQTtTtQzZUOaAzUuZQqoNobwEgGoxRruLwuXkKQqxMiILlmgeENkElnNLbQyYJjqCVvPiICgBbHQLlcYyCcCvVPpbdSsDqQWiIOMxXCjJXLKgrleEVwWWwEcfIfkIiRryYkKJjCcLLldQGXxRrurRHhZOeEolYTnWWwNnwZzNWhcVsskKSpPllzvVNkSJXxiKAusaASoeEmKkLlMDdMmyOoljKRbyIVviYBdPpDJKhOoLeBbsDdRrgoOpsLdJANpUAavWwhHpvYyiIXaAAmRXeExfTtFrMalvGGNnIiVDVvifFIiZzgaAZJSyYkvVBbRvVfeENLKkWcCrjJZfnNFEWWUutoOThfFGFzjJxXZhqQqWyYQqQMwWmPQpiQSCvTxLjJFfOHfBbvVGgGqPwWpQgqQhVvAGgeEaFfHnNyBbgIimzxXQLlhBduGReTKsSNOLhHgAhDhrvVhHRWwlZQQgGQqGIIZzvVuSsUvZzVKvRrVVvvwfsSgGUNAzZbBBJjbfmSknNFnmMNayYsSzZsTtWwSmssxwWZPalLRrVoOrqRroYPNtHUuKkhSMmbpPPrNnwWRrAaOozmZJfeyYHymlfYBcsrQrNnUaAupliMwpNrmRooDdORyXqQwWyffxnZujJkKFJjlhmZoOzEeIJjNbFfEHuUJrHhoCEugSsYoiInsSDzaCcYVGRXxaAHhriSiEgQeHhEqMWlLAakDrXuNvVnPxCnNPtsLTFLZJCfjJEeRrevtTVkuUKEFVZzFEtTDtRrlPfFfLiKklneQmfwWNKARApGItTijoOuZhSQKkbBqZzsyzZYfFSNrfjJhunqQfqPpPjXWwXKkkFjJCcPpInNwwWQXxkQqghHHQZxXzZaAirbBSsPCtYGcvzSsIiyRwWgGYmjEeZzJPhtpKkYflkKLFwfFWycCXAaZdaynrRNMLbBeILlzBDVKBbZzkvdsDdnoONrRNbMWFvVziIZZJjOozSQqhFHhfMmIZxLapoOFfzZfFiGgIDtmrRIiKoMtMrRwWnNwWrbmMBuOgQLMgGsSRrKBbkKkvsEeStTSsaApPpPbRrKKnNEetEHhuOjcCcCJZzJBbjVpNedePpEKAazvVZSvVGOkKNxXKkcnNzoMmOjQEgGnReEZNncCRrpFIwxFgVDdanuFfFILhAhHaoOJYJibOoqQWwGgkJmWsHhSgGIigdJTtjHESsGpPJQMeEPatTBQjMCcRYpPmMSsSfjJrRjEGDNSjjJJjJAqDdQmdPBkHVnbIiSPpwRfFGgsuOozrsSeHQUuqhERIkmMZJIVuUnyoOWRrwWdDaWwngsmZzswWKdDUNPbznNFfIiEnVvLlhHuULjJeTCqQqCdDcxXQshHhHTtSDdiIEbBolqLXxlHVJjHNKSGgRAaAuAOVveEcEzZeHaAhIiXxxXlKkzZMAeEdWNnJrriginNCLxXlcRMNYFvKkVUIiuvVlLDVmMKsrRuUQqXfFRrNqppPIpPigBbwoOWgSWzkmMSMmzYfUPdOosyYSNtvVgkDdgOoGoGkKjnpkKKnEeAjiKkNnOEenGujJGKkTtTBbBjmkMHaWiLlAXUVvugGRvVwEepPWKUuBbGdDgRrMXxmgCQqcoyYfYCVjJGgvNcCUxZAlVeBaPnTtTiIWSswtidKAaiiTzZTmyYTtvVXxRniIXVdReyhGgFJyfNDGwAaokKLlONnHMszJjzpPSzKkzDdjJbwjfymIilLZzKrZSyzZSsEdPpLloQgrRqfFIikYCFsEeXxnxXZNWnUNzPovLbBlDhHdMmzwWsRbiItwMmWTeEtTCILRruUaALzOSYzRfdDVmWVvltMmRrTtTsShHcCmyeDYydEYODuNUnKSVvozYyZyYPGNwFYpPDhuvVfFSsUzfFSJwWjkqoAaOQEeKHhAUunNNYTepkKPMmEtBbyIiYyhcClXxArCcOQmsSfFkpPKriKyTcAHhhxXHyQqzMeUvXPpLlaDdAxVRhczqgkKyYGUfhofJuUSCYCXqTtOXCcHhRrkhTdrRrRaMbBrRzZmgWSCCcLlnvDTtfLlrezZlGzBvuUVyYUuQqxBPpbtYmxvhHarsYWeEOWbBBbhHOYdpxSInlLiINfFEMmeygjTJjGdBbjcTboOqVvMkKwWfGWpVitfxXVgsSRfoDknYyVmMvJwbBxpvUfkRrzqSsAaOWbBSgiIGbwFfygGYEenNLlLlKDXxFtJewIEePpisxXSSrWwCEXeEiMmprAHkKfxtMlWUVxYKkbBXlcOVKkvccCCkqwaAVvWQxhQxXrRnrnNNvVHhnfFlydDLrRcmGnNafFAgMClnNTUOodDVvsGpLJvfFvVutHhTfYKkOdDNOFfdDrRPREacCAFyHidDTNSWOoVvOoEewgEoOqvUumMvYymkcYxUBbbBaAlLDaGgAEfkvdVkKrRmMfFOozYapPxXbGgYvYQqaARJjExHhRoHPFvzeCLlcbBzvwvKfeSIutTkEnrAaRlIPYlLyrRIgGHhfFTjvbThXzeELlZrNBbrOoAwoCcOWPXCzZNnXxIiRrbBvfrRFXfWHOolLSKkspPRyrUFzeTJgwWDUYyxtfVZBTtgGuqjJEhdIxCYrRwPOgKkqHxPyYpqrIpbEAjJalxhjqQbZzMMzVhHuUWweUgRKkpPrKkfFsFgGCcYyDPmMgGyYgsfFiZBapjnNswjGqxtBCgGVrqQnNwYyWxkKpEbJjYNqQPSETtekZHhSFfszgjefhJjJCGjkPpwhHNqzZlWdDfHhxXcgPpznxXVQqQlOQgPpevVDdOoOfQQqqFBaPqQZVAaUgGuuHAazgGUuzAaHexJjUtBiUuItFfTtTwWaXOwcCmJaAbmiBUPeMmZGMfTtXlKZzHFswSyKDCcdLrRgGqdDssSGUugfbNhYyhzZHLleaHBSxOoIiXqeEkzKkZCvRaCsaAYykKScrWGcCzZNnFcCVvnNnNKhHkwpxeyMzrXoakpHpgmYyMGGBLJhHWkuUYuVonqQYlIWwSsQNDdvkKkBIvnNVlLibUuHhvlLVqhOoLAaEeHhnEetWsJMHKNYYkKDZzdYyGMmCcgXiiIfgGPsOrTQqqBVvZzDnhHgehBbQFfGgzZmlaAyYIypxkOJjokKlLLnQfFMYkkKjbBJKnBsSpHSEibRiVvkvHpCJhlLHxXmnNAKfrRkvHdGkKnMmCCcpPKYiGgcFvXSMOrZzRrRQuUqZEeRmIQKiHPpplLnasjvHEdDCkzcCIAeEZBGlPpLkXzZSLlOochHLlfpMeETttfGVcCZQbVgyYFfGVgGvsjJgpSFnNFffWAallLLdPpjxXRgRlLFwPsFkzCnwTDoMRZYtsSvVnSroOfgGREehHsnNyYyQqYSSoOsgGkejNynwjJWJKkxeEPZzpshHdsSzXxAPpaDNniIWrolLSsNdmwWWbbjJdQqDlbkiIVyBbYsvHxFUaAkKsSqYSswWLHoXwOONuUJSqrPlLpvGglZzLOeeEXEefFxERxlAEwVvBJdDiCOocpPSwWDIipcCiwcCcNnsSOoCFMfFEkLeUXVcCvxMlCnwJAajoUufqUVvuQUuFzWwZOOBbDgGKkeOoEwWyYNIinxkKMLDpaAXJjxaAflRBbHhrmMsSMmlLlbixSTtsCcdaiYjXxAoOOFehPbSyVvllgzNmMnUlZzAVvJjymMYmMRRLlrJjCeEmMFhHhHovVORdsrVlVvgRrZNYyBbnOFAHOoAwkMmKFLVKkxPnikKSswzaAxXZOosXZxvHyoOxTtGfZJlXxLZHMSmgGDOohXxVyYviILbtOqQXoOWwxipPDoOUBAaqUuCvquBKYyubBLlDWNnnbpsSPpPudCBXXxnOdDhNMmkPBtiLlohHCctTRELlfFKtTrzZZtTdMmyYqnfvUusfFtTkrRdOLYdjJSsDtJfVTtvaAiIEeiYDdyqQUBbCQcCDxyaDzZdDMMgGmmfOsVxsSeEnNSJHEelLpKukGEQqxXIosSkVNnfFvcfZzZWhfsSPDApmcLugQqqDUuumKIkJoXxOZzcNzPGgwWpkKvXxGAaigbqlLNUZUsSuMmPwxLTRrzRuUuzLlgICILEdGIbxPRrQEeqOWWoOJjsKkVvKytwWdkpHqQoBbyYZzYyqQJjqUEXGwcyYwWTtCIwLBbkKOkKfFkKnzSpPcpmQTcCMLlKkbTXxriEetFNaoOTQvedQOoXFQFfgGWwXxDvZzVAadvNuUnWwVUCmdSsTiASNEgGQqLZLrRXtWEKMmtJMFursSesSBpBsSucczLnvVNsSlvHhOXrFfSTqPxXsSEZzeBZzhceEYTTtRparRAJMsKkqFwgqQxdDvSYKqQmHWXVEtjJzZcLdMgGmbBDeMchHCvaCcAuakzpuqWzkyTIiaUDxUaARrJjSePpmLfmMIwsvAIiaRpHhuUMmbambpQFUgGdQbJjzFfZKQKYTDESHBJgKmxXhWjJwfOofLlWwbhHBRwXdpPjRrJEDJjbBgYuJHUkMLdDXxqQlmgmdDuUKWSsHhfhBIuUfvVPlFYytTfsSNgGnBSsblmqpJjPMmMmUuQOkBbfEfFiCWLvwgAtfOoWGLYVUIiWGMDAapVvVgMmGGxmijymJHhCKVZVtTHBeEbrfVQgpJYypjuUwWNjKwWoONIFpPPXjJMRzZZEWwewWaAJjcClLQcPtwWNNnTtLTtdDedVNnEevCfFsaBAaIiOPTvwTlwIfjbArvPTtpVvuKkfqrRrjgYyHNNDIspPdDuUSOogMJrRzRdxwWyYhoqktVvLrJZnKuUIbBgGLJtNrmnUqCcwWVQtpHljEHhmMnwoOyLZRXHubMwzZWwqVhPgTHLlRrRrFCmRwWmkOBbrrPTJbBshHIiSjhHxzhCEWWwwpPBTtOLloFOocUuZdrRbJCckrRKSeEsFtSstTfkWBbwwWcCzkKQeDdooOPlSfLVTrfRCCcOChzspLlPuYHvVhzsdxePpEGebBHHPxXSsWSCQOtJSdDsaQcCyYjJIDdiqGEJjkkECmGHhyGajJTvgPbyMzZmNVhScCVegWwMmmMlnNXQuHGgOTxXAeasBlvWqdsxCKHwVvpMmTXHqiXhLNCcqYSsDdyIUdvVDZgIvWScqQUzKUwWuUigwWjykKAdXKVvDdyYnYOomMnqkWwCiCcFnNIifIIAauBbuUxhHXAbRJlTFgzaAwPpwWWrwWCUurLkKSaoOArYMbTtBbBOohHcwRkTfspPrUGgXnpPNuwtTRSsgWwdOPVEenBPfVvEePqQpCJzFUuVunbjaAVpwsiASZzisCrdwwWWyYwTIJIiBNnbjSsQWvTDoOpPWdoxSeBAByMmwWVWqQwmOqQgGvVoMnNuGYyFqISrOPNOWwEeeoFrIciIlwXVvLlunukzZMmCJTpPtWwRueAlXLTnNSshJAlLcNgejJWwEwWLBoOkQYkOdDOoFfkKfFsZaesShFTIYLhnNdZzjlXyYSEMTvCatvVwSZcgOVvsNBMDuYFXxbSsYcCyawWzlCcLwTMGaACWcpEewQsYlbpApPagBnuURrTabBBiwpSdPwMofJurVMsCzplsmHLNIJmOKkoxpcCPUuwZvVzWACqQUuLlcavVaPYchgowGyzZKbgHumjQFfqbBYoJzchHwWCeWkYyoOoeFqqYyuHGIPpiRyxhFSsfcQqejJGDPpCcdBbbiBbQqISmEvIxnAaNEecTehHlEeCiIjCwWJjcHIsSVWwzQMokkLWPGMiImAaOogptOVNnkhPMwwWhwWTKkAIOPUrsFSorWuvjkWRrjFfVvJLlBxXbDsSdtTImshBTtEfQBFfcjJDBHhHVjgqeugGmqWqjcLlmEGfcezxXZDTtdzqQEPYBWeEAiIafuSshgTMzxmMLXwWMmBbWxXWwLlgGsMSspPLiNEpngGzZXXkbrWwRHhaABxfhABbTtaLoOxTCqEeDzUuNniBeEPxjJotLhHJjlwbBWTpCcPtmXpPECTaAtcJhHIFfhUuyGItfHrBbELAalUSsDikegfFsIipDEeXvlSmONnpPHqwIwOopxXPpuyirgzKVvJXXUXtTsybBYKQqRAaVRjDqwWTwGKkIiMPhgGrRvGdkvdAafFwWRFIiuyYUsRjvktTKZzCxXxWIbQdDUzzfUNntyhIfcgGhShHTNIopPAoHNnhYhCoOcsrRFoOkKVMmbXEpHvpPUCYOnCTyLfLvVMeXhzqQUUlnFfNLGaAaxLdvKpGfFCcgvbBExanNWZRFuGnZzWsKgGwpPvJnRrtTSsNaAjTylBySsfFhHYPLxXRrlpcWwYyTWsSAfSshHhoJXLGHMMmmyCciBCcrAaRbIYlLhOoglxjOHtaATFbBawUutCfFbLYtVpPWkSwJjNgUfrzwKkAXeVPwWBbkVMmDlXSsAvVglJjLuuZHxVvEmlFlYtcoONoVvycuDdVHAahhPexqQBvpPzZEoOeyzZYTyYtWwfFfSbBHyOTtaOintsHJjCYyFiHYTxXuFZZuqBiwXcVJrSfPprDUKkuxXNnVKDgVHpTtmgWtQdJrvrkSxuxxjkZGRIYZzUlhHfFLBxXbPSsWiWQNnqQhoMsTtLVxdPxXStTGEKIduaAerjJRcCRFfhFTigYHsSDFfdijexjJBbMTIiOxnNXXzZpHhbIZdNnWwQctXlHFXoOKxxfFfZzFNPeuUqVvQkRrKnIlmSwSsBbxoOlxXXZJjmtGHUFcCAaFbBfwbWwypeNnZECFgeMtTCphHPJQwMzZmIiQMURrEQXxGJvwWhqQbdCbqFeoOsSbEeBbHSMiYyBMPpmbLlDdwKGtTgaAMmXxEeAaJVUwROVvsfCPpcSRupoiatwxOoXEeKkWHWmpHKvoTPiIrzZRpwlKKXxOpPmMmqZbBbBvRrihJclLEeLEtIiCrRoOXiVeMqnNQsBBbgEkKCyYWwHXYrghUoOVvQQwWfEOKwEcCpPbBZjOpPyARraJMUhqQGBkYgWOaAGHCypANnZzXOoMjinlhMSLPZcSuUmvRUjFOoOHhmWpneENAaDsPwDdWWInNNnbAtumMlLUlLNbGeEFYyfBbnNPBLyIiSqWPCwcgmSstCcSsWZABbBfyUdmXxbjJnSoGCzpPsWtTKIiksSTAcVtmesxdDLJDWwHlyitfHKkEAeEzHhSjUVvuJJjyfFYoBKyqKoOblrRXxGzZvVnCajHtlxLaEUrjcCcqQzZKUNDdUsSxWLqQqQCiQmMqcCZzSsiIMmRfOEoXHhxnpoRsiQfgULlWTtwvYbahVvHbIidIiDvVEsXCcODwdYytIiVnrRNLlnnNNwaAqitWMmDhHRcSrRAaIiIsaIiVBbvLGglISQqWPvJtTBNgGUvOofHhZjcFpbNbBvpnNoDyYGrWbBkbBKUxOouRwWSFtKrWCOobBmyRyYslRuUcRZGftLjrBEebBqQaMmUiNSsncKQNmMyNkxUuDaKsSHhkYYyJjJGCcIwpQqPWqAeEaQOouksaASZumMCsGgwkKViGzYyuiQCcnljJHxIQhxtkKPWhkcXSDQwyYVLbSAGgEaHhtDdUDdCcvVuohUqxLvVGEveExzZaAXtTsGgHvnyYVwWxXvvVYBMKPpkmpGVAaVvtAgYpCcPrRgMceKKegAzZEAaejToqcswphhEgXPkKpNnNnDMmHhSZFfyYpZkKZoOzzPpMboOBmPyAaUSZHcocrFRKktvlFsLUupOEqZKoOoOFGgTfjBDIKkizNnCfbwWKkgGecAaHZRrXtRuUrpRRoKMunNUrgGCcMcfhRryYtGgGpHGgQJjqvQWNnmGsSgBtTUueEhHUhxiIGgryYzlwWGgdDYaAWNePpYyJLkuUKhPTqvQuNMREePpnqJjQkKTjcClikNzjRlTbxXBKQOHQqXDrZNnzUuZjVvmGimMdnntThGJRQGgFUVRfaApPFaBJFiWLtyYWVtpoQqrRbsSAScDElnTpOoCqjJzrmxpfivVnkKkJnJGAagPjPUuGqvFRmMhvzUuvkcjMYJIKkLlMXgvPdyYmwsSWgwuvylgwFTaAaTtBbGlLuUWVNnlwWwcayYAsSIewWwWFKofbBFyGgYgGGeEoOZzgMLNnLpFcCiwWbHFwkdfFDMGVvWwDdKutjJThjUysYySGdeDxWQwWqXxrRrYyeEoOFFDrRxXyYdmMHMkGjNvVnbhsedtykqkBqDTtufqQqPBMATtBgGPcCrVyYSWBsSbiFlMEsRraAuXdDduAtYKZwQUPZKAEeUYyuUrDdsSRVmmMERraAlCTgGzZxdDXIiGgevxwhMUudDkysVXGWfQHotTOhSmjPWwrtyCHlLbbtTBsSpQtHhqQCcCcsjoOJBPprgGRbRxowWwXBblLxWSsHhVZCCYyUUuCcbHhjJPbsSFfEUuRUgkKGfmjNMmZTtUuzdDMmIinTIiYykgGewTxlzPplenOosaItDMYgGycuqfxqXwWxDEYyVqtAnzZfyYTIiIpPRtBdkKDlLQqmtqMNLlnPCsZNKSskFfoBbcCKkFfNnlWIiiGgeoOEWgxfFeKkuQOoxtTuUXTtBbOhPJFKkfjQqpLlOoPKDTYEemMklDARradLSIcCiwwPzZpoZzRrCLlgGITtiaAcpXBjJiEegDYyelicxXiGZSslDMmdtTLURrrZtlXWpMmzuxXYynQBGIgVZpPnCCcjvVKikMUdQGUlCMUMqJjQmVvuPaAadpFTtHkKwJjzFCdDKOiegKUlLkRrPhjsXvSoFdsSAmMYXdqcuInNiIkKPpFjTyloDByYbBbKSVFNQZzHhFfHhDEePpzTqQhHWwKTtktRZztTkeryoOooOOYOITbxXQqVvxXPpnNpKnoOHHhqIiQoNxBbbCccjJDUBNyvVYwDdCcdUIwWikbUgGQVcQkKbuHhdCcoOIoTBILlilHdMsLlmJjiIhzjJjzFgXfFYhVXzxSWITtBoObNpXvlfWaRrhakKIifFfKaAkoNYynCcfFcCzWwGLFKkfvRSDrFfxfFXfcaAvVWwriIaLAauZGLLOUuoXxcChHYsBpHEfoWwaJyIADXIBLOoyYKkLFPdlmXMnSspPNmdjdDJoWyYNcLmuElBbKemfWIPKkdTaAtuPpUsIjbQqWEebBdDeaLXroQbBqhHhHGgVMmRQmMsRXxrAajnWwpPooWxOhRrjJlyQDduEgOoGefDdXhVSxXvXxKBLBVCclLvbBBwUuMyYDnQqORwTtsSOodgLlGIiZDWwSXjeEXxuUbfFBNYnJEKsCcqQSrFRsNFfTyYsSYyyzZNnzrrUIiuRmEAaeUbBuOdtDdWKkXxNcZsEeScyYuUCKfSpWfrMmGrJDvTtVwstTNZzYyncCPGvVrRSvBqaAtTzvgTtFTmPFCsxKgbSszaiZKceMmSshVJSANPhIDdkqiMrzuUojmMaAJmsxvVxXVLOolfZzCFfIPpykkWwKcAaCcNgLlDZzhVKcCuUFvVkarRTtMeyYuUEjGgHhchPpHPhVKIrBIeshPbkKNZzymqNlAaBbKXkKOGgMmoPgGYjZUuznNJcCiwWLUuMDuUHhdmMqkKHEMmGNdbQCctRhHohHSYypFIxFfZzyynkhmjOoSwTNhJjHuUlFfqNnQHQAaKxXLlVnqiIiRrLyeEpPNbBOvKcCkUyFRrLlfKwZzgPpgGNnGiIjlbgyYPhPjJQqKuUAMmOxRZVvPpbBAaZzmYEXPWAafiIgwRoOArJjFnNfVcAaKGgQsbwWSsuUIihfFiIZzAEAaVvHnBFuUjJSQTtHhlDdWwkYsWSfhfFkLxFmgzGgEpubIMBRrMmjMxXWoxAmMgiOoSshwIiWeEHIGQqbTuRrtTXEfFhZZCchUvzpAbopPwWEGqoLqvNfFZGCFMmoRpPzZrOMmwLQnBbVvWKJqLlQHhgcGggGjRmMMmrJoOjHdDFdDEJGKspnVvyBePXFfRvWwcbTXPpQgJgGWKkSJPPiIpATiItRrbzISAeEaGmZYyzMpdJjfSbBpPfFGgjJGuSssKkSETtnNsSfFhHvZmmBUuJHAaXLeBPpnNPiCcRDdQuUXhQNIivVnGopmMWyeEcyYXZziMmDHEeeQeERrsSUbzaFfPpAvFTXusSdGjtsScCEZfuRYrhgGHhkKTtzZwFsSxVTtVvNnngGNcxDdhiIHvyYVpaRnRxHtBVHhJticCpieELaAUuQLlqNebfFBxXKUisECcFfFkVxXWVZEZVTtfTtaAVKkVvvphOrWwBbXeryVyBrRtTGgAyZfFvDsSVKhHiIFerRduMmHhcWwtTAaaRrACXyCKMAaFfnNVsSVQeGsvVntOfFoIOohYfXxJUujergaAGpooOcCnoXxyFKkwWUVgGlLjlPgSutagGBbAYLzZZzRNqHpPXKVvoCLxyKkXoOvzZuyYwLmWwTXFuURrhaRIiPIxXJjQqxecRFUufsSsWEjTVvfsSdkyqQYWEaAefFBswoUuGgQNGgnvVZKeEFubBVPxXXCcWjNzZRrKdeEOFAaRrrGvPpFTIwWvPIiwgSyYsFmQBtCJcCsSBbQEerRqAaDgtXqQxJlLGYuUItTiOoisAaXwWPDykKoiIQqbBwowySRAVCcXMyGFfxXgTEeXbOwWoVvzZzIiZfFeEZgLfFERFdVNcswGXxbBmMkKADtGUugHKxoQxUMmucycsjoOFOHFZzutRrVvTQZLsSwWHhqQlqQCHSsNnrujJvVEKkmZRrDdYdDuUamMCtYktKkTIRMqaAoRAaaLmMHnMmAaasZwWHbBGgdyfZzWntTsSEmMeXxKkwjJWgPppOskNunUdoMyYqQLwMvFrZyOGgosotTZllwWeEickKBrSYCIicyZVOLMmlpZnuNIwjJWiwbBnflLFzfHhFNSfcyLldDKQgGExXeGCcqOTtuULlDeBdiIsSZzDbSsYszaAvVRkMYFBbJWBQqqQZZwxXWTSstsZJJjZzHIihjZSmzxXZJjSshQqWgdnFYEejmMfHYwWZztTgGEcCIiQquUrDeEvFfxNrSswWMttIInNkDIfFNsSpAbErRvpPLarRzXtTubqtTQXxPpiIBeEncRrCcyFOGQCnNcqDdAaGgkpPrUuxQUuEjJeqaQqIiIwgGAmMhmKCcMJHhiIblLtgUgYyNojJIJaNfqQFkPWwjJNJgtTOOcCoKGTfuUFnnNOAarRjAiIaJoDLwWCclpHhuFxaOoAhHXiInNuWwUyZsKZwsGGXxxXuhHyYoOUPQnGgOoSCcsxSkIivzZdGgUufynmrcCIGYUuyIqQRRjOojJwDJjamzNnZDNndLHhtTvVCoabwWBUarpPsknhvhLFDHhdflQxXLRrEeOecSstElNeoOZBcpPmMCpnuZzkSMYylLSGNAzZwYNBbvijzKiZUSaAOorWmMsBTtNvhQqxXKbpDMaVhyYHvsnbBfFdgyYeJFiIxXsYyMmWwyYGgyaArmBbVvJqUuQoOzZqRrbApmqjpCcPgehmMDGsSwMjBbKBzZIjahHAyfFjQqHlcCiolLOfUNAvVaAvGfXWvVifPeEzrNIieeEqJTtoOZCnImNlLnMiogDfFdXJjxsSjJoOymMYTtoOskDEeEncCPvoUkKevVTkkBVbPpBpPsSmlqGoURmuUTmyYOkMTuUdPwXxWAlXzZziEegsSGOjsSJoWwHsfwmBnWwJjiISbZifFtTElmoOXxjJYADzxPTGgHpMyDdrYSRrsZYywjoOJWVCgyTcpRBbMUumIzBbqqbBQhGcCrRKqWifKxKkxzZJEuUcCepbBVvQFoONUHvVFRFfnsHzUJIiGggzZmMPaWwrakPpnpMmSsPFMqEJjNFFfpsSLTdAaeNnfvcfFjqQzlccCCftlSTtFfseEzmQqMuDHhdUuUjJZSqQlLTcCpQqTtyYcAaXpUJBbjxSscCTtzZRdDbAaBdKcCwFfmmMGpPgGeIsIxXgpPsBbSvyAJjKkZdNOyWwGUfFecORrhHRjheBniMHLfZzUzNXsSFFYxbBHhXxYBbroOoOOoHhOriCcIMRnPWwgGWmpPILPUuyYlLJjRBbqRYvVqQySCbxXyFLpKkPMYhgxnNXGEtSsTTWwrEeRtFCcjzMmMZFfRpfFBGgsTnpstTSJjyOQHhRoOvlLAsSpzvVXSSMJjyYAHhfKhHQqsMFoOanuGgFJjWLlLlVdCcDkiigqqzWxXYynNwLnNHdHaGVYyvlNnpPoYEeynktEriIgUDbHXxqTtoOZMIiGQNnrReErCfPpFwWRrcRquUYhAeiIApPaEnNrRaHEHhevGjSsTtJgVFholXTZzxXttrKdDkRzZjJsbBSVcHUuhsqOoIWwPqpFfqyYwQHwQqWfSsAagHwrxXRwerLlDdRzlLIIQqiiRwAaxXlhHnFrFfKJjsjuUzGIiIddDvlNnLgIigVLUuAaxlLVPVuPnQqqQajDgGllLmFfMSPGSElHkWwNnjrklLSsJLYQWwHhqQqGguSTtsUOhHkKUakIxRrFfXjszZKnZLsSLwWQqSvCjuUJHwtyLcClLmMGgEezUgqDlCcoOzZrRSmbBMsfFfeEwcCCcvVWFKoOFiFOoChDdKHhrRnNkHvVejJvLZzaARLlgGGkKkloOPbBpxKWwkKkcmowOoBPpOoqhgGGcMmpxXcAaRrIiBeaAKnGSZzsUWlUXOexQqsSXWzbaABZwWBOmMnuuUqqtTXwOoZCkKclVemMcSaFUuYdOoDyfFTtSsDcCGIjNnuUZMHkKIihmijHHjqQwWJjcCNnBbTtyNmMnOohaVQaHSshxoDgHfFducCFONRflmfFMLESVvJjsepPULlsSgGKJEZziUZzGgZnUJOokjHhMaAcCmmMHuAaqMtzpUIAufOHhhgPwXxcTtNnXxXENNngpfFMLnNuUeElmpPxnNGLlvAjJhzLRUBxXttTTiJIuZOYyuUZyYyYAaYcCPpNztToOHhOtTYzZAayUutZyYXAXqQNBbnxaxGKAaARXxOorbmMffhYEybYyqjapaTtsSAwaggGfPpbBFgFegBbeEtTQFfqWwmIZzNRVvVvIiyYhwyYVhCmVfFvbwWiQqinNICxXQqfFWwyYcCsSvcCVdbBhcxIirIijyLlDVvBbdaAVvAdivZzfFwWHRaCYODScCLltTARnNRrcCeEewYPEnpPNLEzlLLiqtDWArLEhHPtTBbyFBxPpwWGgfNIiyajJAYYnNynFUDduSsjriILlQqbBYFIRrMjDdncCZsMvvRBbrVfFKExkKxRYlQquUcaAvUudWCOozTVWwBresBCcpKkqvVQsSFfYNtjFfJbBICcwWiEeMmkKTtgTttPXxlLISmMsmVVKkvvVvMsxcZaCffhHFFYycLLLlkrRqcCrtTfFFMmfCuJjUBbdDoOCcEeOEdDzDdfBuUaAbGBdGNngesVCchnCczwrhssSGwfoOQrpPRRraAqTlLAaAaNoKjwyYWRRBbtTOoisSXxlLjMissCiiXZcCxGgoOkcXOoLlAabfjJEOFfGgVUCcuMFGTMvVmJIijyzZTtvOoVZzvVbBmSsleEOobTXxfPiYyJeEiIEecSMmQcGvVPzZGNHhCcOjJuEkgGzuCcmDZzvVOLloALxdDDdenjiOtJjAGgmunNmWLllVjJvRrIkKhSsayYCLltTCBbVvfqQEaHhXsSpNfFjMmJyYnxYmFfxnNXMGgTtsSyNnhHWDiIyoOYyKIiUMnWwnlXUuxBbVOUuoMluULeEmXRjGgJJguUGgxXJjwSOoVvJjpPKMJjhUuTkjcJGGgxZWwUvfiISCzEuFrtcCezNfFRrGosSOPeMOBpFQYyqzbSsSsMTdDtcCmPEeMzZmjCcduXxUFfTtOIiotTcCCJCMsJjLvVlCcEJmyUIJPpeAmMnRrzzZuJuRQqrRaArfWSsWOokKRxMbBmuaAOokKolBbLrlDdSsFfBMoWSOoxXsaAmMpPwOCcMTAbjrRJNHPpoTzWwVrRvIjZrpTWeEwmBPQQqqnCctZzTrYHhyVPpWwIiwWsSiIfUYQkOoKAvlgGwAILlBDdbFLlrRFUuBjjhtIiJjTHyFHhlLDdoLikKPpxkKXYWwaXNSFvnXxNVrYcCyayYAhHGgovVPbedqIJhHwXxWDLlbBzZBfFuUrQqaARbtTqgGQlLRrdDdXNnCcxjEeFfoOaqfkpeEPKFTtSsoJtJLGglNnmMhzXVcCMcrFwnNnGgSsImUuyYUuGgMfFPMmpMAGgdDawtTWmiYyeJjEHhnNCQqQQekfFKEIkxXEWyRrzVRrvhHLVvlUIgGiuBzDuuUFrRfJvAaTdDrlLYevDcCnwqnXlzZnNnuUcCNkdlLKkvrRDVvgIRrnNFlLVCcnxXEeNpyOqhyYrRDarcCuUoORNnsSfhHeEYJjHyYnkKeFNGgJHaAIiprRZjpPkArLlrjUGzZgEYlvVSsWOoZmVNhHkYyTtKqQEeueEUYtTMmXnEeNPpvwWdgSvVsGkKbqQqQBDFFWwtTipKWKCLlOTtTwSsWrKlzZrRPpbBPCYCcyZpPzchHEaAvSsyMmJUPAQzRUqsEDfgRroOHGhqQKCxXclLkHBbljJXjJFIwtnTtNpAazZPrxXpxXDdkNnsSQAaAPmxXfWxTtXlLwlfSsTtSUMgYvVTgGtWwhHgGqeEAGIOoiAKkxJLTyYiIZHtjKkJzqpPrRQPjtyGNcCnhHdDrRIpZzSNnxnrRlLoONXsTtsSQPWfFRuUNQZFjklLppGUjJlUujdjUiIyYsAZzaCcuUAahHEeAaQqAUhexXEFXXWwxnNnNOoruUcLbCoOlAajrRJDdYyLcBlvWCOoEeAgvVvTtxMgawWSsAuULACzZcnNEeUtCSgLlzsSZGsfWwRpeEgGPwWIieeEiIECcbEeJtTjpNnJZieQoyCcUuBbTtYlZzgGLcMzDdhkxXKHZGpPaADfFdaAsqQKuUZuUuCcqvgZhHaqQydDxIIiVvlQqPFfSJqQhfFSTUqQucjJCtBbUPpIJjeLMmIcCiiqQvZDGTtyJBvbjHhDrRWedstTdDGWwgnNeKDdlobfFBOhwWiGgIiIyGgYLzZVCupPBbNxSlLsEsjwnuUPmMyYVvdUfFCcjHuUiIrkXFYyfLyPpYlWVFokblLBBSsbKZEBPpakajJXqQGSzsSZiIsgCcOBbTCvVmOWwKkpPokPpQqdLvfFTKPpqksIXXlFfaAGgMmgwgGkKacuURrCypPDlvFghcdnNwFfzfPZqQzFughHGGVeVvyYvmAaunNUkvVtZzMfypVvZlLhuWwUGzmBiIbiYqQxXjFVuUbBEokKwdDyCxXkhhHPoYUuyYWmMAzZVWwkQqnICOowWuBfFbwWXxGgAKMGVUwsqQtTqoNLSTlLtRtTBUDeEOojJtEOoeTdrRCGgRrwnsZzSxbBJAKkNneEgWRrwRrolDPShHspfuUgGcLLDmOoHGiIFvKkedsxvVXvXvVKkRrxOoBbbMqIiBbbBGFMmVmMvnNfRrMchHMgGQpZzMyCcYnNGgvNpPpqZzqUuYWwlLPvVzlLZxFfXbeUBbaAuPpPnNLOolyYlLTyuUHhkTtUuxgcZzoOMmgHpPhLITKGgktUupvVvVPBXxTfTtRLlcCrjJKpwWmzZgwMmkKvVxXIvVDplROoeqlLdFfDQLaAwhHnZzOHhPpZLEeVtTvWxZzZQqcCnNAZzddDBXxmMigGVecJjVNUBXTxYQWGgwvVOoqysvVAYWwUujAaJlAEAataAVvTBQXxqRrbmxnYdUuFfjJTXxDOoBqQbzMsQgGbLyYVPbpPTgQTlLeUuEtRrQSoOVvNWUuPMXxJGqQgTTtLiIlJJpPCiAMPplDdbdxXeuUKeEkYyEYyjJZoOQiIHhYyWCcwGgNujJoOwWKkkyYfFSmMmMSsFuUNGgnIifYcXxfAaFiRABbjJXlObBeEozFfhuIisSoeEOUuMmiITtISBPpbEtTFMmfmdDXxinNIUuBbyWwjWwJKkGQyIiVvYKnbBvTYVvuLnNrIqwyYcCjxwhTuWwUuYBbywWUkeScuUqjlhxXgdDgfAaqRrQsovVrGgdvNgqQjUuJAaEOYypPoNnbtTtTHHROOoiIiVvUJaAxDdHQiVvGUEeuEeYyjJsSZzpuTtJldDLCVVvvLDWthRrksIfckKuoOnwAaWNnrRvItLlTtTAgzHhZbTZzrRZzgHhwyINHSfvyYtAaUHpPuatTAgQqOoPLKcCDSTeEFfiIsSFNPDdknjCRrdRriXgGwWxQeeErbKbBkBAacnKkNCOhhHHcCuJlYdzPEaAeuFsXVvxSRrfUDdwWeKkvVrRcOLFWPpEewCYtmMqnaAMmNhgGAwWaIiHxclacCUuvVAgGVXzPhUOoMwWmdoIjJuBDXxWdDqQePpEwFfeEZOnNkIXxcyFAafaaYlPyBbvXxAukKfmgIizZcZKkWwmPpaAcaSsALDTtfFXxYxFfNFfsbnNJjBqevTtLlDdLldDwWSkKYyqoIiSSsODUuIMqQwHkKajJFfjCcLlOdDGIiSsGggFvVfoGKnNKkyYJuRANHSsqDdMrRGgnNEeMibxKDXxVhHqxNAaaAnqQWwKOLlokNdDpcSYyvVedGkKIjJDrhHMaAFoOfFfwWCPpbPphHBPTtpcwWqHhKEeXxJjQqAzLmePUeEJIcCHhiDxXdgGIQqBFfsSidDcpBjgGpTMDVzZnNWRDddDVvsSeNAbSVVvLTenNEKkCcvJOoepPiIiIjJrRuSsBgGbjMhHmjJgmivOopIincCNdnNcLTtlCklCcxXovVOLRygGeSskKECQqcjJPEyYeaFfubBUMnyYrUuPpmMSsRNPpnqzZduUDOXxoeEKayYEtDWoOwdTeXxdDkZzLlrULZzIigPpVvGGgwWlNrRJhHjDZzWPiIUuUmyyYHhctfCVOovKVvfbuUjJBFjueEQEeqSdDjUmGbBgGTteLlEJjgUmMHTthEiqQnNTeVvoQqdiIDDdfBbrRnMmxLPplCbBcCZybYaBRukKXLRkFfKryQmiItDdZzsSsSiIFfRulaALTDPpRfTBOohHSXxgGfFZzBpfzZXxwPpdNwPnNpbBWvBbdXxfFDnSrRsRsSrZKkzXEexPpfFOaAQqFZWwLTtlWhGgAyCiIFDdZzbCcPcCpfKzZdcrRByYbxAaznNZpYyQdkvVTUDtdJbBDQqNnValLlLVvAtBbIgGoOiTvdjhHDbEeUuCcKznrHhQSJtTMYyNnmPTrRBbPpqQeWEKPpWNnQLOoPpzicAXxzlBywgDdOoQZKkYqDdQvVvVvVPRrpPZVPgmMfsSFGSjJcCiSEeCcdIpZGVNhqnNQuUHkKrmCcgAahMmHGZRrzmMMeENsSZzjfFRkKknAsiDSmTMTtmLnNfdDIicCwvVfAnaAfFNmpPHhnmFKWUYyuRroOFfwCcTtrBbRgPptTJQDlokbUearRJjjAkMmKlIiwiIWKkLaJgdDjJTLlXiIBdKrQsZzbmMzpPZBSUuYyCcpjOoTsQqSogGOgceeEnNwrvVRYyTtWJqhOojJIYyvvtJjdDUOgxXrREhRrMVvmHGsSEesgGSgQiIPJhHYwHbsSBHBhHuLlgGijLlEeJXTtcClLZzXbaAHrRhFEesTtpPzRUMmQZqQDQqgGYVvyCGgadDBbAXxNnhtrkSmMsIzPPpBbDdoNBbnBbNvMmVnfUHhuFOoOpQqRgNgnEGgeNKkjEkKlrKkqbBQcCRzZqoOQLeotohVTmMtEsuUHhomMTZzcBrCcRfRYeEyDBbdrQgGaIuUqQpPhHXxivVQhHeEJiHFavVMKVvFeEuUlASsYkiGzLlkEKkeOoAuoDdQyJbSuUscziIwfFJgGLWQdDNnVvqrRyYymKkZzWwMFHiInYyTvVXxtTtfkKFUukeEKyYIijiSbBlwWGgRTcCpIqmMQvViPOyhsSsSHqeEQYyYARrXxauUHhrRKkGmMgZwWBbZCcIYZIiLlHVmMvnFFDpPtMoODVvdMUVvuQqlmfhHFepPGvVNnRrEegFnNcChHnNfNnOhehHETtHoHUQebIixeEEvVLBYyTtefhmMFCcfrRlLuUTTtAzZvTtrxXdVCQqcHhvPpDeWwCcHhEgACGgjJFwWecCBbEfMYWwwJjLFflZbBjJwWWfFTtNhHnwtTwWfIoFVVWXJzZuGYlLZzLlyeEpPgQqUDdjfYCGgTtIZzKyYDNnvVkKfblaAhEFtiwVvWIUuZtEemMVvYytEeTTkpPlLRAarjszZYyzNgJjGpPgFVSDLloOIinNRrloOTtJjbnNkKBVdDXwWNSsphuDdUHkPpBbnTZFrVdDfCcFvCcbZreoTEemMwWJeEjEZVvsSAaSFNnfyYzLpPWzqHoOhuUQecgGfKkFLWaARrIOoxXyswWxXqQpNIisBswWAaRrchHCSbXErRwXxWeiIXrRQcxGAusSspyYhHMmPBbIkvVKGgZzlLvVuizkKvgQcJHhhHjRrymMYEdDeCOZQvVdKkDqkBbswmMWSNnZjJuUFlIuCcFWwvVfUpPiaPaOZBWwbGgzQiIqjmLlLIbBYVvyAauiIdDjpPJDdiSatTANrtkKvmEeuUiIQqVhZqQkgGjmMJwrAuUaFfZIizYytxrtTRrCXcCjJBbsrhKJjkHTuURrtjZzEPZhHzpalLcCTuUQVvVIpYWAawfFefiuUIFZPpzsSEFZgGwiIWzBAtWEewpFHhfPKDvGCcvVOXxoTJjezZPpEHVvfFPuUnZzgVvTtamqQiFYsUmHhsYRryJWwIjsSjJKXxOueEUokKENOQqoaAnZzIRsSlrRWpPAawqQPpLEWwNnbBcCwVOaAoOozZvVnqoOIitJudiIUALlSpaAaWYysSmNXyYxiIjJuZGgaAEaTVNnuUAaNnBsvVZGgyYqQwpPiwWAaIDBbCcdQqcCDxXdqQGkKsSmMkXOoWUumMxXeEJfIKTmMuUxfIiMVvMmyYCcoBVvPppPbOVAhEcCeLqGOceEOonCMpjJkKTbBtJDDLwJEewWiFlLDdXxzfCJjYlLXUlgGOoDdkgGKhAaZiIzOvUuRrQqrQGCTtcKIQqihtTiIgHhGBbHCcMKkGSeEFfjJsSsSsCyChWwHcUaNCISsiuDaWRTFbXhHIiwLlFYyDYHhydfLsqQrRFxUumKrRmzwDdbfJjUQquKkFXxdDLlRrWwNLbRYyXlLTMpPpPQqmpPCcrsWwrRSggGwskKmMbBgMmwWwWGHhSiIrRWwmZzMXxWGsFfptppNEZeuUEPpfFpqLlEEONUuFqLTtAalQfsHedlmMDRCcLmMIiXgGuXxUCoOWkKIiZNuZxXzDdSsYKfFMmQqkzZRZrRzryHBlSsRQhxXHGgKQqkMmSBHQqdDOasSMmAohVRrvtTTtIwWwWiwdDSsdEeHZAatFfWgGwTzElZJjVlbNnwdgmKkMydkKDYuUyYGvgGkKVEekKrnNRCjJcAamsSMDgKkhPRXxVjaKKoOPHhXxnsEeQqfTKkELlFgGdBLQSAaszpFdDVQxXqvVQMQqeEVUuOoQWfciICEeFfNnGbbBBduOofFFsSBbqQrRfNBbnUnCZzczjJjLplLdDquNnURrsSdAxuUXtTaDtrRTKntqQUuTNknHEkKFZzfSrXxMSrRsSdcPpbmMkKTtBbgGkHEehzZGscCBiIbjJwlLIiWPpSNnIwWieDipCOtjJJjVTtUuLWwlrRLBblWMsruHLlFfhniIkSsmMUPdDZzwBbNFfSWEefFtVvfFzZBbTdDpKBsSmMsqPpWTCctqKkQSBbBqNnfDdFmYymMcsTtyYbBskKuUQrNKknyqOfFouUBxBJcCkKSUYTtyTQHTHhtXxATtUTtFfoORXxuiIUaeMhHHbzZPqXfCcvVgGFrhjJOaVdkKXxrkdOoDpPLfBbnNFeQqoOxeTdbBDtjlEIWSswiZQZzqPKkXyYGiIgtTQLlqxIifWeEwTtiIsSoOFGDdSQqsVvuNTtFXjJxgGBNAaYeEExXlLPpYyHPphHpOoPSTKBbxXzZfHGEFfemFfBjSOaAQqajJsSjZqQBblLLlzdDhHIiMDiDAlEyYtsSRoIpfFrnNjJRPlEDYWgGwFTtpPgcKkFfCGjJnCPasSALtTVvfFnkTubcCBipgCfuUFcGSslLVvFAhHfFazZfFfFfAdNnvTtNoQqzZDdOjCcJAdBbqQnNdDDYyODNdoODndxzQqZBvPxXYyGgEepVbLXxDdZdGVCQwWtTqcoDYzukAEeaKATHhVsSoOydKLlkYyOoLGgSUuqkKQsJjWpgGXfFxJjlxYyRMjJqWwmMyshalGgLAarRAkKHfWwrAtGXxbaVvAMmaTtgdDGWhBbHwoOAFjPpJfEehHGgVAIGoVBevVZzENncCLlpUsSsSuiIPMmHhTtCuUnpPpzQqZipoOcczZCLlYbBypDyiIqQRLlrOocCBSqQqWwYmMEeyylLYjfpyYPztcCyOoYgGTyaAYbBIzjIXnNxRVvrRIiiiwWIPpgTHrRxUrRuHZzKkfcCFhHhpPyYNnnNjvvVSsVSsOoRSsrJHDdLrRlfFiINnUjcpPCHqQbBGAaGgMdDAFcCvVhHfGpPgaxXTtsACsSsScjJjJsSaXxPpqHXCcwkKsmMSsIiWnNwMmssJcCdDJIiAatTjGTtcRrtuUUiRgiIlLGWLlsSoOQqoOwrJJjdfHXIzZuGMPpmgkfTrRPIiSsiYyIUurRHhJvcCeEVseuiIvIMcCnNmgCxXcDdVvgXxGWDtcCTOodFfCMXpfiwqYjJOornNkthHhBbHmOoMKKBbnfLEeaAovFfGghHNnlLweEjvVmMHhwWgGcbBCMmwWMUpPuljmMJBbJjLLjvVhtTHMmJmGgXMpPmgZAFSsHhfoOdFfDnmkKjhHJZPpBwWyYEeOrAaRdXUudDqQIistiIYyTSRcCrsFIpPpPTTPBZzZzpEefKkxsSXFRrWwnpPEeTFftlqQOosdDSZzLImMiSsdokKOIOJluUWnGIxXjzWwcPpBbFfCOQPMmpiIHzZgABIioECwmMEeWjJoAJjaoxXmUUuqbTLWwKjJkltbuUGgBbBgVvhHWxLGCcOoggsSLlGeaKCQJjNqRRGgQqlqQiagGUBbFsiEeIuRQqgaTtAPpMEeVQPpfokKpXxfFcCbuMhLVzZvWwlVKbBkNnPHQqzseESiSCGgPsfFsWwSYyJhlIiLiIrRHjuwWUfsgGEUuvVAsPkKaGAaqQQqgAWwpiISTtLlkaAKTDdHhNnSoBbYlLGLlkKgQvVEpUEeyYUqQuoOrRsJjHhiISuUpPyEeYQFfquNVqQvvjwWJOqydDYpPDdYDdwLqurSkKEMyYQnpKfFHhzZkibxXBIyYJCcjJhEeGrMZizStGSsdDOOIQqqkvVsiKBpPbVakKgGIXxijJTtXFfUuPvVxhZnNHcbBsSChGbBlLNRrnDdjUuoOmMcpqhtDzwYsSfJjPOEeksOoofMmFOAKNnkjJaRegGEPocCOMtxXeEEeiJxXCXxcxhnNtissSdDsJmMBjfpPVvVvRTzHhZbBQqzZOoFfOAaRrBbeiIEfFBRrkJjKZgOosSGGShHsDdoRrOSsRrrfaARpxxXXJjPpPMBSqQNFfnFqsSyYNZGEkKLlDmMEeqQJjgGdDpPBhHbKksBbGQqvTtgMmGozZkKzZAPkKlLpRrFhhHHfLlIKSsoMgGgGtTnNmvkKLIpPBbinNmJXmXxOfFhfFCcfLtuUTrmMwWRlgrswWlLlLSYyKMmIiRrsSSskYgYJjyHhgGGeEprRPpErRePSsoOjJAaSeEHhsDdfAaFRWXEBbyDMmjQqJdLlYmMRhHxbBkcCZzkhHKLlcCBbestSsAKkgGMmDnNSsqQlLdaxPyYpFfXpWwBVvxypPYQyEeJjQqwWNnYEeJjAnAiKseErRdrWwvRrhHyGJNEeyYCZxXzHhpKkIiqQEerxXihHxiIXpuUYcCoOyaAWVPpxWwQjJHhqSsNYyDgGYysrRmwWwWvkDdFHdDhGgQqbBnnZWOQqowTLSVYGcLJOoLlbCXxyRyHrXxTNjCcHhJjtTgGhoOdKkrieEIDdRClLAGgTlLuUtaLOolrRJjoOyPpBuKtzZqQTUpPpPukUYSnYyraARIiKkNzZsgFfMfFmRrRfxyWwYAXxabUuPQqfFZdWlLFmwaAaApKkPWKZzURrkAaeiIETMmMuUTtmtxXHhAdaMmfOoFYseTXxtUubqQtTFWOowfgoOGUupPLliKkYDdysQqoNnOrRcCbpPXaAxVvBDHhoOZhHcCzSsqdDQvxsCQVvnRrNZcOBbqTONnXRrPpOoxiIaAJjUBbsSUuNLLllFfoXxOGcChHcMmLtTeRrLlGEeglZzpPNisSITNntvVtUuTvbuFfhdqQkYykKKXxDejJjjJoQqHXNUuGXtNnaJjeMSdDeEgquUEcgcCjhHQqKoOJmjJCcZysSYlOcCoHhLSeEaAOfxXFoxXWwzZPfMmwWQqfFaAIioOEeufFGgFfcXGgxCEZkKVLFfyYlUuvtTIiGgiOkKUrnkKNlLIuUYmMywTtHhKnULluNkdmfFdqIidYyDQwWeEoDMMOOaAWwsSoeMWwDddDDdxXIizZrRJjavVENnehHvHhbBKPIiUuTIiWCcwWHhuqQMmyYIzZysSYiRrmFcCfFfRrMcKhHkyziDdIyJjJFBXxblLBbDdFsvVimMgcCGCOWwBbRFfeVvEYymeEQqMQqiIUuHhkWcCTtuUsSrRmUuMVvxVvfFXTgPpxXvVsUuSRrRShHHPmyYMpEeLlrlLiTteEeXxwMtXxsEexXqDdUuUuMmGgZzQhhHNkUpPcXNnxdDCsSwoOWjIiShHsgKjoOwWmMUXGgxuZzJjvVzkKnISUuMxAaXmsiliPwGtTgWmMwWJKkkpPxmMXqQEKXxXxfenNEFkMmelLvIiwgGyYJjWHhwyhTtHoOUTDsxXmFfaFfCcPpsBbSFaSVvsAPpKkxXyYtTiPOopJQqoCqQcSsVJjWwjJYyWQqwPppGgPNfFZznPjJpywDdcCTtOokKLlJwmMbBcrRCzRtTpPAarZSyYYyeTMmqbBZzhHQqHhdKkDychIiHLyYJnGdNQqnccCCDgJiIfiUXTttWwKkgGtTStTsXrRxmlLMyLPhHplJrBbtTZzRGjJlIFfioOcqQCLlSsLaNnAcCmxXMJjCHZzNncwVYyoOGPbBnNBhCcHtTzWwYyZzZHTthlLqQCXyYylLbxXBgGzZclCxXohHOnNbGhoOwYsSCBbYyXCBLlwWpdDPFfbcCAhHaFcpyYPiHhICFeEEzZcCdqQPmWwBblLMAaeEgGtlazZeEwWrrRcjJCnMmMmQqAaTUuEesSteEiuUsSxXPpIOhDdHoLHKYyWaDFfdAcCNnnNQgtuUTyHhYkZBNrRxXAaRrjJBbtTCcOokKnUuQqZzINyYuzZhkKHNnWwuUrcCRUxXGLlEeoOGFPpfwWQrlLRnRrNlNnxXsSLcqMNnmQnZxrRQqIHhiIiTtXPZzWqQwKfFLTdziLlDdLUulIWXxwweEbBWMmZDdmMDFnfFKhkKHWwIigMjJqhHPnJjxkKXdMmyYmWfFCWwceECcqTtRUuRrmMPjsSJXximdDsYwWyglZkKLUulzKkFkbBLYyxdvVuUKkDIidDSliILsnWcCwNuUXohHjNnJqQNlaANVvnDEnNvVJjQqPpmVoOvyaAAlYyLacCNnnPXFCcTbBIitfrcCexXElLvVweEZkuyTtjHMmkmMrRMmcnXtxXTBbsSxwWZzdIiEiIAaHaAhHJlLUujWvVbBhaOvVLlBbIiSspPopTtPcCcCBbVmMJjvEHyuUxXIiJzzZkKAauUtTZnBEedDbMWQqwmsQlLqTtgPpdDKkGTIiccamVvMNjAtToONxXBbCcnaAtTHlsSLmMCcjuUJHhpPRsSrTtBbAcxXQqdDCEepPayngGNYeEskbBRrRBbILlNsPpSXJjvVxCuhDdzZuUwfrRBUuYybAIAaivVcCGgaGTtgxTtXfvnNVpSsGPpHhgPfFmMFkKmtxXkKfxXMgkKHjJhGzZaAmGtNOVvCcrkQTRrtqKdDLltTeETIDAOoadDnnNNPpdiUWqayTtYAkKTtmMkKfFUJyYwAaJPBFXlLGTnNlLuUtYypELleewWaAjJYzZysVkpcCPlLqaAsoOkBbrJjRKMscCjJSiGgImSoOuVvmMCcjYqgjimyYMILlJMmEebRrXVvxiPpuUIJjYyPYypIiYnNPIipdQqDyoOVKJjsSkvGgOobWwBVEeFfmMIBbXFfDrRKvDdkyYKZzdDSiIOoWEBbewQgoOBKkaAoskKSFfEaBbAoOluUtTTkKthrgGRwzZWAbBalyYVMZJjztdDXXxxTmfFSsSsaaAoOrRtTVvHHhgGRriIhAKFfXxqQkdDOolLEeTtWRfKkFrwvuUvzocCODcCceECdXxsSYbBZzXxmMGgkKTqdDQlgAOoJjaKuhSsEeDdHKkFnCcQqhNnsSoqJovVNnVvOzZdDjJMKkqQkKIizZXpCqIiQyYtTjKkJjJqjJIIimaAMSsqCcQEeRmMWwmMSjoOCsScsFfSBbAaoIiOIljJLiJGgAadcCAaPoOoytXyYjJxUUugGuUNnnDdNIRJNdDyYnrLJjlfCcFLlAaMmRHhBbYxXyYdkwWWwCuUcLlJjEegGrjgGRrCBbJCRrMDWwyVfAaFRrvLXJjxmMkgoVxVMmEnDTterHhVvpyYBxXtdDagGJFfjAHhTtwWUwdDWnNyOovHhVTmMbzjJZBnjJiIPRrCctTaAUuICcipDdjWwgGjZzrTOotIiOZzoWwEeXnNxMmBQgGjJOxXWwRodDYyOrCKkuUgAamqBbewwSsTtGiuWwUvEgGFAapPQqiIfMjgAaGbBWwsSFfQZXxsSOoZzWDdMYKkNnpPXdDlLUVvuhBbRruUDDLlzZddsSxXwWjAaJEeBgGbfFGgzZHMmYykKZlLGgXxsevVaAvVwWUuWwaAPhHWwjJhHJxXiiIIjpxupPUPAapRrZhHSsGgvVzaAXItThAaKktTxXjjXxJUFvVuUEewWiIuUGakKjJdDXShHCcjfGgIYSsTtyiQqFJGNngsGeEMdvVDmgoIYyJjUuiPrRpCchgTtqQGHUusacjdDJCcsSuUpPyYjJVvMcKklLQqQaAnNsJjSoZzOLlzZxXqQqvVRYtbAaBbBTyuUmMgGKGglLciznNZICdDuUkKNngGKjJdDHhkBUuiQwWfFmMcIbBXxiOcCgxXsSqQrzZLfFlPpPpmMAEeubBzZGfnNaMmAZSsYEdBbDSIiBnUumMNMmbsyVVvpTtPwWvYzqQnAuRryYHhUzZOojWdDNtTnPpuUwAaIiZOoZzLlQqbbBrRNntaAqQTvbBqbBKkQGgOoVqgpkhHKbgcCGdDZvVWwWwsKkdzZMxXUuzZvqmMQVUumDdJjOqQiIoQEelLhfFHeErRCPpcqaAaAfUuUuFTVdDHqQhAauUvKkpIiPcjJCLlJcCJjwyYGgrRRbmxGgvVXcCoOyYxXGQFfDOZzRrlKrRkFfEnNeNIirGgRnxGgqQvQqVkKQmxvvVcEemMCAauUxXSNnnNLzZlfFgHPphrRPpGgvQqVGMmjJXvVxeEaqQAsrRTODdoIieQqbBSsEoOtsTtSIeQqHqLkVvKcCnTtCcfOoFNzZSkKpPgGdVvTVvDUcCudrRtbBGxXgpPDnNdTtrEeNCcoOlEeeELUGgWwnNiUuIzlyYLLlYyCBblLNqQnOcWHhwaACrRoOopPVvdnNDbNnBzEeqQCuUDdeEVvcZNncTttzZTMDdmiIQXMUumxzZtTgGVXxDdvVeEWwfMUucCbBnUOgGoiIuwWUAGRtBbTSsKZzQqCcWwKkkGZzgteElrRiAaIZzRMmrQqMJjJjumMUmHhjJwWmMSjdDpYypPfFyYzZkMKkKMmkmkKXCcRrxLuHhvVUPpPpAafYHlLhpPdAaDPoOlGgLlLgCpJjPcrRGOopRQqeEmMjJEKXxkebBDDfFyYdZjJJIijdDzGgMmKkKkrRvICcIiiVGgwZDdztxXxXNnBOoSZzmMpyYPbBSDnEeyKkOUXxtRruUTzZupPoYycCQqHhHgGnNMmLlNnMyYAaGgnNmAQqWwjJaJkKikKIcSEeoVvOLlsLlQPpqfFuUYyxyYiJjIqQXCjyYHoOvVvVkKhUuyPpeEIiRrUtTOovVuMQQqqQqmWwcClSuUwbBRCLleoOEcfYnNyqQBBbCcbfFaAyqdiItTDQYDdnXxNiLlOoIIiJuUuRroxXEeOrRowWVvOqQTeEtpgGoZQSsqXxzeEaAKLYylqQVxXvhsSsSpWFfwiUuIbyYBPdDSsTtnNGgHkKkKWwiIkFfgGPUupvqQsSAjJaYyVrsSDdRwixXIkwWOMmRrsSSsWwuUwGkKgCcWGgZQtjUuJTqFTtlyYLcgGCPUFfupGZHjSOoLlrRhHsjgGwWWwtTrRjKzZkJEehSiIIiSxXsJjZzkKEelYyLVvNLlhauUAHeEiInsHkKHNWDdwnhfFPDdIiDdpQNkKnbbBBqPoOKiiGqQCcLlgzZDdrRGCcgtWwqRrQjJLwMtwWJjcpPCcCTgGhCcJjHniIlLNJZzjmWDSsqQNndqQMmmMqNlLnEeNnTyYuUbeEBMWwmdeEDNnYFfRrRryHhzZPpvVGgGDEYSsyedsShHSsVWwAaJjmeEMiFftTyZzjCJwWdjKkJDKvtsSTVhDdKxFEefXkqQHpFfRrMfFlLmOnNoPJtTjNvVnaYcCrRNnLlFmeEMfTlLIvByLlYuUgGGJxdDXjbLlBwWgbzCJjcZVrRXxOoeEBiIbcBbCDrRaIYgiffNaAnGZzeMmEJaqUuQBxXUGwWwwWqQWyYJeEjqjmPUmMsSSsUEeiviIjJVBbDFfdrzoOwqQpLlPIDdiWwKkWWGgwxXXuUxqQnCctThIHhiZzNjJeyYEJjBbBUUOoqQsoOSuUuvwWYyOocCpPVjJLlcxXCEehHJKKkuULlhHBOobkQqRhHDdGyYwWGguUgxXbZzBPCckKFMmftTgGWLmRrmMQqBbLpPCcOouzZUzZlMNYAamMyJjKgZzYyYyHhvVdALllLaDtnUurKkRdDNqQkKvVnDdtXxTBfaAzUuZzZKkFwWWVPENnqQqwWneEQWwMbBfFvVEywWoOYvViIeRrlLVvFfRwlLWXiUuHeEhlLEerxDVuUvdXlhHtTRrLRIbBqQisdrhHRKkNngXrRsbBSRrmMkKbBWwnaAhHDtTXxezRrlBMmAazUrRurRhjJHZdDbUarEPpebBBdDbcEeFfnNhtTexXEXxSsXxaAqDdQstUuTPpSfFqQjMmhHjJGgWwYyYyJvSsOAaorRGiEeeDlLKsSJjMmkyYdPpxXEUmMGgpKkZzgkKgWwGNdrRDLlJjnqQGOtTopPyaAqQgGaAYAYGgyYyZJjdDpPzUXxzVvlLZAbBajTtJmMEeuLaAJjLIuUillTBbtTaAtSsjfFJHFfPpEaAeAlLOOzZLlhHooOotapPKjJkUwWuMmtTCVvIisSQqSaAsNzXvOomMxXxGgalLAlLbKkBXDyYLqMmQHDSsdSsvyYVOJjohoZqQIitxXaAxXEcCuRrUcCbBeDdLlBSsbPpBbKkYNYeqQEqQynJjyhxXHHYytTWiIwYyWwZiIrRSszKFfZaAAcCapKkPlSFfXxOlLuUsHhiHhkKvVCcVCaDdzZhHrRkKfFINxXnWwiIXxivVvVAdDceEvIxEeSsFOofXxfNnFqQkKDKMKkmgGkdRSUuPpiAGBbgwgGDdSstTKhHsSknoOeENtnNTKkDsnNSdWmpPMBUqQLbKkBNnOotTtrRMmLllLTHhUHfFhbBIiEeCcOTLZRpPIJaaAjJeEAjuIWwiICAaciUCBLQJjKKkQqkhHqpPlbYWwyWKkyYEewMABbVvaEemMbBGbBJxXjgRrAQMXxmpPQqDVvEeHhvVdqyYFYyfaGgJQqjvJjVVvgBuUKkbfFPpdDhHmMGDAYyAaaXxxETyYtexXxoOxXWwRrHhTngGNLlYylLuUtnNRrNnXolLieoUuOLlzZEAamMmBbeENbByYnFfYyYXxyMfFxXIcCLfFpPJveEMsSYZzyRrGgIiTWwGOoMmgOocCNoRrOHhnCccgNKkcRrJjEeCnGNMmqQsSNnnJjwpYyPNnndDdAaDPCLgGlqQWhHwtTqxWDdhHwXjjJRrJFfyYUuNnqQCFfnNcQqQVvqOoqCcYyQCeyYAaQaAqEedUdsSDaAfFupPrRqQHhDEHhvaAajsSJAKkVJjxXGgcVvkKVVUuPpGPpxhRrHkKvVKMmMmLlfFkqTpcAaAaCHhPcCGglLVvtvrRVvHhrRVLlcgGXZTtzxyYIiCFfARriIaZzTtHhuUZuUuuUUTYytjQYyqJJAjCclLZzZzxXLlvwWhhHMmHNnpfFDdPVJjHhtTIaxXSsAOoiPpsSwyYxkKXvVWrSEesRkKOwKCjJBbzZIhHTbByLlYsSjTtTtfKkFwWuYyPpwWmMeEXxeEvVTtDdKkygNnGvVvVsSaZBbzAiIHhQCcqEhIJjilLlkEeWJjwXxoOOobBvVvVJjKVKkYyVvwqwWQgGdDvNnVHiIhPpgWLlGgTJjtwpgGPFQqfUSuWwuOotTpPhHUukwWAaMSsxXcCyYmQCcNnqOpPowWsRrSvVFIifaAbBrncCVvSsNgGfOoFnNRiIKKfFkJjsSHhCcHhOopPcEeuUCYFfYyNnPpdDyvVjPqQpxrRXhFfHhXxIiHQqhHPmNnaAzvVdDZMoOnNpomMZzTUutuDrRdIHhiZzUTfFPprRtpPdDZkKmMzNnaLlsSWwAuYyVvrRNnUVUuviIsrRzXxEeZqgGOjJCcoLlNneEpPCcpPRrWwpPqqQXxIiQLlelsSeELwWXxlbdDOyKkYmMsMmiISoBLfpYlLyVvPFoOjiIJQagGARmWwiTtqOoQIvSsjJcMmCFAawBbWnNiIKkOvVPklLKbKkBpoZxdDXqQlLzVsSvBZzBbtTUuYmMydWwXxDnYpPyxXNTPDdpzZzZiIbBVvIiAatqQOoVveErbCVvFfcBRbRZzOoreEiFfaNnTtAUuhmFfMFfNnrRZzYyHIJJjjpneENxXjlLwWJeEWHhKkwbhjJbBoCcZwWzZzOlLyYHmMBVJjkIiKbBveSseAWwaiIQIiqGgJjWwSskzZolLHhOaAkKEeoOhvVxXHVgGvOVvovDwfWKkwFuUkKkkKjJtTQqwVMmUulLvPpvnRrNTtNnIGtTgesSEGgCgGDdrRhWwHciIibByYaAQqHSshDdJCcjVOoWCaAIbBircCRnCXxxXcNcjYyfFUuDlLXxdwWJqjMmJYStTsCcTtDEedbBIiAapPEekKQqNnxjJXJjrRyhrRHTbBmMpRPCcZzpeEfFrTTNnttfFPfFEefFxXNAaTtdnNDaAnCcjJKkPgGpWwdjJDDLldtTGgJjrRGgGgFfWKkkKwZzgSRrgGcCsldmMDLxXmMqQmMeETWwUzZeEuBbGvVbBuUgQqOxxXXdDPXxFfmdDMpWCcwGgCcoKwWLldCcDnNkKxXkUutpPnNeEpoOJjPLlcCQWwBbkpQqmTtMPEeMmzZveEVFfMmXmMxqQeEArRQqaqSvVszSYyyYsEeErRVxoOXvMbzZBecCEYyGgDdvVmuxXUPxXYypeZzFDaGgIiAmBbMcCdFfXxPpdJjDfoOrRKnNkchHFLlfCSIiDdPpAaHxXZUuMmBbffEekDdKPpFIiKkYyHelLEhqrRQxmMjCczfFZXxqJjTCctQnNQIilLqmTuUtfQiIqgGFMHMFWwfWwBbkKmXKmMkNnxXxhmdDdDPpMJjEfFTtedDQqheEjJvtjJBbTVPcCphHmlxXLNDvVdttTTnMNnqQHtTtTXDdxiFfXxIEeQqclYyLvVPCcpChHobBOxBIibXdDyDdjDdJveEVKYyCylLYKkUuCPbBpoOcJmMjYybLPQaAqplBTtYyUuoOBEeIiUBbsSZzNnEerRxOIioXXxKdDRrxXkrRKkHbQqBhkGuUgjJNUunKPcCyoOYXqWNnwQxVvZzxMmYyGjJglwWSHhtTsLJjvVTeEbjJfFbBBuPpUGgmMJjtggGmAZzaMClLcqQwCcWuULlBbTGxXOoglLpPtzoOzZZGQqaxXAQqmyYMkKTqXxkKQyBbYQqsSJbQqBqQUIiuuUXMbBwWjJmvVRRrgQOoYyyYqUDZZzlLzvbBaAWwVTtsSNnXBGgmCchzZHBbMbWwBbwEeLlQyPpEeYqfFOoHhocCpPdDzOoIkHhMmKxXYyiZODdvVkKojJOjCcGgJLlULNnxXOHhomqkKQzzZZlFfLQWwqWwqQCNnBblLbBaRrAcOcCyYoDZzPpeElLdZzjJQHhqhHwWeFfUedDEjcCJzZujPpvrRVdcCDryYRZzlLoOJKfFYyHhvVeujJGgUHhnrGwbNnBWgxXRIhHVsSFtffFAaNnGRrnNRLsjJSlCcrRrgbBtTFgGhHTlmMSsLrRsHhAaSaAflOowgFqQfCchzZlqQLvVApPgGXxgUJjuGgGDdaibBiIlLvTmMmpPMzZoDdOmMtrRsoOSpRZzvVryYPdDSfFsDdpPqdOoDwWQikKIvKTtuUkVhkeoOEKdDHPpVvSwWszZYECcTtgGyYeyYytQqTUurTiIPkKeEhmMHpdDtRJFfBEebiIjlJjZzdAaDMmcChRWSswrHLIiJAajAaSNcDNndCnsIBbiKkmMrLlRrRDdVqQRrcCMmoOlLfSWwsHqQSsbBAaZzbBPpGgIiRreuUqXxQNnXxEhBMSsmaOoxXiIWwYybBvVARrVZzvHYyXxhTtqXxgGQRrkfFJjaAJjKuURgGMmrKktTmMcCFfsCcSMmLhCcqQHXxlbRrTtNnYuUjJTtCcyUQqQqCiIcuCiIsSEbBwWeuUtHhTLZcVvCHZzVvrRVJjvhadDNnbPBxXbHhRrYyVvpwWazZAbBHhhHskaAKSDtTdBXxAQkKcCqbBxXxbBkKXrRdDSiYyIDdswWbbBxrRXiItIijVvUupPcCeEmMhHJkKAauUDkKoOdghgGHyoOoOYsSHOohmMRrbBHLeElbTtIiBhvUuVGFftTgSQqWwQtTZzqKBbLlkMjJfrRFmkAaTtKzZpQGoOOogqdDPjJpPfsSZzFHhrRPpPpyYsSh diff --git a/2018/5thDay/challenge1/istolethisfromsomeone.js b/2018/5thDay/challenge1/istolethisfromsomeone.js index c357776..e124dff 100644 --- a/2018/5thDay/challenge1/istolethisfromsomeone.js +++ b/2018/5thDay/challenge1/istolethisfromsomeone.js @@ -1,44 +1,44 @@ -function part1(data) { - const polymer = data.split(""); - const removeChar = ""; // No removal - const stack = collapsePloymer(polymer, removeChar); - return stack.length; -} - -function collapsePloymer(ploymerChars, removeChar) { - const stack = []; - for (let i = 0; i < ploymerChars.length; i++) { - const char = ploymerChars[i]; - if (char.toLowerCase() === removeChar.toLowerCase()) { - continue; - } - const last = stack.pop(); - if (!last) { - stack.push(char); - continue; - } - if (last.toLowerCase() === char.toLowerCase() && last !== char) { - continue; - } - stack.push(last); - stack.push(char); - } - return stack; -} - -function part2(data) { - const polymer = data.split(""); - const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""); - const collapsedPolymers = alphabet.map(letter => - collapsePloymer(polymer, letter) - ); - const shortestCollapse = collapsedPolymers.reduce((longest, curr) => - longest.length < curr.length ? longest : curr - ); - return shortestCollapse.length; -} - -module.exports = { - part1: part1, - part2: part2 +function part1(data) { + const polymer = data.split(""); + const removeChar = ""; // No removal + const stack = collapsePloymer(polymer, removeChar); + return stack.length; +} + +function collapsePloymer(ploymerChars, removeChar) { + const stack = []; + for (let i = 0; i < ploymerChars.length; i++) { + const char = ploymerChars[i]; + if (char.toLowerCase() === removeChar.toLowerCase()) { + continue; + } + const last = stack.pop(); + if (!last) { + stack.push(char); + continue; + } + if (last.toLowerCase() === char.toLowerCase() && last !== char) { + continue; + } + stack.push(last); + stack.push(char); + } + return stack; +} + +function part2(data) { + const polymer = data.split(""); + const alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""); + const collapsedPolymers = alphabet.map(letter => + collapsePloymer(polymer, letter) + ); + const shortestCollapse = collapsedPolymers.reduce((longest, curr) => + longest.length < curr.length ? longest : curr + ); + return shortestCollapse.length; +} + +module.exports = { + part1: part1, + part2: part2 }; \ No newline at end of file diff --git a/2018/5thDay/challenge1/main.cpp b/2018/5thDay/challenge1/main.cpp index 10ea7bd..90629f4 100644 --- a/2018/5thDay/challenge1/main.cpp +++ b/2018/5thDay/challenge1/main.cpp @@ -1,43 +1,43 @@ -#include -#include -#include - -int main(int argc, char** argv) { - if (argc != 2) return 0; - - std::fstream input; - input.open(*(argv + 1)); - - std::string polymerString; - std::getline(input, polymerString); - - while (!false) { - int numOfMods = 0; - std::string eh = ""; - for (unsigned int i = 0; i < polymerString.length() - 1; i++) { - if (islower((char)polymerString[i])) { - if (toupper((char)polymerString[i]) == (char)polymerString[i+1]) { - eh += polymerString.substr(0, i); - eh += polymerString.substr(i + 2, polymerString.length()); - numOfMods++; - break; - } - } - if (isupper((char)polymerString[i])) { - if (tolower((char)polymerString[i]) == (char)polymerString[i+1]) { - eh += polymerString.substr(0, i); - eh += polymerString.substr(i + 2, polymerString.length()); - numOfMods++; - break; - } - } - } - if (eh != "") { - polymerString = eh; - } - std::cout << "Current length: " < +#include +#include + +int main(int argc, char** argv) { + if (argc != 2) return 0; + + std::fstream input; + input.open(*(argv + 1)); + + std::string polymerString; + std::getline(input, polymerString); + + while (!false) { + int numOfMods = 0; + std::string eh = ""; + for (unsigned int i = 0; i < polymerString.length() - 1; i++) { + if (islower((char)polymerString[i])) { + if (toupper((char)polymerString[i]) == (char)polymerString[i+1]) { + eh += polymerString.substr(0, i); + eh += polymerString.substr(i + 2, polymerString.length()); + numOfMods++; + break; + } + } + if (isupper((char)polymerString[i])) { + if (tolower((char)polymerString[i]) == (char)polymerString[i+1]) { + eh += polymerString.substr(0, i); + eh += polymerString.substr(i + 2, polymerString.length()); + numOfMods++; + break; + } + } + } + if (eh != "") { + polymerString = eh; + } + std::cout << "Current length: " < -#include -#include -#include -#include -#include - -struct Point -{ - int64_t x, y; - Point(const int64_t &X, const int64_t &Y) : x(X), y(Y) {} - Point() = default; -}; - -int64_t distance(const Point &a, const Point &b) -{ - return std::abs(a.x - b.x) + std::abs(a.y - b.y); -} - -std::istream &operator>>(std::istream &is, Point &p) -{ - char c; - is >> p.x >> c >> p.y; - return is; -} - -std::ostream &operator<<(std::ostream &os, Point &p) -{ - char c; - os << p.x << ", " << p.y; - return os; -} - -size_t min_index(const size_t &invalid, const Point &point, - const std::vector &points) -{ - size_t result; - int64_t min_dist(std::numeric_limits::max()); - for(size_t p = 0; p < points.size(); ++p) - { - int64_t d(distance(point, points[p])); - if(min_dist > d) - { - min_dist = d; - result = p; - } - else if(min_dist == d) - { - result = invalid; - } - } - return result; -} - -int main(int argc, char *argv[]) -{ - std::ifstream infile(argv[1]); - std::vector points(std::istream_iterator(infile), {}); - - int64_t min_x(std::numeric_limits::max()), min_y(min_x), - max_x(std::numeric_limits::min()), max_y(max_x); - for(auto &p : points) - { - min_x = std::min(min_x, p.x); - min_y = std::min(min_y, p.y); - max_x = std::max(max_x, p.x); - max_y = std::max(max_y, p.y); - } - - int64_t width(max_x - min_x + 1), height(max_y - min_y + 1); - const size_t invalid(points.size()); - std::vector num_claimed(points.size() + 1, 0); - std::set invalid_points; - - for(int64_t x = min_x; x <= max_x; ++x) - { - invalid_points.insert(min_index(invalid, Point(x, min_y), points)); - invalid_points.insert(min_index(invalid, Point(x, max_y), points)); - } - for(int64_t y = min_y; y <= max_y; ++y) - { - invalid_points.insert(min_index(invalid, Point(min_x, y), points)); - invalid_points.insert(min_index(invalid, Point(max_x, y), points)); - } - - for(int64_t x = 0; x < width; ++x) - for(int64_t y = 0; y < height; ++y) - { - int64_t min_dist(std::numeric_limits::max()); - size_t min_index; - for(size_t p = 0; p < points.size(); ++p) - { - int64_t d(distance(Point(x + min_x, y + min_y), points[p])); - if(min_dist > d) - { - min_dist = d; - min_index = p; - } - else if(min_dist == d) - { - min_index = invalid; - } - } - if(invalid_points.find(min_index) == invalid_points.end()) - ++num_claimed[min_index]; - } - std::cout << "Part 1: " - << *std::max_element(num_claimed.begin(), num_claimed.end()) - << "\n"; - - int64_t area(0); - constexpr int64_t cutoff(10000); - const int64_t padding(cutoff / points.size() + 1); - - const int64_t x_lower(min_x - padding), x_upper(max_x + 1 + padding), - y_lower(min_y - padding), y_upper(max_y + 1 + padding); - for(int64_t x = x_lower; x < x_upper; ++x) - for(int64_t y = y_lower; y < y_upper; ++y) - { - int64_t total_dist(0); - for(auto &point : points) - { - total_dist += distance(Point(x, y), point); - if(total_dist > cutoff) - break; - } - if(total_dist < cutoff) - ++area; - } - std::cout << "Part 2: " << area << "\n"; +#include +#include +#include +#include +#include +#include + +struct Point +{ + int64_t x, y; + Point(const int64_t &X, const int64_t &Y) : x(X), y(Y) {} + Point() = default; +}; + +int64_t distance(const Point &a, const Point &b) +{ + return std::abs(a.x - b.x) + std::abs(a.y - b.y); +} + +std::istream &operator>>(std::istream &is, Point &p) +{ + char c; + is >> p.x >> c >> p.y; + return is; +} + +std::ostream &operator<<(std::ostream &os, Point &p) +{ + char c; + os << p.x << ", " << p.y; + return os; +} + +size_t min_index(const size_t &invalid, const Point &point, + const std::vector &points) +{ + size_t result; + int64_t min_dist(std::numeric_limits::max()); + for(size_t p = 0; p < points.size(); ++p) + { + int64_t d(distance(point, points[p])); + if(min_dist > d) + { + min_dist = d; + result = p; + } + else if(min_dist == d) + { + result = invalid; + } + } + return result; +} + +int main(int argc, char *argv[]) +{ + std::ifstream infile(argv[1]); + std::vector points(std::istream_iterator(infile), {}); + + int64_t min_x(std::numeric_limits::max()), min_y(min_x), + max_x(std::numeric_limits::min()), max_y(max_x); + for(auto &p : points) + { + min_x = std::min(min_x, p.x); + min_y = std::min(min_y, p.y); + max_x = std::max(max_x, p.x); + max_y = std::max(max_y, p.y); + } + + int64_t width(max_x - min_x + 1), height(max_y - min_y + 1); + const size_t invalid(points.size()); + std::vector num_claimed(points.size() + 1, 0); + std::set invalid_points; + + for(int64_t x = min_x; x <= max_x; ++x) + { + invalid_points.insert(min_index(invalid, Point(x, min_y), points)); + invalid_points.insert(min_index(invalid, Point(x, max_y), points)); + } + for(int64_t y = min_y; y <= max_y; ++y) + { + invalid_points.insert(min_index(invalid, Point(min_x, y), points)); + invalid_points.insert(min_index(invalid, Point(max_x, y), points)); + } + + for(int64_t x = 0; x < width; ++x) + for(int64_t y = 0; y < height; ++y) + { + int64_t min_dist(std::numeric_limits::max()); + size_t min_index; + for(size_t p = 0; p < points.size(); ++p) + { + int64_t d(distance(Point(x + min_x, y + min_y), points[p])); + if(min_dist > d) + { + min_dist = d; + min_index = p; + } + else if(min_dist == d) + { + min_index = invalid; + } + } + if(invalid_points.find(min_index) == invalid_points.end()) + ++num_claimed[min_index]; + } + std::cout << "Part 1: " + << *std::max_element(num_claimed.begin(), num_claimed.end()) + << "\n"; + + int64_t area(0); + constexpr int64_t cutoff(10000); + const int64_t padding(cutoff / points.size() + 1); + + const int64_t x_lower(min_x - padding), x_upper(max_x + 1 + padding), + y_lower(min_y - padding), y_upper(max_y + 1 + padding); + for(int64_t x = x_lower; x < x_upper; ++x) + for(int64_t y = y_lower; y < y_upper; ++y) + { + int64_t total_dist(0); + for(auto &point : points) + { + total_dist += distance(Point(x, y), point); + if(total_dist > cutoff) + break; + } + if(total_dist < cutoff) + ++area; + } + std::cout << "Part 2: " << area << "\n"; } \ No newline at end of file diff --git a/2019/1stDay/challenge.txt b/2019/1stDay/challenge.txt index 6b97284..6b1c9a2 100644 --- a/2019/1stDay/challenge.txt +++ b/2019/1stDay/challenge.txt @@ -1,32 +1,32 @@ ---- Day 1: The Tyranny of the Rocket Equation --- -Santa has become stranded at the edge of the Solar System while delivering presents to other planets! To accurately calculate his position in space, safely align his warp drive, and return to Earth in time to save Christmas, he needs you to bring him measurements from fifty stars. - -Collect stars by solving puzzles. Two puzzles will be made available on each day in the Advent calendar; the second puzzle is unlocked when you complete the first. Each puzzle grants one star. Good luck! - -The Elves quickly load you into a spacecraft and prepare to launch. - -At the first Go / No Go poll, every Elf is Go until the Fuel Counter-Upper. They haven't determined the amount of fuel required yet. - -Fuel required to launch a given module is based on its mass. Specifically, to find the fuel required for a module, take its mass, divide by three, round down, and subtract 2. - -For example: - -For a mass of 12, divide by 3 and round down to get 4, then subtract 2 to get 2. -For a mass of 14, dividing by 3 and rounding down still yields 4, so the fuel required is also 2. -For a mass of 1969, the fuel required is 654. -For a mass of 100756, the fuel required is 33583. -The Fuel Counter-Upper needs to know the total fuel requirement. To find it, individually calculate the fuel needed for the mass of each module (your puzzle input), then add together all the fuel values. - -What is the sum of the fuel requirements for all of the modules on your spacecraft? - ---- Part Two --- -During the second Go / No Go poll, the Elf in charge of the Rocket Equation Double-Checker stops the launch sequence. Apparently, you forgot to include additional fuel for the fuel you just added. - -Fuel itself requires fuel just like a module - take its mass, divide by three, round down, and subtract 2. However, that fuel also requires fuel, and that fuel requires fuel, and so on. Any mass that would require negative fuel should instead be treated as if it requires zero fuel; the remaining mass, if any, is instead handled by wishing really hard, which has no mass and is outside the scope of this calculation. - -So, for each module mass, calculate its fuel and add it to the total. Then, treat the fuel amount you just calculated as the input mass and repeat the process, continuing until a fuel requirement is zero or negative. For example: - -A module of mass 14 requires 2 fuel. This fuel requires no further fuel (2 divided by 3 and rounded down is 0, which would call for a negative fuel), so the total fuel required is still just 2. -At first, a module of mass 1969 requires 654 fuel. Then, this fuel requires 216 more fuel (654 / 3 - 2). 216 then requires 70 more fuel, which requires 21 fuel, which requires 5 fuel, which requires no further fuel. So, the total fuel required for a module of mass 1969 is 654 + 216 + 70 + 21 + 5 = 966. -The fuel required by a module of mass 100756 and its fuel is: 33583 + 11192 + 3728 + 1240 + 411 + 135 + 43 + 12 + 2 = 50346. -What is the sum of the fuel requirements for all of the modules on your spacecraft when also taking into account the mass of the added fuel? (Calculate the fuel requirements for each module separately, then add them all up at the end.) +--- Day 1: The Tyranny of the Rocket Equation --- +Santa has become stranded at the edge of the Solar System while delivering presents to other planets! To accurately calculate his position in space, safely align his warp drive, and return to Earth in time to save Christmas, he needs you to bring him measurements from fifty stars. + +Collect stars by solving puzzles. Two puzzles will be made available on each day in the Advent calendar; the second puzzle is unlocked when you complete the first. Each puzzle grants one star. Good luck! + +The Elves quickly load you into a spacecraft and prepare to launch. + +At the first Go / No Go poll, every Elf is Go until the Fuel Counter-Upper. They haven't determined the amount of fuel required yet. + +Fuel required to launch a given module is based on its mass. Specifically, to find the fuel required for a module, take its mass, divide by three, round down, and subtract 2. + +For example: + +For a mass of 12, divide by 3 and round down to get 4, then subtract 2 to get 2. +For a mass of 14, dividing by 3 and rounding down still yields 4, so the fuel required is also 2. +For a mass of 1969, the fuel required is 654. +For a mass of 100756, the fuel required is 33583. +The Fuel Counter-Upper needs to know the total fuel requirement. To find it, individually calculate the fuel needed for the mass of each module (your puzzle input), then add together all the fuel values. + +What is the sum of the fuel requirements for all of the modules on your spacecraft? + +--- Part Two --- +During the second Go / No Go poll, the Elf in charge of the Rocket Equation Double-Checker stops the launch sequence. Apparently, you forgot to include additional fuel for the fuel you just added. + +Fuel itself requires fuel just like a module - take its mass, divide by three, round down, and subtract 2. However, that fuel also requires fuel, and that fuel requires fuel, and so on. Any mass that would require negative fuel should instead be treated as if it requires zero fuel; the remaining mass, if any, is instead handled by wishing really hard, which has no mass and is outside the scope of this calculation. + +So, for each module mass, calculate its fuel and add it to the total. Then, treat the fuel amount you just calculated as the input mass and repeat the process, continuing until a fuel requirement is zero or negative. For example: + +A module of mass 14 requires 2 fuel. This fuel requires no further fuel (2 divided by 3 and rounded down is 0, which would call for a negative fuel), so the total fuel required is still just 2. +At first, a module of mass 1969 requires 654 fuel. Then, this fuel requires 216 more fuel (654 / 3 - 2). 216 then requires 70 more fuel, which requires 21 fuel, which requires 5 fuel, which requires no further fuel. So, the total fuel required for a module of mass 1969 is 654 + 216 + 70 + 21 + 5 = 966. +The fuel required by a module of mass 100756 and its fuel is: 33583 + 11192 + 3728 + 1240 + 411 + 135 + 43 + 12 + 2 = 50346. +What is the sum of the fuel requirements for all of the modules on your spacecraft when also taking into account the mass of the added fuel? (Calculate the fuel requirements for each module separately, then add them all up at the end.) diff --git a/2019/1stDay/challenge1.cpp b/2019/1stDay/challenge1.cpp index 7f26a5e..46c1673 100644 --- a/2019/1stDay/challenge1.cpp +++ b/2019/1stDay/challenge1.cpp @@ -1,32 +1,32 @@ -#include -#include -#include -#include - -int main(int argc, char** argv) -{ - std::ifstream infile( argv[1] ); - - int accumilator = 0; - - // for ( std::string line; !infile.eof(); std::getline( infile, line ) ) - // { - - // if ( line.length() == 0 ) continue; - // accumilator += (std::stoi( line ) / 3) - 2; - - // } - - std::string line; - while (!infile.eof()) - { - - std::getline(infile, line); - if ( line.length() == 0 ) continue; - accumilator += (std::stoi( line ) / 3) - 2; - - } - - std::cout << "Sum of the fuel requrements : " << accumilator << std::endl; - -} +#include +#include +#include +#include + +int main(int argc, char** argv) +{ + std::ifstream infile( argv[1] ); + + int accumilator = 0; + + // for ( std::string line; !infile.eof(); std::getline( infile, line ) ) + // { + + // if ( line.length() == 0 ) continue; + // accumilator += (std::stoi( line ) / 3) - 2; + + // } + + std::string line; + while (!infile.eof()) + { + + std::getline(infile, line); + if ( line.length() == 0 ) continue; + accumilator += (std::stoi( line ) / 3) - 2; + + } + + std::cout << "Sum of the fuel requrements : " << accumilator << std::endl; + +} diff --git a/2019/1stDay/challenge2.cpp b/2019/1stDay/challenge2.cpp index 46837bf..4a9e83d 100644 --- a/2019/1stDay/challenge2.cpp +++ b/2019/1stDay/challenge2.cpp @@ -1,36 +1,36 @@ -#include -#include -#include -#include - -int fuelForMass ( int mass, int accumilator = 0 ) -{ - - int res = (mass / 3) - 2; - if ( res > 0 ) - return fuelForMass( res, accumilator + res ); - - return accumilator; - -}; - -int main(int argc, char** argv) -{ - std::ifstream infile( argv[1] ); - - int accumilator = 0; - - - std::string line; - while (!infile.eof()) - { - - std::getline(infile, line); - if ( line.length() == 0 ) continue; - accumilator += fuelForMass( std::stoi( line ) ); - - } - - std::cout << "Sum of the fuel requrements : " << accumilator << std::endl; - -} +#include +#include +#include +#include + +int fuelForMass ( int mass, int accumilator = 0 ) +{ + + int res = (mass / 3) - 2; + if ( res > 0 ) + return fuelForMass( res, accumilator + res ); + + return accumilator; + +}; + +int main(int argc, char** argv) +{ + std::ifstream infile( argv[1] ); + + int accumilator = 0; + + + std::string line; + while (!infile.eof()) + { + + std::getline(infile, line); + if ( line.length() == 0 ) continue; + accumilator += fuelForMass( std::stoi( line ) ); + + } + + std::cout << "Sum of the fuel requrements : " << accumilator << std::endl; + +} diff --git a/2019/1stDay/input.txt b/2019/1stDay/input.txt index 367b19d..a9748cf 100644 --- a/2019/1stDay/input.txt +++ b/2019/1stDay/input.txt @@ -1,100 +1,100 @@ -54755 -96495 -111504 -53923 -118158 -118082 -137413 -135315 -87248 -127646 -79201 -52399 -77966 -129568 -63880 -128973 -55491 -111226 -126447 -87017 -112469 -83975 -51280 -60239 -120524 -57122 -136517 -117378 -93629 -55125 -68990 -70336 -115119 -68264 -148122 -70075 -106770 -54976 -123852 -61813 -113373 -53924 -59660 -67111 -52825 -81568 -110842 -134870 -135529 -78689 -129451 -96041 -91627 -70863 -100098 -121908 -96623 -143752 -149936 -116283 -149488 -126158 -106499 -124927 -109574 -70711 -139078 -67212 -124251 -123803 -73569 -145668 -96045 -59748 -123238 -68005 -121412 -97236 -104800 -86786 -141680 -123807 -82310 -76593 -146092 -82637 -92339 -93821 -56247 -58328 -90159 -105700 -57317 -69011 -125544 -102372 -63797 -92127 -111207 +54755 +96495 +111504 +53923 +118158 +118082 +137413 +135315 +87248 +127646 +79201 +52399 +77966 +129568 +63880 +128973 +55491 +111226 +126447 +87017 +112469 +83975 +51280 +60239 +120524 +57122 +136517 +117378 +93629 +55125 +68990 +70336 +115119 +68264 +148122 +70075 +106770 +54976 +123852 +61813 +113373 +53924 +59660 +67111 +52825 +81568 +110842 +134870 +135529 +78689 +129451 +96041 +91627 +70863 +100098 +121908 +96623 +143752 +149936 +116283 +149488 +126158 +106499 +124927 +109574 +70711 +139078 +67212 +124251 +123803 +73569 +145668 +96045 +59748 +123238 +68005 +121412 +97236 +104800 +86786 +141680 +123807 +82310 +76593 +146092 +82637 +92339 +93821 +56247 +58328 +90159 +105700 +57317 +69011 +125544 +102372 +63797 +92127 +111207 77596 \ No newline at end of file diff --git a/2019/2ndDay/challenge.txt b/2019/2ndDay/challenge.txt index 0f4adf2..6f9b5a8 100644 --- a/2019/2ndDay/challenge.txt +++ b/2019/2ndDay/challenge.txt @@ -1,64 +1,64 @@ ---- Day 2: 1202 Program Alarm --- -On the way to your gravity assist around the Moon, your ship computer beeps angrily about a "1202 program alarm". On the radio, an Elf is already explaining how to handle the situation: "Don't worry, that's perfectly norma--" The ship computer bursts into flames. - -You notify the Elves that the computer's magic smoke seems to have escaped. "That computer ran Intcode programs like the gravity assist program it was working on; surely there are enough spare parts up there to build a new Intcode computer!" - -An Intcode program is a list of integers separated by commas (like 1,0,0,3,99). To run one, start by looking at the first integer (called position 0). Here, you will find an opcode - either 1, 2, or 99. The opcode indicates what to do; for example, 99 means that the program is finished and should immediately halt. Encountering an unknown opcode means something went wrong. - -Opcode 1 adds together numbers read from two positions and stores the result in a third position. The three integers immediately after the opcode tell you these three positions - the first two indicate the positions from which you should read the input values, and the third indicates the position at which the output should be stored. - -For example, if your Intcode computer encounters 1,10,20,30, it should read the values at positions 10 and 20, add those values, and then overwrite the value at position 30 with their sum. - -Opcode 2 works exactly like opcode 1, except it multiplies the two inputs instead of adding them. Again, the three integers after the opcode indicate where the inputs and outputs are, not their values. - -Once you're done processing an opcode, move to the next one by stepping forward 4 positions. - -For example, suppose you have the following program: - -1,9,10,3,2,3,11,0,99,30,40,50 -For the purposes of illustration, here is the same program split into multiple lines: - -1,9,10,3, -2,3,11,0, -99, -30,40,50 -The first four integers, 1,9,10,3, are at positions 0, 1, 2, and 3. Together, they represent the first opcode (1, addition), the positions of the two inputs (9 and 10), and the position of the output (3). To handle this opcode, you first need to get the values at the input positions: position 9 contains 30, and position 10 contains 40. Add these numbers together to get 70. Then, store this value at the output position; here, the output position (3) is at position 3, so it overwrites itself. Afterward, the program looks like this: - -1,9,10,70, -2,3,11,0, -99, -30,40,50 -Step forward 4 positions to reach the next opcode, 2. This opcode works just like the previous, but it multiplies instead of adding. The inputs are at positions 3 and 11; these positions contain 70 and 50 respectively. Multiplying these produces 3500; this is stored at position 0: - -3500,9,10,70, -2,3,11,0, -99, -30,40,50 -Stepping forward 4 more positions arrives at opcode 99, halting the program. - -Here are the initial and final states of a few more small programs: - -1,0,0,0,99 becomes 2,0,0,0,99 (1 + 1 = 2). -2,3,0,3,99 becomes 2,3,0,6,99 (3 * 2 = 6). -2,4,4,5,99,0 becomes 2,4,4,5,99,9801 (99 * 99 = 9801). -1,1,1,4,99,5,6,0,99 becomes 30,1,1,4,2,5,6,0,99. -Once you have a working computer, the first step is to restore the gravity assist program (your puzzle input) to the "1202 program alarm" state it had just before the last computer caught fire. To do this, before running the program, replace position 1 with the value 12 and replace position 2 with the value 2. What value is left at position 0 after the program halts? - ---- Part Two --- -"Good, the new computer seems to be working correctly! Keep it nearby during this mission - you'll probably use it again. Real Intcode computers support many more features than your new one, but we'll let you know what they are as you need them." - -"However, your current priority should be to complete your gravity assist around the Moon. For this mission to succeed, we should settle on some terminology for the parts you've already built." - -Intcode programs are given as a list of integers; these values are used as the initial state for the computer's memory. When you run an Intcode program, make sure to start by initializing memory to the program's values. A position in memory is called an address (for example, the first value in memory is at "address 0"). - -Opcodes (like 1, 2, or 99) mark the beginning of an instruction. The values used immediately after an opcode, if any, are called the instruction's parameters. For example, in the instruction 1,2,3,4, 1 is the opcode; 2, 3, and 4 are the parameters. The instruction 99 contains only an opcode and has no parameters. - -The address of the current instruction is called the instruction pointer; it starts at 0. After an instruction finishes, the instruction pointer increases by the number of values in the instruction; until you add more instructions to the computer, this is always 4 (1 opcode + 3 parameters) for the add and multiply instructions. (The halt instruction would increase the instruction pointer by 1, but it halts the program instead.) - -"With terminology out of the way, we're ready to proceed. To complete the gravity assist, you need to determine what pair of inputs produces the output 19690720." - -The inputs should still be provided to the program by replacing the values at addresses 1 and 2, just like before. In this program, the value placed in address 1 is called the noun, and the value placed in address 2 is called the verb. Each of the two input values will be between 0 and 99, inclusive. - -Once the program has halted, its output is available at address 0, also just like before. Each time you try a pair of inputs, make sure you first reset the computer's memory to the values in the program (your puzzle input) - in other words, don't reuse memory from a previous attempt. - -Find the input noun and verb that cause the program to produce the output 19690720. What is 100 * noun + verb? (For example, if noun=12 and verb=2, the answer would be 1202.) +--- Day 2: 1202 Program Alarm --- +On the way to your gravity assist around the Moon, your ship computer beeps angrily about a "1202 program alarm". On the radio, an Elf is already explaining how to handle the situation: "Don't worry, that's perfectly norma--" The ship computer bursts into flames. + +You notify the Elves that the computer's magic smoke seems to have escaped. "That computer ran Intcode programs like the gravity assist program it was working on; surely there are enough spare parts up there to build a new Intcode computer!" + +An Intcode program is a list of integers separated by commas (like 1,0,0,3,99). To run one, start by looking at the first integer (called position 0). Here, you will find an opcode - either 1, 2, or 99. The opcode indicates what to do; for example, 99 means that the program is finished and should immediately halt. Encountering an unknown opcode means something went wrong. + +Opcode 1 adds together numbers read from two positions and stores the result in a third position. The three integers immediately after the opcode tell you these three positions - the first two indicate the positions from which you should read the input values, and the third indicates the position at which the output should be stored. + +For example, if your Intcode computer encounters 1,10,20,30, it should read the values at positions 10 and 20, add those values, and then overwrite the value at position 30 with their sum. + +Opcode 2 works exactly like opcode 1, except it multiplies the two inputs instead of adding them. Again, the three integers after the opcode indicate where the inputs and outputs are, not their values. + +Once you're done processing an opcode, move to the next one by stepping forward 4 positions. + +For example, suppose you have the following program: + +1,9,10,3,2,3,11,0,99,30,40,50 +For the purposes of illustration, here is the same program split into multiple lines: + +1,9,10,3, +2,3,11,0, +99, +30,40,50 +The first four integers, 1,9,10,3, are at positions 0, 1, 2, and 3. Together, they represent the first opcode (1, addition), the positions of the two inputs (9 and 10), and the position of the output (3). To handle this opcode, you first need to get the values at the input positions: position 9 contains 30, and position 10 contains 40. Add these numbers together to get 70. Then, store this value at the output position; here, the output position (3) is at position 3, so it overwrites itself. Afterward, the program looks like this: + +1,9,10,70, +2,3,11,0, +99, +30,40,50 +Step forward 4 positions to reach the next opcode, 2. This opcode works just like the previous, but it multiplies instead of adding. The inputs are at positions 3 and 11; these positions contain 70 and 50 respectively. Multiplying these produces 3500; this is stored at position 0: + +3500,9,10,70, +2,3,11,0, +99, +30,40,50 +Stepping forward 4 more positions arrives at opcode 99, halting the program. + +Here are the initial and final states of a few more small programs: + +1,0,0,0,99 becomes 2,0,0,0,99 (1 + 1 = 2). +2,3,0,3,99 becomes 2,3,0,6,99 (3 * 2 = 6). +2,4,4,5,99,0 becomes 2,4,4,5,99,9801 (99 * 99 = 9801). +1,1,1,4,99,5,6,0,99 becomes 30,1,1,4,2,5,6,0,99. +Once you have a working computer, the first step is to restore the gravity assist program (your puzzle input) to the "1202 program alarm" state it had just before the last computer caught fire. To do this, before running the program, replace position 1 with the value 12 and replace position 2 with the value 2. What value is left at position 0 after the program halts? + +--- Part Two --- +"Good, the new computer seems to be working correctly! Keep it nearby during this mission - you'll probably use it again. Real Intcode computers support many more features than your new one, but we'll let you know what they are as you need them." + +"However, your current priority should be to complete your gravity assist around the Moon. For this mission to succeed, we should settle on some terminology for the parts you've already built." + +Intcode programs are given as a list of integers; these values are used as the initial state for the computer's memory. When you run an Intcode program, make sure to start by initializing memory to the program's values. A position in memory is called an address (for example, the first value in memory is at "address 0"). + +Opcodes (like 1, 2, or 99) mark the beginning of an instruction. The values used immediately after an opcode, if any, are called the instruction's parameters. For example, in the instruction 1,2,3,4, 1 is the opcode; 2, 3, and 4 are the parameters. The instruction 99 contains only an opcode and has no parameters. + +The address of the current instruction is called the instruction pointer; it starts at 0. After an instruction finishes, the instruction pointer increases by the number of values in the instruction; until you add more instructions to the computer, this is always 4 (1 opcode + 3 parameters) for the add and multiply instructions. (The halt instruction would increase the instruction pointer by 1, but it halts the program instead.) + +"With terminology out of the way, we're ready to proceed. To complete the gravity assist, you need to determine what pair of inputs produces the output 19690720." + +The inputs should still be provided to the program by replacing the values at addresses 1 and 2, just like before. In this program, the value placed in address 1 is called the noun, and the value placed in address 2 is called the verb. Each of the two input values will be between 0 and 99, inclusive. + +Once the program has halted, its output is available at address 0, also just like before. Each time you try a pair of inputs, make sure you first reset the computer's memory to the values in the program (your puzzle input) - in other words, don't reuse memory from a previous attempt. + +Find the input noun and verb that cause the program to produce the output 19690720. What is 100 * noun + verb? (For example, if noun=12 and verb=2, the answer would be 1202.) diff --git a/2019/2ndDay/challenge1.cpp b/2019/2ndDay/challenge1.cpp index b452b92..a226a24 100644 --- a/2019/2ndDay/challenge1.cpp +++ b/2019/2ndDay/challenge1.cpp @@ -1,79 +1,79 @@ -#include -#include -#include -#include -#include - -std::vector tokenise( std::string input ) -{ - std::stringstream ssInput( input ); - std::vector stream; - - std::string s; - while( std::getline( ssInput, s, ',' ) ) { - stream.push_back( std::stoi( s ) ); - } - - return stream; -} - -enum Opcodes -{ - Add = 1, - Multiply = 2, - End = 99 -}; - -int main(int argc, char** argv) -{ - - std::ifstream infile( argv[1] ); - - std::string input; - std::getline( infile, input ); - - std::vector program = tokenise( input ); - - program[1] = 12; - program[2] = 2; - - for ( int i = 0; i < program.size(); i += 4 ) - { - - int opcode = program[i]; - - std::cout << "Opcode : " << opcode << std::endl; - - int operandLocA = program[i + 1]; - int operandLocB = program[i + 2]; - - std::cout << "Operand locations : " << operandLocA << ", " << operandLocB << std::endl; - - int operandA = program[operandLocA]; - int operandB = program[operandLocB]; - - int resLoc = program[i + 3]; - - std::cout << "Result location : " << resLoc << std::endl; - - if ( opcode == Add ) - program[resLoc] = operandA + operandB; - else if ( opcode == Multiply ) - program[resLoc] = operandA * operandB; - else if ( opcode == End ) - { - std::cout << "Program end" << std::endl << std::endl; - break; - } - - std::cout << std::endl; - - } - - - std::cout << "Program end state : "; - for ( auto& i : program ) - std::cout << i << " "; - std::cout << std::endl; - -} +#include +#include +#include +#include +#include + +std::vector tokenise( std::string input ) +{ + std::stringstream ssInput( input ); + std::vector stream; + + std::string s; + while( std::getline( ssInput, s, ',' ) ) { + stream.push_back( std::stoi( s ) ); + } + + return stream; +} + +enum Opcodes +{ + Add = 1, + Multiply = 2, + End = 99 +}; + +int main(int argc, char** argv) +{ + + std::ifstream infile( argv[1] ); + + std::string input; + std::getline( infile, input ); + + std::vector program = tokenise( input ); + + program[1] = 12; + program[2] = 2; + + for ( int i = 0; i < program.size(); i += 4 ) + { + + int opcode = program[i]; + + std::cout << "Opcode : " << opcode << std::endl; + + int operandLocA = program[i + 1]; + int operandLocB = program[i + 2]; + + std::cout << "Operand locations : " << operandLocA << ", " << operandLocB << std::endl; + + int operandA = program[operandLocA]; + int operandB = program[operandLocB]; + + int resLoc = program[i + 3]; + + std::cout << "Result location : " << resLoc << std::endl; + + if ( opcode == Add ) + program[resLoc] = operandA + operandB; + else if ( opcode == Multiply ) + program[resLoc] = operandA * operandB; + else if ( opcode == End ) + { + std::cout << "Program end" << std::endl << std::endl; + break; + } + + std::cout << std::endl; + + } + + + std::cout << "Program end state : "; + for ( auto& i : program ) + std::cout << i << " "; + std::cout << std::endl; + +} diff --git a/2019/2ndDay/challenge2.cpp b/2019/2ndDay/challenge2.cpp index 786aa9d..95c970e 100644 --- a/2019/2ndDay/challenge2.cpp +++ b/2019/2ndDay/challenge2.cpp @@ -1,81 +1,81 @@ -#include -#include -#include -#include -#include - -std::vector tokenise( std::string input ) -{ - std::stringstream ssInput( input ); - std::vector stream; - - std::string s; - while( std::getline( ssInput, s, ',' ) ) - { - stream.push_back( std::stoi( s ) ); - } - - return stream; -} - -enum Opcodes -{ - Add = 1, - Multiply = 2, - End = 99 -}; - -int main(int argc, char** argv) -{ - - std::ifstream infile( argv[1] ); - - std::string input; - std::getline( infile, input ); - - std::vector program; - - for ( int noun = 0; noun < 100; noun++ ) - for ( int verb = 0; verb < 100; verb++ ) - { - - program = tokenise( input ); - - // Noun - program[1] = noun; - // Verb - program[2] = verb; - - for ( int i = 0; i < program.size(); i += 4 ) - { - - int opcode = program[i]; - - int operandA = program[program[i + 1]]; - int operandB = program[program[i + 2]]; - - int resLoc = program[i + 3]; - - if ( opcode == Add ) - program[resLoc] = operandA + operandB; - else if ( opcode == Multiply ) - program[resLoc] = operandA * operandB; - else if ( opcode == End ) - break; - - } - - if ( program[0] == 19690720 ) - { - std::cout << "Solution found : " << noun << " " << verb << std::endl; - std::cout << "Solution answer : " << 100 * noun + verb << std::endl; - } - - } - - std::cout << std::endl << "Program end state : "; - for ( auto& i : program ) - std::cout << i << " "; - std::cout << std::endl; - -} +#include +#include +#include +#include +#include + +std::vector tokenise( std::string input ) +{ + std::stringstream ssInput( input ); + std::vector stream; + + std::string s; + while( std::getline( ssInput, s, ',' ) ) + { + stream.push_back( std::stoi( s ) ); + } + + return stream; +} + +enum Opcodes +{ + Add = 1, + Multiply = 2, + End = 99 +}; + +int main(int argc, char** argv) +{ + + std::ifstream infile( argv[1] ); + + std::string input; + std::getline( infile, input ); + + std::vector program; + + for ( int noun = 0; noun < 100; noun++ ) + for ( int verb = 0; verb < 100; verb++ ) + { + + program = tokenise( input ); + + // Noun + program[1] = noun; + // Verb + program[2] = verb; + + for ( int i = 0; i < program.size(); i += 4 ) + { + + int opcode = program[i]; + + int operandA = program[program[i + 1]]; + int operandB = program[program[i + 2]]; + + int resLoc = program[i + 3]; + + if ( opcode == Add ) + program[resLoc] = operandA + operandB; + else if ( opcode == Multiply ) + program[resLoc] = operandA * operandB; + else if ( opcode == End ) + break; + + } + + if ( program[0] == 19690720 ) + { + std::cout << "Solution found : " << noun << " " << verb << std::endl; + std::cout << "Solution answer : " << 100 * noun + verb << std::endl; + } + + } + + std::cout << std::endl << "Program end state : "; + for ( auto& i : program ) + std::cout << i << " "; + std::cout << std::endl; + +} diff --git a/2019/3rdDay/challenge.txt b/2019/3rdDay/challenge.txt index d8961b7..1d92222 100644 --- a/2019/3rdDay/challenge.txt +++ b/2019/3rdDay/challenge.txt @@ -1,70 +1,70 @@ ---- Day 3: Crossed Wires --- -The gravity assist was successful, and you're well on your way to the Venus refuelling station. During the rush back on Earth, the fuel management system wasn't completely installed, so that's next on the priority list. - -Opening the front panel reveals a jumble of wires. Specifically, two wires are connected to a central port and extend outward on a grid. You trace the path each wire takes as it leaves the central port, one wire per line of text (your puzzle input). - -The wires twist and turn, but the two wires occasionally cross paths. To fix the circuit, you need to find the intersection point closest to the central port. Because the wires are on a grid, use the Manhattan distance for this measurement. While the wires do technically cross right at the central port where they both start, this point does not count, nor does a wire count as crossing with itself. - -For example, if the first wire's path is R8,U5,L5,D3, then starting from the central port (o), it goes right 8, up 5, left 5, and finally down 3: - -........... -........... -........... -....+----+. -....|....|. -....|....|. -....|....|. -.........|. -.o-------+. -........... -Then, if the second wire's path is U7,R6,D4,L4, it goes up 7, right 6, down 4, and left 4: - -........... -.+-----+... -.|.....|... -.|..+--X-+. -.|..|..|.|. -.|.-X--+.|. -.|..|....|. -.|.......|. -.o-------+. -........... -These wires cross at two locations (marked X), but the lower-left one is closer to the central port: its distance is 3 + 3 = 6. - -Here are a few more examples: - -R75,D30,R83,U83,L12,D49,R71,U7,L72 -U62,R66,U55,R34,D71,R55,D58,R83 = distance 159 -R98,U47,R26,D63,R33,U87,L62,D20,R33,U53,R51 -U98,R91,D20,R16,D67,R40,U7,R15,U6,R7 = distance 135 - -What is the Manhattan distance from the central port to the closest intersection? - ---- Part Two --- -It turns out that this circuit is very timing-sensitive; you actually need to minimize the signal delay. - -To do this, calculate the number of steps each wire takes to reach each intersection; choose the intersection where the sum of both wires' steps is lowest. If a wire visits a position on the grid multiple times, use the steps value from the first time it visits that position when calculating the total value of a specific intersection. - -The number of steps a wire takes is the total number of grid squares the wire has entered to get to that location, including the intersection being considered. Again consider the example from above: - -........... -.+-----+... -.|.....|... -.|..+--X-+. -.|..|..|.|. -.|.-X--+.|. -.|..|....|. -.|.......|. -.o-------+. -........... -In the above example, the intersection closest to the central port is reached after 8+5+5+2 = 20 steps by the first wire and 7+6+4+3 = 20 steps by the second wire for a total of 20+20 = 40 steps. - -However, the top-right intersection is better: the first wire takes only 8+5+2 = 15 and the second wire takes only 7+6+2 = 15, a total of 15+15 = 30 steps. - -Here are the best steps for the extra examples from above: - -R75,D30,R83,U83,L12,D49,R71,U7,L72 -U62,R66,U55,R34,D71,R55,D58,R83 = 610 steps -R98,U47,R26,D63,R33,U87,L62,D20,R33,U53,R51 -U98,R91,D20,R16,D67,R40,U7,R15,U6,R7 = 410 steps -What is the fewest combined steps the wires must take to reach an intersection? +--- Day 3: Crossed Wires --- +The gravity assist was successful, and you're well on your way to the Venus refuelling station. During the rush back on Earth, the fuel management system wasn't completely installed, so that's next on the priority list. + +Opening the front panel reveals a jumble of wires. Specifically, two wires are connected to a central port and extend outward on a grid. You trace the path each wire takes as it leaves the central port, one wire per line of text (your puzzle input). + +The wires twist and turn, but the two wires occasionally cross paths. To fix the circuit, you need to find the intersection point closest to the central port. Because the wires are on a grid, use the Manhattan distance for this measurement. While the wires do technically cross right at the central port where they both start, this point does not count, nor does a wire count as crossing with itself. + +For example, if the first wire's path is R8,U5,L5,D3, then starting from the central port (o), it goes right 8, up 5, left 5, and finally down 3: + +........... +........... +........... +....+----+. +....|....|. +....|....|. +....|....|. +.........|. +.o-------+. +........... +Then, if the second wire's path is U7,R6,D4,L4, it goes up 7, right 6, down 4, and left 4: + +........... +.+-----+... +.|.....|... +.|..+--X-+. +.|..|..|.|. +.|.-X--+.|. +.|..|....|. +.|.......|. +.o-------+. +........... +These wires cross at two locations (marked X), but the lower-left one is closer to the central port: its distance is 3 + 3 = 6. + +Here are a few more examples: + +R75,D30,R83,U83,L12,D49,R71,U7,L72 +U62,R66,U55,R34,D71,R55,D58,R83 = distance 159 +R98,U47,R26,D63,R33,U87,L62,D20,R33,U53,R51 +U98,R91,D20,R16,D67,R40,U7,R15,U6,R7 = distance 135 + +What is the Manhattan distance from the central port to the closest intersection? + +--- Part Two --- +It turns out that this circuit is very timing-sensitive; you actually need to minimize the signal delay. + +To do this, calculate the number of steps each wire takes to reach each intersection; choose the intersection where the sum of both wires' steps is lowest. If a wire visits a position on the grid multiple times, use the steps value from the first time it visits that position when calculating the total value of a specific intersection. + +The number of steps a wire takes is the total number of grid squares the wire has entered to get to that location, including the intersection being considered. Again consider the example from above: + +........... +.+-----+... +.|.....|... +.|..+--X-+. +.|..|..|.|. +.|.-X--+.|. +.|..|....|. +.|.......|. +.o-------+. +........... +In the above example, the intersection closest to the central port is reached after 8+5+5+2 = 20 steps by the first wire and 7+6+4+3 = 20 steps by the second wire for a total of 20+20 = 40 steps. + +However, the top-right intersection is better: the first wire takes only 8+5+2 = 15 and the second wire takes only 7+6+2 = 15, a total of 15+15 = 30 steps. + +Here are the best steps for the extra examples from above: + +R75,D30,R83,U83,L12,D49,R71,U7,L72 +U62,R66,U55,R34,D71,R55,D58,R83 = 610 steps +R98,U47,R26,D63,R33,U87,L62,D20,R33,U53,R51 +U98,R91,D20,R16,D67,R40,U7,R15,U6,R7 = 410 steps +What is the fewest combined steps the wires must take to reach an intersection? diff --git a/2019/3rdDay/challenge1.cpp b/2019/3rdDay/challenge1.cpp index 6c74204..5892790 100644 --- a/2019/3rdDay/challenge1.cpp +++ b/2019/3rdDay/challenge1.cpp @@ -1,154 +1,154 @@ -#include -#include -#include -#include -#include -#include -#include - -std::vector tokenise( std::string input ) -{ - std::stringstream ssInput( input ); - std::vector stream; - - std::string s; - while( std::getline( ssInput, s, ',' ) ) { - stream.push_back( s ); - } - - return stream; -} - -struct vec2 -{ - int x; - int y; - - bool operator==(const vec2& v) const - { - return x == v.x && y == v.y; - } -}; - -namespace std -{ - template <> - struct hash - { - size_t operator()( const vec2& v ) const - { - return v.x ^ v.y; - } - }; -} - -struct Wire -{ - vec2 Head = { 0, 0 }; - vec2 Origin = { 0, 0 }; - std::vector Visited; -}; - -void step( std::vector& path, vec2& pos, int steps, char dir ) -{ - - auto up = []( vec2& p ) { p.y -= 1; }; - auto down = []( vec2& p ) { p.y += 1; }; - auto left = []( vec2& p ) { p.x -= 1; }; - auto right = []( vec2& p ) { p.x += 1; }; - - void (*stepSingle)(vec2&); - - switch ( dir ) - { - case 'U': stepSingle = up; break; - case 'D': stepSingle = down; break; - case 'R': stepSingle = right; break; - case 'L': stepSingle = left; break; - default: break; - } - - for( int i = 0; i < steps; i++ ) - { - stepSingle( pos ); - path.push_back( pos ); - } - -} - -int main(int argc, char** argv) -{ - - std::ifstream infile( argv[1] ); - - std::string input; - - std::getline( infile, input ); - std::vector wireS1 = tokenise( input ); - - std::getline( infile, input ); - std::vector wireS2 = tokenise( input ); - - // Construct map of nodes - // for each point a wire - // lays on, one is added - // to the node - - // Wires are assumed to start at 0,0 - - Wire wire1; - for ( auto& element : wireS1 ) - { - - // Seperate the direction from the displacement - - char direction = element[0]; - int displacement = std::stoi( element.substr( 1, element.size() ) ); - - step(wire1.Visited, wire1.Head, displacement, direction); - - std::cout << "Wire 1 " << element << std::endl; - - } - - Wire wire2; - for ( auto& element : wireS2 ) - { - - // Seperate the direction from the displacement - - char direction = element[0]; - int displacement = std::stoi( element.substr( 1, element.size() ) ); - - step(wire2.Visited, wire2.Head, displacement, direction); - - std::cout << "Wire 2 " << element << std::endl; - - } - - auto find = []( std::vector arr, vec2 el ) { - for ( int i = 0; i < arr.size(); i++ ) - if ( arr[i] == el ) return i; - return -1; - }; - - std::vector intersectDistances; - - // This takes a good few seconds - for ( int i = 0; i < wire1.Visited.size(); i++ ) - { - - vec2 v = wire1.Visited[i]; - if ( find( wire2.Visited, v ) != -1 ) - { - std::cout << "Found : " << v.x << " " << v.y << std::endl; - intersectDistances.push_back( std::abs( v.x ) + std::abs( v.y ) ); - } - - } - - int minDistance = *std::min_element( intersectDistances.cbegin(), intersectDistances.cend() ); - - std::cout << "Minimum Distance to Intersect : " << minDistance << std::endl; - -} +#include +#include +#include +#include +#include +#include +#include + +std::vector tokenise( std::string input ) +{ + std::stringstream ssInput( input ); + std::vector stream; + + std::string s; + while( std::getline( ssInput, s, ',' ) ) { + stream.push_back( s ); + } + + return stream; +} + +struct vec2 +{ + int x; + int y; + + bool operator==(const vec2& v) const + { + return x == v.x && y == v.y; + } +}; + +namespace std +{ + template <> + struct hash + { + size_t operator()( const vec2& v ) const + { + return v.x ^ v.y; + } + }; +} + +struct Wire +{ + vec2 Head = { 0, 0 }; + vec2 Origin = { 0, 0 }; + std::vector Visited; +}; + +void step( std::vector& path, vec2& pos, int steps, char dir ) +{ + + auto up = []( vec2& p ) { p.y -= 1; }; + auto down = []( vec2& p ) { p.y += 1; }; + auto left = []( vec2& p ) { p.x -= 1; }; + auto right = []( vec2& p ) { p.x += 1; }; + + void (*stepSingle)(vec2&); + + switch ( dir ) + { + case 'U': stepSingle = up; break; + case 'D': stepSingle = down; break; + case 'R': stepSingle = right; break; + case 'L': stepSingle = left; break; + default: break; + } + + for( int i = 0; i < steps; i++ ) + { + stepSingle( pos ); + path.push_back( pos ); + } + +} + +int main(int argc, char** argv) +{ + + std::ifstream infile( argv[1] ); + + std::string input; + + std::getline( infile, input ); + std::vector wireS1 = tokenise( input ); + + std::getline( infile, input ); + std::vector wireS2 = tokenise( input ); + + // Construct map of nodes + // for each point a wire + // lays on, one is added + // to the node + + // Wires are assumed to start at 0,0 + + Wire wire1; + for ( auto& element : wireS1 ) + { + + // Seperate the direction from the displacement + + char direction = element[0]; + int displacement = std::stoi( element.substr( 1, element.size() ) ); + + step(wire1.Visited, wire1.Head, displacement, direction); + + std::cout << "Wire 1 " << element << std::endl; + + } + + Wire wire2; + for ( auto& element : wireS2 ) + { + + // Seperate the direction from the displacement + + char direction = element[0]; + int displacement = std::stoi( element.substr( 1, element.size() ) ); + + step(wire2.Visited, wire2.Head, displacement, direction); + + std::cout << "Wire 2 " << element << std::endl; + + } + + auto find = []( std::vector arr, vec2 el ) { + for ( int i = 0; i < arr.size(); i++ ) + if ( arr[i] == el ) return i; + return -1; + }; + + std::vector intersectDistances; + + // This takes a good few seconds + for ( int i = 0; i < wire1.Visited.size(); i++ ) + { + + vec2 v = wire1.Visited[i]; + if ( find( wire2.Visited, v ) != -1 ) + { + std::cout << "Found : " << v.x << " " << v.y << std::endl; + intersectDistances.push_back( std::abs( v.x ) + std::abs( v.y ) ); + } + + } + + int minDistance = *std::min_element( intersectDistances.cbegin(), intersectDistances.cend() ); + + std::cout << "Minimum Distance to Intersect : " << minDistance << std::endl; + +} diff --git a/2019/3rdDay/challenge2.cpp b/2019/3rdDay/challenge2.cpp index 83a8422..bbc026f 100644 --- a/2019/3rdDay/challenge2.cpp +++ b/2019/3rdDay/challenge2.cpp @@ -1,116 +1,116 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -std::vector tokenise( std::string input ) -{ - std::stringstream ssInput( input ); - std::vector stream; - - std::string s; - while( std::getline( ssInput, s, ',' ) ) { - stream.push_back( s ); - } - - return stream; -} - -struct vec2 -{ - int x; - int y; - - bool operator==(const vec2& v) const - { - return x == v.x && y == v.y; - } -}; - -namespace std -{ - template <> - struct hash - { - size_t operator()( const vec2& v ) const - { - return v.x ^ v.y; - } - }; -} - -std::unordered_map genPath( std::vector wire ) -{ - std::unordered_map path; - vec2 pos = { 0, 0 }; - path[pos] = 0; - - auto up = []( vec2& p ) { p.y -= 1; }; - auto down = []( vec2& p ) { p.y += 1; }; - auto left = []( vec2& p ) { p.x -= 1; }; - auto right = []( vec2& p ) { p.x += 1; }; - - void (*stepSingle)(vec2&); - - int stepCounter = 0; - - for ( auto& element : wire ) - { - char dir = element[0]; - int steps = std::stoi( element.substr( 1, element.size() ) ); - - switch ( dir ) - { - case 'U': stepSingle = up; break; - case 'D': stepSingle = down; break; - case 'R': stepSingle = right; break; - case 'L': stepSingle = left; break; - default: break; - } - - for( int i = 0; i < steps; i++ ) - { - stepSingle( pos ); - path[pos] = ++stepCounter; - } - } - - return path; -} - -int main(int argc, char** argv) -{ - - std::ifstream infile( argv[1] ); - - std::string input; - - std::getline( infile, input ); - std::vector wireS1 = tokenise( input ); - - std::getline( infile, input ); - std::vector wireS2 = tokenise( input ); - - auto path1 = genPath(wireS1); - auto path2 = genPath(wireS2); - - int res = INFINITY; - - for ( auto [pos, steps] : path2 ) - { - // Intersect - if ( path1.count( pos ) > 0 ) - { - std::cout << pos.x << ":" << pos.y << " " << steps << std::endl; - if ( steps == 0 ) continue; - res = std::min( res, path1[pos] + path2[pos] ); - } - } - - std::cout << "Shortest Distance to Complete : " << res << std::endl; - -} +#include +#include +#include +#include +#include +#include +#include +#include + +std::vector tokenise( std::string input ) +{ + std::stringstream ssInput( input ); + std::vector stream; + + std::string s; + while( std::getline( ssInput, s, ',' ) ) { + stream.push_back( s ); + } + + return stream; +} + +struct vec2 +{ + int x; + int y; + + bool operator==(const vec2& v) const + { + return x == v.x && y == v.y; + } +}; + +namespace std +{ + template <> + struct hash + { + size_t operator()( const vec2& v ) const + { + return v.x ^ v.y; + } + }; +} + +std::unordered_map genPath( std::vector wire ) +{ + std::unordered_map path; + vec2 pos = { 0, 0 }; + path[pos] = 0; + + auto up = []( vec2& p ) { p.y -= 1; }; + auto down = []( vec2& p ) { p.y += 1; }; + auto left = []( vec2& p ) { p.x -= 1; }; + auto right = []( vec2& p ) { p.x += 1; }; + + void (*stepSingle)(vec2&); + + int stepCounter = 0; + + for ( auto& element : wire ) + { + char dir = element[0]; + int steps = std::stoi( element.substr( 1, element.size() ) ); + + switch ( dir ) + { + case 'U': stepSingle = up; break; + case 'D': stepSingle = down; break; + case 'R': stepSingle = right; break; + case 'L': stepSingle = left; break; + default: break; + } + + for( int i = 0; i < steps; i++ ) + { + stepSingle( pos ); + path[pos] = ++stepCounter; + } + } + + return path; +} + +int main(int argc, char** argv) +{ + + std::ifstream infile( argv[1] ); + + std::string input; + + std::getline( infile, input ); + std::vector wireS1 = tokenise( input ); + + std::getline( infile, input ); + std::vector wireS2 = tokenise( input ); + + auto path1 = genPath(wireS1); + auto path2 = genPath(wireS2); + + int res = INFINITY; + + for ( auto [pos, steps] : path2 ) + { + // Intersect + if ( path1.count( pos ) > 0 ) + { + std::cout << pos.x << ":" << pos.y << " " << steps << std::endl; + if ( steps == 0 ) continue; + res = std::min( res, path1[pos] + path2[pos] ); + } + } + + std::cout << "Shortest Distance to Complete : " << res << std::endl; + +} diff --git a/2019/3rdDay/input.txt b/2019/3rdDay/input.txt index 9dc8c09..d879879 100644 --- a/2019/3rdDay/input.txt +++ b/2019/3rdDay/input.txt @@ -1,2 +1,2 @@ -R992,U284,L447,D597,R888,D327,R949,U520,R27,U555,L144,D284,R538,U249,R323,U297,R136,U838,L704,D621,R488,U856,R301,U539,L701,U363,R611,D94,L734,D560,L414,U890,R236,D699,L384,D452,R702,D637,L164,U410,R649,U901,L910,D595,R339,D346,R959,U777,R218,D667,R534,D762,R484,D914,L25,U959,R984,D922,R612,U999,L169,D599,L604,D357,L217,D327,L730,D949,L565,D332,L114,D512,R460,D495,L187,D697,R313,U319,L8,D915,L518,D513,R738,U9,R137,U542,L188,U440,R576,D307,R734,U58,R285,D401,R166,U156,L859,U132,L10,U753,L933,U915,R459,D50,R231,D166,L253,U844,R585,D871,L799,U53,R785,U336,R622,D108,R555,D918,L217,D668,L220,U738,L997,D998,R964,D456,L54,U930,R985,D244,L613,D116,L994,D20,R949,D245,L704,D564,L210,D13,R998,U951,L482,U579,L793,U680,L285,U770,L975,D54,R79,U613,L907,U467,L256,D783,R883,U810,R409,D508,L898,D286,L40,U741,L759,D549,R210,U411,R638,D643,L784,U538,L739,U771,L773,U491,L303,D425,L891,U182,R412,U951,L381,U501,R482,D625,R870,D320,L464,U555,R566,D781,L540,D754,L211,U73,L321,D869,R994,D177,R496,U383,R911,U819,L651,D774,L591,U666,L883,U767,R232,U822,L499,U44,L45,U873,L98,D487,L47,U803,R855,U256,R567,D88,R138,D678,L37,U38,R783,U569,L646,D261,L597,U275,L527,U48,R433,D324,L631,D160,L145,D128,R894,U223,R664,U510,R756,D700,R297,D361,R837,U996,L769,U813,L477,U420,L172,U482,R891,D379,L329,U55,R284,U155,L816,U659,L671,U996,R997,U252,R514,D718,L661,D625,R910,D960,L39,U610,R853,U859,R174,U215,L603,U745,L587,D736,R365,U78,R306,U158,L813,U885,R558,U631,L110,D232,L519,D366,R909,D10,R294 +R992,U284,L447,D597,R888,D327,R949,U520,R27,U555,L144,D284,R538,U249,R323,U297,R136,U838,L704,D621,R488,U856,R301,U539,L701,U363,R611,D94,L734,D560,L414,U890,R236,D699,L384,D452,R702,D637,L164,U410,R649,U901,L910,D595,R339,D346,R959,U777,R218,D667,R534,D762,R484,D914,L25,U959,R984,D922,R612,U999,L169,D599,L604,D357,L217,D327,L730,D949,L565,D332,L114,D512,R460,D495,L187,D697,R313,U319,L8,D915,L518,D513,R738,U9,R137,U542,L188,U440,R576,D307,R734,U58,R285,D401,R166,U156,L859,U132,L10,U753,L933,U915,R459,D50,R231,D166,L253,U844,R585,D871,L799,U53,R785,U336,R622,D108,R555,D918,L217,D668,L220,U738,L997,D998,R964,D456,L54,U930,R985,D244,L613,D116,L994,D20,R949,D245,L704,D564,L210,D13,R998,U951,L482,U579,L793,U680,L285,U770,L975,D54,R79,U613,L907,U467,L256,D783,R883,U810,R409,D508,L898,D286,L40,U741,L759,D549,R210,U411,R638,D643,L784,U538,L739,U771,L773,U491,L303,D425,L891,U182,R412,U951,L381,U501,R482,D625,R870,D320,L464,U555,R566,D781,L540,D754,L211,U73,L321,D869,R994,D177,R496,U383,R911,U819,L651,D774,L591,U666,L883,U767,R232,U822,L499,U44,L45,U873,L98,D487,L47,U803,R855,U256,R567,D88,R138,D678,L37,U38,R783,U569,L646,D261,L597,U275,L527,U48,R433,D324,L631,D160,L145,D128,R894,U223,R664,U510,R756,D700,R297,D361,R837,U996,L769,U813,L477,U420,L172,U482,R891,D379,L329,U55,R284,U155,L816,U659,L671,U996,R997,U252,R514,D718,L661,D625,R910,D960,L39,U610,R853,U859,R174,U215,L603,U745,L587,D736,R365,U78,R306,U158,L813,U885,R558,U631,L110,D232,L519,D366,R909,D10,R294 L1001,D833,L855,D123,R36,U295,L319,D700,L164,U576,L68,D757,R192,D738,L640,D660,R940,D778,R888,U772,R771,U900,L188,D464,L572,U184,R889,D991,L961,U751,R560,D490,L887,D748,R37,U910,L424,D401,L385,U415,L929,U193,R710,D855,L596,D323,L966,D505,L422,D139,L108,D135,R737,U176,R538,D173,R21,D951,R949,D61,L343,U704,R127,U468,L240,D834,L858,D127,R328,D863,R329,U477,R131,U864,R997,D38,R418,U611,R28,U705,R148,D414,R786,U264,L785,D650,R201,D250,R528,D910,R670,U309,L658,U190,R704,U21,R288,D7,R930,U62,R782,U621,R328,D725,R305,U700,R494,D137,R969,U142,L867,U577,R300,U162,L13,D698,R333,U865,R941,U796,L60,U902,L784,U832,R78,D578,R196,D390,R728,D922,R858,D994,L457,U547,R238,D345,R329,D498,R873,D212,R501,U474,L657,U910,L335,U133,R213,U417,R698,U829,L2,U704,L273,D83,R231,D247,R675,D23,L692,D472,L325,D659,L408,U746,L715,U395,L596,U296,R52,D849,L713,U815,R684,D551,L319,U768,R176,D182,R557,U731,R314,D543,L9,D256,R38,D809,L567,D332,R375,D572,R81,D479,L71,U968,L831,D247,R989,U390,R463,D576,R740,D539,R488,U367,L596,U375,L763,D824,R70,U448,R979,D977,L744,D379,R488,D671,L516,D334,L542,U517,L488,D390,L713,D932,L28,U924,L448,D229,L488,D501,R19,D910,L979,D411,R711,D824,L973,U291,R794,D485,R208,U370,R655,U450,L40,D804,L374,D671,R962,D829,L209,U111,L84,D876,L832,D747,L733,D560,L702,D972,R188,U817,L111,U26,L492,U485,L71,D59,L269,D870,L152,U539,R65,D918,L932,D260,L485,U77,L699,U254,R924,U643,L264,U96,R395,D917,R360,U354,R101,D682,R854,U450,L376,D378,R872,D311,L881,U630,R77,D766,R672 \ No newline at end of file diff --git a/2019/4thDay/challenge.txt b/2019/4thDay/challenge.txt index 0c8f826..0b71dfd 100644 --- a/2019/4thDay/challenge.txt +++ b/2019/4thDay/challenge.txt @@ -1,25 +1,25 @@ ---- Day 4: Secure Container --- -You arrive at the Venus fuel depot only to discover it's protected by a password. The Elves had written the password on a sticky note, but someone threw it out. - -However, they do remember a few key facts about the password: - -It is a six-digit number. -The value is within the range given in your puzzle input. -Two adjacent digits are the same (like 22 in 122345). -Going from left to right, the digits never decrease; they only ever increase or stay the same (like 111123 or 135679). -Other than the range rule, the following are true: - -111111 meets these criteria (double 11, never decreases). -223450 does not meet these criteria (decreasing pair of digits 50). -123789 does not meet these criteria (no double). -How many different passwords within the range given in your puzzle input meet these criteria? - ---- Part Two --- -An Elf just remembered one more important detail: the two adjacent matching digits are not part of a larger group of matching digits. - -Given this additional criterion, but still ignoring the range rule, the following are now true: - -112233 meets these criteria because the digits never decrease and all repeated digits are exactly two digits long. -123444 no longer meets the criteria (the repeated 44 is part of a larger group of 444). -111122 meets the criteria (even though 1 is repeated more than twice, it still contains a double 22). -How many different passwords within the range given in your puzzle input meet all of the criteria? +--- Day 4: Secure Container --- +You arrive at the Venus fuel depot only to discover it's protected by a password. The Elves had written the password on a sticky note, but someone threw it out. + +However, they do remember a few key facts about the password: + +It is a six-digit number. +The value is within the range given in your puzzle input. +Two adjacent digits are the same (like 22 in 122345). +Going from left to right, the digits never decrease; they only ever increase or stay the same (like 111123 or 135679). +Other than the range rule, the following are true: + +111111 meets these criteria (double 11, never decreases). +223450 does not meet these criteria (decreasing pair of digits 50). +123789 does not meet these criteria (no double). +How many different passwords within the range given in your puzzle input meet these criteria? + +--- Part Two --- +An Elf just remembered one more important detail: the two adjacent matching digits are not part of a larger group of matching digits. + +Given this additional criterion, but still ignoring the range rule, the following are now true: + +112233 meets these criteria because the digits never decrease and all repeated digits are exactly two digits long. +123444 no longer meets the criteria (the repeated 44 is part of a larger group of 444). +111122 meets the criteria (even though 1 is repeated more than twice, it still contains a double 22). +How many different passwords within the range given in your puzzle input meet all of the criteria? diff --git a/2019/4thDay/challenge1.cpp b/2019/4thDay/challenge1.cpp index 5553950..59a7a11 100644 --- a/2019/4thDay/challenge1.cpp +++ b/2019/4thDay/challenge1.cpp @@ -1,45 +1,45 @@ -#include -#include - -bool checkPassword( std::string pass ) -{ - - // Is less than 6 - if ( pass.length() > 6 || pass.length() < 6 ) return false; - - // Have any repeats - bool repeats = false; - char lastr = pass[0]; - for ( int i = 1; i < pass.length(); i++ ) - { - if ( lastr == pass[i] ) repeats = true; - lastr = pass[i]; - } - - if ( !repeats ) return false; - - // Digets never decrease - bool decreases = true; - for ( int i = 1; i < pass.length(); i++ ) - if ( pass[i - 1] > pass[i] ) decreases = false; - - if ( !decreases ) return false; - - return true; - -} - -int main(int argc, char** argv) -{ - - int upper = 893698; - int lower = 367479; - - int accumilator = 0; - for ( int i = lower; i < upper; i++ ) - if ( checkPassword( std::to_string( i ) ) ) - accumilator++; - - std::cout << "There are : " << accumilator << " valid passwords" << std::endl; - -} +#include +#include + +bool checkPassword( std::string pass ) +{ + + // Is less than 6 + if ( pass.length() > 6 || pass.length() < 6 ) return false; + + // Have any repeats + bool repeats = false; + char lastr = pass[0]; + for ( int i = 1; i < pass.length(); i++ ) + { + if ( lastr == pass[i] ) repeats = true; + lastr = pass[i]; + } + + if ( !repeats ) return false; + + // Digets never decrease + bool decreases = true; + for ( int i = 1; i < pass.length(); i++ ) + if ( pass[i - 1] > pass[i] ) decreases = false; + + if ( !decreases ) return false; + + return true; + +} + +int main(int argc, char** argv) +{ + + int upper = 893698; + int lower = 367479; + + int accumilator = 0; + for ( int i = lower; i < upper; i++ ) + if ( checkPassword( std::to_string( i ) ) ) + accumilator++; + + std::cout << "There are : " << accumilator << " valid passwords" << std::endl; + +} diff --git a/2019/4thDay/challenge2.cpp b/2019/4thDay/challenge2.cpp index 0624c23..1790db1 100644 --- a/2019/4thDay/challenge2.cpp +++ b/2019/4thDay/challenge2.cpp @@ -1,44 +1,44 @@ -#include -#include -#include - -bool checkPassword( std::string pass ) -{ - - // Is less than 6 - if ( pass.length() > 6 || pass.length() < 6 ) return false; - - // Digets never decrease - bool decreases = true; - for ( int i = 1; i < pass.length(); i++ ) - if ( pass[i - 1] > pass[i] ) decreases = false; - - if ( !decreases ) return false; - - // No repeats ( conform w part 2 rule ) - if ( std::any_of( pass.begin(), pass.end(), - [&]( auto d ) { - return std::count( pass.begin(), pass.end(), d ) == 2; - } ) ) - { - return true; - } - - return false; - -} - -int main(int argc, char** argv) -{ - - int upper = 893698; - int lower = 367479; - - int accumilator = 0; - for ( int i = lower; i < upper; i++ ) - if ( checkPassword( std::to_string( i ) ) ) - accumilator++; - - std::cout << "There are : " << accumilator << " valid passwords" << std::endl; - -} +#include +#include +#include + +bool checkPassword( std::string pass ) +{ + + // Is less than 6 + if ( pass.length() > 6 || pass.length() < 6 ) return false; + + // Digets never decrease + bool decreases = true; + for ( int i = 1; i < pass.length(); i++ ) + if ( pass[i - 1] > pass[i] ) decreases = false; + + if ( !decreases ) return false; + + // No repeats ( conform w part 2 rule ) + if ( std::any_of( pass.begin(), pass.end(), + [&]( auto d ) { + return std::count( pass.begin(), pass.end(), d ) == 2; + } ) ) + { + return true; + } + + return false; + +} + +int main(int argc, char** argv) +{ + + int upper = 893698; + int lower = 367479; + + int accumilator = 0; + for ( int i = lower; i < upper; i++ ) + if ( checkPassword( std::to_string( i ) ) ) + accumilator++; + + std::cout << "There are : " << accumilator << " valid passwords" << std::endl; + +} diff --git a/2019/5thDay/challenge.txt b/2019/5thDay/challenge.txt index 8703062..e3721ea 100644 --- a/2019/5thDay/challenge.txt +++ b/2019/5thDay/challenge.txt @@ -1,47 +1,47 @@ ---- Day 5: Sunny with a Chance of Asteroids --- -You're starting to sweat as the ship makes its way toward Mercury. The Elves suggest that you get the air conditioner working by upgrading your ship computer to support the Thermal Environment Supervision Terminal. - -The Thermal Environment Supervision Terminal (TEST) starts by running a diagnostic program (your puzzle input). The TEST diagnostic program will run on your existing Intcode computer after a few modifications: - -First, you'll need to add two new instructions: - -Opcode 3 takes a single integer as input and saves it to the position given by its only parameter. For example, the instruction 3,50 would take an input value and store it at address 50. -Opcode 4 outputs the value of its only parameter. For example, the instruction 4,50 would output the value at address 50. -Programs that use these instructions will come with documentation that explains what should be connected to the input and output. The program 3,0,4,0,99 outputs whatever it gets as input, then halts. - -Second, you'll need to add support for parameter modes: - -Each parameter of an instruction is handled based on its parameter mode. Right now, your ship computer already understands parameter mode 0, position mode, which causes the parameter to be interpreted as a position - if the parameter is 50, its value is the value stored at address 50 in memory. Until now, all parameters have been in position mode. - -Now, your ship computer will also need to handle parameters in mode 1, immediate mode. In immediate mode, a parameter is interpreted as a value - if the parameter is 50, its value is simply 50. - -Parameter modes are stored in the same value as the instruction's opcode. The opcode is a two-digit number based only on the ones and tens digit of the value, that is, the opcode is the rightmost two digits of the first value in an instruction. Parameter modes are single digits, one per parameter, read right-to-left from the opcode: the first parameter's mode is in the hundreds digit, the second parameter's mode is in the thousands digit, the third parameter's mode is in the ten-thousands digit, and so on. Any missing modes are 0. - -For example, consider the program 1002,4,3,4,33. - -The first instruction, 1002,4,3,4, is a multiply instruction - the rightmost two digits of the first value, 02, indicate opcode 2, multiplication. Then, going right to left, the parameter modes are 0 (hundreds digit), 1 (thousands digit), and 0 (ten-thousands digit, not present and therefore zero): - -ABCDE - 1002 - -DE - two-digit opcode, 02 == opcode 2 - C - mode of 1st parameter, 0 == position mode - B - mode of 2nd parameter, 1 == immediate mode - A - mode of 3rd parameter, 0 == position mode, - omitted due to being a leading zero -This instruction multiplies its first two parameters. The first parameter, 4 in position mode, works like it did before - its value is the value stored at address 4 (33). The second parameter, 3 in immediate mode, simply has value 3. The result of this operation, 33 * 3 = 99, is written according to the third parameter, 4 in position mode, which also works like it did before - 99 is written to address 4. - -Parameters that an instruction writes to will never be in immediate mode. - -Finally, some notes: - -It is important to remember that the instruction pointer should increase by the number of values in the instruction after the instruction finishes. Because of the new instructions, this amount is no longer always 4. -Integers can be negative: 1101,100,-1,4,0 is a valid program (find 100 + -1, store the result in position 4). -The TEST diagnostic program will start by requesting from the user the ID of the system to test by running an input instruction - provide it 1, the ID for the ship's air conditioner unit. - -It will then perform a series of diagnostic tests confirming that various parts of the Intcode computer, like parameter modes, function correctly. For each test, it will run an output instruction indicating how far the result of the test was from the expected value, where 0 means the test was successful. Non-zero outputs mean that a function is not working correctly; check the instructions that were run before the output instruction to see which one failed. - -Finally, the program will output a diagnostic code and immediately halt. This final output isn't an error; an output followed immediately by a halt means the program finished. If all outputs were zero except the diagnostic code, the diagnostic program ran successfully. - -After providing 1 to the only input instruction and passing all the tests, what diagnostic code does the program produce? - +--- Day 5: Sunny with a Chance of Asteroids --- +You're starting to sweat as the ship makes its way toward Mercury. The Elves suggest that you get the air conditioner working by upgrading your ship computer to support the Thermal Environment Supervision Terminal. + +The Thermal Environment Supervision Terminal (TEST) starts by running a diagnostic program (your puzzle input). The TEST diagnostic program will run on your existing Intcode computer after a few modifications: + +First, you'll need to add two new instructions: + +Opcode 3 takes a single integer as input and saves it to the position given by its only parameter. For example, the instruction 3,50 would take an input value and store it at address 50. +Opcode 4 outputs the value of its only parameter. For example, the instruction 4,50 would output the value at address 50. +Programs that use these instructions will come with documentation that explains what should be connected to the input and output. The program 3,0,4,0,99 outputs whatever it gets as input, then halts. + +Second, you'll need to add support for parameter modes: + +Each parameter of an instruction is handled based on its parameter mode. Right now, your ship computer already understands parameter mode 0, position mode, which causes the parameter to be interpreted as a position - if the parameter is 50, its value is the value stored at address 50 in memory. Until now, all parameters have been in position mode. + +Now, your ship computer will also need to handle parameters in mode 1, immediate mode. In immediate mode, a parameter is interpreted as a value - if the parameter is 50, its value is simply 50. + +Parameter modes are stored in the same value as the instruction's opcode. The opcode is a two-digit number based only on the ones and tens digit of the value, that is, the opcode is the rightmost two digits of the first value in an instruction. Parameter modes are single digits, one per parameter, read right-to-left from the opcode: the first parameter's mode is in the hundreds digit, the second parameter's mode is in the thousands digit, the third parameter's mode is in the ten-thousands digit, and so on. Any missing modes are 0. + +For example, consider the program 1002,4,3,4,33. + +The first instruction, 1002,4,3,4, is a multiply instruction - the rightmost two digits of the first value, 02, indicate opcode 2, multiplication. Then, going right to left, the parameter modes are 0 (hundreds digit), 1 (thousands digit), and 0 (ten-thousands digit, not present and therefore zero): + +ABCDE + 1002 + +DE - two-digit opcode, 02 == opcode 2 + C - mode of 1st parameter, 0 == position mode + B - mode of 2nd parameter, 1 == immediate mode + A - mode of 3rd parameter, 0 == position mode, + omitted due to being a leading zero +This instruction multiplies its first two parameters. The first parameter, 4 in position mode, works like it did before - its value is the value stored at address 4 (33). The second parameter, 3 in immediate mode, simply has value 3. The result of this operation, 33 * 3 = 99, is written according to the third parameter, 4 in position mode, which also works like it did before - 99 is written to address 4. + +Parameters that an instruction writes to will never be in immediate mode. + +Finally, some notes: + +It is important to remember that the instruction pointer should increase by the number of values in the instruction after the instruction finishes. Because of the new instructions, this amount is no longer always 4. +Integers can be negative: 1101,100,-1,4,0 is a valid program (find 100 + -1, store the result in position 4). +The TEST diagnostic program will start by requesting from the user the ID of the system to test by running an input instruction - provide it 1, the ID for the ship's air conditioner unit. + +It will then perform a series of diagnostic tests confirming that various parts of the Intcode computer, like parameter modes, function correctly. For each test, it will run an output instruction indicating how far the result of the test was from the expected value, where 0 means the test was successful. Non-zero outputs mean that a function is not working correctly; check the instructions that were run before the output instruction to see which one failed. + +Finally, the program will output a diagnostic code and immediately halt. This final output isn't an error; an output followed immediately by a halt means the program finished. If all outputs were zero except the diagnostic code, the diagnostic program ran successfully. + +After providing 1 to the only input instruction and passing all the tests, what diagnostic code does the program produce? + diff --git a/2019/5thDay/challenge1.cpp b/2019/5thDay/challenge1.cpp index 28e9e75..28e766a 100644 --- a/2019/5thDay/challenge1.cpp +++ b/2019/5thDay/challenge1.cpp @@ -1,53 +1,53 @@ -#include -#include -#include -#include -#include - -std::vector tokenise( std::string input ) -{ - std::stringstream ssInput( input ); - std::vector stream; - - std::string s; - while( std::getline( ssInput, s, ',' ) ) { - stream.push_back( std::stoi( s ) ); - } - - return stream; -} - -class IntCodeCPU -{ -public: - - IntCodeCPU(); - - std::vector Program; - int ProgramCounter; - - void SetProgram( std::vector program ) - { - Program = program; - } - - void RegisterOpcode( int opcode ) - { - - } - - - -}; - -int main(int argc, char** argv) -{ - - std::ifstream infile( argv[1] ); - - std::string input; - std::getline( infile, input ); - - std::vector program = tokenise( input ); - -} +#include +#include +#include +#include +#include + +std::vector tokenise( std::string input ) +{ + std::stringstream ssInput( input ); + std::vector stream; + + std::string s; + while( std::getline( ssInput, s, ',' ) ) { + stream.push_back( std::stoi( s ) ); + } + + return stream; +} + +class IntCodeCPU +{ +public: + + IntCodeCPU(); + + std::vector Program; + int ProgramCounter; + + void SetProgram( std::vector program ) + { + Program = program; + } + + void RegisterOpcode( int opcode ) + { + + } + + + +}; + +int main(int argc, char** argv) +{ + + std::ifstream infile( argv[1] ); + + std::string input; + std::getline( infile, input ); + + std::vector program = tokenise( input ); + +} diff --git a/2019/6thDay/challenge.txt b/2019/6thDay/challenge.txt index beaba1a..505102c 100644 --- a/2019/6thDay/challenge.txt +++ b/2019/6thDay/challenge.txt @@ -1,51 +1,51 @@ ---- Day 6: Universal Orbit Map --- -You've landed at the Universal Orbit Map facility on Mercury. Because navigation in space often involves transferring between orbits, the orbit maps here are useful for finding efficient routes between, for example, you and Santa. You download a map of the local orbits (your puzzle input). - -Except for the universal Center of Mass (COM), every object in space is in orbit around exactly one other object. An orbit looks roughly like this: - - \ - \ - | - | -AAA--> o o <--BBB - | - | - / - / -In this diagram, the object BBB is in orbit around AAA. The path that BBB takes around AAA (drawn with lines) is only partly shown. In the map data, this orbital relationship is written AAA)BBB, which means "BBB is in orbit around AAA". - -Before you use your map data to plot a course, you need to make sure it wasn't corrupted during the download. To verify maps, the Universal Orbit Map facility uses orbit count checksums - the total number of direct orbits (like the one shown above) and indirect orbits. - -Whenever A orbits B and B orbits C, then A indirectly orbits C. This chain can be any number of objects long: if A orbits B, B orbits C, and C orbits D, then A indirectly orbits D. - -For example, suppose you have the following map: - -COM)B -B)C -C)D -D)E -E)F -B)G -G)H -D)I -E)J -J)K -K)L -Visually, the above map of orbits looks like this: - - G - H J - K - L - / / -COM - B - C - D - E - F - \ - I -In this visual representation, when two objects are connected by a line, the one on the right directly orbits the one on the left. - -Here, we can count the total number of orbits as follows: - -D directly orbits C and indirectly orbits B and COM, a total of 3 orbits. -L directly orbits K and indirectly orbits J, E, D, C, B, and COM, a total of 7 orbits. -COM orbits nothing. -The total number of direct and indirect orbits in this example is 42. - -What is the total number of direct and indirect orbits in your map data? - +--- Day 6: Universal Orbit Map --- +You've landed at the Universal Orbit Map facility on Mercury. Because navigation in space often involves transferring between orbits, the orbit maps here are useful for finding efficient routes between, for example, you and Santa. You download a map of the local orbits (your puzzle input). + +Except for the universal Center of Mass (COM), every object in space is in orbit around exactly one other object. An orbit looks roughly like this: + + \ + \ + | + | +AAA--> o o <--BBB + | + | + / + / +In this diagram, the object BBB is in orbit around AAA. The path that BBB takes around AAA (drawn with lines) is only partly shown. In the map data, this orbital relationship is written AAA)BBB, which means "BBB is in orbit around AAA". + +Before you use your map data to plot a course, you need to make sure it wasn't corrupted during the download. To verify maps, the Universal Orbit Map facility uses orbit count checksums - the total number of direct orbits (like the one shown above) and indirect orbits. + +Whenever A orbits B and B orbits C, then A indirectly orbits C. This chain can be any number of objects long: if A orbits B, B orbits C, and C orbits D, then A indirectly orbits D. + +For example, suppose you have the following map: + +COM)B +B)C +C)D +D)E +E)F +B)G +G)H +D)I +E)J +J)K +K)L +Visually, the above map of orbits looks like this: + + G - H J - K - L + / / +COM - B - C - D - E - F + \ + I +In this visual representation, when two objects are connected by a line, the one on the right directly orbits the one on the left. + +Here, we can count the total number of orbits as follows: + +D directly orbits C and indirectly orbits B and COM, a total of 3 orbits. +L directly orbits K and indirectly orbits J, E, D, C, B, and COM, a total of 7 orbits. +COM orbits nothing. +The total number of direct and indirect orbits in this example is 42. + +What is the total number of direct and indirect orbits in your map data? + diff --git a/2019/6thDay/challenge1.cpp b/2019/6thDay/challenge1.cpp index 6dcd9b5..d70b18d 100644 --- a/2019/6thDay/challenge1.cpp +++ b/2019/6thDay/challenge1.cpp @@ -1,56 +1,56 @@ -#include -#include -#include -#include -#include -#include - -std::unordered_map mapise( std::vector input ) -{ - - std::unordered_map ret; - - for ( auto& str : input ) - { - std::string first = str.substr(0, 3); - std::string second = str.substr(4, str.size()); - - ret[first] = second; - std::cout << first << " " << second << std::endl; - } - - return ret; - -} - -int main(int argc, char** argv) -{ - std::ifstream infile( argv[1] ); - - std::vector lines; - - std::string line; - while (!infile.eof()) - { - - std::getline(infile, line); - if ( line.length() == 0 ) continue; - lines.push_back(line); - - } - - int accumilator = 0; - - auto map = mapise( lines ); - - std::unordered_map::iterator it; - for (it = map.begin(); it != map.end(); it++) - { - - - - } - - std::cout << "Sum of direct and indirect orbits : " << accumilator << std::endl; - -} +#include +#include +#include +#include +#include +#include + +std::unordered_map mapise( std::vector input ) +{ + + std::unordered_map ret; + + for ( auto& str : input ) + { + std::string first = str.substr(0, 3); + std::string second = str.substr(4, str.size()); + + ret[first] = second; + std::cout << first << " " << second << std::endl; + } + + return ret; + +} + +int main(int argc, char** argv) +{ + std::ifstream infile( argv[1] ); + + std::vector lines; + + std::string line; + while (!infile.eof()) + { + + std::getline(infile, line); + if ( line.length() == 0 ) continue; + lines.push_back(line); + + } + + int accumilator = 0; + + auto map = mapise( lines ); + + std::unordered_map::iterator it; + for (it = map.begin(); it != map.end(); it++) + { + + + + } + + std::cout << "Sum of direct and indirect orbits : " << accumilator << std::endl; + +} diff --git a/2019/6thDay/input.txt b/2019/6thDay/input.txt index 200e77a..b7861a7 100644 --- a/2019/6thDay/input.txt +++ b/2019/6thDay/input.txt @@ -1,1589 +1,1589 @@ -F1B)CNY -SCH)CBH -H9N)GXP -ZP9)M5Y -7VT)VQT -82S)45G -1ZC)TMT -HYK)56V -5YG)H1W -N5Y)BNN -QM6)GXD -ZQK)VWB -PS1)J6C -BSR)9X7 -19J)47G -H2Q)JHP -2FT)TLG -BBY)4TN -ZMG)3MW -2SH)SFW -4DB)R14 -2T3)5YR -DGY)4GK -QKM)81D -VNQ)RDQ -R8M)JDL -2GN)CDM -V5N)3J8 -1F1)3ND -ZDZ)PBP -CNY)QFN -BDF)V93 -DSW)PB1 -SDS)J2D -WFL)ZN2 -693)23R -VLD)DWP -YVZ)H1M -8XR)LWX -CYC)ZP9 -J5X)C9N -XVY)19W -VPF)9YR -CTY)2D4 -LZ9)C4S -GK6)RTN -KJJ)MCG -G4B)QCS -4CH)G2D -3KW)2R9 -CGG)25Y -KZJ)XCF -BBP)WXC -K98)FQG -LSV)QNJ -7L1)RR8 -C7B)BYZ -ZPV)DN6 -NK4)L7W -SH5)PCG -XGM)KD8 -TT3)SGG -85S)5D9 -QJD)KM2 -769)86H -PG2)L9Y -8B3)T4R -T1M)LW7 -NX9)3RP -7JW)SDS -3J7)NND -WBF)Y1T -459)HSX -V9W)DHQ -HPZ)41Z -MYP)6M8 -DGC)9VB -RFH)WL9 -815)6BL -FNL)DSW -55L)DCQ -VD7)M8Z -8N9)VKS -JC5)CFQ -N5Y)5V2 -BTL)8PC -P1V)GNX -DKM)XQQ -BNY)412 -SPM)KGB -4MM)5MJ -XQ9)3HN -KWZ)LWV -WDF)815 -6DV)D59 -W13)MLV -BSQ)H1L -R91)6Q9 -BNX)9SH -Q8R)JFR -VDK)KHL -KBP)ZQK -ZX5)4C9 -X5D)T9T -3FD)5X1 -VVK)S2T -C67)XGM -W2D)M34 -58W)GY9 -S47)CRB -NJD)3LT -DXW)ZVJ -CT5)X5Z -GHV)D2G -6QN)LNQ -S8H)F5C -RPY)JVW -LPB)3GV -V5M)WXW -CZ2)XPD -9JL)M18 -D8K)2CQ -VRF)9MX -NYB)TM2 -BHS)MJ4 -C6X)NMX -21Z)RYC -FJV)154 -CFQ)LM4 -MHM)TK6 -SRP)171 -FCH)MXQ -6Q9)YJ5 -VS1)Y6C -VND)396 -PW9)TGW -9NJ)G89 -8MK)GBL -VKS)LPH -KWM)9DQ -RTQ)W13 -K94)87N -CPS)DVM -G1L)VRF -2YW)ZPV -HTF)HJS -LWH)SRN -4T3)B92 -J4J)4NH -ZYG)PBM -QYP)RTV -9M4)9K2 -7NP)297 -PBP)RZS -K8S)BLT -BHY)PW9 -4L5)FRL -HKT)VF6 -2Z3)QV7 -Z9V)ZGB -1F2)CT5 -KHL)BBQ -16R)M6W -YN5)D5L -TK6)QHD -C26)91H -86C)FFX -6QF)VCF -BCB)4GQ -TBM)RQZ -ZTH)YL8 -1XD)1J7 -3FX)HSN -W2W)RSC -P4K)BGZ -7HW)512 -L7W)5SH -YCJ)DYJ -G8T)J8V -5TX)XNB -FKC)SPL -91Q)QC2 -C88)HFR -MSL)4DB -CV9)NRZ -HZQ)57G -JM9)C3T -2MW)NJD -LGZ)1T3 -QZK)82V -Y6C)MFZ -HD6)SQ4 -2T6)R9B -WL3)2RL -WS3)24J -YV5)VT7 -9NN)LGL -JMT)28Y -N91)SPY -R8D)MC7 -56V)X24 -25M)YYD -SPH)BL6 -62X)K5H -471)S2G -VHQ)FSW -NMC)PQ1 -3GV)J2S -VT7)7M2 -32K)V4J -7L1)ZS6 -4JW)3MQ -412)MDP -2D4)L3F -QYX)VT2 -NY9)YN5 -5PT)CJZ -52H)FHK -XXQ)4JW -HLX)48R -P1C)62X -8PC)Y3R -YKP)NYP -LHT)KV5 -DVV)8RC -WXC)MZZ -9CF)W31 -XJK)SXQ -VDP)YG4 -HNV)2MC -3LW)9WT -RLJ)KMC -9HN)31S -5YB)3J7 -7VW)Q3S -FY7)KZ6 -VQX)1R2 -Y3R)ZZ5 -KZ6)K8S -N4Z)3H9 -N6X)D55 -YB3)J3X -GTJ)HZ1 -S9K)2S2 -Q1Q)8D3 -3QN)YKD -MZZ)24Y -JFR)JQL -QSP)82N -BYL)GJN -7W7)VH6 -FBX)61P -22H)QBS -M7M)389 -YKD)6ZY -M3D)7XB -S66)K4X -BM6)GXQ -Z4W)XN7 -NYP)JDM -VD9)LJX -5YR)S47 -Q8J)YCJ -5TP)QP7 -91X)4JY -XS2)HTF -12Z)BNX -NKR)SRP -37Y)5SS -SZ4)MR6 -7TT)TSG -MYL)BSZ -2FF)MRF -11Y)7HW -82H)T1J -J7T)2FT -7GP)SAN -BHH)CDR -PZ7)GK9 -9GH)G6S -M2Z)38C -ZLB)1S4 -W1W)7JW -38W)GLX -1TH)1CV -8F8)NB7 -Y1T)5H1 -CJ1)G9Y -XL8)Z5M -NMX)J5X -LGJ)SPQ -F2L)Y4V -BMT)S2W -G3H)64B -PK7)3DT -MZ9)FZF -483)85S -B6B)FRM -37R)BXS -J2S)QM6 -K87)8VQ -347)RXJ -VP3)JRR -YLQ)GYJ -BV4)FY7 -V2V)BT5 -711)Q5L -5LR)RY3 -HTH)R8D -RDQ)HH4 -RHS)3JX -RFZ)YC9 -KV5)L9K -MJ4)LHT -LPP)N3V -RSB)CQ9 -LN5)5KZ -W4D)ZHY -JDJ)ZLR -YKX)TYX -C4S)WY2 -42V)8XD -W4H)9T7 -RYC)FYM -CC7)38W -DHQ)CGG -L9Y)HTH -5SH)H1D -DGY)K4N -8Y5)WZW -SXQ)J75 -HQS)7VT -XTF)99C -B2L)FCB -66X)HLF -95K)N1C -NY4)BXW -XPD)2MN -7TL)F31 -7TL)L65 -TY4)D39 -XBP)1G1 -RQZ)L6C -GHV)BCB -NB8)DY5 -CFQ)RKP -LP8)CGH -RGD)G87 -YB3)NHG -GNH)7YL -BHQ)WFL -15G)G6B -14K)5HD -2CQ)KYY -NZK)XV1 -SGX)N3D -7WG)YVZ -CXN)R8S -ZL7)NL4 -SN6)WR6 -4NJ)Y51 -676)T62 -V95)H6R -LL7)4G9 -DYC)NY8 -9GR)Q8N -RLZ)DXP -BCD)24B -CWY)KYV -6TB)55K -PWF)SN6 -6BC)6HV -GY9)PJX -1QD)TKQ -DLZ)TFB -55P)P8G -8XD)95C -CPW)S2Z -VDT)QGD -Y93)GH3 -X4V)CVP -3X3)79D -1NS)1F2 -KYL)1XD -3ND)G1Q -898)DDD -D6Z)JZM -Q5L)843 -NSY)86C -24B)MMK -5CZ)9RS -D39)BFF -CX3)QHC -JDM)95D -SYC)P1C -J4M)ZLB -ZS6)769 -XMM)1X8 -ZFV)P9T -7JW)GXW -W96)ZFL -QSP)BJK -2QZ)R7H -JXH)HSJ -5W2)D66 -5HD)PGC -VP3)9NJ -H6Y)DZW -L3F)Z2L -8BN)SPH -KK5)HNV -717)58W -72J)3JT -CB5)QSP -KPQ)7H4 -1KG)Q4H -6SN)6BC -9TV)XMM -PBM)1KG -221)2GL -2JC)689 -RRC)DKM -7DV)VDT -Q3S)4D4 -VCQ)KN8 -PX5)CDX -5SH)YV2 -MV6)Y5R -153)YDL -9X7)LR5 -BKJ)LWH -ZH5)H7Y -T6G)44D -VX1)7ZY -5SS)CC7 -84R)BHH -FZF)6TB -D5L)1F1 -91H)L5B -3XB)X46 -FS4)5C7 -TRZ)42V -G87)N4Z -7G4)S8H -T4F)1WP -NY8)CLS -C3T)NKR -Z48)XGT -VLW)DLR -DGD)GY1 -NQQ)431 -WVC)BMT -DB9)ZK9 -84R)PKL -S2T)FP1 -X59)77J -41B)JSD -QHC)4DZ -MKS)W96 -XNB)GK6 -7X5)7P8 -X81)65D -BNN)B8G -SWG)QXK -9PT)7PC -5R4)FS4 -47P)H96 -1G1)VSV -6XB)KQH -BBQ)54Q -ZVJ)QTQ -9FS)HY3 -ZC7)HBZ -XGR)8HK -S4P)S2R -BGZ)21Z -MFL)T1M -G6S)W1W -1X8)2Z3 -LQ9)J4J -8PP)YXN -TNG)6ZN -XJP)676 -Y5R)5MC -N1D)R66 -BFB)XGR -DSW)QYB -Q2Z)TLH -8DG)GNH -QC2)D3Y -QYB)TG7 -YQQ)SW6 -KSX)GW2 -B6Q)8PP -DJH)CV2 -5LC)645 -X31)BHR -J44)7DV -PJX)KWM -9WH)SVY -BD5)L7K -VPJ)55L -KN8)WTN -1C7)WPW -JLR)3PM -79D)M1S -CVP)QGR -FRL)153 -9X7)Q21 -C56)9V7 -R78)37R -84H)VLW -XNP)SNZ -TDJ)C7B -FRB)R3T -DYP)P2Y -FQG)JPY -CDX)DXW -6ZD)16Z -BL1)RGL -29T)7MR -4GK)KLT -RY7)C28 -7NP)VZP -SNG)4L5 -1CV)BFB -9F6)8B1 -X85)RR4 -KM2)F4L -PXF)WNN -P2H)TZ2 -8PB)K87 -1WP)Z9V -7RS)SB2 -C8R)H3C -KRM)TNG -BYG)G3H -9WT)GHV -WR6)FG3 -B8G)LBM -C8G)2RF -XT3)DGC -8D3)SYC -YDL)KX6 -8XK)YB3 -XVV)Q8J -DVD)T3V -TS3)Z1D -SPL)ZTS -FZD)5RQ -7BP)ZMG -MC7)VPF -DZW)TBV -K77)C56 -L5B)BW7 -154)CTC -9MX)611 -XBP)BXY -LVB)CXN -1JP)JFH -5MC)ZZ4 -DHJ)ZMD -S8Q)JWD -LD5)T4F -MY8)BPT -R9B)L1Y -RZS)9HN -C19)T5D -6LF)S8Q -YB7)P2F -2T5)9J8 -L1Y)VCM -ZCD)9WH -TSG)FF8 -VWB)9F6 -HJ7)513 -FFL)16R -L7K)LPP -19W)CZ2 -64B)KRM -VK9)GNW -FFX)RG8 -V8J)RFH -HR7)LP8 -JZQ)SR1 -SPQ)55P -784)LZ9 -QP7)3VS -GXD)SX1 -PY1)FRB -N4J)2JC -RSP)8MK -6HV)PG2 -DXM)VVK -9VB)7Q6 -GHM)PY1 -YQ2)1W8 -VF6)PHB -HSQ)BJS -S8Q)7VW -FPG)2MW -VZD)W4D -QXK)2YW -9PN)NVM -ZGD)S6X -MQY)DLD -BLT)NB1 -G6B)KBP -KNY)SH5 -QNJ)VD9 -BDF)9CF -Z2R)GTJ -WXW)6LD -QWF)FNL -ZC7)ZDZ -W31)G1G -PZQ)21X -FYM)DQX -MDP)BTL -SMR)JR9 -TGY)LD5 -MZ9)4FK -52Y)LT3 -77J)DHJ -7MR)DVX -T31)82X -N1L)FCH -G1G)FFY -79N)RTQ -95C)19J -31S)KPQ -MR6)CMG -428)57B -T1M)HP6 -BFK)JXH -Q64)CHR -VCF)VQX -SB2)8HD -MG2)N91 -HP6)KGV -2X8)WFH -TLH)XJ7 -LWV)JKX -G6K)WQ4 -MWN)C5H -TH6)B2W -P9T)YPT -S16)XJP -KQH)586 -TG7)M1N -JP2)1KX -3TR)693 -LPK)QWF -7V4)B3V -JTV)H9N -YXC)WDF -BXW)Q2W -GPP)Q8R -Q2W)3R1 -4BG)DHN -TFB)YOU -65D)B1X -6M6)784 -3VS)1JP -GW4)7XD -F3G)9GR -HBZ)QX4 -YXR)9FS -CMD)5MP -H4K)WDM -1KX)WBF -SVY)SGX -16Z)MXN -PQY)11Y -F95)FFZ -DJ3)SDF -QM2)CWZ -S1T)2QG -P7J)572 -DHN)QYN -PD7)CZ8 -37V)Z4H -DQL)LZK -D19)1X5 -K4N)46D -JDL)5TJ -JNZ)YK2 -JR9)H2M -DPW)RN3 -TKY)NYB -YGJ)HZ9 -RY3)BZ6 -QP7)Z1J -5D9)KWF -5V6)PND -LXW)D19 -SW6)F2L -W82)W4H -DMK)8F8 -J4G)NHT -VCM)CW3 -N1C)2QZ -XJ1)7WG -VPJ)J44 -KYJ)428 -XJK)WR7 -57B)PKN -14C)CPS -X7K)DJH -C28)1C7 -PP5)BCQ -CLS)M7M -S2G)51H -M1P)GPP -9J8)39B -3MW)1WG -XFK)3TB -FFL)CHG -FPG)XXQ -MCG)TDJ -QG5)DJ3 -3F5)BB4 -47G)HSQ -77J)9YL -RJZ)37Y -DBZ)9TV -9LN)8MT -3PM)6GT -572)D8N -Y27)8RX -Z6F)272 -CTC)D9Q -YV2)G2R -9B1)BG9 -BR6)CQB -SP9)5LR -X2N)R4P -L2G)3XB -2RF)4PV -1WG)4JM -CBH)GZK -PKL)7CF -3ZC)ZXW -T88)31H -H1J)J7W -TYX)75R -J7W)V97 -XCD)JLR -8N7)FQ4 -DKM)2T3 -DGS)BGG -272)8XM -TZZ)C6X -HTS)YR9 -611)P4D -M6W)B8H -23G)3MM -FFX)Q1Q -4RH)2T6 -4SQ)C15 -39X)CYM -7TN)DYP -4W6)79N -C96)NFV -4DV)C8G -9YJ)Z48 -825)7GK -MMK)L2R -WNN)R4D -D88)TGY -Q8N)DGS -512)VD7 -CQR)6YP -5H1)X7K -2TD)2CS -ZHY)5CZ -2VD)2YM -5TX)N1L -YP8)P5J -Z1D)27G -297)QM2 -2S2)LPB -KDQ)ZTH -55P)2RD -PRG)Q1Z -DF7)XBP -SQ4)MHM -TLY)R1J -J82)6ND -7GK)CSL -SNZ)7J4 -CSL)KJJ -815)BM6 -NL4)XQ9 -995)825 -GLX)13Y -3MQ)9NN -T5B)HQS -R4P)V95 -BFF)HW1 -WR7)9YJ -S4P)299 -BB4)6D6 -DYJ)3LW -VH6)PQD -NHG)HPK -HZW)LL7 -HD2)HTS -4VN)ZX4 -V2V)BL1 -16R)NK4 -G6B)36Y -J6C)SJR -QNF)17D -1R2)CH2 -BJK)HZW -FFY)95K -ZQK)4P2 -CQ9)27B -FZS)DVD -LG3)C2D -FLB)NZS -HLC)R1Y -YC9)NSQ -GBM)H8P -KD8)S3H -WS6)R78 -4GQ)RJZ -R1J)H9J -61P)P63 -7CF)K77 -HZ1)KYL -1X5)CX3 -FLH)BJV -GYJ)D88 -2CS)MXB -Z3G)SW5 -VJ1)3X1 -H7Y)HD2 -DYB)4W6 -BPT)NKQ -H2M)L2Y -N3D)9LN -1TN)S16 -KYY)2NX -GJN)5PQ -V1X)YKP -JP2)VBW -KWF)J4M -9YJ)7C1 -XGT)GGZ -VSV)9M1 -ZMD)XYG -6QN)GFR -NL7)M1P -QC5)LPK -NPX)79V -NGV)71S -9T7)84H -7DF)1N7 -LPH)6LG -3DT)Y93 -WY2)DMK -M8Z)LYX -HR2)C6F -TBV)TLY -2TV)91X -112)12R -WL9)JNX -NBJ)PS1 -BFF)CYR -KTW)CXV -KX6)52Y -86C)3F5 -P63)PX5 -KKQ)W2D -FTN)ZYG -BF4)BNY -GMR)2G3 -T7T)G48 -4G9)P7J -LJX)P1V -R3T)6M6 -DCQ)SNG -Q5T)XT3 -GS2)FTN -COM)9JW -QSH)TKH -B1X)9GH -RSP)JP2 -TKH)R8M -DW3)V2V -XX9)594 -LWX)KCT -CZ8)2T5 -QYN)84R -1N7)878 -2B4)898 -4PV)FN6 -GFR)SZ4 -R66)Z6F -V93)V9K -6BL)NSY -BCY)7V4 -8XM)JBB -SWH)WV8 -M1S)TT3 -J4G)7GP -9P3)LB7 -L2Y)KXQ -V9K)Q2X -3LT)2FF -GNW)XW1 -C68)X5M -VLG)6G5 -B3G)Q5T -TPY)2DW -BFB)MSL -BPT)C89 -38C)N84 -VT2)711 -VC5)3KM -CDR)MNK -F86)RDR -N4Z)Q72 -3Q5)MWN -HFR)JX8 -QX4)QKM -2YM)NY9 -DY5)BBY -JBV)VGM -DXP)79F -X5Z)QG5 -9YL)3LV -31H)DBZ -QGP)4B2 -SZR)RRZ -R78)PRG -3JT)WNX -CJZ)7TN -299)KTW -NBZ)93W -SXK)Z4D -6XM)T6G -DWP)RGD -CH2)BDF -RN3)TT2 -9HN)NRL -3TB)NV6 -MNK)471 -TLG)KZJ -RT5)VDK -BT5)3P3 -CRB)2MH -22K)BSR -DQP)2VD -D4D)J4G -2RD)HR2 -D4Z)DQL -4TN)SKL -DWR)3KW -1WP)X81 -594)NBJ -471)TZH -KR8)PDD -47Y)7SZ -9NB)S4P -GFP)F3G -KYV)6Z7 -K1G)DLL -RTN)T4H -9JW)7X5 -NVM)TSL -NRL)6X3 -8HD)3Q5 -ZN2)995 -HJZ)9NB -14W)YD1 -BPL)51T -1S2)1QD -QYJ)7L1 -5TJ)NX9 -L9K)Q7S -JVW)DFH -VC8)WL3 -CVW)41B -5YC)VJ1 -LR5)47Y -24Y)WMS -6C3)YXV -C7H)X3Y -75R)MV6 -JHP)FRT -MXQ)T5B -NZJ)QNF -VGM)KF6 -MFZ)FJV -Q72)8LJ -H1M)1S2 -BHR)VK9 -711)8S9 -S3H)BHS -DBZ)SVG -51H)7BP -HP6)NBZ -TGW)9M4 -ZZ4)DYB -P5J)TRZ -T62)LN5 -P4D)MFL -CMD)N5Y -NSQ)8B3 -FDT)ZCD -YK2)JTV -LBM)39X -LPK)BD5 -2T4)1TH -Z9V)6L6 -L48)JNZ -6QV)NMC -GW2)D4D -C32)4NJ -NL3)KPG -XPD)R4F -S47)L48 -7WG)K98 -PGC)ZXS -TT2)MG2 -X5M)LSV -54Y)TZZ -2WS)JNH -R4F)KS2 -SZR)FLB -1QK)41X -VZP)PV5 -NBJ)TS3 -T4H)GJB -B12)LGJ -52T)14K -T9T)XH2 -VG4)7RS -QHD)R91 -PQD)FLH -PD7)DVV -RDR)NGG -YT7)XVV -QCN)88Q -MXN)Z8Z -Q6G)B63 -GNX)YC3 -QRV)C68 -7LZ)3K4 -3FH)717 -3HN)TKY -SK2)HD6 -Z4D)FLP -9SF)SXK -HK4)CBG -KKF)GF1 -H6R)11K -YD1)YXC -G89)5KG -JGB)NPX -GXK)3QN -26S)5W2 -X46)DGY -1DC)KR8 -L65)H6Y -XW1)9QL -CXV)VND -586)BYL -BYZ)DYC -JPY)JXV -C6F)KDQ -BHH)NLM -SBL)BPL -QBS)VKT -KGV)K8D -T4R)S1T -3KM)7G4 -91H)W7X -3MM)4QN -GZK)TBG -B2W)CXC -LT3)BPY -TSL)MBK -JKX)14C -CHG)WVC -87N)JB4 -9PT)WPB -WV8)SGK -KLT)TBQ -Q1Z)HFD -BZ6)997 -ZMD)8N7 -YMP)6SN -SGX)WL2 -K8D)Q2Z -48R)79S -DQX)221 -VX9)HT3 -RXJ)3X3 -T3V)6PH -BW7)QCN -RPY)PD7 -RT5)N6X -TMT)4VN -F3D)SWG -C3N)F86 -3X1)NSJ -F5C)PG1 -VFV)8XR -79S)YB7 -BCD)TYD -8S9)VZD -J6G)B1Y -GJB)XFK -QCS)VHQ -QBB)ZR6 -T1J)VCQ -NB1)GL4 -DDD)PF1 -YFJ)HGG -7X1)FPG -997)G6K -NSJ)ZWJ -LYX)X59 -R4Z)M3D -HH4)NQQ -Q8K)MY8 -Q8T)8WB -FHY)YKX -K4X)CB5 -86J)Z4W -513)RFZ -YCG)KK5 -BVZ)HCL -7J4)DQP -3MW)VS1 -NY9)TJJ -KRF)Q8K -82V)J7T -82N)WS3 -15G)8NS -HZZ)YVX -4D4)V1H -B12)YXR -25X)15G -LNQ)DF7 -P93)47P -9KD)22H -XCF)LJG -PND)YMP -4NH)2GN -GBL)H2Q -PHB)FHY -SFW)NL3 -6LD)DXM -2MC)6QN -SDF)GW4 -HVX)J82 -NHG)Z2R -45G)B6J -MH8)347 -4JM)3FH -XJ7)RPY -NKQ)76W -847)N4J -8HT)PQY -W2K)52H -VQT)XNP -8SC)YV5 -RR8)LXW -8RC)VNQ -JQL)G8T -B6J)J31 -FRL)C7H -HTH)1ZC -FLP)YK5 -DLD)GXK -2TV)9B1 -DHQ)ZXG -Z2R)6QF -4B2)8Y5 -GH3)54Y -BJV)29T -PWF)JGB -7Q6)5ZM -BSZ)ZTR -SGK)QJD -HT3)VC8 -2CQ)P93 -3H9)8XK -SPM)XTM -BXS)ZPX -9FN)HJZ -GV7)C7P -81D)BX3 -XTM)XX9 -TZ2)NY4 -QGD)PZ9 -BPN)HYK -PZ9)T7T -H1L)Z8R -CWZ)3TR -6L6)HK4 -ZR6)JM9 -GF1)XL8 -4FK)SCH -412)ZX5 -HY3)C26 -8WB)4BG -XB6)5LC -HTJ)SK2 -3LV)2TV -3K4)P3M -5MP)BCY -C65)9FN -2QG)KMM -Y6C)X4V -2G3)5R5 -RG8)VP3 -V1H)MQY -CPW)CMD -8VQ)MKS -S8C)F1B -CBG)LGZ -Y9Q)GV7 -HFD)25X -1S2)2TD -5TG)XSS -JQN)KKL -651)VG4 -RTV)V4T -Q4H)QYP -TZH)RHS -DN6)YP8 -CCY)9JL -661)XB6 -JWD)CYC -ZX4)4RG -BPY)FQC -689)BSQ -WPB)BPN -JZM)BV4 -J3X)LN2 -ZXS)M2Z -B3V)SPM -BL6)KKF -WQ4)DSP -G2R)W2K -QFX)2WM -VNQ)2B4 -YG4)MYL -2MC)RT5 -JM9)NGV -YK5)V1X -GXP)BHY -N84)CV9 -HW1)C88 -7XB)KWZ -M1N)VDP -JFH)TH6 -3W1)B6B -DZ6)8HT -XLJ)T31 -FCB)W35 -6DY)7X1 -Q21)QYJ -5TT)Y27 -M5Y)X8K -88Q)BFK -29H)G1L -LJG)B3G -ZTS)XQS -S2Z)F2J -KMM)X31 -389)Q7Z -Q4H)8BN -95G)HVX -4C9)R4Z -GHM)112 -KPG)QC5 -C89)PL1 -24B)NB8 -7P8)457 -C5H)QRV -DVX)3ZC -YYD)K94 -KBV)9PT -KST)KYJ -GL4)HZQ -C4K)L1T -ZGB)N6Z -4QN)5R4 -3HJ)RY7 -39B)5YB -B1Y)NZJ -W7X)6QV -KMC)SP9 -N3V)XJ1 -HLF)Y91 -YPT)FBX -2NX)P2H -P7J)YGJ -MXN)4Y8 -D4Z)VC5 -9M1)5TP -HBJ)GBM -Z22)VLG -6LG)V2H -9VB)B2L -L6C)C1W -MLV)KSX -CQB)YT7 -LB7)HZZ -YXV)86J -6Z7)4T3 -DLL)DW3 -12G)6C3 -FG3)FFL -JNX)BCD -YJ5)FPM -C1W)CPW -Q38)QZK -FF8)FZS -57G)DZ6 -Z1J)CMZ -82X)C3N -CV2)DLZ -P7V)52T -YH9)CQR -3JX)1NS -N6Z)Z22 -Z8Z)RF6 -CGH)YCG -M34)1ZD -FPM)YKV -3LT)BDB -FQ4)CTY -4P2)B12 -QFN)GPB -PF1)3FX -8M1)JWR -YKV)B6Q -5ZM)W82 -M48)GS2 -JD4)1TN -ZMG)9P3 -Z8R)JCR -F2J)QSH -D55)4DV -4JW)29H -GPB)MH8 -CDM)MZ9 -KD8)7YX -HPK)95G -C2D)SZR -FSW)YQC -QGR)XJK -L2R)6XM -XQQ)J6G -79V)4MM -JWR)G4B -B8H)W2W -4Y8)X2N -SVG)4Q8 -57R)9SF -NRZ)4RH -JRR)2T4 -JXV)FTX -YVX)JMT -QV7)S9K -HK4)7TT -TM2)RTT -Y27)5PT -8VQ)VX1 -4RH)483 -SC5)QXQ -8NS)LX1 -VBW)661 -YC3)FZL -FRM)6DV -2MH)C32 -M8Z)FDT -7XD)YFJ -WDM)8M1 -NB7)7KP -54Q)57R -JNH)Q64 -P2Y)CVW -7SZ)D6Q -5V2)V8J -HZ9)82S -2Z7)2X8 -7H4)25M -NZS)12G -XLJ)6ZD -ZK9)HLX -NVR)QFX -KKL)XTF -W35)ZGD -C9N)2Z7 -G9Y)BSB -Z4H)DB9 -25Y)3FD -R14)SWH -1YV)QBB -ZWJ)XLJ -55K)QS2 -ZFL)QYX -LGL)RLJ -FTX)91Q -BCQ)ZH5 -HSX)BR6 -NRL)D4Z -46D)BBP -J62)PK7 -X3Y)C67 -DVM)1DC -H9J)8SC -41Z)7TL -2RL)X5D -CMG)6XB -C8G)FZD -H8P)22K -9YR)1YV -CW3)8PB -6M8)M48 -WFH)P7V -YXN)JC5 -SR1)DWR -K9D)5YC -6YP)6LF -FFZ)HJ7 -7YL)7LZ -GXW)GMR -3JX)BXP -C15)Y9Q -DLR)YH9 -XYG)PZ7 -41X)GL2 -17D)2SH -R9B)RSP -F31)YLQ -4Q8)KST -MBK)LVB -6ZN)VPJ -6Q9)YBC -V4T)847 -BDB)2WS -VKT)5V6 -SX1)VLD -G1Q)3BL -BJS)PP5 -LM4)CWY -SPY)HR7 -6GT)9PN -DVD)5TT -2WM)3HJ -GGZ)KNY -JB4)SVH -ZXG)SMR -44D)P4Q -7TH)T88 -XSS)ZFV -BG9)S66 -8B1)7DF -PB1)SC5 -R4D)PZQ -71S)C4K -HNV)MYP -8MT)8N9 -B92)C8R -JX8)DGD -D6Q)8LQ -ZPD)7W7 -Q7Z)BKJ -Z2L)JBV -MXB)V9W -93W)JQN -95G)PXF -Q8J)S8C -X83)72J -457)VX9 -7M2)F95 -ZLR)FKC -TKQ)WS6 -XH2)6MC -X2N)BF4 -JCR)14W -TJJ)9KD -H7Y)KRF -6MC)PYF -27G)NZK -D8N)MCH -9CF)HBJ -KCT)RRC -CYR)QGP -5PQ)X85 -7VW)5TG -BJS)C65 -9V7)V5N -RKP)XCD -X8K)X83 -B63)SBL -9SH)Q8T -LW7)HLC -P93)JZQ -YLM)RLZ -GL2)JDJ -LZ9)K1G -DWP)TBM -6GT)651 -NLM)JD4 -YC9)Q38 -FP1)23G -V4J)XNJ -PYF)7TH -3P3)KBV -95D)X5W -TBG)LG3 -BXP)83F -SRN)GHM -5R5)D8K -NGG)H1J -6D6)KKQ -5RQ)26S -5X1)RSB -GW2)NVR -9QL)C96 -GXQ)Q6G -TBQ)XS2 -S2W)BHQ -51T)CJ1 -L6C)HPZ -BSB)GFP -5TP)1QK -L1T)D6Z -NHT)82H -RSC)3W1 -KXQ)LQ9 -VK9)QHN -J75)PWF -2GL)1P5 -8LJ)66X -SGG)F3D -WL2)YLM -YQC)459 -YGJ)XVY -6X3)4SQ -6PH)WKK -V2H)H4K -RTT)HTJ -YBC)L2G -7C1)YQ2 -FZL)VFV -RF6)4CH -M18)37V -P63)DPW -S2R)ZPD -WZW)MD5 -MR6)TY4 -K5H)7NP -GGZ)P4K -R1Y)ZL7 -46D)5YG -7H4)Z3G -RGL)BYG -7YX)6DY -MRF)C19 -PL1)YQQ -QS2)J62 -QHN)CCY -171)VXY -YR9)N81 -FQG)K9D -JBB)BVZ -ZXW)HKT -KS2)V5M -8RX)ZC7 -GY1)TPY -2GL)NL7 -12R)32K -MKS)N1D -NFV)12Z -BGG)5TX -T5D)WKN +F1B)CNY +SCH)CBH +H9N)GXP +ZP9)M5Y +7VT)VQT +82S)45G +1ZC)TMT +HYK)56V +5YG)H1W +N5Y)BNN +QM6)GXD +ZQK)VWB +PS1)J6C +BSR)9X7 +19J)47G +H2Q)JHP +2FT)TLG +BBY)4TN +ZMG)3MW +2SH)SFW +4DB)R14 +2T3)5YR +DGY)4GK +QKM)81D +VNQ)RDQ +R8M)JDL +2GN)CDM +V5N)3J8 +1F1)3ND +ZDZ)PBP +CNY)QFN +BDF)V93 +DSW)PB1 +SDS)J2D +WFL)ZN2 +693)23R +VLD)DWP +YVZ)H1M +8XR)LWX +CYC)ZP9 +J5X)C9N +XVY)19W +VPF)9YR +CTY)2D4 +LZ9)C4S +GK6)RTN +KJJ)MCG +G4B)QCS +4CH)G2D +3KW)2R9 +CGG)25Y +KZJ)XCF +BBP)WXC +K98)FQG +LSV)QNJ +7L1)RR8 +C7B)BYZ +ZPV)DN6 +NK4)L7W +SH5)PCG +XGM)KD8 +TT3)SGG +85S)5D9 +QJD)KM2 +769)86H +PG2)L9Y +8B3)T4R +T1M)LW7 +NX9)3RP +7JW)SDS +3J7)NND +WBF)Y1T +459)HSX +V9W)DHQ +HPZ)41Z +MYP)6M8 +DGC)9VB +RFH)WL9 +815)6BL +FNL)DSW +55L)DCQ +VD7)M8Z +8N9)VKS +JC5)CFQ +N5Y)5V2 +BTL)8PC +P1V)GNX +DKM)XQQ +BNY)412 +SPM)KGB +4MM)5MJ +XQ9)3HN +KWZ)LWV +WDF)815 +6DV)D59 +W13)MLV +BSQ)H1L +R91)6Q9 +BNX)9SH +Q8R)JFR +VDK)KHL +KBP)ZQK +ZX5)4C9 +X5D)T9T +3FD)5X1 +VVK)S2T +C67)XGM +W2D)M34 +58W)GY9 +S47)CRB +NJD)3LT +DXW)ZVJ +CT5)X5Z +GHV)D2G +6QN)LNQ +S8H)F5C +RPY)JVW +LPB)3GV +V5M)WXW +CZ2)XPD +9JL)M18 +D8K)2CQ +VRF)9MX +NYB)TM2 +BHS)MJ4 +C6X)NMX +21Z)RYC +FJV)154 +CFQ)LM4 +MHM)TK6 +SRP)171 +FCH)MXQ +6Q9)YJ5 +VS1)Y6C +VND)396 +PW9)TGW +9NJ)G89 +8MK)GBL +VKS)LPH +KWM)9DQ +RTQ)W13 +K94)87N +CPS)DVM +G1L)VRF +2YW)ZPV +HTF)HJS +LWH)SRN +4T3)B92 +J4J)4NH +ZYG)PBM +QYP)RTV +9M4)9K2 +7NP)297 +PBP)RZS +K8S)BLT +BHY)PW9 +4L5)FRL +HKT)VF6 +2Z3)QV7 +Z9V)ZGB +1F2)CT5 +KHL)BBQ +16R)M6W +YN5)D5L +TK6)QHD +C26)91H +86C)FFX +6QF)VCF +BCB)4GQ +TBM)RQZ +ZTH)YL8 +1XD)1J7 +3FX)HSN +W2W)RSC +P4K)BGZ +7HW)512 +L7W)5SH +YCJ)DYJ +G8T)J8V +5TX)XNB +FKC)SPL +91Q)QC2 +C88)HFR +MSL)4DB +CV9)NRZ +HZQ)57G +JM9)C3T +2MW)NJD +LGZ)1T3 +QZK)82V +Y6C)MFZ +HD6)SQ4 +2T6)R9B +WL3)2RL +WS3)24J +YV5)VT7 +9NN)LGL +JMT)28Y +N91)SPY +R8D)MC7 +56V)X24 +25M)YYD +SPH)BL6 +62X)K5H +471)S2G +VHQ)FSW +NMC)PQ1 +3GV)J2S +VT7)7M2 +32K)V4J +7L1)ZS6 +4JW)3MQ +412)MDP +2D4)L3F +QYX)VT2 +NY9)YN5 +5PT)CJZ +52H)FHK +XXQ)4JW +HLX)48R +P1C)62X +8PC)Y3R +YKP)NYP +LHT)KV5 +DVV)8RC +WXC)MZZ +9CF)W31 +XJK)SXQ +VDP)YG4 +HNV)2MC +3LW)9WT +RLJ)KMC +9HN)31S +5YB)3J7 +7VW)Q3S +FY7)KZ6 +VQX)1R2 +Y3R)ZZ5 +KZ6)K8S +N4Z)3H9 +N6X)D55 +YB3)J3X +GTJ)HZ1 +S9K)2S2 +Q1Q)8D3 +3QN)YKD +MZZ)24Y +JFR)JQL +QSP)82N +BYL)GJN +7W7)VH6 +FBX)61P +22H)QBS +M7M)389 +YKD)6ZY +M3D)7XB +S66)K4X +BM6)GXQ +Z4W)XN7 +NYP)JDM +VD9)LJX +5YR)S47 +Q8J)YCJ +5TP)QP7 +91X)4JY +XS2)HTF +12Z)BNX +NKR)SRP +37Y)5SS +SZ4)MR6 +7TT)TSG +MYL)BSZ +2FF)MRF +11Y)7HW +82H)T1J +J7T)2FT +7GP)SAN +BHH)CDR +PZ7)GK9 +9GH)G6S +M2Z)38C +ZLB)1S4 +W1W)7JW +38W)GLX +1TH)1CV +8F8)NB7 +Y1T)5H1 +CJ1)G9Y +XL8)Z5M +NMX)J5X +LGJ)SPQ +F2L)Y4V +BMT)S2W +G3H)64B +PK7)3DT +MZ9)FZF +483)85S +B6B)FRM +37R)BXS +J2S)QM6 +K87)8VQ +347)RXJ +VP3)JRR +YLQ)GYJ +BV4)FY7 +V2V)BT5 +711)Q5L +5LR)RY3 +HTH)R8D +RDQ)HH4 +RHS)3JX +RFZ)YC9 +KV5)L9K +MJ4)LHT +LPP)N3V +RSB)CQ9 +LN5)5KZ +W4D)ZHY +JDJ)ZLR +YKX)TYX +C4S)WY2 +42V)8XD +W4H)9T7 +RYC)FYM +CC7)38W +DHQ)CGG +L9Y)HTH +5SH)H1D +DGY)K4N +8Y5)WZW +SXQ)J75 +HQS)7VT +XTF)99C +B2L)FCB +66X)HLF +95K)N1C +NY4)BXW +XPD)2MN +7TL)F31 +7TL)L65 +TY4)D39 +XBP)1G1 +RQZ)L6C +GHV)BCB +NB8)DY5 +CFQ)RKP +LP8)CGH +RGD)G87 +YB3)NHG +GNH)7YL +BHQ)WFL +15G)G6B +14K)5HD +2CQ)KYY +NZK)XV1 +SGX)N3D +7WG)YVZ +CXN)R8S +ZL7)NL4 +SN6)WR6 +4NJ)Y51 +676)T62 +V95)H6R +LL7)4G9 +DYC)NY8 +9GR)Q8N +RLZ)DXP +BCD)24B +CWY)KYV +6TB)55K +PWF)SN6 +6BC)6HV +GY9)PJX +1QD)TKQ +DLZ)TFB +55P)P8G +8XD)95C +CPW)S2Z +VDT)QGD +Y93)GH3 +X4V)CVP +3X3)79D +1NS)1F2 +KYL)1XD +3ND)G1Q +898)DDD +D6Z)JZM +Q5L)843 +NSY)86C +24B)MMK +5CZ)9RS +D39)BFF +CX3)QHC +JDM)95D +SYC)P1C +J4M)ZLB +ZS6)769 +XMM)1X8 +ZFV)P9T +7JW)GXW +W96)ZFL +QSP)BJK +2QZ)R7H +JXH)HSJ +5W2)D66 +5HD)PGC +VP3)9NJ +H6Y)DZW +L3F)Z2L +8BN)SPH +KK5)HNV +717)58W +72J)3JT +CB5)QSP +KPQ)7H4 +1KG)Q4H +6SN)6BC +9TV)XMM +PBM)1KG +221)2GL +2JC)689 +RRC)DKM +7DV)VDT +Q3S)4D4 +VCQ)KN8 +PX5)CDX +5SH)YV2 +MV6)Y5R +153)YDL +9X7)LR5 +BKJ)LWH +ZH5)H7Y +T6G)44D +VX1)7ZY +5SS)CC7 +84R)BHH +FZF)6TB +D5L)1F1 +91H)L5B +3XB)X46 +FS4)5C7 +TRZ)42V +G87)N4Z +7G4)S8H +T4F)1WP +NY8)CLS +C3T)NKR +Z48)XGT +VLW)DLR +DGD)GY1 +NQQ)431 +WVC)BMT +DB9)ZK9 +84R)PKL +S2T)FP1 +X59)77J +41B)JSD +QHC)4DZ +MKS)W96 +XNB)GK6 +7X5)7P8 +X81)65D +BNN)B8G +SWG)QXK +9PT)7PC +5R4)FS4 +47P)H96 +1G1)VSV +6XB)KQH +BBQ)54Q +ZVJ)QTQ +9FS)HY3 +ZC7)HBZ +XGR)8HK +S4P)S2R +BGZ)21Z +MFL)T1M +G6S)W1W +1X8)2Z3 +LQ9)J4J +8PP)YXN +TNG)6ZN +XJP)676 +Y5R)5MC +N1D)R66 +BFB)XGR +DSW)QYB +Q2Z)TLH +8DG)GNH +QC2)D3Y +QYB)TG7 +YQQ)SW6 +KSX)GW2 +B6Q)8PP +DJH)CV2 +5LC)645 +X31)BHR +J44)7DV +PJX)KWM +9WH)SVY +BD5)L7K +VPJ)55L +KN8)WTN +1C7)WPW +JLR)3PM +79D)M1S +CVP)QGR +FRL)153 +9X7)Q21 +C56)9V7 +R78)37R +84H)VLW +XNP)SNZ +TDJ)C7B +FRB)R3T +DYP)P2Y +FQG)JPY +CDX)DXW +6ZD)16Z +BL1)RGL +29T)7MR +4GK)KLT +RY7)C28 +7NP)VZP +SNG)4L5 +1CV)BFB +9F6)8B1 +X85)RR4 +KM2)F4L +PXF)WNN +P2H)TZ2 +8PB)K87 +1WP)Z9V +7RS)SB2 +C8R)H3C +KRM)TNG +BYG)G3H +9WT)GHV +WR6)FG3 +B8G)LBM +C8G)2RF +XT3)DGC +8D3)SYC +YDL)KX6 +8XK)YB3 +XVV)Q8J +DVD)T3V +TS3)Z1D +SPL)ZTS +FZD)5RQ +7BP)ZMG +MC7)VPF +DZW)TBV +K77)C56 +L5B)BW7 +154)CTC +9MX)611 +XBP)BXY +LVB)CXN +1JP)JFH +5MC)ZZ4 +DHJ)ZMD +S8Q)JWD +LD5)T4F +MY8)BPT +R9B)L1Y +RZS)9HN +C19)T5D +6LF)S8Q +YB7)P2F +2T5)9J8 +L1Y)VCM +ZCD)9WH +TSG)FF8 +VWB)9F6 +HJ7)513 +FFL)16R +L7K)LPP +19W)CZ2 +64B)KRM +VK9)GNW +FFX)RG8 +V8J)RFH +HR7)LP8 +JZQ)SR1 +SPQ)55P +784)LZ9 +QP7)3VS +GXD)SX1 +PY1)FRB +N4J)2JC +RSP)8MK +6HV)PG2 +DXM)VVK +9VB)7Q6 +GHM)PY1 +YQ2)1W8 +VF6)PHB +HSQ)BJS +S8Q)7VW +FPG)2MW +VZD)W4D +QXK)2YW +9PN)NVM +ZGD)S6X +MQY)DLD +BLT)NB1 +G6B)KBP +KNY)SH5 +QNJ)VD9 +BDF)9CF +Z2R)GTJ +WXW)6LD +QWF)FNL +ZC7)ZDZ +W31)G1G +PZQ)21X +FYM)DQX +MDP)BTL +SMR)JR9 +TGY)LD5 +MZ9)4FK +52Y)LT3 +77J)DHJ +7MR)DVX +T31)82X +N1L)FCH +G1G)FFY +79N)RTQ +95C)19J +31S)KPQ +MR6)CMG +428)57B +T1M)HP6 +BFK)JXH +Q64)CHR +VCF)VQX +SB2)8HD +MG2)N91 +HP6)KGV +2X8)WFH +TLH)XJ7 +LWV)JKX +G6K)WQ4 +MWN)C5H +TH6)B2W +P9T)YPT +S16)XJP +KQH)586 +TG7)M1N +JP2)1KX +3TR)693 +LPK)QWF +7V4)B3V +JTV)H9N +YXC)WDF +BXW)Q2W +GPP)Q8R +Q2W)3R1 +4BG)DHN +TFB)YOU +65D)B1X +6M6)784 +3VS)1JP +GW4)7XD +F3G)9GR +HBZ)QX4 +YXR)9FS +CMD)5MP +H4K)WDM +1KX)WBF +SVY)SGX +16Z)MXN +PQY)11Y +F95)FFZ +DJ3)SDF +QM2)CWZ +S1T)2QG +P7J)572 +DHN)QYN +PD7)CZ8 +37V)Z4H +DQL)LZK +D19)1X5 +K4N)46D +JDL)5TJ +JNZ)YK2 +JR9)H2M +DPW)RN3 +TKY)NYB +YGJ)HZ9 +RY3)BZ6 +QP7)Z1J +5D9)KWF +5V6)PND +LXW)D19 +SW6)F2L +W82)W4H +DMK)8F8 +J4G)NHT +VCM)CW3 +N1C)2QZ +XJ1)7WG +VPJ)J44 +KYJ)428 +XJK)WR7 +57B)PKN +14C)CPS +X7K)DJH +C28)1C7 +PP5)BCQ +CLS)M7M +S2G)51H +M1P)GPP +9J8)39B +3MW)1WG +XFK)3TB +FFL)CHG +FPG)XXQ +MCG)TDJ +QG5)DJ3 +3F5)BB4 +47G)HSQ +77J)9YL +RJZ)37Y +DBZ)9TV +9LN)8MT +3PM)6GT +572)D8N +Y27)8RX +Z6F)272 +CTC)D9Q +YV2)G2R +9B1)BG9 +BR6)CQB +SP9)5LR +X2N)R4P +L2G)3XB +2RF)4PV +1WG)4JM +CBH)GZK +PKL)7CF +3ZC)ZXW +T88)31H +H1J)J7W +TYX)75R +J7W)V97 +XCD)JLR +8N7)FQ4 +DKM)2T3 +DGS)BGG +272)8XM +TZZ)C6X +HTS)YR9 +611)P4D +M6W)B8H +23G)3MM +FFX)Q1Q +4RH)2T6 +4SQ)C15 +39X)CYM +7TN)DYP +4W6)79N +C96)NFV +4DV)C8G +9YJ)Z48 +825)7GK +MMK)L2R +WNN)R4D +D88)TGY +Q8N)DGS +512)VD7 +CQR)6YP +5H1)X7K +2TD)2CS +ZHY)5CZ +2VD)2YM +5TX)N1L +YP8)P5J +Z1D)27G +297)QM2 +2S2)LPB +KDQ)ZTH +55P)2RD +PRG)Q1Z +DF7)XBP +SQ4)MHM +TLY)R1J +J82)6ND +7GK)CSL +SNZ)7J4 +CSL)KJJ +815)BM6 +NL4)XQ9 +995)825 +GLX)13Y +3MQ)9NN +T5B)HQS +R4P)V95 +BFF)HW1 +WR7)9YJ +S4P)299 +BB4)6D6 +DYJ)3LW +VH6)PQD +NHG)HPK +HZW)LL7 +HD2)HTS +4VN)ZX4 +V2V)BL1 +16R)NK4 +G6B)36Y +J6C)SJR +QNF)17D +1R2)CH2 +BJK)HZW +FFY)95K +ZQK)4P2 +CQ9)27B +FZS)DVD +LG3)C2D +FLB)NZS +HLC)R1Y +YC9)NSQ +GBM)H8P +KD8)S3H +WS6)R78 +4GQ)RJZ +R1J)H9J +61P)P63 +7CF)K77 +HZ1)KYL +1X5)CX3 +FLH)BJV +GYJ)D88 +2CS)MXB +Z3G)SW5 +VJ1)3X1 +H7Y)HD2 +DYB)4W6 +BPT)NKQ +H2M)L2Y +N3D)9LN +1TN)S16 +KYY)2NX +GJN)5PQ +V1X)YKP +JP2)VBW +KWF)J4M +9YJ)7C1 +XGT)GGZ +VSV)9M1 +ZMD)XYG +6QN)GFR +NL7)M1P +QC5)LPK +NPX)79V +NGV)71S +9T7)84H +7DF)1N7 +LPH)6LG +3DT)Y93 +WY2)DMK +M8Z)LYX +HR2)C6F +TBV)TLY +2TV)91X +112)12R +WL9)JNX +NBJ)PS1 +BFF)CYR +KTW)CXV +KX6)52Y +86C)3F5 +P63)PX5 +KKQ)W2D +FTN)ZYG +BF4)BNY +GMR)2G3 +T7T)G48 +4G9)P7J +LJX)P1V +R3T)6M6 +DCQ)SNG +Q5T)XT3 +GS2)FTN +COM)9JW +QSH)TKH +B1X)9GH +RSP)JP2 +TKH)R8M +DW3)V2V +XX9)594 +LWX)KCT +CZ8)2T5 +QYN)84R +1N7)878 +2B4)898 +4PV)FN6 +GFR)SZ4 +R66)Z6F +V93)V9K +6BL)NSY +BCY)7V4 +8XM)JBB +SWH)WV8 +M1S)TT3 +J4G)7GP +9P3)LB7 +L2Y)KXQ +V9K)Q2X +3LT)2FF +GNW)XW1 +C68)X5M +VLG)6G5 +B3G)Q5T +TPY)2DW +BFB)MSL +BPT)C89 +38C)N84 +VT2)711 +VC5)3KM +CDR)MNK +F86)RDR +N4Z)Q72 +3Q5)MWN +HFR)JX8 +QX4)QKM +2YM)NY9 +DY5)BBY +JBV)VGM +DXP)79F +X5Z)QG5 +9YL)3LV +31H)DBZ +QGP)4B2 +SZR)RRZ +R78)PRG +3JT)WNX +CJZ)7TN +299)KTW +NBZ)93W +SXK)Z4D +6XM)T6G +DWP)RGD +CH2)BDF +RN3)TT2 +9HN)NRL +3TB)NV6 +MNK)471 +TLG)KZJ +RT5)VDK +BT5)3P3 +CRB)2MH +22K)BSR +DQP)2VD +D4D)J4G +2RD)HR2 +D4Z)DQL +4TN)SKL +DWR)3KW +1WP)X81 +594)NBJ +471)TZH +KR8)PDD +47Y)7SZ +9NB)S4P +GFP)F3G +KYV)6Z7 +K1G)DLL +RTN)T4H +9JW)7X5 +NVM)TSL +NRL)6X3 +8HD)3Q5 +ZN2)995 +HJZ)9NB +14W)YD1 +BPL)51T +1S2)1QD +QYJ)7L1 +5TJ)NX9 +L9K)Q7S +JVW)DFH +VC8)WL3 +CVW)41B +5YC)VJ1 +LR5)47Y +24Y)WMS +6C3)YXV +C7H)X3Y +75R)MV6 +JHP)FRT +MXQ)T5B +NZJ)QNF +VGM)KF6 +MFZ)FJV +Q72)8LJ +H1M)1S2 +BHR)VK9 +711)8S9 +S3H)BHS +DBZ)SVG +51H)7BP +HP6)NBZ +TGW)9M4 +ZZ4)DYB +P5J)TRZ +T62)LN5 +P4D)MFL +CMD)N5Y +NSQ)8B3 +FDT)ZCD +YK2)JTV +LBM)39X +LPK)BD5 +2T4)1TH +Z9V)6L6 +L48)JNZ +6QV)NMC +GW2)D4D +C32)4NJ +NL3)KPG +XPD)R4F +S47)L48 +7WG)K98 +PGC)ZXS +TT2)MG2 +X5M)LSV +54Y)TZZ +2WS)JNH +R4F)KS2 +SZR)FLB +1QK)41X +VZP)PV5 +NBJ)TS3 +T4H)GJB +B12)LGJ +52T)14K +T9T)XH2 +VG4)7RS +QHD)R91 +PQD)FLH +PD7)DVV +RDR)NGG +YT7)XVV +QCN)88Q +MXN)Z8Z +Q6G)B63 +GNX)YC3 +QRV)C68 +7LZ)3K4 +3FH)717 +3HN)TKY +SK2)HD6 +Z4D)FLP +9SF)SXK +HK4)CBG +KKF)GF1 +H6R)11K +YD1)YXC +G89)5KG +JGB)NPX +GXK)3QN +26S)5W2 +X46)DGY +1DC)KR8 +L65)H6Y +XW1)9QL +CXV)VND +586)BYL +BYZ)DYC +JPY)JXV +C6F)KDQ +BHH)NLM +SBL)BPL +QBS)VKT +KGV)K8D +T4R)S1T +3KM)7G4 +91H)W7X +3MM)4QN +GZK)TBG +B2W)CXC +LT3)BPY +TSL)MBK +JKX)14C +CHG)WVC +87N)JB4 +9PT)WPB +WV8)SGK +KLT)TBQ +Q1Z)HFD +BZ6)997 +ZMD)8N7 +YMP)6SN +SGX)WL2 +K8D)Q2Z +48R)79S +DQX)221 +VX9)HT3 +RXJ)3X3 +T3V)6PH +BW7)QCN +RPY)PD7 +RT5)N6X +TMT)4VN +F3D)SWG +C3N)F86 +3X1)NSJ +F5C)PG1 +VFV)8XR +79S)YB7 +BCD)TYD +8S9)VZD +J6G)B1Y +GJB)XFK +QCS)VHQ +QBB)ZR6 +T1J)VCQ +NB1)GL4 +DDD)PF1 +YFJ)HGG +7X1)FPG +997)G6K +NSJ)ZWJ +LYX)X59 +R4Z)M3D +HH4)NQQ +Q8K)MY8 +Q8T)8WB +FHY)YKX +K4X)CB5 +86J)Z4W +513)RFZ +YCG)KK5 +BVZ)HCL +7J4)DQP +3MW)VS1 +NY9)TJJ +KRF)Q8K +82V)J7T +82N)WS3 +15G)8NS +HZZ)YVX +4D4)V1H +B12)YXR +25X)15G +LNQ)DF7 +P93)47P +9KD)22H +XCF)LJG +PND)YMP +4NH)2GN +GBL)H2Q +PHB)FHY +SFW)NL3 +6LD)DXM +2MC)6QN +SDF)GW4 +HVX)J82 +NHG)Z2R +45G)B6J +MH8)347 +4JM)3FH +XJ7)RPY +NKQ)76W +847)N4J +8HT)PQY +W2K)52H +VQT)XNP +8SC)YV5 +RR8)LXW +8RC)VNQ +JQL)G8T +B6J)J31 +FRL)C7H +HTH)1ZC +FLP)YK5 +DLD)GXK +2TV)9B1 +DHQ)ZXG +Z2R)6QF +4B2)8Y5 +GH3)54Y +BJV)29T +PWF)JGB +7Q6)5ZM +BSZ)ZTR +SGK)QJD +HT3)VC8 +2CQ)P93 +3H9)8XK +SPM)XTM +BXS)ZPX +9FN)HJZ +GV7)C7P +81D)BX3 +XTM)XX9 +TZ2)NY4 +QGD)PZ9 +BPN)HYK +PZ9)T7T +H1L)Z8R +CWZ)3TR +6L6)HK4 +ZR6)JM9 +GF1)XL8 +4FK)SCH +412)ZX5 +HY3)C26 +8WB)4BG +XB6)5LC +HTJ)SK2 +3LV)2TV +3K4)P3M +5MP)BCY +C65)9FN +2QG)KMM +Y6C)X4V +2G3)5R5 +RG8)VP3 +V1H)MQY +CPW)CMD +8VQ)MKS +S8C)F1B +CBG)LGZ +Y9Q)GV7 +HFD)25X +1S2)2TD +5TG)XSS +JQN)KKL +651)VG4 +RTV)V4T +Q4H)QYP +TZH)RHS +DN6)YP8 +CCY)9JL +661)XB6 +JWD)CYC +ZX4)4RG +BPY)FQC +689)BSQ +WPB)BPN +JZM)BV4 +J3X)LN2 +ZXS)M2Z +B3V)SPM +BL6)KKF +WQ4)DSP +G2R)W2K +QFX)2WM +VNQ)2B4 +YG4)MYL +2MC)RT5 +JM9)NGV +YK5)V1X +GXP)BHY +N84)CV9 +HW1)C88 +7XB)KWZ +M1N)VDP +JFH)TH6 +3W1)B6B +DZ6)8HT +XLJ)T31 +FCB)W35 +6DY)7X1 +Q21)QYJ +5TT)Y27 +M5Y)X8K +88Q)BFK +29H)G1L +LJG)B3G +ZTS)XQS +S2Z)F2J +KMM)X31 +389)Q7Z +Q4H)8BN +95G)HVX +4C9)R4Z +GHM)112 +KPG)QC5 +C89)PL1 +24B)NB8 +7P8)457 +C5H)QRV +DVX)3ZC +YYD)K94 +KBV)9PT +KST)KYJ +GL4)HZQ +C4K)L1T +ZGB)N6Z +4QN)5R4 +3HJ)RY7 +39B)5YB +B1Y)NZJ +W7X)6QV +KMC)SP9 +N3V)XJ1 +HLF)Y91 +YPT)FBX +2NX)P2H +P7J)YGJ +MXN)4Y8 +D4Z)VC5 +9M1)5TP +HBJ)GBM +Z22)VLG +6LG)V2H +9VB)B2L +L6C)C1W +MLV)KSX +CQB)YT7 +LB7)HZZ +YXV)86J +6Z7)4T3 +DLL)DW3 +12G)6C3 +FG3)FFL +JNX)BCD +YJ5)FPM +C1W)CPW +Q38)QZK +FF8)FZS +57G)DZ6 +Z1J)CMZ +82X)C3N +CV2)DLZ +P7V)52T +YH9)CQR +3JX)1NS +N6Z)Z22 +Z8Z)RF6 +CGH)YCG +M34)1ZD +FPM)YKV +3LT)BDB +FQ4)CTY +4P2)B12 +QFN)GPB +PF1)3FX +8M1)JWR +YKV)B6Q +5ZM)W82 +M48)GS2 +JD4)1TN +ZMG)9P3 +Z8R)JCR +F2J)QSH +D55)4DV +4JW)29H +GPB)MH8 +CDM)MZ9 +KD8)7YX +HPK)95G +C2D)SZR +FSW)YQC +QGR)XJK +L2R)6XM +XQQ)J6G +79V)4MM +JWR)G4B +B8H)W2W +4Y8)X2N +SVG)4Q8 +57R)9SF +NRZ)4RH +JRR)2T4 +JXV)FTX +YVX)JMT +QV7)S9K +HK4)7TT +TM2)RTT +Y27)5PT +8VQ)VX1 +4RH)483 +SC5)QXQ +8NS)LX1 +VBW)661 +YC3)FZL +FRM)6DV +2MH)C32 +M8Z)FDT +7XD)YFJ +WDM)8M1 +NB7)7KP +54Q)57R +JNH)Q64 +P2Y)CVW +7SZ)D6Q +5V2)V8J +HZ9)82S +2Z7)2X8 +7H4)25M +NZS)12G +XLJ)6ZD +ZK9)HLX +NVR)QFX +KKL)XTF +W35)ZGD +C9N)2Z7 +G9Y)BSB +Z4H)DB9 +25Y)3FD +R14)SWH +1YV)QBB +ZWJ)XLJ +55K)QS2 +ZFL)QYX +LGL)RLJ +FTX)91Q +BCQ)ZH5 +HSX)BR6 +NRL)D4Z +46D)BBP +J62)PK7 +X3Y)C67 +DVM)1DC +H9J)8SC +41Z)7TL +2RL)X5D +CMG)6XB +C8G)FZD +H8P)22K +9YR)1YV +CW3)8PB +6M8)M48 +WFH)P7V +YXN)JC5 +SR1)DWR +K9D)5YC +6YP)6LF +FFZ)HJ7 +7YL)7LZ +GXW)GMR +3JX)BXP +C15)Y9Q +DLR)YH9 +XYG)PZ7 +41X)GL2 +17D)2SH +R9B)RSP +F31)YLQ +4Q8)KST +MBK)LVB +6ZN)VPJ +6Q9)YBC +V4T)847 +BDB)2WS +VKT)5V6 +SX1)VLD +G1Q)3BL +BJS)PP5 +LM4)CWY +SPY)HR7 +6GT)9PN +DVD)5TT +2WM)3HJ +GGZ)KNY +JB4)SVH +ZXG)SMR +44D)P4Q +7TH)T88 +XSS)ZFV +BG9)S66 +8B1)7DF +PB1)SC5 +R4D)PZQ +71S)C4K +HNV)MYP +8MT)8N9 +B92)C8R +JX8)DGD +D6Q)8LQ +ZPD)7W7 +Q7Z)BKJ +Z2L)JBV +MXB)V9W +93W)JQN +95G)PXF +Q8J)S8C +X83)72J +457)VX9 +7M2)F95 +ZLR)FKC +TKQ)WS6 +XH2)6MC +X2N)BF4 +JCR)14W +TJJ)9KD +H7Y)KRF +6MC)PYF +27G)NZK +D8N)MCH +9CF)HBJ +KCT)RRC +CYR)QGP +5PQ)X85 +7VW)5TG +BJS)C65 +9V7)V5N +RKP)XCD +X8K)X83 +B63)SBL +9SH)Q8T +LW7)HLC +P93)JZQ +YLM)RLZ +GL2)JDJ +LZ9)K1G +DWP)TBM +6GT)651 +NLM)JD4 +YC9)Q38 +FP1)23G +V4J)XNJ +PYF)7TH +3P3)KBV +95D)X5W +TBG)LG3 +BXP)83F +SRN)GHM +5R5)D8K +NGG)H1J +6D6)KKQ +5RQ)26S +5X1)RSB +GW2)NVR +9QL)C96 +GXQ)Q6G +TBQ)XS2 +S2W)BHQ +51T)CJ1 +L6C)HPZ +BSB)GFP +5TP)1QK +L1T)D6Z +NHT)82H +RSC)3W1 +KXQ)LQ9 +VK9)QHN +J75)PWF +2GL)1P5 +8LJ)66X +SGG)F3D +WL2)YLM +YQC)459 +YGJ)XVY +6X3)4SQ +6PH)WKK +V2H)H4K +RTT)HTJ +YBC)L2G +7C1)YQ2 +FZL)VFV +RF6)4CH +M18)37V +P63)DPW +S2R)ZPD +WZW)MD5 +MR6)TY4 +K5H)7NP +GGZ)P4K +R1Y)ZL7 +46D)5YG +7H4)Z3G +RGL)BYG +7YX)6DY +MRF)C19 +PL1)YQQ +QS2)J62 +QHN)CCY +171)VXY +YR9)N81 +FQG)K9D +JBB)BVZ +ZXW)HKT +KS2)V5M +8RX)ZC7 +GY1)TPY +2GL)NL7 +12R)32K +MKS)N1D +NFV)12Z +BGG)5TX +T5D)WKN LX1)8DG \ No newline at end of file diff --git a/2020/3.js b/2020/3.js new file mode 100644 index 0000000..7cd101b --- /dev/null +++ b/2020/3.js @@ -0,0 +1,30 @@ +const fs = require('fs'); +const input = fs.readFileSync('3.txt').toString().split('\n'); + +function countTrees(lines, xoff, yoff) +{ + let treeCount = 0; + let length = lines[0].length - 1; + let x = 0; + + for (let i = 0; i < lines.length; i += yoff) + { + if (lines[i][x % length] == '#') treeCount++; + x += xoff; + } + + return treeCount; +} + +let count = countTrees(input, 3, 1); +console.log(`Part 1, tree count: ${count}`); + +let total1 = countTrees(input, 1, 1); +let total2 = countTrees(input, 3, 1); +let total3 = countTrees(input, 5, 1); +let total4 = countTrees(input, 7, 1); +let total5 = countTrees(input, 1, 2); + +console.log(`Part 2, tree count: ${total1 * total2 * total3 * total4 * total5}`); + + diff --git a/2020/3.txt b/2020/3.txt new file mode 100644 index 0000000..e2752aa --- /dev/null +++ b/2020/3.txt @@ -0,0 +1,323 @@ +.....##.#.....#........#....##. +....#...#...#.#.......#........ +.....##.#......#.......#....... +...##.........#...#............ +........#...#.......#.........# +..........#......#..#....#....# +..................#..#..#....## +.....##...#..#..#..#..#.##..... +..##.###....#.#.........#...... +#.......#......#......#....##.. +.....#..#.#.......#......#..... +............#............#..... +...#.#........#........#.#.##.# +.#..#...#.....#....##.......... +##..........#...#...#.......... +...........#...###...#.......## +.#..#............#........#.... +##.#..#.....#.......#.#.#...... +.##.....#....#.#.......#.##.... +..##...........#.......#..##.#. +##...#.#........#..#...#...#..# +.#..#........#.#.......#..#...# +.##.##.##...#.#............##.. +..#.#..###......#..#......#.... +.#..#..#.##.#.##.#.#........... +...#....#..#.#.#.........#..#.. +......#.#....##.##......#...... +#....#.##.##....#..#........... +...#.#.#.#..#.#..#.#..#.##..... +#.....#######.###.##.#.#.#..... +..#.##.....##......#...#....... +..#....#..#...##.#..#..#..#..#. +.............#.##....#......... +.#....#.##.....#............... +.#............#....#...#.##.... +.#.....#.##.###.......#..#..... +.#...#.........#.......#..#.... +..#.#..#.##.......##........... +.....##..#..#..#..#.##..#.....# +..##............##...#..#...... +...#..#....#..##.....##..#.#... +#.....##....#.#.#...#...#..##.# +#.#..#.........#.##.#...#.#.#.. +.....#.#....##....#............ +#.......#..#.....##..#...#...#. +.....#.#...#...#..#......#..... +..##....#.#.#.#.#..#........... +##..#...#.........#......#...#. +..#...#.#.#.#..#.#.##..##...... +#............###.....###....... +..........#...#........###..... +.......##...#...#...#........#. +.#..#.##.#..................... +.#..##........##.##...#.......# +.......##......#.....#......#.. +.##.#.....#......#......#...... +#...##.#.#...#.#............... +........#..#...#.##.......#.... +...................#...#...##.. +...#...#.........#.....#..#.#.. +.###..#........#..##.##..#.##.. +#...#.....#.....#.....#..#..#.. +###..#.....#.#.#.#......#....#. +#........#....##.#...##........ +.#.#..##........##....##.#.#... +#...#....#.###.#.#.........#... +...#...##..###.......#......... +......#....#..##..#.....#.#.... +........#...##...###......##... +..........##.#.......##........ +...#....#......#...##.....#.... +###.#.....#.#..#..#....#...#..# +.#.....#.#....#...............# +..#....#....####....###....#.#. +....##........#..#.##.#....#... +.......##...#...#..#....####... +#...##.#......##...#..#........ +..##..#.##....#.......##.#.#... +..#.#...............#...#.#.... +....#.....#.#.....#.##.......#. +...#.#..##.#.#..............##. +..#.....#...#.............#.##. +##..#.#...#........#..#.....##. +...........##...#.#.###...#.... +...#.#.#..#..................#. +.#...##.............#...#...... +..#..#...#.#.......#...#.....#. +..##.......#.#................. +.##..#........###.....#....#.## +......#..###.......#....##....# +....#.....#.................#.. +........#...#...#.............. +...#..#.###.......#..#.#.#.##.. +..#...#.....#....#.........#... +...#.............#........###.. +......#..............#......#.. +#..#...........#...#..........# +...##...#.###..#...#.....#.#... +....#..##......#.......##...... +....#....##.#...#.#..#....#...# +.#...........#..#....##...#..## +..#.#.................###.#...# +..#.#.#...##...........#....... +..........#..##...#.#..##....## +........#........#.##..#.#...#. +.....#...##.......##......#...# +....#...#..#..#.....#.......... +.#..#......#..#..#..###.......# +.##..........#...#...#.#.....## +..#..........#.#.#...###....... +....#................#...##.... +.##..#....#..........#.#.#..... +..##...#.#........#.....#.##... +....####.....#..#.........##..# +......#.........#...#.......... +....#...................#..##.. +.##....#.#.........#....#...#.. +....##...##.....#..####........ +..##.#....#.#.......##...#..... +#...#.#.#...#..#..##.....#..... +#..................###.....#... +#.#.....#.......#.#...###.#.... +.#..#....#............#........ +#.#....#..#.#...............#.. +..#..#..#.............#......#. +..#.......##................... +.#....#.........#....#.#.#..#.. +....#....#..#...............#.. +......#..#..##......#.........# +..#.##........##......#..#..#.# +#.....#.#....#.........##...#.. +###..............#....###...##. +....#..##......#.......##...... +......#...#.##......##....#..#. +..........#....#..##.......#..# +.#..#...##..#...........#..#..# +.....#....#...#..###...###....# +.#####..#...#.#.#..#.#.###...## +..##............##.#...#.##...# +.##..#...#...#....##.#..#..##.. +.#....#...#............##..#... +.#.#......#....#....#..##..##.. +.........#...#.......#.##..#... +#.........#.....##.....#..#..#. +...##.#...#...#..#..#....##..## +.#............#...#....##...... +..#...#.##.........#.#......#.# +....#.##........#.........#..## +#.........#......#.#......#..#. +........#.#.......#.#........#. +..#..........##.#...#..#.#..... +..#...#....#...#...#..#.#..#.#. +.#.........#....#..#####..#.... +#.#....#.#.###...#............. +..##...........##......##...... +#.....#..#....#...............# +...#.#..#....##......#...##.... +...#........#.....#...#..#..... +.#......##.........#......#.... +..#..###.##...#.#.....#........ +.............#......#..#....... +..#...............#.#...#..#..# +.......#..#...#.#####......#..# +.........#.....#............... +##........#............#.#..... +.#...#.....#..#..#...#....#...# +..#....#....##......##.....#.#. +#...##..##......#...#....#..... +....#.#.#.....###....##.##....# +..........##...##.......#...... +..#.......#...##.#....##.##.... +....#........................#. +...#...#.#.##...#.....#...#..#. +.#....##..#..#..........##..##. +.#.....#..#...#.##.....#....... +.#.##...#.#..#.....##....#...#. +.##...#........##....#..#...... +.....#........#..........#.#..# +....#..##.......#..#.....#..... +...........#...#........#.##..# +.....#..#....#..#.#.....#....## +.....#....#.##.#..##........... +...##.......##.........#....... +...............##..#....#.#.... +.......###..#........#..####.## +.......#.##...#.#....#.####.... +....#...............#.......... +##.#.......#.....#......#...#.. +......##.....#....#.....#..#..# +.....#...##.............#...... +#.#.##.#.....#..#........#..... +......##....#..#........#...... +............#........#..#.#.... +##.......#......#...####..#.##. +..##..#...#.............#.##... +.....#..##......#.##......###.. +............#........#........# +#.#.#.#...#.#.....#.........#.. +.........#...............#..... +.............###.#.......#....# +###.##..#..#..........#....#... +#......#...#..#..#.....#.##.... +............#....#....#..#..... +..#.#....#...#......#.#..#..##. +...#........................#.. +#.#...#..........#......#.#.... +.........#................#...# +##.....#....#........##.......# +#...##........#...#...........# +...#...#..........##.......#.#. +..#.#.#....#......##........... +...#.#...#.##.#..#.#.##........ +#....##.....###..#.......#..... +###.....#.#.#...#..#.........## +..#......#..###...#.#.#.....#.# +.#....#.....#............#..##. +....#....##..........#.....##.. +#...........#....#...#..#...##. +..#.......#.....#..........#... +.#..#................#......#.. +..#......#.#...#..#.#....#....# +...#..#...###..#..##....#.#.... +..#..............#.....#....... +...#.#...#.........#.#......... +##......##...........##.#.##..# +..#..##..#....#.#......#.#...## +...#.###....###...#.....#...... +#.#................#......#.... +..#.....#.....#....##.......#.. +.#.#...............##..#....... +...#....#.......#.#.....##..#.. +.........#....#.......#.#...##. +#....#......##.#.........##...# +#.............#..##.#.#..##.... +...#....#..#...#....#.#.#.#...# +.#....#....#..##.....#.#...###. +##............#.#...##.#..#.#.. +##.#....##.....#..#..###....#.. +##....#................##...... +...##..#...#..###....#.....##.. +.#...##......#..#.#.....#...#.. +..##......##...#.##.......#.... +......#.....#.....##........#.# +##....#...........#............ +#.......#....#..#.##..##.#..#.. +.#....##.#.....#..#..#......... +.#....#.#.#...#.....##.....#.#. +.......##.#.#........#......##. +##........#.##.......#...#..#.. +...###..##....#.#....#.#....... +......#.......#...##.....#...#. +..#......##.#......#.....#..... +.....#.....###...#............. +#...#.#...#...#..#......#...... +#.....#.......###.#....###.#... +...#.......#....####....##..#.. +#.#.....#....#........#.......# +.........#.......#......#.#...# +..##....#.....##............... +..........#..#.#..#......#..... +..................##...##.#.... +........#.......#...#..#.#.#... +.....#.#..##..#..#.#..#.......# +.....#........#..#..#....#....# +##............#..#..#...#....#. +.....#....................##..# +........##.#....###............ +##.......#.##................#. +.....###.#..#..#...#....###.##. +.#......#.#....#.....##.#...... +...##......##.........#...#.... +....####..............#........ +#...#.#..##..##.........##..... +......#......#....#..#......... +#.....#.....#.##............... +..#.##..#...##.#.####..#....### +#..#......#....#.##..##...#.#.. +#....#.......#.....#.....#.#... +##.......#.....##...#.....#.... +...#...##..........#..##..##..# +.###..#..##...#....#...#..#.... +......##..###.......###...#.... +....#...#.#.......#.##...##..## +#.#......#..##.#.#..#..#..#.... +......#........#.......#....... +..........#.#.....##........... +......#..#........#..#.#..###.. +##..#.............##..#........ +.........#....#.....#.........# +.....#..##...#..#..##.##......# +###..#...........#.......#....# +...............#....#.#........ +.##.#...#.#........##....#..... +.##.###...##..###....#...#...#. +.##..#....#.#.#...#.#.#.#...#.. +.###.#...#.......#....#..#..... +..#..#.#.#.#........#.....##... +.#.......#.#...#.#...........## +...#.....##....#.....##...#.... +................#.....####...#. +.#.#......#.......##...#.##.... +.###.........#.#......#..#.#... +#......#...#....#..##.......#.. +.##..#....#..#...........#...#. +.#...#.......##........#.##.... +..#...........#...##........... +.....##....##......#....#..#... +#......#.#...#.##.#...##....#.. +#....................#...##...# +..#............#........#...... +.............#.........##.....# +...#...#......##.#...#...#.#... +..#...#.#.................#.... +....##...#....#...###.##......# +...#....#...#..#...#....#.....# +...##.#........#..#.........#.. +..##.....#..##...#.....##...#.. +#.........#.#.#...#......#...#. +#.#...........#...#..#..#..##.. +..#..#..##....#..........#.###. +.....#..#....#.#...#...#..#..#. +###.....#..#.................#. +.#..##.##.#......#....##..#.... \ No newline at end of file diff --git a/2020/4.js b/2020/4.js new file mode 100644 index 0000000..0e410a5 --- /dev/null +++ b/2020/4.js @@ -0,0 +1,15 @@ +const fs = require('fs'); +const input = fs.readFileSync('4.txt').toString().split('\n'); + +const requiredFields = ['byr', 'iyr', 'eyr', 'hgt', 'hcl', 'ecl', 'pid']; + +let currentPassport = {}; +for (const line of input) +{ + console.log(input + '\nbruh') + if (line == '') + { + console.log('new passport') + currentPassport = {}; + } +} diff --git a/2020/4.txt b/2020/4.txt new file mode 100644 index 0000000..ad2f97d --- /dev/null +++ b/2020/4.txt @@ -0,0 +1,1133 @@ +eyr:2029 pid:157374862 +byr:1991 ecl:amb hcl:#a97842 hgt:178cm + +byr:1962 pid:547578491 eyr:2028 ecl:hzl hgt:65in iyr:2013 hcl:#623a2f + +hgt:71in eyr:2037 +ecl:#8e276e hcl:z iyr:2019 +byr:2022 pid:157cm + +hcl:#733820 hgt:175 eyr:2028 iyr:2011 +pid:87786389 +ecl:hzl byr:1980 + +hgt:163in hcl:z pid:8261494508 cid:136 ecl:grn eyr:1958 +byr:2030 iyr:1991 + +iyr:2021 +hcl:6708a3 +ecl:zzz eyr:2034 byr:2010 +hgt:189cm +pid:466438311 + +iyr:2012 pid:9720867166 byr:2006 eyr:2022 hgt:72cm ecl:utc hcl:#c0946f + +ecl:#353bc9 +iyr:2020 pid:874363951 cid:113 +hcl:z eyr:2040 hgt:76in byr:1975 + +eyr:1971 +byr:1955 pid:193cm hgt:189cm hcl:#ceb3a1 ecl:grn +iyr:2023 + +byr:2014 +iyr:2026 eyr:1978 hcl:z cid:312 pid:8294818417 +hgt:169in ecl:#82bb02 + +ecl:amb +byr:1936 hcl:#7d3b0c pid:429853734 +cid:342 iyr:2010 eyr:2025 hgt:160cm + +byr:2025 hgt:176in hcl:a490ac +ecl:#956d3f iyr:2027 +eyr:2021 pid:9858101884 + +hgt:142 pid:175cm +eyr:1952 byr:2004 iyr:2007 ecl:#da035e hcl:#623a2f +cid:194 + +hgt:156cm +pid:349122810 hcl:#b6652a eyr:2026 byr:1948 ecl:lzr iyr:2020 + +byr:1997 ecl:blu +hcl:#888785 pid:381094641 iyr:2014 hgt:192cm eyr:2027 + +hcl:7b10a2 ecl:lzr byr:2022 +eyr:2035 +pid:#38b715 hgt:190in iyr:2029 + +pid:188cm byr:2014 +cid:241 ecl:#dda9bd hcl:#8f6ebc +hgt:188cm iyr:2014 eyr:2029 + +hgt:76cm ecl:gmt hcl:z iyr:2024 +pid:3283057785 +byr:2019 eyr:2026 + +iyr:2010 pid:284327216 hgt:191cm +byr:1970 +hcl:#18171d +ecl:grn +eyr:2023 + +byr:1929 eyr:2026 cid:194 ecl:oth hgt:156cm pid:224596482 hcl:#b6652a iyr:2013 + +eyr:2030 byr:1958 hgt:190cm +pid:162950579 iyr:2010 +ecl:brn +cid:250 hcl:#fffffd + +ecl:xry iyr:2025 pid:#0155c1 +hcl:#341e13 +eyr:2027 hgt:163cm byr:2025 + +hcl:#602927 pid:908859481 byr:1962 ecl:hzl +iyr:2021 eyr:2028 hgt:180cm + +iyr:1966 eyr:1976 pid:#bbfe21 hcl:63454a cid:259 +ecl:blu +byr:2024 hgt:69cm + +ecl:#644daf +byr:2021 eyr:2040 +hcl:bc83fe +iyr:1976 hgt:59in pid:60311335 + +iyr:2018 +pid:121801570 hgt:182cm ecl:blu byr:1922 cid:265 eyr:2024 hcl:#888785 + +byr:1933 +pid:232653422 ecl:gry hcl:#18171d +hgt:171cm eyr:2035 iyr:2011 + +ecl:oth iyr:2015 byr:1937 +pid:828621370 hcl:#602927 +eyr:2026 +hgt:193cm + +iyr:2010 ecl:grn eyr:2022 +hcl:af37d1 pid:761632482 hgt:65in cid:93 +byr:1993 + +hgt:169cm cid:121 +iyr:2018 +hcl:#6b5442 +pid:059725560 ecl:oth +byr:1972 eyr:2028 + +eyr:2024 byr:2023 ecl:gry +iyr:2017 +pid:778551716 cid:256 hcl:#733820 hgt:184cm + +hcl:#ceb3a1 pid:613277258 byr:1941 hgt:67cm eyr:2029 +ecl:hzl +iyr:2017 + +ecl:hzl iyr:2012 pid:498418959 eyr:2022 +byr:1929 hgt:164cm hcl:#a97842 cid:226 + +hgt:157cm eyr:2029 +byr:1922 iyr:2014 ecl:grn cid:233 hcl:#888785 pid:802870003 + +hgt:184cm +ecl:oth hcl:#888785 iyr:2010 byr:1929 eyr:2030 +pid:063671905 + +hcl:#888785 hgt:144 eyr:1961 +iyr:2005 +byr:2027 +cid:164 pid:41787324 +ecl:utc + +hcl:#7d3b0c +pid:570743051 byr:2022 eyr:1975 +iyr:2018 ecl:utc hgt:188in + +eyr:2028 pid:970460968 +hgt:161cm +iyr:2017 ecl:amb +cid:318 byr:1967 hcl:#cfa07d + +hgt:183cm eyr:2036 hcl:070713 iyr:1959 +cid:242 byr:2011 pid:#0855a5 ecl:lzr + +hcl:#ceb3a1 eyr:2023 iyr:2016 +ecl:oth hgt:84 +pid:156cm byr:1949 + +eyr:2025 ecl:brn hgt:172cm pid:487559063 iyr:2013 +hcl:#efcc98 +byr:1985 + +eyr:2023 hcl:#6b5442 byr:2021 hgt:75cm iyr:1943 +pid:427375038 ecl:#70c167 + +ecl:hzl +eyr:2028 byr:1957 iyr:2010 +hcl:#602927 +hgt:151cm pid:755290924 + +cid:184 hgt:172cm +pid:7056500139 iyr:2016 byr:2016 +hcl:e40e08 ecl:#d21247 + +ecl:oth +eyr:2025 +iyr:2010 byr:1971 cid:128 pid:932834922 +hcl:#602927 +hgt:167cm + +ecl:brn hgt:61in iyr:2016 hcl:#341e13 +pid:918193693 byr:1972 eyr:2029 cid:56 + +byr:1956 iyr:2020 eyr:2030 hgt:72in +pid:179969841 +ecl:blu + +ecl:#09fd92 cid:209 hgt:69cm iyr:2014 +eyr:2028 pid:#2ad9c0 hcl:#b6652a +byr:2012 + +ecl:lzr byr:1980 cid:104 +iyr:1965 pid:57029893 hcl:z +eyr:2030 hgt:64cm + +pid:496149551 +hcl:#6b5442 hgt:181cm byr:1978 iyr:2017 +eyr:2026 +cid:291 ecl:hzl + +iyr:2018 hcl:#ceb3a1 +eyr:2021 cid:183 pid:612653062 +ecl:oth +byr:1982 + +hgt:153cm pid:877597531 ecl:gry +iyr:2014 hcl:#866857 cid:333 +byr:1953 +eyr:2022 + +iyr:2015 +ecl:brn +pid:823959694 byr:1998 hcl:#18171d +eyr:2025 hgt:174cm + +iyr:2012 cid:93 +ecl:oth pid:142618419 byr:1955 hgt:193cm eyr:1977 hcl:#602927 + +hcl:z ecl:dne iyr:1926 eyr:2026 pid:175cm hgt:150 byr:2023 cid:234 + +hgt:61cm iyr:1965 byr:1956 +pid:224946350 cid:105 +eyr:1951 hcl:#733820 ecl:amb + +hcl:#866857 +byr:1970 pid:447859408 +eyr:2030 +hgt:65in iyr:2011 ecl:grn + +cid:184 eyr:1976 byr:2021 hgt:187cm +pid:858786336 ecl:#0d63e1 hcl:z + +hgt:178cm iyr:1986 hcl:51ac0c ecl:dne eyr:2023 pid:180cm + +hcl:#cfa07d pid:002093179 +ecl:oth +byr:1983 hgt:159cm iyr:2016 eyr:2025 + +ecl:gry hcl:#c0946f +byr:2009 pid:#e00fc8 +hgt:62in cid:150 iyr:2013 eyr:1957 + +byr:1942 ecl:oth eyr:2020 pid:765036664 hcl:#6b5442 iyr:2015 cid:155 + +ecl:hzl iyr:2014 +hcl:#efcc98 hgt:179cm eyr:2028 +byr:1921 pid:#666905 + +ecl:utc eyr:2040 hcl:669f5b pid:981368190 +byr:2006 iyr:1949 +hgt:179in + +ecl:#062fcd eyr:2035 byr:1962 iyr:2026 hcl:z hgt:161cm pid:75591618 + +hcl:#b25ef5 pid:434943296 +ecl:oth hgt:165cm +iyr:2013 eyr:2020 +cid:78 byr:1924 + +iyr:2018 ecl:oth byr:1972 eyr:2028 pid:035313920 +hgt:59in hcl:#fffffd + +hgt:185cm +hcl:#6b5442 +cid:102 iyr:2020 byr:2001 +eyr:2028 pid:003365121 ecl:amb + +pid:90937712 hcl:z hgt:173in byr:2012 ecl:blu iyr:2009 eyr:2039 + +pid:509460932 eyr:2026 +hgt:71in iyr:2010 cid:138 byr:1929 ecl:grn + +ecl:xry +hgt:119 +pid:051834447 eyr:2033 +iyr:2030 hcl:z byr:2030 + +pid:443984745 eyr:2026 ecl:oth +byr:1948 hcl:#a97842 hgt:168cm +iyr:2017 + +hcl:#602927 iyr:2020 cid:161 pid:069708283 hgt:178cm byr:1960 +eyr:2022 ecl:hzl + +iyr:2026 hcl:766b30 eyr:2032 byr:2030 pid:40361792 hgt:158in ecl:#b300dc + +eyr:1998 pid:#5c21e4 iyr:2029 ecl:#bef182 +byr:1944 hgt:166in +hcl:#b6652a cid:317 + +ecl:amb +eyr:2024 +hcl:#a97842 +pid:086765271 hgt:183cm iyr:2018 cid:314 byr:2001 + +hgt:163in pid:491612094 iyr:2028 +cid:82 ecl:#8a052d +hcl:#ceb3a1 +eyr:2018 + +byr:1970 eyr:2039 +hgt:174in hcl:#623a2f +iyr:2020 cid:154 ecl:grn pid:103138652 + +pid:73895324 eyr:2026 byr:1952 ecl:brn hcl:#733820 hgt:159in iyr:2015 + +hcl:#623a2f ecl:brn eyr:2026 hgt:185cm pid:791563822 iyr:2019 byr:1951 + +hcl:#fffffd +iyr:2014 hgt:83 cid:101 pid:724483094 +eyr:1995 byr:2015 ecl:lzr + +hcl:#ceb3a1 +iyr:2013 +eyr:2021 byr:1994 ecl:hzl +pid:037849486 hgt:60in + +pid:63340670 iyr:1995 hcl:b54c2b hgt:71cm +cid:184 byr:2004 ecl:dne eyr:2026 + +hgt:169cm +ecl:brn byr:1947 iyr:2014 cid:224 hcl:#7374df + +hcl:#623a2f +pid:471948403 ecl:gry +hgt:154cm +eyr:2023 iyr:2016 byr:1925 + +eyr:2024 hgt:180cm hcl:#efcc98 iyr:2020 ecl:gry byr:1961 pid:318184801 + +ecl:blu iyr:2012 eyr:2020 hgt:190cm +byr:1977 +pid:331654452 hcl:#cfa07d + +pid:812502106 byr:1938 +eyr:2020 hgt:169cm ecl:oth hcl:#341e13 iyr:2011 + +cid:286 byr:1942 eyr:2034 hgt:116 +ecl:utc +iyr:2023 hcl:#602927 pid:181cm + +ecl:amb iyr:2011 hcl:#cfa07d eyr:2029 byr:1975 +hgt:183cm pid:548900689 + +ecl:utc pid:182cm +hgt:60cm +eyr:1989 iyr:1993 hcl:z + +iyr:1985 hgt:186 byr:2018 +eyr:2001 pid:9257131167 +hcl:261a65 ecl:lzr + +hgt:152 +byr:1922 pid:72992226 +iyr:1968 +ecl:dne eyr:2028 hcl:5c2950 + +ecl:grn +byr:1943 hgt:74in eyr:2022 +pid:135491924 +iyr:2011 hcl:#623a2f + +iyr:2026 pid:7955389103 +cid:311 +ecl:#b81171 hcl:z eyr:1935 byr:2024 + +byr:1974 iyr:2010 hgt:165cm +ecl:amb cid:343 eyr:2023 +pid:972786259 hcl:#6b5442 + +iyr:2020 byr:1936 +ecl:gry hcl:#efcc98 hgt:170cm eyr:2021 pid:520354073 + +hgt:185cm hcl:#ceb3a1 +pid:317012754 byr:1991 +cid:199 iyr:2011 +ecl:blu eyr:2028 + +ecl:#e4e01f byr:2008 +cid:293 iyr:2013 hcl:z pid:#368f7a eyr:2036 + +eyr:2022 pid:424388475 iyr:2008 hcl:z hgt:61cm +ecl:zzz byr:1985 + +hcl:#18171d iyr:2014 +cid:88 +byr:1951 eyr:2021 pid:812441789 hgt:181cm ecl:blu + +ecl:amb eyr:2029 hgt:70in pid:580245172 +iyr:2010 byr:1927 +hcl:#a97842 +cid:284 + +hcl:#3b85ed +ecl:gry eyr:2029 pid:417534919 byr:1960 +iyr:2010 hgt:71in + +hcl:#c0946f +pid:824103775 hgt:157cm iyr:2018 ecl:brn eyr:2024 byr:1961 + +pid:673501373 +eyr:2033 +ecl:#06523f hcl:z byr:2030 iyr:1978 hgt:153cm + +iyr:2019 +hcl:#a97842 byr:1951 hgt:183cm eyr:2024 ecl:blu +pid:346079429 + +eyr:1937 pid:964649406 +hgt:162 +cid:66 +ecl:#f89cc0 +hcl:#866857 byr:2024 + +hgt:114 ecl:#e7ed3a +byr:2029 cid:190 +eyr:2026 iyr:1986 hcl:z pid:185cm + +hcl:#cfa07d hgt:192cm +pid:12494711 eyr:2028 +iyr:2020 +ecl:brn byr:2004 + +pid:710015269 +byr:2011 eyr:2033 hgt:181cm +ecl:#fb2702 + +cid:259 pid:208799387 +eyr:2025 hcl:#623a2f byr:1947 ecl:oth hgt:164cm iyr:2014 + +ecl:brn eyr:2025 pid:432178809 hcl:#341e13 +cid:50 +hgt:192cm iyr:2012 +byr:1994 + +hgt:150in pid:4902585462 ecl:#7074ad cid:230 iyr:2019 eyr:1931 hcl:z byr:2007 + +ecl:gry +byr:1942 +hcl:#602927 cid:178 iyr:2014 hgt:193cm pid:349100081 eyr:2030 + +byr:1923 hcl:#cfa07d eyr:2021 ecl:brn pid:591544598 hgt:157cm +iyr:2016 + +hcl:e15737 +iyr:2017 byr:2030 +eyr:1994 pid:470833249 +hgt:181cm cid:70 ecl:grn + +eyr:2030 +hcl:#866857 pid:569423049 byr:1948 +ecl:oth + +eyr:2026 +byr:2006 +hcl:#ceb3a1 +iyr:2010 pid:094156115 hgt:64cm ecl:oth + +byr:2002 cid:215 ecl:hzl +hcl:#602927 iyr:2015 pid:53150410 hgt:168cm eyr:2028 + +iyr:2016 hcl:#7d3b0c hgt:162cm +byr:1937 eyr:2020 ecl:hzl pid:728906226 + +byr:1921 +iyr:2018 hcl:#888785 +eyr:2026 hgt:185cm pid:164432370 ecl:brn + +ecl:gry iyr:2011 +eyr:2026 hgt:190cm +hcl:#866857 pid:884570088 byr:1996 + +ecl:blu +cid:257 +iyr:2016 byr:1989 +eyr:2024 hgt:179cm hcl:#c0946f pid:418340261 + +pid:9367990743 hcl:z hgt:182in ecl:utc +byr:1988 eyr:2025 + +ecl:hzl hgt:157cm +iyr:2010 eyr:2027 +hcl:#fffffd byr:1956 + +eyr:2024 pid:834302242 ecl:hzl +iyr:2015 cid:97 hgt:188cm hcl:#888785 byr:1927 + +ecl:brn eyr:2021 byr:1958 +hcl:#a97842 hgt:170cm pid:256795932 iyr:2017 + +hcl:756c4a +pid:812879747 +byr:2002 +eyr:2027 ecl:blu iyr:1952 hgt:66cm + +pid:#c5e14f +iyr:2026 byr:2028 hgt:162 hcl:87ba57 +eyr:1952 ecl:lzr + +hcl:#341e13 hgt:81 eyr:2021 iyr:2029 cid:262 ecl:amb pid:61006868 +byr:2011 + +pid:#e58702 cid:145 hcl:#866857 +ecl:grn iyr:2028 hgt:192in eyr:2025 byr:2017 + +iyr:2026 byr:1969 +ecl:grn +hgt:70cm cid:140 hcl:e0f231 eyr:2027 +pid:2832019 + +cid:112 eyr:2028 iyr:2018 hcl:#7d3b0c pid:868808117 byr:1985 ecl:blu + +iyr:2017 +pid:350399038 +cid:72 hcl:#ceb3a1 +ecl:gry +hgt:151cm byr:1946 eyr:2029 + +eyr:2026 hgt:174cm iyr:2010 pid:534641153 hcl:#733820 byr:1965 + +hgt:66cm +byr:2010 ecl:gmt eyr:2039 +iyr:2024 hcl:z + +pid:626085326 +byr:1971 eyr:2024 +hcl:#cfa07d hgt:170cm +ecl:hzl iyr:2019 + +hgt:185cm pid:995661846 ecl:hzl iyr:2016 byr:1963 hcl:#a97842 eyr:2023 + +ecl:grt iyr:1976 byr:2010 +pid:170cm +cid:343 hcl:#7d3b0c hgt:171cm + +pid:732695396 +ecl:zzz hgt:151in byr:1955 +eyr:2035 iyr:2026 hcl:z + +hgt:187cm hcl:#341e13 iyr:2015 pid:556697270 eyr:2025 ecl:blu byr:1926 + +ecl:oth +pid:515980529 +hgt:168cm eyr:2023 +byr:1983 iyr:2012 hcl:#341e13 + +byr:2010 +hgt:189cm iyr:2016 +hcl:#8ff71e +eyr:2010 +ecl:blu +pid:317940449 + +iyr:2013 hgt:157cm hcl:#a97842 pid:967988435 +ecl:blu cid:214 eyr:2027 byr:1960 + +pid:2666548509 cid:208 hgt:72cm hcl:#7d3b0c eyr:2040 byr:2008 +ecl:amb +iyr:1926 + +eyr:2039 +pid:203432895 hgt:154cm byr:1949 +iyr:2010 +hcl:z cid:144 ecl:xry + +pid:984689798 byr:2016 iyr:1999 ecl:utc +eyr:2037 hgt:68cm hcl:z + +byr:1969 cid:230 hgt:72cm eyr:2032 +ecl:gry pid:849701444 +hcl:#c0946f +iyr:2012 + +eyr:2026 +pid:588870142 +hcl:#ae5619 hgt:173cm +cid:189 +ecl:grn byr:1996 iyr:2013 + +byr:1973 +hcl:#cfa07d ecl:blu +hgt:193cm eyr:2028 cid:115 pid:786380485 iyr:2011 + +hcl:#fffffd eyr:2028 hgt:155cm pid:499022582 +ecl:blu byr:1977 iyr:2014 +cid:212 + +ecl:#92bb4b +pid:815154669 byr:1923 eyr:2023 +hgt:183cm iyr:1929 hcl:#ceb3a1 + +byr:1966 eyr:2021 iyr:2020 hcl:#6b5442 ecl:hzl +pid:3508035599 +hgt:70in + +ecl:amb +hcl:#18171d +byr:1927 +hgt:177cm pid:555764540 iyr:2018 eyr:2025 cid:90 + +hgt:139 ecl:#878a7d byr:2006 cid:275 iyr:1980 hcl:60fca6 eyr:1952 pid:001439727 + +byr:1985 +hgt:174cm ecl:gry +iyr:2018 +cid:204 hcl:#733820 +pid:141048398 eyr:2027 + +ecl:gmt hcl:#6b5442 hgt:158cm +iyr:2025 +byr:2030 pid:966397365 eyr:2029 + +byr:1962 hgt:166cm pid:261989937 cid:320 eyr:2026 +iyr:2015 hcl:#c0946f +ecl:hzl + +pid:852283506 iyr:2018 eyr:2020 byr:1981 hcl:#733820 +ecl:hzl +hgt:162cm + +pid:3873488100 iyr:1982 ecl:grn +hgt:63cm eyr:1936 +byr:2011 hcl:8d118a + +iyr:1937 +hcl:817646 +byr:2026 eyr:2031 pid:#47591d hgt:183in +ecl:blu + +eyr:2025 hgt:153cm iyr:2015 pid:498382864 +cid:307 +byr:1943 +hcl:#f66fe1 ecl:oth + +iyr:2017 hgt:66in byr:1948 hcl:#b6652a eyr:2025 +pid:188366364 +ecl:amb + +ecl:lzr +pid:453174702 iyr:2028 eyr:2032 cid:228 byr:2011 hcl:z +hgt:172cm + +hgt:186cm eyr:2030 cid:316 hcl:z byr:1994 +iyr:2012 ecl:amb pid:993162839 + +hgt:160cm +ecl:grn pid:523473760 byr:1993 +iyr:2016 eyr:2025 hcl:#602927 cid:261 + +iyr:2016 pid:520973843 ecl:gry +eyr:2023 cid:232 +byr:1944 hgt:159cm hcl:#cfa07d + +byr:1969 hcl:#1d37de hgt:184cm eyr:2027 pid:088048141 +iyr:2016 cid:307 ecl:hzl + +eyr:2040 iyr:2012 pid:723592140 +hgt:61cm hcl:#18171d ecl:dne + +eyr:2025 +ecl:oth pid:4697392468 +hgt:183cm iyr:2017 hcl:b07d71 +byr:1996 + +ecl:amb eyr:2022 cid:143 pid:806594272 hgt:158cm byr:1977 iyr:2014 +hcl:#866857 + +ecl:blu +eyr:2022 iyr:2018 byr:1983 hgt:167cm cid:321 hcl:#efcc98 +pid:344179526 + +byr:1925 eyr:2021 +hgt:193cm iyr:2020 ecl:grn +hcl:#888785 + +iyr:2018 +cid:319 byr:1972 hgt:181cm hcl:#fffffd eyr:2023 pid:493780616 + +eyr:2021 +hcl:#733820 +ecl:#e91c71 +iyr:2020 pid:451676066 hgt:166in +byr:1993 + +eyr:2026 +hcl:#b6652a ecl:blu byr:1999 iyr:2020 +hgt:163cm pid:955741810 + +iyr:2016 hgt:179cm hcl:#602927 +pid:673271332 byr:1963 eyr:2027 ecl:amb + +byr:1927 +iyr:2015 hcl:#866857 +ecl:oth +hgt:159cm +pid:992992996 eyr:2030 + +pid:283188332 hgt:168cm hcl:#6b5442 +eyr:2027 byr:2028 ecl:hzl iyr:2030 + +byr:1944 pid:628012522 eyr:2020 +hcl:#866857 +iyr:2019 ecl:amb +hgt:168cm + +cid:317 pid:333228098 hgt:158cm iyr:2014 byr:1958 eyr:2024 hcl:#a97842 ecl:oth + +hcl:#733820 +cid:314 ecl:oth byr:1938 eyr:2030 hgt:71in +pid:790938694 iyr:2014 + +iyr:2020 ecl:grt eyr:2018 +hgt:155cm +pid:1034925815 hcl:#623a2f cid:304 + +ecl:brn hgt:158cm hcl:#38fe6c eyr:2030 byr:1926 pid:0860404500 iyr:1993 cid:348 + +byr:1998 +hgt:185cm +ecl:brn eyr:2021 pid:567032567 hcl:#733820 cid:328 iyr:2017 + +pid:491430863 cid:146 hgt:181cm eyr:2026 iyr:2015 ecl:amb byr:1950 hcl:#c0946f + +eyr:2033 cid:289 +pid:396679011 ecl:oth byr:1988 +hgt:156in +hcl:#cfa07d iyr:2029 + +ecl:grn iyr:2015 +byr:1986 hcl:#a97842 hgt:62in +pid:403990108 eyr:2030 + +pid:42635067 cid:301 +iyr:2027 hgt:173in +byr:2004 hcl:z +eyr:2034 + +byr:2020 hcl:#fffffd +hgt:180in eyr:2040 pid:304951921 +iyr:2030 ecl:#1aaf20 + +iyr:2020 hcl:#888785 ecl:hzl hgt:181cm byr:1992 eyr:2021 pid:936006959 + +hgt:172in ecl:#fd71a7 +hcl:787715 pid:363058480 byr:2020 +iyr:2022 +eyr:2034 + +iyr:2018 ecl:blu eyr:2029 hcl:#cfa07d hgt:155cm byr:1937 pid:851148031 + +byr:2014 +cid:222 ecl:zzz hgt:67cm eyr:2040 pid:#8ab0e2 hcl:z iyr:2027 + +hgt:180cm hcl:#375883 eyr:2027 byr:1925 ecl:brn +iyr:2011 +pid:158752719 + +byr:1935 ecl:oth eyr:2027 pid:041108579 +hcl:#602927 iyr:2011 hgt:190cm + +hcl:#a97842 pid:131728607 ecl:blu iyr:2014 hgt:176cm eyr:2020 +byr:1921 + +pid:11754457 +iyr:2018 +hgt:65cm eyr:2038 +ecl:dne hcl:z +cid:293 +byr:1940 + +eyr:2023 +iyr:2016 +byr:1930 +ecl:hzl +cid:212 +hcl:#733820 hgt:59in +pid:319501919 + +cid:278 +eyr:1967 hcl:#ceb3a1 pid:#9f5254 hgt:177in byr:1977 iyr:2030 + +hcl:#ceb3a1 byr:1998 hgt:72in cid:202 ecl:gry pid:463378493 iyr:2015 +eyr:2030 + +hcl:#7d3b0c hgt:164cm ecl:hzl byr:1960 eyr:2023 +iyr:2017 + +ecl:hzl hcl:#866857 byr:1986 iyr:2018 eyr:2027 hgt:176cm pid:928057092 + +pid:431113230 hgt:186cm eyr:2025 +iyr:2018 ecl:amb byr:1973 hcl:#623a2f + +hcl:#cfa07d hgt:179cm iyr:2017 pid:760075190 ecl:amb eyr:2030 + +hcl:#602927 +iyr:2012 +pid:571020910 ecl:#b6715d byr:1943 eyr:2028 +hgt:161cm + +hgt:176cm cid:121 pid:654127593 ecl:brn hcl:#160d38 iyr:2015 +eyr:2021 byr:1997 + +eyr:2021 byr:1929 +pid:192025713 +hcl:#c0946f iyr:2012 ecl:oth hgt:179cm + +eyr:2024 ecl:gry +hgt:158cm byr:1932 hcl:#ceb3a1 +iyr:2010 +pid:521188306 + +eyr:2028 ecl:brn +hcl:#efcc98 +hgt:157cm +iyr:2012 +pid:212547203 byr:1970 + +eyr:2029 pid:182693366 hcl:#623a2f hgt:130 byr:1972 +cid:310 +iyr:2010 ecl:amb + +byr:1944 iyr:2013 +ecl:brn cid:335 +hgt:163cm +eyr:2025 hcl:#7d3b0c pid:405230824 + +hcl:#ceb3a1 iyr:2015 pid:572001387 byr:1962 +ecl:amb hgt:151cm + +byr:1928 +eyr:2022 +iyr:2018 ecl:blu +hcl:#602927 pid:767081131 + +byr:1948 hgt:180in pid:188cm +ecl:hzl +eyr:2013 hcl:e0b9f3 iyr:1975 + +hcl:#c0946f byr:1989 +eyr:1980 hgt:67cm pid:538025041 +iyr:2014 ecl:gry + +eyr:2028 pid:958756919 hcl:#733820 byr:1945 cid:158 ecl:blu +hgt:168cm iyr:2018 + +cid:200 hcl:#fffffd +byr:2015 ecl:gry eyr:2031 hgt:59 pid:065027646 +iyr:1967 + +byr:1999 ecl:hzl pid:813536928 iyr:2015 cid:296 hcl:#6b5442 +eyr:2025 hgt:186cm + +byr:2000 iyr:2012 +hcl:#fffffd +cid:263 hgt:68in pid:105489529 +ecl:amb eyr:2024 + +eyr:2026 hcl:#602927 hgt:181cm +byr:1982 +pid:603871531 iyr:2018 ecl:blu + +cid:302 pid:387895477 eyr:2027 +hcl:#cfa07d hgt:191cm iyr:2015 +ecl:hzl byr:1940 + +iyr:2018 cid:165 +ecl:blu hgt:181cm byr:1994 eyr:2026 pid:077013268 + +eyr:2022 hgt:174in iyr:2010 byr:2023 +hcl:#733820 ecl:oth +pid:311692961 + +ecl:#10f2a9 pid:964417986 +eyr:2024 hcl:#0aeec7 byr:1965 iyr:1943 hgt:167cm + +hcl:#341e13 iyr:2020 +ecl:brn +hgt:188cm eyr:2021 byr:1952 +pid:077471062 + +byr:1950 cid:110 hgt:160cm eyr:2026 +hcl:#623a2f +iyr:2013 +pid:972823574 + +pid:553704996 hgt:171cm +eyr:2028 iyr:2017 +hcl:#18171d byr:1954 ecl:blu + +hgt:180cm ecl:brn eyr:2029 pid:707999496 hcl:#cfa07d byr:1960 + +pid:9325738036 iyr:1996 hgt:152in byr:2004 cid:292 hcl:14a56f +eyr:2031 +ecl:#dbd99d + +byr:1957 +eyr:2021 pid:557648216 ecl:amb hcl:#7d3b0c hgt:186cm +iyr:2020 + +hcl:#602927 hgt:186cm pid:604175608 +iyr:2013 eyr:2026 ecl:oth byr:1991 cid:65 + +ecl:gry +iyr:2012 hgt:154cm +pid:872898058 eyr:2030 hcl:#341e13 byr:1994 + +pid:228236326 +iyr:2013 cid:347 byr:1942 +eyr:2021 ecl:brn +hgt:165cm +hcl:#fffffd + +pid:392777182 cid:189 hcl:#cfa07d eyr:2027 hgt:191cm ecl:blu byr:1978 + +hgt:158in iyr:2028 +pid:5145408095 byr:2012 ecl:#94c57d hcl:z eyr:1996 + +byr:1949 eyr:2021 +ecl:#5ffbeb iyr:1948 pid:42650064 hcl:z hgt:167cm + +iyr:2013 ecl:xry cid:100 +hgt:138 byr:2013 +eyr:1944 hcl:92b68c + +hgt:187cm +ecl:grn hcl:#602927 +iyr:2010 +eyr:2022 byr:1949 cid:280 pid:251802347 + +ecl:grn +cid:219 +iyr:2018 hgt:165cm +pid:703878503 eyr:2024 hcl:#b6652a +byr:2002 + +hcl:#18171d cid:341 ecl:amb byr:1941 eyr:2021 iyr:1990 pid:865132177 hgt:153cm + +byr:2008 pid:861480549 +cid:97 eyr:2028 hcl:#efcc98 +iyr:2015 +hgt:191cm ecl:#232b23 + +hcl:#cfa07d +eyr:2030 iyr:2013 cid:304 +ecl:gry pid:199056608 hgt:192cm +byr:1926 + +pid:355135528 hgt:153cm byr:1998 iyr:2019 eyr:2027 +ecl:amb hcl:#18171d + +eyr:2028 hcl:8eed9c ecl:grn +iyr:2010 byr:2005 hgt:107 +pid:64892698 + +pid:601671623 hgt:153cm iyr:2011 hcl:#b6652a byr:1975 ecl:grn eyr:2029 + +ecl:grn hcl:#18171d hgt:157cm +eyr:2023 pid:507932715 byr:1920 iyr:2020 + +eyr:2022 byr:1933 hcl:#fffffd iyr:2016 hgt:181cm pid:826522507 ecl:blu + +byr:2002 hcl:#866857 hgt:177cm pid:240202426 +ecl:gry cid:127 +eyr:2022 +iyr:2014 + +byr:1971 +iyr:2017 +pid:733985576 hcl:#c58c6c hgt:178cm +ecl:blu +eyr:2023 + +ecl:blu iyr:2017 pid:558732458 hcl:#1b3ab5 eyr:2025 byr:1967 hgt:176cm + +eyr:2025 ecl:gry iyr:2020 byr:1988 +hcl:#733820 +hgt:189cm cid:151 pid:934827751 + +ecl:gry eyr:1951 +iyr:1932 +pid:309366394 byr:1945 hcl:#623a2f hgt:179cm + +pid:462345884 ecl:hzl +cid:206 eyr:2021 hcl:#733820 +byr:1982 hgt:180cm iyr:2010 + +iyr:2020 hgt:155cm hcl:#341e13 pid:110467532 cid:92 ecl:hzl byr:1975 eyr:2028 + +hcl:#18171d iyr:2010 +hgt:182cm byr:1930 +eyr:2024 +cid:226 + +byr:1956 hcl:fb0c6f pid:181cm eyr:2012 iyr:2020 +ecl:#d38822 +hgt:69cm + +ecl:gry iyr:2018 +hgt:169cm byr:1981 +pid:534824014 cid:287 eyr:2021 hcl:#c0946f + +eyr:2039 hcl:#328e90 iyr:2015 +hgt:170cm pid:#9fa2a4 byr:1999 +ecl:#cd1fd7 + +hgt:190cm hcl:#733820 +pid:302244363 +ecl:brn +byr:1965 iyr:2013 + +iyr:2012 +eyr:2021 +pid:579705743 +ecl:brn hgt:190in +byr:1954 hcl:#888785 + +eyr:2036 hgt:154cm +pid:800720865 byr:2023 ecl:oth iyr:2010 hcl:z + +pid:#92f6a9 iyr:2028 eyr:1943 +hgt:191cm ecl:hzl hcl:z byr:2018 + +hcl:#c0946f +pid:419930442 hgt:167cm +byr:1969 +eyr:2020 ecl:brn + +pid:137802946 +eyr:2020 byr:1947 ecl:grn hgt:192cm iyr:2016 hcl:#888785 + +ecl:#f66cce eyr:1958 iyr:1954 +pid:833131572 +hcl:z +cid:212 +hgt:109 byr:1924 + +hgt:179cm ecl:gry pid:065881341 byr:1985 +hcl:#fffffd cid:204 eyr:2026 + +hgt:167cm +iyr:2017 pid:898571403 byr:1929 +ecl:blu hcl:#d506d0 eyr:2028 cid:100 + +byr:1991 pid:2795214253 iyr:2011 +cid:152 eyr:2028 +hgt:170cm hcl:#a45065 ecl:lzr + +hgt:188cm eyr:2030 iyr:2010 +pid:297292695 byr:1955 hcl:#fffffd +ecl:blu + +hgt:170cm eyr:2029 pid:913242036 byr:1993 cid:89 hcl:#888785 +iyr:2010 +ecl:blu + +iyr:2028 eyr:2025 hgt:150in ecl:grn +byr:1995 +pid:974802728 +hcl:#cfa07d + +eyr:2021 byr:1989 +hcl:#18171d ecl:blu hgt:168cm +pid:626530259 +iyr:2020 + +hcl:#6b5442 hgt:158cm pid:798732187 byr:1922 eyr:2020 iyr:2011 ecl:gry + +hcl:#341e13 pid:092679330 byr:1997 ecl:oth hgt:159cm iyr:2010 eyr:2026 + +hgt:185cm +iyr:2020 byr:1947 +pid:105846744 ecl:gry cid:134 eyr:2027 + +pid:252016128 hcl:9016ff cid:158 hgt:161 ecl:gry +byr:1952 eyr:1955 iyr:2018 + +iyr:2020 hgt:154in byr:1958 +eyr:2029 ecl:#2feb89 pid:99780178 + +hcl:z +eyr:2001 ecl:gmt +byr:2022 hgt:73in iyr:2029 +pid:388744230 + +hgt:186cm +byr:1939 pid:622948608 ecl:oth eyr:2030 +hcl:#c0946f + +cid:272 +eyr:2025 byr:1979 ecl:brn hgt:180cm pid:456545466 +hcl:#fffffd iyr:2012 + +pid:946657041 byr:1999 +iyr:2014 hcl:#ceb3a1 hgt:150cm +ecl:grn + +byr:1957 pid:177cm ecl:blu eyr:2020 hcl:#cfa07d +iyr:2010 hgt:183cm + +pid:161cm eyr:2025 hcl:#b6652a +cid:213 +ecl:xry +hgt:150cm +iyr:2024 byr:2012 + +hcl:ea1960 +ecl:grn +pid:#7127b2 iyr:2012 eyr:2011 hgt:150 + +pid:178699291 +hgt:66in eyr:2027 +byr:1985 iyr:2014 ecl:amb + +iyr:2017 ecl:blu +eyr:2027 hgt:191cm byr:1990 hcl:#b6652a pid:074411798 + +pid:528782860 +hgt:181cm hcl:#c0946f byr:1965 iyr:2012 ecl:grn eyr:2020 + +pid:#ba10da hgt:176in byr:2006 +ecl:grt +iyr:2030 eyr:1949 hcl:d3ca76 + +hgt:66cm ecl:#898478 hcl:#e9f7a5 eyr:2030 iyr:2022 +byr:2025 +pid:159cm + +byr:1994 hcl:#ceb3a1 +pid:028071950 eyr:2022 ecl:gmt hgt:151in iyr:2016 + +byr:2001 iyr:2011 +ecl:brn +pid:487702556 hcl:#602927 +hgt:167cm eyr:2026 \ No newline at end of file diff --git a/README.md b/README.md index 08738c3..b87bbd5 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ -# AdventOfCode - -A collection of the source code of the programs i wrote to generate the answers for the advent of code challenges. +# AdventOfCode + +A collection of the source code of the programs i wrote to generate the answers for the advent of code challenges.