From fdd8b4ea765f296d573282b01681d73eae7784fa Mon Sep 17 00:00:00 2001 From: Susmit Kumar Mishra Date: Mon, 10 May 2021 17:00:49 +0530 Subject: [PATCH] rename --- Big Integer.cpp | 422 ------------------------------------------------ a.exe | Bin 46232 -> 0 bytes 2 files changed, 422 deletions(-) delete mode 100644 Big Integer.cpp delete mode 100644 a.exe diff --git a/Big Integer.cpp b/Big Integer.cpp deleted file mode 100644 index 49ab1fe..0000000 --- a/Big Integer.cpp +++ /dev/null @@ -1,422 +0,0 @@ -#include -using namespace std; - -typedef long long ll; -const int maxn = 1e2 + 14, lg = 15; - -/* - ###################################################################### - ####################### THE BIG INT ########################## -*/ -const int base = 1000000000; -const int base_digits = 9; -struct bigint { - vector a; - int sign; - /**/ - int size(){ - if(a.empty())return 0; - int ans=(a.size()-1)*base_digits; - int ca=a.back(); - while(ca) - ans++,ca/=10; - return ans; - } - bigint operator ^(const bigint &v){ - bigint ans=1,a=*this,b=v; - while(!b.isZero()){ - if(b%2) - ans*=a; - a*=a,b/=2; - } - return ans; - } - string to_string(){ - stringstream ss; - ss << *this; - string s; - ss >> s; - return s; - } - int sumof(){ - string s = to_string(); - int ans = 0; - for(auto c : s) ans += c - '0'; - return ans; - } - /**/ - bigint() : - sign(1) { - } - - bigint(long long v) { - *this = v; - } - - bigint(const string &s) { - read(s); - } - - void operator=(const bigint &v) { - sign = v.sign; - a = v.a; - } - - void operator=(long long v) { - sign = 1; - a.clear(); - if (v < 0) - sign = -1, v = -v; - for (; v > 0; v = v / base) - a.push_back(v % base); - } - - bigint operator+(const bigint &v) const { - if (sign == v.sign) { - bigint res = v; - - for (int i = 0, carry = 0; i < (int) max(a.size(), v.a.size()) || carry; ++i) { - if (i == (int) res.a.size()) - res.a.push_back(0); - res.a[i] += carry + (i < (int) a.size() ? a[i] : 0); - carry = res.a[i] >= base; - if (carry) - res.a[i] -= base; - } - return res; - } - return *this - (-v); - } - - bigint operator-(const bigint &v) const { - if (sign == v.sign) { - if (abs() >= v.abs()) { - bigint res = *this; - for (int i = 0, carry = 0; i < (int) v.a.size() || carry; ++i) { - res.a[i] -= carry + (i < (int) v.a.size() ? v.a[i] : 0); - carry = res.a[i] < 0; - if (carry) - res.a[i] += base; - } - res.trim(); - return res; - } - return -(v - *this); - } - return *this + (-v); - } - - void operator*=(int v) { - if (v < 0) - sign = -sign, v = -v; - for (int i = 0, carry = 0; i < (int) a.size() || carry; ++i) { - if (i == (int) a.size()) - a.push_back(0); - long long cur = a[i] * (long long) v + carry; - carry = (int) (cur / base); - a[i] = (int) (cur % base); - //asm("divl %%ecx" : "=a"(carry), "=d"(a[i]) : "A"(cur), "c"(base)); - } - trim(); - } - - bigint operator*(int v) const { - bigint res = *this; - res *= v; - return res; - } - - void operator*=(long long v) { - if (v < 0) - sign = -sign, v = -v; - if(v > base){ - *this = *this * (v / base) * base + *this * (v % base); - return ; - } - for (int i = 0, carry = 0; i < (int) a.size() || carry; ++i) { - if (i == (int) a.size()) - a.push_back(0); - long long cur = a[i] * (long long) v + carry; - carry = (int) (cur / base); - a[i] = (int) (cur % base); - //asm("divl %%ecx" : "=a"(carry), "=d"(a[i]) : "A"(cur), "c"(base)); - } - trim(); - } - - bigint operator*(long long v) const { - bigint res = *this; - res *= v; - return res; - } - - friend pair divmod(const bigint &a1, const bigint &b1) { - int norm = base / (b1.a.back() + 1); - bigint a = a1.abs() * norm; - bigint b = b1.abs() * norm; - bigint q, r; - q.a.resize(a.a.size()); - - for (int i = a.a.size() - 1; i >= 0; i--) { - r *= base; - r += a.a[i]; - int s1 = r.a.size() <= b.a.size() ? 0 : r.a[b.a.size()]; - int s2 = r.a.size() <= b.a.size() - 1 ? 0 : r.a[b.a.size() - 1]; - int d = ((long long) base * s1 + s2) / b.a.back(); - r -= b * d; - while (r < 0) - r += b, --d; - q.a[i] = d; - } - - q.sign = a1.sign * b1.sign; - r.sign = a1.sign; - q.trim(); - r.trim(); - return make_pair(q, r / norm); - } - - bigint operator/(const bigint &v) const { - return divmod(*this, v).first; - } - - bigint operator%(const bigint &v) const { - return divmod(*this, v).second; - } - - void operator/=(int v) { - if (v < 0) - sign = -sign, v = -v; - for (int i = (int) a.size() - 1, rem = 0; i >= 0; --i) { - long long cur = a[i] + rem * (long long) base; - a[i] = (int) (cur / v); - rem = (int) (cur % v); - } - trim(); - } - - bigint operator/(int v) const { - bigint res = *this; - res /= v; - return res; - } - - int operator%(int v) const { - if (v < 0) - v = -v; - int m = 0; - for (int i = a.size() - 1; i >= 0; --i) - m = (a[i] + m * (long long) base) % v; - return m * sign; - } - - void operator+=(const bigint &v) { - *this = *this + v; - } - void operator-=(const bigint &v) { - *this = *this - v; - } - void operator*=(const bigint &v) { - *this = *this * v; - } - void operator/=(const bigint &v) { - *this = *this / v; - } - - bool operator<(const bigint &v) const { - if (sign != v.sign) - return sign < v.sign; - if (a.size() != v.a.size()) - return a.size() * sign < v.a.size() * v.sign; - for (int i = a.size() - 1; i >= 0; i--) - if (a[i] != v.a[i]) - return a[i] * sign < v.a[i] * sign; - return false; - } - - bool operator>(const bigint &v) const { - return v < *this; - } - bool operator<=(const bigint &v) const { - return !(v < *this); - } - bool operator>=(const bigint &v) const { - return !(*this < v); - } - bool operator==(const bigint &v) const { - return !(*this < v) && !(v < *this); - } - bool operator!=(const bigint &v) const { - return *this < v || v < *this; - } - - void trim() { - while (!a.empty() && !a.back()) - a.pop_back(); - if (a.empty()) - sign = 1; - } - - bool isZero() const { - return a.empty() || (a.size() == 1 && !a[0]); - } - - bigint operator-() const { - bigint res = *this; - res.sign = -sign; - return res; - } - - bigint abs() const { - bigint res = *this; - res.sign *= res.sign; - return res; - } - - long long longValue() const { - long long res = 0; - for (int i = a.size() - 1; i >= 0; i--) - res = res * base + a[i]; - return res * sign; - } - - friend bigint gcd(const bigint &a, const bigint &b) { - return b.isZero() ? a : gcd(b, a % b); - } - friend bigint lcm(const bigint &a, const bigint &b) { - return a / gcd(a, b) * b; - } - - void read(const string &s) { - sign = 1; - a.clear(); - int pos = 0; - while (pos < (int) s.size() && (s[pos] == '-' || s[pos] == '+')) { - if (s[pos] == '-') - sign = -sign; - ++pos; - } - for (int i = s.size() - 1; i >= pos; i -= base_digits) { - int x = 0; - for (int j = max(pos, i - base_digits + 1); j <= i; j++) - x = x * 10 + s[j] - '0'; - a.push_back(x); - } - trim(); - } - - friend istream& operator>>(istream &stream, bigint &v) { - string s; - stream >> s; - v.read(s); - return stream; - } - - friend ostream& operator<<(ostream &stream, const bigint &v) { - if (v.sign == -1) - stream << '-'; - stream << (v.a.empty() ? 0 : v.a.back()); - for (int i = (int) v.a.size() - 2; i >= 0; --i) - stream << setw(base_digits) << setfill('0') << v.a[i]; - return stream; - } - - static vector convert_base(const vector &a, int old_digits, int new_digits) { - vector p(max(old_digits, new_digits) + 1); - p[0] = 1; - for (int i = 1; i < (int) p.size(); i++) - p[i] = p[i - 1] * 10; - vector res; - long long cur = 0; - int cur_digits = 0; - for (int i = 0; i < (int) a.size(); i++) { - cur += a[i] * p[cur_digits]; - cur_digits += old_digits; - while (cur_digits >= new_digits) { - res.push_back(int(cur % p[new_digits])); - cur /= p[new_digits]; - cur_digits -= new_digits; - } - } - res.push_back((int) cur); - while (!res.empty() && !res.back()) - res.pop_back(); - return res; - } - - typedef vector vll; - - static vll karatsubaMultiply(const vll &a, const vll &b) { - int n = a.size(); - vll res(n + n); - if (n <= 32) { - for (int i = 0; i < n; i++) - for (int j = 0; j < n; j++) - res[i + j] += a[i] * b[j]; - return res; - } - - int k = n >> 1; - vll a1(a.begin(), a.begin() + k); - vll a2(a.begin() + k, a.end()); - vll b1(b.begin(), b.begin() + k); - vll b2(b.begin() + k, b.end()); - - vll a1b1 = karatsubaMultiply(a1, b1); - vll a2b2 = karatsubaMultiply(a2, b2); - - for (int i = 0; i < k; i++) - a2[i] += a1[i]; - for (int i = 0; i < k; i++) - b2[i] += b1[i]; - - vll r = karatsubaMultiply(a2, b2); - for (int i = 0; i < (int) a1b1.size(); i++) - r[i] -= a1b1[i]; - for (int i = 0; i < (int) a2b2.size(); i++) - r[i] -= a2b2[i]; - - for (int i = 0; i < (int) r.size(); i++) - res[i + k] += r[i]; - for (int i = 0; i < (int) a1b1.size(); i++) - res[i] += a1b1[i]; - for (int i = 0; i < (int) a2b2.size(); i++) - res[i + n] += a2b2[i]; - return res; - } - - bigint operator*(const bigint &v) const { - vector a6 = convert_base(this->a, base_digits, 6); - vector b6 = convert_base(v.a, base_digits, 6); - vll a(a6.begin(), a6.end()); - vll b(b6.begin(), b6.end()); - while (a.size() < b.size()) - a.push_back(0); - while (b.size() < a.size()) - b.push_back(0); - while (a.size() & (a.size() - 1)) - a.push_back(0), b.push_back(0); - vll c = karatsubaMultiply(a, b); - bigint res; - res.sign = sign * v.sign; - for (int i = 0, carry = 0; i < (int) c.size(); i++) { - long long cur = c[i] + carry; - res.a.push_back((int) (cur % 1000000)); - carry = (int) (cur / 1000000); - } - res.a = convert_base(res.a, 6, base_digits); - res.trim(); - return res; - } -}; -/* - ####################### THE BIG INT ########################## - ###################################################################### -*/ - -int main(){ - ios::sync_with_stdio(0), cin.tie(0); - bigint a=99999999; - a*=1000200000003000LL; - cout<;2Yl9$OIKm`fT zMA>(mmeXTfPmjGvitX|A+LpGQNLxz-!2~SYh_q6n7AtKhhPG6Zr*;0{-&%Xmo}Ec( z|GoEf|Nncg8+P_uzx8{q-} zNdT`J zWB!XKd!PvQ>ITvu0PWdxD`}tA=RcTsz{+;0`6W+-javE+VH_hb^z-qtaU)4Q6dpcoEK4BDRchI{QPv~h%2fTUmEU>%XHs`IRyfH@X{ZF*f!l># zOcfj+@}Ehhbh49$_7bZz*3c=$xt%trlPT8p(1&&i$$%O=)7v?#+~AEDw>jCaL_&Zu zgL%n>_Zbj#6amX5nB54gAlQ}J;CB-Wg3~yMsu!+(i`V}}RY3ZRRphnuue(Z0-_Bc zMItj5l-I+Bd%PD{J-DVH)f|i?nR{nA*}mQQGqP=Da-^=5Kz;pZrtjp6^>J=op`o2r zFDR5i0-qAf9PZz-qo*X@3MU9Z{4pr+_n%1*y*~lL!hKfRAKH#uLJMk~A2vS$Rla~E zj0c$Q8mPWM^rQd)UBv_J6Tut+bA)i&Xu{HHLc#;#D}qokvk2JtA}}E2BO^3Rilj0{ z3ep}E6k8({fW0qZ>!V@$5DjL_BQRv%N9-{u{0$HqYWl1I?8SuzOFur`Q}b~@x3%qu z4p=r+5BOmLneN|WGx=`bwk44!Y`$v*!crhW#Iw_YT=-W+Dh-=Ffe=v$%@7UH-iQ0c zGdDd!ejJ`DtJik*+NfUZ)$3aIx|(01({gh7lJjxY@67hV`!H{)2f<(Q9z^3S1EC!= zVaI%yvOi?qf65wKiFh{q;Gp|7!!hVSMi+F{8n&}Py0ny zOC9-Nh|Q1~e>7$Xd><`#AF)5N59q<_q3)yh?jKOneR3BCsG$4QE{bzO@4+7Lxm6EJ z=v;jK>bkNTCgaL)wFma|#46uPVNHj<`@1B)uV+*Ehopx*zi0DZCS^#EKmI<`fD@Iu z==&&e*q72%VcI@Dt8e%hh*~>HU*$kgu4%x$b>w$K9(d)Tk!ZTY%QgKk`#uV~k9GI? z7VJEZu;^ce;rtayByVxzswAc>rG25f>7(P2LWY^U`Jn4X=t7CA9VfsDmlj&%5f z?jh8-Rk_TO!Hy08cOVZ?r$3H*+XzIXNYH%<7i-Xcgo4>a(}9?-**CQQ5`{~(NlEr+ zb=l>_&b%6R7|tivXxMfiABZQb>fF~HQdWcemLp0|dMFXxmE+1~wKMn+nYi~4TS3no z2zC@Eow#2a8n!_X<*i{CUEUa;3nTzL>GH<#5z_J5XICf(FhzB+imyGp;%iw$|3PVc zU>J4tWcAs6 zt(hbw^Q4uMj`RDuM$TQc(1Z4ZcbEO^OX#v;CTWdaR$uqgN8;kY{oMul^}*?@`m;`qn3evXJX0{Wo3Of%`p%9V*8A(u zIZz1F^2j38 zGzw32baj46u{qVhq!B{Qph=e}4aV^dB>FF!rY9r#qmK9bS{ww@TMX zHN|G|3Qp5Zaa6uGXkOg!n>11uv@QOXJX<*s%(a31FIuI~VI2z#soZpb3l`aw`?!}> z0z<dCn)Wh=)E*gKo=EAl$Ngx$^U69;ILTCFU@g zg`^W(pwL{L<97lTk%GeH3jl-NBL79i7ym`8?-pe<7|ZEanz$bYmH%Lg7~3Q31K?-& zG{cj?)=6xe(-Vm=cPMyv8fTx3ZoMdq8G3eFXd4&;p60*ol)ve}Y?XKNx(Ei;$1FfPPHa!8{vn3v}m! zv%f!a+ZB>!_bWs)HTamd=lith5&UoT*WT-~^*lu>|7A=Bz62cqWrsa*h9_+Hzz>js zS!gkE29-hGsA?=U0{`IB1pCg6;8JUFs=wc6!S)4Q0SY?V53Pbat%nRtgQmdlIO;#> zK#TQ9)|W!@sR-NOMR=iBUr4?9>zY5>U-}9$Y`}OkVcV-%C5C5zV0wetDkbS@KQxm{ zFF>W?1dyQ{+Itr%mji_SbKr(&Um#S|C5}u64?RZ6??5BrkF)<`u|>F%)}aRo;U_?# z)<*63qV}PWKE~KiM|ft{6Jp+8!LRpMETQc~EVB|jrfnOhw0|O-OIKd7ab)&>09LF- z7;eBnG2W1SCU#Nyy7*T)%YX4>`7ZcKk^f>?p6kE(iM;Sv4*N^aG-!}`o)4+Xa-97; zRq2U*d#8UeF4c)8B#smBjl3grP&gc(b`~9VWOBQ_s)k2?pbN@(O)?xpL zCjWb;i2d#RlCdhC9XNp=c6qDp#1ygnuwA$Upip#J!*PmWDkw6U7Jj-r`;@HqnsV-MSJ{+jLwO&jw(a_Sw}~H zVi=!L?bXn20Aohbnb@C~prIP&2W|r;7Ob zzNs5aY4{$NVjqxsXcW@pF~&cGJj92E)1awX7T7bo93i*MkXtNx?N6B!*JMW-}g2sdp2U`e!WJDy*uir0a^q3ugtRt zsF(X`&2a%G_TFohUn>_bAVe}J^! zJws8*f66g3h3xAeGzE^@1DI8U+qGSn*VqI1Kt$K&t-jM}>u#FI+k2OrfH(3c?+?pO z9E*B5G{z|3j=DK|Hk!A+OG+&MwY|p5H}q`aPa@uVeg%gvqrAT*(&E@aTn+ zUg`d$@6FK$vIlZN2sM+0k=`HvC9i*UeSatFJMua;yte*pi#ryAMz^rKabM~2JC@Q8d9iR+Ux<0RRKTY z49!07KR8EiZ+maGN$Kype48&>^w)m0-&Ew~kFxp#N9A7xH>al}R->PcB#QcWJsxKA zPn1i_2g>mf_E@mM^@TK!_I=C4RG}+Wk1eJd@>+OvYG@|nvjRig1A{2A_m)z_4qt*v zyS9dzJ;0TJW#soelwZz%XZU_FRsE~$QieT11GRnMet#%~R~Ne2yI%xsn0BFi)|g2I zbm_Z7y2!UFzaIHgWPI9JZSucjru~Okh+-dSHQ~bX;fs{&b(`Uit6-s2c;`sM4u3zK zQl4q=wE%ui&Q{-_(Bc#Ay?G{-jJ!*K-s@R!8qR{`y=zdH;oabqbz=A%xa_@`0RKj* zRh0S?Qax)dkYX8mR)o3b%aj3xddy6MxrvrsYmc>?R=#iuE9RaGy6_jLB1HAcx6-)n zNmTM|J&%}7ZcrY1&eV6G54`KT1}jWaO8s{l$Kk((gahtW*zm{obmS9<+BaL%>(O zFA#nI6pXGFCVyYDx}EjkE@D_eh^b>DT+v2Ld8*Yxpwabn6LEDPQwC^HL2P-2p23y@ z))?3>>i(k{?z&}2IjdX_y$eP(JidkT1lY>uuGhQ3B3OD*IUA}c_1#B;rAIKu>h1*@ zwNcJI`MR9d^0c7u*iWb5k9iK@?89%`0|{~93$f5(3N$etU)*o^H(V!QMR@U>zIW}t&ahH_XuEqC8hIDQ z+j3UhyE}jotUhG#_3gsycL4hx_Fi+&Jp0rAD1Car?PtFCQA18fO1YoMb{J|s=srUF zD(;tqY}+4L7m{1B1!WJUKzmaC=ab1bltFu7FKiNYKTm}+uNp`QV?heh_XXY9siU0% zY$=%)_ltUbq&<})J7+Th#+(gg$P@gJ+me0n_B@yvEFGc^p0`6;ygT_`v%j=#LeTx9 z;@#boZ?>zg{QP-pWiE%d8W~m_v?l1@%sK8sm3hmP2fSxGOR62flncw#&=+Y67V(zV zoR4yrCTJMkCL`KniW4}xeOXvev-c*`z&T>?B?qH1Mk_-wPfQPOMQve^0p+AUP)LH; z9PwW<+n?^U_xAZirWyU%(o)tOdBJJ#mf^9%HG667{|+!`GACJgk1{xt8nQv7?mkSx zms%gc1=E;x{qx7E&*WK$KSCR$r4hU7wn@vY9xw;`w&$9B*#o&|t!BeXs2}l%igO_MOYUR#-ZjSpCwe+eU=p}Q z#`s|5^Oz45T9mi_gO-sVG5+i~{g_NM;67#=8EV+E9pVNcb%KA;JZwX!&zXabX&@*U zX=@qP#FVti)OBU6z58YWx;B}aZ_02tia0--@5+xV`|Z6e%{?wN@Z>XHS00le>AJGT zSMC3k$@deGqZ^w>;z?h7FICUKAEUtb+_3L#&`m)(=o>=Vp>FYk|8-O750|mKb=BVhuEo&Y?FE#}ABdPF={X1nuf$h@zX(D=v*(tM^}M2K}I%D=a5dRN3k~WADu+;K+N_xz{K0K5@<-_zD(E zJ=MoU3c@QC8y6hP_n)IZP-g$b7;W5YxSV}d031MccRY|7a#6P1grOA z>5&kuwgugLL%YBwxaH*@2{%4JCY7f^3%gAA)X)rIed+58M2@h&D<|fqFy!)dMo|3fi?#g)o^};scX<@<9p9; zTh}7ydl)D*pQZgMYlc9jY$yO|PrC^VHtWvjb~Fl@z5v)Rp22>kMnDD2Q9#oNP0mKj zqc#2w*Wd!8paD}kOG{S8ds35$SPcpi$NT(BqB?*Zty9!F%h^BjVH7a|m^`%Rq;t%9 zz|1KHz^p6Lq6bpANUqhph`U0ow~z|@PXCaemQ&6)C`n+Mb+kcA z)@*~#R5B-uS?D64znTyn)wZZUO;*1Sv)*9!Y0)ABL;xs7(9j?Vh7W)==sh`nJ^Hm? zzn+3m7Q0W|{j@oQiQ*^90Ix=fSL3(XQ@YfkRG@a(a&QWP?cH=^M4eyz_oL86My9G? zMAel;voHED#@Rpr4%OunYy?}(03LB@Q11Uku5IuyT1}f+%ejTl0>Ss2p!;~%`35D6 z>kTIq19vD9s$<&@UMgD$tP>1wXZigw8`l{~7F7hm`^O0X%H5G_gU+n~>Ev z0!Pl9fI+iii4|Q1$v4pKm~ZD>b1-I@e5Zo>>B;FU{1=lqqz>lUaQBvNJ4o#LT_((L z^K4Q1&|fiA#lt@hB=4d{vB+7W_W|0rC;=q$wV_`l<6mT!e;j%fsX>O_8#eNt&;ZY* zQf6m}HnRsA`Xb#j9J@X@iTWU(4am|zR-KL0jH;{t8(YWFzmU!sr^rV`H%By!s+|QY8wosJ8_{{;>Q)y6!-s;K%nAJu~Da?Xhp-wKFm+L0LLs?E)ClJeb%0T z3V-s+Cl}tB@#?nUcHxkRFC6IVLZ1vwBDy!&8~)>#*%z^CX}zHfaVD<|VdkD6u7=eR z@#4{p6)PMd!FDr9Gx*VldJIle~<>g3Hw9I{(cO) zY`_16W%iXGe;TQTi1Sl48nuZ%5CEs17p4P_(Uf;#+^?biy3YXxLu4rAL1!X=e3Bku zmOJ;-W$?*V{H22;6xF1_y6qqtQ|-tNJNCbyOudI5a^UlEHBS>Po)0|+0a@o&|2Yt9 zMs|=t^gHsOAxSOcUiVGRBeKqiZUAiLtC9IFw)$+r)#=IDx4j*=g&`W7A*j0o(=aoFashsMw9ExKS zai{;sWUa98hLJfM|A+xUgZUw(Och3kzb+n7xJp}3s`nK5^FyKk0S!f*PSj>h+X*J*i%gsnH}Wc`GxQjwK;JCT z@l>Ds3?}g>42B8MJQRwJ7Nn1xo0U=D+{`4Y!@I7jQ}%X94fq|GS88f)Xals~I~JTX zcxZ0cLP2}q2B}h|&TFpe?DTd*KL=w&H#k{oQ|r2o4*VEQZffy58fu!FeI4GrCNYO& zSyPAXt7*R9=k0ie7kKL(4Q(Bcne~p^M`UlOqegbr)Yo@-J3AdS+o{G5M|JD^*0znU zj`mKkufEOE;cafKtC5@90O@Fx+v?hy9UHtIodlR!pMmxLRcUIQWJhPyqh1X+gRN_B ztA#}}=eCgAcg!cLwEV=+gYe))VP4){j#-6e)w3N7Gw#U9B>4C+)Vy$cMq9@^2XN+c zg1K1{%JJ#`UjCorjcyBS4>~a4V$DxrXCI3xhnn6WmF~d(V+}4Z(bK!sG)VqSA20CbMq+J(|~OUjIVi+CcGDL z2BKi&={*a0q<155-^DeeoBK(N-)cTEsoyo=dIgotPvCe(K$-J{aG3XOtsV~%0%POJ zApUe7IT;Qk6zDQm{e5&!&{am$nM*j~-;%faL^wPrny&Hhlh+Qq2czlC4_s9q$)Nh> z!-n)c56e$9vBKmyvybK3ExyeYEVE63xL(QQX5zRdK&yZqr{Ef~d703Ucv0Kuj$>yk z{~S)Dr*wpV#ntPV160l%bpK|FqAPgH@}$)tXPIl_%{|B)yfDFXI6Ci27|-76D&IZ5 z;cz_Fe@&9jZ#EYt#wB)J%*4!Qmim*dw9QCNLYX z=W`(60Y3k#^5M3vfNjCTTAUyhStnFbp-U4U;CV)I;}p)bp#KWdL)#kI(v{G}5!N7` zODq5%&kke*I!k^S4&O&S4EAQM9-thYn^AsNE$^oGcna;2{G`>Dl0m+iI{4#onEEjv3tZedYLzhiN`NCq;+!jCm7d{t+zmE+!S5w%FWtw{m(`e2kkn_kl#cD>AaUS4hckP~IPN4r ztdBe7JG3#n7C5;`lN=sDm+_EyzmAFd5{mPI8vriF?oqgyC90#DS0pHY$iUwN{Ld0T zTo(*!xZ|;keD)B^9;PzL)yF8BaYn*?VM3XnA=L5Ok$i*BsyD-7+BgfP2XHpvY{mH~PP#Mmd7NLx`E{Hx;_St_59cAAM{&M`GlcU4oS)#d zbu%^vXBy61an8p{hZEP;YFfs1JI<$Z?#6ip=W(3VVb3a@bbM+9#(vK7z0F?Po7d4K zH`UcNd%ShDhr`Y=cPny}U$eIeNP;K9NW4pIN5MPH#jVi2rWw0Oqt(r@lz3}4#DH0rrKGI}Qn@D3 zRJMA&a&>DXms0QEROf9cD?n}7fPKkY)!YfO%W9f^UiK5Kx?2VG^L0oqHJfl_3;A|Q^0sbh z>OcdqZjo=GH#RZ$FUWOzWvQmUU6LPZ2jm2k>bz(R#%?r8-j0seHX0SAhIZ`Ic>#S8 zXyTNVwFd7> zB02Y2;UL)MV{E;(0WFD$U~Sk4$3beBwM8xambIm}Q*PT>hn>goT3fs=b?uKJR#-c{ z0^w&?h@ic~W-oiq+S#^~+<>3V z#eucl1|igkXTmOHZ;WEvjk2+}Oy7!=9w_s)HFvrz3MxHq9?6ZhM+DZy9=21tyr`+I zQ>v}$^k$QT+nHBEA7 zah=;;3D_NA-c%>Gp}yXlmf|X@DpPWM7V_!Z8BX8aS^W3W)>VOWfmE>+jl*t8l^$r_ z_>kD#=>p(?@?7e!EOVFKF`w@+gIy~4(b>|up{_#~&{@d;e{n|ZkOLj)9Ai(NRRDgq z6EvN2eckQ1V|SP~;s19Yv^U>{^V8%1P79cxbFws?Iqgnn-SMd({NLmSv`#Yf3S0T# zz8OwNk3DHeDiUV)@AxaqHTb93{~8w9g=(nnZ=xDe`@fGfBV(TU-`P<&4|j;gP0M*= zXq#8p*4ogtZeG(Jix$qSdt}|lrq&D(o7dRZ;+?nN+ax#6BPxF1l+)Jwnwsl%F4`T{ zxpf_Fot<-Aao2W(SD@c9UlqY{OVi=hsAm8a|5e6^V7noSdE`o}EvQ*E%1;8|%}?rUHU)6sWO6eqRI9n5r$(#X_7 zpy?N+hBb~)M49QARAh^j8k%d?G1FUAmWUkITlmc(<&r@LQN+~rD*~i~)YpJp>&)~v z<)_CwKhBg8y_d^Q#1~5#}SH zA?Z|xqGmi1!OZW`lZultWyYfg%zXJG7XtU^*(;H3OU*;@A@j#NpsAGre>mTrUGF9yg5*$_FPl|Ar+S}0XFnrvPzX2Rk;C)yJ?>h>x*<_1&1o!%6S^~GO zYipNkn%6NaX==MMgyAfuwT&;2sSG*vX|LjQ<~c#NTrJ7IW{51*V=(4xVK)SQWl@Gfd?6pv!&oU87!=!+e9=x^s-sv7`uoB z@_)o-g0%qcXQ5}w6Hv8wFP_)oRqA9Da!rJ&f;Z^!r#PIJvZCrpU>Uvc5tbO=|0vkU z(V9R0;D;~ZLY|L^euysB_?PS^UeS3+APdtJnk^i#z z1H^#EiOk?3B4aj^MM>^-7G@#3DG0N)ebd$<)nW13iH+y@Bj3PIZ5*EQVezjCrJB7p zEdF&$ThZy88f0k$LRkFI31U+r7>Cd+whH3k_z~D83kV+VVexMg zN_t#<(}pH&XT%?)@>y{$Z5ujahF?-ub13&Hay+Uzq6lz+Ao;^-U~K0Am1dYAJL2&4l}a;0G|zB=pgBWapXC6R z=1&B9fw&Nv+=iONU(ng&&l2&TxaKUWuBNWhtG4zB1l=3gJl_EQkf1NeQRnf>b&XOj zHd@xR_;UpAgKJO|)wFuse4V_55e}XZi~oqq55{3TtQAD$6fFJ%!4AbWaG$tHnImxx zpl9)yC^Hn-fW~C;mnm}$XxNX5ze1VgaSe5i$b3whlW`554`UZ8{;!lfHC5dYif5)_ z)b}*yX}3zvho*KS1Yo12Q*Mz}JxnH|JfoG6{nQc*FFC7~a6_s^R$g>&Dmr>JuQ(3A z$iXnNDooVZ#>+lVRe>lbVo^4cmoZZ+fq4Jq?xL1X;-ywm>ce&x`fqf30x!3T@@Op+ zc|oEn75%7Ql55s`TO~sqOy&s5Dgxf-J{FRlBjMS2%WLS|HnJA=F5cs<%O-st!n&V@OZ1ZUvKsrcH|$s?w6sy3mX1h9ur<|1Zu!*D4TqV^} zqSz$8xYF(Nc*^sn;xgeA{GSCv~TudXUAFD@&T zT$RvcvW`Cg&SzT_z?udI>^s>|}Kip$H`HOA6P zcU5&|nTK7ggA2;5E2aCY(by%$rNvcjx?Y6ls#@-p(PKJ}jAET(FYepo7U+#btTZvYRwQ7u>-c02 zkE^JF%{0RDN~-eNtwvaG75l6aQdG>%RZt8iW*Lh-QAM+jMFjr-52#-LwVPCZsipxA@5zI^@X4T3HcZu8MK{J4# zhh-UyNtaA1ccoOZqP&vL*9*xVE1@(3F14bEVhfDG?zjp{L1lRM2E?caFRi0XKmE0@b zdDT38+@&LlUXh)<5>b@mLGcP$^X};K74sJ?9Iu&ku7YT6=_Llttoe%~Eqjk%qQ<}F z#Z^Vr@7cY2k*j36Yo$jjz@UX8&IJTGHFN3+)ny3vCDbiT+-1zA7kG+_3#zhMt`2#? zO`Uc{6-I4I$STWcd3rhebZI&4p>{$FHY{H+E^v9OR9i8(4vq?o((=mUDmN?83wg*W z&61WCyCisIpImJ@F zNUac=kCo_P;i@I&>Hz6srFt1T=Zd_d!dzBn1foWntXzjtJ%q3Sd2|$E2ksfHN(XCAdB19mYQ4yn ze_u5kQuqy9rWcfB&R1N(yDA1WPZ?XTmzALHaZ}uOJ65d^VV1~eq07}NCZ9_-cxz<* zLIq2SPCkzm(@ff595v0nY)Zm2?VPo%5;HLxjEwmTGQ2vcR8cr+Q7*O?Xrjr1E2yW4 zi6hVFdX~E?)OjKYaGm3X&No4%I>#2%Vy>93v(-#WCD24VvK+(Gj>S(kQf5kR z_0eJv_tK?C{JKXH=q(N2);b_&nI8j(3D!#dorW9PQXT!GN1a;V9k&K=UrZ@07p}=t zFb$y^=F`QTl1CRyN-kZjDV}1w#--%*>x2{xF93KjU(G8i&&_qi8w9|Xa=%DS1m`kI z%}h!u#;kmWC`m{uaTmG}Iyi^Kl<2_?^F=<%te`^74w3P|OA#C>Z%-+}Xrj)~lT&ES zD=4mn<4|FWsLBdHK62JmI0jEnO>r-Se4^m_)RbJo(}UR^=DT{yH7TW~s-o9wx=_1mi$|FQKrj)uoOC_!*C%Q=hc=~3pBTqU~Fo`6# zQXZVigArl|vur~H^Cembnw0xg1+&y5olsx9Nq>Z)r3QOfbv8nxf`!?mit0sC=Z21K zDVEU7OSza|X<`zXPRK7rC27E zRl%2apo$0pTssDwjeS2ISXK@n7T#!%6uj0|i+Ye|;2$2iFdAQ+^Lgs%`VN*3$!K@iQj!?S4+z)LPd@H^gF)ZsABa z3Z`e_y;|=(g>(X9E)ThQKnp!@=0rlky&Uy^5Z~O6ufD&ScY%pMit3i@ZUBl++!%?y zJ7Tt48?b?e8yPkW^l5MQZgOYny5>g(~Hq$m0n{SAYCZrMwk_@*rr?Z5Fdys{D-O7rmVnco^&=V5w zO1L}0ge<r0Cx3a;`&@sDQZQ zsREEV1ES`E-Q;Pe&t4};lj68|`>o)RY~?x>Pt~+YnFW?p3MqLMw}Tj;J@C{f-0F=G5(rNSCS^aC?xM zu6_qR>Jb3OBF_L2EsHbLQv{Z;n@qRdvT|wWx+N=DX3o3kmRrmwu=fDP%t}eXXo1lW z5U4-8o~u84fC$>`!@ZlUtA)~0i1ggS-zEZ5^ivI2C%|Kva(z=mF)c({ z^s{A*X%j6nt` z=fhb9`Cke*Ty^|?4kv|i9r7LIoSM$0<`~C8z%tPrMcuV}2`bY0CeUG45p`%^?IjSG zWdixAL#um4XVcgN%t_Gg#Yr42rh5D(j{2c}`IjK52yp83!l=~mkuHIz0tYXA9(80q zREOU@MB7KRJiT~ISU$JFgE?M(QwN@3@YZM4wd1)7#{Pnn^x~Wez$QbE16RE*ZUn@J zAKBvq4f(I;krIbipR5Ru1Jhis)Od9QzGtq+rxJxaqQ+-s1P6RLc?%%3B2;q>EHx^6 zDV@O4sGbI-DndoSppTDGYE&;qaEJ;M^(OpqfUQMisXaxK!_Vgpp) zF+k|)rjrqf=3{~nS?n2<-^6LPKbnt`UywEyV2nOAA9J99w}mMdN%Nmb3z~$E(Y!MF zxPwO^A}vT#V|kH}tp!;4*k__yMAC6kmR^uY94w|q_^b2Lta>97ReuBLF5rCbZ{Sn` z=iuMKq5k!81m^|hNHhJ=+TtQ_9jcr7=5_j=0l32iAVwey@N#Y=BwGe&1J1%KWCg@Y zn{^qPnLxo9%=xHa1t$c8MmXQu6(dWIk<}g}Yx>_I%N8SRbBwI^7+K9RvW~+(f2&@} zF|szr$f7qC3O=fxvm0Y%9f`=&S|^sX9K*RWhI4%k=iL#`U4Lj*+!CM%L;WS=;{(S+infHO9zV9V2T+j4b&ovS2nw-jvB@A!d>x zM;%(53LMzkL~r-N7XwBekAlw-9{=Ex_9}b?4)LM4d4MSD&?4k4z@Rp8jJ;n&{Q}5N z;W?D?WD(xifs>3SCda{Vzr<*;HUiP=CHRo6XF&y~QHK`QX}opG zI}wH=(n-i6K-MN|8fyAbVwC@khcD)yKS&Zpqi!do=X&v9AAIRWJ}3}hPTwSbP- z?%HVH3>;G3V)_>T8V^m@ZcGBnv-DA>BBsC72x^F0*%cr$Ko+isG6FJw%-kCzt0YEN zMT{((uNq}JuO>@fDI7wb#C){@kF*)+&FC&gN=ckA8g$?z6291+euQQQ)X(jsge`UR>y{MH$d#ym%AG^KChN8W0 z7{iLfJ`Ugr`_O7D7LD4JT2izrSt0iLJwR(=HZr9J8>nL)PonTFw~ynhW1PStK3ePQ z++uAQTW`YN0a-g{Xpw{<{~eI7TQrE)UTdd_8e2?T5r(q~F>+{egWdrm>V>_~F^=6R zJf(3S!#bKQfkXA8H?&~eKI+iom{#L4$AXUf8o37V8j0vbaUk~C5AJI*c#9}X<@6f> z2RfP#c@L0w1LPw>`V0^oOzXHkn(8`0Dk6|by>8WP_%6zEKPKu>=c@~f;2XxMH9r!y zG@SexoLggXoH00QF*rFfI8$P97RBJ$VsNr!a6Uo(47FI08H4jd49=Vw9Qsv&k(iiTF!I>U|(;I`68iVuVXq< }QWM7(?~d7#v#+ z&gVztEDXdz9vux?KxVX)XGch>%F*u^H_O0z;pNf2 zV8PQdIA>yTcEsSEjKTR_49=@DINM`z_Ql`?VsLiH;B>{{JQIVnIR>X|G*0%W7+;N{ zT5u$W&pR=8J`{sj#qU`?Q8)p3!DR5zb@rsl_vDINEVym>W|TmD9doL}ybD zazR!zoRA1adY8@^K8r1|~*6v}P6%Rps*iwN2IQ=PPa<4fn>h#^nj6wVIRUvHkW&V#y8x+B z{SZ2fmngAJ15Pn;v@uTbsU^-xlH~>DVL;jqR9gViBEP`-XF#4a;CvsDK100@10t(; zSOnGEfM|OT0&)QmZNFDQ;-QEZ`32-AQVj>~_6W#aK(tXCGS|?da{eM9T2B#tz6ppn(<468re>**$3loxseS+)I%uC?Q2mS`ScmD5 z(;UYU1^EOJG<_80dSZz~=R79{a!(AT3=nO+&@_CMuW@xg4mEP1Ry63 zI9~?DiVBhHqF&zsWV?Z?7m!6LM?a;lh_+&dZ{UaG^cu9Yk(Doy*_VOSfokf~{~eIy2F~=G&qj#VE&nS(jI!uA zx7tdR{19)t!oz!X==Qk)933L5FL;|}kd=tJMzTTH^?+z=Mp5_M0BJVh+zrSqu+}v! z1B5YWl=L-#R2XEfBOF6}Z2{y315OVhLk5d|1rTipi<+uGJ5DxGy$GBxgN8I8p+?P!G;h&4p9iGgKs7B9 z7DZ#}drkKPLWkf(y@}q#=rGv14mcIS(OdaZKz2pOLEeJ&vOgTUbovmmZXf*WzL{Qy zxM+?h9na$O7bgNOs=dC7Y!M)O|N1r{+B{0M=_`QDGSur$Ktgjg&ZNg_K!~l*=K>%v z>RzY5UeRWtnl_m+hk^5F0MTZHLi!Rw_JTQ$a{_WdAjVOz0gyQcK0ZJ;N2G(4`2m?e zH(KW&K*)QA&(o_d>nYlxFYCSFE5La!!Uyj*;ID(cc)P|2_wcx#9fo>+4^;X*ilqM( z5N&2IYC#{fr$e`xIf?OoW4+y{0%Du1$s+9A0a;;?wGa?;72U_$2!d+poVNpFjI>|n zIL;`Xe+PtSmBMt6o}BZEc5lgI3avw;^k3{sl0!lKMP0e)!lV^XD4)JA`=( zgRn=g!3VtBnY6sAwG@xQMT27Aj@!^mYoz<~B0t_h4v$|)e&wZVtwKkWN7sw*WTZd( z=%eID9=RlIaeI@u&bzS*KWgNUSaR$NWy!>_{)L#MpHUovAf`5pV#N*FV+Q4 zbaoWVLOitX?U3C~#7o7~VWW`mz)xK8s$Lya1&l&lz~3iqK#T@uXW@OzGF~-Q$4$;( zFU`MhCgB~?c;hg-7V3s~L`#`Xq*ft*M~PqfOP#)2saQOC5^;c0bsYm9RT<4|bRtdv z*peuP@e&<)1XWwAYxhao&rrGY1gvk9=!0r_TUb3k!fphKrwa+|kyZ&0Z*VFneuf5+ z+>BpA5e;Rejr1!)Jo~#*ZtRfoW*}+3_Yux9wzR{`U)L0kz$vAw5)VzDYVpE9P_=vM znR`k7Djl4VUJXs+{$F*IQGHA8H4XG8Y`jpLloPVa2F4uUgNc;m(OUjawg{lD9kZ4u zUU|U*^Q?LU06&xL^co-?=mD)pB-z{CY{2RCde^Iff=XAZTcTgkOQafgOf@s=<<c)K{gu3djcyK@nfj4v~HW-ZiE z#lQfCDy#8(OlVl)aaZTl&y7p)x*7F%Un*PuP2*!o5RxM=7KfMN&N6kb4w-5k^-g$a zHW?uLCuA!B@s(6xVGc6XPE5d68oaPQ@-BI2CX+nlzu}$B<@Qkp@fW#^4$$Dc1I#1u z_0}ppDq5n)@NYD>wv2&HMvuG&pKMOO3O}{gEFcV2rN3jI>x1V$#LKOv8gQrAHL9}d zZRBIV?w-iTe49V#2Wz)?^6sUI*7%7Tq}U9g-!#_X+42s&ZLz7YlY1n8-BViw>07rR zalNGlLlC*Dv4CDX-+}kDQ3-$lBE>@doLKg@;7wZmLy){o!p{b1hfc4)fHaK(5i16@ z-UzwkP5O~Gh|S$yy|G0Pr$MS&?ySeVNF{s(vo2zI{vu2o zSH^rdJZWI~SOK^CIDSHn+tyr9&8jzVBi4_Sc-)6&Z1mQw&w!_liUH(j1a=omB5vfm z3yaIRVYvgN8OQugsBS}A4{MgtJ_aC3xM>q@|MC007N@lD4Crpq=&fmwat~1v@nuuI zkdd~U3~sD$_oCPOGL4;Pj5dR9@wo-*KpKWv^=l4VU7|yAB+xM_>cb&iEY}5{nt$~{9ThY+3}4FNV+#Ms z2&aqw-7&tPffwr0w8hqKvMGaVnA8I3@M2`dX;!v&GMt>7Sb5-#L z58epIQH*X*8$C~Sp0U2UqPMuZp`-gbtv&enk42QAmK-Cxi6LdIo~3JJx+aj7Za0h&PUxKC5OaXD%v4qS!%M4 zU&sNK+H(5%HY$i1M(j>sn>Juyb&h0QB5AVKg#g$6Z_O32KFIRA{-ga|_<0kxkzo*_ z_ny)h!SUj6F)ibYY9GiETk-1Z262$@MAIM=9ULO#FJ2M8zEfV0_r0LZXKtHur@~i{Pvg!BMh~kr5j1>6Nb5jR1LF82r#6p58|jwUTPS)Z&hIs-%Vp{i fcxM#FGKe4bjUvMoMb<{B(MBCN5OJ%i_xt`IRWi?Q