From 8800e9b63e463a277c8e5b810ec14382d9fdffae Mon Sep 17 00:00:00 2001 From: Jacob Jonsson Date: Sun, 7 Dec 2025 20:22:46 +0100 Subject: [PATCH] feat: attempt day 8 --- aoc25.cabal | 11 +- app/Day8.hi | Bin 0 -> 28336 bytes app/Day8.hs | 91 +++++ app/Day8.o | Bin 0 -> 98688 bytes input/day8.txt | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 1101 insertions(+), 1 deletion(-) create mode 100644 app/Day8.hi create mode 100644 app/Day8.hs create mode 100644 app/Day8.o create mode 100644 input/day8.txt diff --git a/aoc25.cabal b/aoc25.cabal index 2f071f2..9114f1e 100644 --- a/aoc25.cabal +++ b/aoc25.cabal @@ -67,7 +67,7 @@ executable aoc25 -- other-extensions: -- Other library packages from which modules are imported. - build-depends: base ^>=4.18.2.1, + build-depends: base ^>=4.20.2, containers >= 0.6.7 -- Directories containing source files. @@ -82,3 +82,12 @@ executable day7 build-depends: base ^>=4.20.2, containers >= 0.6.7 hs-source-dirs: app + default-language: GHC2021 + +executable day8 + import: warnings + main-is: Day8.hs + build-depends: base ^>=4.20.2, + containers >= 0.6.7 + hs-source-dirs: app + default-language: GHC2021 diff --git a/app/Day8.hi b/app/Day8.hi new file mode 100644 index 0000000000000000000000000000000000000000..67c2bf7c2ee00395c6e9c945863a809316183026 GIT binary patch literal 28336 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 XE!n_LZbRfoioPuetRi89R0|9MurA?} literal 0 HcmV?d00001 diff --git a/app/Day8.hs b/app/Day8.hs new file mode 100644 index 0000000..81c51e1 --- /dev/null +++ b/app/Day8.hs @@ -0,0 +1,91 @@ +module Main where + +import Data.Char (readLitChar, showLitChar) +import Data.Function (on) +import Data.Ix (inRange) +import Data.List (foldl', nub, sort, sortBy) +import Data.Map (Map) +import qualified Data.Map as M +import Data.Set (Set) +import qualified Data.Set as S +import Debug.Trace +import System.Environment (getArgs) + +main :: IO () +main = do + input <- readFile . head =<< getArgs + putStrLn $ unwords ["Part 1:", show $ part1 1000 input] + putStrLn $ unwords ["Part 2:", show $ part2 input] + +newtype Pos = Pos {unPos :: (Int, Int, Int)} + deriving (Eq, Ord) + +instance Show Pos where + showsPrec _ (Pos (x, y, z)) = showParen True $ shows x . showLitChar ',' . shows y . showLitChar ',' . shows z + +instance Read Pos where + readsPrec _ s = do + (x, ',' : rest) <- reads s + (y, ',' : rest') <- reads rest + (z, rest'') <- reads rest' + pure (Pos (x, y, z), rest'') + +dist :: Pos -> Pos -> Double +dist (Pos (x1, y1, z1)) (Pos (x2, y2, z2)) = sum . map ((^ 2) . fromIntegral) $ [x2 - x1, y2 - y1, z2 - z1] + +-- | Original idea: Combine all positions to a cartesian product and +-- calculate the distances between them. Pick the n shortest distances +-- and connect them. +-- +-- Problem: The problem space explodes and grinds to a halt. +part1 :: Int -> String -> Int +part1 n = go [] 0 . nub . sortBy (compare `on` fst) . traceShowId . (\ps -> combine ps ps) . map (read @Pos) . lines + where + combine :: [Pos] -> [Pos] -> [(Double, (Pos, Pos))] + combine [] _ = [] + combine (a : as) bs = trace ("combine: " ++ show (length as) ++ " positions left...") $ map (\a' -> (dist a a', (a, a'))) as ++ combine as bs + + go :: [(Set Pos, Int)] -> Int -> [(Double, (Pos, Pos))] -> Int + go circuits _ [] = product . take 3 . sortBy invCompare $ map (S.size . fst) circuits + go circuits connections ((d, (a, b)) : rest) + | connections <= n = trace ("part1: " ++ show (n - connections) ++ " junctions left...") $ go (connect circuits a b (round d)) (connections + 1) rest + | otherwise = product . take 3 . sortBy invCompare $ map (S.size . fst) circuits + + connect :: [(Set Pos, Int)] -> Pos -> Pos -> Int -> [(Set Pos, Int)] + connect [] a b d = [(S.fromList [a, b], d)] + connect ((c, l) : circuits) a b d + | S.member a c && S.member b c = (c, l) : circuits + | S.member a c = (S.insert b c, l + d) : circuits + | S.member b c = (S.insert a c, l + d) : circuits + | otherwise = (c, l) : connect circuits a b d + + invCompare :: (Ord a) => a -> a -> Ordering + invCompare a b = b `compare` a + +part2 :: String -> Int +part2 = error "Not implemented" + +testInput :: String +testInput = + unlines + [ "162,817,812", + "57,618,57", + "906,360,560", + "592,479,940", + "352,342,300", + "466,668,158", + "542,29,236", + "431,825,988", + "739,650,466", + "52,470,668", + "216,146,977", + "819,987,18", + "117,168,530", + "805,96,715", + "346,949,466", + "970,615,88", + "941,993,340", + "862,61,35", + "984,92,344", + "425,690,689" + ] diff --git a/app/Day8.o b/app/Day8.o new file mode 100644 index 0000000000000000000000000000000000000000..e5cdd19e4164ef1fd2997882e7594075d91e1b43 GIT binary patch literal 98688 zcmb<-^>JfjWMqH=Mg}_u1P><4z~E4a5On|xJ23Dv@G$T*FfcHI`4EB+LNR#sx?b?H z{K4OJo{@pU>H-IgmU9La9f$GrLE(H@`=B zw75s-EsyS44v)^zA0C~)3?7}X955p!{wt^P%eyczFhlhdHb(-<90?3_STW53i$L5H ztKrejF^^=Ll&z@t|dB=6CD)Zl+A1C;0ZKlKNc>Ct>t;D0IuzdVCax37Xv zx2uFlcddX&cPWQYcPWEM^HGi0dXRY9@gD-*kP;2lYakmKkkZc!aQdldU|{gIJXV_H zaoqIGTC9q!%DB3;kEd68|8@3{d}q!czdG6c%sIU|AIZ3V{7<>d|~u z0^uzVgnxZHOK*5|mOk+4tbO6r=?Zhf4RAPgmrD3_mx9uz!b_0R1oH(bLy(s*_&vJ4 z#XY*C**!o((CG>aUwD2Z5DpR^ovz?i0t*LbXaGl=y0q5CT z36Jhl1)uIx4G&Nn>U7lr#s5p~fB*kOgB28Du;>>81r{i$^twI($9ETq19L=Y><^FQ zt`9(JJi46)Ji4Pn9(VytlAy>G`mYRiK0KX!HXo7jwO$&*%)n4?1d4pm<1Q+oux0=; zen3o$s}g9HNu1DNmlKlKARpJQ?F2OrBH zMZuoUM-*TdTEimL1LSb1gF*I!6Ru~ci^>m(#U&~)e0oj6j%hyn0c;c0W>6*tSqh6s zP&xvu>vg>W4xdSw;d2A50BoJNghzL@f=8$C1CLHuP&nOyh7-*Fuy{sxHawib&h+Sx z74YngQTYKXb0N;HQF#FmCkb@dg83jPgTo1nyTRcUZu?-5V z51ySqhyZ(lBfvBm7#JY7gUeMGP*^Z9fa@g?6J8H3#tgR$UK{mkb_vm#6$EOD(3O{>v)`E&+a2W(ESJ3mN52!5Y zt`_&`F6Q^?E@lVkIQ{=9Wdgsv0|Ti3h3Q4J_XjAyIeQ#;1?OT=TcY{s4^Z@g>MxL5 z5QfE%PcO(M1`kv#IbQBTEruq5@)s;`fb`?^C&)gewhKxAbVs!mqB)g31wJ%VRb5zLv-MTQ`7`0PYGF(QZM{2Z+`OsJ#|TTs;e_yDV?il3CSS z-Y5~mQc0uNz>sjm8P2fwDJYA;(lS~cgVGf&EyB_jOevxIkw7?sstUPxH zRRZY!Aexj{$6Yxg4l#9ct z9e3PS08|EodY_<90;q7t($7b0cVd*|1j@s1aCzu4S{{0I;~1}*janYU`bbFQHQ;`r zEWAMs9`Y!b@aZlFRZWmV4N%7%QZB&S!=QQx9KFzfq#~;RY6XvOY-UUtX#KE$061-e zI!nE-knzbD5C?U<3ObAu4GITvb42LBGRV&$4C_ZA4~Lk5y6WJu1JJkuwvPL878Q^K zK>hZIpp=W~yQ2*pFo;3>?XdVl>d!6!j~}@*Gcb5G|7YZHRRFO%KQ}*P_h|md$lnqS z;=}uZH^7}C*AE`u4s0HsuAmM+*e_zB;bjN-m_N)vh|$>_kYW2^*bwCh$ap(=m=bJ) z$baRu3EH&hxm73N%7|u#TiaBg6wTi09dP3>GyGpz&hMTl}pVObiU3%|~t^3M$C(JT&~+ z1wp9+Y5W=0|Db-f1*qtQwM*O4)T8*riiZAp$B5w%@T39MAML^z{s0YO!p7Y}<+26x zJOlc8Gm1ZUuz=%3z@yuj!=pP?!oxb4os!5<0Ou1Tqq6fDbkqeFl_1@S(&>lC#s40V zeDLArx<4qLXnuM4oEa>gfycg^j|#kI_UZh9JSeT~2_KN|WKn@8AS9bVfZYrqg+@34 zoCP7pDs?#Y+X=zfD2*J zF!B$NZdV1+s3&+j3YuYiV^lz+@X!r*cOeQ;qRK%IkiEFeK?9FYR|8NWz{&v*P^6=(2m92clelu1+W}OOAeB4a zt{#wL??$b^2cqp|;nD3H;c@YYN2hB9C`3SR0F8%r#$x1m&}0dNM|Z7CbUzytp!#x}x*!sI3pn4DF3P^vKYayCDx?LTR{Q>J+ z8+dfP20;7~05gFUe;oPo|G$UjjS^5D;Q_8AnveeQ=)4Bau^yeLJ(`auAo46IdLYRN zo_-)xztHlM3p5Xb9Dks3acur|fVmdp-_Ae`|5||ND{BNjx_uoyxQ`s+*KqKl1 zn?X}>9uVJqfWi(jE<$WP9{CO$GH_sM<3_a~soXBt2IV(MZtiyF0Oh$49^I}QAO>{4 zD@NskNApn&)L??ujNsrJ>gI#mwXil9D5Q|uT?fGJt|pS#K_KO8c8~60=u(J#;Eqve z=m+ph3dC{B{#loZ8*8q|yZ`Ra! zfEEQ<-sEqc2rB)NQ+?-QSW*}IugnH@IJ}&PCuZ>c0%+VEW&H&kv>^#s4_X%i9j}uG zx9!0B6=Vgdu0xuE2IXoYk8W2`EByy(Os)ASSOs>c!OGuOXe7h!!*n0Gc?4Gv?YO|z zce^Tp^DP&&h4A5ZGbpowb8iSy{n3${o+QxIlZ6NU(-V4XK}?&%(i5m49-#CDT4@1E zPoRY;A6_D*Ct~M$AiXefRtL|;LX$i4x*SM9(w>Qd!Kd>Cv{6@50h^ZvEziL-FN<7n zP^I7NaolwQ$hn@~j_e-Y5$rylr7Ju-OE-9Q*6#4>bUonH>3hPn+f&}7)AxdBw$#G|`b0n)-n zs7F*AZqP++h;km(g$1pF1FeNCg%%2jURy!?M_Anj4o}c{TqwvU59?SB{was~x83$= z{>@l289D1{cpis$Ye8#0I%`xucy@+>mdo&fmv?}Mi9ppEw08q)mcpCWou!~IIS1Is zk_-&sd=3dE2F!e(k0YOhhKB|spL=wEhGg;D4L+T&JA68Q4|sMv%6oLWp788;jRH&571h<7almWI;cOujlbRD;nC>|Zb8HH1Gft##1QfAikvSE z!2Ka`JLEopj~S>a=q|PJu)NRT>I34ya$DzVP$mQQgV4=`set51jBIi3_w23yZtK2?ac! z0$OwK3Z9vVuQSI`4_Wjp;MsW(F~n7p0PAjfcE_=S7AJUiyYYEIS{LAs8r(cs`wEd> zN;zN!wP)u?pKfPykM3%IkM3f2NTTO>nfUAfe~-@3koDHEb$T#!pve!k{vJF(qYfKD z^z8iU+wCUq*fPQB`Ppk7d0J(zq&r%S%XY1zIJ?;L&;0qdOQn8hQ^@=79=<&QJ!>h$yH73#!YY z=CVQ)5IkL@ln4AC-2~=`IMCbOsPz!W{168ZICzl9E0D%d2;0Y6xXFVizz*=E@JRswB+(}?TgnN*O6+rERPUt!wa1jg&IEX$j zLkxYe{zYv8d^`g-P75A7LD|=UXI#$$(s~7T4JBT_c?>H=kP1YP?ot6*>l)+?@W5?1 zq~Hhf8DM@yj5Bc=gCz+26WruP__Gt#@I)O4H2{r^)bhedL&QL1ncbxh9^fJBP*8dQ z;WcPei3fO0w>uQn4*%iN`5oLKxCR=BeaZS8RNK2SV2oFSP3;B^-hYJ68Gxpq!Ho-0 zPoVP{Xr89?8fd&7+_V6B3(44nVf&{AYn#$iTn=Z5o43#wdSIfwBP70dI2xRUDv=R^XY(2cQ-cXpBo0(v%I=@BrmakSjWm zdw}}p*B}NaylnXX|37SS-=jMg92&6r;R20MpyqodcOk8BL<vDtVUX;8&Z9Hb!lN@5R8$*4f(bTb(|O+mT5_E8=yU}sfOM+|ygW#O&f6RZHPleT zyB1atK#By1mm9zT|34Di&6@8)>70t~<{R%&`W{5Jn?chR(54Y6sUeTI>;TUbNkiIi z=zCmX`3I~CIX*jYz?*)TAVn`&t4Fspw4nxGcmv-j1G5`mK7!gM@OgCpmgOjBpiO;) z8hW7S1K2c3ImHBZ5ZpWx+j*ey02zU#AH;>tGhwvz(ATBII$Gd*7PMWMP`eU57Ktd| zkp|WH+buz14=P*16IY?o#@{XeUVhLb7{rJh{xv~}LK(E->Y)duTmV=9h;~yObb<}$ zZ^s>=nDOYYH9)k|EM87S^cX;MWT0gUi2ehtn+R%%Ll=-E%m)V|QaVBMXE}Ao-9d|- zBtYSUy2uG!8zbDop#*UW%%9*{FIee`ryY#GJ_^bG{OyvEcmmDIBd^=y@BPKV0N&>b zo{R=A2wCj@K{c$pYzY#*HB zK;v0p0~r_?M4=21$U4=cK#%4(96p^dJUZ`rbRIW60BICAAK~z5Jy2o<8zk}o4N<{L z@LpSx8K^7NJerTb0NeFn8N9Z40!Rr6!}7Oh^AQ2q{!~fN<1Q-T+6c0ZI7a0cv=oEp z70}vDuxV-Vb09!MAoF1ROeGOci~Rv#TP(){+4P$RZ)f3Mmkibi+B*(v9v)(Z>IK)= zOd!h`7#Ps?OJUdx)&E)+p>AasV{*31XZ8 zt?ju0k_Y<_lx25=rSbG_$FjrdJ!a?!6iPV5y0-z9nJ62c?%N8FFe3&WgvYRP{$Gy zzOZ=17QT)UBSC=zYKOqW7hHqG+F|JWk=7sbw<~}QKnh<-X6yD90EOKTNI>(bz`IDD zt^%O&c>z0{0hIsI%}0*^&5-y9=PVCI{DaPc0JqFQ`mw}6?3e=nc2KSbt%~$$u4dOM zbpgdA)QOO-{~tgx0gB2WpeTdQ!Jw?4bWwQ;>UzV6N<5p7JODRDV9^KK{qE5W<|#lT z6J#ht1X=`unq%N10G$t=Ck4elC?a6-1R4Yfodwf;RN&==KmY%O+K(_bAazLN6Oi*H z8bNV^xn~>}k03oD3^N}&oGp;F;tFS&-7x(~OMUs< zj~xF$ek0-^7EVa<4?ZtI8n!M4v8&#r`REU@Wk{|9>}fvA@p8*w(14-? z_&f=i9Uz4;dptY8y`Ic351vDZr3GYpP$AU(_y=gy1bE*iuJro)8f2dgNG}K@)!*QG z9BX{_w+y1Pa{U2YnF^}wKqi4R-v?awzPt<`Ai?QBk6u@BI7-075we0BTOcC0Kj862 zW_tkSau7xe2T*xm6pSw%Ot6ImtPY0FiNKmS%|~y5Qvv?)K_nZnVtnHy0}@W4;T>%0 z5`ON9EU2$U(!4FS2mr0O1a+t>K7R}UIYOXFM(&Rw+BNJR-9((Xg{mGt&<-o#TcH&p zEIq<2U2w4+i!pwTan2U1`JnwQ;0a-v`A5;${h+D`tye{9mmNjx_anELQ$2b?fgUU2 zp)K*rgJ0_~s6d9)5unbMwyOY0^aQx()^_CpaV~t~7r60>Kk~*Wet|=u_#+Q};upC1 zi9hnk3+*TC4^&7UxKE^HB%S&I3N32Vlcjt=gd4^0+JbKpW3)2iR&p z$jm`!?F~=J@|_2s-5#LTd)Suq8~`=&!22?eLknYAyn{C;bc5DmfYw)mhVP@$%}KX4lk#IHlSJFDCL7@GicoV zfXWFJg*ks9?H5An0lNGQ9NPHOgAdd~T>07^Yyz(Ma%T6mJXRYI_D}Os2jtw}PNm%6 z_g~r5@>mHMI4GKrI=r3*j{?X7SZIDmb0=I8q+Y<--*6mjx&fCZ&^-<}YK1}m^6C5r zi=-WpNaAnZ3ds>*D?K2I1s?xYNiX0ntgtysNP6*s&WoP|C5@M+L`j znxOo43mkqDu!V-8bp;MD|AM3P7JsWZB$4GN!|;PBx9uf;y**$GNt1}|Ab6BVfG3$(WqykrlwXdABZ4rp!| zlDP|mghHNwCHWT3^B3qXhL ztpE*;AV$YPLs~OILI*%fK}&1Fa}eOu1wn&fH$bC44?wH4k!B-$T~scDB*7zNyFkM% zzP%+Xppmf;FF!m6jUj`_c0prf;PFOq1f!m7xB)z02wGo&==Olm%LEjR%oU(n9j4WLXT^j{g89N_uOr`uNp z9BGhqBS1&MaDbO3fzJ7atccNg>CXfiV&#{IpA&#SzDn%55zy?49G@q^{$2%%PsE@W zcrXLn(LtQQ2@8N|@QQixC>JQ$VP{KG^nypH>kY`}kWf%SoB#y` zqWu7K4=jH`)}?~Bfq;%Zg#<_QQH_^-F2LguG{gmpL%ie7!#zCKoW~v>9Dg7Sj$r8< zlxMk+&Xh*#S3uJHeo%qe?Fw3o20167^AvOe2Y(B684fr;J-Q=7D{n7&bk^R0r|VAN z4<6l);FY*Oo#4}Y!O<)9Um02r!_ztHyfSP^8MKE5WCr*oYVgE5cr~xke`VTor-4c+cwx2zRG4i5ogKOZlqU{=%Bd5e zatd{1e+EeMfo~_uToz(v|2T^Z$fuxE5LA3gpbqSNz=mJIN7BM(J8D7u%0Vj$Zh*U> z{PGMK;n(fT(fpVlyz?a+Ua5B;2IWT3_%?=mXgv!FZ_wH#&=JHDFLR*lU@+7pna}Of z4PM)m0co6oe8b=Yu?k*~@_=$NmT?M*eTew|^9|D8#!wI58wH*o1;tr{2WaV7cP$5~ zhV<;b1@&raIl`;pJ_V8XBm7$fvwtVp8;JCX-+s@=BcNs-bcU$B0F+L^OYcCbV+JVh z7l4FTfD8pChaI4_asZT8PJj{-YJyn-Qt<#ZrriNzq1JlP`Jhe{@Sp@J#ejkxIw%2h z11to5IxmA02c$pC1uY<8C<;0j*F3TjK$mFUB!H5Ai!>R2%EOI%t1J z5$GIcs8QfHBe-Sc(TzB>3c6kd6m}pCOINUYkvGhcCLXlAL&E%dEXe!B&D*1#1*Y}# z|9_BHNPdRRXTa=7niq!5`++tfz|W2cRl=b8cgp64!Ci>PBcO5-n$P*$!L3f{T076< zE-IiBi~-acm;jpY1TkiSguz7t=;Q{F2)KOQ01^hLB9IW433YIt3@$|%g7PBPQnc4a zr2)B=03BHbElNSI1ZN{qHw$$#7Bo)-3pez3d6H-I5d*02%DoUtKlTUg0Dh3WA+!FS zG010Qfls&Zbpahg&Z6Skc@I=_eFW_ad71GK-u45nuLVUSc)kraUxSashh|~0!@>C< zqz07!K*QA_8a5wg37e0CrdjZ;DVB5AV6}p5XqbbuHd2~QWtafk9Qlb~AQapa{lqWe3tAPT@LB`5ufqkFp>Xf(0L|a(#3!;D7?7qE|D%Zlc9D0|Y*e0~FkF{m|hqM7tL@A^;wLL!Qqh`5qv!$07beHV1TL1ngcS(2gYVH3)F` zVD#hQ=>+?H0Qz}_;H@6k&g>W5NIA1 zG%t!W@6e8}9<=NkVGkFoJ>V%!usxKX_XplQ0<%ZqR536X`qiUW2{dH&B(y~Yw&UtXdD?^{88&ZC~!J4couA?H6>{s$dk1=@5BDv`jM9;6;-7kWH@;uio1u)rsNL053HfQs0auPs`~u$WY5aO8 z%2m?%^$u1sl_1R@f-dla1_5YU7icU5l3q}GpgIR>y%Ws+u<UlB4915R9^bV#UvhS$6NEuhvbyb*z8 z{UpqNuypC!d?W$dhT(5-2gNKGg%67$HR_MMsDNj=Kt1_2pa%R2Q0)$G@qp%> zKq3!7BH)e}NYO!%&7ub2S}ez0IVMt?y!7`6z-t*UlF0rJ9wR{t<{r?Y&QxJxQFS5ME zKP>X__$vuR+IvuLiQJw9F9HSy;|oxq3NL$~)-5X9+JN_yztegL=x) zMWP@cyd2`dSVsv<&+zgGdagL=co}dV1uBqykeaH{aSfP0m_M-IPt`vKJml~L&pcKZ za$*d^)nA4r%;PR9klfxGqk@z;!54DXs62vp@j#gz)b2;=_kdC9CXmSNd6|! zcrS|euz`2@{bt183kUD3MItwLK?M`E^a>RK4P`#?=nmxoF_1GnQ^oD@$BNI{a z?R5d&v3DPSY?s7KtI6=u08noZTUD=>ZzI1l5$#9vSE= zRG1Hbfcn3%aueFThL2Ycf^-6DzjZ?9P2rJTh>~cK5(_-SLBa9>G=hyaqQMu>v8aId zOhZRuArx%v4OCryf?h`W031}%paVrdBHm%=*ucscSiOTBf8Yh`(0D5WjWgAN#?C>< zpAm>NL}?F-FK9^vsuT&f^NQf3zo0e-QZa(7Jo5k_P=s{Hoi$>~7|2G@@dB{E3COQ7 ze|kXfzbw{6avdl=fo2&%>R{y*#QaiF$5#UN%%O5m(CG@z{}@Y(VPOv%sP3$N0X=*O za$;=rQSk9EF!wt{GaB4{$P!cz5B~L_CEws#7x1ABazqJ4~b*t>r z`5V+$gk?$48QF;I0O9>$^!6xpsVl@D*zK_{khAEZP6Bxwd4Duj+8?0ZwU7h~PKy}h zfcrs~?*qjUq*cW6GU?y{|G3A|L5GMy>KV`y66o4;P-7RqQx2TQG3xrKCL3tk3I%WXnd8F(P8`ee4 ziXQ`2Qy<`-gyw13@Gh3|OIWA3^B#&jL4E;Yc>06OgBoIBzhE8bB*EX{_7C=bgdm$C z@q??}&Oig*R6d+IlRCHDYo@n=OOhm?9yWXcIfUtv~&hr#{^lI z23^PnI-tM<6nkLBpiQ%fbOW?;n7)oz@xMFgiog{sNaaZxCy+< z3q0P2K2GV=?JEIVn*cfAw$uQ6pEGE`1mxr+@VODL;I$_&aRIegn-rfM}0iSJ3*jB2XO+jur4yH0T;Lh#!%oG8(kd_yXumVvo+y z2cTOpJerS!*CavvDa5Wf^H~M%s(ctJ;f}?h;Bp@KIy$4ZkPw3OGeGeLG6RG`@rG!J zftxj;tA-1b0oq#U`{E1r_y3O+5HG8LYfU z-rt#qG{l8#|0&G$jbR-g}jy|2DH!wRGs$5 zs4M`fLT-%2fHsxKsQmDRE2fBR~e7Zw9 ze7a*n(~;oB1YS0N%cHYIB>)^0;Ba`IIf1_cfB1sxA)jtn1IYSgq_Bpr&&q(92D%Fc zY&PgvR%p;ehnV;kDD06_EbJHrXsns25R493eTFwaKxaik$IJNwAUP8=K0-lj z4IMz|hk)Y5v-2h_JX*Iys$vEZ@PM2G4bSI%0g#pSaPv^g70~=!vA9Qftbs>oDd+y-b~2O~bA?SII6NzfU-4nEzb886SAh4gED=rm`-q1fkq8LD?(uf zO95yu7UWaJyf?mhdR>+_fzJUWehgp{(b5FDc@I=KfYvpGE?fd{TQmBvjCr0TXn&?J zC_i$%mP?z^VUH1RpmXg&dCkD1^A>z*bPuF1fmTtsz(j^ZRszle&OUXXp!`&e#v2(PSTx zSX_-K+Kzhj%9%COELi6D+?a? zX+FyFTF3)*4*Dtb{E6hRnBOl&d)6mE|P73j|%C3u#t$ z)-rf>mV(xrfC33}?gX?c2-@2NJ7E@dhk5f+$XT*bY0v^b#2ICm;f)cfG}IPw?)QK$ zmG*2tG6QBJbT$FeltD2Zq#N8U1?xx6=U^dF%7Qe8z{)VjuQ12StX_l0$-tVaV&1D) zAoF1DbeOr2RtE!UTpc_fCkQr*wXaLUfQ~oATNVyL!w6U*6#{{OzAWMGCx(038BZ zEbq}>t?tw9Z0^(TZST_^?C#SY?eEiF91d=CdUQL-L)(nr>7Z76fJb+5KB!?D;n7`O z?$KGJlHk!@UGLF78#LYTdAvoX;y+|w+NaY+CBp}_N!Q-W%aS2f05Ek!f^JqozBV&9zKlpSPgU$~_^i@F<70`Ai zOh2p~MeY-u!kfRKffdX)?+uU;{02bKT41D66i{Oa>}E)R9F!(Oc0sFi23T(CE*9|o z4q3Ph_7_MENG*Cg*1(>Q;iKZiS}PR5{dBk1@v1q*_~fdh(J6n8@HhD{5AH%$S-C9Vc*2eJce8lVPa&eV`gcfV`gE= zU}<5ZV`-#gY+}M-VP>RbW~gIq%3x_?sAFkqtYd6qz+h=^pkroes$*fnU~FQhV`*Zk zV`65;U}0dYV`-*iZfMG2XlSluXl9{fYHYw@VQ8siX<@EoXu)7)Xr^Nb(qV4SU}~ge z0y4+Ug2CL_Qpe2H0Bnefv7wHIk*SWQg$0ADiII+xrH+xY8H0(LnU0y6g^r=A1%t6E z$Z&1||l^1E3*i(3mGEkuXB}u=x>?7%t4r0Mmu4f|&t( zre=npMu|`lF@cQ%dL1EL0yLf~h($ff?I3ZG`{9Zi7#Kj;#Dc_mkp&qT7(naXK;o)s z;vozS3?T7fH1RB`cm$ew9aKC9O?)a;JP}QN4OBc0O&qj-1!Qj#n)ofK`dT#ck5F;Y zoEx$f2P4G&pzUAC;_^`OdB}nc3=C#aanLc5$Wp#ganO;x$l@tb@q@^M3=9m_Q1LTp z;*+4_;MHG9ax0b;=ipm2gJ1yhMoaR)T@6-*2aLJW)ypy>#Z!mm*IRZI*F=yelF z{tVb0%zVMfj9tA7GsJuW=tP7R$Pfkw21}@T1XLWnr<#F*!H*df4$KUYRfAB)3=9lu zILz;WnqvTU5-2@^bj^X9gYJjTP;r=lL25zxBo6c6L)C+JwSm;ZFb4~E|7x*7+z(!q z2~*6#z~GESeJT#|3LN4yaflzpA^r@9_*Wd_60F$$rHez{mlYDf1<>`S$xuJ1<51tv z3JD+da%m0JoDWcQVCBMK-z1~j3BgGCt_gxRpW-;@nvZv|8xj0$6e zxc>&!9GJa1Q1zhIIxw{$8g!2YD8B?iD;C&((B(MnJpnZbyoM2E02IH4ii3|BfQo@A z&^gWMX%-}|$_{a72Gm|yKC*?1Z-9!w0x4!-Uu`ua#vv}wjon@)ZfN)`LR@YLt(VNXA>of+ zZ~8;k7bv5uPl2lUKnu4TsCWRH_+%XJ*#$L!1+>8ji?2IS@efe(3($J+AJqH>Xy$_s zFoq^Ih(n=d3=j5jn1n<8G!Ah_UhL+8@*$|4yrBuP@B`GHD!h>J1htzWG7!?57ZUyt zbRqop5Q@Pcs{R6+ztV8nTZ%)x1#12d@Nt9;3}R68mqNvVK*d4Fqk*K3LG672O$Q(` z5Pk(!f58gGV_*Os&;nv{@Im~A-eu6_gZRtC8l;MW!3DDXp1~ff-T@je5LpI>2tMrL z*@#1Y3Do=r&<%3Spa$*2q5dEa@#{FmW%#kXCm4r#B@Xe`{E+Y|K=bbrs5p2*3)Jl( z>LEWQ+-A6ecnl0Lpz;43hxy6^*xl)kL%c!&YCg1~<^!>YVUhsEoeR+1xgM&X!4sko z)^EE6Reu0Y{ST;m1*m#x^~}I22r(a)Zy}~JFvto*+~WaN4@-8sQ1v&^%y)o_KR^?Y z6vQ45g;4dNb}P(I5Zwh8Hvn~>K>|>`7%CotCcXzM-hd{46)L_0P5d2H`~sRd=v+HN z24;pIXyOV&knmA}1u)b-mQZmIH1Qy)cmbMtHdK5Dns^IT`~aHxT&Va9H1TavaRF$) zg*u1fJXG8QP5cE^JONFdQ5fQ{4m5EosQ3mnabu|X4K#5ds5k?(oeXnNDpXtnO}q{& z?tmsf9V(uHCcXhG-hd{45-Pp`P5cp5`~aHxZ>abKG;t9TNI0N(@N}W#3ea{q%wKL$ zaZtMtCI+J8q2dW>>dT?x&~0ZRrC{6-6<>g+emPY90GjxIsQ3dk@#|1=23Up$o6f-S z9xASYCeAJj@vj4#xI9!m0ZrUo6jBZ(K+6GW@xpHV$(R zLe<0i5m0Y2+=7Z9Kr`nP4s*oCu)EV0hjMx*~{{kxh08N}h61%??Bq8B218Tl0wBppqp*~O&;x7T%#Ssu^ zF(l(q-;P6kGt}M<(13@H6C8$`AAx56H5}&r!y&F9h26h)IK;zoh<@f|qCui_Brkil-RDGu>S9OBJ5#Fyg`KY>I1Jq~dxS?un#$044M zL%bA+_!=DIM{tNg#v#rqhuxj>IK)G6h{wx8^5X^Y#%l(KK4?BJl7r+s1z3Rr&37G8 z^%Xr3fjkJsFaxUI0ZsjCsCWgM_%IU6~BNceibVI08RV_)ZU0*h=nkFe?ZkUK*yILvJ4E| z3J`l?<4!PfIjFb+ntCIscm$fb8&o_4O*{%JUV$c_2Nmx?6K{fwUqBO|s(?LS4&o4h zi9`Gc4sjDj?B=K95TAxad@~O5dpN{@;1JhP!tS0}9OB(dko2Yj+Jno$z)%M5FVDuI z{wNOdzecwF5dq2{c3Mx6&B9mB!euG{J7A z33e+@uv=+@-AWVeR+?hB(iFRurr51C#cri3b}P+LtgK2&a|I=ls?w^IVlXGlr^+Zf z6ojLKK%&W2#Z{^CnR#jX4CxukRk;O4nYr=q9?n&nA(aKG#ql9UrK$1BIr+t-EfeYfW#5pIi zxHz>qKDE#@uLR;ds7^?D7-AKJ8HS=1?s+tSz^rhNa&|3@PtMOnH8LnQF$J7AVTPh< zhlH+YRR*Tk;Eeooa2Cd^)fri9aY=f7X+cVST2W#yzSxX%Mp&1WSey!pX^@5SRVis8 z8j?Puf(+sQ#!y#YoRME1oSB}NngS19kOR__<4f}jO5%$Q8PN2AH27qeIAQCnHoL zy8wq0LIy$HiZv-j`9}GnyAs0|TnfnZ?lTffjxsUxOs8N~=mC zj>c;Q4u8X)i)OlWlrzYQh_nbb926_b`MCv&MVMs(OdK2wSVPb!1a2P|^I%TIs?{B# z6-^$N&7s!A6Fk(0H2)${HaABNBbXq}PN-s#_o{L*OSc>p-B499y*S*HQ-Z@OW+;Y1 z-Did^WU6wo6}2Eia2TUFx(cJPhMH`O%{o)8)}>?mJRLuNy@h*uaiB*}wsU=mJ zo_QsyMR|#!h%HVnD)CLMfcuJconTiJt1TxpFPmh$z?w+1#wjxok$Z`CTS#UB+-acV zKRr3Vpr8O&(L)2?2wT7#!SzAo8LAkq+=Jvh%wi8B4mSfwmU51A_Ag37cnfM(ab_MU z4x!DR@~V{L^n4SPq>Nn!I6U#10ZVzrhF?-*PGVkiY7pEbBx?k_i9}sKH%iQyJrH6eTDImF9t) zq2SN}TMHGyRD_h;!D`^?9IOpKZeVH&mjI>9(!7Gio7q$3RQ;*F3U}DS#E;MauZyZ8{@Lv7?A>Y&L$sDNJkAYq`NPlzmmRn~Xoyx2BkaKC zb3J5PT)xKTXtB(y+I zCE(8NqSS(_l&TWANpR!A!`Fxa#cBgIOx#M5Ivl75pd}`dU%>{W+Xt(#pgl=&Y9i1+ zs7fgZRer%$r6u`Qr2$CEtSSXz94y$tCL-D;IiSH6m>kr}Fip^gDX0!hEQl{CfS3&8 zdisUn7!m_FcEE-r>QjU>FhT)l6}Z_2@&!13~2#D8bpo-1*v%{P_e2Ehz_ttE~!bS=~bB_MTyC&@g-mq z9PGFxVg5z44l;V}8i*Rp1Ts@`c4k3vL1J=hF(R#k?Il4U!m$K21*I03=9C~xCSojd zOU%qc^$|ETgF`;bxhjc7(=tH=K=5=9b^zEs*P^0$@Fw5z%#w`!(vskk#N=#9jKG2$ ztQg`$aBcx*U)Ri%jMO4T4GdO8$UyY)LNg6(M4+j$KuSJf>)dkk6H7qZ43zX;@=KFI z^NJ`g2P*@~!c;-(9>|PSae6+wiD0G3L(Yg|1>sAuBD8#qa6hQ%1eK)dMq_a-I0J%g zgUn$-R3HKh?09gT=O!W-9;gkE;{2i#r%EK-P^FPtC14+*%I1|Oq38u$33dm#>zw0O zl$h+BT9T2UQXF5DUz(Q!31v`a4|Zo!W?l(I2sU_DUXWN+f?7mFgBHcnWS{(Gw2XtPETFVF!#Oc02dtN%YS-L? zl1e1y(Ai0Z6W}=vo}1ymhgQ7U)PjQ+Ng+nCAbbl}1quN~V-hX|wE>BbVGy?9MQfsi z3^&ALI(laTtPYV~;I^W75kTs&RZE`!Rhb@%c`2Zg2~dF(pAi5mk+6;*A**$Bi7zfm z$uC8;>OeUVGz5p-yaLBGvNqVjcyWArVqOWTq)AN5NrgB7;R{6UAnS!V&poxoIX|x? zHLs)?5j;d{Kol1U4d7ZAbVvgs>)l-9^9xe*+%j`gu_;9|2b_=)HlX+c+-ipS7d*Fy zrGCIvADo(->70{aoSFjB2~XBIEJ>{>iO)a^DD)%=EhxacgDZ^UGvH^i}Le8 z2U5hRrl|}JIrFkHQp8n8S0dc@fgp3fqd_o#wHbyzabwg}K7Jw;&tW1J#%VPj7 z&jc+M3xEhSfX(8Ym4DzX9dHgwmkp-k=*H{(0aP8YT|gZ?*(Y z9JWvF3Ys`<9~W%j7RY)nBzq&F`>H_ZgU%FzMiT?*ya5m!Bn}Fy2~c&*pfpI_2&4dt z*CUA=GcdrnA%B62gX}d!vR4SYKo4XNvc2j^;vjoHp!#i~;vjQCXQ%81F&G#aQjo-v z&98)tqnqD~Bn~ov2b8}BN`s6=Hs>5v9ApkiJ!~JE40OL0x_T?9I7mIRzk-p(LFQyY z&CP|1gUmtp*Bm5qWcO@@ildvq7fBps{tqbs3zP<#k8BPfbiWnI9FTeisJa}eIJ){K zs5ngh0;u}=NaD!pVFi*nXbUXJ4p34#4HXBO58CPqOaGwr06_BS;(wv)VfJc3_gSex zX>|22NaCP#)nVqRAc-T}TM8A2nLh){p8}=P&7X}V4!U{?Rz7S;5(ixu1+(`Gk~p%x zPod&4dj+8Trg)$gGUckU7Zp z#VRE6Af$5a8j?72Ij;ykUjk;n2bAvvrD5U?P(EniIkI~;K*hH}X_)#KP`&{4+zF67 zLy_E54;6>0-vH%rfzmMX2T=YOC=D_P+5Jq=eGnjV&>1YS@YF*RM-Crbs5s301SmfP zO2fowK>473+sOXqfbLJ=fzmMb4p6=el!l2HK=~z58YaF1%7^WP0J%R3DSYgq`vqX? z3!wZGC=C-|0OfCi(jaq?{d)*WJQm4(&^~66zd-7d!xOYG86*xfKLNUKJ_Sm{#AiVH zbD%U#`~;ML21>)kVe8s8pzG2>_QoT*2ef||+1?XSb!VV7%$y%kJ`eP~4v;y>?w3Lm zPeL*uwC@&VK1e-s_=G~$!_2RM@@t?pOne2D{}D>V#3i5?A;~~#n0Nq`9|EOe;tf!K z3zUY5?|||jKxvRWQ;^*M1xY*=Nt_jW@B_#kpQ`0olgD@E0l$QV+s1AV~%W26N~Er!e(Dp!vZGDh^VM9KW78#8aT+ zFmoiJ{4OXB5=Rct8A#&D{#}Sed^1!W-90y;;^^i-LlQ?e|2+)mC=F5z!Z7u-pyDv~KcMB~Ca5?_Epj;Dg^I(}3&=v^kq1hH)Ppe0 zd=aQPOnm^9?*pYlYC#yLJ_ITbQ{MpP*Fb5IS`db*Z-I)#)E|KI_dscoS`db*zX%nF zsfS$@_y;NuQVYT`^(@efonY!g`z1j>HbfH-fbxByG{_7PhM5xq6^EGv+TRK?rv)kw zQVYT`^)sR3F!d*({3B2rq!xr>>d!#MVd^752Z=H;F#Lv!gVZ9&qb&4FG?;n^DBlK3 zgVcjC%zO{1I81#7lwSg+L25x5rhYn99H#yRlz#+DgVcgBO#Kt8OYJX}4re6U9ohs9S2R2Hp^U=g%;kgAWj&9B=s5s0V3#d8&(Zpf? zGK8Kd22&pa<;Os2nD`1Pe+`s|iNApI-#}@YxCE$C#=yW}2c==+2~d6tl!l2I0zs5GV~3Z-DZ7)j+uw zG0tfKN844l1`lK>2T=G|2rWNbXkx4JIOuqdGwOHc%Q} zy$e(vhM(Ac-TV6Gt54xk%z5^KU@;SD-Yyd+tERLH2^w zb7(`todrsxtG9xR!_-GW`5{mmU40Bx9Hzbl%5Q2r|G`jjHP;r=g z0q8}6JWv{4y&Y5>ral0AZeTc69HhP)Dc+Nz;xP3up!_x{4HMr1#9Jc>YRboDY&ahUoHC_e>C zqpNR65(k~p4IBSif+UXYo-Ih?AhYg(9L2!Ea0W>nS^X8LILti^`Vja3fr^97Kvpje zm4~ShfbxByG`ji-s5ngh1*o}8(ZpXs`KO^Y$Q%%U19krsG;x@}ctE$FLg#Ui-6?}4 z4l;)aL@+Qgm>`KGtG9uQ!`ztx<)=VtkalGC%}{Ze`W;aI7ATFb{s2@QrrrX|=Y~7ohwzP#UBRgkkDmK*eF| zHK3CTDo`4v7KCByb)e!f^%+op3X}$^1!0)_9H=-<{R}973X}$^1!0)_IZ$z!`WsOG z6(|i-3&Jq1GUQVYT`^-FMwAApL(%vk_EU-coHxCB&O1WJR<24PtGl!1!F%<+KoU7$2bEeONZ z`#{BE>MNl95-1H)3&JqU@|QqqkXjIi&6jV0io?|JfF7KG2`Ua!+k{jv%RuE}>K&kb z8z>D@55h3_ctFKr>MNl95-1H)3&JqTo{Fmp64A^GSRn)n8&xC)d8 zX$N6g`q6=k!_0|*@B90qVzrCTp?OYdlbKn0qXsd=n@Q(vEC?FjO3-z5~i{fzs&eCqTtv>N%kNyHFY? zt^k@uWnf@nhSDH&T9DHTk~l~X<}VjCaT(}3iAbn8%=`u@zXnQ!%m87S`YBLxnEC@y z{vId|QVYT`^*5m6F!cg9ko3a?r9o;z7^YqXDh^X00Ok8YX^>hFhN%yMio?`5K>0OL z8l)D4Vd`6;;xP3Gp!_{h8l)D4Vd~#Q#X;(k+pB+(#F6_cY@kVZXgPx{E`}ryYFc?f z`7TfzWG8ZdPel?3nFE`@E=Ce>LyGr$s5r=-AoEv1`MaPrNF3SyCy>NJ=7a19#mq$< z;#_thS)~3xl&=G&LHa=$7H$?$ageXF^K6iFP}o$GLj z??Vy?+4}*?e*>jKb|QzfJZKOQ8ehov>LQ6F+iQkH+zm+_WN!tOUjn5;_9ExgxlnPC ze?jUGK>2&1G)O%N!@}nTR2-)M2bBK>N`usbFigD)Xb}b$e;FZ(Bm2u5hqyPAILMt9 zP<{!N2HA-mp39-)Aa^2%=T;jwFt3 zuK^Bm2PAQjy%|t`3Y12-cMg&`NX`dZuI_}2gO+b~A?4FkP;rnuyCGQ$OkP702iYqC zTI9mOz;G8T4l)~bL?Uec$rB`T&=H0(@z+S=ptDv%YfnH}32Gk5-hQx+5F!LB4l;it zk~>qO;vn_Vt_fH}4^$kaegcyExlnO*^>=ZID>{RXgRhg!fbwggG{_uKIIMv3k3nge z_ywrB50S*7N7;c5W^@5lVDq6z(18Uck;I{08L)T>R2CqnlF$6^EI#0?J;pQ!n5S2{#@njjmn~Dh^X0 z0Sz}hH1Pr`KL<*K%t21KEl_coIUAt-HBcH|{Y9uaOnn73zMr9q7eEgr{|FUFH%A&O z4-y9z;jsLxi6o93J~>F@$nIYX6^FU!29&=ZN`uTtR=*!fd^%G8y@Di;Z0{c=ab)!| z(DS-M<{v{crxGfTUhZ{4#X;^wF88KF#bM^a+BtiW#F6d2gCq{p16vRG7Ag)hA5?BA zfEMd9Ffe?9ii6aGa4bjxsGSd$2Z`N5a=#H&9Hb1noJ@g=gVcjC=$;x-3T=dnqx*Lf zR2*auvVZ47#X)9(?1lMvDO4P!{yxZHC|-*s4q8jj2=W{Q1H)D%aZtSg6=t{t6$hFB z2+3d1aEP;j7B52kJD@e{uyIaNs5rJSWG9RQKmTq;B#GfJA8wC{ynS&gj zE0M%O=3jvFuRv*#dXTsTXb~j?1A`2dhKUD2`5{mmCf)$$w?Ju__y#C{3zUY5KY;R| zKxvq`fG;EhM4&WG+yTl@g3=&y*d0_L9Y>+!pzwK(6b>?eAX&&d9FUv{blqeyR2*au z$iFL~{A*AeCjJA;R{|~WgtqHI>OG+RS||-N8#L7ii8O7s#E+{xU}r2g&I`!+#EvIC4Mq5L6swK61P9Ig&VXJMBM`IC6VT z2zpT=$Q)4p2ukZ97fK_EBb#H4B#vxO2~-^9b`Um!y1x@D4l*Cvol}v-L3VzC^4~yd zkQpEhGshORI2f7^k1goG)O%N z!@~0pR2-&WA{ydf5hx8(3&Jq>T96lF!ej)Ao0EgDh^VMoR986#bN3lpy~2Gns@_LoCj(i zNIh~qY9fgv$72|hI4JyAK+P?Iii6w(!Z7!5!67aST8s`YA3)|*K+6$7BynVWtC7UP z>Y?UNfr^9dL=K0mP;rpIKhVu8!8SnCj-hig3=%}ki)?j zDh^W*bAJj{9HbtEVfJR@5br?~hxvCIR2*i00n}gHpyD92L3t9Ek66- z;vhL#I6)Z8e}#I!_0pO6^EJ60a{cGYR^Dvn79Fy z9|WaA;?N~EU=LM7#X)9+FzEhPkVFfTIH>>r7bM8Q!0-Y|9Jycc87dAkACx{7pci_p zKxvqG0+gQurD5U=p!_9J8Ycb%%6|i;Vd4hRL3$G?4HHj*^2?z#One5EKL<*~#7{u^ z_n|aQoB=fG4jONP(lBuYDBm4Q!^AV7{2V9^6JG)4uYuAq@efe`7bp!ASICA0v^kW9 ziAO;BF;E&N-T~#Whti-p1YsTMe#4(oahQ6A9EkZUP#Pv40Of~3X_$Bel-~lSVd5L0 z{BuwmWG4ulK<#A&Ej~sn_cWk<9ViVmCjiP1fzmMX1}MJ;O2fogK>3HEG{{cS5C~|l z0E90hiGOEcV1SJq+(!}z4JpCu!M8}_AhT?s?pJ|cR0R?PVHc>l3z9hK?r&K6kb^_K z5h@OMKa{@&N`uS>VVL=QpyDv~FQEJNN&Gix-W@E; zz#xkx4$7wjP;(8?#5JJePH5sDQ1MVCapdu_G$e75`3Io<$xs^PcI5JNA(A*q4(6|~ zP;po|XcRy^@E{O#6zIsI#6+#`5sWd3zP<#0m3l%_&~*B z>NBAHJ}3Qm8n{4A7V^Ed8&Aii6aH z;{5@Xza2`0)PwLesJ+M0#C@RqneU*9>p;byK*eF^GZaC>A zd>beYQVYU7Q1g9oh^M28pMko+2T2^XR0I|dbD`oedrv_5N1!ywPGt38aEJ>PL;MFa z2f3Z8jwFuUUNt}x2Q3K%#R13!J0x+C*aWD3eo%3cdyw;E4U#yrJ10WL(cLo_NgQPU z1t|Xvlm?lPY|cBVILI83`X5mDaDo=!L(4H_e+eOpvoa#iCrN>dqnlp|6^EI>0Lq^O zrP0;zf{Me`H$dHY4M`l?J@=8sK}(!KegK8D3}_KKv^|XMUn{6M$b95@^hXj$Ha`MM z9627-kibF=ctnxJnUTb0q2eI(*+CYA0uyvz1XLVk4hX~CUj!8gsRt=v0d+?g zk~p$ECnJd?$JaKfILK@e?tzBS6&&JEq2e%m1wfkvK<#ZP4Kf3SVdiL{iO+$WAA%;n z1}Z)iDh@OM0+jy%O2fnppnRSRNI=2FEuj2TC=C-|0p-_2X^h`^4@n$k{yeDpOVGssK*bM1#X;^w_U~mR zagcw1K*Q@Hns@`0{|QQi%mJy_sDgx}4wQz82SE8|P#WY$5VnKHOBkBC8C1LkO&k^u z)kxyV;n0R84l*AW4r`&}Aon2q_X<=Tq!xL+`V&+fT|GN!a1cxRFN!1%at|mhKp`QA zB#xZl3z5W;-BXJs4l-i_l)nc`gW5lQjEHl+PC~^&?nLe{v($iWhs=i}`%4Kb4pNV7 zuQ`%9vO8Uo#F72wha`@yej$=LviWO~#6kYL0Oh}d(&+yB2^9yq6WL!Tpv^+i`U@0i zu<_w2s5nSHvc2s{;vjn`K+T;<_66xFcyn=Diuq#oJ7nn>axdkdia94L)$&PJ#> zx;cB1#6jk~fb!o!X^?u5xCHcmWosyn?k^9hI7mIRzgnQ;AoqZR9Okd7P;roYWPiOw z5(nA40$T3;K@+cl=3CxINVtK_0jUpw^39<%$X?JHfiQc0ki!jC=GHW2*ccY3MvkB=LKlz?;=zj zq!wg8Y<%Mek~l~XR_}j76Ni}}){Gjz7NA7Lz`!sONgUZf=HNgUbz)=1(Y_ZL9T|g2?4!37W;-GMoXorNm2$Tl71%zSl zF~K433l)dCa{`o~1EoP`fH2IQ9vtEupyDudUO@Rzpftz~5Qdra1}Y9yF9BL~%)r1P z0;NG}K^Ue!5GoE+KLN_`fzlwgAPiGK1u70xe*wxr1EoP~K^Ug~3RE1XUZN8ko=_U3 z7KCByWuW3P^%|hTAqED95U4mvEeONZ&w`4>)F*%{Jq8Ab6=>od(0Y6~k~ngDxPc^& zoE}~wiG#`?P?`Yw;1iNKNUQ)F?kZ6Cg4_tgFn8KQ#o_LR@?)ShNG%A%)TcnjVd_^v z`AeWQNG%A%)Ng=_!_-?q-E$sI`~#H#210AZLpU!dYJb7nyEvoy3khKWZ&{qKw} z4$VJFXyP2ueBFp9{sUTGPel_~04<_qU|^U76$iNy6#lUCe=(9cNDfy1UxA9l-1!5_ zzXzp3YC#y*zf*zQ15@t-<+`k1$9HgfQdY<4> zs5r=c19dL4RmJ5hQK_wNC^| z9J#!ThKhsCN6r^DNa7$l8EAO+Ld8M$B8TTpByo_vC!qW#P#R>0BGS0l5hQWs^%x(J z#F5?e9Z4Kn{XZme~&|-I_aEO4alZJ|e+=FbsI+8fDIW|ynkbgn`DuD8xp)|TV z#W=*LAc=$Yz`}DAR2*bJa(Es_5(nAa0CoRGByr^W1UlG{_7K_n21y*G=L_`Q)n+7dWOKTZ#1)XtnTRBg zZ2lG`apd^AjV2DO2mc_6J0h7c0^RopDz`yL3c=FPX^;T49swO`029BBBn~=404DAV zJr^7#4ccN36aS1Pj%*GyD6vA#M>eMnNgUZ68&G8cRgY|r50W^tIdRbQqCxHfZS{e< zXBza}W{@~&$v;f|9dx}9NF1~z945{NO)u!;QqXhJK;odKC@}SLNaCO+8!+*CIK=Pa z5O0N^QwlO4*8*zxA$02?Wdj280Iik>W>d?hqpy$7V#6e3cVE$TyL!1SA zo*TOQTIe}oAaP`WodP93X#9ev8er!CLJ|iJ8N_% z#F5PjLJ~(V2g;GeKO>pH8%g{Nl6VRzlSAX{E0TBvk~p%zHX(_Fq8gU(ilFNZLGDLZ zzXDV!L(K;jnK1Rf(Dh0n^*@p9t%0s10*NE1!yY7YWb@A;i6i@$1G;Vp-JD}c;>hNx zLD#E*)PpWtfw{8|hxh>`ab$PCK@w*|YR|+#*Drv~XF(Eog02?;i6gs*1v-C@F5ZG9 zj%;b#ta>g z2e}_PU0EZEBikE~B+i3mZ#R-SvibXv#Ceg_zk`mSf$T*NPdVs#IlA}{=(shycmZ_$ z6N5Yd<~K~vb}qd#F6cNj3ka6 z{>IR88<0DZ#UCMwgQ6N1zqZhR6-d1_QuxnB5=Sm)K`D9 zJ0O_@>D5ElfkB(tU?J$WJfI?#0oud{i$jO)z~ay*GgusY?EqLD+B61>L!0wpaZpnl z)OQ6*fa(+w4eINIjyi^kLz}B$^~mFs(B>6b9C~ykNIL_xc>)%PHfh1)pf)Xt0Wu$Y zL=%Y104+Yj>Y+ygfyJTI1z>S#6BR5DyUz_|4)kaYu=olv2?;mo(GFmd4PX)?4r)q6 zyTc4Ski15t;?O1xSUdnE05u=l1OSUiAc=#H+J$l%5}*ta z1=>0fi?0lj0Ms1NR%)1d0g^aqODjwqc8?!O8q@@ai8p`*pyq&@oG|eYByrFZdzknH zBymua3MRe)NgUdQ0s9MfPasGdy7Ub!z5yfvwHMk{0gE3%5{FjZVDSq`;?OBBu=oQc zaS(F_G!uUSaiHddm@}Z~$^HOwpyJRb0N5Pxz&TVLUYdkKg2?6-eSBCd^+OKpZ4+3ISHnfh3L` zzXC|&AR}SsDjVE8dwBEtUyu^ZEArfHXw;Zn>=9g14!bq zx(_4)yH^ur{w$CH6yHEn54-aeB=rDEd_G73hCvM+XnKIP4M0+``#C}8BdgayQV$(U z1Sw~L-Q$U_J^)EQ^okF#`UoU(Wb-SK#GzN6fYmo3i6g6DfFuqb@&v12fh3Ns{sfXZ zbm$bU{sNLXvic85;?OIA!0KW5ZKC^E0y-WJ5{F)$1XizrB#vyp1Cltb%?8rofh3Ns z9(F$`$b4v(3{uWefJ6NRBys3aG+6x%BynW(VfT)L%!gjF16F?khx!Ld;?S$o!0KNh zi6fiO0UiGbnGe0%4Xj=ONgP?d0g^a$s2;4|0!bWMeFTy?bV>%SJ^@J_S$zYNIIJxV z($IkMtOPLzf1E)!#r8M^+EJ9~Bfn(51{^^$gH?5Rf?X zydejY_$G)-Fe!i}4jL*3=>th9Ac-TJqk$y85u^}`4Uoh)L)W!|q#TgMkn(N9NC-~NaCwO z3ZeJ|lK4&}_b@;^kRbOXo5O)5z6xpvh!Q{&--Tq30+KkgIk5Y0LFTUn834rwNa}YZ znd5*Yj%PaX z5H$fwd>@iI3y{Q-%~^pYz7%8t6mLKh-;ZR@0VHu`b50qmp!frl_(3H1FhJ*9LGg=h4hNF>BB&W43U+TWNc|xsa}!Y2{JG+oInyk1#RDf zq%R?4=)62g9F#U6LiGzE zi6fh%fFzD=js}uAvN^DOp<(7TLDe}xX^=RwIUY#j$mRr~i7P?*2~Zkj4s!TpAc8P$npt874qEAoW+kA`oH*lK5F9dlw*yUqTXJfh2yF zfq?O#2+Jx zUqBLniX{F3NgOuz2$Ft*Bt8?V9Q%MI4mw8^u zBo1Ag40ezQk~s2s1?)a{kQ?8DRYHggB=yMc_8CaxpsqG-%z6QmIC6Sefg}!E4+$}y zfnfuZI4CS(_8mYH2f4`uI*9uKNgUby7f9mB=6paChndR&?QDR|2H_XbL0k?b@oz9k zGB7X*Ac=#_hq*%mNgQO(3g|qy2AcQTICN0W0!{n{bpG1`P5c9NP#JcQJ;+WF zE`SayMH&nJ<7W4$5!P!FvNFab)u?ki(-FX5@96A*bcG3kTaZotG%E1Rn;>hN_KoSS3hvokdXyUMN zXMhfNfc%PV4hNDr$Q+pe1<=G{?odDy=LZ=Ec0B`w29h|)9GL$N(8OWxa6l3lL^3A; zNgTO+EOE)xSUzhjzKZ z8a^P2iy`^z2a>ojk~jl&&h$2TR=#3w@aD4>bM z)N7!LKZL5cKoS>+ih-QufFurzUsybOpoxEk`ZEAY95hD>Gb#Z|963B2kiWMEK05{FLpfn^Mk#F4`-07)FyCje=PKoUnb zCj*Cg1rG5JByr^QJON1@IX%xn5=TzY3y{Q-)AI@>aZq}Oh1&)+@j_5!GB7agKof_l zKY%8_5vu+Ik~ngDzJVmJgcSY{ki^xH&hvSJB#xY(e;|n?r%wjxU^mEU*ql2kUO14% zLHh+jVjwJlBo3Q11c@ski6fWW8c5=>wE-aY21w$_?NSFMab$Bmkihu}14&#T$(#d7;vo0H{C@&X9Ok|oNa7|)<~%?Ww?Ptrfg}#v z?*nt^2PAQjy)bt(Kqp;5M%aP~s0INfaeE|j2_$jQJ`|{O1_dN>CnWU-NaD^&;tYDl zmANH}Nep_$B}EWA1I8*!%}LZNNv$Yh&;v755=#;p^pc8;8T5+sK^%}C2EDxel2ko+ zzfj%clEma}2EF9`+}zZ>5~xIaUa4L|QGP*cQ3+^W8O)vJ(xACekn^F_G;m`;YlT1@ zCge?c3=FX0b&wPogXR`NRVz$ASdf8%K>@UAn}LDh2DIM-8ukF$18W1o<^W-9TtIah zOfQJ`fZFQ-4QG%T2*dP)*dPpABZkfXAJBy~H$aD*GBALL>p*tE^uz22wU0nzAUTkE zFx-JWm<|(!j^iM489>*4g8YSC$ARQw`h7r>AOR?babYxQ`vHs%RRX52AWsT_MIZ#a zTF^BTATi{+7o-xVAGwVN5(lY8ra{NRgQikIc?Tp8!w;bLqnir~E0`J(4Kfd1FGySf zIyq7SoeT%L161$A^uxj*G{%J<_8|Qo(81+N(D(z1fiTEE5DmkiY6YAA3$+lH(C#rz NIe48NoWsDt008PbgHHee literal 0 HcmV?d00001 diff --git a/input/day8.txt b/input/day8.txt new file mode 100644 index 0000000..2e587cf --- /dev/null +++ b/input/day8.txt @@ -0,0 +1,1000 @@ +83023,97914,59845 +95221,6604,47587 +15200,13848,533 +91106,47235,95124 +91396,58746,56994 +72070,33359,10785 +13733,43410,23707 +84853,78378,68689 +32718,46986,56596 +96972,42634,87849 +75321,85448,3806 +85644,27374,92127 +42658,85123,55506 +95419,51177,82050 +93183,89429,64168 +20111,58516,78238 +84347,94979,18981 +85228,50028,61792 +37408,58558,92215 +78135,48786,84378 +91444,6758,47814 +72353,96943,99110 +29125,99746,96294 +82591,76381,50973 +40594,57719,48923 +68457,13532,54551 +41623,1214,41146 +5329,66685,52253 +38441,18886,17137 +51198,78425,24757 +57954,19943,5193 +25571,59698,26460 +35041,16302,43934 +93554,45583,10885 +72830,18399,22577 +49658,55564,76672 +55761,35924,277 +8145,69129,83753 +46464,73362,66428 +21044,23155,12880 +30656,26927,92819 +49127,56156,38158 +29611,28784,15694 +8446,8675,81587 +82421,72930,36434 +55032,80661,58980 +60996,97834,30356 +97137,68358,96661 +61250,52463,90497 +97887,95388,97794 +42671,60596,54375 +44662,31390,19230 +22670,94138,64282 +78786,54649,54831 +76084,6111,23513 +36141,9518,15148 +79576,75966,49301 +9096,77126,18955 +65720,38873,88418 +66473,40148,55289 +4466,66547,98094 +75685,11147,71479 +90411,97753,70313 +34746,35259,80756 +55909,45524,52667 +73795,29539,58999 +643,12216,56158 +71,12740,76121 +83991,25426,68085 +22625,51838,79017 +17653,68339,57575 +75011,86938,27225 +73011,73334,62395 +56785,28814,60336 +4459,52452,8794 +21966,66681,64410 +82554,61793,11432 +15928,99706,10305 +16319,39233,55476 +35971,50755,40035 +87292,69839,52900 +69828,53645,12739 +58064,55186,91326 +2959,70223,73383 +14635,79537,48547 +6016,61955,5471 +16200,68036,71562 +91483,24715,33986 +71805,36020,4935 +40550,51905,24094 +56157,73283,71388 +86389,15276,72777 +10049,41822,74235 +63361,30062,39584 +89330,95990,49284 +90041,32152,51147 +24345,63613,47251 +791,36312,30720 +4010,28661,15585 +78074,3095,42165 +49312,32745,35219 +27671,79745,47901 +599,44177,29250 +96722,11018,72047 +13536,4055,87466 +26862,23317,41027 +79892,70552,43134 +64497,12037,49066 +19287,990,54327 +18111,4450,30397 +57219,85320,70045 +96321,12566,61949 +47149,62361,23123 +32232,98647,3246 +41996,80504,38622 +99339,32036,70498 +56042,27237,97252 +17642,8588,68927 +57229,92291,75905 +9911,94307,12471 +80246,51936,70519 +40612,34072,19307 +25553,65907,79644 +6375,62624,97129 +73620,66653,60323 +89172,1394,26421 +15015,98109,935 +64684,90267,86515 +35892,10464,92344 +54200,92912,92669 +89679,34702,30898 +39001,80455,99198 +80994,61551,87120 +35229,68596,17914 +16568,95318,93777 +78916,86597,31661 +88234,25589,45446 +78081,46748,98007 +34046,4193,73932 +13371,88196,32622 +64990,97591,98053 +76215,57477,47998 +28767,55034,12766 +80197,22480,93615 +56689,51960,7344 +67303,82415,95110 +13066,66494,81388 +93114,59516,22466 +64331,89460,40123 +95123,91027,98452 +55429,57786,79557 +65856,75041,37248 +80746,18552,74090 +28112,7107,78239 +29624,12178,5891 +49043,94592,78960 +79172,28955,34157 +78632,28974,23322 +98203,99482,49152 +39547,72632,67955 +87616,26784,53122 +29139,59779,55356 +91699,2023,37144 +47017,97148,78726 +51629,9727,13675 +76078,17364,66657 +42600,66359,55888 +17480,13345,40751 +29450,26042,2510 +62038,9516,89292 +63316,74573,85897 +31328,77479,80680 +15781,58688,13309 +98650,14219,60385 +48519,62750,48659 +91608,45047,48465 +53333,23580,92775 +34111,65669,4854 +36335,84293,80527 +69469,76269,42260 +50494,54162,75357 +91395,46417,86448 +80596,24814,54060 +65295,89470,93825 +75529,40579,88982 +77921,40764,72220 +91448,81643,10902 +7079,91202,57223 +75152,95331,581 +30279,42541,98395 +66535,62047,3556 +39610,66038,72948 +61621,65308,69300 +24716,95103,17739 +5548,72258,24988 +49139,72448,51160 +6989,6405,73705 +25533,97824,93002 +21277,36478,29976 +25357,91132,29886 +66274,77847,11542 +9636,51894,88277 +98234,27696,76351 +35158,34074,45211 +49212,12123,45416 +50898,60661,2299 +21457,16882,79783 +87281,95415,83384 +60234,28773,91412 +57314,3452,4799 +92808,64794,35232 +12101,6250,32179 +1470,8832,50734 +66135,85294,40526 +58054,32178,523 +92646,15554,77904 +68019,46451,45261 +36344,32645,84650 +96432,64756,12320 +29257,27831,2244 +78440,77331,88696 +57296,72372,89097 +35464,94343,47746 +36437,77375,71167 +57391,24280,56110 +70456,49233,90307 +80459,66390,2646 +84006,50489,7999 +88454,40040,80174 +85766,17954,35536 +22431,66761,12431 +49956,94984,40177 +61287,250,24537 +52926,88129,74877 +65033,40725,37191 +36600,93997,70277 +62037,55742,59394 +12937,12395,99641 +94377,18859,98526 +68395,64761,66602 +74285,86567,85731 +28790,35822,41656 +82117,36347,31838 +85627,57640,97476 +30117,70309,40411 +52663,73164,81824 +37596,32209,80752 +36202,34452,50861 +49001,36939,30593 +86891,42347,16406 +7984,76299,47269 +53728,54892,21628 +33405,1202,32285 +98259,60245,54549 +13624,6943,45145 +66665,75675,1930 +22969,53199,82218 +40618,39163,46679 +19963,88260,19149 +75415,97620,44413 +98031,27474,56095 +74789,9161,88259 +6820,60419,59057 +44091,83231,57076 +33628,31552,69448 +72333,18138,92689 +42918,59983,85663 +5511,12003,35640 +38053,85167,43219 +80815,24986,57938 +99739,12507,33474 +63325,66435,2204 +27960,31592,26344 +72135,33627,58632 +8405,31610,29001 +77760,21194,35387 +42765,30621,67434 +6492,10882,15610 +39378,13677,28454 +42063,86532,89365 +44099,18543,30576 +16461,68201,32259 +53882,65452,58807 +38572,79476,79077 +76034,31164,83419 +47027,56721,37638 +72652,93268,12399 +16509,29848,83287 +34954,80832,74615 +6400,53090,53708 +40616,72241,98934 +60630,89224,92210 +55937,74036,11131 +72064,87336,63567 +41744,85887,17561 +40423,88861,13318 +18389,61139,41496 +19271,56771,22178 +67043,20591,93983 +5300,75446,88271 +96023,50077,19302 +62369,65678,35560 +38961,33807,37861 +51414,52797,61296 +74973,59475,31605 +20079,49359,71043 +99409,13531,29202 +51242,33019,49539 +74343,68830,21949 +85504,63879,24124 +26772,62589,90511 +46597,85574,79140 +72586,71630,58524 +31891,16574,98317 +33359,82499,56197 +39610,98941,76086 +53148,96207,9295 +51777,54763,86878 +31465,85806,10369 +22285,92123,2760 +77336,15489,440 +76033,35059,30115 +38949,25045,37767 +3454,35982,53196 +769,74648,88913 +70761,37747,52488 +18625,12825,65126 +79423,44079,10993 +12341,71251,58927 +64150,30665,19861 +27194,97743,67771 +50630,45103,11740 +67678,89004,14157 +17068,96419,51722 +55167,11054,70600 +77745,52771,69811 +49784,19504,39169 +54764,23077,45457 +8768,70474,86581 +55547,51829,39755 +41086,78904,25106 +11786,90214,31709 +56162,10884,48347 +37408,41181,2859 +67524,3358,24701 +76919,13759,60470 +94876,52182,99012 +85491,36455,46528 +46686,70396,22251 +33177,9677,88029 +4982,37705,2700 +36949,77207,39705 +69151,67567,75771 +72779,99680,83629 +16604,11663,9985 +42059,99589,82918 +82252,5948,35054 +86653,73740,32181 +22532,10998,1055 +40858,88066,12774 +55985,38536,33223 +19775,92665,73522 +12163,39631,23317 +37380,72940,83500 +55790,92654,36287 +90010,18224,79238 +45397,65402,19883 +8939,80085,2945 +50909,4547,59505 +60938,93419,32337 +51499,30491,1102 +48354,630,17252 +60819,63591,88688 +65087,17444,92194 +53703,23007,69361 +92826,39386,72187 +7233,35348,95004 +99521,10436,13858 +34610,3688,55066 +39,28492,14137 +53076,56691,93001 +71698,95384,55496 +67308,79765,31959 +12649,87125,69336 +90967,44366,51366 +797,26924,76647 +13685,35458,37078 +21594,47933,74812 +96560,59424,35863 +73650,19290,70714 +3665,62059,44503 +28777,7947,52272 +1937,45360,3770 +90132,3831,23437 +49835,31998,13679 +94876,46836,70065 +22333,45735,12259 +90060,26851,72047 +62263,61806,19368 +79966,62230,36244 +98076,88252,81360 +42022,63691,2212 +22708,44719,49036 +76781,22876,95221 +90823,44321,20420 +57930,18330,48549 +69029,70389,38443 +49905,31474,53964 +8079,76138,89114 +19648,28719,13355 +65637,7275,82173 +21865,14287,62877 +67677,24288,97067 +14072,47021,33478 +79367,2829,63365 +49290,31778,98368 +60200,67151,25350 +48916,86997,70408 +305,62394,67590 +61550,99717,94728 +14223,65580,77769 +95981,65362,79093 +784,34215,87276 +60024,62949,13541 +19630,50887,86968 +94574,33016,99610 +92983,44345,53607 +10392,12260,10076 +56713,97298,30987 +62123,29824,77496 +55055,60341,6939 +81974,40112,3326 +13207,59499,79183 +49080,73021,35357 +49487,89942,99789 +68381,3070,4810 +33276,37114,24996 +42359,35375,14799 +55909,43807,19569 +50944,80993,40525 +28603,28387,68085 +47346,1776,75069 +7826,67550,83739 +71246,77232,70209 +24305,49469,44413 +48883,39865,56895 +30991,15543,46085 +59126,95195,82322 +5254,60504,32865 +82300,45298,97681 +76341,39398,18352 +7895,8541,15855 +50600,59097,77445 +7008,50117,60567 +66605,69779,51719 +6268,41783,29718 +86355,71922,89816 +17381,24033,25037 +750,7769,93295 +75903,20899,35251 +74087,9610,46226 +3553,74772,83404 +310,17925,76045 +41127,88410,10248 +75212,4127,72488 +72666,22613,14994 +26017,40268,69040 +81915,1821,86481 +58267,44514,50803 +98324,4181,30213 +29868,53634,97472 +18520,18986,14161 +34972,80854,61390 +1279,56024,18856 +48423,23379,88173 +14276,88239,53235 +39830,9979,42285 +1306,54593,22075 +47453,27530,42113 +97353,97502,74450 +88493,63921,62664 +71993,97442,13974 +29389,56875,27043 +19968,36426,4030 +28944,35020,32630 +84682,12927,7193 +45135,35628,3674 +39536,3206,50806 +14629,23524,37924 +32725,80382,34969 +65844,74444,90961 +7124,56246,79242 +93744,35517,87256 +74717,39097,49879 +71820,90427,69622 +38464,6640,56511 +98639,83915,87188 +47579,7056,74001 +81879,57965,58220 +67878,55346,6779 +94401,13529,32351 +53715,25638,35751 +52749,67987,49393 +9035,57404,55722 +77753,35145,83425 +77624,85914,1844 +23359,4433,2132 +74266,1046,77742 +13863,82902,41252 +96980,78861,17205 +10471,7940,72727 +8729,2577,56316 +28042,15691,50669 +12359,84377,77247 +923,5355,66076 +42150,66811,3442 +86034,45964,43668 +73653,72236,93668 +50964,86533,70514 +31280,49803,30598 +65880,69374,67993 +55024,17581,62205 +37445,8747,34251 +84793,86132,24366 +47584,74349,27777 +53692,30971,75900 +116,85170,66583 +20775,30914,12704 +86129,62848,68868 +20489,732,45144 +33561,53430,30313 +88796,89442,50468 +36970,9589,78402 +86024,36946,22780 +94235,38760,96905 +94784,10742,47367 +19378,71279,92982 +69238,94387,87592 +40431,49477,80139 +33507,96070,14452 +45030,95222,62554 +43641,69391,32528 +40202,21418,12 +68410,59024,469 +76416,37569,6163 +10654,76283,67820 +10289,6985,72725 +70396,90328,55732 +83995,77241,18432 +519,91399,14274 +54941,84967,82739 +479,31926,34751 +64679,33045,38396 +89792,60017,60481 +68240,92213,36234 +68654,56325,63007 +85093,51665,50677 +71373,13814,10896 +52484,16414,4791 +4706,30626,98018 +30473,49287,64819 +69175,64297,71985 +49295,97893,38079 +23709,56524,55810 +55664,31456,4054 +20325,65548,87826 +24536,75865,19437 +36818,23641,21067 +36036,87271,38608 +96046,50754,12757 +23823,96664,52277 +33195,82975,20038 +90218,5362,10457 +12349,27314,21046 +69560,61212,12013 +49947,20465,80780 +59058,4262,66825 +89102,56955,11140 +42897,29976,21444 +83088,41526,71767 +96596,83397,42020 +45255,72374,9830 +42041,3081,55933 +14079,12305,82329 +59208,43570,61360 +86497,66962,25698 +31200,26420,36271 +9783,5473,44982 +73062,69203,39761 +15801,95640,33236 +58564,40561,55039 +35895,73455,57218 +52426,16185,80314 +16370,3694,92048 +85923,35342,18834 +28124,92554,19053 +20909,77343,56960 +58755,47466,58196 +12624,20048,91488 +25862,52671,90928 +23675,56871,69012 +30552,31354,26773 +10543,86215,39164 +59606,91198,96832 +84249,40666,55059 +88113,84667,41938 +92,70112,8676 +27127,10552,49861 +58165,2830,38055 +68362,69581,19269 +67114,5900,96964 +11077,68241,86127 +25178,1759,72706 +56819,6870,78183 +41787,62896,78285 +10300,69982,30107 +79767,40378,78417 +90547,43700,72573 +69914,44344,62127 +42277,31074,26054 +68380,53341,55931 +35465,61224,15213 +8445,76885,29586 +49675,42099,275 +53373,34345,10584 +43456,27626,6245 +66748,74609,88963 +20409,92293,35475 +84496,85113,89034 +91385,72852,24344 +6565,27207,57455 +29695,70021,57208 +35418,95981,96037 +80419,77431,8296 +62213,45328,99571 +91652,94365,43181 +26202,9122,1843 +27399,92062,19752 +71262,27706,73378 +85656,96756,56871 +43611,58194,5170 +81070,4505,19014 +29433,72758,71719 +3183,95681,88918 +84953,72144,49387 +14147,42457,24808 +34192,94133,20792 +59730,12216,22993 +63069,11749,35742 +70014,97446,47123 +33478,65592,65972 +84706,97616,60604 +99727,21883,64846 +21570,6495,46185 +90959,89608,42649 +52253,67192,73309 +11663,12847,10542 +43726,71517,58358 +50714,78469,85425 +45928,4777,56235 +21849,73929,75733 +23525,96867,55026 +83179,52340,64955 +69074,59446,37287 +52295,1091,51688 +69013,3411,37872 +13718,89873,79525 +65556,57604,29006 +22114,28538,46899 +14868,33266,84280 +35413,31197,45294 +8420,98681,70190 +64152,67324,32288 +17587,97553,11282 +41188,96687,80868 +38611,57869,91043 +17931,10132,71749 +42526,74662,33079 +46704,87265,29961 +95265,43250,96175 +68679,83223,43727 +49468,27841,14258 +26467,11091,696 +11761,23270,14947 +99083,48312,75450 +11197,47188,22638 +30289,98920,67370 +57660,71825,37809 +49063,48724,88866 +52979,5880,27663 +56772,35876,4999 +71284,57489,82951 +40954,86770,20483 +80226,56980,73647 +23242,34177,38738 +47726,8078,10989 +4491,29522,17746 +90920,43291,44150 +18202,81423,48700 +54992,6524,91072 +13700,96098,15981 +21097,86099,72479 +50465,27287,89815 +40240,55523,82688 +42216,44816,63135 +91365,1533,2939 +8822,71661,60338 +38056,90928,19953 +24861,77879,27689 +54611,37650,62783 +24366,16517,79583 +93763,23287,4313 +31717,25392,8365 +57096,57909,22157 +33822,67330,43978 +93188,56864,35442 +71270,80764,65162 +33489,23689,40157 +92933,66962,3313 +33193,31394,45617 +25737,93829,29326 +50255,61125,72692 +92763,12647,98773 +47963,76427,80050 +23874,4417,86983 +79515,76346,40555 +14633,16017,98269 +8423,76528,63252 +92986,22255,96418 +38162,3685,73923 +89345,86226,49686 +26211,44246,13314 +24738,8729,97977 +38647,39763,612 +1480,15808,43950 +6576,98544,386 +62543,1858,49992 +98900,8653,35265 +67381,17400,36094 +43384,57792,3705 +3473,46059,91640 +94041,87219,65188 +90940,79257,78643 +17518,46673,65476 +18003,27583,10270 +12812,83401,24815 +95295,6269,27966 +35692,54516,50585 +68665,30708,15884 +48113,26780,65613 +91761,71525,61340 +94085,66592,92042 +43556,72163,82821 +99898,8267,53787 +32594,5080,65414 +34015,24785,19464 +384,3754,16260 +61590,19329,71986 +47118,73492,35999 +90898,86149,10163 +28869,4742,79171 +85440,32884,30175 +49141,1341,38156 +61237,42779,83331 +461,99383,69452 +12912,85405,13499 +69718,26333,62107 +87910,64238,8818 +83886,71564,20071 +95398,75920,78382 +77077,20139,34287 +38760,69414,76351 +1189,73134,67807 +42218,49173,59961 +40309,33397,97379 +38407,60061,652 +17619,8066,76667 +43839,22626,28376 +56266,50705,76047 +44664,98390,40615 +19502,68375,63974 +28016,88299,37285 +22106,77103,79564 +90558,41932,51174 +342,41977,41136 +20975,49410,99662 +57028,58281,90545 +8013,96692,1013 +69355,17825,13478 +16149,40220,68895 +23482,91557,67958 +40362,77700,35124 +53860,27923,63237 +63423,93212,88806 +59314,29853,70940 +94718,81683,76690 +19938,99061,18448 +46805,58667,1418 +75142,15789,80495 +34650,34425,98553 +46045,97766,35374 +34100,32056,41359 +27216,10575,94958 +67399,13367,43554 +54226,63477,40400 +43050,53029,40588 +46937,68763,18207 +61894,30849,12405 +43394,54298,4846 +15261,59517,73560 +73650,58444,32318 +24476,71720,33717 +54176,11858,72749 +72354,39196,46231 +2755,37728,19101 +44974,21934,60070 +588,38731,59040 +46984,30640,12068 +90953,54658,18365 +13398,22421,68352 +43922,62940,82364 +58652,6162,58990 +67336,46229,99 +35908,16137,92676 +97989,5178,36374 +10536,28560,20707 +51080,50256,98263 +47429,26128,25784 +86891,88507,44846 +40412,97882,32557 +9508,87556,38851 +11586,94029,9034 +26712,87221,20065 +18030,18575,10215 +88570,2033,1938 +37139,45967,46131 +91685,27166,11164 +36189,59954,90318 +55026,62279,27540 +23236,91742,12360 +92326,79315,73223 +73956,93367,5316 +43590,93171,57580 +42477,71996,63123 +9167,50421,89831 +10104,46552,33796 +82827,80545,26198 +72099,25983,91053 +85480,78510,39511 +52092,38532,97203 +38446,51889,22749 +70237,93807,18114 +698,96080,86079 +2406,6362,70053 +24517,37469,97768 +51920,10925,42821 +54575,83553,21911 +37089,61560,67654 +81127,97946,99753 +64645,99468,97280 +25975,26691,43928 +6723,47693,52455 +74894,34920,69095 +16734,63455,59403 +97702,93013,369 +91656,92751,53741 +33698,88280,60927 +23772,12309,76385 +4306,74602,54902 +36732,81329,83428 +74587,19917,33640 +66099,1609,76591 +14536,54293,74665 +9952,91694,8954 +55596,59893,26710 +28284,54401,41327 +42561,53293,83387 +1224,10290,79291 +17216,14578,95918 +78671,58020,99476 +46797,4708,12163 +6341,61189,90721 +84129,67016,65945 +50378,32965,77761 +18654,49529,10662 +16169,1995,7502 +45519,60511,36802 +18540,16556,91029 +35053,25375,71497 +79904,15112,53789 +38936,50959,36924 +99268,94144,84912 +13260,26387,36516 +11689,75049,74318 +16467,89353,97320 +20699,80399,31881 +98726,16625,34506 +52088,3135,92728 +19338,7159,33989 +95729,73145,91870 +7897,65794,26492 +80171,78015,11669 +69577,98939,66899 +23732,1178,89754 +69677,81161,33384 +3082,87075,25224 +28094,51455,5763 +75174,83361,8725 +95204,87493,80197 +55563,49319,11499 +98165,58733,69989 +90838,17266,75030 +84507,49949,27363 +77531,65822,93960 +48907,69311,2697 +29328,41291,30973 +55208,78011,221 +16330,52257,40488 +62278,83825,3601 +50259,84040,18515 +35424,25623,12071 +44844,30386,41877 +27539,58292,89569 +30330,30718,64076 +2777,28613,22964 +23370,47384,12058 +87948,72330,82881 +30695,26215,46745 +79299,29233,81853 +70530,20352,56747 +31687,16664,59102 +80719,30694,46834 +17848,96625,67936 +55049,65405,70562 +48025,82265,1531 +74107,97562,53217 +97133,42988,7579 +36975,69171,7729 +17222,92877,15138 +22218,78893,24249 +75853,5497,19355 +4670,45074,26026 +25413,98030,5230 +29465,5539,41896 +15948,34192,74123 +40780,40161,96096 +72031,8930,29492 +10003,1999,71593 +46843,40695,94037 +95735,79070,37964 +54383,74315,68696 +50026,88636,89234 +41870,62743,95648 +93485,97246,81113 +7548,28590,16645 +48746,11712,30737 +78964,52290,7003 +84249,434,55735 +87480,72277,41319 +74331,26535,82939 +69064,4085,57150 +50409,53211,33770 +10229,16014,40262 +19597,63355,28884 +16340,37444,88939 +97245,44337,12525 +15764,80801,22267 +61645,61054,25086 +55811,50150,41949 +28436,54597,29745 +20930,6157,92448 +58602,94693,71574 +77900,97538,27991 +11228,12330,915 +14365,76536,37910 +69589,70976,5512 +16164,94261,47181 +61699,21471,61621 +35168,61878,80038 +50964,50198,86687 +92309,38900,32638 +18392,10814,30065 +86189,71761,38507 +22086,67572,63910 +52186,16375,57290 +6385,95201,90635 +62621,82831,32540 +65518,13705,29365 +78600,82507,54244 +69730,59420,56714 +93284,51599,56924 +87551,86640,502 +13636,74907,79321 +19532,79563,63829 +2412,9364,76916 +31683,53831,50068 +90894,98059,93115 +15187,78749,27319 +24431,20407,246 +46299,71487,44965