From f1293f9795fda211d7fffdb84cd308424c2a184b Mon Sep 17 00:00:00 2001 From: Justin <605492+justinpinkney@users.noreply.github.com> Date: Fri, 16 Sep 2022 14:01:18 +0100 Subject: [PATCH] Finetuning (#11) * simple datasets * add conversion script * finish fine tune example * update readme * update readme --- .gitignore | 1 - README.md | 28 +- assets/pokemontage.jpg | Bin 0 -> 151156 bytes configs/stable-diffusion/pokemon.yaml | 133 ++++++ ldm/data/simple.py | 101 ++++ ldm/models/diffusion/ddim.py | 3 +- ldm/models/diffusion/ddpm.py | 12 +- ldm/modules/encoders/modules.py | 21 + main.py | 20 +- requirements.txt | 2 + scripts/convert_sd_to_diffusers.py | 636 ++++++++++++++++++++++++++ 11 files changed, 942 insertions(+), 15 deletions(-) create mode 100644 assets/pokemontage.jpg create mode 100644 configs/stable-diffusion/pokemon.yaml create mode 100644 ldm/data/simple.py create mode 100644 scripts/convert_sd_to_diffusers.py diff --git a/.gitignore b/.gitignore index c36f75c..f010ff9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ logs/ dump/ -im-examples/ outputs/ flagged/ *.egg-info diff --git a/README.md b/README.md index 58dcdf9..4969a48 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,33 @@ # Experiments with Stable Diffusion +This repository extends and adds to the [original training repo](https://github.com/pesser/stable-diffusion) for Stable Diffusion. + +Currently it adds: + +- [Fine tuning](#fine-tuning) +- [Image variations](#image-variations) +- [Conversion to Huggingface Diffusers](scripts/convert_sd_to_diffusers.py) + +## Fine tuning + +Makes it easy to fine tune Stable Diffusion on your own dataset. For example generating new Pokemon from text: + +![](assets/pokemontage.jpg) + +> Girl with a pearl earring, Cute Obama creature, Donald Trump, Boris Johnson, Totoro, Hello Kitty + + +For a step by step guide see the [Lambda Labs examples repo](https://github.com/LambdaLabsML/examples). + ## Image variations -[![](assets/img-vars.jpg)](https://twitter.com/Buntworthy/status/1561703483316781057) +![](assets/im-vars-thin.jpg) -Try it out in colab: [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1JqNbI_kDq_Gth2MIYdsphgNgyGIJxBgB?usp=sharing) +[![Open Demo](https://img.shields.io/badge/%CE%BB-Open%20Demo-blueviolet)](https://47725.gradio.app/) +[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1JqNbI_kDq_Gth2MIYdsphgNgyGIJxBgB?usp=sharing) +[![Open in Spaces](https://img.shields.io/badge/%F0%9F%A4%97-Open%20in%20Spaces-orange)]() - -_TODO describe in more detail_ +For more details on the Image Variation model see the [model card](https://huggingface.co/lambdalabs/stable-diffusion-image-conditioned). - Get access to a Linux machine with a decent NVIDIA GPU (e.g. on [Lambda GPU Cloud](https://lambdalabs.com/service/gpu-cloud)) - Clone this repo diff --git a/assets/pokemontage.jpg b/assets/pokemontage.jpg new file mode 100644 index 0000000000000000000000000000000000000000..27d1df39de7edb29fc01235d328f00bbd42038a8 GIT binary patch literal 151156 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%0ApcBGn$Wh1&sg-`VB zD-N&2SB+lALaO46i!mufZmHYzR_!~;KX2QW^%jbe;#wIBgZHQh@7K9dsH@VANWU@2 z)Q@*LMV_rSWO*vUD)tBAtGEh@ibE3#A`60fwsWRPQyEzRbKBEV0h1w-h6w<713(AA zk{Ok}(rlCf91DoZANo3{OQ1Roph$3}pG{V|gD{=v`t=>-&NmT+V5qmfw%kcQ+A0{b zN5d_v;7J4;4nPclhNQ_PHbMqHG?NPnpP3|{{q*$}h{R>xan+Z(r-Lc5rDlw|BdytZ|)Dq-pQ3G8#_~-*zIv5ui(nt;DdTD`2Go1i$Kn-qs z1keTi`$pSyiyI?y)gvVq;IY+N5_9k!P@Gj#&ux=sud~y330^oM_Gp{4L+_ zIv%d%#)WB9dT}HX968-^MYuOzhUFrCqFJf#ltsVR(U?{uqt~KDU`L0z501E8{8ub` zHR*b%?Y-0Yon9?#SF1{XmiBT2ZtJsulKZ~@0Jakg6%BliN-@jq(*FPwFS`s!-LF#G zvR+mdIm?}_{ixvg3M!6F;T~7I_8tVJq=EV4vDU=HBb(+0l;n@-&<9_^9xh(E6~&#i z#j7BBq_9=yvYCJKx(NqGOb6GhGT8pmQ>e*YOwXp++_o*}w=H|SY+Pfnv|ecTXD)U9nq3 zdZ(X|XnJN?WGYW=$1{C!G@P7b+UAK;Nz_q%nTg}&myNQj%SW{->*96ljz}&LsbxKh zMW`b>q(n_^Y&dw^wJ|)W>XHVy{XntI7wg=>#+iP!O!>%mF-s z!6O;gB~G~Q+)5Pqr2QiK7ssmktzL4BdoKC<8Fk@*88$Z;t#elGO8H~0p&>3-irD>| zg}OufvqE`+ob<@Kjr*$|bhInd%BHH)mDB7w>eMRZ&%3J@rP=#)K5KPhS#$w(0hJ%Z zIyL_QnXU66QPkU>6(`gRMaT4?)2!@o;rq;b-eeAw%U6^!xc*U~MzNp`mF1ucqn?4F zFZq=zA075uz{A|1XI;fo{{Yb?bs>nK^V(c}PPneT@caZX&x=ox-E5cdrR+JUK=Cj1 z>&f3Urx48)smwM;JL!tzWmlE4oOtLZdlAq4CIB{aH6()f63HPWIn|L&m4x+Fl=li* zC~E1WsDhykQo|w#Nf7r|Q^|q!I?1IuQ)*FmYot<&lC$I#J6D4|N37p7-8`a8dJIo1Usn54i+2!_rnR+w%qwTLo*p}m$Pl~(}T@C5Q?&$XEe#UBZa`9r- zI_=8ZD|w^rZueix@95%pcMmY$W4J&~A09XfQelYUu5?k!NgIz}aYWRu_ej4%t-VSW zY5Cy&+ONOnD5pY&fBSmTev-T&&v^Xe%1=HVC8!atPS)M=Gh?gThK`|E*P2vh{*7X} zQ|XnyRrsSWJ2rg0l-$2{#r_f`uJg~rI&?o_+WXG3Ksh0yr-5_mS?A^T!P4TUmzfie z$GOehxR<`m@nL(ryzTFe#D>ws&AD&eZ&H1^3wyu;b(0D?*f4HN>30<@1HV47Q~%;@#D9@f9w~cQUoYDhtgl(MxnBg7t3FfMx-| zSK*fBfvs-wEWA2=cD4F@Jr`s3`86!9y5iNQ_U*q)EB#)t)7#IdO#vZgyc&AMr*`>s zYu7r9{{Z;;{`341%x_NhqwM`bQtD2-Lrg|N z2TcfJ9Q7s4jeslXj%5D;x`TSd$PxQE{eRum+SIN_$RZ|Ar1_-jEAwD!pc6|HO2U4g z>(3{)rC=)5!5WB=M<3I67mKG8-q;qxBkoqaE`^>YWS_{tE9 z;_W>9H*l++JGY=~+qhXYG{Um?DU7h?7#zXY+NM?CgvE_JYI2*Jj*8n_X=!9;RUbA^ zdFtA7l$F^Rrz6ObNI>9>9|5UdiuPnuz$J~9fMk9}SY!}>9y*MYlC-%EbGkVSifz%s zS!LZ@1}Cks7WZ!3YnvxW>rF}j09NCfC_Yn;+Vifq^)nlBi^#@SpP|uhJJj*tbv{R8 zIDurhaW{lKb+A_~_FJ87n{K*gJcT`KVLJT^N`Mf19$NAWI5lHKCvU2}NnLx6w!K)* z)5wP|K;M&-F;>AoBV1FAo8gKxxR(vWFO6Pq_-(=e0D8r1m;9{Vpb(aOWP$yb@HG;Q ztSjmd&G6SlwDoT~n^ql2tz4b>c8)`Owbxw!K7b7W6%n_=I zn4RNq8RrpX(k+EBI>y)24JJ%=Vd{sT&KP+U@JFH*=w&q%F)Q@PrHO8BR`VoIvI=q;3w z&1b5nF$Nw5QJBbn^%~_j9=Pq8GT@B+$#z9ue5UIctNGbF$|@hc>=>JS@b{xvR^7Z* ztdVi^MQXOk7e7yOQr{lSu42F19Z6kdQC`;H;Em-DsK=dZkKDggzO#86;5DjH*9r^e z`Nuw+mD&Bjy&(t>->pS%y6&};P?TfrUwzG$KCEC;d{T>V)&0Tc!VS+KmFhZ+1wE>= zvxW0dC1=@aqH2nrwKJT`@kBE7QL)RiE?y?;WelW+>N>a9#gvvN;VVy~Pm}b0lKGB* zdg}Y8-F!88^vAQ+cA#3=@3u|RW~1C&ZtX{OwcKG^ib~2kmRM(ryE;1ZBmV$*eRqc- zuDOeJ47vkCod9S9pbOG80Zxlt2A*SZ%Wqdj2Yx( zkyyu~1v= zQwxUQuBj3jVS;93H6)S%Rz8UbTJ;byBLUl3wW?F2B&ta(_Oyo@Q<`oGzj2X$zqvN% z?6-@y*T36u6i5F6D4?s3qA~C+gn)hro`q(vir$XTnds=S6!z4BZV#q_HhX9TkK*qR zt=wAShUwv*)whFo0#(1n~t^$2C!~=b3wT_ z)Z)#!Xk20Gt05gMapI4UaT~KM0yX4Y*3(l5DscKQRQesyPTDsJW#d9?NhM}?lG(PV z=Z>1Gs;8!}qUto2w6!e_O)+d|q=VAH;AL1cpAdDTrIB9_O(o%c(^pUKe#31#Fv(sg zs_Fj#1Imwc+V1riej4#Y*J!-WZCEOjS*e%VucVi(MN#b>`*N!zqlGvO0a611GaMyC zFwek~jAeAv(Z#D>KGo8%&1ukKsYa~liIHhpT|0A4+Wyq^eZ0;_;koHH7ZA4K+gIw^ z0X#Kdv8&^ss;%!h`g8sg}T)9p)3qgj`a zk2SYSF}tbsve6Sv=D4D*HTiRQu{WS)@2oUrRMQXX5O=1MeeTWqz&h zRF@N_e`8PlO}sPl=IzCAY1`U2cGKN2EIV&>S}xK>{o+wp$4q^7P+U*Y?ZVZ3C*a#={1@IO(f7i!;=82OV*+GXkHv2$yxW`tFSx)QfD6Ut zD`~tgy3TS5^^Z%7%m23gsODJcUFVor{q9?7C9yfKf)irUm!sS+Ty=J}=8g0_Q1>yf zBW=p`Tn~ecWK8IZ+~E$YAqZN(CjFfsPFQppBoFI;qxt zj$veL&TYwXFrTB6vJRzxA8;+Awo@R8#cwc-?4#GJ!2J^LFTZV=I8-{UKtcU5%D#K( z^x9{0p0P)p)(ty2qY;{g_O&y4XubH!{pi|`o^hS#`jdBxaKn?{!k_!pCCGQ4b;u`w z4R|EN@C`IUc#?2)Ro91OL&fUSr)-sU77X>P+K47E+_ck|$c;r8h>o~BGyEt{`U?BO z%)z4@tCb8t0T9PRHC&5ct-L0~kzg!(VfzlyyxQ{*klajUwfVwdl3Pk{M-JL77gx9W z2bfGS3Ow^U_hKBV6~KCCeV1_;uc(ISo+JDupH^NRlYRpL)&w@HCs@X**X%eqs&x&W zxs(iG977Qa>iIc2Wzp zY-E{(B2Bt95-Ms3sdQA~zULH7DcnYwt*)mS(yF8@!Ho|NYQoGSZGE(FJ4S~p!tMy$ zZa|OSgwnrYUpsPhSrGT3RapG5`Hw^YIi^ui3V>wy{XDKBzCH8>q*YXc}=UHW>?EoeEm|`obURnVgcw`2TV1BGXhsQ%xHuP?FvTYw! zTNrrtR*41V(J6!wPR-uv;s{}&C?(}_U(yVz9|8|Ix{6#M@yj919ox4;yplUM zPwhv{j(5vl(Zy6sUxPyZa%Sv)C-_Q6BYOH|Zw~oBJTg+h!m1R$Hta|@FOHPoN?~IC z!o+8>WcphusRjY66QcV!2^qw%3aKK2ot$1{zP=h&8*kj=yU4gqz_$f4j6Vr(NRlh2AB+dg@I;Ps&I$ zV$EW7bQ)y8qdYe=;&%Cc{kJVcC3U$|75h~ELiI$x(yI)B`1+DceOpwyo+Aa79|o+8 zA=<8-9qT4&2bPJ@6c&U@iuIZt?T^x$TW_IPSE_6~F|E*jeipG2-bNEm0%&`~PJ*uDv4kX$p1mdmb=+75s|{wwhE0HC zgY{a#W3cE!jUZlSE54x?u`})1bC!I@;&BbmsmsEGW@>pDH$0_=^ai^sn}QFNC*(25 zX){qN@`GUbd{I3~T9BUG?bF0)^r8lZqEfbj2JgOYMzW?E4+Xt~) z&}B{ALJQpdvS2x^iNk+E47eUSwG`om`kkqr5>+HtBY*9n(Q_^xx@wko;&y{ukf6<< zL&sn0iJcp~Cx;$9QxtQ|{{XKE>t6a@Z64s1xfOeAIr{S-oKv|TAT(Op(Xcx5OH}?7 zH4Vq4qK%ovY@N)}GQ1PK*^>%RZS@%A#fqgUsJ;0M#9)FQ?$Jhz$(91Dkwbsq@u0p5uAAki#p~QH4{j0FX zSexsoWgQ7-X67Ns%CDA#98N^$!+0GDVP>+CTC@p=NkUKVONw3x$Y6QUu7D49?ZfLJ z$7H7uUZ@eV!ks?%O>XY^M&nE7xEAx@6lT0iZn^x9nU{5YC3PG&_8!VB*{WJ1HyT|F zSfoXQM-dE~^=>)^%@-ZZ4)f91F3RERjlru*c>(S}$6W-+zJVJHouHisL$-n}$SRbS zySk>Jn7FX0TLXrA2=_Ef1IEgdI66LcNU!1OO?jJ3O`Q@<7+WLXf-f(`$PPWW?eo?7E4bORG(u6r&;f86FEOh2or{nHVGT$PzS!*nw zvR)Sj<_zI0L%f>CGlGR%iK58G!-Mp}5Z>c6%ynxc}HO z{{Ff&XG9$94NR<-TW1xsUo_QDWk~Qp!eTrRh*v$Gs%ZNj7=jctGq?rUh7K;4*Va#` zGPx+EiMg=i+J{+0z6`d5u^t>NxAyO=J_}lHK~k*XT4iBAb7g2U#e^g&X%HL}^affR z@gQuawe;;e-uY~{4VD$&=>#!(aAmY=a`Z5=pfF!2?ghzAuan0w zX)l_55Hnp{Xxz>ej1dQ$%V_~zs8@VyP9HBqGVV|)@{}UNq@fvRJ1ni6rLiiUeN!w zX}(MpkT)u7?aCkGKYQ>h;xunID_2#EE7O2EsWG6c&^%zA&upo%R*%44SV}WA3H_JR=s^qpVA}-m{*6OJqmy32x*)fB9+~|dX<{8^%5~1d zNtZZH@AlqK^Y8)FE6V$8)j;Zl*3w0?r~G&we&EvXT-tx?%~r28Yb|NjlLU(Jf3f4; zpBiM8-tga^Ckl4ikDo$ndZDgww9wDJQpqAhWQr7Sj|I&J?PVN-CQiKqH#{~mn`d_@(h40OJmeTOLUrUQUmA_+Q)S*_0 z?J9dpRxs|$2@oq+YS$HpE`hNMiH&-@yjWtu}I2v;Q(H<@>f!s=IX8ti6QH>QZ z$kYl`Q5k7HUJ}a6s^_38yn;W&*a{l(BXskg{>YTtp5G;%xdB|deMS8~)b?H@Gps#K z((Pch4HUt7wC`xe=uuv8HS}Yoh_R=uEHAd1h_5qEq(=m!YlRT(%DAy9;U3a#=7N)= z^D;=zf8T@+fLbZ?*RKZK4mD7W-OrX7UTJ`6?>@9UH3lLTD;c~gWN=;l0eP-<1#Mbo z#do5)E5sHnhU%pf%}$#-@W+V|tslolcfYOCh3RDPhFYWF@)#Y1vdA#(_TEWv+~ZOd zsK)M21?lSR!F{`)RaOe1oFw-sXV-@?ow3kL1s(TR$0LFW>csA!1I(A7b=5fEI_(>e zc_eN3m9zGD9!0LWAd|dI9xwR38Da+~wW@97?BC7P=Uc;%LgeO1hHeD-BRG4v(eIls z=gm!gLVV5WdEVffPK$2j4@Dxdo*PEgaD37TiIXXJpD2oV=cIX>rP{ZwAu|zJn$;JsWQV@G#YEG~b$q@3q<8X0b+`oQ~thQYW(D3FzvrGvk8_9$5 z>Pc4?=xg$B>7WUncP#H*o|mHkc|6A>DeE^pQ8CTniF+_d1c#jv2;$cE3W%&2{mpAQ zQN9+C`J~q-rlg?Jn^O*!o16vIHZrdXQLAS&Iw?J?t!p~jbGs!+_Vt}wwe+3I*5$F> zec)$p8eV}qX)WgWMG#X;65EG~)JOaN)$PmYoB$6w^85|RiV|u z9FZ1zItdyx*)JH=f)9w!cbLX%vPpm3^WMFG?P;zAlrWy#ZmC6rj@^U5ig9HK$I(*No#_FEEqquIk}8jJ^F?$=!=p*{B+0J7=HU z|6?TM+ui&7Z<AUEp;{8TC*exxoA#dUkZ5-?b>Xz-!z(F`%n+z(_b=f_U`HVhaz1rf8YC}HB^4M7*j$**7E9yVN_zMaR6r{Qy8{>A z$mEaqbrQsLB}wQjH&nDvg;;Q|1Zpn&4dBOih~3vqO4tm`EMQ8(p)#Q|R4+;dPJ!*C z>&=g9liBpPAO12H(A!lX)r1KKD%3_HPwVMVzL3P(^>{5UiqUXI;Wd#{?9ie7x+T9B z39JLpY%X$s_9Ti49kw*yt^KzH*+O3$H6(vcC>{<)=NU3aT$qRAvY#P<| zOX5UD{<~A^?XuEBr(Io&{G>k1_+R&RyIN#vuG$K34njGg(bW*)4E$Uxp5liR7cKpmNrON5hN9uLw_zZ`S(g6jc{ecwfvPPZSl&ss zm(0o&wSPe->|Z5l*rMp!yFu(Jf3Gr|Rh{Ol%iU_d7noMpe>QpN%yXDp_(kJGek$^| z%kg19c{pNb!UX1;{fHYIEkQS~^;{eG8HgcPiC;``T{r>#qUH}#O)g)pS46J9Hmi&t z(TkRcThNji$JWl54f4&$ZxEd?RoQa9%KE~#$C;=03t>SKRn^@7fgtd$u3Y~+o7UnP zn7##PT+a_GQ?zPlrwNDq8SnR$rWZ>XLGa#!0dZYr3rYRQsuC%EEP3riokQcP&?=!^ z0qv|M=32*Ci8x|Wg&x!v99(zmz{wAb>d8;~4CUQ^z8@dZ>%Wu7`Yt&QMltX=t_gac zHrxaZ3GZoR4P~a8Klur};#!@o8QeeBdog!KXO%v+GR>(;0gi3TLQ4sb8ARW7w`KRN zoO<1^mL4i09$+VwY7AK zg{oCj3DTByLdol)S}CS4^Oy(cXnoeJsRHZ6LDl*SU%RQeu2Wb?^=B3*&&KATFww|rdla0V5XeTdrfHz@k+DV_dRnsa7tY% z^@53edO9y1bcZGnh*RW;ubfF*E|sb3H;e6YnS~Xl;uaZ~92N<<vnYkNpuV z;tzZyOpxK|Ur}8(P0cmSIVyEfX;cN*R$4aFRAfX+cCy7x)4^~QsX2*^%7PY0*l$1o zD)|s~GPe*hFFVQ6>=)<;CA(>jGmlJ0Gfi{yPJfGwkBvqJAXJ|h&{XV8b0k_(6hrWQ zc}b*~o75&fYQjt9HDe<`XOvo)6&L1He~XT`H|VcUNE#7(^xfs0jJ-+B-E!Q@`5KD- zld7sqlcpvA@nbzEOJEfEm8-OxrVNb!%;v{t>5??sl7-eqrSANf{S2kUP2CDU5hW`6 zcR;lClr|pne0HlB`3{O_(b#b;g2r|W@ZF>%Aw|WfT0z-h;88C>_Gr0FOj_;)vMR$goqUzhg8>J3Fo3^!M9Wm3bzp_S&k zjpba5KvdW-ceRDZrI~qcL%P609W^+2P4&Bo7onPs_mCJdU zhDQrs+U?nG}P$v2Z zNKA3mVA=Qa%W`FkC9tboH=9N!hId~=Byqd6Jhz^q;~+H`oRhJbPj%sS3i zn?pXg8SEMVOwCor)pkMhnQh}FH!jGr_>Gda{ZmP1psH`Q(c5cn1LBqB>8KC^VP4FU zubORi8>Hk_jGrX>QkcmLPs#(65CUiSvTlTb-yD56wv(GPFbO|82gjFB)tqTw2aNSg zB%cU+Iz1M)HR? zd6bVd`mo$aOP&1)O~=zwm9v35ea+Re@y)#9N?lqBW++X`@{yk60Z^q`Gp@_VsO8xk zy3+tp%ouu{?|aV%Glzs$T|Ew1)eAC?NajHN8{Poa>|<@*Z&9P#e;xbwKUKU?VxvPK ziLLy*4Voh#zrHc7?mX`#g1^vtw3ypA4M#SlnQ}d5wCRU#;3kGU$dONcC+#=3jgvE) zl2O44o*WtjJ2gXsP|GVOv;<3~?H;6`ikc^>*7xGl)TsF{*-i_3n}@00T*vH zEU}27`qnkx)~WXS2iPAW&1ue+k$(3bPfBjhlN;O+sO>a> z@Q_WawAe7PdVbja9JJY&H%~#PWV+NW?O{%;wtUVSu{Yyf5}p&vHz+=yYvb3{keVH> z>>%M+<2U|2DGfyDQYH{bp5!cspM2-BOCqU_gG7|3y6>N(5Fg=hL?@s7PKXrko6RZ{ z9!wmToP0cm$l<|ZpAw1}mnvrc*9)`(>(TEkVOQy3>R*`_7Pr38Q)HN?=UUCT9C@FW z(_XR+u3$j=9Xpe2KJu4inGrs6 zpFio zv>TEwNqQ@kv8CCqkbPQj^Rp8SM=-Y1JU~%zI&EzJN!^y%KRGxw6iuTpV0UK-=@GTo zZDu8Ttd^lBrro-;5Z+ZZ>ps_|X*Qtb+a0qo@p8}pNEHn}*G02*eA609UZ`J2)e&Fp zagE4XB4mp|=iE+uLca+&mhdT%a4cy&uimqS+|KUHXOt@#R#tp=Uu4SgjK%eG8%RAF zE?ByOLMO$mogOH?PZbncCjFS~N|w;i<2=QMAFe}(zjxw7mDb>yQaK)O-mn2RRU6zv0X5WPJQOnL~R|?$hWOWF}=(*J&I(#S&ZjZ-9 zoR{x4Lj6!4;xU5*eC8%6McK)9&sU0ZLn03eWfMC{D4sKiwZ;laU7lI9ckYDiGN?{Y zspppLP(NBo##9_;SqEiEn@IxQs6a?J}H){sC-d;tPMbff|ew5F9wS|BQ%MEwn^=Y*0j z)dEDEwPJ{K{V7NOtH5JS=T1Q&rEB1{Wm#;A9fM=Dg85P!@(pF?&p)`oHnBk6Ng*2s zsLbK941tW@Cahn+rFE&$xRn3-+MB%@m+FLfNpz+|0*#}3tl`1kSGJ&SYn8XEkh-5S z!hb;3Be>tuQuocy^;=UbQXyr)NlB=vHulAGFF)@$=U;4TlPlypMQAjH`n@bUy=`+2 zD8lWg4sn=;y#XDzA^(-$rK$YR&R5C6i}3Z9?m`M zCgNV1a`mv9cQva-z@SF6#ZT_6salDP+v8N900clP-G|t^X(Q^it4JAKHSiBVQoflwC z);YVNA+Y!5Y$__;9&MUEtIliWaq5LMk6DCE-tk{mesPN{GT z6I{;*Y?i^-@?bC9`x)_V>6z_(I@%`Pg}g`;%9rz;39qM}3Z{0OQprb7$UQCVPZA39 zs_rbAb+*-aHKJv8y?)?%EKAIa3Q+7Zv8j+|aJbia!Gh3T$$<(NIcm#&F9W1wKRo61 zEwrSNO!aShqdgi)y@*5*VGTELQK336$l)Xg85{b?y}OerLs7JmYuRl%Y{b{1(?1u! z%NN@*d6NbE2YUpU1n-sNQJMvCAw?&FVXCkpqUeNxcseR_8v@kZ$?vr5)7=XxXvpw|Ei14nV zNEauC>PKi!^DvgfV@r3HH}-?ZjF;^fElVdYjMcL=;Wwyt^UHk(j&d}X712p>8QLgc zn+eWc6H2!RS!kw4oC@VWlXbH1fGW)v6f7PF9Yr1>+qozD zBBMG4rOD82Yg6%*?FrOSs;j%SU%$FT3W7}6^~tXPW&#&+rFdXv{C==faq}Hv)&B$d zt1Kw%;|O4Hc?X0!(U=aIvd3$Fo51CV^ZT|fEYOmm+BYuCj~k1)tjHqzbhR-13E&Ju zRu-Cdw$2*9cNX~%asUk(iGSkT?Eg{B_vPC$H#ru^=p=zJ26jHYEq(&-y0o8+(8HXm zm>#WU1O&gA;4ud|#4-c)%ZP*6$MzUbyn-fBm z8)yvoY+Lt9U(RnL>a%99-;bXt{&oVQ$J6GeKR?rEWWlS%#q!%3h9k#O%*xn7)+9HQ z>Tef~@|$|yvm<@nWM1h#4@f++!1^hqgI-SeHix@JS}A9)Rpo7lw3?!*(Wfh#Y7@{i<$&_t5@F}$;7+Fq!T^nt+0UFgz>SyFd^+WwHl@?6mY^0<+p8U@>-HFG-lO(n9 znt8c0na&yi00i;dZIW#CmZ3gcy6E|WCyjnQv&G3-`tY?FrFcezT`fg`69bR8G{ud7 z02SFTd@>yt&#)F6^=kRIc2+YEH=|_JZ={KJriEU{`MO^M30Gu?gtk8f>veb?lqa+` zDi07t(TOQPNsHA7u1s^kUV79>nwrhwr=lq#m80wPwI(!`PLN&ai`%;r0MxVDVvL6Y=!V^| zW`JAL9&Q+-CPeNErp*KRfoAKMS$`x=PNFY=Wg0y`uX0^cThVM>Hw`3 zM7h7k5W>_463nciEr|Zdi`AY88^Z<-_5z-~p|@e^eb__<IE}1m%L?3Bqm(3y(Zga;j-` zOt%g_aLSA<%-lj*8s-+7m50$&gEJDfFa^VfB6~o*XBZfD`5D0AKtLIZuxT|+kC-L(AaJ_^#&A_7n? z?$4FKS5;woJLW>@FBg8GnW}u{f>SIT))2Q6e!ctl58!G1zz^j}OY-&mPne-5Qk#bY z7s)djeh6vwcHS0-F@E;u8S`qv048Cq0!ug%K*r(`ET=to6UIC@uoc2b_z^APa+??y zgKAnG79pnSshAu?J%CGp+oHfP>eiHgh|L!pEX@-zz@ApT2~64oa|H)TK~wWCGI2FU z7I0UxMgozrGM{Hnu{2S>ldzKq92Do7#HO1x-nQ}%lhU|YO}{Ic@Z@kq95Rni_Hj^! zR}$sjrZ`;Qg8P8+7d8IAD^zU?-O<&81~b$BYoBPts)1%(!-8Za%s`9FCBbAiZP_9h z?FI2KFWmV2Hkt=nqoLUytZGXlT7Egk&3?I3*=8o~7x5)A{VEevbGfPbSajeW*@7@h zn;&cy!KQSi!S)*kNE+Ww+cAWb+?*7{E7}DuNgM|+!EoyG%C4iDdABxTx*>GqXsSxt zZJ*ENP{dIOPK8`z6HQfe!bE3%N8ZsA>8xc8frthb^SilGs^HufloU@Sc*(tCX5&5iFnZa$C_imR%~qzLz* z!MOSA4t_La4}a?7!eaOb_=q_ZF^~h`Us8{N0P^6WISXH3Y-v(EFKx9nvc`I(tG67D zLKOu>u@qvrsk*0-YWd$?~GA4t~g!oCTrC zlqDz3p9nawX!ZN~NLPnTn*Z?EcnlkNKH4ErAMiJryLhp;$B3LI9x5AD2Hjm+2~F*x zv`VK4FSa3~L&01!AV5He4eTN8Awc2D_vUC&ghdek(X+{GYNg#ke~Ww2qOD(bo;tCD zk&b<=sO-^nhhS9b&ViASQMbn9alM~gg(ibcY80=y}-?s@rU;hp0C0{MfUs;!}AWj6n} zK|1KcAfVU%A7Im%?9u!!5?Vep<`E#-fw)#Pr`z-CT`=U;iOc~{7{9d2?*B$;`>Jq? zzU7sm0R6JbkpC!N;~%XEhlZi2XUP@Ee@$@_S8h9Y$()xPW}~5gS0rY4sBXhoQ~YoL zjRo3gVVekEF3ZP4VVu(xsv9f${=E0J)VzW2-g7)#uAZo6973Ltmr>S5DI`pb+|e*s zd?y6YwgD2S=m!g-DuWwQP}#&V0~%@H(7Tv~e}L-QD~w-)aq5_l?XGG2)2KW=vQI9I z{A6)gZHNDv#r2rpd2lB(T#Ej;QRYW;u;ShKJVP?~w8Q!TOg#)n&5LTmkB&9p3LMcL z1)(T?A@_m(`ZuUZVcW#iTezt3)#$Oa=y8ql4=XfU!5YVU*PRKq8?;-;9=uqV^fgwL zW>q&t3ICLIja*;S3tZ>)32TjT%pf7*0gqjIQ!x&6)Rd@!#-6&q0!Nfy}S&w2y`YD-4{^GuphY&;?2; zOeq1K#7vFLC4QetfW2rVE2|MqK^IJc2SV5kA)crW^vwhHig(UQW(5+%<7uz95mVT5 zZzNvGAK9=HWEtAZFd#QS8iF`r1EBTQyGa>(>+kpOc1?=Fc3L^Tk;0ujX*lW{kD0Ezay%8N3`9-3sWFX=#mW^jZ8>qZ5nayh;?gsIIBr zXCk^)l3!`FLY_)X;xZPk`Qldbiz3nKUyHu-fPAJ^fYuq-jKdJI*R|*h&7a9{yUuVF3)yC3C%E%9X^^fNAhQIAYAsCSc z_EBpR+jn_k-tyy1JBfmzS{GM5_wQNv4oH!ApL3CRGe`?9SWl~5hJFpg)~ZaVFwe#C zRd)1db3B}u+nx-NV0C;9q@XO7}jev_#8x?{#-?LXt*u*>KSG^M)aBLq8T2WpCh zePv>K9Bv3`y?ow~a@_g!upN8bZDK)h1?l%QsyJ`)^@l4dD9)sD3TS`U!V}>{GeB8n z6d8Z(s;bf4A+-iV)v5a3&7IIrL~vT`n(Vyxa!WK$i3Lj6xKpmAi}Kn$Dif`_v3UY* zzEI-!8iNtFy*vsS1I;_$dYn5FkXtu?qdn^rGFp;=njtdqG&Iz5@E{?~D%U}*;EErW z!4&`ifDN!XxmMHvV-BX+hM*dDX8FHm=L_Y{yS|%2Xtlv<-b2TZKYu4+VTf9-W5G^xC?#5hn5wwG*B3G z^K<+ZSDh10q!UFXPDjw#6g!nEe>|SGv7x)2BakIzfq(kyVTk5-H@{#xkM?1FSwWSR z841nQc1`-p)(-TcNOfijAw4SOC?74_mIvVyV5l$X7G;}&9~5@(H0xWCOpQlrTSY22HRO# zS%IQhcESuA5QX2$CO=v7k$UZh{HP7TSf3qA#E|FLk%SyPpf17u5jGpfwfxB0pT0g) z#I2JW#fzVqG%PT*`3VcdBwaG4ATCUrfLl&Bl!`zTL%%lLGHxqJ`{tE37w(eTG1x-p6Cf&x!(sa6Zea{OBvs{{X|~Ar&-{ zJcltP8q{?{&nolX+{j76t;2JVR-_QGzWuMlnaF5K>6YjkBIBDNk)0VyB|4PYAHq(1 z7|!$gd`RS27~Arw85-ZIzfBL2T`i2bV1#O%reKm58yiUgb_Q%<%#cZ>X&AS0d;-rz z^8jmZKELbhp4#h1e8_slUo{5}XW^R31_h1oUJ2Pyk?~8HK?pm$J(-0L({@3|DR>&dXyN7Ddj@m4Tsn^7D__zH z5cUL|QF;tzW!GF&5*S!dt)xUWtvgJ{i*y3TQQR9gM}nt zIX}ME19pYWcEC87WKwX~OQ+l6*!hM-hXfulZvXS^%rk1AZp)) z)x?2w+biEaXixE9)yFQA2~m&&ASF-x426%$-osBJjxDnTek+#+9nS1X$}vT$Xg)Q2ML95?Z>lA^#gA*J51;GHIF{1igOq*jr~u6^ z?)r6-=?U)4)Eobb*jR{!!yk6B(6c!^1_p-DV0k;6n}zFo_Ff9y^pL7k!%-`_KYCQ8 zO}J8a>;Ir|`F;qgEgy~j>b<|y$!;tz9iD%3w9s^*65 z!p1hKH?omIH{YJ?LAWc8W!DCWna%-*ukCuaV$?gGAY?P67+DG z@iJ!I6ofMr-w(tnq2BucKHp+sd6Yd6sj>vd@#g|OR?vtK={7NPxpyW#Xu`4$m$Ce?rK9!-#IDrH4=v`fg{ed{H zL*JT6kl-o}tDS_}mdTO$M@=l-STC+~xlnAF2XDEvi^60O@gv-f>gnXlGD!#KQ}g;| zmsU^NfVlhlT<#+~o8f~-<&E^KtehEaU4Snb@CzR5yV}bTh zC0QDSe779^!6-3xZlwQ-K#uOh?u4zh>J6;AYz}@Uy*5c7K9x3R8)-pf^s?$2jIre%rHq$5D;$^UK82C&^ zMx(~5(sV+|;=*r%S^lXv!A!Ou0awLY(GI}I;XgJS+CL2H&TR+8 zl`GMsA|37H-;X@{9b3p$Ra|CJl80>n**nR$g9{%^n8uc#05zY@arhqy1ohMM`5@Ix zx|VzW&P(a?q%7pMl?XocLrK_y@=b;;j367!>B5J7Y=x2Vct(@`kuztD{|4r-AtI{~ zrn;CB&E#v}M&Ci#VIJobd8x}!gK1T?QTRmsliCaL)dSV0Q-3$bG`2nm3NNEdW~aS< zKNH?AsgWk|AW=Two>icZtYp)L!bjg9zTi# zh;DUCMP-kHYn{a3)m@>mqRPc^-ATHfk&NZd9y*`>$Wb7Bu$X&r1dbQ}VbI)ChR*gd zLv1fQp8w&0A4Hh^DB?)NEzP=Hpnw?aC!DVbKv}?3(+LmH-cApp z7Z;v_@^1Zk6mIy5dvR%ne7a;Uu2y#ifue(WgOrk@d^Qh~vqZHvl+Zs~|EOj^#Ft%u)4r@Su#RZHANdRv8uSYpQ&N z_+XW0&z|Ao6j|Es<;AZhJZ_?)Kkc>JKe6hUn;nv`#afuT z?N^H+@fnO2n!8mEr0JvYg!Cl(e^h^$#XdfDFR2OC_|aI9Ou5O4^yo=ZTQ`RTJ%0Wt z3;jQj7}g=R5iEcIPF204xz`LuJ7D!FpSWgZ>}Xw$iupLa&;myMhw*7JR+*8+u&z*+!-2 z3&TetN!?hkY2j<0tCgL6)@>B+YGBO8-hN1Be)>arDey*eXXm=blZpR?pPR z0<)Ck=od>o;Sd*07r^KfP|{kI5b!M@(FS%$lz8}KYhHgYwjT7zzGC(NbH9iTH}rs# zKr|VLR7jAhaVce9LQi+|#gy>M|4O=Hu4<_U=pa|q;I7r}q-m!wC5%QwnCE8_(K?Hv zR%N?aQmkMut#p!)@>n+Xm({hqSZOej-0))I@Xgi0jlTL<9(tr~yV=N{>EzWCb;X$B z9}in8Vx~nLkB{NtOgc)jkOlEz5MTkThjQ7nQi$;F&9)Stt}qe&76gqM#+H_k-Y|F; zwqcz?7Ka{)7q!@jiN&7HHBIKHhvi*Wy(Gb-)7l?I$O8b%T&@|s(mVN_XQX6YyaI~} zK@kS-v=y<*j~rkP!8l3LAf9?xTcfM`iW?}Gzu_F7*~DN*tQ=_cZpqz>9X)=Mbkzn8 z{aHYA0^`D8tiBDRb8;CQ zye7DO`z}ON^rxf4>}-9um4$2k^Iq%PS)Epwkp^m~-5fn5s>Lm34FX~Sxc7SP+R&8g6`qkx+d4-1ecc7WWegL4z|6=E)PhS zHa=iO(^#2A*Xznp*1I^sjc1IF3Ln%d;fpE%0MORgogeZoeq(KCM84^_Tnh7AM$;MU zL6p{aJ>Dh0{P6>qzWbg=TF1&NdOgQ()@wUKHD8AD;CxI|Gng^Ye(Z46pqaD|Rh#q; z4BWvAUhf?v?NyuH3FQh4b1sRz_%B|BrMCe}Rk54x;H`bG;`SF*R(WieXMb|FTQ4)@hxiGn@nC!Y2+}useicwkk-GxQ24yi>2 zK%4k%>cWor*CZ#R&vbU*Orjuj!OrCfmskxNCp4k?8i-6q6g-We( zG+}}8lS+Ryr}}+wu2-Bd2YIhBCH~hZ4JYM&kh>Nl8nYU053t{N^SHa86d;L1>86?W zN{Q(m5Ua@Pv|Y8#d#rnr$i?@!2d9l@sV#@B(gey>!%X>dj)lcB!552nZG!!X^rb1R zFu$*Rz)^3bO3p8%kB(zxZ6XEiX!4_UA2}+-`(d8tEJZM4D|guWFxk;p0Y1c{ILHea z^x&^tk+}ww%2u=&Hfr<)rh~;uH;IQe2OBm@{O!$AR3oUetJAa_t|mY}QG2xG8`#Z8 z+Jl`gMfS7m)5PE)kpo& zpj%|Z8IJ#V+c<=IM#|^&&D=7}{zV_K9tc+eN>osJ1@33>1$+sC7C zJ;|y`q@dxNSw$gjsp(P~kWKwH<6Hpq%0!7g)>7ZH^{*AL#gENr9caz7(q)vn8#1_D zqB}j3b_judONH*quM?BeIKHIO%3>!+BkIVrh}FY1Uokutx$54UgS@i8KcHUox610o{SnT#eC|1n%2GczEN7s+vQLAT7}?Mq#Kq8{OojkNVQBE6wV!||2k3L z(vNP!`$i8+8?y zrFPlM>D4UGIZiS$2F0F7RqnVXQo4;_%}EXHDLuCC_jZdU4cI}lPzjqlu&_;i{VZqv z;t*dm#J6?Tq$ai?B|!B?w+=2viWQd@C|=yXxJz&=?(VL|-QC^Y z-5rVq3c=mo?LB$-*x&iik29YCA;}oi8&JESED&Wr^mW! zUC_8K*)2~*uF!&KM12bF<`V0!eiPe1UparQbSfvW3Zu&#J1s63a-jIZ{n?{Nx z7;Qr_12LRlu70DxdFmcWc-ye+HLjNBL=)iS?{awXD}7#8P4*HD)^%tl?;5 zgQct^6CZeyoxXk?)!_;asiph_(Ly_9KjooD1K|DvaOpW$ef&BG8=N^8bzKuQKv4%O zEz6h$kB%#;ARNSpa&3(6DN#$`cH<8-;W)+dVzdy0GeQ^rbs z^F_?%X0FJP;-8ZB-^q8V(VfP%G$IBK;QiV*&@>J)F$FoJsw&;@7kh^N^W$L8mUl24m*fzo6l5#d85Z2--zNV!6b$VjI{Fj!6?Kal(?YV6fSu`8SX3eqmv>me+bpuWp z(ovekSkMw+7gAI_=T}Sw0s8JY_HW)sMMc3_Sf9cbKlB1qRNH8n(VF9K(%NBmlW!jvAF9s)5-_OsesX>~`c` z&=MwaJlP>P&E1>5meUYBSvHtJAa1Xodq4MTu`h>fp6L^Mx*%PSS#C@oe1)lUMFTf% zJ;LsBdEa**j8+>v`OgNId6G*3ssFvb5fZ?Tmi=L>+=X1E3jY#nS)t9Zr%dR5UH|ia zqbXB+gU*U#R?s#O-^djY;i+a4#SE3)IjG`9MKRLmuYmn>+#df_FE(L8F#W zVI4TF?$fKJwOdr?oV+9~M<+VMEzLCUtg38}pr|-KWxD@3Gq-1b1l(3Pm{Q=kib~M3 zC<>G>yOJUTg@~YwRMN~SCPUr~3sywJqN;r7pF=Av~$O=eQj;I%sGQ~GXjuA zw%T!nj%4&U-bjM5Q)bs(GheUy&vk@efl;7UG46auO4Q9pUhGo;6;FBU)$id;6QzqE zY!WuNs9l_BTiY$$IdSJ+UOK*mmd$#*zC|UKS`LI`#$UBEEGR~`n&eWLQ#NgEqs5b& z5}v08T(}p!WfI}}BB!$4Z)a;-6ArAbe-0wZ{DEhhCt%Mr`H$u5U)vSjpYKkg_5V2l z3Gqf5Ai6HD5L4YP`yj>$3Dl)8=`f<_>Z?lgmkphzj@+laJ#U{ekZ+W8#*Q2kzbyX7 zE^c(sZH4|g=1k>V6};qYd$g6&c6>S`k@Kf&W4z!$aIitiGZF$?fU}2|3*+O~brZaE z>?%J8NI$cZa&~igynL-_0RKMYRIqv~8nuLXn*v)VqkUSLo7guR+pzv2)uZ0~I83M5 zX$+UUq56s|ncy3v+D|nUrabr%lhk%qVOc~$P61m6e!l(nBq6nli@{hWL_A)@s1AsT z-a5j!|JNbx3}x@b235xfAn4lj=+3`6Hw(2mr#`mj6YgGMTeO!I5wR%YR?=21%*5;q zE7)IBNxUgPDQMO^HPf=5#TDB<*hff^fi1>ELg@w=1 zV{wvMv>z=mPW$FffRCMb{KLMDolL*@5xsfQ>+?0w?&+-+>!+dxI{``jwb0k% z7b~uVQFG|{Y-l9N&&OA{6jIR4&*Um6V# zs2FK5(A0K4H@?@uq?J8FxC-bL~Y`wd% z=pY?4(dy8nH$KW;npZ_7-LZeO)QLLCP+BJ8XP$=CnCJS5<%0Ai!`P{i^>R_87};NEecwJ&#d=N zD-KiaP4Xpv%mk0#L;sx}Kyp*6F3oE&>w-U8DhQPa&z3txDa^2FMF!LMxm;vnK>v}6N0NgmXk zx>f=}>sA_odo0fK5ge~?{)H_HW_SZhTx8ybiHX|Zt4`H&i4O2r!zJgP^1}WgCAeNkx`~A~wp|ouBZ%k!QQAP|?@1rgL*wQ&?K0hY%>c(Kw$VY{L zz#RE>TIF$l4ebda*Mipt{QD@f=Ao0jUlP|2p4U2VWX{~em5iGEFD|Ri;6XZZ(F(A? z@QvXCay+?_;A~2#NUnE+YY1mkXOP$3_%kX$rrSAjM(A(~jL$E`5mOpeUw}2 zE8hj(G)@n1wKK;ARe8D*7HCQ`0&dpL5m9N!B^78}DYtG3Bnq3-Gp8i}8W&TuI`ZVP zPUD<-X*7+jH~md4D{$rTILd8Fr{$R_o@(MLw|K3NL%F zu>4S68(%^B2M~|UjbNxYV(Y1(iLqFdAAkDdlb8xytSZXJnZ_i|UZ3ag8+){JV#H2l z$Me(#dm)W|v#A41D|xmN{$Xs}xpQW$-P*&uPs65tY1{m`93{gDho@!`it_{(>Rgst zQ3&3|RzUfH&stJEa{P`QVppBRFE_0`U$p0-8g20_>F3?ma$VjTMvmmsrmyW>Ds3}a zgJ?-*h}aXsjpQzEphCTjB;6UuZh;FMt-ffN1Bp`dE6_fLnIwZj2GakC#*vT{5OVH~ zY8s~vf`uY@&0#zN9rSQ&#wIQoMNBWz(8o;KkbPq10EytGPdFTR#NTBYx2BjZn!M_% zxw3o2b9%o6E0}M5tnJBS>l&XpX@O$Dl%&P^+Yw0>(AUdLT^z$Jr3z>*JtHQP zEJ|ErxOSCi&g7xXh{h@W0SgDhP01^Xz4V)*YEvr@1UAc~m9pyZb1H!bM#s;Zl2!c%6ps#XF7=pp>wj2FBcEY_EdUJBMSb{h}V z@vSyEVfxXuG#1CQLGxr06cla~PQ>@^yCcP9(kb?VyaOc*TY!xVC~(>2z1reZqo82 zu)L~umdiEMcE(&S$kUf7;Qh(txvFl#`lSZmLBd&aHP>>!+jYHd?PLkjq?v|fpHAj0 zGD&tOHPU#vKk52WzN$1w;-0P=5#~aihwZGO9*`qzURm&q#bq+{A=CK_a%74^UIN=g z@AbV=CE{J2Qc^ovTgL~DH+qSgHY3_osPi$Gx~DV`n_cWR6}`Yc$c`2<*NO9w6V9)Q ziw*T}p_30=@!lxlm}vAP4e*O|4=r7u&rmpok`-|=&r*9{1AP%;E@QBf@GPM?!T+T?a+#5cc@~Ky{+b;!dMRCtRYS%QEch4w&^RZn{du6OkQxjCTN#e=Z zcD{kD`xM&Lmfgy!YeNChh9u>>ahjVGyz2(^?HdYG$U2h;@{HC{r52?*$qK;r;l%r0 ztt2n&oIa1;7bCmAJu1yMBh~G6lH$;L?~-#uqDtdRLIlgw^0sHwQ7RaF_BRlKpLWev zgx-%eTL+s7wTZboAnSYe8_HA_z7a`eiXhs{>UmNz}+VUKOKsv(7-&00nfx?!b0{@BF`5C+J zbV0coulcCT-aTErhFBdXB0*UfbNNzX4Yrm`KmB9%Qgb{w9EK7#51eCl!SYF>6ww-FmAA^LL|2Ik06D^SJ5jX<+wZ&Btw zge#!B8J~=EbdeWB+!F~jJ*|AbP*7*xPLF`H>27BrESZ+`YMPS8p#jbBq7$OYM)BcG zlEo_3Fj5gXQ}wf+y+^u^Y(l7J(R*pt6_8f!fYH&Ma!&rg64x`7C7WL??|_lf6`p3~ z!v%3H?@u;%9GkD2eOC(2vbKk=BjYbuxi4s>Y`0>!q2l8V0n?J8!wd%Tg;6^3zvRWe zG_wcyvn7FpjstN;(Rc!v2e6RXYSUraFm`}+Jr_Nbhc_P^EZlq(_C&-rFYh5NN^VUa z*0+4@oBXn$BczLts+-DdSm61JoLxFemCv?rN&w6wfUqh%FT8=MLd5#lemhDRA%TKK+xFQf2 zo#>}u0EYJPF0KOfH?(f{Y@Hv^(V*%Uk7q%VcPAF~eZomLKB$$%C0mKW?IGen%C$~9 zbLa|f2;)*v1U*~@g*Zm#Qbhw(SpV~f$upPA5ty}rreJ_b&hq12; z$XPLF(}~9fLKP{Y&36rBYD6HPEF*yRNUqbWknipPy)R>%Lk&SAl6@9OByamefu*Cc zwV9e-Zqn;uc>nWFfTM%k>cT75QeDBgLR2`B{5`H>QBePjsBg(vd#7k|DFO2YGr0ZK zC>&0oUMU33wnO7JH@Wp+7w4ZSl9N=`PpmA$#xZqJF=@LcS|D;co@9N9qtr;OK*Vjo zm+S;qVBPgddTBf@auYuj9|I4hWS2SD~Nqt}fg-D+Z z#z(-cE=8$)OwN$iE)vMoOXwfKkUK+{)lT=Tot{O{O7jCHV#BM)z_>?sut|BmBwtZ! zv8A&FDGR@BTR%aE3wy_&Ek~B*#1AK(J5+gGJLJsn0^QDzir<-`c6`pDM(4ZthVQd0 zr+_Og+MHUrWXfM4f*N_2=skUt?OB4t2rYqMt@%r0J^|&GMQQrVWJV_*q<68K#YC~N zSslp5k<=4NK4g6B$3{CjSL=iok9H-s4RgXjKrIW40}cI(0Ub5U*!Ch6i50+GSe(K; z8+AEe?jGw?jwwrL%-^YkeZqsbU)AluZ`-bR2KH#x;DR75UYumd)LcvHsV~%&$>A*8 zY008)l;vp^_2yyb)ls{^RjbG72o1MtiOKm+!NG_9F&Q03XBAG^)+Mg6sr&*bFn2$~ zLfWF0S~O1<=0e@!wm2}9$P*pGqp4ixVxd-2;S$>$^3z%}eXeO@xjNg(H{vV8njFmqOyRY~DYM-eaG4O%Ru!AD_l7>ahcf}IwZDW!43xDqE3)Z*->Y+0~d2kB6x zaEtiO=){S6w``Hxm={Gz(OMc(?H^T(x!`>h0c)RNR#HBflWPNmj_SngMykmm_6x-S z6?-7P@iQc=lX#Gki|}9RVL|p&(RaYFVZo4`{V!v?{HUBf+(nQwVI053>GX2^*t}#@ z*?$1@(Ms`zBd2){kxfzhb`|KB?R0;<8_`ntS3=)@%~e?{$b3=LTH|~RJlEDcxs_?$ z?JQF6w`5m$ju1jjurw!;Y$w^1#OR$`8bqd51-+mO9CMsh3ib>`a7);NX*`XT=wc9d~aJyt!=ygLi zJ=x$qne1Ne5TUqtQU2me@j!xH$c5ad$PIvRKb}z~#a>@oQ7)8^QlY8*DzI5)$vaKo zAA=G=nCoII@#3Na+L_#XG7f@%g|(BxQK_d0%y3_;EYla}r;2~#@I5z@C?@}5CG+qp zU%3#hH147Ax`>pYs9W7MR0O&^8ti!WZ+*jTw;LCND|Q%6#P1S_dr z1l?sVb=Nu(AM4K<#9WAZcG_m82~#X-io-~|7g2v8{Rq@?@S$LuRN!Ki0%A`HYSF;N zuIIl*^WI?0eDPZUmJGYlPw_m;m+%=9FbOVaq(P`kFiY&F+eq;TivP7NocAl^&b_l# z0j-ZMxvFvL>KO*&j-_J%c;mh$Y(6T#V8p3(UXn0sUr3O3DjF^MrrxS7tyq4+9W!*w z3Ex<(N_TW;TIw+z?QO>EURd$&t77sGz|p2t{I+hb#do_omXHL0#ASM1v&oZ) zau|Eo%6PT=C8b@umtLZP@2NHXHT3QzqM@Na`RBjt3hs7hzi=01+p|l25?eDjc!&Kk ze|j_NSr)Y&8t_17xQUR#x?NdM^UgsZzJ8U?7awYE#n73y_utzl8;nx|8)Ba~(ChAG zUK~4jOho?;&6^csWQI>Tr(J;MQj|@%)wufur)Y7AxFxeZ?JyNv5w- z_W2(k6vkptb#o`0KYyRjd=AYqrF;Bxvm^e#emSK3+Wq6k)+})|nA+9_d(kz-_av8+j8N`1HIy<{z0i>>-@^AnB=7i;&6Y0OHu$fv}XTQSCiu} zbX}5COlB2SDs6A4KRQgE~U$L*d$0{+rj%VTk)^aa>gdet<6{ABSUcf{_qWgu%Na&tKoKl@y9*Uy>ERa-f6U% zlWnkNXjj!`kRw(_P<+h6PR{&W7A@uMOwLcK@!2K0#Wp$H_M(3LJ^ww!rVeb@es*@n@_%hf{H4@B~rNw*%`C(+9wobp)XJpn4M}q?+)# zw3}ZHyWlpyT&=-wT%Q>d~wqp4SoP|H{=cA?YOIt6ck0!}J#4xCY6~Obm{M z_nZNkZ~YsOZs>diN_M)b{i~-%f2>~^3XQr6a3aRVoVxTdIX%Z!lLJNL2X98IG^YPZ zyWCq5(jr%XFCJ@1%ESD?|&#?>cbOWvC6u}{V-WkQY)nyQMU{y2;ezOtxb#StHVqe?O;oi;9N6XhSk z-ai0a!~J%himkH16yNX?`Q*5$?NN3^K6{Vd?J5`eI~*M?`^Gcul{4%wGB`MaU|cx{ z3OZQ*TMD!@g-GT}tQ{!Y3jPyxw}SoR(#(=v6fL0x`-W7m`(2d4gDVS!VY z1#3D!FYeYAgzuM)H|=ch@Z4#4w|b*=Bcu9KYwx7hN~^9>9MYDW5)NI@zwu=ceUaps z`x09&4zEncn_%Apj}E&xU;6Ok=b^j9UIv3sLLB?rom`AO@S{)XU^|CRkgG)R4~KKh z2*Tuj^PS+69X|_8#lf%UrYgxW)Ng}D&_hOopYTE6QmZ3hbY0{*EFaN&e-PqEys_0S zTfd(?aB)m`4WcdO7qw5@SGUer+%>a{0s8?tYy)B8Q4_fPZi!IM^8+V58B|tBgw{f5 z%mq8f^iG9EB7~CW|KHIDn+W0~04zbgcpOlEqZeO**OfuMogpm2SR3aJlqk_36&-w1 zGE{?D6n+jokvdZOKTMG?Tb^rNM+0lJ^D1f8DwoGEoB?@{nbOPVYD>F}f7;`w|r z9Z25$<*7B?BTY*+>8fx7jTC5T8%Knt42`x(I9z5!)m+lWD~s8=?g-8@kh{5+Q>7AW zSu$VsuTRHw_Sbm@U9@)#s!K~NgRLwJLo_P%Gr09)#0;4QV5pUz!tDLhhw7*yDZ*I?~#*i%bQ<@%@)vhHo)salAY)o_E zy^Y{?IL!*CW$TjQjAJWACK?Qyt# z_@748FNna^idfL=%E!u4-B#Etxg)OJR|5dn9dSPP#30Y+f?SL04I* z%m+L%(ekz>Sh%7Lw{fa=Lr1CiLoN6h%?)wBf*|QZ^9spw`UgvVI;#qbn1q-N_Q}P? ziEZ*Ibahvy$I~w}Rp+Z_$I|eQ-re@DLH;^~;4G$M=1EPvQr7hoAf(Z{eaiEsWHyWi zv+^h`Xi!@viF_amp|X9me*6!7(|=ZQgHx5)udn&!Q@3u4iPNnYCU;ptPg?S#-^P7sYzzWc zJlX}&pOq&xCSJI)+@H|zbLnRfy>1mLMp=ws^yq^5QMxoY=!0B>uJsM7$Fl1#j!o2; zc!{~o0kPxRL$!o0zQ^% zCVqbf_8Hw9L*m7cc zQGQYVEs|W>Q^rrU(WsO#5agPYn_k0UM2cC0xBYL(s73U1!jtZ}HrH;t^#}AJfLP^9 z;-b=V%q8*WE*BVW>dyD(3o}&OU|Tnp0|FBG+zFJv&ScCE5I_5=MAV-zH90)vb;}lB z=uiv#7Th?L-|(CXHk`lG5_zx&OTulggd9%aiMlV2Py;83U-W`a%+Ve%` z%x<($K324B*95?m6s#~M87&U|b$GqErrlM!kv-%@D|QLBSSk_pLf?aoV1-j2EzzCr zZrs$(q7_py0n$%1N8;aeYPdxcE_RtE)X2LZT*0 zB~GeLdVP)j$j9zgaVXZZSDL}gV%V_Hio&2E^+62jJkoFx>=(KQIe#xN6)e&2K5y6F zupzDt{m7i->4YOMng~z@B6M<^kW*}xAbk=eEk{J5<_TAvgs`Wx!A=FFTa>FuMZeY?l zuT^!1SB8!4m?-+OA=~vsWJguy9oxFWN zOSNF%#4Tx|y7y0YAbi%XfY#Nc$7HTofOEYVN@#69(lhko{vjCuyxL%Ku#f&(>9^yE zc?BqWU@UL;_H~&z}>vnp0ve7h;)Q zX|=L5+btgX2W?m4bbsJ_lm#RtL_V1ml%jGepK}2E45o#cvfPtHGWhK%1@s^Nh}*b@ z{nj5|+AD1SRO6Vu7?a>ERDcdAXV*mtR_WI3^`M4F%@-`1tX-NIqnpilW->uLrLASz?jHFiW}QEePB;%dc}Zpv2)` z`z?DdRZ{a}0#2qo;ayAIvl>Y`1E^*Z$7Cv~Yp}Y1M)9_0 zzx+FMIarmwOKpv&NpF)4W7W-Ug);seCqWXHa!RPT?#4OvT`6t_1^ZMGzF1O4DfGu6 zIt!CCI1Sg`*WN4{f>=7~j`Dfh9hV&Hc*J--okKlo#P zp(B;r@`5BH-KZc4u4A|lokg5Zeqk-vbREsVXRSN9q=q5Jki>)*!SCX43wJU>a#-jt z4L-tPPXNk@KY=(~NP0C4Bro^x^ZP#=KO;OyPnyuK5F!4*pb_WiJoedm*g!O45&}ta z0dJ5m32)DB$K{&hmdc_!dk<(5LfN-W|B_;UV$2WZCz|qURkvEdC6v0aaM1h=NQ^gOQKKUfV5h^D+2lh1>whUfqqeil-|Ethag9tB;L;C>~G z@{uL$qDcatrPx=@A40FAPnOcH7Aj>wg4(w)u5)eX23sB(*lMB2$O|h-tS6dk;q8NpRWf?V5B`Kh)1X)H(fuynCRP?;FZobxGg`3Y)sfb$Q zHGt-Q)mt_en#^a?!y&d+S|Da~w=j%L33mB)s-6wqF{{v#j2oX+mq?aAmdo+H*wHlN z-rY=kYY2C`+I0QPxDDjoj&*5;-r85$<4!X&28iB+%?$8#uMxc1|u$ITKZ zNKP)~1Vwdu%A-e!;Z)EZMWu8e#w`ICi=y8C6U+galLGUQz09Esdvd?SLt|2}*BPlH zq@X!nFMoIQM#%da9&%ox;R}rXSqH*FI1-njROpTJ0c$uVrJmA9Y z?xQ6|viUC)Z|0BN7f9Bo~flT?4mFXa^7ARosvp1xk$yqJCz7 zPG`-Rh=Bqdth7u>JJTs(qPQXpmM#PNAYm@|YVNFF%-v@2dy-zR7b!If-7e(S&JwGE zGq{+G6cOSA`huJ_6+B@`FF2t;J~}>?Pf75khH$$D?J(x@aqF3%_{|Kv~+-9CgN^NI<&?cXl%tPaiT$2ZP;cb`f?8Ka=mMphYQ&gvm z02Y|=VsK_prM^mz4u_6R$kRBO_Oyh*q|>|ZEOL~E-h`2p2?%EVoIY_uqjc1Pl52EbMyq(# zC2kA@&vCe}=#^jKB2w>_m7B*!4ayOjuLFDR@#`vBhO*!&B`68|brT}gulZ3Xua+(c zqZ0>-bB*%yinsS0EG6^m&rkQQu^$;t#+mN>mws&|VSNRHzU!n68l$<9lT>CVWv?{n z>t#g9h_uvJ27+Zls<-qQF+yVwi#`Cp@h4QHkwn`O7cS|lHvO6b!AKp8l}_=J^)|bf z({p1E&5W(aKXc)QA;Q@4)Jds2%$gdsD2+t=SOL``w9X}+@}XGJ8u3pV*WPrEh07P` z-#c{pMjaykac#d}S)FmD(OLs_T80ITYC3c^Q1XtH^-C!bpzw^|9}=jU~RwIml~y5`CEICL_n- zC2^U68QXof$@_dN4<#aejVoIeaAVHvH6Aus;hw1t-*aJ&$?54}w-J5YksBHs;l-%9 zmSoL`ow#4#Z8xa)DhE2h6{K!Cw?_KD7w;?`G-+}b(?5I?*tO#CiFvoPfa?>+{@Em= z6#$zs$}30uGeqBrUs_zlX!$pzd3LPo<1|=+VGk5tTabj=@qV;A+n8H-9!qe!#-6sY z3Zc|zVal${$kBgOx#vpuH{t469PFtBMiradJyz%7udy2_M0n?vd)?3dy>qk6Aueoo z_p;e3ZnR!pE31Bu=J+^o7@I_$nWKo8yq2t7R0?2fm6wu&+B;F%Vd~$tTTbL_RbQvKH>GZ^(=ul@RPxT>m|dfjig#mkh^3xrAga^ zO7-Y8o8Vp7-Y=5+XVdI4b|dOVoTb-hNS`H0S56x;ea^}OyyKruN z=bFXCiqkXK4cMpw6!A0wXoo5fqXE6(`f4_)nlERF$Jwne6XtX#@!1S4;xY9R)^W6| zI`BYhVwpvrWJKceB`j&4Z+mOmf61R<`l1I9KKaZxGo;d-y?Tyft7@m*$_JDNP|P+; zN#o(X%I0f!{Kbi2UJ_v?TRaBtf^O(4fuW+Pk?IKwRI_#|3kZl0=NImM(h(CKRc67=bwm6T((H-x9&oR}dP0L%y?e;x@mi(p3#u?d_}Hc!Q8eK&Y1a@8*Ziogh*LJe(+g;68x6rZFl2r* zT20vX>uSn13DNW^`xe1OpcTH?|F9kPS+h=xz9O#?s(b*=?k8(TAY63m)i#S3_Qen0 z^@N)V{9fa~<(Ls1qwGk6IyHr$Y^giq5CsREsgcY5KL|a{_C{V;gs#Bz>_c|;nN1gU zFXE3F7*zg2Fn$95H~JCeq+e;HixbDU`Fj&h^0{bbJ=yXC-UFBR8r7L83qa#8;fr|? zqYV0z_`5oAYr*D={`5SzT&aMOK1l{W^=rVG1%Cc%p=n}D9{+7 zJUQwH-PL`?sGATbPpOKgQhM^hd5j>8rfQ{K;GXj9+Up8N*@Pry?hJ;94V?X zb=i#=L+ccWp1Pyv-+BRxy%QnU|E3mD`R}0W!9oPYcSBRKZ8?-G{w8sbRD;Vrdox$@ zlnIhcq9cfhpcRE0e++h&c$(kRx<3>C!jzHfYWImmr68`dp@k?u&2o&s#S}p2^UAlY z^1tXRgqGwf%!vGg15tz=+SH_^?AxU9oDigCqT`5K;}a_cz(Nb08!J_>PmN3uUmjiI z58p%{kR(pI!MHwR6iF6zv2^!9%5Lxi_t9VnNsym4vHj?S7PNavp$2BWv9{7&=;!KS znO^S!yPRd1(6hN4%!}6Yxc!6ttr}m~bi^L3i$^{wt;S1$Ers|R=TDKbUT&cUX%^|0 zG#1x^B`2wBr!KW_g{{DwcfmF0W4nUFX5~R)+maY$OZO#eBjIr+alq5Nx7TS*xxkIL zlfVi1;Y_y@4Ns$P>o**iQJlQD1cRFK4D7Yk(mFX6X=bVo7W09Z+Ow#16(Ot>-u?Ze ztn{Btw57~&P6AJbMoG^Z0IcKKXiN-iZqB$wY}D?>GExn@ow_QstKToEBX$@w@hEDM zK!hBfF?1;|qE{oH06VCkTS19;1fTM#;u9G#JDMV3IM5^!>dDn{2ZLgRVn-4Kxizhb*te*1AAC<~_>NAv^{7`26>3;?N{88X zeK_K{ZhKP0sLe6Hy>$DI^e&ZdyG4a-{pPf7lNr`Bwv=Ldv`QF_VciTjK)wK!_x6>7 z>gQjqbU&?8?8A$tje%fyr{r1iX?3NJNnK;0iA-tzut-@M zhNAD$Q>U}-HCrxbE3~S|*-&pl>k9(w-zC0lKuw};oPPEgVHcNuZ6nkz{Ni%BF@-4F z9z{+EpLpxkPl|rMly)}4Yz^6l0m?`4auwFgus+YSssvy=pM&OQFlGtTk*0F8j|(4C zs3RMqXpUz?1@Dd!ktvKFQs@HKNEPIS+HNyivZ|UUs`iZP`d+&o%CE4mb4AX7y`o3$i_Hro)tD8U8eO2&Hl;X<*}K zPn#mj&qx?5P7DedBi})sX}|#TcV`dRP@nP7x^BD*daM7jwc10M)AmXxuWaMthMQ2C zsilw|LMs(lBai3WuQ-&(!6|B@#FzeYn&xyBIfeWAsZ!CJFfokRU-^8@5Q$K&t6BAA zX5(%F#LYr9<{_SqTrt))aJy_Wcae(2K6O{ycr-s#shlI4y=z){-+t?T)-q35(a$NL{4SSC0+bntAFZ%;=Q^02?c2l-*U3Tenwu|#M zC)%pUHP2o=SiTu|I&2RIv+Lgc-D(?8+}+34*qq_34Tr6^u8qGeGRk9TfhZRA%JWli zldpE?o!(Qy4Wo?RZd^W-CdG-W)9%L4;KcjZr^uQmxw$UeJM|vgOTF;FC^OcX(fSm0y$n~3S-iK|j{2?x~86;jglP~B*+^$y+g)ycuwf5}Pt z!U9~qXpQv7#L8*=)((;&G~20QSCwjC@C^}#1ff)Mz{9t^aNifekSbi>YvuiBPC3`< z9n^?t2~`=7{BR1-NL}5Q)XysYR97d*vWquwv4Jr>@$oTocgAaQ$<6b#C}EVSL5eEX zsfy-lRf^bGrQE}ALdvna_<+|g?@+;`#l;1>D#;1bag>8}sqwSOd&*W?!e?Mn+ zT{-Z#iWhno#5kCl$QOQ_Xt)3R8?mrjl0OU-HNt~TRB=zLbAn=K(n_gLpFT#0QHIJQ zH)j`PuI!D%MZI$UWd1YG&4cc?x1F!X7SUDjzM{IzzGhp1md4Q}W0;)8g{`nXmWt&k zH;HvG=RsYNxY^lqroeuq;stT9Q%M{6hx0XPZV4z!5mJDwR}_!uNGl9WOoxGk5lz%* zf%iWtum7ugK?g+tC)|ZA2PGaE(8XC2M~Li{cMaL7+&-^)n19chvj*hQ*e{x*{%jvBgurk zq~|U;?uzVW)42I*2ZQ(PfX^f48@zVG>LgzrI8K&ND%m&2+c{j1QgA}NstMK%iponW zMWF>-7OD+Hosk>GXa%Jk#@M+jwx%>JDEe{+)0MU-HDsqm*qUJsSWC!6o|(#Pz_DGN zY71b83x?MYTbibabz+ewwj_=hy!^77nyPG-v~o4ivBA5*8z~}YGWr#r38b>)so{#J zVp9|uH+VOkrPOmB(cSO&o$Iu?2k(*gR;aM(Svwgysc1M}=$=wpu~YITpbqJ(G*Z4J z`^HFZ^?+qsu~&K zGY=_|KZi`hsnT4<`9NKbNOGdO%Hznx)TqT6-)I2GToj3r4GyuS9-D-p7$KIo%|rCa@^Z(nIl9)#IkH*Ye`$g1Yw#Z)(09TmwvaK?>jR zsuI+(u?k6(Jz_^BqOdiCy?3Onnd^Yj=SA58``oBC)?HU{sEd80hj#6vazR%(Y~eX} zQS3M$)nWLkAs%`Fc}@#1ch6-fuds4oj(+^{ZdoXPgdbs+_U58HK;kLAEbl?Ieo39O!mTEwV*HpZDSl(G4s}-j|%pmv5LDR z7GAj%6}IfY8?C~Y?AD*RFZ-O2!kGWajP6SUwKM*27^t&(= zo`+hA%Ulp?rrprt`j3iqF>{>P5ft&pDRE7biVVuaIDI)B13L?DPEG!-ti5PZ=Gd8# zDhbsBF#o3q)>c5phFh0F&GsxSi!VCF(?rJVF81VO|FS#4+pcpuEsJv))#_+;y(+PJ%(37;YTvfsXRSjBiC$ME$t1EjQ_CX~ShjhVB$7$> z)|RyAIq{v&EeK=7f&!T&Q<*w2$;du`!}>J>;xDv^P?7~;agR@k2T%bOOw}l@6n$vU z-!E(d{*jN4rvjOMM{agUH1g~Ce5pUw*B2g4&k5fK`d2w12g zda;ay+n#_vijQq?P7sXu&?IX>%b*8m*Fdae-|;N-eJc9wRx%g6oF~{c08O_`O>DP*)T${Gs(Wz^U`H761LLSN#Clfh*SbX| zP=KTzN82a41Gzekm5HOl+!vUNm>_SFPD_6`{92S(Nf|SWo?|qO$HeN}khui%dk{-E zZiHt213(Yqe(C=JAvaa3{{S;Eqkr~#@V(leQ}Z8*Q_|z&x~{b~Qk{+8S2s`S`;9!8 z<-Mi*ub;`!+z;Ef=UF&ywysr`9_=2>-nJ|CXbqK;hB}ap{{RqzWtY?B&xW-a)jPRx zv)FpohUH2bP~{m$PuYHc&2Ak@$NQ$t-Al9hk!o95t*d%#HQoc)Z@CVlV~nxq1y4^S z8yqoGV=bPMoh~bJBNlkL@~ElgcwC*MC&|C7eu;WMeGT$PEc?N0=^bO6+jl|~;DVES&FMKkh;U^Myt?H7d%OBX}u7=%FS50wcb|R(;p+*PX zE!0uEU0ARqmQA{(($zDbmdhGk4>8IUr=n^SlxCkwaZgv+?9(FJTh?v$#v7j*X?D%S zY}#bou~@190BN9tqTm*#r!@}|=NxD-iPwfbZg2)PskKfmMVsBTXscelvns*H3Mwm! zT2j{cYnn@<_HOS%e(Upd!tJ$khi%Z`YBw(6tCUmI+H6t%vT0^+(e)`2qaQ|bfz0yN zONvRg{vWrnqcb~g#G0h$r8i`w4-~KN(RI^xap5MEr9ZLx^QCp;+O+|uYtKGt1 zv`Dbe?o(6_r5Ww;_z-j;Z1G$PGt>dke~y>~v+&CEeJ2jLB{!DdBwhM;z5b;C0Fsrp z5Axe?5*(T~W7;X0{GJOb{{W;UNoql>8DC}f1buuoghob&2yT%g=mO{yIm6poV;FmA z0)vsD4d??{&<6Ctj-_f|nq;DuD5_c~SR|QCMv@gh48U_L8w8IK4w4a%dl%wA#@&y4 zxNTlC@Q-g@u2x#vE!Q|LRTA2(DXJoFmmMq;fjO_=gEN%@(R|QM^O{ z0AhY2epfezG5x>1t2QlqM$$_|x#(VRMoxuffbQ|JSRJcc>y#a1%pR^ce~Kr!5V z?%~CK<+ymWb%IzW-L=1Jq^6hi(pw{6Zibxt6@f#r{&`wC+Q&XcX9uy?dwfvS z_Rz+o!wT_rIVP{{PhXe^+mm;19wON&I5PzW!scn@H1r#Ko|FBm3A2xELx9mT9R6UT z2qck=>su*QoK+aDQS_~Bt*;)9UCMHg4OMA7=+{C^x6;6f^Z9PL9s+PLX>U7(Qtx_e z^}3?H)?T-iQd^wYzgO$0yX*!%i#&e~XVmb<$IWu!m05RwTf2KY0IdZ)^)J&DW!t#` zXBxywx1oO}sXX@Ssn9%&_jksh3tF)zo`_D7f-#*$kS@Os3vDmA#c3*MS!?0k)UcwF z^Fc!`FsV?d`C3_KWBsJ~3}?`lshCx7$6%D=4-lo^iM*}+MY4Ubb|&Y!K`mWG?q;?u z6;nkWB{2v6o-~bO=`nP%KRG0^ClK)i2nDYr`gFWscPLt+=(HEqVUmX@~NOpF80$Md*}jBNebrcXSbUqXH5 zH8y!Z{kKPI+^b>1-Z5_7w&t(vV;&n~IpW(kc&hX7CAyVl&v1RE<*aFQF(RFhQPEyD zS4DLof~+|(@dx3KT7e)}{vLczYR#W|;2r9%q_5a6wN_S<^3&LAU5p@P@w7HQWi%0nviC;nbI&`fg26;~+~ z7|8%2Bat5wsBw}XEFA?IGOyK~b#f!)>7b7Q+M`WR6G<~HX_M8T)?>@+N#q8a{K8Xw z1L`Pm6ws&JHn!u6nUA=#i)@`8KBtyI`?YGP2lUL!yI$i)9COF5!TXXE(p1{3dZ}qD zBWXa%K;1GS2S1g$=hSKwgy3L8aG&LiZF1LbyTp5wY+bH)E6fM@cN9T* zk5F^lQ=^kw1}0A5M!%i`-?lvS`MlcQG|=&x?=YvzvF-~!Epu}8m!%{>duuEDm)C)> zpI50*l)@)-U-#AJFE#g#)X!CNp04FnEHvvI&ot6JvX*Y+shPP9U~<$u=v1GO=%c#s zyKd6<+BLW+{{ScZ&hKwsUe~uMFLjkAV@rHhH4;Da^a8}|A1;I{cn_pDJ>hM;7CvTV z{{ZyDbN=a+ZzDVcP9E_3pNadn+^fDfy%be-KH}xAme>9zH3Dby;Y!Ibi%8u0BI9d^ zjSN~`5I#%me_8T+*SgO>zxF?p0HeSFV0dcdoeKUw`FPlVVRpn8UDlJ)T&-^P7F*pG z7Pi+r01HOPlOq5F#MwsxWC8&d&Xgw(37MEXjz-y&44gUeP6j^r_m$5wd@QM`TZay% z-!_VJeY@7t3oFeZgGq086Gqtl!9B&!a7f0qIXfr+07Uu=tKV(-^MomHbbNnaAM6V^ zs;{S%!Bw(%yc4SxXk^-V5aEY)BiZk)FX>sIQ0>3_tJN99kK%vPGqBiPA@c#nT9k{2 z{1v~`(MUiSozjNQK!f>!lo_QT1dNlcnmZ*)e-WIX^Y+)Z&|Dj38P=ck_#yt_XL)S$ zO=ICj?w^S~N4~|pH{>Wq9P3Z*TdbkEFrtOB-r*dK@AHw60)lhB$HS+K3qbIWu=S^M z>pgz^HhT&OeL1EZQ7s;q~K&``VCAY`j2YGAJJHEW?~t5jX0~8{yT5 zi1a5xIy0On#{&*^G2V8C<8bU9-beXEvo3R4u0=)!(nfI{>OYoL>2dWs=W{Uon%9B$ zm)ZXSU7^-JpS`X8Xm}_7{{ZcU-w-bs(G3MfzUd_(lC@xyr9&@Et6&g$9$v(D^L3aBSnLCNyBk+%A`koo)XBaNK6N-EOr~S6nM5ZmDW&Bx2G?$HbN=M?oZX zwD)Q*lr@oip4j{)t#sjjw&f-5R(^~ouADV~5>IK{o40&!?Y>~PUTDqsEA32H+nmw#)LW{< zNM0yv8a1ApT4yQ?h?zQr0yAkk83|f8X!4xeyZ-=JYDzK4pLfnJHr2ZyG@qmQ0!wK5 zLR;?@x2DJ*V)&C&WwqOES1VmiQ`@DISZl>db0mhCh5@O*QlN4tB=^xORQcF+dhgZ> zT1O@O)L-Zodq;U%Qg$ zaJqfzO~cL^+;>jpfW=X9t*zWORAsW}qOL;GQjZ>?7>YCL(#NpXGF|IXiQU4g>gLH) zKP6gHZg%P7o4jM~O3C{e1uqx-uI;~EcUAI#db;OO)5^oJ&t(I_K*E9G02(Oi00(+e_#CvQ)W9odtEnC_uO*u(ribjbDmm&#Pod4L;B9+^k9FZ zOhSe~E(>zf3!2aF(*in(efY|UWMD%hsly`<%nyMFNDR^b9^PwL%ufneZSMPsejx0) zqocfu7<-orf6E1WkJjq|EQi8DlYr}~b0EP~!x}&^jUl6223-hD=MRpu$uc(3BCdcP zpbMt70^>SBM_E@#ZKJ5UTx%etq@;=&Kv--wbaGAhc@;Fd3N->zg-0#+_^qLW8d5FdT~>ERdEA|cQ`99^$`kMcqvhmj@w2X zs8Z7-62W@DXLcpzY!<)@t4!y{?p+9Qo-HNv?`gY39X+a=uG>=)S)}(0PfsW$f$7ef&SX!rx`$CgI{Y`3bnIL`{0O zT`t1GRZ$|SMf*fkf{x)-FTDdEr3>?%3{IsgRjlT1wyv`7dnGAj;!4q%YEI9!Uz0g6 zF}`GYaeCp+HR7adOW5~_8h6~O~j zDOJg+>sD>aySDkZ2VfnEk-N7tapSCems-S;s-OM(XiS4^aVoEYJV)EyZK0&7tAlOJ zB`xxfn2&O{%~6D@iE=;OqNTnsAz}xDg|Yd{x38Ydb6-h>9cbi~XAMu!3gAOhUi zz7Kqja>sa09XMA9KQ~u!xg>wf#A*bfZ{DP}Nt%kR3E!qT#z|s(1W+-oY-YM}*cvEjm4i9jO-C?cX_10>Q!z15im1t;a zBa}joBEyLt=9#^;0DuC>>`zEmjKUwzOXZu6blzaNRY|_3vi`=q(^gd3@0P!F+!Qw| zXXu(R->kotl%9PoGt3>#$7s?CP@T{#IuLP#2h?S-jnd}hI_M! z6t;)DO}8wSw`k~4;MBAbw1PbN1Jlg-4Cxi4=i=eVUDv-jyL;lN5i3O1yQX6$%19&V zjRpXSA`ZzKs;C^#NbXKag=lfa?fR3}71h1UH7frA27U>hp5V1!cZR~c?oG9~?)Mu# zn8RONb&7^nqNYWa0cM@RLz2J+Qdp8OHH$|cYJ7YrqIKV{dnW0D@Oag@=f?xUnki7Z ziZv`V$&N9D@YcNJ1l3j4lyJuNQ}mgL_ToX+BeC#R9LYVkI6`ys70$dV`OeF1aDRGk zzizhr{{ZB@u0R+^(j>2xe^>Iv567RwR94KPkL2;p?RHPI?c;m=?9cjYKkNShz&Ccc z47OIy3igW}Em@2;ZCCq6OP^l1&OV9&*0Q$YUcQq(gJtSw&#?IMsQCW8{Bu26uGJUI z%k6EaWWMgZ)L?s->m3tS$p@#p;}OIE0EBhaWf;+;-(=5%AI@TLeSO(FxjyQ1pa0t065=ra<&x{L?t<9f(DYAIqe>Nd$B=gir`08e=TAZo>n&$3TcWiyW~eoiG#4 z@>fzn^ZSt>y>dT#=mAL>@zMf1i2dq$V#a#oW&I%N0@5nfTdBzd=Y=!>00d|n%5S~TMw~i-Jah~HQtp8D-B@$sZkkYliTJbU@#{VRIPpk*Lu0vjC_=_ zH=8MPQ|N!a*!_8S*g7p!X+mSciEPp+<6E41h8 zbt?|E?<#BX`~-GQ?XfmQ3m*>nYiP2vN9`oEbTPu}nI{55I`NWDGtBckgsaKvb8m&! zoJ?ONRDFSa#O^3U^r=<8F3{0XG>TxiL<`GXC}2@UW9FEK#uN^m<2|#gVBDo>E3;v^ zWo?@k4);EGT+-&-^p8*B+IYN4*!O#12e)4qc!d$9t%k`w7HdIZMX=QY2e~oq^=u{S zBz&=gRdRZm?Qy88P08~-Q>|TTuhu%ct{PGD#{U32?UVTu(R8o~z&)td2RsZPuCH8< zK@&wx^;LB70mznf^aK7q3>nd)2+$&dfvDU=hixDd&}73Q^`2Az0FHFn3J#EsbL>We zjvu=~BeCG$7k5tpc&B0F_ReN%%Ov0Jbe%*c!iBj{O!)4sna6xERvf_73Cq0Ot>mvc@sA z0YJupH>L&B0X@>Hs^4m?ucNh9T`DPQi}|xGi4Y^@MLhM1T9r!L z%2q{`>c*S8jo+vb_pc9Y_a6~$oF($t#5#^IZb^e0_S?H=I$KpTj#!GOX(TctpUpFL zLJ-ON2|*&%H0E>02S`0FezuuEgUUmNDOu)cg?S zRNSSd&NFfGtMKUiGuteFUu|2)oFf3%ZX3l61oIeLij;wW&JB-_hgu_4C(giX;tgL7 zuKSkXSHT_<-gtLsie_ttHOFv@$SWb}Ayz67Wm;J}x=&h6pa4Nf&PF`v8T1)6<0$iI zky%vql(JPV9YtA>W?a_Kl!Y6KIUs%XjZC4^p20zLN~#YR zViaeY8gYcBqC{m<5!JKOpu5uCEC+S19ep*OYF>@&>ZyuT#X6pGODdK~T!I-^LWPuu zUZo)FPK@HN&?=GQ;Ceq%bZFC{mIX4#!y(Xhs}E2|B0id_m)NpI(MDyN8Z=NzXB{dB z)bi2>t;}LPbrDAEB25tiqd5+w9$=~MkEWHZ2v03EGwusbRrznVn|2qFU2XPDq;~51 zlqv*fDv1$-^qi8JPN07}-;-6Qqg|a;O`u1?+{9X>8ST*x;KtxAY-P! zhoFFen8f;wsKxTolxsa@tl}@z)^%JWoR;Ny0 zrFCi4eFjQ42bul=aZW^~+1ygIJ$#&nvf%A*t_RcX^&uRe>Vh?%szQ93OHF9QEr+J0 zBU%8u0MQx%x@Zj!`UK1a)3}Kl+zzA|Qcosd40;^vmOHo`HSUUJcJ^b5Op<2|6?{lK z6fdF&Q@e%Clz9a5p<>$GM%BljAlf3W-dl>DYi%*rMjdRl4l@_Ft;uJR2zHaW3>0JL z&zW_@tdpH-?O3z$L(lx?n~HVk-_!m!q`kd>|^fFC#`&j5KpVeYCPO&(v=)#wb zo?19X#<*Iiac#t*+#M(EyOPkWOLL}ta$zcg?t%Q022=3vHd}95^Y&T(RQTcbC*&0w zPK5jF6X2WxH9doJY<=aqcw4?Jps&4cI*4KWd=c~|!j5Rfl=WR7sO-56z7DOgURe}# zaiO1woon8K1_Z{=ca)NSY9xU0*5i)d!&*Ui{&X-ruTjFhA_u?K=Me z0^ko~1D}8_W{ct^RXfIo6Rao~m7^JwQ z4<$6Ha|KymVd8IGkIH$2u9FQ@pN@(1{{UFFyv>qR#LtHW{{YcH+%qM*_)Xb~O>u)vkf zFo~p5=w<33RX&+0>|QW9oBCpTliY~@ULuopqXgR7&cWpr$Uq#i^NNF&hcm{aru+j(d5FT(xa)pYzf;oTnMmS1){ zD*E{4c-)+iZkncMSpEPY$A+zk0gqaB=b{S_#Dj_!OD~r-;lx*33VOZcbD*Q6w$sR& zS{P;%%_^dt1Rm6BoCV9^Wa_H3@Jz|t=+35040Tv7H_hc&B?j50ib&&rnv0c2MJ+k> z1apz``m6VmtpwFN5aX_U4#%?Rb&9uhwnM@6=RYJr-W=N}hdX0spSMy|{krVSnJ!gh zs%Ack;S%}<{U=(Sox*kh04(=juXQJC>i3Qih6XhFCtLiHG7Gb|M$zH@ikoZf&AV^1S}9a4RCF+i;u!Hb=IncyVpyJJ zldliW-14_7-S%ww=6D<-!Q?&lRa}n~;i};<8p@;tf<78J$$f561~<~R}XQtXA&%*%<$w$jCq9;FKhwm{Xpv!;gkI;zmk4W-zxqT_{?ihS2wt? z?wMn3G60>_`X3#7=d{>yi07y=qnVhg>LjV>jP@AR_yTi2iH~h>P7q2r1@VkHq{MMO}lpalcK zdTD{Z1i6>LEdX3;h)-5eyF`5|K>aG(1S>rI=?tUSKnd+c3KWaRBGD23RwMj0*dyB7 zd#bO8d-H5@BHmn7ZJV_%z=ZDcq>5dBg>nzTodafRxYNL`oyHx7QMI>auvgfw(IrhK zOhkK-7G9{Qh5rCm)G#3SAdo=>jYadg^m-VK;)dGecawelCe4!bB~6xc)7s{mFLH+A zP7mf(Z2NKyfa;_&pArZr6Qv4^RBraJvF=+onAJQ#RqG#-^7mNuw%3}C(RN899506F zQw)CNnhLoiQSmBO@z29L#GWK$%2qq=v#;BRZQ%?)@=0Crw!UjK!`yytx9w_4N4K{9 zuEN~Wq-1)UglyxHljR5e&ib0fgY!F@jl=B|bE|kzglRrqE=%RnKX53#r1@OF&0hx^ zxY8=FJD#Wst+dw$F4Pg8Yb%4=Q=gT4Mm##dE>vL}O3_w0T#TCe)m?0fxk>c5c67gp z)xr(6<^Gb%86NK8ztYl$@o1q(na|KN#rj5s+bN!i#`U`1^$*tL3N>j9o}3V(TqP(u zMG8hftVut(4JHD^qy!aWLr*WXPgqh{9;2Aj5e=qqdXc0btt^N1wtv&6!s5JX2);b@ z4A?l(7cM~yqB0P3ovT>k(%uezXqvPt6F zeuNq_hQq{Z2yTXiH22aZj%@hrEMs&5bOCe$urbd-1eYH?+wk*&zW&;yU-GYh81n|( zpp<5uk@Cr3Fv`+J*x|Dy56XwQqNQlVL^U2D6Wwa~&F2evMPTBO5+SCs)2O-K*Z#$| z_RYOp2BuhxD4FsKL@Fd^l1_grE8`7!mF26lEPOPT?RFg$-fVohd0*MHaQn&!4P@Sx zJ?nP`LmEqcRLU@Bp0J>nv4QN6pok7g$~AX+3R*-;6RWENM;biY`K03azfZcjrCDmX zO_LRyZ>w7^`2I;c54|!T$J~**9a8GKJxhCqZqZi_Yj&;X#Fve`VYk}q1AA4_K>{qW zR1eII-A z{{WZ%J@7kk`B$UizY`vg>2lkDY}%7-{{UqwD{ly7l1hJKnZGo1Q_6(OaTIuR?!5vd!{{YJ;Sk^Tz zz(~0r9WOv+1mYnLON@1sQnYVK()*CAvxkjVEHs(sX5|Ww@<|+iUe%R@c`p=u zSL(T-;^S`wJf85MfV+cn*f?#rt~Gm>+byeX%{_G2Su5-6qbp8nrJ8902v59ZL-HhS z*%;=gp-o*Q0-KcOYk@|Bf(u;*HL{l;%^VTa#z4R-iWD4pXBqqTu4cw7LVu{z7|COb zXkMCVl31k}c-=!Ik3y%B`}HNDYAx8e{q4f4-`X4@-&ehvA#S&&x6CBA&foO367^HJ z)m2;3hNa##R_R58Lu!5_`(6c)hW>4~U9~9hRL>ljn?);D+bW<0E1KJT^~(bD!7J|} zB;y!3x)l>CaFkw}h5rB?{{RoIrM$M=@q5Xg?%lZd-EtYF+ccLkG)xaSHp;HA;keKJ zmR20{6_nvLN|KhVm`1Na8Mr4G4Ypm*LByU5!^9gB)ihPKQ`Xf`UhT4>3nE6sR99pm z^;1q1=QwpIoFP#|!#J;PiOQRoiZACfAHnVo`2piKjWCF@-*HC~d76BPlKPHkulHRj!H(Ix0Alo}Qiv!bc29I#m%z zB~SnW4!~;QL-Y)~0J;FWXa}A+u)}m{!i`EkVnn@Db9a?j=h(waNyXe{`}8Y`yKv1XZAni zI7wvcAQ-dHne^7o_bve)MOwt;pq3rT2UFlODAD5z{oTX+*6)+9{km>gG{Fdc8!|HHACig|6vden6S$9Rs<8-%L zMlFc-9SSMB`r0_$0%ARE#Ncuyk>6bwCQ8bO8S_6}x}{&L8&q_% zJkHuJ_RcD8_pXxDBS}GBM^x0+bp2TCMUi=wYz(OcWCO^I=pzZ8*AMm{(&2W^wCoL! zXNuQivQsTB6)a?sh%!ke^JXNLW<1L=C%%CmZy7j*+$-UB=HfJVY3{AJt*v~^YaL*Qd`P~5`0=RNiG4Jq-_jOXDw445i2oDX+*ZB4zuHoezoZp&O( z8#V5hS{nLEbJH{uE*VZak5EAb5D4ZqaZ1o3cnRcJ%kP$5*H^ywRTb8*`80AvPg{De zT85#8`8q%XC{jntT!Q3eX9VPcPPG1*m(5?Ejv4t|hK}EIw^wd0(Q|;+P}%62VgeAw zMAJ(75g}zN09Iz{I2ak!xCp`%ujDYX#4Yt`;$IW5yW*c?$7_AZTRmgjsqPchbW}>k ziCG`#Ibu!;!0a$NYN_e0&AvT3)Zn8>&UIUBgcDtuAqUL$p<>v;$x zBxlneIzy)oLm$c=eKPr+o@%EGW7w5q0gU&!Q}zA$3;K1W>t;Ob?A#Fg{{ZkF1@^ng z4c8lw$-zJKgW3w}dXNNjE?9W$#;al0rg?NH0Yg7V4}kb*SiUl5$;b5SWDh>`Xt!VO zRr`ML2%duLO*Iu%ZOk+>p+^LNRgSYTtIr0!E7SS{sSB7eyjiQZ9scjItKFKTZd~gv z6R8+2_IX(Y1MwI?e!ie`g=j*wKAAjO+8x>FNXoLaR7Mau=3gAor^7l$$I%;j>w0j* zbP0&>H;Y!@v{zs6wee8fZIsg1R@F*ykU<(3l14s?s!!dZXuubkJ~Q1s!ttAO@owg2 zNG`P=#iE(d{f^fc%S{eE4?qss?(E0MLK(nkKvm;)VOm!At@S-1%Ry8I z5@aXqh8e>tAovii*c?p6zYBPAHr3lRiipIu6;;(8Q=$;EBr?1xS0gjsk5Kl%huYRumx`mmxoE#v?+wo?zE^GhWb-R@z1G1CLA9*ZcdxR_pCt8?Oz_6+ z4{*NIK0H`1em7#t$`Jm*nZ$N0XglYCO1HYmbkhen9P|Nn4Bm7F z#g;wGf7u(7&A#@XV^ZGs-F!Dn36!6fSe!5i9l^#3@fjXEkaIqQcqzr5yT@J>?XD~B zb^?cSQ7uV?FeaLCO3wph^`n(tKHz+G5NBpaG;;y1sDe4O8JpMk6w6gd!?&3SC@+SqO|3y>o>o*{8{iw zbhSpqknsCkjCV09zP0Ft`?|t+aO7o+?Osed!u`otV6n%Ev7vj>NQ%$C-8{ zljE#X^${eSa>XTeMaFw_O*LCY^9iJRB4&+xQN5;PA5wxqJvkXT?sWK_tUeT-#nKR0 zkR7p)hN4X~ir*9wtr}FSfzsUm8XqC1aMqjE-)mjX_is#*)Rhs>6qzv9Mmr>`Jvy71|`~p4(8v-CtHhIZB_}U%U-DM%u1IQofIw z)M_I(Icb2{5K&!YzuVR-dz?_UGSz!3?9ed`(7t~(Wq>_79L7NhRzjnT9XZZ~_~7+B zD>oKu=v+a3*{d>R{?Tl#P&4t0ev&@tZDqqRp`&8ANl999`5)eU>BgO+QwMMERBz=p z5ue^A#+$DK&*~KVQ#t$J5-97>xnSCJM=8kn?lPn(zY`Qp&i?>Rr`J@}uAe1fmhC93 zQjf|P^mZ#%4Q$saD4vDU*W(Us+Q;gxlmlO=d5W>$r`D6=I1M2 z_A3iW&ZBV}$1eJJ0*Ki7X@SV^jwaf6aC>D6CCdEE@=>dNl=JRE3^AN?RaG377qY12KBS#RlY+LPy~DY8ZwqS@{llH< zecE@4dR}^)MOld_BbXCF!J(XdBu3LylzB2UglDTqp~XG##GWK>7N6jS*G02b)ndz99QO!%QF`rJVsJ%=%LBZLADVH6!V20=!bnFGwR zVdx4XXUk^=dGz{|u1xeG@$xZhhUez5XZ6+d0$N zYw&$O167*;0P3luE|EH8CR8KTYv-Qkd}ct|s_Eg(rd2o?BRa~XjX99xJbLZKsH8#w zImWiscG5lZ&sAKjYF{E|T%Jn0+tJ2_GY)l(dT|?ZzU1SF68AMdTgguMxa{=oPC-fv zbb+vaJ>Peihdp|3Jr$3KMvwA;ocaUoR|5DsIg|Qx{{SQpG43@4W2lfuI}Jy>J)5}` zNi&h+eRVS;5H-|KZh0N`GaxNEg>0bQA-1JGwXT);_kc&}6hP+^$tUU$MZqoLJaxCi zlcu}QgUEi+sbg>7{t|^A`zQYZ^#1@n=kz~w>7AdHi(diwNyJ(`$;aq#lT})((yqyO zgqf_=ldcL$QvxTvu8cCSdZPyffJV1?*)(S}=MJ=W6ME|Oc;^l{eRvsa+B?d_yR5Ko z9htdp*V|0vF;-jZlByOT*Ftc92cN@R6VJ|y4aHXo$6Ft%>Kd1F9q~JEc^F}pFh)7Y z+-g0^F8C>Fyt?^srrbw%LBQRVw_kkJiOr>17E*K8u{L5;o_vsC^BB~A4jyvfkICTR z;|*iEDuBX~@cA_^i)fIg-xgC&rQREpB9 z&C(-W44>j-may`(DADsBuT^@PzjcPCu;IZEuRkCctQ;P=ZSI?v+`2(M)F}?Na4)kj zJoKUb(H{W7lk2W}w&e-F3Xt$0LhWB=**#u_H!Y(lk0u{p9tr;d#Sh;*eVc!!t*WTC zR?*9Az0s)qO$_99h0o_k?C5`(efq`9r)Y7*$alS4>m?l8)4|DybCVA|C;oVScpYE3 zs{LH>c@1lh;R-3L%{v0DbyVO+ba=@sE_2R00~Pfix>12wbHH^zUoSNFe=*xls+*xN zmdmY?TfofG$59%eui4ul9aFl)yxZz8slhYCKHKqU!-tdm@c#ge9kEo)3F?Mc1at44 z>(1&?g+sz2GupTAnV}*&laM)c?X6}`+X?v$h*mw6zfepR_4JZFHLaf2I2jO`9YyNi zs&g-a(xbM_pBaa*GnEt--e@?hUqegnK--0rkS*p_Tw92 zptC^0%1%3bvh+qhRb?7OF*d3c0H6Q{0QhN)-^Uml0MI8u8_)*FJpvNWL)>X&{{X95 zB|o4j{*$HxzrU7{%br*o07*CSYw4;yB+L)@^IzUSewYin<49or{2+L?whklj9td2j zI%&5>BJK-PvB3LfF!t&ZeOcjTf21c*lOoZRt|M+=@+XJ8qj~g#EH+x}o)2%}Q@o%4 zE{<%3-wazuGPXSn&}=QWZmU&!VYAT*Ng2$B6=yvBOEEuPX==-gZNAg$U6O*u+cD_< zSVeruJp7bXl=BO{ri~R)Y@1S$1~SIsR!8m!S$G_!?L3R^HqUdTZ~mYBOdHLE&4^Lz zd_F&RvsvdS&)1p$Dh@Vzhu^$Pf^#he#_aT#rq3_g^rP6PAb52weScOuYmp=sb&@hu zxsUU=%AeLehxF-;bV#vAu_xs~6nzIR0BrZt6DS<{od6?&y{oNM1oD{@W&Ir|`UZvq z(mZqk)5|~?@6aOX0*}+DahVDHA$ZpIoyEHRx!!9J*{%rNn{O+(C6xe5$X7n8?Z^QC z0IGB2r|2e(ps>;+H$xH5GV3Uq&Yy;W5Z`Z>O|4|F+?$r|No%y)>E5cgwyr@OH1Md) zJF)Bs=_deWkTjb~U5e&7e8l;b+`eI}B-_@7tFmy$DFKGu>SC(g1x{9a;oTs}43xe+ znp~VJ;8m>V?70`lpGyj?1pojB000g^4^PpmOH#3-!1Fo>YYiv9fErYt0}IYATv=Yv zx9Qx8Dr!E}K0G0dpYLvwrn*SCsz)0+iYVG?q*&2$mSccDH4c*7rK=J{Ls@%*D~$y& zL*$t`&jvNG}@kFJZ3!+Jg%V>S~SR}sFFc@BR~07q2t(8Oo2 zo;p~UnR(nsqwj1D78B6p?;K#^{iHN>*M_`QFK8`M8iSvUj7C28)VLWQCDEu@?#?xC ztFK)o2`1UK$@2TK5iLW5%MUo^4~OMn^R*=&%}BQTbVoBwNenTMvnqs>_?yY93NxSw3=yCR zD(I=M5iC^--z14NQby$@hEzF8V|BwvBA#mMK?hAY7jzOzO3W92TKwr&#aBbaKQK2~ zo#%9=v+p@^8dSMBN_&vxu}pads2Gkz$-*(qXHu-EqcJBXT{j8%X?ouh zh~%!Ngj3q-nB(nN8Baw#L&W9CC(%)lhPL}Q2lX77QXv>lwBbgNo?rpm^s(D*G}h*< z6*EMv^%H02nxWXdvLA~(G5hu165B=5RR=05y@{)Os^ffwAH3 ze0|J3^W&fMo?ZH$meEHw&Z1!zH98lOi9Cm(^(5c{o)M)cdO3QxmJ~ROD$v4G$=nPkVZnt=eu=+JUw-|hF=GQ6Fg)80D#fn`1AK% zZVA@%LLLqXf4}R8&eij|=4Wa{95uV1$-5y=mFV0Sm05@fo@b>owtg(F-#W^MeEylu z=lze-^WkLw0DLegKN9WnOscou0@|(i!w33%KF1!%?LyLVRN}W@cEtGp5$~_{jarRe#>RE z3FcA%0DY=yIs8J7+0`@LnbYC@jJN*)dz1aZmEFKJEsyD`&vY$)lNCj~wXvCQeCJ-Jr;mKR*X_EyM(wi__f4~Pq`gu^hYcx(!Fb2@<1W7(*_NBEw<6)f`dEw)S_CN44OSX44hk5PmcI?{~(NxABK(sd}j;BJ}>P)3T$fK@w;lk zNCA$9iC_5l8ln$HJWJe?ag*6sB=*+FY1(UUwY!*#rDGKLE4Ax$T<)8rag=+d?!J4i zTA;#-Wpc$w_E#ZCz++ygQV@p(Dg6U?g-3#ijPa%*6IXLrZ0ff7rW!Cn0T=q@->=J=g1$k68|c z9KweKK+XL|ftn-3!$6xak8J`spahiP#<*3_+(r@wKN0gc?;}9au#A0l0j&Z%9uDwt zbNPbeU6+JgK6t6_m$N*HQ!_=&hIb*WQHdD^nUMNt!FWlH5pVs$=XgO`1H&Y{I@-ZpV6a;H zp^^H3egN}848OB*mkO7=@H}trDoT5e2}kNb^Buq98OJGjALX|BHJY#4+*`fB$(u7N z`QmznZ+>x(W7~jA!1yswU1l@S3?D@rMH4_C#D$}l_OSoTw(8Rr!$O8OjV0+H*WMH&E2Efsx5bai(6DvF=7 zK{VAu7|WRHlmha$J1XQ7d^Ev|vCEe|A&oi&XlMjSB=N-S7tHdv<&77q+wLFJ+eOAX zMPMV{fgxWNX6k?4$bOTcM^D2JB;B|(#Qmqm%MfE%wJwm>ylQY~r_W6BAA`our~2As zX!;tnUTu4h%R#tol}l4@x>CbkM>6)32~a$3_p1Y^>Q==kzJUNE%@>}oDDV@G_dXfg zIBT{mZ1gtj8v0r8brn(1UmWO5%8wE0MOhW&!Bfo%C!PUXyQM2zLh5jJ7L3;pzZA|B zUMETpE$oZl$B~W=!j?gIw~vdM)n|-<;G0s0L?#lYDDyyN^HJv>@8&A{wr!&$Q*29Z zK$_b_Ai$_~C!)T&LHXoAni_2M#tO6Ljz%?Vu5R50lwqy6PJK7%lS#d8Fw4E&aPxZO06T<%+%=df*a;nBAZbIn%BMnM!^F6uo5 zjT!iAikWojbJy5WD$!2SXMMyUC4OM6w&?5lZN|9wB}7pVv`}1awA2#H;Bzp^((&`~ zSvr5Lbxl0_a(0|;^Mc5C@d0CWUbxS*@3U=v<9ggy8^i-ILs>yjPbpvLOh?lq`Z^Y0 zja-l+WsO$$J`ZX6MO+*mhQarvx#0&hKN8U6dZLzoNOjH!J zCS$r>kb+r(fn&6r_rR?ek4j zw~T=(>yL72$>mQm{$K9c@*xjBV&i8!@K*VL@j`AMz$Wb3CAD!LmXhH~Q$ zs3V#g(8nxpy-MhNsRy_^6KhlrTo685{OM9~Y*TQ*jytg`cAEQi_DkJON4s5S2a?lO zu1u5CjzJ~>yh94XlMK0ZvJ>#g#+^HAgOhsxBwkv!%#Ta9D|a6Gs9cQLZEUpJ{{Zxg zlM)f}Ua!Aa%OadPkx-N5gNMui02wLx`@t8= zRzks)9Ct?V-&R6gaZ*HIh1rG~9Q8CSpFi}{7=VRb2>Ol)=0DDggvf}Qr@1KHYJ8xEVH%ir^f%E}ixBU0;BEFehb++W$^#MmzcS}r?$JN+{ znxEWO8S&-I)3&)v{Z!7U{5Qs6=55*dUJRNufV%bPd&`{#ywuotZD#4KDc2PRp4&W= zIq(e9Dn}p3skwZ0O&+XgRG*GK1z6abIkVu#hZqz1zs7yv#~s59nankh@$;eAPFUkl3QArEjli6*1bse4^#Sb~_y-eyf_WIw{_g_EIhtxR8q?(XnD_4n{!fNd*PGny2YLx z&9pb{Y5B!bUv0Ay(>MhB^3*;WW?VNcY5g%+tfMQ|Y9q(4bshHyT$1}H{G%6l+_9$L>X#`&VMN4!+PYh2a^S7jNpf2a&0o2w*fz0o9_N}6i zeYs8$I;&@v9y;zg7N*U?9m*kLm3xHLw*H~((>$U707{K&YxV17#GeIxn15rAf8~kg z*`H_|94Gk{XFv2Fr~SsBVmvCFw(t==B_gS!6!*knR~+y4Om zPMd1$?^W{r6}agB{{a34wc71fbkWw^>glRsZ_6wUu7~K#ajPm-n*Jf_cpnFsN500K zClBO3N@`kaerX@g>)h)ebK^EJgdlS}o<`djB;FL!lS<)fuF^s9(m5Or$%R0M>36QcaWLC+EggN zH9~UI?q)gU(fZ_4U+pXTs!*SS&Zi7&#WUQoq4du-r*u*%#WXDB{o2Te1pb+?t-n#H z>?hUbVnAB9+C#p2TKRiF!2zqZn94Bf{y6uy{=_-{nX+^3jhgb565?+(_IQzB9PpY|>v?l}4 zC)Lf~ocJe=GmYK8efJ&8o?2cTaHQK^fmFEedbMwF(S;>BC6B?R1J^p(<8?}c{{Xq2 z{{V2@ZT&>v^QU>kxrg)r0I&!ANZk9=eDNBJ`M>vd!*JYw!8EAV9V-2JovG=7D2UQv zV1n8I0Fl(nkD?aV^x*)}_=Rz)_$}p=anxGsy_^2+#@Dlu*kzKXSWPI$G0{#XAowv& zATXOnLR=*@3-Y3cUw|5XhhfuGyb>6gb6o@EB$jDu&s30^WASLm%)jRN{okWZM3Bu5 zL}FTL7DPTE{{YJeNC#k@0wkuTuDI9H+3fUkR@|;t5z)}nLOP_VsF8w48jliLfcx}Z zV}D`Xw%t{3-@a2dJ<{7-Q%7G55L!BzrDTyw9El91a?l33XF$zp5(jVK{{XY1yK&Qd zZ+W3v7ae;E-?9CQGS*fm(7ayXfKTfa5mD@+0_1c^7=~R6wublud@i61$d}Q+lF3+)6 ziT39WR$DX-jg*?^9Xbild?aCd$ad?K>%&HKci-MTGNTrF13x|?Lv&bf|bax7{W{{T@B zLHJ62btJSR-Iy4>%!ShhNd-mB@V6wDIO!&TJ;-qGn|(|g2`U=QdC;{x=|!EMm<&k z0KoG78nx=KR}Twl^>(d2ZQpd&)5MHmN{D5V!Q{*%=|%gAE&gcKWuicziLgUN1aPE4 z@S8rxg|7~_*uGAF^tJPt@@Efft}mH z06CHYjGBtPh|Z#>xS5jw04yF?_9vDNi5}eBYPTEZY)EgH`J=@}!coj9&p6;xPeefA zWV2<-I>W14QZ*H8IPyV&JbH8G(`Yw4U5 z1#Dl~l|eZDR}QC|>tlW;#Eso5o#c3t*>DfbcN4tGRT=hFa9VbxGMKA3Wx^(UK)~Un zq>K=1t#lsh{)Fh{Hbtv%lvC!wQP@b+|HdfJDTs)QE`_& z#BGk6c>e(C;tDa`w|!w$ttsiyYbsWiN2?AAY2lrEC5>2oMs-_B^C}R@x2vr3@+ zIcm2A9CBSJE5vRFaI1@U2HQME*_2nh9%dhW6`GmI{_+V_hlT$Dw2VGE)akcL-VVf- zNiA+;>yO`uj`!hmRqoCcNm;&jydkBQ-pCE^f-%gHssh%a9w-)Eexvu+!k$cOX)PI_ zM>75zfLo^&vc|JhbUHS0%h=%H{RljWJi+8}b!+uD3eS<&@Xv=Ehl`u)+r!daI~=<=i!&b`bJgm))g0M`yI(PO26aW+BoN+cJiOYtkz=2T+isDmx8B)= zTqx#%WA>U;j=!?bKU|dzsNb1M1Dc#`V}q9INmG`we=sREpdBeIY3@{X_Zmj(r>co6 zB0i|<8Gmus;j0-*+<7?A0}e-SSkpo@d6AzD0C=~}+eKq>2SJ*00qE=iKBrBGFp)Qp z+LybX{#c_gU0*DK^nyYu=uipf01Kxjdl83AJH8ogy}`x)AZ^YU?Fat=d~S;6qJmO7 zg)De2HA@c>6iV-p5}>R5B9wqQd&0k1UBj@oMHW_ z*8!W=nB|!GvoZ13*`$?`g5BNESg$=GFb^7tm=XvIxys;ma_)Yfn&l5dBt1bGvfu^I z2+7BefuT;(D4Vw9PvbSZ895*2kc0R9!&z|t0oQd7w|BbMhu4SvXK*@@f!jKP>&_P| zcEIEb$;Xa@5T{O`kccv$9R$ioPuD>bfC0!F0C^el&>RE~3K9E{!$FBZ%Qa68Mb@!w zcIuHGRPmV}Ky&tJasiZ&UU*UB*zgBcR-bncGZORMa(|=aPxGh#h<$(d1}(aRj@3g? zY`4H7rKOBT5_%~0J|vuyd`UXePJDhjo~5?nQQ7d}hmGWc@9bTdx_FGqncs(?*3vXD1RRZr8+hJI9x5Yj&(fEk9naosU?%x{d$eh>4{>VDoshU?c}>Ge*J z!sB@IXa0}pnUFpY@Ec+9Zq_2()Gb$dsEj4T`B+eU zUtL3hm97V_H~B!={6hOy?BVnjTRVHUWi^zr1fjXG9HXwML5BqY0IfhIT<0tYN$$G0 z*PP9=aK_vx-%}ADuH}4I+ddESPxru8aH70fuGbB@xh(TqZ+3c*vfOR+ zH&a0_G6-SHNZoMp$T>QYeL(ie%8aPOwHfikXVsli>n=B1a6TrFf`3jQP=cliDq(mh zg=CIIDCpgpNWlkI`3{=B3U%qug?}W%d@LJo@jlI~t?7DV9)!yHX{n!@08i#+IaA}v z9dD^mzoXtBD?+6%uIJCI_3L>*gU9sYKPUG*ho+tSvQ9h>q;z~{`hFN6)2J0205QNi z2^Ww!CsP5xn?V7}qa5`Dd;^SNb{QG~cTS*N1BANBXWx~rAUzZmFw=qkr}@br^6}M^ z{sH0rbFbg^hHL6V5dQ#(VGa2MNTrT>jPmpv#yRn-h5^wa)X zB7YVxCqC`t{g;Mxb)9zofo551B39(LD(p!41Cb&HryTi=oi(eta{?WOqY6RCQ)x12 zMR#o1IrPSa515Fac+(Jqs*YG>YU^?7l>T`C09H})^gkUj2|sDeGIb-c=YkI+525(z z8Zt5XQF%@__uTm*nPI1DwZGc{GhxVMQ)S~%Dbr&UX7@=_ z700eHc@w2@Ou%;(xMRDxFT_jl3-{GGwRqe0CJ7`}B08vu%r!A*ymFxqJu*S&2+&MN zw0MJm;pI(a)~c2k%fO+6^-Y4pdTMIuD-nRt=SeBlgXqjWPL!3^i)d8tYeK8~EkBXm z%muFVY24PzUB_U!L0@dS#I}2lFAFmQu zp&p+X=wpI4b|s~nNu+ix@<_#=M<*=IPj)1dPpQ^n!KGk${u(||XW|~_qVo^L3s5^s z!BEe)DW^}C>vD~-DzJOO0|U}~JfLHgXD%w*gM9{7?{@KXvRo}~%vMrO0na@3#>@Vl z4eCK3HJ0e)f{r?QNAV!)g@?shss4>7NeT{um*6~f2+RlJHL~K{{#dFvgG2t&ytgHN zce+P5f}E`^NG|m$zv|`+ zs(+QjH-QE$6EI&{QC$Rv*7UMdT!gPrEHfcir;!N~2M3rcK^Q(dMB64Kiv_V!d5b`>MCURHGZ(_8!b&z!o>S^4A(DU$d%S-{c_($;tw&$1~ z(Zi|cDNDUJ_uAoJu1#4(Cr|)-m}H;yX|7~iGTz|lwt@yZe-SS@G#1)RmzO>s?m88y ztcj_&g~}?C)lCz3w!}gH_18Z6?udQA%1sQ!tMnMGX>r-%M;l}*A9M>6q#B3f4eU90Bj^TOScSv4) zcHXo^vewi>r=-mNY^ekRzEdo$tDJ@EAdM1sMPsN~b{XiJJO zr}pG1;_sH;4)MSpREi_9MFhrvYh>8NLf!F{Bsg#_arERuP`A2@k zzM>+kmLLF0J%H4Mkp;TxZM)K%>qW+rzMI@=z4}Uonl80CW$HplP(8+SJajm*YPpII zaj38vh6g#p9L78jkkAu+(s>lJ@nW*Ch@2;>pxZmvb~9JgPNglE#_?&oK`>Mw`t$@h z`o(X|GbvvzyljaqveZ-DcYfdz&A4uHDF{Mm+oXd$#1WF% z&I_?;UutAP!FZVxqNd$vNaUJ|mAg$Z zTdIQC`6JI;;E*sgtZEpu$-9n=)TX{w98{%RNnf<uDXWZ(no$olGWNsyDap=E1x9lo7G$tW0~QhA@=bW2t^c}G!8JoiZMu+KCtNZmBj z!z;$>!2Hgvq!G`MAoysziqMUe-n@YU!(TMsWcX@fJ6DYxib_N(e`j9h{jEgGKU3SO z>SP$@@;Z^>p=3%gQcoHWRiHWiwf-Si?kH}HPYk%PwBoRCi_D^$*Q08MQmU?!HB$$KJa1Sm`=ylGW=;_H~3L`lz0U7Wk z!$bmOtt==vjiRn+!qrDL3BmnhI+P!&8p)&N;5PkSt?;|vHA($H0Aas;j{X`)yFiE> zw@wbAGV=@5%Tp!5H|70Z1V`u~B)Ht@?R3poajc4(6&&5$8Ttf;`Mf)GwDr0T4-Yfa?f5`*C ztgEHBTk0+~vUF3?!t>1Dh>BUia5~havpX#8|^gf71wICbk~+e=T~QvPL?m~V3F2UJ`3)S$6l58bG}ZNNAzmm zN%=p2{{SR$fwcvdfD~j?Lk+^3k4-rHLGz{ zK(Zwy{{UjC&xA6cmA}n!IsX7_TTQaJo|)obZ95{ZhmX8N=ud)wxj+1l8iwJxEOK;E z)iqQD<@+sbbq-z$Ao+*ik*xmu56*c$)z&@NWbjj;96qGZj*EO+r*x*e#Wkv-`2kQf z6Cdo#K2!JOLx&!)Jr`{2&fAswc|Vgs=kkAi_tdrn4#$`ym_JWlLxAh4*6$(50lhyR z1*XCu9$E?T4om~p+ZqXv2l=^b1dS3SJ#4@#f=ND_2=T(7=1eXvbuV_TxZYkF0$i&e zNC^YyjQ~X-cTS9*I3RrIlbQWfKPNNm%wHn8Jw;msu|3DrSmPp!IVxSM8v$1#am$yk zra<}-+!xzc*0Ef-J@%kMZL`tOaIKW~NFj}+kpBR|Q?7vEkDd+x0KTr=P~SU`iFf8> zU%KwKH;I(DSGFc{(Z)Zrk@P4Y0dy@8(2C5<9G!Byq9{DrfImspWK9X~l{8XRlNDt< zk~#Fsr~Nt?A}mfp=^ls2QWGvYVD>r&7~WRAw%t6;@#fdVsydk{?EcBQ?i$#~%}sBK zfOcH+_Z+gso&IMB7za{Ih(>=luGz3`y}4}KTVB-#w$EmyiiU=g5rl#W)G8qQ0pGbf zCz;cewuE_@XZ%mC-(mBMxhk;0+^m*bzI~1<+Ad!Y;eSq`H2Hx{j$QN&xbV;;GQWi_ zmOF2hS__{&0s>Fs3FP@a#%yKZ8y<;2=O1ZP zKkVfgU)uC}F7yt6n>lES{H{v!4oGN{W*G^SFAUI246!>!EK;FKB9TrR8BZ|4f(Sl3 zV+<}8`Gw;b1*j@4y90B>9ipL{PuaH$QB_R@t=?Ewh%vW`0Q8gG9YS>DK4#l*-t#ud zxKVeHW7gi!+TMpDxwl5<-uL>g*Szo5cbmm&9{pug0?Y?wPykdx;EDo|0jCJ4DSjh%FeMXN_!wIe(rh@%<*|C+Y7V& zrf{OnsHk6S(pSi!WB8Ro)V6*(o1Ul8R>P#Wq6Q1R{%xBE*z={t>T3-u!5vKW7YSog zfVCA=k}*Z%-^F%=~xMSOtZ`yd2gtc*hbjOq;z z;%&!IxMYQAdvz2jyz%yik%!j+57C`C=nUq~ZDl_?$^+0lybaa|)lWT4h-GSHscGlmX zW%tGFYglbGG#2{PWQuAkIN>$YQ!_0^T!jGlB$9J4&UuwY$vD*+Gvb|>L6?sPqjnUz z^(5;U$>cPVojVaFrmLQkWT>T`;*}0n(BOln2V-aAT}@1nZ>^$@s-lcIf663W;kkER+JkLaEwz^$rQUH(L2S3eWT>l@{-P-6a5<82sxnxBG$^?{ zAZ(HXTc`5X<#Tv(Q;E{iT=<)~sN>sKYB-!pM__A7t7PW+Ek0%3j6;K5V2d)OOxy12m^L6UVq`9`= z%6l9;;|1r-Uhchado_Zt{kC^>NA{(TmHJBF)jDY_qt7H+TcQerKUAccB{8T5V3T`d-E^FP<>7n68CHlVUbKP6Uq8ZFO0rs-R}dPR9xV(s?6lGRaM7Pj5FHpTj;!MZFmnu|T^ zkabH*A>_)+c}oO?<&qZ4x{?n(5ICtW7s!s^pI2?G-c!~uoO&PJ`yc2HZ!TV8?c8m% z)Y>nUl-6DSx8p^>SyDpLm2OE}NL!qglAdbcnHc+T%mUh~)Ll2|dL}+aEV@dy7kIzg z&(#M5gV>(qkk&IUAgijRx6#jVud9NVlA0%;dFGHu98n^ccXvFMRY4@4Kmv3vc?|$Z zj6PyF7a!iL$FuGi4Zp(ICKZ~U-kRaMkbY?$#vYo1yDBaunSN&~gf6yt_?#<>e9n7z z-qswx9~)YoFQPt+wfxB7Hl;Psh8Kak_&IlNnRNjYSg7I#*j#S4kwF@fu zSI)9$7|Tf-Ts`kE8UAdYNc5-A-2VV%4L$(*lG~hUN{zF2p%rRtYBe7FctS zwoyuP_KH?Nt&X_Q%OZn<+S>T;o4Vw7Sot)v=_=G+;{H_o8t7rb$aRazy)qi9qok*n zrg=IejY}~;01o;z<_TTc30`IR_PjT@AhXlKUAy-iNezyMZgE1Xfc13%a}YuZBzJcz zgSjF!C_I_^bp6Ifdi3z9x|KOEpU?$yM^I#`t+-q&E;kD4-mbpBsP#=*QvU#+Sr4h? z034M-QGf=wk%EGIPli12M$WRl-HN>{{RoT>bESlhm7W)uSM-( zWZw}_Y*=^Ax*%(8VcuBB$|`8v9`q;f`IpeI$6MEFE)$yAvtBMjr1?+r?f0D(s_$;U zTWRk0s)02vN_EEg!T5qa7#xB;2s)vrv}b&s#T>nK47lanOb<5vZIRogd#sVi4}o)x zpF!$=8ZThA`2=O}Z`dlTrF&d+(W8@}W%@&WdU=7PykhRxLFYY=wir5SZYUiW5r?Nx zqaFtz;itr(G#m{r7&*L>`BC!c<_BaQ$+>st?YeF&Lo65lu@yu%#h{q}R?JFemI*LQ zNE`#rP8c0#(xFOm;zl&8&yxqg3^)V9UJUg=40vf|u+>Q)wJmf|nQLWF5cM*am4Wdc zSUw|JFoK4NsonE1c(X|mD;#LyviJ+0-0}J|u2}C$-mEf%3|zW~au3Qe-$wy1F&)+F z<)LcP~=OI|_?h33;|K{e9h4KVBjx6H@T zFLU}d)Fx`T9q$8ZhaO#MKJY`ufa))(G&p!wE!~Wet4Wfpg*Gw@L6e&!D z;ED(OGxzIHlRi3}XW6?}95$>fIB@bp5P*YsM+IGtXe$^cEnULjOH{?M1w56Itfcx5 zg4y_IRMK-*)kuFo`6O~bYBQ}*s+l|=$^FhanRw?57^95@NW~YVc2IBtA3!zpEqG6l z#(b{0EvZz4mJAywxYjoTVX$-hGpWJ=Fp#(&9fqwYX`85Lr1Ch_X8{_>>k3~4{BfOA zF`S1PX|45q9p9AKk8LO<+ZRz%T;)W6WS1oUJL_k#N^ssWr%&s{{KhU<@Y#$Fwu%lsYh=m8`tS*BWRcu#^p(uuNi0g-$1>nyuztGQ)`tYok};>p zM^a{`N{AXj7ohUSG6+7Sw>?MrWxO5WmK$YF6wf7^=~HiFf4hW+hqrSZa{U)TBjGTJ$oX)UAo3KcxJp^y<#;XHkXMos%!}=RObL@E+wP)U}a`DJo*9LOC>U z7=G1Hd`6bZrYg+GcSLMrxTZl9#nS?uAZydxNn-6HoY;= zF&xCnQr}Or#Uh{Ujc@u+2*Sm_o~HX!QkGLoN1yLP<=lT@9>d~v+py!Q)Iqei{X8tv z(5*xCl4Pi3BYyrv^lGOjPRQn~DQIMJiAe}W7z5j1@YSo48wm}%D34Vm$xPm{pO^1b z$mxp3j3m=x)A*~11uFeRpjnT`T-G6tB#cglAHBl9K4D>n-(Z&TWB za?@1ZF11v^8i7Yn6uLv7m1K5xK*u3+TLgdz4Vl*A?+>^ zK))(4a>Sl)>~hTPOEVHlBM4&Am!sy|c; zNPrrB1P+~#N|U4p3V#qg+*O`(xU+GQ^Bpz9hJ|s@`gz zGlI0h@&ncVPs6r>^E-LgEp%%K*~4YnV;XTl*~())^)e@q zd7@|_nzE2%sDBj)ET0D+gdAy!pG7q1`i7)(El)D#SbnQ?xWQd1MNM$CW3}!w+iKna01jSd`ma^^wX_u<_M2^VN2Yp7ly;If<(|x?TykNpO=@nNvFLGel2U`ZdfW@1Yxv0A zP281y656$S+1q}n+uk*CKg)KmLKs?6ha&_>rRqrh&K4fQ^O1)^FU_C3_Wip}CiS{3 z3Vqcl`Lh22O6~Uce4$$E9Z8i#DZw1Sb~|#`#^(nW!d!>W55u=Hs@u6?=G|@evQ=Ae zR!ikwk8s&4KG$ZwQGxH!RO1DJ?D4qD$rF5%DJpyjPR&{JGB9&$?bW;LTBpr)HTU*D zfM|JX^AenBwASt2-$P4f;tt!6HoaSE*!`ZW7C4UKMqB1;X$ZjwEfeN8{Ze(+sBk;3 zN1b%wyko7U198vgO2W;RuHDdJ7zMisjPRLWGzo(Ek8r63*YPBQf;W z>V-JbhYC2o<8XP^_+bA4E$q;`kFJxbU`^h}?o4X|y zVl3$rE>3Zs0CjvP;=b|Vj{dgsLt#!0%G>f!O3p+#IwC=qj%;^F1Cj2o6^01a)M~m? z^eU@OO=--{X9~ERwK&Pc+aD7)OmR*p3=B!1k8{K}5w#OeTSs`gd+f$%)S`sc^#pqb~> z(%o#=87HycB%t@sWQar_DG#Yb%R0%YSxz1?VddxT6}#=Ww+HzTMK4?0q5(SYT5_K@ zaco|oJq}Kn9UrJ}fBAPJ*`ADhkmdY7D`f5dKN&fmq>vliZIXZ;vPI?;XV^M_o*lcij%SV_VJkia2 z;by^F+ayl$8`aLWXlSIBP8ng5`OHBWB>_-*6U$i?@Fh|_RSj-t_ezZTDfq;ETJrnH z4hTt4Hy8MIS7xEAltE2)rKygx-z2B98KNXc?a!rT=_kWP@aG740~>gwl|Bld1Bu&q z$@d27vQKQKmZI5fuKQJ8LWAt1#;2tNb|d({n-Cw|^Bs?moX8dKw( z{)d1$O+>+o$1~qL(;rpyBd>y<^FdK*xIykyRm9Osx$dN3>JXoIJ~$ZLh6Nqh3V3-i z@K3-V+%5B$#hxD6sdl#Vu~6{>mWCyQmg3hB+4oOnMiplz9x2!i4!@C(K5U+6l-@d< zx9+t&?0NSy{`?P}_dl`i+ZLtv%FwM3=kQPcp`mX4LiPkvDsG+=Z~Ie~%e5svEyg83 z0~EoJ{2g+2zRmLF?LxdK{pf$fa(TT<>nt@0bg#`^WzPr&s%v6iMf+%hYSumkrx157duoSCW5BV1E4{`~!LV zkpBEi-pjlH0Qz;mxiKYopI!z*32SYee_bU5KGi*P^;wYr0AKq| z*!2soHThxB`_TUYa8B`i%?}i~(_yXIb(R}O%-WYE5nO3$Yo5O0Uk*VqHAhNE3{QX< zB9H0 z2cR11525M9yQkg2WN#}-I*0?g&Vp(hgq3#F-CI(grgyXbs@9bi4!>uUGeZfHh<1yS}6lMusBeM z$NpWl3X8^aaGX27Gv2ar?}!28#0@Y8r+>=6>Lb+=gOo|S^1n1@yQ@y{%|1H|hp z7e^tDttMPTF0Fk!_I6e0U>XZ`t#=xucLk0i8o&+oDMrE}Kr;gZa9N5fQ3 zwCAAVN4uXN(>HOaN5*3=JA9`H?ith|PGe-J_YqbS9plF=;Na?TAVE-#9FdhH+*T2& z?mD|<{{W7s0wC7>WcSQh-XQSjgtXKAmRn_3;IBnJ+NMDiAo?DdAMSl`7Odew8*Hgs zDMJy3z!(EWwM3SOqjSIgq9aX8rBIKUp6B7HsExD3KOY@gawf2JfKPL#H56_a`@|mP zXVI6K(-Si}_*HD?+TKuX_qkya&%7@;E9`^BueTaXM&>jKdaD z-zQLFv9;;OLDWW6U?osTb|2HIf%Cb>x|(|aHgP87O68!d-gn94V~mw*>2P&-K>6x% zx&ZO7Hy`1>4KL2pDGuHWr@orh4E=dA;`O(U{#v#^@}iYK*-veX&vk`QI4kK9VUI$*}{IV{E%ETCT1Ptnp*@z#c=mY0-j(d=C6U+w@_wkqAq`Gdql}#5uO&`AN8-2(W z4JF8t%K~xBK_n`I?N>(`5l_&)$vD9H^X;Wz2IrK|!>&Fr?CKsZamx95w%PAUDy+6U zWTFb1np62IY9?i3iv7|x87tDohCtS@FFn$H6pQK6Wzfuj@sEQXM&L&AeSyVW0HCazHj;|6 z2QtxI;0Fd;X>dA+s+=%?j|Z9w;*!aBy~!l#jw!h_AeSuAP%vJ3Vf~z13Q} zT;;yaG5bU(>6s-_{Y_fC3fYJ2Dj(Vqss8{|K%{&+n1A+li!NUCE4PO zkgvh#l;`6R*4Gw1FuO2n%ZfnfbI(?lGaDa^ElH`~{5Z49PqF?_U8TpyN~jQ@(HPYg z`69{-#uhvf;vGHjX4|PQvtq86Ke5Q(vPJTq-Hrew>#Te9Gs`!e2aB6h32A$;V-17` zWm#ZxDlz=sL$}?d*lI0jVeJ^?Jv5lnu7TShf3BcOGAR#2mgxj|1Dt5MK1Y=f;o|oU zZ&!QA1TWFs+j>(auKf(^87bQxFH9Hs94y-weD z+$qNnF`+BEoj=R|A$y*Y^W>A`-&u^~xO)mP!;#Xs`4n>PpSwZ}l!AX(mxh~Uc!J-K zHxK?9O}h-A$FJ+Dl|kkqg-IFu$WVR9(?ZeQ=z6t|>txEUw2HUAnVjJL(uaI-FJoNm zXrZX1zU>QJ&rLcBBbGU6qYoRaa%CWpLF7R>*1;_fy>^)Q^J(QW>*dztCldHtDyQMS zRJf|81j#1amD`YFa$bpv!nw(ekgRdi#}c(0>WrFIEu#Ui?P}e_H23?A-sMGfjm&mP zk&4EP=l~z2ljE#O^Rh06x|`HVmp+JP4` z=3c@+Rt;~%7mbtb-YM5`BJ)#+M0VoHWa^bnki@Q|D8z$|_Zjdyfg!>W93d?t$fPzw z!(+Pl<^G)jK5w%~qLzM<(g#j?^!g93fDx9OCU4>Q!VD9J9}NI{2B8B&0qK=j2RpKFE9Ink~ z_nGjx{oFkBGmW?Q{g-Q5E&F$F+Uf1qt6em7bX0Wc7CLwkbfPHm01x!*aXk(m_aWVT zQ*G~^xpCSXzRyW^vt8-hmb!|nKDeieyQ>f02<8X`5I{PC9!4s7;lMe3u<;HK9#BnJ zRkH7p%U`ssDoAM}3f)yU=^TD}BI*vU$h2>sWF2XDTuvYQh#yLQiS@}Qdy2xp7V8&24Zo7Xyal! zlpIMWSMsX^)@{^hIxv-PXT$#hX!-knJ?|!t$^0Mmas56I?;v^S$K1Z*hxlT)3&jnA!+^`g%$_Y{6x1&j+LAfZnO0y)Ry@@9Wh2xOe@3)5 z7k5&}e@3J$!@PkcaH2{CGlPSM=Zt!C)Hurt3rMmUC6n9h9LGsG9-#Pt$Do%OtL+^! z2-S%UGlSnyC&onmWy$GcI(esu*FX@G9mvV*0|bGOyE*_(I(ubOIPj{%Kr`59pMQpR zbPA>!UUj#_@gL2{6R&W))I~>mk8V)Lid^*3qSN#ufs$H9VgMN>wY*lf&KIOJcxm`! z`Gem!I4}F6<+nB>RYoO-g75Ft*M&U6mM8~IB#a)Ga>K*}%Ub%IjVL=UOO+WjgX7PU zzCZ8=&r`dvR;y;`+SFsNs_(a^d49(pao0UOiY1MGTn16%My;WpO1t4s%#7*E9Kim# zU>R|P&m+WZFoB}zvPT!p(#+u^jTE!U#NaBZ=ER=>G&gNn9_HZLo7-nWNnO0QCg-qH z*0@S(uC{uLNT(!c2+}A7o?!3}!kVhts05L{ z+1y;KuD4h>JoJ|uE2TXf)Wb_t8Z=U@$sSw>QyC1Za8Tz_krOCeC(O5(&LYDcng=XQ9xnD5sgTYG(QO06@1p-<7NQMuNOp7xM z?YTeQzx)%ZSPwewxpwZ~g{m)?+ikie9ZvO?u|TRlNp=_-Lb?dfB>DXEox>Vxhq&>I z$9cFwtYf!WBsV$bkaG$A0LY|~kC~JY6Qq^LdzdPyyvtcFMb6~k?NzlCRZ27Z@<`4{ z{x+?#BzX1Lc_bd(1ZBA>@cNxQSQw5t!YKrnX6DR$lc^*L1DEig^8+^yINwphivR#Y z|Gw2>UBAR->7-Y0k_)^_OiVpJ)D02!Z)?+0YRrp9PQ2IgPyS`Ry6?^-Lm^7reWF@> zX&udVPATcXM6#=W6zUC%#u@y!c~#<9nH$XZjgpl1>lK)!S6#($M>Leu5ua@pere}m zOM7ZY0R@>s8KWa680%hrg|LI4ApYW4;Z?-lueR$iyf@-)2K29_h|BvHqSS5k)P)%- z1cFCKkp8N_PERc4jbT&WAvti#Sh`dkR*V9-MqxubR6{j8#VCfR8BnB=5aDD-2bz)0 z5v`{+bYrvVuH8*ZNo%2`x5SZBK}!r&=z|K8ENT%)z$gG~l&^PD+}THwDF6*n$?^+s zKX4~z`HA7R!-reO6;E^;i)F+hGg~W^A8w{I++gx${d6p+xW(A@<&QNukf{YVW&$t5 zp0joEpUpQEJiqTMf3a81YiTQ>>dJk(-%zR4oVlyTQ0xzi;Onb|)l{arGg~;gyD$t~ z_Gath_VTXU8`8sDYPwrs`y{bc!pI!OD{Wym0m9Z@*6wK8D*M3OK?F5Q$8 zbx~}dmpdKHz+J<`9vE=Ti4%h5)Tbz)`g&% zk4gBwrx|dWsVHhHQF@&tJpgm+bIC{ENE*h9;&w7-_+r_d-!Hs0hl89A*!(j{l_s%S zY2&Qv80xH$d$ld~Gf5`5HsMw^-lukX=>d&z#d---i5xVmar`N^_0AMNu9a~!576tX zYxEXT^IQkqIJ^rk=6hvB^wM7XL}xe&R-@(mb+60yRrS_AxRIgjHVdmoWWj45e$Vg^ zD{kk#+6XXC@}U0!R>bG-KjW&JXy9c^GCI3|5@UQV!kv`(lDWs;Kf_JPsnKZZDEB3% z;G^vIY7hJ@f6L-DEqN8nn@6P)hNVwKtKf4gd1q4OL7_Q>#y~IGa7Z~B`}B(K(vd3l zhR3!DAP=DR(C!u-Bk5k00YDgB4%!JLcyb8p>0o>Mew`N)wj}(nm<`>JG5R!Il1G<% zywlpKq>^U&V;?GkhM4#-(@EQ#CBWyR3Ywa#is{~_p@+F6bsP>~PoNyM?q}14V62G! zwrt@~=+2X5?rcKCxC#e6o?2G~?lGl_Pe^W}eFrbosRs*UO1p$~)Y8?|%(V3IM$*e8 z9!QEZNk2iRmB~h%l$2wudLWFu-0F8N(ysGZ9Zg{N;*I;oP5}|8*O_Deraqb^?(BMg z*@GRw9a3ESeWqyqn$}5QsHdJb zifCp)@yin8yiOm#VX6y+7Ye~iRYIM36V78J)O4Tp^yEKic++-kSaB@EJq5(2E)&e6#(ym(r2j=C^I++ncRGG+d7!rDYNBnw$X}5$$ zD#(Ss(}KA<t!6RX{Znd_&>RH&{cu$PR6|&s!hn!fb%5hK{1Uf zQPQWDf|EsLMd~VY!|HSav>==jlkw05tPy@tr1e$l$q z4zFxAr$&FBKLkIvW$%UDJ=^>x;r`v>p4EY4we7kHs39O=%2a&vx2s6yosWrQuET?X z_+oS8pAppis<>YI2yu}#@)pcsbt%a7&w2 z`9VGTcNzdn)dD#(SaA8zFz~>0mgzu3zHX0^)jLs=5zp!CF=oI zTObUQ2Y*kFrbHe80ETA)Dfi{p{pRP07WJv9tG!l@vjof3vDGw%>Z`f;buJ-{{;645 zbHN!KjdxB8lJ}f-2yr(yWMQ?UY|BWFrka+rnpztASn6qNV`yiBRq9D%a8=QPTagV`#f^DwUU3ZRBNuIKK7hv+Kp`2 z44h1uejGkl_SV7SZJ&-?s?SYZzPFV)xYAWlf4d*U>M^com-Cxe3{VjX4`U(J}OdGTzG3&Bm^r^(_09qmf_Mlqf1QG{@La8 z%*>?wdg~zj*eNcPStY>SOkD&>&?=6V0{{(Pfg0)OoiH@$lBY{)Fk}NL-41#9A7A+N zdqr|+>Z&3+Ne?d#79EMjbW;4)R8Y)Mi$)3kJ@mLmVQmfKIuZ>HRc#R+g*{ZU-EWsF<$=25TDs|`SlhN#I}i`YONE7z8r&$)X_rNq%?j#h>LaU) zsz_&q<~d@OqjdT*kVcC!TKvyOr-&PxrVp~!Z;i)M4{vTu%~LPvFO5D6hYC5#s;%!K zmFbM~9`7kK6Zf$?d;x1KA%?wz`*1|Dr=oxd=o*rU#LppMUP4d&yfi%nk*LtFUB}GB z!@zoJSV(vPjQDAcQ*66kEEifG!(y$HlILowin@xTGlzzFoH{u8hEQ}hbPUR0osKqC zd64om!W;h05euIZ_l2(CQ%H^S$8e51g_Z;G6)FhNb?G{yPTH{a1}_NsO}BU{!)p%< z_OuF=b}ChZNqTVAbtjzl59;zs)WrNi>;}1vny#$ejfFTUs~upE8pLIW96u7>gJan~ zXK(V^QYa$b_Bvh1RTAJVb&@o(O4#r&(EEqtN=SAeHs{9F-m%LnJw~b$4fVu zFE9INbyC+uCGOWp4WDpQs}8z)=pzVOm$+FKRz*G`i0%%xxwLpD%c)NB4yK5n;~Lj8 z^v3&HJ+!TGxD#(1E*-DQ!mi{L!w5Y?E}j zUqdi565>ot_>b@cvx)pLrQ&|nw@X*Kczh z9CRy$xLJy8q^kCMxuI~%X`RuO2L|oCVqZSn`LncrCr*aY%NB znIWsE08c?#9VBfPR41@>Vop0SET@wlZCq20j4Rty9u)phIN!tn05H27V(#6EalBb4 z-S)iS?NqNdwz7dLR!L=P06%9T5SNZ#lDIg?!8nk|lqx6CUplIE?b2ofrc*4hA^mnO z`c8G4$_O*hNI(nxShnGtYH-JSEN2$`)xy;yj{#FkvLO4~nEs7bS$J+)P56v*%@R~Z z(My~+h&Ukk1Rnwp2tK;Sy^OaNCBnm7hr7+U1u?Z<O3GWrM=zh2ryh_ z81+3v_v&|Oi-cc6>(lSs> z*GoC8uHw2~rxH|joOV(&7w*w}mco=`giTRY#Qf;L)ldePGImJZbI*|e^ZYsX(j=XT z-9wPaB#zlSl4Ig3sbheh{4`vHb_(t!Zs_k72W;A=4?#;NYo$~2)J&(8Ao!x5Y~?0UPjxIc`pwfZad`;I|d<^-P{og=blXnd5y(0NDUJZy4K+ll_>no>WfTNwFG zaCDQY3z>=!#K&rXlfGza_Y@T2Al=(qjYx~j4j4$c@|59oQ#x?ACwSzzgO~+tjaX6P05(G zC3#!0DWYVNRzx{g0fG1tk*qdkrfRpLXzCtAgh-v3`~sZlk1&>q8o!5!l)d*q5$ya{ z;-=5ISnS&_7^>~CT%a+v%H;5aPb^^mcw&x0H@H4h?HZ11z-%Z{YEDnwVN|JjsGu9r zRWy;tr~?-S5ueMC5$mpca670>^wuwBJ)|Qe<|D-C$51X1&rI+f^clLcd7fkIsg%wI z5h@T@sadug{8WZdCLcej>OGX?Kf#x~WD9(5K>%Z< zXacm1qbq=X2=LSck%_M}TULG)d63@wa*hRx)qJRrcH1My7ul`^&a3Dara6W`v^AvN zF=INsXVYI|eP^G*R@$n43Gx2`eBoffQn(*zjgb0|V_JFR9`{FeqcK8PQ%|2}r4OLa zvFAo+&KWSDl4PpL<1AIR5=PmS50{ppOlrD-RIh&=_SC?4BgtDo1E3A{#({dvTuy zIQ{y_g&089WbRd~2X~O2hfTkH$~Nn)gWjRxy_xPPPc;`R#xTM6tV=tOLIKwAZKL$h znZDTfzW)F!js+i~{{R`2uv^C<4^yp~;&3;}k(1Sr4M>r`vEXs{XagT#imus!T)0)f z<3O(RU3T?EtI3%eBdCdf=1Fn=W37ICIOv=Hu2k;wQ~(uU3}~w|u*4@Lr<;5+@fzpg zcQYW8uC=~&_PGzt;GReQKOIbo9BO1|_YpdVI*1t0_~-%ghILk8y##XPG4%TC06s`o zQjP!}Jl#huj}PCVkdCND9Hf;1j0545{yMmf%*lBcqoAeof5NEkv7*HGA9=!dGd)Dj zAvp2tEuW65+;1w(Cam zEmTgoDj3iuHGLF_#VTQV)k8F8x?NZta@LPJjG;F)v}SDysYONe1QmYcv)b+T7dyqy znud;+HkNvdhxX%%0Lf-%zyJ>mYd!Fs(Kl^ zaqmDIrDOxqx_Z9-b{LRwqZrGbja=H4+d*tkJZD)XO=l#6asG`kG+W0S0Aq!9>0zKO zGo*onbMepy@P9^tG;{ap0^>|Zuru2lLn#ML3IXk;1;Nt+!=J-Q2LaC~xX>ei4KbVV zq$7N^#tN@0*S*QR_&2(^e`2Os511+j5 z#_7ZsjLU}%xZA@1G;K;P?ZfTSOK`W`B3XU0AouB9jF@JRIgUjq1RqR{f)2SHhuqD= zriRKMC3Ga>?;W^N!5ynrySRtDXzldSBQ#KTgHu-EWJL^F>UTbXV0R<{PNPZ=ytrvA zu}*vn?8MgR^SiZgo2PK`M!$etOM35}%T{_Sca=G=w^*%^;VCF-DRKk2LDwYgM^m{9 zxEVcGJq1RZf;H2VoUVDBW6!Sc*?Zl1m$Z0KvUZ-}D3tZdwdtjxwq7Y0{Y7;TTSnw} zNun{zhn`qvORbKpMX3ZEru5_wz7_r_d=lRKW}5T9Y&Y$hRVPwNveHRcM$WvO+Nq5& zz#j$*-wz#g^{{JGlShAvlh)0*YYG;>g*4_6tN}+KDw%I&{06V*t z2^jTfbpzK`Dis%*TiVfLYFwTD%;UU~Ztd6Rv&=^H^HaI4e_-2NTHJO{(4@~&qe$Xv zsRIs7;05Ynar|HgdULLa3Wsw}&z~~_w3MEJyy|5+2e!7aQm_K~q5L%e0LvSt%Xs;D zxLT~$H*a<8_SM0R6h>(?)iorl2!kY&VPVitdP;I#W6vE;@h)VQMwOU3wzaOJ!?kRd zD!F5ldu6VUhF6b04Di5_v0U@%B~CNpjbs&`kdc!;B#y55J^s2uVWo-F8La>Ze?Qw2 zZTIC@cm0l>%UiaMHs+>KGEdng4KN@02AlM16I@YXp9{H%uva-o>Ql@S;yezpE^HA) zOB~TvQ&dY&QBLAWXNckAe^7sM2az0(q@9YZ(S}4FI*RFrZqwpr9mL0M+`iQXdmf1A zA1yUW@WDUbx&B7w{G|5NX*G0kJEp@|4Z4(96h3wLqr4qTdPpFS`h~1>w=YpW`RQCn zvGx1(4Gk&?`G6zGIs>Gm>7ZtpB#_7lrZgdPAMnnCXl^`t>H7g9^k=_+Pfa1*cR=Tn z%=&2vj%J3MDJrTZNTG>K$uy1?5l3=KTmBlG(zI&at1g!*jb^3jy9KDdLx;{Te*|=UDkF@GPaIkQcnN zd0yWBX7@m(wEd#hv#2Ek`MG_(#|rl}^rZZ=RIua#%Ek{<_ydhfgPXhLTT-o+k(b*K z4R&VR;q5mGHtm)Re%ON6_DE>gnyoa5(Z5kV*_*AInDb_4W6bMhth6z&se&qtEpFJa zuiBSI>8-HV)Y@uCh?1UGi2nfW4QeXKhHV+to#KNB%jXB{xc9~_xx)%*oY2hi9qk59axq9a;-F|nL6?Zm4T5iC)l3mj|tQAcGT06A-G(qP!Y z9U%f>$^acFpp?PM?gqJ2zks?L?{yrAa$)&S0Lu>yY8(Xk$I8WqM>!h@4gUZx`T&Bl zk|YfgRqH3_W$)X=*Fg!5lm#nM6l%j9@_VoN{0@R+nw8p#y?`(yWL|m4BaEL75TA@y zJceexmUPqkP2n_4(~t66k-2)eQy=NqQ4b;Ixf)fH4z9oEI+;+@Ha{pD0Ey-#633Q+ z07v3+Vp#6nF5h&~1$S$%->8&wC0aD8gdd|tHa@3VnUL@u{{Y#RWbt?SL+gOJR!*&w zLC3=y)9@cpLnd$>ZZ0{P#(o-y0e8ksk#6BXT2%N0qq~8T4Eg;DlCAB>{#h{l^&aL0 zztyXKapL_a{{Wv#GG5+o)U$1>c#`yV>wN&#T;z&sJ9JCcqwCCpszu|GW zUYmvc>wDBe(FSsmepir=iF!eQa0dtFIeFN<>rzhN zx5{zUYAEQ?ZAtit(k&sVn}IjD2pKOf>#`&R>mjJ^@y4}p3V&IA{{V53-Y%5>Ul}JlE9l(ypF|Y;5XDVX2bYYpnZ8uY3oIr>X!6RdNVa0x-irF#(3x2L=?EA2wpw zs^s{2ATBymJG7F-uIzHm!>F-6$tRgV9c=81EO%TEp5tA_n2UIM=Z5TMvdejorDnKHK(bJ(_w- zXWdtOj88PK5lX=~On)X>z;0hBZE3M> zx>Hz&ImpNw0N0PlObr3xe(eA|q;n?#cO;(L1CS!P732rZzaOpC`;TsI8hZxZt5EP> zw;at!1wtRzhA^!(sz+v2=|9b=@n4XeuygKz!Q0FQvV-kgXNY?i`B1nmO7c|EGkWy9 z#!&s_X*R{g5S!P?hnu~I^M2XjKI5#0E`MmUqFo|o^#+-o{*j-Cg(2}EoV{%Q*S6TE z;@a1%Qz^qOZMJv{pO0D$Y4I+R^E_{I9^Uc{coxQ`bOWOcJBZ;XS3Q@Q-Z!ZxASc+YbuuqM65Smjd`ZTOh0+dtXW_HwM(Jyk>mLT5lq!dg zp0@Kt1x&w4np}hMY-wCqK^Mdx8Sw*!8-@0#682@^Y~9dx3R{&kL}Xv*jlV35{iGy( zbSVz^IlOv}F`6Cp!p8o(KyT_a0Dk!j;!|+1&EF2Ml1?L{yWD@t>fnDXMOr8+fjX%Yvg8CIQNmVNa6U=z}@k;_&>Yvu<-X`*kpo+H>#G=Q(1Gl zPfoK&WKlgrk7_WvcObDUgmx!b*m=~dSBw;!zbn}<$K)-kk0{e_$pEczMnT9t#=2Cr zFio}sl6wK6fIfV=`Fg!kaE8NhuiiViZdcvXON`WXv%q3RmCv+&siA&`F@$4+Gt@KB zT%O^ayZ03pB)WC|8Mnov)g9{wK5Vv<%?BRH=_vtK@VD!y* zo&;5fIH3geGa)S}N~TE0mfZ@um2Q%Z7dtL~m*y;)!i+5Lj z;cm--rLx0JA@`X;mabxYrKp!3~%z zD#^CbAV2Lk*?xLSLGk_>3V*bWHG@(-GBW8(=;8GXmko7E5XT}1Rv0QqK_3yK;Ll>k zymwaHRD$1eTBSgUi@d%Q zI5hOb zwB(N0NHb)N(4J{RI)+*bt%aE4p zQ}5Ih=nBRYpNxQN%2DExO=oDC$EcIsk)Nb5Q7wVkd^McRQXK$u96{lS4!E&phi-8* zW!kqbvI>-}ikjgGb&hoe2T}+saLf)5Fi1HE8XlrO>piN`w{29m9lvR!wc99T5Yo|6 zQ=||;gY{B00aSekfEAO=k>{W_F)`*J%Lf{_cbo1YSa@;5>$P<*;k%{oj^gkbEr|_G zQM|IrRNuo@SxkV8mnBF5onh6Y=RFJIRYD;7@}cE(Zh2(cbJ2>(uN%7f5=;H*V=A(h z=9JJW=9KZ0a1S?PUAf^`CY%*G*%eAoZtOeRx$0DN(5$3*iC=y!P&1Y6dOe7wi0)uu3=>dSYK{n`M9s$a1rj|}JlCVnJl5BZhbQ%M1N zjX7NX}z8y?Ejpg+^8@E8@hTu68) zS|8tmBDyvm91wYocfBAmx05qht0q!!C7|uUi9-f*A6;WzIDyNv{2Ov+bfHx&L zrHQ?@z$2K?GCgzviKF)<=;{n49JvFMI~`m^%+H)pEVZ0sq_y!ghg7!q;y%ufM4_gy zRr?+K-sdygs)Kx`A0)=j$sC``7_#mw(v5hyNa5i(2XqFm9Bm#6?iHxH**HhHY&Yvf z-)6hos_Yc-Tx|7Y^FuskI*{i*FOHWODt$RD&x*#McUDf`*Jf?;)f$V6DO~5g#rap; zoOGv(@k3g+J=aADf}Y{fS{jI#^20igeIqBO*XB@hh8O~P8S=vLy<$9!Xx7zez-4#x zdFCR^xGkG;wmfz6-mZ{Yt<@A)8hIe7s++6ZT$T)ggLo%7>p3< zl1R%8Q@JYjBB|1i)8<`<=|Ws{dh`dU88|_I;vbieCGlf_?aJM~wl?0_t)FUIF4X24 z>iY5&8>LJQ^HZv)R8;Xe_dkm)ju$AphTVekTd7mb{%=pbGctSkX!1rY0}?vDdFyhF zF^qZh8UWgkSUkNnz@&QM{4@Y5{{RhM4{g3Od7-z`Zu@;T#?iGcbvu%J8k7$WRIxm9 zK#r%AsFr1Nr;+yXaye;Q?!s)&K28Ai7|{I)8b4h|;4~Z_p~#OBrE%EXyUM*1v5`-M zo}u~HIsKT=aj1yoj>J+yS&tn?Iv{(_Py{{Z$>Y1}L< zGfKk^E0O3}i;*nf__0cXs%=__|VO{T+ z9lPc~gqDT7ZYmpCq`FzwRgCUi1o)WJtFa2T5jhi6vk<*S<0J_(F>)wJA`TCvl{&7Q zxJ~YkCGdjfZ<1Rr_wAKcC8;Fa28u&`6$~(F+StqXk96d(K}>f&T|YLt3Y%tCI=$UE zzem_@^gB^Jp!UvdHs3I|-$UGmPY9YgnNKUrXuJ9=>c>BboqgFfC~P6Jg3)j{{U&xZ(bi!Li_&!YeezWK+GfkuRzDC z=!>30K-qYUa_TIn9eEYir^dAAN)q5^C#q?xXzHpcYiVjJYN+OVYMOe8nkk@}4jwrX zuu;^E6(b<)4XblA6S}$>J~~8=oiP*=4n{%s8bCz!bka%hGzzl!_Y)}p0PvRw_v%+6 zDsi5YS3T=3$9+v%NoU);g7s5ZTRe1>bYLxG&peD4IHOqsV$8%S8S&8W&24R)2DY<; z_i6YU5w-pto623WYJ1NgKEb$NmN&XUyI!8AmMVe)c;ay?Gb)qQ)PFV!7z7Pustcsn zy^96%i}^>V;m5oJVZ6dyi)ZtHk(lN5`)7aMqqvC==s0)e{$KDti(lc(Pa8(}?mk~? zKsk~-e%+y_3_TU3GL`y}bSe?)CmoLoJ!0RzfG^Be&)?h|;~wbYh0A$f=cTq(tk&tn zr8%m%%%VzZPqeF+=_Okj9cbOVYKoC?m65Qav|vYA(^vUIm)M8iGrWG}$GoyJkL3juGH3W>a1y6!Z0nyM_bnNU;k=+) z8v;nUc&zCCO+F7X_K8#x>l`S1HnV6$f;W8Gg;soWvIf(hda!`q09_UW>DUXT2Kw6_ zJx2iN8ReY-UZQjg!*ihnFbztHj+Rz2j#wv`{IjlH?+Imi+EM_^1RY9FLgV58051B0 zB3O#JWq-@bfdKc=Oicu`MNsjwh|nJ0`o2GYf(GSw=@G;aNjW1tlzrL*jAlAx_WBr= zC6IxVKjrD5h&sOut}Ij2RqqZ6TfY;l$I*?-hlNxmnlIhjdzuFx1Jej~#!N;G` zJ?*CU_`2;6%!e7?^**lOQXdUcoFQ5t>;7}3jxu@p zdTNuugb6|s*yu7i2>|I}NWjlMM3bguyT}dXT|BJqN*OAIv)L*xR+&aQ#A2+Jsvo3p zA3u(|Txs#qf$|RZjXYh(wHf_zMRhNz)uyare2nKHXaPKu5ObgmTz()NQ;Uc`VWQd= z>HXVR4JcaP?!48ml|3&~NA(az8T4drYPTxh4g;s^-ZziF1F@(DnBb@c0#84`S|hRJ zA!&Ni@K>l3dlA*)pY&=#MGG=YvAHAN zwlkdkdw%^8CLuJ*NC}CUs}L~6e7_uc>f)p5iJM!~g9^Sa`E%i~7%QOMSDJf`k9AQ+ z>{0G}1zDoHLl$%GG=LSJEc5oJS5AC@)F)0AR}9tBD9yp%AzJ=X__I$k$87UHWu*rM z-8Ll+MNU8OkxLR2j}n;pYXR*Tjol`_=1R@1m7DpF_l2HVHqOD^^t=0W?+wGgw^a&A zloj`uhAMk!xTPdClyvBj!t8{pkcX3`mFfVHa;Rca#@3W<%4b@2Jj^mUiNwv5!cCoV z-@HTI)Ycmfu0L|7u6H10@>E41G?FposGzeRKx+Gy@-X%1JMkOdUSq9y4jOR!(I(a5 z?L?qdywBBfyhMx{eeyn7Vq%PQ#X+uc#ygDB4MmDPeiB%PYx8-gPUIxnx?n z0g|GPl^46K1_MRKa-*b!D8S>ucxp-9W3<2!K0^54Y~U}N9kIGM4N}usFG()lyVNnl z!B11t7FPbsO0heCWm{2v?k0@)Fdq-QNsuEw^pF}nv^EB^bcbT~XbTssKv=z60><(* z?kgJru?nLkoB`@|0f8?*Tv4|1Z_Rf6+_pNX>TNVNQCR3^jOAsHiZKgFr?V?avM@d% zjX3H_Ab)b^ zaZh8|I1RsU32fi{c7i)~5850Eue6Y_Ol=Dj&Y@#a9y85?^{#$kv0a23VB%l%*u}F~|Eu?Bqvsf$1OB`Nn>ZIewfSW81LGQu^8wHGKeHvt3LV z*WF+7(O_+MkqfoBoJUrYli?6DAJDneu^u?~j*_;c*=eJrXpsj|mZD1YrT?9aMm`7CCfBRryJMX49sk zxSul?a&mSClQ+XtAZx2Y%hmAE08aDuP4uq`rHaRX~pdo=WsIt3Mr-nv~SZbp&v~nrKD`avY@*v>+ zHHhNTks67L5t2dG69-e`rz7-@BGj+Ql}E0D*s_#{Gc?Yz#s*6!wgX%M2D&vWKs0-4 z0MXx1qznP&+?c^qtT28b5w2M7$yreVY;w*>9JBHI{51kY#GctzoD?wE**J@ z*|2WCjdP4uEMxYao>>>|w#l*cM=X8%bDo(1>0yEnat8hrgw6`J8PT5v!zi+Wl64{{ z4aPn*Y%T`ux%amIx~(-b<~k}!$ZD&VMm}14X#2ad@%*Yeu>feB?)+q^(VcnsG)z+Q z3y520H(w6QU3rr3{i;USYeG|NR$Lr0|0sh ztVz_qtkOaq+&Cah5`~woB99m!kPuJT;iwZNg=LQ|B%L_J0Ns}d!$1(!+n%ydb~)M_ zs&npBRG{XB_H(KLYaIT(O+l5@8o}#8!FC>KgSd*@1wQl}= zXQSa`Ll%z!lcb4~RA+W>itG!r3`Lf9*j7#SS@0Dh)b#vrYo`cY!T7H(KM=Z@nY{+gT$XEW%e z`0ILcLp0EtbPDH-y*H-Y;oj1_@2%r?j@x9hQOR9hRUjlq3Jjb9&6x64QO%fuIh`Sx zJo91ZXNX>GH+$||*r>GZYdn%R->|dcDdO$+neoZ$9e*=(>CZ~wca6~`x9piZrF+}q%BBUu1d0&)puPpq21LL4Cp{S^x*iBgCSv!RT zxR<->H$C>jN%k2obkWGGGzi2%36th#NcvE*#(F`0CGUx*60_XwS z2!%hII5^o~!At#z%k`xzH=XSk*G)6l#Y!k3mm+$Q^0JPlk1Du14B>$JbPq!Z9CY&C z#cwTlt47@7y`GBSS9_pp`b4CyN~IB`tr-mI^7UnNfKMhF=5eW_NG#d?wp0pak@+Gh z=5#k<@+UT`sp3BMPqfFfAjlt68h9#{-^7RD6j6BAGC>YQN^Z|4Mbol{CeJg>*aVL51OFXu{lf#>39nX92 zV=wIJ>vQ%ibtGLsX}VVQkl$v5t})OEGRq`UDIHA98OquqZoohDkHKyR)NC6)n`Cc$ zUi0Ja%X3l19arrrYHwSbqNYIwOm!;@5d|_J4vB?|onTc!GJ2|%V&lTOg*mk#pz~?u zMqe%*BeC&ni+$B!<)x^G*}I{5l_?>4&LXIzPy;MWAoj?Rvp8jJj%pz3a2BfETDEa_ zuOi%8viWbH%%#>FEgc;-Bv*Ia%}mDU`zgr(0BdI;ByJVfPh^69yp~|!E~CKEIqPJO zr;I*Cw-*igZ^G@@vNsJ*>fF2X8d$2foD`|{vr#l2`^!KR1?k~dRg}xgIXQ3}q$f>u z4mB^#5?)k44|`t@YpwiF?$ZNQ34jDQ+izqN^P4JDhwP1b&HXumR<_pWGC*m{X zql}RhZu1{-py-bwLh|q9>8X_yTWYS>3*|QK+4tJ(4d#uy>8@7FhK6-N)>1M#a|e;u zMI4#YF!FZ#IbLw-e?7i%)`p(fClaZpjtI)hSxsZ3`)q^3nVmXId~iPVtoUc~nuzs! zj3@ctPvi@GuN36nSF^e}fw?y=`utR{+wY4k^2WX?76C|?;D8NLT63&=e^&B(sj&Fr z3Gw}Tz<}`sZ;}4Z1*Y%8B}PQ&Y{PbcaemQTdz zPrlrz$1-$JaZ4y5p9WFLdTSV*2t;!JMkApQCMTF4IM4*EH6oMMQjMGdSHS()uU7l&N~y^o`O>(rje8)%1%yIj(>N@PzV~UrGl@eCQ?~XQm}58L*UB8vHt*< zJrJJ(G4bw8&6o)8G=}L+qXKwHN|F6^Jed4J2U%99Q0lNc?U}atGa=tY>-{s;qTZWw zzxZi#T3LI0Rb$z4_ct%lbo-f|o)=s;eaHU*cL(qI4@OnCT`1m~X{l;pm3m!FszVQ6 zNB;nE(ZOSFUVCoojXE=&Ckg)mJOjUm9(p*h!Fya=e*Jv1Z;Krw1f{3HR=hVlbRDBg zsJhIm2OuOyBaqIvP|2JR2fDr{rc17~!V&|X zW~S>hk8mP3I+cm!Gu&!$Dwv9Pnh8>(oDtA@V20^G&5c_F9%s?1@z&tu#%L4Nx&puf z{8xCDQno#hzng4H4Z}}lki@q8 zWJy_4g8^lfpWwzv@~#V!;zIgrt6NgWuIzfX_np5_O)T|BH%O4k=chb?$<%DwHqtpd zOLd~A+cx33`!QAA2Uv+n{sdpC7#^TtpHfbzcY773eNKF;gYx#(q)4WgC_rf#4x`ee zxnt-Da()9q18>R4;i;nuW#(A6ir27s4WG;^ba-nRAH&<&yH~;j!G0B zy)~$tGRRF=zSx&)@9qojpmhMpxDR76k$s2zaN^wAL%vCfdLMtkTT zi=b9DfuJ=vpfxUlHG!ZtE`g!IXa>Nk_=fpUx%r#nT@7~0iYYh7%a&@(JPyGHd=jdP ziaxW+S-KIBo?U5!fW(G|nT2s;xL9r#*1P4ls)FxHJJZ(ERl?CvO6qa#x-blcW0)gD z8q`+|DqIHaPLU(pqOw}Pg(HdSWl@YU{ZsHGk^8hozLC3h9S;Jy&p!qD zt+Dv)Xn7%m+glwi@&qUN_Su`;s)>i|U=}N%5U0RuaeOYsWUj7f)+y=gppL4Nb(#s0 zWQtTdS4J6D2hf5K->I^rL}N&N%b->+fU%>XYeSnl%Ou8VxQn9TT>xD>fpmay?Wb)3 zTU79(w-{o9V;KOT4}0asETn-Nk`UWPjzExOw+WIvdBS^ zRFDS-_2$7f(02F!8(p~T*FPNS+K*~D29IFT+#Eo|9HqL{K*Q})57noQzRwpdnVbhy zp?7%?lR6$9aGzxGwt*=&y)AV`NTy0Bx?QW~xLjqXkCbpVOvJc}00ClNlmSP}oRcLL z9zfe?Sj( zDpdB>i%lcAnhuw87_y#vj|H93xg3qw?Yy@ynT@%`ej4z?<+FF|Z40fFaMEu}9Ol_@ zrG{!*>5*ZZ8;||I5E55eM+vzK~X>`5X zYU8_Yi~Mod*sHA<2>Hb^jEcD3N|uUPgD8?Y9Zm+N-L&qQDO@`#jblggnB7|%USnX)`|z}A2+fG&5=3~UJ>oSaxhOm-_xlO z6kFqP=039;WSkS>;ep|(%(?=RR+O`fSz#a%`TLg7uftH_CB{WuB&T8Rs73&g003j| z)WTya>P&E^AHad=PyD@f5hbRcob=4`uxA(}J@Mh74?>=&tUpw2ogBY6<{0nGx8JA| zJo7A(5@ZA*AxQ8C!&4*V6s1&1g_IWMf)A#kNRe7I5o{0$$jR(IG!qfUD#q;I+p%s% zv&j8Df2Y2tK#)k1P0&H`8&nmK*pXs79M)rN;0^Q(L5{c<1E=zT-eprN9s zk&PX`mY)b4swkC6`^P<3Ql&@DlZG`Ic_20#lh#$pcgYIfKe+no4BT~b#0+kx0N<Dx*V2nqs(K+_h~ln3zw(spe}2m=pD`U{d5ZD$HPv*I4RHpA?7p5w*>sn(*37<*rd1aSYr0+H!Y}$ zZV>=JRd&Hy;~&W&IOoz=zL3)~&BedM%gnD2Wtz8#-?F%oXhW1V60HrzQ`PCFJq&;E zaxp%d8zz_=!rFqQbc3EP$$#0qzH5qQbf<0GyG`d^D^( zqkT=GpiK;5PdsR_?rWr<4FPiW{4`iDYoPdOuw2(k(hHZQ>4nSF>!cSq)6cemx%2e` z#;TI5;W^|EU0$5N8s<*g1DO(_73d)omQF@~hf(qq^Nw<{K&+&vLF5<2ecl?78d;{1 zm!Zabvy+Si;r{@;Q2|9F$Yzd76Wa-#w^ll{;57nd^$AZW_px;p9Y|Zi`f~5jKnNt6 zBu<$l!=VI%c`wlVYG6028Di=x#k#S9%;5Nszd-?Iwm6svnGm|3T+V)n{B;6k^UVT- z7(X@+R5mg_GyxJ}3oDMH%cYMzDfsxD=oARj7?xh9S7VOg@+aw_d;*n4boMaM4lsJp zZ0ICvT3i*#&U^ZwOn;7`Pk^Enjn$BJ;AiIq4Ep2OQ{y4PYylLw<`vFK@XxM*94Y!{ z>XCzoKR039!|9Cyz&dih2^yCOJO?a#ecB0$V+Dv=)Ui@QJs^XV+-M*#jT#7E7h+kz zE(mOYhM-JO6-0^G{4i86Fo&4u*y?3NjYG6Q#;0Zr$$;m9;6{!D-ZD5V;*7IQfmN^u zPtA{yr#xujA;u@4p!7(%cV1!Jn9q;Lw=GPGwO9)0BnCJitiK=mcF+QvQw&gina4b3 zdHppBl7Z*XA~fa4TB|pK<_^e(g(uhZ(e None: + self.root_dir = Path(root_dir) + with open(caption_file, "rt") as f: + captions = json.load(f) + self.captions = captions + + self.paths = list(self.root_dir.rglob(f"*.{ext}")) + image_transforms = [instantiate_from_config(tt) for tt in image_transforms] + image_transforms.extend([transforms.ToTensor(), + transforms.Lambda(lambda x: rearrange(x * 2. - 1., 'c h w -> h w c'))]) + image_transforms = transforms.Compose(image_transforms) + self.tform = image_transforms + + # assert all(['full/' + str(x.name) in self.captions for x in self.paths]) + + def __len__(self): + return len(self.captions.keys()) + + def __getitem__(self, index): + chosen = list(self.captions.keys())[index] + im = Image.open(self.root_dir/chosen) + im = self.process_im(im) + caption = self.captions[chosen] + if caption is None: + caption = "old book illustration" + return {"jpg": im, "txt": caption} + + def process_im(self, im): + im = im.convert("RGB") + return self.tform(im) + +def hf_dataset( + name, + image_transforms=[], + image_column="image", + text_column="text", + split='train', + image_key='image', + caption_key='txt', + ): + """Make huggingface dataset with appropriate list of transforms applied + """ + ds = load_dataset(name, split=split) + image_transforms = [instantiate_from_config(tt) for tt in image_transforms] + image_transforms.extend([transforms.ToTensor(), + transforms.Lambda(lambda x: rearrange(x * 2. - 1., 'c h w -> h w c'))]) + tform = transforms.Compose(image_transforms) + + assert image_column in ds.column_names, f"Didn't find column {image_column} in {ds.column_names}" + assert text_column in ds.column_names, f"Didn't find column {text_column} in {ds.column_names}" + + def pre_process(examples): + processed = {} + processed[image_key] = [tform(im) for im in examples[image_column]] + processed[caption_key] = examples[text_column] + return processed + + ds.set_transform(pre_process) + return ds + +class TextOnly(Dataset): + def __init__(self, captions, output_size, image_key="image", caption_key="txt", n_gpus=1): + """Returns only captions with dummy images""" + self.output_size = output_size + self.image_key = image_key + self.caption_key = caption_key + if isinstance(captions, Path): + self.captions = self._load_caption_file(captions) + else: + self.captions = captions + + if n_gpus > 1: + # hack to make sure that all the captions appear on each gpu + repeated = [n_gpus*[x] for x in self.captions] + self.captions = [] + [self.captions.extend(x) for x in repeated] + + def __len__(self): + return len(self.captions) + + def __getitem__(self, index): + dummy_im = torch.zeros(3, self.output_size, self.output_size) + dummy_im = rearrange(dummy_im * 2. - 1., 'c h w -> h w c') + return {self.image_key: dummy_im, self.caption_key: self.captions[index]} + + def _load_caption_file(self, filename): + with open(filename, 'rt') as f: + captions = f.readlines() + return [x.strip('\n') for x in captions] \ No newline at end of file diff --git a/ldm/models/diffusion/ddim.py b/ldm/models/diffusion/ddim.py index aa3fbec..860172a 100644 --- a/ldm/models/diffusion/ddim.py +++ b/ldm/models/diffusion/ddim.py @@ -159,7 +159,8 @@ class DDIMSampler(object): unconditional_conditioning=unconditional_conditioning, dynamic_threshold=dynamic_threshold) img, pred_x0 = outs - if callback: callback(i) + if callback: + img = callback(i, img, pred_x0) if img_callback: img_callback(pred_x0, i) if index % log_every_t == 0 or index == total_steps - 1: diff --git a/ldm/models/diffusion/ddpm.py b/ldm/models/diffusion/ddpm.py index dac0049..9b908ae 100644 --- a/ldm/models/diffusion/ddpm.py +++ b/ldm/models/diffusion/ddpm.py @@ -1343,9 +1343,8 @@ class LatentDiffusion(DDPM): log["samples_x0_quantized"] = x_samples if unconditional_guidance_scale > 1.0: - # uc = self.get_unconditional_conditioning(N, unconditional_guidance_label) - # FIXME - uc = torch.zeros_like(c) + uc = self.get_unconditional_conditioning(N, unconditional_guidance_label) + # uc = torch.zeros_like(c) with ema_scope("Sampling with classifier-free guidance"): samples_cfg, _ = self.sample_log(cond=c, batch_size=N, ddim=use_ddim, ddim_steps=ddim_steps, eta=ddim_eta, @@ -1396,6 +1395,13 @@ class LatentDiffusion(DDPM): def configure_optimizers(self): lr = self.learning_rate params = list(self.model.parameters()) + # FIXME JP + # params = [] + # from ldm.modules.attention import CrossAttention + # for n, m in self.model.named_modules(): + # if isinstance(m, CrossAttention) and n.endswith('attn2'): + # params.extend(m.parameters()) + # END FIXME JP if self.cond_stage_trainable: print(f"{self.__class__.__name__}: Also optimizing conditioner params!") params = params + list(self.cond_stage_model.parameters()) diff --git a/ldm/modules/encoders/modules.py b/ldm/modules/encoders/modules.py index f26b7e2..8e28371 100644 --- a/ldm/modules/encoders/modules.py +++ b/ldm/modules/encoders/modules.py @@ -172,6 +172,19 @@ class FrozenCLIPEmbedder(AbstractEncoder): def encode(self, text): return self(text) +class ProjectedFrozenCLIPEmbedder(AbstractEncoder): + def __init__(self, version="openai/clip-vit-large-patch14", device="cuda", max_length=77): # clip-vit-base-patch32 + super().__init__() + self.embedder = FrozenCLIPEmbedder(version=version, device=device, max_length=max_length) + self.projection = torch.nn.Linear(768, 768) + + def forward(self, text): + z = self.embedder(text) + return self.projection(z) + + def encode(self, text): + return self(text) + class FrozenCLIPImageEmbedder(AbstractEncoder): """ Uses the CLIP image encoder. @@ -192,6 +205,14 @@ class FrozenCLIPImageEmbedder(AbstractEncoder): self.register_buffer('mean', torch.Tensor([0.48145466, 0.4578275, 0.40821073]), persistent=False) self.register_buffer('std', torch.Tensor([0.26862954, 0.26130258, 0.27577711]), persistent=False) + # I didn't call this originally, but seems like it was frozen anyway + self.freeze() + + def freeze(self): + self.transformer = self.transformer.eval() + for param in self.parameters(): + param.requires_grad = False + def preprocess(self, x): # Expects inputs in the range -1, 1 x = kornia.geometry.resize(x, (224, 224), diff --git a/main.py b/main.py index 03cc59a..8a70313 100644 --- a/main.py +++ b/main.py @@ -172,11 +172,15 @@ def worker_init_fn(_): class DataModuleFromConfig(pl.LightningDataModule): def __init__(self, batch_size, train=None, validation=None, test=None, predict=None, wrap=False, num_workers=None, shuffle_test_loader=False, use_worker_init_fn=False, - shuffle_val_dataloader=False): + shuffle_val_dataloader=False, num_val_workers=None): super().__init__() self.batch_size = batch_size self.dataset_configs = dict() self.num_workers = num_workers if num_workers is not None else batch_size * 2 + if num_val_workers is None: + self.num_val_workers = self.num_workers + else: + self.num_val_workers = num_val_workers self.use_worker_init_fn = use_worker_init_fn if train is not None: self.dataset_configs["train"] = train @@ -221,7 +225,7 @@ class DataModuleFromConfig(pl.LightningDataModule): init_fn = None return DataLoader(self.datasets["validation"], batch_size=self.batch_size, - num_workers=self.num_workers, + num_workers=self.num_val_workers, worker_init_fn=init_fn, shuffle=shuffle) @@ -304,7 +308,7 @@ class SetupCallback(Callback): class ImageLogger(Callback): def __init__(self, batch_frequency, max_images, clamp=True, increase_log_steps=True, rescale=True, disabled=False, log_on_batch_idx=False, log_first_step=False, - log_images_kwargs=None): + log_images_kwargs=None, log_all_val=False): super().__init__() self.rescale = rescale self.batch_freq = batch_frequency @@ -320,6 +324,7 @@ class ImageLogger(Callback): self.log_on_batch_idx = log_on_batch_idx self.log_images_kwargs = log_images_kwargs if log_images_kwargs else {} self.log_first_step = log_first_step + self.log_all_val = log_all_val @rank_zero_only def _testtube(self, pl_module, images, batch_idx, split): @@ -354,10 +359,13 @@ class ImageLogger(Callback): def log_img(self, pl_module, batch, batch_idx, split="train"): check_idx = batch_idx if self.log_on_batch_idx else pl_module.global_step - if (self.check_frequency(check_idx) and # batch_idx % self.batch_freq == 0 + if self.log_all_val and split == "val": + should_log = True + else: + should_log = self.check_frequency(check_idx) + if (should_log and # batch_idx % self.batch_freq == 0 hasattr(pl_module, "log_images") and callable(pl_module.log_images) and - batch_idx > 5 and self.max_images > 0): logger = type(pl_module.logger) @@ -687,7 +695,7 @@ if __name__ == "__main__": } }, } - default_logger_cfg = default_logger_cfgs["wandb"] + default_logger_cfg = default_logger_cfgs["testtube"] if "logger" in lightning_config: logger_cfg = lightning_config.logger else: diff --git a/requirements.txt b/requirements.txt index 13cc675..60a5ada 100644 --- a/requirements.txt +++ b/requirements.txt @@ -15,6 +15,8 @@ webdataset==0.2.5 torchmetrics==0.6.0 fire==0.4.0 gradio==3.1.4 +diffusers==0.3.0 +datasets[vision]==2.4.0 -e git+https://github.com/CompVis/taming-transformers.git@master#egg=taming-transformers -e git+https://github.com/openai/CLIP.git@main#egg=clip -e . diff --git a/scripts/convert_sd_to_diffusers.py b/scripts/convert_sd_to_diffusers.py new file mode 100644 index 0000000..5fb7a59 --- /dev/null +++ b/scripts/convert_sd_to_diffusers.py @@ -0,0 +1,636 @@ +# coding=utf-8 +# Modified by Justin Pinkney +# Copyright 2022 The HuggingFace Inc. team. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +""" Conversion script for the LDM checkpoints. """ + +import argparse +import torch + +try: + from omegaconf import OmegaConf +except ImportError: + raise ImportError("OmegaConf is required to convert the LDM checkpoints. Please install it with `pip install OmegaConf`.") + +from transformers import BertTokenizerFast, CLIPTokenizer, CLIPTextModel +from transformers import CLIPFeatureExtractor +from diffusers import StableDiffusionPipeline, AutoencoderKL, UNet2DConditionModel, DDIMScheduler, PNDMScheduler +from diffusers.pipelines.stable_diffusion import StableDiffusionSafetyChecker +from diffusers.pipelines.latent_diffusion.pipeline_latent_diffusion import LDMBertModel, LDMBertConfig + + +def shave_segments(path, n_shave_prefix_segments=1): + """ + Removes segments. Positive values shave the first segments, negative shave the last segments. + """ + if n_shave_prefix_segments >= 0: + return '.'.join(path.split('.')[n_shave_prefix_segments:]) + else: + return '.'.join(path.split('.')[:n_shave_prefix_segments]) + + +def renew_resnet_paths(old_list, n_shave_prefix_segments=0): + """ + Updates paths inside resnets to the new naming scheme (local renaming) + """ + mapping = [] + for old_item in old_list: + new_item = old_item.replace('in_layers.0', 'norm1') + new_item = new_item.replace('in_layers.2', 'conv1') + + new_item = new_item.replace('out_layers.0', 'norm2') + new_item = new_item.replace('out_layers.3', 'conv2') + + new_item = new_item.replace('emb_layers.1', 'time_emb_proj') + new_item = new_item.replace('skip_connection', 'conv_shortcut') + + new_item = shave_segments(new_item, n_shave_prefix_segments=n_shave_prefix_segments) + + mapping.append({'old': old_item, 'new': new_item}) + + return mapping + + +def renew_vae_resnet_paths(old_list, n_shave_prefix_segments=0): + """ + Updates paths inside resnets to the new naming scheme (local renaming) + """ + mapping = [] + for old_item in old_list: + new_item = old_item + + new_item = new_item.replace('nin_shortcut', 'conv_shortcut') + + new_item = shave_segments(new_item, n_shave_prefix_segments=n_shave_prefix_segments) + + mapping.append({'old': old_item, 'new': new_item}) + + return mapping + + +def renew_attention_paths(old_list, n_shave_prefix_segments=0): + """ + Updates paths inside attentions to the new naming scheme (local renaming) + """ + mapping = [] + for old_item in old_list: + new_item = old_item + + # new_item = new_item.replace('norm.weight', 'group_norm.weight') + # new_item = new_item.replace('norm.bias', 'group_norm.bias') + + # new_item = new_item.replace('proj_out.weight', 'proj_attn.weight') + # new_item = new_item.replace('proj_out.bias', 'proj_attn.bias') + + # new_item = shave_segments(new_item, n_shave_prefix_segments=n_shave_prefix_segments) + + mapping.append({'old': old_item, 'new': new_item}) + + return mapping + + +def renew_vae_attention_paths(old_list, n_shave_prefix_segments=0): + """ + Updates paths inside attentions to the new naming scheme (local renaming) + """ + mapping = [] + for old_item in old_list: + new_item = old_item + + new_item = new_item.replace('norm.weight', 'group_norm.weight') + new_item = new_item.replace('norm.bias', 'group_norm.bias') + + new_item = new_item.replace('q.weight', 'query.weight') + new_item = new_item.replace('q.bias', 'query.bias') + + new_item = new_item.replace('k.weight', 'key.weight') + new_item = new_item.replace('k.bias', 'key.bias') + + new_item = new_item.replace('v.weight', 'value.weight') + new_item = new_item.replace('v.bias', 'value.bias') + + new_item = new_item.replace('proj_out.weight', 'proj_attn.weight') + new_item = new_item.replace('proj_out.bias', 'proj_attn.bias') + + new_item = shave_segments(new_item, n_shave_prefix_segments=n_shave_prefix_segments) + + mapping.append({'old': old_item, 'new': new_item}) + + return mapping + + +def assign_to_checkpoint(paths, checkpoint, old_checkpoint, attention_paths_to_split=None, additional_replacements=None, config=None): + """ + This does the final conversion step: take locally converted weights and apply a global renaming + to them. It splits attention layers, and takes into account additional replacements + that may arise. + + Assigns the weights to the new checkpoint. + """ + assert isinstance(paths, list), "Paths should be a list of dicts containing 'old' and 'new' keys." + + # Splits the attention layers into three variables. + if attention_paths_to_split is not None: + for path, path_map in attention_paths_to_split.items(): + old_tensor = old_checkpoint[path] + channels = old_tensor.shape[0] // 3 + + target_shape = (-1, channels) if len(old_tensor.shape) == 3 else (-1) + + num_heads = old_tensor.shape[0] // config["num_head_channels"] // 3 + + old_tensor = old_tensor.reshape((num_heads, 3 * channels // num_heads) + old_tensor.shape[1:]) + query, key, value = old_tensor.split(channels // num_heads, dim=1) + + checkpoint[path_map['query']] = query.reshape(target_shape) + checkpoint[path_map['key']] = key.reshape(target_shape) + checkpoint[path_map['value']] = value.reshape(target_shape) + + for path in paths: + new_path = path['new'] + + # These have already been assigned + if attention_paths_to_split is not None and new_path in attention_paths_to_split: + continue + + # Global renaming happens here + new_path = new_path.replace('middle_block.0', 'mid_block.resnets.0') + new_path = new_path.replace('middle_block.1', 'mid_block.attentions.0') + new_path = new_path.replace('middle_block.2', 'mid_block.resnets.1') + + if additional_replacements is not None: + for replacement in additional_replacements: + new_path = new_path.replace(replacement['old'], replacement['new']) + + # proj_attn.weight has to be converted from conv 1D to linear + if "proj_attn.weight" in new_path: + checkpoint[new_path] = old_checkpoint[path['old']][:, :, 0] + else: + checkpoint[new_path] = old_checkpoint[path['old']] + + +def conv_attn_to_linear(checkpoint): + keys = list(checkpoint.keys()) + attn_keys = ["query.weight", "key.weight", "value.weight"] + for key in keys: + if ".".join(key.split(".")[-2:]) in attn_keys: + if checkpoint[key].ndim > 2: + checkpoint[key] = checkpoint[key][:, :, 0, 0] + elif "proj_attn.weight" in key: + if checkpoint[key].ndim > 2: + checkpoint[key] = checkpoint[key][:, :, 0] + + +def create_unet_diffusers_config(original_config): + """ + Creates a config for the diffusers based on the config of the LDM model. + """ + unet_params = original_config.model.params.unet_config.params + + block_out_channels = [unet_params.model_channels * mult for mult in unet_params.channel_mult] + + down_block_types = [] + resolution = 1 + for i in range(len(block_out_channels)): + block_type = "CrossAttnDownBlock2D" if resolution in unet_params.attention_resolutions else "DownBlock2D" + down_block_types.append(block_type) + if i != len(block_out_channels) - 1: + resolution *= 2 + + up_block_types = [] + for i in range(len(block_out_channels)): + block_type = "CrossAttnUpBlock2D" if resolution in unet_params.attention_resolutions else "UpBlock2D" + up_block_types.append(block_type) + resolution //= 2 + + config = dict( + sample_size=64, + in_channels=unet_params.in_channels, + out_channels=unet_params.out_channels, + down_block_types=tuple(down_block_types), + up_block_types=tuple(up_block_types), + block_out_channels=tuple(block_out_channels), + layers_per_block=unet_params.num_res_blocks, + cross_attention_dim=unet_params.context_dim, + attention_head_dim=unet_params.num_heads, + ) + + return config + + +def create_vae_diffusers_config(original_config): + """ + Creates a config for the diffusers based on the config of the LDM model. + """ + vae_params = original_config.model.params.first_stage_config.params.ddconfig + latent_channles = original_config.model.params.first_stage_config.params.embed_dim + + block_out_channels = [vae_params.ch * mult for mult in vae_params.ch_mult] + down_block_types = ["DownEncoderBlock2D"] * len(block_out_channels) + up_block_types = ["UpDecoderBlock2D"] * len(block_out_channels) + + config = dict( + sample_size=512, + in_channels=vae_params.in_channels, + out_channels=vae_params.out_ch, + down_block_types=tuple(down_block_types), + up_block_types=tuple(up_block_types), + block_out_channels=tuple(block_out_channels), + latent_channels=vae_params.z_channels, + layers_per_block=vae_params.num_res_blocks, + ) + return config + + +def create_diffusers_schedular(original_config): + schedular = PNDMScheduler( + num_train_timesteps=original_config.model.params.timesteps, + beta_start=original_config.model.params.linear_start, + beta_end=original_config.model.params.linear_end, + beta_schedule="scaled_linear", + skip_prk_steps=True, + ) + return schedular + + +def create_ldm_bert_config(original_config): + bert_params = original_config.model.parms.cond_stage_config.params + config = LDMBertConfig( + d_model=bert_params.n_embed, + encoder_layers=bert_params.n_layer, + encoder_ffn_dim=bert_params.n_embed * 4, + ) + return config + + +def convert_ldm_unet_checkpoint(checkpoint, config): + """ + Takes a state dict and a config, and returns a converted checkpoint. + """ + + # extract state_dict for UNet + unet_state_dict = {} + unet_key = "model.diffusion_model." + keys = list(checkpoint.keys()) + for key in keys: + if key.startswith(unet_key): + unet_state_dict[key.replace(unet_key, "")] = checkpoint.pop(key) + + new_checkpoint = {} + + new_checkpoint['time_embedding.linear_1.weight'] = unet_state_dict['time_embed.0.weight'] + new_checkpoint['time_embedding.linear_1.bias'] = unet_state_dict['time_embed.0.bias'] + new_checkpoint['time_embedding.linear_2.weight'] = unet_state_dict['time_embed.2.weight'] + new_checkpoint['time_embedding.linear_2.bias'] = unet_state_dict['time_embed.2.bias'] + + new_checkpoint['conv_in.weight'] = unet_state_dict['input_blocks.0.0.weight'] + new_checkpoint['conv_in.bias'] = unet_state_dict['input_blocks.0.0.bias'] + + new_checkpoint['conv_norm_out.weight'] = unet_state_dict['out.0.weight'] + new_checkpoint['conv_norm_out.bias'] = unet_state_dict['out.0.bias'] + new_checkpoint['conv_out.weight'] = unet_state_dict['out.2.weight'] + new_checkpoint['conv_out.bias'] = unet_state_dict['out.2.bias'] + + # Retrieves the keys for the input blocks only + num_input_blocks = len({'.'.join(layer.split('.')[:2]) for layer in unet_state_dict if 'input_blocks' in layer}) + input_blocks = {layer_id: [key for key in unet_state_dict if f'input_blocks.{layer_id}' in key] for layer_id in range(num_input_blocks)} + + # Retrieves the keys for the middle blocks only + num_middle_blocks = len({'.'.join(layer.split('.')[:2]) for layer in unet_state_dict if 'middle_block' in layer}) + middle_blocks = {layer_id: [key for key in unet_state_dict if f'middle_block.{layer_id}' in key] for layer_id in range(num_middle_blocks)} + + # Retrieves the keys for the output blocks only + num_output_blocks = len({'.'.join(layer.split('.')[:2]) for layer in unet_state_dict if 'output_blocks' in layer}) + output_blocks = {layer_id: [key for key in unet_state_dict if f'output_blocks.{layer_id}' in key] for layer_id in range(num_output_blocks)} + + for i in range(1, num_input_blocks): + block_id = (i - 1) // (config['layers_per_block'] + 1) + layer_in_block_id = (i - 1) % (config['layers_per_block'] + 1) + + resnets = [key for key in input_blocks[i] if f'input_blocks.{i}.0' in key and f'input_blocks.{i}.0.op' not in key] + attentions = [key for key in input_blocks[i] if f'input_blocks.{i}.1' in key] + + if f'input_blocks.{i}.0.op.weight' in unet_state_dict: + new_checkpoint[f'down_blocks.{block_id}.downsamplers.0.conv.weight'] = unet_state_dict.pop(f'input_blocks.{i}.0.op.weight') + new_checkpoint[f'down_blocks.{block_id}.downsamplers.0.conv.bias'] = unet_state_dict.pop(f'input_blocks.{i}.0.op.bias') + + paths = renew_resnet_paths(resnets) + meta_path = {'old': f'input_blocks.{i}.0', 'new': f'down_blocks.{block_id}.resnets.{layer_in_block_id}'} + assign_to_checkpoint(paths, new_checkpoint, unet_state_dict, additional_replacements=[meta_path], config=config) + + if len(attentions): + paths = renew_attention_paths(attentions) + meta_path = {'old': f'input_blocks.{i}.1', 'new': f'down_blocks.{block_id}.attentions.{layer_in_block_id}'} + assign_to_checkpoint(paths, new_checkpoint, unet_state_dict, additional_replacements=[meta_path], config=config) + + + resnet_0 = middle_blocks[0] + attentions = middle_blocks[1] + resnet_1 = middle_blocks[2] + + resnet_0_paths = renew_resnet_paths(resnet_0) + assign_to_checkpoint(resnet_0_paths, new_checkpoint, unet_state_dict, config=config) + + resnet_1_paths = renew_resnet_paths(resnet_1) + assign_to_checkpoint(resnet_1_paths, new_checkpoint, unet_state_dict, config=config) + + attentions_paths = renew_attention_paths(attentions) + meta_path = {'old': 'middle_block.1', 'new': 'mid_block.attentions.0'} + assign_to_checkpoint(attentions_paths, new_checkpoint, unet_state_dict, additional_replacements=[meta_path], config=config) + + for i in range(num_output_blocks): + block_id = i // (config['layers_per_block'] + 1) + layer_in_block_id = i % (config['layers_per_block'] + 1) + output_block_layers = [shave_segments(name, 2) for name in output_blocks[i]] + output_block_list = {} + + for layer in output_block_layers: + layer_id, layer_name = layer.split('.')[0], shave_segments(layer, 1) + if layer_id in output_block_list: + output_block_list[layer_id].append(layer_name) + else: + output_block_list[layer_id] = [layer_name] + + if len(output_block_list) > 1: + resnets = [key for key in output_blocks[i] if f'output_blocks.{i}.0' in key] + attentions = [key for key in output_blocks[i] if f'output_blocks.{i}.1' in key] + + resnet_0_paths = renew_resnet_paths(resnets) + paths = renew_resnet_paths(resnets) + + meta_path = {'old': f'output_blocks.{i}.0', 'new': f'up_blocks.{block_id}.resnets.{layer_in_block_id}'} + assign_to_checkpoint(paths, new_checkpoint, unet_state_dict, additional_replacements=[meta_path], config=config) + + if ['conv.weight', 'conv.bias'] in output_block_list.values(): + index = list(output_block_list.values()).index(['conv.weight', 'conv.bias']) + new_checkpoint[f'up_blocks.{block_id}.upsamplers.0.conv.weight'] = unet_state_dict[f'output_blocks.{i}.{index}.conv.weight'] + new_checkpoint[f'up_blocks.{block_id}.upsamplers.0.conv.bias'] = unet_state_dict[f'output_blocks.{i}.{index}.conv.bias'] + + # Clear attentions as they have been attributed above. + if len(attentions) == 2: + attentions = [] + + if len(attentions): + paths = renew_attention_paths(attentions) + meta_path = { + 'old': f'output_blocks.{i}.1', + 'new': f'up_blocks.{block_id}.attentions.{layer_in_block_id}' + } + assign_to_checkpoint(paths, new_checkpoint, unet_state_dict, additional_replacements=[meta_path], config=config) + else: + resnet_0_paths = renew_resnet_paths(output_block_layers, n_shave_prefix_segments=1) + for path in resnet_0_paths: + old_path = '.'.join(['output_blocks', str(i), path['old']]) + new_path = '.'.join(['up_blocks', str(block_id), 'resnets', str(layer_in_block_id), path['new']]) + + new_checkpoint[new_path] = unet_state_dict[old_path] + + return new_checkpoint + + +def convert_ldm_vae_checkpoint(checkpoint, config): + # extract state dict for VAE + vae_state_dict = {} + vae_key = "first_stage_model." + keys = list(checkpoint.keys()) + for key in keys: + if key.startswith(vae_key): + vae_state_dict[key.replace(vae_key, "")] = checkpoint.get(key) + + new_checkpoint = {} + + new_checkpoint["encoder.conv_in.weight"] = vae_state_dict["encoder.conv_in.weight"] + new_checkpoint["encoder.conv_in.bias"] = vae_state_dict["encoder.conv_in.bias"] + new_checkpoint["encoder.conv_out.weight"] = vae_state_dict["encoder.conv_out.weight"] + new_checkpoint["encoder.conv_out.bias"] = vae_state_dict["encoder.conv_out.bias"] + new_checkpoint["encoder.conv_norm_out.weight"] = vae_state_dict["encoder.norm_out.weight"] + new_checkpoint["encoder.conv_norm_out.bias"] = vae_state_dict["encoder.norm_out.bias"] + + new_checkpoint["decoder.conv_in.weight"] = vae_state_dict["decoder.conv_in.weight"] + new_checkpoint["decoder.conv_in.bias"] = vae_state_dict["decoder.conv_in.bias"] + new_checkpoint["decoder.conv_out.weight"] = vae_state_dict["decoder.conv_out.weight"] + new_checkpoint["decoder.conv_out.bias"] = vae_state_dict["decoder.conv_out.bias"] + new_checkpoint["decoder.conv_norm_out.weight"] = vae_state_dict["decoder.norm_out.weight"] + new_checkpoint["decoder.conv_norm_out.bias"] = vae_state_dict["decoder.norm_out.bias"] + + new_checkpoint["quant_conv.weight"] = vae_state_dict["quant_conv.weight"] + new_checkpoint["quant_conv.bias"] = vae_state_dict["quant_conv.bias"] + new_checkpoint["post_quant_conv.weight"] = vae_state_dict["post_quant_conv.weight"] + new_checkpoint["post_quant_conv.bias"] = vae_state_dict["post_quant_conv.bias"] + + + # Retrieves the keys for the encoder down blocks only + num_down_blocks = len({'.'.join(layer.split('.')[:3]) for layer in vae_state_dict if 'encoder.down' in layer}) + down_blocks = {layer_id: [key for key in vae_state_dict if f'down.{layer_id}' in key] for layer_id in range(num_down_blocks)} + + # Retrieves the keys for the decoder up blocks only + num_up_blocks = len({'.'.join(layer.split('.')[:3]) for layer in vae_state_dict if 'decoder.up' in layer}) + up_blocks = {layer_id: [key for key in vae_state_dict if f'up.{layer_id}' in key] for layer_id in range(num_up_blocks)} + + + for i in range(num_down_blocks): + resnets = [key for key in down_blocks[i] if f'down.{i}' in key and f"down.{i}.downsample" not in key] + + if f"encoder.down.{i}.downsample.conv.weight" in vae_state_dict: + new_checkpoint[f"encoder.down_blocks.{i}.downsamplers.0.conv.weight"] = vae_state_dict.pop(f"encoder.down.{i}.downsample.conv.weight") + new_checkpoint[f"encoder.down_blocks.{i}.downsamplers.0.conv.bias"] = vae_state_dict.pop(f"encoder.down.{i}.downsample.conv.bias") + + paths = renew_vae_resnet_paths(resnets) + meta_path = {'old': f'down.{i}.block', 'new': f'down_blocks.{i}.resnets'} + assign_to_checkpoint(paths, new_checkpoint, vae_state_dict, additional_replacements=[meta_path], config=config) + + mid_resnets = [key for key in vae_state_dict if "encoder.mid.block" in key] + num_mid_res_blocks = 2 + for i in range(1, num_mid_res_blocks + 1): + resnets = [key for key in mid_resnets if f"encoder.mid.block_{i}" in key] + + paths = renew_vae_resnet_paths(resnets) + meta_path = {'old': f'mid.block_{i}', 'new': f'mid_block.resnets.{i - 1}'} + assign_to_checkpoint(paths, new_checkpoint, vae_state_dict, additional_replacements=[meta_path], config=config) + + mid_attentions = [key for key in vae_state_dict if "encoder.mid.attn" in key] + paths = renew_vae_attention_paths(mid_attentions) + meta_path = {'old': 'mid.attn_1', 'new': 'mid_block.attentions.0'} + assign_to_checkpoint(paths, new_checkpoint, vae_state_dict, additional_replacements=[meta_path], config=config) + conv_attn_to_linear(new_checkpoint) + + for i in range(num_up_blocks): + block_id = num_up_blocks - 1 - i + resnets = [key for key in up_blocks[block_id] if f'up.{block_id}' in key and f"up.{block_id}.upsample" not in key] + + if f"decoder.up.{block_id}.upsample.conv.weight" in vae_state_dict: + new_checkpoint[f"decoder.up_blocks.{i}.upsamplers.0.conv.weight"] = vae_state_dict[f"decoder.up.{block_id}.upsample.conv.weight"] + new_checkpoint[f"decoder.up_blocks.{i}.upsamplers.0.conv.bias"] = vae_state_dict[f"decoder.up.{block_id}.upsample.conv.bias"] + + paths = renew_vae_resnet_paths(resnets) + meta_path = {'old': f'up.{block_id}.block', 'new': f'up_blocks.{i}.resnets'} + assign_to_checkpoint(paths, new_checkpoint, vae_state_dict, additional_replacements=[meta_path], config=config) + + mid_resnets = [key for key in vae_state_dict if "decoder.mid.block" in key] + num_mid_res_blocks = 2 + for i in range(1, num_mid_res_blocks + 1): + resnets = [key for key in mid_resnets if f"decoder.mid.block_{i}" in key] + + paths = renew_vae_resnet_paths(resnets) + meta_path = {'old': f'mid.block_{i}', 'new': f'mid_block.resnets.{i - 1}'} + assign_to_checkpoint(paths, new_checkpoint, vae_state_dict, additional_replacements=[meta_path], config=config) + + mid_attentions = [key for key in vae_state_dict if "decoder.mid.attn" in key] + paths = renew_vae_attention_paths(mid_attentions) + meta_path = {'old': 'mid.attn_1', 'new': 'mid_block.attentions.0'} + assign_to_checkpoint(paths, new_checkpoint, vae_state_dict, additional_replacements=[meta_path], config=config) + conv_attn_to_linear(new_checkpoint) + return new_checkpoint + + +def convert_ldm_bert_checkpoint(checkpoint, config): + def _copy_attn_layer(hf_attn_layer, pt_attn_layer): + + hf_attn_layer.q_proj.weight.data = pt_attn_layer.to_q.weight + hf_attn_layer.k_proj.weight.data = pt_attn_layer.to_k.weight + hf_attn_layer.v_proj.weight.data = pt_attn_layer.to_v.weight + + hf_attn_layer.out_proj.weight = pt_attn_layer.to_out.weight + hf_attn_layer.out_proj.bias = pt_attn_layer.to_out.bias + + + def _copy_linear(hf_linear, pt_linear): + hf_linear.weight = pt_linear.weight + hf_linear.bias = pt_linear.bias + + + def _copy_layer(hf_layer, pt_layer): + # copy layer norms + _copy_linear(hf_layer.self_attn_layer_norm, pt_layer[0][0]) + _copy_linear(hf_layer.final_layer_norm, pt_layer[1][0]) + + # copy attn + _copy_attn_layer(hf_layer.self_attn, pt_layer[0][1]) + + # copy MLP + pt_mlp = pt_layer[1][1] + _copy_linear(hf_layer.fc1, pt_mlp.net[0][0]) + _copy_linear(hf_layer.fc2, pt_mlp.net[2]) + + + def _copy_layers(hf_layers, pt_layers): + for i, hf_layer in enumerate(hf_layers): + if i != 0: i += i + pt_layer = pt_layers[i:i+2] + _copy_layer(hf_layer, pt_layer) + + hf_model = LDMBertModel(config).eval() + + # copy embeds + hf_model.model.embed_tokens.weight = checkpoint.transformer.token_emb.weight + hf_model.model.embed_positions.weight.data = checkpoint.transformer.pos_emb.emb.weight + + # copy layer norm + _copy_linear(hf_model.model.layer_norm, checkpoint.transformer.norm) + + # copy hidden layers + _copy_layers(hf_model.model.layers, checkpoint.transformer.attn_layers.layers) + + _copy_linear(hf_model.to_logits, checkpoint.transformer.to_logits) + + return hf_model + +def copy_ema_weights(checkpoint, config): + """Copies ema weights over the original weights in a state_dict + Only applies to the unet + """ + from ldm.util import instantiate_from_config + model = instantiate_from_config(config.model) + for k, v in checkpoint.items(): + if k.startswith('model.'): + model_key = k[6:] + ema_key = model.model_ema.m_name2s_name[model_key] + ema_weight = checkpoint["model_ema." + ema_key] + print(f"copying ema weight {ema_key} to {model_key}") + checkpoint[k] = ema_weight + + return checkpoint + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + + parser.add_argument( + "--checkpoint_path", default=None, type=str, required=True, help="Path to the checkpoint to convert." + ) + + parser.add_argument( + "--original_config_file", + default=None, + type=str, + required=True, + help="The YAML config file corresponding to the original architecture.", + ) + + parser.add_argument( + "--dump_path", default=None, type=str, required=True, help="Path to the output model." + ) + + parser.add_argument( + "--use_ema", action="store_true", help="use EMA weights for conversion", + ) + + args = parser.parse_args() + + original_config = OmegaConf.load(args.original_config_file) + + checkpoint = torch.load(args.checkpoint_path, map_location="cpu")["state_dict"] + + if args.use_ema: + checkpoint = copy_ema_weights(checkpoint, original_config) + + # Convert the UNet2DConditionModel model. + unet_config = create_unet_diffusers_config(original_config) + converted_unet_checkpoint = convert_ldm_unet_checkpoint(checkpoint, unet_config) + + unet = UNet2DConditionModel(**unet_config) + unet.load_state_dict(converted_unet_checkpoint) + + # Convert the VAE model. + vae_config = create_vae_diffusers_config(original_config) + converted_vae_checkpoint = convert_ldm_vae_checkpoint(checkpoint, vae_config) + + vae = AutoencoderKL(**vae_config) + vae.load_state_dict(converted_vae_checkpoint) + + # Convert the text model. + text_model_type = original_config.model.params.cond_stage_config.target.split(".")[-1] + if text_model_type == "FrozenCLIPEmbedder": + text_model = CLIPTextModel.from_pretrained("openai/clip-vit-large-patch14") + tokenizer = CLIPTokenizer.from_pretrained("openai/clip-vit-large-patch14") + else: + # TODO: update the convert function to use the state_dict without the model instance. + text_config = create_ldm_bert_config(original_config) + text_model = convert_ldm_bert_checkpoint(checkpoint, text_config) + tokenizer = BertTokenizerFast.from_pretrained("bert-base-uncased") + + safety_checker = StableDiffusionSafetyChecker.from_pretrained("CompVis/stable-diffusion-safety-checker") + feature_extractor = CLIPFeatureExtractor.from_pretrained("openai/clip-vit-large-patch14") + scheduler = create_diffusers_schedular(original_config) + pipe = StableDiffusionPipeline( + vae=vae, + text_encoder=text_model, + tokenizer=tokenizer, + unet=unet, + scheduler=scheduler, + safety_checker=safety_checker, + feature_extractor=feature_extractor, + ) + pipe.save_pretrained(args.dump_path) +