From 7a33b976b6871fa2eb4a4ce32c592718a01fbb03 Mon Sep 17 00:00:00 2001 From: Jesus Brasero Date: Tue, 19 Nov 2024 12:25:24 +0100 Subject: [PATCH] anshuman image to text code --- .../image-to-text/LICENSE | 35 ++++++ .../image-to-text/README.md | 116 ++++++++++++++++++ ai/generative-ai-service/image-to-text/app.py | 96 +++++++++++++++ .../image-to-text/image1.png | Bin 0 -> 51920 bytes .../image-to-text/requirements.txt | 3 + 5 files changed, 250 insertions(+) create mode 100644 ai/generative-ai-service/image-to-text/LICENSE create mode 100644 ai/generative-ai-service/image-to-text/README.md create mode 100644 ai/generative-ai-service/image-to-text/app.py create mode 100644 ai/generative-ai-service/image-to-text/image1.png create mode 100644 ai/generative-ai-service/image-to-text/requirements.txt diff --git a/ai/generative-ai-service/image-to-text/LICENSE b/ai/generative-ai-service/image-to-text/LICENSE new file mode 100644 index 000000000..62c949c4e --- /dev/null +++ b/ai/generative-ai-service/image-to-text/LICENSE @@ -0,0 +1,35 @@ +Copyright (c) 2024 Oracle and/or its affiliates. + +The Universal Permissive License (UPL), Version 1.0 + +Subject to the condition set forth below, permission is hereby granted to any +person obtaining a copy of this software, associated documentation and/or data +(collectively the "Software"), free of charge and under any and all copyright +rights in the Software, and any and all patent rights owned or freely +licensable by each licensor hereunder covering either (i) the unmodified +Software as contributed to or provided by such licensor, or (ii) the Larger +Works (as defined below), to deal in both + +(a) the Software, and +(b) any piece of software and/or hardware listed in the lrgrwrks.txt file if +one is included with the Software (each a "Larger Work" to which the Software +is contributed by such licensors), + +without restriction, including without limitation the rights to copy, create +derivative works of, display, perform, and distribute the Software and make, +use, sell, offer for sale, import, export, have made, and have sold the +Software and the Larger Work(s), and to sublicense the foregoing rights on +either these or other terms. + +This license is subject to the following condition: +The above copyright notice and either this complete permission notice or at +a minimum a reference to the UPL must be included in all copies or +substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/ai/generative-ai-service/image-to-text/README.md b/ai/generative-ai-service/image-to-text/README.md new file mode 100644 index 000000000..ef44ab1b1 --- /dev/null +++ b/ai/generative-ai-service/image-to-text/README.md @@ -0,0 +1,116 @@ + +# Image-to-Text with Oracle OCI Gen AI + +This application is built using **Streamlit** and **Oracle OCI Generative AI**, allowing users to upload an image, input a prompt, and receive a text-based response generated by the AI model. It leverages Oracle's Gen AI Inference API for processing multimodal data (text and image). + +Reviewed: 19.11.2024 + + + + +--- + +## Features + +- Upload an image file (`.png`, `.jpg`, `.jpeg`). +- Provide a natural language prompt describing your query about the image. +- Get a detailed response generated by Oracle's Generative AI model. +- Easy-to-use interface built with Streamlit. + +--- + +## Prerequisites + +1. **Oracle OCI Configuration** + - Set up your Oracle Cloud Infrastructure (OCI) account. + - Obtain the following: + - **Compartment OCID** + - **Generative AI Service Endpoint** + - **Model ID** (e.g., `meta.llama-3.2-90b-vision-instruct`). + - Configure your `~/.oci/config` file with your profile details. + +2. **Python Environment** + - Install Python 3.8 or later. + - Install required dependencies (see below). + +--- + +## Installation + +1. Clone the repository: + + +2. Install dependencies: + ```bash + pip install -r requirements.txt + ``` + +3. Configure OCI: + Ensure your `~/.oci/config` file is set up with the correct credentials and profile. + +--- + +## Usage + +1. Run the application: + ```bash + streamlit run app.py + ``` + +2. Open the web application in your browser at `http://localhost:8501`. + +3. Upload an image and provide a prompt in the text input field. Click **Generate Response** to receive the AI-generated output. + +--- + +## File Structure + +```plaintext +. +├── app.py # Main application file +├── requirements.txt # Python dependencies +└── README.md # Project documentation +``` + +--- + +## Dependencies + +List of dependencies (found in `requirements.txt`): +- **Streamlit**: For creating the web UI. +- **oci**: Oracle Cloud Infrastructure SDK. +- **base64**: For encoding images. + +Install them using: +```bash +pip install -r requirements.txt +``` + +--- + +## Notes + +- Ensure your OCI credentials and Compartment OCID are correct in the script. +- Check the image format and size for compatibility. +- Use the appropriate Generative AI service endpoint for your region. + +--- + +## Troubleshooting + +- **Error: `oci.exceptions.ServiceError`** + - Check if your compartment OCID and API keys are configured correctly. + +- **Streamlit does not load:** + - Verify that Streamlit is installed and the application is running on the correct port. + + + +--- + +## Acknowledgments + +- [Oracle Cloud Infrastructure (OCI)](https://www.oracle.com/cloud/) +- [Streamlit Documentation](https://docs.streamlit.io/) + +For questions or feedback, please contact [anshuman.p.panda@oracle.com]. diff --git a/ai/generative-ai-service/image-to-text/app.py b/ai/generative-ai-service/image-to-text/app.py new file mode 100644 index 000000000..5b8f6cd69 --- /dev/null +++ b/ai/generative-ai-service/image-to-text/app.py @@ -0,0 +1,96 @@ +# Author: Ansh +import streamlit as st +import oci +import base64 +from PIL import Image + +# OCI Configuration ( Put your compartment id below) +compartmentId = "ocid1.compartment.oc1..***************************" +llm_service_endpoint = "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com" + +# Define functions +def encode_image(image_path): + with open(image_path, "rb") as image_file: + return base64.b64encode(image_file.read()).decode("utf-8") + +def get_message(encoded_image, user_prompt): + content1 = oci.generative_ai_inference.models.TextContent() + content1.text = user_prompt + + content2 = oci.generative_ai_inference.models.ImageContent() + image_url = oci.generative_ai_inference.models.ImageUrl() + image_url.url = f"data:image/jpeg;base64,{encoded_image}" + content2.image_url = image_url + + message = oci.generative_ai_inference.models.UserMessage() + message.content = [content1, content2] + return message + +def get_chat_request(encoded_image, user_prompt): + chat_request = oci.generative_ai_inference.models.GenericChatRequest() + chat_request.messages = [get_message(encoded_image, user_prompt)] + chat_request.api_format = oci.generative_ai_inference.models.BaseChatRequest.API_FORMAT_GENERIC + chat_request.num_generations = 1 + chat_request.is_stream = False + chat_request.max_tokens = 500 + chat_request.temperature = 0.75 + chat_request.top_p = 0.7 + chat_request.top_k = -1 + chat_request.frequency_penalty = 1.0 + return chat_request + +def get_chat_detail(chat_request): + chat_detail = oci.generative_ai_inference.models.ChatDetails() + chat_detail.serving_mode = oci.generative_ai_inference.models.OnDemandServingMode(model_id="meta.llama-3.2-90b-vision-instruct") + chat_detail.compartment_id = compartmentId + chat_detail.chat_request = chat_request + return chat_detail + +# Streamlit UI +st.title("Image to Text with Oci Gen AI") +st.write("Upload an image, provide a prompt, and get a response from Oci Gen AI.") + +# Upload image +uploaded_file = st.file_uploader("Upload an image", type=["png", "jpg", "jpeg"]) + +# Prompt input +user_prompt = st.text_input("Enter your prompt for the image:", value="Tell me about this image.") + +if uploaded_file: + # Save the uploaded image temporarily + temp_image_path = "temp_uploaded_image.jpg" + with open(temp_image_path, "wb") as f: + f.write(uploaded_file.getbuffer()) + + # Display the uploaded image + st.image(temp_image_path, caption="Uploaded Image", use_column_width=True) + + # Process and call the model + if st.button("Generate Response"): + with st.spinner("Please wait while the model processes the image..."): + try: + # Encode the image + encoded_image = encode_image(temp_image_path) + + # Setup OCI client + CONFIG_PROFILE = "DEFAULT" + config = oci.config.from_file('~/.oci/config', CONFIG_PROFILE) + + llm_client = oci.generative_ai_inference.GenerativeAiInferenceClient( + config=config, + service_endpoint=llm_service_endpoint, + retry_strategy=oci.retry.NoneRetryStrategy(), + timeout=(10, 240) + ) + + # Get the chat request and response + llm_request = get_chat_request(encoded_image, user_prompt) + llm_payload = get_chat_detail(llm_request) + llm_response = llm_client.chat(llm_payload) + + # Extract and display the response + llm_text = llm_response.data.chat_response.choices[0].message.content[0].text + st.success("Model Response:") + st.write(llm_text) + except Exception as e: + st.error(f"An error occurred: {str(e)}") diff --git a/ai/generative-ai-service/image-to-text/image1.png b/ai/generative-ai-service/image-to-text/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..bb0673b025a0475dc0f6116e8dcea85b14b543d1 GIT binary patch literal 51920 zcmeFZWmH^SvxZBsAR$=r5Zo<60|a*n9%!_2cXuZQ*I>aCBm|n!xVyW%JHct(xr@Ee z8RzV8-yiq)9fz?7(yP0fQnO~&ThHt;B?T!AG-5P3I5-R$X>k=eI0Psh9DFwlGVq9j zw6i7fnt&59X ztrP((hc8pzYA-TnNA!Vp2`Uk#uK^FIH7X;vm&CuABEn?xF(TKGRMSRe0yJ_Jv_a*jw3ZuAYE z5&qBCl0ORv4gISRGUC!SUt4dWPyQ0K5~FjFLO{UnAwemgw}a zo=Latp(-_a-eZ*p{HqVZ0H!1S`%$o>|JvlE7Gir4=!55S-QHx>V~o&TGP z|FNt8TNVFW#{cJ_{%6Jfe{)b^MRJ>O6Dl?KBB;20k#{bCN?!B(w(ZRiAm7j^eHRw& zjT1;~aEGb59?Y@u_}F6O{@0eEK`RWiB*NqP+rPSh6aJ<2!+8BhEnYxdT~Fjqu*RsQt3bbJvs}*fFs7hYR;vUeZ|JO z?0p(#n^0}D%wV_NbRS>WUWH5rFOxu>6iLK^C>x`g!ADhnw1E1xOw+stMW@bQ)=)gA zSi9%;l8o9nd*c~IczZ{gDnxo+62qncoEAnb8XUS6zJ82i;=5=2ch82ZpyFQ$`$*E?nBBSaq8ykcOZ%N#k$&bZylf&`ZsLX~lFiph+&De%5Ar>;hLYz(K^K;)8!mZpEJO(l2Dfm>{5R6VRWKnCk)DXw(L?E5zi;%H} z5l!T4zMv%elFV@K{G5cl_cAI?vn_$wiFUTsCCGNk?PyspP@IAJpS=v9*5_W~Tf`vY zE?Q`GQ6mVB!#YN`d##Jt7Z4kh6ZzJJxv0p1U{CwlbmrGmX@M$WknBMA52x6}L zeEI$DMSPWwR^2E38cy>G@t1EtY>b`i?TMxF6f28V4U9oRP-;zCt2BmJP`$m62F=nf z96(ef&^~Kr`NRGE+Ygko5aa$Ni7HzyDVU|yid;p*OQH!qEl#_W$p}!5&rk}tj9ZgJ zCcEy<1zGN`rtp<}j{9f-atJn-}RlljRc?*ZcbtAQZABZ>%)u2ds7F`ERh>zhB5^iM{^|5m3ZgcFAo=!2WB1X z^NQFSW5e*%YRT}stI$i+A{uF>!k(p$AU|b}$GRHG^0*w`T zxxe@W{v7c+Y`5$eMmSt*a9fZ)#q2 zQ!=Pml;lwsW$ONPuMAE|1w6Am7lvsp@saP!?c zQ|FyB9YuJKnE=D3^(tZuP{tmrUQ36R2lq@|9xf;MCqt#vXG*C} z`d;Bsh$0Hb+>cby9KkAc)|mCbQ3#$7fNgiQVYUP%SeZq-0Q`PM#?>L>ppjMcO|}ggEZc zIHZ1X32BBR1lE%bS^6xOWai4Is!&Qr=Te>v`aOtx+b+hV6R;LY#3_pkNk+aly5etMSmHjG>LnBMBTkjm7^3L!NK9A*q zyO3Y^EVSP3h)A7`-<5d>CI{+GrK<0UB9Wq$3a36=ZU!A(!eDVb9H#vtQE3Qc-g3jm zIuG@)7&U}>j*?jBb8Qjsz4)WhF#put%~U0dhrg1kzQSWt-_de)-0owbk=xZHI=Pv& znyr5Hr&dUp#_5P*yT3gj!|)H{h*JGIc&2uA>vr@}*P4`Mw$8*UtdJ`5XxWe4X=`Zu zKs9ZOg0XKRIzR|Yj<=;ENa5f6kj`L zc}whC_lMloOFWYnm6`9#szSxpC?(~tgN~?sSZWJRV4bL>w_$pFjmq;_otN8L{J&NN zN{u?>>6IxVH+IXlkf9Mn1anw?Uft1Qg@uY-rR9xC>Qs^Dwo0y7ByUHe@++e=gyv_V z6(5{amRC$=5@_Spm>#gs&@I|J7})hklpta`CrD=kKh)IgoMp~mRw~wTclkO|hy-4Z zRl8yKrtwre#&z*dJjW#Kt##T)S|)OnN*GF`t1i+mU%)Lx ze>>fCW>6~&9dHr@RVblTbqAN~y?+GBxk1|)Ih|+dQw5!> zAcOWd>Gd5D{w^dpTS{5hA+y~)?P@!@i}dSzZ|9RMz4*5x@QY?8L|7al4?g)rEBepK z_`x`4vlH7`M7I}zvP3#0Kc-*F+;p z@VWbQ+FbUNyu z9Ji*H#V1Zw8niM^2Y}T7yO{qPSBgCPV>pOeYpVF7{xrN3d{BpB(t5Z2(d~k(p+_&< z*+b^*+kiW6ue!XR&n4t}gR%1D?@4j-XL6)os`8IW!nazRm%_PJDZz#{$;`%klp73{ z>wFK;{E!F(?9G?TeivyqPHDO{31Ys0Y2|pTrE(e+t!A`JVl33#HBS_dD=js8Z9@e$ zdiP(#c845Nd40-0L9}K|c7D%SCFk`&TrRTD(T}0|OXMsn+7x|1PUsd|!^2E#qzg}G z+@@3cJu46kY-RB;Qk||W#>0h@rB_9fTy7I+b@AuB5+_gdGjX8D^rggvC<~CuUsNfV z#nfhjCRd@O?2Z++at?z>h5Zw~z5CS5DWT2j16eF)mW)2s=YS z^y+x*&nCL%SJFQYfosqK!GAg1Tusya~?=RATbz4I?qzu~LV^-VgRgL1& z)~vi1@_#0S$EcRv{BlQIVxZW?K2O05hGx~%dS8D(2!C$)PNzs*)2|k2Z3FRQmPKNJ zrPVZz;sd36x%Lo&5^VR-A;4toCebNG-D}WGWN&3o%}=(;+r#-b!i(-vqiW%;Yz2q( z10K}N)h6+5=j=%FGx}YqvXPJ4_3hfVN}2e(Mbqzxh+(QIO^+9-qfSPhCwrx^lT9X> z%w4}r3C}clm##V3sna%_bev({{cTDgrWJS5oG0oBTpIbj>c? zpv&tb#yF`-EW3t<^10XpZC1SJ8Y^t1-Guc3v)t!OlFY z`sBk2wPNPSmt+e$X^lFc3vn2o>09~b*v@x&lzx8XidOmvvvhft5`!o$9P<=XrxA!S zfOSPM_N?MJd+g>LG{xBZQA{wY7Z@--$`L^S zpe)eC8qe+6aXGOUvcSzLS_kX2(pyr9m~SQ&wYV?$4sG(9xU8np;mKy{fKf7I zZ9l}akM_YRxyDCHhVYbOAIV*0i!k{t>jzEi+`D#^Re;}{Mx1F}k;uK%c zWSv=?A?Q2rd!woRBRH4n-^%SbV>QYM?R>{nF=yB1(s$yI_cQ!X2pt@lZv;PySVl6l z(r@2(4O$0Srpp_+g-?&uy@afA9!i@g*@5~nL)|e39NuYHv{$lPggY~8F=qeV&HEhT zn|wj)m$W-s*b`}ypd*sQe4#$vkPTnnxtY-Xm{hS-J~tQeo!8B~IHjsz**w)okXN#$ zk`cVv+g+ppLSCunJ;6Afr zY8kK59=1&kIDcNWqFyG&k3^DOxfZKQb50=RAF7=ip%`MTciR@3)z zVyVQs+ex#>9G~;~_VhmV)4REh5Dnp1inrw%SaH=p#e|vIUA7*J$We&43DO$&qSAY{ zT1Rt@QkD}%W*!%7`;KMCz0}UXl-O;HmVc#bi3nAlT48jizC*z`Gh;8+-<@kr4j08h zXBp}<>H9ib5*5m*Tl>ue4yT{=6*j2TNg+7MhoOUfnkNM>n7rLoNd!p2uQmceuNRezwiLThA($RG#5y$B?+<(c+ByiypViB0oJ? zWa>Pv;1?I-qZdpJrUNOCum#liB9~pB6TIJqV3ryEx3Vb+v|JAv5)CB!hi?-l6Va26MpBwz{LU zl(6qs8JB8Ry;?^RbAp%28iaIYLM1Wn&>A_NrtGRN(F19?uSJ9mYt~bJZ_DVxxck+Ou_ zT1l}h`b}}#<(52IZ)&&QF|m%-`1y9UZ>9(qq@#E2%IiWD#pop=O}Q7?pf=$9l$?f! z!N=0rX`C*+IF+ct3gNq!-CqQ;{mZ22{_f`;H6OG1lx@ZcOF2%k{w$jLuPjs>v7^Tt zSJ+>&sg^rIFVfzZn<*qRCJr76xV&mWf&YSm*PY7)y{7_Kp1}8Y11XUUFP9b1v598e zwJ?f8qw~%Q9>dD;X>y)yVk`~%Ht|dC!irR9C^?5`OOHIswb#Y2Sp?$C7)%s`9NsW_ zMtAww0V6Mx5+)7~9|1upF0Yx5^EGQtdmGCXX|Gy8gsux|-Ti!wX!E5l7m*L>*jubZA*K{&*VX4mSRcOz{F3InxC0cM)u=!EuVj_|*8&M0$$*}H> z=^BdL_cdD^YVnFLBF!A*SK`C7>5kRz0)AUHt9Ujw?8u|Xq^iOlR{G6!16|$Hp=;Hx zJvV4<#GoS|E@CD`)bZ#RbL%Kywo*aqSZSd;&Q3_V9l8)5pc_y<=>}V0_&XuWUuDZr zy(BNS+cMBu{X9|m?@aoM^mqf!$osUaEq@$(4aN#K8W_uWpO8|et(`)Whh!&yDc^A- z2`!)|;qRfzq_CyZpmaZaO?_6ES=q zv8y25$m!ANyfg0?+kB({byf|wTi{Tj2d#=Ev$|)M%PC(1;xbdG+pDkyl{#w)yc+av z_JiNfC1p*I$E`75AMnRCl-8N)@OM3v8XeZ@dcRXNHR3kNH|(NXN6G*~Ut&Z#c+6|~ zecIVj;23YFDi_o6?DZ_SkZY_^(gOjn>satRmHetE{$@YQ*Zfu8z)BW5*Wa0xlYABg zPYFi26)>O$uO=cKz3w*N+MIy6`EAY}EC+M!SKEQ7?tOP1xaymMAZ7n|r!uWNgU!-mah#EjUL!j2YqPGER%jN~6wh zsuaGl<;|1&w9S7$mR@^`6rfUJe9<07YI(aSVhgVSKEzbVwAw(gQ+}7Ag9jZN8ZdBb z9gR}5nug^(e{n>wQ|+6>c_SiJ_}lO1b3<`BNHIEM7JjLzIbSggdm-QQ>jwi5iABjH z^ufxEE>-mb;snsqg{R!>Z(CZ8LX4y$WN6O*OaKBX(+ z?w@a2nI|NBg+%7lb(w-7ik!)Qhgom8`FCw$;a+8@8$)^Xh*WZJf7>1)Uzmb1 zi^HdX$`kh<|F|IuKSmazwz&ON=ZxBZc?%@=c?ML?*boNr{pp|q7$_7<{S}BPxI^3} z?6ZzYrlv_Ts9X%UOWiiosk0M zkBHWznNDgAeEfQeKsn?};b^g$%|!OrmFi0bla6jw;4h+DB4iLOyp;RYb);Cc z>_pcA|5N|Nt=FFxTba1E=0AU;d;c&OBy!hiHw>i`VL*)k%QYQWhJrLCd5ZP$^xv5~=LM#clqWI-!KtEf znq&>kXfuqzQ(S_V*xa48dhnc3gMH(&GM%lOy^OB+>5RrUJP?|1bc!&R&Qhq(IIM|L zVw(A@pYQngEHIx_vdP~t|7>;tKm#5eYHX9`^O>U-GK%0BNM_YjpMHE#o4zOp$1Y_M z;Vo$<6IAZb#XlY@UqRU^t9|pprdOpA{)#m>Z5l>Q!(oT>II*LVTHguL?692Btrjs7 z$#uRBUU5*)xe~;IS0riNAS_{c>M=Rk;RT!%tMi|cq^-onkDg1fUP0A+-eCgT7WQA- z7EcpC%o2YVS1kOrhDp6RDJrds9vjXeCwbryfzyeMJB_=B2mi90?OkZYuB3^#W}G@iPQ zpPJ!&$O`C{=eWUW+gd=7M{#>$eL4PsikmO}`DA%l^83SiwZ~Xx{qj0;t7gODT$2p@ zH=Toc4!36k{8gHw$9(DQU*3+&MHi?1(fab=EI^B?=rk-^@6p?Ckp+y7$E<$^ma2ae zG&IY%UFO7d{Jo<8o_umJwi`T2_2I`kfyoOKm4>>6xBZj>D^gFsA?kXX9GsD{?D!$s z(p9J+)txJXwSdQloSuN?K@3X-#FmO`n~vUg{k=s2Sj-ju12!)~vihalDOjkutwNFb zL+w(LNpU&dwR!VTi#-y3h%J-fX+RGjqnsnkbZwGZwv_36)Dlq*kNVLKnK-T#$=Oyv z@O)|?K(I7xrkJ9bBTWFN6Hl;sV&{+px-wE^VMN4j{C%~=z^S{gEyg)wBsQ1a-#8S8=MIbiMCZ*)|V9c;h8rfS;TEN6Ujm8%$Qlly#}pe0gw z$)me>Kvc|m{Te7j{iP3i9CL+&%KdRX18f2R(9D*}MkDv?l!M?td{b) z%)zZMou#^^4N4OZa>F(CpvG!=8V@LpJMs${2lh^-lC@tK>Ge+uE`^|J>MVe9-Z(@sTfdQBe! zr86Zh9@;v`N>xGa!z2?BDmsM>{0b`aUh4qEjk>TKEOV4+Um|hvLu=TjK70`Ja(%Z4ZCm({PPGnW!3S85!)Rksp1K>(uS~Q;$xkInYXD zA9ri*H%YR5BjVPOHhD(xB5Vb#+H0;)x1cJ z5WljhYT*w(s$Dur!H8#$!oK4}O`Ff%K|EFkeqTzF?GB+FFFqgT_KxQ+`?qory@C#z zGXJlrrh8i7<6!22Zf90ZZ=;nMji*LlyGpj{Lv7+rI8e-7rQZt!QS}$k!q4w=vezeL znyjQxm8|9%pC%ogtaUm8Wz~9p>V%(2T` z$QTi`o9OxSzu%X5uNUHKH5EC>if z$?;RZ>{Gt$^CGY*D44nr6@?76`+^xp%wzkS*JGbej&*xDt2s6%OAu{gB7??zIwFyN z&#WD1IMpY)!V!>?m6`lLvxTKIvI@*j@I!_7U zS4kM+OZ!W6+%fhq#g!ta|GP?+KL`{mksL4vaNy~;`clPsBG&Ebo&rg_e+)S}c#v81 zfmA^N#^t^8;-B zwVByWQH35`d}-o##RrJ`-4F4CN#mmvBqpRHyl3(?eUz$O=^@j5H7dSO(MFUUpxPS? zH$Q6T9Ngxy{IP#?^(1Mz!5Jx-^z6GSyRYwhjCWT1=sr~{se8xk0@VbJxW+6ecPo+9 zS*fk{7wQ~(RWeZQLxjydd+{j39O2u#6ZsJ28nW4J<|`(mmaI{WMQAzL&_mI6989)s zt<`y=6*qb|Z%J`A*6x!^|u_u@;KP|_laDhqr-4d?R@l)40 z_$dRU;*A-`A@hzHXIQG~I#*}$?GEV9)IJ}tl$l3Vg`o;UbTqIJ?WbkSEd#7DlcD_qXJ$(FM z4!G2(Tx`F^&0X+$=kX|rlz=^fC}j=rzI08{+Qs^}dz|yZn2fH~hUM-oBV~p1%^#b%%id~(iWlSc{(hZ%#odPUlSveS?Axhr2Z8#!#OudZ!Sn!q(IK5K=g`U5^TCSq2%)$>_# z^qVES_jD!7aZHLLde2%%meQu#QtM3TIoj~J?T1}xGdcbMwWnA%GyFY7mfkF%$=Jx^1q{Zg zKz&CDhy_?XAF%M6$1Ilh#dp66oA(R$B-D?!=*x0C5=c2vOg* z47odi<6)StKLRn}i?s53aOIEA#o!2nM+y|`&6LOvtECUMCWD10A)tmUv$>WzBuKK+ zH+GBki9*eGAqmu?PifWGcnhUr63q}){)4nBXqEF((GstAx}OAj(TkmNO|;dl;iSb>0$auNV*aoYIps_)G$6 z*bsA86xF-h!Yh6IlWbI~1CE$9`CP7K?3;gUYW zajv%WkrDh$xEGtx^MFVw$p2l3nyq^LEI%QMJq$NbDUB8gBF)+VR}cxLMEdSkL(QWh zQQ}01M7}fUI64*)uTH&8anN;``_AGuOF|utq|maDcWFZN@R&fT%nCJQ2%yIIv{XP0 zX)FGykOl~eXyO${qKI+1sgd$_|BZIJ-nr7;gS{&_Gp# z$Bl$TCu5yaFoL!fye%h&b~3qty-{{y~ipmtT`N4y%qvt>-~qkyd3_GNjn= z#*#V|`)q5yTM>uPnLcgg1rht#RW7;<7e4f|U0;gpTqqLUB@&=F!e5`tJ$QRigBxlr-+5mi3e-BB{>T1!T>Cd*^!Yemp!$52*m5_Cm zWV;EI;&Q3yZZPV*0M&p4K^&|ZK- z-9a(4#Q%8m6*~}l`Vy^osC$OC#7ms!ev(-haZutKa`e&uQJ601BUw%JTZ`N=lC}R_V@QdmZ$uY|7^bo`&lR`bjJT@nqc+D{7E9h>t6Qn2P>!lc zU~KP+CF6YTnV#w7yuGYWJ+aYjz8uvmKw<3!}7W4(8Sb z;jMwxT({xFcwj#cBYYQFM>ayg`f`TDY#4xy_Ds5p^d@y9o@lNAeH{Wi+OA*{^9~ao zmY}zLZ#-{8u40ygpwA8U6Aa>Yc^DBB69YhcCrn2I^-}+Mt%w|u8Jb_0yZ&R&{z8q> z0s4qV*bx6;cLKiC0L!o9PLuyX@NdAnkbp_TCx3_juRFpcIKZ}}^-z@Yk6C>h<`#GW z;zN&3`TVat1C~$;7pD2Yjp@Hk zDhVhGj+~es{O>9J`}hC0gMZ)o|L-(C5@>qey4q~cm*wRF#ngbQhZ=|Vp1ay|lesfZ zAeJl?hDb5JcPmam0njgA*E{j=)8|}jPj+6Q@gp6m-m3!@`uzDyS-k#!V82N+9n_8( z{ynd!df8mq#0-8b#j01!=yQW{S9o*IuYLH;pb1XFKN+`k87FWhr3iAy|mJ-thxAfz93oI>)1>dvX(}%L}erx690p0o9R% z1L<$nrNI~k3QxPwMOlzh0B(0o9Dv33O+uzOb}Ow^psko9;S{d>8e_lZ=oplow+Ku1WB-dXGZI(W{9m3Y;7MveCi0TN$X9%w^h-HMI)1~#r_$_Z zB1{EfC}dKo6B~SPr&P3?C1GgT7l35?L=(!rNZApB=XEkp4nVl+VH3FR0eD=XGM++s zX{(nEkejmOTfcSP=X_!if4VO=yL}Ol!jWJ%?cHfYe!d<*l*z|f(!|#^90ZRVyjR+O ziv%W|@vrqd$^@iYk+#q1bn|Ze@mem#8kR{wH?3z%9M}GcgyGUvHF!OOS<{=zM~%dj zJHl{!0Tm)oeCH%-*PceTsiD^7VD~Y2rv{c_JQBNFWr+5whYkW_PV80vDYyI(q{EOo z{P)7Y0{B>nP=HUtECaaFYC|;SMFDeTE5-TYtnP}XLO|p0!7?xl?Wy&*cTad`0N5LcT=4wl%0n52%I3vf(&1Wv?HspdFFe zV!IP|)Y{dyn8Fy8Ks`*2bxbOTG`Vb(alX%Ts-kp`liz#8+`o^<%e}QhFYiqZpFV}x^diDx{qvOqiQhrf`@tKUhZ=I!L#$f~%lFz`pC<_d7emWkn zP;`n8pUnMqL8nnF(eOCmP2|fjWHA;6vOV^sUD?P#qiRI!aM%&edR;tu10bI%F zCXx{ofB#Lhb7C;+n%tj}ADg|)esWRY&i`WKoS2uAnZMC}M#pHR&63%z}+J7TV`Cn%x&2>-wErW+hgp{XpT%(ktVfxD3;^FoC||qL7k(Fgy@?{ ztGg>$E`a4Y?oJRfX#Q;2=uejV`H`3{443BXC7ECkY@KeSUh5n$zy0}T&lgNGYQG-ljaHl9>wbE}Y;|EU0n-F3oV4Rfe<$?sSRK)g5P8VsA9 z%^!2tP+qo6MaKbB@YN387Op!1i;6S=gyzl#)=qA9zw|w^T(8==G*PLtW{|-WYFewe zxqWFd^DA|Z`4@n+PcEt3%%SSAtw#Ct2E2p6Ez6UW4MxGv{iTRCY4Fr6w!A-w9j?nG$>L9;cv@@assbt|tqGQw6eSK$HSw40rB zZYVb$WX_R%kr+ud205a;a@kvw^8v-a<(@4!QA?kzvM8wG9a0am$`S@pK zZQV%@hfaaI+IDdY4@%gt*8ixqj6{9FAIu90)6J>%0$|=SB95O2yxw0?h%)OhW!_A@^;j#-{BA z^6OdQYgM|KWN}p7LXUbNsj)Z{bDHNDwL)o1ApA0%B?NK!Gj12_8M8aMSMPS%H?~Y5 z8v+E%pMJ$Uu6N0w>k4=sdi!rx-n&1c-b+nBbiJy1ms~$3B3>m4C9}q3knlj3F{vX@ z2P_h3G|O^#mqEqg1U?s%Lbv35{uvm$Js{__dI_n`4JZf%M{fPN@Fjd_Sp+1+VqznxHR{v8C&Dg%XbixL>F}E6mG0`qgV4H@|rUAgz}3UWSK@`kOiT z`#ujEw31)im7W=|ShS>ZXr;*kiKrYE=Qd8%ml=`6c<2Y>(V!KS4{k<%TW4Cr^Vy*Qm4Bdb)7cO5bo8qLMQsJQAXxkKNXYDni} z9z@?lHA=M@zdow7j9nfH(I-MC@1Sg;A-P;>>_lPRM$g~YOJ(v;Fe}OQZx!?nfYFtU zrw+@rOq6xJ9U|>bt^Yod#-SQz*4jq%bmpKi{oD%l3*+U$7v%HZo)wY%CpEduaFVz; zi6z2%sYFuH_l~-mO_%nE*k=`ViBOusleugUTq5>g%?out+DUABG+dUS)X*;qC#`O= zcd;0OJyspv!&;KlQbW(ix#cE+dyekbp?&SHCoZSZc7P3$0)9JbFs<;yaP_GepZGkD zS;N?a>$)-4X7CUZWdOaob9MujAj>jyFV^%i5B_@QA|x2 z&yzc>bzs*B&JC-vU~Sq03 zc;&vyy=irUl=FKGCqQ^CHT$vovFg!0r3pXUC2w}K%LQl6xQWHexy4b)z(ZLAtUv`z znUV{1m>$m{=E_IRiN`#QeLw|?`r^B)hqHm|MPPwmg*=x(aLx=o5r%e&jEb7zo@71n*SHK zR>_Z`+OY;r+-v5n$xEUmZqRn+6#3cC+I4~~9Jj?(-*83ax|75kK~L&gr!9i?gQYTu z-@zypW&6W;CqS{X5~kW@sCI5!>i2w}Ao!A4@OE#+KMx443 zu<3kKW+&mXqz8N}jONpLz8n)kHgdg~F;>r{ozS=NPou=A!E)5scSe>|Y-r0alz;_y zzA82n3yF?>w@zF5EQD(XI2jbrXhVB$*Ufz}SE{L!FZ+}vf6CIUb(a+V^3r4;F$G|J zaB8p&OKgn{kVet=*i_Cf)r`9;WEipH%UkHoh2G~YB+qU|dv9%En@Gr}Ge?^`^At#_BXjPud_BCjfe3(nhI>y%Te5Z9bv1K~oo zJOB_7M1m)Me{=Q~APvgGrsW6}WUlO*N-NRL)@_#?iUOgZ9*c{!*kS}gHsJS}0_|b| z-Uug77N@`3=LbuS;p&mfKDFF@k`NMs-T3&c}I* z?)J-B*N7&GLY5%Y-V}2(P#u;II!e2;3{nRVgYS)R24;6Ttl169QL{}p{y6k`T3iSO zXcuuDdYo=>TL;nB?em0{82BGa_Hh#3zjbmZnKH_51Yt}6a+$vhbk zByn1(6g++bJ!762+G<&&k(=bl2jgGalDBH3bQ6~ZAXS@n=T;IOU6~DMLfn=U==|ii ztZUWO!$ERTW>dBQ13 z`KkU}OLMI|B0m^6zUu-whSztKMsH!+NgQFJ0XjaiRAcJTMK$`$CFdlAki%J^+PmO^ zo{k(pw#Qbax!Ips8OGH3q2yajyeXN9rZ%&sx?O065`|cS1Se&B+hUbZcUIzOY3(~p zfR0lOB}IfAkN2qnIKP;J>%a%SW{2^l=da&gc%Z*JKc#8QZtiB&rIy=z3?_(g6rOl9 zf)Bk|4;h|-=d*mp^-{}AyW(cl6)9mVU(YX%PPhKDViKxJvfiP%o1fKFVbN~6nTQ2| z`|}(rMuLKZRle^@2qJmrw#i`OeORltCK0Cb?0_0)A6s`nCTIG{2fE~s^q1*Pph>t2 zi)XSTSWsQXx3hZ&KsqxeHNXk0g(fGE<3=BJHxR}B{wC_=(=XNfpX0TA9~=0N7Jl6S zHw&F4MKn4rTEdJ#W3k6aixgU z?{Kj;zs8*-qcoOI05CMGs?yL0ZpDBP-WF3w5S`A2!|{%$oP7;SWU8?2NJGzEy;#CRxo`c=CSxO z1Ui^+lot&~VUT;!U}ORn$7yopOZQ+=B$A6#OVx0R)~pPW#{Vy`ltePx<0R{KMwQz)y!JsUb3-Y$_OrbvG~23xSvsOp7E&Eq*xZG&r#w` zy{##qqpLw$TS(Cy+k>`(O;qli z2(Z~G#lQXcigOaDq#MAE&gyMaD9|Dy&j^M8RCk?Zx!YqYY?F-JJ?w^kl2~aYCDM-|KXH*!4Hz*3dB<+%vEBwkZdHGu1 zUc-v?)(YQ7(fW1X>@GSPQ{dWr=Xot z2wNw_joEGn4KOKv$tTL?#rvV$HS5CrHRSqZ5NoD-#QQ;A6}xB1=oCeIKusn&$dB}b z%AP`_Ed;|1w?!B&dD0!W#)uun5mB;ax&0hg+sLJeTlYSK+y3}17v)^G=+OYgwJ}E7 zLxcisz#D=@v{vZb{Isa|Di# z0mnyVHhSU`Z@B`K4a6jz(5uu_0&ekidDS`NKL)NSs*w8uJ&y8=#7k*6tUjC(Hqnj~( zVG|^U%DvWPxA1YwZpQf5{Gd=s4U3Vbs6^#QG(TW18+qH zU$o$NEG$9UnccqRqonP>dN-F+iaQ~Y`JUix|JrHu=5uasjs-lDGAoJCvM|zfVjhF| z@TIWw^tnppZ<9D?(e|!5$+JevLFKX~4Q=tB0Bz^u>)hJb$(SzYs%YKgm^Q0!U2Y&T1?5|A%vf@)di5<-YQQ>f?q>` zd=_8o$-Py#^m!y zei9oAagmRd7s?D?j`i-gbSdM~EAB zHg9_nT#}&1U6Hq9x&x0DLX(^QY4__dUs^8?`11^c>dI{9U*e$*zSG2p&XDu_ti_(V z2gvQ8nhhII^ceL0ZZ_N`W`v99?_gTe^m1!0m;B^kk|Pz<@5WVF@ZINvgc{{zh!Nv) z_MfqHg3ai8h?(1Ut(=<+^3=zMw#D0)rVPuEC1F*MEqXX?wy)1^TbC;^_{u&0=)usc z9U8i^bY}!xPZ50DL+s*n!+aJ`!+9%x`aNBI_4qFjDZl;V-H=ZFU$cmOqexmrRt!`zkH+mPn^v z<);o!C4Kkoa6Ap6zr_VtMr$(#h&Q%3e0-!)^GbJxT z+w+`)*Vx`~-idG;An8@6LFNT&5vJ_s`g(YcyubmQs^<0#!a$rh^oH0cno5FRvQ6h| zZv@*!t*rW6i~Or8_W=Ux8kKcEl2C@*;Oz&Ux*2Y>(t(JtH=RHsXlN12hA$ z+EaW+gXr98@Ez&CoAvy!Awnum4+Z{mYric#^d%A=A8ULarge7U;1dmH3;Y_X)0A}) zMc@i;kM;sc z?HS|RqkQ}66U{M;;+Q*V!L*EPw&3uv@C$>UEKL{q0E**t-#1*I>2tykACJK;{KTyt z16y28Ob~TuJdLZkV{jX7+!UKYlKNJqk=OA&ycIY6Iz{W`MMrOfN}d*rUcil3wKZ#_ z*Q24=^vV@n_A9Xl;>N6sx{_4R?P(%Q4%yp`7B2*|Mi~E3pO~mExVhjc%G=92Q;!Tj zpPy%k94%8UgC-ior&9cq2-5~%k-%DrhT;)Y$1K(Z6d?$Ie`bgOEl_N$%PN>oMgjG? zJFGJj2zLWh?_Y@zkA)pVireR3Ps18Ije|e#;kf;EolaqAsq=aNOME6QV^7p=NvG{T z3IbNJO8x0jeECVb02yJ{`flhI>e~FFYb6u`olZQcGn>%t?Rr-jgn6Jur==|?!{zh; z!`^#EHQ9Ahqjp3^5EZ0Jlin1hHx-d8C`yMQy@LXwgsLbgy?2OoAwZB`LXi%kNJ;2b zdgv|E&(2%E?|r}j;@q5zbMcSCh>ihCo@ejkC6~cE;H(US3qtq8%)0SCjF9zgVxy_55%Flua}PmYKwIq z+Dh0zblIeuAia2XHdZN?@9=wJb+M|Mt&bo%9yijXz#Qx2rMffn z#(-$TdgyZzLDSUPo81=9G+akV_^Ooo^0OY9*UVv&6kmI!cfU=3855oB zYep;9<5-GCr{Gn3?SYfeFQgZT7OX3Zdi=?UKZ2iW<}&x=I|nPUe|qcfxk3tBafkZB z0%^rhveyRdG8AH)-!l4nynWS3#h)}jP~cW*A03a@uh%^_je2vdkb_-!y`w^e##$Ah zjq9Pyw2oEb+!A6cW%^;{4vIzGb`MGustp|Y9av5y4x7sUqC@Kk6@6xQt?9HW4`nx( znMAIJPA}iCP-!gM|J{BQ+C|KLp`!6NFWijy!zEsq{E?FWuK57@qMx&Toan)Okgk@I ze%}wh{bP5Q`a0r^7iPz+U1CzcCvd#V3Idir%x)V~sTeszJ@G$H<{07#Wq_>bPmD)3 zK*=7*FsN70ZzZs+9{XEuvmE`&YV7K{AGx(fG!>)szjnMcuW~u8%G0fToKR}{oq_yG`RnweoFOrT_YI$*15E3b3iL$p znY4vD04g#^FFy7W>Q-*9%Ua=WigpH0+pK5yC87Y5A$SQfdU z)h)N3#qUi4w_j=GLvXFO6_4I~@SDxvSBT-xf!P7xqYq_Dqb>*Hstni7G{D4rVkQ6# z-Z7ga0BG$U7kPKSDjKzHX0$jy`%c#Xa8MU089C;NDx@DoL|bL(P+Y@A4+Wj zMvzJrDB%z1Y4(>|u?`D+bnVH=Li)`r5S%{#ntAamB^tO5Wx5r!I-LISY)=uW%K({6 za%eKYtsl9EK(=ZO(9J0}a|+%wm>4TE!@wPm4@g)ppkp|A2>OL+1orn0Bu|2HI03AS z$`QC{_~8N}+eSxpaPz1Lr zjF{lq1Zo`ER8k^WR8 zg9j==Ey9^ey!#W|F5Cv|5`6^3FjMrYiFd-qre~vuyjhL z)KDASk70Q)3i9sBC#fBGL1w2Xr61a{gL?j#Mh{>?i$a?R&nw;*Iqy0w?J4oaALI0P zZ3w&`zIi(uy$Yy56HGv61hc!4+rdtJk=nDMJCBLGj@@14SAYua&^E@c(Lp7DZd39_U95PLx$H2z_`uYy#;srOfRvVrz+}Hj zmEpi~UU-lP7-H`|Ob7+fXh*=Q{kZ8Lp!k1>WJ4N^$Em;}6Wqrlh?XP5q&sF5>vhBf zDDDm(Emah+&PHMshrZ&MQ6||d!%aAl)Xrgpm5N|pV!AssK+7VJi|Jx9Upv=_801^- zGzTJo3`Sy4qwmYFRze*<2V3+vX;Y4?CWh z{pC*}^!N%Rm9U-OQg1O*!h27-C6tC`eWE7zwWYvt6U|45j$7@fn+>9}Sd6KeQWof$zjMZ?nzq;)K---xB9&md9M9lX&z+MpYX!%}?@uyzu2K zQMct1Zit8`znMIe8!3Xjg2qiTGMhAHa0oG84+G$Sw40+@`^hm;CUE$gU9Gdvv>8?t z;@YKrU^pcI-x&j&-UdIoUx*OH`{5+ubi?uTiV~xq4t`boYty%wDM;WO8E~L#dLMwA zOb)%0s4G<$1`R6i$|%oxSajZbU@{oeMa~D&i^c;l;YLb#q zKV~3DZKON90P_7cnZlhV3_^3+hWi7PAka!^;zvvDQqQq7z9sK&Z8!)xB11;928B~& z5W{2cf-h}mg(PfSxR*eUd(i|_{jGyf7s{srI--!^q&-ka$5UmlN*4_@Zr^&QoJsH| zU0bmI8Oz(xwUp?kJYJklxI{u#&|UAmHUI(CUcS^NO07(Sr`SJ#^ay%S>TBWAX-@GNg=x)(FMlC`7W9-)I7OW zST-Pa7J3|vTI$bKpP{EY`@cHW0#H~0O&-_8XBgLKAq#x%R$c&QU#4cL-Inb>X9rW@ znddav{3!hTgc2xi8`ruS_&-nL8So%>pQkxnaZwdGdI3*HIZlepD-)Hn+8WazNHlF$ zQH285MW52*|3@iW5450M*%yc}_?+qfH6wuxcXv7yFrWTEA*nM6K}6~PIgo$;ANBuZ zw_&_6@P8~MKS|sm7qZbJrsFI*R9{@5 z5u0iLLf^#mX7^tMHzj%wPd~A(XPVb;43>tZpV%U2nk$LeUS9k^Z)BVByPmO|f@&z( z2M4mj$D7nm=j)gMDfyKE$uTCqLQ;dO8PWQJNM9C6iCa?y{~2_+5*FD)ynEWSzb*+# zlwHqgN&fTN<-i1hTWsY7w|HmyE8_Ev;NnoR*+2Ka9)gv&grn+!{N^%o$74O(H4!Ez?`byE1f6w_l$VAg)!UttFPWPWZ0tnu=>9AUNcrdJr4vRk zVAMGJB?@*8`coZLAvvvR3;gr87YMhVQpskO;ktWaj-kMJM({I{59VK^7X?O7?wxxc zKe)Bj>s0|@^g<-9S^t)CZ`hp!dt5XSAj((RHz)wPU`_RR18tm?$8QGvQ%^2njvDT= zK2cffatmqKyd?MuTus-D3lJH0$oWtnrT=`+ZwKP1p?9A%Jqut*Lh54tL2=e8zgx(o zjL$c2p8}V|Hk>AMZmHkg4v{p2v1PBxWdNSw)FJhj*P5-T-tO+HWh>w18Z4L$dzs#% zYnAK0t;;!Jlm(=e@{O0E_kc4{U!JzELNaS~l7yQMAw3wn0T(x~%F`}>Ou=)~X!PY2 zEo3$OW`6D`X|=lQFFnlIfR2=$}7WSH-a&QMmU6^j=d`ln~9-#iK@Do zK6v}d<}y@f=H${#)Uts7caQL=L3dty{szQHC2TI?=m6(Y=`ojkNW^$qQNqgx4%E*t zYI!uf)K*Wr>~mgRjlV+C$p!++FrXvg`Yz@?b}wGcG)b?{ONLXufaM0$(=ZwD)hHg_ zGNo3Pah|9}arBS#;XU4YyCHHCG#Uu_cyF|3RU(S#Z*L&hYQLgm{ zh-S_8#)rv4tz6$uA8@nTC7K^-_x(^z0d!}#R`z5ADb#`KBR8m$h~E5_?Yd;4V;|$) z{0)qu{TH|H2kHKb@%${ACOH9CH#ULO&gHy%oUl!VDOv**xnF&V{!`Nb;=)w#O*T6l zQRu<7FRoN)D{jctOL=Ut*P9bAz~=4v04>2UcxT>-9TMD(1H$PHon08G%-)K&DYmnn zP(+lYR$8W41Cy+8q~$?k%(kQt1+gTYV7TS#mZmxFqqmWm(ADxd## zx@cek%EdL6GM;EM_M2nNv#~1TzTr93c-h>SH33CfCjD9ub?S#Ute}eY<*6Un%7)>2 z%mP`np84S4S^y-lBv$vH^qvYUv7c<#^aWSU<_U8l1j{+&Qy_9|C&X9#TNuvCpNz-% zUS(Y?@;WxN9IJRA@cH-FoRVcxKMCUp3Govq9&UQ zl0R!ud_XD+UCtXx?v52M&qZjgu4leWKj&+H?i!IsAv;==}~U$N8jNoKXf1ABmZT?GEIFsdsN#XC#Rhwf{^#X7M_5 zwL&?s1O2+Vllp0>Xm7cy%hE(m=r!sA;OrT~J&CblpybsfPs--e$SX`>d+WY7P+6TI z{#W2Kp~L_=ssJ+9z#s7_r_XOZpGVyLK30ckc*K+8NUe)V8eNzuVwn)dtFGrT*8vpM$>G|?^BsG1)gFQtN58`(qz&wbODqxOk1j(l zxXh2a1>}0vb*FH;ZOy)ZVui!fk#lJ%w}&$)u8g}s(kZoD=jxe5Ynm(+)Tm`SDJUd7 z{61FeDW{3DGEJECU-W(POjpQuBI|-a;2mcd;Ge%-$QX+SRcA;rQl^ zAAl5M)K~(Ql0?4GwS^n^{r1ZF96X#q~D>_TCtuJ#GVMBcD>Rcg+|TP zEENw@ypO)?UAjh_)spUBu9BMqbQ>LCBD15l;6hLoc_W)jl3GIru(DRXvw${ulKlOz zL~TRm+!u1T40NH(_27JU;4mFATE2GSTQtab8Wu`PU!h>DKP!-ik69p**~&Z|Y8f%J z9BTW^od5|Ks4KVCUawWDdJz%sI$mua_>q(z;xNx?aud+#w|O))AT3_S)!zbCHHX%>DDnWZppYk+#cM#znsE8kMV(^Swb5$zG~m87?0D;S z8im54F4ksWoql5sl+9vYjkbk&NYXxgmY*;zZ+o3lVa9vR0kjhqNb+=Z9v2 zF#lDwu-DjS4(+12*>>Gdvtumh6L%oi&kH2~% zbB=#w=lJS#?#ks$>7MW_SRO$$K&z)3*qDL zYn2PoOZ3u?Gm4Y7zBb7LHousaZ(ksLbmlD0xsRGO7S}ZyQDWEb1|~40TGDnY3wW8N7n)1C=n)=VIZc9$(SjUE_l~@=m zB#T9BQ@bzqnZA-U|K+4%hh1?4n}~gT*a@+AiG_1q_8hiAUk2h{3cPxv+CQ@Lz<24` z`?HQ0uONHodFHLWyI1JJ1{kFF^^L-y+QI{4)`WNnLV_Emqm$fU? ziqDM2RgdgDy!Fme%SId_?X zO!C~v!Nqr>@`#UvpDiw8OFs^txns}PXr0N4$yAH}To-Xq?1_!Vv^rjbS6iZ$7MoFQ zlS)UCad_XXE6L34wRz8pECsI~lkcTnLJk@iFLu1&$Ku#^Z4v~{ES?8W^X6hQ=BqEE zr$bA3bxESAQ?k5-^?~A)Wp%XNxob*W0J$~|o$s`a5L7a|34z9Fm|Fvv;d_mKp;v@a zF!vhs#eSb}#eE}0$%bW$@CixTMwe`t31PIW%+t{>8pIG<@LyW3fu^deBzhu%NRso{-IpK#z-cP$Ski^ zOX&-=OcyU+O{ouCseCAL=0s42^2Vbx@3oj8xd!jc$buK+Tl%WTi?f4EXK+*y!8gkjtrBhym3uON6cFiCR47WTCf8|w^LuBq zyZ2JDpO}6^?zFo3%1%uND5Z==3>LJvM|!tKwNJ*&e0aiD?QD1dPzD`?uma`MDkMwC z3aZFPgx?bqf0$1gFHc!VqZy>8Myljz_Ho~drA1i)?+?sZ$hWta#Zd=_y8s(yuPPZT ze)3kp3*s*Bab#`wtbD9Ik-H z;PYtZ1_P?)=sOd5c@R**b`SL|7UjDtb^{{mi}1smDp9ueHsWQhEm%qlaV9>Pjoj3C zz>ax7W75G?DRC|xNNQdzW38?3ik57QOA7|=#C%P0qD7L6T z`Yz!V%~VWOp;y`0k`7HQXQqW2U}PC+)(N1H>G#^fqgG0NPrxqO5wU6iI5=WJyI}>2A7?X$9^;`&e0GKRCk8 zgS}}R%V%JEoxZ36_j}VI{_S3&X(Nm;S(H}XEY8g|kYe0FrzhvVSP32lb3CppMRykI zNiMe4EaD7zoD6Vo&@#2yr@BNcmRibD?5RtEDYXdG_1fdUZ@u1w6_cvwQoD53Sa*nw zfTq19<50pXfi71*f#u=UWnt3#&&G0heWyiAyeihggu*Vr#@p%Z9R`>3rOT<__kSX2 zIra#)vuM;}AWfvvTLUVyq_rJPdd&8!t$JU@Sr6D))aHFr+<~B=KEC=C!KREp)ZJ#nEa5PfsFTDEufI4}2z%!g$YfP!SEI-3`G^VfixY}WU zMf>K|!zAd^*!273G!03T1h;J|W^v~ghfj~hdk{#^-kVS;UzRXS+Mq6eU@8|GIb3Xx z#Odc?*YohX8o5UiOOdr9ZDN_jiRQ2&!GkIW{eV?3zGRM`7{S1mks9Hqr5@+e-UpZ| zx{l|cC+J!FX z!5Dkqz*`*mK%^B5vR5>|-#cI+Vrt0f#qPf1yksScm$fYDPR|#xSTDr*@HOJXe!vrb zuh9ruveuncY50*)vF~p$M7z~-N0pD13Z2%$1zU^fAGKM&VpB+wsAOTc(-ZYN`dDJK zUA8h>ZXi}Wt}@|;dv1BuK{HSGhzIAT%ln0#HR^+`V!X6;`~%-St+Gd#JRiI!R6+U@ z?M6}>c>L&0Sawdh!Q5H_iN))EXX5u*Wa#}$N9&;(gVf^S(J76cnwlazpD)m^U1TC; z{(5mbqDFd^P4)_9M6NoQQh~(9uF}*`gTlJy_j?eYRc_l^*Qh0wYpF%CdIlhJ+D94K zx9`4I>EAm!u2TxsSe?y?9gWW;G8umR<~TV>-kunFqcp z(j4N_o)O*dL3kfO$08^18MmrNJjZFq7vdXL1-fEK0BLx$(nYmHJ4_~XzmNURFuUIol= zkfO^VQVPDq&xPK}zk1MemZW``rk1lVU!Sk)nkY0kYHKd+#{BA;-DPZ4LMe5}=H&u0 zW|Y`bEE9#GoNKVGuPOee=MBi=_228B2@@$`$&(wef8j)4HGL)F z*A^$`ybj!AoE8VvL+FROPEXtw1ESga)}fxQ9~F5(Fl+H-pAuxADSf~J`s%~lRmQ;ge)Ro%e^?Xj_*TV7MclCdQ2e(F8a>%*1pv^H_a zIfw2hyL4-E*ViH@y>!_~sD&eM%Hh$&jtjGuFs5nD>FM2(RmN#dfgX1*5h@J!2i>@+5ESk>Ma*LW`PFsunXxOkzy zHGr4tj~OQ8y2x}JB6-~=fSxafR;;jpMck9sp!Y>1LeM>DTE##iUDiO8q`Gfz3~-`R3SHCBgpBJ%+*2^p z{_apJ%J>`aIeO1B;$D%{Z~&RH#2Q>-x@gQI%0(UUoUx$2#-R8 zep--2n450Dpu7n=|E7YO1~QIMg%z6&MLsN=R$pK63jORidFGB$)n`KR24)6wh49?H zf381?V^oM>jpol(lFw0N>HJa$N`PWjr4Ji9+t&)OnoT4^=l>ce@HRi#pzd9>m^x50Ov`Of3Hv#A>mh|<~N5gCNL3zQVe zd-LuI=Fa}%x_5?cVoYD^D@q0U330rXZ9q`sMrmiVxBuZ@tZL za52RV!{}fjm6uKG?%4P4%rzeUr)LP~`I+~ZuMCkOtu=UJY=(=fbo%349T&RMaqn*G zBLnsgM@%??C_Te_>tvr!qgQjb^Y^B%Kx3|~>Tis1!hCo2Y1LyMWR;7@~T5 zJcB;HK3Os{5dT{8Sc^2EZ)X1p7V*8-c>zSd5y&_19D`4^RjIJr20XwFDppvhmILS| z%9T?@o)wv&_Q>NWmcO)9w=t_-1}D;$JZoa)+4~b9x^Om=^n9?rTpNn*7PwG~ zL51expRQ6yfhZI~6xX-pod7 ziE(r|Gtu1QwC{}wHq^7vfq@{`Bn3EB8=o1Z3&!z7-X z4(&WXx=^2W=J(IOzpgk<-e-eawonSiGmY_&^K#~DK)^{XEXFrwU3Zf_p;k);Wx6>I zf`f;UbY>BvdbxW#)p7R}$ld1SB^-Wl+$eTw;{=^`qQMC$`L@WYM2b6@nXnr*!9dc| zN&kfKlD-H7|2nmc4;6rLQOeF@-5zt_4LB6AFFnWFi0Y+ctm-w33t(-Jhl?^h(G7fh zmn-ShbxIdl3?|G8$>&^mviOZ<-2y#T1#sG$9FR(*ryKE;a}*lAv0>(b`3J=f+`!@4 zZ3>VX0_gE-{A|T2x;{Vf$>I2~P-)g4sl$?$u}bl#@Sr==)?`5q+z^qkSaD= zI38FnO-mN3dK+ZOKX&_maMeL|tvzJ5`ri1>P^FDz@I)CFiC%kh*tgK%J9)y_WwDu#SCKHLFgwmGM@V}^DqYr7Dj}+n zAoU=@^-@6<*+la>^UTjizeQU*WnUIU&W5$7&$ zwdaDOY!MMHhXpUi5^tTI%x&-E-Evw{ht3^^!0K42fu|6DknibUJd;sNDcEm(_`uB9 zz6cs|CxfJ8g@q=QH>eZkdeG*0khjb~xmpO3dX~YrJ!iAd9GVfPl01SQtGr6+T*jD^ z|Kw9qg!E)Fzem%ZZTjCgIH=ioO={`Ak~jbk`jG9U`3sF)?eX3rkzFL4D(|+#X2oN? zDy|wfmm5SY2r1C7HoLCnipv*@cxXw!E$&(Q`|}NB<@(Dwm${DUn5{W<+omzwEUx{P zzHRM`(jo~>)Hhl&*QW$DC+}pk7CO4~a-HMdQ*6OFgHjB4sC+ClbT!ddM}7QV0>HtY;}@K*OkD4;*Wg3+M7$rjge2a>R_Ft2iJ;d5 z{SPCnf4IzL!_C`kJ?j#6=eiDqfL=moHl+=8SGe~w?W5U>-!&@B4;8|hZ>P^~^(kRY zh6)dltwCQhVkE2%7z)HiGVczweg9P(6G+K>ht!keI7w>`c$xCsj)a1SW%enF)&xA# z;0hVUGlxnL&xCpwjF29S-dHA0zoSC$K?N!0=*dLAeEzMt8Xd#?d4o~aP*PJ1WL?LW zleMJ)SJwqc_D;R6V8v42aQUljrIw(jxl+x~2!2nlJvPOTk8 zt@iD7#C>n`PYfil;a+0(g1*>FMP0-+Qe zVm3c|C3KBa4y>JFELf3&dzBjbvG)vW%}uvv*E>6Nh>@GW(9+(gT*fUb4?}-ZK@tV6 zIYCYkK_xI>VP>He%gYG%(^y)`<>M7=i|O4+)q{AU-EnUqB8$9A$=9(loi3{iv%xGw zD_y4}z&h&o$a1<=sn+Z;Kes*+^Rofb-E#f+WGs=`&Cxu5NjEk@2BQy8#0{K3U9tFR3$0R1>)3nTLEkU6}Nq8@10) z9OlzkJm}yeF&(QwKEDrR(id|K75@Pu7r(9|r==@{zbsvgV$7FGp{!c5orLzC6Sxrt z;Bz!}1!_A9yi+3X2`R-l9whq>@|!9qP?flCQzU4clCas=9cRVcO1zs1B?CC7K#v$M z2mMkqcF78!AY{ux1y0p&!rib_?_Ky)~H-l z;36|SvWuJd2F`QbAb@;u>0o9nZ@4Hf{^{=0;QCd|lNN-Tvl~c9?#8)coD*xXPg6Rh zdIzN4W=I99SM2Ug47vL~Ao;Rhdl-{vQ2vsF2V&NcAmuVr5}M%SzW6hoY+Ai_r4cf2 za(Z&!%+l3FQ454RqiOrr^Pkqm?h*u;5~>RkkA3~(y4*obrz>D5V^VOpBnwn~ENkSx-urhv);(gPs;newI8CO@{3% zT_MT!t)pe616|R+R=n$ymdpA`34s#7L&tQ@;wMQv@RO$|5ohR28$b*mnyKb=U$^Rw*Cz3)+QCSomZycQxcB-pl~Q?W zoV{}s1PutsTgUIs$gZtdB%RbT1aOhJUnV1fg6Ce1JDzmgg%uUU!vb7@BE?FrZq))EgfC!2#lMmceh>WZG3eyT*6NbXOc2**ZdFe(Jl0=w*VZ}rI zV1151w`Gpj_oP`g9<=EboEDrcW(~>>H-CWkgZk}zL+L3X`BbVTJJ=QI_B=8HxCyg* z{;JC7EiC{9$hNt)H_|%QML65RJb^xef%k3IZcx7or~WHYR& z5YF_;x(Cs1WqtZAnA*OU;f1|Ee;&c8!pxwkoTX$Vx44%0=Dn~c1@gq>JOgh@^^@Pf zR0U{YYe#NWlCTezo`VI+_dxf-dAMMGHU0hD8i%B#AgPLsWK{rS)TUV6U_oNdpq0tq zA3~z%}V@Ex4tkwOjWYc}^h>UQl zrx6>=HEuRl5g;CThMq4bhtPivv~VrmOI%K_a#^>D$y)XTWxU7OV_EbuKR3VL$0CyuHNQk;H%T4 z=!}H^tp(`n%vzq7(IDnQ)gCA^w?_yTTgo+}c$YB47Kp{AAJip{qvgxCt{D3_g349p zskWAj)M8E<2>s+#Y+>HqRwkOX^Rq04M0 zSYiByypvsV4}423HWTu6!REyWVFj|l7$9N!oRW|P_S>b&)2qnS7{H~J+mCXT+f52( z?=N$gsZUry*3(IMJ+nb?PV0Uj&WE~=g8 z``Z%W1h`Lh)s4d7lcwZT1>Y!W*w4lj2a7nH@nw=Pl+r2OT7_D`mxp4eudpHRHr8og zy%7O(TIzdTpkKp!Aa=)^udq7+UibD#(vWp@71Ua>J4v*G1i5yY0 zS7J&xG&?M9ZRXVxwf=jI^Z$B>wY0OPjWEWVLcOl>=W?;9!>{E_Q zp9b8OnmzG)NpjiQ93m*6>GrVn8l6}N_jxFMPJpdi=o^Obht?9 zeoHI_yWGe1oTe(~29A8j|F~Ncm8FEQD6#Ax6O5$Ran-Nf(j2aKsdF2&0oGy4Vet=_ zbc-q5I5k``k}2T0Xj^%Qp+c>Wy0othZ#P|e09)+sP`B8det0m$esWpk%?fcvaz8l0yoz{_?2xR{E2E^Sb>P54TX5K}$ ze89YMS!7wwAlZ#ayQl(~=Bu)*?ss>Z>B!>G;ewW2CXX2a{4a>E9?a7=k6{HIlAyfH z$`E$N7&s$-U&6mqox6{2&yUxXWYLnTJ+zK@q9u5m0Es%kdjQSDZ_EU6S5>-N+86iS zRnmPv$r_Hp_Ig%SnT#ZwJ8VrlmJn#Ar?01aODusum693Dbr#q~CpgX+q)GrP>5N^g zW&fyYz}|uaIfU^<-0!0=myx8T$dtO?w=oZ7U^n^4%tx@uI&bQH3Vk6PmDSQ15*Hiu z7}#>rG$Fg~&muAHjQhfR8RzLlnzhCTnr&u?ej4PYW`zo2iWjBi^!am(^AEi9basB8 z^Q8Z_COW`UMS7U*?uvndLKNZk&lni&%ujmnBbLeMhd*{xG&M&L)_&p!O`AImOaV{E zc(?ruvdTj)R>!i}7v6HbKK|{%+|l7JmV3S?N5^Rx(G9`o?yFr^>Z$cBv-v%ruWP1i zNyr}4pFz8n)4N5MR~8a&6O;nv)Z#`h;5(1F@GRZa$8%pSTrq{;enl~O9g$__ z`9sR(V|mau##~<`(;c}xRoJ~=%hMjg7Ww|Xzn@6B7F<165;tU_TlLyww2W@P5=D&E zpwAB(141LIQ;))ZW7nQr6RsQXAfIQby6ALC$g(J73pCoD_r!5CJ3Bwk`xYwbPgR$|BV8>&eZqJ zb+C$$1{-fIc~8N&z`Xax@sP1)*AHcvwK3xLGRX1CNvh&w#y!Jjn>4>IPKA}7d{J~kZTX`L9ou5_C9vf*)l6_ql8^oyGTDY)NN4fLb z-822M3BCd*B{+?#eCJfe(twB@=^db$7EG8r&KUl=hdNLgOv|7VJD)o_hFhtAC42sR zE!w5Og@-Zbw-`oh^$&`Vfvg`S!4GVodTdL4)SMJ)S*!*Nd1s^Pw?7&O=uXAofD9okY_MkVymT2rO(Wbi*L@ym{RM>*-p6~^47{%qTwD+6 z!T>#s$~-Ur2J!)-an!gaX-lenK0K+s-vP)z`oI9 ziNu>%tbMLM9RCY}JbU4smXEgP>0J*%REFArp2$>;*8z@$cOFS*A^x0c!l=Gydb^E% zF6uq4_ti<5;ZVVqq|ng(l2HAnq_sc6b?`T58R~-oT3z&+407H$NoGe4U(c!%rA2;E zzMiA$tjLKI)!&1?L3CD9{WmsW*WtJYx>s?~=mYB|YCurR>wN%|^yd;KOcw)L4M97z zn+^SYmi`)b0)_)&ct`xNKlXXF1HgjxK{)omv-8K~qR1Ffu=h?j) zk^6fp|6B@)QY{Gwj%s?(duUa|P621#|mLoh8pos((y*Ed|&=bRPOmtao8~=6dD&Ke|?d z-UjHP_+sP5o7-BPVGm?34VM@O1AXH?xe(gu1;vY$mv;&D2D zt9Q8WfF#k+orm(N-kbG;{4LD42U{4>$?Ww>p}EV_hO>Bk%(i8v(~?7z{hG$F%~txz zRb8PrN0yGZFOlAHlfRiz&hB-Az}itWh3ln?-FVgQ9PC?u=ll|>)fKE~aGS1)i&9Ca>*+Kdq!&WSD`y{xb zGVN{Zha!s~v>ZC9AX-USr}?yCA88B8Ut1qx{r|b@Bc%1nK>{(Go}!leMD!23LvOf` zoR*f`AefrV^N=KLPHA3g0@Xu(E?J#M!1=?@NeO)CFs~f7XLVB`@o>SwyB#gKoG>g= zqdClQvczV*`^c@S@P}I3(|4dcEF+3rTdx)_ru{64 zmU-P7rW-;lNnu2lC)KaSryi>WaI<2dRl%=~M}odt9f&TSICsmh;=q5RGL*O9GsjHd z_`$F2b(a1}s=2+@QGS;R56k{NTgRFSq*3!05Cm&;Xs1<-RXWN^E$)85#iKT~^Emku z$z4u>ojQ%50>vXiOV>NxLue5XmpV2XhxWR)-(mJ)Y5|5~bzOfO{vlzPZGNJhWXDY4=L3Qd9c@-m^9lz607;GBTXjOiS9NHhoB;@NjoUw;%??NSdH zK@-tUFxKOEzjdG-2?u5Q2|vr7S7A4&Qaa;a0tSNzFw#-L3%>omr?~QqKC%O#{YaZu zJwL2VHv!$<{F&Ow4_mpgwEI}tZ8rQCYtZhYM;LK3fvUI`?+|BRxQ5&nwi{uh-*N5v z_@gzYjXRhI6FV(Kga-AvrY)U7DZS=#lf2a8v^AKHL)39L%%vK|78uJNOJ8@|a$&q@}4w)5ILD9#Q-?Aic=AhKC0R$)EVz1_h3 z*me(Vbq6kOpJg*vqW#Q6PzUDqvuh=>JDSb=b5G&{wm|(=N?RP}=x9fpZH=fWm3j7i zYhMS~b80HIeeJP|3S5*cd2;EE-l4aYJZSF9TWXC73r}xR^xIjQ>zAT$mxFs)#k{CH zQiH}nGz{7wZ)jGU&0cy1bRW_gvN&h88Xb(k*Cm4gH!xxmHn4e1re1MsHFfUq^}~R@ z3AZZ^|j`t%?elSp&E8DpA4e6&im&?}y9zfI66kFDx zT4+BP+ewp{8+9*gvMOuk@C8{RmlSGZPaNC%Z_fdXTT+Rg>GSTu%eYakREMPZILW@$ z`xU=gwp z|5=qrlfCQ|K>?_SMITig$E31g`Dl@4euhFa$RK)*Q!wM!KYeNe?xOiz3qz$QNvkBI zmCD4@X;ZRL+jnISov<nUzWV_zaKDxx%-xB)D2*!QQV3flwVkFH!jfAxrkk z6kdjlSLcNpPYkb%-OLrhrl9@o$5C@)mzNXUZ)P}T2C#m%dh3+~6BKw=0FTXfn2T~N z_Kxwm7#QEAy>IxTl8o)&Gj-!MJ%Yqkf>D6p8nU+_5=6{+Z+p1>cGj6`2^pM!lu|tH3#&6$!&8^N|HU9p)BDVrU!S;^jWE@$6QmG(Hs&m?K8gpD?C@ESYyKNRB zq|YkAS`{_qnN-?^wH-ls4m&npL;h+}jkqf*%|A#hT?E?Bjjdc68!a!01;nO84*zXg z1B}40Y|E{uRZd%jlc#Z~lJ90d688foL^$00NW}~o0HR}%QG9iG7=Y8@LxCeh&r9iR z_BULf{U_W6DITDGm&J#iO@M&oZ2pVN1h<(<{Aw6Dz~ZSS>_4O(3W_y4&rU&#B`ROF zmUl|^!Oc4()@zgRfvuCjxDboeI63+C4JaH(KaQS1bm@>jJ>oJ&Yd$FNfAK2gZ7Lbs zuZ9E(=x4$Aig;-49t;gewKS?+9p_vSwuj5jG!s%ipKtys6u_Ko_PhG#5F%14yS+Q^ z6!`Orz$cztEW~mCgsDrn){+;)cOF>Eo5r-wdvIoJPOJN-uE}6#M7dV(LZHf^H4~qz zS-WM7iFDpap=|Y+ZoHGx2_0y|3tVDsxna^|n7VNRiD$j}2&1x~s!Tz-ltYKU9t#1%Dfv&e4@RsS$FbK(m1Vpwv4qm;zCIQ zXZ(lO6FPPi6&$}>gQMisGQyH7w-bE7I8itQmPid@cfJyebN=j-2}=>m>pA%SD^w|z zR4M|{p>01IeU<5wznATuNOe9o7ZuJwRrk9_#|V7>gwVx}SCH7a#o8&CDwKUnjTNS& zK-&Q4dn~R71ENHm#I`C4l!Y{c*sYT10MBo;3w7;FOVa1b-i8qvVYA@Cz5?TsMPANm+ zo#9jiXR`h2qd7E()k~dnBKSQ=ZaF3tQAlzt;*XY7w0fjq-6$Q#KF{H|RjvIBDA&g= zO7PR*d0XY7LH=3v`@WKQGTY*~LMGf}iAL*$fgDpzKyw7|_^)|#$vX&#=;ir0X&baV z2a{gpHhZm05)K*!WnOprJb2tM8HX8>fyd1f+UL3(C3RJG;aD)5dsj$r-bpglt%K z&WwoAzKv%v?L*ZYw(o%P7Ve4n z<)@;SI|(|7u@!Kvez;DO+Kc-iK!FS)Rx!l$pO$4I5Jj)lntnnoRn}uUr@FqTb+cCp z#17;}qpF2i>z?MMSgEL#6DshjK1GHp=CoArosCI_+MTgw-{J7Dp?t1({5qM>qhYR^ zz?vYLQkr39CbW&ESug#kc9!JpfpsbsZm(T>r{1bOHrnh#W*J`r3x^0#{rPz<~Km z6X)2sKm`F30Lw5E(~~*9wUhrq^ZVl-?m_GCA_O;7vVr$8lU0D@;FeD4%|LTc5Dc~z zw73xnzzO``uqh64?`67>i`q9-pK|$D?s+`)?wAwbrqQt<_>aX?83dU;1befHj<@!b zEduq5Dd5{u^NBAf4%To!^J6%m=HT#}ZpX(ku5y(4zcd=_2oJrY0oTQaAi7=MVe#=? zg>GZXpd6&=o42pL_d*jmO+7R41Hz9$F7TAptlH)EolfpOoX&Z0ezL^Faiv@mGjf1J zuLNjST%3Di?gVm*aD0%EtBSH)zmG3(JT;LRBVG5N{PR7FIR)*Il|7=4sy)bGAF_Mn zu~5;h2*jKI5H>4%&tW8c9AvxWm@+-yI^*^CA)09;e^dK^gFXuxJ{&!-c1h-}w#q8M zSi>WOlT`)pC|-=_r>ctFKl;vZh@WO*ir)Y^6Kem4=Imv0r8;ML7Aq9WB?$i@fh zxg6jSJYmu_}C8Lp40Wqj`Ldb7rVf5J>aGuD>HHrg9wl#b<-ivK%EJtBM?} zS0{jkI*ZU z$saVL&#HkfSO_Tp4i5x}OOtdRC%?N%x(LigSfv1VlFZ`GD&~KhkCiFyL8<~8S(574 z!8cArcDSV+r)qbILe?*Gt$a+%><_P$zLFQbEVgWCrs4o=s6;=rq&aGu+@#zI6#+{Q z){^=8AGd0VVi2b+Kfv}yWykOog|@d-uH_klS|5nFQT5~2Lk*n@S)C=O$Xo4s{{(OW zKlS$a|4Q}J%(S~~JG8-TG%z1JKhmjd2g)Ublsu`3>B#yb&QS#`9AuK0kUYii_J>fo zIo{$TSG#YoeRXo=B|&YabU>`?%J3GOB|9Wvm%i|+kLNQdoB1xL1-*2Ak4xpftr@RMJVp@GOSB?Tau2=9fEk%-v%~4~(02%o<0-J3F z>9t1(ctYTYA|XIHsW#Cr0ZAzxX9qP{Wzc@nQeGyPR#G1h>$HE45V<;gctXBzfr)Ja z`&N?0Mz+_P>aR>Q13xf5&J?E|BsvfsXx!% zYQ8Xt6e+%@;Xt-kIjSN#|QC58^zk?g7$N<0B z&f9EYkqzRM)twvX*DVbNT(;W8;AGL<9ts(A;%myPZT1*}WSMsDW%NN2?GMX^79W-& z*$=le(H5Z&Hd5{wsS-ZS%DgLmT%nWqS+83y3of%xlv!|!(Z6mW-&xlfE@UhWXIfON z3SzaZQtp^sU9>Rl=v}n2I4Zsa<<(cQCu8 z0k3-WfioCo>p!M@8L|TKAGhZH*9=c7J&vs<86(@)d6?_eA1;6&(DV$|iZ%8>gIJCG zWb2-Gd6AV*7mtSY2OcwsL;?=fE2sc=x?b98Hgq18$p;K<5v9im0Yr+&TIHBr31$-j zoad(?En5q8%}I8hkq2bGJ^9TO5zu+{_<0D~8Pr@UgX7rlS8a3S*sB8MkrZQIag_Cv)yhe?Rf;*UkPW)k zN7AB)SvTdMilSyfCz`q3sHL8YCj%6V8?#CY&g_0&vur#0eK8x^I%KnixC-GR=bZ3n zv$I;V6thtR&aylsJj?X$XRH`9$#Gz}BajIL<$+qjC8MRghLB{kXIPYl8?b_BW%{@c_bXMGKMR&TDkXe=Ei*b;MHe?XWISAR*F>1 z66-mr9tD8x?-RBBk_A#_)@Kt&wLSNnXZ0B68YoD5E~L7(gb5y20f!vCQmj!cD9@OD znbqB+?}XD%^jE<)^H_bG);@Q4oO?Exam+B1N*^esb9Wii;`|LzRo9T*yF9y;$;9K_ zAb)#;F7A+D)#YG~4D>tse(@gT;U|CznZwS^;@{L{(uS!YS_0rTVjy*{DANj3F`q#lb`r1yPq7vm=Y12Q?NXB#4m8^; z1-8ch4>^&3?h8+aRlO%#uY~aH^0EZwdE#B;)uV_%Xg_FSQgShIm@Z}Uvq2oN%jfM) z&Qu2-kBBhOo*K=SNc@&yB@IPn&mS6&%^|#eCOhA$eC1_)btm*fT}@>yA8$sm)QIiO z8!N$qS!#GKI8%mW!SCT=^G@Uqmz~ZveUj(wyJ$x6lvBE^CD}3k`Gm+%8MyoqaMZ+$ zxCaC8&`q|0&US}I)1@%a-;;4z>2dfoFm5(e%3@9EYW;3xeWbBw^s<7vdzv}ba@MOq zIZfs;;2@^91eSWRm?t)N<%9z{lf*RGxr{(j7M8w3oOy{2jiw^8*d#Y~vNvBp>w4%gc=3yRd;epJ<;sB$Ds!m_ch)hqYDFt52#3o*b)n(}XP4%jfAy1c;> zyY`Hn>;7VnWoZT6Ts?Ps?U*8s^5YV)UPA@lHb?#Xe7w%L*X0>IwL7cHK;MsuOB2?` zV+UwAHMI zZjDq1yGfHm6rkPNPTne+;mtD~K(m-EnErUi3U9W7&OL!%dw0;IsY7VKpu^Lsj%xs z+ZzBDe~#?NtCkey_Y)*gR=wpsIvImkXGT&uBU$_&1|OxokL#4SKo07UHAay_Z`MSs zp1<9G198PgHjP7g4&M>OIo+1`b45KfmSb73fgL&&ghdfnks(}m{K6!vCTfcH7NB9b zH5#WoTj?5VP2Rp%79{C~{=R^#2Si|dpg`$t?#Fms&SE}qyI}1kU{7(+*SHRF5ZSQ< zZ9P5jn!#!NAZ76woD(TnIa`40Py;r@N>kpv_$GEF&c!11tr*VzTg$>7c+G`w%}}L1 z5sw>AUa-DaU3U^Aibe+zfgP=wZRP2fG8pw*_@qtf)gnK*mow2?FB8W>pY%Czl|p)6 zyh0XiPOPp*q|E}QG*nRnRL^LEQwgkjn{w}gA4GBb#DH6o%s%06C0!hzc7yoBB+0zQ zq`AcO2w_DVwpW$pAH*)936dMUD2%BM(@Yaq%_}T$Db9r3TrPCxMOylY^ve~5I$wE%rX*aWEWE~rGsXo^o0xe&UL0LuGhc*N zYN<$?ixce{cshKbh=K$^L%aRYz%!NaTFZK^L3s*7Ndz32+K4s zIbHdt7pNGb9PG~+Gc_9St8PxJinaQTp8!%2)U4%o_soZO#t&sj4*Xy`UR0Z0Z)!Cb zE`j(y_gbiH|1ql7kc2fmv|t1*x8;|kj?(3*y{rMLp8p2;6Q*N%P=HkQ%BXRmf=zAD z;ZMl$CYztjPH56Rk%Zv4_bnbgBqXIvew~0rG_k72jO-Ppx`lBroCL>&9vaP3=Ms6U zMI3KKbt#V;&ym2XIUz6)B5clhPG8(D&Z{cACxegdZ{RriN!WF&(+i;JP8X`-P?FRTMy;CUBtV#qGv00&TJ?{9EZs``aTrF}TP!~-RtErO(Hh~(E$L}N~Aup#M#&Yvu+ zZ|Xs=;wwpZbDdGsY+l5m{JOdf%NFrDS!%}gL$wjl9*5OlZCB7T~ zw5e1y+QI;JckHvi1%iq*;|=H4&@T8W{GYC==@I~OoULR5W{gjxO5GQQ1D@l7fo3w zv&eDLTRW71BE->U4#Lbu$6kAJ7w`P`Wo)l4s6ww4p$CAE0p=8{W0;~Re-N34Cq5hv z2iZLdwt?^5#(0;^C{`8~!@Hn}y)E}ik@Lkn36+CXe6UZCHt|>FY+1hC$IkgAk6p;l zt(GWYjIAHyDQ@>mWLt*^e)aF;1ki(_%v%gwfF3y@LhEhiWpCYh#J{eh0U1CFsd07V zx&6924FX=;_nj~D$)Q~uBEvUz3;B1p;LW&QuFbgResb?6K_5=|Jio2Ov(N=%2bLh4 zzkW*t6yfG3^ZYfuC@@V?4tkKBWz$VT)#T~XXo)j_4euLx)wZV^0uq0(gzc&RGZVk( z#Aka|Z!(`?PPPrm#>)a-Z5xnv+wp5+whhR(0r|b}ZhIix9?0*NuV<20@v26@wYdH2lU_ja~2Ut;2?Uq+nysWqFV{i4W zwo$&nJgfgNfa)@Q$wi%(ipu9~T^UMdyeFMXzS*9Ro;iS~Pof;VpG(e%ikb%eA6&fG zk}F=xgl%b)JIIXN-|+AHXP^sjn!b7D#G@^32|nmR2gL7w*8VWf!iDm^-cgD2 z6Far(rc}OhK4^-u$H^^ir@72eMYH}H*sl(k=_+gY}>DN_Gr>#h4W_&=lR;o~yL z;A6M6aqSKu&?B#G{8I2?S?ZtUT%zKZHf_1$D;LGqX5)8<3k(5-xO~1XZQE0~J$2iw oZu^CWZ04HT*|v56OWTA+#m=7xuQ9*qp#uL@l{6Kz