From 42d419646a8b4e0d6e786bcb5bd4cde396fc28ce Mon Sep 17 00:00:00 2001 From: Ishan Agarwal Date: Mon, 28 Oct 2019 11:24:06 +0530 Subject: [PATCH] Added a program that checks for a vaild sudoku --- ValidSudokuCheck/ValidSudokuCheck.cpp | 107 ++++++++++++++++++++++++++ a.out | Bin 0 -> 62368 bytes 2 files changed, 107 insertions(+) create mode 100644 ValidSudokuCheck/ValidSudokuCheck.cpp create mode 100755 a.out diff --git a/ValidSudokuCheck/ValidSudokuCheck.cpp b/ValidSudokuCheck/ValidSudokuCheck.cpp new file mode 100644 index 0000000..6e26cd7 --- /dev/null +++ b/ValidSudokuCheck/ValidSudokuCheck.cpp @@ -0,0 +1,107 @@ +//This program checks wether the sudoku entered is a valid sudoku(solvable) or not. +#include +using namespace std; + +void print(vector> board){ + //printing the sudoku + for(auto it=board.begin();it!=board.end();it++){ + for(auto ij=(*it).begin();ij!=(*it).end();ij++){ + printf("%c ",*ij); + } + printf("\n"); + } +} + +bool isValidSudoku(vector>& board) { + //checking for row + //check for unique numbers + for(auto it=board.begin();it!=board.end();it++){ + set s; + for(auto ij=(*it).begin();ij!=(*it).end();ij++){ + if(*ij!='.'){ + //finding unique numbers(represented as characters here) + if(s.find(*ij)==s.end()){ + s.insert(*ij); + } + else + return false; + } + } + } + //checking for column + //check for unique numbers + for(int i=0;i<9;i++){//9X9 dimension + set s; + for(int j=0;j<9;j++){ + if(board[j][i]!='.'){ + //finding unique numbers(represented as characters here) + if(s.find(board[j][i])==s.end()){ + s.insert(board[j][i]); + } + else + return false; + } + } + } + //checking for sub-boxes + //check for unique numbers + for(int x=0;x<9;x=x+3){ + for(int i=0;i<9;i=i+3){ + set s; + for(int j=x;j> a{ + {'5','3','.','.','7','.','.','.','.'}, + {'6','.','.','1','9','5','.','.','.'}, + {'.','9','8','.','.','.','.','6','.'}, + {'8','.','.','.','6','.','.','.','3'}, + {'4','.','.','8','.','3','.','.','1'}, + {'7','.','.','.','2','.','.','.','6'}, + {'.','6','.','.','.','.','2','8','.'}, + {'.','.','.','4','1','9','.','.','5'}, + {'.','.','.','.','8','.','.','7','9'}}; + + print(a); + + if(isValidSudoku(a)) + cout<<"It's a valid one"<> b{ + {'5','3','.','.','7','.','.','.','.'}, + {'6','.','.','1','9','5','.','.','.'}, + {'.','9','8','.','.','.','.','6','.'}, + {'8','.','.','.','6','.','.','.','3'}, + {'4','.','.','8','.','3','.','.','1'}, + {'7','.','.','.','2','.','.','.','6'}, + {'.','6','.','.','.','.','2','8','.'}, + {'.','.','.','4','1','9','.','.','5'}, + {'.','.','.','.','8','.','.','9','9'}}; + + print(b); + + if(isValidSudoku(b)) + cout<<"It's a valid one"<psH7eT0q6XBMgb;$FCWOU}1c)RkRpheSEF_v=O*Rm$wDAd8 z)({&NENy8^tL=lWR%+GqT3aJf6Q4&b{-~yEHT73FLfeScH(E6B_spERzxLh@_&)FF z^ZwDRU&YU?j_wMdD{AKf#lae%brD&IHR4Sh!F-1)99poE;BCSw64u8+q z&eF!9oGNgVUL*mi@)~B*3Z^qY1(50$CQF19PG&v@RSyZKG0hF^ib$-2n&uM-sz-h8 zzeN-Qed0#JBI*#XmDDM5`NUu99@QJ-dP7`K!3^%df@*vuhW=GD-3jM`Mwf!bOIP`O zk!re6y;>CG;CAW^E(KM+t5J_hl3|p;8BAZo?Rn`Xi}j+Qvctu7wN(ZA7uQu^R9D;3 z+ICS}VZlWO`PnUv*?D5zB%gS%T(nfQL}FMKf<6gl!V!J`!f#*Re&?mLzH#>n;~yJ; zYgYS*%ikg1FX5lEo2F%md&1Fm%C_+(^3MJ5S_nAFg;WKc8~zbA8mIwY-kA80Vz<<|6 z&MFW7=REpP{^Y|y=jHd1zs5uUk3INl9{8NXQNGjze;@E}dcFwqPt;D=eCl+*NmPoKUqU)MoTDefK4mXEa*S18$&6NvF>KYrumBFgI zu%x+Du3Jk`^1}_) zb)_M6H#bxhY{rm+wUHJK)xQL|8R&FvNN;SxNQ3pIm3n24?yo4o2!t@yHAG1Tl_&+} z&eHWrO>^T~46#}d*3~tJNON)H<_fIdJfU7g)RF~4Sq*FJxxwbJkSTgz*HU_Py$)5P z&olM%1tHM^vSUe}pJi7>@+2iWz|C}$#~xW9 ztZmS)EGf}vWanrl%a#?-E!A_gXJ}WJmCi*G=zMvv=UMLZvS*U7Cu7B+|5Eu*l_fS! zU{gU)1_!N+W5hkxBo28cVHKH$xuoW0`FZP(C(cKJqbmuuX=)KY2mfAr=q98asoE1< zCo=6WEb%E?uZ5r1cH*aNQf=)Cl%c%DxYjdjkE5RdnfX<|q4I?CiL%}R=M@Tn$vF}q zbKoz-$_1?Xz(1N$- zmqix5(lzl1EO;2$xXLZ~aRye?mRay{IOAGr!H+kvnpR`M!=a3;$%5w;UC`Prcy%1%IO8lz+M{c$o@dbzVyA?$jrQEpEh!CKK@SpQW5T`TthVn2S#w6 zJDtkpLWBE7`5Y>f>kRgY@)=Ynml@n8$|q5oTxD>FD37BuxyWF*C?`{yrrKb;D1Z7@ zl*vs8n?(5#mC1DmSBmlnR3?`hEEnassZ6diSR~4?QJGw1Fh`VMq%yh2pih+li^}8@ zgBhZ{hsxv%gPJHmPGxd|!J*HAIQL;HXHa=Slz&ELGWp z;H5c%==%QZKxgW?Szrr9{lmFEflhyaAle%n3$+3>pvqUs@=%~_DgFT;eTCQ}KyT=o zxZ#H+K%jeLp9|LBSUM~L5ix~-pYeqfuSCUIR6WoedLo5j2dX#rFO(-frcL}^PxNW1 z^6N0tZW>N(-;t3KV)`AGh_ex#2fp(pIcn^ip9$iCL7aeA2MaLhZVY9(Ixs_yHj)-A z1M4$;Nf*VH6@gn1b_;R8tpTr9DKS#YM#55C|A0GUP!MLIrotnE+6C3%A4pO)Ujdp_ zlZ^=t^e(Esj%o{*-q@?6T5s$xvidfKf0FSh3U&E+LM;CIx3SpyK$F<}sJ8;$8`}>Y zR5d4i;?^Fha1HRHxd)`Cxq5GGrx3YEl7;=wlN>v^ksaJf7tj#oQw=o6RV0oBC;SGT z(28kerX83}%!b-u$0!D;L21QLP(V{X+Jf0#+;Jpn;>J|Ov2LKdjVjep&ftBRxV;)WBgdQf})B9?Wm-{4UClL*_L z{`RPU6aIGeq|Ekjn%G448Oo=w9WC z)u&+x5lEZ;%o1+Tv@9m&&-;h77|R z@cIz&x@Mkw3C)MgzI`K>mKXo`$Vge&xfMVa|CaKDK-b1i7yxzaHj>`;C>6`1e<_O| zD2oo1ML!5cp9d2y^MUAxfhd-~-q^L!Us>18$t31U7DIX<+7(g^70aR@mPP+n79A>! zergfZ(UWP48czo9O8d)fQqRUF3i^l|04(-)78^s)(K}J>lzg3Ai7ya+DiD3iCLYV7 z>gj_BF%W;36yGkzZ!*PqviPVJFN&QT1z+b@;&TxnFvTyD;!C9XZYh47DSk7HpDx9V zV&_J|*SVGWT*R+5#s32n9=$(YD3r59ir;C9?_%-){jpGvD0XfXe4Sf~&qaKjDZX2Z z|A`d8ON!rZiob)!*GciB*tt>gb#5iTIPq!Zn`Q$S%LXcC13j{VKC^*uaRbN821K!Q zqu}e@N__DR?6fuT2Lv-HC`C4~UpCNhHbB`WIpxp(3E1_hD0XfXe4Sf~FTQ~uTLbl? z0e1h5D`f*UW&``Vff6y&M@6wy@^x+{K5GNrf?2udc2Q-cl5mzNet(E~Zr$5Yz2Ip# zdv9bypyL20&0Dc=qdy1U2W1yGTy&U5woz#^R~D7!&XGmsCnw9I^2$_MRCC~;9|=)v z#=S3#YF@u8iz-_5iQ-l5^=O8|yP9G{Lb)jg9&eA!SK zVd?@B9^Dh@OuG}s0Mf?jtFie&9yl4CYbEE?#F-?zk#3+fY zs3>+yzRs=0XSI*ey%9Q^vHyW@^-^omjT#B+-IxyGh?|R~XrY)+$=A7+_~Jy{0^i9} ze47-XA;o8!;+5Y2aR`#S9u>vTje@UpEAhFAw*Q=$m*+qOVvJv%!?C(q2bEWKZDSMeI zTg{YpQnrk!TLoWd7xBf*e!N>m3?cq%4+d4NgJkZr94z^rO_ucre0S352`AKI&&^Fb?ZJYQZW0`Vnxf(fJS)d*J{yeCs~i zd0uXbLBV?yXBeA@2J|7w8M(shXVqZ9$h~ih_(&|I{ia-Ot;xQPQ`}7Fx-o} z=r-<1bSmy4x?7x`F-M@c2m>RYrJ_b4TApFK$H^Y*_7?ewM>W7zZ(vCnu4<23$;7FM zYH^;r@90S<+HwrT=z*i&5opqjwk1KmXA{u&+hzLDPwZ12r-e&n*s2bR1)?`LiOdYu zVn<6SZM>sRi@iOlPTF8zcR6%SSe|Z?)rWIxH(B=>vML}9+3k9q7Pbz66%Z?is79I} zpyCcu#M$j$9F5@^KJ$9R&d7S!_eWb_jvEpVKs(`E0SH;zABc{_Nf0_`8|Vcdo%TM{o-5Htrt?(R_02E+<*kZTUroa z1Bcu1>NZRFvxGw=A>MBu^ceF~@0(+G^llrf$cQH5gbZH8fldS(nrJY~o{3v}46iN% zS0DP<6W_l+*rJE~NAGB%f9Nh;ybDlFzJ-7^Z;+1l#_p6pj+q7jbWG?IE&Zi{X7maV zzVLh?x<8QA6G+-0cxoUekkqI2ZsU~wPugz@!(;$swwRvDGy9JSRkZqW@ekC!q<+hs zrqe8bs6kIy$drdLMhtl=G_ufUF>$C*6Wy@bc#_ve+`Tb6Q5FlGEM6~)PoZTrcQC!U zG7x=@m2@4|>e!djP2DmdE=)OahU_Zh2TuBhvc+xSJ*<8&y-Q12c*r=7gVYRRU0!SM zA*t++zvL2-`Z$5TWP!?9lhoca_{U`{-3i%D#>R{ z)Y&buz}ph^Tys=QJa1a!ckjRwrTCN35)boOg$10JxR;1*iB{7R@?5p!V3yld?5C$m zH()AC*P0*_BRaZ%m1m}0z$CR!wEmQ&?vdN1*dQSVe{bwdl)rcS;of*+2YhMt_oCQI z!CSa;JsK#D?o-8aD3(PB;lO+dFEcX=eh^ZgPJWC>g6bjJr3domJV5VyW4{!8HQ~qY zZ_63NZLbyKPEb~X68rEkAb0G`63LxqhI8sAqt|dCnqkCb_QEg5Yn5W$bEYAZgO2qB zT4VvnHbCQ;&Po@NL?z8SeWw^y z=w^8ta)hbUMH3XtMDbU`tDi=L@C`y?`-=e68#^TIPhm_@=mi%v(u$>UA(>+*9X3TjA%^v$8JMDL z>64%W8jIxy+E0@MVX-_=@U*`NB`hsnWH-^F`^APE2DaBLv($4gvJbrJt{3vKEGQ-> zT$>i~&Ks~oOW%HueF+AaM_c42y|H;{XX0aIyVxe0UYt zIe2q{Mh2Bbp6K2pfu?>yOJdl{bCVcJJ2fKq#J6=?==c@4*_$RzkNw!LGv%pis z*re|X?Ed-B_F z^*?3*;pF!IfA%M{{|VkL>MTlk5xT@f=uRQjvg8lz`z8Z-#{Ck$?|Q5wAh$_BUw;d5Ndau1oji2d!)oTM|$K{+q!2& zJ_;9LcJ6pRTZ2AUi8O%H>;KJ@rHjt99iCev8Z_ga5y|~Syk_DxmBKv}w_}@a=b}g{ zHoTO`x_T*f86BBQYmAXQVIX2wF0*2fI&w*gldW}0HE>@7m>?dKD2~*?r?$bTx~=As znJLg%3+cHlz01}~FP!zpR*1Oa-~F`zA&SVmD37WTH&Op?xWYDh-y3^Sq^h){baTG> zAoeDk{13ISe@GKa=Pr`>6i!nP;FU%Be%g;vqSg-F2QBWlq-I}(l|;o#u!@fSTBgEC zsYF@@_ZD9H3i=1fo&q%LFWdzgmg)XTlmeu(ZruwDx9js1q?$bLgcZ|v7%fVB9d z-)hDj@|Jp zDv^iDQ;u@ju@82{7%=eY!d+!}UCn9Jj`clS>s1&UID2Dv{|k-I_V30UmU07%dKf=U zAohpi-Nk-Z>uN-SGQ21&cMk7>2TC5hn@-aYr0u2=Z^DL^tvHw72Y~L(?E62&Hk)Dv zCCh>IiH{LCI@;MffHqHl2^EOcS(Jr?Cvq(GusjPa1JI!A#2Qkp*q+!U&K9cPv9H`b zJ~5U{YXlmGdZ0JT$mEQ9L4-C=dQMVlA^KB|<4`%#hbcL>WO=R@fa-@K)6D-e1V-@M zLj3V^oOlF48l$n$(*Ug2#ywtZu&e@dCuR1#WBrg8IZafPXK)yfaP4M#chc;pxnyLa zCs3dLbdsjG&}wh&zeoi_rIeoN4rg_ww&SlI6s^PZZyzs69w+z;)kkH;f^)oKn9V6845p|fuz_6;;}-)H!t-MMb4BnrZ+}U zpvfB7pmw0cKb(2sb;pQU9c0Qv=(C^JH?buWX#-qUri8!?2coY7K(;blt$D2^*nDoZ zT(l=<(al8Rm65D~=3|)$cA;mn12d>k-^F@~a6lOZ5)>i*dAMh6F3yV~GIpbYXc(VC zq1%pq#+j*eE$1Ah4H9jUDPBu7c{+N0B=kCT$}oY&Shg%r>C0qmU(h=an!J+{?=8qf#E2>T5PvUA?PO3Bxy{{47&l{NRQ*aJ~k3O^EWtiD6By2Ia}DgE(T;*|b4PPT0I zM|y8Q_Aue$kFN%c$ihz8Sck}swXp{lGvqhh*1VMz8*QREc$nP zrtv4NYX?pzM*2|CTe0b2DT~70dSh?)VuT{5(+ftH#(R4p8}9=tzp&}$2N)>(ml=!| zr>h73^l6(1*`(1oP#E57qa49z?00fe?v2qGI`DcWcX!kf1|f42=yU*{@gyBn$7a0_ z9c=88-qIWE#dCQ1bPp`Ou}5f&XNJ0OqbPQ9BHA5?R-_y4{XN+1Pq%jClLoPyFcfm5 zy9E?(w2f{%_W6vx7I{lneD``|?@-!pw*9gwQt|;gSUu5&=VQ+iQa*Yxy=OO{NsqJG z2p(g15Nfgy8nK;$Ii96{Aeyv3Oa12o8mN2_`ZMm3cyg*X`oAY6KTEwxXoUiOZ|szq za6i=Tle3_Qu%*zTvVSDsqGijG$o_E;tr9Ax+eQ?|3C9g3ye=|mEc%xR}N!qzfW^Fiv#Pl<~!03bd`TSyh z2C_8zD&-*faO0|M@lpSa8UQPbqo0*VKQ5a_pOQ}xJoQ;h?EK%6ul_CK%Y9vaJ|7=X zEQ@|TFZz$-kx6d^I`$?7X8*bM19U3=`Ww_s&3n7e_CDH6YJoiQZ4mPNT+m5zk>=^b zl*2c&$nR&PgF-qW^xGIAdbSc!z;S-`*H7_nxGrWGKW z-UPS+a4Pt20GtO{2Urbw7vKiK=K${md;{=Zz)3j#O@*8sz^Q;`fb#%r0ILBv03HE+ z7H~40CKJcqa{wy=mjgZqcne@3;C8?aJoR`2a5>-`fZG6%0DcNM8Qw4+Z+OlD%mQ2v zI1lg^z;eLtfVTto0RA12UN1<;@AM04*;70hXK0*liwT} z*#(#ZxF2u@;9@oKN&H{WFumdm^pWEIFI2CXw;5@*$0jmKI18xBP1#+;RfS&^P0Zx7o zSukK7U^+gOe-~gD-~)gGz#+gIz|R3U0bYUxdM982un+KUyik4+@G#(bd~w1AB=;8r zPQfP$$^ml#n*i4Ub^~?;?gIP);C{du;1J+hIMc|$+IBu*4&d#8m4Lqmi~#-}a0}oh z>^dF+Tmkqp;N5_S0lyD8iN06}pMWU@oB_BDuo|!p@OHp$fR6y~27C>$AMkRVQw{@O z515Hna5G>b;NyVH0N({{1DuM_d2I*04zLICe!v01eSjKv&>2W~e1LNRivXJeR|4Jv z*bcZGa0lQZU=QFh-~ixx$eZ!?e%iHwKEPW6ivS-6TnX3%*bX=hxC3zPho}$u2w)7b zA29t4O?w|O3o!K%>;^a;um*4$;3mLkz@32f+0s71e!v*usUM;KneaovEWjGT0N}3x zYY2ZBb_3J_cL8n(+zROJP0@$UmVu;G5i(qHNYCczXNUpJOa2A@T6hb8_)-M7%&@f(%BdvU_RiTfR%th z1dIR<18xI61BdFn0kZ)60dE7OFBp3b&5M~Oc3nYv9>&_3qW&VLjFb|VZ zn2<4lLgrNyk6)YKu3d4)rPF6jJ%p^wb3OTd3Ux z^zEP@LHl0vsoA8P%gcnN$9}K%JfC)^w70Y$+3+!p?@%iGaV;jj8sk-)Q#w*p-bqDQ zF9c5+{$wxBWj(!DjZ^%q8G3fOD zhC4wgxhDNegB}6>WzgqX>HdxsQZ32f0y^nEXr(7FH|jqEdLHzK<;#>`Cdk5WFM~c6 zbg%v$2E7b)ul`L!5>C$qy!w|9`WDc=`d111E1-MzF9LcW=w5c+0{XrL^hZGN0Uha* zIsW-_{63&2V|)*QJ{$L`Q?XbmyGKkN4MWBr@Pxo)(34jfI?ja8jQQ`85rle^zSOK= z2)YLPIac}&CVd&`$)LAb>B$X-{5H_90eza4UTxOj2Kq|S$sdgVU2D>JgT5SeFCF)T zz6kU@Ykl}w4Mb!CSA_AC{Ks*hnu-Nk>F7$D8_9Lq8Od|0H6Q48;Qc#z=MnGwSo9U| zH_ZM7uwk3+ITz}81EUVFUB+9(npu^ z%mMFC@QU$dS$KIoq@R`G=>yNHh(W387M{|sl+CFfX({ON znW-E4qVZjzd&S`mpwp9Nulo0azCA(xeW2eCy4!pp|9KbmH3{gc*jH779=7&BSuQkG ze=6uZL3dlne4x(*{kx#QXsr+1B=?y*5TAtlgZCIWLB@R0y<*Z%(3?T`(qSLyD?uLz zdl~+bl4h)BG0?Ai-n~AJfj<3G2>K%D80MK{xDY&5;PHxEWuUJB{XDCTpsY`A(7w1D zbQ)vovq=8cJW4j#hHl8%3?4UKlPz|E{&mpr!o69)OEg0C{h$wl?xm+8(BA}oy0w1T z9AgIdzA@0fd?^R?mlM#-LGJqN!ajZ_=w3R?2mMCSz4D?;&~F9Z%at(KI1ixIiRlv-OE>(gI=3}ehcW!L8o=v7^7v4-VXX2kNQ4Tc>?qr(EpdUKI!No za|{FE`5Zi6W1z#t=`VV(<37+Y1bwl!jbxdm(|jueeL3joTIrS?eI@8spnK&J?OdPM zB0~q3b#({m?WphNt39AMfIi1sf30Qwpx^FM-$!+D_R|LXcdT&}I!yVNxxP&W&);A2 zw(~sD2S9flBehWt`fH${Y;8lV%W|_pdfWt_XI}Om=T6XfgFYX;hMtm(4PWj9{Y}u_ z`atqyp!X+`pAH2-4SK0fz6}0UKMV9B&}UldO{Sg$pr`#2>yMT0mvkR+HK6|k^{Z@j z_^KsO*bJU*$e3Z}ktw6dGadlF7<8}s`Yh;6KzEC+G=_tqF9Y3cjN`Ep{SVN+#&{v< z-v-@ljAfwT3VNb3Hi4%HJYHk$2K^<_y~el;^mjq`8smP@KLCB2Rfm?mdIFy zEb&v&z4iq;pkMxqcOFv?`lX6SdEAM^~+ zbFFmC+BOXO6wsk6Q@-WwB@>Gp)%UVfA?Rl(kiQJ{i$VA5UmNJN6V%@Z`c=e?#JAJWu);QO+*9l1>w zF{udjKG41Txf1lpK*tfH*~V8)`Sgvs^w}z}`Md-4$3ge9Ll3v_<);In?@7=;9pLqV z9>9hi@pzZpOt>SDL;$p za2vA^mNTaS=#Qeln;&GM$}ZU9UeFtHpZaCXICwvu%=;wL89lFfAG}^|(Q}M`(7kL< z&o^EK-Ocw&K0Wu?1G<+@=y}M~3FPO4-UIsikY(7TO6rPiwjH|e1N}$1Pc0c^^2oD@ zt;FdA?H0%>{*xnyl3m5gi}arz;JFbz5NXPhDZKEn9?(~S?xlCKTN&u$9OES%qA34y zImZ}}W1xc9++~s8E(CpQ0(u$fCxPx2^XfpK47yjozZvwI9`b!?{{hgy4Ei$M8{?2V z6`n|a+z*~*;PE<_8v^}0k2c75%b?Ey=wk2n>r}HHvWsQ!RfuE7uY<3`+LvT=@3jo{ zhe5Bj(apVA8|d$Yo@=FB)~9Wt4}g)0h%g_b-cr%=f^w1A_0CYFMAo?)q z^bFXGo_V^I@72FT(5e1XYyXqW#Uvp4%RsLK-Rn%N4fI;jz2t8L{bta;{C+p+4WM6b zYhMN=F@Dg02)bKb_My%&=nsHy)30OhO-6uu89Z(}A{lc)-vjzG+#5D<_~T0Od<-5h zJ+y;<*rN>^#}3ffKjfaX`#|pj{imQ~nwx!)W+04sHuWxecA^b&zBhM5#30ZR|_`nDLx%fgLq>I{xSX}l) zPO^|J|BQ?zo%UJM<#!*a^`{0OJWhLg?Df6JX*-XbO|R%A{Uj+DA*U_v?o+kBNonZh zkCW35oTA;DlJ@E;+CWO$-cz(EQ_~(gMca{<_C4UoqsXA5GGJJ2vf?le8_z zrM;J_-FsZxu2Z$Aj+>ABKaWehKNDO3w5^%i_r|B)nyGy{KJ9O(X|J4+_NUXdhbN@{ z{xt2*iD|z)O&gk+_Wjee=QGlxr)fVsF|GGh?begiUdYtCPfq)7ruK`I=i~n8r@o5O zpr`b2+}gCelC=L!LYF-;lZrvDN_#O$+m)1dFiHDs5*}_cH^KCRw9B+5rUcT`$oEc9 znz%HrB`KOT?(QV*N7Mjqh3Ojk-YH2Z6s298R6lO5w$Y@JsFJj+v=taR!(C$%S~ zZA{YcHn~L887|#1x*=Qn_uqeO;NKefw+8;Lfq!e@-x~P02I4hPE;h?}9watSIQ!zV z%2S+>eiM`~g|Fl?9yf?Z%Mb6dJbxUBj) z#O0qc{Sz)@=lcKTQorNw6#hQj`(uV<*zl(^Jda@k!}$!aVYrIn8iuzqyocdW89v7F zX@;*be4pXR49AE~8{X4ocpk$7hR*&UYgzq%tg46K=)J_3wX~|WA=2ubm7SlRb5U-q zDCK@Vw=g>=KRb7t#H$+KFa_2xRE}q1qhIP(^UQ*V&!%V*SN>FEp4j=*v>sRfF`Al3 zcK)%N@-I6+T~mH(#~-ID|F`4EX=@yBZ_UfA*Dwf!ofSO_V2Xj$Z9#}sXXR_=)2BJDmaO5CSt=I@?ci77^OHL(4l0wcE$|K?nZNjQ_xa|3KhR*K%+5;m%y|J`wjB+Ck=5@z#filHgZE4mo*@ z|ImT=GyaeRe=Xw=JLIon{ICOm595zG@bvXq)E{lJ=st8MFZz%=;Zq&>&l#WYz@LS9 zLHy$#_$wHn;lM9v{3HkdX2xea@ZVwlWCxz&6t(Mf;A4!R>cD4UVI=-62fmQ;7dr4O z8K2|8Z(@AD1OIcz7dr4SGk%T(Kf?GT2YxyXLH(TPz*jIn;K0-SqQqb3!2gKxW`1^0;Bf4?FOmGd{gs&NszR z?^@EhG9CDFjL&l5GZwA9LWBF@D&AUjaO=BOgwY`Y+|UcL(FuK1b#M2z##U z$Q~j8ByGIQ`tG*w><2$S)e)CJyd&hqukZA`1@tKrXFl*5+uIob>v1y5`N$u ziKje+u2Ss72roVpj`9S7#pnAN|AJp46#jL_zndfRO8%MHD3YAve2M>GEN3(0FU*pN z#~Dwb;dImUL?lvf_-VkC{53^VfZFGFG5+H`iC6u6iSg&T zIgHPoBk@euRx$q3GKpt#+Fr)T&X;&)$GfvOKILVz6L zN&Z2$Bdbr-8Gqy=$t~Wi$L({Bzm&(N`guHrlbn3+pwe3r@NVs{V1B1QI~c!-15f@v)PVtCvgQBKjvatR`@N9f1d|BiTPh*{2AOJ zt4TWz45SBVT)mX>C(V`u#JjM#eTMNX+3q}DwUed_#($ml zspje9z@M0$sX5P2@N`zlzn25mGM4`l@GxcEm4PiW^=Aji2Oo2Mh4ByMO9ZQ1`vv1a zpDFPwPQJwWH?NdF{Meq#sgLT_cQ+6Y$z-r;`#~WFJwmL|G#Jat_6}$`R6I8 zOZn$qDDf)(lrg@B=e24#!uTqVOPGe@+R6Aytmj3HA7OkQH^|Lvm*Iew#^qcWZe{%K zJTEF(&JP)%T_O?LjQ=a+ADJ!@^nMXt6ESd-AK`v-Sl5afU&Z}Y`e|gm(@*XOehT~~ zgX1dF4{<%j{NvcZ$`3EV0!r;}ES7uB!zv^c$0uJf<5RXgYzs~qI zJilNjaox-Ka{+sOoDmIqD9_pT11-JotYWJ}j5?jf{4UFHnP$E=+USj+k zbM5%Erm~!3JHC|hPW{{lyjy?1%lsjZ+w6AQM~rvo;Y%@oTJO}k?giZc8Caj(GZ(g&vM@6c&qI4 zd&Vcvl7f|fk`NHwyK1~YW&E=|E`)t?J<0foInKPu_)i!=ACNA!ew~T{LhWX;-gw$;H!^-Q z{F*Lh$32X9?jJv9yweY}p%;=rp8JXEFRrgJ-nma%!}#vYC0{o4-_Q7L9@p`VA7Fg- z0*O#@ZwmORU7h8q_u@4ig(vp8)%<7Y8m*?o8{$vIssywxWw@ZV>c->Lu4fOm@zCqW?f z^G%i?VmV70?>u+f%=k^*5he3U#=p<`n8N>w@l)6_$Fclr@IS?49l(6xsXs%|D_x4G zmhl7Z=WHJBF~*lMLVRu#_0q7ulAL8c--AM$rY&SV`7d3{A2u`IX~(C4SACE*h`){*RXl%;@!PnA%3l8jp8C0Rk(3|i#?#;jB*)1=kMW3Zm%bziRIrA(0A{c`DlgH}?yQ8)nc-0nnQGn+>@PjO87xYTkJPEW*Fitl) z*8@-O?&CZS-4oY$8SgwFew^`d`6XW?^Z$eKL#)UjG5#9po#fxadI&N8YmC1c_2@c7 z0_~TK53u|*8UG67i;5(Iho{ZNIz;jhv)nuiyoFG57OP;C*~=1urnaGoPG@^~}vK=X>Cbfv5iLKwdzXs=J=?PJRB0@y`6@ z1IBM*KMY85+Cq$n=Hq^zkI9U`0eEWn#~g1}oY~5FXFS}+_;cC5$}az6e1QEyDU1*BcvU}FGTyoGZU^2c zB-sCai}_D=#PcT@@65x~=gR&BIi5^paVG-rCjSEF5AcNkGV|9n-g(}2ALEY{NycpE zA7uRX=oei|59h-VNI$=WU(m(rxYok>JK(=o{PT=&&N%!#;N9%5g_(`-*rKE#1Vq?9AzW=sDeAjJBO*nK@cBrXI)32+Dl;zHDstt$2YinD=dZ@9XCDPm) ziZE$Lu&%B#6ht>6Y_&ud)UIx5Y!1spp|009Qe!ACnyu@r8(Q^HTU%LPF2)&N6>P1G z=#X%e-qcuE8(QaQxjCRgD@0*TF2VyAp{_Nw)+HE2fn>y_ ziPSc#5i1!8O6!1XA-?H8w-==&H_P#+C$*ldGgPG-BE`B^dQAmbR+4 zxh0}EHq<5Hoe^$sMo1WSZsamwWL;B&8I&iv!Y!d-A~tTc3g7qL9A4$^3EXH^GZ;tZ zY6>=o8%E_KSqTP^F9%Q+tR97tyVe|RSe-x|bBXUX_wL$EqfyNMaL_yWnI0BEwLZMe+VG&=OuD3)G74=$#tZY4ZMxOXPL;TGbe`kun1>)~4 z@wZU?olSr9bHv|V@mJK%7j^SR-F#6uU)0SPb@N5t{MiVg`B+$}?b?u7;}ElIZ$_!H zK@T=mqo;EDqH<1ct)^dDws>xF8LG5a>7}}U-OQ%u+J;C)q+m@rgjKDyLN5(f1WQAH zKmJza>V7C(pTDGdpocY0nf z>dDn5PrpVCO~;xOE{$u2hM9+9mgM^Dmn^85!F?&zmsIJI=5V+)6sm~K)=R6AVZc?O znTkk$UAU!%?u4QW^@V!4nU>vhEXgxeMZKZ18nuPPE-*8J+*vv(2xxVBEfOJ0B}&WD zgk$jj>aZNa0+SR!OhZL-sI!c=4bdTgeZ5jeUXHG}Hjs&gmxQZD1S~D9%JKWrZ>C9P zxuspUM|nj)^i-LnSLzk;{6eWIsLy54{*pY^>M>~2qP$w9f2FWSSye7Wqp2$8 z!?`*MAsf#?-~IXI1EOOU5sL3?gU!{YuzH;K7gy>_XfZ5k4%auX3F`>3$Xy#kaG;sG zKi?X^kJ7)8SFj(_(B^$1_2k3T>KfM~QLJigZK!tlH*!Kl=fVkv=Py|hvQHXT5p+xA zG`#{@C{lDdF7%Q^Hm-=|%{CpYp(WgmOd7GJIgFG&2%S`UG>Pg_lL`9-_C(Cc4MEe-S zl-Vq~5sar|7Fpe8a$EKwu90VfOX%^Jhj^M7(@a-dbMp~v0Ky1WU<}ovUm?U*VQ;6x z+4J0nLJk+M4n~4h(GoOgG=$fhHh}*WvO&WB`tk)zhjFo&42b2qDbg(UJX!#WHxiaW zTLj^-ToEbM=h52QxDL_VzXl;Omj`Riz0p^W8QA1l9DoJV{ue(lgR{uy% zbK_dXuh3h(M89!D zMG1L0E_sb#hLn*Lc#oN~c$tZ;`f`tgj(XW7(GbIV0lQTCHa)^0L%4-Hd zN9GI=Hn46D&A7ptuU_5KsMjEytP6`qauM+8%t#kof?%H5If;(>(Ggex8zgj$R3P+% zEhQwy+r$!N+%|)wCm~Q5r##0J`SWP?Xl`thQ^9+$3dOiC0pYLGaO6x#7(SeVGA?#F zmN(C3*q+`(ZN^RjD?xa5V>6Pkcx`!a8fL}Srx6t>i_yF?);^U=DBrgj?P%iVY~#s6 zY3M4k!ur>gSL*Yc7RSYs+@q1liJC3%jMJOQ5c9=wXnl!K*yC$h6L>QR$TRgI#$hO4 zWCA65r4)l)on%Rs$Xsb1I+~Hjxr&)|nQ6T}8HyVN=9)OcF}+G`jl|@WvoYRB?8DA2 z;AU}#%W;;3y19crwOoRR%aPh}9;QYUzn;lZVD#pwOk-xh=!sniDpxSD_A>={ZrKOS z-+9+&<2)l952xDN^rmogOCu#Ik#+i-oWw!cx+6Qv$d!lf6QUxtNry*%>;_Q6EoMQb zUQwb~%(Vw{*G;U;B&VdFg&^M)Q&?!pwy3&oZY%XsMuDV(7E{N%LQ^%NgG&ig3|7ELRF;lQ|36oCKvY{d&c`#G&*H4pkn)P(c0y zsnXcv@ zAdHg&=P`j=1CQwdz?ON_N-ljAiwxyZGNEJ7G14Y$THzL8TvBfHNY{JcJPVmm2#GQt z(6r#ZJ&1=*9I@4=ca#M$_m~zu*y*jh(6lti&uN|WU@%Un z;_O#Emoy)%$s=izWX+_LW_sRCPY{gkNS!es(>y6e{AjLSU6bIXOdKV^d-1H&?I6KB zs2M2)bby^zy}98WHTJtqH3WL&vCpw=EAj4&4B?9q!qu@_qdbyD$M66%SY3_Zscvap z<#I$>j{UdVRVDW1+(e#ST~{7|(q>LH+R%^gR{qiV_q+rieZaTpaB_*Ph}5-E{&^Hz z{}7&rAhKc`>U^BC$U2P*=&TMeD&e7DeYn1=brmvsIto-r;|*);^uuHdU3k3GiYMO`WsREFQ-1lxE#9UfztSzezJM3vLNzz(tMFO{ z>j=;J#nVEIhDP(@(PCO$kaw;c^1MMgv1cmna>6-U({4Kvddz0s2jOjr%7rEBH4Ezt z5iT>u{IW|8A zvEqSDQ!8FTqg{Y&c0qZz=`0k_UpSZ77C}cJsw+vBfWC@B*|1?e3#>MD8rJ+Sj|j$`Oz(fj`&00 zQmY2tf@6HN#tIRC+F+kz^1WE&l&>Zn#7oKa1`qO&a71bDSUhtkD)Up?#NL_s><)eB z<2!M%jS~pDaYPhSkK?e*#162YUeUw6QqS7y%_V7Y*V(2L3Re~L;k7u6F*ad|%o*ow za;3r0EU#_E%{%WC+4$Euu$|`99PATYRlaL^d&HSpxu1n8og7P^YH@M<;}1ia`@Rk{ z%JgZPPR>o-QF^cARRg)wt7m1$;F6TrsW%Ipn=(U;xke}2mf4;e#@SV_mnyF_M325o z@JWNUa|s{ZU{zDQL!I6Zp_GB%B@_=@;<`oei>XC0;UlHEnslm26Hy*$iGxMUVY^hti>pte9UY;az1P{r(TadJ%r_e;Pm52+;+pqcUQR+4 z+xw65q7Wq|J2OA=OJrPk7?iSHQSAFdMu$Mk6z8A zSH*0vR^WpKEh-nXL{+zN5N82ruELKs-?ve(!5qUx0jN<)vvZ!*X7QrZMg=UfBv)+9^H9Y zk}l%D%t3*1=V*9G&E-L-cr0dp*olc*+t?yrb;vKpYY#NX677W@(KTexSUFoAWhMxx zNH`PRH_z%6e3S|6<`;6s78b3mtqSR(mR50kNLu|O;>=}?&bDz*X1skMPXFmiE0mDn zg;zg5tRU;)xW|u^H0;yyk}Ps8W3S=u3+57FPwx^0_xN;9yp=1xN}aX4KRB+!s!bm_ zNcjBNb%L7y%&DL=bjqM85-A*Wl_%UCxjXqR^%^F$xQ4x(28A`r-HD9J2g4mhz;zs` z#7#G}34?pRBlAUk42KZvtr`)^jC2R5g!Gz=BXtpL0dh;PSMiSOjLdcWZaX=XuMW68 zpN?OD5LNB(&Ei2P=9)5C{2_o`dlJ9&!8rh&AxAG!9|4U&%fO2rB1yBq*>Ox3m-(G) zLL}v-#`_{}&PZ>N@R@|W>)B6WJOUu51X;mwO>;LOT+DpAIc{=^*I3y1jq0Ok{I;io zp*s1}sjDN%;h}SIbL$&&=5i_a@W!#Z?G0H2YrX=aUH~24HR-h$m*ZRE1=f!x#Os8@ z^GqWVPWUkevA<0mwMn~T{MNVA;u=*ugfH}P*7nfaCCrpo(xHa>v^I_<>9g9E!7A}4 z+-Pye?bKQC3NjhGXg|(oth;Cmu`kymy@yJniw>9L_7~v+u_~4Xx`^e4?z* zij21@F<4jSB|0*2yb5y^=T|a6hs(PMH0j`Sko-Qpy;%v@gSDc-uC zmd6=6?(}>H-T*W|U~;rVtOthNbFVHS=bSOi`hkiDeEPTnZ;p%1-q?QOBffO%rIx#+ z9?mhy7N<1o1s-dRbaM?ir*-*cnW^CT69n}H%Ho7aV^dqUj!lnTPe*F311D8UDaA!SA9`! zwU$k#nqW(fmR-HB0rDh_G)u}Fyrl^P+X^~p&EdKrRp7g(x`>udALZ1tahtum5jS{k z1b@YHk=@)VK3kU^uHi37si}q#Rf6y7BUmQ?*7zEKcA zwk57H_)B9~^)n?}y9SV0jQZS=`du^iJAlkCWT<3y{|QIe&G<(;RrS^Hs41v^M^Lq|>Z|c@;QDg`=~BP9 zreFpOruwJhpR@iQz>!|5e{`weWmAyqSTE|U^@^fkt*?H+O~EFI!}8bu;kyLowZ&1t zh`;DcLDgSoH~O#e-*?nk-y5vpe-x>j5~_9;_Fmjr`>%dCPQl|8BSYu-@8|l;e(Lw- z6r7?6TwnEDiT$OczWNXxwNqtcr*LSx6jHAB#T{{JLIPB+a z|8>+Slkqe)e*doj7TKUv->Q8D{|Ywx&Mj46{Vq<7>nlDf&GcV|{|E#%w}?mmp5BmZ zpY^ZQsOqVHZ9^RzqH5px-Mw#+G+d7HtNIEaVHTr)yN_z&`&Y$Z<99!0$?U%>Cqq8T zQuTdYKeJtOWIEdSNwo2IEa=3NV_@Wss(*n4uf$oQ!$n1nK)b9saIS=t0UGd6ja$VZ onjfm~l2iW8`l*EP%(G(S)QRurb+3Q?0a;IdU$2s)`mM_U2fy+1aR2}S literal 0 HcmV?d00001