diff --git a/1/frequency.py b/1/frequency.py new file mode 100755 index 0000000..216f3cb --- /dev/null +++ b/1/frequency.py @@ -0,0 +1,31 @@ +#!/usr/bin/env python3 + +import sys + +def delta_frequency(f = sys.stdin): + df = 0 + frequency_count = {0: 1} + frequency_list = [] + for l in f.readlines(): + frequency_list.append(l) + first = None + iteration = 1 + df_first_iteration = None + while first is None: + for l in frequency_list: + df += int(l) + if df not in frequency_count: + frequency_count[df] = 1 + else: + frequency_count[df] = frequency_count[df] + 1 + if not first: + if frequency_count[df] >= 2: + first = df + if df_first_iteration is None: + df_first_iteration = df + print(df_first_iteration) + if first is not None: + print("First duplicate frequency: {}".format(first)) + +if __name__ == '__main__': + delta_frequency() diff --git a/1/input b/1/input new file mode 100644 index 0000000..c5257c4 --- /dev/null +++ b/1/input @@ -0,0 +1,957 @@ +-5 +-2 ++1 ++14 ++7 ++5 +-14 +-4 +-5 +-12 ++7 +-5 ++17 ++5 +-13 +-12 ++15 ++22 +-5 +-6 +-12 ++20 ++4 ++2 ++17 +-1 ++18 +-7 +-1 +-17 ++11 +-12 +-5 +-2 ++9 ++2 +-6 +-17 +-1 ++2 +-3 ++15 ++19 ++9 +-8 ++13 ++1 ++11 ++16 ++3 +-16 +-7 +-15 +-15 ++12 ++16 ++18 ++1 +-9 ++16 +-9 +-19 ++17 ++1 +-15 ++13 +-9 +-8 +-1 ++7 ++17 ++13 ++15 +-17 +-3 ++12 +-10 ++5 ++4 +-16 ++15 ++3 ++19 ++1 +-2 ++19 +-16 +-11 ++4 +-10 +-8 ++13 ++13 ++19 +-6 +-19 ++1 +-4 ++18 ++15 ++16 +-18 ++12 ++3 +-9 ++8 ++3 +-9 ++11 ++4 ++8 ++1 ++6 +-10 +-3 ++15 ++16 ++15 ++12 +-14 ++4 +-14 +-7 +-3 ++14 ++4 ++3 +-6 +-7 ++11 +-2 +-18 ++17 +-3 ++14 ++18 ++6 ++8 ++18 +-13 +-7 ++17 +-18 +-10 +-15 ++13 +-16 ++5 +-10 ++15 +-8 +-4 ++14 ++13 +-10 +-14 ++7 ++5 ++13 +-4 ++12 ++3 ++14 +-7 ++6 ++12 ++17 +-18 ++3 +-6 +-3 +-14 +-1 ++13 ++19 ++3 ++9 ++4 ++11 ++12 ++3 ++1 ++14 ++7 +-17 ++12 ++11 ++6 +-7 ++4 +-11 +-1 ++6 +-19 +-10 +-16 +-2 +-19 ++7 ++9 +-3 ++5 ++12 ++15 ++8 ++11 ++1 ++8 ++15 +-9 +-9 +-8 +-10 +-3 +-16 ++7 +-17 ++9 +-5 ++16 +-15 +-4 ++15 +-5 +-25 +-6 ++1 ++4 ++17 ++19 +-13 ++17 ++7 ++19 ++2 ++4 ++10 ++16 +-9 ++19 ++13 ++3 +-10 ++9 ++5 ++1 ++18 +-11 +-14 +-4 +-5 +-13 +-7 +-12 ++2 ++3 ++6 +-16 +-1 ++13 +-10 +-4 +-1 +-3 ++9 ++22 ++4 +-18 ++17 ++11 +-21 +-17 +-18 +-8 ++12 ++6 ++15 ++12 ++10 +-7 ++18 ++10 +-8 +-10 +-18 ++11 +-17 ++25 ++15 +-9 +-19 ++38 +-3 +-6 +-23 ++34 +-25 +-5 +-12 ++25 ++14 ++17 ++30 ++3 ++9 +-8 ++16 ++21 ++21 ++4 +-12 ++23 +-13 ++9 ++3 ++6 ++13 ++15 ++6 +-7 ++15 ++12 +-10 ++13 ++12 +-7 ++13 ++4 +-9 ++18 +-10 ++5 ++8 +-7 ++2 +-14 +-12 +-1 +-6 +-16 +-18 +-3 ++1 ++12 +-6 ++15 +-17 ++15 ++13 ++6 +-15 ++26 ++1 +-21 +-3 +-21 +-4 ++14 +-1 +-19 +-11 ++13 +-10 +-14 ++2 +-17 +-23 ++25 +-16 ++8 +-30 ++17 +-44 ++13 +-19 ++5 +-9 +-12 ++10 ++14 ++17 ++24 +-15 ++7 +-61 +-103 +-18 ++21 +-22 +-6 +-9 +-6 +-9 +-7 +-15 +-17 ++4 +-1 ++10 ++8 ++14 +-4 ++15 +-16 +-6 +-16 +-15 +-12 ++15 ++10 +-15 ++3 ++15 +-10 +-17 ++3 +-5 +-12 ++4 ++3 +-37 +-7 ++14 +-18 +-8 ++6 +-11 ++14 ++30 ++7 ++23 ++39 +-12 ++11 +-8 ++11 +-1 ++56 +-28 +-12 ++7 ++34 ++47 ++21 ++88 ++61 ++18 ++10 +-99 +-287 ++26 +-858 +-209 +-61255 ++2 +-7 +-8 ++12 ++18 ++17 +-14 +-2 ++14 ++4 ++3 ++3 +-15 ++21 ++3 ++20 ++1 ++3 +-1 +-25 +-2 ++7 +-9 ++17 +-19 +-6 +-13 ++2 +-4 +-3 +-14 +-8 ++12 +-20 ++17 +-40 ++11 ++3 +-20 +-16 +-18 +-3 +-6 +-10 ++4 ++20 +-12 +-3 ++11 ++16 +-2 ++4 +-9 ++28 +-12 ++5 ++17 +-13 ++35 ++25 ++2 ++35 +-17 +-8 ++31 ++3 +-39 +-46 ++3 +-96 +-18 +-14 +-14 +-12 ++9 ++15 ++3 ++18 +-8 ++1 +-2 +-15 ++13 ++14 +-13 +-3 ++7 +-11 +-15 +-17 +-12 +-15 +-17 ++9 ++7 +-10 +-8 +-3 ++9 ++16 ++3 ++15 +-14 +-5 +-9 ++1 +-3 ++10 ++3 +-18 +-21 +-11 ++2 +-17 +-17 +-7 +-11 ++8 ++11 +-2 +-7 +-1 +-19 +-2 +-16 ++1 ++5 ++11 ++18 ++5 ++17 ++2 +-5 +-2 ++19 +-4 ++12 ++2 ++20 +-13 +-20 +-12 ++10 ++4 ++14 +-1 ++12 ++13 +-10 +-13 +-8 +-1 ++14 ++16 ++6 ++10 ++18 ++19 ++14 +-1 ++6 +-13 +-9 ++10 +-20 ++1 ++1 +-12 ++6 ++7 +-15 +-13 +-2 ++14 +-19 +-5 +-10 +-17 ++15 +-5 ++8 ++20 ++9 ++14 +-6 ++4 +-3 ++19 ++18 +-14 +-3 +-8 ++4 ++16 ++7 +-3 +-5 ++19 +-2 ++12 ++19 ++12 +-10 +-17 +-40 ++1 +-11 ++19 +-27 +-9 ++45 +-27 ++31 ++1 +-25 ++41 ++58 +-5 +-39 +-112 ++1 +-8 +-3 +-6 +-15 +-3 +-9 ++13 ++13 +-24 ++3 +-4 ++13 +-19 +-21 ++16 +-20 +-10 +-15 +-16 +-1 +-13 +-12 +-17 ++16 ++17 ++16 +-2 +-9 +-1 +-19 ++8 ++5 +-18 ++17 +-19 +-19 +-12 ++14 +-18 +-12 ++10 ++9 +-13 +-8 ++19 ++16 ++13 +-5 ++2 ++16 +-15 ++17 ++9 ++10 ++2 +-5 ++20 ++16 +-8 +-4 ++16 ++6 +-7 +-2 +-11 ++18 ++11 +-1 ++2 ++5 ++3 ++40 +-38 ++22 +-11 +-15 +-27 ++7 +-25 ++4 +-11 +-15 +-12 ++15 +-20 +-13 ++9 +-13 ++7 +-5 ++10 ++18 ++24 ++8 ++15 +-6 +-10 +-10 +-1 +-4 +-3 +-17 ++7 +-15 ++20 +-19 +-18 +-14 +-4 +-26 +-22 +-5 ++17 ++6 ++13 ++9 ++7 ++28 +-11 +-8 ++57 +-23 +-37 +-11 +-43 ++3 +-14 ++3 +-14 ++13 +-15 ++6 +-23 ++8 ++12 +-8 ++15 ++16 ++2 +-9 +-14 ++18 ++19 +-1 +-43 +-2 +-3 +-13 ++5 +-6 +-13 +-20 ++15 ++13 +-12 ++3 ++2 ++3 ++11 ++7 +-17 +-8 +-13 ++18 +-17 +-2 +-13 ++5 ++3 ++1 +-11 ++20 ++4 ++2 +-1 +-19 +-8 +-19 ++1 +-6 +-12 ++8 +-6 +-5 ++1 ++6 ++9 +-12 ++13 ++10 +-14 ++20 +-11 ++9 ++9 +-3 +-18 ++9 +-5 ++9 ++2 +-9 +-19 +-4 +-10 ++7 +-8 ++68 ++30 ++2 +-9 ++12 +-65 ++15 +-26 +-9 +-15 +-67 +-38 +-36 +-37 +-7 ++18 +-20 +-44 ++35 +-70 +-85 ++14 ++18 +-499 ++209 +-61690 +-5 ++15 +-4 ++3 ++5 ++6 ++15 ++16 ++3 +-4 ++12 +-14 +-7 +-9 +-15 ++2 +-1 +-11 +-21 +-8 +-2 +-15 ++19 ++7 +-10 +-19 +-3 +-14 ++4 ++9 ++13 +-16 +-14 ++2 ++10 +-19 ++6 ++16 ++11 ++7 +-14 +-9 +-21 +-7 +-12 ++2 ++12 +-6 ++125503 diff --git a/2/checksum.py b/2/checksum.py new file mode 100755 index 0000000..6a1a588 --- /dev/null +++ b/2/checksum.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python3 + +import sys +def checksum(l): + double = 0 + triple = 0 + for item in l: + d, t = count_duplicate(item) + double += d + triple += t + return double * triple + +def count_duplicate(item): + double = 0 + triple = 0 + c = dict() + for i in item: + if i in c: + c[i] += 1 + else: + c[i] = 1 + for k,v in c.items(): + if v == 2: + double = 1 + if v == 3: + triple = 1 + #print(c) + #print("{}: {}, {}".format(item, double, triple)) + return (double, triple) + +def compare(item, l): + for candidate in l: + if candidate == item: + continue + diff = 0 + x = 0 + while x < len(item): + if item[x] != candidate[x]: + diff += 1 + x += 1 + if diff > 1: + break + #if diff > 1: + # print("{} does not match {}: {} different".format(item, candidate, diff)) + if diff == 1: + return candidate + +def common(x, y): + i = 0 + common = "" + while i < len(x): + if x[i] == y[i]: + common += x[i] + i += 1 + return common + +if __name__ == '__main__': + l = sys.stdin.readlines() + print(checksum(l)) + for item in l: + z = compare(item, l) + if z is not None: + print("{} / {}".format(item, z)) + print(common(item, z)) + break diff --git a/2/input b/2/input new file mode 100644 index 0000000..5785f74 --- /dev/null +++ b/2/input @@ -0,0 +1,250 @@ +qywzphxoiseldjrbaoagvkmanu +qywzphxeisulpjrbtfcgvkmanu +qywzxhooiseldjrbtfcgvcmanu +qywzphjojseldjubtfcgvkmanu +qtwzphxoieeldjrbtfcgvrmanu +tywzphzoiseldjritfcgvkmanu +qyuzphxoiseldjrbtfcgykbanu +qswzmhxoiseldjrbtfcgvkaanu +qyczqhxoiseldjrbtfcgvkbanu +qybzpqxooseldjrbtfcgvkmanu +qywzpoxoxseldjrbtfcgvpmanu +qywzphxbipeldjrbtfcgvkmaru +qywzpmxoiseldjrutqcgvkmanu +qywzphxoisesdjrrtfchvkmanu +qywzphxoiseldhrbtfcgukyanu +jywzphyoiseldjrbtfclvkmanu +qywzvhxoiselrjrbtfcgvkmanl +qywzplxojseldjrbtfcgvkmamu +qywzphxoiseldjrbtacgvkmvnd +qywpphxoiseldjrbtfcgvkvenu +qqazphxoiselqjrbtfcgvkmanu +qyozvhxoiseldjrbtfcgvkmadu +xywzphxliseldjhbtfcgvkmanu +qdwzphioiseldqrbtfcgvkmanu +qswyphxoiseldjrbtfcgvkmanx +qowzshxoiseldjrbtfigvkmanu +qywzphxoiseldjjbtfcgvkmawq +qyhzphxoiseldjrbtfvgvkmynu +qxwzphxoiselmjrbtfcgvqmanu +qywzphxoiceldjrbtfcgikmgnu +qywephxoiseldjrbthcgvkmane +yywzphxoisejdjrotfcgvkmanu +qywzxhxoisyldyrbtfcgvkmanu +qywzpjxoiseqdjrbtfcgvwmanu +qywzphxoqweldprbtfcgvkmanu +qywzphnoiseldjrbtfcamkmanu +qylgphxoiseldjrbtfcgvkmauu +qysdphxomseldjrbtfcgvkmanu +lywzpoxoikeldjrbtfcgvkmanu +qywzphxgiseldjrbtfeqvkmanu +qywzdhxozseldjcbtfcgvkmanu +qywzphxeiskedjrbtfcgvkmanu +qmwzphxoispldjrbtfcgvkmany +qywzphxoiselzcrbtfcgvkmanz +qywzphxoisxodjrbtscgvkmanu +qywzphxoiseldjrrtfcgmkmaeu +aywzphxoiseldjrbtfmjvkmanu +qywzthxoiiewdjrbtfcgvkmanu +qywzpsxoisrzdjrbtfcgvkmanu +qywzphxoiseldjkbtqcgvkmank +tywzphxoisewdjkbtfcgvkmanu +qywkchxoiseldjrbtfcghkmanu +qywzphxoiseldjoftfrgvkmanu +qywzpixoisehdjrbtfcgvkmacu +qywzchooiseldarbtfcgvkmanu +qywyphtoaseldjrbtfcgvkmanu +qywyphxotsbldjrbtfcgvkmanu +qywzphxoiseldjrbhsggvkmanu +dywzphxoiseldjrktfegvkmanu +qywzphxoiseldjrmtfcgvkcenu +qywcphxjiseldjybtfcgvkmanu +qywzphxoiseldhrbsfogvkmanu +qmwzpheoiseldjrrtfcgvkmanu +qywzrhxoiselpjrbtfcgvemanu +qyezphpoiseldjrbtfcgvdmanu +qywzphxvisewdjrbtfcgvkmdnu +qywzphkoiseldjrbtfcgvkmdnh +qywzehxoiseldfrbtpcgvkmanu +qywzphxoiseldjrrtfcgvrdanu +qpwzphxoizeldjqbtfcgvkmanu +qywzphxojseldjrbtmcgvkmvnu +vywzphxoiseldjrbtfcgvkmaop +sywzphxoiselbjrttfcgvkmanu +qywwphkoiseldjrbtfcivkmanu +qlwkpcxoiseldjrbtfcgvkmanu +qywzphxoiyesdjrbtfcgvkmvnu +qywzphxoiseldjrbofcgrkmrnu +qywzphxyiseldjrstfcgvkmjnu +qywzphaoiseldtrbnfcgvkmanu +qywzphxhisuldurbtfcgvkmanu +qywzphxdiseldjrbtvugvkmanu +qywzpzxbiseldjrbtfcgukmanu +qyrzphxoixeldjrbtfcgvumanu +qywzphxoiberdjrptfcgvkmanu +qywzphxfiskldjrbtfcgvkmdnu +qyxzphxoiseldjrdhfcgvkmanu +qywzphrqiseldjrbtfcgvbmanu +qyezphxviseldjrbtfcgvkmani +qywgphxoiseldgkbtfcgvkmanu +qywzphxoileldjrbtgcgvkdanu +qywzphxoiseldnrbtfcwvkmpnu +qywzphxoiseidjrbmfcqvkmanu +qywzpkxoiselijrbtfcgvlmanu +mywzphxoiveldjrbtfcgvkmunu +qywzphxooseddjrbtfcgpkmanu +qywzphxokseldjritfcyvkmanu +qywzxhxoiseldjrbtfqgvcmanu +qywzphxoisfldjrbpfcgvkmaju +qywuphxgiseldjrbffcgvkmanu +qywzphociseldjrbtfcgvkuanu +qywzphxoiseldvrbtftgckmanu +qywzpbxoisrldjrbtfngvkmanu +qywzphxoiseldjrntfygvdmanu +qywzphxviseldkrbtfcgvkianu +qywpphxgiseldjrbtfctvkmanu +qywzphxoicewdjrbtfcgvsmanu +qywzpcxoiseldjmbtfcgvcmanu +qrwzphxoiseldjrbtfcgjumanu +qywzphxoiselojrbtfcgxkmaau +qywzphxojsbldjrbtfcgykmanu +oywzphxoiseldjrbtfqgvkmvnu +qywfphxpiseldjrbtfckvkmanu +qyyzwhxwiseldjrbtfcgvkmanu +qywzphxgiseldjrbtfchvkmabu +qywzphxfiseldjrbtfcgukoanu +qywzpdxoisyldjrbtfcgvkxanu +dyuzphxoiseldjrbtfcgvkmamu +qywzphxoiseldjrbifcgvkmnnp +qywzpyxoiseldjrbtfcgvklano +dywzphxoiieldjrbtfcgvwmanu +qywzphxoihemdjrbtfcgvdmanu +gywzphxoxseldvrbtfcgvkmanu +qywzqhxoissldjwbtfcgvkmanu +eywzphxoiieldjrbtfcgekmanu +qyizprxciseldjrbtfcgvkmanu +qywjphxoiseldjrbtfcgckmano +qywznhxoiseldjrbrfcgvkmagu +qywzphxoisrldjdbvfcgvkmanu +qyyxphxoiseldjrbtwcgvkmanu +qywzphxoiseldjdbtfcpvkmjnu +qywzvhxqiseldjrbofcgvkmanu +vywzphxoiseldjrbtfcgckwanu +qywzphgbiseldjrbtfcgvkmazu +qcwzphxoiseldjrbqfcgvkmdnu +qywzphxoismldjrbtfcgkkmznu +qywhphxoiseldjrbtccgvkmane +qywzphzoiseldjrbtfcgvqmauu +hywzphxoiseldjrbtfcuvkmanc +qywzphxozsejdgrbtfcgvkmanu +qyszphxoiseldjrntfygvdmanu +qywzphxoisgldjrbtfcgvklaru +qywzhhxoiseldjrbtscgvkmqnu +qywjphxpiqeldjrbtfcgvkmanu +qywzphxoiseldxrptfclvkmanu +qywlphxoisehdjrbtfcgvkmanc +qydzpfxoiseldjrwtfcgvkmanu +qywzphxoiseldjrbtxcgqkfanu +qywophxoiselfjrbtfcgvkmani +qywzyhxoiszldtrbtfcgvkmanu +qywzphxoxseldfrntfcgvkmanu +qywzphloiseldjqbtfcgvkmtnu +qywzpuxoiseldorbtfcgvkeanu +qywzphxoiueldjrwdfcgvkmanu +qgwzphxoiseldjmbtncgvkmanu +qywzphtggseldjrbtfcgvkmanu +qywzphxoisrldjrbtfmgvhmanu +qfszphxoiseldjqbtfcgvkmanu +qywzphxpisjldjrbxfcgvkmanu +qywznhxoisepdjrbtfqgvkmanu +qywzphioiseldjabtfcgxkmanu +qyizphxaiseldjrbtfcgvkmaxu +xywzphxoiqelvjrbtfcgvkmanu +quwzphxoiseldjretfcgvkmaau +bywzphxoiseldjrbtucgckmanu +jywzphxoiseldjrbofcgvkmani +qywzphxoiseltjkbtfcgvkmabu +eywzphxoiselgjrbtfkgvkmanu +qywzphxoisengjrttfcgvkmanu +qywzphzoiseldjrbtfcgvkmknk +quwdphxoiseldjrbtfcxvkmanu +qcwzzhxoiseldjrgtfcgvkmanu +qywgphxdiseldjrbtfcgjkmanu +qywzpdxoivefdjrbtfcgvkmanu +qywzphxoiseldjrbtfdgvjmpnu +qfwzphxoiseydkrbtfcgvkmanu +qywzphxdiqelqjrbtfcgvkmanu +qywzvhxoiseldjrbtfognkmanu +qywzphgoiseldjrbcfcgvtmanu +qywophxoiseldjrbtpcgvkmank +qywzphxoiszldjretfcgvkmabu +qywzphxoiseldjhbtfcgvxmawu +qcgzphxoiselejrbtfcgvkmanu +qywzphxoisepdjrbtfcfvkcanu +qivzphxniseldjrbtfcgvkmanu +qywzhhxoiseldjrftxcgvkmanu +qyazphxciseldjrbtfcgskmanu +qywzphxoisoldgrbtfczvkmanu +qywzmhxoiseldurbwfcgvkmanu +qywzphxoistldjrbwfcgvkranu +qywzphxoistedjrbtfcgokmanu +qywzqhxodsecdjrbtfcgvkmanu +qywzphxtisxldjrbtfcgvkhanu +qywzphxoeseldjrtrfcgvkmanu +qdwzphxoioeldjrbtfigvkmanu +qjwzphxoisbldjrbtfcgvkmanz +qywzphxoiseldbrbtfdgvlmanu +qywzphxoiselddrbhvcgvkmanu +zywzppxoiseldjrdtfcgvkmanu +qywzppxqiselkjrbtfcgvkmanu +qywzphxoihelbjrbtfcgvkmabu +qywzphxoiseldjreyfcgvknanu +qywzphxxrseldjrbtfcgvkmagu +qywhpfxoiseldjrbtfdgvkmanu +qywzphxoisxldjrdtfagvkmanu +oywzphxxiseldjrbtfcgvkmaeu +qywzphxoiselqirbtfvgvkmanu +qywzphxoqseldhrbtfcgvkhanu +qywzphxokseldjrbtfxgvkmaju +qywzphtoiseldurbtfcfvkmanu +qywzphxoiheudjrrtfcgvkmanu +qrwzphxzigeldjrbtfcgvkmanu +qywzphxoiseldorbtfcgvxmvnu +qywzphxoisaldjpbqfcgvkmanu +qywuphxoiselljrbtfchvkmanu +qywzphxoisaldjrbefcgvkmsnu +qywzphxoiteldjrbnfcgvkmanp +qywhphxoiselqjrbtfcgvkmagu +qywzjhxoisejdjrbtfcgvkmanr +qywephaoiseldjrbtfcavkmanu +qywcphxoireldjqbtfcgvkmanu +qywzphxoiseldirbuicgvkmanu +qywzphxoisecvnrbtfcgvkmanu +qcwzphxoiseldjrbtfcgvrmaiu +qywnphxoiseldjrntftgvkmanu +qywzphxhisyldjrbtfcgvkmafu +qyhzphxoiseldjrytfcgvkmanq +vjwzbhxoiseldjrbtfcgvkmanu +qyvzpsxoisuldjrbtfcgvkmanu +qywzphxaiseldcrbefcgvkmanu +qywzphxoiseldjgbtfsgvkfanu +oiwzphxoiseldjrbtfcgvkmcnu +qyezphxoiseldjrbtfcqvkmjnu +tywzphxriseldzrbtfcgvkmanu +yywzphxoiseldjbbtfugvkmanu +qywzpfxviseldjrbttcgvkmanu +qywzphxoiceldcrbtfugvkmanu +qymzphxoiseldjratfcsvkmanu +qywzphxoiselxjrbdfcgvkpanu +qywzphxoiselujrbtfkgvimanu +qywzshyoiseldjrbtfcgpkmanu +qywzphxoiselfjrbtfsgvkmant +qywpphxoiseldjxbtfcyvkmanu +qywzfhxoiselqjrptfcgvkmanu +qewzphxoiseldprbtfcgvkmand +qywfphxoiseldlrbtfcgvkmgnu +qywzphxoiseldjhbtqcovkmanu +fywzphxoiseldlrbtfcgvkjanu +sywzphxoiseldjrbhfccvkmanu +qywzphxoiseldjfbtfcrvkmpnu +sywzphxoisrldjrbtfczvkmanu diff --git a/3/area.py b/3/area.py new file mode 100755 index 0000000..1e3ea39 --- /dev/null +++ b/3/area.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python3 + +import collections +import numpy +import re +import sys + +matrix_size = [1000, 1000] + +class Claim: + id = None + # Vector2 ish + origin = None + # Vector2 ish + size = None + matrix = None + def __init__(self, id, origin, size): + self.id = id + self.origin = origin + self.size = size + # Not great to stop the matrix for the entire field in memory, + # but it's small enough in this case. + self.matrix = numpy.zeros(matrix_size, dtype = numpy.bool_) + # Set '1' for all positions of + x_offset = 0 + while x_offset < int(size[0]): + y_offset = 0 + while y_offset < int(size[1]): + position = (int(origin[0]) + x_offset, int(origin[1]) + y_offset) + #print(position) + self.matrix.itemset(position, True) + y_offset += 1 + x_offset += 1 + + def all_points(self): + d = {} + x = int(self.origin[0]) + x_max = x + int(self.size[0]) + y_max = int(self.origin[1]) + int(self.size[1]) + while x < x_max: + y = int(self.origin[1]) + while y < y_max: + d[(x,y)] = 1 + y += 1 + x += 1 + return d + + def does_overlap(self, other): + other_start = other.vertices()[0] + other_end = other.vertices()[3] + # If any vertice is in the area defined by the other start and end, + # the claims overlap in some way. + for v in self.vertices(): + #print("Checking if {} is inside {}, {}".format(v, other_start, other_end)) + if (v[0] >= other_start[0] and v[0] <= other_end[0]) and (v[1] >= other_start[1] and v[1] <= other_end[1]): + return True + return False + + def vertices(self): + return [ + [self.origin[0], self.origin[1]], + [self.origin[0], self.origin[1] + self.size[1]], + [self.origin[0] + self.size[0], self.origin[1]], + [self.origin[0] + self.size[0], self.origin[1] + self.size[1]] + ] + + def overlap(self, other): + return numpy.transpose(numpy.nonzero(numpy.logical_and(self.matrix, other.matrix))) + + def __str__(self): + return "#{} {},{}: {}x{}".format(self.id, int(self.origin[0]), + int(self.origin[1]), int(self.size[0]), + int(self.size[1])) + +def read_input(lines, pattern): + r = [] + for l in lines: + m = pattern.match(l) + if m is None: + print('Warning: did not match line "{}"'.format(l)) + continue + r.append( + Claim(m.group('id'), + numpy.array([m.group('origin_x'), m.group('origin_y')], dtype = int), + numpy.array([m.group('size_x'), m.group('size_y')], dtype = int) + ) + ) + return r + +if __name__ == '__main__': + p = re.compile('^#(?P\d+) @ (?P\d+),(?P\d+): (?P\d+)x(?P\d+)') + lines = sys.stdin.readlines() + claims = read_input(lines, p) + print("{} claims".format(len(claims))) + other_claims = claims.copy() + checked = 0 + check_count = len(claims) * ((len(claims)-1)/2) + overlapping_points = set() + single_points = set() + counter = collections.Counter() + claimPoints = {} + for claim in claims: + #print(claim.all_points()) + p = set(claim.all_points()) + claimPoints[claim] = p + counter.update(p) + for k, v in counter.items(): + if v >= 2: + overlapping_points.add(k) + else: + single_points.add(k) + print("{} overlapping points, {} single points".format(len(overlapping_points), len(single_points))) + potential_claims = set() + for claim in claims: + pts = claimPoints[claim].intersection(overlapping_points) + print("{}: {} intersecting points".format(claim, len(pts))) + if len(pts) == 0: + potential_claims.add(claim) + for c in potential_claims: + print(c) + #overlaps = {} + #for claim in claims: + # other_claims.remove(claim) + # if claim in overlaps.keys(): + # continue + # for other in other_claims: + # if claim in overlaps.keys(): + # break + # if other in overlaps.keys(): + # continue + # print("Checking {} vs {} ({} current overlaps)".format(claim, other, len(overlaps.keys()))) + # if numpy.any(claim.overlap(other)): + # if claim in overlaps: + # overlaps[claim].append(other) + # else: + # overlaps[claim] = [other] + # if other in overlaps: + # overlaps[other].append(claim) + # else: + # overlaps[other] = [claim] + #for claim in claims: + # if claim not in overlaps.keys(): + # print(claim) + # #unOverlapped = [x for x in claims and x not in overlaps.keys()] + # #print(unOverlapped) diff --git a/3/input b/3/input new file mode 100644 index 0000000..6fe5345 --- /dev/null +++ b/3/input @@ -0,0 +1,1335 @@ +#1 @ 100,366: 24x27 +#2 @ 726,271: 11x15 +#3 @ 343,814: 17x18 +#4 @ 184,299: 27x11 +#5 @ 278,205: 18x15 +#6 @ 286,803: 15x24 +#7 @ 947,956: 5x10 +#8 @ 869,850: 17x19 +#9 @ 313,89: 15x12 +#10 @ 775,764: 22x28 +#11 @ 953,224: 15x19 +#12 @ 306,705: 26x20 +#13 @ 288,876: 18x16 +#14 @ 86,820: 17x16 +#15 @ 379,253: 17x29 +#16 @ 135,841: 27x24 +#17 @ 536,873: 23x27 +#18 @ 883,876: 15x23 +#19 @ 136,677: 12x23 +#20 @ 9,945: 23x27 +#21 @ 417,131: 18x23 +#22 @ 65,224: 11x14 +#23 @ 551,33: 29x14 +#24 @ 54,924: 28x16 +#25 @ 962,53: 20x25 +#26 @ 947,339: 14x18 +#27 @ 745,115: 23x15 +#28 @ 81,311: 10x22 +#29 @ 224,827: 24x23 +#30 @ 657,805: 19x17 +#31 @ 296,504: 22x17 +#32 @ 837,645: 22x27 +#33 @ 534,370: 19x16 +#34 @ 302,357: 20x24 +#35 @ 131,941: 18x10 +#36 @ 491,968: 17x23 +#37 @ 635,72: 28x24 +#38 @ 322,35: 11x8 +#39 @ 313,901: 15x19 +#40 @ 274,217: 20x10 +#41 @ 635,475: 28x21 +#42 @ 586,265: 12x24 +#43 @ 60,143: 21x23 +#44 @ 360,30: 12x12 +#45 @ 418,890: 14x28 +#46 @ 961,558: 28x25 +#47 @ 563,973: 24x16 +#48 @ 787,656: 19x25 +#49 @ 262,28: 24x10 +#50 @ 384,4: 14x26 +#51 @ 274,772: 12x17 +#52 @ 263,697: 18x23 +#53 @ 409,166: 15x12 +#54 @ 433,538: 25x16 +#55 @ 337,300: 24x28 +#56 @ 111,297: 18x6 +#57 @ 830,51: 11x10 +#58 @ 201,205: 16x18 +#59 @ 117,317: 16x16 +#60 @ 543,65: 29x27 +#61 @ 752,487: 25x23 +#62 @ 878,852: 17x25 +#63 @ 119,639: 23x16 +#64 @ 401,160: 20x12 +#65 @ 11,457: 14x15 +#66 @ 937,493: 20x18 +#67 @ 49,208: 25x17 +#68 @ 249,86: 11x13 +#69 @ 887,133: 28x23 +#70 @ 789,151: 27x21 +#71 @ 50,780: 18x23 +#72 @ 968,838: 23x10 +#73 @ 153,821: 21x29 +#74 @ 658,402: 26x10 +#75 @ 389,589: 28x13 +#76 @ 871,438: 11x25 +#77 @ 880,650: 12x19 +#78 @ 242,958: 22x16 +#79 @ 174,563: 17x19 +#80 @ 546,971: 29x16 +#81 @ 78,156: 26x29 +#82 @ 124,552: 22x20 +#83 @ 628,222: 24x29 +#84 @ 20,266: 15x29 +#85 @ 105,317: 28x23 +#86 @ 260,639: 10x11 +#87 @ 606,383: 10x26 +#88 @ 932,194: 22x26 +#89 @ 82,37: 20x11 +#90 @ 609,70: 15x18 +#91 @ 574,651: 26x11 +#92 @ 628,199: 19x27 +#93 @ 304,24: 21x14 +#94 @ 375,16: 15x14 +#95 @ 218,137: 23x28 +#96 @ 373,599: 28x18 +#97 @ 522,77: 29x12 +#98 @ 365,126: 29x28 +#99 @ 887,463: 13x22 +#100 @ 872,51: 7x4 +#101 @ 492,593: 15x10 +#102 @ 394,818: 10x14 +#103 @ 602,721: 10x29 +#104 @ 713,122: 14x20 +#105 @ 779,740: 15x25 +#106 @ 965,841: 16x12 +#107 @ 667,331: 26x12 +#108 @ 769,356: 22x13 +#109 @ 312,48: 26x15 +#110 @ 931,972: 19x19 +#111 @ 32,962: 16x11 +#112 @ 592,281: 10x14 +#113 @ 896,745: 17x23 +#114 @ 352,590: 28x11 +#115 @ 60,551: 25x14 +#116 @ 173,348: 21x14 +#117 @ 117,920: 10x19 +#118 @ 849,90: 21x17 +#119 @ 285,434: 27x11 +#120 @ 219,361: 16x29 +#121 @ 261,53: 13x22 +#122 @ 538,690: 26x13 +#123 @ 883,646: 28x15 +#124 @ 109,542: 25x21 +#125 @ 727,255: 29x17 +#126 @ 532,792: 16x21 +#127 @ 692,911: 14x21 +#128 @ 678,172: 24x15 +#129 @ 613,496: 14x29 +#130 @ 338,326: 14x26 +#131 @ 778,516: 26x28 +#132 @ 589,559: 10x11 +#133 @ 961,455: 29x10 +#134 @ 57,25: 14x29 +#135 @ 210,88: 15x27 +#136 @ 150,849: 16x17 +#137 @ 954,532: 19x12 +#138 @ 655,230: 13x26 +#139 @ 879,648: 13x15 +#140 @ 145,174: 26x19 +#141 @ 88,184: 28x25 +#142 @ 67,545: 14x16 +#143 @ 431,73: 15x16 +#144 @ 695,411: 27x25 +#145 @ 704,875: 12x13 +#146 @ 123,218: 24x24 +#147 @ 877,668: 23x15 +#148 @ 373,123: 28x29 +#149 @ 459,254: 14x18 +#150 @ 346,683: 27x18 +#151 @ 415,779: 18x12 +#152 @ 320,880: 15x13 +#153 @ 979,204: 19x26 +#154 @ 827,570: 25x24 +#155 @ 860,810: 22x21 +#156 @ 31,190: 5x16 +#157 @ 870,49: 14x22 +#158 @ 404,422: 22x23 +#159 @ 141,181: 17x28 +#160 @ 328,411: 29x11 +#161 @ 1,668: 14x13 +#162 @ 552,149: 15x25 +#163 @ 703,849: 21x16 +#164 @ 9,965: 11x22 +#165 @ 281,727: 20x29 +#166 @ 361,358: 13x18 +#167 @ 752,672: 3x6 +#168 @ 477,458: 17x21 +#169 @ 164,775: 29x20 +#170 @ 905,767: 29x27 +#171 @ 554,403: 26x24 +#172 @ 857,34: 16x23 +#173 @ 624,775: 17x22 +#174 @ 349,841: 12x22 +#175 @ 793,264: 15x17 +#176 @ 378,121: 20x10 +#177 @ 600,122: 27x27 +#178 @ 622,940: 27x20 +#179 @ 424,783: 10x24 +#180 @ 884,478: 14x26 +#181 @ 580,240: 10x27 +#182 @ 499,566: 25x29 +#183 @ 32,878: 22x25 +#184 @ 356,518: 17x28 +#185 @ 946,456: 13x16 +#186 @ 431,224: 26x16 +#187 @ 266,72: 27x15 +#188 @ 447,425: 12x11 +#189 @ 520,372: 29x24 +#190 @ 435,656: 28x28 +#191 @ 711,766: 27x29 +#192 @ 402,617: 23x18 +#193 @ 15,64: 13x18 +#194 @ 968,170: 10x20 +#195 @ 310,30: 10x15 +#196 @ 623,19: 28x20 +#197 @ 841,357: 25x29 +#198 @ 165,328: 29x22 +#199 @ 750,950: 23x25 +#200 @ 38,644: 8x9 +#201 @ 432,675: 18x26 +#202 @ 158,350: 6x4 +#203 @ 397,972: 13x11 +#204 @ 402,295: 17x23 +#205 @ 969,18: 18x20 +#206 @ 77,304: 14x12 +#207 @ 221,36: 14x27 +#208 @ 640,98: 16x21 +#209 @ 540,163: 25x15 +#210 @ 647,301: 22x14 +#211 @ 326,229: 12x18 +#212 @ 641,835: 24x27 +#213 @ 124,246: 17x19 +#214 @ 601,575: 24x22 +#215 @ 52,132: 27x21 +#216 @ 507,909: 10x10 +#217 @ 464,772: 17x17 +#218 @ 388,336: 21x24 +#219 @ 589,226: 29x29 +#220 @ 924,26: 26x21 +#221 @ 623,427: 25x26 +#222 @ 800,646: 18x13 +#223 @ 542,490: 11x28 +#224 @ 848,372: 22x29 +#225 @ 198,509: 16x6 +#226 @ 317,751: 26x16 +#227 @ 0,944: 24x25 +#228 @ 109,870: 15x17 +#229 @ 687,878: 20x15 +#230 @ 905,844: 28x25 +#231 @ 111,719: 19x10 +#232 @ 699,629: 24x16 +#233 @ 178,906: 11x19 +#234 @ 326,765: 17x17 +#235 @ 617,858: 10x14 +#236 @ 790,701: 4x15 +#237 @ 567,627: 14x25 +#238 @ 209,2: 11x13 +#239 @ 603,852: 20x22 +#240 @ 461,428: 25x19 +#241 @ 442,431: 22x17 +#242 @ 253,22: 17x11 +#243 @ 580,202: 13x25 +#244 @ 586,900: 14x18 +#245 @ 35,633: 10x19 +#246 @ 268,18: 22x25 +#247 @ 35,221: 19x17 +#248 @ 519,206: 17x22 +#249 @ 635,851: 8x6 +#250 @ 230,168: 19x25 +#251 @ 495,240: 10x22 +#252 @ 874,441: 29x29 +#253 @ 485,83: 23x25 +#254 @ 680,14: 13x14 +#255 @ 659,944: 13x13 +#256 @ 560,215: 14x17 +#257 @ 640,667: 17x28 +#258 @ 642,594: 25x11 +#259 @ 326,602: 17x22 +#260 @ 892,654: 15x26 +#261 @ 209,850: 27x22 +#262 @ 372,138: 15x24 +#263 @ 526,706: 21x27 +#264 @ 510,811: 29x16 +#265 @ 818,693: 13x21 +#266 @ 596,289: 18x18 +#267 @ 296,92: 27x17 +#268 @ 549,225: 22x28 +#269 @ 34,4: 28x21 +#270 @ 687,18: 28x22 +#271 @ 160,946: 25x16 +#272 @ 406,123: 11x19 +#273 @ 355,819: 24x24 +#274 @ 838,171: 23x16 +#275 @ 46,392: 14x16 +#276 @ 793,637: 25x15 +#277 @ 714,264: 10x28 +#278 @ 426,917: 25x27 +#279 @ 594,53: 19x27 +#280 @ 226,188: 13x16 +#281 @ 732,758: 27x10 +#282 @ 539,971: 22x17 +#283 @ 799,529: 12x17 +#284 @ 492,628: 12x11 +#285 @ 766,895: 17x24 +#286 @ 29,250: 12x25 +#287 @ 452,745: 16x13 +#288 @ 961,389: 29x11 +#289 @ 717,862: 17x27 +#290 @ 944,786: 11x26 +#291 @ 892,537: 29x24 +#292 @ 50,985: 24x12 +#293 @ 9,439: 18x17 +#294 @ 600,718: 28x14 +#295 @ 359,370: 18x21 +#296 @ 870,447: 20x25 +#297 @ 675,862: 16x29 +#298 @ 878,883: 22x29 +#299 @ 316,30: 22x18 +#300 @ 139,227: 13x25 +#301 @ 921,918: 21x15 +#302 @ 745,844: 17x10 +#303 @ 696,749: 21x16 +#304 @ 721,494: 23x22 +#305 @ 63,646: 11x12 +#306 @ 755,228: 17x15 +#307 @ 653,123: 10x26 +#308 @ 341,549: 22x12 +#309 @ 5,398: 14x22 +#310 @ 407,930: 27x12 +#311 @ 886,469: 22x23 +#312 @ 333,957: 25x16 +#313 @ 560,616: 27x21 +#314 @ 329,829: 16x28 +#315 @ 22,437: 20x14 +#316 @ 618,707: 23x28 +#317 @ 980,974: 10x10 +#318 @ 416,781: 12x22 +#319 @ 762,967: 18x14 +#320 @ 36,338: 21x16 +#321 @ 721,4: 19x20 +#322 @ 912,907: 28x20 +#323 @ 277,23: 25x14 +#324 @ 617,94: 26x17 +#325 @ 725,276: 23x29 +#326 @ 839,881: 17x28 +#327 @ 646,302: 28x13 +#328 @ 932,227: 22x27 +#329 @ 358,660: 29x11 +#330 @ 923,714: 17x22 +#331 @ 916,777: 29x21 +#332 @ 163,312: 29x22 +#333 @ 970,162: 10x16 +#334 @ 980,639: 19x18 +#335 @ 570,705: 20x27 +#336 @ 153,536: 19x16 +#337 @ 519,680: 27x16 +#338 @ 959,924: 15x16 +#339 @ 86,152: 26x28 +#340 @ 764,355: 18x21 +#341 @ 183,725: 13x26 +#342 @ 769,181: 11x23 +#343 @ 893,631: 13x26 +#344 @ 232,280: 24x10 +#345 @ 508,928: 28x16 +#346 @ 848,969: 21x11 +#347 @ 640,841: 23x10 +#348 @ 390,618: 29x22 +#349 @ 601,682: 28x11 +#350 @ 26,200: 24x18 +#351 @ 667,499: 12x17 +#352 @ 860,668: 18x12 +#353 @ 725,468: 10x29 +#354 @ 770,379: 11x23 +#355 @ 585,210: 24x25 +#356 @ 580,634: 29x18 +#357 @ 553,376: 29x19 +#358 @ 694,925: 23x13 +#359 @ 96,310: 28x21 +#360 @ 847,622: 24x16 +#361 @ 45,124: 18x12 +#362 @ 671,798: 27x25 +#363 @ 583,887: 24x27 +#364 @ 13,471: 16x13 +#365 @ 250,567: 22x12 +#366 @ 578,720: 21x21 +#367 @ 547,225: 28x18 +#368 @ 480,86: 28x11 +#369 @ 469,766: 23x15 +#370 @ 391,286: 13x14 +#371 @ 415,526: 17x29 +#372 @ 839,238: 17x14 +#373 @ 535,509: 15x29 +#374 @ 409,884: 15x26 +#375 @ 502,789: 12x20 +#376 @ 477,754: 14x16 +#377 @ 557,453: 20x10 +#378 @ 807,963: 28x24 +#379 @ 885,819: 14x28 +#380 @ 592,342: 15x20 +#381 @ 684,596: 24x24 +#382 @ 77,332: 14x23 +#383 @ 649,917: 19x21 +#384 @ 415,920: 12x29 +#385 @ 835,188: 21x19 +#386 @ 422,588: 17x19 +#387 @ 8,874: 27x16 +#388 @ 161,709: 20x17 +#389 @ 47,653: 24x13 +#390 @ 844,652: 21x19 +#391 @ 642,800: 28x18 +#392 @ 528,314: 11x19 +#393 @ 328,164: 12x17 +#394 @ 515,792: 22x28 +#395 @ 881,771: 25x13 +#396 @ 187,337: 23x20 +#397 @ 341,679: 28x10 +#398 @ 338,149: 13x16 +#399 @ 174,8: 17x10 +#400 @ 211,483: 28x29 +#401 @ 427,324: 4x4 +#402 @ 643,137: 25x14 +#403 @ 273,688: 14x16 +#404 @ 402,532: 18x24 +#405 @ 333,541: 25x18 +#406 @ 354,326: 23x12 +#407 @ 216,819: 16x10 +#408 @ 449,675: 26x11 +#409 @ 94,91: 12x21 +#410 @ 608,957: 21x15 +#411 @ 187,244: 17x23 +#412 @ 849,165: 20x29 +#413 @ 325,536: 29x11 +#414 @ 453,271: 12x23 +#415 @ 266,699: 6x11 +#416 @ 268,248: 29x21 +#417 @ 705,29: 11x13 +#418 @ 926,192: 23x22 +#419 @ 844,850: 26x10 +#420 @ 100,479: 25x18 +#421 @ 527,895: 26x11 +#422 @ 406,677: 17x22 +#423 @ 375,285: 27x13 +#424 @ 970,639: 24x16 +#425 @ 161,714: 24x28 +#426 @ 26,452: 18x24 +#427 @ 258,291: 3x23 +#428 @ 774,698: 17x11 +#429 @ 138,423: 17x12 +#430 @ 658,240: 21x25 +#431 @ 272,711: 21x23 +#432 @ 436,668: 25x11 +#433 @ 113,25: 12x19 +#434 @ 966,632: 11x29 +#435 @ 424,321: 12x16 +#436 @ 367,554: 29x22 +#437 @ 872,779: 10x17 +#438 @ 531,708: 9x8 +#439 @ 584,648: 28x10 +#440 @ 894,377: 25x22 +#441 @ 528,423: 26x10 +#442 @ 770,803: 10x29 +#443 @ 63,984: 16x14 +#444 @ 823,706: 12x13 +#445 @ 257,640: 15x16 +#446 @ 787,921: 20x24 +#447 @ 406,623: 27x15 +#448 @ 728,493: 21x25 +#449 @ 770,619: 18x16 +#450 @ 597,721: 26x22 +#451 @ 222,197: 13x11 +#452 @ 702,590: 28x13 +#453 @ 25,132: 19x26 +#454 @ 294,795: 23x17 +#455 @ 899,638: 16x18 +#456 @ 613,789: 18x14 +#457 @ 491,862: 29x12 +#458 @ 625,42: 17x18 +#459 @ 2,188: 17x26 +#460 @ 598,838: 10x18 +#461 @ 426,236: 28x18 +#462 @ 136,176: 12x25 +#463 @ 217,138: 21x12 +#464 @ 212,151: 19x17 +#465 @ 202,358: 12x17 +#466 @ 807,622: 17x28 +#467 @ 831,15: 10x23 +#468 @ 117,604: 12x25 +#469 @ 427,539: 16x13 +#470 @ 405,354: 19x24 +#471 @ 845,963: 22x26 +#472 @ 143,222: 21x23 +#473 @ 700,879: 19x12 +#474 @ 776,45: 25x28 +#475 @ 929,25: 22x12 +#476 @ 770,802: 28x29 +#477 @ 398,805: 26x27 +#478 @ 739,224: 19x11 +#479 @ 37,361: 12x15 +#480 @ 779,494: 17x27 +#481 @ 724,217: 20x20 +#482 @ 2,96: 18x20 +#483 @ 642,338: 29x21 +#484 @ 514,842: 26x19 +#485 @ 759,238: 16x25 +#486 @ 469,366: 13x15 +#487 @ 228,935: 20x22 +#488 @ 810,373: 19x23 +#489 @ 268,90: 17x15 +#490 @ 356,367: 4x7 +#491 @ 966,209: 22x21 +#492 @ 93,77: 17x27 +#493 @ 249,948: 22x17 +#494 @ 760,915: 11x21 +#495 @ 294,31: 17x26 +#496 @ 793,647: 15x19 +#497 @ 82,64: 16x27 +#498 @ 681,114: 20x25 +#499 @ 646,439: 28x10 +#500 @ 888,511: 16x11 +#501 @ 766,414: 28x11 +#502 @ 701,529: 14x18 +#503 @ 255,289: 11x28 +#504 @ 632,835: 18x26 +#505 @ 776,744: 24x18 +#506 @ 558,855: 23x21 +#507 @ 384,18: 26x29 +#508 @ 133,688: 11x15 +#509 @ 146,511: 20x27 +#510 @ 203,852: 16x27 +#511 @ 36,635: 13x22 +#512 @ 106,702: 10x19 +#513 @ 180,328: 15x28 +#514 @ 882,943: 22x19 +#515 @ 445,249: 27x21 +#516 @ 47,793: 23x15 +#517 @ 711,28: 12x27 +#518 @ 822,60: 21x13 +#519 @ 475,471: 28x20 +#520 @ 127,948: 15x24 +#521 @ 73,777: 26x23 +#522 @ 581,39: 17x16 +#523 @ 872,430: 11x21 +#524 @ 16,938: 24x16 +#525 @ 727,819: 15x28 +#526 @ 732,315: 20x14 +#527 @ 299,837: 27x12 +#528 @ 547,490: 10x15 +#529 @ 953,208: 29x26 +#530 @ 211,193: 27x29 +#531 @ 176,306: 17x26 +#532 @ 839,69: 29x11 +#533 @ 239,5: 29x20 +#534 @ 692,416: 14x12 +#535 @ 430,123: 14x24 +#536 @ 476,588: 17x16 +#537 @ 173,840: 21x11 +#538 @ 194,77: 19x18 +#539 @ 361,746: 13x26 +#540 @ 405,604: 15x22 +#541 @ 240,139: 16x18 +#542 @ 879,629: 29x23 +#543 @ 353,166: 16x13 +#544 @ 41,654: 22x23 +#545 @ 956,141: 13x16 +#546 @ 536,454: 26x26 +#547 @ 371,752: 16x21 +#548 @ 389,414: 19x28 +#549 @ 157,298: 21x11 +#550 @ 797,965: 26x27 +#551 @ 470,164: 15x24 +#552 @ 935,209: 12x16 +#553 @ 391,578: 25x20 +#554 @ 669,430: 13x26 +#555 @ 387,553: 24x23 +#556 @ 602,785: 29x26 +#557 @ 908,971: 21x11 +#558 @ 879,807: 24x22 +#559 @ 50,972: 13x20 +#560 @ 111,265: 26x14 +#561 @ 112,973: 14x15 +#562 @ 156,518: 14x11 +#563 @ 342,690: 19x16 +#564 @ 152,676: 21x10 +#565 @ 953,929: 10x10 +#566 @ 895,277: 24x23 +#567 @ 106,461: 17x27 +#568 @ 890,550: 18x24 +#569 @ 428,230: 19x13 +#570 @ 401,104: 24x21 +#571 @ 574,519: 17x11 +#572 @ 833,240: 27x27 +#573 @ 612,208: 29x24 +#574 @ 554,560: 25x24 +#575 @ 882,858: 24x11 +#576 @ 890,844: 11x12 +#577 @ 200,409: 16x28 +#578 @ 18,295: 13x22 +#579 @ 163,259: 25x26 +#580 @ 18,429: 16x26 +#581 @ 840,626: 13x10 +#582 @ 798,804: 20x24 +#583 @ 48,295: 20x18 +#584 @ 194,43: 16x11 +#585 @ 969,271: 27x16 +#586 @ 245,156: 16x13 +#587 @ 45,45: 20x29 +#588 @ 75,782: 25x24 +#589 @ 87,78: 12x24 +#590 @ 829,197: 12x14 +#591 @ 83,23: 23x12 +#592 @ 121,160: 21x13 +#593 @ 943,951: 18x21 +#594 @ 425,69: 28x17 +#595 @ 704,459: 11x18 +#596 @ 703,492: 25x20 +#597 @ 588,563: 13x10 +#598 @ 287,434: 11x10 +#599 @ 763,360: 16x26 +#600 @ 258,215: 19x11 +#601 @ 19,25: 20x29 +#602 @ 295,648: 21x20 +#603 @ 749,763: 13x24 +#604 @ 192,565: 24x22 +#605 @ 44,637: 20x25 +#606 @ 740,281: 27x13 +#607 @ 179,699: 23x26 +#608 @ 244,592: 29x12 +#609 @ 464,822: 27x20 +#610 @ 935,154: 21x20 +#611 @ 283,237: 24x20 +#612 @ 391,624: 25x12 +#613 @ 577,522: 15x19 +#614 @ 720,675: 22x21 +#615 @ 241,283: 10x26 +#616 @ 675,241: 16x13 +#617 @ 576,351: 23x27 +#618 @ 156,889: 26x16 +#619 @ 325,755: 22x15 +#620 @ 528,539: 18x24 +#621 @ 540,430: 26x17 +#622 @ 710,543: 16x10 +#623 @ 975,849: 24x20 +#624 @ 492,102: 15x17 +#625 @ 255,561: 18x20 +#626 @ 717,266: 3x21 +#627 @ 259,89: 26x24 +#628 @ 557,405: 27x24 +#629 @ 681,18: 22x13 +#630 @ 158,303: 15x21 +#631 @ 748,264: 21x28 +#632 @ 853,630: 21x18 +#633 @ 692,629: 10x25 +#634 @ 158,282: 15x24 +#635 @ 211,864: 22x21 +#636 @ 872,427: 19x19 +#637 @ 14,110: 14x21 +#638 @ 790,689: 22x13 +#639 @ 747,258: 10x23 +#640 @ 753,485: 21x26 +#641 @ 5,307: 16x15 +#642 @ 664,219: 23x20 +#643 @ 276,832: 22x18 +#644 @ 343,674: 14x19 +#645 @ 414,461: 29x26 +#646 @ 525,679: 20x10 +#647 @ 841,874: 26x22 +#648 @ 163,222: 23x10 +#649 @ 336,613: 17x23 +#650 @ 499,623: 27x12 +#651 @ 596,615: 13x16 +#652 @ 875,356: 20x19 +#653 @ 783,509: 5x7 +#654 @ 874,663: 13x17 +#655 @ 554,802: 24x16 +#656 @ 105,537: 11x14 +#657 @ 449,98: 22x26 +#658 @ 160,926: 13x25 +#659 @ 759,686: 26x29 +#660 @ 3,503: 23x24 +#661 @ 190,841: 12x19 +#662 @ 596,603: 27x29 +#663 @ 46,709: 13x19 +#664 @ 687,630: 26x28 +#665 @ 693,250: 16x29 +#666 @ 162,707: 27x19 +#667 @ 188,12: 25x12 +#668 @ 370,752: 22x26 +#669 @ 495,864: 8x5 +#670 @ 740,285: 19x19 +#671 @ 376,796: 26x18 +#672 @ 699,232: 21x23 +#673 @ 6,746: 13x27 +#674 @ 612,247: 20x13 +#675 @ 397,198: 23x15 +#676 @ 498,145: 4x18 +#677 @ 624,437: 24x11 +#678 @ 466,732: 24x10 +#679 @ 400,135: 26x12 +#680 @ 498,249: 10x16 +#681 @ 271,717: 13x21 +#682 @ 140,255: 12x27 +#683 @ 114,689: 27x28 +#684 @ 645,301: 26x23 +#685 @ 29,977: 23x13 +#686 @ 471,792: 17x20 +#687 @ 683,554: 15x17 +#688 @ 275,780: 18x18 +#689 @ 624,309: 19x10 +#690 @ 217,841: 10x29 +#691 @ 619,354: 29x11 +#692 @ 168,318: 12x13 +#693 @ 688,945: 13x15 +#694 @ 757,559: 12x16 +#695 @ 898,876: 20x29 +#696 @ 231,410: 14x13 +#697 @ 822,925: 16x16 +#698 @ 496,140: 10x28 +#699 @ 156,538: 3x11 +#700 @ 639,308: 18x29 +#701 @ 577,21: 16x15 +#702 @ 360,581: 21x21 +#703 @ 352,371: 10x14 +#704 @ 906,159: 24x10 +#705 @ 948,152: 16x15 +#706 @ 568,349: 12x14 +#707 @ 528,498: 29x23 +#708 @ 391,101: 16x12 +#709 @ 158,853: 29x13 +#710 @ 912,562: 24x29 +#711 @ 774,349: 19x21 +#712 @ 750,120: 28x11 +#713 @ 192,566: 10x10 +#714 @ 101,148: 10x29 +#715 @ 524,531: 22x27 +#716 @ 857,97: 28x29 +#717 @ 826,159: 22x11 +#718 @ 959,22: 17x14 +#719 @ 521,670: 28x23 +#720 @ 103,368: 16x20 +#721 @ 525,312: 23x28 +#722 @ 942,393: 25x15 +#723 @ 274,395: 24x14 +#724 @ 830,598: 22x12 +#725 @ 162,391: 22x25 +#726 @ 319,320: 21x20 +#727 @ 708,845: 10x24 +#728 @ 53,147: 29x27 +#729 @ 712,315: 16x12 +#730 @ 396,641: 29x11 +#731 @ 244,498: 26x28 +#732 @ 950,309: 26x11 +#733 @ 365,33: 3x3 +#734 @ 76,97: 12x23 +#735 @ 943,957: 21x21 +#736 @ 335,110: 11x19 +#737 @ 345,163: 10x11 +#738 @ 340,682: 12x17 +#739 @ 521,630: 19x11 +#740 @ 592,302: 14x24 +#741 @ 101,866: 11x21 +#742 @ 932,577: 17x17 +#743 @ 830,533: 23x29 +#744 @ 756,169: 23x12 +#745 @ 158,940: 12x19 +#746 @ 410,550: 24x26 +#747 @ 782,685: 14x13 +#748 @ 488,466: 22x10 +#749 @ 173,16: 17x25 +#750 @ 658,94: 28x28 +#751 @ 160,951: 7x3 +#752 @ 769,835: 17x14 +#753 @ 598,331: 22x15 +#754 @ 196,48: 18x22 +#755 @ 404,679: 19x12 +#756 @ 880,133: 17x24 +#757 @ 749,717: 11x28 +#758 @ 667,790: 13x26 +#759 @ 740,164: 27x28 +#760 @ 691,622: 22x23 +#761 @ 688,716: 28x18 +#762 @ 597,399: 18x13 +#763 @ 483,111: 18x24 +#764 @ 135,148: 10x29 +#765 @ 559,438: 29x23 +#766 @ 291,78: 16x28 +#767 @ 107,544: 24x29 +#768 @ 391,685: 29x21 +#769 @ 901,760: 21x10 +#770 @ 489,80: 17x25 +#771 @ 871,799: 15x18 +#772 @ 916,580: 17x28 +#773 @ 281,513: 25x29 +#774 @ 340,761: 23x21 +#775 @ 58,714: 13x23 +#776 @ 658,246: 16x28 +#777 @ 363,2: 19x23 +#778 @ 652,802: 12x11 +#779 @ 501,937: 19x18 +#780 @ 387,694: 27x21 +#781 @ 705,868: 24x24 +#782 @ 304,85: 26x18 +#783 @ 765,369: 10x10 +#784 @ 608,797: 10x27 +#785 @ 150,281: 20x22 +#786 @ 32,972: 23x21 +#787 @ 550,361: 20x23 +#788 @ 639,93: 10x21 +#789 @ 584,21: 27x27 +#790 @ 625,193: 22x25 +#791 @ 725,962: 24x28 +#792 @ 122,563: 18x20 +#793 @ 505,568: 15x22 +#794 @ 725,676: 16x26 +#795 @ 281,186: 13x10 +#796 @ 734,381: 24x27 +#797 @ 973,454: 12x22 +#798 @ 161,837: 26x11 +#799 @ 881,893: 22x14 +#800 @ 592,887: 27x14 +#801 @ 436,595: 25x19 +#802 @ 177,560: 21x21 +#803 @ 761,555: 26x19 +#804 @ 470,105: 22x11 +#805 @ 90,39: 7x5 +#806 @ 728,868: 16x18 +#807 @ 558,342: 18x26 +#808 @ 472,278: 21x15 +#809 @ 924,337: 27x11 +#810 @ 599,429: 10x21 +#811 @ 731,816: 12x17 +#812 @ 860,193: 19x13 +#813 @ 3,27: 26x24 +#814 @ 288,844: 11x16 +#815 @ 503,631: 25x15 +#816 @ 713,764: 18x25 +#817 @ 581,612: 23x11 +#818 @ 888,228: 16x22 +#819 @ 983,269: 16x21 +#820 @ 585,673: 21x27 +#821 @ 320,893: 29x19 +#822 @ 583,898: 15x18 +#823 @ 382,741: 24x20 +#824 @ 464,339: 25x26 +#825 @ 245,920: 26x27 +#826 @ 726,234: 14x20 +#827 @ 923,465: 15x17 +#828 @ 382,547: 24x14 +#829 @ 850,863: 20x23 +#830 @ 779,791: 17x19 +#831 @ 784,533: 14x20 +#832 @ 732,276: 16x17 +#833 @ 450,780: 3x6 +#834 @ 696,337: 21x14 +#835 @ 181,623: 29x19 +#836 @ 210,312: 27x12 +#837 @ 671,954: 15x25 +#838 @ 696,951: 20x27 +#839 @ 381,680: 18x24 +#840 @ 632,192: 10x17 +#841 @ 877,789: 21x21 +#842 @ 877,469: 24x26 +#843 @ 553,970: 19x14 +#844 @ 745,658: 13x28 +#845 @ 773,974: 10x17 +#846 @ 877,462: 15x23 +#847 @ 965,319: 20x15 +#848 @ 112,921: 17x22 +#849 @ 754,358: 10x27 +#850 @ 9,678: 13x15 +#851 @ 545,931: 27x16 +#852 @ 368,373: 25x21 +#853 @ 175,789: 26x28 +#854 @ 775,363: 22x28 +#855 @ 44,9: 14x15 +#856 @ 676,400: 16x14 +#857 @ 802,818: 28x25 +#858 @ 969,865: 17x21 +#859 @ 376,624: 21x27 +#860 @ 406,197: 28x21 +#861 @ 461,367: 27x17 +#862 @ 145,347: 24x15 +#863 @ 695,886: 15x16 +#864 @ 230,154: 17x21 +#865 @ 22,193: 10x27 +#866 @ 1,206: 20x27 +#867 @ 630,892: 25x24 +#868 @ 133,404: 18x22 +#869 @ 93,876: 14x19 +#870 @ 313,719: 11x18 +#871 @ 11,116: 16x28 +#872 @ 179,696: 18x23 +#873 @ 830,161: 10x6 +#874 @ 421,906: 26x20 +#875 @ 612,600: 12x13 +#876 @ 794,882: 21x23 +#877 @ 599,794: 13x21 +#878 @ 138,506: 25x25 +#879 @ 666,240: 19x16 +#880 @ 945,261: 26x19 +#881 @ 353,799: 29x25 +#882 @ 41,156: 20x22 +#883 @ 283,672: 16x25 +#884 @ 733,952: 22x24 +#885 @ 786,410: 14x14 +#886 @ 676,511: 11x26 +#887 @ 445,589: 21x10 +#888 @ 144,221: 15x15 +#889 @ 55,775: 20x26 +#890 @ 333,279: 21x14 +#891 @ 891,940: 18x13 +#892 @ 615,581: 10x16 +#893 @ 826,581: 15x21 +#894 @ 848,307: 27x26 +#895 @ 502,805: 18x23 +#896 @ 620,24: 12x26 +#897 @ 395,573: 28x20 +#898 @ 184,250: 10x18 +#899 @ 282,208: 4x8 +#900 @ 918,471: 24x18 +#901 @ 5,101: 26x15 +#902 @ 73,435: 13x19 +#903 @ 523,288: 13x24 +#904 @ 695,551: 17x23 +#905 @ 486,968: 24x27 +#906 @ 293,228: 21x20 +#907 @ 946,845: 22x12 +#908 @ 970,152: 20x27 +#909 @ 753,194: 19x23 +#910 @ 284,564: 13x26 +#911 @ 116,30: 5x5 +#912 @ 696,693: 25x16 +#913 @ 840,176: 10x15 +#914 @ 65,52: 14x28 +#915 @ 300,228: 29x26 +#916 @ 50,117: 21x13 +#917 @ 612,381: 14x19 +#918 @ 835,964: 18x24 +#919 @ 607,123: 15x21 +#920 @ 222,420: 24x17 +#921 @ 306,777: 27x20 +#922 @ 216,381: 25x10 +#923 @ 571,244: 20x12 +#924 @ 936,340: 21x20 +#925 @ 763,283: 22x27 +#926 @ 318,273: 21x13 +#927 @ 194,498: 24x23 +#928 @ 823,183: 22x11 +#929 @ 163,706: 25x13 +#930 @ 961,150: 22x27 +#931 @ 978,978: 13x17 +#932 @ 908,829: 10x19 +#933 @ 4,381: 12x24 +#934 @ 485,61: 26x15 +#935 @ 193,628: 29x14 +#936 @ 945,807: 26x14 +#937 @ 27,328: 28x12 +#938 @ 557,459: 10x19 +#939 @ 509,899: 29x20 +#940 @ 913,162: 10x12 +#941 @ 860,97: 22x14 +#942 @ 178,574: 18x26 +#943 @ 756,327: 25x24 +#944 @ 373,675: 18x25 +#945 @ 405,317: 13x15 +#946 @ 881,506: 16x17 +#947 @ 925,721: 10x21 +#948 @ 756,261: 15x24 +#949 @ 839,851: 23x13 +#950 @ 77,441: 28x29 +#951 @ 883,897: 17x3 +#952 @ 840,628: 25x22 +#953 @ 933,205: 26x29 +#954 @ 503,580: 25x26 +#955 @ 176,793: 26x10 +#956 @ 722,302: 18x20 +#957 @ 678,588: 23x15 +#958 @ 819,853: 23x25 +#959 @ 94,542: 24x27 +#960 @ 294,95: 19x23 +#961 @ 57,291: 19x15 +#962 @ 614,851: 21x11 +#963 @ 105,185: 18x16 +#964 @ 856,315: 12x24 +#965 @ 928,593: 25x12 +#966 @ 582,443: 15x11 +#967 @ 293,828: 15x22 +#968 @ 520,539: 22x12 +#969 @ 158,253: 12x28 +#970 @ 138,12: 27x11 +#971 @ 972,508: 22x29 +#972 @ 394,24: 10x12 +#973 @ 823,528: 25x17 +#974 @ 749,670: 10x11 +#975 @ 377,472: 12x13 +#976 @ 398,275: 18x27 +#977 @ 79,330: 29x27 +#978 @ 795,370: 18x16 +#979 @ 8,90: 20x18 +#980 @ 453,727: 16x28 +#981 @ 60,444: 20x28 +#982 @ 353,959: 22x19 +#983 @ 56,820: 13x24 +#984 @ 376,582: 16x18 +#985 @ 882,645: 21x17 +#986 @ 9,345: 11x22 +#987 @ 483,965: 10x17 +#988 @ 896,509: 10x25 +#989 @ 396,409: 12x29 +#990 @ 8,735: 26x12 +#991 @ 979,318: 13x22 +#992 @ 529,976: 14x17 +#993 @ 816,916: 24x19 +#994 @ 21,95: 28x29 +#995 @ 906,619: 24x19 +#996 @ 95,790: 20x15 +#997 @ 925,633: 14x22 +#998 @ 579,261: 27x23 +#999 @ 264,82: 13x18 +#1000 @ 802,959: 18x10 +#1001 @ 358,667: 29x26 +#1002 @ 294,86: 9x10 +#1003 @ 520,199: 10x23 +#1004 @ 754,836: 29x25 +#1005 @ 33,22: 28x25 +#1006 @ 509,837: 23x12 +#1007 @ 461,444: 13x23 +#1008 @ 89,349: 10x21 +#1009 @ 586,294: 20x29 +#1010 @ 453,588: 17x12 +#1011 @ 965,655: 21x23 +#1012 @ 460,241: 21x17 +#1013 @ 463,841: 20x18 +#1014 @ 78,298: 10x22 +#1015 @ 455,808: 23x26 +#1016 @ 854,653: 27x15 +#1017 @ 904,828: 18x14 +#1018 @ 445,716: 29x21 +#1019 @ 840,169: 10x23 +#1020 @ 409,178: 11x21 +#1021 @ 853,5: 22x18 +#1022 @ 527,520: 11x28 +#1023 @ 191,304: 26x19 +#1024 @ 878,651: 18x25 +#1025 @ 937,471: 24x12 +#1026 @ 716,664: 16x14 +#1027 @ 201,367: 28x18 +#1028 @ 21,66: 26x10 +#1029 @ 133,211: 14x19 +#1030 @ 505,677: 23x26 +#1031 @ 726,594: 17x21 +#1032 @ 421,338: 14x18 +#1033 @ 619,423: 17x10 +#1034 @ 751,509: 24x15 +#1035 @ 349,7: 15x10 +#1036 @ 502,105: 27x11 +#1037 @ 861,104: 28x10 +#1038 @ 963,544: 19x12 +#1039 @ 111,969: 14x26 +#1040 @ 795,808: 12x19 +#1041 @ 40,337: 28x27 +#1042 @ 219,482: 18x29 +#1043 @ 756,502: 16x28 +#1044 @ 805,648: 24x19 +#1045 @ 102,83: 27x28 +#1046 @ 656,900: 12x18 +#1047 @ 453,246: 26x15 +#1048 @ 74,772: 21x13 +#1049 @ 974,44: 13x13 +#1050 @ 563,449: 15x24 +#1051 @ 891,645: 21x21 +#1052 @ 470,745: 14x28 +#1053 @ 40,771: 27x19 +#1054 @ 648,244: 11x13 +#1055 @ 58,467: 18x18 +#1056 @ 841,652: 21x17 +#1057 @ 47,131: 24x23 +#1058 @ 706,316: 22x22 +#1059 @ 817,899: 20x14 +#1060 @ 329,383: 19x29 +#1061 @ 542,815: 20x14 +#1062 @ 959,272: 27x27 +#1063 @ 902,454: 18x26 +#1064 @ 68,11: 14x15 +#1065 @ 159,288: 17x10 +#1066 @ 460,594: 13x11 +#1067 @ 159,15: 19x24 +#1068 @ 811,911: 17x18 +#1069 @ 570,607: 10x24 +#1070 @ 525,787: 10x19 +#1071 @ 567,652: 20x15 +#1072 @ 915,766: 14x25 +#1073 @ 869,664: 14x24 +#1074 @ 829,873: 28x11 +#1075 @ 425,452: 18x10 +#1076 @ 395,259: 22x10 +#1077 @ 759,670: 29x19 +#1078 @ 148,897: 20x20 +#1079 @ 279,854: 23x26 +#1080 @ 360,801: 14x6 +#1081 @ 483,325: 11x25 +#1082 @ 728,25: 16x22 +#1083 @ 176,779: 14x15 +#1084 @ 881,762: 25x29 +#1085 @ 844,628: 10x27 +#1086 @ 931,28: 13x3 +#1087 @ 921,166: 10x22 +#1088 @ 651,59: 29x22 +#1089 @ 221,806: 16x23 +#1090 @ 935,648: 16x25 +#1091 @ 564,164: 14x28 +#1092 @ 140,491: 27x25 +#1093 @ 741,111: 25x26 +#1094 @ 29,186: 12x24 +#1095 @ 424,896: 24x28 +#1096 @ 181,334: 11x29 +#1097 @ 826,574: 16x25 +#1098 @ 496,97: 20x14 +#1099 @ 85,559: 10x20 +#1100 @ 667,590: 19x26 +#1101 @ 766,363: 17x27 +#1102 @ 943,13: 25x16 +#1103 @ 320,220: 14x29 +#1104 @ 397,784: 20x17 +#1105 @ 873,810: 26x20 +#1106 @ 881,363: 8x4 +#1107 @ 523,613: 12x29 +#1108 @ 885,623: 13x26 +#1109 @ 127,179: 19x14 +#1110 @ 137,914: 15x16 +#1111 @ 168,919: 12x23 +#1112 @ 713,785: 16x13 +#1113 @ 193,847: 17x25 +#1114 @ 498,928: 28x12 +#1115 @ 705,334: 23x12 +#1116 @ 43,646: 24x22 +#1117 @ 266,86: 26x19 +#1118 @ 45,230: 13x21 +#1119 @ 138,21: 11x18 +#1120 @ 411,941: 11x11 +#1121 @ 918,369: 27x22 +#1122 @ 40,812: 28x23 +#1123 @ 486,278: 16x18 +#1124 @ 317,361: 11x15 +#1125 @ 316,529: 22x12 +#1126 @ 744,345: 19x27 +#1127 @ 635,30: 21x14 +#1128 @ 289,649: 28x19 +#1129 @ 158,309: 26x29 +#1130 @ 177,39: 15x29 +#1131 @ 601,389: 25x23 +#1132 @ 470,260: 19x16 +#1133 @ 880,451: 3x6 +#1134 @ 47,63: 19x16 +#1135 @ 515,625: 18x29 +#1136 @ 394,213: 16x12 +#1137 @ 950,545: 22x19 +#1138 @ 437,257: 25x26 +#1139 @ 551,843: 10x20 +#1140 @ 299,862: 25x24 +#1141 @ 326,92: 13x19 +#1142 @ 916,342: 16x16 +#1143 @ 172,29: 29x26 +#1144 @ 540,252: 23x15 +#1145 @ 647,473: 22x11 +#1146 @ 123,977: 28x13 +#1147 @ 563,790: 11x17 +#1148 @ 11,496: 17x10 +#1149 @ 686,319: 22x15 +#1150 @ 749,44: 29x14 +#1151 @ 313,244: 10x25 +#1152 @ 138,534: 12x10 +#1153 @ 831,29: 12x18 +#1154 @ 765,118: 28x19 +#1155 @ 952,565: 17x21 +#1156 @ 672,461: 12x22 +#1157 @ 631,442: 21x10 +#1158 @ 287,103: 14x10 +#1159 @ 154,678: 15x3 +#1160 @ 65,939: 24x13 +#1161 @ 490,592: 23x19 +#1162 @ 64,40: 15x13 +#1163 @ 226,140: 18x19 +#1164 @ 775,806: 11x21 +#1165 @ 591,752: 10x16 +#1166 @ 144,965: 13x21 +#1167 @ 915,272: 26x23 +#1168 @ 134,207: 27x16 +#1169 @ 190,840: 21x22 +#1170 @ 565,638: 22x27 +#1171 @ 853,459: 13x27 +#1172 @ 595,425: 11x11 +#1173 @ 634,671: 25x10 +#1174 @ 710,22: 14x14 +#1175 @ 244,497: 25x11 +#1176 @ 693,450: 25x25 +#1177 @ 788,699: 13x23 +#1178 @ 935,636: 13x16 +#1179 @ 778,641: 23x28 +#1180 @ 132,227: 12x18 +#1181 @ 427,33: 14x20 +#1182 @ 306,93: 20x4 +#1183 @ 912,951: 17x27 +#1184 @ 271,397: 24x18 +#1185 @ 891,872: 18x29 +#1186 @ 748,312: 18x24 +#1187 @ 68,104: 20x28 +#1188 @ 331,314: 18x17 +#1189 @ 900,641: 24x17 +#1190 @ 705,37: 17x14 +#1191 @ 771,227: 16x18 +#1192 @ 903,171: 25x11 +#1193 @ 424,134: 11x20 +#1194 @ 658,785: 26x22 +#1195 @ 480,124: 11x19 +#1196 @ 16,960: 18x16 +#1197 @ 807,959: 26x13 +#1198 @ 382,646: 27x29 +#1199 @ 369,470: 22x24 +#1200 @ 757,836: 11x29 +#1201 @ 102,805: 20x28 +#1202 @ 290,194: 11x29 +#1203 @ 784,149: 28x27 +#1204 @ 625,246: 14x11 +#1205 @ 860,512: 22x26 +#1206 @ 913,790: 11x17 +#1207 @ 101,544: 19x14 +#1208 @ 609,795: 19x10 +#1209 @ 353,214: 19x10 +#1210 @ 107,263: 20x10 +#1211 @ 935,383: 12x28 +#1212 @ 488,53: 13x14 +#1213 @ 134,642: 28x12 +#1214 @ 140,480: 28x16 +#1215 @ 208,576: 19x14 +#1216 @ 588,879: 27x26 +#1217 @ 388,297: 15x16 +#1218 @ 886,28: 22x28 +#1219 @ 753,669: 11x21 +#1220 @ 390,549: 14x29 +#1221 @ 977,373: 17x25 +#1222 @ 484,959: 19x25 +#1223 @ 675,627: 24x13 +#1224 @ 291,721: 16x24 +#1225 @ 648,900: 25x18 +#1226 @ 877,222: 14x10 +#1227 @ 192,359: 20x16 +#1228 @ 800,274: 12x12 +#1229 @ 580,370: 13x11 +#1230 @ 623,102: 21x19 +#1231 @ 515,978: 29x10 +#1232 @ 793,212: 22x24 +#1233 @ 927,507: 21x16 +#1234 @ 340,197: 18x26 +#1235 @ 29,357: 22x14 +#1236 @ 137,848: 25x10 +#1237 @ 475,140: 23x27 +#1238 @ 203,373: 22x24 +#1239 @ 237,586: 15x16 +#1240 @ 712,721: 11x18 +#1241 @ 313,736: 13x23 +#1242 @ 561,167: 10x28 +#1243 @ 194,39: 13x20 +#1244 @ 756,932: 23x20 +#1245 @ 130,926: 27x20 +#1246 @ 115,855: 13x18 +#1247 @ 546,794: 18x26 +#1248 @ 662,461: 11x19 +#1249 @ 188,295: 13x26 +#1250 @ 204,420: 3x12 +#1251 @ 899,558: 25x15 +#1252 @ 226,823: 18x27 +#1253 @ 708,13: 26x24 +#1254 @ 695,636: 12x25 +#1255 @ 314,329: 29x16 +#1256 @ 777,888: 23x16 +#1257 @ 248,88: 20x26 +#1258 @ 753,428: 7x5 +#1259 @ 742,416: 22x29 +#1260 @ 832,53: 4x3 +#1261 @ 963,828: 26x22 +#1262 @ 63,409: 10x24 +#1263 @ 97,8: 25x20 +#1264 @ 510,296: 29x16 +#1265 @ 357,322: 12x21 +#1266 @ 332,669: 18x22 +#1267 @ 274,570: 20x10 +#1268 @ 690,174: 20x25 +#1269 @ 667,301: 19x10 +#1270 @ 922,473: 12x28 +#1271 @ 109,295: 23x11 +#1272 @ 705,134: 19x21 +#1273 @ 971,314: 16x28 +#1274 @ 484,526: 12x13 +#1275 @ 349,540: 16x20 +#1276 @ 801,537: 3x4 +#1277 @ 845,458: 12x16 +#1278 @ 639,598: 17x13 +#1279 @ 729,296: 28x28 +#1280 @ 16,354: 19x28 +#1281 @ 477,950: 26x11 +#1282 @ 859,12: 13x23 +#1283 @ 373,955: 28x24 +#1284 @ 897,855: 15x26 +#1285 @ 420,136: 21x19 +#1286 @ 43,395: 29x22 +#1287 @ 567,268: 24x13 +#1288 @ 93,707: 23x21 +#1289 @ 224,42: 20x25 +#1290 @ 312,255: 22x17 +#1291 @ 363,777: 17x23 +#1292 @ 545,536: 13x27 +#1293 @ 912,172: 25x21 +#1294 @ 9,47: 11x15 +#1295 @ 791,217: 18x10 +#1296 @ 565,230: 22x11 +#1297 @ 29,978: 28x14 +#1298 @ 391,692: 18x22 +#1299 @ 413,31: 18x15 +#1300 @ 186,724: 19x15 +#1301 @ 642,803: 18x22 +#1302 @ 766,942: 29x20 +#1303 @ 377,414: 25x11 +#1304 @ 404,329: 15x21 +#1305 @ 64,393: 16x27 +#1306 @ 578,733: 21x25 +#1307 @ 466,467: 14x16 +#1308 @ 495,523: 13x16 +#1309 @ 776,623: 21x17 +#1310 @ 349,334: 19x13 +#1311 @ 407,579: 27x23 +#1312 @ 759,728: 10x18 +#1313 @ 653,791: 15x12 +#1314 @ 162,408: 21x21 +#1315 @ 386,551: 29x10 +#1316 @ 354,365: 10x15 +#1317 @ 906,545: 27x19 +#1318 @ 865,440: 17x27 +#1319 @ 964,151: 10x12 +#1320 @ 360,653: 11x13 +#1321 @ 539,702: 15x26 +#1322 @ 883,30: 13x26 +#1323 @ 592,875: 20x25 +#1324 @ 522,935: 28x10 +#1325 @ 383,562: 28x23 +#1326 @ 886,634: 15x29 +#1327 @ 851,52: 17x15 +#1328 @ 835,953: 17x13 +#1329 @ 44,343: 6x3 +#1330 @ 85,327: 13x15 +#1331 @ 333,27: 15x24 +#1332 @ 107,608: 16x18 +#1333 @ 695,587: 18x16 +#1334 @ 435,778: 25x13 +#1335 @ 562,221: 12x16 diff --git a/4/guard.py b/4/guard.py new file mode 100755 index 0000000..6b9f28f --- /dev/null +++ b/4/guard.py @@ -0,0 +1,118 @@ +#!/usr/bin/env python3 + +import collections +import datetime +import re +import sys + +class Event: + + def __init__(self, date, event): + m = re.match('(?P\d{4})-(?P\d{2})-(?P\d{2}) (?P\d{2}):(?P\d{2})', date) + self.date = datetime.datetime(int(m.group('year')), int(m.group('month')), + int(m.group('day')), int(m.group('hour')), + int(m.group('minute'))) + self.event = event + + def __str__(self): + return "[{}] {}".format(self.date, self.event) + +class Guard: + + def __init__(self, id): + self.id = id + self.midnight_sleep = collections.Counter() + self.on_shift = False + self.sleep = False + + def start_shift(self, date): + self.on_shift = date + + def end_shift(self, date): + self.on_shift = False + if self.sleep: + self.wake_up(date) + + def fall_asleep(self, date): + self.sleep = date + + def wake_up(self, date): + self.process_sleep(self.sleep, date) + self.sleep = False + + def process_sleep(self, start, end): + current_datetime = start + # If the end is outside the start hour, clip it + clip_end = datetime.datetime(start.year, start.month, start.day, start.hour + 1, 0) + clip = False + if clip_end < end: + clip = True + end = clip_end + #print("Processing sleep for guard {} from {} to {} ({})".format( + # self.id, start, end, clip)) + #print(self.midnight_sleep) + while current_datetime < end: + if current_datetime.hour != 0: + current_datetime += datetime.timedelta(minutes = 1) + continue + self.midnight_sleep.update({current_datetime.minute: 1}) + current_datetime += datetime.timedelta(minutes = 1) + #print(self.midnight_sleep) + + def total_sleep(self): + return sum(self.midnight_sleep.values()) + + def common_minute(self): + r = self.midnight_sleep.most_common(1) + if not r: + r = [(-1, -1)] + return r + +def replay(events): + guards = {} + current_guard = None + p = re.compile('Guard #(?P\d+) begins shift') + for e in events: + m = p.match(e.event) + if m: + if current_guard: + current_guard.end_shift(e.date) + # Guard is coming on shift + if m.group('id') in guards.keys(): + current_guard = guards[m.group('id')] + else: + current_guard = Guard(m.group('id')) + guards[m.group('id')] = current_guard + current_guard.start_shift(e.date) + continue + if e.event == 'falls asleep': + current_guard.fall_asleep(e.date) + if e.event == 'wakes up': + current_guard.wake_up(e.date) + return guards + +if __name__ == '__main__': + lines = sys.stdin.readlines() + p = re.compile('\[(?P\d{4}-\d{2}-\d{2} \d{2}:\d{2})\] (?P.*)') + events = [] + for line in lines: + m = p.match(line) + if not m: + print("Warning line '{}' did not match".format(line)) + else: + events.append(Event(m.group('date'), m.group('event'))) + events.sort(key=lambda e: e.date) + guards = list(replay(events).values()) + #print(guards) + guards.sort(key=lambda g: g.total_sleep()) + for g in guards: + print("{}: {} minutes asleep, most common minute {}".format( + g.id, g.total_sleep(), g.common_minute())) + print('------------------------------------') + guards.sort(key=lambda g: g.common_minute()[0][1] if g.common_minute() else 0) + for g in guards: + print("{}: {} minutes asleep, most common minute {}".format( + g.id, g.total_sleep(), g.common_minute())) + #print(guards[-1].id * guards[-1].common_minute()[0]) + #for e in events: + # print(e) diff --git a/4/input b/4/input new file mode 100644 index 0000000..e09daec --- /dev/null +++ b/4/input @@ -0,0 +1,1129 @@ +[1518-08-21 00:39] wakes up +[1518-08-11 00:56] wakes up +[1518-10-10 23:52] Guard #2707 begins shift +[1518-10-14 00:55] wakes up +[1518-07-19 00:42] wakes up +[1518-06-16 00:41] falls asleep +[1518-03-24 00:57] wakes up +[1518-05-06 00:39] wakes up +[1518-08-27 00:00] Guard #3323 begins shift +[1518-03-22 23:50] Guard #2753 begins shift +[1518-11-04 00:51] wakes up +[1518-08-02 00:02] Guard #1223 begins shift +[1518-06-11 00:46] wakes up +[1518-05-29 00:51] falls asleep +[1518-05-23 00:19] falls asleep +[1518-08-12 23:56] Guard #1283 begins shift +[1518-03-21 00:55] wakes up +[1518-10-14 00:39] falls asleep +[1518-04-10 00:00] Guard #1733 begins shift +[1518-05-08 00:46] wakes up +[1518-08-14 00:19] wakes up +[1518-08-02 00:31] wakes up +[1518-09-23 00:02] falls asleep +[1518-08-16 00:18] falls asleep +[1518-09-23 00:31] wakes up +[1518-04-27 00:42] wakes up +[1518-03-02 00:17] falls asleep +[1518-05-18 00:37] falls asleep +[1518-05-27 00:52] wakes up +[1518-07-22 23:50] Guard #2903 begins shift +[1518-10-27 00:01] Guard #1213 begins shift +[1518-10-17 00:51] falls asleep +[1518-09-17 00:19] falls asleep +[1518-08-05 00:08] falls asleep +[1518-09-08 00:04] Guard #2903 begins shift +[1518-09-12 00:47] falls asleep +[1518-10-13 00:03] Guard #3023 begins shift +[1518-08-15 00:31] wakes up +[1518-03-22 00:37] wakes up +[1518-02-23 00:30] falls asleep +[1518-03-25 00:59] wakes up +[1518-09-22 23:53] Guard #859 begins shift +[1518-04-21 00:54] wakes up +[1518-09-03 23:56] Guard #1597 begins shift +[1518-06-12 00:00] Guard #1231 begins shift +[1518-03-06 00:56] wakes up +[1518-05-30 00:14] falls asleep +[1518-05-27 00:49] falls asleep +[1518-08-14 00:34] falls asleep +[1518-02-16 00:51] wakes up +[1518-05-31 23:46] Guard #3023 begins shift +[1518-09-29 00:38] wakes up +[1518-09-20 00:19] wakes up +[1518-10-11 00:26] wakes up +[1518-06-08 00:33] falls asleep +[1518-09-01 00:15] falls asleep +[1518-11-11 00:56] wakes up +[1518-04-30 00:51] wakes up +[1518-06-28 00:28] wakes up +[1518-03-17 00:00] Guard #3449 begins shift +[1518-07-30 00:20] falls asleep +[1518-04-21 00:32] falls asleep +[1518-10-15 00:54] wakes up +[1518-05-25 00:50] falls asleep +[1518-07-23 00:26] wakes up +[1518-10-11 00:53] wakes up +[1518-05-13 00:47] falls asleep +[1518-08-17 00:37] falls asleep +[1518-11-18 23:54] Guard #1213 begins shift +[1518-04-22 00:30] wakes up +[1518-07-23 23:59] Guard #1213 begins shift +[1518-09-08 00:53] wakes up +[1518-06-09 00:00] Guard #1597 begins shift +[1518-09-19 00:02] falls asleep +[1518-11-10 00:09] falls asleep +[1518-03-07 00:23] falls asleep +[1518-06-07 23:47] Guard #1223 begins shift +[1518-06-28 00:06] wakes up +[1518-11-10 00:54] wakes up +[1518-03-20 00:26] falls asleep +[1518-10-10 00:27] falls asleep +[1518-04-12 00:01] Guard #3023 begins shift +[1518-02-24 00:01] falls asleep +[1518-05-11 00:03] Guard #3323 begins shift +[1518-06-04 00:03] Guard #2971 begins shift +[1518-07-21 00:56] wakes up +[1518-04-18 00:51] wakes up +[1518-07-08 23:56] Guard #3323 begins shift +[1518-04-11 00:42] wakes up +[1518-03-29 00:11] wakes up +[1518-05-08 00:54] wakes up +[1518-10-09 00:57] wakes up +[1518-08-13 00:27] falls asleep +[1518-07-29 00:56] wakes up +[1518-05-06 00:43] falls asleep +[1518-05-17 00:03] Guard #859 begins shift +[1518-10-26 00:37] falls asleep +[1518-07-28 00:54] wakes up +[1518-04-20 00:05] falls asleep +[1518-07-30 00:21] wakes up +[1518-11-10 00:34] falls asleep +[1518-11-06 00:34] wakes up +[1518-08-19 00:48] wakes up +[1518-08-12 00:56] wakes up +[1518-02-16 00:44] falls asleep +[1518-08-28 00:28] falls asleep +[1518-10-25 00:56] falls asleep +[1518-04-25 00:22] falls asleep +[1518-03-27 00:01] Guard #2251 begins shift +[1518-07-11 00:33] falls asleep +[1518-02-12 23:58] Guard #3449 begins shift +[1518-02-25 00:45] wakes up +[1518-04-13 00:50] wakes up +[1518-03-16 00:55] wakes up +[1518-03-22 00:31] falls asleep +[1518-06-29 00:28] falls asleep +[1518-11-22 00:51] wakes up +[1518-11-23 00:22] falls asleep +[1518-07-29 23:57] Guard #2251 begins shift +[1518-05-14 00:03] Guard #2903 begins shift +[1518-10-09 00:52] falls asleep +[1518-09-20 00:39] falls asleep +[1518-10-16 00:49] wakes up +[1518-07-04 00:59] wakes up +[1518-02-17 00:38] falls asleep +[1518-04-03 00:04] Guard #859 begins shift +[1518-03-08 00:00] falls asleep +[1518-03-20 00:57] wakes up +[1518-10-07 23:48] Guard #1223 begins shift +[1518-04-08 23:59] Guard #1223 begins shift +[1518-07-01 00:00] Guard #3023 begins shift +[1518-09-17 00:22] wakes up +[1518-03-15 00:00] Guard #1283 begins shift +[1518-07-16 00:10] falls asleep +[1518-04-03 00:34] falls asleep +[1518-11-23 00:04] Guard #1637 begins shift +[1518-10-19 00:53] wakes up +[1518-06-25 23:57] Guard #2851 begins shift +[1518-03-23 00:52] wakes up +[1518-04-21 00:02] Guard #1439 begins shift +[1518-05-09 23:57] Guard #1999 begins shift +[1518-08-03 00:19] falls asleep +[1518-10-04 00:51] falls asleep +[1518-06-01 00:53] wakes up +[1518-06-01 00:47] falls asleep +[1518-08-18 00:28] falls asleep +[1518-11-18 00:55] falls asleep +[1518-05-12 00:08] falls asleep +[1518-06-18 00:51] wakes up +[1518-07-25 00:33] falls asleep +[1518-08-03 00:37] wakes up +[1518-10-02 00:24] falls asleep +[1518-09-10 00:26] falls asleep +[1518-09-29 23:50] Guard #2851 begins shift +[1518-03-15 00:16] wakes up +[1518-07-26 00:30] falls asleep +[1518-03-12 00:03] falls asleep +[1518-07-28 00:01] Guard #2971 begins shift +[1518-02-25 00:00] falls asleep +[1518-11-01 00:21] falls asleep +[1518-04-02 00:56] falls asleep +[1518-04-25 00:36] wakes up +[1518-10-06 00:06] falls asleep +[1518-06-08 00:03] falls asleep +[1518-06-24 00:17] falls asleep +[1518-11-01 00:04] Guard #2707 begins shift +[1518-11-08 00:00] Guard #1223 begins shift +[1518-04-07 00:53] wakes up +[1518-08-10 00:50] falls asleep +[1518-10-25 00:44] falls asleep +[1518-08-05 00:02] Guard #887 begins shift +[1518-02-14 23:57] Guard #1597 begins shift +[1518-11-15 00:11] falls asleep +[1518-07-09 23:57] Guard #2851 begins shift +[1518-07-07 23:56] Guard #1597 begins shift +[1518-08-06 00:16] falls asleep +[1518-08-09 00:03] Guard #2707 begins shift +[1518-10-31 00:15] falls asleep +[1518-03-11 00:51] wakes up +[1518-04-14 00:06] falls asleep +[1518-08-25 23:58] Guard #887 begins shift +[1518-10-09 00:30] falls asleep +[1518-11-17 00:51] wakes up +[1518-06-23 00:58] wakes up +[1518-05-08 23:50] Guard #1283 begins shift +[1518-03-18 00:34] falls asleep +[1518-10-22 00:28] falls asleep +[1518-05-01 00:58] wakes up +[1518-05-21 00:37] wakes up +[1518-05-06 00:46] wakes up +[1518-04-07 00:32] wakes up +[1518-09-16 23:59] Guard #3323 begins shift +[1518-10-27 00:33] wakes up +[1518-04-11 00:37] falls asleep +[1518-05-05 00:50] falls asleep +[1518-06-06 00:45] wakes up +[1518-05-08 00:49] falls asleep +[1518-09-26 00:21] wakes up +[1518-09-18 23:50] Guard #1439 begins shift +[1518-02-08 00:06] falls asleep +[1518-06-20 00:36] wakes up +[1518-04-19 00:53] wakes up +[1518-05-15 00:56] wakes up +[1518-08-25 00:45] falls asleep +[1518-04-25 00:02] Guard #1439 begins shift +[1518-11-02 00:56] falls asleep +[1518-11-15 00:56] wakes up +[1518-07-17 00:58] wakes up +[1518-03-28 00:00] Guard #1597 begins shift +[1518-06-23 00:54] falls asleep +[1518-11-14 00:11] falls asleep +[1518-03-15 23:57] Guard #1597 begins shift +[1518-03-03 00:15] wakes up +[1518-08-31 00:06] falls asleep +[1518-08-10 00:03] Guard #3023 begins shift +[1518-04-29 00:04] falls asleep +[1518-04-08 00:01] Guard #1283 begins shift +[1518-03-28 00:51] wakes up +[1518-10-31 00:03] Guard #1213 begins shift +[1518-08-03 00:53] falls asleep +[1518-06-30 00:55] wakes up +[1518-07-24 00:21] wakes up +[1518-04-01 00:34] falls asleep +[1518-09-25 00:01] Guard #859 begins shift +[1518-03-24 00:00] Guard #859 begins shift +[1518-02-27 00:34] wakes up +[1518-03-15 00:51] wakes up +[1518-07-31 00:49] falls asleep +[1518-09-05 00:01] falls asleep +[1518-07-26 00:03] Guard #2971 begins shift +[1518-06-22 00:14] falls asleep +[1518-09-15 23:46] Guard #2971 begins shift +[1518-09-29 00:47] wakes up +[1518-05-05 00:00] Guard #1223 begins shift +[1518-11-18 00:58] wakes up +[1518-09-02 00:29] falls asleep +[1518-08-25 00:50] wakes up +[1518-08-08 00:56] wakes up +[1518-04-12 00:11] falls asleep +[1518-07-29 00:00] Guard #2903 begins shift +[1518-04-05 00:49] wakes up +[1518-11-20 00:57] wakes up +[1518-08-12 00:17] falls asleep +[1518-09-04 23:51] Guard #3121 begins shift +[1518-03-20 00:36] wakes up +[1518-03-05 00:42] wakes up +[1518-05-13 00:00] Guard #1439 begins shift +[1518-07-30 00:16] wakes up +[1518-06-07 00:49] wakes up +[1518-05-02 00:51] falls asleep +[1518-08-15 00:02] Guard #2753 begins shift +[1518-09-20 00:04] falls asleep +[1518-07-20 00:13] falls asleep +[1518-08-24 00:42] wakes up +[1518-11-20 00:37] falls asleep +[1518-09-06 00:53] falls asleep +[1518-10-18 00:37] falls asleep +[1518-08-05 00:56] wakes up +[1518-10-17 00:03] Guard #2753 begins shift +[1518-06-16 00:56] wakes up +[1518-09-28 00:50] wakes up +[1518-09-09 23:57] Guard #2707 begins shift +[1518-07-19 00:04] Guard #1231 begins shift +[1518-10-17 00:26] falls asleep +[1518-08-02 23:57] Guard #859 begins shift +[1518-09-01 23:56] Guard #3323 begins shift +[1518-08-15 00:17] falls asleep +[1518-10-09 00:49] wakes up +[1518-08-02 00:44] falls asleep +[1518-07-13 00:03] Guard #3121 begins shift +[1518-03-06 00:45] falls asleep +[1518-10-20 23:57] Guard #2753 begins shift +[1518-05-17 00:48] wakes up +[1518-10-01 00:12] falls asleep +[1518-08-30 00:33] falls asleep +[1518-02-18 00:13] falls asleep +[1518-05-13 00:44] wakes up +[1518-10-17 00:54] wakes up +[1518-08-20 00:01] Guard #911 begins shift +[1518-02-25 00:31] wakes up +[1518-09-04 00:28] falls asleep +[1518-10-16 00:01] Guard #2903 begins shift +[1518-02-12 00:47] wakes up +[1518-08-10 00:38] wakes up +[1518-09-14 00:45] wakes up +[1518-05-31 00:20] falls asleep +[1518-02-28 00:25] falls asleep +[1518-07-03 00:23] falls asleep +[1518-10-23 00:54] wakes up +[1518-02-16 00:56] falls asleep +[1518-07-11 00:57] wakes up +[1518-02-20 00:00] Guard #1999 begins shift +[1518-06-11 00:01] Guard #1439 begins shift +[1518-04-03 00:57] wakes up +[1518-05-28 00:03] Guard #1439 begins shift +[1518-03-19 00:16] falls asleep +[1518-09-10 00:53] wakes up +[1518-10-12 00:46] falls asleep +[1518-07-25 00:50] wakes up +[1518-06-23 23:47] Guard #1439 begins shift +[1518-07-27 00:05] falls asleep +[1518-05-30 00:26] wakes up +[1518-06-28 00:35] falls asleep +[1518-05-14 00:32] falls asleep +[1518-07-06 00:39] falls asleep +[1518-06-25 00:51] wakes up +[1518-09-06 00:03] Guard #3023 begins shift +[1518-11-08 00:43] falls asleep +[1518-09-25 00:40] wakes up +[1518-03-23 00:50] falls asleep +[1518-10-17 00:40] wakes up +[1518-02-09 00:16] falls asleep +[1518-09-10 00:56] falls asleep +[1518-04-10 00:54] wakes up +[1518-06-17 00:57] wakes up +[1518-04-19 00:43] falls asleep +[1518-11-16 00:06] falls asleep +[1518-09-11 00:19] wakes up +[1518-05-08 00:41] falls asleep +[1518-04-16 00:40] wakes up +[1518-11-17 00:41] wakes up +[1518-09-26 00:57] wakes up +[1518-04-30 00:01] Guard #2753 begins shift +[1518-04-11 00:50] falls asleep +[1518-04-09 00:58] wakes up +[1518-09-10 00:49] falls asleep +[1518-03-19 00:27] wakes up +[1518-03-27 00:38] wakes up +[1518-09-29 00:44] falls asleep +[1518-08-29 00:16] wakes up +[1518-09-24 00:47] wakes up +[1518-04-22 00:10] wakes up +[1518-09-08 00:29] falls asleep +[1518-05-21 00:09] falls asleep +[1518-03-28 00:41] falls asleep +[1518-07-08 00:33] wakes up +[1518-05-13 00:50] wakes up +[1518-11-06 00:01] Guard #911 begins shift +[1518-09-28 00:25] falls asleep +[1518-09-10 00:58] wakes up +[1518-09-03 00:03] falls asleep +[1518-04-28 23:50] Guard #2753 begins shift +[1518-08-10 23:57] Guard #1231 begins shift +[1518-05-31 00:51] wakes up +[1518-02-08 00:28] wakes up +[1518-08-01 00:00] Guard #3323 begins shift +[1518-02-14 00:43] falls asleep +[1518-06-08 00:28] wakes up +[1518-09-22 00:18] falls asleep +[1518-05-25 00:04] Guard #3121 begins shift +[1518-04-01 00:47] wakes up +[1518-03-29 00:16] falls asleep +[1518-07-14 00:01] falls asleep +[1518-09-12 00:14] falls asleep +[1518-07-10 00:51] wakes up +[1518-02-18 00:25] wakes up +[1518-05-04 00:00] Guard #2851 begins shift +[1518-08-30 00:59] wakes up +[1518-09-23 23:57] Guard #1223 begins shift +[1518-10-14 00:02] Guard #1231 begins shift +[1518-10-15 00:39] wakes up +[1518-09-16 00:59] wakes up +[1518-04-07 00:36] falls asleep +[1518-02-17 23:57] Guard #1213 begins shift +[1518-06-16 23:58] Guard #859 begins shift +[1518-04-27 00:20] wakes up +[1518-04-01 00:57] wakes up +[1518-09-09 00:43] wakes up +[1518-07-05 23:52] Guard #3023 begins shift +[1518-09-06 00:23] falls asleep +[1518-07-28 00:14] falls asleep +[1518-05-14 00:50] wakes up +[1518-06-30 00:22] falls asleep +[1518-03-04 00:58] wakes up +[1518-11-03 00:59] wakes up +[1518-05-09 00:03] falls asleep +[1518-06-24 00:04] wakes up +[1518-10-30 00:19] falls asleep +[1518-03-04 00:51] wakes up +[1518-10-30 00:23] wakes up +[1518-03-13 00:00] Guard #859 begins shift +[1518-03-30 00:56] wakes up +[1518-04-18 00:06] falls asleep +[1518-05-01 00:25] falls asleep +[1518-02-26 00:51] wakes up +[1518-03-18 00:48] wakes up +[1518-08-13 00:55] wakes up +[1518-05-21 23:57] Guard #2251 begins shift +[1518-11-21 00:25] falls asleep +[1518-04-12 00:38] falls asleep +[1518-02-19 00:46] wakes up +[1518-06-28 00:01] falls asleep +[1518-03-13 00:28] falls asleep +[1518-10-22 00:50] wakes up +[1518-09-17 00:38] falls asleep +[1518-10-13 00:58] wakes up +[1518-10-14 00:19] falls asleep +[1518-09-02 00:25] wakes up +[1518-09-05 00:28] wakes up +[1518-09-10 00:31] wakes up +[1518-03-09 00:04] Guard #233 begins shift +[1518-06-02 00:19] falls asleep +[1518-06-14 00:21] wakes up +[1518-07-02 23:59] Guard #2251 begins shift +[1518-09-13 00:09] falls asleep +[1518-07-31 00:58] wakes up +[1518-11-05 00:13] falls asleep +[1518-04-15 00:54] wakes up +[1518-04-23 00:04] Guard #2251 begins shift +[1518-07-12 00:03] falls asleep +[1518-03-01 00:04] Guard #2971 begins shift +[1518-02-25 00:41] falls asleep +[1518-08-25 00:10] falls asleep +[1518-08-09 00:53] wakes up +[1518-10-28 00:51] wakes up +[1518-05-22 00:12] falls asleep +[1518-05-20 00:58] wakes up +[1518-11-02 00:15] falls asleep +[1518-10-18 23:56] Guard #1637 begins shift +[1518-03-20 00:04] Guard #887 begins shift +[1518-11-14 00:01] Guard #2753 begins shift +[1518-04-11 00:57] wakes up +[1518-03-26 00:42] falls asleep +[1518-04-15 23:53] Guard #1439 begins shift +[1518-08-01 00:11] falls asleep +[1518-05-09 00:25] falls asleep +[1518-06-30 00:04] Guard #1733 begins shift +[1518-06-08 00:54] wakes up +[1518-08-08 00:55] falls asleep +[1518-05-02 00:12] falls asleep +[1518-07-06 00:58] wakes up +[1518-05-29 00:04] Guard #2707 begins shift +[1518-05-09 00:49] wakes up +[1518-03-29 00:02] falls asleep +[1518-08-21 00:36] falls asleep +[1518-10-13 00:29] falls asleep +[1518-07-02 00:53] wakes up +[1518-02-21 00:58] wakes up +[1518-04-30 23:58] Guard #911 begins shift +[1518-03-06 23:56] Guard #2707 begins shift +[1518-03-12 00:36] falls asleep +[1518-04-06 00:42] falls asleep +[1518-09-27 00:59] wakes up +[1518-07-23 00:01] falls asleep +[1518-10-02 00:02] Guard #2971 begins shift +[1518-08-16 00:57] wakes up +[1518-03-13 00:46] wakes up +[1518-06-18 00:09] falls asleep +[1518-02-08 23:57] Guard #1439 begins shift +[1518-04-19 00:52] falls asleep +[1518-08-22 00:06] wakes up +[1518-08-06 23:59] Guard #1999 begins shift +[1518-06-06 00:27] falls asleep +[1518-10-05 00:11] wakes up +[1518-05-01 00:55] falls asleep +[1518-02-22 00:59] wakes up +[1518-04-30 00:08] falls asleep +[1518-04-19 23:47] Guard #3323 begins shift +[1518-04-06 23:50] Guard #3121 begins shift +[1518-04-08 00:21] falls asleep +[1518-11-05 00:49] wakes up +[1518-08-01 00:37] wakes up +[1518-02-26 00:32] falls asleep +[1518-08-30 00:43] wakes up +[1518-11-17 00:09] falls asleep +[1518-07-14 23:59] Guard #2851 begins shift +[1518-06-01 00:36] wakes up +[1518-05-02 00:01] Guard #3121 begins shift +[1518-04-22 00:04] Guard #3121 begins shift +[1518-04-15 00:04] Guard #1637 begins shift +[1518-11-12 00:47] wakes up +[1518-09-13 00:51] falls asleep +[1518-08-06 00:11] falls asleep +[1518-07-11 23:47] Guard #1223 begins shift +[1518-05-07 23:56] Guard #1283 begins shift +[1518-03-28 00:56] falls asleep +[1518-11-09 00:33] wakes up +[1518-08-06 00:57] wakes up +[1518-06-16 00:04] Guard #2851 begins shift +[1518-06-15 00:45] wakes up +[1518-06-27 00:14] falls asleep +[1518-11-07 00:55] wakes up +[1518-05-07 00:54] falls asleep +[1518-02-14 00:01] Guard #2251 begins shift +[1518-08-14 00:12] falls asleep +[1518-09-24 00:59] wakes up +[1518-05-20 00:46] falls asleep +[1518-11-07 00:23] falls asleep +[1518-06-21 00:03] Guard #1637 begins shift +[1518-11-10 00:19] wakes up +[1518-03-24 00:47] wakes up +[1518-09-24 00:44] falls asleep +[1518-04-18 23:57] Guard #3323 begins shift +[1518-10-16 00:59] wakes up +[1518-09-15 00:03] Guard #2971 begins shift +[1518-07-15 00:18] falls asleep +[1518-09-26 00:50] wakes up +[1518-11-06 00:58] wakes up +[1518-09-01 00:44] falls asleep +[1518-05-23 00:24] wakes up +[1518-02-12 00:37] falls asleep +[1518-06-04 00:52] falls asleep +[1518-10-24 00:43] wakes up +[1518-03-12 00:49] wakes up +[1518-05-11 00:44] wakes up +[1518-08-02 00:10] falls asleep +[1518-05-05 23:50] Guard #1213 begins shift +[1518-11-18 00:23] falls asleep +[1518-09-27 23:59] Guard #2707 begins shift +[1518-11-02 00:57] wakes up +[1518-09-26 00:43] falls asleep +[1518-03-08 00:38] falls asleep +[1518-04-05 00:32] falls asleep +[1518-04-13 00:20] falls asleep +[1518-09-25 00:26] falls asleep +[1518-06-09 00:20] falls asleep +[1518-04-01 00:53] falls asleep +[1518-07-12 00:35] falls asleep +[1518-07-12 00:40] wakes up +[1518-03-04 00:10] falls asleep +[1518-06-22 00:00] Guard #3023 begins shift +[1518-02-23 00:44] wakes up +[1518-09-11 00:04] Guard #1637 begins shift +[1518-06-01 00:03] falls asleep +[1518-02-21 00:38] falls asleep +[1518-03-30 23:59] Guard #233 begins shift +[1518-08-27 00:48] falls asleep +[1518-03-10 23:59] Guard #2251 begins shift +[1518-02-15 00:34] falls asleep +[1518-09-16 00:02] falls asleep +[1518-04-25 00:49] wakes up +[1518-04-01 23:56] Guard #2851 begins shift +[1518-04-14 00:56] wakes up +[1518-09-10 00:38] falls asleep +[1518-02-23 23:49] Guard #1283 begins shift +[1518-11-21 23:59] Guard #3121 begins shift +[1518-05-28 00:17] falls asleep +[1518-05-22 00:19] wakes up +[1518-11-11 00:00] Guard #1283 begins shift +[1518-05-27 00:35] falls asleep +[1518-03-30 00:24] falls asleep +[1518-10-06 00:57] wakes up +[1518-10-11 00:51] falls asleep +[1518-06-23 00:00] Guard #3121 begins shift +[1518-08-02 00:53] wakes up +[1518-08-17 00:42] wakes up +[1518-05-02 00:54] wakes up +[1518-04-13 23:59] Guard #1231 begins shift +[1518-10-27 00:10] falls asleep +[1518-07-28 00:44] falls asleep +[1518-10-05 00:21] falls asleep +[1518-07-18 00:24] falls asleep +[1518-06-12 00:58] wakes up +[1518-10-15 00:01] Guard #3121 begins shift +[1518-08-11 00:28] falls asleep +[1518-03-21 00:37] falls asleep +[1518-05-24 00:27] falls asleep +[1518-10-03 00:37] wakes up +[1518-05-27 00:00] Guard #1283 begins shift +[1518-11-14 00:51] wakes up +[1518-04-12 00:55] wakes up +[1518-06-21 00:50] wakes up +[1518-03-27 00:33] falls asleep +[1518-05-19 00:52] wakes up +[1518-10-12 00:21] falls asleep +[1518-03-26 00:59] wakes up +[1518-07-20 00:36] wakes up +[1518-07-25 00:03] Guard #2251 begins shift +[1518-03-11 00:24] falls asleep +[1518-10-07 00:58] wakes up +[1518-06-29 00:49] falls asleep +[1518-07-14 00:57] wakes up +[1518-11-03 23:57] Guard #2707 begins shift +[1518-05-16 00:15] falls asleep +[1518-02-10 00:28] falls asleep +[1518-08-28 00:00] Guard #3023 begins shift +[1518-11-08 00:44] wakes up +[1518-05-01 00:35] wakes up +[1518-10-20 00:12] falls asleep +[1518-03-21 00:00] Guard #859 begins shift +[1518-04-16 00:16] falls asleep +[1518-07-10 00:44] falls asleep +[1518-02-22 23:59] Guard #1439 begins shift +[1518-06-24 00:57] wakes up +[1518-05-23 00:28] falls asleep +[1518-07-04 00:03] Guard #3023 begins shift +[1518-06-19 00:01] Guard #2707 begins shift +[1518-06-04 00:47] wakes up +[1518-09-03 00:57] wakes up +[1518-04-08 00:46] falls asleep +[1518-04-10 00:24] falls asleep +[1518-04-26 00:36] wakes up +[1518-03-02 00:58] wakes up +[1518-10-25 00:51] wakes up +[1518-04-04 00:03] falls asleep +[1518-06-04 23:59] Guard #859 begins shift +[1518-10-21 00:50] wakes up +[1518-02-28 00:48] wakes up +[1518-06-15 00:39] falls asleep +[1518-09-20 00:53] wakes up +[1518-04-06 00:51] wakes up +[1518-08-28 23:52] Guard #1283 begins shift +[1518-07-24 00:11] falls asleep +[1518-07-17 00:54] falls asleep +[1518-06-05 00:42] wakes up +[1518-09-22 00:23] wakes up +[1518-11-11 00:25] falls asleep +[1518-08-04 00:35] wakes up +[1518-08-05 23:59] Guard #859 begins shift +[1518-10-23 00:41] falls asleep +[1518-11-19 00:04] falls asleep +[1518-06-20 00:25] falls asleep +[1518-11-11 00:52] falls asleep +[1518-04-07 00:02] falls asleep +[1518-07-21 23:59] Guard #3023 begins shift +[1518-11-18 00:00] Guard #3323 begins shift +[1518-04-24 00:01] Guard #233 begins shift +[1518-11-03 00:56] falls asleep +[1518-09-30 23:59] Guard #2903 begins shift +[1518-09-17 23:58] Guard #3323 begins shift +[1518-10-31 00:42] falls asleep +[1518-02-09 23:58] Guard #1439 begins shift +[1518-09-06 00:55] wakes up +[1518-04-26 00:30] falls asleep +[1518-03-24 00:37] falls asleep +[1518-03-05 23:57] Guard #3023 begins shift +[1518-02-16 00:23] wakes up +[1518-09-18 00:10] falls asleep +[1518-04-18 00:38] falls asleep +[1518-08-09 00:26] falls asleep +[1518-07-06 00:17] wakes up +[1518-09-22 00:52] falls asleep +[1518-07-07 00:49] wakes up +[1518-10-04 00:02] Guard #1637 begins shift +[1518-02-11 00:01] Guard #3323 begins shift +[1518-07-21 00:39] falls asleep +[1518-06-12 00:17] falls asleep +[1518-07-20 23:58] Guard #3323 begins shift +[1518-04-16 00:04] wakes up +[1518-05-20 00:00] Guard #3323 begins shift +[1518-10-10 00:45] wakes up +[1518-03-03 00:57] wakes up +[1518-04-18 00:24] wakes up +[1518-04-19 00:57] wakes up +[1518-11-20 23:59] Guard #1439 begins shift +[1518-07-27 00:30] wakes up +[1518-09-07 00:52] wakes up +[1518-06-18 00:55] falls asleep +[1518-02-15 23:59] Guard #1213 begins shift +[1518-11-02 00:51] wakes up +[1518-10-11 00:02] falls asleep +[1518-10-07 00:32] falls asleep +[1518-06-07 00:43] falls asleep +[1518-07-15 00:56] wakes up +[1518-06-27 00:53] wakes up +[1518-06-29 00:50] wakes up +[1518-07-04 00:38] falls asleep +[1518-07-13 23:50] Guard #2753 begins shift +[1518-06-19 00:49] wakes up +[1518-09-02 23:53] Guard #2851 begins shift +[1518-02-26 23:58] Guard #2251 begins shift +[1518-03-14 00:13] falls asleep +[1518-07-17 00:42] falls asleep +[1518-02-19 00:04] falls asleep +[1518-05-18 23:57] Guard #1231 begins shift +[1518-03-04 23:54] Guard #1223 begins shift +[1518-09-12 00:29] wakes up +[1518-10-15 00:53] falls asleep +[1518-11-06 23:57] Guard #887 begins shift +[1518-08-11 00:47] wakes up +[1518-02-20 23:57] Guard #3323 begins shift +[1518-05-28 00:49] falls asleep +[1518-09-27 00:46] falls asleep +[1518-04-29 00:47] wakes up +[1518-03-03 00:50] falls asleep +[1518-07-07 00:19] falls asleep +[1518-08-20 00:28] falls asleep +[1518-08-25 00:53] falls asleep +[1518-10-04 23:50] Guard #2903 begins shift +[1518-06-20 00:03] Guard #3323 begins shift +[1518-10-08 23:56] Guard #2903 begins shift +[1518-08-15 00:59] wakes up +[1518-05-18 00:43] wakes up +[1518-02-21 00:45] wakes up +[1518-05-19 00:29] wakes up +[1518-02-11 00:40] wakes up +[1518-04-22 00:22] falls asleep +[1518-09-06 00:50] wakes up +[1518-09-07 00:02] Guard #1283 begins shift +[1518-10-28 23:56] Guard #859 begins shift +[1518-09-21 00:34] falls asleep +[1518-09-02 00:41] wakes up +[1518-02-17 00:58] wakes up +[1518-09-01 00:04] Guard #1223 begins shift +[1518-03-02 23:48] Guard #2851 begins shift +[1518-05-02 00:47] falls asleep +[1518-04-22 00:07] falls asleep +[1518-06-24 00:43] wakes up +[1518-05-28 00:46] wakes up +[1518-08-24 00:59] wakes up +[1518-05-05 00:54] wakes up +[1518-02-08 00:00] Guard #1439 begins shift +[1518-04-01 00:01] Guard #2851 begins shift +[1518-11-08 23:51] Guard #1283 begins shift +[1518-07-01 00:46] wakes up +[1518-10-26 00:03] Guard #887 begins shift +[1518-03-24 00:12] wakes up +[1518-07-06 23:59] Guard #2971 begins shift +[1518-08-04 00:22] falls asleep +[1518-04-10 23:56] Guard #2903 begins shift +[1518-11-18 00:50] wakes up +[1518-11-13 00:00] Guard #1733 begins shift +[1518-10-05 00:51] wakes up +[1518-06-23 00:48] falls asleep +[1518-03-28 23:53] Guard #1213 begins shift +[1518-05-05 00:47] wakes up +[1518-06-26 00:37] falls asleep +[1518-04-08 00:51] wakes up +[1518-11-09 23:59] Guard #2707 begins shift +[1518-05-02 00:42] wakes up +[1518-11-13 00:45] falls asleep +[1518-05-23 00:55] wakes up +[1518-05-14 23:57] Guard #859 begins shift +[1518-05-04 00:57] wakes up +[1518-08-25 00:56] wakes up +[1518-10-19 23:58] Guard #3023 begins shift +[1518-10-29 23:58] Guard #1213 begins shift +[1518-09-14 00:55] falls asleep +[1518-02-22 00:45] falls asleep +[1518-10-22 00:03] Guard #2971 begins shift +[1518-08-10 00:54] wakes up +[1518-10-07 00:54] falls asleep +[1518-08-27 00:52] wakes up +[1518-06-15 00:02] Guard #2251 begins shift +[1518-06-02 00:51] wakes up +[1518-06-24 00:47] falls asleep +[1518-03-21 23:56] Guard #887 begins shift +[1518-06-09 23:50] Guard #3023 begins shift +[1518-02-17 00:13] falls asleep +[1518-02-21 00:49] falls asleep +[1518-08-18 00:00] Guard #2707 begins shift +[1518-07-17 00:02] falls asleep +[1518-07-13 00:52] wakes up +[1518-02-12 00:55] falls asleep +[1518-07-15 23:58] Guard #1231 begins shift +[1518-05-25 00:43] wakes up +[1518-06-24 00:01] falls asleep +[1518-06-22 00:56] wakes up +[1518-10-03 00:08] falls asleep +[1518-06-14 00:56] wakes up +[1518-07-13 00:27] falls asleep +[1518-11-11 00:43] wakes up +[1518-09-26 00:56] falls asleep +[1518-08-20 00:44] wakes up +[1518-08-29 00:05] falls asleep +[1518-10-07 00:50] falls asleep +[1518-08-24 00:47] falls asleep +[1518-02-18 23:51] Guard #2753 begins shift +[1518-03-12 00:18] wakes up +[1518-05-16 00:02] Guard #887 begins shift +[1518-11-14 23:58] Guard #859 begins shift +[1518-03-24 00:07] falls asleep +[1518-08-28 00:47] wakes up +[1518-04-13 00:03] Guard #1733 begins shift +[1518-09-11 00:18] falls asleep +[1518-05-04 00:43] falls asleep +[1518-09-20 23:57] Guard #887 begins shift +[1518-10-16 00:45] falls asleep +[1518-08-25 00:31] wakes up +[1518-10-25 00:17] falls asleep +[1518-03-21 00:21] falls asleep +[1518-08-29 23:57] Guard #1733 begins shift +[1518-04-26 00:13] falls asleep +[1518-03-08 00:29] wakes up +[1518-04-20 00:56] wakes up +[1518-06-02 00:00] Guard #887 begins shift +[1518-05-27 00:15] wakes up +[1518-10-08 00:01] falls asleep +[1518-05-30 23:56] Guard #2753 begins shift +[1518-03-03 00:00] falls asleep +[1518-02-28 00:28] wakes up +[1518-03-01 23:59] Guard #1597 begins shift +[1518-03-01 00:23] falls asleep +[1518-10-18 00:53] wakes up +[1518-02-21 23:58] Guard #1733 begins shift +[1518-04-03 23:52] Guard #2753 begins shift +[1518-07-22 00:36] falls asleep +[1518-06-13 00:24] falls asleep +[1518-05-18 00:04] Guard #1231 begins shift +[1518-06-28 00:15] falls asleep +[1518-11-20 00:00] Guard #911 begins shift +[1518-07-23 00:39] wakes up +[1518-09-25 23:58] Guard #1213 begins shift +[1518-10-14 00:36] wakes up +[1518-08-05 00:23] falls asleep +[1518-09-04 00:49] wakes up +[1518-06-25 00:23] falls asleep +[1518-10-19 00:51] falls asleep +[1518-08-08 00:04] Guard #2903 begins shift +[1518-08-26 00:50] wakes up +[1518-09-17 00:53] wakes up +[1518-03-14 00:00] Guard #2971 begins shift +[1518-09-30 00:03] falls asleep +[1518-07-17 00:49] wakes up +[1518-10-01 00:46] wakes up +[1518-02-10 00:42] wakes up +[1518-10-06 23:51] Guard #887 begins shift +[1518-02-25 23:57] Guard #1733 begins shift +[1518-05-28 00:24] wakes up +[1518-05-16 00:42] wakes up +[1518-07-17 00:24] wakes up +[1518-05-02 00:48] wakes up +[1518-06-05 00:50] falls asleep +[1518-05-06 23:59] Guard #2251 begins shift +[1518-03-16 00:28] falls asleep +[1518-03-08 00:45] wakes up +[1518-04-02 00:53] wakes up +[1518-04-19 00:56] falls asleep +[1518-09-13 00:19] wakes up +[1518-07-02 00:32] falls asleep +[1518-10-25 00:22] wakes up +[1518-06-07 00:33] falls asleep +[1518-09-19 23:49] Guard #1597 begins shift +[1518-09-14 00:59] wakes up +[1518-03-24 00:52] falls asleep +[1518-05-24 00:51] wakes up +[1518-09-09 00:04] Guard #2251 begins shift +[1518-08-26 00:27] falls asleep +[1518-04-02 00:58] wakes up +[1518-06-23 00:50] wakes up +[1518-06-17 00:20] falls asleep +[1518-08-14 00:55] wakes up +[1518-04-02 00:23] falls asleep +[1518-03-07 23:46] Guard #1223 begins shift +[1518-02-16 00:08] falls asleep +[1518-03-29 00:48] wakes up +[1518-08-11 00:52] falls asleep +[1518-11-19 00:58] wakes up +[1518-04-25 23:56] Guard #1637 begins shift +[1518-05-07 00:44] wakes up +[1518-07-18 00:02] Guard #1439 begins shift +[1518-09-15 00:36] falls asleep +[1518-03-30 00:02] Guard #3121 begins shift +[1518-07-19 00:26] falls asleep +[1518-05-06 00:02] falls asleep +[1518-04-09 00:45] wakes up +[1518-05-28 00:58] wakes up +[1518-08-04 00:01] Guard #1439 begins shift +[1518-05-22 23:59] Guard #1213 begins shift +[1518-05-25 00:20] falls asleep +[1518-10-12 00:55] wakes up +[1518-08-29 00:25] falls asleep +[1518-07-10 00:28] wakes up +[1518-10-12 00:36] wakes up +[1518-11-16 23:58] Guard #859 begins shift +[1518-10-29 00:53] falls asleep +[1518-06-05 00:41] falls asleep +[1518-08-25 00:00] Guard #887 begins shift +[1518-09-10 00:46] wakes up +[1518-03-14 00:49] wakes up +[1518-04-23 00:11] falls asleep +[1518-08-19 00:42] falls asleep +[1518-03-23 00:33] wakes up +[1518-09-30 00:46] wakes up +[1518-08-30 23:56] Guard #3121 begins shift +[1518-11-03 00:10] falls asleep +[1518-08-21 00:01] Guard #887 begins shift +[1518-02-11 00:21] falls asleep +[1518-07-06 00:01] falls asleep +[1518-11-06 00:40] falls asleep +[1518-02-21 00:50] wakes up +[1518-03-28 00:57] wakes up +[1518-10-26 00:58] wakes up +[1518-10-22 23:56] Guard #2903 begins shift +[1518-06-06 00:54] wakes up +[1518-10-24 00:28] falls asleep +[1518-02-11 23:56] Guard #2251 begins shift +[1518-06-12 23:58] Guard #3023 begins shift +[1518-03-04 00:55] falls asleep +[1518-02-12 00:58] wakes up +[1518-06-05 00:57] wakes up +[1518-04-09 00:55] falls asleep +[1518-03-15 00:46] falls asleep +[1518-04-25 00:48] falls asleep +[1518-06-05 23:57] Guard #2753 begins shift +[1518-04-28 00:23] falls asleep +[1518-07-27 00:55] wakes up +[1518-03-23 00:05] falls asleep +[1518-05-26 00:03] Guard #233 begins shift +[1518-10-07 00:00] falls asleep +[1518-02-24 23:53] Guard #2971 begins shift +[1518-10-03 00:00] Guard #2251 begins shift +[1518-08-05 00:45] falls asleep +[1518-04-28 00:58] wakes up +[1518-04-17 00:23] falls asleep +[1518-07-30 00:13] falls asleep +[1518-06-06 00:48] falls asleep +[1518-05-07 00:58] wakes up +[1518-07-29 00:46] falls asleep +[1518-05-24 00:02] Guard #2903 begins shift +[1518-03-18 00:04] Guard #1733 begins shift +[1518-04-12 00:17] wakes up +[1518-04-27 23:59] Guard #2707 begins shift +[1518-07-01 23:59] Guard #2707 begins shift +[1518-10-10 00:09] falls asleep +[1518-05-11 23:56] Guard #3323 begins shift +[1518-02-27 00:30] falls asleep +[1518-04-17 00:42] wakes up +[1518-06-26 23:58] Guard #2903 begins shift +[1518-05-20 23:58] Guard #1597 begins shift +[1518-07-09 00:50] wakes up +[1518-02-09 00:56] falls asleep +[1518-05-11 00:34] falls asleep +[1518-06-13 00:52] wakes up +[1518-02-24 00:19] wakes up +[1518-06-19 00:23] falls asleep +[1518-03-25 00:30] falls asleep +[1518-02-28 00:40] falls asleep +[1518-09-19 00:32] wakes up +[1518-05-19 00:43] falls asleep +[1518-05-07 00:37] falls asleep +[1518-07-01 00:13] falls asleep +[1518-09-14 00:03] Guard #911 begins shift +[1518-04-19 00:49] wakes up +[1518-10-25 00:59] wakes up +[1518-07-18 00:49] wakes up +[1518-03-10 00:00] Guard #3449 begins shift +[1518-04-18 00:00] Guard #3121 begins shift +[1518-10-05 00:05] falls asleep +[1518-06-28 00:43] wakes up +[1518-11-06 00:16] falls asleep +[1518-09-26 00:16] falls asleep +[1518-05-15 00:46] falls asleep +[1518-10-10 00:55] falls asleep +[1518-11-22 00:49] falls asleep +[1518-08-19 00:02] Guard #1223 begins shift +[1518-10-10 00:03] Guard #2251 begins shift +[1518-10-31 00:57] wakes up +[1518-11-08 00:16] wakes up +[1518-10-25 00:01] Guard #1213 begins shift +[1518-03-18 23:56] Guard #859 begins shift +[1518-06-02 23:48] Guard #2753 begins shift +[1518-09-15 00:51] wakes up +[1518-10-15 00:27] falls asleep +[1518-02-14 00:50] wakes up +[1518-03-19 00:37] wakes up +[1518-09-18 00:42] wakes up +[1518-10-06 00:01] Guard #1733 begins shift +[1518-03-20 00:40] falls asleep +[1518-09-29 00:37] falls asleep +[1518-07-27 00:36] falls asleep +[1518-10-27 23:59] Guard #911 begins shift +[1518-10-16 00:56] falls asleep +[1518-10-21 00:28] falls asleep +[1518-07-16 23:53] Guard #1597 begins shift +[1518-05-17 00:25] falls asleep +[1518-08-22 00:04] falls asleep +[1518-11-03 00:04] Guard #2971 begins shift +[1518-10-10 00:20] wakes up +[1518-05-11 00:52] falls asleep +[1518-08-03 00:54] wakes up +[1518-09-13 00:59] wakes up +[1518-08-11 23:59] Guard #1213 begins shift +[1518-11-13 00:47] wakes up +[1518-04-27 00:03] falls asleep +[1518-10-10 00:57] wakes up +[1518-05-27 00:41] wakes up +[1518-09-02 00:23] falls asleep +[1518-09-01 00:30] wakes up +[1518-06-21 00:48] falls asleep +[1518-03-19 00:35] falls asleep +[1518-09-12 00:49] wakes up +[1518-07-12 00:09] wakes up +[1518-06-06 23:56] Guard #3323 begins shift +[1518-09-21 00:55] wakes up +[1518-05-03 00:39] falls asleep +[1518-07-08 00:57] wakes up +[1518-07-28 00:35] wakes up +[1518-04-23 00:24] wakes up +[1518-03-04 00:04] Guard #1733 begins shift +[1518-06-11 00:18] falls asleep +[1518-05-09 00:17] wakes up +[1518-06-17 23:57] Guard #3121 begins shift +[1518-08-15 00:41] falls asleep +[1518-03-15 00:12] falls asleep +[1518-02-16 23:59] Guard #2753 begins shift +[1518-11-08 00:13] falls asleep +[1518-07-06 00:55] falls asleep +[1518-02-21 00:54] falls asleep +[1518-07-10 00:11] falls asleep +[1518-05-03 00:58] wakes up +[1518-10-08 00:41] wakes up +[1518-07-19 23:59] Guard #3121 begins shift +[1518-09-14 00:23] falls asleep +[1518-07-23 00:29] falls asleep +[1518-05-13 00:42] falls asleep +[1518-07-13 00:47] falls asleep +[1518-04-04 23:57] Guard #1439 begins shift +[1518-07-16 00:57] wakes up +[1518-06-25 00:01] Guard #2903 begins shift +[1518-05-30 00:03] Guard #3121 begins shift +[1518-10-09 00:41] wakes up +[1518-10-19 00:58] wakes up +[1518-08-31 00:51] falls asleep +[1518-04-27 00:47] falls asleep +[1518-11-01 00:37] wakes up +[1518-03-07 00:25] wakes up +[1518-08-16 00:35] wakes up +[1518-11-16 00:04] Guard #1439 begins shift +[1518-08-14 00:00] Guard #3023 begins shift +[1518-04-04 00:38] wakes up +[1518-06-18 00:56] wakes up +[1518-10-12 00:47] wakes up +[1518-10-07 00:35] wakes up +[1518-10-29 00:59] wakes up +[1518-07-08 00:42] falls asleep +[1518-04-06 00:04] Guard #1223 begins shift +[1518-06-10 00:03] falls asleep +[1518-05-25 00:55] wakes up +[1518-06-27 23:53] Guard #1213 begins shift +[1518-06-04 00:55] wakes up +[1518-11-09 00:36] falls asleep +[1518-07-11 00:02] Guard #1439 begins shift +[1518-11-12 00:29] falls asleep +[1518-06-10 00:35] wakes up +[1518-02-15 00:41] wakes up +[1518-06-09 00:51] wakes up +[1518-04-15 00:33] falls asleep +[1518-05-29 00:57] wakes up +[1518-10-09 00:46] falls asleep +[1518-11-16 00:36] wakes up +[1518-07-31 00:04] Guard #3023 begins shift +[1518-10-07 00:51] wakes up +[1518-10-23 23:58] Guard #2851 begins shift +[1518-11-17 00:48] falls asleep +[1518-06-14 00:25] falls asleep +[1518-05-19 00:14] falls asleep +[1518-05-05 00:18] falls asleep +[1518-06-03 00:41] wakes up +[1518-09-29 00:01] Guard #3023 begins shift +[1518-10-31 00:20] wakes up +[1518-05-28 00:35] falls asleep +[1518-10-04 00:53] wakes up +[1518-03-26 00:02] Guard #2851 begins shift +[1518-06-07 00:36] wakes up +[1518-04-08 00:43] wakes up +[1518-04-15 00:21] wakes up +[1518-08-18 00:59] wakes up +[1518-08-23 00:00] Guard #233 begins shift +[1518-04-09 00:12] falls asleep +[1518-08-05 00:14] wakes up +[1518-07-03 00:45] wakes up +[1518-11-23 00:57] wakes up +[1518-03-21 00:24] wakes up +[1518-07-09 00:29] falls asleep +[1518-07-06 00:51] wakes up +[1518-03-25 00:02] Guard #911 begins shift +[1518-08-05 00:38] wakes up +[1518-04-26 23:48] Guard #1213 begins shift +[1518-06-13 23:56] Guard #887 begins shift +[1518-10-19 00:56] falls asleep +[1518-10-28 00:46] falls asleep +[1518-06-14 00:12] falls asleep +[1518-11-09 00:40] wakes up +[1518-02-09 00:57] wakes up +[1518-09-24 00:50] falls asleep +[1518-10-20 00:48] wakes up +[1518-09-07 00:07] falls asleep +[1518-09-01 00:54] wakes up +[1518-07-26 00:55] wakes up +[1518-05-12 00:44] wakes up +[1518-04-17 00:01] Guard #2851 begins shift +[1518-06-03 00:05] falls asleep +[1518-06-04 00:25] falls asleep +[1518-02-16 00:59] wakes up +[1518-05-02 23:59] Guard #1231 begins shift +[1518-04-16 00:00] falls asleep +[1518-06-26 00:47] wakes up +[1518-10-02 00:47] wakes up +[1518-08-24 00:40] falls asleep +[1518-07-08 00:22] falls asleep +[1518-11-11 23:57] Guard #1283 begins shift +[1518-11-21 00:57] wakes up +[1518-03-11 23:47] Guard #1223 begins shift +[1518-02-17 00:27] wakes up +[1518-08-17 00:02] Guard #1597 begins shift +[1518-08-30 00:56] falls asleep +[1518-08-31 00:36] wakes up +[1518-04-27 00:24] falls asleep +[1518-10-07 00:21] wakes up +[1518-11-05 00:03] Guard #1637 begins shift +[1518-06-29 00:44] wakes up +[1518-08-16 00:02] Guard #2851 begins shift +[1518-04-27 00:59] wakes up +[1518-09-22 00:59] wakes up +[1518-04-26 00:16] wakes up +[1518-08-29 00:59] wakes up +[1518-09-12 23:59] Guard #1637 begins shift +[1518-07-13 00:36] wakes up +[1518-11-04 00:14] falls asleep +[1518-11-02 00:03] Guard #2251 begins shift +[1518-02-09 00:53] wakes up +[1518-08-10 00:34] falls asleep +[1518-11-09 00:00] falls asleep +[1518-03-08 00:17] falls asleep +[1518-03-08 00:05] wakes up +[1518-10-12 00:50] falls asleep +[1518-06-29 00:04] Guard #3323 begins shift +[1518-07-26 23:52] Guard #1597 begins shift +[1518-03-01 00:55] wakes up +[1518-02-28 00:02] Guard #2903 begins shift +[1518-05-11 00:55] wakes up +[1518-07-04 23:56] Guard #3449 begins shift +[1518-03-05 00:04] falls asleep +[1518-09-09 00:13] falls asleep +[1518-08-24 00:04] Guard #2851 begins shift +[1518-05-27 00:12] falls asleep +[1518-07-22 00:58] wakes up +[1518-10-18 00:04] Guard #2903 begins shift +[1518-09-12 00:00] Guard #2753 begins shift +[1518-09-26 23:59] Guard #2707 begins shift +[1518-08-16 00:53] falls asleep +[1518-09-21 23:58] Guard #1213 begins shift +[1518-11-03 00:45] wakes up +[1518-08-31 00:57] wakes up +[1518-04-15 00:15] falls asleep +[1518-08-06 00:13] wakes up +[1518-08-21 23:50] Guard #3323 begins shift +[1518-10-11 23:57] Guard #911 begins shift \ No newline at end of file diff --git a/5/code.py b/5/code.py new file mode 100755 index 0000000..5aafd90 --- /dev/null +++ b/5/code.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 + +import string +import sys + +def react(code, offset = 0): + reacted = False + current = None + previous = None + index = 0 + for c in code[offset:]: + if index < 1: + index += 1 + continue + try: + current = code[index] + except IndexError: + break + previous = code[index-1] + #print("Checking {} & {}".format(previous, current)) + if previous.upper() == current.upper(): + if previous != current: + #print("{} and {} reacted around index {} ({})".format(previous, current, index, code[index-2:index+2])) + reacted = True + break + index += 1 + if reacted: + #start = index - 10 + #if start < 0: + start = 0 + return (True, start, code[:index-1] + code[index+1:]) + else: + return (False, index, code) + +if __name__ == '__main__': + lines = sys.stdin.readlines() + # Part 1 + #for l in lines: + # reacted = True + # code = l.strip() + # index = 0 + # iteration = 0 + # while reacted: + # (reacted, index, code) = react(code, index) + # #print("{}, {}, iteration {}".format(reacted, index, iteration)) + # iteration += 1 + # print("Resulting code: '{}' ({} iterations) has {} units".format(code, iteration, len(code))) + permutations = {} + for l in lines: + for character in string.ascii_lowercase: + reacted = True + code = l.strip() + code = code.replace(character, '') + code = code.replace(character.upper(), '') + index = 0 + iteration = 0 + while reacted: + (reacted, index, code) = react(code, index) + iteration += 1 + permutations[character] = { + 'code': code, + 'size': len(code), + 'iterations': iteration, + } + for character in string.ascii_lowercase: + print("Option {}{} result in code length {} ({} iterations)".format( + character, character.upper(), permutations[character]['size'], + permutations[character]['iterations'])) diff --git a/5/input b/5/input new file mode 100644 index 0000000..b56cb02 --- /dev/null +++ b/5/input @@ -0,0 +1 @@ +ZzNnMYytTtfFTINnkKimYUOouyPpvVokKZzqQQqTtMmmIiMjJryYvVRztJjiIfFyGbBgYTgGLfFHhlsysSYoOsSiIfpPFcCrRVvbeEuUAXxaOotTQqbBEieEIeBNnlLpPvVMmfHhFjuUXxJmMmMwWvxiIXVqQaJjApPrbgGBDdMmZzAeEGgUoOuaQqronNHhNnjJuUUukKOOoRVUCcuqQKkvTtAaMIimlLTtkKCczbqQaAgGIioOWwQqANnaBrRTnhHNlLtbKkBRfFjJsSPpxXrzZJjmMuVvUbBMmIiZZMmCDdeEjJhHMBbPgGpqQmmMuUDgGfaAFRrGgdcrRyYEeZzWICcibBYKkywcCIIuUigGioUHhuOeXxHheEGgVvEiIIiqQvVrRRrmhHMslLdVvgGbBDSVvzZpPkKHWwHhhSYyCcsCcMaAChHVvDhTtWZzUVJjvuwHvwgGWVSpPskKxlLXdcSrRswWaABKkDdbPLlpdDFQAaWwFSsEeTtJjfGgAaoyYOqFffFfMmBGTeEtggBAabGYybUuCzRrdDZcUuJsSvVuUjmlIgGMmHNnpPEejJhAxnNXaxXWwTtAFfaisEewWSxXLjbBbBJaAbIixXMJjUCTtIiKkUuOocuKaUuAYFqQflLOAVvaoWwbByLGglXxdDkNuUnJjMmsSpPRrXyuUhHMmYxIiFxXrQoOqgmMbBGgGJjJuUjvVvVcTtHhZWIiwjJJjDdzNEenGiICcgeUuEMtTqQEHheHhjLzZlJwWmcCIiPjJTtTepPEtMaAmaApXxHvVEekKpPhTrtTRtkKbTtBRrZylmMlbBLLqQYtTzTCcnNthHgGnSsiIHtKkLzZlRrTjPpJKmMkwWhMUDdVvggGGuyYOjhHeEJkKorQxXzZzZQqqcQqCSsBbRBRQqfFrRXxfOorRCckKtGgZzcCTFHhvqKZzxXkQdDbrRYylLIiaAeEBVpJjVvPFuUfiIFdDfESsfFethHTMZzmzZpPDgGdXNnXiIvVxNnHhMmxGgoKkOMiaAImpPDLwWrzZYyRrEekyYKfFRXxlvVfpPlLEeTWwtFAiWGgwIaQouUOBbqRrYyIiGzZuUlLgvVYiLJjvBbFfVCAaoWXxfFTIitqQwQqSXxoOfBbFsbBOcnJjLlbgGBvVXxEeyFfYZDdPpzctUuTdLrRlDcRrCCwhHzJEejbBZzOoEeGgdvHhVDLlGgTtBBbEebVvWBFfezZEBbuUbULlubeQqHhABWJjwkKbFfaEiILlinNIssSSRrYQaAJwUuWXxaArRjoOSJjsqyMmLSNnspPlzDdZQqffFCNDdnnNnNcuPpKsSpPRCcvVrzZUfFuBbkUFcyYbBnCDdcRrkKlfFLgGEAaeDdCckKuUyYNTtTtiEeiIITtxXxSsFOofFfeEXIidHhxXDqQeEDdcLlphHdDPDdJCuUcDhSRrsJjiIHbBwzZWHhAfFadfsSoOsHhSnNFjqQfFuvBtTbVUItTYsXoxQqXoOOCcxDdZzsPpkXxKHhSsSSEetTozZLlOEBbeZzyBwXxwWWByYfFLlbAJjAYyGgRdqQWwDrRrJjaXmMNnxFfXlyYFfLxrRavqQzZVcqzSsZHhjfFJQpPnNcCCuUrRKkYyBbGQqzuUZuUiIDdxXEegVTmMtvXpkKPylLYIiAaFKkBhHAabIiSsMgGZzIimdDfazZeEvVLCcUrqQtTDQQqqUudNnLlHhWPpwgGkKbBqrnNRjJsSeEQaASshHAxXapPRuVvihBbTGgtBbHvVImDdMTtxXxxXXOtTEetUAaujJZaOoAfFzTXpPxyYCcVEeVUuvtTJjGgvrRotJjiIbBReEnNrTyYzZaAxvdDSQqsVJjwpeEcCPWFfsxXuUSwoOYGgyWTuUGqQuUgbBtWSshNVvnHnNJjIieEwfFLlyYieEIXbTtOoQyYrRqBynWwUuNYMaAaAIrRyoOxXYYOoyDQlSsLVSsObBovxXAaAarRqdZHhtToOdTtGgakqQDdXxCcWwKDdADWwzXxrjJvVRZQqqbBEeQIoOpsSBXxsSLhZzmkKMHmMxxglLgGhHXxnNmMaAGXXlZzioOrRISsbwahHAWSgGfFEZRrwWKvPpVrRKkQqkzgdDGeIoaApPOKkpPTfFALMmlaMmtyJjcCaAdDGyEezZYgbBMmYkQqKecCrhHREhxXWzZJjTtMhHmoOwjlLJUuAQqvCnZARrajAaGsSgJzsOoiISAaoYyONBsSHhUaARruKkqQbMriDdnRaArNIaowWzkKmKkMhJKQqZzkXNnxbMmtTlLVvsStTBJjiIvVGgBbpPpxXeEyWwCfpPnNBAdsSDazZcMaAGrRguUzZmWwpPLluUTthHMmJjjoOQqJgGuUvVJjlLPDdGgpriIRtCcTNnoOIVviIipDdHqQhPRMKkmmLlkKMeEsEeScQqCrdDgTbBtuuoOUUVOovZzWjJHhgGwGrqzZuzZUNnQyYDdRyhtTHzZYikKWKkwibZzByYTtIItTCHhcCyYKkcxXjJMDdTKkPptgGmMxXmrRMmAadzZDMdDMmAaLleEMmNcIvViCLGgeEchCcHCtaATtTrRQqjqQYyfmMhHNNnCcquUQpIGgiPktTWwKoOTbBtikKkKFfJjIirCcRnNItTILljJAainhHNueiIZzyYxXsUuTZzCcOtTEeDLlCcdobFRrtZzTfaAjMmJjrRJNFfnTtOoWHaAwWBbrRhwVvOoBtTfvoODbBouUfFOoOtnEeqQBbJxXEeFfeEiIoOXaKkAGQqWwgNKrSsRTYyoOtXRqQrfFKkjTtoOhXxLlHJjZzJjJxDdzZpnNTUuSsxXrRtzZcCjJkhUueNnmlLQqMjkKJKkhlLiQqlLBdDbIbBnOopPqQcCNtwWTdDsWwzZpPMsSJoOjSsPpAahSLlsQGgpPqHClLwWcdqQzZiIdDOnNsSCcBbbBpqdDYydDFdDQqfFfuUhHAauPgGPppPpdDLlBbYyUuUKkQyoOgGNnYpPNnUumMhXxHDNnnlLvVNrRwHcCtNXxnrRPpTfFYyrRjJuUwvfFavVAdDOwyZdDzMZEtTezsCcSmjJcCynNsSYyAaKkYHhetTVvwZzBeTtaAZdDWzZWwjrRlLJXSsxjJwlyXxYwWbOohHJneEIiFZzsrRwWhHSfbwWbBlLBwxXcCkKWyFfwWYnhHNWccCCjJFfagGAwBbhoHhrRJjTtPOmHtTnVvNhMpPPpgGgPpGYUuyHTthWwoqQcCuUQCcqKkdDlDAWwadPeEKkuUpLqcCmMJBidpPDCkKcIMqQwWmbvVwmwWYyijsSXxdDOoJNnCcUuLlIMMmCSszZZznNcYyIiuUWPpPpnNNnwTtfFZzZvVzLUsSoIiOLpvkKVCHyYhGgNnOonNncCgGWwFfIrRIiitxyCcYoOVLyNWwToOtYHhNnyUGgupPEAaenQtTjXyJvVmMjBEeJxXjOoHhmNntGgtThHHhJNnjTmMBkrEeRKKkWwyGgUurRrRMmBWkKHhwkIHhhnNGgHkKkrRqWwQKGgiKfoOFjswAaWXbBSsAaJeBuQqXxjJUIilQqRreELRCFfdYQqytTAAaUJjuLlBJUujtkKPpRrNqGgKkZzOoLlbBQHVvhVvHQmMUPpugGOozQbBHhlLqZzUuZyYMmTtZzcrRCKkzZqaAVTtkKzquZAazUQkKIiEemdDpmMPgGCclpPpPkUuRFLIidgdDOaAoGgmMSsGDlATtTQqwHhcCHhKkWthHaUrivVIVvRPEeXGgxjTtqQfFyGghHYGgtTdTZxXLlaGzHhUuZggGPmMCcVvVvKkhfFNnHuAaUeSssSuoOwWPpUZzEoOpOBvwWHhVzfFXIixxRrWbBTZzmIiMRrtrRHhhHyYvVLlwXUHhrRcCCMmFELpPjJhBbgKrEelLRWwoOZzGgmbBMNnsSaAZzDdkeETJjhBzZbcCHexfZzFBbXlLWwWwXxXFHhBbHEehfKIpPihvDdVTdDtEBbyfFsQqStTTfFtHBzZeEsjJSQqbWwpLlCcPoOcyYmMkKHhvcDdAamMhKvVaIiuUwWAUwtTWweOoHhkfNnvLlzZVFbGaAWEPppOoNndFfWwPQqYypeEmMzZTtSsHhFfHhYyIrRRrMmDdLlNbBBHhbPpnizAarRdzyYZDExOoXeSsZSsrRoMmOVUAauvdDDAaSfFpPTtsYyPchlLPpkDDYydRcmMCJTtdDVvipPBVvbEXxSsiIxXePpzLliIWpjJYyeEUuQaCIiUugTtGfFhbBfFhHHlLaAHhHhQqxXfOYZdDzyvVoRrevVQQquUnNqMzZqQwEeWaAcCJLgGunNqJjGgmGgZzVvMWwiIUrRuvIiayjJqQYuzZUNuUwXxWFfmMnboOHhAazZtTbBtTQECceRSsrQejdDjJGHhiIgxXijJdeEDIgGXxHpSshzZjJvVJFCUKkWwVxXvunCcuUNyrRfiyYPqyYfFQwWsSMmpygGhqQMmbUuxXIvLlEeyaAZzlLLzZlHhcCcCdDRrLlLHhlcCpPnjJNGwvVzZJjbBWYYyZyYkKuUrRMBcCbeEIJjiPqQcDdEeixXIhevVEGgHFsSEeZIizttpwWDdPZzIuBbUrRiAaYrRTtZAazESssTtSsSvVUaAdDxSvalLbBUuAIiqsSaAEJjeBCcDdhHdDmNnMJjAaEerRbnGguUVvjbBdvAaVkHAahKkKKkqgGQrAaRJFfGgHhyYoOeZpnNPgYyGzcCEhHCQqkKLliMmumdDiIMUIuaWwAUlXtTqhmMfFgIibqQBXxYyHJiIjWwGgkKpPeEhSsnVvGgpPrRirRQANnIdxXDieAaOocCEVAavaiIqHhQLpPlEYyeDzNnZYQqNnTtzZJcCjfFpjJjVvxXJjLPpfFlfFWwJOvVJjoyYDdVoOvVvzXxUuZYSsfFyCctTxKkUfFutTLlXzSSsjJcoOwWCUudnNvVDscChHmMoOBbouUOZVvtiIeEXxTPKkkKIiXxydCclSsLNnMaAmlKkJPpjoOKkbFfKkBsSwWNnLsSGnTTwCkUSsyoOYGFfwWbqQHhLjJiIRRrrdDEelnNBvsSxXxfFXVMmMRrmZCcHLlIiDSsQpPijDxXdJIiJRrjPhJqzwWQqaIiAIAaSDdsSQmrRdncCOortvVTULDdJjhfolhwWJjMmKxXkMuUvVbwWysSUQnNquPbBEedrRjgGJDxXdHhbeEBrRUuMmfsSWwFDNnSBbdOfFYDdyRRrutTUjOHhoXxJzDdVmMgGxXvGSsgHhxXWwhHkKdDtzZkKuTtZzcCOfFoUTdDUuiIMTtHyYmzZMhsSlLRiAwWRyfFEeiICMmcYrPpOBUumMXSsZQSsMPpmqzSsDvhdDHzZDbQqBdvVoqrPpRQIIdBbsEQqhHKkNbkKwoOWwratTtTjXxXpPxEeJjJAJuUjREembBJjmAHhFfgEeXtTxRyYrwiIWsSGfFbBEesSvDdVeXrQcVOJjoDdHNnWwhxXHRrMUSsuAamHoOIOQqoihuUyuaALlIirRmMnxXNpPZyYEjAaJEROoajAaVvRrpMmPJAOpfFJqFfQfBQqjJbFjPkKkoOTYkKytgGtTUuKlLoUurRWFSsfwgtTGeEOoBjJbkEeKOBboUuedDbBTtEjJrXzZxYyNnfDdYyUcCUuwWemMsSjJoOEFffFSskKGxXgwWxtTvVuUXLluzpIiNNnhSsHiIncCFHhrUuQLDBbqWIihHKkFfNdDPpnEekXxKldCgGCvVcCwaAwWmWwxXTtIikgGLbBXxGgPRTtxXCcoxXxkKUuIiYyjJKkXGgOkSSOJjosOoOcCmjcCXxXxJJWQqwZpPzFfnNpedTtnNWfsSFwpJjPuUuUaAvVxUuFfFxXdDxFfDDddxHhtTKChUuggGGfFFfZRrzfjJPGgrZHhzgGyYYRrvgGVyrRWMmwKCckiIMuUKkBbtLlOJCcjZzobBDyzhlTcLlEOmgGDdMAaYyLlowXAXxvVWZzXEeKZxEeXMfFuUbEeBULlumzWwkEeeExqcCHhCcVvLlxvdEeDVZzvVodPmMdDpLHeEhEebBBzNnZbldDIivVulLeEUUuaNnrRCLlcXxoOApTtWzeEPpZJjgXxGExXWwTTtxXtVgAaaAGdDvLSszZcCTrFfROoCIicBMmbUiIuStXxTsuUJHhAKksQqZzCcuIkePrRdraARLlkmMcCGtkKTgaGgBbPpDAajJPpgGAaamMvVbBLlAAYyaGfFAagjJLlzuFfORroOoNnQOoYyWRrkKsRryTtYniINTwWtaRuUEerPDdjJIiQGgtTqpOOVvkDdTtZAfFlxXzGzgGIdDiUumUuMKkCNzZUuPpzZZbBmzZMuUZfdiIYyQqoezZEDdIiwCcWJjrRvhHVnNOsSCcoOJjoJXFfxcnNCjJXxUujHSslLhAaiIOJcCjHhDJJjxXtTPpUuVvBbjdkdAzsSZXxRHeEFHhfoObBfFyEIieQqEeWSswkKYEpPxVvgZqoAKkaxXPpVNvVOlLoGgjJjRTjaAJEqQbBeaAdgCEeQoPpSsOcQqCfFSsHhAMmarRLsSmMlBqDKkUSTtsVvsUuTMmtmMPSsSsYyLVXKkxvDkbrYyzrRnNofhHFVvsSTiuUmMnNIyYzlnNLQxepPEXtjEenNbBSsSsPpcCPpJjJyjJYybBYDPfFCcpzsShWwHKkHhZoVvOomMoOyYiIkKkHhKSrRqQAQZzqaswiIbvvVVBFEeOoAabBLlTtWwQHJFfcCjhMmdDCUuIDrRdEKHEzZeErEpYyPpPeMmnqjcCcAaCsiIVsTtjGgDaAdAaWGgwjJbBJESzZvVsFjJfZzjJMmWyYzTtgGZwNWwnAaQQNnNZznECcqjGgJQqmrlLRbBWBOobBbvVIigGRbBWwgGkczZhHzZTtueEUCbBDdFmdDMfAaDKkrRdjNcCbMZzvVMmmBBwWeXyYUuOotmMGuUgyYTMwWAamkHeENDdnLlhxXZSszOZzGrxXRFgGfmMMmKCcpSsPLlYzZyNqvVQdDnSQqiBbcCmeEcBlrxXRbBOoAaLlmMNaAWwnLoSsLlCZzKkcwFPpgGyYfWGgzCcZPpFeEfsIqHHpCDdcuUPGGgrAhHiIoOapPRFMmnNfzZEBbqQrdiTtjaSsMkWwPphsvVSHVCchRiIAarUuLleEhHAepPtTrrRKvJjVkrRfQqaicCIyYAFHhdDVqQvCcMsSXxMmmaAeHscaGgWwAZBhLZzSLmrRMGgJKUiIfOoiIsSrIiRkKYynwWNrLfFlUJGRhSsLlfFfFTUuWtTcAVvagGeIGgRrYyiMAqQivVIHhFRrfKWBbwNZmgOoGoGgOMsSWBbPpTtAaOwWdrGhxHqQhMxXbBUEeubQvNmMmMmjJmMDUSOHPphcrNnRCwWUGguqNTfFswWStDbBbTtrfwWmMJjFMmUXxuRqQWMmwpxwWXeEOoxZzdxXDdDXCTPptOiIonXxPpGgiISQYyqsjJOBSRrsbFbBCZzuUKcCLlCZzheEWwdDjkKCcCXuUIGkKgVvYyvVZKBbkRrzWwtThglLtTYyGHKCckZYylGgLtkKagGAuUbBMywAEelLaIikKVvHYyYfFyWwdDRMmKtqQfFTAaFfPZlDdLHIegGBbEiFbBfJjrYzZyRJjWoOwsSwWOoiIAGgapPhvVBbzZzCWwxXcouUAlLaJjQqlLtjJTqazLlZJpPHhQCwWcqjAAtTsSOiIoajJuRrJjrkKLlRpPRaRrAryvVGJjgaAunNbIDZRGgrzdtlwWLsSTmMRWOowVvLUuRAarlHhzwJjGjJgWTlLFfrbsSBlvwqyxzZFQqfNZtvVUagIiGAJjEIiJEeIOFfmMXlXxOQKkbBKACcaqQDcJjCdAWwXxWvzXxzFfSVvRrPQLlOoJHQqJjhMjfFJcCzZbQqzSNnNjpPJnsSmnNMPXMmxTtFLlfpNCcnwWNYFfyjUuVvUuOoLlwWJndDPpDIilgkbBiIKDdGSstvVAIiarRaAgdDDdkFSPppPfFGWbBwkKBgGIaAxBFfaAHEeeEwWKpPsFeEhHoObHhRrBfDdlgTttTLlslkOohYLTtNnIUfFsjIiuUuUJUuuUAVGfWwsShHMAasyRWwgGOPpeEgNnNnGYhHynNwbBbBxgGAaTtezZkKEXtyDdzZYyJTTtdDMdDImMiIwKknXTtxNrVvrRyYXwNnWeEnNPcCpQJjxGQqgwWhHXwizZGEeIiiqkKJjQwWTtpxEesSbBXJFfOPpfeKkKCiIvwfFjIikKUutTlLBlLbbBJhHjRdtTDsUdDuQqDmMQqdWwdmXNLMmlYybMmBnMuUgzWxQDdCcqDdvcvVOoQqAaCPpkKVKkIXxgByYXxxXHdDhZjiIJOwyYWUuHhgjJaAWwPLmMvkKpYypPTHhHhHxVRAarvjJqbBSsRrQTDdtwWpPFyYHMmAaJcCzcCeEZzpPZmTkKkKtMCcVOJsSDdjPyYsSZCcTQqzqQZhcriGgSoOoOKHlWCcwPpPpIiFMmFfYggurRUPpXxWwGPpdrREpYBHmfsTrRjpVvPHUnwVvNnWnNwccnUulLTtrRHvVhMmBbNiIBeElLfFbOoFfXvVxYjJSRrsJjeENnxXzZnMRrIiNsSnQqVvmzZQqNxTtvtEeNnszzZvbBqQyltNrRiIDZzQQqqLldQLlhUpDdPuohHmMMmEAVvaergGREeyYavKmMdGgDkeEVoAafFOXxAxfFUesXxdcCDKEeUVQqCcTtmMYyrqkfFKkKQlaUujJZZvVzWBbTixXwWcCOiYlJWwjLPploOLlwWsSOoRNnNKkKbUDdUjfosSWwIBbixKyftUuTaGgAFUxXuYfdDFwWwEeGgZDQwIiWqgjJGpPRaiZXxzQuTteqKRroOQgGJKkBnNoOjJRrZsdbBDSyYzlLQTPwWkKrdDeGghHuUzZVcRuUWwzZrqHhmiaKSgxvQMmwWRmMbBtRcCrsSTcCmMCcoJHwWqUuTttTBbHhQhUuDdOmMdaADoFflbBLtTLEHheQrRkKSsbAaIidDshHSlLBqlvVgOcCoOoqQGeEStRdDRrrimpPMBbVvITuUkKyKgGkQrRqYRRYGgyMvVmvPtAalLTJbBHiIhjpKCldPSUuspWwGEyYepPDjJxUuPpcPpTtCFfXdcVvlLVvWwOSsoChgGyoOYIigGPpBbfcHhCaAAaIjozAKkaLlnTtNnNsZzDdKdxXDkyYhqFUuaAbBaBoObAavFxXfFTtTDoBVQqPDdpvbxQqXewMmlSspPnNMmuULluKkQqoSsOsNnSkkBMmDrAaRqsNnwWaVogGOBbRrYIiyGjHhMPprRmQqbBwWJgHXjJTtGabXxBIiyYSBbfFdDZzsaRrAiIejJKoOksKkSEWRrLKkEetpJrRSsjdDBhVgnaAqQSsiIpzNhHZGgznZPVvvValLAiIcLlGxhHyxWwKArRncOoaACNfBbXXHhvVGNnJjjJgxxybFflLoGgPpLlfFOJHMKkVqQxAaXUAbBiNnJjqTmMSsNnDdYqQEeZCcuIpPxXiUGgeEpPfvVuKMmFfdDcGgCkSEDJjZzissSRpPbwWBodDLlGOoYipPBbhyvVYhHgwWiIPpQqXxGfFHYoOOoymuUvNdyYDvVnVEeJjSPMmLlpJdDjYCcnNsRrpPvrRVvVbgGqMwwcjmSCiUSslSqQbBdDYSChHwWQLlPNfJjJgGjxeEXFcCSstlLTeEAneEWCnNVRtFvVLlnmEJjSsgGICcfFDeoOAaAYkoFIifzZVvgGOxZhHFhORrbBEezZXxEYymsjGVvShLlHnRrYyWwqQNbBsRrdDFfbxXjbBJBwIicpPhvIiVvSseEyYVFPpNnDdDfkKweBcCbSshHZdDzUuOobuGMNEVvmjJMeOUuIiTtoqKmMRrpRcCzZrFfhHlLLDoOZDfFTtjJduBRrkKeEaAhNnHBbMdlLlEmMeYyWwWwAapPPpXxkpPKWdDogxoOGgtqdDWwNhbBotTOlLZjJzAalJkKlHwWyLYsiIoOSOoLqkwWKLZnNnNJdAHhbXwEbAaBbqBYiNnIyCczZXxAjfCVvcWoOwAdDaDptuUWZNnRirRIizZBDdTkAaKtbBbbPuRCcnNtTLmMlGWVvMmwAJjedeEsOoDyQqcCaAeEgGUAaujDdJYJkKBbjnSuGgOqQqQWwiFdzkKsUutQHhzZGgikKIldDLBrmVbhHxhzMyYQWwiIqmMlLMmnNmPpRcCrWNnTuUqQBbvOolLCRrkDdKNnsYBfFqQaaaAAPpYeElpmsSxFfXQqMOoNDYyeEdOtTtzcYyvVxnNypnsGpPgtiyNnrWLlmyYruUIXxJjlLcziInfFnrrwWHhmMRrRLltTuUGgFfUwhQxPQqpXMmcRrCNnAHhmMtTzJOojZaEevgGVfjMGgmmMgHhnNGvzZVgkmBqQqgGBbGsQqjfFzVyVsQxXvzZqQVzLxXjJNIinhHCvVcbmMBeKkJjlQdDjcfyYFjJyYCtTBuLlUcCbQWlLyYgGyYyWvVXxwpLAalTtPklLAalLdTjJQqbjJRkKXwWfKkFUdDuHiIhyPGgapRrDiJCcsppPPNnLbMmYyKPQqpyYUlLJzZuBwWbiIIiKkVvmiAXxaIiItTMUuSyvVYzGgrtkZzWAxXIQqihHauGglFfLmMvEeqQZzrsnNcAaCRBbOCQsiRtTnvVNrIaAaAkfFKnVvayUueEWeEwYyoOigfFQzZNFzZfzZlLwCcbuNdDlLeUueEEsgGGBbgSSAaDOoMmHUuhXVvxZzjJwYCcyWTMlLmXxYUuVrWxzKkEyYgyYPpuUIixqQXOzZiZezZERrsSTJjUukKZbvVBCIidDsSwYqTQRrqrJJYvPaDYVvqQyVEncuUxwWHOolUZRrtHwZkQqKRzuUYyZFfaAXxmOoQqMRrAalhHKNQVvqRrsSnQqeqbAQZzqrRaUyYZrRzlBbtOoHhTsTSCXlynNBbZAanNzYDMmdDvVJVhtToIBCcbiVvMHhmUuIFmJjMSNcClzFfdoOJmSIiLlsKJjhgGiIEeFkKFfdsRMmrxgohHOlQSMmsgGqfFQaheEjMklzmYywWEEeIyDnoOeTPfFpBbtkagGAaAKCfFcERrFzZfiINqbBLUFfFjJRriIfVZzaCbBEecADxXGHIicFfNwhdDIiGXgGhaYwWyAJjlLrROlNnsScCLJjfFgvJpFfPtTlLvXxVlmMEyYBwjXQFWIiwQiIPpEeqfnUlLudDBiXOJjofWPpwvVkqMyYmksSspwqhHkKnNwWQBbTrRDdZAazyYmMcFHdDDdxXhTrROyYDdpPinJqQZzjQdGgqQLlRrwWMmCcMmAapPnmrRMNzQqQcCqZKkzVvNnZqBvVguUjgGJwWsSbHFfNlWEZzSsfFwJPLlZzdYbruURMmXxMZzfqDygGYdDtTlLOVvoPJpmMyYPiHtTNnhLlvVIYyyplLcrmMEeRJjXxJmMjTtylsmMSjTInNDdyYicHHGghhGMfFAJmMEUuEeLNPpndCsxrRAHZrKkRPzLlvtTbPtTpBVDZTxXZzcCDdyQFfwaAaoOpPAaAWkKywWYTtUJjeqbIiBtTjJOXyYhiIHxoQVvFfhHRrakKUsqdDIkKeiiIvLlWDIqIiTPpPxsyYjJStxXTXZzZzpENrRJFfvVQqYBbyjmMVhgGfFfvVaEzZexTtXzsNzAFEZmVvJcCFfzZvDdGghHuUUrWIYQqySsOotTvyRcCQRJjrvVTtKQOokKjJQqFfjzgKktTGNnJYDdyjhXBbvanNlLDdmMxZBbzXofDdfFLKkaAvdDVduUleELaxXbBAvvAKCSsqWFdDjJqtTmMFWwbBLlNbBpPGVvgCrRfFnNSpTiImVvoPpOfwubeEvVBbnKkNBUqQOEeaYmCBbcgNLOzGKOomMXOoxkFcIiTuUQqBeYRryETtbQqtLhfnNjJmNTtnMjJdDouUUOoNZfhFgGAWwhHuTtiIUIuUlLiRRkKrrFfRrnRrVvMmdzZNsJiIMsyfFYAfffFoOKkGgFtVpPvTyYiIhHulLUqmMvfczZbHhTGPKkJsSrhHXHhxmmMnNVqJjnmMFcaVvHhTtuFzZWwVvfUkCJXCcZhlxkKLlSQqsxiqQhHwWXtTWqqDdxXgVqQvrRVCZYyzNnNrRnNRtqQTriIAaIwWktCcZzvJPzZpAVTmJcCHhpWgGZsSKkCczjYCIAamNcCZznKdwWExSXYDdZzywCJHKhHiIkoOhHQEJMmjecCzZxyNnYCcoIigGWOowcCGgPlSsFfUuGgOonGgsSxyYzZLDdIiPBcWQaAkIiKkKqrRQqbGbBgBxXkOoKgdDIykXxwmMwsOtToVXxvVvccKcIiEeskkeEHhFgGdDfWwKKSQSstTmpJjPGKkFfgMJjJjOomKRcplLZzSsPZwWATtZGYGyuSgGhfFDdHCcaAJfouEeFfttTIwWixfXchWwApJAXVkKvLzZzrRoIipPtTOpPIUuidqQDZXAaZRgLlPHhQqDdOdDozZpGMmJjJJDdhtTFkKzXqQxeEHsShZiHhyYaedDEAZLlLaxxsjoOrRpPkBNnJjcCuUjDEezJXsRrqQSdACcjJFfxXuUTfHhBboOFQqcCSaUKWclZzCcDTIitQqRUulLaZzpMdDcCqfYyOpLVvqMmpoZvWlBNnBgKdDlLYisJSsjPhYXxDtTFfipPoOQNnYyHhqpnsYyhHJjRrnNVZzvAvVaShHEeHPphiIxXNiIPoTtOcCVMmfFEevIyYmMvVcCdGCcnhMmHNcqHXxhCeEcZoOGaAgcCUuVUuviIVuPiXBzZxXPMIthIDUfuKkUfFxbBgvVxzZtTTtZvDdTBbsSTtYyOOWwoOSXxCyYFkeEhAkyuJwWxAazZJjgnwJjWsmDdMGdgGDTtsSqsHGghmMMLlXxJZtuIMmiwtfUrFfLZzgqOoQloOOKFfLiEeIlJqVvWIiwgGgUuHLlRQYyZzYndDVviINuUOolqjDdqLlQVoOcXxGtgLXGCmUuMEzZGgzIxIiQFfQqxXnNqsdmpaFHjJRrwWRrTtRrlLhvHhVqxXQYZzwuUlLHhPpNnNnxXaAZzGghWwjJHYyuUjUlyGzZqQcEeiPMmdDqPWwwtNnWFfXtLluUFBIUxXFfLhHhjRhHAavVCcrCcXxXiIxJmMZpPzHNsMCLlcmxXjyFflooOvVeEJUtTIXxEelxXLLRiIOxXdKkDoOWPpUmMfFNzLSsqoVgGmMvZzmpMITtieEkEdDbDdcCkhQqbBHjVvmYkqmMPpQHQqnZgjTtQlpPXcPpCzCeEcZxTpPTcCtSnGgNGQqhqQtNnTAaDdXvmMlLVEeuBbSsGgxXaALNJQqZVvlLrxHhKBbhHAaDGgCcdNnNQqGgsSWtTwWzZwnBSvVsSsUZLtLlTlAAyYXcFIkKtaAfFGHJKXxkqsSrRPIiCcPpIyzsSIHhsXxjJFbkJvbaUudIpPSEvzZslLsSsmcCvvVVMboOiIRhpPeaAEcqQRrSFhHMmCVJJjzZjYyfqQKkxZXCcxKbBiSgGgIiydiIDqtphHPaALVvkHhKlVXNnxfJBMmwWxQwWqqukKUzOoZDCvlKUCcuGUOyoZzoaAaqQjOoJgGzZHhfPMdVJhHoOjvKCuOgTtYyzZGXxgTeEtlLcCTdDwWjJQqDbiiILlVvULluwiIIAUuaiFffFwBbQqWukKBbLxXscCvCRRhHKsIiSjrRrKCczZcChvFfaABbIiopPOzZVPpRPouHGHhxXTjJGuUgtTyTDdYJjAXxZKPpkJUuUywWYyYuggAaBmZzAaMGgXQqciaLlqkKiFfZzNnUfowMjJMsbOkKcVvZcKxAaXuULIijJCcBzeEnFzSsZvIixXajgpSsPGylLQrhgGHvZzAaSsVUXUujJxuRDdQSFZLAmooPpwWOeEWwOXTzZJVZznNCchHCdbBDqbQqTtMfHsSNSMyyYpVpPvPJjmvQiPpqjXzZxPNorRKuUVvkOyNnCcYTtdDKYAaquUzfQqKmeEMtuEeUVuUkKvJjDdvRjJHkKibBIPpXxOooOorRqUuNnNeEnQXxbRpMmPlmMfjntrRTrkMAahHisXIzdgGDrRHqSsFfQJkKjTAadUuSTTtpPUgGIgNkKwdzZMwkliOomMGKQLBmMBrROowcyfFYhsSpPslIilwzCcPzZpZslLAldDLUOjhevVWwqQEeZhgbxXBZMFxXhEDCqQcOlfFsSLSpmBbMPqQtvVZibzZwpPWtTGgdKkTNuIZdrGdIiDgIVEJFSsLkcCKhHdJVNnyNbBnZzwSHZtTkahEeqQAaRxWvyyYtQbBPpCkHLeaAQqAUjWoOyoOaVvWwiabBAIftTtlmybrTXFfQsoOxjkuUUiHhvVILLfOkCcanpPNWwJjSxXfzaCcrNFSrCcoSsPFfIGgbPppMnwLFfFnNrRQVGMMDoOkAaEeRLKkgnNjytTYpaAjJAaTmEoSjJHyxhHmrRyYNVzUTJjHkKXxMmvDdGgVDAadNeCHhhHkKMmGgcoqRrQOmmMSwowWmMRxeEXRYyDdrrvVBQqbxwWjJuopPUvRrpPeVyeEYERreoOvETHVhObBgGokNnKxXGgRrMurnTtUuIiEuUGgXxGidDISyVgGaEeuGPlxLlXYydDmMdFSpPsfNhHUIiIpdDoemRyYuUWEewvVAfkyYVHhRrrRXOTtybBYoOmeApbPpjJAAaAaQqHhnfetXWiGTtaAaArQqmrRMcxiBUNzZBbZclAlLwjJXWSswIIKXxkiihuHhbaMmoxXOHgdLRMmRrUJtTiIhHODdxdYybuUcCOgGvVoLlEUueNnJjByxjJZEeHxOoDdCcIiXyJjJCcQiIlJgGHhjmuLmQoEeORrxXufoOPpqQCcYBbrKkRupfRVoOixnEeNfaAFFTJwWJjLlddfacAQVvqORgMSsPppvIGSstTNSsyYnvVHEEwWQqFfPkgTIiuaALMmlKQMmjBbUFfutKsSHhsBdDvGnNmetjJGpPRryYgkKeUGgrlLMmBNGQqBbCcMmPIWwipSsPFOomMfeEBbkKpMyoONnrREJjXhHtBbRFfAxjJDViFfIWkKGgwdDJjxXahHAvZzHhZtgHhMAzJwjXdwFljzcpiImkoOOovVMGgmHWwhVhuUaLDdshTtJMmoHBbhOWVsbtTBSooOOtYypkKPkajJthfOLluUoGRrgFEeeCmMcDdEUuyLZqQqRrGnNLZfgGFzldxXcCSPpaAOKsSMjJmkkiILlQhooOqvvOdkKsSVvFGsaRtTrAEOEeBwWiIqQyYVvFPpXxuxXUfOgnCxmMXYUuOSsKkBbXmAMfFbBKVNIvBKksNnBNlLSCpOdDrkKRuUIiJjFmVjJutTTtUfOBfOoFkKblLTeUAadLduUDlDYqQnTsbAaUeypPMWHwWuWwmmZdDzkKwWtTtTVPgppPPGpvZjVvJthLtVCFSGgsbUuBfFfgvVvwwWWpPnNXiIxhSsHVWuURqracCtTfNQqKnwWNlLFCccCQlVBUubDqQCdmFfHUuiIPKussSOtoPCcLlAanPpxXOonHyYhpiIuUbmBZaAdDbpePpiIfFAUuBDdlOoBbCAcCyYEcClLetbBTcqQdDlTtTdbpbBVvPjJeVvIibBmtxXqDdQThHhHCvVPbBpgauUGRrlIiLkKnAaCfFGgcBpiJeEFfHhnMmYCcIeNfMmKkFkQHQqToxICNHoOwWaQsjJeEekpPSsQfFqKXxnViPpTaAJzZshboAMTaQGgMPpQmMEOhcCHRrQqorpakNnlLhXxSSssUGgNnAqQDYwGgWvcCVBbizZIHNZzaATHZztlUnNuLTUurclIiMmnrRiILfFldDNeEUuCcBUqaMTtvQqbBHQqgGAYUKFfLgGwytTYyyaAewFfuUPpYyPlmGSbBPKFysSNnYyzZkKULVvlQqiAagGMmPuUqQzWEeRBbyXjeIyNgGbtbBAkfFqxxXXjFUhHufJQnNKKCLlwGtTtTNPbBpYoYyOusQihHySsJbuLQDdRmQWAZzqQWtTUrRuiIRrABbbZFfPpoaWwejLboOMmrRzRrmiaACcgGnNzfrhrRUgGKkiVvItVhHzrbqQDdnWDdTtBsSeEeCDFNgXtTFfTlrRwTtYyWiIAKyYkYynNrYcNvCcWSsXQlLGRuUMWwNXxXxROxskubNcCtoNUXxjtFtTDdCcpjeEtTSuJabEgGnYyNSpPGgBbiIdpHWoCQqPpcqQqQcCOojJOCrRzrUheEquqxXJdEFfnNRRrrmTIitDdwWlsyYSvoOoFaArREAaeVvaTJIiKkbBOsQcKZeiwWZrRauUAgxmcHhvVzBeEjFfaAPwNndDPfdDFoOIiNtTAtOSwEedDWmMAasPpXxaAJZYHhZeZzEzZOoEyPZAvVUkBboOFfqTtQWOLxEedZzEePTtAqQaqERrZIihHvzZfYReElaALiIrVeTcQTzdiIKkDdmMRrXGgyoSfwCwOoBvIWIiwsSKTqgGLeElJnYytTjJjDdfFPmMLlJjxCciYyIkrPTtREfFetNWdcCEedNHRzZrBbdDLlhnAuuPpbdDBwyIiEeLlBbafFeGgdDTtIyoOYbSUVvTtSsjJulLYysPpEeBqQkKXHhiIiaDdADdDzZfilBIMRrwIFgvELhXoPRroZXxzRhHqQhxXHcBbkLWwYYyBjkKyYmMvVAAbBxuMmUpgAaSDSsdgxXvmcCMMmvVVEOmMKQxLlhHkHHFBbwWezHYEjbBJyZOFfoFspZDKkTCMmWJjLLlYzYkCTljJMRBbBlfFXxLbHhxXcBHhbXxSFdZzfFCGGgwWaFWwEefFfvVOXFKkEbBUKJMHhFsScCfmxyfFpPEGzZgeDAacCddCDNWwsxoOXDoOGgtTiiiuuUrHhJMAafDEdFhXZwWzhHwySuNuAaCcdRFxvjMASaNOVrNjyYDhHQqAaPpAaCCRrlLeYWwyEPqyYnNZGBbYyDZzTyqQYmmMoVfZtTzxhkSsbBKUYrRQqyCcrRwxfAaMCDdmnhxtpPfvgfPehTFryliIQqVuwWAavcwWjPpvCcVlLTHiSoOsIBbBwgsSsnNFWiiYymkTtvsVvsiNfDYdDAXxdLlXEeuUBbBsSWwXpPJjNiInmvMFfPpnxXCWdMadTHhtyvRrRsfsScCxtcCFYyrRKktCorROFfoOmMShAGgSsdctPgGWwApPEIiekVvfFfvGrCmMhyYZzMmtTEYbByYyxXcCeEfFBPijJgfinAsSZzlmMOoXxAmfmMVvfYyMxRrXuUTtzZdDMlUuoOhHUoqnNQRYyrRTtyxgiLJdDgGgbnsHZzhLKkUuLllkKrzvVZWwpIHUYqbBktYyJYyboOBToOSzJGgkKHnlUuImMiWbBNjkQqwrUCOMwtDdzZagQYeQGTtmSsXYJZzjalBpsSwVvOAgqQSVOwGgtbZUYWwywRrWjlLJrZwWEetFOPOqQBlfFLqatTKkeEDkKdyvVPQgpPGyAaYGQqVvZzyXxyYEernnAatTAEeTaAaIDaAHZHhQqxLdDWlgGgjzfDdFtGLlKkgewnuUNxXOoioOEYygDdrBMKkmbkKRlFMuUQZzqSmwWMvVMbsLlltKGEqQOOoohUVVoJjbBSlLfFscsTwWdDOQqvXxVzZeHnNmnWwNDuonuTlBtTbgGOJQzbdDBwWSoOQqMBcCbmYgjJMmGKmJaLlKkjJGhnNejPpBKkeEtTXZdwPpeEpUQaAPpteERYwqVLllLvhwWuUnCcREAaWLtVvTdNZzTrGgcdNnJjEnNtuYyUDWnNwdKwWpPFDTOodaAsSjyYsSRSJjerRQyYqZXxMklyiIHhnvmrROoTOwWzrDtNCcDlvVLIMKcbdPqizZkrRgeAcNnljVyYziIZvrXpMHhmYMkpPKwUZHhLlSexrAqQaEcCoSsWKVkKvkaKQqNTFWMmMmwOftgkFjweEWOVjybBYkeIiNnEKEeRVEevFfrazznIirObBKgivVIVvmNnTEgMyvnOgGUWwPOoSnNuBbTvVDdPpHSfFRrsShJapRKoPsSpBlLlYilGgJjUyYucCpSTtRrsSyYTjJKRreQEDhHdHZzhMmOovVqUuKYyHWKaAjJCpPXxcOhHwWqQnAaNsSJeJMBuUXwWJmMWfpeEPFlLFDEevVbhJjBCzxcCaICcMmiVqQdsRLleTxnNFaXJjxikRjoNnXxOvVjSssIFKixXLDQrcCJjrRtQHhqYlMmFBbKqpiIPYyKZVhMiSsIPrSBbenVXxvHhUuiZvLJnNjqSsaAoNKlLknaeJjjMPpjhHEegbOIiFfZMxXvVJGGguOdiIIbBiFIQTXxtTtBlIdueuUZRrzDGuobwWyYyYnqQofVvMmNnEVviIGgbBkapqiIdDYykQSVvaIQqAUNnuUmWeGpxXTIUuzFHfFyaAVqCVvbBSsuwFIOgmMGVFAyYkEiRrLljJDjJbTtBEeXxYwWyiyYiamMzZhvIiVLlHrRKGgkKoOkwhSzKkqXHhPzZAGIPLaAlWwbtqQudjAaIidDkRlwWOwuUZzZgGOwnplndDvquULlCAHeESwIxaAmJjMpQVvALFfhHvVFtkKRxXRrkOozwWcCZCgaAWqQwmSSssEwWeCdJzZlZzLjaodNJjLMCiIcVvlYlgTEHWEMzsdAvODddDEepIiBBoOUuUunllLDdOOIkzZtTPpSmMJrRRCoOUJWNJovVOjnqQwSGWKHhxvVQqlKkICkqQVMmGMmzyYyjfHdYOTIARrjJYyaOUFnqoEKkyYzZeEtBbtLKnLwDQJijJklBXaiKknxdlKqQGrRszsoOffFFSvVGgunpcCPlLUjbizFeKxXQlLlYcCJmMjIiexyaYrOomlzsHhvqQuhmMtTHDMmWwgUlIZdDbfFBMDFfkKdCrcZzCyYRHhLlfFabBAqQDdLlZzVOoHhEMmJjeGXzYyZFCkKZftTnuErRZmcCtWwTANUSqQFjcJjIxQtjJoLlHhjfFOwWfuUFWIGXxUugGYHhXxHhsKAfvVQnPTtfFpNqFtpdsqhHkKCDRTtgAaBbaGWwyYgAEMmppPPAaRrNaASIihWwVGlLgviIUMmtTOoHwtMmYyWwCCCcEylZOoBbVYRryvlRyYiIGgCcrbiIoOpPcQnNqeECagLUGBbFuIVAaUmcCpuUmMPYPkdHorhYTHhchHtTyYCSPdDmzZMZEeVaAfebrRBgzHtWwWwFlyCcNuvJMmBpPaNneTQfjOMlKkLmmAqhUuHKaeUuijJPkKLqsGgSOEsSUuwcCNZQqllQxXqLLYjGgJrRMmWXsDVvPpKRqQFTtffFVvfFXPpkKKkKkaMsMmBhMsAgQXpUuRrIBkuXxxQLliLluUEevVIIiUEuUzgGZqWwWcdAaDOoVvCIlLWwiEeKbRHhreEfFnmMtTxGTpPldafFADEmFfMdrRDUuIinNOaFfbBbYPpyBAocsgUCtTDuRLlrGrRjmMaAJcRrOOCfUIAyhxXuvCYysqRTtrnNkKUuaAQvAjbGXDVfMCcmNuUAaVvCchFHzADdRqGgGgOlsyphQsCqOoPOusKXOolqJdDoOwWDLImAaQqMNWwniTtJWHhfhQqFWwfPMSIDZlXZzhSoGezDjJFTKLlvVsSrVZKLTaArRrbDYGctTdevVunGgeEaAoPiBkNjJSsRkOxZcCMmaUuMpUyJFlJbPgGehHEKFsvyYkKYyKkVxXpIiDEPpsSZpPIizuSzwtPOrgdDfFsTUXWJgUlLuGEqpPalLhPLtAaTmMpPqAJqoSsZzUVxmBfVvNHhIKkNHUvabBJjXZBeEWwxHhwEelNnZwWzYyWwVvLWDeEWwdOoACZLlIJjizcaIHJjhiqsSsUMjaohPpoKTtFjDWZOMRWpPYPpyXzZbUHhEvVLHBPpbrRYyhaAlegCOuqQlcCrRpPKBLPEegluDZzxOjJLPsAxoRMFfmdDpCtTuUcSOYyopKCdFhiKkAZYHHiIhqBMmZzawLLBWaAiiuDZzdUtJnNEepwpPxULDdcWpZQKQlLHhqMmnPQCdFIGZzcOoGVpiIdrzZqEztSAaGgPGnOmMoGogGOEYoVPheFWnNsSwttTKkTGUFYBXxRrzZIMKkmibKkPeEpVhHvXqBHhwDPSsBZrdDgGAUZkuHHiIhzZQxXzwWPJPpODaBvNsQMmUuAaocgGYyZzjPSsAasEWwWiIBDdZQibKHkzZPpWEcCvYzxHmIiQTFKQqwSsPoMmMAHqLbwIiAnRdlLHhGIZzJjVMUuuAYCWIzZiHKkZsDNhbtMTtlLmTuUAYDdDdyRrvqOoGtGoOSsgIAJjdklAaJxBQQRZzrREOXqQLYBQkeQiehLltTKLLNnaJCJGyyOsSCpPcyxtTXmlLWkGdswVOozVpPbTIJKuNnUbIrISDKkMmdvqoqGgIiGgQJfFEtTejMmONnrsfFREbrXlddDrRDuIrBbIiRMlLEeKkxXjJJsSjvVovoOVfFtiIkNfwWEmMccCwFfofFaNckFxgGXbhHsqjrzLJUDdGGgfMAwCvVaIGgnDcTtoyZzYRrwdjJDwDwWcnwWpPFzgYHqQZZSnLbFFWwfFferkKgvlGLlnXfbUMcYjUZWrwTKeEkRcrMuElkayIiYkKESJzGIYqPyhCEeFfBKDdKkeEHhWBkpPKXxWwSnxXXxeEXyZOePpJUujUUuYBbhMmjZzhbBLsARrtOeFdMNxXtmMTnOkWwKtgHXxSpRvfFMwWFfoPfAaRYrRJzZEejyVIivnoCVeYuUyHFfqQhEsSvIiyYYmAEWQqnnNeGgZEdDJChKwWTtkrzuyOOoIXSqQsdSsUuDKFEeueEHveEVMmYVJzjJAaXRbBsRrSrDjJyepZcmKXxkSblVDnNkGCzFfvTlLtmMEcGaAFCcAatKprdsVLiIHiIhlTtWMmOoiIszZinNoOggGOohtTtTjQbBTlLbxnNaFflLFfFnfquCqCcdDQpPQQqwWLxIiXUwGwprrCHPpVvhauUTxXtAsjJTCcmTJpXxNTnYXxyNtXxrMmRnPJSRVARhnNcHkcChHpPTOoCctycbGDduWkURhzvVSseEAenaNERreFwOkZuuUUXxtQNdkgGSiLlEyNtPnjEnNAaegpPShHNYWSbiHuUuUiLybBGggIiKEekNnOWQRyYrAfOUuxXEXffzZPHhgIVJjGgiIveEcEdDeGHhgbBkKxXpPiImfCcFkXwotHhhTtrnfFDdtokflNfWwTWdirTbJOiIyYHjODdqEeOoCEfyYFrRaAtTyYwKTtTCclBmMrRNMmEdydBbFffFWwqQOWkYvXWubgGrihAaHcCYytTIlLYymMKEeZBbzDkYyMpIiPuUmvBZzZrRVcCaAvVqQYpXxYlLNHhYQKkdDVMiIFOaAOPypkKPSqiIlLQSsvfFCRBbtRZzcCgmMkIifZqtmNnYNsCcVFfRjCstTDWoOZMXxmDvOPikKRENbBnbBwLlWArUPwCfWwbBOiNnnNyuMgOPpoGmFWmwTgGKkHhRruUtLEHDrcCmPtTUeEeVucCUkKDxuPDoOdGUuDdIiEeSaFLuUrcCkqyYsgfFGwWOEeubrRgGjJezSsoOFtTvdmXMmcCxQqCHJjkrPcEYjJjmMsbaJjAlLyYeKsYhHJjPgCwPpNDdAgGeECiIcmMbwpimfcajJtYbBmBbZzMwWVeGkIcCRrQUctWnNcCwInNSMmsITbZkKRBbrvBPTgGoOBbWwmeEzuMmhHPpQqmzZdDmMwsciIsSwKiIymMyQgtTOooEVvOiItGseTyIQNAaLxtqNnbbuUBdwdDuUWgwWGwScTttYRBKFoqUQnJLOTNRVvYZMilXOvVlLhJmzZycqDqQGgFOowPnJylLEeuUYwQFQqvuFkKiIvVRtdDFfAaWIrfPsaAGCcymECVfzsIiKkUrcCgsBnvAaCcVaAtBaFfACcnmMLgGbBbBwguUQwesQqtjiIlLdVdtlLzBbZFHwniNnAmMIitsMZaypPAuUHnvKkVJgfFGjZzNgIDIBMTtQqmpPSjJXvhOopPHhPAfAafyEyYFCUzEXsrTIlrZfyEBbwWzBaPwWwWFKOlLVCqBbcvtDdVvepfoOaARkGTOoZUuzSszmYIjlaALtTNdAKkGgiIyYaDnjjJjJJjJFfJinakKMaAWwxdckKVvCUuPpXQyYTyGcPNwBVvZgCcoyYRXxkKrOWuVzZdWwBxTtXbzQqkggpAskBRLVypVdoIiQqOjMckyYKCUNnvrIjfNDJUMiedDXGgWwgGxaZsZrVBOdlFMaAmfzZiVfclMVUWwZPpzKkVvmNJtAHsFqfxtIiHpfjJmtTrSUcCcRKIQqzZVvJQVvCEqIGtJFMOpqQQxHdDGghGKqQmMCrRERrEHGYyqbBQcCHhRrrqBrRfBMGfRrAjJaAaZhZzHDdAvUuKKkpEekKrwJZzjeEmrRMEYyXKkbBCfzFfZQsGJxXjdtPymPyYyBbYpyYMdDBUuAanbLsnyZYJDdmcxXjyjJIijJptlSsTNSpspNaQqorlLRObGAavVXeEkKmzQqZYHhjqUlLxEeXpcXVvjEGYgFflfFMzZJueQkKqhfFlLHDIbtTEcPpGgGnAauUtWwoTTAzZatDdiIlFxsHqkAarRKQkZNdDwWNfFDkKQSsKuJdoXxkOoXZnkcnJjtTeEeDdEXZzFJqXxQXmHKkhHvACpPBmMMTtmIeEIihHpyYPfnNkUuTQEjJetlLpPMxtZKEWwEeoOTiINPRrpIsyHNnhjramvVfgGYDwcCWdyfFQqNFtTEDduLZYxNnYWLlHtTudTtbBoOoyrRYvVWwKkCsShHQZGLDSOlMvGuboOIaEPgGNnoOXxpMEUpPsAaSlqFfgGXxBbyhHYgSuUWawPHXYHXxRrwDupPJjxXTqJJYydDiKOoTRfvDvBxInSsNoafBrOKDdIicCEjFfJeqQPgVctsOfNnxqCuLlkKQZfFfKYyXSCmqeEpPMmlLNDaANgCcGWwPTUlWwgYUuoOupsktUUyGrNzJmbozaAZzOPcyykdCkKcFSIirkPjuQZSmMmDdIbaBzZQNnpPbBSfiqQbBXMAalZfHzHnzjZJvPjJqQjJgGpxXSXqdsnEYJvVIiIXXzmMqPpQZxAXkpBhkKHbaAIiPPOokKpMgnBbeOCiVvqbBjMQVvqnNElLvEeXxPnNfTpPazuskuRriIFBCIdFysLiOdolFcdrGgmakKRHhrAMgeRrEScYLlyvnQvnNpPWxEeSTcgGzZKkeEvfFVpEeLlyYzefzWNnwNBXcTsZzYqENzkKWwehJlLjwFcYkuUkKyCHNAgGnafFFlLPpDDHxFfVfFnyLpPLGggCcNWDyYdwxzaNASDAylNFfJUckmAxIiXaTmTJVktTKvLsbBlvZaMXdDmMkKxeEeLlAdDXLdWAtDXdXbYzqqpWwCsSgUFWnWlLezZzZxXxxXrEUuGrjAnWZpooOzwWCGgWCcemMSxQVEedZjdHfjAuCCYAcbNnCYvVmFfcyYNtWBofEeFObwdDlJMEeldcLydJtrNLlnyPKCcJYyPMmGxUzsSuUPpFVUusSMNTYlhEIvAaEeVLqXivVcCoFGHizGgqflvVwxCDULqQvlplLvGzZMHYFPmMQXxLEGOGNJXxeEihkQqswpvVvBCtTzyqgLHhTtqQnNzTGygtCcHhGmvZcoSVsHAZrpZIzZdXVOVwPbcPNnkKddLUcDpSsPXrMmhHXEmYtgdDGeZzOTtsSSeUFWaGSqVnLsgstJHhoOjurRyYcnGgNHhvwoiITXJyBqrBvOoNbAemolLlYYMFjHgbBqSsaAeWwUuEcCHbBxtTXmCYQKWiIwkqmMmyJDdNpmMPcGgCaTtESsTtgBbTGkKSEJjhHqOMpJjPqAirVYMfkjhwSpPSwWuxXgHhGDdLzkMzsgGgGhRlLjJFDYkIOMruUzZraBbfFMmAaomnNndSWpqQCthHcOkJjKRyYrpLVLlgkzTMmrRHhtTUunVxjhUescBXxZNeobRMlLrgKmWVvbBcerjqVcDQqPpBjzaUTQTsSVTBuhhURePtKROSYCjUuJwOoZzlojJbLleADjJpPTkqNnQJHfFNKjJknkKEJYZxcCHwimStNFQrfNJjnoOVQnWtpxCBkKPWwbONnnNxSXqQmMazyUUuvqQRXxnKCsVSzASvukKInGJRrjgyUuYVPplBRrCaCXBbykkKxXFIiPuVTtkFXdYyDtxnSNUVoPvtTwfvkLlGxKdDKmujErAoXxcWpGBbdvlLUjTBWIgGKFCcoKyYpBjudDtAdkKDxvsrVvBbpSdwJgwFzxWOCahuLlgGfOMmUufPhHeFvviRrGJVvjcRrrRhYUnXxzQqcVvkbgQnNNFfnlhJtWUuqXiZwoUoJKoUJjiuAlsSTzkKAcrUTOwWoQRHhRglLGvVrmdSsXunycFTKPpiIBpPPeHGgWKQBeNYFRrMmOoTSXvVBbcHiPtTpCcIJKUuyXHhvenQAaCxXAaXRrNGMXsoJjokeaAVvEOobGNrDrRdDdREedUvbBtTUzuhAcpiIrJPETtxfaStTfFyYMYEoyYkFBphkKHgPiIEUuRyYUSGpuWXxYhMmQaAzZPzZyePRckbQYZBjJqcdJjDGiGgETtaXxWwoWFgFfGGgJCTBWBeucivmUjJKdyXavVyDVgyLgJSIxXihTIyWwyIQqvOKocBfLlFQrjEeyYtGRrgPxMmpBfFRdLkKZzoZZzQfYAnKkNBluVvUDdToNnLTJLWwlQoZuUEejSuUlLDdPpWoOwPiICPwWpvgaoFnNjWwJQNnfFgGYcoXxbURhlsSmdEaPwXXxxWnbBDXxPwFpFzXgnNtTWxXDdoJjJoZPIUjiIJuipzuUOFfjOoRrOwGxNUunkKZZzPDdpfPcCoOfWpdNpAeDMMmLHruBOsSmMaACyWvVwiIZzcClLqfYyOAGVPpcyYpsJzOqdDjCmMctoJjOlOkHhKtNRLlraAnUuLbayFqzOUuhHRrpPRrlDQqWwrbPXpTwWFfOmMoJRiIEeqbmMCOrRkQqoViYYitHCaAaAcsjGlAaYGvdYADdxYBbDkjJuMVIEeCUEbwkKyYbtcjHhYKkyyPpYfJjwOlLDlLLldWwXMmxiRxXrIjJZzAeEdKkDeIgCQVvUuZzbzyBbqYhHyKVvkBKCrpEYpphHPyYqzZFfHyuUwUPEegdDsuRrrUNnuepGPwWbfKOeWwyEemsAFXeEeaApjwWRPCaHmMqXxQXxUZuVvVuDnyYgBicCIEeKOOSHhxmglLlLnxVvsScqHhNEOohHVxYbBkjhcCCbBxstLlfFfyqQnEbqkwtTMmhEpxXbktfCYNUBbxDMCczZxXrqRrtuRCcCaZjJtLaUbBIuOkjKkOuOPpuUWzIxoODdQwTjVvvVHbBLnNqSsGBKOoCZjJNuyHCgIVVfjJEpbBtTtTFfFaAooOFlLUHAbBYVvycowGgXZQtTqOoSsfWGjVvvVlLWDsPwWRSVXdDaTCcUJbPkOfcCkiwbtJIiuVDKjJVvzZkgtFwWnNfTPwCOBbaReJUMkkXgKVFWCMmPpcgGHhVpOvunsMmNXTxfKXxaApPMmvUpfUuKYIixcAcbfXxFLvvVGgNnNiUVvVmMsaZpPsvSckNKkeErMmVuyYevVEFfYZAxspPXJjodDBvVpIuwWUibcRrjJeEdDXPTrRYywNhHqvFRqfnTsMKkIWhoOXzUuyDdjehZsSpEePzjtdaEBOLWQqcysLlorkTpEAargGuTtHHrCcRMmUbtvtqlLtPpuASsZJrRbdCvQJRgGECwMkGZwWzZgGzsVvHhSlLRmrBOEnzwWeoOEbCoOSEuHwWJXvNtYyZKGiIvJQqjlUuPoCTcPwlLshHyYDNMOGgARRmoiKydfIiGgrHSCcZmKZlUssWHhFfHJKFmyUuUuvsSRIuUaQmGgoEeQesgtGKkeANnnCcPpjOogGxjJXYMycMhkKGXxgDdQGGgcChJfmyyLOoOMIiEiIajJBniIVfFbRQbYjxtLlpPOWZzVCSsUvVTSkKGSnkKNlSsNOovQsgAwfuGgEsZzLloETyMexRxphHIiPdcCCulcCAarYyLlRzZDDkBbKpCBpWvoIivxgGDizPRGgjJzahSvsOCzVasSAMiIgmMTGYaAgtZSslGQLlYZkKcbVPWfFQqSyYKHIjngogelqpcEeCfyhmgVPVvLVqQludcXWLFQZIhgfOINnxLlQlOoieEdDeHLPpytnaEeAmvfHhXxWWwwxXxPOopXZuXoOgpjkpKkYReETjDYlRrCuUPpDLmjVsPpSvLyYTVvLlnCcCMycBCeEaxXyoCcOcciQqIUaJFhDJzDvqXsqVAavNZznQEwcZMIiCOocmOuUPzwNqQtTaJRgetTRUuXEwNVwWvQqwIiOofuGcPQdDyYQZyBxDxdTawDlxwWaUufFoOEmaAAfFmMSBbvbmMBVszVLIiCcSltiITjtMtuUMKCujJjnGAalLgLYpPatTPpdsanlLAZXTtnWwDdGllYVvNWwvXhdtgGTxXdfAcChHNaDlLdgGnAahcFNnftTYlLKyCfWHuUJjEZUuneJjQQqCcyStCxbnfFZFEpPZkKPGsShHgWwCtsXwaAVxSVvsXqVvNVCsAapPGRLSslNnDCfLODoILbBllSYfDicbfCcUKSUZAKktFjJpVbBemSYysVvJjJQjCcJIyYcoENGmnNRGgrKxaXEeYyxxiMmjyiIUueNulLUHlLuUhCoOcSVvDcCQxsZzUuVjzJZNhZcCtRrxXIiThFzLmxRrICctTFXxsqbACcBiZzfFfFFfMsGgzqUJpehHTtEKSsLiIlRvVsfDKYYCponNZOBMjmMSFfsZnRXxgYuvVuTKkKSPUJjxXyGpPLutpBtTbBsSbndnKkQMcsxkFyuURrYzqUWwIicQXNnFoSTCvGpPpyYUukoRbmlLwWMJjmMFAOHpwWPhiCcXuUEefFbmMWwVdVFrMmtUuYLlHhykIPpjjSsQQqtaVyvVYvVJjhHvAUCcdWEcCeRrCchywWxfFRrDdhpsSWAwkKvVWOowsGVeEvQLyOoYuemepEePrRAiIiPpBUgVmLosdeECGgcrRuJjMmUlgzqcxXOeElLDUAaiPpIdDYyhwyuUXLYylyzlcCUEQqaAeJjefnSsojJOaSsAFzZlLMARjJJBUuyYXxbIiYSTAatiDdyYntWwekKkzTXmTFjJFvVffqRrtsSKFeEEiIeibgGcalLkKVhMmMxjfxVvbBoOlkKjJLNCKNzjJxKkKHhODjUkqkKdndDnzKhSYzZMmywWXSsfYyFfLtOyYTEeNgCeMmYyDdBiXxdKOokcCKkVvEUjXbBxmLGpPyQqgeJIixzZtTCPvVIiuQWwJPpyMxgBAnPSBbPMmsntPpfkKFLFfTPtTJiLyYlISsjfFYJCMAlQqLajyzYNSlVDdoOvBNHhPpbYpTsSDyYgSqkKyYFcxeJjWRdDPkFfKkVaTXxtzFBjoOJxXxXbgmbFbsWwSQRgherReckgXDWwJjdcCqPomaAfjTgiQeQqcRrRrqjiFfkrCcCusRMFPhIiTXFDdQFSsffShaTpPjWwnMTtcCuvmLCFtTvjJILDojJRrbvRzSzABbhHEsSImuXbBxjdGgKkeEnFJiRVucCmTtJoNyYnPSspODvPuUYvlrbKSaPGGKZmMDBRrbvNhHnUzZwGzhHbxSsgGXWnpQWSswCtTWwsScqCOogYtqeEjJxDXmkKAaANWwyMeEkKZZztgKrFPvVmMEZzTVCQcvdDokfmMpAzZSsbZeYLlFBbzEeRLDditRQqSxeZrRucdDpPRcZzCrfeYFaAFzZaTtprKMmkfFRzZHVxeEsbizZdihJjHGhaZzXxYAzmSTaNnINdDWhSsKkfTDgGvDeNnyYEJRrVBbvCcTSEWSsqGWpPbaABltTNbaATNWZzwbSGRuIiSZFCcvjJCcceMnNYsSjJgSWwIipgGFSsRiwCclLTrhHqQRrtTfUdDVPpfZzqWjlLzkQIiqhHcCrRIUufFiKZNpWOoWdDwfdQCeEYMjHoxLIBHhbmzyWRrnNbBTtwdDrntoljCcNquZzQOWwfkCARracbLlrYyyjJTbBTttTCsWDiRYnNrRyrIXxBQTXWwlnNnqiYtEcCSgTqQoYyLlpPSseOoOGqYYLlksSbHhBWqQQqJwWjCSbwWFCwTaAtWXxctTMmfvsiISiIVBlbBLWFXxfMvVmMUZuUNnMtvHhVpbVzBGgtiihnNxXHTCYaAyuqiNnWwEeKFfgEvIiTbBtyTCclLACFMIPWBanWcGpIQqiySkEBSJzZyeHOohCpRKhcMDYyVfPpZEBUoSQKRueNnEUDdmMlOofAsvVEeCcgpUVvXdvEuiIYypUfFsSuMRdhevHhVkpPKlWMwyYxHhXfUYIoFzZcWpuRaqQerIpoVdTtzwdFfScRrJyBbYrvSSsnyPpMuUTQpPDjJdLlzFKPpGrTrccCVsYpoofvVmrRvOoaAPpAgGaIXxnstTSdvVDNiqyyYOonlLyLlPyvJjWwzsqQSZrRzbwaAaAlOoLWVKdklLdVvDRBUwxVQqyKwoaAzZDYDeINnoOBbinkKbAaPpLtkWOoecOoQoJhojwWaABVvyYtRNnIDwtWbBwFnLFKOToZzjJOEeNRaAaHhAHTKOoxXkOhHWtTxKMJjotTKkkKOCVviGWEewUupFvjJVFxeTtoFaqwoGGNngeAvVaEYlIhIBswyntRrrYyXxIiRBbTsGJNXxfFpTnYjGgJeDdIsKDnqTzKoWfBbxXfFnANEDdBbavPpVZHrAauCcKwUgBEeCYlLTtKhhHCHravrsjjtMLltYySaAcRRZtTaAzPWJjgWcCulIiqqQSscUQLfFlFNfAlLXaAXOoxBqlFfYyeEWzfFZwVvLQvVtqJYiIyKkHbBGISXxicCIwvhHSDRPkTfaAgCUueqQVpPbBRrZcgKdvLmMpPBsMCzPrRWwEYdzZxVvZjvyhUfkxCcioYUZRKWwkHiIcjezEzZNlLPpDdweaMyCcIicONzZgTtGUNnuNnrFMmpiEeIOmVrPsAZzarRhaAGTSNntTsomWgGwDdDfEoKklLOXxfFoQqRrTaShHyYmMlHOoJHyuEaAoEenNiIzYRrxNsbGgwPpkbcHYLlpCcOoTtqsSQJjQyigZjsetTAKLeUpPmRCUuJHhWwjrtyYWRwTtDdkKzuJyIoOkKkKiCmuBFxNgLVGRESsfpPBlNsiZzIzzwWhyGZzZfNCdWvVWNaAnOCdNPpiAcWaKsSkmFlLtTKkgujlZmMRJKkQSBcCfKCCccCnIiAOWCeFnKThhHHONnoOgGTtmiUNnLxRBeOoeErSRlLQrRSsVFfsiRizZBdDkjitBxXvZvWSDYyLlghHFfyYNnKwMYoYYgljMmJLymMWwYjcjxXxXApPllkcCHEIqEKqbNdDnCRrcyMmlxhHDdoerVvLleEqHhQqqboOXWwjLKDaiTrRgOogGiIQtTQPwWGgNnpqpPdDVWwaBHndSzhgDdGQqwcyaULlmXvbBAaVxvilLXxEeKYykgDrNaFfTtWBBRSXxOoslkKLrblQhaJjmOpWkftqMhXdDZywWVewmTqQtMKgGHhrReEvyYVhxXkBIqzDdbwbBeTtSFfCWwIicAapJCLlYyIitTdDFfOqIdDtTZzcCWwmMioOlLSneZzEVbAaAaPpAdojpZUuqUkKeEuUYynNPpuGghUKzNnuaRFeEfzbpdWbQZzTtxnNTnNtyfuLFpPfuUlgSsfEHpvOyYykKeDdyboOBWwYXxJqQjUlYyLbBkKrVvRlLugNQqMrRmgpsVjtZzTJvTZeQRVvVkKvDPOEeovgCbBgiPpfDcTmMtOwJjWoqpUyYuNyYCqfFJjQcQqkqzPwCluXWPFfGgjTvVQqIBbIwJjblliIWAeDdEbQXxhBbESseyzavbBbBIiVIrRHfDckfFPsPOgGorOXawWbBSRrDdploXnNdUqQNnPpvVLGplbhMmHYtTykLTtpPUocGtQqTlLRmMjJruBxwpPrpPmcCqQozwEedJtTfkOHOAJmcwTtWBbCuSQXqQlLjJbzPfFRrpkKzZxAkKVuhnLPpLllixXnFbMJJjbBjSQqsXcCIiHjJhNnMmvuOqQCcQjaQHhlpHLSJjslAcCQejwGgxutSGRQDdqomMpTWVvZsUKkJjoOedPlLSfkIipBgGjLfhHLlhwWHjYuPmkzZIiKAsWwSzXoKrnqQKbRrsSIpOjJeoOEMmdSsIiySsYDNUtTuUEDCgydBDdRxXZztoOeEIilkzzZvaARknNtfdZEgOsHeEZloOLzxLzdismpHWweEFqQRrwjlrRdjiIQLBbxkJQqmMjSUopQcSKkqHPYSLoQrqQaZhDdMmfHRCTtcxXrnUufkIiKFFvdxgBJahHVkKScVSHhsfFUHYaigGuFoOcolLotGgTCrRgUdnNcCceEuGSCdzZDeqQLLltgvVXuUNBLlklLVvwQWwezZuqXUKkKbiPXxrRHhxqGVvaAaVvSDdmHtTbShHHhmAmMZzxrkduUSxwLQqlyVvznfFWoOeoQlprRIEAMmVvkQaMoJFAaqtEIiAbjVUuUnYLfThuUBbIYyHiIhipRqaAQhHrTtJjPZGELlFnNLlvzpVvidHhDOoIeEYystynNHIiROhDKpyiIRYyvVSxXsrMuYyAaviUffFtTgullLGAqQcuGPBnNbpgUiICBRrFfLlLmMnNFfrRhHLlQqWwzLYeccTWheEAcCaZzuRrlLHsLlnpPiImMeGrTtfFdcQSFfDdDYNnyPTqVvQqHhQakIiuUbBSyKkXaAgGxgrRXxzZicCwwnQoOqhbBHNWwGTeEtgIihCcuUHWoJOAaTEeqXinNqQCxXJfzdDPpZmMsunaMzeUNFiIzcilLInNfiIxgvZzVvZzdDkJjKCccmziWwLuGdUVSZrRLMRyAkKdDvpPjJVYXtTPpBbEyBbpPLqkEnNXxfZMmBbFfIBJuEWweNUZSgkLDXNIrRAfBbFxPpbLwWKwWIjqHhdnNfFWlNkjJlTTtTeVAakKvOFfgKkGWwQNfuoJjAaitLUuEeloyDhFJuUVvYZBeEbgQqSsuUvKciLXmuUMmMkOowgscCjzZucrjsThHYytOoPiaUuJCcYyjAIpKiooLAaNbbPdDoKkVaDSZmPIiiIptTewhetGLFfSsyLmaAlnDOAPNnpDctvVTkKMGcNqQnKXxwWrTflGgfFaqtfFJjQqTcrRCPnNTsvVeBbEStXifFoOWshacQVNOoTtLPlLNWojJzWofFXngGNxJCcjmMLrKmMJDUTBZzpiguUaxXpxQZsUutTHWwWACLUulpPJjcmWwMIIdOoRrjJIlLeKsSafvooOiRkJjKEerfWLlKkJjUPpBbcQvYhfZYyQqitIikKPhHOogETtVVvvwMZzuaHhizZAsPpmMqKQWwPAKehHFqQONBOnNrnNpkKPRUgdwWGgEBbUDiLAabwtTeEWqifLlDoUgZfFzSsjSsZzmDdzoBGIiJmNnTtTtJEMmAQvOoPpCxXcVqOQlVzIrRNEsRsSpGgmxXHvHNnoOkKhzoOSskUuQkgGLlfLlMmLyTRrRiIgfFiIGoOqdDdfFlIkfiSTtIiAVvEtTeaJJZzrKMmIAfNCcnmMGgXtErSDyYvAXdeEFiAoOaIfDZcbJjHBNnIidfqQwjxbmjEjlLMmopPOoqQkwwWhQqkVvQKkpPDdmMeqEJnAaNQqjmMklpPgGCcLfIiFlLtjJsPLIhHyLbOkrPAjHshtwhHjJNnWuUUiIsllLLpfpPFOoWwumMgGwWoNVYmWXxwGetzZMGkTAatoRNZeEZACcJjJvoXxwWpPJfKGTtsMmPpSTFolLKkftfFnpPRTtrkAwOoOFfWwPpeRFfpPXyYESsuUsACcajJzuWmqQyPxJjBbRmMJLCMmeELlaEYyBbUuvVGKGgIQpDBCkmidnTdRZzZWwNgGnotMEeIiVNYLKmJjLlzxZzXEEesrJDbBcCtmgGJjYyMdfcDdCkRXxrcVvAcCaCZVvzBbeETeDCfxCcXkKFcCRtnhHDPeEUunNNnplwTsStepPrNqIgGiQJjHoOLlQWyraxXAAaXxQqTqudDyYKkpPsSPUucmMCkeEKWIiDPpzhHxSsIibaAJEsSHQeEqgeEXxAjMNnkysZqjZzjJoLGgtUNOaAUdlLMhEotSCLlNnORrGgvlLvuHegkTLNxXnGCcgSBmJjsmfLGeYyQqIYyAaWEVvHhTZJGLwCclvVXsziIZSzpPaAaAhdHhFPpfiAtySlLCDdcsYjJaRrNNbBRnNzZnNcCRvVsSrcCYNnmMzZgqnNpYpPAQbYTtqzZQyopofnNTXxEewWzKkRePpEjKkJPpuzBTWBbBborwWQqRxXoOvsDdGaojJKrRCcCMmckWPbTtLOoOoAyxtpPTMgqERryqGATWjxXJmocCwWVvcuRXxWKgGJnwFfLNhPpTtjZZzsoOtLlQRrqbBOojvVTKzZQyjJuhdDlLiPmMREeSNBoOmMGjlIyYqsSQXxGXYrOuPYypLmmFFMnNaLaNIFGQqtTIpbZzVvMuVvUmfFeMmnUjJuNYyHcRpNnclLrRCLlPgVDdKkdjJoODNnFKaoOozZOpTHUuhCDaQqHKkCcscTfWwTXfFFKkSrVAaYDRwZzrRZiIzWrApPpPyCcyLlYsSYsSmDyYOnNowDKkdcfFEeGgNmVMIdxSsXDCcixbcAagGCQqxDayhHkKkHhSsKdFnIMmSSVKMIIwfKkSJmMjOoGAariIRaAWbyOoaAYhYytJsOoSNnCVXxvVAaHhUGgZzvJancCNVvAjLYaARfaAhHmMUutHEpFGVFToOXHNMbBcuUmmeEMKkFXWufRrFtTHXFYyvmMAjJaOMtdWwEsSUNnuUyYuezZgzQpccdJuUntTRaAyYTtvonAsrRMmiIaKkSsmJVXCxXcfrDNuURrnUZznUsYGgWxHfDedVvFOomjFfRUIIuUIgGdSndcDLlYXmfFMmMhHIijkuefMmMmOoxoFYyHPgGpLlhsSfAizZMmIUuRrwWgOocDfsiiIINQqnClLrmLMmtcKyZGgylwhpPHJjzZctdDdkXxKqQzxXPSfVcCvzYeyhpPZEfhhKXQHhQqbBtGgTqqWwZzkFfoeGsWwGPXUuaaZzJbylVvwWKCdDrOpOxHCcledDVGfZXxziWmibLIAaFRrdIMmiHhIxfFiVvFfEKCckOoGgApPYKkbkKBWUCcUuUfFEekvVKaDlLuUWDdwDoOwnTJjJjKXBbpJNjQtkiVbWsSsJjScOouUWQqFsOYvVxgGDtTygGYZtxXlLqnNCtEvyFVzHheQBbpaADXlpPonPpNwKuBbaVvzpYeFfjJeEzyHhzEeoOjoPpTeExXyYbUwWuBIiahMmqQHQqnatTAwMmWijJKkiIIpgGwWhHWuUSspkKjmkKMJJRrOohHbZfFRroOCfFMXnNIiGzjJIEzkCqSojtAfOVrRLMWwzZeGgDAauUjQUDDuUddrRQHuRZcwgKkXMmxGhPDyYseBtnNTAjZzXxUPpskKaAJXkKxPfTJwWbBukKFfnOTnBUKSwWXtTqQogGEeVvyYNnQqrhWOowHXxnZzmrgoOeEOdDosdDSqxwVbBcCnCyRaLnNUutfFxGnfOodcEeEbwNBpOeEoVvPRZvVhHvTuHRFZIMZHhcCBlzZJPpEAOzESsUuepPBaUuBbwWwaNDpPdtTnwqMGgrqlLlUBjpPYJjIqSUyDdtTngWoOWMmwxXckaToOtTBeEntTYiEJxDdYjTtFfJoOlLrwZpIgGpPuNnYqBbQfkpsgMLRrxXpAaseENnSOoDdWnNCcEYYWlkuyJjamMCcHhhAavVVmAQubLfFaACRRrhtnhylLJhHjRrdaubBOoHKAPbBReqNnmLlqAtfYyFmaJjlLOyqQYKkBHVvSDdjtIDdvNoOWlLqQwECcSkzZMoMmOmKLeEZzlFfqAhqmjJMQnciXxXOthqeEKnZzEiyNjIiIPYfFylLbNgcCAzZGPoOpVvctTMExXdDBDtLCcCNeEnauUcLuUbvVascCSEPGgBzUubMBPNNZmMzpOnoONTZzoTtQqSUkphMvVDYfFycdyYvdDeELqfXdDxknFPpAYyDdRQrwGcvTlHTdKfFjJUukDUuxXXxGgzMMUhEeKkwmFzZfYEuBStNiIyOnzZgGNouYcCLlyVvEtoFmMfFvCcMkKbfFdpxXPDCcBfvVyYoPVvwWcPpsnbSqXxHhQbVvVinCcvkoUuFfOmHhkKaMzZxyIiYoUuAayXOoxSsXDdBsSbxcNGKkoQqboehvVYSjJsypPHSgfDoVVbBQKkDdDdORreETtHqKmMoSsvVsDgQzlYHTAlASsaLoOpPrRKYykbFfBKVvkKpHhPTgGscCSvZzEewjHSlwWSsvuUcCVRDdriISsAHvUuMUBbumKhHMPCAhHaZzguUGZDdJEeLoOfWYyDxdDRrkKJWjRrZamGTzMmdXarTGgtTxtTeYUumgnGjJgHxXhbRiIUuuETOoEZzMaAgBbkKVeVvMmEbSkTJnNqkdkKlLjJDUlYyVvEeEeLtZzGNnKpPYypBbeeheEgCcTtiVQqkKPmGrUuorxOoTtAahHXRSstTvVrRZoOzAaAaQIiqfFaXxCAFmSsMYyDDlLVjJvjtvVfqyYBboYyOeEzZvVQEVBbcSsFRrfQwWKFfkrRhUuHqlOodVvsSFfgGDfFLCJjoOveXIxXsSVvvPpFfrFPUyFUgGCEecFfsSTwhHWtqMlKhHUuhHkSsGgUMKXxkxXzZgGkKIiLIrRjKkJxXiqjJjYZzhzCcXYBbDbmPpMvVHhBXezZELleEoSsUulLjfFurlDNnGfFKQqkhABUHxWLllCQqcLuUafFLXZzxCznAaeRrEubIXCXxRmMpPyYgIwxTEFeMmEjJNQqaRrPpgGZzBJjQqbBPanNEMoxsSvQAaqKFarGgkIiKMEOsSPSsqQiuzZnpPDLpWwaAgMmZzUAvYsprRCcPSYysmMgeNFfOoRRrUFHhfmHvdDlLhAaBbyYtfFdPnNHhImMiIipYyDpPVuYyvVOUXmuUwzPjJpZReEdDrWMsNnSOLlWNnsSsXmMTtxMFfFfjJwrRbBWfFEqUqQuWwQhHnHhHhhtuZvvVnMhvVoOHDdmMxXWwXYhlLsOeMtPGgJAWAawAaaGlVvwWVvYyrKdQqFfmmgFfvqflMmWNmPRrBiFfGgpORsfqQeEnRpPAxNnlLXZFwWslLAKWwoiIFfFdZzDlluQxXqKJcCaAXVhHvFfyylLYYTtSqJjlLaALlxtRIinsSPpNbBBdDRcCrOozZkKYMLTBrRbFAoOYwJRruaEKkPpFfGglhKyQqXxdTtDYcwWYyqTrRkKYVwXrQqWwtSsTHAKzyYhIisWHFfhYkKvjIiDlfOojauULlJjACcebBrRvwWPpyYiYyRVvQqDzZzABbaiUzvVZpPnnCcNtDpPGgNnQqrRBaAnNIzUuTsVvzZodeHfmzZzGKUukHrHhfFQqRLlZzxXzZzENnHbkpPuUKBHhoOuUJBbwWoDduaMmecCEUumMSbAFfaImMiBWLLSHClLkKBbNnWbblqkdDgILKsSWmDfFTtAavVWeCcEkmMgBbGGgKnGiUuYyutscCCOHhohaHhGgAyYHcDYyDdQgGqtsShqQZVviZzxttTTHhsAaSSImKRNJFLkKrECsVvSceBRrOhrVTujJQqUsSkFZAaZgGPpgGzQlLyZzkxXMvVMmiITtmnaApHhwWmhHuUMlLJQIqVMYoHhOmsJjncCnNwWhFmBQcvjtxPpMsSalGmMiIgNnpPzzZRrfsqCeEcTyYCclLtuUqYJAVfNZTtbBblsSupPUkCzCFfovVBSaAmmfFWOZXxzUubBcWwCpPHhFuFuUfGgNnXxqaAQIQAfFICkKoAaOxGgbMVvmGCcGjRrzaytYrMmRtZzlLgIiphHtTUOouZzPYyhUOpkeEXxKrHkkKRUueEJsScNnCGgkrDdyYmMXxrcVSlUCVbBOovyYcWdDIBrpPeExXhHzZRITViIvcCtidtYStTjKkJbBnNDdsyGsSWOpPeEohHwoUckpPbBVvDmpFAOOYtSsEeTougkLoOVcpPdQZzFftTXbjFvzZTQIiYGhtTHhHsIiIkzZUuXxYyzXXxFrRYyvTtiITiIzZQqtcdDfcCOnNMmosNuUnNuUnCPpcCGgHrMmcCiIvVBSSVepOoEePslLiHhjNnJzZDAoOBVjKBfKYykSieEZYCcihHpqQQjhZzgTPpREerifxXKkFeEfOoCxtTaLeElPpaAazukKbrRkPpnNYyYyXPpRzOojnNuUtTgGnlUxUuMmHgsXxJUujtNaAnLFfqJGzNBbsSeEhcCKzeEZrhHRPpysqQScCmMMJKFSsTnNtfoXxbBOBdDuUBbelLKmbBPMvViIpmMPbBAkKaOQlFfZnwPpWuHgSsGhsSwaAornNXxRrlRrinrRNUuXFfvVkbiIBXGgxXxKpuUPxrRujtTTQGgqXxtOLTvVtYJCcStTHqQhCcuUnzPpZlBbNnetTEuCyYciFfbfGgTxFyYGpRrPgfHhwTWprRQpIkymMYKoOeECghHYMmLKkTtHhueEWydDYYvVAayboOzZiSsIBwJcAaEeClLrRODdcqQWwFyBbYfCoKNnfFmMkWyfAIoOiPWwlLMDSXuUiqQZcCkKJjONnonNJjeEecgxpPlkKFfxRrXuUbBGThHgdbBDCvJWwQLyqgesSEGrhVvGKkgGsSZzQACcajpPDdkoOomMLGlRCcuFlLTWUTpPzjmCcYgGyGamMnNAgOoLldbBNnDYySKkQgTtiISmMHhJMmWlmMLwKkrRlmMLjSsNGOoXjBbUAaYKaHKfqQcrRsaAootUuVzXGXzIiZFSsudiHTisSmpbxNGDdgnIpUvzQurRNlLnUTtCpPcCtTgyHhbBHprVvRSIyYykGbbYyLDdwUuVDdzkKOcCPQlPDdiIoFQJBbXxjmSsPjJoORrIiArdLCwkuAstzZbgGYyBaDXxxjZQqdJbKoGgDdpPOVvJuUZjJztTSXXBbJUfwWFujAhHkKlyYGgyYzIFUuAaOomMfxXftTHjjrzxlSsYycCcCxsAtTarRSawCcWxBbXwWjCcPylLYaHCxFXGgTUOWrRwiIFjHhsKkUYgdDykKgzazCdDdUtTuDGgrJhvVHEeYyiIjEecCknNNnMqnjJNCLlkCCcdCcDCEeWTtwSoOWjJhXxHWXxYyEeJCcjbmMBKYiGnNAawCYynNDdHhqQbpGiwWGgmMqYyTtQIggGleEXNLpOruURUuZzWuUwXRrZzoOqhjqQnXxNzZcDcCAadxXRrWYyYdcCDyPpxsoOrRXVveiIRrPpuUrRKJjkDkiIMicyJwPjMVORrzZovoOOotvWDdwaYyjNnVTKJjincrRfFnNvrRGxdDXnHhNfFQQwtLyYlTyYxJjIQqXTtnNXttTTeELlLjpPJHzYKkhAaHsSyRFfrxBIigGQqbjcKAfuUFMmCfTuUHhhHtNzZQyYOoZzZzvMXzZNqQnFfxVvRjEepPpgGgtBCxXFVQqQYBbySsFuUaJuUjgGSmiIjSnDeExyYvVMmBbGaAgWIiwMmHhxXXIigGMmUuLxXlNGkKiIivVIgafioOiIIHFfFznuOEOoeFHkxXtlLTKlCfoOgZoQqSsvuFfUnNVpPCTnNdDiItcVvdbuUBCcDlYiIyDhEezZHdnGMyAofFWFZtTzMtPZDdzsHhcbBJjnflfFPpriIRNnLCcQfwIiKkyYbBUuIiEeQgGhHktTKcFAafkkKaVVDYylFlrRLOIiAVxqsSsSHQtTItAaTiqYyhQbBHiZzkKNnIZrRUtTuGgJzZqkqrYVsSYENAaneZzyiwRbBuVjLlcGgCrvVRMzxXefHfFhxXRrZZzzaZKknKkEtTeeEqQEeWiIwkKjIvVixXVvtTJnNSZsSAoJjHhOvVFHvxXyYwhHWueEUUmMHhuJkKjfFnJjewLlWtQsSEeiwWGgiIQqdMdDmwVIBbEikKzZsNnIiShHRrQDWweEDdHhIidrRAaAaBbcCSuxXzZAwWEuqeEYtzdZzZGgpRPprIirRzhaSWwsXfFScDeuNnUEDdleYyjamfFPpZMmOozgCtJHhLDdYYXxjJOoyaARrZGgzCPYVOoZzGgQqKqQkvjcCpdQFmrRBwAaWGRrgrRyDpjWXeExcQqCewfFLndDlpPLoOhBGbQYKkSsyjJYEeUuyqpPjIWwiQDWwqNIaAhHotfCVvgGHhSstWXxqUusSQPSKQKFOscCSOTtpFfPoFfoxUEeuGgIbNqxpPdwWDEeADdBbaEeJWIsSjQoOqnNJixyYXNpPnNrRWwndDzZYyUuqFOpPofcCdtTFfDQbqQeLYyMmdDtMmTlLpPSsjVmMGoZzOoXzZOoxlnpPwWYyNlLLHlcraARCIlEQqeOoLiLmMrRwWfFxgHnOonNNWAanCXiIxdDhgfFdvAauYEeylQdcCYeEpJjQqPicUuCDdoOeMZPpLbBKmMRrmkKJgGnNJjQLlqgGGgSnNsYSsyHuUAvVqLSsVjJlYyLqQvaAGXfFaZzcCAqQSDfHkMjJjDZbBxXLnsfiOjJMmHzsSZvjYSsyaOomMSrReEzYJjyOouUyYSsZsAdLxcstSLuBQqQECgyYGcaAkLiEeCcIDdjJlcCHbBhLZHhjCcJzrzWhgGTzuJjgGOVvOojJoLsSTthXKFRrfLeElPpHhDdHRrhkDcCdNuUAjJakKnCcuUKknNKkCLlTtPpNqQhHebBwWrRwWKkvdApVyTtjuUjRtQCVbBPpvcyWczrRtzhHIoGfRrFiIqQeZXwRvQqaAyUudDtNnEeLldfFTtsnUCcBFTtfgGWnqGeEIgGwWYANShHkKqFfclLoFrRfrSRVXxuUuObQcCqBocCiMmIUWwPrRcCpUwCcKoOqQpPTRZsFQqfUVQwWqMmIiGgDdXxvMmrRvPpVKqQkjaADdyYuUutJjTdtTDTtkBlSeplLPEjIdPApYeExTtlLyxXrRYbBrXgGxBCctiIDKsSYhHyYwqgquUQEeGIiJqLtTsSKkKZzSsksEeSFfElZqSAaLlrRoOsDdSvIiYzZvSsZtNnTJSvVgsSQbMeSskKEpPKGJSsEeFtTDdqLldpPzZDuBbUHWEeuRNNfFZHhCiRMwBNnbReEwWEeIiAaFfSsmnfFSsNMYFfwWIcuUCTSCccCNPYXCvVZHHwkKWhJjhgGDdTonoOOmMoGVvpPoOgPLwWbtTByAbcllLLyYCpPPpySMmIiAPpsSacVkKtNSsnjJweAaEDdAaZHwbBHhxFfXWXBvnNJjXxqQAaMRpVvPbrRqQvVqIiTDdSZDfqOOolfFLVvAHhapdDPxZzpPXeOoEosSQIuMmUoaeEAiIUsNAapPdVPpmMvajJASwWDiIEagPprUpBCcsSzaHhAtWTtfFjJwTaZzAfFZIrwWzwTPdHhHhFIieEKkJaOlLobQUORryYMmuUouBeWwWxtTgGNiIyoOYnBUuFQqfaDhHJjjlyYLRrcCzrRlYyYFfGSsNngGgyYyQlyTtvVVInNivdDnNloOYwrRWqQhLdDjJbBPuUpqQjSsBbbBLDdHeEfFnWzZyYwQTOoXwuUbBWjJGOwQqTtHhbBrRVvLLlKhBbHkDmlaALcMdDmCqQeEfFxXbOopPUzlkKLrRAadkKfFlrRPkXxQIiWwIiRrqQBbnfXxRrFEemgUKkBEWFFNnGjJgfdiIfHfvVxXPpwWFJjsSpPuvVvVUCWyYiIFfsDdSZYyzsNnSghHSsTtJSgfPpFuUGMemEeMoVvhHHxJjXQqilLHhIfzxXXKyaDRrdEdnNxXwdhHfzZFuUQqDWzVpPLlvZimMeMNfTRrrMmvKkcwNtTanNQqwuUWBsSCcbnpqcMmsysbWwQqBdDLDduIEPpecsMJCWWmWwFfbBvVPppVvLlPKkQBMmiIScCcCyKlLksMNnIygONnyYrSEeHhIdoOeYTtjPpJjJtTZzyPzJjZrRpXvVxgXxrRGsUdDFzyCmMHhcftLGIigzZuUaAlTFzZtnNQnNIgGqQauMmqQYyNlLjFfJnuUvmTtvVhhHpPjjJvVivLlVIBTtDdybBYcCYQqTtFOovIiMmSsVEnNHAahkKDdeaKkcCkXYEeXJjgCNhHGvHyYlLrzQqeSsEZRteEoOTYwWybvFfVPTlnNwIiAAuUaZzgOoiImMxsVvSiIhqUuQdrRDvFiImfFMQqfSsAREeZXxzOorSQOodHhEeFfbzhHZKmRrMKULEYyeoOHhWBbEOdUrqQRuuUtGgkKmMZzpPVeXxEvfcCVAfQHpKkFfPSCYyYytThduUaAWwDNnHrRcaAZdDOiIJiIisSvJjVNntTpPFHRrpmMLJjLllPRrQdDCcqETtegEeVvDLckBbHhiIVrrZILDdluUihHYJjFfyzfFsPpFfjqQYyOVvxXkNnKZBbzLvVlEeZbBMrRmzQqmMaArWwKmMkkVTtvKdDBbqjCcJbBVXGEeoOzZXxskAIZzRrMQCvErRRiIjQqOTtoJzZpiItdDqbUqQujxuUXqAanNkIQqiQEdqQDJjBbUdDqoOIArduUzWUuCcFfkXOoOFJKAakuPpcWwTtlLwWnIieENcCCQkVvKdDquDdBVvgGkkKRQqgGrQqrRngGrTtQqjhDFfzZdHWwNnJjJzZTtqQLlLhdDHPFfpvVDdyIhHoMmIxcdDCXtkCcCcNHhnKwyYzAdDWlLuTtIDdiUcCBbbBwAaAaLwWzZzZcCRvuiIkSglLGnNETtuQUuqwWXGgOaWwoUwWuOAHVvdIiDqnTEPgGpeLYVPpZSUuQqTVXBQiIqQqbypPCCWNuhIaAQqiQqJtgGSFnNFfcCSsMhbyPeDQLlDdVvHhXxqGpPyfLhkmMsIPFQqfpRBbCHCcgGtzpMmoaAvjUumrJjxXfFRMfFkKDdhflLEeApPwWnNqUYyuQYlLyaliDBbdIBbLXEehtnNPejJELlVlpGJjozbGiXoOwpPLlsSWwWsSwZGmxMvVDsSSrFfJbBXxpPVqIiQvWVqQAahHckEFISrRsiovVjDdaAxXCwWcSKksMtTmPIgOGgFfoIWqPpMXxmAaxBbGgRbZzBWiBbtiITmsStjYTMmrRiIWorYSmKkHfFhFJjgvaSsSuNHhXIixYyCcOonmMilyVvkKIsFfSTtAaQqiHPpUfFuKoNnOpPLWwSGLSsNHhnoOmTtmMFfhHaOoAMRHhrSRrkhbXjJuUQqibjJPkKpzYydDZCcgFzZfAasxXGDdgTtfZAhHLeElazKCcGTLdgGBbcAaCsZOokyJjYKBmaKkAjnDdgQqOdDoIiGNqPppsNnMwWmVvzZZZVSsTtjSsjbBJyYJsSzZZCczZhDdHzwavgGROorVkqXxojJnNOoLyYxoNaAnijtTeBbfFpPuTxGgufFUFfeEpPXtDdTCcLlznyYeESsQqXxXxvVXYHhsBzZBbgGbSTtpPQxXwWqQWkKVLRtZrOoibBBUaeEPRlLrOoDHrRNnhdpOoAYTtUDCcomMOhHdsDdSnNQOJjpkrhVvWwWeEYmTzCcnNSsiYxNnXNnyxcNwWnJZCPoOChWwcCHcQqRrpOoCqQccJjzHNncAaLzZlknNRrLVvOgGolBbKkcfgGfqQGgsiIUFoJwWDdjuUOfXxTXxtxXqmMQAFQqEegGYlLyfFfauSOkKoFcCjJooONLlmMcIiPQqopPOPihHhHNnqQIHhrRpRrVyYvSsFfNnBxXEedQqniIMmqQqJjtTvrlLKkOoRvVVMaALlcCCcTtmvqVvQVBbuEeUQYyHhwWQCHhyYeNnVvEcosFbBAAaafGguTtdWSswHRrhMGvVSDoOkKdsgnKCcDdklLCcSsAaVWwqeEBmCcCcoObBXvSsXTtbQqHhBxVHhHIigRgGRrHwWhDoRrwyiIYznkQqBbVAkKavjJEegGHhHsShagGBbmRrDdmMBJjzZJjbxXQqaAEAaRrrRaATCckKtfOFfoFCdDIirRwtyRrYHWFfwrFOoFffiIggDdOoHhHhGrIiRHhVvjuRsSdDFROorukbBIijxlsSLXIiSslCcsvVTtpxXPlhHNngGnNHbzCsSsSSbBuwWvVBbNnhaAHOocCnNHhMrRmUiolLOIhsSuUsSEzZHhxQqQLlqXJjfFJjREaANhHnalmMLHsSvQIYyeEiqKmcCTtAsSxXJIDFfReaJjAgeEWweEdDFmeENnMGMmgoOfhvVmMhQFfzZiiIEenNSUuOlLbUgGuHhoQqpPOCMsSiILAaLJjoOGsSglhHlASsaIdvVFqQLaQDdBbqAUuMmYysMmSlfRrDseEVziIZvnNlwWLjJkgoKDdEepPmMHhvVKkxEFbBfblLnJrRjEewWvmMVWwTtJcCKvVyYrwWwVvMQeqqJjzZBbiNnYoOyIOzlLZoeJjENneRmMLlbBBbcYyMmTtKkGgqQgGVvCdDrZuUzmXxMIivqHhQbBcmMCVfFYKkyRrDdbBSvSJsSfFGgrpkKPLlwWRGgQNvVRPwWptTeBeEuUbvVnNBIibsVvShkpbBPeiRrcBLQqlYyIxXibBrYuUGgyEeRbUuMmoeEOqKkWNniIwfNnuUWgGqHhFfgGzZQOtGgNnTdTdDxzZrRIiXqZdDAatNZtTzbBnOUuZTtRQXxEeqBnNGKXxuUkUugEehHxlIiLTtXGPpTSstTpPtEEeepPWwLIilsSgksSKrRBbkKKdlFfpQquILlHhieELUulMaAWaADdwmMmniINkKUSNXxnuYyxXdQbKkjJbBrRyYqQqcoOGuUpPDsStTtBbJjriIiIJnvmrfFRgGMOiIhHQzUMmuAaEekdDKGPpXezvVFfuUZhwLlWNTtnrlLWwBbMmaaIiAVveETtDFfFflLUuLlLlpPYzZyMmUuKkEuUeSsKDHXxhFQqzzJjKkuLQqgSsGlUnHtThCcpPAJjazZcbBsgGjoOKkJuUGgSzPpdDZZgdDZWwLfFBkKbxKeEVvGgCckeERrXWwazPpyYDdEetTKbiIBorRoDdDdAStTrRFfXtTxdrRDNiwjJWInmMTtPbBpwWwQqnQqXxNqUgGRrdDNnoOPtTOopVvFfZdzZALwWlqqQXxlLQIiKyYDjgQqGJJgGfFjFfpSphHXxPsEWwDyOoFfYdFfElLGdDiIgehHKkBbiIKicZzEeTtCuUQqQqUQqKkSjFfZzJlLUvVuaCcJjWwbBuUjtiIDdNnEeTfDdPpEeFNtlLTnbAaBZzLlpPtBblOvVoiIDdNnxQqRpPrsiIaASsCcDdSXRreQqwWwlLPDOfFXQVvwLZzRrbffFFBJjlgbBVvoOGqbBBbsSnNQAaoXxEaAeyaAYakKbJjrWwRMmBCiIcAOTtaxWkKeCPnNpeEdhHDrRtLHZYyYdiIXxpAaUuPtTyYTmRxtTXeWyqQYwEpgeEBbKkHhRhHrGXxeEhHiIFcCfJjFHGgcUcCOouRrkDdKkXXfkKXAadDQqfFDzZGgERDiIJjdrPjxXxmyYMeYyTtZzEXAfFanNMfFPpyeEYtTxXouWwUyYsYyFfKrplAaebGgBzZdDEKnNqQrRiIIiJjqQjJghxXHHhGMwXxRrWWCcIidDqToOIitQThHtpPbBcMmclLGgDaAehHELkMmfFyPpqQvVYLyYPpxXlfFOSsoKYyiIwKkcCwWyYFfqmMYyQhHGgJReEGgaAruUpPPpjuUuUlLVvQZzyYIiQqdSCcsIilqDdUuNEnNeXxnAzZalLwAsSaruURGgQqWpPpPwWvYyVWwQqmkKMEeHmMhFfRfPWwQQqbBqzZZtpPTFRWwoOwrRWruUgGcFfCeEmMqQooOOGgwbWwBWoOLYyYyNnFfNnlkoHhObBmMKjJrRyYPpkKQqZzbBCaAFfcWwUooOOVZzpPnNvIEeLlVHhcvVCvpPOoiLluLlRyYFfqQroOuUeePpzNnIWwiBbINnPoOpiUYMXxTtCcmPpbGEebBUuggakKAGyiIYMmUulLFMmWwyYAhHJjaoOlRrVYyGgzQqZvXxLfsSBwWhvUuCJvVjDZzdqPpQqQqplLPRxXxEaHhMhsSrRHrdgGDRohHOQqniINMWFfsSbBBcwWCgGzZuUnGgsSiTtOqQrRoYTtOoPCcHuUXxhpHhWwArRaeEevVemMTtEEagbBsSGAPpFfyLlLhVMmvHlIPOopfxXFzZvOoPpVyYZzZrRzngGNLlKkewrZzRWSfAabBFsSVRrvDiLKklzZAaKHhkbBipOonNVvwWyJjYEePVvOVFnNfNGgnseEkKwWXxSCchHqQduUOocCBbxEeiIboAaXxjJaIiMmIsSXxJRrjAakKyYrmExXeZKDiIdQqjJMmyAayYzZGgkKMmYeEqWwQoOkoOVvrrbQqBrRpPBGgUucAahHCcCwWbwOoWKkRGgOolLzZlLtvVTiItTAaUuuUojJDEesJjfFZzPppdDYlLqJjyqUuQYdCcaADQhfFXxKkHhHtTBLljJVvtTDdbBsSmvVHLZzzPpZOKUukWmMbhHBwbBWWwwMZzLcClmuAaUFHHVvhliOoDdrRcCIuLJjOolQqaARNQqlLBbBbcCOpPoDVvMdDqQqsyYiZQiImMPpjPpHpeEQqBbDdzZCcBLlKwtTWIikjkKJCcbIqdlSsPptTLhYbBWwynNzwWgzZubBKSscvSswPpsSWVWcBbCttxXnNJjoqQOLZzlNiXxIuUgGgtTThHUvVuqLlQtBYymMbpctTCNnQCPpshHSIiLlzsSZNnyYEakKrRFfVvAcCecqPuQqhHUPpqQqAPpaSsUzZuQqIXqCcmIiRrHgGGgheEhHaAMPpQHhxGrWwwCbBcWRgjJNfFRrAampPjJMVvdIeEvGgPpVWwikKaAgGlLDGEeHQxIirbBRotTHhOpPLcleETtsSFfjJLOJjojhHLbBlDlnrRnNNCcLJNrxXBbagGwWADNndAabBFiIOofuUkKLUuJjlRBBgGxnNXtTMmbbcCiaAIQVHhsQgGqXueExXenNXxQgGqvbsSBKkVyaAWwvVJjTTDIidfkKlNVvnAaLCpvCcVCcmzEeyxXQqgLlVAavvVLlnNfFYyPpAaiIYkKpPvhLlgGHGtTfFgVrRVqQsZzEeSidPpDpPlLhHZzCcDSsYBbyiIdBZaSsAzZzkbBKaAHYIxXFYFaAmMKknYyNZzwWfcfHhIXxAXxairREJjqkKqKkoOBFCcrnNRNnfIfFiAVtQoODdqTNRwuUWrcCnUuvVmMQdDqdDQUoWwNnOJwWjMmvVpPnNljpQOooODxXdqPUuGgCcnZzZzNmpPHpPhVcCLloOHCchvtTztJjTcCxXZEFcyYvVAaFfglLmVSsvJjMGsSAqReErmyYBMbBmsSsSEeNnXxWwFkKwWfDEedQqbMaAwWPwiIjJnxXNvVbBZIjrwWoOWwOooDdOYnNyaAhHHhdynNuUYGFfgdDKUdDRrUujJuMiImHgGCEVvxXjJeeyYhHwgUuIiBbBFfKENEUuebBnZzuUcdDnNhHyYCWubsSBaAIikYyAaGgqQOoDdbPpOoMmBnNKkHrRbBCVQqZzCIiTtOoiRpPpaAPszRrZSrIuUkKhYePpHqQCckPoOpsSFiIGggGxUXxuXOoqQLliIfdyYDxEtGmMPpHhcCPpmMHBbleBbiDzZDUusSyYddIfhHcuwWpPgGTWIiuUtkKFfTVvdDiIpPtQjFfJFCcfqGgTwrRUKkutHhgVvtToBCceEbOYyGxOoXZHQqhboWHhtTeEwWfFYhHyGgwAzEtThHeDdkKtDJzBbZppWwPuGglLmjJMLsSuzZfFUBblDdPlLpfrpsSPiIKEgGkKPpeLGHhgMXsSdWzxXZwvVDxzGgqQWwZeEjJZIiQLZlzZLzlDZzdLlLlqhHgAajJGSMmsvgGQMtTmTbBuUwFfHhAaGgWmrRMtjJRrHIihwWqbBsSCcijJIaAhnTDqQdblLiIjJdDOPpoaoODcBFfbgGKCcLlfhHFkuOoUqQreEVPpMXxWwmvoOZzQqQqoEQqetOoTjJRrOWwVTtvLlAablLWWUsSxGgXufoFfOFwwRrkKeEtTPLlpoOEsSjTtxQqSxIirUZzucCAvhHVlLqQFfaHhfTtFRNnDUudXmMuUeEUuJQqSsiOoIXxIiMmbwWnNSsYkKpPQaAqdvjJVCcVvuUDbMbYDdMmfFcCFfCcxZtSsTzJYyeXUuiIxeOowWEHhEtTICciuUSCpPcsLxXlxXYyqOoYcCHDdxXhlvXaArRTwWxXiIQqYpPYpPWrRwGgEeydDyOaABIUuiboguuUUGeEaAeUulLnZmMzNuUEtTNjJQJjjzZkKJqlLPwmMWpLljJRrcqQzoOZBbxPpyYPpfnTtNFXPmMlupPiXxVvfFxXIDdlWZzUujfQOOooqFQpelLEPuVvUoOyYqQpvVOeEaAaAoOoOKdDkyxXYwWQBbWPlLPpSsZzpvVwKkGgGYygqlHhLMmIeEJjiIZFfqQztTuUhHaAaAYyYyiOopPFjARraJfHhHuUXxWwIZKkzisDFfNnOodlLPUpPnNuUulLpSuTkKtwWRVlRrLrRviIrUJjNjAaynNbBYJjAaPpvwWVzZQVvqJjBLpPRrprBwWcCbvYywWVRPBbIiXFfxOoaAaziILlZAtTzTIiCcHhtfFEwJjWTtYoRrnNkKOybVvlLWEYlLQIibLlBXmMVvOoxqWcWwCfFtTaSsSsAoOoFAafudDEeRKrRdsSDkrUOoEeBxXbxXQqxNAXrRxSslLaKkCwWrRvVPpVvJcPSspnHhXXxCuUWwTtcVzvVJjZxYyXLlpPWhdDrRWNnmsSdDMSsdcCIJjinNQqQqBbNoFNnfOCcYynEnNvVeCFfcPotTTtjdDqQgBbGJQyIiYcCqiFfIDIuUijmMcCJHJjhxXiILlmJjSHjvVJETtwWHpPKaADdrRHhEebOosSBxXrTjJtPgGJHhtfFTjXxpRnkKAaNPZzkiNvVngGIPpnJuUwWbBjmyOoYJZzRrjMHhEMmexAajCcfFqQeWwENTjJyYHPafFAphzRrpPZvVlLlTFiIftIiLPYypdPpVKkFEetnNZzSlLKkHOolLhKkMmuAaAaLlUGxXgRHhrDdEDtTdKkUTtOoGgQqnFoOBXuUxIiAayYLVvlbtTOhcCHoJhIfFiHfyYFlClLcuXSsxUeEuGgUpPnjJmKkKkKkWXXxiIWwaAejUuJExVyYQqLlvPpwWwhGgRrAaWwHJjviIVCQbBSsqkKDdVvoOjJnNWwEesSJiIsSfFtTjbRrqQFsSceEYPNOonBFfPpbLCclZVvzKkiIsSNnfFxXkKnNjPpQmMqhrRaAHUuHZgoObBWwrRGDdFrgwWGRAaBAadDbMmdDmCcMfOGCcAaAatlLIiTgNnAravZUuzVARZzKkplIjJiZzLjvVJnmMNgaAioOQqITcCtRPpPprTtGxXCcsSaAKEeklrRLeEPRfFqEeQOonNyYmKbBdDdDkdDFfcVaeEHiqQBbwWzZKkcCtTiIJjWjJvVwhJjVvsVvSsdDiXxIGgqQHhBbSUuCceEmMWwzZbBXxsSAkqQKaTtHGvVgdqZzQDaAzKkWWPpwZzwRAarxaAXzVvZZzZPplnpPAaNEeNoOnLlLjJVsSXxyYvTtjrEeRJsPXxjniINsSAsSzZaJfFqQhHlLJjEesSKYysSiIcCAagGbyYNnBihTtrZzRiuUIHBbPaVtTgGvAgGOojdDQnrRNqQcCkLlKqJmMLloOpHhwWxXiuUIVvIiPFfgIiGpUnrRqQNuzNMmZzUugGngGCTtciqQcCUucCjJFfEeMaAaAmmVvWZzwujJUwZzWpPNnwWYyczZgvVEekQqKJjGyYClzWiIwZslVvLSKkuTtuiIUUATtaALqQlfFtMmMmTxGdjJUuDDdUusSoOXukwWKUhHxgGgqQUumMZzwWbUueEFUufYBbEeyKkYyLlikFfrRBlLTtgPpGbGgDdKNnCsgGeMAambBEcCSkgNnQqmuUMGZyYIijJrRIicCbBzkKvVOogsSGdDdDKCDdBKUukrjcCJRxXGgVvlWwGLlgwWLwswWFAWwJFfjafXeExMmUuWvgGVwdDvVuDdUgGNnSsaUVveEuAwWSwoOWgGDxXdzZJXoOQqxkKjaAtThHfFsSZdDFflFHhfdDLsSZzcCWtTJjSsLsOXxoIikKrRAafFaASeEIiTuzZUQcCqXxYaaAAyvPpVGPdDaApgtEdpPDFfmdIiDEeMeUxXhbBHuCcHhhHiIKkPpBbhHlNfFVZzmMvBKkbRrUutTJjTNntuULlcAaCyYMpzZPdDgGVjbBxpPXPpSscWwCdDSsUuMmyYyYfFoOAaXRrjJxJyDdYtTgGvBhaAHbLlLlWwmdDlAaHzZhMmuUujJUUlLuKktPpPpTGMmgJjPpBbCuUcIocHhCOJjyYyoxXEeOPYBbeEypjLzZlJWwbBdDdQqrRqQgGrkZsSzKNnnNeEbNYyZzjJnJjBbsSjJpPJjeWwEHbdDBhmIixXcJjCltTLuqQqbBQmMUBvVwgbGgBGKIiHhHmMeEHzZhhSsTtUukKkWeEbusSfFNnUWwfGgFlLGgLuUIioOlEeHUuAKkaCijJIlLrGgRchTtmAaMyYKAatQqTkOeBbEyQqYouUefFENGgjJyGBbgAaElLeYGgFmzbBZMfoVvHrmMRhOCYfwWblLBfFuUGgAaBRrbOowWGbVvBbBkKMmtTgFTtQqiMmAajJMNnmIyOoscCSJjPpMVvmdDRZLlCczfFfCcjjJJsWwsSSGkKlLgioOIEwWevVGZzCcgWAYyJXxjatTwKkmCcWwBaAAaXgKkGgQqyYGFHhMpPmfFfxqQwWKTtZzkPtcCnoONlVvLkKGwWajJqLlQAzZLlJjVvsSGggGxeEXLlupPUCcyYfFAFfaUXxugYIdDiaLlyYyYAynrDdvVyYSsRNTkOoBbpPKTCUjJuctkzZzZzZKpPzZcoOWwCDdpDIidsSHhoXxwWpPhHOoFfObBxFfnCaAVvclLNnVvsStTrRzgGlLjJvVNncsSBbOoCZRrDnNLlOowWddhHPpDGhHgMPpmVNnCcoOeEvhnNgcCGHNBbWoKkOwUuJxXLjaAgGyYJNnlcCObBojXKpPFGgtTfFfyYdDTKkGgqhDdmBbMHwWqFfQoOQUutmMkWwPphJJjjGgOoXqkKQTtxZzvVBbkKiIUsSugGAaEebhhHHBwqQpGgVvxXPpPTRrtWHzXNRcCrnVNnvOodDxfFgBbGXxtbbBBDdTYoOyYyRriuMYyEeHhvVOoaArRmsSExXeIwWTtiBbGgZzbBzZvDdNnVfFUCcDdDdfFDdIRHhpPSdDIiliXxILvkKVxXvmMuUVqFfQwWtBbTZXxjJDdAawWmIinpmMjJyYPNHhhHTtKnNthHHhTwWzZkRYyYyEuUuUJjaAyYerlLzZMYyqOoKkAAarRaQdDtMmJjCoOcmLlMTEJjnSssSAcCArRtTzZBnTtNmMzZhHbvXPpxyWwYcCzZTZztaAOoVMmaaVFhHeEjCcJfjNnWwZBbznDdCcNJiIkbBKWwDZzHhYydHhvwWsSMmxXoLllLYyOYyNeCNncqQEeSqQsCcO