From d22ded21f8fcdbb5cdace3c412662bbf9940c8fa Mon Sep 17 00:00:00 2001 From: qzl Date: Wed, 25 Mar 2026 12:36:31 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84=20schemas=20?= =?UTF-8?q?=E7=BB=93=E6=9E=84=EF=BC=8C=E7=BB=9F=E4=B8=80=E6=9E=9A=E4=B8=BE?= =?UTF-8?q?=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../res/drawable-v21/launch_background.xml | 3 +- .../main/res/drawable/launch_background.xml | 3 +- .../app/src/main/res/values/colors.xml | 1 + .../branding/assistant_octopus_foreground.png | Bin 0 -> 1050531 bytes .../auth/ui/screens/auth_boot_screen.dart | 16 +- .../data/models/schedule_item_model.dart | 8 +- apps/pubspec.yaml | 1 + backend/AGENTS.md | 4 + ...0325_0001_schedule_item_status_converge.py | 54 ++++ .../src/core/agentscope/events/persistence.py | 5 +- backend/src/core/agentscope/events/store.py | 5 +- .../persistence/user_context_cache.py | 2 +- .../core/agentscope/prompts/memory_prompt.py | 2 +- .../core/agentscope/prompts/system_prompt.py | 4 +- .../core/agentscope/runtime/orchestrator.py | 6 +- backend/src/core/agentscope/runtime/runner.py | 6 +- backend/src/core/agentscope/runtime/tasks.py | 8 +- .../agentscope/services/context_service.py | 2 +- .../core/agentscope/tools/custom/calendar.py | 6 +- .../core/agentscope/tools/custom/memory.py | 4 +- .../agentscope/tools/utils/calendar_domain.py | 4 + backend/src/core/automation/scheduler.py | 2 +- backend/src/models/__init__.py | 3 +- backend/src/models/agent_chat_message.py | 9 +- backend/src/models/agent_chat_session.py | 14 +- backend/src/models/automation_jobs.py | 12 +- backend/src/models/friendships.py | 10 +- backend/src/models/group_members.py | 24 +- backend/src/models/groups.py | 7 +- backend/src/models/inbox_messages.py | 16 +- backend/src/models/invite_code.py | 8 +- backend/src/models/memories.py | 12 +- backend/src/models/schedule_items.py | 15 +- backend/src/models/schedule_subscriptions.py | 27 +- backend/src/models/todos.py | 15 +- backend/src/schemas/__init__.py | 46 +-- backend/src/schemas/agent/ui_schema.py | 2 +- backend/src/schemas/domain/__init__.py | 1 + .../__init__.py => domain/automation.py} | 47 +-- .../{messages => domain}/chat_message.py | 0 .../{sessions => domain}/chat_session.py | 0 .../{inbox/messages.py => domain/inbox.py} | 26 +- .../__init__.py => domain/invite_code.py} | 0 .../__init__.py => domain/memory.py} | 15 +- .../{memories => domain}/memory_content.py | 0 .../{schedule/items.py => domain/schedule.py} | 22 +- .../{todo/contracts.py => domain/todo.py} | 0 backend/src/schemas/enums.py | 136 +++++++++ backend/src/schemas/inbox/__init__.py | 3 - backend/src/schemas/messages/__init__.py | 3 - backend/src/schemas/schedule/__init__.py | 27 -- backend/src/schemas/sessions/__init__.py | 3 - backend/src/schemas/shared/__init__.py | 1 + .../{user/context.py => shared/user.py} | 0 backend/src/schemas/todo/__init__.py | 3 - backend/src/schemas/user/__init__.py | 17 -- backend/src/v1/agent/repository.py | 5 +- backend/src/v1/agent/service.py | 6 +- backend/src/v1/agent/system_agents_config.py | 2 +- backend/src/v1/agent/utils.py | 2 +- .../src/v1/auth/automation_static_config.py | 2 +- backend/src/v1/auth/registration_bootstrap.py | 10 +- backend/src/v1/automation_jobs/repository.py | 7 +- backend/src/v1/automation_jobs/schemas.py | 31 +- backend/src/v1/automation_jobs/service.py | 4 +- backend/src/v1/friendships/repository.py | 7 +- backend/src/v1/friendships/schemas.py | 2 +- backend/src/v1/friendships/service.py | 9 +- backend/src/v1/inbox_messages/repository.py | 3 +- backend/src/v1/inbox_messages/schemas.py | 2 +- backend/src/v1/memories/repository.py | 3 +- backend/src/v1/memories/router.py | 2 +- backend/src/v1/memories/schemas.py | 2 +- backend/src/v1/memories/service.py | 5 +- backend/src/v1/schedule_items/repository.py | 5 +- backend/src/v1/schedule_items/schemas.py | 4 +- backend/src/v1/schedule_items/service.py | 15 +- backend/src/v1/todo/repository.py | 3 +- backend/src/v1/todo/schemas.py | 2 +- backend/src/v1/todo/service.py | 3 +- backend/src/v1/users/router.py | 2 +- backend/src/v1/users/service.py | 6 +- backend/tests/e2e/test_profile_flow.py | 2 +- .../integration/test_friendship_routes.py | 2 +- .../tests/integration/test_users_routes.py | 2 +- .../persistence/test_user_context_cache.py | 2 +- .../runtime/test_consumer_registry.py | 28 -- .../agentscope/runtime/test_orchestrator.py | 4 +- .../runtime/test_pipeline_registry.py | 24 -- .../core/agentscope/runtime/test_runner.py | 4 +- .../core/agentscope/runtime/test_tasks.py | 4 +- .../agentscope/schemas/test_agui_input.py | 250 ---------------- .../core/agentscope/test_calendar_tools.py | 3 +- .../core/agentscope/test_hitl_middleware.py | 132 -------- .../unit/core/agentscope/test_memory_tools.py | 2 +- .../core/agentscope/test_system_prompt.py | 6 +- .../unit/core/automation/test_scheduler.py | 2 +- .../unit/database/test_base_repository.py | 87 ------ .../unit/database/test_profile_models.py | 134 --------- .../unit/infra/test_worker_runtime_script.py | 32 -- .../unit/schemas/agent/test_pipeline_spec.py | 36 --- .../unit/schemas/automation/test_config.py | 24 +- .../messages/test_chat_message_schema.py | 2 +- .../unit/v1/agent/test_dependencies_queue.py | 283 ------------------ backend/tests/unit/v1/agent/test_service.py | 2 +- .../test_registration_bootstrap_service.py | 2 +- .../v1/automation_jobs/test_repository.py | 2 +- .../unit/v1/automation_jobs/test_schemas.py | 3 +- .../unit/v1/automation_jobs/test_service.py | 2 +- .../tests/unit/v1/friendships/test_schemas.py | 2 +- .../unit/v1/inbox_messages/test_schemas.py | 2 +- .../unit/v1/inbox_messages/test_service.py | 2 +- .../unit/v1/schedule_items/test_service.py | 40 +++ .../v1/schedule_items/test_subscription.py | 19 +- docs/plans/2026-03-25-protocols-doc-fix.md | 99 ++++++ .../2026-03-25-schemas-restructure-design.md | 29 ++ docs/plans/2026-03-25-schemas-restructure.md | 123 ++++++++ docs/protocols/calendar/schedule-items.md | 13 +- docs/protocols/models/automation-jobs.md | 1 + docs/protocols/models/friendships.md | 2 + docs/protocols/models/inbox-messages.md | 1 + docs/protocols/models/memory.md | 7 +- 122 files changed, 774 insertions(+), 1456 deletions(-) create mode 100644 apps/assets/branding/assistant_octopus_foreground.png create mode 100644 backend/alembic/versions/20260325_0001_schedule_item_status_converge.py create mode 100644 backend/src/schemas/domain/__init__.py rename backend/src/schemas/{automation/__init__.py => domain/automation.py} (70%) rename backend/src/schemas/{messages => domain}/chat_message.py (100%) rename backend/src/schemas/{sessions => domain}/chat_session.py (100%) rename backend/src/schemas/{inbox/messages.py => domain/inbox.py} (85%) rename backend/src/schemas/{invite_codes/__init__.py => domain/invite_code.py} (100%) rename backend/src/schemas/{memories/__init__.py => domain/memory.py} (79%) rename backend/src/schemas/{memories => domain}/memory_content.py (100%) rename backend/src/schemas/{schedule/items.py => domain/schedule.py} (78%) rename backend/src/schemas/{todo/contracts.py => domain/todo.py} (100%) create mode 100644 backend/src/schemas/enums.py delete mode 100644 backend/src/schemas/inbox/__init__.py delete mode 100644 backend/src/schemas/messages/__init__.py delete mode 100644 backend/src/schemas/schedule/__init__.py delete mode 100644 backend/src/schemas/sessions/__init__.py create mode 100644 backend/src/schemas/shared/__init__.py rename backend/src/schemas/{user/context.py => shared/user.py} (100%) delete mode 100644 backend/src/schemas/todo/__init__.py delete mode 100644 backend/src/schemas/user/__init__.py delete mode 100644 backend/tests/unit/core/agentscope/runtime/test_consumer_registry.py delete mode 100644 backend/tests/unit/core/agentscope/runtime/test_pipeline_registry.py delete mode 100644 backend/tests/unit/core/agentscope/schemas/test_agui_input.py delete mode 100644 backend/tests/unit/core/agentscope/test_hitl_middleware.py delete mode 100644 backend/tests/unit/database/test_base_repository.py delete mode 100644 backend/tests/unit/database/test_profile_models.py delete mode 100644 backend/tests/unit/infra/test_worker_runtime_script.py delete mode 100644 backend/tests/unit/schemas/agent/test_pipeline_spec.py delete mode 100644 backend/tests/unit/v1/agent/test_dependencies_queue.py create mode 100644 docs/plans/2026-03-25-protocols-doc-fix.md create mode 100644 docs/plans/2026-03-25-schemas-restructure-design.md create mode 100644 docs/plans/2026-03-25-schemas-restructure.md diff --git a/apps/android/app/src/main/res/drawable-v21/launch_background.xml b/apps/android/app/src/main/res/drawable-v21/launch_background.xml index f74085f..9023017 100644 --- a/apps/android/app/src/main/res/drawable-v21/launch_background.xml +++ b/apps/android/app/src/main/res/drawable-v21/launch_background.xml @@ -1,7 +1,6 @@ - - + - + NcCCQvBB*omObM!tprwj;sB>pS4Y(6%b6gy`|=fz^yb zs~jjSj~|89VQHkp(HP5X>M4Fvo#aGAfT9sGUMW8s$E1P- zh{VFdk#e%9_)<0N8#SgWe^ged@NDA3FmqmHs_KOF(B&*rh#w*3n-ny3M`FaFa5KJ%+1wm!T3idN4Y+N6&uT-D)Br&?Ksys1wBhD~ z==Blup$%l)!Yvw;hWy~MvvT!~Jvcm3+AUbyK#wLmf9-Ad z-g$|QCo*lXS&ErA8ciPRL+I`11%WbQxa%mVo}?q8?;sk5o3Ot$nUET*ZmgW_%{1KOB$Z3^+t=714okV31cOf#4(yt=PE7J@bwuYVr|;Uv+-8k|i+f~ycBy;??WYRR&MtY=y6wsfVN(ra5%Yglg! z>s`a3o6%{tY4_T+yDb^4bhO{^$Vx9`&`apI4Q&a6VyR&i`6&04BFwx>uA*}db&Ro# zW{C~GXQ~MeAJRy59>r`UXg`59fgVn~f)w8H$_)NwPk3`zc>4gZo&=Oqw<~lKBulAd z6KhI4(=69hoPTmTLzQH1;|&P$jGYm zQm1z&iPGIl!8y&}zsvlU@1w4SZY$jUP8Ayy5{fw#`7Aqk;p?{B{pPV;xcjKmd2~EF z{zC~y!0ws9Jb8NKy)Wl``%mjUUvtyR58))n(Wgqs!seFdyZan{{dGyst#SFspOthq z!>ed92_3%>ds`Vaw5C4Sk43E+q|Mydu=B6PrttJtqbgo%&r)br#y**eFXBP1fTmIh zsD$pRs8)|O7htEV;9M{~SO}n9t#}-jXFR;N3fM%$po2*ChlZbRewgJDjtXcZVKmKq zvaXQz!ObV!|NS2@xxepeCrYcOjAw$Vm&Cri`s`ExWV}<1A6>rxcE^MN{v- zEwrmdu_rDMrjnXI%!N?4XyGC_?+O^C3MQ9x+4 zSYv~cL`u-93me|KLhhAW_;;;vWmSb>7oBG{m5>nyldNJ7$MfRixQ}R9KhnT73Knwl z(zA+H!#G!Nj#O_Am2Vvh-yfnkhG;QCYzqB0th54mAk5*R&V@@v8>v=HCY^@3P@^zT z6%b8T!36w@IW;&@gQOcgEo~6jnsXYpOe77#V5z8Wj#IF3BuO1*P#4Z3vgAEN7EG7= zVNfNbr74}ifQHROqie~Ry`0^`Q(dNGuA zdVH@@WHzL1sh)WezOA)0H*%#X$BxO+g2TO8^m}zohhQjyI=g|gunXRNk{l&w{!n_=Q)S>9`P1q z6dPSe_wVD5C&A^^fnvJ&CK@I=@xdTWwdOZa`S6xOdH&WI<2!yUx z@z^q9y}EX!`uYicWCG8xz=JqmQ@tl+kix5s6n}#8AKA#vm5)9~_l*Zku3d-KRi)b# z<|Xc6mz}TOq_^7E?$!#DqP~ziEl~vRcEO!Z&{8(jgk0pvjXe&DP%G5w+gv`L8 zYuV~{z1{9e8r@BW5r0?J%ur?ynHIwF44upzvvJOJJYzPU>+E>KWK=SmMMJK4;8eZy zVT=hM?o%ry7f{#=^2%t z2q!c2{h{c)$H@1OMZUJL><^Wq6cP)oUFcItKb0W=9?q+&vvTB|Q~w~P+oe!%>V z_wn~`1$d)PDz21btYbb$e5t0L?WgOT{~+C3e{J$#KQn(+={!0f9sdCZBfcp9J(z#w z|MHE0aPyD8nU*v6oOf=3H$gN?EUayLoMm?BKpyas>ZS)UaDrak1LgpPd-J|RGl%ucy60u2hyr&P~(LlEQKKj zU(p~;-LaEUod`B6=pxa=5xv8U{g+CZla{bQ5g*~5RhY!0h?2^k?BjniY7(WlA%ZR0 zeQQ@nfBaQS@0GPd@G%qKHiMB3h~z4vbY+R^j-%j9$B@c4JNZ7oXSmnz1Sh2`V|N5oRtCiYOvJ?&?L1 zmoyP^Gso<(U}vPbS&Oq5jPzEGZ@2OD9K5T{7oyF$>{vjE#xTKXXRkv-8fCsCramf8ah#=8j}!5^AUQ(e5Ql2+L`Mq8KG@^64ktr>2r>^6 zbONc@;M!U^FlwfLa4v*DN#dR-jY~}#A(Sq<5e%sHYI;WLfpjgJs?&V#0%deL-OOs;BJd*1tfWRfuby_)c@5@) zEK^A{)Rp+%Yo*zJzhH9gF&!c68*HGCLN0;gvLIo2f1kji8cTe&^>R_1H5>SK+Tcv{^)g1o?Rzd z8>qBJi>Vg~6|I(#<*>RcNNJc2txkufw>HKpMAc@&2NKc*@jaoOIvw3F{f(KEi_d0k zT}Ik{K@=@=t+b}f9jK;STXiw!CyI()a^0zz1|P~}suA9Xi4Up7y?DoXtsR*vaRg3u zNjnchi`JXYa2fdOo@hXmmbgnHTt=uJgZ29e);GKr#QQLAT?Y4y_AIO?O*n@y6fXdGp4v`eND_u_{?hl+x;IUl63ccgXes`u8~Zt3Sq>&pfRgm*MEPQq1Bi zh!>6X&S7+QkyBAwfAHb?+Hh`%6}R$BHfJV6^%5THrkT@Xq}qn-qK6)b&eha!z*J7+ z(-)nngsxI}xy+4j!%gy1^3SMafo;^!m#2dxzZojdv&x z4`F@XASuiWD09>8Z~gK5^N)Y^=I;}L|(`|x~QDAh1Rk#J(vmTq(r^fdN2=E#KmICM4(5kYmE0n*aEB=^*AFMKA<&5oEWSsiHNEi z@!ki^poluu;K3V-8Z8>Oq~Qh=P%G-yU_;<6AU2F##JgoFQA7|cM#P7)5sZlUY8Uv0 z+N%@cu_AE?8pH-ga=&1giA4tnT~Co!<7FU9iseL+t25*~2MJ%hZFzGC?hTzxy-}Nr zIkzRU(uOP*@u7Pj99gkki)FP$#AHo~sI(NLO%q82T)p_AidVT9nUzJ)ycPz+NUyD9 z?!!J;Vi8j_PbyZN*G3EhOT~<-d`r@VyM`jiOM~-NPY&0vy5--fwQd;PoV|W%FdiQ$ zx85nu(TxICCF={eYpX{^q^(4kQFAVYD1eq8SD@Zwdg}>mXALVG7WK$%6tFh!i-IlD z@t?fT_*-v?bX)kfRguF93`erElFI+`&p*XSo?MlwQ`zysq+)7YLpWDHB2+U%bK?j5 z%B%a3SfLdecV4A>Du<__F05awHNj*N(-?V9CO%VwPqq=56c>&->m&`kt27wa;rp*n zfLV-O#UH9hmKM^{qKF7D;TFK)P!xqF%336`u(uDh6E!&0wj_SI+7_W+)daS$iVKyw z>8u)Q_e_;m9g@4_6W@D~)JW2X)aIOAzb(aZjHH65iKQ$-)dhZ$D>|DS-=f{xnF4(A z!-f0ecdok99b&DL7naNfOR+J~ZNu=G`EfxpS9(1#L9G`r*rsnwO~50j3ECZ4W+#r( zp+kK=H&{EQ32UcF3-Y-#I&^ebg|#zQjm3D^aQRpaj>UGN9vMMuxmO=@?=9RwvF~0v zk%G~x4pGpCC|ijW*2aR*NA8jOWv8Hen*6Lfl%!e@d}Q}z7FOFvuODDuTM-#v5e63K z4w-|t1Wn`IQYoS%5i=Id&p*G(@rxIEtGgkb9C*4SbUU!Q4!7Q9_q&h7+4HjTWS4vx zl0k_IR*{1hw7+UN_jDq6-f|RkZ%RaxR>kBO34)}mS5dK$^sI_Ck{>y9>-#e%M=6&+ z(x$(L%*QYf%7;c^w~w|@x*ZBl&@78cvT`W}ko<4cw!(-3R5hl)Xx*dVjv4NHV) zD_(G-m>8PwkYujPOf5$x;uPa;d}OK$UZf@JE#6qvSTTq(Vu3V@ej<1uCWfnqim~^vUTn?_y@Yay7 zBx19uaJp))H{QS|-kTzbO%c4YZK1txwL9?s&L7^A+3W9NCdc@V^@YFE+F;)tj*Y0d zAYbdAS@}QhwU7566*rH>AyE0te;>oI!-rM%iyu@kKN6Du{Rl?<%C9*4fB3_9wX^r@ z-ScOjn(mH1;quu!iH)kU5$$zRBbwiNAiH1sminU^XFvB0?Q=%uP|1fLUy5Kwjnomb zaSaN~R@iYH8cnZyCZej5q{@7hItz7)Bcyd?Mo7P0@(92#G=C%Bo)LhaVZ ziO-U+$)Nx3Aapc=mO2U5GsY-zf(<~-3W@~w3;eUx-(-_qg%IhjxN>yt(eKYU1!i~i=mj=kC zkG9c@c?pNE0pw|AuzZ+@v?M|1-X zbR!Un1jGP{L7+rX60L?sO5))Z#;$RjZIJBwKC_ujqd)T!F(_x--m zs6reqi$T14Q@&I_M$N`ZHjEP=BGeeC(#5EYG>605N3JS7CG^&59(A3lRy|X;xDkPh z$uE<_>daYDJQ4bLg+bP?C9J_Xg`}zTKiRxsWczA?gH0~#zOEH3u!V(=71Ex9PKY80t!)C?taUWLs3TMnC7%{Dd-(#( z(G(J;)c{kl#`*$z8pZmv@o;cu>Pw*O=VTha=W~0;%1H9r5J}hFA*GxK4v^XQjQQS- z!}SbGi{so?_o1>*G#;?FK-yF2^dn4mOIl-HsD?+z{3H@b!_i<2Ob!L(ean>-nkx1z zQsbn>z%id2sh+8bV{SD_aWfYyyDN{rI!quioJSxB4VFe702dY5RGE9%NsC@~;^d%g z5)P&I`*CS#fM7MFx^d*BOyArCA6)`cz|P&zk_02=?ZW`OS6Xu-rF!#y8(ewM+i>vB zmuSaRppy}uo*;=adGZgAa>4PSR^GCj|57!Z z$c0#RNA{^0C6zkM)6^V@?ey7ht%@~}mkQ&OxH=YWU4&fTBtO|F?;8ppS_R&@0^F5B zPATDu7%~Gf24pP2*n%_byHH>|XfbxAa9 zI;+NZRWEoppa|SqAc=uNM06o^sA1Pd)5CTn>Qj_(4F6eU^Lkkn%Ll^ssL{B@SQyCU6Gki_ErLj08$1z;wT z?sPttE)RZbJA3c~{_%T@JC)5F3?%wEh`)_6wgcw`-1#J;qYileX_&{}1B=IjM>fD0 zwjhtc=nhfm{E$9}_V3?${ksH=09^dPe0YETfBA{0J10*33o|yoe3HM<%%>5vOsFWx z5|KEfm{KOMT!j=C7L@h(-HW83B8!3f0bvSM%6NJfXtSDyDW-JLO^x^ntK}ArT^d_w z7wgCeGR-YU`z7+Zg*CwHNiCh8LK3-z_|T^qK{L5^gv3H%Z(t+q*dweD`JiJn3>DCe z$WBg-X29WGVP}i-?S0`>UCP5l!P{0XA6zER43#W(oaf3iftfq3NG{;a2xg!Z7M{gZ z5ufT%uKK{L>3j+lh*(u8-Vo4jW|MDJhoBDO{a~uO?NdVPa41%ca#x>;t``GW-_*vN zSV)j+qL5jcaEcE`43lQ+I7b0v1xZ}+A!4`#bWgee&P(9tRJc7AT$@rZje+w=#EXZ( ztr0NG1+f500t_;u69ZXPeU3|fG?o9^qA@D#ORYfamT!dwXE138uS;tbEz%~1HPu{r z8_ptYD~^`@v29Y+fJ)U(W>XxsWMu(FfttC}M0?|Q@2evqPMw!=J`-$TFR^*K#Awf% z%SC+!9kV8H*2m$1B2yW7SVP#-c^bu;LT^QJ<%C9-y02Q~0#g#{5+zv!X>uO^?hD8- z-+)9E87@&BPJ!`EPCRr9ANVux!s(@iV+HIxKVDSDmo)L{P;ld<2jF*)fY%OyJO@tp zg<&dHD-r4Vt*F+4xC;wIuSd_}?NR)ONuHQ1sc zdi^S*LSU?GKWQ~GW&X{z6ZdR2v7(gt#Q%7M2cw(C!Qm35D;4bwS_5&6`SwWW+ehHr zGO8Gmyz!x`Wk2FT4_g9BrqCHE#F>UE4V2c-r=#sM1dvdfLO!*a94MJhfhdNQK13m0 z;urmKY8n7;Ggm@Co5s+*>Pxj#_Cm&h2OUD{VZcCafD8sygpk3;_L^#h=*K{+fE!cD zS2n>%`#`3FiI?jt`i6jCc=oKwnihHBzBT;7kG&nA{q}1d&vQqw=w!gsvXq;*FnR7Z z9K8EY7@q6`hL{~yp%ebz86eV>m6IA}5kW+dkF7vcRMa4o(yWL=C5XC8pe)O&VCR~V zyvSkmSe8y|CLIURnxbXA-kAG0bKJePYFwyl3`yGI72&h+mm|F0M3)vrw7o2}<$-PK zDUPRAN&D=8pcx>Pg>l7ZPZe=YBYM;2z5?JiTIOdX+$RB&kWS1jvd82~v4ea^*cOn#kwCYEU-eO-&A%GaPL11m_ns*ntcd~1*UUw(n*<;##n2|C^8N;Cy!DJW)EcjJR} zsr#9gw?6X4@!z`x7QJC#AFny|;{Oc1A4oH4X-Ud8=N2T-o z2N(gs_CNWvM*x0)_!s`g{Wv(fYr4IEkJU;sNvw0YjEGYkf~{Rn&tJyPt+C{jSe^NS zljxo5h>9We9nciYX{xn&iy~D~b$pemY~#}Daew7$lw}n^;Uc=}61iPF$R~DtdOjN@ zNP6}kD9J?wt=Da>AZ zS+Ft`^twJP$dpRUt(Eou|08+e#Pb(__0FLEZoRIbefG11YiE1O+RA&)=Jo?J6@{$p z;*3o0qFu5KcJB~}UwU42CzIY=??KXuSO^5xKrCTOiWt`BzN{!{-VTePXl1FpK$#0B zhXt;_Y-Kh{v2m7IStqDLTLvkCp$D)!Rzp%kLr%ZxN|Ule_%J@}#P*^I4l-bn0mf3s zIk-0>F7E)Z-8A?uRpPD_k-XzB!3RzP@9z;O62V&Jx=3>c9F~;bLNGEATEY-@*G#Liu&W)l@?4q&XhfI*=qst#xK1qW+dr1gj2O7>9sVzgGXFwI^9G)#c7xUqr1 z(PG@atvpZ|6hA?eFo=Aw6PsJFN9BxFia#~BGz;aH>3+Jj6r^3!@3R5G8 zuN-jpg|A9+cqFp63g`%O>l&bYc*{E;z)$~~`@l|wLnD}p(>7Ez1W%3?V}UM(Jp!g6 ze(M@=c_c`bpq~)dgDh174pp6ejUe*8Nq`6$0t~nU(lAu2l(o9LYGUii>?MEsYzG#(YV%@W$1v^U-(u~e9wuBd{ zc#1KdnOV{StT8yaFjaPE$F;e$wBiUm6rL!MC3}-wTbmajzke34_np(H&rjzU&KKMH zn_-O8-Y5#FiLAqX`#|QmcEw_Y$Osf5j8GzHl3vRxy;oe40coGiR@&}5s@m*jV<{p7BJgpt&o;q2^UJo z%G*|a!Ks3VNP}xjb3Yk|ES_2jWq+Q7B z>6jp~ePu4?TtpLOwL5-wK6f=RzDW+^0 zi`U?QYQWR_o~lYxuAtF)54C~7${9!bbTPG%LbzahU9L% zOawG66RD)ewX=`!lz6?X7{A|iBcK<9(kG;Z9L~Z0De%-G@bybzCj(9ofJfGqeBVj% zolC+qDUc~(O}X^MIf1bNQ-Wgw<`(eFGeL-T2H6eAxN)6uz(>$C2_oQWs$?;5bV}u@5==IlUtW>Jy?I)+U41)En&-Z(!;IWsoyDaKvx z)_fc84&G9$%32TzNu``}P@*odbYH|`I+OYHmt^*(r(Ehsw*$mJVo!OWSX+`d&$}n@ zdQxZ6H?ID@4_>=d$-Dtyq?{As6Hh=LJq?j72mv;FmrNB*{o^ zppW=8%8x#c`3tY3#A9^{aL4oLy9pRouWY&d4~x9qi`Uivsn|JK5fI3p+ z!R+5qyTAOeF~9mgZ2ZYbc=~-Ck`4@}o0hXf!pta$MCkA$)~#o2wWFh|+7YzQ=U|9~ z3xv=jl&a0zELaR`iK@M@kYCm?6P(>ceQLKVbn6f<7lR^b7=Y5J%cZQ8(8W9_pB&9asqtsN#flDU?UQq zO+^HhoKO=22Nu{XfQfN2^;VqUh`6j8Q3MlDLsDoH^pt5LhjnPd*qjH&+IH6t-Xoy& zh!Goc4Fhvg_wQBFYilaGtBH*}Oe)U;Q2-(Wv2yI6z6QFq$RLtNXe^YI z6>uaAvaXO=rD_Xo*a}N(y4khlD10fkV8ScM6WRi>T}#8;4E;~)KUXNa@qewtn0Egx z;}q!h0TlzcE?C@pt>FH(0ya`eh6*b2LIKn2nl>CJj}D40VG4mQ2^A|WpG>iGQlr~< zV9RvUe1EM3=`xWFz`d7uaOqz>gL3;8Ww1(gd%%1OZf&CX!ymu{AAURD*VWiDz|@r$ zR1)xRd^%NWfu)E@30^ONC$CzJOJdmZR5hs_xS9!E|9*3mRn2;{O@Y!P5b-#RffC$* z4?qOPB^P*TEhwqgW+xhN3ya$8s7^-7~_+WvP#Kouf0$ z-!d;3--O`DVZ1w$aWZtIUC916%j-8VAH4;-3z(^YYqmkxO44a95G4xzwFIM`f~A4L z2({g z-grO_HQwf@Y6eX;e_LZNO!V}UA`TNUFM$g?z_SOy_r}1I0=ETB{rn~XZ7D*i?UGoB z;BBj!tbO?Xvh$l?W`3{_EUh>#>2Qf=Ji_>kU%-uboWRDTE9|cVM{^5B2Mvf2V!-(X zI_>~#XEYQu-g<3{atb1I^S_qFRK>n^mfloA(pQLLh1o%gtIt{->?FARkp%q#DKRh| zgQl$4zl!C`8qJf2Z0^~;O6)Q9S!gz=eBrFbH!f6*J{+w7f|eX^k@-=(oY@8hs%27a zONt~sGcZ&nF0ASP6P5D1a(~~7kYUEkD-k#)K%RpKrSQg>xVi^?;T52tLY4-^#tQiG zGVtzI;LUyDR1BPS7V<0s;lh%#+tNQ zd2L70YEf+(L{i(Cw&R(bhF$Y;2)cV=ymOvEQ&3eVb{?$K1o{*XG#N*N9)XTnBm%@r zBe&qx0{bQ8#UtSPJ@ADs;cMFl+lPWlu9186YBd9g%S0z8A_W)^0F`wjpBFO+d^k$o z2?`rH?WUwZi?zm;ttHO&iIM^&8IWe~BW_&*Z=IjvaI1h3L9!fCCr*3nF3z8M*{Ifi zY$G9BF;-9lWJAUNy%Ew5vHPiSbN}@rR)i zWYdkWX28H}?NZY2_W5O$D8vJI*zE=}PzBWzkv@RInxz zF+iDHSYu(l{{&T_6RGqJAe0s+9ffixn2wBWzGje*Vy@m5VYsHy8#-A=F&7%c%3neP zYPoL!Rvtbbdh zIMt_|9Rd%mkPq~M)f94)!jln@M-~=}MqJG996&C@T!_-qqs3Uq=5V?>1q%@$3Q|*{ zD<%Ug4oa2rDz>U$o!?^RXkdb5Eniz!+%8QQtw!a{FMZrSvxvwPphXyg;*2qc;-a8A z7s#avadQmb7y~!P7B`NF-6>=%2X+eKC|5Az8epplCDu-MmT1&*ZkDWKgsZ5d+M#W+ zL<{9;L7EK%mQZtCRV~(tgq`dbbA+u!A8J;bcwaZvDNFvQHLUt3f7v;g`YyJuuA!D+ zNq8b((5^K`2=$>;nktmxfi?1nQ4ko7EO##D*t;f}99SSxh&u`@s)``erH2KsLH>HI zbus5Kv^v$QyR0!-(XzCr5GQVAl||D9rh-HXq<@NP=lU31U%QC>*=Hc#Wx;Srn4H)- z5F4lXp%0wJkG$^`VruMKVAjZYB#bLJzSF%#!O@)Z=`G;aA(=)lQOf#xP>)+yp3(K+ zF_cf*00=_6_^ECELPcW>2XbsRX%!8uEpuyDN$6kE7^0!siP-|E=)G%Mb=tEO%yVFT zU^zRoqO@~WuFZm5x;HoKZ0SNH;#8y4cgi7K2J|>@a1Q~at^g6G*q>qi+9rgtAW4Z> z3(69(rGl|klxx|_>gPt2gX!X0FVWJivdFI^jdINAF`@{Fyn9opL(KM2?C)W+Q=)e= zf{7hyky%aaR zbKo<#Aoq1G?;a2_DFpy66)7ChBqr8kt|%LW6hHS9Z{|Py_Dgv7_x6FqePA#YWEoKy zlt+8m`s7p6?Y)!3x12<_s$j;RQRC!+QVOUFAdZQ((@Jca%HF0yJ~b?iK&SPfXZudN zTcJ`=iGrDl99+#|bIY}RA}pQM>-`_R#_*m6Od1n<-RzR1nT%Lu>w&*lMfwGOCQ!Tq?fX~t;Gm9n| z0Z5cjHgmFdBwnVT0Fu!Cobu#XaABt8`b2nREVz0o*clldO(8pTQM+X%2PI@& z5?U!_UB_&WwIjR7nxd4jibJe`;b2O)Kz~&Q`m`<_-7~A)WwUf9_WK_BX#r zKcX?5o-Xct-Qv9mM|j(`RHqE1KA_AhN2nB68*NPLR>^K5;Qmr?;)A=iRW%lWt z&vY*S+~;NIpMIFLJ2&{d1Q_8Q?HuxY|FQq+UlQ4g@?iRtwkRI96B8rtxK${Qgi%ir zDVT#JjK2LcW_x26k+bNYT1LE*LQR2uB0lWI(|{O6bacl=$P4w4H=m1;6;ADBozY=BPs@+z>Vp)VdG ztHYuVa;zwAZkGI0?bOvVd0FuXC<&Vv)G$cc5~;&adj-bF#|TIz-ZcZ zF||9uNfv{h80cu9TE+Uiv5+PXyD}-4U@fUL-rF60St#fi#9DzFI_tHHfsCX&05?8Q zE#gQ(lav-ofs1-2G|xr?Z;W;?va(oe;?=98skE0$|F^dC8EPbLItJnx&?#UFk7^ zh2jdyWQ8zVu>b5;Ie6-2$an`heV3q<5{C!E{ay4PxetHh9jE18r+e5d!9x)-jzNbS zMhm=%mbCM9d1VZI?i!FAU^%0t8Yr7*AY6UB}pQwB-W_yD1A;gpxamS<861GnQ(S~?!5{PsVAx(X?Z2b3b zMi(GJHUNwzCR<0$uU>`dR1hbED%-g*gb`Yr8@*F&UmkVtn&R>Hvbcp`o+3oDe z;rs-$O89AkI3vVJelW)P%1DN1m#7l2ZI|}_q+5r@S}-Cc&4})DjL}X3TUbaOwC$bv z%K}g;QesQXd}6V`Er?GONdl;%Hf|4PxFRhcNW<`|0V@eCCKxUA* zORS%b0fPHm-qQ#I6%o{x09m!rFe*T2TA)PAk-^@z5@jyPXO^pHBBnhe?oez2l%*$C z$?U=pzgt3#{4#b+gTuc|4xY7uWZhtX=* zcwH~sZ&zz2>5S4LsA!PP6wrwPN!@xkFTr_E%w{47Q^DSt@+yTo5-jaN)>GhQ2At>s z8yUEo2nGqI8w-{qNVocP1ST5j(veLpfsQ~-RS|gVr4g?W5UIbOp`cI{B@IH_uq_=< zTJ`meKW4FVj%Sl_2IuE5+E49*E)_GP%lV+6@1;LW?3UoP0FUN^-8t-j0d7x$n-js+ zDR6xv*d7bUGe8QVR)CHyqC`tC1G|Yrsy!1rXe8MRDfT@FUl<*yi#6cCP{E2gVlvvz zheeOOR_dOPfhcjHwkd$4-4eUk4R)?uM^a;y9YTk4t0{ool+D`P5H0PAQ!2rfb-l0Y^8c;m8o9a zLV5``R3hxID#k-fX)HEhKEmcN{;nMT-ZRdL_{3fApqfuzK4*8Zmkj#dYtA9R}38I_HRd{koRk}-!n2Ky&doPCqx(hAY( zQuG|iXD*o(7A=GA${T2*R;*+sRl;_a6W@}#Rlj5ev^hWpOATZis+%fUQLt8!7m#s5 z9?rqnc7(6q68Q`*qFAGs0jqt;-F?M-2avOU!I>`9i4>3SDAFMrR|Xp{B1$4f zDpzX?3CSU1f-_Jl9%OONLn?P@^C|GOVnGdI&{&|b4LiV@ zWi|;@HTSUThDs$bs>7qIR4Y}pPHL-!pdao{(IBE4KP8-T|{)?mn13xD{4_O5XC^8f^i}!X29lUBU={>99}Ph zh>{EyqD;ANfsu+~Pm1`^HODivMo`Qx#6qG7$OekTlL=PVh)(A5gt?F92B4HDClQGH zV6rM|_tF>#Uwz)@uUrI{21Gvvtr3jJOiY2de)L^<|X; zRSYmWCXEqko-r$Vh6D@+X~sz7fgvIK=&&UnxiLA}6HNCFNuiECYtVY7cjZs-BmMvj zDS;?e$X1k!wV)^{)+xE2?}*E}rlPPj01l4~M>h^cb}s>go`Bl>SP7693RI;Cwr)Lu zm+;pfJ#K`0?wpN&{GV*2C|@l1uC2gI>gKE=A}4Su_U1BrbqoC7J{T!NyLFT*D6S+h zza|jJl;K*0`KaJ57l!4o=$jwzd$=VGVsVX2rzVqz<4=O-Q?p6KS;S)X)PF$U@s&w)yk;~r; zr#Q6@Rv&Uo1-JDjlS*~IC=r&%L&tqZTT$E^@1vTr+(^8u=WhenCrvwI;~0ZY1;B#= zU`-X^Co0ikrU9E$${xjvrj$Tlh>Qzh??~jv4*5+ZN+5_e5J#|C23g948y({G065tb zp6US`39uGJEk({tsjDd+f(e}6jcT%G;Ig+G3|+)A_-b&I6jK40j%5r5pzuqe(qQDm zE8#6sYhN+t@87=L<)m3N7%jhLUCf%h#Nuxllo{mM3a3)QtG+X%yevH@vT&mcHHkjSY z$@8PkfkrYHY+e-HxR7JCU4oWKS0k#FLi)x%n~qi$JLSfP5}_5XHKK@A5k)70-U*<; zDx6&0=ao;sg!xM^L$X*fSP|$5C`)fnX@L2RC<=*J*MBcPar$%D|NakLzEiZk0a-=O ziCR7J1iBH5w~dwh$k^~N92C6YLL~}9ts&wSwG`M0QmTgRtE?qw3h@kjeG074EZ@-) zeXUfsi+DbN&p&$V^{4;Z9V7Mc5@6)ko2&nc%myF5_z$==ctv-z|7do7^Ie#isf{B_ ztOPS5;uu(72RZ}6-X3S)_#%qe&*SJD@5ad=dl)Al?4ZA_I39tM1A&<-7j-}=ttzsQ zPNws#Z;u9R-8R<&oZ)9_kU>1__53h*Z7=p9XBwe_CE zv0^sRSUTm-$pE&QNVEKWcZz_XC9n6c8yVrj8S!3&?ne{N?9)*afJGrH4+qBQQZwL6OME z1+2C1^x|GYn_BAV@XE0|84zVjRn7!EuTL=A);Mubf|GYgTv;d56f&Cv`P_A}!U8@> z&tiCh4T?Sm+ekW_2(}*VG_B94eGvFvs&`w21ZDlBCR!-QPxK(frGNG%gc5;9S)V^4ruDHkUVK(o$8tO$n4 z4fNOmQ$x%xF}1Ms0?ds|E}I$Pa0W~YVV+xkI3xDw76)^Y(abuwi3m#1d=f^GL^JDx zD+56mX~eO19{!L@W(MnxItvShfXQ<#jVO#*mmtPG$n$D>7*%UkC@ri{yluNQ>k309 zZ2Jpg!5lYWU8+VF##RUXc8mFKfa=_7X2XBVd z24e`ZV4MMiB{zIZ>#Z-8H}5x2+7~52k`TqqBg`)B0>wy>E(30nu&~ym$Q1^|9dw7A z_-pSi&?H^7UW4`Z^Tqz;S4R5AyI@R$q7W!3pd_@08JC>Bx(PeF8#;~=C4ilvk|BlR zLaIVlN`Z8TMAFxoO$4?OM5?h5u2)w&N`ex>Y~NtIuh8ph#9qeJB5$d-#3)P)s6oci z{Z~TgvKIK%c%i8YMP|@4NzYcqCZWMAn5MBTlRfu3h5j%Q3E> zT*v+IS%&Ru8Via6ROISlF_N6|x9S zwd)xxEp@nrYr9aHFn9n9CUes4|6Y+s<>s_#Ss;H(V2bZ;55v6~i^f%MUQ@-+wlnPl zvk9R& zs?)U+`94b$3x-3=v_LrfyP2wM+>zLHNQH@lU@^3S5(qu{Zt2VTNP1K8HRDT(O}`AaY1NQ^K^ zF}!yG9Vuu6S}Rd;L{kb(AuzdR9bx1Rx+I8Wr8Ce$tQ52sngWtf1zQ($%nl4jXCiEz z)l4!XiUji+k>|$}u@;jr>chWkQmQHz$g$+Buv!(k!$0d@l`FKB0+gbpRuK0TI!0VN zh)_zSVU1&mTO%mp5~TL$3U&r65kyK5D=SX#PezgJcd4p7)L>(d}&`}UpSf6$=%&{W05|0SD&ZY5u z5UCh6q2H1O=kAKN*f4BDaco18lw$xu6U|cj?l=AyfmN~lJJmKhm*A&bb_T&gza@T< zKseThO1*NMTJM%Gi%iq6ZZbmq2|mdjSZuZegFB+HQT zjS;SY`VuGKcn;R&!0Hf4W0=FK$nGvr+_i!a{-qD#?WdP8R}pp!!ORh46jjq@x1Q0L z5?J*1^%Nz145-{u7G*FY zu-TaAO9LGS$!*OA8n@jlZy7k=6BJ_?3#k*;yt_!1r0mT?+$L(R0a7CBY9vXW=IF?1$AVMMy|1~f;qYgF|QNIqsFIe?#O5Jag*ks&>)dFf#%|@&b#f zPV5U-{IDhAz#r9Oi?zW4)i96(0H|?*Sfnpm9A7e6jRAKhmEpAb{jydMTMv*a?=hqt zn;05Y&H@rTp+wfNQ&v%|LqkfdP+Ebt6fq8bIx;SqZENnL$p~?BbBII`Y6>C+#QqGS zNob{NBh+d>xvAMu2CelD@U?is%kC^-ELnmmMNo)i6VFPbutKu&yF!@rfb9~p4LYyhYnHyA5O7vF+gB6k8 zXLh*zsjqVK{CU_o0tQ280%a|IUZ}-%3}uZ(OWjST@qbGlJz+levv+)p{`k^}0tq$+ z=R`gBHt>Q?H-1afOWFLsQ7#|cF6GCj*1n?@S&J;9xqR-`L^#6#uIP%1)MSYm3#%tfTa zHkAaKULLUY`Xi;`B%Co(7J__gv3sMybYzgvV=SMD(Crgx$Bos}xWc<7p$rQCs;Cbb zE3)W?5HeB1MCd96werWVI$M=*sCHd4aZ{%W+^LLsOG6Z;FgKLE(BcekiM$ldtoULh zFmG(^#)5ob@kBuJrlJzsb2@zrB zn*jqVcr8B(JH4`~16u^)LOOrda;s{Q#=N|d`M10KHPzfpp5$25u|W!3ro@dnwy6Xc z6Uzek(>5cak)+`^GPQP*BEfhHfiLCaz3YRhhC~seW9Rc=N?>wiakOKwf5XUlw`4gp zV5|`JBGE}x{fe~}G0Nu&Ibgw-0$Tvol+I9NxS_GUp^#+mB24a>aIQli+z<;w1G)q0 zYykOqj-7AZz~-l)g`MmJOI@Iw0YwSBwF3(A;9Ks(PyOk)O23ofW(n?EUksv-eQtq$ z9RNcLt`@`#yTa=uNGBm8?>S~=p-@|(!v=6&8ysT0u&l<jC2T0_M7ypise!ipo+Xq zbxnaviHeBBO^d>t%;^YJ+Ho*xrHbiwbQ=JO3FURr^O=>sYXyoKP)s8X*A&xCAAAF2uB|mkc$*Ij2VQt#DhN?% zeCpav(hz{+B5|>i&0E_B{^60Q$b*ea#Vg#iT=UFFUX(_n} znjD+DLBVaqwW^qrp{0{IgRgMaT71?ll2)iSDrK!yww7rOiL^7Njx?dQ1E`d0S&WO+ z;gIkKt*oWO?a|O?DU)o1ew>oG#SmWDyV=U@@rOPIzfOmPtDyj)@??x+w`Wcc1*1JH zdp8V5y9J8eLPbE_(@>E|iA+EjuA1xwtT7G-Q(kJE5lN+w?e*SbsnU)p-)#Z7$bPLcA*`t@-?s?Q1k z>Q6Xk+zWukIZ>~7Mh_hr{U=8y|IA3#n{&Y$M3fle%z#32DI@ObDBRlz28ohk0_n!& z%+RG08t^a&Zp?+}N8s*^C`up!m{27k-lV|Q-CT-UUjD*IpNhVTCy=9Y7zB8SVf63x zb?d+TQ)2+X@}9r_)RPyVdEw6<-Q50Pmpi+sq_jO)XmrwQH5GJXAYFl-CdjW};m*ZN zvj4S{82r%tvHrpPWa-VTNLN#!qnIB6mKOxM)?Ei_1+F=!A%R3dsOs;K31-ng?;{2@WO0U3P~+YkQz^Z(V=PktRZ zI$V;Y!~0}9Ba)OzV?h!@;sm4?Io!weD_`d=)4}==-Y4DD14OB!EuAl+DSgMy)W!j% zt`9SA2pae>4d<<*l#|rhm?*{uhg$^>cMaC=N^t7FST@eO!h~~olqkw};pb%KRsP>% z;nzCcH7O~cLtI~3Acq2N9b;CdJGt){`WySG7>bK2r$Q&L86u*q%&$83N4yD`J2x83 zI&q00tUJHcgEdt$7zibmm$;^gBA`_0-dYg>SkqW3uI8{pvEq%605Jfq_mpaRJ1rL5 zKqwEBAcmIT(WF!su(+To3p)1gh+}E6Cn#^M47H4 zeM4(zKTAB4U<9TVDQ5z0iT=9A>RFA|4X3!9&wwJQz=}Y5(;PPR8$}21C(A(EvAFTI zZQlCAOSG3>5Zt{2WU1>&Oy+{kn_PP6LB9JvZzXN zWy4e%v@Z;eW|0VjC!C>}SOF$S!lOL{Qwns_bg}E!wbZK-MZ}qnm4dWGWIaMDC;jk7 zg>`i$MxbIK9SROMOXN3h0h2vqW8i2yN(pF)a;_jGOL=B^a{ZY-0C@bxw!7E4a~9_u z2B4O@^GFXanj2eZFrQ`UbOc(v#I;yMjtY*RxrO4LE6DCns8R=XhSJc`{{uc7J;{iq z<8HPsl`~j_z!KhN+9ffH0(45uCl=!ai+m1AQtty(cxIKfL4aCj9L~kXhCl!-h>*uj znc4WB`QWxz^5#N9+c6BXN(5t2|FU6FvdSKz0#`EN=+NTzJ;)bsfq&^P!2r(W+QOwt z*#I4%0UVQZ|EVE~9)u+#ln_JrS1I9H>;1D06qI%J_L2G+~0ov!LD=$IwERI_?9e+JIimOdDZBB13Df z7D>43OF8kH1jE z$Bi}^w5({^giv{4rss`BmAJ4DM{{(_0t@S(yQ%|`#R{ycJlH&LDgxUUV>+p{5K7#e zyVT^0UoDOm1mzo76jSZ(UPfEOG5@N@vREPrga{@KrJ?rJ9T{ODW9RYSP>3GOu{p{% z^9$aBpv4djz`aTet>}FOGY6_}->|rK$;$4PoaNL&cZj&J5T!vHsSP%qN@7gHSPN6S z9WF{Wxg4dIC1<0_&%MUSE*sfH4jq6hj{DD|E6g zn2Z2YMR= z!%U{jC<~=j;v+S*YZIu1$TA|1A=4w|FTW;-&s@O4>tjsJ64iPKgOdt_4NBTqBDAEn zkWxIIoq!?5xPsIgzc<;cTfz3hTIgK>eFbNl60Hu=KmhSuM-I^ukn{wDyF`Yk71#$4 z4@zwQ_9fo>mtW?=Z~rdMYp+t07+6^YmX-u*WH6Z#lZjR|WjstSq^nE+kzO5sX7l>N z4qklx&O-Qy1m3RxxBJPzZwDXPd`(PY7{%Xj$0Ij)bmUqxxh12ROd^UcVXt0w3lDG)|&F2nmCJSEiv6UINU6;ze|Za zik&W*rH=aUyVGpT2Y8GPgRsLGDjVt?rp5@Deu}U%F$P;*auxnisF?y`tYbeJ>&&_h z6iOjVA&d~ERkSWooZb~2?(9cWk&1*?gjPUAFp5~w%b^v8+FRR0(EzYYIdzJFC92Q% z(j*~D>#oUKz(T<^eDt7GR#UAR-ouu!%R;f(N|37VpK8>r3va<1vu@nf7HIMa`h&sY zQQ^3@Ow}whF8o5s5^v}*p}NHXU9~JKv{+6IZc76gG#r#h^2nfGZ2%O;3DD^QiEA8k z^NR55izPN+Eim0HiHMAsBgB10MhsfXjoSuQBkK_Z6e9yOw}?B$iH9<5+!LWURImk@ zPYF}FpI17#9o}IVxjPsSPXL1z%h$hrgjkP~fT-7A5faz74*#4aACA>$4gsBwLHeIYk?F$EZd-7I}l3+kB?Z)TdqD^TH_<6Fi0(Fs3)^(=0i2mS#b`j37vxZOt^d9 zVzgaC$3&F2ST)kbkSe;=G+|jf1Fq$hF?vfH5dZ8DFeN>UDeD8BCBd~P_i^;~XJGbs zfz>s5${J9Vz<5FxL!j`B`k}XcY4XJXkONN~tGV#R=Yc0ag#HijsdP9P%yx}NK}d_3t)O^X{~tHfin)HD8Dp# z>lCdWOO8a8MCkUtVY~%lj)6d|!r*F;9MuN%+N(QTKz2Px8LoBJ`ndowa)AWH;5*)i z$EFy{pIujg;^a4z60$q9*cu!D$Z4RPP;yen)~)IEx714@B@yRo*CFNed8T$>yNUd8 z1a)SeVti*oxeWo6eN1*hr82HPvI=wnI|t3&FQpzqr%Q=~wXRr*5~9DNpi+%87Zejq zV=9?Y#V+#unhG4J#XVmYyQHULZZX-lJlYmaCK{a~(HRhlWB_8Tg1Slwm^xlb~|d{Ti`UdTdGRgg@;u&r#yxUjx7s1$1nHXDFL zwKuKXIjQlsV%or?-LLn}1|R`8;Tdd32xEZUOVa0tn3v9Hs4!q*-T9&@QJ*!8fJR(i zi1l7-jUFvPT1f~MMHH-cn3<)55z+{eTfyA8K*pj3O9Pe`C>`$Tnoj{Gmy5HqT2omG zxriWnzP^!E!QR!Z@2xrA0I3t3glzp>dS>(dufh?n*~5H z8)`%up(BMlqq=^qO8imP&D~N^%u0|%+KVt;PtfgZPy;#vdaJwHBnsd@9)6q3UL(?qvT>a^~bezWjGTxO*oN?Tym27vkgK_ea3! zCWsB72Sn^mH(s9bXOBwtp_xRHCZ#Zz#t8d~;*Xux`0Mv8eC&+E!+qD07?Ic$a!;TR zNsfe=lZYdQhho7GE`je_C6f;E@`x1BWC}J?KxrhRQfI6ZwYI^h``<=!@&0qb=g$Ej z|M(ri=)3ZI;^*z`rBBR?@Bj1r-L!v&xqTIy6VW&;vq^$d6qFJ~kw9w&9SNL^CZRzy zpQGH~MSkHbC*Qt`@#Q0okH{kGK*fsLl0t6{=q&@ufTA-%#Wk@2N{kbe8NVC4T|>k` ztZ|#FHGmZ2^=oaG0SW4el5{A&6|lDoc9)5yCm0)xt!KBm`I(oo`&+-qqbFaG*|nQA zMNa8=oF+F)fwBN+Bchn;q~Ez354xWO?Ef`Ad-kh`4?eb!|KZU)o<)B+nMRoXZ}ukX z_2~|QO)5Sjh3QIO(5doWdrP7SNFrc9f!!a&%nY!!B%Sp{lvaoonWTz3R#X&PYiUXm zG145)Dww5mCH1ykb^WG56%&>B%WPseI}#~!cLGU!M3gpC11mv~G0-(ESR_~0E+S!P z>sTI&Q_Xv8AqHM1tzT(qEiFv8KEc}H#A2l)s5C7zFFvZ`pOyCt66Zr&v3u&D^@f{O zo*KQf%_&fU#vHlzy_-{5?cGxyszZOCCc2)2cKS`r%cEs>-S!!3BQ7}Z0aJlXt=4eM zyC8T{s$mv!0pM!xyhtl_J)}T!0gMW$Qg~5pkC+r5Jw}ZgFP<2 z`|bRhKld(t-=ilmf|6UF{t|hx6isY4z1c3#Xt$qyeP8%1FI&tFu#_qEV#k=PN1mq! zutDO);|Vo5P#YUJ#a+wny3TJY}93%{a?tZEmk_-VI=e+WpuVVJf zYY>|Q%gYY97Xq^>I2}p6wz|n~_g^2~{gG$z#K*rwadFPA>mPhsmio){(W|e#&zAC_ z8@P$8Z?Xt+u*dF0XVJO)gk)V}cIX*U-s4rN8l>|QAQ7brYlQQOpqvR*q@2S$0J_pX z@CPHsikEQ_{bdF1m@zcc6phE&8zGA%DDICj2^fSNFhHmM@Dm<~nHCedZ3QA$entVi zMTKitorYIsjozuD&W8n)!hia-%1O{0M}!3xG}(`7q0T!#VzL- zHR!n5Dr?=~>t&Fm8Ol+~LJhETUm|g&07II&qqbCI-ZwZ{v7?k0B$+}KyM-*Dfo5({ zT{o3usaFwOwZ4osAPtqc+h=m&?7(2WYcQKpNTSmNlMbjO_Z9tq+&n9`dN1uwLJ+nx zn$*kN8PW$oFSoH8!|lMtDm{zG8AOYFMop1rYwS@Pf1b81vT9z`os-*uMXvqiou1g> zp2zlSEUtDneMY2xmERAukx>`mKded2xG zj){4B4D@LjyljMuRqS)HZ-vl)^D(!1|LUuW*SfR5`p{>nW|1+D!K?#GB5-nOxpmp_ z`l~s1Zx$>Hmm(PV6m-H`wkGw{tSCi76}bsz3qe_0=txO-DPnI)GwC?3bkqg9YhX68 z*!so}w|@Icj-P!Ah6b{>?l$GhAzceF84=Sdskj#p2LD~U)c?ffXMgS@9*4L_?w!{g z0W3QAw}BV8pw6BGI$sAaE@N;2`?1|z{pi%_v!y7^t)MjEgG0r?aKFM&o~Asyq|k}M zBLIg6m{@QQumG6@EC9|092?%FCChTl?EAi#M0Hc)Ok91d zCnKg4*y&8>moIXD=_W?6+(df!b$0JRh0aEb?DP_{jRCSj7w9C22MTeY5F=s>OInCC z$97C3>vd&T!tBYa3q(T08@f5uTPlc(1S$a{iWHL)v+XHoyCd1VzJ?3MKSC&}scX>&wn3xwXK>PM zuBMeLB_VC6azUwq9FgGgCX3vI_Vu-VUT$~xmPOzVZT62-Gqg|4i*Loy#9FYJu*PE| zFR5)OZrkg32%H>?KC5IT3r{k{5-AJj#?pZ1mDfTI!i8)iLF0iy=LZ4+GM@;>`vwP_ zmIpf)lLITX20A6;lwhP9)XK6EOR%9^iFH0+CbtknNxB-t^$5cg5e91tiaI}t4$O2L*Sa@#@I{Y2k z6^%Gm6|1H-|0?N7l0ldNs0d9o}mx5y}O{<`mV|t|E_nLoetglfU z>9^l192afYWJ{t8wplmLxMS^6@4zf-$&OzQ53BSYQW4yikacw zbz(XOrUwQqr<8P8BP5A1$p~Hfs#Qt8-(lluZeQ>`!aeC&fpz<}AjEfDpidKcaePdL zZ)+%N0 z;bvN`iLJ{HOyR|Ekz7E|s(&OQVzCe&(z?YW!JfZ(tpiSY}sqMS{^wKb7W#~%TVTX*vUEM|a|7npT^t8>@t zFC6^H+pgkcG`F+qyYu?vSa!L+>KuT-Iso_H1G@q!J)RA>XZ&GfdAAj(ww#uNdwUAs ze?sA>&H!gpz$jo(fRP34!m=1nPb0(>j-|L9Q6B6I{=#X<)&#sc1t(DGCt^#BbZ+?O z9h#4%vHsFyZ^Ptq;tj=gi~c}{fln-X>F;m{!0(*>kH7LoEz=L&c>4MOuozE%2$T7; zq`erL%JH~kmjv6_K(FVtB%`UA-D{j&zaW#ZYNC^Zcin4~`|d{fzEd3Bzr?|*4mvB5 zq&1zsc2B~$@xeyAXAy87n8iRapIJr8v+pivR_vKxT zU%LUh^dc}H0a+qg9SYKzh+{x$i&8A+Gew0QksK=GwT*W^@(=naR=@PhfBC^{cUFc! zDxeX7b1e7I$(4t{=h}a9>DNDNSelQOM@Oe@5&@ACM~zWHe+Xzrb98{oSDs`s2hM!> z0qNbdA|)bf0#O=C(p88v#pwvhM+Hr8-2jXgRG32KtM=N5#W!%~0xJzNMOhgG#6hM&+r1ZfP&EcwMnN&u=;ygAgkKpDEvTpfsuD@@Ju-Fw=^z0u2QogTZtmAr?^;1 zw@pbGWP9`mlL!yRi(pb<2@uGDoKNNA;Zu$^MBVk-R$<>tC{n?p*LUUd|RZ67GkYvf?(pPtJ{nwwz__JRmR#ISf8OT!ihEW3SA0a9X&OCe;fAgdF>9zY5k{I&eza7^)kd5(o)%yuffy@%aZm7>ivq+7{RBvqi&(BfBeZplEw`rI0hHA< zH38t+HnnxnTeS-`g@xjzs$4>|U0I0r_Wy0AHE#$7Q6^xl_{PfUz~X4vK#WC{#-Oqu zt5cqwSJjTTmM(|@I@RbexnkWK2N(q2I1n!#P5Mq#zJFx`d-Wn91<)D#YEA@2Zeel- zRZg;%;csTA@4GPi|7Bf2CpeD>kK*qe>|#C}nfZJPRt&7wAYF>95{xeGa(ZJA$@g@r zA^;^TK;7RX@koRc?>zYe@au++73FqYZ#&*0T$$hZ9TyyB#&gD4!T^Xh zxU{O!>l3$9!NH9Z#n`}FB2E>cDO3clRleikR!ZyAL8&28pNKkD82;7b6KoQ0T5Uyeq(J$Uo2i`kLzb19&it)*z#rAc}TbB#W_pJ~>)F|8ER0yhDbZg|&>1L3+HEjO36@R(gQ1b#SN3u76EAW0#V^402ZHr= zNVf~v(!Hs*uCqCwQ&F~}LG&AM`pBRD&tE+E$hh$=x+6z>!_-{f41X^J9{~hw(B}{I z%E8<`WXOS5kWxS^#Ctc$KXn>>OBb?P68i?s{ghFv_P=*>Vre9l+W-GtfPDdsqI~bN z$QK8~Z|wuu=VCLhYz%NF_GDh__nlV7sk3L}U4YX&fYEpNC3yT}rdj?!&Z|own4dlP z>Q{AV@M?E``A4mhzdqjFe!Cf!DTF|r5WSA8kgHQ_uS0Y*Hv&ovj3x_9VniWJ1&R04NIDh+ zMU2KQzV-xeO?J5ULvP2%_uY;8Orh8@E=g&SBIy9rj>7DyM1EAl&nNu;$`xd)`uzo#NL$jz z;2BicAvlf;G!ms&hr7i}s=&&?6kIFkdl02AxJUrxQ()_+VDD;)@n(s9Qqn4gs23s1 zv+zpbAVb7H(d^Mp8kNk`lmF#@^aJ`{@iA?O4o57Ewnzc2R|7sfJ=# zJJ(tV7=c8mAEA@Ep;_2Kp2s#*LUn=J{senpzX?0t2m0O=t296o3G!UAv_w3Z&Tno% zx!Zeq^WWxh+P(LeU!C8$dEQJ$??Y(}6f9JvsFad!AH}T$Qv+5-~n$Sj2mcZeTLE0sv$OQ&XXA93C$3m3QQksPW zs)ZN^z~G|qRru(`b$fCBWc&Rj1PubYZq>#Wy76ZLq!F;vBd%;4Jh>a;&Fc#9S+=-Q zXcWHK*L1&Ht-)ghY%0N@d2k7nci)R=&%6ot+AeU9c4J^(0wv(3X%tg1|HfBwA)cf7 z(+}gmA6x-C#NkaMpZM{tYZ%3Sc(ZeQ`Hk*qCy||4?!7j}(KVv89%1R81SjuS=nNcF*5q!@EDFauqIKhDVGpU> zh0>x1sPfn~~T5iM2#X^%O^!ID}UG=z9Y>#7qt)Y>B z+mfe|Z6jno*B(I9CNv{#z~~0}q6c?dY-VwSfLi7ofOhrIxb?HKsR(_6&}zyw&uD>F zRr^QTHek5u4}0EC;S% z1#aGC{_;zhW-*v(kw}Zy5tW8egNzBKbtqAxb10!Ru%%54i~K^@-KqPM#_sUR(TAkVUqHuA$(x2`&qN^PJj-zhc7cTbxJzqAz$ zbqBV6=w=&rYT~ln+h?6rCV{M{PTQ?KmP7)e$ulTGx@)a=0xR?HY`>OUw=}XA@sE_q4PEW*1%;$q1~h zRr&5hO;9Z5<_)O3PT047@NM|%cbs4xMfT7VbC9vF{IpyFQGrGlkS>7}3fQxd-@PSx zehV08iv8H#JQL(~)_0r>uBg(8J&7Q}C@`^C&0G`M%D1APrwym7N}3CTLW7ofh)|iNu+V6{6J7vPrreJzxAb`Y)hYx(VQ|&8;rYLfNwIJ%;iO#;Z2YcChvf#lH=EG+tf( zz1fXhZ-a{7k0N)GK}xxKH|z=ywlTeWox8UlMLN{TXM`F1d#R3f`F)-`7$=l;5TV>F z#g-OGYI2TL6d&=BAT^*OCG&~F!KPvqE3BS^=(+b!@eI0vW!V}|QYBkfVv!cAP?2kn zg}SQ+X$yU-l3lNcic z$E!s5njzFuhPS~#-|>Xl${namC{%40;^KSQfPt&f+W&2UNwrul;U3XS%Wxc3R_rF? zIQSd9Z`z{#%2yH-RV-W6P)K^5YyAQgJ!!u(iqP`rBo1KHIVUVr1r(xN|9S96Yb z7r2IVa{UaR&PFd@IVuiEuZftmO7z=GV@^qtccHCo>(#5Vi@!yd&}EkqC<|gf2WB&1 zK8Kl1U=IEItNiJ%I<!QQEd9 zm8vT5YlC+k5k+n>-Yb!IiNTtt)(+$d+W?2!*Y( zxbE;a>zoRpYKH3@fFy#f^~oD!;HgdE<-4_<9atQ=IoA4qmBwytff+^aK0Dw?|I|Z# z;gfe`c5M%GFabAKfWmr;p90bZSnk5?9m>)3uOiPiEFZzihgYS$8pA4JJ|e~9xU;u7 zIki|PtsSgt#F;{z0;6ps(~)5@HHZ>tc1_*p>IlQ~-Q{5D2v9Lyg6|Acj4XB!EJizm z(GD>@q0m{?=nS0iVA6qD3zQ|q6y9T}eb*Oxz|yjrY7CQwa-7U^>`mD6F=BA}a@#%b zHtfF^V-d%Fc@`JB+cc@#W7aM-f)?H^Ai&5X3-0*FU$by|%(txxE2uq{S|Cpa(kyyC zEfk%%Z60yqcofLEZ@U)r*g2*7m&L!6dQWE{4X4t8jv!IwBzV?1Z@I|Qs1et;IY1ZL7`9vBPdX*BWl|%{AUDD9Hfv>YAi@^p&6%%egw~5QY z{u1V|oEH>RaBW?jd7&@Stp%oIAfJP=z8bGAKQVad>_6w~iI>m+&4=c9Jd56_3?ra2 zz5e*0;qHMLF3ObRs7$o(1!RxA6_F_B4ibP3o4oSU|=CtZK;F z9_4Mz3Y(i?X&?oFNRZCv@;wr%Q~8nSFWv!+{y;_uaSp@_kMsKDADaO3i)YR~{fT%| z++&}E@o3;NZ4GUED%K^QRJXWrQGSdFhFU^xdE*aF@=Rz1}d2%iud#&xz=A> z{nhn*@A{qd|HZprxOr##|8axAgAIJNd+LFA|DCHBpDkry{dv2ycUtm1L0aVxX&}uk z*4K!`5z6!5vOCu{mHp9o$?^y9L;rLaQAeXZBF)%B5fUwFFjByg!F*IW&~F+4^#HK6LS`vY#;&nrT=Z{E1_-n^ zbs}%Yaba+*sTyjPKTb_YS3xf^U`ExZ%2Hzn5_Z`_j|36lr>@eR)Iw*m#Vdl(>u%I~ zB0)-wXDdl_Kvjx0w$K14Xki+HjQu;s`3vAaM*)0?sCa zy_sIz|m9Qg2YY0Z9>S&4kuJEnKj~H7yjY}X$P~H(sEC?w8JF~E*A!DMy9%J=X zjOA5QE5Bh+9k|)Vb_HGHpqL>X5jE>lx_yC_92dTF3pYRg49b_kCRiF0%gYK`<_wbj zz`=M1ySXFXjdlFwpL_@(`M$H51K1K#Icc?W2MQY$0Rl*A!GQw$6dcWj|NJ85)iKdY zz@-k5dsImgVk8VIlfWIAjVZP3ThvzMQbm?86k}46cU1lSxM+kLQu^v&wFncHsuit< z-6Sj~O*8)4fRC(LjngBG@m>M3f+%j538}5wn_&)6thF$6i?pZE=_^T7z!a5XU{lQ5 z3d@Rs&Wfm=y=pbMc+O5&|&w7 z|Htb(imuPMx9<@fD;Vq6?<55jFy9(;@0l%}c{D?mL{Krs+7@WSMPQZ$`b!Gq9ip5P z)>4!TGnM?q70;^DLXs$^Mkf2j_(-ESaIG-gu)^Afcmv3A5u>SOKot{@;Y{&srK;T` zjuq~TO;V<`ngxq&6A8SI1Wg97ZJ04u08Q{jUtux@&L0xLc1`#<9~7tF7NE3X%w~=C zQUUH+k(C(o!*_S^D<643#{cq57;Wx@!zD)oj%kt7^jdZ0eVa1V3=Tc$zc0hfy0|Q@*`oCMTjzpQVZWrm4rLE)ZDuk3y%#fD`giU3d3iJ-m+rHY6mxF= z-gUh43(ugu_yREK0vqchSqGTs4sn72WiB{6B)grRcy0N!@A%U{`rl9X4qtik+@txO z#`+t$AOCUig})76e;VrU6VQ7ZS6i zSi;N=Y+;2FMQOS$Vn?SCSZ^g;8B$k)vH~C`lObSA!cGNym*+UT1@zWqtelFlc3Pvi zx(bP8@=w>Y?AWVAi! z{Lr8*1fn$Jegu`On&3$atns=SX>@cTA@1Nwu0a(E$_Oe8Yw1o37D!`@{)Rwx74~n<@!CIs9^)r}Ps*cR!P&c<=Un2=8mt0h z1#>VF?CeR$&eiw*ji1H)-g~d~H1K>0Oh8u%S3)Zjn6z3!QNpfdU{Qjpj{;H38n@$m49%D{Ub7zEbijP5X^HIO2Qb2_gs%{nXy z%7QV-Ok@1=4#zKSyD#7Gx-`2gp<*@`HS8K>+2NHJ-g4`It}kHs{!>@%c>395Jo$^p za_A%z;(-6OC*`z|=}YH1o1BJCV_^!Bi3s6Q`~{+e^Kd1SzD7ETFdG#xQv=oW3zB6> zZK%S#Bua>RVKJXuPDg^l5@9ufvL63+*qZlZlTfOI$|_~y844S_+Hi5PLD&GB)VG#5 zSj)?}?I|OH^+AUJ{4YO(|Mr#FAO?T9ZWq?C%15w+s$%gaic#!X@74Iy z)3jGE0>f3HHzcA&h|(g}0wa(~PK?GnSsK`=-}%4y&aVIS$=>1R1}wVsdcy)n=V5l|M5a1Mp{WHWqEZfYF3CO29S~{ea)f6hOz5eimK+5 zMT4$Od;RpF5eABQOJZRhET9#E0#c4)$Cj7^+r_yLoqof35J!LbFOh)5^A=dk8C%Llz@Tpg>|7Y)* z%<1fKKV1#?VS&p`Roi10d#xr^h*+v2-p`pn#%0rHL>F- zX!hTU)eqcbv(tSQbrdI?C5%$&82Ecjlbk>WtGxHZ!r@lJ zyStcJB5V~_0$C`o0@G1(Ymj(x1E3X~uEm@)1=2Vjb4R;Cs>GU==VaEy^1OaY88zaC{&* z+9?4DbWBlEU3#?YE6)$4HGnBavO&b|P$5n!W$B_O>Thnnrw*NEVcK_YI{9l?P+q@jpq;l<^TK;3B4R&vD5iy80nv6ZibFNBo<;F$T-efUcVx{ zH>T1*oiXYvmQ(QxSQV_ptU(tFL`PtEs5w8fGTO``r2-?@vA1yKW>OkYbLT~eVs3G8 zGsp63BHoaerU0mF%$^G})y8ke?*yu0dendp8{tU>po?1ca|`%EwKL5^As*P`)ZDfv zejH&q9>eXz3efKe<_5TaBzXKP_)}*r)>2~IvNDseJ!}+!QYq||MMu zpW?+|eNtq*53CNIX-ny=YHA>h0o8{o*J!qOxc}*Ih}kbueC*v=KAmDE1`aj_`Bb|t zK&!xU+j%*e0+?Gsr$CyL8)r3o{RI147Nb4Oa%REOKqVBVT`Cj;<1W@VYfWZmWgJYO zTE!$1DFn6Fgr9T3ri>^@sb8(f|_2cF9Eky!kA8} z8g!)dCQ?cuilY3cpcE0sgie$wknik>tgiz7 zp_37ND|-Tz$q_iup|fZ!>Sq79w443f#@%na0~XzRwdUl;FG23xfW1E3uu+j0+HxvH z34yf`&Mox3Aad*b<=$tp@@2R6JZ!LQB|&nibjOCCO)*26`&i z%Q{jkpk6Unmc^KuLakKfn)$}Cc7SmtZdaCR3WOz;GEgX#s40LwE7%s1T|y3`R8O+y z-i>Uz_wCM7@9Eb&(e>H650^&(uHTvFZ`7Ae{`p644F1aRd^+7&5}VHt^Mlb3l(YGR z00mj%90*CEn-D4zdvt{Pk88YK{0WPFx_>r(|Jl1Qv+KX zTI*6sMXXy7mGa%XfWyt&N*YRuhys)*m8RIaU_Q2(O)L)fEk?Tv!&Qy`GMV-X#tPI# ztRYf3){+&r%E6HG&9?P)2$)o?p$4>FU!ylslt{o z6?9+#U5&@e?7FLfGckB=N_=Gt_{OH79}}HeNK&d8W##BeB%S3-QM&g~UK{CByIB{i z(1D4!MT&LQEXLM>8BvX( zdQS~$;<72UBCwVsBzh|mvaW(s4wUxgSXCZMg-*vQm@H97w`RyMT!S3$5lc%Bd^ge% z%poNCWVW&P zTvB{%5Awm2;K>NQS-69J#6W(kfVm}hOToz$_!IBDhu3cH%d6kG$b4s4B#i{igCK&- zgGOmgSziY%G2hu^@uhFTW(xA52Qa*U6}=OR*cB3Eblv;X9T zMwDr!J%ht-!`ZlmnF}NW=)zQdzI*HbHP-VI=tVUUX;5N{Ern)gIiDI#XOPjpV6+p- zaE<6KD`W#A$%rWNip)|dhA4^}6cPy$7gpitXf>1;_rKP7vfdJqK@!5EU*V#m^PunlIH1+ss9aNQ8-L_8_%Z}u!qo8J8Zx;TROv}y2?Zw zVQ_)8b}AeTglo$H8)-fQHg)xx%Co@yUagvRG8Q>7pBPRLMUHkYNBb7@k%7sLBl5OnYs~&xB8S%H8fK8Xgu_`si z+f7jU=8LtUSSHlWIe9z0l%#zQ5@lB}!CQj{2@#EN$JK~-{p1BHT-o&aJPsd3cJZg%_K7t<_z zmKk4q>22S4rT7@l^v-m?^IAN30J!!4;uydu9{At>?)9DX7j}x9fS21riv1h2_XV03(I_BWcNzR{cB|0(->@M3{OPTUsdSz zTpX*l6jM4QMKL~kz!x974Qw<#C$>*pq4^H01f>f04|Aa#IfH6rN-dU6T?|p(W`n4x z8$QJZ#$Thfp_KaI>NgZLG31rOkEr8Ppo&mX>7c7FhOk}C5#cG>!P08sFe+goUnzQ2 z!z7V~qLQssDC?V4=dRS185&7QRncih=m?A=ND@O-43vdnIu?%hiTzs^d)IU1Q&-r+ z2y{Z|l!!Z8RIH#B8~{*yK9P?rb~Fh#fEa661P3_g;#ekyAW9UvL#>uiC9<+kBq_ui zVLqetDPqIpv8^U>P#E~SFeZ>K3A@Wi)O?IfpWTt&U;hg7i?0L2m^gD9P^kkNG^l2V zQbqaBW`YYhr1!x6{NRV)#=r5Adr(qj%Lr#eL<}Skl`KPnMu3!%RSgUk@c1V9*_#4e zLe~2fRo@fuKSO7uR~T?K7v$E7CL>2&WgICa+DE?H`Z+T26eC;J5=5-8ryH7`gjk`V z4Q#S4!*CKIbxe*aA;23{ll=d%_vgWuT=#h(_=<`T)3!R~*4S;k-R_v_36GxyKPGrZOO7$QW6DHTqKep z36j{iLhV&=zx&P1bH4fGoXnfI09&56HjD2>AW+Mz_wLP`dCu?m{l3KzvWAccNBhEf zKjhISSppi52A`yvJV=s|^YRjG%bLNaL6TAM0UR^U6g2?eNrqzDrIK!ms~_6I?D8!@ zi{RYfWK1}Lt+aHL$)~b=@Bj3F)E0i>YfJxU{?TE!*1zax#c5xZ8*o0j@}!BF8DP3F z)6ZXFasMW=JKG>d`5?y(VmpHsb6pRX^APIRT_ciq0$+F-7i~OhmzO$tJb;u5sT3$? z(%yB?PLJwuQe^`Aay8kJ4Zjx>o(*1DEw`=c`KmD(Ump^R6>+?c8kq_eY(zEY1NC0G z1gnL$Qimwfsr@bS~+ee2-;U0}bc)q2bAHeQ{a)J1_0Z?v`l z$lZMZx4u)C|Jesn9*ux@n`&iIrxzH6AxYN&r%nLfA^gD(_J84nnD5VZ=3Cy1JHC92 z%!KKVxEK*~9=;Tk#Dv!#8xZe-d7|A&* zucH7QY1IqRum*zJ0E|}BK$q-7-fpZOVT9$YZc4aUQu6%jd9UVO?Q7tV&Di_KkcG7) z`_i1fL8U_^->g~)aaCDe(~-;);Nfkc_euy@yxE(Ctnkv}5JgR2p(e0WT|Xa~%nfhE z>biQq&KQhK(xn>DiJ%obFc=$|zYMJ3P&Nuh4ot?t;Vs9bn<16d=K-frGNCmvGMS0b zGa-4_?(qbegeeBm^sr-)<;Oqp&I2+Co|%A24QxUf6CMaJ&{~hI4|UHHS;zC*CvWlQ zuY3X14}Ma<<)t$xg|z`8!x(8Q$O(A?KipT=>D)*<{hynD_=o@R`A3hthvRj7J0*V4 z`(PeA30@n(-qS|;%z?axw}yr^GVMg0M75W**7MA8$H=9Ro)HiD5|8i&Bmsef-89N3Fd{HvM!b zPtrwRWI}G>Ev-t>0<&38WC`I7k-Gqw1E6(6mI9c8zU2lPMA z$Hr{O>-KxVk5e*DQJ)DF!DE`x{id52Y3iKC@A_=He8+ zNyM?MCb}yRNJW#c3QP~-_QI-~ELWaDOZvO24ZUv4cpF%RRibs%n*ms18of5aOskW= zy0dD0uO)5bwZo7GDD;}Y{14b56d6QdgIOcoCc9fQLJa?1L;rZK6wQfgL#R}i0j(^2 z%f$jXIs%UNgyGE`(}NPlSa5|P3)q%H+A}c8s*9?;;JmalW!92bR+GL=Z6t^y_i*!| z>`B@Q)=wwcIB7B12ua!3wQmLRn#7zy5+aGL2W;LW7%SZR{0J}p%jYor z*oWY-0PffTwl)z&?eWEwqL%>^3r@z+o@Y{jTGx`;)wnM%=GqBk&TwWCdp!>WmW&5AHIZHZl?DCa!<=u?>AI)t(o(CPs5 zMFdhkNT_}4^bxEbUis^H%>QF|@%G^CINfN!Z@zQ51?o#tHC%8|ma=Sh;GTaOi|cox zeeNWZzJ(hG4PQ+VGxd84y>evNv^p036B&-KPT_r2jIL~ASV=xJ31Bi{w3Fj#D`VD4 z)XJb)xdef4Yepk{+vH9(i6N^6G#dL{6Vx$S-G7?TdDRk|h%ETm*~C^n;u>$?f6@tc#+pH z-jH_pfb*x8hl^!k_2$7u3~K|R(*_RqG5f?ParNdd##g@*_x@*RF}O4J>5k{*rl-Sg zL36iFEAmBMVF9epZdSeC8rap+ z@2~j}{c^ALjS{1NRvI6buqu0NNETPFXT!(qHOFGzQ8uqV8vz%7Stq3yNLoPJf)X2^ zllcM|9tgu7kE81)XNL|hk9z);X!ioBLmO1!V!&t6jDxB*)rz34xPt8q@ZQ%9Mpp8( zI8rB#qyRu=l=|n$)(O%T3qAdBUg6{ezk~ec%W#8~IK2&IttjSmVq&GqjF=1!in)@L zCwFAb-p`rj@RqXZhjPe{A<8#1Mnb+4%&cCl-rU=2Jj>)W8l3*nG2W3!u2`u z(16(Up;oB?QKO}^;!2+o|C~0I_LWJtH9$&YR*Ki=WKnuG0C;Z=ik5*jEhLZs(s4@K zfAXLafbt4Z0+<~@#DyOvF8qi9>i1>_X{FWtyn#ms>R*`-3LB`S1!H*TaVp~^~cU*`+kG@ zAuu}-=3~Ll4QLHo9WrZM6+K`vby&~`nnkZ~(CR>0TWlLfPk5kWAbHnF8W9*PGBp?)RS{Wd zn>3h5&1P6l;0cjOZC)>s{NEK&-W)qN4~^>294Na21ZkzNH!GDhZ)f~eOad+ItkvYQ zSYS3(KoVAp^xyv>2mE3hCH^b# z-oRh{tKWq8{loY3nP;v5ynAK)Jz}tJG2C^S4n2ygXE~>AOGuI+ z=LIM)HJ$OuMqrk&w8JrRO$lkO0kim!IiOgGN7qVBcMBYJ8Dzbi7QIc&&cLAE4fkRg z0)?}=C?W5HtUQAG%Ui`@vQ8Z0>sBvFc_nu!3!Z1tVORQMNSTX5t;zwZ^)kqVqnXVN>%PbH0 zO4;c7+J}#f$(I&NT40)lXI%t+2~3WJ*+`fU9j8YQ`P5@E7m5XBAS8XtB(}be0RvJ! z)MXbM@;}Mb1XxqssJ9+B4(qunTIQ%+3{zLo6ox<^YUBKu^pbLP% z_7kx95}>yOgI;@nlq_x*UA85T(vKbGn!lt1XhY!t+k4Ym@zScxbwBl#LhNNs| zRK6@6mm@~J9>u$oQPc%u1Bh9vdBxl4?5Zi}6}urA4Rgt^s9h)cT6tNG;@mdz)Y9l$ zw@v3)C#7n5A~d|8nz7ty0%?_JLsev3$e3s>ZbCt~Ono5oIaJKNin%bGcuq&c?9gF4 z_HYXqIJX3l8rT+LGQwmgG>E=-&sJUWlB*eaq*j`Xz$Aey6r>UWk~Y=pS`4;R^foOz z{UC940$dp+6-$CejA-FfVy8xmnBp zz}AD03S51yQO6QQy-lZg+hAU=3!|=pu(y3}6%^#-X=w-`X+hqHMrOQM!j(SwS(&QK z)zV!{4FFL@Svb&!Mx?iHmPu?8w5VQ7wLj1hX%8yLa~(W!lWuoM>U4o_mvChq4Z7-! zr?%VvPlkiiGhF!F>5W`19v|GZ?KBlkkp?Bj5gR>`L zQo!fo4X|>Et^9l9p5)2^$hHPRXU%eUD7iu~iGuFK*L6qCDhR(f7PKibJ1RLkpw>?r z*fip14*#AHxAvfKCY?#EpuFnDHPrFw^=`C`0Ksc5S#Ad~(TH?3%-<%oSWdm}9)N2egtv zsjLi$DwFgwSO_C+6B{WsnxeRI4Lct&NZgqE>buZ;<0lW>qpMNz0;4&|G zMP8|uSx)0%WzCLV1*Dq;k>=Lblr1g|z;t{5_3f!=wPd6LBr#g!tPEZnBD>cxrEUw1 zXqvgdUJ0`D^8~`yK@}^nHOeow0>)PWeT4y5wN8+m(VDnTTELf3J`v^%X*Tqj9(qiM z9`mtO%tJ9{ENBvgBm+##1OPJBSIg@jvh7euoJm^p%NzZVs)9%~iBXbLtuEN^8?<`{ zW$xh$)d(?rVejf~0v@G~p1i`Hk35fq-+2z09SXex(CZ5=yS#eN3wZ&|X2$lCE7@BA zGwrR7Uq|8JcksUV9vycG$Lrs@eiVG_N5F?3fbs>D4Pb1B1t;!$o4h=ewj9lX21rxl z(#Y$DBQZa3*&{HIcfP&-d{kr5b{pZ+$LF*kWCgl06+VA}n3^tliL`XR6gw@Ny{qZQ z7gY-S7YSfQ;lgd!u*YE0@%lr%{ivsbF@E-E|Izv{wqNv<*0z95@K@$>~y4^YnXoaDlR|wBKE%Q%W&o!@5hO^ZsX*3hQq{Zv_s?z(mNvUd9=Gk zx1Ydo3iC;d$&tfs=(HFWEOP~LAr)*A#JsGtZyP05RYceT9+?DT=PX0AnwvY0#}1<# z4mP!D^%L~A5^S6@>Ti{XA(3zfo!rQi1X!U^pd8-5q>^*(Jmw)LZMj!Zqd@&_9H-yvY z19Is+pfYqyl{O)RI%yG3}B7@5zt?Bu%dGVffq6 zvMilPyA>waWtYwN4u z2mi2Q;xyiOINDFJc_QR^mul=-{C9wf2Dh7kF43b1fM~UsUolgU4S6H-?zV_@^IET@ zm6p5#I5my#Y5>AOnGM9C8x!CcUk1M8yusOZVJ(4fgyBOSo)8&-DgjOe9ssznM?Ll} zZ^v`{bA0ZfzF!)xQEQe+DL5ZWU1N#F2+nzUXJIX|))&$QxONfO|II!|*CsgkeQlh5 za}O*lOM_EEP^GLEt z>7}W-WT;fWCd90vG9@O&ioOR1220W=lD35u>|yeu({#V&bVu4TgzZ>#w^OX01U60p zgAE{Q$Du$G&*cJ=ivtrE_O_<%m5Lv&R#bGX7&^DBgn1k6T-^_qZkiEHih+Vl?eoIFgqA^#mFE_39|Gw$w$rFsldmzzhMLgM>T^Rh*h|%OVU|H1P2HVoK3l#n ztF)30VnCY+Hic|TS{vTKbHIEijP{_>uES`rj^n%GvBuStL zcHf}4X*D=W4%Vnv8)(PoSuvuxaESjt^z-m>LKa^KxjGD}dyghezH-YCuM{C(^P^mMQ~HS7iprm+Y3` zn+CE;z(8zF$4P9UvpXN`Toz+!G6Kej4wJnSi$h1ZQ1F=qi4-AeFSRnM6l50B;L@v- zf7RD1sa`fA!BnYAOVfoK9Sg}m`P9Qjpd)D;ter}+ea2#K)1cK3g=aYjau*tFQ#GT_ z1Usx6p9i*5yjKdUw^ed*M(CWjm=DG0fA%HZdjAv3UwW3l(+AJqDfBu42F({#j2wdt zAQ_W1xEhYe!V8yS?z%@`^(~L$Z~vLQ>AD$id16c;v5^%Qq&)Hjs|2E+fYV0U@}>Fd z>lQzMiI|T(&a4@=k`Na zA_|Y?*t^lh_}lGNSeve{b|%aFclkh6CK{?gKKX`+Ml)Ek0*knO?v!SrD}nK$$KlNa zlBJDo#j2AFCh)wCJtU|I9aMLapxd+XWn{+)O}Hbx1{d(X&K8j8-b^p2+gOmqgVQCstzcI$4KU4zV65S1AGO$?8J@T1H*0sKdj;m|vQH52>8lp7deB`lz zxx`>23I1ATxPPi^Nj5yqeGTX|*%aY>TL3<^w&ry*D(iURXk#9EIcBAjs`hJ-*G}V1 zLk>hllzF91CxcRv5LlMLdJ2>&usZ?%*O!66bRTu!1~4?x!qo=AwLMzf0;PZ}IhYFi zuD7hqfAzii{Kp^k{?ZK#lK^YoXrfjCsRfxt%1G&hT#Z001I}#&M`KKW_es3^!WA6+ z>38w`SD)3|ogEYtaC*tXEeJUVy@Fi@H!4P`_fS3u@&Zh=po$%=TTJij;_!Njqg}_@ zk;7sx(K^_aAyB~HhE7Ddv4*EiOx#m2P;-%~5+sWT?KM(J;2q?1pqx97ugx&M2HZ*w z(td*ei3A&G3^q<1wtIjfymLU2!RFxmx12g2~6!aOr>l9(epHZqpnb14hT|cpb0bmtF9^v!e^Y_3D{J{HnRt+p*TZM{wWir;{#B zLZ&H@rh-5@0%-?WPpRY(#ol!uesBtR`8syr`2fzm{XDkM_OZ5+VDG9}EI^kBDUdG# zo03UJtZiHM)(sX@VLD7OKJv&X4u0Y3V)bnj8{)DJ!|sYYQaBVOCMp}E;eoY;O+1y&=uH;~^b~0KCaDo0^M?tfaWUQ+j9M{`@71+eOnlsTlb{(`a z8O4}LT{n@D1jxH^c+DmV;L8-4Pd#Q6hjLV~SP1zdDzFrcK5W~-B+-+|5HP-;g~&IX z+RAW&OKvVI&z|6UVHnIWXN$UR6p$lXST)mn!$YLaP?zD?0@hH9)0Qs>?%-%y5XbJ_% z&|PXggm!lb+tYV{`&;SXz?4@gjbG) zwZ1`?247VZjS~-YXqbE6zXtsIH(I@Y3n&e+?|_*L4T|&22Fw#I5&le4ojBK=?7vQA zdH4+ZnhE)e!7ZEJPGq=wEdkQi1S_mcI^y@RDKOge81986sI+5X>=M*c6`fN>_EmUM zA-Ei9buD@WgRH$YHm_3><1^!fpAKwG=&utupBv)f>09)(BjD6IAxRhwtYRdTXgr=z zPi*{)oU_sI_g3w*)^oYT)99?tu^5Kz6`KIol7oRb-eYm)7KYEbv3uetx0dET{!ghNQ)9>n|O zcP;{N-T(&!;BE`Nv=r9VYz`B!Lry*Q!W4XCm-w1@oWl?Q;8)n6`hWae9Sx^IVu@}h z<|Ty^GLfTGG8~dnXmC>ttaqVlf&5^I!(aR$+$;BT<16pS)}Oi)YxfxxN5cHbqnHzP z(X5WIITBbUf|U!aEY`LyCPUB3fx~PRz(TihA%QAoFgdr&3+p3lzhrXW zX0W5Bjv|`U)3k$JNzOop;JvVzc$D*;(|v0H3eg^<=&sRp)`H(rXAl#}qBm1nMto7> ztn>{iXw{%-86Z(hrW@eT?e|`FPec%sy8XOn!%qpTKTof5FKU3FSWN=d3NpD`J5=}I z?Iz%Cnq8yeo3!*Js-BzL@1#1v7|v|ch9o8?OQ(TKjyf6xv$5ywP?(P#7ZZ@nD zxmrtRt)NpgCcY69pE$o70b8+@fd-p2S{TWD;{p;!B1jo+765)4f{8)aHON|I)&i4O z7zp~(2j4*l&{1O8H}HKfv#9Un_EP0Bean|It@yZzLpaS z9b27GC!OqH*tPD*iuJV@Ze4h6dfWsYum3Q9N0>%kxFCb4p{L#gcgGNRu?Dwg+RwFT z?)lP~N9K-aGRkyQ;HVHjcB{ZQpGa_LkL((7RBaBf_E%#x+poC1!DduIk3b8=N5;V8 zH>8V0sMi8ZIf8U;i%H-5s}}k~2c4sLKMs5HEzlQ>bNex1bi9t&ALNKBU){s-8Ja;!TGS%VpbwwcoYTYJsDC@J!Gf= zRKy`xExPhtx-SbR4P~EC!e5oShc7*fIZ#YICP!h&n`Ts}@7U^4tuE2(k!d@4KG-y* zdl-gdnMouEspjO<`^t?j6hz)vJxya8Z*Y6$nd*R$)q1o!AzxOCE9ca0RCL8?Xf2~& zc-zF1E3%J<`O&JhOl(MmDs$@U&rD;Q>lLEz%itjemy5+*SWJb*6v(F@`J5kv<*x{O)8k~>wt%!twFg4hhbB8C?tbAWuKo5! zjGp*{FdqZ`Hn6=Jx;O8D!i6_rmsg!uG9opZLHk3siV}~0%cJ;?Z+;MOdvFuGUN{oq zOmI0`iojwYEg&JVNudqk$_)7VSE;A>MDK~s4wX=_F?g_a!2YPfsgA|FP8)pdxxh%+ zbI@UAl9|W~N(|Jqz|4cwDBnzN1MRHXIwo3aye5Jt$~>B*@yg`XP_Oe$takZa1r@5G zyUM7R6m3em5*+W9m>!leMzBfPCc>vx8GJSQfWCIkmW1AVf_Be{25@EI>VQiRv+Aa> zsgMl_p9|w>E@1%DKrO%e(iNed0qwS6O~_MBjIeN`O+0M!>gIiS|JLMz2d4PPzrQ>6 zjn*6YZ1UvGW(}|Sn+Nv-O6rKDPDf~G%=eEl`tCf21Nzua z@t!r|J5K@ohT$1?sM&0+wq-y^1P+~e=2Rcw^^I@TM?d@^o_^wG%qCN?*P^@+y3rIe zN!v3^ycRR~#eyhHgCrx`sgPJ9$xXR?QwJZPnf!1J&Bxey#~sQ#9kpqJBhW7#f|)lV z8X1!CB1`}W!#M@`959igm$i)2Hqco!=&e~z4uhHTbX11K(S=|Nz-9_5i-rwpbAa$z zvH74HZI!QvJF0wiU~KpRloE21&qbe0(*t07C?uIjdtlI8H|nkn?KO*5n@CzlHX*aD zKGW!fM-D5G`O0U^XlbzTSEeE0s!iH$GnU#3a2b+Ne{E!?dBwrP5|CNmGJc7bunL$6 zOgA>l`#Z6CXUv+lJfC<(E9z=h>g)pCc6jNz2 z_MD7_=~!4y#B%2ATEQ5B?F2~@K+_=4Q>Evne1r+BkzIT}Tu#muzHaG6ZWAC$4bqfI zQlm5rH&Yl6l39yLTZBmj8Nn5VTLdI5YY|zGupP>ma}A%{#r|h+;ox^((Bk5&1dd>~ zw}t*X#SAE%Xy}8pdSU2G*={;jl6}IrJ3qhu)_4BwjTb+&k01XgcU=D;um2m^M85k1i)|I^+Uh(S*Z749X(_D6B&gWFs`+ty-69qo7&3lmu&KU$YU{eDht7T&ycPbJZE6&!-zSwkzqnu+gJxs$;xCcNNpq5gC@}zLOFFB z4i%~>W56Uq+BRzUsqUIVXU(wFH*B@3v_m9mD6%Ulg%^DU6yUt*9S~kol+F1-u@KeZ zlxW3ugJ$W5WNI%2tpr({hA_v()R(~gW?hnp3c4;Fo6tht@c4=EGA+xE9G+^WPFfJN}9|dNeoQKhE%igAEiKA z51orb{q40h4G+%Vo)rS&9ibQyW8y%UtlpLA1y_XlQokURl)kf`u)mdH?NqA%7EC({ z^j40Sv52T(Mv9ls9lb+*OtySsQ3?S)cVij7nX5dG4?M#tY`? z<4@9Edb`UWMyZhb>A}PIbCQJd>&@#G~suVF|WONU02hGMc5sQ`i$zs4T?s zeyOz+MAkM;ES1L`coW%Xz8a&Vj#e~b7Y(e1x`vKEEAqjsy~ZN-x}cEAhHn<@|5tJ~ zH4Q{7mXcZiJH_7I#B-zOkyu4JX8 z4;YDRQ@nG#qj!D(*Wz$E)+lUbD2P_NSrYy3A`B(z<4$g zISR@bksxHjv;}USBsNYYemb!n?k707QE+zXRpuV9bhHU!vhWO6fN3W&y{*Lewk!tQmc1U->Vh@}kOrXE z`^bQFAbln03ZQw3`X@KQXVnKtP{gu6HdUQ90i}^wbu5RoJ({f}0*zsQQKQUkfR?It zYBJT6QlG=D{NtthN}cOnxZeaEGR%S+%MOnlYq|jpsU}+EJ1#pnL(0 z$DX4DVZ2{reo&~Gx)APQ36qgY$H=w}Y!W^;CmDEnNr3Z|hmTb6nzFT|SNWyMSU~JO zvU(^$`PF6Og^O*v_At-YMKJ3n^nO<(eBPhYq{Kd$?a z*Z=>s_3$`exIm8!!219PNk8}m^y81B{Ie7LaU7L*GRGrx*v-Tm(*ZOut^e1rdUdSh zH=h^p?t<0`4)kM3E@b4qK*}3HX+rcV1h5EtW(<7#mW7k|n{AYbg>lX#Xd6H8qI~Im z>VCtX=pO##pFxR->EHK7^pP9`M#t-T{gHr1%XR7Wr;hHr`Ph#S?zrPue42glVl@8m z+|hpGXC0|C@a%RyN(9ToG?h8EC2kC;{R1=k)aN*V=0)v1{7#+ywg+*?qg%N5EyCW2 z7+&*!aUhfhXxhPK(-%OQ2cMNBB{sHz{)W+fZZsVwm>zjfh91SVKsj|Hpx~QhRI^pW zXpi1|6I~}2$HEh}0=Xr+~=0@W$f+-tT= zFm!UkJb`4K{E9LlVPb5qF%T^kG7+ zsD!+cb5OY`;pYw_m9!1k&L-SCpJ8nqYh zatr#Yr{HsI?N-OLl>$W>eA7z`hg0dsp~FL`Gk)_Kx;G7kE8cMAVSIHb2{JZZtJHf8 zyzu12XlEkh9FSQ;J|x?R$aAgwe?$e3Z}>_%575F_j6fff#6wZfcq5o7`}7q66{7AV zN+i}nU0}3W2TA!7*tt|-I&^@MY)0>Wcx40vv!bRqR5@){uJ8cCR^OQZI*}xxD+2B# z6Iw%7A}9~R0;c0>6Jh7`*EzegALv+vo+w9EkVBb!6pJhwY=0)Z>)cbbpZJ5DT-!U= zU%*p)@1y*;tMEP85=e}LJke0M9eQ|&fP510k#o_I`$gpl zlw`o*WPfeDx0bpQ)%YM?O&Fe&`(pfsa>veiq`>k;KB7{%Wfg(k9Ld(~w8 zn1F?QUo+TT?5K@Q00f$ZvDyPZ>~-E4&{b@_FiTLysH%+Nzz{0vm&A+kEgVErO}!CXrzSZ1(aLJ zrcl4*n#z0Id%P2ax6afbZ79OU|f!P?C zjl5GyVLB5b6Pj9LL94Qk*)Zi5c3>CUw%Z3#; z_tKl-?%mxr88?!WE`4I6{m;Iv z;Zv_*`s#I-dsC_10{ShW)226MMWzspkR@iB6633m(y%Ov;e^~h&^=%IW_;s!J*Mw^ z%Qni?a44b>kVZmSb-|p1A!;G8P4H9#bdB`>tH7^bA`a&;=XyfRhUSojw}$3u4h$FI z$!?;*^g!a@d;*vnaK{BPew5F^nSl6EU>g1k&m6!Uk?^7mcxZ6pLrI=(Nt)+0h>_Xg`XuSi zrFZ#nC*8q^{~)*K{iiNX))wwk>*UEB`Ea!1^Sq5#D|lNa21paR>4Jy9^BgAkcaS`I z5=jrr$C0CF!Zq=M(Gc)B2JdcPiYB2tJ%ip_%E@6tUwSCDT1Jd>$q5Yi0F#!XTX>H5 z96DXAUe_Q=f)r9Nf;*OCXcB8#T1;|W2Hr1!6nvED* z+KRQtrSEWLBB_xUwanvNLPiGBSzD4?sZp;3UY`L!|19{}n$>nYc>P{?G+O%5D9#K7 zfOAj>rEpJ&`o3?wpKdhd`~J~&_?t(-*1BLVd_GTSS8r}52`+ZG);_`0i;v8P)A!^> zdB%Cy35cfkNHU8xYuIj~oQzRkx(xSgQzr>;mCd4)6&<3-;H+cGqg-1hp6^m>zn}MjrF2Gv(9;$TTrv3S$#SyE)1P zM3E6%sXy-O{FM!6$zelBG~20ghcGs=uFThik8Y?~y z@$hc!XHn`Va(SPd>P~F1-%OkeD0;5hc$-(AR33thvhXj0ImSN3!YI(jFJpA7NjL$A;yGLRRgRFKx=qcR{)qG&o~oWg1!NWb`EeZ)J_DD zwi6AuEIK{ItZkTP6eEP|eVs26>J$&CH1I_@UfNxtd%|da+p~nY^TGjdedHA!efD`j zy}FBXRse%FpxqL(1T;1tB%WC0z-$H-g_2$;PtxwsXZ`lCBpaKb-Wv^G!UrBJj*I)_ z_4~p!dOc9)3iAH>_A?VM{`J6^hrKoTdxtIwq#a`7!B6ahHy7X=2Ud6X{1L`+=iU0MZ$-&OV17cabF4&bTvANr-MtWc0j~o}d50bS~G!C*Rs+J59iy_u+tyBvU)G)cA4dGRRRc_<|UN7H$fFZe~nn{g+wDVWPDYs0Yd>Mh+P!l zv$a4`0!L$-;gIWZxm7Y8ZvwdXC~eFktTc*7HO04V~aBCrs^+=Cqhv=U-g8a%ZJ zj&dq9f(77MC+OA85XJ7h4hU?d_Az{YC7NgiJ9BC1)sS4OQfw^!a+j*MV4e#aU@;c< zua?ZG4z?8%nIf@a#gnRzf)7^REK3gK`)`#|g;qYEzEJ&4}x;Kd>G zS1w9LA@ti^at#C&1ySU(o4xBW=E=Q{!ApOjoAUeK>-3#JchElB`%pO=uKS|64}}L( zhK?&ui6l|}+_N}(`Mg?pY_qjRmeY{d8=~WUg^7hU!pH>jo-iIv6QIA9a542-%pAN^ zke8~7?M3le*l(G%sKrek+TcsVq%^Bpn%ap-}s5FAb%VbHzrI&9bS4s_27*ymv zHjIPWOgvk%Kbnp(ST&5(YP@;)K4R0gxAHq;W%N#HtxN2V#n0Xpe*HT5ZD)baHn0bx zY(h?vWNJ*1EYBQpMC$DiZgKxx-o&Rb@8gBvdPezpDhzr+VpBJsu1&A)oJqWU>dgIj zeB{PU*ToQmB`L>R7k|&>sl1k;imwF&~y(ETm!) z2zGK5$v7NA6m)^Lc(oDRRp;C-@f6lRK=sgoWM;!ZD;Z=;rAJu`<-(bn55`;78JmQ` zkJ1*AwvDp3kxgZiEX2Pv5p7B)32AJ&76Fe@h3k{6od_%cJ}%P}qjwu3SF)zM1%9k= zsK&Sy$lqoi814@Rsaqv&_WjT5|?MDGP(3S|*|11mOgk&ETbv&^A959y7*lzib4 znM=W!%#y~)*p?BqfXf-f`mC6$S*Ku8!dOmhf9;CN@QG|=@Xt>@_NBk`+~0cB=(w6cUVos+^7p`B z0QmUh*zfjQpITG-!G(Osd%Up>CltNF{nBV>Pk3$woa_(}ZAd!{Nbt-{;b<=0oB=P4 z$%_-{&`}A9wiP`nYcv}q?&cQD-|8j)*EXF#`%ix3js?Eri!*Wk7%)0s$Lo(7o__QX z-g5xpC*JgTKKuC2^OwGJwzK;e7dwY1eO`9uQUkO+yp=40Bq7!ZhU*<+G=e`m#N-nn z#mk>rWB(nG;Ox8K#CyNyoZq~&&0!xn+Vz+p_+VLM46E3Hm~=)%f>uadRIg9)gh5dz zn2yBZZo%PxiP_MhoOzW5O+qB8flV2VU#cKz-$+AI6irn%s}CgcIDrg3O#&n|br~xk z88iW)ft-vl0q?zBL6mbRL?9<5VnzzfQiu`UoD;}efX0vpNKztgg$CAGTOBR2v!Vja z-Wvk+g7*^SM0o@6WW4jW4~zFvHs(bm5AQ>fiBgacMR@=;-~m_!c9v|0im63oW1D3F z(s)RLvJu}`sBdF@R7FrHmqEmFes3yNC@Rpz;CE5S2S@av3T*Px|H+p^x$tngNYUHW zARDCYZyBy_Cm3v6bo*qI#Nv4Y&1Qg)+?q=2WCNe2f(99*wi|A(h}R?-{w4{Ot%Kc7 zpfe~qn-;k7%tSXodIg8S^)zww86va7#z0y>6{urAxS;}sF_F|}XkZi&o8XSb%DzH} zBk=GD-Ja1qe&8GM9bbPJ-+sQU%Z@mTSZVMve+{lh0bDb{rh$swrIq=7Q}QvH?s{0(;Ry$k0a8*siO_yysemX1FHJ?Yut_P8J&M0YdM_`oTjd6c=B zwn;|Q^2&d{0z*Y0Y18K;Z>C2chdUmp-e6!_p-Ge{gV{JM!|Cu@nM$CD+R(mY1!1|N zLS{=zl&fGZ(a)?o-tGH9?t zt!-HpvYZc74EG&J`=usFg~~bL<1oc0MAD*+C2D}h)rhX5_^+Y?Qt?qY6{znO?gP>@ zgajCy8l=^E7|%6d2(Iuf3m~8Q$gUM-L}LQdZ7i9zEo}y*9fPz*q}IS@K#~Ta!^qR5 zG(ox@B;3Y|*3!qI4bl+SNVE_vgRNfk3HR{P+%VYg1yde+hQUn$S%QC&_wa?2btNcQ z%|~Ed4weg{n0w}hP%gZR94Z&0bB-t>g&_)~U^6i6tbxfQ``McCc_k7}b#sS(Ei!6r zuAXW{9d)Ka#eeca%vdL5GEOqQ6MX5zWJ02`25HBlyOE&3WzkzRY_|Y7DKBE!Nm*fl z(Id`4j-WB1HJ(We>YX&$*z}-g*t;_1bN}*H9R2pEd~xMc&_tiv1_m2IngQOE)l|%T zq0EWl(8DI9^z_LW25)`nHx2xc-TYs^V&~|6U!0Bf@%lqx88uf-P&@f(FAl+1$K=OudgJLhFNE3LW3~Wb6ShOV5&t5EFIp6F4B;3~H-7}|uczo%` zyB7ze^BNDyb_Ylk1WlHO9BBGIu-EavD24qIC!hI*x%k5Kxc>NqcKc7iT@SqdB<^}3 z<7grrUM?^_BJvqw3}rfo2z>_V1Yc6F2&RrUk@}m&U@gU|^C>1{&*8q~=%B=WR3bmh zfyC0JluZF^O^}0C6!B`nx}0*ca$pop{Wsn#m>mU4gCZCKV;>dGFq;JCSB$nMX-KXl7FRy6 zRU)yA<#j0DO8|1P8PMLc*f(;cJ206Mb5GEOmV90Um-h-jaMtQ8?;;*( zJ3L=lKMLu}l>(YK`tp!@%gEz>y`Ya zl87!rfY^ta6-`i_;y0X!DiNtMfVEK8hHmW$2e%x3>C|2`GD+srTKSg)VvXbDeNaB2iLc+f_?RCIs;^f*cN1u2mSopS6gVZWI!g!Rqppr`L(7^l@ zwoX2?#P|LH*M*0Ri$C_lGu^fAYr=3|936Gg?Fz1pV0Q|&GBbYuvPRFGR{7|cFzZ9U z^el@y2i{j(iA2H#STD*(kafV`ra?Y4njMx>DnO`8T{o4}TLn0V&w(}I6JVU%-20cQ=ndaoE|q5iuZ+&wVvs0?x9Wqz zTFn!|5;0s!Y41AD;I>Hxo{5cwFA`di++R^Xuf748#KfbCE6tfx$%7*8{Q? zlo;&_TsPu(-_hk~|N6JMkNo`);MQ}uh)x&CQino`n-y={f9BF(+PeSDvswSduX*Gz zB(45;jP@t*DTfE=<$Z#|T8@MkoC+E zy))4GmcjhUqnrmaq)8izguZbeE{~A!i_j7t_1(IkM)jFOD7mM}ESIC|B@uE=hQM6U1$RxiI%b^SRAis$8nbWh$kIi6zXC}V;a8`cJ%yX;o%sgQ_shm&fb59-R22KFz zjBQzLv`m=26HJXaseuetZd(7sAmJ}{v*cfKo?RVobQUL{hHwF2wDFf&FtAKJ|IGH~RbS?afanN%HmObpG{=>9j2uGI*J`LV|}el(Arz5?hHl%j9MY zGkNMMm3voE{O-MG{jK+D@bDe#o-$lJW#FdJ_`qW^jTB~MWUY}k(KtHv`BVuRL)a7? zY*}>rYe+>ZgU@9Q zRwVsH3al)6FSx=R1vDhQPD^$M30hsl&cL8EFlhIUvW|hxLNuLRP;|NInIK;ol2izY zOdXERWmSO7e&a`Zl3@; zy+9+X((OEg97%%B61BHB<=dHYrGuMHM7iK8BS#)hi7Qvsz5ial>s#M}A9&Awe8W~( zV^|)RpidYY(m*eY{d~k$0=U9^(g4eSYM=O-XT@#7jrOhc1R5t&$`TBNZ{iyIm>TFENuDs*CU z9=?EVYS3G=?DPzLh~!rDagJIo3X)Bs{x&$-FEM(4kN(CbV50}LTfTN>^6)518f#|B z#^8#I^2O2m;tyxqci{r@SMFc5zW=&~)6lMO6$a5mi0^n$@uzdm=?r`$#E7*VG zeyyF$U>AhTg9be>nSOw4r-|955Kk{+O zn->jEy&*xnXQ+Uk`Z~!h5)|1;#jDct>fI-9Kx*DW%bTt0j2m)7RD*!(Ys6rjVk!`m zOY?ayaiV})G=7943ob$mh`zt!A6SBelsIS^efTP;sSvD=6RBC>}PxCMHySoYceW2CxOcKx-`K;x!Zs_L)it(Jo$A43oE}zEXTkq%k z+aJW{-CgxIg<|44-2)d>hW?*`Y+%$?S2bEU#dBh5YeON1HUzZMT8b8E^~miOxVD*K zF|(Ra5{{3&pN|}ixko+;k%xvM?UX413s~CloHIJzS3fJzb1O`yasF1yxtcLtn_q>a zHXhP81~0%!K7vyoRU~6D+HcsN1;K1RF{%Z$VSM4~9KjN`+0pU~g~mA(0jS8(@vefC zC=&Ek(735WZxjKkni6Mf6pb=Tz_cQ3)d$&p<@0ANQeH*%qlXwc(osu>CdwKS)ySz+ z2ndbY0*uF|0leUxLcWCe@Gb(j3}*l2GNuB9C%V&tURI6C`Xw z@(mb|EF)TdpnJl?WW@Yvf#*K7tI_X1V}?(^is`i-l=HdF)+X5PL0OBjpfWV@poG#v zvl&qow5d7Bwog5^F!o>BcIUT~2hP2`_cz}2S7bN~)$`@sm zQ&(ChnOVn|P2xXM5|8D;eN*qYC7dRi6{MX*wwiYu6D&0?q11S_=_f6ttJd(7ZNrbY z6FqUdeRO5#<&(4beI+~|s z_m<@DFN*ShmE}n|5G_EmmHRE3WkOY;naDwzmw29~*JnG-Hl;FS@A${;`@Es&%@t7DY4gx;D#k(0Br(`-b{Cl2{SDssRT zp593+02oIagGfUUU5}~i(T0D@lE@SKhh>tEVl2GaC^lo~X&Nn1VCKX^t|IXO7N%BV zXvszjzb9c-_1L~*imMh4G)!O>aA6jCd^#JnGsp^hBOQbN_ z-2_umy>+0|4>b5HBiVbQlu#5j#-KImxbDf#LamOOO{R&TO^xPrq7|pvqdB;Dr0mQo ze8o3Cg75m)x9Dr`9bh*n_8d729;cz37AxCT%23XS198IuCoTA)UE$X*Q=i`fwmU#K z4Igo-P+&L#vm8(^y!#%DuQ^4WYXMhFDi3yBk;JhCXrjgtXEI=K4t!w`dVbHN--254 zH1>*a)zt`li4Mk2ywZ2pA<#?8fR>Tw%hrGC>mjXr6;;0?KqQb!!+pDd!(+Pd;7gCR zR{^E0ooZFtAg$bnLBr`wp}moy)3+fRtyHCYYa(8Vj1r`6!S;+spFY6Rvp0c!1hlsW zYgGd!h4U!O#ANnrdvo*GA?@PA*Oq?>+b@A11pxH#yX$usSFgOubUR<~=hNULXHvk6 z?5|7X>zH4`da36~Bb^YSC z^zChMhiWuQm2R!+NrZ|Wf@PXol;hSW$BlcbuErBXZ1*j$jXi$*n(+1$MvtBl*9?(+ z(D}fMt7i+Uoxd<4l^BCBJ=w!|e%*sy49EEGn>(5hhtOcnqt%8_(J%Azo9C11!L_F^ zE!N)pRgVu&?7e*L=rHxp9SFsjl+)=Qaz%nx8%R3>jnM6ebGJ2Dd2odXpBZU#ZK(0( zLlkd2t<48cqqV)J&S^5466MsOm;*)8(C(QUNUK9R6(EY5rBz8weF?yTNqA1tNe$Wq zpzkbtBgg5`Vm|hoPaKMwhsy!)Jmn}^z{3Tfya+_bZ9&zUw!9e_5<{1MJJoHW2=+Be zOEl4+NC+N8qY7fyY-)3Y_R>Hm|AGu19h#-`fSp-~~%q@3r$yK2maiHTN z@8UHyMAorNT1470=yVL*1A|uAB5f0qu&uz7Rv6;cCS?kqPFkjErX3+2NLg1*TSkl7 zobzXI;^3L%E4u0YrhLd9n+VT3sSpPn7=0|@Ni}(DX&3m)O>8-UZ{hPSj>L<@1&K55Y3%&8M z;OPRm&l-QS^kypqwhWj;NCM4Od1AEJG5$u2y4t0GWwT{}w`a0vrYEuU^gSob#~*@U zc@4LNSYIq3!||PXypGp@TI=Lr{zAXqoqhf8v(J2AelYwBKPyh4owZbDe^rt#V*+IX zlIC+@f0vky2%i9_-rzUB>>-@|s=IOOt!wD6wa7fhVrVhl1B!*Amn#1q#0r+dtTdEU z)(SQSZAuyom8D0qfEH6|GIpE|OU%bUrh<9O#ZoR9I?E=;(~z(*tgU3K9F*YNQWN!2 zvymbcR8f8uBi8^0UmZoS-{|*Ki7(7bm*%5KaBR`}+P#pG{}g7RF>9U6)T(B$6y#)MG>jE}Kq^$XI{0<$tOFm+x^1K3!8zuF{-5?JPtFD1BGi__C421(1X z)wAesCg^V(_WMMqL(fow%9lXCfGNx1$rL1ip$0ZhxMF#QA`_re^Fz8+X<5#Y<%EP0S7KR%gXtEG@k9<2{;J*LUx8wizJrDBh-@J}d z0X*j{rvMTIwM|_TN2F24nSl9i61X!37A5#UeOCCluZEuGo;7+H85hh~l^Wr20ZymF z2|D~gzb?g_`@+NnFPD@tu@_v9r3ryWG%9~<%j5mmjsI6Kc>K;~$9qp2BuUjtn}*o2 z;q4NcC1ORfTi!VhP&2xm#yqQP7FHvys8piMR?WkZK+=XxA{0~LrO)J?k4ji0rCplS(_xkxcx2P^tW!^T3o_U{2{0CNX)+Vr@mKt{$s_pD;rqf zAUZvulwsP1_HF_N)w=hM{^1K>ZIWai`7SUYdcYpgY z1#MzvvuH+Adl+j;#IfO?^0~O!FR^iV+n>HK)#fRK$p|LohF923q)kR?np5q6U4tu2 zwip^#S2Yi%;suelqIl`auccQ~fTDp(-is4Yuf z-gj``^X+F1{?1zsT3zx0z)=CD3A_ziS}*{dhm9URuz>C}LLa~fK6x2G@{=FOOTY1? z@^;r@d&8sGG8ivXL(P&j`Ngff&i#)!^87`-@4flSzx08(x$*cfj6VDHx0iBvsMBtv zw=N_pV61^n1!Dy)EDrXB{T+|dSlGPFY`^OsW4?O6d~(Z?<_xL^|^$zak9@*XN3w3rLyeaGox$=Q*^V(j2zDkT`t z@7LuOfc``$xk zDfxnO(fm3b5%G1J_<~DFF0h)CuFyN_+1l`eN=&ZL@al(dXzw>Z!NqgWfW=T+TPIJR z6nni8>QO{W7#ZlMUZg8M^L(K^AKJC`tGzR){?YcAKJ+Uu|Mw4HIuH4XdjeNwg-3aQMkQdMY??ocAlX%%`up##aZuk=gtBT9OQh!d3Js2y7IE3#v7SF z-%s$Vt-gKHPKv|zRCEj=kMd-U61PYm!80x zds|rRQM0Ml;VwBj^7KU@z+jW;_rTl>d)ISZ|I99L{qkqEc;#ui zgB_NI1vdJg{T`WSpckDixiswwDddZ}$D)u)+wR1dy=C~&o9}jhk-N`+>UoWydHIy{ zvh1{Edl_YE{VUge*6Zp1Z}?LD-T(SgJaoRxISpSa4GsnG4VV}piy8uBDz{{@^u!4R zoV7vH`1dY??|&J%H37E!P#d)|1z-s0z#9j`R$Kbk`=I~kewjTQT`vJ|qB>5?wo1_} zD=|Rd3hSc&-=Bki_0?bmerABW^)eUCWVxus*><177pG~S;z9uH?`63lJZ2k zK&6zd;0QvJcT#tq=$`?1UtQqJKmHXCpL`A&bcFVrV4Q>T9`eHB5lz28WvBbk-5cNf zH~!GUqPR}{@CP1qhm*f_^yyE3uWt={==23^4UieQxiCCb;ylj$H-EvLeeAR>EsidV zu*TEW5J{kFkQEscPLxdoBsZT**PflS%tNZ9NzE#mF^HG~6luctH#>49i0$(U?s}vp zreHY-U0&Z9P0%->q!r}1Qj25hO-0n$^vaKKMxe1yUyB|ps4+#Lk(h><_=F{6CfM@_ z5G#tL>WEE|aFB5kU}_O4J+MCo76tKxZv)?R4%%!%uR6#XnCNB)BN$UdD*+H)%e_CF zLNn*^k(YM)fBo-%NjG1-E?G;Q*re_BygxiLbZ(Sx4nDP5nD56&|I2Imo-br4Hm_`V zbNBGAi&y_@F&=%ro6j<|yF{z)kaRp~37;DzAn1VE)Z@lJEew;5ZKiK{BTjwoTXpWy zEv=o+07s68(0HGij{#pI_z#(Q-An|18(?gNe^+FrRSW_Nz>2{L1O zVHdWlhAtH~02*N=U$J`Q_ccqazIZGyz2D^l`naEkJ9%l7$Q6_*PKe;EqJRwqwa#@l z(V4J1#RVFR+QX10z`TqSbnj~UpghDRm~P1lC_x_pqR8;_BKtQvfVN0^ip;D z2AwXLwkT^O!^sQIg}39qBACi5RyCFtjg(Y|!Ch+&>}^rq4Ja>VZ+>Q|n~y(>!^b~P z?Ob$4nZx(`Lg5W2j-p!VXj?6YBLy@!w=`v-pnN1K7nUm zc0%dmr&-cJTElRrt-NTL(y4jrF*=)H_*x#{>&Jl6@j70A0@ekY6T82D#!t(KXSb#g z_+tDWNue~MQfn9zzo5bavnh}-h(Z7|rCWXV&h@Z%-wCe2`EIVg z`EI4%7L$ZX2~Fn2d;}B|Kn38NJ4o<@q&2Lf)q{L3Ob4S}3MgHWt0?!(=hA#C&Zj~? z^C%Y{Wg&PMGQq-7($FL!-ON<ls0vs#Nzyby`ql z_;|6Fs8wlI%Xb~ofC@l>QT>`C2?N#Z(z0!eU4Iw~E(6c&v3^W8Qq_!mAE&~hU|#|Q z1VUsnlw?GR*9BT_qTKDk}`uRv$_vFP;<%lBU!Syw}wIPPtlv@U@U$N{An ztPzrg%DP0a3$*$`+6KJy*u6H!{u3|b=*d?(et8$ut0PD=AQR9|fnKjJA6U~lc*sq4wP6Df8Mw#wMKM!0Ui6?tN zC#6>97&WwlrD}5-VD6h=SMlVQw{N)hBWnW4A%a6dh*;qo&Vf-{nj7VmV54R{ML!-)%~v+ zKlA+G_a;57RvT!yp~4$j0OKLd@CfZM{VKij&p(2}8%|+#1`q#c73ccwV|Mk|mg7NB>rr;f5O zu?7rl9A0eV>JhwY0+C$JD~CtTVN=aYsrQeDn605zYk*Q{P*hCCo~ibqWi&wT6_-Ry zoue7BGa~NX0RF~9z`M^uQvsJt&=JABH2kaxsRhfe#7lhweG4Ej^_w4kmH+4`KZGZK z_hlGsf%B)mcb+O8Ok$7xTJQbITKgY<)ersok3Ie&__wWJTzmO9KlT-FI{Svwm0z3B z-TiXPLgQkHR%T#ryw0UC9s`R4CzKb-6&>JQTwlm4Y#myodLqcOgj)@~i-K zLxKsFWQJ+WAZ-&_i%K$tG}#oihDfY|O@d_*mnyzM(JkxRifV#iExFSq35hCP+O2yP(6*2WB z)}98)Qiei_M$UspjzA)r3gyfpUpOr0hKmJJE?m%U#Oks1LXGuT%}n4!y zsX-~=ZRR6O1j*Dg6IQ-NwV^cun*mu1Xk}v34pCq#y(W88=DQ}?3v%Q|~zjWiy{pT-r z=A%&$iA~sT1Kv>6l775U((2;Nz5tp)Wxwh{eBXN>;x|8X0y(6c4mf1+Ky62_(3lp- zN}?b^iNMoVC>`+GL*nNyg4ZV@Exnz^h9h`>VBv(rg=Z;)FFg%>(;eWw1M&G1n1hO# zX|3r&=ria5Y*Mfucx6QX+RNbeG1N|ob{gzCs%BegSYXs)<_#6(Qd!BS(KwdSV*R!8 zVGICM!;hx%n1BG13@8g=IuxcyrC|y%sRD^A&ygkJVJWo>pQ3Ytdf4h&4Yq>0u5(ej z#(L;qJr9yc@U==jM%O18KJf(wqJvgTKpD!ZtOcKSH2eJXIC|kM(lc9VZKNu1f?liv zo(5rTi350mrD!v7a3aC{uv9U1aHXe7V$PjdJLId5O%rTN_!d#jJ@&4Y=xrGEw}B)h zido%=H+`$>ZaP|@u+b}n2wq>TguP4jN6pW(W+62cx(%qHzQ-!qiOXB3HeL1=*jXj^ zMT>8PN;F*Ql8IId4BEi+`@jdUgQt7Iqnp6c0Yla2PCWpKk1a||4&$3Uou&BBuX`i+ zcMp-zay<3%mxT6#!Jr3NOJDj;6!~{26El4JAN;Jt&wlSmKMNe5yYQ*U^B1q(C};T< z9ZVlZoJ`jx+%gBx-9-0|H@Wf9X%6l< zrS_?Hr0XptYb0{2SO|*}bcLV-gePE^*SG#0O}&-J=Y%!u#CgyaVZdT7XcGXINIOKU z4H`l{2Nng8FMxdRkxzxi%pso(#XNvZ@!XIrL}!*@An78DcRBE&7if$sC--_-vb;x^ zTw&@q556j3Gwe$~Sh!UioR*v+qlN?*b>ymitqX4)^N~Wlf?@?(n_=UYUOKZ^Mt#0Q zuAHi~96mfGl6Q>5ojUK021rtaB!$wHNV4D=n6@m^wn5q=lNM;r@~Ml|Xeb5()UN@{ z)WXK0tm*=VvscX8L3+l7)WTtWFvk9+ecX6<2fI(*#Qf=(;PVlX8DL{g%321A4HQ=c z1^Ijg!3qzQISfs1QuC^e`Bb{re=+H1zi>EPd~Wm;f7%@v+sEsVdoOh1LiKClLgUzZ zU*pRj2ZDI>-v=u&LF7Is*d|hO#KVu$T+e ziNS1KqL>NAT){+p?%~VO*?2E`Cwi#{T|&Xi)$yf?0VmDcwJI%5m8%}AGG93(#m3E4 z9Zqb&)$r&96$ENN=AlHh&S;BS6@x1-#NIV{MkborN|oy{%&>cY<6!f?bN{y0AIxq(bNSEged75$J&FN(nMJ=Nc#xw47|oTH9(RA; zJM=^U#oO>L?>NcaK+nyMhJg{pwpj&l1Rx3fS{TGav7PrE>-%CygFJM&N`6u8xKGU!|VD0c064 z=!VWO>JNvS{vu6%;3e|`kT$VUIprGa+56-7f?f=LS)-Sj-VQF1fEdRf~AN(}xG`6b6vsLNK7K zaHe+jMJ=Ud^ZUiO=dr{*8`P4ed-Bo`rv4`N_Nm(Q7_9_2*$0jmz^`5vS}FLZet5PD zM~$^KQ?GH;ibO$Rr0_t#ApySo&prw!ZT;PshC15YGcpz!^eAJ6$sz&FpPPARop=9# zU!9#?zZJtLKKWZ1c+4jr`P8GF zdKIOocP21|!z3X@E(UKSScT*_)`&Uk+&%NUA24b;86|l7;GSKDl|oA+ttzA*OW&es zd_CH6h1T(0uh55v^1giff7nZa42RBMrUfuSDRU7qG*EQe9|&%wJmxZ z2A!T!r%PmQFiXO{_l0vNwv3COMWe)j# z!NaRLZazKJ%_lEo^2F0{SFeIvNP|9catr8n1Vf>8bs}w?n0b^Xu*kvL!h>#@p4hmN zZEgJGiLZM2$6op9!@Kz3cnlOBuRnR~_X2~C!J=cp=y)BkFNXEfTOQdv{fi&?AoAjg ztw-MSw)|lDr}MqT_iBG{P2&kgDkFfacM{wf{ zzl+`8DYPDZqt@Q}Mx6ZebKJZmmfGGvTkg_P3 zvqEbET|3Kwb|3JktxQS4i9SwD^Bl@^Azy%bPULfsVj;L(@TG$*LL!rMkatchDCItM zS-z>0hzgIYvoS`&xG+its%V@fGYqUD zB1wTHGqM?IGa^Zab`}cyI2dGz%?j7gxgZM+Nhzo-8df}RqN(+Y=_i^|SzJcRRIHTR z-dcdCmm!(77#fQ$usfh^=24cy-c4ff^M^Qi;v$BhdtPqmy4-L~IRdRNbkCh${Wg$g zfz{?6V1g-m?T}PDhuMsnOe}oK*2ell>)eUQ*Y3Ofp9~N8UYL#Cn|D6@g>N3edhKpm z-^W_dpp}A!3?>E4^*yA6KJNb7x8v{rmB;w#ookqS;KhO%8Nd=IC1_*Pn_@pAvt(Rt z8R*^=dbOl^-;2QGSAmTIu--w_5{Q6Ll`a*g z(OfEb?oWXfz|%XxFMYv7#$de*bkf?trS7v$B@>E(pg|QmT{ncalqe3W5tE7-nQUsv ziI%41b;en=*%D|IFl$4_0@%M?VtBKJZ4tq2xe8{l61VGii||#nHiGQT3*B{#wGE5Z z07Z#rW4IzmqJShY;>`5oA$C9XBHY{)C)+?P0}5wAFRI3&8-BSx>Eux!Y`h{zlo;wXZbb_r7pgal*go+;sR{`6~ z+6iSD7<~Qh42vmvcypno1ewH6(pOn)zCv(<$C@Ec%Yfc!c)dh-V31~Dw+~FmO9N>% zwu6SWaTTXj9ptqN;>4HUBtWdZ1z_oP-1wTxL3HhREcz6UswggtR0pj};Jfz4~}0E`H}QUYfZ;yb?a0klu_^ml&vr`_)U$iR|3 zbpjgAwb-AwbG!If(`%hMyWag9n?L)7m!5v_!}$~c)nmn@KmMtg=M(S^ye3ypkwx!N_u{(V@`SYLC-lgYs^uZ0&x%WP- zf7yN5dfQ2Cp0`X+Cs>R;=7+*!pD4?)=T{y_uuG|F^?a|SXL3b;8UQB+IWb%q;FJqQ zIeEM#E!b)U?GCWHZ6FzVADF~>4lJg?Vg@W0pj&tp3y&ffirmA`OSs%OP&)bAv!ALM zniV09G0Zi-xZsBG83;;|h_{rYv1yw~D0nMzdB;W4RW!wp+fyBqp@oK94^}%cMIs z!CJ0JkHM%p^bSxN;?R=RqSYZfYrytNpxrItymYire&ILwu=}xRF@5F*xSbnt9`Z?> z*xrN&8IeU@UReU7L1GA?tPIm|bYzj2G;QOuQ=Of`$#efN8T--2Yaej@R+}6ZTABxIkRE;P3dmPi>8!eB}-0t=)%I&hK%H;+x8ad&K3g z2N)nrfGiViqJ|)b@Cv5V#hl0&z`_Z+hp~yW^)5PRH`zLS68#6yv-jX>4enX@{lpj> zq-MwqaWSEa8Q>P83Pm}T@h~ynhbs-FmtcZv=hAz@u#$S!K!}e87!|B=>Aj#*!6-6L z@0=H0Dep?sInkGpcc6FiYoZU24{W8tS^|Q!E;?EI%HpM(UYe?0MYJiZW04~uWJ36x zB}_sYLbT!c)`&J3ddEW1$fQ7GgUPqG5Dkp6aXM>i0H7YWhSwKk>#HU%UW=*@tyJlv>_4 z@4_mBqXFB5FVK>f)G!%dPTCt+mLXWFweNuANQ+Qip1 z!brv|J={VtorI_EO0l*TjADHehxE%`1yK$N8DQgXsTdW!^}%Ow<)8f~VCTTv8j*Dr z4MK=~CSy6v27_nP&B0$7J#_M=KOTmwB7Pi6@0Wh+Z@c}Yzp%J#ZO8+<*SoN%c0)UHDYj?j4=I`S};#o>=o1H(PvFKAC^LiV{d$K)V}||AZd$4AT^6 z!XB6hmWKnZZ8JMDVCRl)b?-fc!CUUZ;Eo>K8>y0nfD`gLkdKLc47kF>%hX`8wQ>J3 z%iE#$q!QRvv^C^_h!V+gOPKmI55JCoU)><`@qBebL*_l?N}(u#avnSg%QB>~yF%VO zP)-ac&f)8!V9qVq@ILY}Rl!HcspU_sQ0^*3wPCZR3emoOD#8jQiuX`W%M(L_TR3M0 z8~vVw(YK|wA^gs!1~!ZG@07uKJ~6Nf6whcjJffE2uHl@P_Z2s(@zTul%x=nq5o!^6 zg-6?@fb9b9fz0 zva+&fm88-P5+%ea5W(I5=a}Q1v-ev4$37<_ZdM6o8)FG#{eD@Md2igf5pnj}d#`VQ z!zHv|+QMkF3-5BE!XPrLafJ{?fF*^QQoL%hryGwqVK%Huz4p6Yi$5)texY^qiASTT zdF|4VzhyXCU1m&+S`-amGUeUkgEs(4vB?cgh_G?>B_&)!zO+ctMU5#XI@Ro!pDGt8qf;K(#9;#( z(qzKFnU&avMCroJlDLonjCF3s6=E|!tq+z(Q<4$U;&sd9wLqt?ZuwX<_C%R9_Eb7- zPe8eniZcG37{vw{uo1{c0LM@pLCJz#Dm2^}!FPHXZ119Ty@TE7+vuKIr}W|#V6Y2N z28tq})+E##1ue>A;)Y8EAKcE7<%;2m;5-oYOdTeDfg^J^YPHU;-gERrw!ZYj_9IWv zZ9IPdzTD$Gy!baO=|O5#!cZAGpfeyl9BJ+N0lfL!?!>#l^(5Z$+GS+I*bvfA0Ncj> z4sykq@5;9Ri%PMZlsqFVDlp)*zq6+ch1-F(gY7GWY zv5V-2BPlIpF{TQQTZ+vmwz2c%C7`)e__>;09BpW$Id$;4djC zPk|_gR$B)3WlO#F3_dS{1t>_@F!pGh-0q|y>B?4twCAyNjZkeGv{o4=nwZw>6gagv zZ>AVSa>JOTDN)g0b8FlHbdLSdZyd5T4KQJEvt4>^VVqwz89(F4Vl1r%7--c9GEiJ- z1HW<(m@`WEER(Jp#Wf)m9}yYCv;|l2)+b=M&;Ttq5`6!=@1ns@kDM1h`|KrfY#?)0 zAc;x5G+maxOSb#NGY>r(-Tg0~_{@{*ceinhq>!n-h*Ns*03Ls2`?06bICt%uWqUXm zf2)iJD{zicO#%WDCVoW}0hNf5=ZaCTe$c1kOKlxqTu1xq>*zeUg}Iv=XdInG_0R&U zi*=Y<1+@i>YEzM?3O7>Z8Nugat(Xol;2ZquFo9E0`bL+A_|sUh$R1#D%nmLB!^m17 zii@#U1dECS;uyYQzlsNZrlg{zvS-~Tm4YPaij#^Wh(jb8Ne5IfsG);rP#EhvWq762 zw8}9+UL5f7SP4gkeIXGm*f59*Y=f^Cb4Zfoh%{JF85lDS5@9T@111LX<@kk`2Tqtu z02zC2YsnDBWbB6fTSIn039zy$jIa|z6bVcMAR(v|3^x17w>s!v-qp?Lwy^u+I;EG^ zf!z%S=RlGGa}A)`2q6J`_<=#A5Ai^jg)j+%8iTHlqRXoEbY*ezll5DVeEQPgfAdqr zmw`hwuxM7Zn$^qqo3onLtp1qP+CThq-Cpk9(p_)=;NaS|*SXH_5pr1*wi+WYU6UD5 z!%$xc=uL4htAO)Bnh|z(fNlrKyn^e%>T$$3A42oiH7wn>gvH|x)R!YfH3PB)%`MU{ zFzP_l9;u2l@su+#p`eW`psXl75y}>Vd1|9bQy|WiUrg!QQf&0f4P)?E<~@5$D*PPA zjqG%jU9vf*fEXe()x;DA)-;Jf4;y8jG+`Kf78RIS!D1>lm|8Z6;|=K4=ALzGKTMOq zPn%SaJtfha+;!MGlVSVG>(qJX zqNZoh0b4Htt{+g4MjcpQ0qTu_I*U#5g zzgPdpH}9u!I8;SftzP#)p8;hhONAt|*!D`1`sNCjLJh!)1Q=$ZUwsMq|2+Yu4mi*P z>XiT%6+W@(q>Af(MbkR{pI>G0Jx2|i41UT1qe9_k3I>BO?VSVQq{{?aAfT5*|Nd#{ z?_SO+cZ7p2t59VjkWc}R24skeaXlVa<>58o2nkPC@UdTs;^iR3#9kOK;(9|s0kfP;sN8>xsp9HwMB&1?m~cVr5jM!s!%;$`^@=R+O4bdLjZI z?>hX)Uwr~U|M!0b!`?{q#T73Liw!>vu%mg>e+ zvao{a_|2HV`!H7STE^0e8s^pvc^gA~r0IY$>;QRBA^8~0qbZ-OaU36GuY@p=T_-@p zcuku4*p>fhrYWG0rzWKWpfTm)jtOI?Jlr8n7-%KPqA~%G3$MI#P1ExGUJK?;I4}vW z*ke|3vHli7xJtq5VI?-fTd0)ivH>W98XI1dF;FhTILbT>ErFimc|lOg10zZ%2TU~W z`8O3npePt##cVub#Dz1cpnjincV`tK1~?LmDulRZw9-(Jb#S@EU?;=o=>fJMy+pky z&uez}EHJzdSP#@{z}ymHu>sgbp(cD-E|Zc<2UUi84^bdZ3B$gU(vX|A-DGL;*~KFV zKbF+>-@MrPw#_i7D$PKmS18EoJdI~pGh$EsN%$^Y|Ic6VDRJDkXO1=`aVHd$kVK>xxDKNQICSFc<=zb&s9r zcd>K&Du&O$1UYvOerE&7`Xo^GQ3YtUfNByvW^8xi{ ziS{oK>dSM#*jk?dq|37F+gEmK z{2Ay&F9Mf)z~OlyHifc)fSQ5sj6fTGK@7p)d_CjstE`O}xR8T;;d%t$*I=5;g*OtM z0+yk7ve0Iq@bec44?ZPIk?MRERErGdzPJ~8Vx={1-HPWe#T24@Qp-WF1Q^|bBTdUu zri`%1_-}m?81+Hx=X1S$dIYuvTQy))=AK~^-Cp+YOhTC3pXl0QqasA! zgGk2yG&&86k^ySVs?`;*FMYPp8~^^-Fnr+!=*kihH;Qi11*fzAkQxV;&Q;bH-oJVL zd;Z?n8dy}$rTc#1*WTtvqaWUW{?a>yP)9XURH_P5hEGAeZP?Uf{=I(&N8WN!;!2F2 ziy;My_Ra{Co^*2Uf|pbbY@W-pdnJR*6mio|oS=)_={R}-0RR9=L_t)!Y8cxoDD-9)6Bdy8i}Ej8078=>`^GIg92_ak-#BnN`-oPWjKR>OH)L`$isIz?eXl$D z|DHRr|1(eg=!x~cLqh5Phrplw;zugiA34)pUfp*)NA#WBXD<8&H%gZvAVg8X%aR0$ zVugtU*cXtAAf|Gj(C-rZeIRo%CWdLY)UK`}IdYg=_Z-CXYgT08NDb906TD)S5z+x6 zZwuu;MV@gPwxC1-M4`gN4R*{h(kXP0N+6I*z^IsirkRfgn2fRMz6J)ZOv4Tnh2&&? zod7(f1z=YOV-%ihW1yUQ!s?NN0yTC00>~5$yu)i1Kqxq2v)*949vHmg7)k*z#rT&= z_$LBDHBNCXH0de<%A*_Clw!@*avx#J)XnhT#z~dplr+Sysf`J7gOD_pY6}Eg6LLft z4500^L+n1agU**&) z043c25HD4$`&^#iF}S$7FRI$xz4vd(((DZwq!k!z)Y@PQJ#E@EcA6|QwZsE%6!d1! zDRK`u21ON$YE>k26(may#0OTja%2tln^vf@zo~K4!bE{SPdR`L5J#HlN}3W}PJ!C4 zq&G^g#vlugTWu1IB}cjkkikT)Q|v7X8WP(u>6@kjsgl}1Ir*OUkeM|0GN$=YP9Vo@ zkny=)(NNtOV?Uu3jX|nuZ)zQf0#Bm>Q>G_c=1_w`HULA`20X`B07?KVy^?GIGe%v9 z{f*&HKwzV)&a0*w zkd6pm*;JFwxDq`PS^iWON9P*{R-RtE_3)Kg>~JZ)ySoms#9wT-FYX@eZtnbm?`3b# zRc{hY5fPZuk)_=ZVY8zyo~Ji{`|b2C-*KCM%j*v69dk@OO4t_C6ofon|ImQS#OYb6 zIIUJ-A4BID=;gqFd=d1KOVG>x;3ZT~il!vU2emU$-5v<9)|9^W80%lW2}mqqR|(st zl`Y0_q zJ|@Sh-Z0pU=AC)W>`)s8OBJ@jl@}Z~&gB@i9paV&TOQvetSBJYGTM9!BUHeRLfm_O zG19eT2`W|6;14$O_tNsTU7_9q)p=07sG4Veec{JH$NeXtg7-sUX*n2W0g7OXA~2EG zmRdixbmHLqFaGnlKk~IY%dY*^&#dO{t+#Gpy#C`D_6`6bH0lavhEbr?0c~{=-S&E% z_)D+Vxx4mZumMWjrJZjuJ1JA0rqMsuAiXs)kPigw=Q8xR94I2h6`srsN?LT^!4G{3 zfs|a~Mo<%hR*xsTxZfbEfYRXvDbgFppE8tW;?V*P9%$2ZA5BA?H+mFJdA2~OzCF$2 z+`IW4TQZdZ#CTrU3Cn020x100iquENKm?mz!oCXOdyatKdmPZ1^qK%05*qrLp?1ob zskmo|6^H~_il9~$7dHm!FXl_0HfBO7T?*5dR!G)dh=!3`YG7t;qJGQIwd7vafs>SR7Ge{KvI z=@eKqmG@XG*RY2kqkBMeDw82g#$5S0@l!HK9m{^lj5#XQanrwV{PV^Ap;P?2FbruN zL`Dc~z$j6wG)SX5G`0#DLgs}BTMpfGJLsRkis8j8I=Xxf=|&&KCDQeEhw~;ck7);IwGVgNF2CQ@kz7#jJ46{vRpr1J$d4#Xu0{q`U`K|#6zWs z?nc}FSGF0*lZ#oAi)`eN>dUGBrSjo@F>fG;Q%`7YreBf`E@~8V^HHN;(d!$JGO}0!39*; z>WEir8ZFkSQm-S5D`0EMRvD&JoML)X=M?G*-UlxP^7i#iNz>R_B(q-MMqvAHK$={#~B1B1Bfa1E(WGyQ@6NQD0ip*T3}+ z`mR5Dx4!K)t9q;g-4xKK5PBHuJ$4L(&jG~{D-5l{S-QJShoz}97t?F%`E zZI7tJ!Q*2LxDqrF?8Zs!(+PXx1U?f)4XgD9i+YogXThIj`j-<;8LC^L+5r40#m1Me z)9}kr!@Eq;YD^GQ4affw^>%sTtgF^Om7F~EQZaC#EC65H4SpiZ9x|WhYbOCyx4!mtm zv04cUW4i)m#e-w)@n2E}Xhe!F4_acviRBs|_}S~v+Ai3od8b=ni zw$?F?Wv(ga{M~?;F3D^Q`1b|snE6QHFwM) znr7dP!7+t`MEqEl7j6d*YpyX$CL*=AkiNwVP5`nBH*_?-($#Ephen&b*uBt4_k|rD zTv&(Ox(?)RkR?K#C^hSZMpHG83-iMOAx`P}bPq5os>o9iG&f1K9hvC7H_@5O+Un!2 zBL_cstd>9W@E-p+z3~#wYF4wF)$dy~hS98MHLJaK>f`np<_}$b{PK_ZUjN%L>{nT` zrskuHii^NZ;D|95s{$gBA%!hW4J<3e5#>2yl*12mMLz|GeIOkWsG_LOgO-;OAKr(? z%?D6FFo)`LjjHo8>WhgkEEq&JCT|S9SmX|xkBYRP6y%GPGdQT|R6LbV&S|Gw5FICu zm(B%5B~eEU7RMy1YAR!jij3)Tr?cloJ+#&|4P1@8rw|TDs$9ec6+yoU$_pCrxwVjH z5X`ul5~z|PB_>jegE4jJAxPr{6j_C31(C-n2fTQ=%pvPI^tTAc`vhN5N;w2~^X<)mVchk$fSSD1-v43RMS@A@Z~h zaNo|it~75x^rgks)%VXIJ$Uxf_Z}GR8CyU6*=n`ByVP*$vd`&zvi{&ZMuXv|=W_i6BQ%zNUg?zJQb+Bg_$J^z^z`dc0x0m*{Zg5gt8gGd#=G<^-;9#9aI zs8_gD$d42Y$0}Gp7@^SshP}eCdP+M=1S!I`DX9Z{R@KQ{ozdN3F}L&CK#u-t_HueU3G z_klpvcs2w268i6I>9IpP278?bjZ+mwO9r~1A)i?9(FZ>GMg6sZ@*95FEwQdFIxN%_ z45M2^!qA)ALgUiDI}d)W)6f4oD1Bk`Uw=>U_hj~}(utoq6T6XJ*m~-@zn*PweP?>@ z`W$;%6h;Nc7(_9~BBx+Vr7(tIpT& zAuO4)62_|X1c0K_SAUPkl#c0<6y9%`iUiY$+{7bk?9om)p23ti6$d)-`1^7LZdJa; z@&UfsTLeN;NNQu%BAyV;U<9(Qnn)2>iJ~eHSAeJ@h}5a%sSbNN?Q95Le{zVeN6usL z>>1$di@=}@7y;rq_!2G5gBuM{oIr(u+)vc>BC2D}d~sl-<9Fi;G{mUgHqGX4ZQt6H z`|r8^LpfD`{p{boxjoy=&T3Y(ngK?$n$@iSn}SAov^QUov{h@wt8v5r+3uC=-#FUZ zIqrMi29%T{Tc)c)Z6cIJO2(=%3R_8G5+U`XEJ7rr$Q`K@($PpY9Rm3X6q-bEWR#)= zTx*d%a9HCbhp2kfDm9O<=;EO{tb>LJxD4mOy?0%ie*4oGt#^C5vnMo^!De4&zq zc!)214Ib|h3r2;iFHXy;*oPLIP*n{$NugIFCBOrY0->rf6%B{N>ZvsIU_*d}e+rZ= z12CjP=B8kTSR2EH$g+}UG6~dF!lu(2pqeO>h?E%+3noCFhmMN(x4WHj=XxK5^)6(X z)9~uLrY~JWe&H%)dsF>j$dU_0SOpA@B0;kTX|=|#poPg%86y*t@(d9v3s^jf^PD>o zCq{-N#waz&oB_cjvZ<*hSL3Pw_Z$6rKkMHXOcRHM!3e7&HT)p_w zH~TdEEBVI8YcLq@gZie%9HWsCD+z71p=YlU27O+5%j@*r-}id`-`;&Q?O%*>6@+WT zItX6uWDOA&lC!b?ib$bKLsD2zy2il4SaH=e{gW>Pzj;n|0Y+*|?HVqkNqbm~i@Pi}^Ax7B88 zL{2K9ccD^-R5mNq2l*vnsYO`Xq`3;i5CRBKz|9+_XeHpNTEQg~BR3t5n!zW|REm?R6T ztm?us#$dFH?e`v#ZZE>ZLdfT4CWu#T4TubM<(uxr@xS~nWDU^24x~MWT2|8F zd_q(3h!!#3kiZO!66mlixPC69-g*X8GcbuM%*;K)=qR3|ge56tk}HVZzyV6A%|&$N zo)}4u;620*qzF4Ndgv+7mWi3r6d*ujiS8JU$FyZOPommOpp&r2%Z+Z>gzgnQDey{< z95e2weBH{M!;r!d!3oe!3759L-m(mO&&`a#aso(|aCxM9I1&XI ztOhCs?-T@2C4}rXtT3rlq$5Q-0K~&E!_;D!`FTl>9OT-q$0#|tN|l8MmJipYHqWpD zpHT5&pMvs{A|EMoPsqDUeprAfM0;c8izv$S;#oVsLM6B~4a!g%c&}kXA%=$p#6=5^ z3{NSv!|X$oRMH7!XyUmJE^sO>hu9cc4`)AGYS9oFThrrNrWwjpAT1_@T2%q5s%0TE z2Bs1W=c`p{tsX+kY!qb7%0N2>w%Z=Nmj`Hn>4J=&e1Y@xm*IDI!dmP(7%4>pBn_Ze z4N^p7KsGL=|6`e)7L?xc{gHdoG$W)LBg+hvXw;~#$IGjaRw~g?jyztJO0|9H@Y3M9 z+Hd!9>Xghjva|Y{SRcP8JqTwt1B_-ht6BZQl`0*0-=o!NtAFdp*>eY^+goGS!?s%e zhP*$z-4BKh!3VDgFIw737CjV&1R*WYN6W+gpcWdZ&KMe7a)1fOOoSN( zAhIgV;gnVwD6Bfkt5W6(z6a#}k>=e2Tz3R%50STf$lD!toeq4vhiovStd~+g$W^_E zAExSunM&rNEP!P~5&<>_F@uZ&Y@}kM0un2PD2BE4&maXu#US^dyeeD<%`-)wvl0u( zaW|?}FT{pFk)_!gr*bu3n!i?GoquZc$YZa(Nqz7^^N#lGmLL7tW8XH|?Y}cm({I!~ zTLd&lY#0>-c&~hU1K93UQg6_!zxN(|+gncRH{G=lcOPx&rYJU)F(~LmHk<@=;l~=< z<3QMeQ=m$UHCD9%E{=$P?pdKvUt{cMz)BU`hy$1bQ5Yz8Qbl{Dbg04jj$?%HK1f)s z0V5`C$XL2lFcP$+{ZJ`It1;+M1U=tX{Nj1wqvsS619J(X5)quD1QQECu&D@U>}iTi zd83Yfv1rV9)6!o^340IJC%syk?pK8GDOn3tnnb-F!NyA&w$9}Wg4zlZN2PB{af%-J zcYs1vr-A~5QLy?=Lg2#$y;f z@nyl)HR{GpWtg#@f>cmvIL=bdhjXi!xG%c5!!Y<%MsohiU zXNsE_2;X}P)BT6SeYD|&oHe!uU^KBFFB^3tg2oD6fS?9Kx1Zrxf9E+o`2H{IQ;(kq zB??_zB{503Bfaw`#n84IU##p~{J?7-xaSui&X09*KLqsqjNb><9Qo3xTiMy|SGU)% ztf|j#isR&-)amP7ufI=oS5abUTv1A5RZC@xB0-fw8XUeUCKXlWPRV7W-VySY;YGAp*SX3OO%fQpM|A5&p<8*e6ElT zDozWNX9_N7W?G9#N?ce!(-^|s6Dm;zi4_X)GBd3R0hnU%jxTzERKszLK$U4sW*jGw zO|)7CXgLv=PxRghbYw00c!2Vl_ZbiD)L9g^h5F+&_NC9xth0E0A&6xJ4!Gva~*>c_W{S0xdT zEK|)!43~#pg0;D+RoZbV+RkApKV%a^@r6POy=XS zFwdzH-Uq^ujk%#S8RXY-%{+`|HLF?u9*{EW6<`41F#wMpJ9Vy7wL5FwE8AzfFI~JN z&9XJlQMZX%go%!eV9n*OB0di-hBYBF$`}C`IlK`86isF0DByfB_H+)&QefCqpZ4MV z9pu+NL|6$X(2FV+P_s$NLW3#`btFqQ&|D2sHPN^lA*#i&)fiF5BCbSgVD#n=m5KwQW$n4v;MrVtAW6_L{c5m5C? z-U(EkO0Gbrl#3{wL!Rf9XBl+lR0bn*!xW=_ioESG>w9`SZXpey7O~yNp z5Pk1)#*!6umC$y8yP*j#^f0UhSST6>STw-JKJeR@6~FZosVZYWQB-4smqJTXc1}9> z0V$Knrn=x)u=pq#7c$k27l^=~u8JlMjIqy=u|QlU2mVpUQ2EWD)Jyv6*ofr%K-h4|?b+6beOG$aHn;sjc4DhAs*I*-4I!P%=o zeU6bt3K=`)5(a%D7U4L0zJ6rie_HRz?$=v#PwUoOKeyfKA2+Fcs~?SGSY{XsO<~0X zLyPpT`o9g;4z;^$3S5@7}V#0i3yE)Mr$=fXFY>U1;%nn zy`Pv~X~8@j3xiYvHUy1;+zECrXQ(tH*vKHN68vDII|`R`GBT&e?8J7h1VGDRDZbS@yf# z3Jkqvbk!%1{p6?Q=xrB%oBBtto(D$1=b(9j`~_eKz{l~RniG#ayg%;_AK$vX^)zMK zF;#y8%(u8KT@*huWQ=GODWaIhPE!HwH?ROqtk5{XFFse~IdtS8qXGGyUD4|q$O+Wc zfVc)b-$HVrMb&+CsI4|pTdbqHP^H>Z9n`3TYZaIz(x}cb1rn@YA+7*vJXD>kNHEnF zPm@a#Q0G84(vtCmF+^0Z{pDOiL<+CPhG5E7J48@GnMyoeRkZ-%!}F*o>`l`vAR+>R zsmQz6ai~F9w@JwWWD0(r(Lkg$q=q$+lAK4rlWEo+VAvU8)Ey%2j?mj0Vz@cLaASbc zW=~za58dqmqaFyE!h%q(D$UoSNd<^wXjJIUwTPURGG+|{G7bK13K5WVN_kH34h+p~ zVzzv)XNc*NttQu-Hy!-lYOVFfb8ozSY52eces{K0oz;JD@aUDmAS#YKra_}wef_qB zvyWg_vzpa^>4I?YPd^d?&AH+A-tFxRSKmEY-+6QI+U7nt=*1*dg)tSiHc}f284FlL zYM93v@!^P2pv)jc;Y+~`NX3zg5=4R2D~1DLI0S}6h6}sX(3(TNRDxlsje)2JRO@P* zb=YPNwpk%ttB`3VA{-(2%(g->b*r`>A*v=y#;A=WHZc=hQX*AbF=Q)5CSoNfg+&=F zqW~FF1w)lB)W^)E;pEl1pePcjBst(yrM#OVAEfGr4z8z^wNvr^A$)fT-yXp4cHwt- z2)$jxu%pQPfGG$j>cPgS#;h8}KvE^t8iuM>AdUsrcxA(6SVL@(0%R246TF9t4_X&5 z9zX!@yef$=Qtfhub4;Dp%*LR z!G{>9R|uu4rYhlm51ZpxTz#;9X@P6iH~BpKGn>y|e4C716V(cIp{XDe_Re6pPkL=z zDkk+yZ+)G4*Z04H|Hiv-!HQLB19aVkwu+Z;xbQ{+$fE$}!gfS+1serg3|%omRh2%u zP57m=O22Uih-1>Vrs`Y*kP7EQAh7l_)y=-gLc;i~cN4wyFlgQqPN$Ge3l)Y5q@pqD zp^(K80WDVSw~#yo{j0NzUpo(6-vN#;kj7EyUJ9nj%e>FWNqp1U<`bD(Y3drxk7&v< zxcL2o5|kXb(pskWA*7>eQUOH?aOHyF+VdkB?Rvxw<|qaPB&tQMpC9u@0&77;>S!VIZP1 zi%sA%U~8MB<+;mde(vW+ANqm+^Xqk*tUd67cOrFvXL$bXZ5k&Ds&zsf0Z>MNq}c4L zaYCy<`2BS3?FTikSFm$|;4=nH5lmlt{{WamZB(TI04qwP5#j0!Lv%Nt+L$!59Pa#5 zY0DE6HliZEt^fp`17+JeTKi&MIUeik5reb`_#C8A5(ZdFbj*b-UrupI99Vv&r3riZ z9gOK2Z5NJht$s*u}QOn*CF&{hw0 z(;D=L?@;}gRS+@gc_GP*lrRpEL&=3LeUTI%hy>bz;CR9+>gj`@zlf2{=Tn$?dQ4gwbpN`-p-Bod3ck3z`zc*z1>-+Jx}XDkIs%R zd9O|9_N>QxDbj1ugEdRHA{IG;%)_t|e5emX;jbLFVn%^MkUb!RJs2HWWHqrvoHq>i zQ>I%C@-Sl)u@(fbzKF+bMw>BB6#>Ec)7~=B5#|Ce%3fG#CH`K_iZBj&nnrG3^Wui28tAbRE{>F- z(F7c3Bg%T?e&|sQJ$h*|CkgD&hYByGxL7snmiMjFE|=;T$CXW|h2E5tozT|SX@jxr zIoQ`jSmSotac^>`T_OD92&#fP=tZI(T}hru>_i%TN{xglw7d4Gq)y;rYGnq0q8Qw< z=oVAe!+5w*>qY|-lHT1HGT#l>R??_6RA1vmMeeG)!qI||j}vp?EJ}E|p=h2!RbBD_ zc<6QB-i>Bo%7Qw}aigTSUpk4)U0(2~K5GBf35uIlrFvB@b$W0qBKsV!y`OAtj$|-?zpbm<% zEFolm5G0`Pe5tL}$J8ru)}yTSCOf zA}?qd0RcJ*C=eXf+zl@vKpucjRIHs1QnRMfV<){9oz%wb~d& zwWEt?RW8TGveb8PQ|65)$Sj&Kk0MnnHV#CgJ)DyZz?B+$VW}T2(E&eB;6)1mODf<3 z#IfKH<2sI@(_=0+$Hd|i%6nR!FBhrHT6z2Gv$Je6D0(3&{RC;=lcvE1?C440uC3#A zzS~6^8`3{IIv$7l63DR{FQjZysk38ak(2+Fic^@hVkZ2i&x452Ygqaa_q;bSLXQKt zfE!q$gx@OE>i5PirL`VqgFIY@4n|M#9<`D%qQ!jcSQ;qJC-Novo`dHg{2Kb6DerG7 z^U9WZXxlGiOa&`mi3!D%u)Q(x%q9}GG?1aW?SUVwvA9_U;rz!sNU5@7w;>;6p^{Rg zW*O*gi*c)9)qY@|ifY;1-TE6i1! zRNvj=OT+V*?ZJ=fkt~Dv@uNbvTrFZg05gj&cwa6UW1_yV(dqg1B}@9j*W~>Wimd%Z z^er`od=Z+Agk5#$Jy{v0<`5<>7hp&NM zGXaF)r2jLATP6;vG!L_XKgeMXJqfXJP@x8vJQ}-BGRXN|xt{A00pb47#GYB3^V={ zE13l%`g?aZ!fG^*PT>U~)9ei?B8N{Oz$z_?eKfLHf(!HnN#w)821{$dKJo%8WN38^ zCGAg{5&R0{N63Fc?LlW+h)3wWa8u&BaNTTb6fllk&_n)Vm73k(v{w`fU;KG1wS*VG z8TQfZbRao7(23qXhr0OK;5Cd%2AxihSztppj4YHct8siXG}hJ zXOm=8qmHV8^8`v-Vd@&(s?$HJq;C-v4FJ=yvB?o(GC(>ihdHSZLllRt$N$X1Ls$?{ z>& z-*iVjGzN}lhpC&xYpw8axc_AvKFaI9UV9I{|MI~0&7Z`_kMq|pl|c*6D-n2r!iAf1 zbIt71)p%Lcam@DnU{~+Grtc`NC7U?H+W!2?vbB))QOH!>>bE z99fZ{O=*N+AutLJOkayK^pm|2NDl~v0;kO=M2P)}537x&=gT+!o~@mQ1a~k>{ZFU- zs!?`>3kO95A7Uh8@nlJd&LcSzLJxshW2#YbO*)wJQfS}g*lCbvmypGDFw((OTWFezh`b)g7;1W?hYOc_V({)UQa*Ia*{nKS?DQ; zB%ouYX56x8+_YaWUmTCSE(hM%b-gZ#>B(^UDCZxS@;>QkSS=HPRKx-P!izK1Gqy7F ziZ#R`ZN&UDYSx_5tSW|+w1mNXm@tGIjp(5^x_YOG0{2zEPz5@|=AZ%f4ZQhwG`x6% z7Z4s*@3?(21G>xfv?5(@tYU~2XRmxfEBh*IPY&&+bhG;;Uh7z>x&Tg1XOfmtF)-0XU_fxjlDWu2qE5Xp* zv1u_h5?Zhp3@l{6_`0t)CsC^|KNbr&DZj@A5GE5QK+hy>6EVh+eZnj-d2?Z4AhpgBxW zg-_{QwsPds$%7CHEuPM>-02$*4!{7kCh&xA}TGj{Z zV&r4A1T@&|Aqq1-&=>rHc+Q{F1RLz?%gzbhG!qguc;sv`s3o}tFtj%EOCH|Ldteel6cK36|ibG5hUh>S$p8=ZS~S& zM9)z<$Csucu5b%#Q>TKpnKk!S&b{$ z6J=LTSuSf-Ac;+bl5+QV-j8rmYlYip0bF_G_tViD zzHrc!dPNxeKBrlfzx^BPdx_5P4yV{Y4nHAka&gIyxs_p3jqs|XMx+aa6}Kvnr^gfe zmu1TL^sIN1z2#Qrcch1Ul7wNy^rsQ->u!yjpi(~4rpZ9N3I#b7I+T@|b#KH^zfKgN zbMRg;o=ly4fRq@w77QkqjJCO-5^Mhwu%QpN`yQ~XhZ^#$@c^LJY^ptOptB=$J`U4wGb+s^IErg7QCuU+tlt)@ z5PEY(!G-9rY!kTq+}93KzX&IMubxgO+NydJE>sO(gO>sK6Ek$;%{<-muWj{(JpE}a z{))Hveya*EkJKoh)!wWi1zicP46YcoV%0|0g5G2z2!TJWjRI^8<3ICGBo_ZO!Gk8;@sXY&O^%Z6u z=!U%y-8@a`GbY3YY>EoCfXSzezq4%PQI?jgfvr&0*oPDu*K}pq*Jxj76S=jc(zWw- z**5%mq+0fS?M;8bQ(l$Lf0RCk;)C1S=n;97S?E1of=ze-epYAb@5PP3X@>7?Hc6=C zJ=x)d;D=ph97d2ou0Tx@7$82s>o$JG_ z64!@}u?e{xHgO;r!HFlVQu{y-(v~GNqMw5yw1fT;np2dAI4*%gW!R{tgc+tQj$*6I zD=;bvUNk4%BlIx=)AEgec-lK~A2MIyaic2c$89k(Cm}=!l)jWBRp{Z!v%&Rz2K*AH zU3G;-U>?C3keH#GK?ymE{7aIf42|yTbYa+_aT1$@jv+C5C~_w-9_9z_Pdj3?0Sozv zT42M(XlruEl9Z|W&CTdQDjmVU*AsPjb8*0WQ|wW7FD+^`l$8r&0aJXCDnt!H29nS0 z6fJlS0iL8FTkM6YAh%r9y*9+MT>xSiJpji8z}0_z)`FDd3;o~b4DSWsk3)S)SijP? z%|7$Hxly97_3Ve3uRT*y+x6H_peN+#1x!)$%w_86tNiz-g6hM(!mrqPRuXLq;pq~yWe+3JdY?ZGfeL( zy;N815GmknA=$$>?&d0u1oQxMFb7cb~)B_c`88;XB6*pkPyuX8hlC=IZj` zc-Nz{(_~HMY06ocYiZiV%iLt3;jbWKXn#MTh^2D)1xGTMyHG4yCr+opN3a-G1+;+E z^CztTjKs|4NppW6;H8Gclodrm@U&%=8^vBJq0H!JA20{A-WjP?=T?~dg<_0Br&D+& z8AWY!NValuxI9@bUex4#wv=(`esmb3DecF4iq%xgn1pJ@=aSI4Qq9}sy6OA_^j?dn zzgyW=LkL1E`JEcRQ!QV7z-(VmnOf^$&;-N|!msMUwUY1{xC&f+{Mrs0a$lM?w7js# z6a*#~_FJiwjD_G0voUt?s-{K|;Je}Ak&#vWl2lB^&|q0WC>Z%GLvg}Uz*P-%ieeEY z52K@nu7N_*%QdZ*I&fcmx8J{wvv9qxZK3ub z2RywZ8S@)70Ps#l?Wk@7M?Ei}N>gEEE4y~BvhZL58;UbpXiHLuAPPi7NU02j2S5ib z6CPy;-Ht624xNsb!?sidDUJu>U8kmNVl8`gU~*_4Kp9}Fp#LWZmz#t*smLEKfv``-Km#4AAo_kHTXI0kbckbHhtLfs>E1e!3s^HTK+QoWK zL%79#OIr>M!`hpBz-2dCRQP~4L^0~6tC0fgS=J`~qQwSLkps2HbYzpDi>yA$4{rhG zc;>JA5W3;OV8sO4gpXmClqunjy6OMhP3`i6Mh=g6`&^iNt`>&0me(g}?~WUghoGyM zMu=IeNo-VFoWh+iW1k%V(u&{{{|lbY+1Jsyn zZ3VmIH#=DBmxNmuqDP(_6eX;W(F6Tpq5y`qBWzF#U9udwL}BZ!JvQ;P2sD)2tj^Z) zjQZ zM7c_JvRD%>kiEVM%8lmyDFaKjeN)V~S1?o=T$f=HmOdL|=n3^wYuKlI!P1po`|uRl z-SZOm8Agn^4Bl-7xMs+x)G-m_6xqNe9hRJ}_b=L-aPK{RHY$JjKid4e<(||3en2>0 zZ!j6iVxGKOAQ*u}1B6IqK>TBkEsRY7V2bKuu2%?3=bZbbkvxx#!K8>>MmY+|Jq~>`_7%(fAWc#AV-z0q4omNH$wMe25QEbWQe|>GzG;Q zhM;oI{FawUMDbIl@b{UlRUv8X*3Hlk$ty8qNmb;dZA~=&mz5Hcte|@&R#qaYS{us% zIXpujrW71BWZ5NevUpI15<`IV9b!s5)#1*vxiv0A^p{#dSGe<+hJ#bb~vEeQ4vX~6}FWo z1dzs#TVO|^D$a1V-|mKcO0(oU#w^J}Kb`tIj4Y&Jo{^!9cPe{pPV2>>k7#@sqgKRa ze!?r&YXzBkN`2Ff47uO)Yjg$C;ryu-+MH3OfWx9=8JoeUJO_%8(x?Ge8%ci++V7To zq9x_nza7S97;NA|y$;C-GX`7g`z_JulH$@sJzw)u-D!sb9^)6|~U(VaanMfb`-(SLi9|_+UAAeZJ z*3^N@W%AlT25O*?7UR7a*$(+>Cic{7dN*{<^!W4mKWdxjd&b;f;9OIde9{O~{DSO) z71p%TOd)BaSA$95qOW3H&w5nEwKI;gGsB8f`Lw6oxtRQMydLO~?-pq*u&RgyqeD>fk12uqr;ubFs6PLSu1Df#harDwsPItmR$_Nq zIW2ZWc0q~yAD@u45x(7h5k*@H#8YFHCe6HUpr33(sDRXNVq}5My$TfeL3q6O93e-u zKKTt@Vw8B>f@kf(h~MR?aNkhs&#TDRE14|hWHCD^(Qc%9f$?y>b*~qFqgx5ns%tra zc0ebU6DPqyxdKL5D+|)W>^4b-NJCKiYU~q1e=7<$iau0RV3Ian$ST>3=-$55rTab( zmtJS1KC2z%pigvL`rx0lX6OMa2W4b!2tK$q*@2pN!L8HvGu-R`a2S=FOSN4 z`%9c2sv8>gyg&Z&XWU+U6S@1H%U}5gL6#(dVp!q$lKv}$oogW4NBnl_i$N2lDP}Vp zQzX}^XWeI1C!Nt`Ttjp;NeaOwg>h-x;@DssSQK%_D`O007$iql&`72U6M+<<5^`G@ zj%e*WFn6kmz)}k_h1JO1{1i6Yj}nz>d;SGfAB>o3YE1(QXl|Cy;$uDbAmUDJH3F1|KO^0T|4Gcp zD>$N$N%9g_h*$uz2rCX#z$W4=DRSH4{Jg82mwM0EW7ZuRku%t?fNEk4fST40wf3|w=<1}Dauhc9z- zirjn^WZ!a6)UT6J&GO;6Kd;h^g+8d{^yy{ia$x=_9BOFgq{ftpGH8HIVIa=_&peG% zzyKoYw;OX-LobZgLmKwN(c&mz;yrCGvYpx{yN36scRKmB@-KQ{(Rml~J+p*r-u0Wo zxm2j|BSWx3WLNzA>aH1cOHJEj@BT#j1ooAAa8X*Uld0cFzh6 zSx`ElHrk5D-9m(3dl6{`(M(UWc1(iES!#Ki@vyWA>ViAf6)rn?*Kq? zoyvoVmBD>jn+6zzX93w(FMa93{ma)cv1>iq;ir1|<~T}CA>^9+Q!0uP+!U!2LdY1W zr%mSRrMA~%gw;04l}VV+6Xa?L1rR!#^^1{MPU8l!DH<-y;aHRS8NG}skqN=YITOe*>$F+7qp4X5rBRyIYN%pb0m2ZTd{|)| zp;#%<%k*Xa7qP7TYAz^Xisb#3KKsuDG;Y=Umh*AZ0i(Yl5+ZpR$lqsYfUvbz?wxah-<*mCx>Ax=%NcCN-#D%iLt8RS0<0DDMZ7W=xR4Pq9zD#!0I;& z{VdZ5eWT54#=e&n3qe-)-{Ef-`Dgv}OD$GfdO$nkejLC<`^Umrrib~-auwY2R^Q9J z``azqB046YUNsiyjAb+pkaC@iKP zj43+ra&77hcRAj@)6Lo$tiHl+&ty+hexwG>YH6EZeR4>+4Gr`9);b#f+Z()Xmk2fv z8eO)~;83Or!X1#pIP!h5QsusL-WA5s4ffQ4tbMbq_InTl9xn zgoSw{xDP!!B)M?#M6iB&g&vrf$z|Iy-Cq`A@G$kAq7h2(d&{4vr?Z>Ajh4wSKCr~} z!UKy)U$@}O>#5oH=fY%pFpr4O710H;|4jsTaGsq=a&PrQ-pVcfjY?o@qo!aP-cbwe zB^aD}2aaT{4$>AZ2>Ui3LqUt9reTRN1fI=hyi2xwoXB{LeB%-9m>)?MP~TVHh8q#@ z7k|L38h;r)wA;&LiDp?8>cxc5blM z-sNn6cQ5?VfCrM{p~S&e#$}Y^vAhx_;t4aQG83ck+4saY$(NN49X1!mAE5UUje&sq zZcfP=Rv;%O#x-QJ5>1#b?TplQA1qy$86}%+vr)&pSJh(kLkhW;a1kXcSxG5{mAh&) z9<(Io5%9jQ>Y;&vHbne5T+CsAt|@)Cj-!51TC&=XpmeoGa=6WLj&k+mLJ6l>ZIB$= zT#|;i6_y!MPRNB1w7O9=UTVd>RPT6IbyNQF*Y-x}JAX-AYs54AiX+hQvj&tGLPahw z2z!Mv6|RE{4^SMX`jxP9Nn>^j!O({5eK)zF=?oESYvkiD<6Zivw*EC}^8X6r2dmqZGcbufEt&t-e`Ek)S^Pj=Td1pq@>RgBVkA?gB zF6P|v&dlW<%YTKacvmYRXPSCKpyg9XL=HjO7tauO%5Vr7o^@YD=mA9(CWQSk9EE)1SpQcTbEn1(< zi1cdT8~W|X{r=3Kb;sRibJr4zv`L_Aa?0Vy0R_H|kPjt(Jgr+l>0MD$;r86^EpiMw zS_^Tbrfi$~mxf|9#X{@Z!7ICX^ww6D@qIP zR{zIOeWzkd!eg_n_mb|H_UCw4pONj{`|ajmW}h47i@1FTDd;Y(hAu5k?|r;pfRF#Q zT-t?QFwfOHJS_K8jrUk<(=p?bIeNidbA%vBHbN2Fv>G2PFcwo9Y!~Gi&H+nmB{wW5 zA-CjJ56^|g4ZlGx0mTSUT^gWWKn;d@2>&(RdrTeuIw2lACvuG)~UDGa!gxBfsj7f7qP15fTe&M3!*5>SAe0?fFztH3Wn_R9-$TZXXPsv(khJwKab^ zHnM{I{^4(oA|9JzHLF9g#1x1)vjzPguI{z4Is6~h{H)%A9fC!h7foC}M=Y$Itmx%Z ze|2jF5v_itHdjT+L|%^UUk4~bBITY7yb_X}){?kTUDJePMnNv0aT-glDqgZ>PKr5F zhAEv!MKiP~y(Mrl=vm_7nQeEY^=B0fSQiy_fIB?qs#| zpHXc6LB4#5^`dJDLJSJV3-$`DJ?v``DHEKnI$A%vODc{uCK?n~U&Fv-YI=aOA?UC4 zFcObZuT&O(so2dImIus3wPY!C1-^{HkU%e|-W(=!QZvPbUIKsyBr2%D8CjnML%2cd zG1O9$^)J8{ehe2umBNY1j>(0Ygekm4!F4!U7#C~U0@FZwUS;+#4(bPj02_7`tHPQO zC3!70S@x#ltnKu{Tt`}R4Mq{+C&K|-eLs!?>7r46aJXg2GR_xu1<`bS7r%xd5{a7( zN2JsoP?&`2^kf_yX%kLm!llOe{DeQ}fwIJ(l7SPgB2&1pi`H=G)*xm_T@b^{Oued3 z1w0K>NV=QO$H||9=x;mUyVrIcDfgX?$afVTXB=&e5hP)*xCPq+Ijb%YDcXOqm^?+( zG5&r2cw4{D-|`XrxafN>dY+%g->SjT#D$kvyq`kkgKOM4Rk{M!2|XG&%{=#dIK2-o zki9d1Qc@%V{vOP!aO0nxVz@S?b8kff0~-;hT;r5OoqhEdhG32U$tCI++~kf9DJGl6 zW%O08=wIKb=guAbl1bcp{M4n2weKe383v*$*s2Xyb(i5x6%Uj1UUh&>#bq3pGH198yvTp_X<*6QAp}o9s_T9=Bz}f0v;kK!P z$>)W5980t-s9nEyG9PR=ODJs*Oje;tv-0%b@;^_?E+m@{GDH&fh_quyY*B&iu_3#F zNQqF1C=`@P3Lc)J6n1(F8g@Rcd>78{pPp-d*hlUHh53e+D{QaB2*_9d$UfWuQN1sq z65=f8eiIn|$C~rGsUep%9H39aE*~_xyB1eRq6Tzd`G!1vXn%jUlvW|kMU+LibSFL7 z6*J!m0l7=z0AX9ve;Nb$;+d(tYMu>hxNK{PJK!%lKAI4`phuri3*GF)+rE12?~A|Jmr5UT z?@}*^;r_4caK3$gQd@Niv2lDy>D1|rAu`Co)bRw_j93jG@}J!%<;BPUB*UmQsUx(~ z8-5%S_U>M4bRQlIcism>NoB?xGwp?77u=p^aRgvKENQ1Zyk zjpfi$OjN;!oicwb<%`(P898~htDx=?(N_m;a{fWG>bJLI3vplsL=+-Ro?>6*7)w-6 z07DVd0@EOLp}|mD;5oWwg!~>@pG!i=O6iKxk{W124sx}y_QGor%OX}NKTfh;kRjTa2ReUnSuECTen<%2B8N`%u1Z*t;C(vE*?`>1&zqXKZ<!&7-ENHBDRc5 zZsX!%qciJ@yf79HoT5$Gp{A+*6p^|3K1{OR!-PCyR7nt`Nmc)C<81Cx+tXUPL5Sc7 za-pjFg6+(pK(9--v8}V7d~MKge|*VVXaD_dR?3>!YfE<&6o1?nvs4&c&U4*HTsd5J zSeb&(`iR-+^vbspS{wKC@--W1J1q0fAX#42cfu$ZEN3g9+`?4X~)N!pyeY zsWhp6lU!MV0IeM{Z7BoMiP6q9tQk0@8}8h|St87+3WJ6xNM1IVDL@GS|5tM8#*tWZ}jA^SW@@%aZ0yMwJez$?=IVQ9Lh2+GAHxss(NKgsuvqhMf-zC9F_ zuIw$fz`nn(I~4u-9pbl(6n--}G+p3r4!2JtiKKXz3~y3HiKTX=S1TgO;A!A}V%kM# z!ppXH^@R3uf>O8n@HkYyb@{Fmlkiy1p9Wg}703FZd1&>Cb3 zr-vb8s#2QwqlaV+me7_M?Xx?osKN0-Pp$sQXKBgwOa|3PI}4nCn?9POn~{O;u$WRO zPxnI4X|Rw;tuW1w-Lz?Hnb*%+--Mj&C}D|z|EDwXi8nGv08H~5G(A(PJZwXBHa)(~ zk8G1&ifuarQZH*x0;{0j|K%2Xx*Hznn{S=~p0Ow6aC&W@oG0}pU(F0c)lNl4D zDeuL4h}UF;&2?BPthFIQ$+cgqSciP?z^O-zS1;RBS%%xI0|h?z)G9_jrXy3POzK%(;QO#&AszquKh0|TgUov0FI|p=$~Pa zx;h(ov<=UXU;dW^aKC-umZiIZ=8t;^E$;{SzC%^n(ZRoKeo|e1%s}!GN@HkUU3UoN zJZae#2G;sV@ACYB`~f(OPm3EO{H=sNZKhwzl2qGV1XiNNv3jSh6dIxJc>>rgv}13 z&qvg%s@MiW+ac(Xl11>RtfXso=<1(j&Qcv!npk9Xg1JCAr7Os`g#aiXqfZCG2!26g zxWPG8`Fg>0jd=bRbZdBlROpOcK?6da22y)?IWTvoM|~nlW#ku%Pjq5QsQuX1O#@yk z0iDCi@E3Dpr4$gnS;1TD&a-Fuzm|kJoKMyPVj3yd>}a z?(PO_I1G2W{r-oY>06e!GvdyjvooFu#W9JiUXMVcIZy%GqQZEwga3Gx_qm+SRQ-VzDPwgxcDGM7PGqm(p^LomV{aC^~Z_5E%CE1*;ty|NL;At4?(!2F{{#k02U* zOid03V?jF%l+yTVQQ1@lnV$DKDR0*_J6A``G&1cr*DWE!TLD zPLQJ^Z(l3v6uaGpib$F60qMe3l#zh`>j98E?CURN=%JYr-D{pLLO`Dnscs~~wiAAP zB@8o>5u8K^<16S{aF&mfLO~>KfvLi9(o!Dau(kau&Si^^Y5he)(hz))JUR(I`hu`V z1C}VD#$BMSi!1Dqr~ai}f2%Z?ts@`| z&}!g>;)m`7m&aT6_SICS4eB>0nX8FN!7z%x{Je{7x5qt$Hyo2(Vmot^@zOPG&5K~w z3%BiIuqxMdiAjnKe!araVMtq{kOhhHi46Uel*U3y>?7L9XH}ln8g6j5EKi36_};!! zs)w%;>g?NB8Jo+=UMvUQQ=uID9EQ52(`LB3EEY6HC6Mz(UQz$$XFQ=d z5O_HZ3O5P3iCq#%u+cIa(Lvbzu~~v!CY0T zRfVV_9z>5R(Lk;Q-4YSoGAUuCVU*H{EGW-LW#eujihnQA9Iv9YKARe!jr~Vi&dJDfo7K)W1-40blAE zG3D3rW~5LBJCL3qd3I)*qGltS9RgEfD{!GsDGabN;RRqq)S$02D-U^mVS@4Fv4P9E3Z(Z@Is+O+P3(e28YX_+L!Rm(YDorC)YDuQ>bH zx_iFWRl*nRno6jm|Iqoha>3#HLde7PW9Q=$tJ%#2hL&rg2l~;(3NNL3F9|nG46PrU zeT?0Rxj)h5Pg3y(6GLpL660_9GNVmJh=9-!egy5vpb%+<0a#ihM19zmjN{`T9A@Sw zcI;x|430=yEQZDfYfep>-InpJeNHa&0y%RF8f5}gyg?}#oIB@}X$@-PA5LAKAunBK z4~hyqEsr92rW#QSy^vXDm7e}N$b3)yJSCH`3rezVSB!HMf2TKLeYSu1f4l2Xqp%UM zBFtG@0T{8GuFyU78TSJxkf_y)_~}`iq>)O>U;5en&zXBZEQNzNo!L(MJ(Ij7Cr#!B zun0V0_~8XpkacK9qD)^RpP-mTHrFo%#cMq7b|xzPpBJE3?P~Hr&$fHRUTTKT2lmMc z+G8Nznx4cD`;1=mZ;vnT!yDV`;0F@bG$v7CSjv(~sz7!@TQx_Yg{Tufg>_N@1%9Js zK~Ea~*GQ=2jez6i^_lHX*qp1XGSmt&hSr3L3GUd-TKp$9s)6m$7Ujd~qPrRE<4^Yn z>9emrfyMs}?ss&D=tojXke59x}NmRB;5iNrksYfT=YZIG*@99_h zZH^=f&q`Qoj7kK*igW4`UknC#V#1@jdioO9a9R+AM}?ymutyAzpyDcE=&rxPLPmBC zKY+D4@LrhxHcCottr=(n*lWOOi-906y@6L_AzY?J1G_{r_rX0b%!Z z66B$Xto{5$aUXPQmIw@hl%Zsb@KcDi>j(1K=szTV`zUolF>YR7&sVQes0QtFHt^ck zFu!&wO%atozi{a)Cd0UNt*vd5rz!vEF*xR|1(Nc-D7J2oo6XwgkFJvr=P~X`7BEj} z!-1uwm3xZ&T7-csUYy9a7xR`Uz!UGd&imGgMttYT{_%>auZa>iWYq!)a0R?@mDZY$ zAwT7*B-FMAK~YVpQ1F84lWc~o~F`)eOf+Cj02USzLqCU)ALrpC{{ zK$YR9e$9?m#jXiVgkREb9w;eJT(+$Hd!O%nNOSju=7W0{pO1nya0;>4L70Glr6Kgg z*rlsrmY#;UYj$o>^Q`~YpU-7^*U7}D~uw0+kd%l>eIO7+9Qa}n|Fq*!8`kL^b{BPbrl6DkIn z#mN1D2&bOo6gm%-pW%n9#S|5E8H4I;DSXyT$BF;;AVnp`LXjK2dxZQ|@s9|m-gA03 z$xBE0w$f#lvTx4f|KDp*fA3y37;g;GKl`4h+-|`>z|I^qu{eA}GTZ-H3%FZPF>jkx zbY+gNj*kg1uhesR^4hhl)}^90@{730TelfbhrRu*&)1|+^;$do@-0gXVatmRL!Y$4 zCKjb_#qpOwUqxn>_YoB}3Y8h9DoUhGTIOEFxGs$?2qiEg6(txsv4sD`2*^zwIEPG2 z)Nm(}N9EYV>inhdl;sP{Es6BeQ?2;jio1tu{Q38jH6NJRsF4|ldkr3#h2X@bdT1*M zIWWMRmK|nQXLY_3FM-X+N3S}AN)jpxk;upG+sz466x+84kH)c|3Kh~4_xLH=F;oMx z18Us)rHE31iU9eZaS$Z042}}QC@=$Xv(t;VeF*tW7H40uA5pQ|hKn|X(zWIhic!!H z!f_TI&RE{cwQ_|$bu%6)js=b~$}92q@j&8P2W<-_o)^?B1j5$go2V(C79L%;1y)VR z&TRfW6|@HN)MFGd>LWTK+M}k|Cxg)m2;oX1>5r&XDGPWl8@#9sOXTDvP6sWiBzt-A zW&xQsFh$?s+4Zk>_Uify*2!MsfAIF}L&+3H8chq3|4vEvFeADrQ${6yf4b~@ zKRkMGpHfRDdp*W*KnNxfz z8E@AQHmXMmh{T@xLoKE-)=kA*!V76hRr_Lc6OcQTW7 zx+6Yw&nNG8m9#d@ouL?&Dsu#>Wrzj&1h}>oI3}(HO^+3UR2N|@c_SCRMow%=y#95Z z{hg3z-Dwl{CG9z4t7MlU;<0L?(60his*}XXNb|2`P2%5Ct{)?7CE;l*lRnq%_unQ@ z=X-4)+FktjDVPtnu=Sy`!m#NAXkk+I^YINK)5Uu~?46@1FF7q3rSGvJeWgPUGF%5W zn_!|RFwxVfC{eTSb5`K$F_dx)>0;5308D5r8%&rqgnC&1PMqza)e!xFwx*?aPJHg1 z{jE7H(xNg3_kM5xcjFCwNHK{o_5YGR`)4`Gl*VbR_wtl>J}=7>plO{)$R&B)DW}wP zZ-e~CAjxOH_#$ukZI=EMZ|uO`>}ay+4W(*ff}0*qW)XnL8MYX$&PNe}|43}N+9+3& zM_FMR8qZ%Vp1HJ# ztfL;^tpB^Y2-ovzG-p6O`YR)P95jPBgN|N@2nDHw9xuyE@jI(5C`1qdpMnG8Dfk+I zi}VAnXF=m@llbF`#?Gwk$RV&r*K~3b!ByT2K?MOqE~=l9obV-+9^%v$d1=OMS}o&1 zOqSY5GYkNgpssQnumItCQ=)+c#<#K?{F4(RQbe)g%A7dBmv8Wktsgr+o3o5HYjcKO z*;05H)-X-Yqy#G)Zz-Xv3^@p5ghK*hVI6mk@2cLJ1_l|44jGFhgJ*_u(3{|c6w=m6 z`4}}lrcKtl z;|!GmAC;-TqJtj3(8x4@hJ9nx{)$N_CVn6{3=ro51W^y$A5jKDmFsmr+*1WzLy){( zj%C}>kgRWwX#tOKCf6l2;7IRfl6mtj9Ddsc;Np|lKsD0}DUOnNxdg3a4=^2K;~F>< zE^$Su)L4w7&l+AU$WcSj^Qa6)^F1W)`5TJ2U&%$}V_&T7mr`Y|5vr>g+K{l27#B99 z9|6Q1nRQdE@)`DgFb7LnYAO?VX!CQsH}sl)jqiPMeX?U?|4*utiB%N*`Z*{HXaOy4 zPj2Fl+zkkJ!=KsV!pO6uZK!9KSs||k0q?cG64YRO8kgV}0Q*hh0=f#({uTVMUR-Z{ z;EH%M%v= zfAF?s+(7PBhb5&Wj}iOpe>@FCwQCn!9Wv5+=Hs-HHL;AcIse>vcrn@z!3ctMb~!vw zpx8eiQ`&iWl1K))#PvHpyk6qVgch|2&dW&~UqC*JJs_FkBs@$EHcwR7ycH>xo1!hE zic!Wqa+C26ncTL|jE=lUW+)?$>Jh@8PH-J^AosY(=q)BJ<)874qEwT9LK<5L)0JV2 z3POfz6vyBMI*kfv=1i`n!|GyeZeq;)@B(HiapRgtdNmFwiJL)08#pwTvov3e?M>VE ztIOcOX~q8qk3ew0O}VwIzGfIH$P5)c@W6(Li~x2Fl0raJDmqNy2ZRQ%XjrxIh7J7^ z-~p;Aw8g-ZRaA1I>r@}v1%CM=(MMnO7-oz{m9R2TXvLxcsVG5n`f95<@xmX06(ALkCwJ$~lYn>w={ z`&02@@X2eR`TYOO^#6ggXSJG$3kmXv}qL%pr?00 z|L!-Q1WVEN=Q?KT$qzMt1L8Lm^-raI~?&x z)%RZ{$v3L6drR-k51q(nQmk3cYF0Pyo9}-Rys-j$%?U(juK0Hhoc_qw5njv8wM@aO zC=ORy{)d}E_pJa41ebE7DT41}#DLLqs{>_)dM=Fr10`CtkOP+hdKN-O&}680O22S1 zm(N~jS zq|jj+k!Yk~qfAU97T&Xn8Wk~Y41+m@`4TaNRpAIK3{eg(wFEk@GPn{$i3Cat34KGb zxB#grtHJ?F6d9OmEEHLRhD2sCE1BTA5tdwmcp{DyW@AH-!$h#`K?IfHOD%Z@8D*-y z5$Se^kUOY%4DSfeDX9=g5t&9E)unl~ZeEh5iI6fCN$sF&o<$NQA-0v;DZM z?QXZ*xT@S;3jOGAyIgM9<91U8E>{^09u(lA3>HWRB?w6%DK%s&Q#mU#V~#uDGw;3E zdi%%Pd!KzG1?6gEB*9tF6UtEBbI-Wfch>iQ@6Z-$i0v!DjpwEs?i4VIVcaWUk}u=K zA+dU-;9Bemnjp&&VF_PA`P8A9I&{_|9lt&0%7%puz4Gvx`Vt?K4^2ITFB5zLLWOT{ z0KJnY+PUg*`G5Y9KlsEGQtW|^U5s%+<*HAeWaflp8Vtv&YxdS z3`@{xeRt>2O<%e8Ba@e}ybVe0+3gu5iGdfGd1_J+K2~~iOSk{IcVP8gU&?{ebr~8{ zU4o@Lt^8XV)yEKi$H)M24A@w_c{SJGl?>AZhjhh)kqImvNro&1Tp>LT0=!q_+Bfip zV|Q^C}ZCa?j^!cyn6nR2fx6g6)s!U#^(Yyxf%BzWn*4e_tM z!P+-(K;0NR5Vh@uSy`qknX4@|pZkUYHc6;n}6<*-igSFMbj<$UqR1Rs84+yA5g z?pL*Y=@lvxv3Z>F+PX&?!9zmk;0q5wD!{yOL^hKhAFdu-zp{4n_{Z*k*Ef8yu=>(t zf9B5Va-%KRaxGW=wIi9UkHh}tFTnkkKQ=l2*+KN^LCznGXxE&F$tCuT%#Yq-@s=%c zqXmt97#11^Z-2viNmfO(We00f_Y_{7ytSd>G3_|XWj~=O^tll z>Px31|8s4V{gdYgo$bfo!(#cVEditD`rQJ8Dl)aiM*;KTW8hQU(1oWVydTYMW&Nkc zcrVv-{cc{jU&-_5ym{pIKa~`TX}eVLQQ0j= zMl_~$bWy1>08mu&>R<fV=<;2l`x4h^_F>(HEj*AR7bS9^$nX^p34y>qLiVw^}&0(bDOa6vun1S?{&f zUvH_q+Ci_^F&nEfdfiCI0=cBI3#nznm6j?bjT}r?{+l(S;UmjGK6vX?z>4>x4>yG& zVBxW5sZ|0kiUx)+4S>(>0-w4GJhKN~n*f;?dI{7`!6XVU%|hsaSs9jBW<09#l~BYg zVNI33R6}m46TK>_3vFOQsP3toUxGsEYh4H3s~L1Z_Z3=ej&R5j`t7OHebZ~*DceX8teGq_{?jDFMs)c`R@K-D|QZ7 z)b1H{dcl9p6#;x4PQl4ky|=uPcYN;yT7AtXW{1G!uw>8}O2M4GLL}!{X1GXc3E32M zx!2)Nq3xG5y4*8rS(wNK0VzxTCR|Lc&J;BW6)t-DTyWDs4BEIY!trwvHcnVgGa#D* zz6f9tObKFDo<`*clP~v00}QHU4duU94n?ZzLG%4mNj+gIUS@@pRU3$N+a%8aooKKh z!MV|V{n+y+sA=R>KQKX#X42sV%4Wj-D>UDFC-tr~!h@?GGY{O9!M-OlAAT<}!R+5u zb#;yp!}|ctSqUk$tG5qUx6Qx~_=aop)#LBIcWbZqU5t+n27bhnN@`Q^X$(2d{m?6_RZwOoH7)*~NP zbZ;NYehWo0blg0JJI8wlx6?-$Mky!trIQ(NGJfX4&Cg8-faxcwOT7)t4>mN4OReHFj3&VMwz z`QuNu{QvVy>G0_K`gAy6o9vHQ^MlE%`Higgn;-iRZQ8gS8Fm1-0>k6p*t0&@N$1?U z&$7N;(UOyaE9i=HpeyeKgiy8;CNN%LjYvUJDeDS-J7p|tN`^1n6<_I&KotOdAt4W= zXBX}frtCso2}J~S1ER;gXCYXMGKA9pSS1fYq>mz&uCpQaIb^F#PC((nte|ENvKBB# zpn**-l3p9_P8Y3Sgg7?pwPLQcQ?7N}SlL`xdvhJD$5(LtWFMzbw0Ls8trNWn>#1Rz zLCWC)6kc>Brh=JxXe46fLy~*x@dJkviwe%oq`|G-MLl8iKD^u%VoIPxutlL~=%+dG z!bp7K2zY!S`0Ot5>>gkp*ouXX4$*4`CWP~l^JOa|*6bh5W8FDt5vl4JO*no4&0j!J zk<}y&ao(hQ)&3~ufhSm>RIjayDXZ8uRTJtLWiWHyPsuC-8%DZSJlR~i2C@Mtaq;O^ zIF^Zmj3|o0$-ryxT7erE3(O8ZOhQI&0~4`Ix?Lm&*DTjh zCR#aW=nEjr!spjSyebA)71b_)tsc-_mzfTSxc2djI{4V5l=D}41tRL&(yT0RIv-aRA z+D!&>n~jtVynGJubVq#8 zaq4ti*oBaRFeX?4uu)$dW{g1|Z01sA&g*Y|9%=@H6d+b3^6sAa(g?UQfxJ9Dgo&`~ zow;wN)w=iM2sa_!0D}kVg^=001dYCmYY82Ey#Ykk`T$rmi1-&Dhdn)juJ*y_2GG_v z^xzhF^*J!T4d(h9%!O~nY<~3mZBnBE;Qi2YQ!dwk(luIMKaZSOv^RVr-8p)togEF6 z(bb8KI_j*PTw52CEg$jTY?j|U8&6-84<~nPnyvV(NL&t!ydZrZ!MV^C1y3I#wm@P% z$Y5g(8W;p-kfmS@5E&vefT;qW2P5B1^Yy!kRg={f^5=p|)!x+L^!bX%a2~4{K zcDpkDE|S~Vxqfy7o2S>YcB0SqjgG%2jKqW?1#IYm zp##QFC@KSK0~rF=RLr1xr&jnm(9vk$>O(*gq$i>Wx&*o*N)>%0;|pOoCq92f{o)ni zqptu5W55#Vw}BH~p&f?@%RN~d#V#Z(8O{k^3qZ^*$agL6YKEg}0U8e}^JSwd&6Ac& zqu|PLcY*!TU=-1qAV`y%xJ(TeEdcSg7f}F_swnYV^j2y2%q^z7*22dvAZdY

XM$ z47)GqD2771W@TC=EyD>-RWYy7EzN09A*(5X1-VBtaq!My!)IH}gsabI8Xe>mfVgWy zsgi0>A1XlE<%M2@;}xyWk zl)&p;bcco`66!r)WeqZ*!xdsrRi0oq#jo)@T103uH_Wc?Pi2SGc>VJyX9JLm?E$d6 zFUU~0pCJC?eZV`{9Zt1@+!|cUiGhb41WTESL@)v`@hl&{o+^Oe3mAJS2NY4b&C(pB zSLC5fBd@>rsT<~VKl^c9`}i{&9UfukVuMrbz(x;DO;ECC@|YIVGy@zWv{G++?P0pw zdAYOF`$d;eKb-APpG{tSc5<+WAlxJV_ri7MwY}tL^`B5Be7mPU0_|e-DfEQUt)C=h6gw2^cNc|Hk365$jz> zB0l&i^w?uC_x8d47I^X%Fj|AzKLw3O@ZB!Vu_IVBfEnh{@hxOmr_laO@E3lN?o|}O zCFO6qeizrnKk=EkYkFt*t{%Q|bTD}5(bb)YrrSp+^69kYA-S1)C|nBf6VOJo#=v+R z8WR(EChgcDiAZB$BI|7w5f)S+-H=Z3g+rb>;3y-eIWV08lPNHp0!0ow2ReX0;M_DVFm{4MnCS6AD7Lrbc zR@WekBE&JgjV+TjVkfd_S&5`PQ^sw>PCG(7wP?pi{g%;c8gnzXJe~+EkwKqCi$r7$ zTB$`G5m97hA_E&)mcB=DAVvn5d2r^0nWWs4m7xd%fgnu(%SI|HO`=WdbX%GGU=FAR zt$Ls&!aQ6mKz|iDaXawLhhFBF z|JA24`qZa{JMRLL7=dU`hloI)6O)O7%eGhVy5s+5j%|K;|0loo(o**FJFnA!@iQIQ zI{LHP=D&eee!=Kqixbae^;a&k6G3rDmu2NpmzV?@&qblaJ&rRST^S^Tj(4c>PKA{?(ei|dXU z6k=omYv{u~12Dc(PRd$fN;D}4G>N(@t55IXr~bnWc;@FHXK`aY zgb}W;kZ0Bvt+WAanR_P<3&MF1$&>P&WFxfW{nqB%vm1Avd#t|_e~|I&wWpUd(dAmM zKQQZ&k1E>g;+Qe`o|lI1FH9ZZQjmIO;`!Ef@Qn$FYlc@dga>d z20Qz2_}ou_eAQ%bEdr0j*i*j9Hoe&PFxCevya-7IL`H}$n8e-~8o(1C#>9lTU<#K zbP|hxY_MjDZVaZDh^#>gP=S%5u@=V0h#~_^8=$7(l}ck-8iWwmL@>sJ)-X{)C1&t=tD=>&8s0cnmGy)O=>jqe}Qj4K+D!lNe zk-?KY;FtD*7l+iBkAR~*Joxc0kj6k7h5lC|s=gUvrltT!^`*vztFE#nX*71!t%HwS z7zA9r-#I+el(4Ds7)>Ts$t*(^-Q8?+wb<-d=#LtIZ=_YJ(xTLEFeSue3>YOq+6E>A zVgG7@?Ta}^d!CF9;udM*l2268HRk5lrGZqiXAd+HBk#q0>fkbuq-(KuJjTW;%Qyv# zf+#YC3(7RG1qH#QDJ`bFlExEbEv~gr z9sjjxrTZKG)6vcSC0O*oxvrjmczVa`#mBSj+rKj1JJ_1;9=!pAN1PfM14wf14$;q% z?d)Lh-+vsf6Ys$B`!>MZ(RMC5kC8CyLK_JhBol80LsjzvDl2(b35a!}sTFNV6JVW0LU5cL zJb42+90AYmkl%ZU!MV2Z8Y}D?qn!fCTz#sN4S#Cmd^VU?7C=g3260C~?1+9G;rLb$ z-~Hwo_iS}}<>8b1#Kj$c>I>KK?58dPSFXz4jDdCwXt!y49iST%lGV&b-X#XkcV|2M zt2cKCXRl@X+oOJbW%c`h_Nk5gU-O&or1#R(cyRpN$5=OE$NxP)Tdw6=uCJA|{MHtX z&Cwc8i+jA+nh)G|k>u$XaH=H~6f-b7j-10oXhTU7ez4 zDdB^{gO5V^K-u@dA6jzGmh07vb$kEFM-?4>{`0-zp-yi<{nF{-jhpN47yfSh=}xj` zqt@+`9xSrr4L(!P=PoL|NL%{-#Iay3jj@yg6f(wu!UM_-3P(BzdPmWNGg6tL!V`3W zv5Jxeoo*ZL)S%akwbG8!O%rvJ7-=g;(n?^{1g6_UYpspWN{j8)j#_Ie)>m5W_gZLm zQmv#3T9)ibz*VZtV}add&o9{ z4X6ps1heRxtRs}KDNOnefs{bU0EzeP7^qXaINux#S0~iV1K_Cv_{Ck~bsQzRIOXx&^FJ^LJ4D5b+jim|j&@7q0Audup2J zmaUL(@ldHJYHBvIYCPnv&#mDp!v=C?7lDJ@ ze(X1X#pT(FVluufA5PjZAR^9%nf(sE8)Ev(mvQ5l`e=6^!p7alxqi&(;3nXGNj>AM z4YDw2-(t)8^Kx^b zTP;IMz)Zl@17iYffL3}5-~PZB_`nwK+#c!P*InZm&u!rHD_8jPl_PB57$UoQlXlX9 z@3pB`3yc#nPK3OmpG?=>c(ehU*I|mo+3vwJH$U~o`?JaHrB>&Y2krM=*xkDKO8SWCeQbo*KV{j_DOb`tx#<7aEZetY zM{4F;F8%=Z0kb@BA`1ga^kU$S9%MY|0!2xd!q{Q0XK~6A8wkO=%k{O;2`=A)uiL0iuh<1ZFhu~smqTQ)@%v>IAAv|uwn@sct>j{aN2Q3*Cg$jBtFcA zgZ_ADI#@e4!_#mNJ^;I$f_NUdehyl%Bv040J4RJZ^qly))n09@%-V*pbEIm#tC z86*Ha!6MlI$~ja_9p-fl4n+V`h$5MJ&k!nPWK5831e@(JSdYu7X&ND-N;MwmejnjG zy-eLf8ES=^CR{ULLgzEL{qP|=+MDo4Vd@iXoXV!m2ucOE4bY2#RRXbd@P%-cTRb}@ z9@~XJab5b-jxd`V6C1FX0_z>9-wtdd?*Zq6<9^vAshmI=LX@GJO`>i&l$7Tc(|pZU zv*;HYQFX&eqG@V7pG`HuoiZhfG_MAWq*noKtXN3`fRKI!U*4YqBv&W08Ca;2pAqE? zwy39WCXm?B>W0sDeB|-+mvS6law>ActQaIM6E0UTN-%*{M48%rX^|=+1a(+3bu6Y* z(l^+;EyenY2(1>7&&mKmUz(HyK+~J5k_49g0^1T!-3H{d37-3nS9tC3|1%V{z{aM~ z=>d5@7r|u(IJoYT_0^}M^^Knz{kuQ?_irg8OVH>)a;^Tzg>U!M?7ta3f9dr;PP%Ay z4C6GYF5@^Leusy^jS)6~=-s&EdtZ+;cl2@bX($_)Hfj-T#$M$aRC{#QA@X3{0p*0@ zw!`(8rpODxrc~4_cb=z*2O*hI1xvh!tU;5&zB7_Y=R`O2R3Y?^#W-;;((0B$oB;U@ zD4gINQ6;)n>>YfCD?>q|1y<(q<`%%HDIc3NgsR)Bk!)Cwyyr&u)fL~wjaelfvPn`x z(idr zdaSnObHMFSyl!jbr{3K6Kl2aX(Ed1@$HQfR`c+#?hSAsXdh9WndmjcKd>F-37r+zu z;bbv$4-Lq-9{BimlR{^6ah*U*Fd2y$G}an;8sygbSz>h1p6ODD{G@NMeR>Oce!PW) z!y_;qz#JV9{S!5l-#4^UfTCl(7 zO{XO$kwgO*J2q7B<^N#}KX9B8iANHbQJ*B7@i(B!)7eJOenB0T{b5!N@%@3sNq5FE|o; z*?>sC%2cK;Q=~;oWmLKM!ODZ>H>NkGm9VEI(pTop0$Nc>`YLe+dNY@KmFh8AL4`yZ zGGXxMu6ph=K3X0nYstaGz?cxIQ=54B#+P&nc2xWp<1trSdCaxs6=+gT;SGSIWD)ry z{9OVfKr041X24^F;*h<>nSh%)@##H--@E}mehs*OBn%6|Ss+Qo<=U#`Iw-5MS47NVib6BXb+ytP2m0@{6WHU(~8bh!M~4B3%~NsW?K3zLv=f=uZ* zPSr*%@|A3k0V^yGWxN;jVW4qzHWHk;BSwGSAhJ+41)M9J;owa*KXElQIYtmAFcCNJ zG#a>^*FW|=uKmLgqi_H=)__(AfEOYY*n!gw7*7=)+Z-c_{!!GA|JhfVODzw0|B)+B zPkqw4YyVa2b`(0p0|%LAcgv zYv8yxc5ir;Q3xPT90RK-Eppew-sKFlalj~(Rv98Wm!j31tu*VeP|T80NnMq3_?2n}YA|^YXf^D%{X$&`JS77N4#+%+2<)_gJC7M0PK8&7z)wEq@vB#aKlNIJ z_iPY%wSbdt;D!fo7Qo0u#z3h7t-z?P#ohz1oB$XA5s1jZz(6y?Uo2!|Z`m`zMojmu zr&{`^@44Gtd)GPhh5c{g&p&<{pZn0W#m&#Z1U>h>$rXcZYcyLMOimpG;uvl;@qRd^ zW;x)T&-R9`{Mz1wgC}0R8%gxOXtjIL+FX4R-S`tJ?*6y0@80+F6F5Iw?&;-PuCLRz zj@azD738Kx(0Bne0#;r<>lsJDNJcqoPf1p1N;R0z3<@V^l5vGM-l3Cw)52n0=d$iB0i)&mN^5HyLLbS?U&Kk=mcRFz z1H5$#-j|D~3t+tv+8#*c70tYIV`yv{GiwdJq47pKc?8`N19zvE-_*Pl01~UDgi(qL~}HathnmS zmF3jMltvz&PzI2OzVwe~o$nq{5V7;I0I6`R)NLzr3g#GKn?xkFN*9uIBo^hM7 zDM`!He}?nKGfAwCi>j+DO!&R`aJhra1e=om^;jFnV|CUn3_)Lja&upZ)NX zKK`GucFw(XwEonECrsKpkCyq%VD?Rz&JsWhM{*lB+SWS!&Vdd-^(>gSdFT5cV&_;J z#!}P$kbKw7J8i`A5emS!Jmd-r3AlDD0wnBT&oLP~I2fAPRMJ+l#G7iT^=e;~BG6EO zL|S+n%9AFW3j5a!6q&SsDpGe9jH19e^un#~MDyop;Mv&!VtL#05vvq6skB4lLIRpf z?4K17T2o>Ct!mr`Al&d&s-vRW4E({Zw)d==oTWj2S?Uy7Xr)a?kub`D7Y~X5=?Sk- zA2a&qGsL@20w>|Q8W|l3*cUi)wR1hA5*xO2k1;`knaIF`HO3N|0rmln9Iz>}-)-Sc zH}$K>dpf<|imu*$%)WH_0X=!`0H68Hb?iNTP5IS5Xm{UWr3bZBFpgo9b^sB*qY6hq z%Oe!7=L)|z+1}fj-PpbD>Tl(5k+D0iZ~6!OoioR-A3t~YbM0fj=gr!iwjcjX%$GZN zxt8nepy8ju0j-H=F(HssNPGc9D9B@jy`e7$nMS5QQ`K3SenBK0j!dQsZ)NRlNE6Pm zvH|9yFV8`FIlyogOG#o(sQ~09&z~31FO$5NfYEX_mv~;_%b&*S z8~NBYNFdR9MWg-~PhI=`^LKsW@BWiB#cX=2 z)lc6#9cOQJ(gtHN{rT1b>_WWDtU!=nDg86mtMWA3z_kAZ>CYGKC~* z5735_I~^7izA8#=&0~!MQP$SE=atuo7Cb*FkhX3=Y6b}!sa^Htn{#7UUnLRE2_aST zbJK1)4AwdK!ST1yUCL&O3)%=D%mSO}hcDyVePB}6Ve$>XXhaB8>j)v8CsJrgVnQjv z)P{a(T!2?*z}}45nSd{jgl7(j=l6jt10tIVmO>O0y#!oo0ck=+wmc*FKugvfbg91P zD+SdYcxgDLy(-bDMu_k#ED23h-15+}&lRGy%d2hM-- z-#!1i7f$%Y!;Uid7R+*kSiv+1#-QB-R@%r8ja1J9m2Pgy54zRLiArHw3#Vk}#6SJn{RQOKic^2-d>7qZ^gvJTva?flg9NZ9# z94Jm0bXJ3LPc3sOlhYQEm=YWZ7k!4R4Jnl32fyI`zECtcuRZhq=@%f^MY|$3TA)R+ zs9r{MTaP(pR6aFR8CVC3Qe=eH6i6*`I0c?N5H8JtmuJ9@9C)Ay+}Q(GW1;26BN$Bq z<>gSMQn8Xy)mYWGA_{Mef)@y90_lmV0XhU)5%BucD|+bk3itA}eDi*$hwi_jOP_rO zuRL=JFJIo}jhkc4#xo&}fH)zNluTnGj)gS!nt1|K1D~xq=T>2o`ykG|({Q?Tbo2Vr z3lF)`&*2g{ATT+8*fw`_`he3%Uga{wyy zK(~4K8#IKW!uXv>Yx103HWU z-wWXp`16F8wBz5emz?L74{&4><>)8OAvjWM7;c*O+qJoij`4&F$QHQ#D-`Q=o+ynASFG@^fO7sr6ek)>VbX5T2MHOK%+)F85``O|Cn#X3fPhw2D~L8C^MIJ zl`ou)*Hrb(0lzA*O&bAeTj;cj(UIr&C5Ia?WSH!EFa@F>5qGRmG&plnaiG!RJ#l-sUEv_H8Xs4w2P+q7CKZAUoaN-+`uUZPp@}#$NifH!=PH!CQ z)9?RvOka8qNS$!Due&gh$-}XOFTl(;gA3Zr*7T4dsb?on7 zJazc%Pkvv%z5Ca3uzMCQOSDoTYFQWp7Q|pE>>Prp9>9G+@_L;3hO_WdjDyR9o0TYo zt#t(yf&q1zl2~s(8v{uK6f@!Aro--~9NziT)VkC$dR2G`O?}mrcVJ4x?9xs>kRm~! zd%Bt6y+L=wYW1YW+DVJp0xCf70|T-IX{&uS_rEA>9h=F64S%8<`@O|?tZ8`P{J&+r zV9l~CnUBO=w91;lSKoIv&-N7~alzEJWdGF6yRgy3>Wv~WD1hAoG;u(?C3D{?;CoI} z-?ZX&&N@VCj0uIIfPo{ka)45$GujFxD#7$B!N`a2I;9RUu9O@TwD4N7;JO9Y7}Tvd z3;IvLe8gY=jaSTX{^A#O{gvw)91Jndym4_0Ok*L9J<`-8N*K4GD7BtxD&!8?V60*| zF`7q%a>{@6m4M(mQhwy*zNpCYJMf571 zmw|U%3I6*BR@~2Cd$#wbrMK=9F#3ZH5}gMhc{j{MXJMmlnEg}G=+p2gd*I<3j*XT5 zi7U?h;iG~N=FWG!7FNdKC^xv75xE087FcNsn_cLX^^_AGsGP(>;ki3CI+ziYT#O@w z)fUvX-X|Wjw!u!%=#yRG7w<^zhepRS0)S)}rkg>d1jSE2jAFS-zrKMXT)1HH^j6sC z=O1y8e(-_;9%@eJS3Vc=0SPEAZr~)+01+uu0Y+XhoO>EUK<0x#Y_!mz z1n-a-!8qBNFtJ%PP)aa?n3TCnt;IuiJ{@G1Uls*3Ifu0 zU~U)->|GbGKRe~o%>v#FQDR_H14ayTLXTR%7&L4pH7vZV?sd))-2Xf zrRw!TV*@x;zs;J<=PJLKa!-jKghfqNOE=*=8#0Ga-{cEF^Lb4^^)dL>uE+XXU?Ak4 zF!0E7aX2OO%yjNJ^H}#axBWA`{k8x6#-BVfUVc~nF0T*DZantur;D2h?;5^x@$Vvc zTZm$hZkIk{1c>kuCo|ykRit;^i<5uo&A8(SAArw*;Wc4;SYGRvb!xndTGEB4WX;3@ z;Dms|w%5*;DW;=>QQN{sc7AaSp;$ExD~zc&zX(Hdj=WM1C}tk8RDUbN$-7dlZvuG+ zW*Ox2hAONAiah3iOI)ZAmAxt(F!J1XsJbKH0GLtVT4m7+g_d*BpRZYL~mr~ZmMRm(^X=t4RqG6#$caWL_SL7nUoZ#+T#k#oSCRy?*6A&0P?S?!7#1!I1s znc&3JHlWO(i>)$sOFJ;QmpDk8cn4t50p?lOMato!|VD z^VhEvSw zSbeIuzV^i0vHsJYtR)=`o2F$%3;CM^wr}V4z^j>rb(c4o83>|QFMm%vSe)PID%7J!7 zt+n72sEB}@E$Ycl%U|iG=HISc>_siOfrHjMD6W4F#f2XXX|K!mbp{lDh4rmJ`O?aB zUwH1JgWdgan;uT@SEk#&b7!6Wai}1T0iy_vEW8&n&8hKJ7!G0c3|@xpbkIJz#@p{Z zfd}u};5}#7bY`=M&3*?bPjq!+BgIC?!V?^MVJv9s0cQ;I5ED!nXdkj=Tzv@33T%+( z_|alcSzVa;RtI*?WmvwMjD>RYq1xjom<5#{!403^pug7Kq_~`BYpzmLcpirJW0Fv$ zxkSlA@Zk;uP*bv>n$jl|j0J-iZ3v8$srq*lpbcAtC4zy6hY94U!1*QT>FtP1fJ$Nb zFDGK`q5YY-I|Fwo!0wdVodO3_ahL&zGwNt69L<1XMvYwXXtD-~W6#7Au_bI2rbN~> z*g|YLjx1bip+zzcpaz`FKSGyUnuS+1v4HGVL-HEHW5ag@2*$Rou4dihLCvZs3{TPd zMQEwn|B>Zk#)r?Yv};z)C~Bs_vSDIfrF}G*N}S)P#F~KyU)0oWMKPFm!sCyRJoc{@ zJi3-+Jaq8hC~7f)Z`NQQ{8r@C!2R4G$E#N0ED2OROA=v2rXzcf~+u0@`Bc zR0CV%TsUWJ2~c^^L_*RR*0zY7PwnXHN5072U;PY~cwnXP5GUo1F$P89F&=}HY2LZ* z)RW1^+CNF}yyHXH|MnYSUa|)M^9+{m{s%84qc1#n@@V_;eUoduKa9dX$TXI3x2ysb z8mzeX_JDDr_U-3*?AzbQ6W?_^;9|{oJZ1*~Ba6}lM<^;4rxrZrfgqo(K%yE<@8|=sI|jV`5nCU)J+Uu zIRf%AXbUkiVBCdkx9GbG&@mv4DoZR#;y4Eid3Z07-VhT*?GfAo?4D23anf&HOJcJh zMLO)9*?eN{*v2c}Zf83^x_R{2`yX))p|XC*VQWD6mi1=2mg|4#I)7f~^7msa%Zk7J zrGfc@BZvEPP}hgvJg{c?!)HDJ{OwMAGTQNm6PoH=YfN*9hWUVwn0tDH!3SmCg4buz zr}o5;-T+4)=tfj8g8CM?y9a-N-?*fEX-Y*_iYCv_vFYCr(4AR zE5MsKfwyb`XWLLeqHKA3DNxJr%g#1Xq2I6y9JkPK?SYpk!f+;bViU*E8G*fhaZND} zOoZQR=eTylAfGKirLRw*=mQ^En3X>8<4<+{;r{8J&pdbkrw*rQz3dxvW8RaE^4pO6 z5Nw%Ru#!}j7>?h4Qg=Lfk`J6))t&1pHWMQ8 zl#`GFID{~8z*xk@i+Pp4L<0*T4$=kKlF{RRg&d)>77gd{5}c_e3gxTvr6kF#G~h!G z7S(oqm88fBwB_)-Vly#-QK3NsWXtB9fzGc=gJi(!IjY=Jb#G*L}mh^C<7nl|OKT@=|9o5s-P&m;V+f)M75c7s5=`)Cn^u3}?haZm^qC+f!g? z3hd2*!$mpra0yY*qG0=*sG$A6x3S2=M6JHVvYJIwz4O873HskKm04>;X z9^rq))IzVaGtn)7pYyy_gEk8j{st?lzHLnuV-3j6Pdk;gqe&b1iqKf2yT0WytG`-wYXFOf^yS{cA8dj1gL0pwo9adS#3oAN>;dKl7~Qr^4Eakj&*vlPm*| z=@fKD5wCQvrzbWq*lz1TT>sl|y7+3o)^h!BtrzxwHpgv0aP9W{qYKx5>65E|FpQOD z_rb;rrex)Hw7Mb``xw7+4cC703&47Ujfb`nucdG^z|TCKD4O6O6o639L8Ed{_;NfH zr$BEbf-8WdZNX&@hyW9rx&F5a$f5yT%%xlxLaz;;y%ZGpX#@R7#e{6R|LCn{TXlB?9FV&Tkf?9M!%|Bg(9;Meo+0yP>c=H zY7uD+45z?wB0RZgaB(C)dt~(dq44^3;r?}Cvjwy)G!!^SNB}J$(wB^*fKAOMdYrrc zn=(eS08j{;0-T8`M6>|((g?3T(Z_=)`f@zO`*vq|=%qb8|KwHfzPOFuoqd0EZ=f4{ z6CUjqbc3ll7=fwCIDyhsN)sTlC_N3!66#_%EfVM5Dx^C>PdEv_*zqw2*7(uvX#B)} z{_>?_I=hk0rn~LOo}RY9clD^Xxv||l`H7oFKN8Ir7k@)l>wVNBIu@DKkgD(F+fkE7yZAu>iMrO75MB8`J|ngjs+qCMw*=H@{@h*|H)R* z{yGl;mOyF0ap3cd`5lkkku7O}UpHtGA36V+-FjeK7oL7v4{ZHF=jF$q?rpB5udxZ= zeem+tKRLQNIG4|STX7U%k~9Wdu@GC>gvO7j!1fUK#!zi!NH^N(+;x^4Z+d|Dz4Hvd z=xre5r23|Y>G;!q2gOyiLWJ*5;162{|4V&qD_^kO*w{GxN0zIX@ zPw;FAdg*W|tpKC)wuuSJUk#a?ED+-B2_!aH0+m|qK;9^0kxTy_vgDjdQZCPuhznPG z>Qu->wIQ6Ba#4kou_l;tJI#A+*8q?tC=)mXkOh`YPx61=l@t3@M45tzh4k_hdHXj>qOC}V&)3cW=s zzmrti@+dTtrHM8h2Go4Dw`?ulG8IEem?u*=lG60*UTvOxr1?KIQ6Dw}j20Wv`teKa zsM^1I0l=x{ZKebr=k0N+du-q;yrsdM1A_H;q-g+Q@{4bXF;LV3Z7dWSuyfJ-n=j=Y z?dPQRNY^88;wt6{<>yoq=vcn#tev-ltxIG`8u(nyXCBI>v}>?-GQqLa7B&W44&_-O zyP?5&YB1@z;O$gKbt4B`Yrx8?S3H^MH-F|CGx+t7Q-gis%n6UU-9QZihE5_}E*6u*6l0*X8ROWwL?`Ybq692vL_RBh)ma0` zsN~0(%gor^v+|`3xxpxE_#8F8S;Ic&t3m17@T=U9UR6n(*8^7fvzWlBM%`iKw!VDc zwSSVI|BMyuwDS5GWx)24Fc=Gf(dpyj58Xq3#|h!CMC>F62LcW}FfKjoDqklL$XLKs zGx(~`HB%%B6(tB3mojSO!30o;(7FXX#v_8@Xmsd_r-r#cbMc6ef9|?@?z698@YE$g zy?jHn!4dL;#zk$pc1P-^U?iAMJ4_#91MiH7yd-CkIm21*_qoQ@%Z|~9$$%dAQ2w` zmy)*STCT6$d*Uf{rp)j8tv&nK4hnqt2wbxSt{suDUxEHl4@mFaD7Z_*Jz12#XrOAw zKj8wiJ?M0U`)*ZkB0`%MdT|1NW?y`K2gsnJ9mBK?(E|NlU6}~vQwI(ozE=3PUJ?xZ zp-CI=<>LwdziI4#`G0zS>*8`hf9o*U7>U3=Yrx;S7kF?bgj!q{G4rM2t)HhZS)uKs_0X#IEQrC9G-Ce*-THiqY zw%6jJZ@ClS`i4_@`?)pU)r;8a8Kg;wblwwrF!Pu=Ap_}*g^VZzSW87E5K*Tv1<)kO z3>H(Sg5AVCT&KFGStX)Xx3{IAg)vafz*1@vNC~zL(4K=tuw@XlDa{@n0Z*FD2VbBJ z(9D5{1+bTa2UB3=!=Zibh>;`5rRTQ;G|kF{HV4c+FcMH?L0*?R&pZ>nGsp{%!Ucce zqT!n?30^_7QL>8Qov(7CC6>Mu;da4K)C=BPctd#a;Z;ftN~)4E!5hOEvS+N?>tJGm z*aDFeLRw-Y&7!1jm0?>dTq&vY5WFPACKkhmW~YCg4pW0cNzmPPsZXg&C-Z~?f{HqUOH+5Cm5 z-`W^H_wo<<%=JVIm?$tf2w=4hqz3NAPvgqJ%-{xZ!tHA(;KmdRd>Xfou zSvYcH0U%DOt+N)EZ5&*mA)6G4VGyOJVjz+T=>bB+xGXsMR94Luyh0m;Hi~6q$Jrpm zwdV^A_7k1GC+5mJkfhLf1o*7nqXrEJ`?*xOSvX4LI+eah3y@L6pQs)tG#RLxpUO;K zyEONyt5Ivz@%Hn&R9cJGattkiSi~({Mbls>RpD^1MCp?VJiAV0J>Y02-Z%jM(Px2= ztP*cO4gAm@z-!vjF)L&ww>_}$fpHiZGAfBi4WsN^Khk>iSD;KXibDG6z5@@6kVMg< z(2YF$5&c{H7H_$Ch1qQ#9DU~q7wrJXsiLcR@{tWV*}irc-)){mIi$bM1;2+R2J?mu0E8bw zn1QAmaFzT8EOubGHU z1_gA0mFWD>0rjE!(6dufJ zR7h~8JGH#veNbZwEWsecL334;1j^P*it@xRV}c1bycUGta%CDDtF*LvEVF^Cz#*_6 zc>{*w<2TitS{j0fuq3EvPEn+V;O8VR-!z0)J#9C&X}Ba~cxxY4O95|%ZEiJ)t#Lip zPZ_HIe?`eMsIapNG^+J0swG*ss6!g2)uHRescsEGKwR6onv9MG>*OWw~<9qTRJJ26RPW36u@7%0pc32~{Ce6;P+r0o_JW z+V@yFK_0$vi0dDH4%a{OIQ(=ETI~a^PPnls7&**F;_%3tG?i&}{&Cc8|McX;fA$m0 zg8bE4tN-Q4*5jS&8)nyU{Mcmg@GV8*H<7kWnOJoxIbbjZ3X9I|r?~l^hjjd1cgaQx zvIB6k4;V|(h$Q7J6ES}akX!Bx6NhlT!y7pVH*?H}4z_JzV%84w75h#ozo+J@1OYNK zWgfh!@JGhw9xe|TZf`BZ=Gho4TLx(ta2b(JA?M2aV{ZX~ZwXi?;Y$^MWpiC^=!NQ4 zWgKYEMv^r5Ppd(1HAB!swQ3mo&q1kb&$-GxyNRXGi^_uip62G<6I58(6cZkuFCx*pQ{<+sxmL@QbCN zwk4E6iae3PAU58l#z0Ou8W*^BFvb4%00%o0Z68c=eK^D3WQ-TD9P;8z`?&ei9{k}* zEHaXw#zaD5r6h*ZR7_glcT&O{4+F^(*2BsdUWF4JgaX7YGbjp?%uK>V%3c zlOs(gw%45`{q~rnJZtwlyDM8OmsalBdMWL;udj614qi^KO`m@H!QyvjD2O=!0pk4o zmkDmm_4|4~@=-+(V7qnvc$&O0?!5kL!S6pT_@{=BZ51#hM|lJN<-29S?KriX0#_Xn z8_=i(>{+MS29{An+Fvp1yM)gK^Wq5nTAg``YNoa9sp0?17s2WXn;0ioIcFVw@rn+ z3L%aOpG$a64|vZO`7Ou59RY^|vbqbX&m?LN?CZam9eBkw9|vnf^b+8kw}3+j{Hx2v zbBE$oV9!ufhcl4gc73ReHcDSkFJOd60ek?jZV{L3_Yy7oZNZ}N`UlUaFQ0$>#4kVb z<#$9bduuToyd$3!4`jq`)dl^w*n;V;OETb)1 zaW*7-AtGcYBq7~J5kYGRCt_L%gPAbQfnn}3mWgu@wl=!k>Ll!H_VPr=tv@zhS25j(5N&c4FN%{%&!d_ z`a23{p1{V^WWrP_aSekUW9CU#^_OtNa=AI^Y50YplxG3HPRk0$sF<5PR~Ut9?C4ra z($K3{K2m5Tp)Kgca7z<3&k<|JQ_msIMn@#P%0POtokG(vXaPhbU+rtO@K8->>;ramJ5?zX|PjZ|GLNIpr9`lZr3reQEf$Az0vdc zWo`qb=A+7oCean)WR`XeRyHiwPg=ySu)T`B9OG5>pAAyh+;EC)yjyZW)Ph5) zuTF6Nqt9~t<6o3Jye6F3BGOiPC!7lgN3$u+Y)S)+OuzqOlcqmA`K3SoN$}4uOY&D~ z9scca-rx8u|NgV>v&a8=KAU-srf>JzbVG3x;`l1Q*~+SLaLDnOuc#P1*vND9;d4q? z`*N9BOv?gN)-=4@lS|b#CW1+uSlxs!X2y7@s4!D3S$F|N}r<{h(dG3SZE}NHnic6RFxQMN)%0?azImg z_%g~M0nzqCn?ko^@w#qL=C&>bYUqHSoH)n|eEHHLE(6g%a&r$y!-;ker?{~{ z!_M9qvvCHDh7bopD>95M6k9Qkfg~2vLl+K;Oc$--$g z$ym54CwZ>%bT8XKxV-!9%P-|cel4HO4ke9Rt>2uq{@Bls`YXNt)`_+4mE$M3C&T>c z>GKcfOMqy({vfTbZK$|w%TL{*)@=6NfsZ~}So7www{NnBY3_xCg80Y{`UiX9sTR-! zIB|e$817fr1FrIK#N5_Sgk}OG1FXlu={9gN2WI7cq!!rAiM?E!i9U@$dNC5N#fDFu zh@;Q=7LITkehC&W0i!?A>%3&1dJ6W1=YiXf!_iNAUdjFYg?(KntjkovOY-m7B))Mo zc%JMypdgIp`~cE8K-H9LG!8yh!!AJ91UZcXuoi=V{5D``Chks&8xyjh6e>hB^|)hy zrf*+o{7c;}90HhChnwZ5{VIV)=RurbJf=SKQAN-HFaLV=na@9S)>CiICzJnrw7qxM zO{SJfB=lE3yQyJh$ihj7V{kN6G8r-T6Ln6X!rkBVFuwCU@6#WDXpLKtV2nnh_6y^O zIXDJPUNRqyA)Pfr5k!=e=>^uisZQjTA5KNCap6?vE#RXNyJ=$sq!c=aN)6d!DLX5q zqVOm@F@(X97x!}D@`!k0K)y5(E)9j71CPOkm}Wp;cvKcdl{qtwXpMn2M%Dmv0<|p> zwMk0&POZc1RLEJTOdZ_JCfHCpf>f#LmD*uG zhgPG%DS;KQ09IATPr^JVx{`s^4b8myF}1_2D?1?rRQ^3p`3Ap|vGjb>t;)mpD;g&Y z%`l?*)Ydf45#KzgM>{6FY7Nkhs`1 z8O%LWL<`9^fUYvdtqKpPflLI%EhtLDJxq^0ZocBR^Gc!NwH%B+qqae^VqhXudO@k8 zL8+<9tKdqqwh<2x?j@f~`7|Jf?e&Q3CoMNl#;_5P&4MxTEeb(ZtOshL^f!Sh834Ua zsI%swy$QekZ!cp1*FLLk|GIE|%cI@1@DjWe=!7DN9S@8(7)2W=o{Tov|Lddoeg8|# z?|`q;cR(YfYw!An5gvT>XE)t1+1a(5>Ey=lJ6xs&N!uW@to4-ZtHR-s+4Ili;y)eB z&8Xw=yoZ`D4;HSUY88V}spG6VAqxcTn6BLd9*E zURRRK5>5AouXZLwOk{XDHny^fXEqT=dj+OLukj%9XYK{#wqcxx6nD9LpVt_(RDz`q z;VkPS+1P$sFukYdReb>@VzYv?0fG~Nn;ZVm3szOZ0%Mb=N;Q~=Jyr-3O@qHxF^j6b zq>3OG8n8m4v|CHAuMit6#AxcdGXOq$Mfk*J;KZuOx7}v--V?%`R)l^_W-T%pgW7Y# zuw?)GkRU4gIZ#Fu9=WoGDpN4gtoxt=Y?zr$K@6Oiyl6xuB$5bNG0<8B-J1Y$H{!ci zHi-u}Q1Ct+$>Y+Lc=Fm*zxDJko_PEf?LBi<)9c%C<010NjQL>3%y|_cyh)%|YSm5+ zyRo-vs<@qicE$TB0!TUU;0p)kh5R(5vRuVr78M8MzVR}WKaRq^7T!aKpdm~W=Qhem zK8tT=)9hKhbM*Pc!{O%!*KfYmdgNmR_I@hw9lPM#)A!E&|NE2EZ#=8)!VkhX#t6%` zT)%JDgHJ=dZ-SFq^?rh*O_O~gcKA0_;Lf42Wem|L{ImPO3nSS3S7A;>!1W9o6DUfL zTvLz{w7@H34=!6dACe0546c!-9V1OC~8}3cxWX5qc2YQqmEoD4-j07eDPQB zA>VPF91&Dxwiz1zP8pQA63-4e*Nr|ANsAoFt~E#yGGY;o|d&MN?TU# z7MVuIMv=kPLHh$>cgJ&*F}?3L-1|-U;9K8&FTVZmb=^%u1NmL1Lm^n4Z*C5W^UrC^!Cv*k3QmGoNn3B~~HZh*H1xBTjk|E?gLgb4= zQhJGG(3ed^70+y5U7yu7H8z}sI}A+$HTTSzGfw6E##FV^3eUkCmjn64L6D+$q_qv2S}5Z+qXH4QVjF37-$k?QB`*)`zW7$J$r>o5AzQCV;i#;0V}$ajNlN z4qAh_WndzsM$w$>ZbPL~Wik`2`b1!m@@ohT$Fzc04pJg4E510ElX!<4b&tA+@w-sfta&u&lwp4Br*XKnKBF zC!`QsG$KOyMAu4fD-+9;PAD>II&&K5&L55o+!z&n;UMReuN?RsC&t5a*7q9tj zcb|SZhAEtrff%PoY1^pPA^RO~TCqVA6G)e{+kcKVRGZ(dyZbZa<7Md$a#O(<+GM) zwSZQ_5S=9G;0PR!j7bvq&mPkw-+YH&_rM9-kx&;2@_O^if-Zil#_Edqopf5qo&Vm z`H_S#=L+pA^#@+_p?Tf#RKe;^u%$-EIQQ{T-5fOmr<&wr8fipT(wnu5SFW#KLjy3X z@uXWNF!KR_MGFghIh%yP!7loAuqg1Iz`e+|5a-}`Db^1#}9q@@xR1;S&zS#&JpJg&Y$;N zfBF|s<}mLVj{IM8H@4rX$z&6TL@NpauL6>d!PsLkMtX9KYv2549)Ius=&Yo2Q((LY zct;vj*Hl4sC1rU%6NI-Gv`MIUqkX5t>p2d091McS*jR!QMU~b-s(cmcRkIVTU9LIL zkA`9h1Mr#TbF#M?Vg01V+KEW*E|?ckHUkP*GKA)JL?vs+OLP7po4dYQbIhyNZOzoP zy3~}W)-|wGOL)uD?H9o33K3Ho=iRnxnc+b62rrrIC_I3vvAC7f6 zm~!tZ!_EC%m-hy^acy7^t{-u@Jy1THK`sN~Noyfn%GaU@h!e2W5+f@Z6KMF>cuEG| zQ_caolP^37$r^cIcn3q-$mYgiVxWCrxa+>aj*U2oy4^`@vvaMt)&KJGQyb51WLUecpyPAN*7(6iO4RiPHm#6m6jtaef>JVj~j3e-D2Ymes^!82Q zt}f7v!KuJ80q3EjJQT*L&zy(}v_d!yO<5*0K+g@K&u%+Bv0EUw@gz)Y=^^a26aP0;X=fDz?sM;vELEPLzD`M|o%! zc0GX#)G27J*aS`Lw5gi2TTEc3#ld>x*o1<>Smc%^kGFucUHIoGp#zTTnR#}H&VEBn z{M29jcD(fW->+$XbXcz6!|MJ40`JGerxcC$K7Z!PpZfVX76+4W(`fdGW|RDsr!$CS zvD<}drPM4p8VsRX=KXYrt=rag_x)%1@S9(Q_kPQrxcgKWE2*VCF_OoD2S*|b!BfG| zz|1|ef;X_{!80CE)kGLT5x~d@u_2Q3+DQnsNO%tnX28`6ur~n)8E|6?zB~k9I07zD zfWrbDGa(JAWOT6li57s`Dz3f)I@tK%dh|R;gHSPQLesH;a?GdW zbHJowf-z4dt0fq<@wh3c?Td+HbL6Ixe_cwWOvAs3&@J)w^Y>=nh%H2*Eh1T*CmPL# z9csd#b6}$cI%>xqY60G1<39YWqJOGXqo!?9qw(WnQqlqvSR*{7Hw5D(m|2?$a0M_v z^cWpD4EH<+JD$^{LN4<%hKySVrfp~<(~y1z-yo6ms{AT6t7IK{Pv;1i1<)w%Mp!u( zqrV=Z(=%{kvQL+Za;##qYhRfXJ#64%r85al02d`CZK%CLBt4Jar}uH`Lr-D%6Hf!P zeUGhUK&xY5jNk)=iCHdY8A(o(UhlEi`sP31eAitcTQ*5wlYo&2fbDSwXD! z@4`O!K`E=5n6!xQs;!IT_^^P>Je>@zWmU>*RF)B_InO4LH4Ph}Q6R=yLztAz95CE1 zP)wz4B&?kg(yQD;%JJLh&@T1ZH%s**TAGx1gCY4g-bU!SAY z_=y%>n@Uhg3s75qTUM!Vb17U!Mw-{o`H*J*R47rD5L=@-0@?{UDZtSbIGO^VKLnpN z)XE-s-wymkE70A2&yzjkOb=L3fpsgiB+N);BxeG$vI00iPuVTMB1uw4CEJSi`BN6b zkHiD?CDtW@1%N_C?gR@W4xWEZ3=jo#bQpr&wne|&<{ih|5Z7f$&I;gY;<$ZO@XGdx zH?JOW_sSj*ukB&5H^Tm4qJ!Z~dxMO7yAw`_xhZB-c{d@pZwBgH6hUbWwiBA91x67O z86b_x#FVKJ9(2w~p1E@^pXV#g^3xI@AmA));it2i+tu~#X!_F8#l2^zUN2{Oe5dt; zKX^Y1B^MQORd=D#)oo!^GPybY|r6{ZKE2ON&~?XMg} zeqG@}{dQwaL>XQk0XN3r^{M9@`tW!6=r=oH9Dyl?);w!LFd_3dCYXjWPD%!uhyuX= z6uLTwzdoT~>9R-xn^1=d{8KBDKGs!nB|FHA-5#|65+ADgr=DsT-;dXu)QKJbo0z4^iAqN;B zVk-tZZ7?SUdBhTFOgfTz$Pnj>V%U4+v0lFQLFmGx@^jt&(v0js?-Cz);HhZ*^kbc? zUl^Tg$MJh+2g5%x*&RIWjy+N~eQ(1beeXSb z-yJK6jN^gGT?g$tDf2WeO_!s`^ud$@wm z5yQgb@{IiS0rlA(;@NF+`$!y2fqV+E@USVEwhcNhVy!2(<492ihF4R1Rs<9woLbAX ze(nY5L)^{+b*|$3%#je5Zor|}w(|g+;BnN*)Pg8qdQNceF;S&r%_R=yeB6}o&Xq2# zYK+RC)ksh6b=;V6m!1-wd)L=Yk&5L4f^_qVP3=xrU=&_!(_p&6CaSb+A_9F4 zb?{MmZB1}$5v!WlzDjDS24Kb7nVmG@^DZ8rsxH59xRIRa?_s0#;Fu*8&*j|I1jo!^wdEy zIR}UqeaV{x0vD(i^o9m7#D(@&7uq1SC^g(NY->q>!|S9pi% z1aQUJuC$+7zvtNB>EC(oiD&=nJ%eQ}{u*EZ?frus`03S0f3B5faWBh`-l9oifDXYl z)I@6{ZLGr&$8ft>aQ)|QVtVj)Y`y0JY}~sBL!*4?Q501qW2hUd^v5MxGo(gJ*$A*H z(CJ$wvBCCbV6>N`$OLai+Tg1nuFWuYV2GKl$##{SzA71~>iU8xC4447ImkHL0r##Y zIB{o$%`*m_u933=)OB8vuYxGq91c`p0+nwMP~NWT2VFgCY2{RVyj5~Hpk#OYc|D=3 zILszIT|V(S)sJk@l$u#3LXdFRh0iqY&B~!cNinLt-0FHp%9VovYrt*{bR)pZXjYKJ z8Mr?bKDz7qADqzd7~Q!AK5~|L>#FCyJ!vZyRwJ66215Y@z+@iCJ>>v+1I7>wv6Ap{ zA()_Kw3nn(c@GqnEay|jI0~bM0zd&^!T?A)4|zzo01N|$(~4l$0rVsBc;Dc){TMvG z4*U95c-*cD#DgjE<)PCvH>dd0D+4_9#p~R8X&a;Kdz|j>G26bbY%*ps_90=?#wIrj z6sJI%5d9Wxs})$I%seA&7#Sco@<{@;6QOWG;jHuCX4x#|V7fwwyAhlBGL1aj>3&4} zydTd#Gnq}FlFSve^V!|wK0R3ZEB}6Hb#{F6_)k2%WJN63*X|;99w=~LX8kVM{T8@B zg#c{7OQWCtEtJLl@|3&UGP6&%b8L6fo%Q=|fAtXl!AGGB zOM=1@F#3bO9(@4JHeuIy;XD(LosW-l#gQ?X5p)213D8NrNXmm%h=pnD@iC8p4t=Z( z0ZHY-#88l*XBL_Hxh;6kOgu5Oz(xvw<2v-%)xr-8AOjg27|C^vd?$}=0takweFgdA z@{93z9V9~i(Nbrl>ub;KUH*>A_R*i;ec|fexpQlZW1`>6qfSB?T0fZ4-`G`lup^~w zIQjP1;+r0Q3;&BZZRpO;mb#soQ^H)#s6z*NdBnyrF)U?IDo3Yteug1c7yzEA4tdUq zZ4zq)R$^$wh!H%zp#6gSjRR|**e0Le5nk9A4o6<&Ovqfo7vh*$?+cv`q7_-#D9D(C zkqb!4dr*?-LJv*`5UT`3{andF_|hZ0rjZzF0V=ALKov019G06~vV2%^T1uCm%50jA z12QVTR0&ko3FtL`!{)vW1S3OFUnhqJ2P8tak}{aNA5SA)835?Z2B#r&tB4~c=RHL& zgJ4An2z%0$cvU4H^afrkUwYXHiDhe8Neh~8%8e#r(Lj0bLk%{GMWL1Qs^uD0zodp- zqkd1x+W({Si1OusEBh2S5+E5IbJ@g$76=gL)@&v$e8z;IN81|!wDd^|BrVd$K$gMn z-SB4bs>A-34Edm-^8ziEY($DX#*{`Qf|ttXG4zxScE6IEvOkthq+mpp@oXw2mwOeN z7`H6?$0BZ=Ow{R7a$uH+COB9G*W80}i8tPiW(;_^JPbStBOx&!{c{GsOid za{buKFzL1a#^B8|f%`kmi^&9`nUjtL$J zvx&qc7`~gz?yUqvOGHDE=<;BqWfI`zxdaDoql4|7aYpqq3e=?x?18j#HHr z7+5nUEv_u~0c*d zO6`4AdZ&SNVs>Tz>^)(O5xpp1hDVw*;j;q6tNmz9fPm+9t%@cHufzcGhMvLy(Ny?% zT~Hm$)J@iDiJXJ$)$pV8&}QY?W||IZsK`zNCAA``9fMn4a8{6qGis0l&s-N?xB>i& z7I1FO;7uoqZ$2(P)CW%`9=Aop%vuZq9tjwDDtDoVJ3zUCmw}<`c>*HS_--_{Wn6^> zh8d43hcybmeL*P(f(G&d2KX1zaE-fCG>#MuYLq7?)N8Syy-Vd9%x6vP-IGp`@S2BkA z|8Z2{HMwlNW1#ian30ot?g;*wBlxvMJks$(CjGU$olbTvoFNCAqekSS!a-8$7s9$1GxJYZ zUV&Lu`W;m!wR8?xw_pO`<&p4z`GWV?$3O&+wv|uF$wtcm_MsK`!OkST{J9zO$9@eS z?{5;dmz(75a**kof#*^0-o*lJPvK`ArmdY}4 z=g44~!KN*L;%#^H+uwW!-}w3yyyw0x+`rXQE@0q+Bauh+@}4pPBU{-)SBA}~n{gnR zV@?5|5bOZ#66jj^Hbe_B6ZOhSeC7yv?m)V@FI_!=*_{zb1u*qeV!_lBi6vqSSSwfy zSwqlrKA;UotMFRnrFhQ;0K-&BMQI>h2EEi%;1F!Qkcu9_6E>#4K42f#E^sqSHc$Z2 z8q7Rj%A^*jt85qwA>3yP%9xtnRJyOK3R*6kd-;Y9PgC=zh16(Nx2?r&i@&4=Nm(_U zr%aX3W9DgWXfl}=;^Z3=GE@7%E*NB2pbTGa_)%H}v0;oGa^spf25xzYXe39Y(IC}Y z4>qUpKKzrZAAgRVNL37U17zbu-2+gv4k~Gi0brphcmh)f@&zy(iQ@y|U_00Nz;QP8 zC~_}a$VQ}zLh2c<>HwxP7_ae~NvjmaAyeHPmveiFkkJP)-D(C-SZwn&ST zIU>v^;NXbX8kkP}GjYHBGxvZ0UwUjQL;Lz%n?L&R&iE{QcQG9O7qi`i*A}yU1#t|t zTL|cl0veDzaxjC96QsAF#@e^MNgMZXp}pEdF%iaxUhoEnrpCuLH_4J|>}g{lV@U7B z$-v=or_gXer+0vf16znBycno=syyS=EJti!?SeGyle}xPqFql@!WusVXkP zHLuF|y9VWbEqkk>Y|VAPehzBM*OAh%4z&z~UskgOAAlrOM5^k2%v|_W6u`s*Qx|IP zN(7#45vRJsxjyikb?EjL@U{-Io&XU9Cn*z|fyf9=Js4O>^LXvbLoR%&f~J(wnG)!4 zc=xgTp7J515@l*zAm6fNHiffnJv^}h69Tb-6o8==OGqKcmbAve5t@1_pB82?_I@zR zF&<@@9L#ulIL2Tw#nE`itD_lSxG}_)-LVc2W*BZykl#3j1_Pj&27uDWK$K9e6t0(g zS_|3;CW-+RkoQ#K=?hnmt>htO1P@a`eZj+CXVThkt#xi}ojvw^daVD&wX?Th>KEDg zLx1(2tU06#9%S!VGyQOB`LJBScYu)$-Vfme;3MybdFU+c=4B9VBsc8r*wwuFhM`aY z%*68@6VH|{%eEJN9_;05EzmMRhXgG1$iRBZ&ODKoV6zWrMK}*1!846GZN)sG*G{V9 z*E`IA<#gKl&6&q2U4@$+!k>N^?)A4^5d9dk2GyaU(vSP9AMxcEbDg!pIc<3%5Gbf-wBTh_9drmzeTY5WOo?t>+Mal+ zl+egZ8**l2HNlm8p9CKPa2^0Y04|NNfA@i-hkxQT@hd;_^LM;5o4zBS74M$z4&I%O zCU?MjV66|dQ^7l<{UJ3RB1u!6e(;nYdgu%veAnyw?GJ6>wZ~H#3P&{9E5w0-ObRKv z7O*rjtk3Kc0H?XmsR97n1lA1DXGlSDGPpVhE)RuQhT=0v#M4K>%LC$I3`7}%DRm62 zwTNy?r4bk#z*6us@>1|Us6fv$|4NmU5auUo6XKGqsP+XYqCUho9flWtei{e^YJEWI zEy0Dfu?h{UWM>Tq&Z0-p{F|#8S6*|P&`gwOqs4D{7d2t}MvOCVQE^p(!$Q(oE$AfL2+%xQM_s^UWIlNFy4%@^V7(!Gf{jx;Ig&5LAe#pN@R+DBAZL?R$(4 zbIOI=MX7;l5!Tc+t3Vy7DNR9^M=pAYH_W2y%d7MRfGe{;(zZdnA8}#Q%g(sv|^fwT|AeQK6xy7}>oxcTos%i)(^2I8Dp+XQS{?u7En zm`%XRh!z@}R{W88rTdF=lPv6H+lD z4@3#kUAM4_fr+TmVZkC3+)S`>Lo?chpiMAMt^w=-xWG4x11%9*z+0l2QPY7i8|9pi zh3U{>Z7V|3H;Pg~5$K8raCD1uUX9Y-FbPtFG+JXeK*Re8i)Q_mG;RJgn?;&+on4q; zH0wl-rgK5|3(O7T>KuZ(k-a$2F{oZyHAo~vsi|HMA}b~(>e7`k&WULzj5Fbx3Gt-^ zqSq2m?GShNf!Fkab6sGo4Xm|=^@Qriz^VaOAmspNBxVR+MLD2MkSj@!uKeD%DCxg7 zwq8DW)#uX2>kZ?UxOy+jMBls&dYLMuERBML6A2=Lka!@LU=3vf^%G(}iD}jnM5c=f zM2^zvyMV5Z3cj#A($(Dw4)$g|x;nz>$}Wz!_poy~(9OLek9MY*92F>rg)q(}E5q25 zNi0P~@C1v*$btr<7vy~G3vEul*@Q8&-cM(P(eCb-XV1CkiYG4?Ph5)H?V}Ta{O5K% zYu%UICsr>%{r+#<#|J*}6^?_;G~(s@JzO6Md+@PegMZ`)V0I_K<`$+WkX}AM#>`955@%j@HmeCKzAS0Fi+b2|ZG=!8E4du{1Bn zbf0fW{K#g~`NAy6!F~%|KZN!lhClrQ;5@+d@5gd4ECHkC>SoYt0o@cLLq&%06l4X3 zGzoZ^a!^xRWSG!}c-8&%-1PC*G>}Fdb>jwQ16Y1F83K9v#h)0c8;h1+Mb!g2?-TJv zUf|@R#}lXD3F7ChVpTm$sPhRrOe01Yl75Ra7ZmiwItQ z84Bt17KO%7|^T2GmsP(2SW!-7h4X%_FaIOY#w`*I$yzNJAL{HV!~aWJ3d5 zjK%R0Fx-<4uH_mZ6ewmMFoJCdQ(c>cyh)XkI{6Z2i^`W*gPp1*UFBq*LE=(9Nl*C# zaD}Kmyz}kV7^}x(tRIhj6a|)NkwZlh0clH`#<-}=$Drb z%h&tbzwm>H0RD$lf8m#gBWqP$yY@~@W~n?ZqB2R-d!UnqILo84CZGGfxj7oKm=-$y zZFl?LvD8eDgz16gGKCEl;?|`Sy%*~}XyoDZnGhvlZ^NMV|6}h@qb<3v^FZ+1`$WW@ z-hE?E01_YoVj{pv1Sv|CD1n+OYqSi?Wx3?C)g^Vitku=kc6Zn6ZZl;sx0kz??OyGw z>ScLuS6Mb;T9jnTlt>YfNRbjrkN`0dV`9iTU%q_f9V5>E`o}pZB5p!G^W>zR&PQQ9?qnJt2MOk&H~LAEbFp$OIrV6!90RBSwh9Lz#0=~u1*Pn-`acY{7~YF+sDV~PjXg!c}JJ9@%(M;$of zdKMZvV-klZ9C=_$3M_c@C%?lgt-WlzK!V72kLRC&Se*Mcf^?}CZ~}2@O;sSvLfKLp zFoSSz0F8_>O+pF2at=U8fT0otC+G=rA}3F6W_)mC2>0d{Q7XI_j6`^DW_WUcjxWBt z&*#5<0hgY=!tuEsRF|)Eel+5IbR_eAFLO~?cZJ&PLA$wR-5k=*%$%4vz+^*NR;VW9 zeswTfnOvKn2KfP3ug)Ire(Qh#)j@X0eDJ4!d93$5I(hZXL$jth zSTc>4;}2x-!83&5XMi(j#Lj@#nGXZcJObIc6N)KD_x8sBVo!@N9eDkgol3uJRPprG zux{#l9p|!+K)i!1J)9TPDNF@W6=tDT1|iTPtOuLt;$O>@&lb+Uxas(*Znrpp{uvxS z@+^EhCP4Ve5w{N>b|J#i9+B-a}jtW4$8(H1At11XBApxR!FUf zx73z1i;bofR2w!>fs`H0i+#fcZZQV}_16Z@IR(VbfDGaQ?;KXVVhCH@JU{dp^szdF zX*quXLx_*i;o$%&y!|i!>Yy{+__kM`e(KMTukC-c&E{(yu8FL{q;MkLLUDZ`a`7?% z#o&Rv@tr^Q&GIAf+{AlNcCcQkUGaeG@qRwK*dqiX`g_t!jnTm3T0zWbT8w|AtZs3NP z_7+rBmvZ0&K9azZBp*sCWl1X6fF1_G1(Rn6p#h23=MTpw*77K8CABdDMky65dO|Qt zC3s_^n1=V1$V3cZQctRg)dobYJ*4ZK(vqR6*3!9fa$_|w2DpYOl>Dv3?n$DAuW8{M zn{yg~tmvH{-!FjPR;Ltcay5y7oyChK+H5qCVza}JFTys7tmGh_u1MY?icCxZnT#Pj z*TCJ29;54}O%FV(d9c!U9YJ@)(d9~slmfG)Flzwn3{TJd8P-nb7;ZXrdrA>-K7|^SF}hG&8(3*n3Uzvtv{(ub5c7b*Yi9_qoO0|9 zflFVV%9T$%EeHSl*Wr)G;K^fxwLYY(0zeRKYE6zNUaq{J6(=@F`TF|DDi(ivI=xU1IMFr7Gk1SHn{n=a>+s83X1GVii!4k~zVNn{uqII9$I{Vei@meoACc zkr%F8tmWt)zjacZ=?AkTh>8{iM|MqYZW!%M`N}qA`*;VNx8-u;O^TJF zNaY3PgqTm0XHad!MqwQ#5ND$}|FTJ?On~Ivh+rpQ^I&y zuT%A$T7&fwJP(pSMsjB~9Tbah;(@)JaOPm~C&ozHjchFjY$o~>Wsvnuu-*^rS4Cid z1{}o4e6+AuYX(!HINt}!7Q9sRQvcg3a?c+G%8Ph_>HZnclhQP?ZgHiz(AD;`FVxmQ1(>0~nNO<%rnmr`y~#fQY{ zA-1Zku4|t>k@Y_Ho{yY=@{tdno-XI#<@kebRs&}~47LdXk30;+&wxRuwl-G9vu+=+ zu4YHSvXvJPc;c-yk9$ky?KArI3RtNG{Rx#MJDG@Aa3-EYiVL2RcDUNDexm?>O;o>h zR823*U^oDoKxV(&y^89A$kOiQYklXsJOzKS~z0e!fz>G@7)Fljs+0 zk?JeK+ep?N2oL*jpP~EG6|?EwW34OIidNT774mOx9mvn0KI(i5$6?Pr3;)Q&E%<2p zrT+JvtfPKdgeQLd7v3&2|Dn;<-EWvqrw@2?i@7uHbW~}A@mOtlUokNZ-*U4(_}<&` z{oimW-u}*$IK5UdbIL;x91${usF&ys;nbW_T&%`Sg)vYDp1~ovFT_y6RfP>e^$@&1 z2ETC4_{iT%bTh>{>dGl90^ z)hR8v&j^B$jE2~f{DWJb5JbliV0}9}3q-;v_Y%24paX z4*ZctU#0ZDLe1cTHf~C_;b#KKny0aTl*I3_MNo?^M2hK*0ks)-0Ew(VPNYt=1rsER z8=>@7UyP*30ve{R4tfpP#m~|aX$2Wu9|0C5njAmxl09e|U)N+x?AlYQfKLiz|ns*1V{ zB3Y0qic=;SkI|Gw8@aE5mZXuaBZDk3A4I{(?h>mQBs`vgQ|tCJ>90B&tSO5X$1DpQ zOM1X6XuQ8kkrsMK)MvX5xS|0k#VD$V!Es@C4YbnZ>N8hy?Nd+b;gc_+yuJ&ruR;br zNTz_VXex&3Ok_HP^QG^s^$)aL{8Jh9{>8z^{_N+MbNL_5aq~|;dd#ZP+a{NnD<{_PLg=KZ&z=wxnujVMQI=B3s{ibTA( z(a%b9#di+KR7eA6Q^Wplg~RI=XGcbON>)HMlPD1m3GS>lvt+c!21tdrdjt{<-YtB0 zjIffZCZvGc>5HsvWE`F-xO!aCTY)$ytmZ&92dgSb=tQAyPdK!sQvrl&Y~9Fc*%KQM z3$8OQ9wh6TG~^5*@ipUI8D+u=6mNyZp>0mb8>DZo;Ln9+-Kc^kL^W%!Ma9z)d~MS^*wg5uRQZ+&U1h_aMi* z&~*pt1^F61MLY#1z?s6P2AMH9LRT#bGTR*}6VK36IX+w4QlaC{tAHM2} zVMjY_olIt%>+?yuHF5dosPvnq*oqM=G+8UnzX>9%(H&)?f|)@MXxJ;1*Vfd(Ffg1Q z^}E}>67!VKcJqVqXJlz_@`q(C8Akt!#zA?K&W{d3+s{Sk7M2^Cd&urgIjSt~>Vhsk z1zDkOB-rdR8fixx3~U!OX+It}V@603g)~PdGWSAjr7{UI^~7r`at=WC*aN^r4p!5L4^NJ!H(BNsy`0j?LRC8&gQFR=7?t8Y-6_0%{xaNT)3QIuL30<&Su1#%{f~ib3E+KsZ`VL%$Nk@U1sXTuO zoIN0(*oA!Vn&OpRPm3N`s~y2wN7%_@V;F&t-*QN+v>;~6C$TdLK_7-N^omi{o7ld3XqZtb&?n2^l zEX->egVby$OTJ>QJHg1NTiuF{N81#8A#%R;&LVA5LTv(V(so3W`V6$Y<1v1xIoEZ| zw@$ZixK|19NfI(`pGIjs`0E&IHpxEHbm+MN9EHh`L#G=mFf(EDdubWQ-q5;P@M3SaiWav_8Bp|r?kbV> ziRslNTz}#mF8$6+n0)nR_|XK|7!oUk07?3IH_b|7I+F}G>8$oH<|j{l!aDu`dHp}{kJR+)joTQvYZB(1F9E`1fbh6Jfptqvpio&v7aFkb= z9C-T5NCPy0z0&Ri)a1p6WmF?nHw0WlGo>m-l&Gc^Cr8HVVTq%CV0@smcHCjG?j-Mu zWgS2rQI;Y7la}5`7QNzbtZyVRw%cy~^&_}oDAX8hYh=*0zFBOW#Iim03ASb z2yzRc*C1C8Hw(FAbBl1tY;4f&Iq}+l#d8-A;Kh#*OxW-a{Naf?RgdToGb0W-~1@KbNY5>+vkbyW;xowbZxb` zX=k+q)w#!OtzMWO-r-C8ugjy!_g3RsM~D4Niw>YpZC--YvB~}+ z2CJ)b^LyTghyTlW+4tX`%iVp4F@STG!#*jd!dycEtA{5GWQN{@z<^&=d=`<2Rhx5dnE)0J)+k!T;0~g&pjoR*Y|kv z&1P@@;H^@ucg1y7rq_XLs%bu|S)V*5 zCCxsy-naR`2%u?T(<;-dn}lzuk0sQ8aZNV7L2_L8UQ+i!BgfZ*DjjA?J8n=Bs3ZCr zFzhH@@DGx?5z`WKI8*FT$g2mGCn|tqpa_eM*jN#}c@6IFb>O}=;J#Jh=7O@G3pz@4 z)zEV)c?R<^nTyI)z= z9y>qPFMRnDU;N4i?3~@U+4+l7Uf+?~{uncg*lTh`wYMgSo<^}^duAKl7{Z>Ko%VPMc-!flobN&pu7ImK>~I5dqFIjL`*<5xZabPEeenEO&i-UI zo!%iuQDi5NdF0}3RtfiyAlDDb`BiRy(}V7Vf9zfQzx%e^c+-Z8h~RQ5vPa6ug{`>? z)Cg#R z6|^#-0%8prSRRa$pd{@w!-Cg}Gzd}y@F=7PG}2>JzI>p;YNQ9 zENnn%Y(0m~an{FFr^SWWlGeew_|fYWvXHY#fshf5h|i(6KMaz}tYz6G4c{oZsx6#? z1bRqHU!%1kw{Y$vWZ7JOrfnE&>0)?e7tN|WfqkGZ*_{C6kzl+H8Sev=>lMZaUS~(1 z)y#ul#8jXT=&WVbLZD6|s;QZ#tQh^>B+2SfJ5CX8*C>q_BWfT_)KrWH^MlbK>XhU*PDy!GVIZ{7Q*k4&oR z7cRbcdv~$BxEz0Un-pgZ4}Zixd;k6W$FE-f#jM-AHY$q0UR}L<8xIe1lwL4c312iq zAsKM|7;!K{b@`I+f9zNA)mOisxBk%mJn@b#tZYyYt{5l#Dpm$Fy7Xz~dG zicHY$Le{#()(|+cp}1oMcuNm@S66vc25!2*92HRD1Z5760huy*ElvoXL{B6$qN12Y zS$9RiRiSaJiPg&J@}$WpE_}ookf0Knz~VxqEd)h`^9CmnWJ;~*vUm-4Dr7b%REVC6 ztSHzKvQWXPOyoyz?fMU%x)lfCelzyQm0sNQ{_$52^zpBpljncu1vz^DY-ZPYeC0A! zD?>%U2iNV0c5=G)zA0Bo^R#&-ocnBaeRSLC+V+pDvmfdV`un=Rd1-A8zqDQsejUII z%SmlH{-X|3&IlH=Z?}&_HUJ#o1|NAC_88zFegwL4C-k5MiXGsEL-2U)i(R}k%uKff z6^_HO4aF*Os)7uFYy{W~hhRwAW|Opi<9>1pAbss(jLTE-2VA?6y7Ln9&KTKja@}o9 z{~br>{?vtO_M>CNa2hNC^tc*-`W}&QIZ5#f>{JRWsL|;oZgFakw%KCUFIvZHr>;}5 zNHjvsu8G`f#c-1K0h`<_4nRg^?v)z2c%kliT}N3;kvYY z_#I?e^$w0S};>iUqSpt(0F&%l76OVEP%tprfgeWHv zUmAS^9u-hkz){2n18a%q97rzgAySO>IgrN0Dc!lWbbn|=tD*%~)|~K_fdZl2F60YgoQ%Q7tkd>Ppt1d7) ze_i%I^AfKA*3+C`*c0y!SjmBI5x^ou<`|ic&`|m|DP|Wrr(?g0cg|2D<>-Jp5IMIaf=t5wJ%twatzQ^I7$N0zx zV}2EAp_14y$!T7}H%ud`3)T>EBr%WTQ-cY&%?)M&u_=0j!DfcllNnYw6x|h}I-sfm zpO}E8l7ulj^0@|APN=@zuokstywaM(Z#et4S$MJ#kY>FQHvV_bdKcF}wPw8y0CEjx zMV3_yY+@7c(8`FYmpL)Ct^FA5MPX|#rp5I#tv`{5D$*pYB<#sE8lK0b12dp9(mcex zpd>JlYm`FJ$$?>q*vyEnT)5dKHu{PaeadYE!5u5Wi9W0&rn#DA8g7Fs{^vzl8c{-I z4q#?LDL@(5cn0d10Zj;lXtSy{=HM+MPJO}<6Bj_&iglp@UYcOMoS=%pMR~M%W0ncJ znV?GmC3)?zl*`vfxOia)uU^{2m(K6ob1z-TmFKSN{K_6>J`KlJbRolmajge-GJ%O$ zSqi38N>$NidDZE3M$FtR=G@DbWUs8>vhmc)$<1ePy7RWzPp_Wdf8;~r-&lJt>-FXM z4+D|#GmzxBy72qoWo~PGBAp4(!!wUGW#a?Sf@eP5=I<}>&m~~A9REv*kv{wo`e8&4?+si>Ul+e5T6c3!dX#?+k&mHp655E)NcF!7a zSJ;`U2B6= z3EWB@?)uQoYEY=29$N1!EpTYjbSX*rn*G2HMn|oODw14ETliL!Dc15$Y9-u+O@@na z9nXE}CZ}XFfE7^9Ov*VipBknkV0>hp9vRB9mud!>k6CzxNG8-mL<@yDNntrn#*Q%n zX7T6Xk}Wr&?QF0)5oss}5N{R$PS23eXM`5YyzAKQsq|JebOtI}SHg=VZz5apoRT(d z*Y+$*#D!q`%f@UjiCBzqIeoWBb_Z0;O!l6?#GTK*h~3XTFV)T!qB{@_hk|~WU`aTo zkdV^D##3gQOtW6`ysq_r_4plk{r$nQtqaeddFy;RFE8spoT02d{qsNM5B7ezIym^I zYBD>`qLZQ11Bxz?yPyjyE5W>??Cn9kuye<0u6^L0*m&?36zd&@IQXfMdk|D{B2Z;} z{#r14i@$ey_$pQHtIoVoTP}47^jaVnov8ZvS0e<4e zN)YPUU30RwB^Yih`|FNHUnGIn-XN@qs#1C`%**MET}z$P46@K2(AKKQwl!1Da7n3` zY0YdJDQT68uu*Lj*m~Ur7_ogqT9ZmW`!q{O()Bgb1#ElV)}ake7+gyCjO(-T-@apD zWa+d#mLLLSOzNzRGMfX_DgblzfYIPhU@84IWA3uGw3ijWy8E_&=;n-fo89^?5JcX;lZ^K$U|HNL)mAQ!HVasBE9 z!#}Y95BLX5k{E*EhSGMM?D`(2*>cSob~+e%=FUQbXN zMO09F;dlbw-^H=F-GdMO;Md7d{OEo1p1$Hp1Q$JUtqfG@OhMN~(*}U3Rjew3T);wr zQ+dd#y)*@WXAknvUjm-HEIb?oy#lyt6Bu@ZEa>^+)BVEM-e0iT+C>XUP$V1n#s^wj zFoV2tevwoQH-rm002ouK~(25o=rT&8xNat@bU78wH8}Noc`;i-(`$@LCKh zap9iTATeOKQ(Rv)1*T(Qd`OHBiP3>!a!^S*^6+y8qaY3XSlu10B6%JF_^JYZ z*}^YdEV&kesRaN^%|J+uDnvG@rSlEKbt?3aJL|3(Ii2#=FI{uHAN?$+UwRhg1a|YA z1cRO+bICrtf(Udv5!pW=!K0NsZa&++dF$t{{{0{Po6EU)ITjlkVX8g$Q@{3ZKb`!< z!86Z)Cuj4U=sI2Yhkhi=x5JJ(QX!O0ab)kuWq z!kq4E^Rxh}8yeb+kMm8GpE?K3r@-DdkHc$onH_j|Z^&{%R%opZC0bFJVIq|_rBfi0 z-Aa(^LDR&-4lE&xd0{mZRwEOdA@3`P#|s`i?PTqkNT&~>6R-lx8Q`mEI&JY?G?h|J zE=y=oowgfy1I!>k?#2#F0}{s+wHOfBpvsbxz+_?KZ-Y>a>nM}dTN+#~xy#k53elLG zb=X0h4aFAIh^^IdF{}YM`2A5@uvL4~6@jRP-i9cX54|%L;HT16CZ-fl00bKvEa-ghhb4L=eeSrWR7*W(4LE zmO~!_py=fnu=*Bgq!COKF0zp=kWf((Vlh~gk?B<#r1D{zD`2wX1Z%ls!vO}+wo7om5jVgQ zSQpO~R{XU+hky80CtukU>8-$ef;l|0zVMYhR`{_Z)4%<%9>f(aBM*Ncb@)O*5Dz`d z?w9}SKluLH!Qo#nk4AT}zgDo{QHmEqCLGOyy?tmk#rhxnHv3CIa*zCpcWueBl}xU9 z!Bq;zk8$&hJ=%K2W%<12E!N*|ME597tb2La=~OQ4y%3PS|8{aEdZy9 z?#cn&P42wQMDnRDKWkfR&nDZ1mHk=P+TiQUYiai1%QvTqIh03xRBONsOY!} zrs7>1`9aFKuRUpe{MlgU<6Z>y-xvHd(r41e;yoCJr;R|1rIq3ktuY&~$xO)sTirs{ z&-x^xWsu)8Y84IVKk;QmLct6nQ~{R-?;yxLoL5WO~&ksATa9ZEe)zJ=xOoNji;<$?F1LEofR82@&Ee z5AO*-H}UguMY2J`-Y~~t&B<_8Q1rvu^=0%X@(q0U24+^c4Si-WEE z@BBwuum6ij|dyM_rJ-HW?~yBJ-Xds zJI^@bRU}4JV1EQJHIQDxp$I43FLwT=c8*34(5C`D;4C~S4iB3(m7g%T%qKO_Cj zU^9v;+1qfkdNPxZn=`C!hV_R4D-V=YpqhtJ5)vi~C&{%QEx@St{co+K!W)31c2&g) z&}$tCni>|uX7XNGM+Gg}cN0(-&#BdQLK1#7X8UQGYD>m#ffHN1se$QJJ0oHS;7Gs`!HEYZJ|wi27HTRlK$gV@9fH}bNC=;Z zR#uwACQ{8&6So=)Txjam5<-&|2X19xS5#b8k#o<{*vl)2rTyAVyZRenIH%A2#!Hw! z_bND@Q!+>C_b6NIRy6TXAWSfkPQd)Kwg^?Ph1!L=0)QZ+bUNk;iv|k;2lt8vBQ@N_oiT#8*^2X7bb6* zDBAS^q#mNdLMJe4 zBzztxCV^Qak_Cg!=;I-x(bJ=mgCTV{*|3UI5>5^4BwUOZzLjJR1j!o{o0BA}29VOv zF$ue2V5O_lzWgZ(DDA~Gvdu)I*=jUcPr!*8P*q?x1Ij5;&Wz>6OF0WM+fIl>LB7mI~w7hi1$M{dWp&MtOanCRtl^%UKBB9O@+bTI{1wXjdf6W1VO{G z6ZE8?`|w@Mm3haZx9X(7qSEO*xI*9pVrpdgywQlg@n%ncBCOeEbr5%w3f2}{F>B8P z(~1HyQR-j~=&b|VA$MM#;`$e!m4h#Q6_e-ALCO-g(kF*2M5iM`hX+Gd0+X>|GBTGd zTv0q;3n(Tww(H~U*}w6f`^$NGIsTpN)x(eIiFdx`*!&AmedBC*=SQm1_(T41 z;%u-642D3Sg{`u{;0er2#b`<~qH}T+YhU+fIr+U0pm(eXsRZR7P#y|=oMA*mKf=&> ziX}8RNw`#_b(jEU1&nqpIlNZNlpB1Q zD5+hM$h*;K+qJtu()z!azhT{EVtv-wW+J6}!w}M48U8~R)_qu%UV9&~%aXw#iG*}A zps(P-0V^4?-Vv^JD61V{wGa&Zz==L^s!O@KC*0@&{SXKeq-TUwG|UOiMLCU_UMb)t z7=WwAB;vFlrldBJmIq;&|EbZki2`^-P5E*F3NcY}=$fG~U^jH8xP35{3s;VC@%26I zU){y8J-sVmerg;0FI|RA55tptJz}*l+V2Ajv#KJeGsUcgh*X-nYq@4G&%J+f<@oUR zl@n`EyyZRj|JJWxyKlEP8D5U%SdQgb0!Dv00HdFL9NBIcGT4UtIo$dh+@KHl_oPRp7gh)84-Y+`9txPB~;Z>bLc!K--U=&^?$@=L(z_ctDTl-aBQ zXpZQpx8K6ttZ6U7w| zUNo?BqPak_#qvHCgyIPd6t*tJnm{TFp5HZm{wnb4D}pay4Jow4u3&utbX@F!anT?; z6}L4RrDgD}DSa$euZ+nnQY)kq6<%HJ#-^_BLgQ6qgnJ_GB!)#SLL;49SVakdCn`^| zlCYBSbFi#}xvH-$07sS3R}35e(8Ytd__HOV2^()2A=yqEO#Tv)PA<~&d)5deMSD|8 zh>jxzzg}YedPJF&qItmER3-f9fOtu+FTp?xbD zNL;h^amgJg%GeZ9+JI<1AuYft7WNF*g`&F92d_61NmdXUQDRo7bb&^gf#xan6kig) z0;`g-^B%hJ^C?iyz;b5va}%rB+_VCT6?Ql`d0;z9rWDtN<{^S&&7BxAyCm3?s4#5% za73Y54ccf(y^gUz5E_jTMz`0)e>XRq_Zr_bT&OHWI6`2xfd zT-yW&eWH^iWCx1D&xzR#m`0 zyUT;uKKqIHO|I|%7dY7cKxLgxD|#6^9U#vGgs%`tCa65Iy9Z24Wc^iHd+1(lJ$MIJ z?>L5HwF7@3n2&&J+7Rg|Qv2jsLr+Pzc>zbwK+OUuJKFa++VvRkRx+O&RKzp`Boh(U zT4x(=!WLGws5%lhEYtut3!>p!_|_&&o(vvpeh$KeaFo2~(Cv%#*OmP>#bBtG^&l<_ zv#S|GgQ9A@kz2DW7xN`sPD5^y4GzGdiKH9mZI4C{ENm;D5dK@gcPH!{>^ z)JiC=v7B%kjD(U466pn|QPc#steB*cGbciCJ7yF$V4hTh^)iYe z@mh%;W>X^oA7o!aV&;J|CfrpO;5|blK!kJ@RY9Hs{SI)vOPuNfH}!zy9bzjNtY*Nl z5N>oJ!`!e^fc;#NN6$SEa0YU2(9#eLw*i?GoHP0v#W`JK?c@R@*i?gulL<`fo1J2$ zRAKREPNFB^s)MZ1kb^W)PAk*jeEvYb{FN(m@#zaVf9VQddwtKY?~GB+y|_*R^fP0T z(VP>lOj%XNvLZYIr{m6`b2ZP4uc*s^(`~Gs?H}KIe(Sw=U--(8pBgRazU5es9osjwiEQo+$J0zgo$kzdpmwxrzfRQ!jE<0&5xY{u98Tybbb} zKG4koI&dz)+$bJF?w}#+99;)=2+0V}D&ms|f{&hueDWOF%fPh`q!SXhs*Z4UEaTsQ zQ{O*=QU28J4`F@=H@M?3$G>}gw+ceyam7!pB6Bv(8$79IB zk-GUzk3INi{JB5(jril=bQ|vKnH-wpb+5c0y#_>pLLiw&4+W`<6DUAuz^ysB4#UyZ zU=7DN%GM@s|5ip$!r&D4!F_a?@KQs8b!B-$F1ASBKhV&g< zFgsqHhORSA|;peo7QlzK+^slm@pSOqzmh=$`$G@1<1 z9MC8)(@X-);arqikadJo^z9%S0V@irDc!MUt(_c!8e1ab1~*o=T(Bhifmp-_D=z{6 z3Lep_ZAL*M{k06;o*>J@cP0RnF*!-%Z6dPhmDPIdbRI>1_k}iX&o$l>>P)&rpuZ_t z8J5_)G{S}7x`^|?_#F81SAd+v+8VI70c0(ZPgNkOaCD@Y%}Q5fyQ{Y!e>v+F|BvlE z|HQ8@fuiO3_XCf@THpVZzi_kq$={k?-2TSuaB`B8W!M-1>LSxfgIo#*98Cn*_JQ#s zx^I6sj(^A7ar3v|gksQz-v?%Uz-%150%+#qmX8}i7^M+Es{&aJYn#u2!#!g6(j4VM z33@;}iY!CSKMyIGi)m>gjSFpsYML8F0H>gDQxqBI(uDeY!F+0{Mh2Eio|ou@7AQ%T5lS6!0J_0;Lz06=YliqcVj3RVCmnA5WG7LS}`aUqIHog464Q z+lRp2tKi)$z|A>jB?J17=qc#3z!s(mybAX`u0KB(+-BYHv(GPQw-+jN2)#I+gm=v9wj`OR14>EC#P2amsigZ(4S%L>-*KsHyP zD}55;%^T^xU|uO^RglAVifR9rW6$+B29FF@icb~g{N*8T+JF3K-(4=}z2#VrHa6`+Sz=t6B3 zz*|;m5n)j5P+a4Unwn#;Q6{;95g zYykeVW8Lga^DWG7zkLZ9{eH){|Gl#(zwpsd|H$Fx-TyOZb`!RSihdWUOx(`CV1J** z=DOVe{0>>TrCap+u`0RDT zKYoewh1Uhw$A*4KaMMQUs@2{(pNuuP2!nE zqhnJAvK*2XF$pV3c;I~~{wE{IWDHIZyp0dM&W=o~DP#0;#HLbgOYq2{C@Cr;P9#c} zATjY6+U(XTH^fcVm1~1y)!Km?3WB6~<~jpC_-+Jl5kttbcohok*Q8n9KxP9eh1U&O zh)8VfHb4jh+)(INJ=EO$;2aHNCvJRUQi3Zt(IEXlfIHl8=J{R_r;kpQF?HofaP>{n> zn67j*X{sTh_)b9`C}I&DY@MW-j3*>~BrUnx6DrJCOaU_{z9RgLpf^AunkloMpy+1o zuQ>EpR62cu765&)rJ@f~0=E3MRFlcNBww$zX_JT#COMiw-mtn7fcPrhidjzfHYtOX z6zvPfdxrC$xPpUEeFn1^o<}t+fsKv8D9Z9?Yp5>F4CS0SIs#NRUtRgq>fN{h6PX?U z>b2ecJbvl>$IF>`IsSvj!yj=2jE=i}{m;+0_a2^J+`bo?0)sx#=>Vz*PlLuB$bo~wV?tYsb|Dku`#5;%Rt~gA0i19X2O*QPCHTtNvqvoag4iQ1(EE1axO3WwV z!F7|v9gp#D1$rL<_l`CRYFGno!pL(`D6BG6rO|tX z%^>0p>I8Y$N$3khg-YUYAOu0}cPd5ma6AzE#v=+Dzg%k0Mb zp_SqmlHnRqh^;KqMdR%h8^@+kvtazqH_pu#8&(=nK&^o*57KJ&xp;<9VAlhC1|AY9Yiq>7 z@OJ=R=wAs5R1#$P>1Pjyv^YXwLh&Rh(xb_y1CM2(qv_$OlI>B&7j|a&CttdPCw}=W zy!QBuki%WUa06If@iOd-^t!<_&q{Ju8Yh((UwO&oXt1^V>P`3D`k7;=Hvh+4?(Lp? z;m%7F`;nbezGFhX z*+cRi(3w$Z9#R>QJCV&Ca;ymEekU?RF9Tc_YKlo|ayTP*rohFq$g4BR#49of^t)o2 zKsw;OCwyr`_~`n8A6t{`S&XnZ>Oi(u>_y-qp3Yo#J~Rx`%(_1NX@L?%RMlhkXz1fnqKYB3#;>GD^2S!L;t{@2| zN=aPtWQb5&!h#!9<>Dbl)h(SW!Kg%Z=(f+T^gOi|zHK-PCCx++CatomSq?Ptx__Ot1>H|Mo6h$kz;n@CnbdTZdyCgJ+P{<$&sp1X|0 zue>CO&%BOudzERY-wnKK<0B`dIU_TP*e17 zJua(X_g1VvcqfPVZLkB;>JXUh3nt@~XcfLU7H8smsz91f!B|rqUbAn zeUbiJ#=(|DZ>TK#NDM`x0lozN4D{A8sEFv%)~>)84YL>i7EQ7nnR07NO_HtJa2a({ zW1B_XG z*S(pB)YN=}2m+8fZ!n*nsC zN$vor1VuQlOeT>k?L4_bsMkzUbAj;CQ(g`5s4{ZO?r)p zDr&$`0Z3@Z6B=b%4PerahOXBWM*pDZe8ixn^k=PUL(S)o&=0YIwV~d@Nz;dqNDLUl zcMzhBXhvZbU0Iz-mN{g(Anyo@6^Fd5$O~m&fTDr^ReO3_3qFf2YRUpIgqRT507f@- z+*^B;lqm-Q)J#xxAbFpnh0&%n%r5L;`|%6ded=}0UVTka9ss>AF<2pbgJk0E?f};zH0DPM7_?j?!Qn13nM<~HJNozE$@TZXiCcG_(C$W`M#c0%P|X6nG0Lq| zLSsE~$GNkPm3J-#4iLesX1wPy+V?U!GL%yT$&k>f0&yB%PZ9ygkVq#%GZY&MvH+Ge zU*oj!d7?G5@g*LlynRM0Wgndu3L<3 zZ<|yv$XJE78xn+|MS5#u0sGeaT|ckQLP~#cv|^3UMkm z7)?J-0x`{dU}oU70_Jm|EGeJ`&ng74aM*FYX#lxxD7bSKxN}Wxt4lf7p=@=5K`u}g zn|aFEM7#hq0%cG!ny(GnsX$;OS)G6pNysMf9zrw81vXHTftU=PVO7CO6|anm&tIJI z`Om(DOD|pJxmT{?m26hPt6q$nTUsQUV;aQ(8@XUcnWL^%aq01EJGUHJUZjF_E_YOIq`hM5%(j#C;%Kn2@%cGY8TcwfQV+aTBwPL z!vtVNctu+s+(>+h5(CygMT~L?MYPL~`90E9{|IGcmqGyjVz;uDvmm#DEmWsNxj;2GSeK(i6e=NU|K#Syglf z1-pHRP6whzv`UKF1hZDVyw$0X7drxqXwkFk)lyU%6p7*93E|WRg;A02EE29G=&lLY z)(zsPxc>SPUjOW_?S1kou`4eMcmS*nfsHkw=maXDC&YVD%+m;z2AxhSI(L|FtbTdp z?f3o5(%iqe{&&9NU^xjd#~;Y}yI;&Ve&_m6%r0L2k;#P%4~XL?i*5$j5oiV)4eAuR z6F39LBjDODFjea6Em-@OualcTaEhDvtTOBNIN5`n96-t`LB?Q#G&SoYh)~OuG^{x; z7t1opdeQQ9prbOfV`_jrs*WKG z)_Ey~Ev2#%jAyb*8Dkq{PsyYSNQ|$eVn{x2bwyf}eA!B+1E4oHjv8h(+7H!w{tpX% zxV8`{!nESG)q7P1OiN-iGfbzzWUiQ(LCwFp1)kgz+_g@5*DCP#A#h7axRwFAQVR!6 zo!A86%!moari9K&0Kz~$zx63V!=#opd!f%D;yjcV7rF08u;VO02oHG+YnPng(@AnT+-F4Hi zRf3=P6!nfGnxZ07b+JA!gDLR z`*g0==QdV~v)d0~@<{4O{R||rpO)sS|L$@B-+Jb*E1&rMhmOu~|Ma}*tTS^NI)zH^ zgxkBo_6|`(#sfUpwnZk7(TqaPbCQhJQTQRdvyi$SC!aG_t1PG8qBIJWD zzKN!zPqFEdbrbA<2&08)6$blMMpjLr7S(jAMz<9LwSAPNxeC$ zb8QfNwpv3#@pvS89EFy3%h0rTMvbh0Y4#Q2Vi{uYP@@6SxHYJ;tv0tQZFm}|^*XW+ zSn$+Hx2$TT^phyW^WNYqsCkPTGNFh>^KM*OpL81Z?m@!B+P1vO7HMdW_ zDU}vr)ZU22DD2wgHQ|oQJ)MAuQ7RKPiWb6RsOWAAI(;GM#>+44>$S(8$KjLDvb^-F zneQli1<=cZP7zF$R0-Aa9-|34KJ?<}%)3Q3y!GbSvTpxptIo>DIb6GV{qKDI2spEx zpO@ngY;6A6udJ%$scdra_Sv;7A0F=>ym>xnmz@F7T_v(CE)rpuwpj&Cro?DOmC_Zr zoy6)ly&b2%`|EM@ErMzaIl4}au7iHY##Jwq6u}F4s9A652Wr8_L zUqLfP-gW4#IrcYmtZZc%tf}<+fGfgW;yqDT!fGBsB>JWnY=cN54PeytMzFwGZLQ%k zrmR*DH`94y6lqJGCm=oQ0E_w$wD6u1KX1~#)vTOGW>wRZn$uMuSFLt$jw@9IA!>p_ zeVq)yqi<79g=(Mf`d4+UtGNWfD|3lWif9dv8GAHs@I($OYJNa&pwDMY)B?icfH+Q0po zU--yu~vo2 z;*=TdZ`Le#l93ss(G!}lTh4b@nFMF!HvG%XsaOLTIee26BCr_P!_RP|#bUFUht$lkh z?riLT`NgkC;U1cgXWu$GoW84MF338Dq5~9pvXBP6hs>wsXriD;vAQDt+fQTt>+i?# z?Kh))qA#kT9fGr6qMAe;Acv?~kY=jXHbb<)2XPT?P@#wlOAq+cP)@xgp?+5B3R9U zn|t8KfO4!)+_C~Zupzi-6*$%nVCK{Whn_g1aO^1-Rg|iY>MpV6tYLOFARWmrh`v$= zPQZ$|dTqj2UfaW0pTCMveCc(*{P|aLcyS--IbyXhSm}YeBfSBW3NT-))19K|cD>Ys;B$IhJENmVnXMFlhAfBhc;Rkb8!Z)g2V&%~-iI#;s%X z56ry0*^C<`R!y)v_qyRB10!=GO&m)HT+bBe3+36BEIZ%P>h)eXJJ(fQJps(|0PLAZ zz(?M&@F(f66_yIHk#nn{ipCf|M~mz z!H4d`d$uy1t3-CaphA$JMFw)+DM~e12aq)-w$$+aq4HCgfM0u^IJ*rNg~)0jvf7KR z1~%rE;sCU&-j-udt?+8{qZXrZg%E0B9A%EsOeijB`O6t)HUUSw9;1E3_`qX&Xn=W& zLNrrkT@A_v6$rGB1hWK~Fy+uo3@>XRT@aX2TtZ%wnJSedyJK3yV zK(Uq<1W_7CCnwd&c?Dm5RuqEf3>cF4ARPYnCT0m1YIt0xgakTSyxbWLI*$V zsAPG)N1#Phac>R5tOcH;3H50<7if%fYf3{fVo!{%NURDw1_Ml?0?mlL5B9r4biiPJzKtxUm6*9b#1f8Q{HQT0&-XsIMxwGPuxDex*Ms ze*MiK{J^iwp5A|b8H2nWUsG%0|K&HnZs(A@l&Bq0bg2xpG|}k*A!{;0kod} zg6XwKknMngufXZpV{&AejXkQFmvRo8XWVU5pc*#giF7Id4!|gBQl*9%k{DWQQ=XXJ z5GNM{!=~RVf|bGM1bxIzGRM5*&>bqe14wu1*zF1Ot}^QgTt_6+xNQ1l#-HX#33(4q zucw~RVoK-&VAN(%E|iyON!4rti)u5H*?xlHjeyY&;1CvSj~jgGlIIc|UT$h0H6T@z z0XAa!y0O!K{}$n?B@u6y=^Ikj*iz;NR+`oLf5VPyu)nZGu`y<97gu$(Mm$eW1eruF zeaPeBw4zMrirE~Pmqh7>RFgaxY;+a(t^p6M8tz^NZdsw6T2ZVN!60ekDN_R`0?Z-s z(H=mXb1F^$Bm95q$%=vul+_Ge2eB%YOoi7c6+ZRMRXp|Cvv~T+3wZ98eI8x8E|M!{ z*n!^+3xi4`K*(F-n9S3>HBW^?X7Ng_}DU7VL6s#2^cNM*WNfo zDjtJAa~yi=b;#u-@YL5qdL9L4leHOo1Dls?Q>R;#Qf`}hY774>dsMrHmc>kkC0o5XCa zxV|fHGLp?xtNh--@-Tnm!Be)9xtgR>u4U({0{*=+1ZyJg8r7b*yS@zr z1_%*5sg*1ZhPPn#&;%zp0ndpc#t8Y;lC<>51~3wpRu`EI5jcuuKdZrE%Ry+t1f3L` zh4W*y;7t?{-E|aM1cf?<5u-;x58Zhk6DN}yRc!25dY9JT@xUjwH~7bw{^mD4zMOcM<7=#&)l94( zp}XbNkKHsMkN?~Km(RbiyngT|5No}5Lfn2!wQ zjPNDF(o!NPMTO$fV8{{c7nKEJE^DE0$|19co+#18C(5OhtF~wa?HSFoy|63+KQo}R z@Uod8FEVsjMS2?C`__;q2i4KA>P;2i#f9jgZ zh#S&ErIr?(wYX!y%PvUTbAEkH^~HX}flKQ|I|(LO$yM73%sp^41IANeIs>Lvc=Gyy zxaTAzwPnjHPETz#HvWA15iTvRV((p=5?S3SL!de)uOGY zMc34E(KNv2U{Sz29XK<{=#aR+4eng5Fh3|+%?xIyS+2;sO3j0MMpEW6WA)-%Ip~&5 zJ0lTDWr4L)_j04>Go4UEc^X}lg$vFVqVO7`ziOgLw7W<<3DPGFBu19SXtXA}DuPMU zgu(;{RDhC5RY{%N6d4@a&&FC}W%LBSDMVow0STUFtZpL{5SSRW zM&n|ZPH@vvSbQ~zSk!uHEe)u1pd}t0Q^<|cs3Zj5#DicJ&7^~TBRp1x$kbdW>T;F5 zqbPcgc~{WsDvORF>p)!AGA(B~oX~w|4L&j|3*+9cEiIGwMxed9iV@eruv+UCQ5y{# zNH2zY*ob63pxB_SA2a5C(Xs;eE=_Rp)8}#c`DZbE>1Ej770?yn>MA)L5_uuI-64Avd&E>uN0f>zpT#xe{}1X3s>#>9{$ev&XzOpa(qn#M-M&bR_>T= z^fPz&bo<(m%ytj|{CxMYVCH~skJ9Opxe$PZH$hbfgm*M0#xsidaKkO_zvu1T_@=vY z?A^z(vIb;h%4`oj+#&olh_D!qm7RqC1W7SQzDLuO2y!!RfD-d$IfwX?unHXQS28&) zrJT{MBt@t$6KK(ZJfdn*nw0S6s9#G0?v_xAtXCVcFjt0cJ47RxPg+`UXcp41%s{J1 zmSL>`g{lE8@2@-b*ByGR4!xnG7=T3%YM}ALN{X)lA5_F<9<3+{m=PKqEA5^QBYUb2 z*pTqp#!@aWt&A(Qv?OXRY^j}Eh9rBg)6En#Lc?lP<9szkx4pbW(C!}9eGp(F!R>d$ zmVmZ3w%nN8fHniFjSbaTBKB*Hp@OL!3`yU9gDBe~h@^Gp(OOp)kTsKNJRl2cd_uw* zIWI+yO5m^rMwM8XrfXf|jxE7^PK$i^Y2cnNY(X!DJ;PH*!daz~NCPzjJktkNlgL_{EPu$)m@gqboY9CyxWihV;484o1YZ z1m-2h<`sn3H}AORW5*wO^CQpw^>6u&<=nR%%drHEmg8#MFxXl9I!tYTzuJX{)V^ecl_Xk^5froFYg>=+!m2* z0A>KQWB@6lGO;H7ihTgLWsswi_}pdUBQKIq>_R#Mu5|?cuBz24FSL0eZ3CQIh9#}& zT(r7S(irkkGf1Zsy0PAaqa(=vRWC=^J;sN|ssw~aQ9v_jmI0DGwwWVXXu3&518?jE z7A*~=K0sp(ny<~F112GL)O&c6N#K8I2+RouylDDF4fEYw6O?Rm$1e?ap0(3)An>!c z{Y8TcUW*LIj$MurcghsJZ2a8kOB9FpZqmxU-Y zr?t6gN@q^$K!K0GRBW4>*RvVh8=bbULXv%$q%a*OPpCRcM~o7q1Wgrig`m@;bXJA= z3ZS{kXs6=A^H=2P+1D|C@pT?uypHlE)-;fo>L(_xt zd#cIoG|RGJ(edbZ1Wq*|3o7s>FrNkAt|`>@yXc%)L;sFb7(Q?(hIbs};A9U)PsHZL z>`*v66jbv#xrL^Lg!vp6rBwmMuz;dV9Zye~MWU?`zNE}1CbKa)8+lA89)3!gMJKvU z;ha*PKm;1~+!oS1TP}eu(Q$xDl9)=Pa%`aq5#9Ha^-<)-Soour6dK~3A0{`a0#}IS zT}9q=?DQ3#p-Q)>%)5{*k2rJ|2|m$B$*Pc;8bPG!*WC(DRkV$p>VMUqMA|HGU=5~o z5w>aI6qSaw)29C30P-ZVPu)veRCzVPPx22$0~DSAFYm|2o1Yd147W&h~EHBEjSRe@vAh@5%i>b6U;p@_rlUsCRI3~je@vi zg}7r)c;6=EttS+39)M~U#sKy;lYrR_>ga?7$X9Dx6a~2s+0e%GAoq-!2 z$nFd*UVz`-fIV;=^2~PhELs9azvprMq5ok8Yir+gaOL_>mGkm_RPA7EizvO|Xa=25 zv2k4FJO8uy%MX6Xee$iRyL^2PY@1*vK(3LJ-AXYbLYH(!hz$WWE~QU5vc#I605Gxlp^i)37jZEYQRJ! zDA!cO5xZ!{4S~2+*2a*nC==8Kp~RNB`6wwwh=!*{?;}r`C%pv^9~i}#Mymo!VzFaL zqd+tW)Dqn+k-4nSuOZRm@F$}O4aYAkjZt-~{53jnM0eCSB3UzvqQ!dL^;nJnX_`v3 zN%RqcWI_E@AxgW!TPj zqDMh*Am|T(ZV^DDl<(}#028SUQkB$dZcfZQC(mX5!SmU%6VI>Ta??jwZoc#ESN_te zQ99IR`pk0tVXP@n{>3Nzy?*u0*PeLp>*u@s??qXDU0K=&vn+?p!q+s*C2B*1tNpAL z93B$05|Ve(z4bO3+;g0(cW=qs9mk}5Y86s+jFrOAD6=Eb&jsdFmS*e|L=$WT&$YC% zx8Twzba9>zA)Sz_0_PLMbmB2T@|aHyvzfs>YbCEZ6?GAgmS}fmwbK!r40@3ecpvSY zThdocQ3fK3T^i6}bLKjVPG6-`P;UU9!kXSp_=xR^`Y73U_hXB>6ng|=(Qazs_GglXrLQ3pr8KzO zlrM?axp3rIU{fK=+0*Z>5!@*#64N|9iK96%nhB>f!h1u%13A44y#1Kq!8PEHb>pca z(C<2#8fvQ6%D^vN@uf2e$o_LjK zU%HH|SB}JG8LitPvpmqyd`ZlvBJgEi6j!?a{G*+X)z5Q%_{6n;_=C?cr@iG^jwN8U z9RI0DG{0{D>XC=zp7&?M^*i%n;3D8UFF_B_LvB9~!!``t(2IA1Kl>mm{0!vb`yor; zqTlEE{=eH_EsF@=7JI?Ws(sSiNb;Z~Qagmi^SXoRW9m+{HBt zUMvMUgxzRE0}D!{=+CT9fK>%Ih3FXZ=w-n_c*gkD4zS)=9P0zl#n!1cJ^|7YTT;4f z*q7=;x3lqGmd1La=zw_vh@+NsV0W9`xlm#EVo5(YXfDY_80v)36fu0GtEF-==(y$! z$&Hgsv@mE=fFtG-?1ED97%Y!OW4WoKB7}-kg`x>0$^;Ss21+IdmjDBbpUMIQJ=XS! zjuTAm6C>c0#J~pz4=k3rX35nE^dinh{~bd+b2peU2N9EqMo%DzT5KmEOaXyXK`Ka7 z4cs0HTbFwBRRAu?6Km6JMnup9=1sf-Fv1%V*hqktMqhaDkd%j9Z&}htATiPe*2LWfC@La& zj?k{4GgPduc`3RcrLVAieTMBPcCh=|*D(J4SBYycfiPla2yASLt`9+V5|W`}%$o)e zZg?81N@P~iRr6Wy%EQj-o3Hgwo&1N#-g4(JJ@wz*b9On=F2^5*S_L0^B+PD)e8@j^ z=F#lw3zKj1qsdPmy>{`PeloquC@XNeLtY5fF(Ab*BtcYWm>dBI`=a}YFsSP0DRl0+ z568asE^OVu&b8A$6ulgief85_$ovRurAS%DkOXa|f@$5e2z;Y3>C!Cx+vQCfC={rs z;B0I-Iy4#YmzW<_^m79}L^Dt`2gx+r#gS55|FeNNqMkZoF^Te7D|itl&LWGRK(RrR zPng5|t+l>hzi(^>R(&0yAkb)S-=$Sy&Y)k!{t8&sM=!t5nHKc@ zzG%M(%bby3FrN!1Q(!)k{w>F!>>XSGmpkW2{|Nb=SMk_GzKzQ*$8s#k5-?hh{}hFo z2yupb=EK05wAB0z1RoB>iibZ!hx_3k0PxJS@VFmtV+!7U2tEej_;z^CBM-xttfJrh z*!+?I`MYga{pG_~F1*7At6i+Fk{w6vO^GWzZu9PAc<{&HYyZb@zf(`F6*{5v>Kx`B zwQv&CHp1RfL)xi$Le~ViBQx8d0l#`xxog*VcXSAh+sxb`7 zS|*giB1Rcav7G~YD?qOc%xA#%Wy;0Z<``Y|R!t3XBKg3I0(GIoX(R|!g{zM-a!C{sbm|DiQ8Y>p)Il_PP(+_2M@pUr(5b4FR*_ahSedW{ zs#0hPpfLti%8~=6P%=mistK|_ZEVTgDZi;j8GyieUR9tPx{s0b9?q*a;bgU4ckHuz zPc$*_VW$FP?9>X4Y!cI~j-IiISp`-*g{{`GT9Cs*RiGj!5=cbBwLNYe1W*TY86hr^ z1{5Hih_pPn6MHOdSO{OoQ8y9CadSWo9z;oo*%b2&V$6jtK-!gwv~WXd*_GBcee^Zg z7<26zwH zFlsTCPd!wWl?P^X!ECN@4%z1V_0Hz%XE#m^{`qu!=Zk)A>&otf8)N*`GW~2h{?HdG z@#_}nurp^AAO0}$p+~yMhU*)gO>dcx4*&f8X!60??&t(659FC4&xw!%5N0ALfh;sP zU^G=sCXjMM=Nz-sr)6;ey|VfBcjNebR;@qGfKp_#2idy<%%{N|TGD!}VeVy%wF=e= z>{4e9NJw>b8K^OgzN#SO1LJt#V{%Yoa^Q_+%>B$Hf=v#p$)AV>E!yg707z=*yIO@N zHG&i--~^B)v;Fqrp`H~(?B)L_m_pey_$_;yv4o9Swl#T$$`rvzR&+vV>iM(r* zSj&uK%kY|qT=n40K&Q|=*dL^>k2;VfQHh|Uh?2~W=!0@oP80z4rxm_(d5r)5(ewU= zpZ^>VU%VnVSS8l`9!?c7L1lt@DKeeRHFta2=Gv2+YnwmyQ*Zy{=gusf(aW(MOTcJ3 zzJ|b~H(bF0CO!P&@Y4eTpLry*i9Xymw_c+Ezn^i}|LqG8?LG6{kL|y5@kdJ*U2Lq0 z^t-@pCVc&ZUwz=Td*656&p-YBZ>ipKa**#*^m+x92Id*y+Uc&buFL`S0X^w}ixcv( z^M;STK%5%`D}`dEqsX#Qd06W!s?wrL$5ge2sBqV$hNLU*GDy)0K#>Wsch#_Sp~CK! z3ge?tvbkK~3Wa7-s)Tk~Cv_FnuDBVCn%c=yS~+I1pPLX7(V)F^d6XmNfEGgSP@I#R zI>HKI$q+w0t)!gKVbzqJPhry;Y&3<9XW(=yHk*_4IZ#!EFG264^ETp%V=&RK`6n7B zVi}NRdH0U24%4?e^fh9b~-@wVR3S6>$9=S=UjWh$h&_T9vD{ES*fq zD#)m;im6?UxDMI!Hn@?sRXc6Q1UR86qX&nwK;(^5caD|@kY!JON_6Kc=YOZmgio>_}nF# zT-imrI|iq7Lk>Za3pzQFcOWj0NUbtqZ2_bsQI!HSxFVb7EBz})xBKxb%b(Ph!LwWM zy!FM`Zh6a9d`SFqmR*iNT7XeK(=3RTZ$9&Q@92edZ`IO&BR$@Kw0HEa{_toOW#!;h zP~?PjL7y58<4{phRe+xbgLn_gdR^%r-(>H$lNjE68&>Z*iPhUy;Njpapqv7;F)*JP zSkE%!B0b#)`LPv0XEv7Sx6DC1nA~Y9n4XWxDnziY3#H z%TsHCuesEX#bX=!YCcT5IW17m;0>rsLsb&_MQ ztn>w)OhimDo)Xj2tH^$T!+m`7=3_ti*6;qt-~Qzvd(-Z6K3tCFSOP}N@wEgRwV6V1 z0Fsu#(0|DJ{jPs{rT@eyKL39@x^neTjn7|xGgh|@gAT=)BD)8wrqy@+=U=Zs^!*R; z+wWcX2Nm+G6=Yv42_9GR3UUisPp1kg0mTHJVkXdWpyxv zKbpbDCH$zAayBRDN5XO}HZ5V38Ejk<^AfNU@KvPr_*gAgi&dZ08S;!29syjaY^@SV z251(L4yTk(2a31MTM2A{WVXh-UCY(Za#y z88qk@td_+E*_EniN-z^v=}-`(k`W!R6NC~|R#L`Hlvqhk;761p2Fs!ts8$0wv2z^j z^MvrlCu_@Uv^9M!cumEQDo70|Q@AM`KD`A8hTzOW&5)iIb%(7m>PU@ijyu_kr;fBV zei(IMHtw_71Zg+6=&@)=)OeDBtN$D&CczloIUvgkmqR3D07yFmpHYk+b~u5*y2t6I zYdE@igoD=)FnV=Qs_o0h$)137L7oFEYecUPbo21q1jR(e2V~7y5xx>JFDkISlONLX ztaOT(ij&7*IeFh*A0G_+&p+{hxMOcQ!7j%iNx8F80+pF>@kkFy+7WF$mM4c0&NIdF7Hjwe8AfDF(%eM;8uJ&BD6Hc;Gj z9QpAzxRoA69LkwzH5K@ogb4ef&}Ebm*DGnwNR&n+7M6|J?Md^u0p-j%pLk41hWW%e zpL+3g3QIup)SC#HSA3ltI|Q^CB9KxCBqcGXimh>73e&MP(1;|BTAfW6!ZN7@d_e2z zBdfQv@De7BZz?s_*$LEzkb%6T%sOD+0rNsa@IWEra=;Y|mqAn!usoH-*a|G+)`Clm z*qpVhhbF)>diH^B?1i3jQm;L}8R^tQzi2Anz-Q7*N^N>J4XzW{pEgB1y(3$Rsi}Vx zJ_p-3X)IyPqU25z7#h~U`ZGxj^U>NasP4D0O>Bw{oU{TYR0vRoKpi(%7)XgM z?=inN`08$U^acFmKRaE{i_5VbOTcJ3mgA4?xc$F)v^(fe-}d~|=g(C0`S(CPP!uA* zGF;z9c6g|#zvDaoU-{p>UBCT3$K*PQi*uli2~=S>91}GdO_?dOrR0hNN0rDwe}(wf z7Yr8;!1bZCtrduBEfrD;TW?84Yc#v&LI*5v{56_-20vp#mKnMO^n0apoy(Q8 zCHxe09YMaPqPfDUg!o|zvGSHg1px*yCr{sZHy*M4+*5sPDfm?XP(H-poCH#L_lLz(WXZF=b%0rK8M6F5<`32$vvXLZo0clR^@sI$JKyo&$BXz;!#uMTz_{06mjjnsl_B@T1 zG9nD>1d^#G{!pAZHG~QfK4KygU9v^Q4CX>wnt)0X6JtBsD+D?E1Q%Eb83_3X>+*v|h$j4*^N8ciMQhDa+Ef}$`QoJEP62t*B@sU=gBY=gU?p^@On!KR=3#RPBXp1SJl;K)g3i}MM;RcQF?E)T7Mfdg%hr4EyXZqILfbY74@&h*$xAy7F z46^G5*Jt27^y*AS04HiH(JBCN3QL7$iuLFL{^nd{RUp?!75>`e+w%E;`dME1%rlsb z4#XWlX?}f0tXBXPO|BgRX2@51+x?r@etW(*{j1}NyoB%kbEBna>T)c{5-?hh<@lpH z-to6?>E`&K=IY*Qxf>$OAb|416=GiTru%Ng-~1at$oJi~uCvU^Q*%K_0jEi&6)O@A z#U%(?&w$%9&vQqVkDSl&ubwcQf-)Q^H+nJFT%yNs=(|N@n?&ZR{dp0$)u6P($^gl8 zpxXsHUGQiGyY#Y`?bqfq+L?oeNZxbIIttBILZeefL`;+(q+^qM)e5CGgcMf9$X@_P zm4s(yDy~p;R~4O}c+CN?BC`^lA5Jm9Hez{U7v+U3>aSf9>}~^->*Rb!dM}|`6puW2 zC<-7e0GA0e2Mv%I=rW^-h^j#y=u}&&EDdja(aAYw(Mam8hTn$B^uVc)H}B)w{I{!xiFr1^2|E_Xz-zDTEM+U-JmeaOl{+}4`(Zr+gM zR7CIX_i(xKV&rv(#3qh7M*pALBsGmzv+|7kHBdQsss$ejN`1){z1=SxVGR(p! z5=ioHkVfN`9LFgxRLMTQKnilEqRA-}kQRzu0esj{1^+41G?dcXEFuDE4KYcSzcn7y z?ZP{j-xkwvC_+yYmmD%`8c~(1bVf^Xi4NsHSc>Oy4c0n%^&RwXJgVEIT(P$p`h1SY(wY4_OrS3B#&U-g;$s8!r{n{Ide#KYrd!Mq&HvGCm&KzRR|r;7_O zygG2@-c8-(C%$iV{?Z?x?d-k1+B@tB>8(2u-(LZ`T?$phG*tx#h*M)(IgV$FqY-hm z2kjJat0$1%bi4H4_2z2p-8aeR9V@c30#pXf4j{8VV17igDsg;bb0Oq#3RD`C%;Ug_l^DHnxstTA-i1DGv^vH8I_Nb-?1_NakC!)bus5W&owvsJH7=Va~*RV0p zZV(R|AS%I{8fo7j;uIFdS+xhAm?gRt5X|Y4Ef5+eRfItdW@dp86;dgcUT8j1W`vP6 zY7)RZbvd9N(X0^Uxv=Ovh3vvchh>i&7X!;&9g?3-zO|VK_-6GqXVA zraBdRP>EW*jo9QvG`RK=!V@-3B-8*GYSU~&VG`F@v!?4sOQEG{2@Svw35^mrwhZx_OFDE1tiIF4#f+9gt zq()FINv0)Jwj{7**)EqSsa!70)o#01xokHdd#$csZg;zEYn98AEzg4t$g(L?q9~DK zisEc00Rl*Xm=X!(oG;%T(;d#<{o|Y)@c@w;Y>EcS*lQ&+@gm-h8#iv;v+uXRp+g>C zHXd5=TAJEK$;re}O~%sgywE$e@c( zAyK^H){v&o1qYsRz~kGB551)L&NxC@T=qodR zw;^udj5ByF1k3fPQ~WUwD|WEwFkj!nrWEO~fEh;e^3; zo1EUD2kXq46HoYgV+1YJKwg-E?!f(sfkf<>HTrc+V{E{wLuX^?EltKv)PF_eXf&B= z3PW9yrV3TF+5q~5wGyfZUt17aG0>5Gu>B4bY7)*-vXn{JL0UPOx8b_ENxK8-v`l)r zrM(W*UWaa>3)kjTdeVP06V_2Mq@#0W(=$^I967 zsX|zA{6_f1gu$rXIU;GnTxMWmFlUmafRlh*`IPV#tlBLwzP`utl^rXuZCkaug?f8i zs-1xqI|Zv@Wm>>cS72h4On_Eu+R6=i7SBNmd2wDXj(rW45>*M-73jTCh@{;bC9U+? zG;^P<_xB!et*l(?99cOpH@*J(^XsRIxnJD8=Jh)PM*x2OOmf@d`qcK*FWiNqxDRS? zDYtjOtr%B}wZg%riZmCt+J?kMNt6-l32#7I!$$i=Z3gc^OOY<7njc<5>%=PCr;f67 z=P@iC>08=$G%8s*Ekflqf+C3O<-`uK&SjJ8Y3*VBsvt+%WZrgE*RNLL^dp=ZxaW5M&`? zxlag}h)G6>fI^zMU``IIeq~^GK^Xd1$SqHys7P<(Tm`eZtIRM`_nof=PJn z1%y+(OySgfJ!^fXbUijEK4zKJQ7czB6R!x({wDd$# z5M@0Pt-sJ&YJc>^fAdWr+Uw|kwgYKpjfS#m^c(wgnfWXo^zjTIp%_SK6r;Gn%o7*H2$Udn zgNvzlLYNEWFi9-FFGXFJg2@DaJVrejqZkZOY?n6K7+`#Pm*w?ct2Xzb!+oF{lJI6E zkhH+OuhwdTc}8Xlkcz29PYF|_SJSEzs0F}C74%*lQ8?f_RbNo`*Rqwxt@h!Sr&sQ} z`IGse_0(hk-}^>$kZ4}>`d!w#Nt5ylfOzmBx#P{RIaY7(zIprXbKhPKC->H6eTT30 zCSUoKX-ecRvor%-F&6Ggip*yt9{#}P{@s>mAo?JzK(=uAU zE=*itQ&eVkMf!=+SAfad;8*T)}TzLtbg)M?{81RG3j5kt8%G;W3fG z9Ro>m4M0RCAxuJAsyJE_W4;2y0Wyh8gQE#SmrMz-kRWQ-xE#h+J-jP2&}gQ>5OJW> znR<4c`I)aa1!i@$3BWY}fsLP$8Aykj6SoEsMw?knBQa}2LG0z}ogy&RW;kd~xGb$% zqlu}mF!X>isLmKA^kE$ZM9T^oPK<+znUXl(C+oDo13-U=Lm1v4y(q2pkq%G(E@+H#-x&@=Xh-*^TWp1E$xa%S4^ndL12r0xxs z#YEDC=X=MNKH?U-A5Oci&;IyN|DlWPoHLE)HLp2fG_QGmP2oicl3WaU{r~!_-*M@4 z&;55>7q0zjt{ygP=ft=GZtOsc8gKm{zEA)755Ivwc3aM8CWe-V&|>4&8@exV zu*C#ip%NABr_T|;`n+Oe2(0!TmfAtG<29Hr(qZb6+<-(OAS>Dc*ntK$a&5!~R#BD# zlY!!;XKP%4v9`%x1=kg1y@W1v)ATKiJ)sNM2fdV9Xoia8iUmjOg&N7IN)6wW_Kbn`YoiT1e5Fov0veE7$^!CZKE4w z2~&ZIQbf%~a~(Q`L(GqdkQ&)E6coPMR(MSZAO0P^c?^nL1+@~sGSs!9s)(`#CZ(Y& z1ilWQN>DR6f^8t{0`0D0VG**rgmih4t<^sA)h=4gInu=pNk2u}6C{~~q=_}$a-$=a zWEC7c>PYZ1PnxItI!FSVRJ#V0GZ>~fOdwzaRlq?*Q_cvf9Zczy19qPwJ4`JYdIhOp z5Rn05K%(ZHgJfiq!SYOvDVc`*0aGYEYMPq)+ECSsa-yt;m6dxHik(u5jUgtNw{3jo z28t`!fvcB+(O!s2^0gv!K&wM^dPJ{h=;Vqt6*2`aQ4^?{26Q)=$vOg{SEaAu%gUjy zm8vDd2?WE|Vt=E(y7bwlJ8pSjwb=X2OP~MZ9v*(T|B^uT95|ZSyuSRP1_0KmUiU0D*xGD8ir& zk8*G`s$*RL81W%(6v4ATMw=L{ARwQ{B1C!h!R}#7hcQB-5MhHnMGz_uXr^QsszryJ zNH2BMWK=fnnaJd!X-J_D38=CEs6yU705fl}0O4C00ntsPElGt@m`XI<1H?rjLj*1n zp_sV@7DDwrodbJaVYjt+Y^Skp?l@^|+qTWdww$F5_v&tpqfFEj_IhqYU*gAIRO9l zf<&vBRZOTIKrUTjv2JSO2%FB);1l^2;Q+Dit#%t;oAqai)5fTbN``$dj0XuV>jL`4 zf|8tU)LIYorW8>xc%tiIL$BOt_GH-9`{&=D7_rYAScAdG#01F-hGG4lfK<8Hh7+6)1H|E2kgknJOM`0PamF&bt-3scJzHg8dWuv|$ z&nln}ow@{a4`_#05j^{kGl+-Gf|4K`F|FK#8X;>9+4Q_EVrLzY64N~h^bm?|p^fD= z?4R|Qi`(k6=s44pjd!R_5;cO0>7DFF(6u-?W0@VCU9Q;1?~jc&4T6!{jNQ?+*xtqS z7da2Kg&Ko57@t~M(TfY(=ow+FV*99vAu5s8;TFCr{pgp{i8AtKFhc)r8cizAFZB)X z7d({$ZN&(13LCs8ggQ9*%unPR>ibp#w`;ZhLg8(TBVrT&@`RAH@h{xDNkkJ=>=Wi` z+Ml60kl9&c+m?@gNhFz0BM_H({apwVqW!UR%h2||TxoVHx~MclH$*gOpoB`m_}osB zuxEZ0j2CkhwXh@DiDY&1)&~qq99y(&&2P`*(ffe)(m|Jq{P(-s@q@s z9h=$ym_-yy$JenZafDFkAcTS>l3LJ@f~1nx2OogPi6>b^O>U7}iYM(pv~auPk1F|{ z;B>k~ko!#p9fBH8Vm;#`~@Ee6!j&{17b>corIq)p+6123L& ze$qBdwN8Jd3(3mMk^L^F?1_oH4rZGV>ps}_hnoPlHPDzbt~p0S+@at-s+hsHkaKbm z79q$tjOv>L{^38janX4zTT2O=e03mi^l44pt!ch=l)U{3q%gXqkP4i%lRTN83>9wD z;cm0EN;nG&c0a$~y*8(T9Gg0GcsgTp1d=gsf|1IDQS|4M7c8SwaZna?ER4!_tc0pW z>ElD{Uf)4Wx&0u}_>bIFET+mHZ28@wKbT#75J9+V%wXG=9KRR5hpc9Sh~DF%29n0D zoHU$kI1T{s6@t^u9CoTb63=$JncxTiOMl||=bQ5Hw+6{m&nLtPO?5s(ne@a;P`lFl z>iw$Cr(WyYdt1QWAOF|S$L^iz`FxDwZ%*7VSu@uCR)JwgYK=%M>?nMc2hl~TzLAMa z+%59jQ6|78IcO5GWGfA{uq!{9$4SM7;)P6KPqkj)9|C0H&Ho%lUztwd9sUY%geC7c zR1_N}VbvHg?rmz z2o(`4#Y9B+K)?w1&LC{UH^W%@vu~4=UBZi6X~8-noV`qzDatTX$(6;m=?sLH+MWA) zF2X9L#-jH=%IACG8jtx*=fe6L5R08Icsg2n#YcJ$NjHS{1oYtW*IK$qdqoaExH$G}1BNtt2&1$+$XH4(e&PXYbK}v$K~u<=D$RI%}I~P>rmv2X~5O zt$^%tA97fo3s$437l`1xVar!JMOVO`d8 zd3T|geA8f~#BUm(vnulXa(78>aHsC`vA4G#4T{WU%4;Hh|Ec_+;7=C_S=}q$`#@gTU~k~te_n6 zJ1NFUaY|v!oTa}R?rPM)60bKV0#^-*{@AXIB`^f09Aici@exM{Tjm~7xg>mNi0d~b za1|TYBS>P@&U2yE*-m&|9lr~&s=t~JQQf#2Ue(b1S!TBi;>=0HwuprzazAp_-AcwU zs}FWI+8dgZ!$8nu<~19JZFiqT;6++8)8Y&R=$iiP!-K-mdLM)En*tl0+ZPOKg>+y&za>Z%BCj0S5&_f-*KAF)lX{#pJ~#y}cS#06DuTvwD{U+|yD~Dpy^S zC*!OHi(XZb08*a8pja6|V}ltFA}(&Lo~B+MM%L!5rRp5h>-ECJci&*y@jhs7#fQQ4 z7~8#(TDp;^M3vId!=GEn;Jb71-u4lb)BAWZg!0kH7xVAY!Qeg{LgGGqxvGcgS&&G( z^J%Yz%aG@FZ=28##j%F8;sIN3V!XclJl#<{h3h@3ZEgE`pvqmrmK@cK-3zjrv~gXg!mic! z-laQ>SuS7CfhNR&3+%EVbs@9GO##O5{A8mUpHz#pfs=X#7S@+_w!ZmkOH$al;#_0O{{omqu*zD?>KMVJs9MmTnE&prn>)^KjDB zOJcqp9nK$n5IzP@p`op}{K*P0|s?)kRM9zx9K6??*#o6YC9Nm5QOM&|#qvAq2_ z0*f&Mj!k514Fy^~Pv=k+Y8|#q_Qz_VH;!WV+A9x9q6Wik!(DUBuKV^pH=Pbv!QW9~GGjTutCscfZda)|Ma;b~?oDg+8cNed_^Njwvu{u8IL9 zM)%3l@EfVbpm^{hFlB(!9(Q`cRNi(eS?k=Sxc`GT}1u6NQlhXR7G4 zv8w3$_joMDV^kq7cuZ7rV=4oV*;j_Xx=TutGayQ5&z$ze6LvG0V+XLvS=4y^sA5?P$j(xrMKA?eN@_ZVP;yRjhgNd95{7fWY*BEvcIkWS z42P^~6Rz!8b^=o^-&8G}u~H5$N>~f`vnR|8cIjCkcMEx33LZ{+xNyOZjmJpgjcz=* z?=kC5t$GN&y%DG#lGi zK71%%r`H}CxW0;=u70X>Wm2~NfgRys@Nq-9{qJj`-}A`zMvme7|5*{;mH0DU?^6lA z)^2|1iUNO=*aIg2rt`M88wJ8~wgS(Y+Z}z5&krR(%i7ldJ``}#jfZ1b=Cc~x*&$#; z%Np??1b&lzjgxo%JYY>|T1KiOY$)+}gPF0A9>HW|gUixK*J&DlUi%p{z#nR@UWLTU zeq~>o`=fc#sEA6)EGCLlpVJ?_;Fe6U9>SjYy9`FiE?!!Eku-vnfYcg!b9r@FYs@UW zCO7YE_3GgpzzD(}zhCi~o2o_oaI`6b&npX=eufjV)wjRZep-xDrRT21FtnsnRwc?q~T zCk_%a_Q39#Nr2O`SAbK(Ha@}ZY_Xx@u)S5Y{j8da)2%erfY=vpNFx#LE{Clk6Ie35Cq^r?NJV;3x=KJ8(kgvlmB^$|7k?P-KzFgGU|_ zB$kj6TFu&$kFG8(z+})s`g;@!zU*~4;yGTw z7wjT1cXw~#R$Hq-2%l>wQ;n`cXFwxIXaSWl$Vt*UFBB1g1=4VcPlzD`MnGu(Am7FM z&hUe0<@0TS$oFLi*=w_e+_cF#1tT^zODa}5QBfrLP{Wl<0j1Cf|nAqmH#=_TrcDgustkf(rayoJaon$Qi$;T){1NfNN<9?Zp< z!`Ko@+Bb!+GvZjtVIm&RL>VVwP-0XgQD)JGOTP@BM@Sd&*g*I(r}!SN_v527Z3|Qa zCB>!AQW8J1<BKpc(Ie{Q=OZa8oi%tj_#*ix>>Jp zA4^yFuQ@sEn`!EKbsjM<3u|WXCzaIKJtO;@GoL<40|BMQqp@Dk#vPvnZE#n;#LGR; z6=sc9(qqD%ZEYFGrd-0(8J1GIl0FERLuu>kkB^7tUZyRAzVaM6b-HHmF}ENeJ2ZAUnF{4sSl$v1K~yQo)DOj2bW@ zhh-Itv*-z~;NqM&kHWBs;jG>5##39gK`G~8$_K9*cy*1+(D;$c^zg^>@<~$fmw&YQ z<3>Bq6~*OK`{EyJE`=W3*vD;pQ~R%CZ~1zn#f$Jw9|?KV>#V!%erh7bz}>lSov+Ku zmZR~S_OGNMZ->uq=weFD~JhB>(|Su@0}`! z^F7|7Yb24X5}Y*U>_)e=%z&B+jy(+cBssTJt#rLyJ-1>7{}jKy9)5UQBh20uSB&2_ z?cMJLAkwcE|0*l=jFY%*~G!TkDJzt**=ot>GIF}_EtQx@AA2m9qnO^X<_8h#c8Y7u>P`AL% zSqFL!wk_gcV{6GB9TDk5>(-pv?l>$z)|>@z2=b_sZYhRZxU*1=3wajrTe@M(Jag~e zMs;0?lVbQO1uCImILSLNI6V6{mEk&~-|H(8sE`3a=est4HLulV+-ba=cmch|QXXXH zE)8_~-0w^LdwZ2rJukj@OyA*OiRp6jgxzPIzl7~B;zv;F>e~AM2>&oJnX)oB7QzyaN7%uwShS3&`GRG4)@FJ07p~RhqTt0vW9KPW|#w81^sKD)l z1`7n_vysU_=XQ3+c+*rPXZ1PR+=%I8oJrS(RwDFA1Asg@G_@`@OEl-6ZA~8jwb`i& z3efwmEhc>0CzqaBSWE{I>2=lBwO`NW@5s{&{^jc$3c8QHG$H6_Fm3SnwBBdmjfV|A znf$e%d8t|a_&BdD#DX zgJc}|NCHu+A&xqcDfL2KS$#?{CPrvqQ1PwUGQk7x@ce~r2xnMHiTCt^!JGwxUTCMu zrzB_TZtP3zD*DC=8eAquNX+nB4QEnYB(N><&yIz{A*Z}v4D!mnB0T}mKG?Esj6)*l zW1Y#pMQJ=Vc%?ikpVm(fZw@(|eJ^m^5|F*@AQv&^wllhqE0NnK{;w6pB>N-S;(T#g zCc40JBXy`L&WYJB|ab46qtXL4O~74+!`495w`Xq*N#LG`JzNd1Vs>sD)^Wd2QlJaY=CZhuwy@utP9fswgNg_aWh6XS>vJu zrd?WQtOp=>ydd>_ruScDp{U5k=iEm-nNaynIH+OsiKcXS_W9vgu;*ro6SR+;vWgtRpOi+VysHXTO65a}d^q!3L0o!1Y7JVC^ zY|KE(fGjg%&ta+L+|Z%qUr&kkd;I(D)`^{WK|d<%%Lkp&^TXMX5B;LtcRuLfMHnHM z#s(KxPi|_>)pH9f%QEQNXhw^O6FSR`hU)f@*?pnuMf#^()csSUNhaJN> zm3iGlX?Eh2$OoK=pcR7@#pvKAS=Ln+>S;;V|hm+R`uDduD1>icTo^yng& zVd079*TKd;5UG7JHBY40H4H(GfboU`CRh|D7p+g!Mhsi4T&>2dU7|)&`w1+cQS2X5 zSiha#vGmW3WR{>t$Mb(36+z{u1=1P!6vS$UNKUqofXy^mH)|la{QRfg1SXhYSzd)R zT7gxpNEGCyjo-Y4%3=WvZ=U1OdwXu}>sCtFX!I`xr=IiD$jE{dDz@4g2(NA1#D~P= zRD%*D0mx*ai!kr(3SEL?J?4$nQfVO!Hcji&wD{v$t5SI940dY%?E zPSsRx9L&Ws^T0$)*OQGB+GKu{4@Zey9UR+-dK)(;H;ff5*%&+O(ol^w!6ubGuZQ(K zw4e<>?v}&(NQwR9pZo?U3%Eu2nfx82+z6y?1a_A86?F} z!qHloMV;+JGf5;E#a5-r#p7LRn{Cpp|BRyEG2}&w{Tt)~qoog@bU;x+!B%$DB67at zs=Dw+aWAQZ-IJF(Z0PHEEa~eC_|4-xyk`8)9kTrOI_AAMq}jD3-}AS1WNpCN(cRbY z`094+%5Q&j^LNDh58ITfP0_>h6YY|$zoXT)^PrbT$Y4YfY>Rp82a8B9v1zn^Dr&0m z7N7!@YGA~y*8mBY)G2?xiBe&Q=!36Np*+0&4S(=3M)s}(%?mLHk;GYuukts$FJXfu zPBI~@(tn1hqkdGi7Uk8dn^L@ue?nvD8}Ih~_*t<(`d#@|nFL z%Yqa-4jND0H(Pv2PcB~^Q42ORjns>hbME39A@P)yEzu@Zx|Mal8)`@X;&27Iw05WI z$MY$Xf~&kb>pLKOr32TTUc~{Ae(dCw@TPEwHWWhJ1L;*)jA6`LTf*8suv(Nt+cYB7 z!U7}VaRE~|y9XV{l^1{iYL$D`;0U+~kbtGNN4lWId$1+i$p^Gb1f@NN?+>EsV!W+dV5)y4BB%Eu(9r@KAi9{*}Bz~z0*W~pcLoLD3 zFFVVRml>qC)?E2;>9tGCT+s-PMh|~X3$A~i-<8uo;w#JJ7sNYs5+*2fQY)6%SihBS z66m~$o%06O5l)pu!}VYnWN4^cv4T~0S~sFpgATvq8a8*Js`oO|>Z>7Ceo zKD%r>FlHR8^mZY<9-jW?-#K=>{?DIihz#t!93Z~B+*~4S;GA<~N~qi&^uw^u`0 zmly?rxty>x={ich9*HjXc!SmCtXVPg9N;F-W+rNA&X|~}z>thpitNgY*b4bAkXnOQ zkN~-mM;0lK-kfCCtG95fugcNJQRX*cm2pn+Ls}>!0 z&DyF$6%ADI=>f)Bw&65OG&9+MI2=ln7Nj3gth!3~pSU-b*~uwa05?0Y;3!+>L(RM~ zwx?>&G_%QkV^H2XR_>A2NX=iNDV3aihw-Ou`!?&pr7#bm-pd`EO+*SqtWMrb(J27M z?BS0>kUyB*u+79*rZy++bAJ<*OQ>ZJ5=XfTZ9vS094c~r8~LV!QI6Sw)=)J+3741~ z$rJu$kp`J{c5&@IIJ#!Z042#GQz_5E{Ns*n{`N3q+EMUrM_{qbGVA}GqQzHs;`Zey zi2%E|hkt@aOxnV|2yU)>{ZuThJ%^W`cZ%<6*R9KWR_j=yuUNsE$q(?w1cOzYUhryGarB+}k@mat3`?XRCZGkr~w0D5%`Ik0s+7fNW ze*K40TBfq(NM$$$he@zF!XYR^b7)ctGo2#te#_%c2~ECFP)l5`NIh)LY{S?P=&an9 z^Egk9Ut`vlkah{6z1ut$CeE;hy~h~an18mvy8rnm(Cy;?9%Q0W_I}1eVVK_Ywj+A= z@xx)F1;>5l==b7uJr_~BY|2=%eq4-(0AAZ$Ip#tOiTmgaV^gDoQFd~AloY&_2pa^Y zd9d2xR7k5NqzqUe18UsEY8RcC+A7%8TD4R+BE{> zgvugaB7A}8o{fd~rOqbXrA5k;iesXiuI~Hc^w!?qxDokS_@DO!!oxSc|A_a;Z|#{b z_V0F@%#J@Z^}1c|4~CD>SeZ)SxA41fwNXxc`CYC2@7%)wnPS42hL}R3|U!}0t(;rnW zav_~m>8&!UweWq-s}VpM!28IcjHClIn7~k4a#|3C4I0jDmUWZ(FWO+SxXM5sBT`(3 z!7yP=c4;l65>80fx>76vOqlqUTMo~U`$}1&Ce0wj`o{-lV+eKjPL-i zlhiy!0$3nQy#ACV4c5RuARS(#=^J4H^^8&;PpagIcqccl&Egx{*`q?4oaQ)YNu3cw#!*53}z z=Mk!EUs^bC_nb_vzwA}l>F8g}%VL!GqAYcesXoWdx*t&i57$?W&;!KEi{cMDLchR@ z&{v3@{voyPUpfBX-13pdKc?>!5;a_rngPwkRDkJ&r9-u|v2=Zs-8{4wq|IZk1xeI2 ztY;28+?cam_GO_WN{}X+2dRAD2+{wpY5G?J$x%3bSglmGbhXtA=2Rk7n2p35?F9DC z2>Vc0lf`=vDpgSs3R6@x8yvxp#ItXPH(xz^?oX^h+;_AsmOZ=VPD>s7m_H0ZdH?kc z=C$8#C~j)=zfat|o~o;(^seW5A)-|6so6IVw5^7&~1K z?{_x5;?a)?bRK-oDmpt)(ZOa+jh9LW@uFMynNcG;D=qgSFhQcATEk1lTg{l33n+OP zRt9yl5MCFqFe`bH13BuUn%5HjVa8O5{}p^8qeOS2`nEM5H1C{xToDJj`oBoWR9NKY zc)_g+PbkUCLAX*7RcJ2IXFDkerW(H&?E)#G^J$Q4X@(P1;OzH~ot?%PQ-KW-LVI{o z{0mn7xb^7y8R1{^Ml;HA6bSN@g3d!i@|7{*90Q{{3J_<(@TLF-$_MhISI$N~;L~Ql z@)Vbt%#9FBiu?d@c@9f3Dw{o$epXmV1$zr=+7dUDJKO_}O@-&;+-2qoNrM)to*WhWcCSrDA&@t&(93$=^@gz9Y1@e|6s6 zeGI<45*1zAgMzdSfL7~v+&vW=#67nAt1&-P`fj!ZuD3t>u?=!ht#@<3fM@a!ku z7lbMu!+~A>ZZ4N?7o-eF+8&$e9E2VU%@Z^Z{~bY$BvC~7vmIbqBR$Y#y_7_mJ^1b$ z3&WU;-n?5RfA5xn%Y|Ik_RH$mNfDR#yra0KZRa-z<=Qjq_ju*p(?62k%q|pmW63WF z`tszvdX(#G6u}_?#3%u=f8Q@hc)1*6x4C_8$N8w1YyA`(T3lh>XM@_Y^p-d?it}Oh zz_}&02+?A!N~;m!5@Sn6w9jU3q%mQ@Li=qB>7p9JhoM+D!VNkj@4~<-gZ!*9wExVU z;$oo)r>AFCGmz-&3;DOlJn7)q91@(01Q#<(xkeO|3(+}Ywy&_3M_Ci%NPQ8Pl)@3+ODD-Z83s zFsvtU_(v`BQ{Ke!rSh6G0!mdmQHe5!(o#XTM63jivc~Rkdm^YV%Wg`oGK3?ZDQSQe8PUp4u3cv( z^3TH*)B$t+x$mHKGAK2FYg7NxDWK5^MVg~s02-+kit#((S< z7+u()A4aY>Rt9xzB`*H3M~`tTlKv-oZ*j9v&x%*uI9u_e6XDh3Um^J_uEd@zj%V9| z)11p77zLww1ZJc_54w|5p%hwmm@`H!!kf~C{ele0&#SK8D5RmWAxOfA@D=%CU`u-! zjwM>B1(OF6lISMxYYfOrNKfGSvOncp7sMP>k{SE-4JJ#r2i}a7xycfxP6VV(!aKrx zrtb;YuAxu3MqJQVVZkEUAk?{dK}3BDR> z?~EJ}5d5z=;{lz zGbH=SCR&b=zoB(QG^F@M^20ws)!+cA{++U(r9MF&ym9n6WMy(LsK{zH;JexiT3om! z%>6(%ACYC`Yi((4prYx;JZfzz)jT_%qS<%p#LW&XHV0K16}>GWK!G#Nsj#;0bR9A> zsT2f^u343i(JoBwWU(osn54jHUJITEpVdaUbq7&AB$eWUzumw)UY|9z6j8y$F->K=Vftox~BUZZb}`MZZ_22+MrUBT=kWKqdhTCX#3|=p0Aq30qU>c$0`A!4Ik8gZ_L+?rDecy{26oi)}9e#rGGgW2*+j zAwdUWr>sRfi(f4xM+x=3Pn(~=?Q}oIXq)_b`#taAVoL1`dMBDu7*b+L6Mu|Hd7pfJ zuW|JMxbD8s$n(1m3Aj;D9<&{PH^ldkSa^zf0(LY34-7#2gez?XrQOD>?b&F^!^;ey zCjqD9_!a6pulLEc@ybw6G7XnCzYsX0oo`*CfAceg#a!#H{+skZTPDALUDj{ry{@Ky zw5^2adC}Gq{~Hm+>h`zhxyMm3C~XnhL&iu6JQ*6kZrHu;iImo!Bd8_qc~N#ybzQiy zb*2EWY$-gh>~Ufvyc9{KDcLrYiwc(n&TczbKPx%c)%5%vfFN$6{twO?Fh$?j znZ^H!v&Nk4SViMlm1?h;p9WHRLfm#4b?TDmW~Bl@01{vrHBfTW3K0D+#d%(nA*nl2 zjJN$vU$}l7fl(0b^u#MaUS9K_0xR;KI`5Upa=wxDcNlWC|KLe@a7U$s6+Vo5*SF2n zYuexbYq8-8JXRX3!kETcHl~4|A7vUh7Le>}hw$%dgcngibrpsg!q@-J-Ff`@H}m;8O#D1;_;#bX(SrauKDM0rN?QNV zN8D?w|2Dyu0Hzlm@E!MxN-%q)&8xDlO|ZkeS+FCZtL>BV@ap57`bP*9zJklb_cE#J z&Z|sj7trs-Dkk*7Yjo4;m3qrUnh6Mn;0q+o_Q6cEIBjP;Zp0fRCF02|3AejpOS+`hfYc92ho2+1AO&!Ki;?%uBfdau#1<4Mk4_O+_8CNN$ zB4tLY4FVUi+A@MK(h2c~szCeNoq9bWj+I4tfr6`7WI};AMKc`;Y>eYqQV%y-W?6#? z=QEjzfP6P+`Etmio9HOgwE5lrCq|D0SLY|+tl)78ec{Us8d^}NVt{D1jDQ@|wG>^@ zy>9a{;B8cXc==&$5KNO_N!;;TE%@5gpNB;5R6@_gUffMDUHH z>n3SLNq;M!pj$d+@t4j~H9`8sz-4!@4cSl_%4eB90Q-Y}OUdazL`wJlJ%{Rh$8XLp zhGJ}$csJ`heU**w{LGm?42{YLAQ_BPHPlu&8Fx$a&IOXYdQGiIr&{*rmWx(T)hp<6 z-ok&H>Hj(mGT09xpMUK?4KTqEp;I;8LnG%npr-Fpk9eUhndyZcn!kaPd zuIN2&X3UYZgmj=)Lg<~cL)DrQUO|7lrM7UY+}F*x(6r>G7795^!?*qb_vV#i!##_Y z^{{Xcf9sCl{tAwl(hZeG($K{WF|7=tCJfD&g>>l4D%d;Oh{5sOyT8#rwxyurZv0Ab zhxEHWM5tv&z+`jwj8pTU3I@2+8b`YJfN=168GFO|2;mQ{J-z|Gpyy~>1Eb^ z9b)>sU*zR|&&DSu_fdywHi3cd-o@`xd*XSiiC<6|!59H3A=~8efvx(9y!#S<{t`+xLxK%GPZ}vLKvwTt2B2Tz3?kXAyv}o6Q zhX;Q-w#IodAA$Pqh=;GPI4@N$a!HyfFYa6mQDYdUHm%cKaL=pU&ex)G1V&miz$s2$djA++x?}iaA6z`21*cwmn#H$yQ&01x zW7D-doYG(Ggl54)f2*dFLzJ5`lM9~SuZ0@Q`#rz$1KKS|-G*F;_vZ1gKu)3ge)sTk ze)H}^)S`~FxAg1kM#h;sKd;Ag-3*+|<9olaqYY0XuIgqg%n{+WXNR}{G2ghJuzT?C zxfds?VuxwL$FVDY0NErJq=5j3DY*`s2}!UY`0hTINF_!u+;kPrup)s)teX*uGmCsO z1SWTA1-)WrG-5JX?@TT`8Wtwl~%;s-jLIN6jSpF%mjRI#fIO#ANO9mDT#jNu^Q&(pZd!D@5ycG zHxmh;-vyQmc*?Q8dl&SlS{3N=n$>(gwwo7BH)~Xham#h}UYg3#JJJyLL>qKe&pi4-Pu1 zw$JB8LdD~*V4aLdQYn&0;G;p~O{M~4ERDh)0xudoZ?L-;f%;iH|xSBIz%9pi=^ zxpqJ=7J)5|cTdMnQOh(RW5?XJ3 zIKrCh`wwqV7WpJTSiB)qf;WUB;#9(CKhhZoGzW2R9JIV%NVOK1ouM8-B<^2;9Dv8$ zf^iO}R^XtKn^6U*w2Tqfd%GrPl zdY1K;(mf^;xmW5@WB)qeZM{1G&2j8&K=iUf;H;K*HbbZQ8#HGt1Z~6tMzjs|z3Ox} zmE!9WDrPGERbjkD;8(Gkg>-N78cG3G3BR(=d7-BXVVxZ6#zEjl-E56aPXV*S_UsZn zhW)3(>p=NA1{<+3yi3xoh9#Mf&V-G$`>%;dALZTZQ^P>ss3umxd+mPrvBGDa`vYUTSExYHao*}tK+6+Z6{h2>RxG*Adu(&x<1B-K?vA6|q;0b)K$hm6?g!>au z?9W!>a4$unDEo>i3W$UXnoIsLwy}q$k$oOjQ5Kq0-KjEOg%=5s#g$(>;9r4KDpP{) zZeMPrwY!U!ONS<{E{Y2#!m`Hdg(>f>IGgENxM(T}SyB&1MliVu0 z=2=R~FuEG6Gus?ZC6vUCl^`D*&dxU21SO&ZFDmkkcSFR9i&qIxGt%rqZ08xrWIB2h zBPmBd-`zmF2UdI~tB`F#bUI8W!-Pg=4?|y`OM3I~ycsQUBk&a&ECM}W#YvOA6?>Y7 zB2r>Ko)gTe0bN(F@72H)5?}BQ>vigUedB%4eSQ~q^i}LP1Yvxm572*er~mQO==SGk;4gFo_S!QQdKaQMb@ zfB1%KcmK|EI9aO(`+Xgc+E$f`RwG(%VhRT!AuKg81tbYh&kjZjAdDD;Uy_S*Fj_zp zA__uLGiwZ?BNha0^2UNrNe|)+1_{w+0WcDUTJT)-nDMRy72AR>(X?R-z>JYixLBh~ zvuUDi+-8$F7l5z>U{)}Mj^n%NK*_*>G6pm(YOGAvOns2*krv*6480c$5=SJWNHc@g z(a92uPFETVjsFfmv;Qv*gY4iM3pUf+bkK`2NwAThvKw5l@fm%w;T zbQgf$B9OO&m6Qk!H8=&0W~}&zr3C~T+%&-j8iMDv!LB$4OL;5+c#L%(T*CtjrO4vCe% zq0_c%Tz2y5(U zxjo@aW614Y1EBPtR1yn9bZFSCVdn>gs<#vZN7iZ>dzBqqK!Nwb@Lq7vE}GXIFq+pZ z`h_M_bAB`Tm2bpo*Un%69?P=tF%v_ct0fND-6i*Sk=^}9+Z6>8vcARTI&=CVT_3AOJ8Tph!e_r~oZ6lqi4;_Q`YsuAt1`NR|h-P>7lj-4iGX z^R%!zjYyF+3?d%TDT$C41Xv35K`s~BQjsYn5?N3pfQ6SZqp2EdwJ8-F07MLQgg8<{ z(7jqTk2Eo)8fn`WUQs0EiJh6XvF!YlwvN|;!HSCj%kAr?%^6#>6V#XtcTKyWEA zb^@pblohlnV7nKLThCkZRLvrB+-vnIi-*8tH#58SgtbqtS?9z8TZd9OCJGN&3DyHc zJ@TjvgL)MK1A<4wC=taXNg_!>CXun^6~k?y8WZiFpwp+dJ1}to6!gte=F7QU4WlR` zQbF3-e2&dC4;W<2GlwU(DtqYJLI++{ z=p}`WJ0jQjN4j}mg~Zf=THe_0fEJ;o+>?{j9drv-=PK(Ho~v|4zWcs|V!! z^8f$aJ@?Bz$9|jdTJty$H1GV~94C8u2<la)-CUS0(A-11xM#JO*^Dl{;Xz>x4k zn$T#_;Op&SfHO!Gj~Qs{qpZ$_lo2DLFq$HPK-GfWEc`GaCKSL(i$>vaG;u&-WdnBl1?D|M&{#y&-rg z(Qj`6dz;Xgo??Bbhtbjk+}bMK>QPA!AF_OH!Lp^CStns;O7(zFhS6O1`uM{^AQjEyN!@4jxTmn>Dbn)3%rzfJ(~|Lb^>`>;p2Oy z>ZO;&XhgRQ^g7VJVSnr5wRb)Giyxc(kzd%qoYcL|ua;5tI)J}eEl;}n@G~RTlP&n8 zLv?*sldX~Bv)6#pQ03Mo;YwyAfNgoh)sfj3H_dKTq-4TOh+OQ-BJ~qi*E{Q<%;&74 zdCdW%dClvqS@-|UndJHaw^n|qQ zs?C5}!&-PK4I#HrY#W}~gq0@jWl?u*GlZeZ<3JOH8<$uLrn-F?AW4|)cr|QZQA`F3 zficS%Ct%T1Fmit-C!{N2Qloh6S(J}H0)O=a&}{>~exQ;28c+p|lBV)lo@f8@*gL-I z-#l~I+pgl>^e`jd{jfav;Db1~4FS&J%ul?z{w*Lt16D>?#RpD9PXESx73=H2{UT<@ zuUQH$4+1IQFlg$_K_t%Mpn1(}Uh{hOU%Cx1wZ@h;=wf$kvgr4x|7str!LAK>T;nfw72`kXYVd|_m9D=)G$h2Com)ixR5et z!MfN$u=0UHL_&-j_|_WxA)AW!B{4Xd5I)3w1znUvNR0-|00bT?E?C_t6r@ts5R%qt zqzN^kQ3``|DLsv9rlu;e7jvN!f6m*0f8o-0L%gP5lFM(R9#Gn$q0UTXnyks?0ibJ zy5Q0p(zRt|M;FmLzJ_$A&t$O+*YB9LQe-({HRubX91&J4%ugFq3IhR(1iYvDS~;nV z)tJzl*6tB$8+1wFlBqv%!URs&EPHOMP&;r|h11a@v1#gvojBT3$G9~ip4l>t0USz! zH!K6I&Nxz{(pe{Bku#PEP&!&s16iRscBF&5-g43|Z&rBW14Ek(hP0vp`aPhVYdId@ zX`B8JeENMKy|{eq(O-Pvqjux;+xh$N&$$k}`Vi{Y!uW}f?=Dv6mj=Rbhv#CUOkNrZ zHYUJh1H(cJb4qTh+2#Z`EI>L(C(cr_QD*+xrGy{Nq__XF9@>JH`~0FeuUFMA)BF(p zS6TS^+uy*>>%XM#_=~^1U|H)&Fa5@2e|9n{--M+_?-o1Mjcqz)a^elI#sBjEcnk7{ zwr!7qoe8AVf@N+R3d_X=cwGm$GywkXIm4$f(t3%>LIdtJHj4m-Mj?#?JMaO{H1C1b zi!2WW?a|Qi+-FOcg~H`T-jc{ewU}}u1i@t0ndBbzwQJn_=RXhKyaIG`VD+fM8=&4p zYoh>JyW^LSuKw*??mhYMU--F$126qEgWQq%?jElr5r5fflSZ>`)hPja!uq}&}>h|inE?Y6$e zXA>S918BeEkuh3mPk(pz`{VFG?KTen@3h)qYICgvd+{Zz^@@K?Cco|Z)c!I*AAhOs zS~Q|!@}+5o0xI?V3^LHHf{GMOK z1eeb^+9r5K9#nTwKRfNsQU@aa#ONwRXZ;Z^~tkOdK_Fg)=hBiOmIc| z@%!uFw&z_p!QCL9goT^wFE63K`ytDKvv?Bscs%)D1HMbJ{(yhkbJtDoSovVuS-L4% z*+0hp{e93Q#5F0F)In?}EjFdZpG-mk_Nk*;ynz z3xoqqJxp~PfYu}gTL{hzmg6DiE@ZegTx&+_1;po>8IlC7YG7vs+bfiJ9~b;juL15m zWViy+T_3!~t#P9gpfXsYu%a^fLNRh?y9T>*y})n$>{(v>^rKSjZxc&>V6j_adsoC; zohnZ|I5meqn|vp{^lEB&HK1N@{#?ODoelVnwS51yLPV~tE|+9ZcWnHKwW|6 z&81F}3CxAiJIfS<1<~hwq7Se6ou7LD4;&l6?7J`rjOH~5jOO(+z-TIHntK_2MeBQh z_INAJ{&9Kr#+y}jk%yMewe!@!c+nP)9kSQ|==bn1{LnFMRSB+-0u!j6&6q(g2i(~S z^RJIx0{+$6z%=S-VD5rNW6a)|`dvFmjRt|iy0Hm$jY(@xfUE;d#)hkx%&t9MQZgWI z3q*{tDLaX9B)bW+HPQOq^W1yiY5Er)GxV2%g=N5{KwX7q0$NL+jaF~F^?HAy^Uqk0 zw+1)%zI!~;9z=4X%S4fyBSBVHjH!d2mJ-gwR7jwjh|-t5|=QlDh)JBY@p0YHDPo=NM^oKFq$Yp zXQ2gCAPD!vXw5U)Fw_Rs;L<6M0t>u!aTFuf3=&MqgJY(7vuLRxs%An4?tSB(5Z`XY zS@)4W52G2qqXUeNo{l2so7t*?CNO78!ULiPs+oc?M`Iw}$MGE*EJQV=*Mul#Gb15^ z!wn6@e}ZBJ4Pr_akq|BCd9+t6ZK;l2$tC zby}ZZKD6-Y^6JWk&SL8Zdd2R;@4mO3Uts1nuX)Yu>#i{+)*ET^?-p!|zq7tR>j!4H z7q7;CmeaA`d*4goJ;2={K72;*$gj&JS(3`_OI3K+DtuOs%5+qhwB3QgJ6f%hQ=E2~ zxvbSrI^6}A^QeuhyN7$@H&>(aoz-x%VpZ9J))@=}Nr2QfoG)YOtHSXS1Wg+RaM1&a zG1I;-4Rv9t3t~7j6cu4Y$=b%{qexGkWb3Y5(Y@;?w2x+{5L5$Wy<_kr15}NI(0rl+ zd_u?K>;;Yc=_b|wyue^q#2Gztw>MeL2i zol^1Lw-MieJMGPfX_qQszY3s{aLU7iCr}tL7y+C6-Ug0Vbinh^PVneI{|v8w>Pev5 zAr2o>NeGN5u;I9BpImziiTusc`~K7~fAv6GlLx*Fl9ku;I$1iZN%Gc0@jYYDx9=Mk zOJioWC8*7%37I?ks`h?ZmV1YD`$*f_zfUNi{KO|aSAPq;XnsF9uQ_1!bqfCc9=_P? z>n4|f0B-vn^x=0y4@Qp8FA)Fbb@%!c+2&JE+_iD;>c7*ip#kcKiLO z?0f(6kH|Y-+v1D6z>R|Fw80i(l>rIBl?1r6XZE@4z=zM%K6?pR?SQQmG0n7D_@^^3 zOJwF3*nG2iU>=sX07-$J>xvhjsxaAAq#c24HGyjJ6cAE!fm?A}U%kS~fBGyYAOB6D z-6r}=K$-!yw?KbZ&%|9y`n~5`t?r#xm6v@{s@C->?=6K=7--i~mrjM&WIah0Gv98g z2^$E^81himi?Ifr87R;O{;~r?ye3k^45C%Es1yXp?wPI~AykDREO;K&1e2J%5f$-f z8oo#bETp*ztAOUv8C-PO3=oJ?Lj-V~p&1!0!z1b<5E>LZosrQIml8)^5mHrxF+wEb$L3H1dP4|! zz~)oLVpj=+xaRm7yn&|iFvmBXItFS#U=b2RuxS8IVt%k#1o&dh9Fk@T8Xc9SI-!xG z5Z2J~Wz^L*Rk!P@6Qs#*Yq4|b$jKv5^^Yx_Swy;Z`aKU6^Xt~U<~6T*&FgCxD0}&B z(QlJ78lSs<+TF2o!nv`}iW^tDdSkq@wY__|+#fEL!y-pHNky!acG`W{YA-WOPpRr_ z>!P})o>WU#$A~fNEOCwkIA^2-9K$kgk;GG1fG@+}m4X$4G=uB+m>piV)-5M3z5OO+ zH?1J=w`rxJ+*i~igI3|*f}t}AcP-N<)##F7h~4TCNg97@fcn@y*;Ja=*cMEOtFgf| zk+?|(g)#OnT0B%9+@2V^3G9t0Xn){t;;t5KzXJDapfXH-)D2(>U{nH^_D%OHGikv_ zfP4DWSM9kEKE{oYeL>Jk6boI205%#!q#P}uIQsDFYft@~r~mf{KKfO=_XB|Ug75re zNO5tzHnH@U!tBlhJVD_RXS(PV8AKq4z0&;FeoVhH%`C(?e%}jJ>|US z_0_7mhtcn}kW7u>Uj7AMHL!|Nd4W59bsyl3tt@|CFF&5grIvbR_4deN3u;pMaXASMvIK}s7322Qc^kZc%E!Sm8o8iJC9-wq#=3oM_h+jw{jbwx8ZqZj}&X}Y)gNe5sn(3}!sphFQ* zWype21KQ1d__@{fC$67fzh^i%>z~(eyN=ES9p*K!d3{Y+ynd~telB=N6#(`DTm|st!Drs~ z_n*y^LES4yyDO93@hzjx-Mg_rx>a?&MzOBYp8)(3@9RZ)ZJBw8$`cSUp{WUsi6O}p ztrj75@M9_~U^E6MW7anY@S9txF7GhAeAQaF9|dkZhGcEkTsMbgLX17CQ4JFp80_9C zE_9}5fUnJ}3E*7l=>p(0n|H=`EH+wbJdJ*fN0v37P7&~E*hz^qEVRhIq2aNshOA>; zIZ5Z;!gg z&hUY~7cXD?{(t@Aqrdd*$=%;~UrkQKL97SV58u(g^uX!US6`dm``9G!uW7Aog0v6% zOuZ0hdnvJ^*~2)=dQ5*+B@a#KYSnl_>bLz^Si{TAWRL;QB`3u zNGE~x+rZU5*oU7roZlf9T0lEBSnw#a_^AYbN+8}a{Lf5eAL2U#W+RU1^^z?GK@ zTz_#4mpO9@Nk;?4!-H_3EC^i>oP6$ilpp(``K>F!@tcilD<*50i2z7~DH2qGaY0{? z!vgLEaDkzNfbl@oAWG1T6oWaKNsvat%oG|h7!4o-L!3yoWD1frF+v%D2Eq|ECn2CV zKn)2ItP=yPMa|RTB79~dVx&ekOA-l3ae@}iz8l3oIb}tK2h1Sm%-|yznjs>E5SS~nNg-FT*UfJ*${S=Vx01K8d6To(+fzBB>^PT zX6&ZcU_3-nCt4(N1&WjfVWXK^eCBJNu)_@vX~OziYHN`sT@Kbh{0ULv>koRkcHr4onkY6NzyAB*_Wv%j?x!F7EBB3F4Qt4{nOr^t_sj=ir{5Dht9i|94j6qs^}fb+ zfM*{LY@o}1@c2ILG=RJMV7U(m0H;m?mp8A-QZIGoIC1TkbE92J&;<%Lb6L-8wX2H& zG+V592JpxCp=UQx-SZ&q>_KMIgRu2*&o;lH{Ab>(o>yNiG1)IHX(bRRk?2c8)nqYKWMI8@gX4ey z5Os6I(C!#l*9_hi<_S|q`=o$fHKZV41#rO;bN~y56$NcH0Y(K-*P*c}M}~S7SVObb zosEdRNm4hfg%Aa4MuD@yOb%zKQC*asMb@-Y6flTQSvV3UYNler)v=LtMXw==(3>eB z@KlN!1rU;2#S9e*oe`SOBpCB(OzaK7jzPr*Dp!zvg`EhtNSHFDOa%cM^laX8lV}&< zDvO|wz)Vb>M+A$cai$8`6hjP)4>Tc|nPt|1Nv;{dnZiKxAO)T!WSUC!D;0QmRTp?SUA)>vvz3le|y_EegB1@`3cl> z7Rfj6n%Mw84?bkB`SHdYxZekFI|qIE$v7l=8E6#Ko7UsEYcA2A*SzNS^?HqbFL*Z| zPOh9qyG-hq->>qeJng$q?})eJo2#Pu1I5nZwsJ68ttVx!Rc%OfMZ0B4lF(j>2xx&L zO);uBOiExlG8s>lY3AhCyV1J;by#@oDb0JN?t|5i((l(2+KuQNkdR42q&bl!0W4xd zh=Yj>Q?Z706m|H4NIjFJ(d#q>2GjnldA#w;1TZPhMz!fmSNMnTqP^vqv73O~6;U>} z=FyjOzk(Hj6$akeGrv9dGETvvRd(i|K90@bID>L)n>f5`Y-N>g@4JLH>>giy^vGSu z|NH}g^n0KGnK!d~HLj2IFT%XO7Hcj^`)%s zJe|7X5NJC?PWp`vmY?}N^~Pl|?*hFA1oz`A1YeNTF%P{L7y@#YP^I?7xPlGGhP{2l zM3Lom-37LKIom5a(wso4Ml&HpHf#v#Xhv2+wHA^t0#xC>2~1TY#-dRb7SrKE{{qJl zQ>&4bJPp$b;1Dd_A(C)#WwW zF@OST8Z~_uy{np&hN=Q@f?C1ayuh2$t5vF~J?LwrpVT(qpNQWZ0lRyIDC(>&T+7gO zUvEzWCBmOw0KDm^KbLHu!^Lvv$^}(D;~bYeOWm8m?!Bn>o5#C@+v?F?u4Xis8`^Ea zi3U^$q&P#~61W7~Y7vtH^~D#=?{Bbr;c3@;?X8yIa*TPu$95}4F;e=mnbrVmg{K&6 z(5Ms>5U_+HZ7pc~r_)eV3#Ql&YZ?}0WFc!~cF~^F?KMo0ghVS1Hch)@ngd2(j~Dj4K4&ZeK^Hi`ab8ZfPU+%>xI3V8{t0rvomu5`kBPSI;dXMs=8(k57XeLRI8$_jCJARho$Z9 z4E6lw8@zgDo4Ysmv9mFx)mz}GW$bhnsR%O%Eqz*ytD{KEKdgRWpZwHsrtkdw&wk>A zKY3?~`3?U!Og(rvxUmM_)dx2}2+3~-Fvw+yM26TvU)NZb*YxJYM=aTZ)P3k+4FAAs zVC@0e@((~x@59y}4(H62i8QZy&1+s?=XK^M-dsiSXcxejg-gkTC&}@-HGvy0rnqz z5*QXv`fZqHQtnj?!;Re^Y_Hl=-}--j;nFAn{2Q*%&#-yTYYrIw{*@VV23XF)#Z7RO z_T1$O{5S=1;^zGFOS{WSD_eudZ60<{rF?CrwhX$&2rp(sdTb@Iz07goM6XeJUNpP7 zd;Nvp2$xex4F8*aveq_YOc28SI&7 z03&1;nFT^=;y`f#%xq`FqZr2ktCVIzu0%QkTLR{S>d7lsJ@bs&;3~0pOwsMq1hm3K ztWi%z5xJR~lR$DUD{wGMl4^u@tButY$MO1izTSS|yKdvR-m!$6+cYOZ0wxyht2OM_ zG|p6mCsXiXj!9WmIH*yf5YFChbU{=$qO?$HRHHRMI~G&yEkGI6K#qY>m_+ZQ0GI@i z=4c}{?LSm3yuJm-PC&6jFB1Hf;*X3pXGnBPgboBCvnGZOMkm3)`hYKa;7T=qw^= z!W0NL+X}>dwWwcY$W`OCKQp76(-5@=5^OLofZ<>@)=9yp$(j29KYM=~X32G)2ZHbS zort)5?pgbWLSd`ILK55;p&(IQMADRGC2h5>wybW^-Q$+0-7|K#yXP4s+U=RATke)e zn&)wwkH&0H6qS==f{bN8#k+3w_zVn{kFp=#If-O6U*xVa;c6zp10UN!zd+Ok1{Ave^uL6i5cb-PF zkpV_{1jORFdB-u1alBy%Pr>4&KCgP@kx>T9;-dQ&7FPhQ0QfQ{PO#I zD{KEz_ww~aHgS^_tuip7gp;7j(gJ~?S|O^DVlV)wDVbA^K3BsklIWG1BGE9H%f zv?|1Ak2tpmOjHCjHDIbrL@FFuAoW7nB7j(*bD>ce^bSRn0>6WbSW9CFScKvc8P z5Qv>%;54k($ZaVqQ$KobaTHlbAjOa+k3+rWi&VxtR8)_~9u5UR%biaJ$L-+HqzvD1xTY*f~Lam2}0Z8xg z?&&PnySj_0ltonvO9<*%RcbyYf40}{!x7z?PEWA=%I zIsstBt0+4EDbfLSPN0Ah=XDh`R*qT%0(Bl`gC{R}?>VvJvdTPauGcIXod$)Bwq|-n zj&Lpo;UOu3^Oj@^j|T}AVzSfmNfRa4U=dLTGB72}gOm==sm&baJbNg6AF}s3LX5!6 zPay~TAh1rH*Vm?Z&UFeXeI;9l2Ihn&$)u>Ahw`%a_hM3cgFE`;z@IYdyx^3=TeDf0 zr+my#(8HNxNoLrR3N(|$rU;}S2KwQ{H9ovAvV%8Inck1yf#12jgMatAv-s^_{ypJ$ zUZ$I#0rt#6n>DfBUfk;@VQl$H`*%rl7@in&s8c(%*vigX6oXPIn=Chk|l8Ee0a z;J``PGb?ZpK8fJTMcP{mWRFX>$1#p^ydD4{pF;38f4BIEA4kug%ygym_wJfAKOy$% z#m6trB;9|df%)w8v4c}OQGfqntNnrQ>ek!iZo4jVBqplB22n=crXY+&W~ZH-Y&vQ8 zB)xP_+LxYZ_u$>qc+)9PoIJ|r{z;^Dm1H|b8k6ZjL@R`|-a$=NykKkQg5vWJrGVGx3FP^l}lX{Z>m_xaz`_&eW(?e757 zdjJg}Dg`Y!)1zUgqvWUJ)h%L>Vru_1f95CdlLy{%L{8o|hr9RG8NhjQBR^y3tQ}7$ z(frxZaEAh2$rwTz1ST1wM?}N{%uK>OXhAxc5tSw5KS@Sj_6SGr#p<2dyzP5d2JcPW zl-^t;qx?{FFL+-wU)bA=2SwWU&dM_W=_QHKu^f!=9cY zq>>l-kq$yF4o=CXo0uWNS@XC&9Z+8kCfP+dmC=61U zQJjob#kEetbC)*o>{D0d*T3f2T5@JM%om!*v8(}D)TL1J< ze|cCMj&$-tht19;{#?3ssQ$BFbf#xai9(R%7n0uab+elFjs ze6(OA@#Ldt!=1H@hr7$GM|(Fm@3JQR%dR)L$EE2sRfS;%2qHiYayB)R1Q_%naTgMc z1e22z9X`bBop+&j=YENrRRYSSOJU*=h6X`sd@Aaz-yDQq5i+wT$P!esNulxpiZ>qd zfDtp@Nr8yZg^YUK$r9+NU`pWbeIoBY2ppUA-`I_TjuqE;5C@1Q-~{Zaz*d*Cu^FQ> z9WZqkSDs&%C;p%R2YcHC=O(AfxfyDI0PgIVN;PxI)@Y@)L^5OaOj{TbrDz}+^uWzE=h;P7g__K7LcyRO0Cs@n z)hm*mdloM45%nezgd(ZMPK&ng2g6JZs(Sfb`;05#DE95;2bjfa~2hg9ylZp)C~^aHHWv{ zKEtUy_u=-vb$sIsFXHSoHz0;8mB_(FV8TY)O@1tzs9d?@XaDWiOThEvQRLnO?rGwLUX^R+!+)5EHy|0SnG`iNf;7hi91y!?yBr`9j^CaUS1R4 z*>LIa&rGB*-sY++!3ymB3b;tPMH$b3;~2*{UT5IZA_Zrc1OOHmfTe{62LKD7Skk3a zpl4|gVWHOqmUcr)0z8L%696v*JU{iL|L&WX?Ii9ecauD(irbvCCy)$k6r)rF1O^Bz zkRX6mLSSbb>Bb7voi+xmTSzyLv3}wZqJ48P%{nm+RbjVc1OuSi z3~<-|Gr0QhyX4C6J%{ejHl#J7QVAUfA+6=nt;;t)K6~eZ-?{(ipL+i3zws1KINm3|;~8 zu%zP~^xB~ty~cK!{s=@4LnTFEh}1y_ebnZrF?atFPSgxG6G}UVG@Za%xG?Y&kafT- zo4}17htvV}C`U{rQ_snEOtKd>t9;5aifj@TGJ78Z6Z%PR&~eyYO+ctqBU-Rts^U!O zV6U#B|HN6?jqBvZ1W<1R&U%$0k3u4oKqfTv=o-Y(Yd0`+{4hTJk^A|7`_JDYQ&oi_ zXs>|}_7%s9;x0qu`&-qj21Mxt!vFYI;sApww2owCzFJPC^RfcDxHvGM07yWo+aU2 z2*^xFWx8$U#8k*1NXbuYCHyRjZ`LEMG~R~6nKNDt5@6A z^$Rzmw6hWN%m3Ig@MYj<{<)FKfAWtl2EZ31BU4}c|D=@<{PUihtaevU&G)hR@Xa~? z;-Y5uk*>7G1YptsF4H~Q{CC&{@J|6?@{^ywon8Ck!R4!eiG%(z=LXXhQ*%dfW%9 zfXh6dk!=(*+o4j;XwEsMTL3yzDGY>&46xZD&Tjy74dHB+lI32Kxuv;)!)h3#K%*6) z+qTq{n4YQOuD|?l>8!1y^NkC@<`y_JNoh2!ZFg%sm#?3gIlAv5*H1P)$Tp5~jAINK z{V8H$33>`JR{@^GIoxCR9=_a zn+WUv^u~bE9{}_vf8kfEoql}K_TwguQ9$To=QM>h_e|)%w;#b~C1jjrB7Ght(8z#J z;Wh{0`Bj+qKoBSq2A<q>xS<(%pe*#ZXlU zI)M^qCPKW?M*QM=BbG@3xADWHM4)awXlye0MfEk?vRw!6TMH4Wxx`N^Mo7yt6d z??bEV3BZo(kp&NI*sO}&TWNVPM{*0V%xNv-orqNrdK5M1t}s!BSLPa$X)@U|8ap)wl}^0dYkM=;5$Bs{k?t#Ytv5izTdu$P2-sA~t)E ziVQ&zl->*PF+u@sCJ-$wQNs%)4bZGK%}K!v%30as=-bYB4Br)uH$@v>lVsnrP zTz)KOZ^{y-(FJk_{HVeUUHkJX+KI#3y{zKUzmT`7WDFyhIm{vR*HdJ~EQr5;M_-A@ zf+!`FOrt=>cL4`QN+Y4A*;^O)u@BtAshNiU4~zelSFdl;nMkxbFIun0J6oOOaom5v z*cbLLJjUx|(C7^izT4yESyZoV#y{Lix+*s-vk;h zF1`j(PQju$EG`cJo$bYK;nKya_MU$s)#x{x`}TgM-`@GL{`%$*px3pcp@A_%C6okA z1u{JgOinp$ZENzV%EACtFFBWi>)Sa)g@2hH}da@*Bx^NRU~Rh~S$ zqF7%*2T8r7ipwa=-U`mqL3^RrXr>Ajs)`7X_0k{@a4YnTN`jsURUX*2qputVi2X2aKp(5 zot36UrrsFfNo`=ey^7A}i?Cyn&)1FzpG0t_TCHs_uT9aRhR7&r!G4=Ag;bk0nLE(L zW@vK~z&vMO+{-O+Z4?=kDijA^UsLI& zoZhzwfAc?ir~K#--hpGYwM;HcN|j##0aHR8ymC>Ab|X??VS*t;2t_uK|Cxa^npfpf ziejuGd8LePaA>cZdBGP#-6ar4hFFN?dsTVcmCCKa(f50VYWO=XK%}BPtf2E4DFJyh zEU5DzDp$j0V40Q>9G7b&<>{Ds0d4X6(OETJ@fBixmndJJmW~Av$Yj6BZE8zYF3HQ- z{OKzJF&wgoL<(!S(e{=Ct&?3hL`#h)08F9xR2ZG)S)K3GdE*=A)^^!fDd39cRXPWx z0tpp*WV(tUd~m3_Mf@K_rF zmXMuStfB&nW|8a5d1T6R2*v=-D&_NBHpI=j(0+#AU3r*tE zIF5T8M>bY>9=LRI^&^dX<685lmY$rPocMO@zS);s*LHXYryU+C)CkM_UAxu-rGJ0w zZzP+*Ccv$!|Ln|fI%{7s)9F`ilKkbtcIQyqi7OPPM0KJXktPtR8Z;&dGXT?6?70`Q zxph_I2Tq}J>UJ~^Oo=2w+@~f9AQs}P7-kRz42P_2pQGiX55*>x<`y1a2h{H;x{R4$ z4I$k`aB&NAehYkX&TBPV=VcO#WYq!2`eW2Xg>w`ai?r(oGw--l_FY+*OJ`pM*EYlj zJ|icRpu4(xWNP31y{CWSm2aQ<+j!;Ae;1<`4%tJu9hTRxe-`KD|ICaicAwWc#(>cq zG9Jy=g^vJhpE+l$_C#QhK+#|xE3y2dyDX0^i41oirS^TGzKFGMnTufSMj2tQI8&U+mv?O!6~37 z6D|%7q)w#UJtP+{h`YWF)EYoog~xcDho_i{5vi|pL%R#CZ{g6vdHLam2l-b%b}tUk z*CkXS&CSU&ZJk_H2qQpF<_?xoe1?FDBw{Bb$F=+dEw*_w>p^I?Mw!8s^EE2Tc0 z(~7bZ#iIX9=~$VVf3DH()MtQIr5u^A;>SPqfIRi=Dqp(1jbwd;GC5(WYSY*rS--sT z!Dg-bo991vynFn&&yUBm*VD#I7FVBy!J*4Re{F7G*Xi41>W}YOd2q+dp0*WHI<){= zA#h|;aQ`H6*QDTZ12S6!Y68TT*h+-UeZ|Wi!MQf@;tqIW2a-ClPbwTI)08I?#}7D2 z)k^Zj#C-VTbPEHoM?X$Z$1#p^{Mp56JfyW>e5v`wXTSKS7wq$Iqu`zWcK-v`+Pcq_ zj6y?UsDQD|>+m%c1YrPEtpsVDR+2%|bg4azZv0jqB-`!n_Psr`dhgX|FMj*T$;011 zx#!ICb2$Ac)Z7s+|F3xE!@u~_wO21(e&On?R}(kr-zzEZacO#&?d~XCRZyu2OaKHG zpb-E`3U<2Md-(?9Zi;xT55D;XYX@f_wLruWu16$^da*;3?MC?;{~X+cV_A4HOJy{p zE*CuOVJ;d5KtF-3b%1A=Atxt+dH^I2=%=sfJTi74Q#ttwQ=(Hi!Wbz9{95cjQ$9YXpdy;)QlIuumoLNBntrX&mhj8 z9Ghf~0i*A~EV$_Oi;n_7_g7A!wzUydI>tDi3j46P_vk*>PW5e6OhUobf`JI$H7oe| zA>i~p#R$-L{-;O4=AyoN>8|sQ>zM~YQ-Rwf!R@nBM`}ebUa1SPH zl(h{(nu39YBtkTNeHPn2@X`u2aX{URU6*QyhO2(B~aIVDtD2WP!kn0;R&`93-zB};W{Fm>=5haW$ zEkjX-P(-d)@KDP@O!@E3oaTr0CASNZ$+fUYuY0tOn6ZWmeW7wqTIK{oEtP)d?YMj9 z&Mo3(6eyC{m}N)6uv_`7a1{0_ewVY8WY}J1?I$p2j7dp2Ji9*}*%#ae*0BH`M?f@j zh4yxFP0UJ)NI|H;Ju?O;-+V;A@xl#v=_}89;~2*{{tVX->+R21`d820pA3?p>uq;_c+g2&sE2^66)Ejq2>>Hdh%-hstcI+# z>WEqmbh|P8?LLz3K-d{n;;rud0P+D1qSHaWadGqd#xHWkd~M=GOBc33x9}%+_xjA= zx?=#~9Du)n-{KQ@FP}a8qdQku{u);{rd=|aMA{5duREymnMxEA;e^5{?6s@dS=~nG z)oo0F_)Tu=_8AH4p`@0uajsxVNRZ(_nZZYv+YL9r^2Edy^!NOKxuuL~0MtUD69dmL zgXi}F_sj{JA+XT{(tOiSKrueSLC&+WfZYMAQ{c>zLmKgcWp=wE8u=>pXXP;V05 z4e56}?_9mO{L;c>&;I(-C+>~^?79%V$4QZa?E;THqn8UOp;&?}Ex?`MfPQj6u(1TU zv`|_Pl7dI!OBBCn=R0IHt<0a1MN$_fV?T{!3>dxP6XBDPmB$&>dN6i?(8k83I+4Z^ z4tHXC$7X8Yze8zs9Hf_0mBc5G8~*4%$cYxPO<~_c5??TcR3Ro~9k}zpwc zacPy!lBlr^)q@cNy)M|>q1c!RBCoEjfxw7>?HKl{v*7kNP^$t_1ke4+(v4i{CkOy> zkhl+Q-jKr|e=qL-(3^2E5E$ptEX`mXMIi>AP1709#q3{YKdh|gsf-%1P}3PLkHRhj z6>fnhm0rsAa;Uy-3V-{u*pA4sJ}vuwA?jRiV=eHC@>{bhjHB$D-3+E-W!uQ@x`_>x z!#}R{J>{9V+`PC6@46{+#x-w+Ozi^La%g$ToZ>C=3jd|zB$t;Qb`O+D!C5;Mx<(i} z)k$_uMVkpq`+EeP*D`{Z?ATOBPdC4p9Bpsd?C*gK@M8}h$M%&K`G0-k+a})W6V*^9 zRB`>J)|_hIUrF>DfXm}i>-7;!pAdWcaRxv2uItsPwKr&Y1`qV94{auTe-|<_aH6pn zu-4nA4gS+3PTxNdPDg?rg85}Y z)sC|h>h#@84CX^~W%Ct$een^*g>1)2?;j_w;~2*{zV~tZe|x3!%5QDmarN0tKcA-k zlcZ|^2IxDW-#6^;i1c;{I?$2X#A~b*SaH&iBBIs;D;47=8qmom!hJK)$~@d4M!Mb$ z2B?HUFM&jp zRXO;ML%eavDW>Ny0NY!@!TpMQ9fPf{X-)gb<4*0ag~y(K;m-y%qAV;yr=NfxcoeoM z@5;-)9`P=uLs00f`MJ+jg296)TxAl9mCM0TpGo=uB?p=AE*HO7V37x|%+^;ghnF9t z1umOoIL$L>kbd$B$fq8p-@y4^16Jc014e%yVs8!7--HBJQR{k>H@d+O?l}FS4t2^x zq?0rE3Mh zb_M7GQWa(5&{$7!6ec}Lx|QiL>by9Qc!4xaz?hQ1E7opYpF(QyBwPf|mbs}FILnFs zEleGlK#*B&753&1P~*X(tJ_512`4JveL=jOv7gK|a~zYK*Zw&um;)U70$bI?KHFPB zzvmBXve`7K0OAtF*H(oWzXLEO8qI9MQxsDTr&=R|#DZI0BBeZh|3Uol1N#sONX<>s zhxkE>T~ugAiwyf^+0LEV1sLUGMkNkS&g^m6RT7qSYPq|T3nL|4rQ^v6$V3zt@VCNM zN(hgjaBUj_fQHUryMUvNnIuvcx#lhh`_lQA+RK#$xy#5<`R0t|Jeuvj+*HygMP^r+ zzhM`kSLTluZ7bj{OY}xsFDF(F&y{%}$l4>iw=V0lQrCRa1PPI{fxJ_A<={&R6)lz|JSs) zHM^NM-qN-5mV`261sYo~VtS|{{7-L#yk}NfjfiCn831sZhRc=jy10ODfDb37N0V;tl74;at> z`>&jGo!-x;{q9{(gC;5!h*D&09sA#O7wc&fKxgRF+V`*n+58}k2Rwbg4kQ5Lj2x>qeaGee5KJf%x zcbmyO9zb(%11f-v{SPY{AwN@2REL}n%0ljdg;j2`-cqH-x7aNSuM-7_fGIU8vQl zpX%Lh%Da1%dj=M24bcpR4@?6;eh_lBP7DCHogm3INwP(?87^vb9g>pp$Z#=E@ingwusdjJi7%h_o0!1PNcqL<#5&D?wa9h9ANu2(8d|a(&=%BEywA{8GP;0|79W> zq;n*V_q>82b%0bbxvznV`6|*RM*}F5={(04xVBBX(GhC4vmv`I(50B#vI)**R_41X zCi(2A#@AKT65AUC>I-|Np!g7dkQuZhh=x=`!P~lShO#58KUBTN%NY!TaWbdIVW_f}L!fF_~dw=EPTYJZ7w;9S5-rP6_b78OT~J*hz^mUk9uz5{SZb zA5(dIqlVAo8rDH3!y#)77>#2b_dY_R2{8~8A!r0>9-P7t zeegc~@Ow|-o`Wr!iGa{#_=y8j63aa&FJ5os?29Y7er^?;*RJEn$|f)0Xv_60UBp{G zuoeNWDq%xd$A|-WC%VbUl0EjzCr{0{pIbuvPkkZ(8-SZwGCiy8i*oEZE|q)%JRc|P8|AY5B`%Uwx9ePZ~fl8aC#=JEG!`i=65F0 zm%Vh=nH6b=kcPbyZVyaVE9+f4*5-ScHSXX>5?z8e6GT(G!?~RV2cR-Tfm)HRw3Dv1 zr1#X7CNI>q-sw!Na`5Dw!*@x(WMK)q@68ByF7KaioAdxoWvbhdsO?fpt=6u!dav;F zwM|4AEItCaI7W@efYBQ@76ts|6OaP{>hm+Q-5#_$Fz@YB@9bD<65?!P<>a*DgL?(< zZ9y)if_^rvDN2q+Be)PW7lnn_MH$fx5f0Jxbqnk_!jlc~^c?W3m!Z}PtwGg_?Cr;R z%K%tuX>$E)D_nl@H$Xf*?y%*UUpe0}sh#ZabZQ71UaFW5h%FGdWNN;K#)Lt;@5|AQ z3XB5kfOZUAYXh4-N=-!!N@6`jANJhFJ%{a?EtF+9azO`3=sQO;06JS1HX%%|o*el) zFm7(bp1S~O07MzB$#KZ*DML8o0V9ojGX0kOFt=x#6B+GCSuj3^E2mL`=bIQYqe#$b zRoQNB8yS7;Ey0x%dnK=z9AWn8klB>CmE`EDmfz1&pyd`PKHA-+dY}0jM&y zR(3YqO^y1M#YO7kn7;h_2oausocPXmx7iEL0|SRU1`aa`s9mSpGUS_PfsY-gR1C02 zK~Er6gF@)F0HTM;s$`oiuz>UkBo3^Hkkj*!^#S<%E5ei_;y{YD9L!xY?OnERt}HB} zz4QsOSft_+j?2-;F^+M3Pe(y4E(#VGU5mjS(&SigyL%8}#n0x>N!V=Ro}c_d_ml6N z(;q$qla64P*fAuS}u7dDAC(zhG4WT0K`Q+HMeuiUmE;T?mvMIH=V%7%d3*U z_yRC90aRqCZ(C`SbNgIOdF$tDAEDg4J2KP`{}PWE8(|YV(q2v zbNXFzP$LCrVJ=+k%~itSUV(X!iXOFKGqr((>h;j^3ytRBsjKUiYa2@#jE9LaVDttJ z$^xMqXCajojJ6Q&B;3DY@dJI!gNgIwk5KsjIpEzhkQD+Q@xVcV(zbgk2`C4Wwx`j4OBuAV}N)74*EcI8k3V1)Iy-$@pz6=FBeo-V5I|W_B`XO7I|80 z0Z0s2=R(=VoXNb_H3I?iIw?^=Lm+j));7@ZIsnXeT?o?z(wza4tJi@W=YU4tvx^GN zBE`+MVg#H;JtRKxk$Z9MwmA=gA#BM?F zGI->fOeG@G5D+SfkNYO@IOd2u96h_vhyn+uLcH&`7JfG%W65Q$=;EDTP-#@FYi~an z0^pOF!h?;01t} z{?yD$zZyyNe_sBDcl8hb?XP}y;`rVx?Un84lHTC&+4UO%8!exwB1@ja3NT^7UKjC~ ze+xI_KBnID0A}u<0s_GGJk!X87~Pel-;gTpjEy+B=FEP$VRBgufKCdzybYXP1Kzn8 zu%Xw)qXX0q^Aj!Uh#CQ+1aK*2{@u5sd-Xc5oqZ12*)ACUk|tA~?ZJQb$_p>I0et>@ z-GQzhxE4-Tqob=mS+L^X0h*~4I;&!g7z0ZR=>l3PoT!M3fY?l6dMQx@vA-F%CTnUc z0k!W?xxlFAQv8K(%G&<6>Gjj@x#p1*-9HsrlxYGkEI|((=}bQrg+IOKeQ&e+zkDN;=6^b$t zaYt&x!&N~o0M@-Qo6~%ET}HqkabD~?*K{FW!KRQhy@T0%b6~ya-~`}-DsZq4)H0(i zI_kh-IwkkTbaPv^?do&|f`xI1EywcZusQy3IiiF1|#&7lHF8}Q{Wcs^`g9@5WQ9)Nx-cQFijjGgoFYyiogi$%5}uo zE&+oMP^kc_0_UV8ojo+YM>aDOtVIzYx_`erI9n$HI*tH5M9C%%p0UHs37utKo)T~* zZuByQH-jf5*UC}s2zIE`RWw8SqwY1bnj9n|N028eorgfctjtXEy7#P%ML0yNBu_$$ z=Pz^ba{d@9x3IDQLwrFCY)lJ-v{Bc%TLCVv+@>5}zuR@#n;1-`hLiFkhWAq7vB<*g ztY~MsMW4(q?{B`3L$HViL@6aYR8bvQW(<+LI5^# zVj(~fAnn8wsk8>R(Hf6juakHLSg9a#E}iT<>`xqLJ~IlXRyh#X%?uIr6Ly zANJuGX*2Dz(lcDllYIwC1>9RD-Z2YA%KSMd1?Wr1?w%hY3e(^KWcVQ8?;xJWkK2LJFPgps_(qV#S1c(%}6GNU~0k&eFw>LuHBu0IXs4~>vB)zUt6%?~g znVPO+`s6{HJ5B(b+d!NE)rw=SCL7mQ@9M0q9b9G*E~G z+}bs`^<}^qzgts40VBMQ;mM>4U>(A!#@qKcFj))o#d%qfSxSi0C@6zlGiu~D0FWGX z!O(Fl2VtaeTf+#mWW-+n59pjZ5HzBBbc?bw+zJROz0dz4nIqdR4w-8Qxzg?AYrJ>& zxyvou2e$^#3V>)AxJHO~9or=cK63oxeo5{&i*nh&l<`0LL(X-#2>57CTXxU#^O4;R zy6elOB+Pva@Q`KyJ&ZD;=mm~hF@o8802P5tEu5o373?L5APu|SZ;VH-*GHT=12wK& z9f+GwoHk>Mi5(y!GG8T*G?h~oU_ejCEQ6&ZV}sn>aZ7+PC0kI$1R4==&m_=@Bp;W> zIs|>kc|s1QgLv-D8R+zJ=;9;5SjT7_;~2+(h}hX29EuZn7!be&0Es9Nv?eQPMgjxC zxt#SP2n-MyfiamGiuzqHfx=Q?3B*)(Ef4{C^WGZXdUCH!-hVq30@xH{gc60Cbh`6t zzdbd(K2v$^Z0U~(7A@ZTbLW2PN8r60A80VXEE zUK{-vUc%N_p2lE#6H%C;QU{#%KV=3H%DZpez5BH*U&)f7N&r|3T-^pPZ29$4GxX{X zz6``KVDmpkd_G?bg{B8igoe|%?Lp%m_d=5d=*JKZom8sqZS`7odh+FOU%2CY*=H6` zLV6NZ6X@LxgZ<8!iNxuIwNg(ltIn~KS{IRsNQMv^2vrqQRq9;D1xF_(I8cXc7+P3M zkempts|5_9vVSGvo0AlC*k29*wCB5WwYMiu(jVxh@}r@VlhYNgA8rcoY>B(0DLht( zo2@uly4rxaXNTtA+a}x73y(c!#v{ZSFnYtq*(C_JFPnG=hP7s8;M`Q7vX|6a0+Cd} zz(DVqgfuEZ!h$Lw8Iy#PA={cQ`Z8hQ;m*I7Y|34UK9POS_&)^#B_OJBx7ERk07ykJ zup)E-1*vmLn@Q6hs6tPV`|EJh1JGIDI*<(P0Z8PF{s_X7YJk>lQ>;xyPzRmY&2v{|HtVQAq(#@zB9C%DscC8a0E;#K_a8~1f}zm zAuLzE?sBfe*TPZCb{?hQ<)n#`pE9r|qiw}q=aBQqkg>qZ_}<9*$u5RdiBC2>xAL*G z_RA2ekv>{{pA=(NVH}9^0={$(`A~L~##AO?S$s!UeisDFMr5D?D5-@c)>G1x6cs_F zhL!R7_4%;wFE4KoyTli~l>7^V<(oUrcf%qPl*?zS|cWA$U%?ElV9bHFPcBMiJaiXL zvq20jWe|%A0>1)7@ZPoS>+k(ucEs}=Ppa)pkWfMdQ7R^~hNuQ2kr9Ser}SK_Kmb)z z)EDwgOH-K*9VPz`Dab)}2ffJ=&OG2*<&`uBO*9xKpi3MzB`WIK9BX|djJ!ym z@c@Q30w+U&hyncX42r*d;3IpVNbx%cB%CD&F&Ot8(6caNq0Umpy1+P#oh`bJO)yP> zsmbiy93YM`bnsQ;E-Ui#;z#|2=sQ9qF)5+WQ9uXMS%MZG0JA9iXkH8D0U-Y;Gp7m% z!a3(l){2U^Y_gUNG|12k2L}q_Bquca_mO~ORxRQRkb>D)`BTU*!~xFwoFRX06nDv! z1(eP+FU0dTZw0`j!*g&XT}Y*!<=-#|X0njC?&ceaLWlIw{FVRM4{rggaZ3}EBfJAE5h!cSo1M9$= zb*`ESe3;^>hSvlIDhK4_mag5`2IzTOEfN_>4EIejTEkK*fVB zf1)+d!ecb)_Ik~wgNjU4VIlwujl+g^8~f1^!-QZ@e7RJX&^VidX$n~D^8}lcgOnUN zu$KU-_4DppN_H(-SLcp~iL1DQpRot2u+t8-f}RGZQ>jeE*|j(*pu-Pd+2bpo3mFMw-SFnplBEB4eddCxQ^0zx_Ctzxooo+dWJl z0wr|LS?640NjfONz*p#@oPXx|s5qZQm<)IQ{tJfd@=z zzPn5r%7b_i20Mca z;fd8WywGN_mVoOq2RAy-?(}V{v{(1n@zqfEVylHN0I%)$$C(pJSy(z7?m7CQsnp;^ zU(B0QW6a*b;;za-@2>RqK-dcoM}z3DS`yydqJ)8z*qh=UI8Yp8s@Orza<{{(c*bl_f^xh!p zbZa(EBSaCQ%6!?a#-KJ^heqCJ!a0Q)PZ4$mdP!#1rEr>W_YAeE%DP4Q^ywg87h9N@ zWdl?Q6e0>hA=U!vfV7GAJL#T=EW%U=SC?UTGQ;U88j?bC&W9B8=^mm`0BN@R7cx-L z`%@3~h;o`sv2&9HUOHOsB}1V>DY=#v8b>#kKuK#U5tUexss*))Loo1K9z zlH*+?C2`2a>}803p;Wz>0bMMP<;&QHWq&N%ltuYIZ)KOpT}&#Lw9&HlIfs3K6qPcQ zXoQuPYjfq}S}rtRkRr1SaHaFh`$~SF=wEmAPJL3UgQJQ#qv`+y5rG&XLM6q*7zt9* zF<|t1Sc}m!cTCb(feEc3gu;l3I4ejToH$4Tk*vRo)XwI}# zfI)80ETy?pAfcLCfS?8uE)T#{3;DN>%hJX%j_=QSw8(JY^{#hCbHU!dn-kX_c-!Cm z!VkRV?|tFn2mjm0-~P_UuO9oM|Hs#7Pal0~xBk!Ws_)kXrjpLLTbibISQm&1oq`l+ zQK=hD@1H~vXrB9I8;?@3e)CNumyy+-h@VdtE@!gS3E;pzlNG+{?m2{0O;C-Jo`1q# zT7%_OXQkULWpDoHPY8njVX^bzi|ds}@WrTF`5#;RX8uJG=tT}k1*C~j-|J0UiwcMnSH4tx_`su2 z)|M9FmKGMii+Xs%PhEpW2klm9&xJ1DRF}FW6*ovJ2_cpOM}>oWF+hNUP(mT8>S8Fn z4%kdY*JF|Ofym~78as%JY*me%n>6@lkOtj&XTJv!7r{T;oLB&=0-QoPFcBd&CsGqY zs(~O1M69YtLemN$vlYc$%}5jmOrT~!o$6a2Wi2p(ui#mkA4{jaQRDkAd0#jQ+1G?D zoP?-^4MHXdMBNJD94UUO<0_y=Wdz|CqXC91Sl&VtL`vF5l37tnxs+EuSOgO2Sun8x z9AQWVDybOVR%hFt6r8C+uC@wUWBL9}lygTM$V}3zx+JbRD*>t%K#d1j93Un{tq}q$ zu!(PH<4ezA9WY1>Tdu-sY)BO@Y5xqhjhMG~E*MlORA(zCF@Wt6$-vWE0zuB36}lM7 zm5a39F0#UQ_*&%5BgjJyGNNRIjLSnpj6y^T^d>`dwA?9o+tEu7o_O2yp+3#949tre zOCe@VmOwMghz4QdP+y=XyR>X_i}#x}lgi%hG9vd?JSV%$+VVSHSl+X6hi5LzEF86` zml8O_p;iww)B!|B2LC7M6ZK5y98NW1YVMAYQ%QLhz0y+hNED!PwA&n6@d{V84igf zy?a-;lH8TA)Ukw_P`eOf1TY4y7%ytijNullBu1#PHUufB&cK~r8ZjUo$2i9EhR*$V zJ?D#yTv&KaR~8?yzPj^;y=Nc4d{X;^dqR<;Fxr9!3c5~`B-aBq*P@BqEB8#i^;-SE z{L^bGwW*lXi6~FrwhMEsjE7jD#93lZ)H66XjexBqqWNhM=GG2IZRX2*?no zl6*WCz=SaQ31_$irC>Vc=ZaE4Wm$U%r3ttYn=SA7i!YOOl9g|hs8e8WR&Ie!pr9i=wP(Dfw!GhVC z3tSfinPiSR4oZ4WSY#}`hJi#1rvQbN3eXS0J`557So|W~$~9M)2mlE{_6Vmt-sM;Z~u3l zt?u6&wB!F%yVLtbXJz@}JxTZ2-klogRx}J0 zL0}y8-tKDqWS(i^Cb!fP?~@GhqAV;d>Ea?4i|}kDQn0X8B2@2|V;sW%r%%mGZGV4o z{(nCGdj}u9_fz%B=D(ICUT3>USm$>Og1}<3MbuRK7nf!A*Plf9`Zf?*m>Rtvt7S&9 z65oVUaH5A>40*;^(ts3&1OgMN$c+wgX_M&mf$0iS3w#?`H^ib00dPNKM*b{UeluQHHvIo{e;N3G(6&*bitOkvK4MDsJHXjNdS1U_fJhm3eHPxYUV| z&WKYgtF~u?vnywH={a!ewMrhx@%qP3zTYl*`ZzRA5o)-~Fl=>F;g+cM9aL1EGKF*o zkTk2okZhsuvPD^DjYODCHzhCK!06^ZM;R+QNg*%mQC9*ax(@R74RS3Ogenq{&WP+p z;^HtAq?Iibv@ISCF5t;=pG9rvoKY9fhJmRkmO=?E6vj`%3W+MHRee2}6*34w6F?FI zofsG-$e9~5ge*p8-CRjX%Bsn`%C<k z1>eUn!Nu43aHtgIhW=SfkwC<#Fa0PjkKAyc1(bzNDf9jc*=6F#A@kSy5-;CBbKt<0 z4B{L~DM(dFGvFrw&cf#2zmwjyqM*DK_*$kZdwh$Uc?>J)B;$0+twh6fP=&+R<|vxypWgzu@xRc#tR_Ew z&3DZF`D^)pmETvKM+VsCu#BU>R+PlQ3)UOqN}LYTo3xZOzF~2mB8QBMT~Oo;cNSnE zkW<82w5hVJFg|Rjf)kfPfldKqqyW?%)d_rMriH457=u8Km@&iX^|3$$mllDan!Mgm zn=>nc*frp`R&o_0@}Ujdh%8}DY0V;pbH$Qk92if7S`vSPy8Jeb+d+=cQJy_Ddi5m8XB} z^FU|hco1TdditR=I=^xvy!QAvXIHPReJG_K17TcZt?Tw_OoW3o4ZP<-)xn5~)1ek( zj()@In)+NrJVRRuvH84R)UiRk4lZ=SMAb;^_DLH)W8rps5KK83(Lp~xnOwK0M%ze; zC0GxjoiPA#X3?i>*>wO5{!~72{CX|k`3b=p^v^uDV27K|uf6$v248ge zz^T39)SX8eJ-;f0?|eI8+5$qguAhc>yF0u8J@>usp4$)Yd>LH!z?ytlOVa=#?eYB7 z)arIM#idD6?7%(HqwMKZD*XYmH4uu3sER5e^?-v2>>2BJ8fu>jC4D9`?mVf>s`iqr zL@ROJ>rT!Cz4aQHOeTd3-XHb+37i6Wb_s9?8eO{HrifXmljgcrEIYxRINehrjTnhz z(5BWp>%k;Pw_2flrdf%5;YNQv7mop>H&$$%hnuclODAXdQ_`JvqH@i^ZFH>ei-d?B zvC|WGv1fR=25p3pKp-hcoQK5E3PX3Ka@|g`%U|Y5WP7dIZa*D?$oL_9Jq9jpIT@ss zNPUS;WUvz$X~PW$5=s{N_>g*0TKu!*7L_forQ}dGT4o`hB?1Q~2_;Rl`Xixe06`KX zUEKt`U7*?oqH4~|5tP9kM=3ZX%mqOde!3Jf9;T#o8Q|jcj3M*QLro$&R6@!@%$)jM z!W)XqaQ+uG$aleVTiEP^z5CqILW7W8wTPl63_*rKOD;*mVWD64=wwVNdV&#iE!+~g zTDD>>(}PO)X=GvQOWHICurNe?2oLzsm7pRS*3C)T=RRvE$?m;lx#VvIPAr%?#pI~F zvd!W@qa}bW=v6~dsBou)%Z}$k$Q;>Y0qB*`rVMhC5->e16O2sRGyW0q-xDY(6k`y%fYEr`eLW1d03HQQ)U%D) zwPz~&o$U^f7)q-u(3M#5N{6`CbvQCX8mDTr+EOh#XGxh2aJox>E0bztHr|N9FQj_b zkJXldqtGbR0JyHeRTFdT^y3TwVCjo+SR4aJ;~2*qGlW=NRGd92IQ1Oyn4dRKESL)Jd}kD+(Yzv-og&=8@ADk3tq6quJhmZgTzAmD^V? z|C^Jazp`=nzx}m;Sam9Off%Hpiy^5E-ue%FrdnT)W}7d~-gfwz*{RlzCl?>=4GaE# ziipKUV39nxh*AZ4~ zsLfQ^+wkmYCz*kajz}luCG|sXNFCK)a zE`Q6?{I89GcZ5jqtyAt#6$es^LbNZ69RqAv)a^vHHv~K%I`@1eT&`4fOFC(QP2wJ+@59=>j;H@{;OWgEKm99^OizGgI{7JKMes5Ymu=fI;`{F>|$8Ypl z`Td0ErES4{7-BMjGXPfykd1^I&~~bD*9GRhXwcu7e$e6Cc+?sLMsJ`v^&E(w*q^Rl zgbZxEtF36ID!j7haAzHms)AcF`OP)Koeg0tq(tIXZ&BW%mtyT#F83HF+ftI1DGi2M zSqVhEqJJ-@ytobC*m0TwsD}W+G$3D9U|F1LSGHlhgZ(_U04|ODENY#e=_PW2DvgmT z$B}@FL{&tQzdM-;D1<T9VE=2!!eZHK=$? z)K(~HMT9ABF;Rv9N?BB!qu|EybwbK|NsiQP)j5jrM;;*_eboO6;QpWg zT-~i)JM!{#*FVwU>3%#-aF>KNqe0ElB|x_e>2<(LRnT{WZbziEDXiCxw+%5wy+%7o znl^Fo>23A*zV!8T`v#6r9R8{GZ{GgSXJ0w&JGs`ahiX-JCN% z%aJryILhRaY0Mv+Lro!@&To8`)&|45vb4EWcH_|D=8h;lThmflQIWUbK7|)1E4-E_ zV81UW3Y{Ayff_w@>HOt)?>##C`J-zWQ+wo~0box5!nd03zxTT{H?FK4_}uSq9YKF* zE{x0_7IHF*;{ZGAg&)dHA!nZ1C zHc&8?ARc58UjK*a9Qfp~zch2_k$;sw`(o(2@oC%M*^f{u8h}w%PzShn9XsEC3E@-= zwRay!SS6A{R>QBuiivoqtcAc%Ori68_&~Ok zN{SIdq(DHx#=y*hn(R5&;MG7KJ3WI&4NyZmL_6#4cXqqUf#F>8z0t-y^&HZ(C%?R2 z#mV2T&hL57Cc(1~`dn;+!xm~RT~CZ`L`F9QoAlM%^&r%XQ9Ze~9n7S&0I+=xaWZf# zE6=(WoW?PL4((*)>VpoXEPA|C@ko&+{*kU@`uL%=+r_J52A{LEN7@5@aIKHMwrdbU z(F(1L1nd*qNv*AeFSHcjtcYH5$y}1HPl?6xur&sZ-e9p)gG^WUbH;QxHV5V<(!I|F z$|}K5LVRr*^7dKaa8pV!O1!`Wllvf+)x($GWAs~?eSNh=Z z-f*%NJD5OoU8C4AeJT{WkVNs0iE9A75b5{*juU`x|H}q3_dukY8FPsk&;11yQmG*f z1r*Tw8CyUgNq{&3EFnQ&qQjD~&Je4~NlE3^I!lgUqFG6lWLh~8&{_vtdMhC#4o1MZ zFX_exs0J`W_6b{nk7dMSXscH+g}o}e$!1vf6Ilr#kdkQkaB0t>_d!nW(JXn%uhkMT z@L*9lCARv&`5oeN&)Zse6Uw$F6X(s~BqcMgBkx|3d$5BdN>n34)X+HxXTijIWgH`5 zBtXRg(~-fECUD0TSPy{72&^e#Ah0=?ilg97PN<=bxT2NCw1t^hS<#f5+1%$WAp)vH zhqe*cUkUpw9b5BLa3v;=X69$Pu+>n(ewbVoY$6%@LWvvE{wXT;rDP&fP@I4vk}12~ z=(0UY$AURj{4R%)I8?(b@~zAPZYZZNL*e1VdCkLZL!gm`BU%|18tP|p$S9)ZG%gQ7 zNhaKuvz`PLl440D>3Gt8eGIk2mB%TKW01xT45~HvY`rVj=x{0lD%AiyyCpbSH+b6~ z>Rd#mD%iF|o5T!Uy=h}*2qeNe-{+;JKn>v50C;u-vf78lfU1f!f^JQ4r9yK(u=Sml z^KjG0p*}Gl$2i9EMjnR%5RW_}c=S<8x8AwGzq9$lwaY6%oA%RLL=n(zLVDJ4yU$8G zK(iT2czBX%v{FUdvV%urj*j#PDx8Lsn$4Q*bG762V2>X3d6nhU%%Yj1^Vvwy5T*jUm z&c}siswj3FUF4#tw7w)4Hv0*T;N1r*@`d>tzO8`WZbJ_35lO6w;>6DS)?bWF<>^-& zQ`gbC7HKD(P6q8G=;8jP+kao0#y`;8>ee~vS6~!UYb2~yQ#c9+siAWLyxV2f_3SL# z{ri!0e_ZOd8>SL{acgz;R}M({wX3He-^7`REfyC?N}R5K>SJ91pWpk}muhlxwbr?@ z_E9z(DuEc00Ibx2R)f8lUdDE_g4&%2Ffmi1+n}Tafa+5y$*MH6oJ2s+wkokwi(Ewr zR07Dr376Zz3u{250@N!&B><8Xl5NDZP?HePGODUF*#VjjgXseeM6+{<*LTQjB&by3 zTwmMk+q1P+edYtda=rd}po7PtSfKl^ZbS%h_A$ux@df?VTO|gtytv34uN-~l$*E(< zs$0EwsOqeln&`(nuQ+RK1^}k|d(&U~LBtD>L0_DQ%=h*aJ>c}hF`hYdMz8k{@$jA# z?iD~j`6Pl@c3^()?cnlR5T{_5fT5<)tu|L4g?tJR+J%!405_WZ`(LR+_jFw)OkHq) z?6fja)V6!-U3e6(B3Q2}K6_XPzct~a)f?+@N4>g46N@`-io;TGgg4UtX?XA32@(h$JWt@&Jf2BXq*#e9)HRXSxnf8gA<#TPDH zL8z{3D1mp{?5psVz?scfG?`wQfL%I;G#g^SkHart2gz?3GMXVw>2_M8&{45K65! zq!Ov8`sNf0<4Ya-3B=?(;2hFf1n|g62I4Rio+(?X=R#GYzT9b-=(#clnS!c>suuuq z{Q=$9rXZ+#b`b%%eEfDLH>=&tfALdjphRe(D!HQ&GW+TBr)0NkZtTe0S2u2A3 z#13+yEqwec@R{=om%DBauEeZkb<<<=DTGEDrDv- z>lJMk0h}~La;}kbzG>vg?=bT40pb3tgDV7`ZeseduyxDp*(4XMDmPem8?*b7$@=Z8 z!Wx1k*>hT!Ud%9(n~lUU+_@^;;ACi1FC$`6MUDWrKuN!Y;$h9o1j}FOFT|A`>;NY^ zEK1Dpb$%j>5es`3p5-VB3=bJYf?U(ce}~C|shkGRQjMZxVTmqT=^97+)bN}&yFWQ* zhU_{Z!<{`y4y${~e{q(WDdhLJAz!)X_5O`Q zD~7gdxYi8h)h6tAS_|E&)8N%7Z(3B2V;tjn1Lk|aJoZuf*#3`Jzw-4b-rei;|8Crl zXIQB~je%}$iY#B0Xy0Mn{m|Rp2Y>8d_wGGaV*q*j$`*d@n-}rSne!ODaKUkP1(py! zvRBMZ-AOg1+v-Svb!)D_)BhVg>%EUn?VEglYrFqj>)X9!n`_(e9jtE8I|~WwhGJv5 zPMZ+b+xJcIwtX$S3>XsGRq`(-7Ou+mf!rN*Fd+s`9s!!iQ z=iEvPJ4X{$Xyg9e=B2gw?mMyn$D%3wRJ>*CtII3zS-*7o2W`jhq16V1u&T`lI5(3Z zjC|VD?F5MXA`sEZy0b9|YY7F^1P-Wzz200xol;2Z_>~IcGTLgXl3v1?UkLo9h?#4s03WACDLC(@1;vv`TWbM|E0Uc)I+aT z>4y0zO2$hvbn+D`bDo`NscPna5+}e5D}n3SQk=$i z_sOOKfKNS$bn($+f`_uU`J!Joo_Y>kd;|_6T+D>4PoF;R&Mtv3)*uIa>-99OHciFU zt#$^}*JS&}mFdn1SoB)Y*dyT5qrl=Lz||+uwKuwV{l=ciy*dqhM+$eC4)5qWw=Wfl z3EXmx^4W;#7p)1-C7bQRsri;${9~}0#xVwrUKgaoAS{?mI51c}Zn)`Lfexg0SUvAV>Zv6#wa{eqrXf-D?6gK>6}2 z_}kZotEn=IRE=7M!hTh-8Ua_`!0sdsq|?_&n5^H=+f4+3tsB3pl{y;EApn(LEm=uR z5mhmb8X}S0t|G6*Mw|d~TCOni#8=6z({oK6mKVx7rC3YgksVsM=LvvI0hdDPgrW)r z#@p$2d*a%g-Wybde14Q%frus9<+8!m2=_#FSV>i~Ss&3-Vg_hryH=DDpkzp9%D%}0 z_|^vb`O6l+b`j}21Ji%NcY$Ot*3AoGZRk&}$$ zHgvix3wGxKXwEnrGKe_TY#ITrWLQ?WOJ4zHaIJLNENLBaq}0xfcIGTNZ%GKDIDtBd zI4E2q>MSDVcpQ73L}%rgtIohRde+v`+U87TpH2q6w{Nk>T2K|Tnt)%p1Xu_2;r-y9 z4dOuPunvPk)~6gt${-O4Tp*rdTZjKyPeuOyW#Tulf_*EPj{G=Q6>Lrgc)k|uQ(;9{ z;#IgaXP|es#_XbTjN^@;?`4dL#YOr0<1hThK`;HQgN^PiO(bw22W>EJyT+UD*N=bb zZu!9bj>*a6)7T#xLR60LtK&^aT3CL|QTN0PC-Jqfy@;p2@|>iv>_F;MK&1g`R75I) zy4X&}TidnGUT=2$iXKV@%`|p;2js8C94$?WL zF@y=oMqO;bExm7j6YFo#+Fpwjl2z0X8Q@-TVQ2#@lCj70M9^ebXv;gm zs~eEXDlkDq%%dJi`s7EU)wSypS`$;fG`=f#@x75qR|5I^;TgQN@EE!D39*ZhLhuNH zMap8q7|Vpw7rl|h;-df_c`*Itli1uzJ7?2Wu2|?aVb4b@(@rpOl3WQ;d7&w~l9G6m)28`Zl@d$X}47hOwT>jQsG~RZqi}U@<6G8CBIJJ}3>4^k_dgySa zjHM5sbbur~k(J3uYS zs3yY|JYVZN3wiYnju7#Vq#V%)DKG~IjJU(z3cws%##1bT>oM@9D^@;t!ST5@hlwbV z0}Urfo50ZtWnFwjm0L59w|&Sx|ogHVW20iys_KnIczB+z$))h@Bs z7qt777j6vjWvC5Yyg_cAycGJ8C3x@_ zC2M8TfI^d#D4|LDc{vo4oH8u^D~TYXB-&KQ=zJ+>W`9ShchZG*0_PxPDq_Z#tFNE1 zQ&%7ZJK%B;>CAEW&24LLZ#taXNztqr1dhP94)7b7AgKl3zXv!q0W{T06+kKi3!(G* zsTdIk0tT7PTWpm#I>0wKD8G3Ld~ruu4IqK&(zDi7Y) z&12RfRjT7kA%x2q%tC%CQN-mtNYy=CvKQ+g(VjDcY!kqI8Lk`bmEe zoX)}dOhPIFq#6k9K-g_V;=WFtI)S5m8!{hJ;>=Z~(Cw346hI11OL&&iFh@bjq$6V* zK?p}d&p~G&e&_hC{FZZy)fGHyIA5UHA3pY23dYv#Kpstk+;&-HJdZoR# zb``*-oArGBzt@)j+7-P0mp`pxbiXkE80e0Zq7((1Ezot4+_;3z-+czP`h92~nTG~I z+95=J^FkzZ)6I+BePUtq^n{e0Vr|4LQFUVA@;0!iMNHNNN{VwpV!hpp1wcF8K!X5o z092wX=5C*Z)*6boCDJrNwQAArqt}jaU%$M4`y#1l&V27c(4|k%Ej)(8+J147z#|!h zsFc<&`F{hC0E@`MA|LZ7K`elH6jHeXwNtgqYA=1jO7LDdchV`>l-SnItu36Kys}90 z>=I<<%o#b2({8jhE&KD4ygos=@fh9o@y7a#J#0;cxY`WtwMm003f!P`Bia1Uo>s4U z{v}zNKjqGd*Vq`(#bdze4H;)wz!kt@{uE9fL;CgStIG#!Tff@Y;CK(={y4RjMhLVi z=6qN2>(_z5c9>ER;6#L}g9hHbiZ+wZad`;|3)djeGRW=22}DAvh(lr%Jh5i*^r~Q` z2i7BTp`oJ~>x{m%w`qSfw9)e93p zajHowjCWvWnylY8kEsagZ9DW6MNkuVtlzx|$_r;L>65c8z2_YwXm?GIWx?y**S+Mo zE=sC8z(6!KV4TAB2Y~GgWYVVyv>ZxKk1V@~ScX8A0%w(e=JWIyia>`YS5k81134^4 zD~bISnlo9yqyp@vR=#;d@Vl?3^3rvpW|VjCG4kda#e4Sv@7b?17Xf_>_HCBfsPSUP z$Sy;M6ciOfWHKj9KLOb3 z8{ydtb-T9~+PC&p?-xkJz%y;HYycz*;IUiXcq`agEy z5K=v(dnX0AnBt%QN_&O zy*hXAQ5<>Tn4Gv{UJlGuaB#A!M<)UtYCu8~+X?XLXEw3&Z_e@hul~B&?Jc0z04fzg z8KtRxaO=j#^CuUdef&9`N?&t~{gDeB_fLNOADsKmuhrvTGMC2jlteYSN)4!k>P)l@f8ntSG!Ipy+K#W3jPZ!Pj{aM1IM(C^BF(N6N=iAF|;?fpyWXd7*!W2lY zPf;8_JD%`KuTzNh08>*oCL`76tY~Kggc#PU29E4*^d^$7n|bm#P@V5#u=qWjQ-n*O z!075ia!{!B+G6(4#hbyp{PPQsQ8x{OtwCjGK=(mMe1I?}wds|B?yW-InN2n~&Yqp> zP9Fzx{}p1Ebs3nJZb`ABUEnofX`e=F&P+sWRJs<8e|KQffZPxI1xHO{%gJ~PkJXb z3TPZ8B%~?egdsK)$T!vk{G(@p%L7OlKx!)JrDCQ-w>GKn#k~=qje7uvSl?nz~$CUIg2Q47M*L1;?)&Hlt)CJ0b?$Y}-|xdO10p-p|>G%|`E z5rqa+ew$f#G*s*+oDDUja*JG7!d6BeNdJY*-^(HE=qAk`7PoFFNaTiiOHu+K2qJ|dWrgF?+SeCq1e}_OI|In6(@182Z}3zfm4DiC^51k)93K#Y zQMj2pbdW;MTnE3kE_`4%;+tmR?ru?!RGgWqz^Z^f3RV)83tO~byr%lprr_!T?2DLc z4N@@x9NeVAb|b{MT7mmgt)fp)?O}$2i_-fYGA3`+xqan!9lI zt{X30`fua4ol`U-I#IFq%9?=&?tMRShdlCk--CnmHQ9DR$BIiV;4+5_wE!#ya0sAi zipZX3$p80WIL^=BKZ}3!J1_II|Hrp&dg*0l8Y_Ybs5Af*5)%y%>0E77I-4%-bs(*2 z%s=>m{GA^?ArBmFAWa?8)W8Zv3z9A1SXf;QiRr@$m~dn+gvjA$rASsw)de_hoE&-J zFy8q$e%O8EAN>DZ_r+ptrnsd%CvyR(Hq2 zyH3{5zVI9nzs8Mn-(JM_ZMVPu@r_rm9of9L_7Sbrt$>bE1T!@$=G7OqeeP9MP8`JK zeFxCrCeatt5;Q*N&`fKy*yJMfWQxLJh9m++0i+!Rt8Jpw112kiKz-Jm5@HG1jJc(R zL;wuu~P5(}-hVB^%W*9*nP({lag1Ly7Lt0;>_|Jf{7|0wgC>1%Jc zgW!Xy>Vrn*P(=afbWiN;Z9+HS-@+ES@~uyOalZQpZmbkS7DBuhs5Fi-VDx=C8KJ08 zl{-IrT2{`ZSKHJ7!hqNl8UEw|Y9OE*VmmSX_b&rGJ>|puh&N4;lK~|aVV}gnFO`@g z-;5`!3Wfqi5JZ4PAg;v1GuJ7Pod+(*LJ7nL28bO^%V01O;P+-Cp0VA|YCWkWSbkcO-zyozi;IV;1GN_PLf(|P$ zebO^5Kgv|7%R}P=!h(_~J`j__g1=i1WYuGCLhBGCwP(H4QW?dFe{7D#Z-> zVJ4m<0uOL#rs0zVF;aduSdfTVMjUeiYL`uj*=KSlAPXcda|^>r4mV^Rk>#?mLSO1F%u4Z;+1-O(8aTe|^0Cx#; z=U|wMloHt?6qTQf!LTH+WG0xkhLape9I8+OlDKp%di}Z?et{)|D`z0{E8y8B$nA&f z8aHeVS*_zRBG^^OUEU+VU;aFUA9OHPy$EBApA4jM6)aK~H?9V&W`lK33YfncuD2U10qsR;U{Q~+rX`P@H1&jfb^7K!yhgjNs^z*Njt(8U8D+p4&b|W?SwpB0SETo*;Q^(Kz&P+kQxYIidM1fR7VXdmRF#~(<6}G=Mg`I=*61EIrDYlP9E-Jiy*_FQC8C_3dE{ z94IC*`>tQ_ytS89m*H>gpFWsd#e6sCEWb*re6Bm&rG1bte1Bx*a1@A9A!4c-kh8FO z+a_gu+EiCQ`O#|^KLz$*6EyN0F)|)?#xVwr%JC@V>`BPt0&sR|NnV^^Am-1=?a}G8 zvBbY)g|}^6yv2bPqvFBWL{8eIg04~oGw@-lkYCtOlYC=gdWIGrkD(cr#J1OvL z54_ZNINJukwkqyh8$h)RhDrpaGlK02#n-15pWZ9(n^>C};0SnT1-`CyjP#B~4?ras z$jMcSG%JW!g{nft&}DX0q`^?F82jI6*7jK;k*HTemK=@} zPy&!P1(QU)6T6lWh!G{70w2j<$gmgj{58o$v{edNAh#Oj(6#Fpl$T<%@*gP(ID&+V zK|*K*)N6u?z@h1@&c(qeE0Aov2f2PyUW$(bRVnPnP_AAY)}d=w5ZAK~U%s%z$3FYK zeECZ+qjP>8uG*4`I}W0?f09wXN(U7uLe<d`!~!-2QY$b7YoWM$#Sdwra8Omb-ZFf;Rgr(+0>0J^aAh`tTORyj z3Hca68pk-^NO9s9U#cvB>B&2iPXB{8O_~gpNK#b#vA*e{yYOQlIf?h(zfVF(3;?FZ z#G7Fb*`AY%&;WFxI05<)^eC99DBpT~3ilqKkc0Of;?wsnWBH})u6KP6v@x~@DPoF* z)heo!lXBa=2k`a>_TmSQPoS#GP71^vTBfRGde#{LgrV>DIBRO>H={PNi49H z0s}9X0o9V;rf1m0T0k775*mEu!98;By?4sh8{1fY@l~Qy0|F%l`{SMV4^8b4es$l^ zefpc{e(6WHUuz6LCvs)_Fa7G5DuP3Ut>vGAVg`Y#3ykRWJl*CBx@Rw7{m7k|f9rnH zs=_89UDhrci+VJn7)n{Pl%SaGBkfGf=-ydxwh|h!mu9>6S+3*D+Jr^E8X8R9xkol9 zE9|Xol5t8HPhE1V`?fZ=-{qM8Hh}h@=jY?}nKNeFzWHDR^8*az-Y}4fFk|P(BD9u< z4hIv#`%;xJ_v5LZ#Yb>$@ef*0j_1*Fi~*xjWOm^s{oJQtiqJdP zIW~9j_m_Jn9He${AEqjTdc{yGb&+dr@K?8;{LVGXd-tn*crS5ZlQJIyRs|s(0ywcy zZaI;4Oa0FOpS?egw&S|aL(%V>t7^BW1#r+41i`+ONRg5#Q?e*amgPq7A$PIU-K!)X zH_00}Z;UtcBZJ_NynElh@7=tSmyws~IoFBfB#sbUwrtC?tOl|rQ4JxA6an@ih#ojN zIPLDLYR&n6tW~vZgLH2xmb9lE5C{A0rmA+WxxV=|eb^r^LqB!Fc(oUTpt>!mZ5D(o zQgU^h!_zmk@h^9#$i`D8LJoKgXNXSD_4KNWHxvb5WpY~BsE0j%K#`&$umR2tMJ~v7jP#6OcbxxK4}zzZ zN_LB}=m8fPbDhmVc$he&)l86C^FXpvMm6U52A?el&>NURkf=wJ(3(wHH=!kFRFm+Q zT+o{_4#Onq@F%>Ug%f~73F3^giUQ_D(a#D#e`#R<`>#K%Pyg2A(mQjB$-)9`_a5xH zX*(A7&7+&7CXlGv3yQzG19eOup-os#MNH3(@jZ`eVQRv_N)9Zj*vOT}&L(5ms1ga$ zVAE^_lx24!rFcHlk4ld+n~1lMjcH6xtTAc=6d1u3sgu=Wi&c`+)ewA}Xmvws)|G@c zP)^N+QFK`ISYkz$igwke)maOw%ZU0B6Ae{hY-tq(TqU?w;8&nnF-+^MV%$~mj~eN! z?~N&s!2{-NK+Tw73^NT3ND>?|06m*I(1LLx z5x)QC8UEOQs%{-9hg}j`B>nfOYVv7yvQflbXP$=wbh7igQ&{xiiW6ww{ogT}M zwC2GR8#aqnU1~HZkf?w+4edfNq()%Qf&bu5+sFsEt0&+=wp?gTRHNCmDSJx0rohO+ z%!nespM#@fOz*g^Ed~WWE^`dI*s@@29ep6fxUd>V8E8VH)35fVCnH&(#@eekQ?7l zk!?mxg+@U*j*hef))<-W%E^bF+RG=7;u4OSOg;amH3f|ROce~nj+*hv;mT;tE^XaX z?7klfFJE127c*Zx*yev+9{Hc@8Sl#>jc%gWo)P2)Fw6~~KJDd?E{ZM8i0$qY+XXi3 zgfMb52QK#1t_^4#g|g=%NSrOU0{x<|mSlz6wx(TJO!3Lx4f*$-Bstk>V%YBiqn*&Z zmtjZno$6imC)|_)0KW_$Obw$TOF&Q!N>Jmf>%(>g0@FYM(z-M&q6E>YT+B!#sO5gW zL?_}ZU-4vv(Q%0l1q4X}V~B+cd?i7&W)7!M9IO%_l_o=FzP%wp7&Xi7a>0*Gbo^|5A-qC8DMbuj#}<32p#mFS}TD_f)-Gv>Sc{ahnm%TsWG&Y>CGrbjF#+HOGe{Z94O^SslFa#@?1F( zbWV&Vo=F3o(2J0XIG1=gy^nos)X@*n!;Ft03|Ni=cJwje$P)DK6G%@Fu-IEahHY0wgIZ6hIPY7C=Wcg%?=r2u*0~EzwuzgkSA6dAyzI$pq<{ zZjofY*^6=;_7DJ)7G(GRNInQC4grTxz#aW?842*GH09FG3v!j ziewpdp-OrMhHA)TKh|Uj7*PidJ?II`JTdg(FgGNQ5XYcxH?v0kjA~>So;H991{6y8 zaJ&o#tSE8M4YPRZ)*X0!c7Yh>U^_KS8wxFEwytdaw7J0(fSq_lxcO&hl)U5&rhZrQsDqyB2 zCo36JRa!BK)R~M5;M&0KQjgd*Yiy*13$3;$QR1HZ!BM1+O}hH_L0w6a_n6!{%re_=s@rouCu}XMr?z^(4@Q6oL^JflS{HY z@tA2e=u!!pdkreRGpG`oXM3Q0qle$O=g`HIIJ{>tRjo{G3K;#la3k6gGlYZ{Z$n#I?c5!W;7d zZYvYA+c2asCV@awP|=%D_|=&df7orv=a%M@XOeU1Z|sB~1Pl*AkKjAmyXa3T*Dx^m zCeb+9qMdO}p76OwKWjuhfTljgK9`=;6&s~=6Osu#7nU|dYPG2l$B=*okL!|wp;~$$ zMa{ffV31gqcNJ$|)fv?i-l?NMWkMUHPth2OC_QInBF0=wZ=Jw$itt1HOlFXHNP_nt z$5Jo9IkJ3J?P8JRt1})yvTqhM4O$ZP^HhTgYmU(M*$FBfq{7iktx{+~l$jI!r%#{Z zfBl`O?fE}^8k(lGM#nT)o9Q(1z29}Ct+Z2K>5Z_fbk-h!FiI61QtQa-!jp;v6u)>Z z>F2@yTuRwqHE^`}Sd6p9P(DEb%1EjP$Rxl-bkXXkBy+`9MPL@t8&(cju1*R{H9^kJ3J%MTROz8MZ%lR>;^SiP*?*%Q-oB&GNMR{ zQ6hRWp`Gl|US4b_XWI_1HsG$h28P4NI_69`3;ShfsXyah5k4!3tZGz0L#!!R5N zFbf>}lVoXAuxMJ-`j)CAM@;_LFaOHDepuX%hJ$mC-X+|>ZxP?~@J-m(c2LkpQAG|& zupa;*0jM!nYjXHQBl|oqo)tUT%w%Z9NMTL^rv?u*N7A_{V^S~!QIr7{G6spP>Iudk zhgNTxN{TYd#92VXEG&#+r1Im##;w%83fE@J-f8@c)931}mM%*-3$EFb3E+l#HY?EIfT z`Qo{Mg|Gh!8!J2GpV&IIxb{&c-U8w681xgku3D=p=;XAlXX{VAjLxnOXAbN@(s3xV zN_}sr`9fOhI9h4<1GS!n2?&8PD~NNOz+9V11#krN*wV1H7YIEqvx1iQVe?DW=8o-f zv$OF14KiH<(!~5=glxUvNpIb^YjFOha{xB}44cW?bQw5&_^2E``i(WrK6)7XH+~;8 za5Ar8D+h&8iqSNTS6xVMrh(!L*zP86d+N1~;Oa50X-xs6KW{UPM`1_eef`AIuxH)7 z3B54ecxgv5D$Eysc(-9DH+l0nLS)e>Nh=|m2Ftx!o*Ob(r9^=SBnhk`%0vuKpw2KN z^t{5(Hbq`pYT)s16JNfev-;}J<)z_??}yzD*b&6{GX;zOgc^WIi?N}wMt%@s9w;(3 zt!dO0A!5_}3S2>Dg;P0NmwRs1jGj@akCs>r(N+dDP=h=zsDQKrf+7Mm z770y6v{#Dv7_=3jhzMO&ZZNoRd=aDMUlZ6B!Gl_i**JY75g>&Jh6PrxWcC#u@Hb~+ z@4KUmL)#Kc1aB;uOi%hDUpGIou@nx3K~1r`HNvO9be8|=*Pq6ho;Z!7$l{2BwXw%qd4D)x_&M4 zb3z*w5Ii$7I2fsoBSKi%*hD(gj9HR~SUDbrZm6g^VF$~EsBbe*lB!WlCIsf%z+1Ny z4GD_9nEF?5a9JMz38LNjt~tIAjdhtI0GN8SQqdTo)$k+Zv_W5-~(A%HojatxN1@XCQvtpmHEnF6OE&gUtyc5Ml1X1a__A z`1RQYFU_X5A~wpJ&E}RVMsr>0Xv0`6>`I55XaI1t+tA83;nWZ1^jgab-yd-G?Ib2lg0^1G4$b%+WT4?c&2j?tJ6a#MF} zVWbrh31YLL`GzOy3s^qL zgK1CD0MRtkd`l+GSVv^#Cci{ktO~yxlPanOYrF-91}3pF+^A#Ly~M;cQ|cJ{855Um z?7FNn&Z-)x#h2mi;m<&SK}@#rRs$YNV5Q~@s1qB#Dr7$NIFZV0B0!oL=jMdXRa$>z zgqKhC@z1XfQRpuG)ctd|ryB`2QLxAI*`-{sCX>Gy^;D+DYnvlHe)6LJ)BpP?c=5$E z#<@1#p##XyuGpd|zwa$O`A`4J+wIbj{GC@b&5U97j>nv1wp8WAYzB%!jpNv{at!vkS6&t|og!i}t-qy|fx za7+Mi3(49w?8tqws6+=NZu29LLR0#IcZ%i)WHfR^mkE>MMlo7G`?cn^2mb97z2krH z!6}PvTGRTLEgJ9{XqJu8Yz*0SRxEFrWQvXmwx_{^Z;%@c2wI6i!}gpyZlG8tkSeN( zlQJkni89*NBG=ob>@P?-ib{d@?-{yB#sQ&~!D+D@W4Y)9E{sT{VJE7|A;S}S0W8m*Q|>BO^A2D0%n-Bwo4L!A(-e0CQ1&sb8jW9qwYU4P;M`5@QtZ4zmE{b!b*@fTSxiR{q zMduG?wEMQyzhf)M?V|#Vsz%E!O+ay?Mrz@RVK>F{OhaDjwC$Oc{7O#w`ubqw;^+-a zqf1Aj^M`>WkHWy9lRa|81djnnj?hmp%|EV@0D%91#0g1pksPeSR?xu;(D#O9uIhl` z_cKm&GAj|IaQ3CtixJiED6I7YZ$2uU!hA*~0z_n>!YV-x27BH-LN=Qd7`&JdSz;o> z;M!8U;23IwuW{B>8WKlq;gVEjN_Zu5z!c8RG=EvzKpmCd%8 zq2+*mOAWlTlC#K-t(LQmOFjFypS;BNelGvl@7am2gN~^;AjHgKGFS;BMc^P{c%)q& zDL#7aCH(V$@q2RVxfM+g>>|1?WM{6yUF-1||M5HUb3gSav>kc;T)_*QCLU&qsyUjZ zLJBJZpN*r<0HcXUzaIch5NO9&2H=yIX=g5G&_v)GLPt2IDJ{S!q_F^?CT0{c`ap>o z4Q3u@qUCWS)Iz!%6%0B)g}9P57M(7gNHA6hyqT$wUPA&VFz1bm%IY#Sej2yi;p7=y z?Cuo7P^k15QX`a9hz1Wx5hQV7W$_3&Fht~BQ*k|EN7!pUKyOowX*yQm#ZQi#<5aO5rYB=P@FiScoHH)2q>NgQ}2bz z^xpO@bGv<=O+jfi{Rs5J@yN`50E)-qkijh;LUQKwSDj)W$K( zwbNkc7`&X}f+9W2*~fueakv8_B(MUJed2<8$yDRuttMDE!bf9EA}paU1|f%;NR<3X z>_{C#e?rm%7*vsX;;Ic7$ueO}@1qzkJhBY1fLayq5i>hL)zDX1o%UVE)CQ57nMMYC zYjzLxj%yOYk$&ldeb%CteWnjv7rMi^XLK2+P&^JJG-!>^K0*Z_`uWt?$4|&-L-5-Kk!!w9GUTf55eUL=A2nKrDa}CRn2(? zofwVGg(67+M|}f!g`St@-!Zo~y}e9p3K;#xn&HXmDS)FC*370wG5?U6dl6o!$NF%^!ZO2}Iq6eE>}k2Qrl9kL zFKjHWV!000#72ya*Rb#gN8$h?l{sGKB^p*q1ey?X%?w8GX}N(47h0KYKvYIW5}b!r zSqoi79Q;%O4JpC)M#HGYMa(L`-O30#qG(cbm&(CXEn+K7#8~>(0BOVFkvnH`{+j2r zBabG4&8vMocl;!O{aKHVr}pBX{K6Y#&(aJM=RzaHptKXv1P1k_MC)%4aNW~>^*5j7 zfBEp2aN(s(&;vIJRAHCa*@ED$KmRZudiPy8xOWb#h2l$B73X^ids%{&Q9=!-)DMxE(tv>3<}Yb zwFGEj6HD*|3gW^vw3p^#RL|(L6hJIhvY&aXg(N&jF@?c=MB5zbA!ww6?JZ)42%m@L zgG;K`pW#8IW z%D#@6;RHY&1ps6?47_j*ylr*|S1&+u7wITlVb3J_Uj;1U+V*{`P2{u5cE=st1orytYrO+4$5t)ykV2FBxzH{xq)e<^SjR^&9W}SIf>N7mC%51C|d3X*4;o9GVTGJ|j{h zNfen!=+8s|K^gKJ;_f5B>?-Z{hQM^S6E$M{GTk6#n9=X>o&q z$H2W0Tud`<*wA1jA{A#oj|sufh{79lZ(c2Uc?*iIhCxppZ6^2tv*|5nT2sL2uMS88 z06g-D>4~GTyAOvi`i0}WvW4vOYT8K$3r??kO=b(#886Z#oiAXiGiYMyOX7QJQ`Wp| z^twdWX(GR{0)GVH5l{oOsod{R>(6$>jLU2C8wOX5LRhLvocV;Aj5nY#4oHj;M zcwCD-d0nJc&Dj^#LOd3G#n%qe<6|di1C1dFjisK)gr<35sF=mEj?ZE`dq4#sV$ppY zRrG6RUo;-uguF3UDP>Z|Ue)ZCtOS_G_*Xr?-D(Cy0D@Do6Y|Y_n|ORz*Irri7;fb> zRmrvneBqU4UOj!)cD8fe_Qr#__2wnsyKkmkxucPHc`^*^!-A(*hxWxM&hWqf#*_H! z(-&y7^FW%=UtPg$Gqu~^atnUyC*FuVZ`sCXl2|eFc(rHP%mlfTJzpKdXz3h)6|#PS zYJf&{bc_ePz)##LxVh6nRu~cjsfZau$5rYJ%?Z4P2--4g&5>|H8AypZP~~1^fU{sO ztySKhlqWubIt;P4g#jZU2A9GB2&t78(P1!13D=J!&~O1ra%IzKMC?T)Mo5YTz$bE= z;DoS1nli7^F_ScdQ576yj5)rvkT9o}5fmiI*3yLRIKi$I=p-!PA5b&ytQ)Kw%WoAb zRJ2T3!*$+9wd*eYf7Qqg6EjmlJ!mS-DpK0Cz72q*BS%c|=omx-fMb&n^DrYG0FD4W zb`18&CW?LvZslMyzilgGBdXo?Ip|qEy6%8&iCRX#|l#! zuUnC49^+F=(KW4PWs@c>6EnshI#I?R!YLTSZfhN-Rm^BD9S6rRC{iW10p(CkN_O!$ z#5Xh!Rd!2_CSMVaEIvL$TUI5?mMOClnJRn8n2Z4vgz(tJX?+3oMuw#2tUcQ# zk``?^g1HV%Qb5Gz%55Vn<}SQ??bfU3R_?NXcF)#k@7<%UxV`X2>eN$*1uZk0B?htB zpA&`ZeBR6U^5WVZ`Fj7RPd#^j`y2M3{`8HHbua(+qYwP$4W}Q4Z9le02cxyCg_Fys z);H+dNI91on?e{At}vRJnKK&-?3}O|8qQ5UjHWdOjJ_dj7GO9D94&8GzXN~xu3f{$ z?Z{S7VXb`J@)G#SBhV8^K^z9+#1#OrcnET36K-|@+j{^!QAu*AK+&HQ$*YLE-4A$U z%1juojIHLvs{mAtVkHA)>`$ce-)l)*B|vojVm#K{RKGq>pAb~8K_x|&6911D=qe#v zwG4W_?hP8ou1MFRQnWy1K@I6C$6?jPrS{LY)w$+-JbpHeU%LFe18`##*t4yL_H2%| zl^$#a%Jv-~4A;(H#y|UC{s0HwaSwj{NAI(L_z%38ojGz3)ck1Cg7iGTTPpbERKX zJVNzVO`>?cvWN@=IS_{ZE#Saj;{AIP034^tX{4fuGpFTAC0yHTz z(IOZm&}dXea~K;DjhXAQ`K_!DMh1?Qm>@y|g5>MYvB{_xJe@%z^c_kHUH z_w@?Q=7xp<+DwHIU|7J0-lD=l5Ir@*cL{_uqf=?5LO(L>SkHCIn|s4ts+x}SzMD^< zT^a$|b`-~sO$0JdYg*I#Yg!L1U;FBBt#8~UP4}a!?cD@qbaoA|{^sNS-8b*X?lwv)I2T)iC`YU2hGl6jDOXB~zQp{DFsvMhq8TTa=W+s9Iu4ZrIkFPQkqoJDi4b|A z1`o_P9J_lKk+f6z^(aiIn0gP*a%S6__4fGn>+pvKM-S`L{a<)x^zwz@>YX|J9?Oau zBn8lH0L?aRWz|L(ma)~lopWtMMga10^E#0djC#Uw{5!|Tlx7&_L@zUBo|V~Tc|6Kv zs~|EZHu^ww&RIIs0@^cVo&l}{G!r0Cnw#r``!m%i*RHJIHSA~qWc}5Z?LN;FM$IF| zLq>!Z0;7=P;TjH19Sme%K(;Qf9vCFp+nDdZx!qk)UQYB=4}9qOtH;Nm^3S;i8t;Yv zJuv)RpILpiUF6R>mjK{EAHTdjP|S`B98!_(;v6B87~!DEOl?gB&oq-{d3e|UsU^U) zrhw5m2BV1gn@6k2UORfkMQ@sFP=tdTahM3@EoNZ?+Wgd~f?8-xN;LVVctR#f1Ua{PK*oN86C zD8l2(PA$=_N`;cK33J6o=GZB*TJ1&Z*HnZZL}FIOlc>sU&|jk1nJPw1BD3Ycek)(VHQtcyn@jHXl|cJcfNzomz%io?;1{ z|M(^x*w%)Vum?1H{^rTc__dEbjW7MTuVP~`1aH^}qz(8p%RsM>+kg7)_=%r-Gyd+~ zi?SdN1|laggo8>^`So~36)C~%PDlK_oM2Dc_&}Heg^W|aqM&qqjw4QE_4a1mWLY^k zwAutw852q(fKr}gUrU~2oGNPV_==7F8B2K?0XVYE&@G>*h841=k%=v<)uy5KC>7S; za2!2a1tD?bnr5wet($bEQI1x=_v+e}8c51IriyZeSzYsWfVLtrm7PrKlx-=3U6eZW zrBS!h`C@8%{q4C<{+ViJKb+fIYq{n^dwHw4>zYsAy_L)NZxz@(^42X3NfGV|vQ~H) zfo|%!w+-xQ5$!ZwbG-~$$$+aFur>llxz|*LsS_l0xLlw+fc@}5y}vUV{@Z?|wc2@*fI^4PktjNkruPvG9a_aF|uWjA(; zVlGM0Q^P1Efz|uAswb!!PNV9jY6#2N7`ryBdu<0-t(l&29n~6WgenxJdhM9b3Rrle zr1l!LI4&Buo)h!J@@MsRxwOHCycR?$KT{nzV(l+wi|V4)f&p+6Mq_4Vu0#evT_ZLh zJ~UY(FtVv?%|F}8JFEck@?Gaw=01P%>&a|qy%-crIvgfQ9MG8sRyUDfTE^Ce4D*K? za4EonL3Pa5nK*CtX14xMF##kih~5Yoif0CQa=b93nI-G=5}d$9G=6^vd! z4{U9~?c4z@ZG%zVXk)PF(hC=kEDW~qylLO|qX3@!3of)1XS*@G(Ce(MKHrk;A;^%oPDj(t!12?nF2=BngT}O@P^nTXmo^n#LNyK4SS@$ zo3LZ?VUIil{m^5PVDu>bF@X3T0DmufCp-$^k(zJPwEkij?d+^?P?zCk2oY9H35NVp z-|r*W0$x(naeQb!HDMwKwTi2+85vE0FJX!_#`kp`FCP~mlLSZ-ffFKE4V>ek&EdFn zaFP0<oX`w>4?e9b5v21@y`aS}5?Azxhu5#1Gwz_uR9@ZH>gdv2=9~&e;~45i47!klaDL zu356{CRr6TsQOUhGeuCaZi-lf8XSX6oH$0nr0$;;R#R%>48FvE##1g%^qw`8rc7HY z!J?{HtIaK=lXvhN5?bvuPN)%SwM00ea%Z2oPHo&t`r7ogb`7&mN2`HPp`jJjl3h?^ zHjS^D`oY)nQ`FP>Ca_#oUo&s!0eCH8Fi}Fq*%UDU4g`}9f7l$B!1f+A1X#G%FZN#= z;9aXDymL#jABI+DOhzUgsj*GN8@JJJUm$Lo0roeD*%W9-KaY_I`U)(MjHmms7uG2+ zZvtz1@HP?w28#UvzUSpF*_=rRzjAO-d*wES6x3-=Yg&Kp%bGWI&bgQL(`@3$HQ@}B zW&-nAJN~r&)*milc6$dud&fK-LyD+?Wt?nj08oZe)TyxL8g3RXA%z?>e`>^UvNqE* zGmU=Lg#m>|Rucf1jzb}!p!zX87YbAov^a!<1;_0;z%v;SFea)GdL%?IG5eO`!Wa5JTw7Dy>&AnV-jjx7=e7-oBH!?VYu`xdu1qXL0KM4S3=C132}}d0RVi#`N4W z(QW~)uFKSRtS)aI9)9*&`0s z!;Fa)6J9ORuEh~x!XQ}p!M0^g5n)XVN2^?UuD=v2I*45dWEm%LuGe~S&`MO{kL$cj zpv8i5;6?%TMvA7;Zd+>N{-vF0tZ(4=dmDK9m5XTYoB_Hm`Xa~5$~FAP?|dE2cH7Qw zDYD@RzxvT<@%$5KvDs6|&b^>z(EbQJ7TdV*O}E=m{M1|Uy?5-uO>-$s4JM^CIO_4- zW9qa`PW!H(E!D_jC9qK$Px874))`e+v#ToIr^*J*UiYg#{uO;aLRa0>r}kqVALz<& zydnUNLA(jStP=QP?fe*CpXu{D?{R!H;>3Ao?RCw@pF0G+1qPK_{c^YKuB%#;thMHp z*D;S!1Mhe}eo2qOEV4kVB1K37>GTHn9bEafjdUp8?Poo{Yc1o$Tgux<9$h1uc}VKO zon7jE^Tr2v5O*yS``bX*Rrh9dyP`9xPy$OmQVRf4$@rB3Rt29$ z7!x;c^nCO?ta})du#!yf1V~DDOxgcwFs-f`QYq4s(< zdg(l}w=IIM2}uC&OEyr1#%d?QYLmFCcO*?{;n)_2K@pT?b&`Mi--ZCrsSlu9(r#L7 zX`X`;0ZS5tOX-LGCR3(F1Hyv3x@@+UVb|Uzyy4yV;J&vX!b7(&+AWJIJEB<4iE}q^ z$EiD(aPrP2d}T))uO5E|o7Z|kq0nZEte@XS4u0S(Uwr!2XF4zc4$Rj6Qu{&DT2I(U zv$*!Mt#5irBWX699igA~mM7+=;apNQ;nvnKom%<5!*}P?{pYl%fYCPzB)b0ZNASn6 zh5ooN<@C$?S5ln?6wR!C&djy~zeg2DX97aK75zRkA9Xs$ycjHVGD2;&^99Jj}srm?PvHs;5aHrEr|@IcF{lVnhn z&DWl)YKiI^{PG79H~0f@e62X*)&}9=-Bk|N(HkEIajDJ@75XdA}HmT`O-gFDokYi(rM zzdXcyx4hj|80JJw21*Ex2Rg8K?t%WqK6ATUL@L4XVbfrJg%weInE+@C&~d;G9pJ_` z?14q_)62A9c?G!KQ-Wr>VP-AIU0oJGLd#Y!%(t&j&&IT-^(|0Gj>xeS%XZ7YZOgaa zzWZN2`|)R%GU#4wx0~3u4O=Hp{x(-~6-IODjF5kR70p||MkD4^6>L{=ZRu{L`gPddZ&Mq}u2U^bZq`Z+xenF538 z0YJduXh@tvi8M*hbQfE%Zu~iedQSiQzdgj^4}aM;lCvap%ku^VK(h^uMzmL6#$feU zw01O2ngmBRRIF?`T&))qSd9uDPMHN(Qs#-?5NxO6yj4C^26zPGzZj6`fG=RK)xhkY zIgAp4XQ}v)?044;0eYL8@E2CNaKnxGt{;38{_fv@0Jn97Eznfe)El-Nu%iRscS{HF zx#b`}a{rC|*spvACqDipdKWGb+qT1)LKAoI>eY?^slBIh^6>D;-yb3OV~oZufJV^T=GU%A698zI07t~2@NB!E%HaHt0) zAtaSB-O>=3ZlwW?L`|GV&O?BCJG|MLI%EUun93*@tqdv67jTd=vj$=>pd za64vzy-Sd-A^hcQuxlHZ?%m6u{U0B~PrvUL+`p8fLkj^HLaX6bl|@wPKV+Pw)!6GH zF|Uu(ltz@)*8yo>Pxg+<0oCi4y$(S1r>(L!No0D>@7QbK9_v#}j?d{>B6i*TFAri3 zVX`r6X$#sdv zq&RX!_T!!YG;pT1H1kI?EDjEb`CGYrhndgu{Igg1pFZ?B-uKVH8%s+as0TLvL}IK( zdDa9|_Vs!Tt2I@=Tt6)gt_lwng!zzYMqj3rDUh0BHX%984_2u)&};2G0s81{4M8n+>G<7Qki$$a7*eFytek$PI;1H#UH)D`?zsFMjSHy%|6HzMF8M z>yQ_~)g0U!0eMbSugr4~5kHt zIdqzhqoAhZ- zYYG@m>)XDDMBts%`khVrYPwS^C^ zXPWRX!kBqNLy&R2vS!#EnI7yC+Y^Wb&`4-EZg1m<-n76j&93nA=ZuZff>0tkZhxk+Py&dm+%YM6SSI4?8q}m%fLFs0Ufz8cI=CoS; zkfma;lsH)p3_(qbR=XHv(#Qv;T&%=JSO;F}2d36z*&hQky{?xeYFN zXI2BVIEn9R$Wf^VvM@7fbR4kS+nqKm-?@7~GdcAXwr?oz*iyVDBjyL78!6DB@dx)B zzJIUjJqt7ua!Y{>V8Q6i75JB|D|t($uLo>kK+A}24aHlwn|=DS$g}IPzK1m&L_Ow> zc++KVoSXti)0)<|1YjhG@4Aaek1iXI9v6OP<&t1M9{p_vQm=i9{*>Iz0ubzA! zpE!L#zqixGwziC!HH^z`jX7SjfmmCA%b&}5r8k4Y8{q?ZVVDu0_F?C%mweP0yZ?mf+}xYNM+^z zJ$UufojCX3mQnNufO>dI+n28N-?_S(J%0GZ_WaQg@Gosdee~pE`{17A9*qZp27s-L zatm(3r30|7Gd=&-!?2^%JIb`CfYG$Rb1E$JJMkG6+0`@SD3Wsn*;EohGuYN9d~Rqo z0dY1FIa-1!sx^mS)+OK*$ia1Rz-s`Sa*IqF;1XJr5)4sdpomd~l~5`O+$|ykH87!U zUvvUFs_0BCKO-jSGMrdH$3N5BzX>K6R|Qyrww?il++dz?3UdhXPA74=d3y&--*+q8 zduA~I=`KF^@#pQ@<#l?^gHvNKftLol3mx2X-wpWwAG{ks_qILQ-%Ze#a5z{qaV))~ zN=B5DR!^$4n%6QX4}8`9lz@tUW_+1z!XmAnr6G6|orE+xYx>{uxl$v^%xa@#j9UdOnm-n4qNjvs7(Xo(e8Wr=Zby9L{e%eGHAPJGim1=3PUTgDOY|c?iSV--W$@ zFL3W7&`J#JCRzl?5ju$sf!Y_w#$pgqV5-JK=?7-$IN(r6`S1?vwIT3wFKm`bIB&eQ zpW7_}{$P4irZug<=Jn{Kh7TMi?mlcdO6#~k_}EvM zaoesgb{yy;B~VPn*MgiPrA>Qzc?0LpujAUK0k+oq91eykhNCb8Y{lZ&0x8)=R_h%~u&6c-iyyiIl462uXj|jo z3pIK*XaW{SYz@5SS5{$zL5x)OV9Vv+Y^~c(H~*ribMD~2=Po_}>a$1_MUfLp3W$Rh zYQr-t@SD5Ir7oBP$imFA@>sN5TVt{8;7C|j*l?q7 zrUl@0qKF1Zd4VKJZTn4o?G5j`5AXlJ1GsfZ1Br)i6vmC*uvr*JJ_N5g2$W{tf~+qa z7`8j$z>W?N+`ZQ>|G^@QK?Vqw&6aF!4sSIy_XDS90IdI|u~h*0-~+z=@54v;aI^|r zZo|;N1xGMV=bqLSFq+nPXccTI#4N6$0#iU-7^95(%ts!rmPPHeLC4;{^{7!PRbI+U z@>MOa95XOj0|Bf`&lqo<4Fpn0OH+Zg5>fzh0&!wvfsfRo2(7Z$#%?rmmmS|iWkBR; zCE{{j&{qv~u;^;Yy4tSv%h9@DjTwZrqM&RIVJjoE8)u9(l2PNm&=UOgL;J9I=L|SM z&!>LdEUYD{ zmDi<}G_G>eTH|6>*E}X;f#U}p16wvB(5!y1#6dNFHUbbrAX3ucSjNtY2vRhrH?Qv? zpa_qFM~*?(ccOEum)t(e?aondv$=wWCwDf12X{~(TriOY+=yNiNw}SbIO=jkhswjN z?pp>&T54+EsJTIAMcn&#`r_-WPG0Vjg*PC9E7W!kyzM&tVRON_b;@{~*0lcG7HLNT zf8=hHV@E#YmKwXV7ZPl_lmp)%bfw#MNZS}@hA%yS9%t^`f%^{3piN-NF~9yZB1a-6xr5@FI>&+V=rysBftF=&VS)Wj9xhp z4p+o!4sW503v_c8xCW4PfV7KEz#s+BQ~5M#XfJ?!_h9MP-MIh0-Taw{4)Wduv)I19 zg`|~mI0A~`aS0)q%7jeI-0K8~#LrYtX zs7>8x^m?Xp+2%lE4^@~kD*)#R1uTmIlJ}8i<$y*f^rD0H0X8pOGjkG-U|s}Q@{yu@ z`$63Kz4zD;{=^;j;0|*QGwT-$GuY-(u~iTS!Gsc;BLdz5nF-f3ASncm#9`k;6Hj*L z0a>Mp&@~d~n;Wxi$@XlkKlfJw7@c?&Jo*?6F?sDMERR|V9tNaJ`nGBC(zK?4(X_sU z>fE-0+mrQ{97eM~L4t1LRkGlM+Drg=m?^v&iUKHxFtku11`feurCRkgfF$J#Xu)7` z!skfF@#`f$m=^7b5()m=E;Y8>K&NdGA-p#fJ_l?FAPbVYv75FFi)97(R3a-Fz{G`4 zz#|$YS=j*uAzkpDDWy)PI%cTEg|z~XJb+BW2FwyDQZ@Qam}L&G~bNfZlXFrmJ%D_|+j z=Eb9xkR}30VzCLvmkhM;a;l_dCr|+#jO-YT%@GBLlt2zMF{8u}PBQ~V4FLr+t%P7^ zG)4z%s)nnAkr-8Ca%ypPrI9i0OQXa}C<>TZq5Ky-ZBfC>a>D>I2+ z=`kOc#z5aGU7bik(~$c@Kv@I}gb)a5L2ag1Y1)hii}2|f<|+*@YaU&tIr{ac=yjA) zW8N?YbtCoa@g;jrYwWKWdkb2?x6nvTVn&-91VXqpaY?7NubkGmdwuXYlD$6(t~5a# zWILBP`NkEmcdUAAWVwhpVtX67cMhC&uyu%KW)x8eqZ+8F!R@S>bJ!$3&zut(0n#(F zBZfU)NoG>5EZmLYpx|7h*tvADxAYHR?5=J^o;U$6J+jp5 z4VJgJXPS$nepaB-pfw^Y;$hk4HEwKV*vx^%#(7|Iy<%MVEXJ$TsuZ)(c9{i0!4p;} z;1pIka717j*S1|vU`J}m3y+VS8R6p}c^Y5;^w+WS(u>&IyaGS+q2a^;s(C;r#0A)j zj=`x-VMQL?klJ0KI|sC8!nEbu6XK?Tx590fOw5f?rxZsINATS^*-cEI$D<#B&iwdq3{>-t zfxo(7B7}+|F>>P~^Uc1EhNRC-m}wZeCY2px)!de&*K!(10?q-FhCfY!jST1!C=?iF zu))Y!6ht!twsnBTo#d+<8P1*BME=|w(3$~98-~?&V53jlelu>pcb~oE!6iPpGZBO0 za^JW*F!VBF7#fkQ;F<$`!(r!40=IPqC`J%XBpD9UtUt{2gadI& z|F7a(a+KH0+Gusqwfyht{bX8Gz-U_EG0j6*sE(^Ek`41d51aFX@FWsvNN747abs24 zo-w+F=7a2NQd?xG+y9Q0Xp9LAlebo#NJbk!!vwoIO^9ZbNK%2u5f)uy5NGfO;e4R@ z26l~&NjQAX%!WoZ zvc2*F(sEW7Njl~9(2VN^@WK}Gu~&h$frpt7>@3epK}DLG8O>5?Id{PlC$sKD>^GG7SS>ZFJKeO#mf39bckhh5OsScgNPtYXQ6OeaBQw*bt7z4 z)b`4>yza<-9VN>ma25%FG?>IosEp->(2?$S#dFj8_PR|Q4AU@?SAlRil>lrH)kg5I&OV)N81_R<$_!^6Mu4tvwy z4z@K3F>+<3L?TFB74{Z}Hsj8gwYapBp-$8=_sB?xD$M)P#$;;fWjQP#5LTEnqD+OR zM!cbaVfEw&H%foq3@FKzs3HFXVmqYXc{L1JGGGf~}5W zv&U?COY)5jX)A@AR#QhBlwp`>guS+dsHAy{Fo`3wA_xw=H;g=(<%D`ervC zvjZ%_x-6=`cb_nBF1>9^-ya4>YRv)!nFp>80Uz~E93wTAHMNV4Y zAAp={cG9>y zj5vttxI+xmuef212#O0VB-5HWo&tvUh#E9u1O*ha>vP9~J}mIV1JwqEb7P63mBSr? z^kik0Q%c-7b&34ZLLSXaifHLYK(WpfyLVd0W7P#ArO zXtjvi@ngq+2WEUt%G-q3Qr*<4{$05~j*c~K*Cbp*<@*_XbWQ8qx*h|U-wAflfs0MB z*Vt?pn(ifK5nw}vP@^>y!4s z>U;0R!*}k&4KodHd0=SDLd8nU%*wmcDh5sj!b%}LD>*r9jTz10M1m^IdlbVAmi37& z2l583Xn;yF#T#`rxHua2uFTBuynsD>xAMeBj~sa=-`um}k6(Pi$ACk(UclmnW~A4YUD8Rs#-*wuyeH1=pm$`DUf@x z$c;r|NF31a0Nu9Pizj4(J5LTTOrug1azxdL86PhjL>0}o^hFxoS1Y~*<9^d|CQ1~`E^F)a#+V-8wj+VbDr zubA=JF$j(r@Ms+9O+lh*O#!26ecRTD59`$r9p98@qbC^(pXDjU8KgmoP_xX|U*0r- z&mvm0DI|6ZR>p@1U}RFydwnkY*vOZR_z1^X%Y;L*#<(7fZ^3m0d7p|TB^wREr2^Av z@M5L4utN}+*%*t6TO=_v8AqRDY|ay@KeP}qJ+W6WeSXIKsk-fvMXwza3IWXMNMs7E z41-4B!gwFBQdAY74l^Q;(IOf@d=lS=fhMeEP-P!twQ#x#cWyOWZZuCJ#gICnl?1j> z^xd8?C$|Vll_aIopxF@|f_SB`_`^#c>sy33LPRKmfn_35nx`fzfCsq|CYYtG_~c|xYPe|S zbyW9hihQi`?wu2O---AefN7cq1Z9t;1YCw1Fn$S z#y|(#y`gI&0tgB~7E*FY3s^`D=aeWyU{AOek3F(TiHx}GobBruV3~+r0O)&IVZdAi zm`{yoG|&MB$ekc#0Y5x-PVYXvf0`UKt!e#rs3RsgaWnu%IBYn2SReS%@#GYcX4eMI z^Os*<95ira;^ZbKE|pG8EX!aRpef!Sym=0L=2JkGg*haG%JvZ`odSa=j)p#>WMK!H zS{!FY$r=g|6auspKwQDEoZG@L{hKe?mwxMULw1>H&jH;Aa&;uu^8sw{gr2Ax^we`(B!-LxeLf8l{GXzqKqHOxlO zZjN^I#ex2e4Qz2w??Cay==i^Vptv4{I5$7qn7drOn6_HW)-RS!t%<~e&MaTsV79sm z>|X#Gh}}w&38+n5)5) zHroPnfnB}Q!z*7s&thxK(CNUdVYJmR(gxQ7+w|E=_RSvV-1bA@Z9fF}q2S$7{X915 zHU*BRH3f{O_3cvxj^n{%?)(4sP%$Po>O>I1FH#7N*M>MCfx*EeS3~ZJLIoBcRz-~{5FCTz z&ebuXZ5FcRDo>>{hhC@d zHef#5qZiRfixq1O6Ue64FYLMjb{$@{8Xupe0*>MRmU6#};1vw5tIMfOtz*0nOGz6e zI0se0tC_J-D-`q|5q}d&A-T(CdIS451&baV-!qRr3V+*iFdM-{`^Y6}6h!J7zFG>f z?F=1f@InlHFqy3r*NhW4-_pOVo`N_|!YLxPF5W{60&Pch6Pk+_T8>&YoEDu#-0bc9 z<-}1Cho|W=)0)fVh^026Lts58<`Yzwm}RmoE62jXf|hzuD^*AaJb@$uh6SzB zNOAiOb8PIt!KC*RlFv0c`dLc=F5VaruwFh0L7F54G(Z->;k(Ayzz2`Ry|4*8_F3rb zemAGU(X^(3(X_r@+KtZq> zhDIqn3v7(a8OTa;JIj^VI2l=5;!A}=(?AYswP{J;U?wb@DbZ*Hqfy+=GXgr1|52@g zj1gKfz71n;N+gU}Ffas6IN_ay_|Ye#yHJaJw@H93A+gXUQhKcS4QJK`PhB%OA$N3G z>f)^tNiWrbs_Biaj;xWj4^r}hY@AaTt1#fy2Jm~YdairGJL7EAaBvoAB$zm^R&RVT zrcsxr4CdwgTEzSJIJ|idHuMBk%E;N^Rt=ND?lHLdI}Txrr~p)r8V_)^fns2-S3$dB zPpSsx#2Jq)GzBRJ2uU&1fVuf#iBMs5i~tj_i&z_r5?O=zf`hrIpyhy_4Z~a#CWRrz zwPFWV9z!LNQ$OBia$MPGmB&=V31l5GEidpYjh5rzpRoAiq@lT$D5?emIRG<>foY-X zPzqJ!wTpC`lJ@Nh;&W`V9-u_q`d+!eH z>^9&`Q79pdo|5GUth^Vhgx0Z%QAx=m&4FkKk`HDG+`6lcyMFRPp7=xq>o1-`zP16I z?T94}1=!H6*rsONJiS6q)qA5k_>mpRuJ&%)yt46t4vLGe)wnwMW9OgWbxHiDT3T^e6QEv-zw11_k5#Uv5$ z!|YDu6t39@=C>0Y>myt|e#XxK?i0v{Lzo`{MS;%30^aqv-iaT4?=5`8-i~b)#JLgB z&n3vveCQ{=5xECPN{kd3`4HqH2@Imx8i73zq^Uui$Ma9E?&5jpacNKP-GmV-+N^~A|AqQ3huZ0}>hBag<1l`Nxa zO=}7mP3zmO=C;qB&NoJf@iNNE^Hdkt}8$CqT!Ww!M-_%*%mRE1b_tu z9chkM3ByV)xmv`$6reK-$1mq3?BLXhTxlZ@Tpb#|dKGy5l43mrAcEa9i}(;!(*7Zg_cwD3KT^|PzO0U zEW$&5xM>bk_7k*>AWxsa&Z~UkJEsaj&9yPl=&-|e* z*EugbW3-k!5lI>r=)zu@kLXu7O*eD*Ik92J_SV~~N0ZRq=(wENQV;}yqJ@tE!6WuP*nPswLH(IyeYK!lFBjye)q0wo= z=Z38nL)Hhhh%HBHB~a#12*Z1#n283qlNx;=mTeKEO<39{nlnIWzKO+yyV*Lp)7m@d z*cM{>3(vrBY+$guiPK+s79aWWES8!N;$8Re!Oo^(c_>hZ_P5>>R=p+15`V*W+H}G? zNw{}52+YnVc;CAZ+3qg*?Bi{oI&l_*tr09QqPAT`9jMS?MyG@%DUdd1O>E8z9x!LV zP>j$YzP$YPS8k&4i%XsRzr1whnKS2KIIS+_GDP|o<6YQp!+In5wJqem9BDI+JbTtz z|ERAA)u19a!@-v_fH;K@%SfXMG`p~Dkn`f#&fEFVy@bIl7sKF6J!Y5YdHch+*^m9m zow)CYS!;^m(g?VkG3pdUm*~xqDKS#o$Qv^Syusjt+^?4@H-~^W#9AH0%NK@t_79)K zg{Mv#T4I>(fF_oTTbbG3{+hJXFYf(ex%|Sv_$x(Wt6>db{Q2KUXV@CLfR)$QMZOMcz(XIj&m0!GvNHUf8<(>!$cyORld|P z6GMpbOcGk7Wo$NRg$S~46KKyE)~*1ikY@Og-GFDWuLW9D)&6tEaf znq5mdAF$d6D{l6!7GuUv1NgBU1t+dLdu79Lan0k`o;7^@46$R@ur%wquWLvo$gxsK zw49pIAVHC3R5h;%vNbih)ZkzgnhAkc5(v?w0@xhE)^hTdRmGJ)&{txs5A2#1ykWbu zckC22+?Z{nA#bFPH%u&vapdGxE9ID}n1qAE63(HF>0nmwCZnEzQuzl^SY?M<2?J?t zDueV(Chg8O4(>_=?y)S)%12c}W)?VVJ}%}O&rdl5bvAaVDoq?+?RmrF1e3WZm5(&X zG^hy)-&mMvx`)ir7NjM5?%+ToAy`%S0ZeI16K;o)IyV01EdTvQ-Lo` zZ3-BD`&Lb2a`-3&hk)J^wB6I9rPgz>!bQ6-5Ez2&8%;rLN}%}r8rzK=CjmwlMrq21;gtOKB}pK7C1+DZgEZfH*v<4?hFt|C{(v%mH!`}BcX?%BJ5ckl1m z`Y5o>HF_CM+&8N?5Yc?8O&{Z=sGY(Ji@k}EKYXx_2X^0v$M0OS-}!@AaQcs)#n$pF zi$duWAqyW4m>LPOBvq59BU?=s=X}u{O3@#7vaP|r`PSBLow=F!h{?a%IQ#O)wk>rx z`)IA>!g2=WGzDCRhyHwmWHg*P-)L)xN2 zyj}R(3NC#7>)d$p4A5=@qYN%-;J}-1#(V$4BY4}5DH76_M}})TIV=o~0Q^~@z)*=n zVaOElF$PB@yw)HyUg~+ki0%xbiMP*wZkgvk^EG7W&Kq{`H8ZtDIcz1#^ZRby_pwdI z^09Y4RQ%O`uTXjs@#jB*c9!&S&*0vcQQqEH%)w;Qj7?CpOnAX^eKw~&b*Xj3)31IW z7an;OgJY#Z#7gDJyCk1=&?P?P9xiOM2KGz!jS{32CS zz3PO-FszzE8y^GeplSgYkuk}f6A4Z-(WF7^sU+9oGZ2)FCsU67982&=b<*ImM4w8- zYmGxplS+fUwV$m*+M=3#VD zk|q>YhWOdU6-6;!bG~hF%VXf>=waw1$H3bFz|9tLqpKp=60<@T35BweL05;sP(>1{ zrT4PpxJdnQ$+0J6*z?G8CR3pYC_vd~6jzGHNA z@P$wN>-~fMe*YJ@digDTZtMK6`N177ZOr+sF!df@y#a*go_TLbD_WsBiX8jcPO_qh zkB10hz-qytN((?0N;7HB5=f29=eO|6Z+!`amrp~AA)KVh`vYu$@J@T_n2EfM1Fj7V8!mzBDlf9vskLa2UmltvadO5g000$Yccb}l3+E>4{VrPHlQ|w<{ zhIM9%Mw{s6Xf1WlHMY%sW>fLsUc$$>{_5A?a8wSz7cI25-n!zGztb!Djx8qhnbJ|s zC1Okg^9Aoz#XCS-Z%XmWB%BP#dkejl8f` zrmY-w&U}o|YNjv%n`iszUFgfMopX>Rq?MKfWi2gxBMKB55`2xjbw%L~&OsA$w#b47 zsbg1Q014qzHBCX+O_|KjAqN0&hG^s$9111kI6;6tcCR)V)Xa1&vaf+!5q*$aqFBW< zCShu09aqURDG>v&A@(y@U{?qDft!eCBgGfaDNk=0*E2(*C44Zpb`k@w7%VM(T{-_eh6G`flGkb zLY7I}gsG>I-G*SKz~upOeqh+$i2;ofcvVB7ZAKtInvzU}_?78@C>5gthG!zc%LCwI z-!RI7c0y|)_oThlPUXdcLw58qreM*uru9v(!yo=a`_z-iZv5o0z4~|a!PfVB!3~_7 zOPnO4{Q+!q1gNK^Vy@jFlQiH06uKo~cD}`(yXUZL-;%xizMXj2T|2Cmimhhm%xF@R zrdE-ss4N&QgiZw0#nQXTqTk_yBd%;@_{dYsc^B9 zjMg1S>k40JP(d-Y8WM@d6jakM!YD!usi;9NmpD+XP>hfx8i#?97>r>MQ;_{lK+gm1 zT{E)phaW-;vrE7IheR{s;KC(*_46;`KYi+U{EdfqpdqPkc|bkbbg}2Ny57C)4LIRz z8G$7_M)PKGyr!l@4>ZJK-@LPT-J9~By=`83a3?Nbx)tYEdbWIZi_0qmT-zLhO(&a| zHno3#Rr8fq z20j83wL@Kf?#fHYbj&KK5HZ%wu}cyUOQ0wGz)1j1N|r(ix(I5vQFQ=@QPmd(iNdPq zx(;_L{Q)XTOo-^MvhJ*k7^|o`I*tM#Q+zO%;#dg3ExpFasYEThbIleix`)#0j}u@FzcP$T8MtK#fpHA3*rcV?yVrNhJsPWk z-hB)_(LCpOb@wl~n4fP7S9;2s*@mGQk{1SsudKm-sHNy2+@RFPE?PR4YqA6{Ujyzc z;0m>l1Gg6Qpyq=q}B2VQIl1+}Yr+*@T_MnK(z+cAQ!4a%t}ZmUhqE zo3^Le*LLW8LE(evBIA(A>MM1vc__PI}5s2j>>i zyx}$+_@4XOxp4=~Cm5|Oib3c+6b3k2!jRC*>!1yiRwjrtq}&GfWGS%)#&(J2bgraU z(!mdb{=g_L!TcQu%~l6ofBq_l7tb5|1HO9dB0l<&C-C;$zZ=_k&Y_bKLr<2b-eoTl zQqiic64nhOC4}OR9Toue3UECm5&+J??X3j6_Rpc%JBN+JxRSxHtqr-dI^fF22-=p_&6Q3@=~i zndfKlm7AQsao-#knhuMt(98A`VzWc3ql?gB5jHx8+G?y8;Tr zD2k**m{c|DuA(+r<8P2*(Vzpo2SzW2u02VH!^(_qJd^a)3}t z!qh9+K?VPuQig=!(Gp5EG|rOc7z0AQ(%oqBQC9SoPSI@~9amis1+Tr zbR!#Ii>l#nO$Cy|ba&$EDE7>z!|%OHp39u3O{k(-Fe?_*#D*jym9X~yl0>B zf$hef?F1qQGo^;vmF5&?O0E|`zX%I(Dr4$#VM<{|u3?!}T1ALN`Fl#hnachKadM>i z(leKE;-gOkJ%S!g=J#Oc4e#Kg+m^7=cU-%srn!dMP!ae_@Nj9uK&p+PMwP1p1g|0i z=!5elH87&9hln8>Ers68K-EB*ridAU{#l^C4>EJxAzS*P_u;~?eFV8|VSQ~K&wcW< z_{GY^$i3m}0BB@D zBEby2?S!{|l2 z`BR2V&ry;VY~*4206sAT3iO{oi>KFL#Y(S-?|$SKyyeg$Zr|3zT?^zDB~N5x>ooMK z%m`$eLNg^jOjASF5SW1dVS#6!IIS0c=Z~=U{Ht`W)G*ssQ$_0h)$aDj<2z=X|7_3x z_Ss{9`=;U>@%>s}0)3WzxA*q*qr%?4k_kF(#a;8n-?+(PWQAnvtlJRVJ>xXbEV(c+ zJb6v=hgT>kNA3m_zNaC!v2%9r%maIlXUA(U5Yw906fm0Bw|wo`zw2VLHTYcb;_6PQ z@2U!rB#L%NxV1rlWrd@WS=tg515ck@U?4>cYE+p5HJrgvGf0fHDn=y_V=j3;V<&(N zR)IZwBXz~~mkjCtt7-}{FOwc9+ZMbnA`J7!SBjF8VO;80(kbS@VTM7 z2U0QxkQG2Pp#-P+2+pzwU{2iK!gptzz_m&Ll{MJEewlK13sL~=Bx-H=_1Ol0bH?z} z6fBz7w7&Uu^aJ#7{%4=ObFR^T!^+i_4q&j&p_15_(wm8pLz2>JhG>QJ)IOu z(+OM{wQLws7>I%>lo%*v6g_J!CYUs159CoYXyOQ{oR)mrhK;Mh%zP6!J+d3CFW*i72pV-imO7wmKpvD!CJZ5Og_8XO7%5O} zg&}DoKtq5%9W~d0-8k2>pMS8ycic5AzkR5MFaE~YaQP3Pgl}d*(hTT+UWCz=Aea!4 z0c{hZDPUQF!VJ!0Q(2zm%8-*4JF7IcWG*1pd_rW7>@5$m{zqR$@2k(ij1bLXz5$t^ zL$Z4g*~JT{n?u`t`Xpa|;RRm$uiNpN_q`AAdjI|SsqdPHR|c;l1+rX_!xV)Vp92F; zplty79|Mz~6Bj1SW zjLE$NbRLJ^L5h_z`eNruz1T z#n;|)*DYT>^kHlq{lL@&ds>#lVOJ`UZiiUw zV|Z-~tCy8?+Z=}LfaZWS<2J*t11YMFeYJL@Hk_(U7CJmyy zs|8uy30&ARj0Qk^HY$7S*3GqDJsCuBr9+33S~}NM+M-Bus*{VaquErzkyXe9YfOz1BvQ8LNidU zJV;gYS;=;?x|8FCylZ@1CeV#&gBhl4p>3Nua`p6$lJR34hl&_brk`L8IgaretGgPp zd~Ed@$EjmAS=hvdSl7o@Ofi^}R5J=fvkZI9u__sGMydUC*?5-B{F=lkrlwWu!x&|5 z*BM%~Vp)N8nP9laSmm*WnXb2BJsK`qfyG2YH50Sx#Ogbt9t|mE7mh{+nZm?9;nu2q)4xf@D`(obdE>BO)w5Ih@ccL&sBCtX^ zd*d$N_PuYwFFtYrZ`n7)T@3-17!p_=0X+|D(1TkNf?!!U*K?8CJ0U5L{}t9@P9%bo zEVF6h4QL55+W-bMy!iFAc=hQsfG>y!k=}4KX70Y#<_|V8+5(C`pgugGxX5}j(9B*V zMYA%oB2MrMjgox=iHp*?YT9JME5NL__FD}RAv}Rz&mawAaeEs(9=rv`nG5V+5_l6^ ze)d^B^YT5ockKXfoNd?@6=@&HUf~QqJbGM4E~Rd9{yK`)aLZS>h+PlgZnr;l0QVi5x0%6! zUwQ5tzkcEhmS4EQ)$=c-_pxL6gR_@$<*9pd%exQZhNT7;+Qh}J1ib;+N(4#A&}@=J z0_UH(f^%Pd7R#UeDvE2Hu$g&aW)@~p*KTG^+<$B|Tfe$|^aGccj~tQLa<>2KrZd;@ z523!b;DLD$7)9jf8S+pEgep~m2F(%}Mg>Jd%p|aF4dS*rLE{Q+;L$4R4vs_~MxLJn z&J6(!{(9b4jDHUH6ET(7O#!26eFxXwhYd#wbf394I(6|`G?F3mqLPhSGclv*aBYCK z(_2{BIRhr88&Ta{7!&c#rQvcNEU4HStg&JyfDu$iE{4F?a4AiT;Cei>qlw0W{V1-U zg^o4=^Q<74*Tg#4M(H)pke>vDUSp$UwPvXVeqOUam2-L-BVm=}O-=b>aT+y_U#;@m zCJvd^lG{tMUI2htrii@`rZN6ZRj7!KkEyWoy@l1JcH`F`C)1U$hsc;I`?eCiW34%= z`j3)bW7Tl*HF#k(pvHBAvGH52A84Hf$*h7>UW5NkyhiyCTJvTaUjS8;#QGt$ItW#Q zO?B?Y`147DC4 zWSdAkVunXHVM|NU-U!$StTlwMbQ61SOYx?}&}|D?5cc>5vm2X0Ta5S5(^6HEf_@+t zSW%kD$IW3Ah8Bqi32%xMn~INJaPs*p#AXhpiTSqJT8s9zg@$~z!R{+>`W*~^dwOQ3 zHLY*rzRvK-W5--$*S2k+Ti<#^Hqu)G61jrS4iDbBk3aFl_uBgocF_?*zW}z>FfwAJ z07kI^a0Yk+iO>=WvMQqP3{Yy-t+MDLC+2)XY90;vyaBnv+5p-P_Tq>*_uOS{oVpC8 zB$`dMZ$5yzJ8nQ{mRLKd@L3!Q3gIGhp^;WBQmv6RM!OpYRE_EbL#Q-pmOQk5PBgH6 z378NL!GFhvP&J5)nJU4R8~F$}=ovaQ2@c-77sD^^u>MQufl&tCTDB*jI){7iyP3DY zbvKeg+pZW-Wr}HVw+0=S=k_k{dFu^$b;a8=|K}CtqZ~+wM5k$$PQJ?fl^7qQ;|8$wUqsc=#(u8M zqltb14nQ05W*l5vv-QWHMgNJf!mnNp0>+scn}6^gy!}V-z#|Xs#=UzwSR`@dD;f4Y zw}EF*T(t8~EMWDi6F7bBaa=yTj#CBkmhakQb30~OBnd_Yn{9!$VEvKe(#cCW^Vt(v zKK=}|^Jl>M9bmUhI5C)Rx=#B0(v<)5#y9Qz(y@;kgYW8*ZxCqlD1d9ofwnhxR7eNM z8#;pB9ayFwLyAc}+?f)d)TSz1j#x^AUuSNhnk|hy-{_LYN0*k&O>bb+s+UX;!L+_5 zD@Y6MB>r2m?xn|>?iQ1zfO*0Sn9$4tqxC*EUbq5PZ%9EVMk&cNwdnaudLt8i{s1}z zNrY97$rWQGa-uEFJW4Q09MEXN)T^N|w7aQw@7j-Kt`m5^g&L#;Rjl>~YS>K~r&Z>K z)*3La@RsX<4o+YZ_F7CmIs=Yhv9!1`j=e!lB!DUoKvGJqBK_JCCWJY{V){pAno*A1{m%y1ZzVC8? zCzC*tRo(`e^yWd7@70hPtFDXM>yrVh)ar^riI@c7t(L!MCDRDw>1cT}t79~dyoZ_v zSz$a*Hf9XPrr4_IGfVjesDqiLJ)k#Vhx-(EXbG7Lx=RWJnelaPOV_ z>=*8y$4mlj7O<5ZwqdX#fM!aYZ;CB6X)_J5lK@Q#Q|_|g2!wBx{a4BPiEDcNpTJtF z+9Uv05SEpZ6K3|risI6_Yp|7TK+74rUF+Vo)8=kiK*Jk~kwU$h6R2|rM;bX!q>xf> z9upgV0n3VzxRrwjM@v%R|Iglk2V0We=Yin&os)U(^Yvc2F4xuG8#GMAb%TT8T`%IdIOtdVc1|yID z(5pZ28V)_i8I8-zIK7I)|m>2Vs|&gA=7G{PWLT(DPrt zC}XI$4Q-WE=uyg^u8P?R@^w#1#!Xtu0Hje4RD(h{k-8}~n+gkwG;g7{p(twPgkAw` z7r?+n-U3RX?Ho9F1G=#T?b+YOyFPpb-6MyCr}dy;HiVP@w=}T!9&}L)Z%eNP217ea zRd-chNgq6pOxs9ZqtWI-+s~fD`scnZx4kA%Fx?r<-gXQR|LWuTg^wKJM~}C0pk+AI zgn#E99X<82Tl5S6)gyYx-~9zGzw=&!+vvagWqk8reocS)*;9J<^p=W-M=~dH7TC!P zoq6RtzWEzp!{yI?3E9QBfW9ZrD%Srf-T z31lfbb})rt1zOUm+c3VJK)IkX;4=b+A#y^F^ns%jy4IqQb9}ata-FUbH>peUTl7_P0h}*B6!+3ar zrqPCJK*d-JhJx_$qC5!`i5Hbjn%;XTq%M$zXLToCePxBaeG-yGbfpGh;B5-B zO5lTaAfd!vOaM)MWbsrPS`+3r;3Xe5Xht=oW-7v1k_l)GB*DYQRIT9o<4d1z!ytR} zC6E)$oU3ST+$5+f_t`}|r(h=Og-9ni0)3fZCXpdc%(Gshacpvr99I(;|--3$TNGEX9Q(s&IzHl9Qeid5XG0JI>rtm3z zwg6pe0>3rO=I{Q-S228Q3q1K0{K;ul@U*7&J*~H1d223J>sLJOy+{*pl2mT1&(0$= z*mK(g7Hz>BS&D5>P9w7z=;?=ro+HV^rW1i z!UH}GxtP#lI3Dq9Z;o+oZCh|TkhY1%J(xSPpzcCT<82UymoWyxi8`V}altdDO0ISZK6?#aUwSEU>VUZ3vwmYB4ssf2492^+B6zx;P$3BJB2~>j{TUq^MJOlotN74>|MW(wab^Z<=>&%CRJpxnFB2$Q(8Qd zQZb<$k;V&v6)Yg-qWT3ma^ieS&6q&N-pT2=b6|ByUL64I8BoMXx-@|n6UaoP$~=P~ z=Ahdk=jVz2OHJ&3;z10zRx!MK1<0L`{)v$RWx|NDvUEtm1o93t9-t9PPtcTk#Viw0 zk`~aI7uK&8y8cJcVEZfI0UgZb;q< zOEVUaKeAxg|Kf+Vu7>)b`xDrUFZrv#eVXR_qnQ1bkE^rTz~!|Z=l<*z-umq?AwTmP z&}xHw4?=S@@bFAD&J*ZQR*oO|q~ZA7bHDnw0)HF8iT~_?g+`-MPBpf?xLpWK0|HkZ z%q9))Y(dT!9K(78BN{SuU_0?Xqp+S^x(uZE5WUR}Q|D;VT%LY;O=}7mP3uRinjJf6 zHanjmpVe{au{UJG)3Diu#u>6p7tp)$kUAP~j0KW3aG&!bv2aUEH}BBRYHOW^A97I4UnBaiEzR$ZgMzwU23j1K)96F#{)v*Ty zZ4+UgI-;)$i>ZEoc5ARu(Yc8UyT+6WYl=DU0h&k@E94-ya8Kr&j0zBh2^%KK* z#y;A|O}YZE$Tc-l{ILR#gcF|x@CoR?6X2OAFg%#xEhg??4hcGE9v?d_O5}V499pC6 zIq~#G`ZH_bzBV}95UmxhAb5|$L7N%z)1u+-{Sq|K?0^GfiIJ^MNwt!XxNG<)W0hTN| zcEZMx+!zH3EeI5z?2Ul+p4D2<<4O<4U_hRU`_y8Z{xn*Q^z!f&jGCd3JQ-~Sli|Fe(a6K|i_Qpe!jmeq~S zDocn9+u)@&k0L9$*r7Um62E-g0UmkxBRG9_OZl0XmEGub^UO7#fAt#n-+MrppFhXz zUwRqYrAxxn9-=cNq)j0g$Q;d?_UC3g&EKB+=?C9@^%M7J_}~8K_iUYQeOg7UxqWIZ zb1H**G$)gn)}Z|@V9$P|c0x1)xM^C6Xc8f{MsE&;XV!^P;m|N%Ddn@mBPWt%xG`np zPHPGnP3uRi_B4-;%u4Us8^TY6M({p5q9#B#R6&XQm6=Orxqy-;ugA;e`l3 zuxMDBw$$#dIpG8a07arPoG>t=xuHz}?*KOtXP2yRA3n%*N&@E)}B%;LYAZoM36+0aCG^NnZm;LOgfr zgH$v0F3(l1bJ_hKL0z@B`yurx-E$XZU(LeCL=i$IBT z3O+ZvAyS2OFKY}kZ?JZ?uhFmw7KdK4`{?(``-C)B zpbsn~jGdT!U}H>;9XN2o_X&jB7HmeF0(r6Ug!jP65rqTC1t2F3M?l&kx{EEOtu*Al zI!C1G?#_tijsbuVJxy$SR5c}~sijvsLzoUQTpwWV8|S(6)o-G>ah>p9CT(E$zGHa& zrytcvp1f7}E*iesH#j>W)`nmX@!Afs*%Put927#!dvE4iSh?pY*Wde2tgc-mHhUZm z9d2Cji+jgdd;K~F7uSGJTU^-_^6rX4%=1xew)t9napw1Kx%>E+pZmo9-*Y1M>I(ea z(7d#f`>z}6V8dwtxhx2zRGk5b&Z0WNU^qjP#lk06>-95S2VpNpCC!FZfJkA=ABeKRQR3v32T2 zU_25{C&Yi0oS?}02*Wi8(E)~%vC;64!Ow=2@t`6zsze}s-I9qDFK!dT02iAoGck;= zd~I&Rz^b87IK~RFslWl5D)}`suz)BHn;15msK#RTxIoxZ#ehPY+Ev|&=)0ID(^#grFvVtW*0Z^fF7FQlB+OtvFL6T2@lu$|~VCM>R6 z@(9hY5IL6UoS&dd^1*bJs+|#rq_#>Q88Ft0&*lYV0>VdCfiEO&i_=^7A6x8*diwL9 zx5sdd|LDnMtAFox{Oeb?imSb>aD8JR_s*{vvSr#d?F42k1NxazXduONnn|p@Mt0z9PzktN2PQt9NOrfG_P3wDIA6+_?p4!uy zxv;k0RKps0!S{!dtPaezu{_s84?@n8Pz`!bCNMRMgJ2MhccPDEjEQC4RuY&HwKWM8 ziS{_6i;Y4NpKoa3e1e_T5%O^$Ya4plm3gw;g!e$6M+0g_+rGGQ`5=!S7vga2L1T1u zNqFC##9e!Vp@TNZKwgAy!6_u&--v6y_fQ`8g(;+VN_10jz6%_jCypZrwY1nM)&{<9}*e-DG8<%+Hcb=$!?YI0!chBtSpZg!*f93n}Ia^tUFw=W= z?7NFXamd2GZ+mPOp1(nRZbaR^V0ff0H4`CAtU68L%BJw>EzM!KO6@jHdOYRVP2;*6#cCRyw$s&B(c+j(gx6Mg|*X^Faade8)qx{2quL`ZBdQM7bPH68XA?}j>e#Rme{w2EP}zV(^WI^sVBErKdNM6CAYY87*f^Tl{9H1vpZV8p73QtsELs# zX4NIwgg{k?n|SO@NI_DW-BrcOmXa<%F`33B;Hx~fh@eNbhul59tYapM6rqwf4+#nk za#SkE5<{X&Z>VrSe8~rk1+XOBVK}$;$Ba8(L#Ea*=hfDqR3+u%<3qaA= zu?(jz_sF@)TH7FCWSHl`Ru1&WK(patJ<&2ir|mJ*FlO6_=Z#yyK!Rxk!+mplb?*_n ztxJHHcKXEmOCyd8!K9*zYqbgAolxkN0*NQsV!}jUxH9Rt@K8SkdoEv#c$h%B~&F8rLS0lcid2gaFaGljQF63#%L5xzs%Nc4B%qInZsxZx$aFmn{b zMw}1bRN5h0ds27+*Z%EUtp2;_g|%1Vm=J~0+&zcz&|i5UKlz~rEX~rq)fc|GZLvO* zhJ`TpMCLsUNiOQ|4M;k0yp|!i2DaPrvroQP{-tjlrvihkTNs?#Kz?ym$c8jFr-mMK z@TT2bPY*17>&7tugVyQwi~osn?|*J}<~YorH4f%%@jSiFI*Bn!%11{qdj}rrnZChh z;pHG)&x0SjA9})hbi2g3@RDSW#d^z_m+07!!9vrT))X+B){j=bdg2rL>@R+LN5f>` z;0c#|c}t`Xv01RVblPm5J*wvMy_nn6Kz7wkEPH$n5inH6INs&DQ{5d$r)sfGG%t|~ znh3FIV$hfv16d*K6LX6RN5@xi@xUFxwNu304AJQTd0uly4nB%ZZ@TByRELy=r~~rBP5_7ga^w zqvr23F}t4Zc8v#6lS$cK?5~>bb0yybkd!QIPF~pWj-9Wd9#dn-)V!a<%a^b3%OPew z9jq~;BA8SnHzxdHCC3+bfhrX#triMGau*w^el;t)6$lvxyKh#BY~}AOW}2_b5=-Q< zdJEUwyes4K+BL12jaNx*F;9<`CNO#^)c{7;{F~qfHcT+66a`p%QSda9jJ$_U(j-lc zNvGddKgQVpQ}9onyuJ9tuS57G+*2p9jYEx73&Qq#;@&cHj|g};lRx5Q4-%Z0m5nxU z0+A;M!^CK(VfiM2S99>ynI>Lsy79TY^O=nkAB8&s@Z|lW;XQF;nvycDX?;Ix13*y} za9Kgx9PmUw1eDHTUn9lAR7xqh7=u9*m^hVGJWfZ70)&Aa0`L+20;{z*YSl?2*f{)P zt)(hi&sWf?{z&tV2N8st5< zq8}FMwSPVp(atA>}NEl4#(;RH4W7?V8cc*$3gT$6Oc7Bg(n)F z4(D#&&#hB{cOLLLJ#tV|(^9DduvV}(kWk1TN7YOSFfIi4 zDw>KL33BCih*2wr0Gk3WOXN8Kh$bQC<`Oo#Eg)$yMt-2;WYY+RBSdMqNV7p*rwhQYV@@v^U2rbwer!Ut zQ)ulfdS|b4{`w*8JG2-5Rl?=*i6up+WWY>JpTj)rW+G1curkDz(UTdNU>*^y&IG}X6T5omU0icMr$^=EOHlXGM` z`Q6q+WycOzJ$6*cs%@Cld8#1R6v?0fE7xx z2tdtFU;?1+_RQi$uEv^~_pV&C8ciR&W7^`|d*b7C(>2)zY?ZICS~N}lz;C*awbu|z zKy%^+rr=;{1;`r1q!Em}ruE}mq)x^mH%FIQ9%>}tfg#hkG-!Yr2=q14vhd>#p4VB zlTre%5NQZlAW02Pnue32Vt2z8&P6len}Y1kW}|HcK}_>*s-IDeiP z7ckug&EI_lkN)&Sc=7|c^6p!jxZVdY_YJNM3`QB46^youKmjtoS>(NtJ0bHz(lRg| zB6kI|jUHUDN8jrOFe^>M{w5Z(1Zcr5C�!_r2rzSHFDyfzkK%^LFBdKZz3n;BewZ z_BWpR>t7uDCA(wnI5Ek4x18Var8b>xqwvO%jS6t}^r_Ww#^|dvaG#wovgdC5V~kHu zzs06C1&pTkqgwm!Joe0)x6a=U!;iuh2HpXwl{!r+P0Zk}tIRH3R^#y%*e2mK1T9lz z;?IMSQO=vZmla)_CwKWl2gUC|V`@&rtlhB}IZ)(Ox^EFHAGm{;zBq?sG!{lfqTLnp ztQ?h1;2B1qb?#&)tet<4neqgTsCnwJ_S5jA-4XNE?<&wD3da~Ata=pvu0ZMvG!Z5t z7TC4ziaAtI-U2F_lq!HD0$&xQi1lE%5PM(Fr1;(3u4@dL^3r(5=B5S^)xeQ|KX4NE z!;~;y$#jo*;IosSx-ju6~+HU|Ib-y+8+q21q3)0)<_ zzOVJEPX$I#KeI4s$Xdb#0U8<*HisPh0vSNdpl2@PN@r^8dO2kA3|>GkHV-!TSDpc2 zahUiu%7aPCqW;doMk(*EKoX~Dmq-g(fT>~Hwm?GoT#%~*HwZwv19rwhVu@Q( zlF&ALz&Hb%5f?GL2*z<84r{Lp0p4K}z8jCjOa?ZT3BHttiyoTcxS0sda-!P>mKGAs zFSTWp1ceN|s63j1`zS;6+{Fy9n^RUjo3&s8XgddPj6#oKYQ3h%#G_HA4S-^JOzZ$E zGt827&&k{~b0Hii2-yl$h6+_r6Wt+6dSl=KV`LzB$V#SZn5)3fo0qWuJI}zMc^yCk zJ3EWHLo0abuYU|b|NgzWYhR-6vB#CZ#f_n`l?nZ&g-L`%#r!dcBx9ISCOll+%h6bYF1CzM~2ku?OwR_%);^pUnjqBpBJAW_i-++!Dug(Xm;2{<9d zeJg)gdN0@G>La*DaWZwQ0WcHd%mg*jE*4S*rd;iunB9z|O7O zg*jD#%C0Q2i62mur&ZXC0qAc6`Bc9OwT+hh>g$wxukidD&1tvF4wGcI_#UCDA#T_W zn)y0IDS%h3r_0@xs5Uu|W`bkZ0KL+jp=6r{vk1j;VQ`KoL&r(S#uPA`)^{&bkoeT6 zWnTe+Go7{Zp^KZN#vvYV!R%aG)AH;-zp(=~-hgv&15P{v^U6s~SWDBI*0g>AZdyMn z;Dq90Owhm=0xXH90g4fNMTUOJ&!8dYgPqYNl%rhB&7}XT`l+~Bl|4x56C?r!V*4a0 zF){Q(lOa}Jw%;JoH3sZ}Ci%0J#7grCwg)XU+jGqv*uhgy^M&WBB5PyihnW zFBm|f=qkuEVYdd;#2zLBK}ZN}W#IZ4=oLg_cY7e32@AUNL2{Gx3}eFa`WheKyKtTi z7)&s|1!Ut^lUiPFAf5$!7-^a*tT9Lp;0-ZOQ~EZs_4HZn{K?nhPkmFcj!+AG@4FT6 z{?#Y&m*2e?ovy{&K)A7GaD4=<4S;?gm{R3Lt33bXTo~m-;RV|Qmi8qWjftzzUBS7N zUq`;V1~d|&JquV9JSzMU@&(vvNJ&C^F!5+{-7miF@^d@SO|Zxxh&uL#W7+A)@p{8= z+?Z|oFZMEj$XmPM8ouf1Tat2$o0Km5g6Fer{p#_bI<`Ii@|xBZFq+nnL6gFw^>e>* z28H{hUcdJt$hBh>g5gXDTJ2%y;ubHzw2giD&LD3Zj0b?cso5jnbOSzt23SKND$+&$ zhT344j7PPbbXo)WTrfE>-)(aFgAZYK?F_~j&O`kjq0s_7LpG@oiJcP*W>YsBRy4RS zrD7#kvFmf5W!!hB5)SEj0QV)|SfIpZdbutehOjGo=#Or13pQ^@K}vhQ~O zcd@B(6UbD~u^dtN6%dfdcU-$orv6wicyVC9}2qp8&_89KvK+B?Y-x=n)J``E`&{r!h{$ z3qS(zjI0g%HhNKBC`645$ra+EC4-|&)NG5|9)MX6SR4Ah=D06yEejTn_U_ z1#o=?-57=6C8&Z_CiVldH&hjyTh7w7%eykVFo*;b1GEx_R9j+VOCC;?s=yb?zy%bI zjRXx+Y?2;?A35~CbP0nmeN)AmHvu@pr`Y$N`|-Y?eMC>aV+FGvi>;BkF`zcaz}g7f zDabr_o?*WQ7vy~$j{?A#c7g7S(I6u(|H-#_{R^)kzjy_hO+p|I4KNy!tyXA!@?08u zk8TG_5`$)AY4z%jd-|BY0wDi^x*a+}f8vCOxOegD<;9IHYy3Iyv$kutk}S)RH_{?O zK5F%Cf9Akk@7EujEuO}dsXMJHU^J~ClbSnn=xnyS_L-hZ-Yw_bD009wz*YjJDTY^v zy8e|5*n9V#ux$&|k7$M2eJ@{;Gg$frm+5I$H>6#(jGIhjYO*wzVjqc6CYn~F1MfV9 z(F@0sUEhFi+yM3;2#$NZ9EvCILaJjtEE}ZViDlKIev=1KDJH6W=@8!m?$l*rLEkSC zW?~tzyC1wcdj8*Y`^Smr5o_L1ap$Whq+U_BUmXYeo!AC<2X%!6kct{TVdzxPyZInk zV?|*%AXwofHMW$v>v`3A<4y5$B^yokvorx9Z#JNwphfj<)B(MTZNP3YDn8Lf5Xsjs z_Qbe4n6pnzlC=9^Z`xk%_-}p?Yv;BewpN0Q(C+3u%tV6?H>uJneApuqg_rZ<< zz$XPf4ZQI-=+|R#&dC$fNkDiCb+P5NrZue}v}&vrMR9c`N$?TANK=5qm5m&iH*#nu zg_l9$L;QQWfTr~xKof8SbprHc84B-u`ulvjV9q!BHtLI z_xe@teEyrr-*{cx*??&^*}3~}yz65R;wRsK1jptRoE-*6(Z&ee%%EOQWPZYcQoIg% zA&kaCmU*OIurY7sjl-2cJI8CEe-ZuD7l2j+Xf`4hX$<6Jm_z#l=y+oU4EkiJ>y@NZ zVpp~{b{-w|R=)yZ@B_D$o}kAG6*#f9bwb*~(=eB3!HqNUzxOK2!OV0Goz{O;ndvE* z){jPoFT6`vSFdbu_rHu*dlMcW@Yc@M5Hip>w>MI!B7=tO0bO?HplWs#dJ0ylM ztPl)e@lr|_M#<;$|lQ`94(CeN$RrgY(vecs1CpZ6`BzO2|KIy#2Aoti93Bz2$F`q$1y`A6|*^po={DflN8zKX4t$1aZ{m@sXWCfl3Px5E>R z1jus*=PbVk_SiQjF6+XA?3aBR8au!ROaZ4!O_L={LK-V`?$ub3i_ZA zYr66E{ffPVt4X&i561|$)cON@A0qBE2jzmC3y-5A<{D6%0Ny*g(I`^Tg+{|_cCiIx z2q)2bv69-y-mUU7jJ;Sd1FsIitudH+z?QzwWuwb5^+ByyD&=Oee<_bgK3*>uSYWhC zFaTd)&oJ5^7`QwdNQdus7)}B}j0GDhOt%T!05!@meC;aMKKo6LU;4WI&MMikY^|*5 zo?rTqe(uA!>(PTvT-p(C>hglwM4Ie4oxcP(q zL5w52FTnr$W6Vod?o%gWp8E6@2bk7>Tum89)B4e>lb>+*7yi}G+~M{s{j(Pqi*dG$ zPRDt8i*^IZci?WE)Ad)ku>Wl>Hs>11HzW7g?7oTS&3D%~8}^hp%M)W7?Y6<*Wdg)7 zT_SuDP=>wlKZMc7ZM^W(i@^1DV8sBPc0_c1C5Bfv!q^F}oU%;@W>px*%`6m7V!Q-Z zQu3-C0IQg$QBs~mv@4nbjR9WUBEGgNys}>4ZF_)s@3S~OW6E>mrHLG#HIPI#V2XjB zCBsTD&*(qk;X{a-YQUAMEcpr8HR*455xGi`iylzn0c!wjLUZ7w@pIX2dNa}QTLX9> zL7cK*smrTs=O_}W6?Ag7i&|dmGV#Pr&bOI(G_eM>R9e3Z)A17tW4yN7WmF%R^~b{F;l+X-GY(@uTXjx$^w`n;1{J35Ti~V@nf;9tANE6#mku z+{+UJi`?hV`+WK(HLXA2Ubr4yJ*{a?>j$NtK7TBmTkUNbYcgMWDK89YMPsmerH^Zu z`slxX0mcHp2r=#DdMpnj2{LtsfeamDTRgqSZ*vZM~Ip=$Rn7?3N`@Q$Q?zPr+KqrA|LC8mpClv0N# zZ|Gu8#cvH6y6^{W5~1cMX3X$j?iSjGX?r>%Y0ybwqX(2)W*73%cG%1Lf>ECpR-g;b#vsTDY%L|V$vAJnD95#Luf0JC zYT+&KK()<5bFsc8CMK0Y+KT^mH|^^ipL!7?d-RA1oZm|rL^3nzbJU4{+x3Gs`MA!_ z5u2CXALVk?0w-X1*Vl9~t2sYbt*2sr<+vjJ#dBr-w|>2%qOncGl|8KlPQ=`q?GO-^ zXnqPDnR^-6-FXqAP=TT+Kr-5b86Ba{+h+4&!GGY1@1!8Vd;B$)&ttv|Q&^HFpS`I` zqm?QnvlB{{Bn@jcqhZ>G7I0w%a51`DAt4@v^q!81>PYXLk~XV2kWitq#mufG6v{M1 zoe0O6fG`S4Ce;pg$ubI+-~YM^Z0B>b`sW4%8!`cRE}}A7^pFg%Ws;jDODCO&BdGDJ z!}SL|F>91vNEKJ#56UwBcdCvEXZ>xmen(I{J8GF6{w$>#(fW%4L?c~clC%zfswMF1#TjQE*_>alRhsn#dfG@+Ul98Ser9ZZUFX}E z#^gv>7Egi#9h7{dkWBs4+bEd5RN$i0_ut|i{?10{KI~)0%{Iu(qqQv$cdN;cWg(~U z{;8_f?FfqRjk1xr*9$Vv7<|SFwFXy@1i)nD@(uiC0Yz~pw?Wr{=n0nV5Quab&B)SQ zJkvilPW9*$9?i2JC&J95_6@v3$GEu&oyWYuT4qwdoUeI2lh=4c;@pstoW{%+T1A(f z$(!NdTnD~|YFqMStD_udHR3G#k=C&-M)$c1Wr**FZ$K)?|Fa%kTO@VN`+_bAUrIW~ zKDplv-7rj0tiH3duzNc?%(Snn!vG=Ut5>IlPN#iNAVs2J<*fTc?%!=J0`ZN+hP`(M zoU>oYEtJWZ^dQ#PElh;v@4RaQRqS z2Tzc%)|7Z;;ByUVQO7bTByod$EkMzo(fCC$*pxU40K_FukS7)c<)6TJRHK)YwGbHZt=GqwNaFDb^t{eGzxdm;P z%lRq=FYAeiV!Z`JIm@O_Q$PL`{J%<$TeXgv&n2spY3IAj3qC@(mM>B13+9we)tsMwv)1N8u=hCVt!bH2d$1QG`tR5?W9qZGw_RHm86!A(G3uk7Jk+-Yd{SCSir&4BRQY4N5ZbW9*Rh1&LN4B8pyGlapJd$O( z-YOAFeBVnHA0?rCtzA8)-aVTD*lpiGN{-T&@J2+ig|v`n3hDA+ONBC1_^pb)+|l92 zu}?KT=AB_pCHvJovSq9r2G{N)nbbn+k+r8lBg|%B=RO_VDU_#}&VA_26uvrCKd=v! zGQaDHxZ5QG#c>k54OppH#Boc^H^}ER=_iLi43K$P7ZgI185|ZKi6C^PYeX}RXM~KSIa&zpHB@c|g**y!>@_xA{b3}{ zYv+MIfd9kZt0w+BnKa+mpewlgCdk@Gcy8nRe`VQlv){75q4L4i=7bL{-&g(EQh~Eu zA)VHc{i`ctoiti!lV%KMd<_v7Ya)vkhnZ47Q75GXAC_FUfi!ozFs|ZZ}WmubmQ{!NRsg`!R>VfJ}haNocYu%Q+6| z5HYwk$zNhaMt0`Oc+4sK9db2WiDB!Dno~_IQ08Sx2s|oBJ~R^m^6Gq1?{A{?wXt(G zhq*W)8wYAg9I)Lkm$4^4gkp2DLBP+Ii(3f)3Erpr6L?{`=KF*)OHu1^56L5I z^-Q`++$y=SZ0RG*FCh+VUe~DSpy$Mmv>dQOB9OxI^>AhrOshs`hhE7FI{4ou@HvBJ ze0f5AI8iWi625Z4SLQSEF1g~$nR4yea)iS<+_QEJIwk5DLHqV$+%V23lj)Iyq>)={ zXK`hOYHIPyZ2qkjQzt*lx`fNz$czg6##e7p)=<;C5@@*X524!)hPbvhN!mWatR|$W z*~x=P6?5wt>LVN_PzhD1hO@w69NPw-{p6{l37M2)cSiWQ zjT>p^e{{JlMB^!ev_>st$X4tKsQ}u0(!TMBdm-&8qd)FhoBv)BP~=D>iUad_0kLg&5Y@{EBd zqqjws=W1s0*?^s_y!7P${Q*$GcnQuQV1%k}21dBv5!wYiqEfklo zFAo$%pzEPc+qmwv9}umtid&&D8Jgpss0Q`3Z?PG2Wl-vhE4^4GH>5f(NVpd?rP4Y< z+*`D*Yd*1hSHmdGVVe7fagouE}8ao^d!YYI>VP6 z%RJY7 zvK#kK?pklSAB)J_()7TN5>il}y8Xk3-nUa30DhliYuF~z)QTOS{lnmeU~iQk2QRq> zCB&?9_O>E5T4N-6X=n?$!<rmi7A~_uMMKS zTBvlnkMM(xg|y)3c5p?7N5K0c$)>)=xtUZO7Ec^VSVt=w7KrU#_7{Fz)|9gX1ld^& z`PyTG-+gb8U{1-At=!xnv~XwF)R-KT&PxcHGKa1SP;*kGAIEzB#S*;dGnbi6S)@d3 zc_Md+QhJgNP%?e`6(!3(IIU~EO9Nz4pZ~%6`?ZzuCR9f=2L;!6xfEcn4Z;NA;tJXT zf~}wi??<;=tQtKlZ3wXm;D56`w~G2G^aX&YrE7(~7t`N$H-YU_#WPG=1>! zB!%G&`U#X#|96x~%ou_I2oS3BN7o*;Q(7FyY@t10kfUrPkeAKxoBD=gDS{CHO?%kA z<`qabd!Vhh%~bgixh6dx{H=um-{S9FjXml-FoMVEp>|#mQo-05-wedq?w-Y7SGSCV zFCX4fiSJ3{Wp7k%bC9niq&g<5Ig+gy za75IgevGRpnxpZcw62uNVwm{5VON;w!4DJea7~gL_U$>nBtf?j&dDaOf$)ULb%vKyw7u&_*Z^A-O1sB2v$K3Lf|&!qA$`x5JWrlj)m! z=pgMJh$O%@5$k4{J(6G%!9Ab}wYCNF&gG}a8N%Z_Xw9_ zcsW$`u!XdqXMXu>#I8Zy-$ee1^`;FksWgNYB9qX^A?-LXZ)*pfH8gqqSM+~+t^FIu z(s;m2Jn__URs2xfTx$V;fJV4NDDT01=f*IvQ;$zZCb__H88vGw%D9)LyuMwaQkJ~< zPD$GJlfhq+r%ZY!(l<7`c@?Gt(4CYZVwmU-OWWlxZrs)fL`@O#62g(^5=(&#db0N$Y)Pk` zd}uJX+)4q7+xA!3QPKP7(TNaXs=zFUfd!(ZoG0(w+Kjq6`cYrdy5WvXx5f^-D()ye z+NJOsI7&$R8wX-|Zior)uohVfPC$;}Y6iSnv-{O;#)v9fYcEx3QCj#Zq}(iX*4={U z92FB5X47nvW;#wXcy1~gNvs^RD7q}|NQ3Peedr;&@*Q?9B)@h61`4T0NlVZIo`*iN zkMk(ziOY}GYxuX%H(Cnm-Vn}r-L1@b#nQ}TQf$I7T_$>3cpo)A_(}Z|Y9~q+RHX1R zC%g4;^D;VcD|bq9ijkwBTV6;SW+^p2>5H$35`w)5ChqRp1wq`O5dbj=o%$%%QQ`0G zkDr0Q@38II;COuqar%jR=$8!7fL<%>2{C(iVK+_@*Q?D`0gv1#(JV|NK-+?Jx1leV)7pT9Fvcz6~V{MkJSQHuh%OR_Lo8j z{>p6Fqb|-rL2tP4SC?#~0iYx@VbQSt8y+Flsv>x9xj3#uv5a9$bkk^5B~OFTWPBPy zE#?55vfVn=#ELG^?vR9baBJj!LYya@i|`H^ES_rgg(q=(%U4XVM;0erR=1|Ur#YL%;9u9ydw>M|x6``)R|gm34GzFoC}&9nE+fNK8A-)(YVe3XUz* zI0n#cP7Z=OfK56CRAO7%qALUhU&ruY=w^oiD!(Cn%Fyw=ZI?{tLbL*Fh7l_zI(%{;;c;<-K4SP0pU~W zY}a*3i4^0ImFd50*4ORu4^HpGWo)@c4LbyW1|P!KS3^rO?Mpe7ln6}QBWpU{ z^+!Ghyn^F#cqbF3h$>YWnn+4109oqMO1#5rzFxXiDK)h$vi#?o(^MBc26A6#*w1b}03OU>A`dU2WVSBcBPAArxF} zChnu=TbM*agt_}@9lA_6lW|2+j%2|7yUk!^i^B)K4yCW8pwRJFM?0Iz zR?R^|3dw|)U?Aq!xgRl;AA{NtdxKA(NboT$UNVNRJ*-*tGedec8?>{6qM?P-*Rl8?>i*}%_Vyc_OF|XyhXCXrV%9{%?#;I1 z9D^4}PdYl933!Y&p|t~YixQ6+3(MD~i$BBN*Wxv@snrIRy^ODGMV=Txx9e`IJpiHH)BNRnWD6sQ(q^5}X%zQsN zP}toL)5wm~zQT@f(2+_{$w}%=(A@TH)*B9)48#{*+Lx5{DQYtbSCgbImfAO2!S@@4 zs7@k5sO(Jp-~YSs$h_K{V24~KC_%=ry?Q2b-tfTK9D-PAAphAYBMeUZPA*La#ar8h4tfyCd%(<<%=QopoOkp*P-99I_w<2mE z5QrrbEr!zlmZ=M)s&vVYhZJR4j_nm6ljYitK4zA!7fU{Mwk|;=y^UjXoOCBI>Os^; zf)T(DppoP<`yyrKx?x1xcgHud^taSY(&7epPc3AQVB?=uwv_t>pgwXuaD(QyL5$ai|ACfDznKPkX zQ%Es{pNLr!W7n~&=eF-B;aPx&A0~zc&89ly0Z=pi6*(&#n$Np`j5p-qbJdB~`*Lxs z^?z4o($ZGcPrV19iFnMrKDEPRx} zR^oH*obbod{sq}I%o|Nl|7*Q1X1iy0&&%RpjwoH%%lDVs7JD;VZJ5+jI6RdvnVOs0 zWlK_aly1&yVW8wZ_cvM35{|2QBWZ#A$VTdCB(e8HbYa7b~ zInu6%B+2}>m*j9oTK}rd*AVg(gpKg8}htDnhRUiv+b8 zu+iGnBvU?49+ym;L}y;lhaFS$TRc`o(Uwuz$~Lc_JhVSE{*JQt@X&*@f{fIrd}GEv zy!MvSZj=|4fR4>oekiCPM#PRR4DuS?kV=hT1_BAR!+4H07sPlP>IRW8}OC1sPiP!p1wh9f|7 z2SJIiE_+4uE0zP*=xQ~jmim5w$z@@SNGExP>DCN>Fg?5+biy`~+1(S}*{)^l3y`|D zQe$^852bdg5V0`&U1}~aw=cwXzGW~y+1i3t8G)ekNo{<&GE4_5hGeCO zX6k#{R9;>FhxhShe8Y0Y7215c>m&5#-hlVn-()&ZUdu{v-J)JLEQ~P4{pX9mVhFCN z6iymMmj1CK=%msld!#%%GejpLs01_0XB04OsibS0927Ens77+BBsJvGgZe4|FsNWV zg!~?016?~6Q$&i!;g#U4dh55tAvbS4|DM=MO#b*!2t4gCWQVId0O)&O*;&JAU&4oL zvmp4LjJ@laW!%>9A#i_o$Er+R%R1x8u@|u|6meeD!zQ)?bAKMDAO!BF@C!5xBsJ=k z*&HFaIZhUWghz3<0??}>6KS;JBQvM+MYs7{yjA~Fz?II#;`?c}@P^gOi zZg_^)KXZBWdD1@`Q11I#jNiF; z3s1u);jALj1MRqhhU!ZFzd8eP<}$!q#0-u5taC&&L;L=7@41)5Ez{M^pWdc5!rH7n z_{g_%^;v=*afJ+i?kL1Hr3}h#K(*Y*P!$>b z?<4uO$Ol%!*A2`t(=X1o8^5yV%7$5T_^6))Mz(BHDh$T5$ECI=0b*SsFnV{!zhQ_K z?tQRU3+6{f6gEq9SY2bR%`C@Hqs-HwiDB{YK5TSu1gk*2Pcpk|lXZFp#R^U`?JwNA zYJ%TFZESN5OvepZ&_kcRsgZ z$cJ7{p{F;rW)o)Fr#l&z;~5n5C}!8c$XAxg1ila}{x99OBVF$wtzJRrs;_Q@!Kn3FK-F+yL~k9yE){ljN)x#rpLK5FGMUdE`@$}$>G0t4~4%}A8LkWsZ@S7 zs^1SCTsaMZKOG@>%o?*M3BfVpOEKps^>JjIGloA3FMH$3b-3pCATc&MZkh=o^iTL; z$#BkRRIegz<#r{A>o4BE5Fd-P9U&qtua*5_ug-Uc62>+YQ9h8t-~QgjZ16T< z3*wTSyn8?X~)2&t${b3J&#hjySBVfA4vAe^?xJ zj1Xu!_9x+ZRf@n`yv7y~Icq}q>|puh?eERX`+PwmL~j}FiYzoNNo@nA<7G%5?Br|z zh+yysBo75j&6iPH4j>|F5oVqg*hOAzrH!zS15=BH3Ms;2BKP0h?f*y%<#z)*zgVgY z-Vaip-!tEL*3PyLw@3L~f`Jh|=)N4=sb#Zvz38M%J+H!Fot+BrnyKw(QuleuOYo>x zb{qu%@p?s|vjx{5(o{KWcmDdVyU$FgYWDI-@gRGskBxKhti*Bi)ng>XZ8`WRsPm4! zr*tZl9iYnxEE8lP|2NNkeAV`Gxb5C{gBf^sA=2u^Co|yxC7WoINFtNBttb;+vt$-s z+HG-_wL&Ww%~xWY5B0)?!^ai9ZXPl5YVP02f^do=e+6jDXca#j1h(8Wzrg9O*q(e^ zuQ}{oOEqBKId)OH&2;8(EhE+wkYW9IUM|1NwK??yWcyZJfE3)B$dctAY)7@EdHsjk z1cf?AyBlV|hA!c-I}LAX#Zn`P{wE3XJTpRrJb`JwYkzeb0Vj3;;JMD3k6-rMqQ=S! z8+4(MpUP?%XAZ>>H_oFKZoACI32S_4UJ8mm)KXLIoh9uOjSbZG4m$7CV7M`35kq}| zn3}wP4Cip1OMn=rfFxAlt)a!?@P+x#zhnY>#p$Zrh1+tsPf$t_9-}bxSsTK`*O+^q zOw#qyE8S-<7jplNe8dSU+S@j)%U+Ce#xegdAzMO(1b{wwg)YNBpn-XD_jYsBaV|%rZa~xDW4GOz_Rj)$H=7x#)?jm#lJ@1M${3l2y(VN70R=EO@7fSgw6-l!-dnPmNKXwj$m!iFr=Oiz= z{;CL&CH~^kU8A*aa=4bO%eh9zNPY+dEL{wDGH~fIE=T5eWS#nHPHEZ6AUDo=mF>k= zy?4?w&DG(B3YvyEXG`X@{2d7y0C~{HK?YrwJGjB+9DKR?{Li!<-kUr>0=|h89?>}tn-m~xtv!gw5KC8krhD%4{?bOHw-z{v~Lse{-T8<{fy4M+IX>F~)E z|D0Uw1&7ajo*mhRqPN$5Pxsb4uZ3c+ej?_=a4D>Xei?jx)!*>h#p8Kkx8H3RJTOf7 zgOD))+kQgvJew)AaNN?iUzEw^IFPl@(K}jCMxSk9%^o%2Nar@Z)ZP~iT(A3Xj{F%C z-pFn_$i>ULG^_0z;_rE83bNfUo;USLJ1TI5L!b9wQuIwed(pcy zo8NAmt*HSlRBL#PL8-=n0$jaF#2tmWu<%dwv};T+qiAV)<}h)tTIRo8op30}~glN-Gr9^aZV#`iR)S2B~y3voFkV zLg*4gr6mz6%46MaG{?XUUHUEaX&5i*N!9(!7f8(W_EXox$y%_2bJ|L=;ky&y zOT+rdF+Y1Xi|Gfc*xB*GR9{r=)ngDkjbo{J1LY$W!;fCNBrMSh-i@`TooAwD>*&V# z+Z`&lEf0jTRPVj_t`-lq)KS<20354fdE(C$pJZ%H5rsnTGzqioxI9~%Lc>Isf0YIP zSuS0!a4vy2Ji|gFJ{X@pC}g$|JOY24I`96-=#yN*g>Z8&hq~pZeIp8r zFsni0V2ZMilWLvs&@lN%(=Qn-Q0sWxue5wMN!~N&@L8s^(hcboWtgxXTJVaTxDU1< zhDG(V*gm2g$eW+YY3kHz^@DP%M(1W+u!HW}IGt=bzB=i7;qyCY>l2dHCu@%{g`|;n zY)+c|K9}VZb?yT{Dp4GePuUX`=IlVs0nYk|F$GtQ+OlKhx=4l=at>+M-ug!By$3Al z#=rEpLiB}nOcZV&>7CYFA@Ffb?9(t$@{Lp>91q9K)Tcv(lZK?w#~9v6shTMmj<4wq zIU5%=wl%?uNT(Vo>l9q}?pQ`+kXDem##SrhY7{w`mXZfr z(A=`)+j$ZH2t0l}tBL374EP#$vm7Gyfcf%Z7I1--|7IKft1%htoGQ^;gV_ZnQMMK&HV|c`?YGm17&nCRdv>8XuzNX_jF-ba5BWLN9a zQ}BmuJn^txM64P(Y;ZHAs5$z- z#^*O|hH_+wY+&Db-h)|uJu`$CDDRto9>TR|L9tqT2EufAo(*j z*NqgB1PF7F5#{yFU2kqo7Yp3e2;B9&U;WVvKE6jOXn$+-?i6ZsyN}SSTCd6tUO(Iy zF^MNs%k71p)^KbdU1f_?kT4xZk6M^UtLutC`$Vzk_k_5-a88T(5qOh0xMNHv9!l-^ za{a-TkTlMLfzS}Y5CK(@sC}DIc*#KwdTyo-I?oh~(YTN5yuH)ifzR!|CsO+`ANNYx znWj$scDWV4ZrJa|9_~1&+D|n;{d3-Ao#2;&b>3I)O9Ev~uht(Q41O%Mu10pyFZX)( z0tftJFGMDfUB|#h?hx|YrT}S|;E%WG_24_NzY2f}YFAKL=oWIvR|6y#f3=x!HsNM! zr1RFu5DM7x>twd3mp9cjJt5U%{*0iv<6{8c08O$K1^Z74K)@nnCN+!{es8h3%e}Y- zz)LPG8+J{FGG6XNILVen2JH@RXF7>HQ8XG|?5#FoO%tx_kF<2VlP-VUo)UCkMSgbt;NgdU=@u)66QT09+j!t; zzYM_H>_RIV7nqg6=DRp?Tk5?i32)%i#IUxP_wHE6n zb+;bi3bxw*2s&Tvmf?PTA&N&az_Uwg9JZJd_Pk@^@0lB1^>;q5^EbqZc(>6DPyt5) zIe<*P)Z_JfN=#a`UQGB-+~$<&6p~hH;ZcMs*Odv0~%6-{obZGDW>#m2hT(Td3 zUBZ4j{eBJCfP*PioxA!~nllnbc(K(yeoB7$V2x$un}-t$s^WL~ z$4H}$B3!iQ5ZNvJ`|^cmxJ9+u;#OVLDp6-<&T4!thIVB9+x@I+t~$_e2Dh=$kwr?FPA4N zPw&PL4l#BgjO8WQ`*?@v$zzjawfDP@fRfcv-Vkqq1U89tzw0j}kBRR;=-N?a6ASQw z-SGVGX2Cf-m%(7XpC8zdo1Sonrmsl78@R_NoHZW+0dT|P>c_PgiHS1jI^I&V$gXk| zAD8ohwl66s&m#OpJ`#gwQ*-@7lrIc>zASQ9ZWCw{YQ2l|eO1hNuIG96IKIPOl*Z3W zHZfq2^s(18NXSJgniTyO5~pZ2x$=og5KswR&&Np1_GNeglaXDQs`SZ1J@4wxyq@B_ zo!`p1Zq1X3pv*`kaoS7@PI{AAu-l4(F&aT{0g40 z2H6~iCWo>WlN_A8BqDx1Z*iSgYV-d+SzCoF<#GPyjj-QT$7jx$zI_X_yi+~Uho(uR z$z%b1}b6jtaDFmN*WXE05CT-ZhoBZa85oq5dMoD=D0Z%K=(ESScr~`0vv3^$#TM~9h8S-n^m)5@`EvR=5qMW{gvsfDi7@A zw&}xT^>R4B?q@Y@!tYX_8O{lGGA>YQ67-=WqHcV9zruzS4|PoblpAr~U#-$-jI1-u zc#VeGHY{gXDyeT4x;#bZ9@prqL_$k7hNM=%o-9;~T_(;QuKjfMSbn9o0Ba=TL+F$V zv~WkmF4G(qP|~A`3L8&J(MHo=C}b{69v2jU;diCh#(w8ZUURFD_hT?qu#5uKSY@O( z7}Nfdj&dB5C(ul@f+2{AY=!6wo4H{eu=|`GMHfGw3{Olh?k)wk8$P0n_OY`^it*E9 zL8Y^#4YSxUAoBbNuS=9wdB7u(H|BO!(qe#shqbAPwp4bbEu!3G>SkS}?s&J8(|KpX z$?B6!==aku>qZ}W-A#gKw36p;q%;51+lZ?cXi#N4EzD2yr`pBpZ4P(pHD=6^x(&+J-@HY60kL7y^3#^|-;Mi||_;iXjT|z8t zN&VUAhdkF!DgQOZ_wg6BqH2PC+beW%33)gCr4V131YNbC9SE@k0%x_}I~G8H$W?=&91oj-MByDGeAsDg zf!ayw<%eeIVl2x?0Bx_ONJJUB^s+_WH=Tz6~|BnDvLuhh9+Eu_GNA`a4s{}qOQUWY{APcFAO^PkGZeB;NKY_ExzgK>SE zVTdRcU~)A#331k;Z}VU1*n&JD;mJkAKdDB(+YMlIWop~w-3DNb-tw!2oU(giO6*G3>qv7rCoM_*l!WL@|TWyDH@K*&lNOLTaTEglS8`9 z;>c7R0wddYTgD6GBJOFYs0}MpV0dYw+u_ zNgaAYp?njK_>wm;{X=t#`WMVoXx$fKYr7o`N!h)8A90H{JLR6}Pb=M}wL-uN&E%e2 zmTt>P3rftv*ts(Kl<?aMO0iY`4w{$s-LxlcuBkzS1Phd@zk zK_PVQ-9m-f+x!x=T6f#`qm9`0(>GndKh7H?Hpc)erNoZp_0+^+(x;7|u3shl%cF=; zTk|-ZXH15lrbsrei>!OQVdk~nt`Q*!7&tNSw83Od*qakRh*ERNEBBH)$mk?zy`pX? zu!A!PmK%@vzPJvCMEOEPF1C2_t(-%fB1VSu?PMm>3(XO%FnRPcKwrlZ2o!PDnZs$wkJ1XTAHXbd*m(g?YfMI(*t`4l z@J(=S40@IE?f4)wk%>=3;0;>H`ZxT^hc>ETG^`?rdIyp?Dgg?TR75b@(Gg=XL_Rsu zQ#77GJjuYY2Ohn=;^GR_q*T0Gp`Vo0kpD=jC7Ryf@wbFqeDC>3mOj#$jqrV!BugMU z??BUYIH#_LwmwJbUw-J@nO$~8t^UB?XfLTquEXid#E&mtQRo!JmFoB@AhD)BY@>2L z5lw`lAt6MCVowYQM%);+?7XObSc=Skn@Fq_bhsP-2rzj%tUBl?v#>!M64-AO3&Q(2 zSVi_ZTo`y<{Mg@b4c=z?`lWJhDca=LBrV=Vhz>*Ti0DA`?@uXohrDOB6;C{P3+5eT zkXrzZ3I?@4A@w{;SkQ+i`D4^f+*5U|U?(-+(eDd=#Yg0*QTlr1B$suzNXrH+j~QpR-i0` zlyo8kO5+*(xylz70`WtWBt<8}L!_7b3XS8+!5NHy*RbH^*7qVh$Vp z#Re$99ybWje9xvC7?zw@M(7yuR)?S)3;A`M_CugYh+hMIY<_9opI$EKn#41V!B#*d zrTY1J6>5xD%M1VahvNIHmo2l)W{(!w)@wLumAG7Wf#6_Q@T4Sa4E+pHhuD}$EaoZB zMo2J^{kJ&yR zlJm~YZ8^F9R2(j7tGDj~4o+5RWbOveL|OCnqf)AnV8?QBrI};;38PFiOFZI>#YCwN z@RYDt`N}EE#`X62VmQZT&w;++=;UTQV`8`;jKnU|1!SI?xn5mI-)Sxgz(E&o5A8_s ztZi8rH&G{oig+OKPgEvDwali2v!^Nr&MJyKpbE=q2>?vO+@@Q$POh>mW_E7zw+4@L z@x%L23B;r=o#Eujd(g?B*~LP8ZdQa1fJ1(0j>yV;wdE;K#N@ z6Kl7!3V5qH4yN$}Za(lkPa#&gF+GHP>>dcn3PRbupvC-xm2eRP<(R75lvMGOE z4-BjIbF3o&*xCJ{<$zl;%53u^`d8HP)H@>*{_uWl+}eSR+EVx%%)`T>%0oEEJX%DJ zOt=anKcT@F3J1N6NJ7m$4A-m9v{UJ0_QY^;M(f*SCyd}VrPHw#I=JAAs`AZ>; zI&2AABPP3Pfrtv;4dS`ns?dFZnX&gg!QmuJenFpSBbDoJju(4*t2vE7-dcbTzUq2S zPuz@n*cOe_KZPJP^_kCfs}Dia@Re5$BTsRKlpGb#mW8OIQC$rwsil$ASI65c13Z>Z zkl`;QS+&WvIJqt(fyKIn`Zi-JYnd|jQleN-?|Ab32 z^gca)i3HPB!>sKXt3yeq!C2~z5=a44=;M+T6J{dgAfojwf~n*$D}CCSy%L#XQc$RU z>5VL8=`=Rizi?#{jPlc>;Oww#Bvt;dRN|m_Z7UYvVh%McS2h50-Y4fD7KhKIp(XM5 zl^*C{T@hxTP}*k!Oh_TA>S%~`;EGW8M(tv>$4~TbxMIwm@^uEunNeaxS>n*;Y$1pe zrJ=fp4z52>`QK+U-5ff(^j)XGYejLh#?`0-GOfG`>_X+-(x@jb8Z?Y_;j)n_|(wA|kQ?=$-1 znA&XD@nzss?EawGX~5s|>dvOtg}l>vIdam(>kqbV!Wr@WT8@aO`|*Sz>RX5&xKhzb>5H`uMU!Arqj7?fr{qhsz`OpjWc@>#m#H;m3HC z6TvjL>_ZqPlD0`JyrEfl-*D*xK%!J$D+Tg!QvOur)xKNgdpu--ix7{dJ+{0ifn^p? zicuphky(nXeD63eZ~|#ykf?lWv2i`9L~z^JfoF7!m&`i$kC<}ZCi9_BO0TCIBKqse z%%>O7Z9%Nniert<$9`j{tj<%UWP7~Vk%pMY1IF46Qr9PIGTE1mMesbXj3_efPIUUM zuK^VJ2Fr0dMj~<%*kCDxA(Ts|TjT5bb+R9xjOXUEo0JVd(y$0#4IA6SYk;DOq%Jvz zNiv2fO+o7tRfV!nol>*RF5aAGBy<=@tJdy+w7b90n7^`x;NRxbBW6nTE}*$qlPzi+ zLbCrrqa-(vvXxyWt#AA2pGUwQCH91ELJ#i1C85Td(asZ(*J@%hZZ&2OkIqH68U?F! z_cAVfnJOh`LP40TZ~-<`6m`TltzpVqF^_x?-)eAYOY~He6C@}DFLETZlcd%pRs<*e)niZrclPW?@%5ixmjgj zSG5-{HK{3Zx&k|44D+!GDG+-N5ABB9D{1W&pGfpMcL0b3@+P;By z=Kxc}r628qgdMu?6nYJrWHL5;e|c7ia-?u+ed@84plteAiYt}Js*>;-*K|31)ibc! zvfzLB&%q=YCBhl!yLWJ{e?F(}-)t)poC_d6UArqoT_B?s9(17!IWBX)rePG1`qU8g zN#Yi$q4oJ zlx*$T{u~paxv%L%ThiTg)28x!_X_agWc(gmQu^m3UyEvA0RzfL1hwrv`vqA$z^t>e#(8*|Bi(i(j4pC2&D$yV}$5>=uqH8<@xusSRJs|D*8G zxN<>2BkQW4uxk)GM{zv82H}v|+*H?Iw3W___6a5quufmmk4obfsU>H22}TgRD*Ajb zlM97LB~De@1Bor&4+c(%`xO+w3ej&$(T=01)@;N^5P&%$rU!6BNx}!`o3LGNM?7wZ z3A!1gRjbSz4$aj|Jx}RfKNl9z2eU*3EOy zA@C?^poxh^Xixg+=kmCedzEVyIo#Zj^U@NbdQ8d#sK@BWR4q~ho>%k!zbK4nOwC>; zRL?N~aqv;WTk_5NOUxCBdel8+m_otcfYscK?5Rn|QS{}@pG`M{sI9ilsV8kVd?Q(k zZ28z<_zCow}}_J>_ENj3?}qGyEJ1I!1VwD zP2>gB>&OIA@_NI|AQX74SYIuv42k@~*;Q!4p3S|;y2vz@efx4+!ryhF$-n$aO8KFz zkWv}oH@bW5OF!eU!ioHJqY1(aRlJSm2LaW-lSlXB1#gT+5G0wuDh> zKIm=~frcmwHYb2!kpOdnv4l%|Rdd3(SFto>NWj|V?JwqymDfy*rnt4RP>oAJ+2oM* z60J(d>6CDgFf%^WW35d}rRDWqSPnL)>4;u9Lci!zHxA)Uo*5Y*>7)<-*+8Eg!)<*J z^MHNJtBIDR6~()!?$ix9kY6Op3SE>C*EdgPocd3UB3t;c7QqBk7p-p|y#qQ?2pP zAEf~_%%@Mqg(X`->QUQ7SlM-=hLcfC?yr#Xs1OWFoAF`|>Xh51F}8xKBGFunv;4_S z9nGH3TXvS#Gupg^AZvuZk&aDzVwjKlld9u)TlhIvwuW~W^iAxinT%J%mfmF=A13R& zHY6HU^!#x4Ny6?>2Hp|ErXXdP{d>)b%UfiusK-k=Zny>9A4IpF?)||#FJy~q-43f8 ze5udP(eXwEUuNaNRVhVkDa!vSF=GIYR%lcYl9)39>?Hp>a0vhHFmfeiI{wBg(O5@T zh|Q#cQw4wfOGYI zmS#UCrUjTdN|rhDVxjG!^TbUc{YU@$6&Mp)06gBi*FSn<@c#g}KuEt|K`NJtc}97! zXedND33(3Yg(m>nCV+-v@4^PwzWxT*zw$gZ=!1I}g}FI+7-~Ea);D0%6s-sD;-2^2 zi*$AdZs6%Nqa+mqG9LTM&=Q(m{K@Eow|;Tzx4u^j=dZ0 zbO=WuL&gm!_uv6|2n&*lFj2%EVoyHlqyv{Fyr4ml zQVqO@0|!@7d*8myJ$EeP(*3vM?Emsv49>l!e9(s$mtYt6dcU@Y%~!sSZ@l^%UVZK{ z{MEnyh(7+r5j?Qi;+~d4<_$70!FvgX8F-5kAX{4c&{U}+(KtCyUC66L@weYB{O8W+ znD2=DmsmyOBs@t}frQizmA9e$elKvpeW4J4{tL|ZB+6FEg*u*RU7B4R=wr8$p>jDZPrBNNC(g*;t&h^U|d z^O5*vL!g{Q&xAmNBt*+sx;@JIinJVF7oNr#85<6}G*+YtuV4>lNmxSx9(^Y^6N9@K z4F1*~7JHfz-iqfiO6{ZRkclHzl)hR)?&xdAPP;2g9}&1etQlF?e6}!YL|IX`QDY}X zBV3lAP=K75WQu@m$pf&0C7kg-cjM`e;F{F=3y0!8^3aBR|$aAqN zJg{VNX+X0x0+>=c+>DcsdXpSnJdTSIBd-J9)0$QdC<^c6CqMPHS;30AesC3s&b#!I zQ^$?RvkKaBPn!}A`kfriL;NhQ6|4(%sINAN=OF|} z&bSZ<-eA^xEn47-JuUm*UwKSl`1phR+}AJji=TO!H@@->3^r~k8xG;K0W{iHaqcbb zoFR9Rz*sBDL-LeJ!vgfVL?b2*8ACP`p)uc4vb+zSJMO?o{@UC5@%J6UyA~6`du)uw z>jja63^^r}d5;vO>j=KnffNIYq5+XPAQM%1QJ%_!ER97N@+h%jgCYv2-p(MLjd7ls z!i`%Cd(IrZ_24s|J>B!oaihO8KQ6Y`uKUK7BODy<8VpcmTfMX6w=Un=yRrVxVtep$ z3`bpbI;1DK*+VkUb@-9H@ZJwUfREnOBFAH19wm5dXmqs)zcmua1(Z8Q{XAs|IuDL> zBF{WU`LsnOU9!JD#_HEz$NE=agx|a-bMPoQ(}Apo3I}Xn^B4_HquWZ{=B4n$edXSn#!9#Z9%nZ2b;lrAlGs`$KQ{HNaUwQz>6Edot zl8qScZ;YVG!s$PFomc+od1SA=h+=+^wJVEAR+fQYAN|+9 zg@5@E&hsl@xL@!7#dqVsd3*^gE#mkrFx!yn?PSc0M2<-~8t=nxN0i4`{)hy}9{AEF zk2kJ(&cNW^cc%EnT?rmqHb@MRd7>JAaWbVY(^w_M1v}t1lN7M<*m&rr$&MK4KV->{ ziD<{B2hI(>UbtTH^-B)952w;Z$j-COtPL=fyn;}WVY-B8=it-Ym+|FRHjCgm@x&bZ25p;p}gLPlq($+BCp)TLomkS^?AdO9kgiJ zI2|qhpsL(G%6UxWj1kHy|4(I7+@!YzeMmlvyJl*i4tT_KSizsADbwWqoA~P*xHs8G zuuq6WHuymBzuB`yoTemAYg&I^fDtD^Yy@DAFM`P`%($`Ba!Bqb>|W6%5H&2sM^=cp zErAQh+lwwRDpEqO#Fw>;U|4>yL=U^jpq$8GLBJRiO=IxbGWh%rk4po7* zkIZOxE~N*NheX>l)DJFtF;4(lCo`^}IVfFNeK$-%L zE;+Z%<}J72@I!}j|6_;no=5iSJu59PFSe03EOy4?W=^=+UZ$ZlK_Q?Z1g}X-DgrT` z;Sd5#st|T^s-J^{oEQ~AUasF^IApu2M=LdO!!dWRZowk~jX|@K^yc?2oNF3h!1j2! zJzkq>8$X}ypJ`_77435yy{$~c@r~_A*H54Sm25EjfCsyNX_*Edys-i9Y+>$$Kj}a8 zb9eI{56y9Nm}z^M;7XsoJ`npOZ*y;y6`qBQpp6M^`cV#KW55?4%>_fw81#o@T>66- zu>G~K!)>htM~=g^8xT{#d2qA?UAtt{2j7jk_rD8Ehi5Uoo--Q)CNZ#SY6YU02bm+IYu=8hM$K`z~4}S1&EgWfa>$LaT*id0& zrAbm(^r$H*&Vi8QqYE?Za-Wh7LIwZeGS?ysje=q*82xY}JBoMkf?VHVl#7@FI(z1D z^uu?db7+>=zHtaUUwIA1<_?@SLL(Ix7rC7|ochMMxpV!hEK7NHQfdc=*>_FNLVtlSVC@PqHQF-Rl#O~!4(a_RTG_s z_teBqJlcPkjdTSR`S_Y7RniSS%B-|-v*^n=z6WgSq8-!Ya-eWzg#AqWoE7f78~ccz8ec8a-H6LYN=mgc%x+&in4 zeO>I^(?*+80cx0onS;sWXC&&TiVwg0INjj~| zNvE-HsdW4L_JhUF=pm7N)a`^%{pxjCq*{E}WB!AG@h)@Ez4J&@!|P*eb6|LV2yBgj zK>>_%u*d^L+*s1dV_XTMBg zYrx7K=)Ub9bnn8-*XACXz(LOR#;90W7<1q36$KIa?TXLTFo#5|z z-^@JQ-S4d(C;){WAOT|GE{Y&U?IN{UpxkPAgx%94MaQ%?Jrmtw_ry$~_@QT}JKX)D zHSU@A^tkP4+p<;GW=obtn`D6`xM3mI0#K+bRH62|`@Lt&<$a&|@Mh*Yw*bvpwj|PK zJ`n{}-Q}EIPUidM|M@RsVko?me4HtxA;gJdY~XOI&*CILlgxLvr@Gmu$N5u0!_W*4 z8o;QjroNBsi3j(|$p_vU96jAV-QB!XaYNBz>R{}py*S7I5BIRQ9%OT=%kJw}baZK5)2)Gu4Wh7dzt6>2*5ty~A+Nr@ z$)US%rFHNC-Q_tFn zDM7*&OomEYk)c$g)t1~g0%J;xS6|KJ42Z$_3A~4(YD&Fay<3WkQ4=z2YeVRe3>Pf7 z)mP5gqE*hll&;z$Fm{F{hP&oP_jiTFsCYzOZRHeDp>n`KF-sTGJ;zvYQUF$35-(F& z5mlmEAT3S3N0sI`b*_|p*Gn_>@?p~G1TC%G>{5s5ofhDV=FZbpQ-4li(H9V&f+zN2 zwyz>dg1u3=nbe!x6y_8arygUB9_9f!_DQQTTRN&ooM=<%n3FEkGfP5nuT(Ubo52T#hqTt9g2 z!rI5P+&`+uSi~vAp^0N;>DC4P!2XzC%jh6QT=3(m*RvA$F^K`^>jk<@L9JN0qQ3q> z3tj_YL`Vn>qny&)NR2RdXr2ekPg~Gs3 z&h`@Nwj(-`p%+0HFzPD?6dS3i3u`aNh?*$^q1Q>83MGTO41}+LCUdZnqU)*XZVqVy zsZ(;QTvKSZL|Yx9)%C279H(Bqs;_+gG}-DZ(n*j`3+LVJaBb(_e5e1uVw`up^AUyk z!dbNx*J5w_RO!$yj3Wrnp>*iNCJ zDZ?C!Lh(*97WJx9I z^@Tf~w3Dsof^Dh+jGAid-?zs4#0gHGdfIae-pL=>`LWO5`~UvtKi)m0UJs``!^4O; ziCPfF!t5;MV;#NuhOCMs+P{xmpV((R#;V*vvtjvEZo-qa*C2>CL8Dd=s478{R3Yw6 z852)=#^^)~AgD|!gG^XKMM46*4SlxDh0Uv;b{Aa4-34vk`G6dL;x2B;id>Z*i%T(!GqKFKB4Q&rkutkI zY*8Gc_s=1A-d2oVEj)FMyPv{MN@wRf=d8pIq)gxmo#=E8(-Y2{C6CSY!#@rW$2b#OhS6 zT5r3r!&qJ=M7 zL=9l{15wR%^?O!d03Lwi5j?9q))3ERss}K1!kj`i5@aD3osE=~U^OD9YL8KeHfm?9S3*{c`00S(Bsz z8?r+H$W?IVc*ttW?iLYOMv8f)0#U0)TB}|lGJp{yUhqCJn$GWfRFv2Xb1kEDv9J_} zMbcsrF&IP*2^PTuV?{?m2C`Ks!&GIId2(;mh#`qZTBaJt7`4GuEHHje)og`p&J|Uz zDiokQ8C)B|R;FZy8tQQYZ)80C;)Z|m#J9Qj-7_MpM9T|aF=ShV zw#$nS&I^%ItW~@ik41BPs{<9UUJHb7M~JP`A1c>xnE6K@(+~Xg2l?60-699FOwa9# zULP5I{RiJQ*tN9#3eH5MX`0V2_>z+=2=VGvQf?df^7sz&yua> zTCAmzr%K$Z;z>Lz+0ONy^S9q~-%hjk{hK|JHHV-9jGAid`>+8yZur7U1N*{_>iBUF zkUjX7^uV15|NiQmSG~*Ke_5oNRka8v3=)=>gu?6K>_sm9KYw2&`7F0RxL>;ak?WTW zTy9k~Oj$)#)Ppw@tR%G9l`eX^`z|xMDhs{xKRT5!AJ!mWVFRd&NSQlU=F1axEZ!-@ z8xC1>L`#vb99@w4zxBSJuuVR6Rpoe4j*%@Cne$ z16?L@*LVTvYEP`{nQB^pR_=xb49nLvuZl@jXC6(Zq)7#2>J$i8>jJA&TmFtM53B)6 ztQaxkjUwW`sDy9lS&=&*H_@|AHT7rPZwtrkKp%bLB$g*Au7Moeo^w)+j4x;>R!l6S z>Q%bN&@;ijKMf4bU^%Dtb7&opS>KDM$VL@W)|cS1RbPex2x3$+@0>TrM6nT*`SJnH zrzN(Y^j0y)PhwwNMNfQQTp8*#F~OcT@owq|wpaTw|KZH~&YAl!pS}El$P0g$;*8{D z)t$bWPEYT7-%&pMiKA8}VVDK%pk;y#%?Dc=F_UFnDoUJl!8kwyn&eIB&Z@R5tjTUV zFN+YFN?;S$R((bS!8}PY2u3{vuk^>LRjqvmMU}#<;DlI(!U|4QyaxKQH6m6F?bs44 z;#DQ4be9j_1c4J%3g~N#g6a<7gI80k(9e|{1ErrMg$w&DVnT3=4=m=HdBGdy#TU2u z(m#Dmcfa#BGv3*TZWr0NL=jsng)g*Fr-c!TjEUNjlPD6e*donU6*W;roWv&0vM{6C z*b=j|A+3iW_doVm9yg!);alZkp`7kV+!%SYGj_3le#8ML7A^DBX^-u`$rW>JIoqOl0xSL7_sF=+4Gq_=gAY zYKCD=HGol5P5pb+gm^0LkbJ5}woe}alzZ&>bLWT4{Xf9U{OQ;KEkM~SWlhDB{x|gR{%wAh*Nn~%fwr{dSIa%3@PeLY^NFmIfSC5XotQ?MN4Xp zDYt9NHz_E~!kb8tRD~Q}nOISwbsM1p;4w9VRqF>Uk0Jpn%_cD=kf&ZnrX-2A%*#w^ zz?j6q$rQL#f^mYNg-+CF1j&e04iz;3HucLAOrI*c`X2I{AXqaovo)stSe9CTnMRB% zWU71*Q+XJ<5-6&yn0yU6l^#z4XZ4XF)`sJ$N_)05H%Rk&;Bs>#YO1L}s}kiYh2!C3 zJ*nzWegQfDNhIy=M$W{ok&U9UH+IK~NfqhEqRv7lLgB)LwDkdmz6qtNSd_?QFfh@w zmL7Lb0^Spe(h(@UG2R;r7dVGAQ3OV23*$Ss=f;Z;VGi@)6ZjMGZst$}7X4rYpoo6% z*1z2Q&L4d16FWCHe>L46K0qt(N|B0g?ihSq?tJ22KKRq`=fPu(B-UW?5=Ba4f^}i8 zC6kE2CMq0c<(lkk;6){1Mx6VA^{PrWuFkTPXwHV05?;2R#H!^s!-jUxLx)RDM5xdR&=)z8JGQvQ5CO3QT8%P z2W(du2%P%*6?yH;XLR-XH^n&v^NS*#78=EPHAp(NqGD{)1uevn3(;Z(X>Ra^((Q;^ zaL%DwVc6aRmr47;AwKe#ALpSDAE7tb;(8y+oWZGKm@C)EFf0`35s3tAj37ecz2qLU z0wgxXv%+|Hm$mPnm#wG2MYg#G?F5omFjBJyoQmWrI@%<@_kQL+`Uop`FQd6ik$N;o zY+|+Df;bM2kIsu~X}ajkabd_qDaqg_oIY1*@Kj15kA(5snq)UNz#6>mDp_9ygXztZ z6BRs3bI)q30gRez>ff*a`aLP5`uy?7hmZY@=U&-dT>VGRXNN``!;iW=+mA6ylpw7c zVZoxZqy3l9a%Eu#CzeC+zlF{MWIJAptl|l2{WgA@jsX+MK}rmw`l6{)uO@v{ElpRZ zGrX#h2gHdO5llHcQ!A)f@j19$@wup-F|_9w=^k2;-W^A=ypYrOo@HSF9w%pO_hr3Vi3@ZHPYab%JCeRC`vp5@3=hXcKcxkN|= ztSVxp#uQ5AN8MCnSA`PQOe<=iftr_UYCGvE6GtZDa!Bc;Q9rPhY$Id>I8B*3yD1M2 zoqqp{`BMkfNgW|AS|`H=V$>9pQ+Whwd5X=X$Ixl=m{QW3OCN;kePMckrub%}H>cT8 zp*__<%TBT$_m^xVKV<+Vwc&a-l?+ozrp`l&X-aj>D9;^!!d@y7w3>NUlci+ud8vIB zs_%&eLX)+@NK(B`lDMZruekv=)zqKknpR%3Cr`p7GqbAwvG)>XBaa^yB85V3(2{|H z^Ah-yRnk&L#n8#{LZ$(InYv$;poSG?jk8Np~#4%L=S)HK0f(V56DM8c!c?x7FjA- z4c{&A_!*?wcLZuplnW|$GslTW< zUzg<&sq(d~x50z}wE#dd84gyfx$arB>+hqXx5+$=JfseW1u`fCWm*hskPt*+Ac_%9 zlDxZ4dRynZT)uy#{CLvQ3b} zL#|c}RU}er%?YF30h_O0(6z687kBL%+U*G4u3}7xq(y{m1cP17zQfFZ=zYvTd^?G? zGTL%zCKwZ>eVsPM5qJk_rs8cle#Q&F47~Lce5z`Lb61{^j-f!vZ)}KL-&EoVY!sqY zBJ1OYxg1TJdstHqVANDoKS=fbfAjeE;p6}Og=0$({!eGV`dW9iz59d?`qsoPh$7K; z8xm`{yvoj3Ur{qI=&UTr@~s`z8C)T%E~L=Z;xaR}kW|yDvWW@uEhdOb*(jJj2*n0LYi`H6hy6&0N(y)-P|X_ZcqH7kx8>Js zhSr1|H~sq4vXQCJ+1|!@db_Ic?>!y;}D$GdVtu&lQzPtp}^DwgwP?itZ zf;ZM+Z6vn2%QV&0pFe=K?>AM8&PFlzvwe&1C?@q~{AQX5l-H`%UjDu!U51BdrdUL3 zbi#yWiY!~Q8*59x$OsmsU$PwlZCgBE)ffhCp|24|B$%1#kZf(klP54If=IckrT}>I z_^Zhuef^oA&W7WkcH=B2X?xw;B8nnb-gl4w$bbGLeD=OMIo6Hn=R)paQL8`C5cAaPb$7kqY+lG!&Sz1JQH%Zc5+r2Km!~12nW!U%7LA~R?W$roH!?ZdW zHC)^p>o-na(YOA|SMk?3MaOA~Hru#L>&Q{={PaWo`2Xg^Ji2079jLC4gaVQEFL<&`Fgi!`NJ4!mF z_1Mp`^w{lmms&Df^_q_?CNd-~q|*~^wS#2e7onLk5vUjSKJ-`B39RmA-h~f>v<%UV zQJ*1hZCiDx4@oP0YJ4F!iqhWl{FXZ0xVdbbY5=3An)<=2E60Ck#PQ$%YI4hgkNG6N zYkXz(4&UEaGt={8TA~sQhY!H&COa>l<=h~Hzy2f49hoEQ8U~lp!UbdN37wfq;!Ft? zdA-TMr)mhM*+f&I#@?s&3D}@Ffl770SZNwcq7B=6%$u{i>>Z0G$4rS|(X~4^6qN*Vtu=uIfZV$krIv zQ`k-+vCxh}zmsGzE?^-E0avYPvV>L4TVJw#Ot~&QQ=4_k6d4F3A!H&plitfy%H*k- zOjBNowS;rpkYFlbqm-~$J%ulWL5zeUlV}L!GF~Y>jB;VeK|c#%QR>3)J6{jZ5ECS7 z0@CTg(gHm5dd9c@@HFRs=c|kcV{D@6AjMr9!pdRp{>&rt_{Z zRt)nYm0rK&3tkxIq8f{l1T9irTENUQ5B$PM`O#ne06(;%+!zR(BaxvK`VKCv!<9`> z>V$Sz@Fq;3yobDiECm}wdj{gf^Y*vbS^x5j`tb22W1EYX8lB$GfnM z$wDSmsD#!A$@(r!q|oRGf13%YAbXi7&Ow$zz7EAuG?|HrXL{Pbt1EXeB;5Y7{R}U? zj~j38uzO{f;gv1PuB^iL2Dl=G)Z3UWZj(7-`$iwLbBc`%*SNIQ;hXzrIdEi!#oJc6 z|L#Q|KDM9_AL{w8!9*ocW;~(>oK6DArfDaBf=N^eT3Jl_A4?-pYM$ojCjh>Sb0G1b!Ibm2pKZju$z^N;*Q7xOM zDk(MfXzr0D3GM2ummDvB`K(@e?jmW_!`czLyCr6JR+oS1aenrv?%~4^?c=T^vn==8 zssbAd11E?Tq6ALudcN`II_I8#S+dL5@PiagOuVwhu^;&epZv*t6-Vj zv7r=Jy7%3|@@GFncd?5fD)|VEjc9d+nJ#o%!LA|C1E5yhU2Bl1d4F@@O1RniGRimV zKol3U`PK%->XygnLEGjWSc`~UpIhjDrx>)x*P5%hsRl4=s;M8$+WdPz{Yv+*{8nsR zcEJwEKkJ9ZejTL=VuBN1w-q8bHn-V&<`l${`ogjD;1SwOpj%2d^mr#Bjz;&&(*&I) zan&j4^<(w~SeOC>U&T}YIMf$-6vAZJl78mIrTx9;? zJEVJM#P*c|JLfmFfBG`%rK@D?ee#_gpB6wCvRsP{zqP~m`WD+pc&pV$X6NV}T;T3w z^L*gW1s=I`ABXR~g}ZN^=g3^boM`YklBwwq?q}u#>YL)j)q!Bu8V06>5 z-1C~{&&qpXL^TLky~flg?unU~DW8vtw~v%lO5r_xoBU*dCbF~=@bfy6x>al`nR=h< zclLZHbPq}G-M|sGBuz`h?7eIs*^@*!Ic7RJ)>D|2P8)bvz*g;VQgz)oA8iSy@WwU~ zs!cWZ7q*5yhS%>f64h5gK48$>j0qU}cQ=)LXNC98AhV+EYLLs=i99;oYy5lPnya-% zCv*t~A@j=B5sVcQqY?paqk~xdrM8$GMb}yZpKjxiH<8LsP1Td1KViPgcxEsfebQNb zgt%OBikuHTc9>87(5>9PXn1Sgv6aHeE4dT0ioq;s+aQSz44{e;q@~|a>H?$4O8^iO z1IA3&V439fVGT;~;UZVqNs(a|{yo=%c@Hx&v`qkYj7|nVHTc9t?p~$Jx;o-a_JmtPcym{qz;ie(eqV=dWQC5lQ>> z4lZ)%qj&SeKlTWJ=~IU}G-D8jL17pcp6#)a8I@j7^z8z^{K9p<_N6yieeo^W8G^>l z-Lb;4Pd&&-f8hb%cY9Y`v5~7opizrl z!Tnv0F=C`nBU2+&$vaaIB!2n}vIjJp>|7y9%CsNUv>Z!s0&v(P3*7r)bQ4fy zw0>Pd_okaoH;I*QtpazZU$p|s>g|@=_h64?to97oJ>h3M?Q?ZA5LWs<)%#l+*Vg>^ z$u?HTj#~fxR%N7w&BTPCR-CHOy*5cAO*QowR1cm+ z`b&&2=EYZ6ee1*G`~%)=J5I#EzNzM$ZIw^$HymvT+<9jTO`euV>(u?S1dt|{Xo5OH zs~GS>E^=vvj6E6&CP8h-_|=x-g0=oeG@N&>4!YBvo~CZ9)d%;9d*NI%*yK%$)tw$kukg`ceJ_NFP9wc#4gORxx#qyyWjlULsC>&w6QlJ1;7EA-byMd{2~ z?*Fkz_)9j=(x`RaucU;EvcdHahmVRp8}ON;it z1@8Xn-TdTVeOw(pWLbok+jwS3rwt{|gk$mSaMysD-M?%#KmUw;?$&u`;}Cb7 zPCa}~Yx{3TaAZn4<#lq*`~*bfz1T!0v8o1a-c|A*$z)9AVDj!y#00mKy)3YrEmXzT z??Hj4tc7H+M~IaBH)TvMOnF>Y=hyJwHca*BME~TG{q$$TG3mjkfV2vb5+uMq^_0}V z8>pHx^_=9%DuG8oeHgu0oKU1bbKd36jisrk{sJmEp81*A$o-&oWziIGdGyMlU|-uB z8H(`SCj9L)p8w0ehNU>%2R0qG&t3(%Ti$(Nspy8z2NqJ-29x1aLwI8cc2dzuy&CUF zEyFisBi~){@#V~u&uozYttV)bg__#4LY+L0Yk&H+aolQAWU2Aa8;V?UUY@-%=Fn=& zhYxhH)}qdcFAcSP2?o?suBrZ@ZYs=V-Ay%k{8$2zV1brSJdZpRkY?xt@BqR4sOp=t z0(J>MGZ#TC3aY87ph_Lwvq0-qQisT14ZQftaHtyiAW!90H4!2w8BsR7k`Og`k^B{aG=el0rU$Pl>2Nw zEOg;u8@2_$dTGRO|JPsU>bGA+H@BcO57zMb=Re4g{@g=+=upgB;kZ69Y>b3{4r_h5 zyb9|(fb(?P7E?Ai-a(!UMGncFp}pU*_V$2lfABT7Uw93=9hjR%BU_?6fK6a$3$}L= z+h*n$e}cmwIZC&!tX;~`!V6 z_YeP`kzU`}_&?0HxArp}SbU*$J3$n-I48Q>C%tirwcq+f+}ej&`p7-Z+}=~OE|P93 zE>*!wn0ASw%@7Q&F~%+ok{X*`EQw$8caDGPoW>-mjYdQ z0QpEIwjgaVk-^56cs|A~bcql2Sbks`_nF(sH@De%XIpm8tuelEUD;a4n*vD^)#XIe zfspPFdG0HxBy*nhKlmt5Jh-2ui*1c{ue?m;rZZ5QFHc3u@4>?=A`O*C4-@0cX~4}- z(&6_UyJ>Hz+Fxq=Q0jX~GGy`^G9~fS%J@2LtBOHUObz1c-g6~W{s~O>QKo^JDY|@Z zcTialRiM^18%av@Z}02rYAr3PHq?|}TBWh|#7C>#FE6!;_k@8}QR{<;iD>zUz1ylG zcUWtVRB2U-$CKv`Uer`me^GT@#2-Jd#fhiLKldGddTjN;a?2dKlCu;=B0EmynHwU1 zx9$1tA>oc0Xd$e6$g2BAxnAf^5tDi8-6Dd{#}IosH$?w<6)q0IDY_Ujnoaa#Y6(GLl@ArE}^v4^1JIOS?D@0bQzVh@rIdW*3hd%#+9#|B~ zw^epB)l>qa=}U&r^m;tCW`+5SLvjMkq+A<`0IOk$;s`7yKb3xJ2nN{rx^D_I789UU>Nizx@wi;o7%epco8Pk`}hz;qa#)b=79iV(%&pqeuF zcQ}OYZS3qEoyR_?hd*+Q+Fo1wJCJ4(y;d;O?)HRETy}YW(wS)ROOnEYcZe1>h*ITk;LWC8&M*uWN=~i))3OJUXk1fW9^ZL z-8^^}`2gMmh&7^-RT2{bt6Gj0!%hx2wjJlLjOEQUyS($&w{-KRH}Kcrfqcx7NAKg~ zKl?a8`!n})XD?>A5O#_(4bDJOfHlHw408!QbG6S`pLv_te*Za4K15mxv}frZIlza1 z`~mJdx(H6WG#1to22R)>!s@2VcHiN=CyInPmb%9(92BaUHbiYDTis&qTc_Fn&MUY) zg}FKC%!G}py3)eI<`$+qL-&36u=2!%^cH&zca`w~#74Awftb`z0z)h>rVPw|c!|I+ z3Mpv#DaoRU);0mI^kj?$6N6jdrvJiOeCA=X9S-(j2u4Vv=%tkd2VdT3F4?9Uz^JLF znkt{Fl_!7G^7+sEZFqkEKmFRd_Wt?J-E)^emv3%Apo4yoI0^VmD@OP22ODd8@r!4OJ9f)V4Yh#uV#WH_zPPgy7g=?p8 zqyO?%(l;+qT)KoWJTfznwA(t|*x)Pw_?x`{{)60g*M41|4`ZG>u6+WJOfau$nVswb zOLPw?rc+5@6(}+dvg`%Z>O(DirEEGK8?8EdIjtsFQX4|=@ftGa{LxRDMc3)O@@_22 zPt%2{Jwf&$d3zX0P_v-Q{nUzPG%Y`zvc;+!==TVM+jH2e2C8bbrW4!t=mhtTj}?G^hoA?Ml zvn%pHzax4vMgG&OIKMA4 zTl-?3JJ{kM&&%lIMz)^w+9AV(O)^?j?^R)iKmYe+417KM>A&~MD2^Uf!=1%UPuT7I zbFW_HxBu`RbKsZnq-7Fq8)Y*MCO~oMbAtbKDUg0w0VBkyIW;T7p+) z2uLY2bD*gUAW>1S#f1;yT&*^A+8FVULFyTe9C_+BwaWQjICDPb?eA`|`PLPRw@#zi zFCxX5_R0z$`rM=XlRxu59-2qa@50!kQi5Z?e6O}q_9fv^ed~p5eEVysk=2VD-*=3n zpAj!DaOh+A^2rYz#Ktji584c5xn=40jV)1SR~+s>%aF9&j_e!zPd$r`Yf0Zv^t@aN;4#B ztILbm4jkHl>U4AAHq`(|O*Pe2T~iw6?E_!hp1=MhfBWDaix>Od;xG5Fr$3PmGl*gp z3u07cX~}DE799*2zxFj=`|sYc%Rlu&mOpYg^T&FOHekH2xJ)q^M0}|=E1i)26pN)6 zR##)Q(hrG=CP~cAfW#CsQf9lCKdW{8do@uZGz;~w+p<9tov@uM*kHKyvIg4}gBQUBz)6(|)p3qG zr(hL}P1+`I8y7b>lct*biw2Cs)vs&18n@gxZ|~{TS2EMub$VOoVPC918>so(1(EaH z!ktU-p+&Fv&pMV9C)Ns9C#qoQVJAmk83^B9hnKf)b}2K?ARO*udcaIn{J~teqdlsg3_nCQ-xuj32D7@$x_YqWt>dpO>Hi z$UgRUJ?U2NHCYfB8;MIp=)7W-xN;~{`V<)pHl|+0(?S`gNs;mxF2VO*s5EHc-9 z&?B>a?8*D^3yEIZ6}g^5--&mkvbv+PzN3tC!HAG$kd|U}k&=aFl%xxB*K++!XSn{A zmtglA+;RlEU8)ROX(uq~!{!={Msy$lG`D=_eL8o~66sbUIw**9!A6Fj4Xh|zdJA|3 zmnlUKc_w6e`85yIksFF4-j^pwLeoTGfX&TY%-E}2+lBEpVflzBjy>v?R^*W=8)xpu zRhu^iqox|bsHvu!`jeXP<9?gtn=AjvKmKwr>u!s4Z||&)Kkw4fyt+b6w<}&mh!dC* zB(j>VZm{`>&yZcb!Qdm0uyWs$Zym9uJ1WB+6_?lSj0*9oV!}$cjfkpfoxJ4{HDy?p zpeFn+kY2QQInv;JI`NCHF^dWKQp>CYlu}N22n~%Y8UoQVl|RoU+-$EgbDp7Y6Y{>O z?O2k9h?V3xqRdX)gXNUlEoDT#mOxG2u=)z5k;!{brP7IrA{r)HQ^wbmqgZ)ymp(xi z7*lSPFTFn|TT?Q6RHmZr_rNz{dny;IJt=8gduZy^*Xr%A{hWNA=8I1IJWMf)L;^^+ zSIQU&U>atBwVzZC$W^kz^7qT%oxo|~6KF9Fxu~h8zIPAfDuY$>gGZAq5{-Xj&N~&c zpWZFFy=9S9kgQNWyIF9fubkgB?C)55Mu@FcmU|KaBV|;;_E=dTi}oW^6rgRRbjA1Q ztp3Znn19x57cZY$ZH-xllTYJ$T$-CeQ~z3(^tzX4mKR=%JMEYI7p^^sL{`OVy4Ck@ z{KhxUGp!HFqaQuOk)w%h?g*n4&0QF#*eR*DmQnMb;8i3ZUletWx^xqCelC)ko{&Xw zac9gM-?+?$m#*q?b%&XmmL7TEZF0-Q2e|FF84fSNfe2Y21R2;^0@DseP4GXGa$T%F z|9n_yMay~M6ia!Jy?`qd($r&ery5ywt}WP>aCTSaotM_R{_GjO{_0z7?-nv1rnuc* zoEm7ilqdmjkl_wG*wEgQWxeaCK4wI{19xQMy0zViZKFH3jgE~@B~`IHwr$(C?R0G0 zHabqlcJgJPea`#+fi=b&3(t)?uj%!K9^7JHDyB_EN{NTpC-r-G?4w?^-m;y~+j2NE z+#KxuEa{BYG-LeUqtSA*`(XPqgX?XnYoH%-4=-tNzzJ$}0?yTEM7ox)Eis9p#o;C{ zW`Jfg#wfQIBaO8wG&(2f86L zoj&QA^_vb8#z*&9z^Kj>`zn^Z17BG3J1FQtj`BQSy@BJ`_^So{@i>inwN7FsYcgoQ z++j73Ls;u;?A^%gI0%1jf))RR33&tX-H-EsrrMuM69was7viqR<&QU=^HXh|Ru+P+ zDbbB$&wm%U`Sl{Suo-(?fE`gA6F0|ry$45ee0hf#q=O5-fYkI{Lfna$ZPp&%0y7HT zxbuO8jEbxqLtUjtWZpJS0;Y>nQdn2FppJr-`~~Fc-6&it-*+~Yw#9Y+*b+SyMm%K1M756 zzCQmhZ2BjJx|hAR`{Bv8`-CadkZ7j^Osc+^Q&PsP=Vu{?_%J<4l>B(97T)bWd+#wj&}q_=c$+nPB9J38s!B;A(_L!Imu)Ef9u5g1cqvnx5lDBUSC`vC9y9M+gcQ4 zP2bA1W~p&dmKGPZsQ-6VZ3g}@=KtXIcEG<~ ziGF|B^4Om!o_b3@Hu^{w$8T#2eZ-RT3+s_UHF6!8J6E)@kbJ*Y**{adNO__p(%%}o zm``kT!)qX&aE`Gk*nu0s&I6$AEt$EemgI=W@CY|@)Xb!fDY8@*LS=qi5}~cbOEpT) zVK+C4%Q!dJmZ$fmF;+y!o51Maapakw2tN?6jeKqlqYHI7TotX9yh6H?ufSm0svCDC z6@|c#Ns#6)M(>v>EI@(fk-{wB#zb$-X%r}9V$dN*O>OMWAPbfA9Qpl1n)nwU0KqCH z6>mDSf`L|WF&NUkBB@zSUoxh`gwAMAkE_mtxIB!Zs#H5%)I*u6r+Kz=6^39~l=552 zOOz+kgTqw0_}+ZS+`RY~iXM&7Dg=9(=|g-p0G8v~?)$fg(jpmGN;AIy5eja_qwz=C zy)xf6EZrNvpmny+?ys*dcX+v$c&jlzq^0bCE}BV$9m(|-GC50|ej(>^NOjlKtwxCs zU0weFbG|`w{w4&dpidE3%u%Ed%ih)zj&V! zEkAVjtga$s=AZhQkx<}`?lX2wj*%`TYDYh82#j5~CoaQjwB8Wm z_Ut8^jj8|S>N_-57r-f_z{d;4&3E*XK{RL*(?<8$y%mxKYQT0%Wnz_tAc*c?GcA33 z`FN5)Mx+Qk-qWNd#H`xj=Z=%E6^cbs5e7;8VT7H+N>Sb&PL!;PY;@RJ8#X-#TGp?WzQy+sf87M4PsL zvJ$%zj|n&=EYm(kC0qOeqw)~``G`AuH#}+pIY|iri}?Z-cF+>{sRR^0Qri|tR)2+) zoe%TV!OL_12^Ka+J+n4Mkk?6geTEum2u$HT?8a2U@ONsu;SHBS%2e> zOPkbdj6SU+N%PrzoKVxXvWexP{N#|qdpvSTYgNm@XtKPdI1}fdK6HFC2Y+e#EuWF) zmm_dd;IV|k`xPk(smXB=k8>3;ST65Dv(paYFFNL4XqSi*H7}iu_7}yFgg!ki4m&k( zKvqfoz94{ENb9~;Aemp#vbBP}caJuwJMc3OvHfD5BriOu9ACcLy$lGflH&_6ltpRy7!4fH zSY-{NhLV$_$5vn`M>(WTptOjm_N5bW+y?h2!G*BwpZxxUeV15Y)2m#v?}hnd`rHn@ z7DyHJcvO6*xX{xD9p>{mv3$M1kK%i9D|aWpBqUX=T`yDpBUa)u14`tXsCw3yt`5u@ zptZE^K%Xy1b7dAE*sgdSylng|-;8AvO$H7L28RD023f8#4pwosg};b)Z3n-|6Jy45 zTSpG))<~}L>@JkR;NjlIqM`@>^a~F>^B?ps)qm?UBfqNa`*qRYI&rku!4;)qv2>98 zX@oE&M5f(6gGSm|UT%8x?ufbjpa^_P)#J^K^$brDs=DBF58CRerC##7Q+mDJrFAnP zCkZ87S`4raa%05tSIswT4N`_zJMZp|xV(qS@-mgse$BUUy{p7_a5#f=1(Xo*oSwa7 zlCtv0Qi+Fu>*@^LY_96NF~05H(n%E9d@?olKIiDzZNxpB2tg3{EzB>v1l=R;o;8X&EuF1G0g?ZBN#&ur(?r^l9ZsZKbFu7mXtxs$45w^J-D zQH}MdKQ&7^Z6eM4L{BYK{5b-5BO=Yh4(1U&`4oTsxKL!+ZGhD#fCT!9%r<+#z zzp5OPLGkfl9=!Gv2h#{vntpu#wpBcmf4C4B4P|qPf~p=lbWK zXFZOaqnK$RX#g`25*b*J#t4>?SE$TPYi0}2=Gug?jgeOhD2l1>SS^T4C{Q$7URoy; zD|c1`Ep&%n>-iLXXO*D4)xEo8uX?>oXW?>0O6KlYXUAy0&2{H?8j2%0g;O)BkC1JY zn80}cDf_e|JCptjfih!ym+)8wz?Bk4aE3nU?l!yHSd^7s?Avo4RY%Nd2N9DQ z2s)Y5@;HvvMm8^@?VdxN4+B-;46~IsE+QR(T6zj3vSy&6Smwh@n@QbC$4Ku&`~hR^ zz=lkY6?EdE>;yMVQ@&qm&vQ#kRM`SQE1@6ugH5v6_-k(6dF9>w^)8jlCe8Gyfe!W^ zQ*|HP8Ywe<&ppw^{~8A*jnHNQ6fV(ZP(PEpcR)X72r08KPVl$5$Pcpx#=uYP>r6^U zt-?*DvuB|aIRc6nM9aJzNk_AOdWZuibSj;XgxcI>Xj6pop754~xM|ozNjim*Nm*gw z@84Iy?_k=7spBiFUC*>?Ry6Rp+zXA6=u>tCy68n1w*x z&~O#szDTPdt^1O@UVA?N$9 z6cx0@eF~!bTq<_7OjK+Z-Xv%!B|W(Ll@JeQ;eYeN7ttd$+BatNe>#hHP039NNIL~@ z5b)FSH~eL`fR1aXq_zLGsF#&`&$V6&e4O4}_ zoWTJwAT(L)V(N9dx+|+^bhZ*sSCb+bG>y-F{l^J5CF+@~XDo#0;iL?H!K+(3s?Una zTAJiLF4-y>B+HMdmok1hYgM30z0 zzIRw6lvG+>x`kpuyifxYal%GP?SKCdZsV&CZx2j^7GrW;(xCC0V0NkOsP+nTrh zZvquhzxclwz6*fOU-uLC$1SeK2R5y|9@*-VwYAT~Hh25ZE{&EWP7)DB{JpcWu6a=* zATq{;Orf7|XUuO6Kg%ypuY2JSTkd;J2{%;x>Lb$vU1zM2<>GWllDXMrK=8;VlC;Wl z>chPxc*wX~9uiy6=csDG8b8BXn?iTCQ+FMOpDIOH_OGcsPe~Et1Av$|Kh!Q&(J&l| zSYkF1W&u@wm0mFwcRVJ=gn3)N^AzKT8U9x=&z=WK#x9oMm+IU_V&Z)JQxh8F}397%@`BmA>#Cm zXJY=63~h%^E$@X&EG};Z41_(iB(s^YUH`^Z>nbgCQQ|bBm_GWD>u!%MMbUO&vh;Gw zv{SN`kSbtak^|+xsrg2*4%?AC=b2Wq$S2N7Qin~4O9gI%@;*XyI+IS^LCia$#sR|c zpHD0%>sKUk^qedxCXxc~Qoq;njS{dRvJyej`q@G-i@ z{cyjSer)sDwdHY=`PtOdn`hM5?0}g2V@F^4isqQT+=EX~HCnF@@c+8nh2Hle*FMI& ztG0S)kDtqgcosYflH>c}Q#aemlaP==v3q@seKbwZo;DAtuNs|ejnJ4=2a~e|PR|Qj zCSsVOwaE`WpwioSL-fM{;4O*S;>KNHT`D-WRpS@7o}l`aj4|T%v5a-~W!5+r-HAPY zbY8A_2P$tJXeHdSOaXX`N!nj9-$8E3A%2|hb$uQ-xMd&(^feP57TuD!@3$1+%}TZM z4b}CqqXZ{@uqa*EbZmnx`S_V#^ELyfWB+;LYIRYbS*SmAezoxH?d<=$0JIWTLikCB z!!8#w)&LHcPHU4L!2mt@X*N*Kk=ay&3yV%0D19;?QAqL}ziCioSNK*@_sdcKk_muX zEYB+%*P>;$6rs#8Ml|@8C2XDWxT0mb#O*v{Z%f4t=nLX!Ze`+IZ4C^+!82H|qo1I^ zFnLN?sN=NB2}j^I*);x;Yr{C^c)z7+wQgun=ZB=cf4<_ht1o(=IHA7X!}dYH+>1YC zsNPcLSxLKas_wj+tlsyZ5xQWTB|~cslF{*wznjC)c+Qm-xJ+GJ?joS2;%v;+Y-iFv z%XHk}^32R!s_K1C7cM^eEYuok;U9&k$4ik|F)!H88{qR6t4@&nt&tBrH(AIm*-XR3 z(U({LJ+FYO+H1w%m%S{>W0Gd6`p9C&5+;1JrK#?G7)8Sr8LEC%MR+q0f)oLl`ij*dw7SkPY77$R0u|ZM(E_E=Sdj>d%aegzWvRb;_%$nn zq&k7ct_t}vB_WMQpf%QR$@!mcjGbpoTiV;hS~u%%{dSfrKb2%x1Td=hE@75oB9nXS z`Pz(|nqMWX|Gu1A??eh=9q1NOroHGAD_|Vi=&El0=sXnCdhE|9c$#sq`F5->zpBF4 zG(Hi&X(z~C6Y=R4Nyy7*OHt>=C?2Kq{|EDzxlGS&v_1hV_O4r&2JFJcpbgqt)^AgW z#wXQse@C<0rExgSor8tunE(c?9}Z}QXFrZ#WIwmFMauqPd6upWE5#SsOL>NPpBlCC zByTiPP3W>66}-f#{gLR9;nizcB$7c2fX`EHj}*f`OiX2nP;}tZd(Dh@+r2Gsb^L6T z-n#w&UJs)hMK`AK(wPK36Ox_Ku1qTx5IN@UpfD>MHL>72K8^AggVhYA6>hD*Jf+?UR!M(`hp|hERPlo=JYPgZQXN8CzuLDX2Q@>=GPiZq@jvc5sy`WDKh+k5X zkG$`6-l&=gz-a=S4+UWatJbw8;H-*=uxX$kdCyf_5Eq0+=GP)eVxxI|v(ki9M0{5E zv%>m~(#=W1uQ-2p*emZ&7A*)8JA43l4|wMB)F_a$1GlIYarI`|5wh%-@t!O!hBR8W zxuP*Bl5E^i4WY%=xMD;DvMsJ-348Q0nZ4p=va0grE(Po`q8(!_PZkMZva{xdhaWq<;&U<6E0*H1DhZHrh2}|WeV-V}_-86{e?~8U!n=TU1hZU^C&zaF8FD+3#fE=p3}mGdH^H|d7iuSX-X6OGF6b;z3rZn5 z#HsQ^ThAPwo$LV^=q6)zyfOuNW@61dhe!qNfotI;q?8yU(JIwOdsjai$?MyM`OI6c z*4bOG3X_*T&(j~d2FIsJGppPjV?s<0Vm=pu2YBmOU!z{fq1C)@Ifiwe7ygN7EyL7} z^%4e)CLM_FNJUE3tUw>xVNQ?XBatnuYGK`OY+uO-~m6 z9il2E%|GbQTxHxxa**UCwiWXkl&)Ixh%!{}nGF0QG{`O;>k(>ulTArDeGw8@X>@5g zz94cahU)*!@^ylig~$i|#Q&{h__AMjn$bCYdCj9bIhXA_hC5g7bfnC&ik z&doAZcTzT`L+g-BACXi!jyo@t`Jl|ptHPy8O`WbBBqt<89y1`CO0FIlD{B)S=5I*5 zvRa?-@I|vAuIkS>zXr-(ZOXybhItG1^uqWNJ^IKtQ~hFXxXeY5YA7+q~)u{Ql2rcOJ1ZCR&rOTpFQjBgLb!;Doa&Z@f znW;*Zsi_ccwP2@%_qu;Z9}2NXv1M?!5)IiqoY0cK<7C4{9mg#BY)uTF5nxAe9?kv$ zN05i0Mfsmu59|wiG!2ni4jwkBYvHS~dbFP8zm2^j0II&&quFm);}wk&HEL9YA~HW1 zC>7-?Pqzj08H&aHob-o%g;C=q&tD!b|2o|}w%Ar7Qz)mV8tz8kJdYChBkV-Q_JxWvbcN&B^WLhSZi*sVPF#h#0Qhf~m}X!#W6hlP~U_{*-SN<-PVYjAF&X|zR_UBq%Xmv(o4{NFe#c>7 z_*6L>IleXveC@SOq$C#n?UA)Gf;qomz&lNKIbxjllbs?^}6@67avVfFr2`s<>YagmaKmhB=eH!c_V2sc6zUl z#~G+2ds5l^0HpjO-7N_$F4Uy)r6d!lV7^l?tD_*mL8LRB(oPVkXdWf%BdVOiuJlRU z#w;*_9R|Wo?ZK9Or^17ZQW9lrJgR542{1t`buaNtw56ix9H;|qZmft#axLi> zsSe7zI1T^qCpOL@zRpUK*}$fqH3-kb8ez`rilXQc=^?wIw&V36%=L0`27mTFovwIG zyZZ~?uc1H4d6C>+;fKwUbC7?9W7#0VlV1cBQ)9?_QYARjyXgB|0xOT81^3niauVqeoEY(2;4Vmd-?9&zi7V? zo_zF7-rZ4(<7+g9&|n1IF2+uR?wPFGM0rRaf#lDPn?Z7Lrhy#!KK#=$#jG2Y1Xr=##EIF+x zh~EsOClnuhk2mml_4)95U^&8OC(W+8dC9r39`nm#?QX{FGhV3kU%Mp$(fcv7-Rljq z%~ns8Q=}dDgU3zls5vKsn30R;#?5qYzS!R9Ga@jU?zQdN@Ll;;#6fKu;XdMLG@O<5H6{3S^lF_Psp@#y9|(g z9S%asC^0dl1h$BlF2(W5;rd~ZGnEJYy_{^=qz$h`!J~!!=DuLjRQps7 zg+q1SA6S9S+GOk#kpN=_%tHmzy*#Tm@tMeiH8=g^#YCOx`-x7w^RB0vvxzO*t?i|4 zgo37zg{_vX`lr_BQ;zvc6mqy)9M*)he<`e-gX@i55(c7(F*pOHT+vBJUYKgd@udGKF9kCN zYg13LB(BuSQYdVe1I0HQZxv}iX|w0xktX8Sa8B(F1DAJ4DWr)QV$B~XhZf!sn1tG$ z3>`1l`p1(Zbc89CQ;F|E#t*M}CtDs`&x{=*gQzT=)w9QeU-MLOPIVcwB_fm0kv-KP z-j;{BUS~A=Bd2@B8F=pLCRMGtF-AOon+)|BcN-2W8$ZBImlX`bE8TGXhNg%=Y1Ka}-9ZYtoND2Rzl_Kn`{bOyHIENW^K+eZB zR-Rf~vB5|qcm;F9oK789R=Y#`eWwTy@9RU4fm6QS954=QJ8XGe(7SJVj3;eyame-8(`;!1r|7vMl79unrfDUwr3`xr461#N46qVf$ zf>*|XWv*1jl?X)@n-6sZM$CXWFqwDE@X^s9@s~W^vY; z$rIE5qQ08s~e#FC}w1ssBBNYU5&2P(fSy;QvMJ*cJd}NM?gE^A`xeEUc~?O6`s5` zcd&W4Y@EHn6)ZjNOoA5;cbl3f9kn}0(kVPP>-HY%3R~{+IW6kxYw;QuQ8g}_2-n_X zTWV5w>Jej2QmR6jF?-1y;zk!&x4o2Ik)_aYW``g;8t5okK+Q>^scHvMmeF%a50ENK%$i9%^eq+4h*~idn!R@CpuKP@^T3pFykB zIlR42W5!2E?}llOYlNjz66%=0AoXsYnOJzpX^!qw^uM+P@KlR@#$)>~=faJ-b0xp+ z>+AXIamn(`Jy2 z=ZuUBl{Rx)BYh)&=HpmFKMI<~=K~AD~ z`5#O46dVwKz)c@z82;4;VvQHBc6`Gv#hsX^f6C+3$#eTHxaHxVoS$zgPIr=SM}aR- z&DRB4?cWL>es!6dXaS2d1N%MsOHqAi1zjWxGez@pMbYre&*okLhRMHgRQmO4LFK6V zqCThtct2~!J$(Rz{sq67eA=nwJHN$iL7=xgBdG82lLro`ppceB;AX$JsXrVL_KxM@giX;y9 zwG<_1@jnEEHWfsL`S}OjfEL#s6{n<+XX4J4GY5|6wYB8o)ge9osOhi^V61-`4?G^M zU*tFvTD>RHpe?NvJEFAltRY!sVU_;0^ww3@2;x43t;YNJ9(8~yG` z(8x?V87`Qv>y}kRcBN{>q}Z|06^%sD)G(d?!Opd!#L!e}N@$H($gjo>J$iNhc6u_~ zi@ZV`(vAS!Q6*6|D?kk*P$*^?XJA@z0|{rRbW{8+d-VKNVc)npwFT)|Z8; zTT#T(n&_=f4kL4=X&Cn*PY0ro;7=Vi-AHeRk%s&P4*#^jXE+HoR=_?(J^fy1gvnjV zjd-0VZsG7GOyi5ZcrM|f>Yq42s6spi8n;$dL^xLpsAzRTK4bpDI(OTlh-^>g4PBL# zbj+RQ7|fVxax;mxj>JGt*>II4BGqM=w*TkA0lNbzqqnkp&yu+&_os+jS355k(}x;4 z78x)XH+dLtW0XQ^-Wo#b_QH^q0C#!fDEg@8!W78^At7Pk1x81ni98CqrBQYPq`Lb3 zNrR#CfIC437wm}WcIaJcuLy~H6pVKDd7O|4Njl+wKkf0<`et5`Z4T*Q_Nv^GuR0}= zZ&rqo>Sh~7(a;t=zaXP@hsI#jY|^H(@=%RJFk}`iBzFfaY76o_H6=L^LoguydtfNB zuyiHFHhZ1t`aNn)px?cXib|pc7zEiU76;;beDRf?HZR4DU{0|UFR8k2!>Wf6q$xI& z$k_%${RQ_OGohs{laPaz%(^R>OK5)CWK&d7UgZj0=hixufkFNcu|ZJis1YPIodu+j zTcuPq$kjCB>{MXj0Ny~FqCVv|M1&*XU$X0~w>*hf^k~wQf{xPjtFVf=l~1+3$Ea}V zYKVq8d~qqN&h&sQ$T)78UBy%B6Ls_1`aw|@Wj#460vQGFowK^mtImIEAiQ4RKTl@v zIyektKV|ULa@2Ni9Is2dbu?iSX?ndqeP+hhhaateWUF{zH=zH0-u{(*KVJ4=gs@TtiFH8Gm03eJH+t-*MiR;p*xrt&h7ux1A zC(83ffQ{hrTgr5~oKF0X;*qyQ?t)iJxB$l z4om@mg3cypd7Wr8gD(nSjy&lIEcC_Y^$s2X4BD8i{N;nT&(xhi^N=zDCQ5H|PUe0B zGoESsVuxOsrdcU0oJV}-W3~YjX|hAhX55ZIeAveFILot|_efTCO|IfqX`!mk(6n__Pr+L54 zo`1vJLd<(dMZnPey;j6SS0_9R0F1<#jCWT+Z2-WiIEP?_U1{3}QablaEc*=I0<)CO0hkEVDT^~GYvamzs$<@#+qKhi!ilF-y8<=t#NdI(?WT5_` z4f-aiFJwca2P`<%mQGB~>!~TWfP(CXqLL~DkR;YrvT4C(C517YooXwAX^og1DTQOaib$4e!ICPaJ3!(yk|~{<9)EaOx+U3l@TpO_$eI18F@T46yJpo<)Imb zNj2WNCpSSIhgqQBfxP=;4!qhKwJJpDo$jYOV<3Ue;1`Ht#pay0z^`L6X2T-JGSgV* zQd1$Eg5lAxV4qYKLeOWdh>X?V16@Vfkze3<{4!Uy%BKecMcW}_lfIIm641ztX-O6u z)B0DAZXAx_39lUNh< zsBQ^YG#1*8SjMH;{VQ(w$gdLJgzV4F8ftF(atpZSKI8s;Lh+R4yR1o z!A>e37CW=m&{s+UFKmIgP+kR{;l)MOthU)h4P%b|{p4!fx74{k^JH5UCmXQvfoFMe z{c21-AU)vWYP(iYxm8NTZ_M%A8HZW^c0e8fVDymmFDOo|ux~pIEUdrn_E6v-E)J`L ztrLHDUgW%<@`n>>owLkwm;nX@w=t~6B5D<7n%aSJ&zXx){A_q!g{z;s6hzs+d zss_9&rq!}XTyGFPy-@mjD4vRG7(Z#uzNHS)YRevPY8B@vCQw96GU>uiekJE1rO`7N z8SjpuIp*Ez zT@o+4Pwap-V+r+!|DrA#AcX2jzKntJU7Gc)za+-+4qEE)V55|jd0FXa83~@MlK1$< zqyh?@%4W)NnZ1DY1#-PZ{wpoM)zMLZ!f1CA{+|jnAZiEMlN3`_>zpoDh{tl7u(Zod z%qd77o7eX#BeECIRC=keH#zER|AV>YCQOJ8hdAhVQG0Eqm&5^!bkd?bRlp^2fid&i zERr>peXk{S*TDTC>CL)7^!0v`H`$wE$a@?=e;GzooSA6shX|`V%2l5B3fP^yEtgK5 z1e(VWmC8?Bv(gWc$mJpmB`EXfD6p2~4b@FQpwT#n*waP+m)nwl``y!v>)pO(%k=@4 z26hu}wUvq6zU9mnOvJ!=Wegobj=Mu(pgU5n-PTw8+bFfw$`HW83K1qx8%8akvFa&~ zQN;8&JpjOW9alV6T3t{*r%!l=@CW{ZDQ zL`pL}@ILmwmowmZ(dTdUWXRN|@F{KJ_E8-QYP@zpx9QQb@GQ@1SY;+hZ?ut=6aN~& z|Gn80dDhwK>Y1LrwX*%(KuCCwVUX`Wy`t<8_UEZ zrQC$Av=VivFtXx^EeuR4)b4)|%py`dwHuQT5A@X9XyPMnVsLD+>@3W|C{rxaMZrX8 zS!74?ph=Jr`&rhLzP(fe%I8eQNR%?>K}||rxxvf=`iTD+a_eOzy!%TaYUn^RBMH#S zQJxQ>mP3}Q>y!PX3Duw2Q(k5U6crsM;J9eFrP-r-jH#vwVlkBmjxw=h0zHmL3?f5- ze$4c)>?Nh2Bq|y)smMl%7LAo76G3xn{G7P#^ON6!341x+UnD^NFk!iITOdRwg-dvl zLsfv!3mPKabyKa1B1n04aGl4T=1CRu8wjEB_$VoquhPH^9w#%*q`bke(;%qjT2@-L z$k1uJ4Usm<~`0mz>4bJf(`kL9p} zHfpPsIIE3t#xTK`P`$`Ct+PpI^0bSPaVIubW${u{<}77equlRxmLh8qQEe&)nlO{) z1xVs8OmskJrDZ}`4c@FC)rQNS(lyy#&O96eQyuAIpX<3C^6yd#7v#sGljrDLTXGYN zH`T+Rk|}9t<%SJRCh06%SBja_*=2P8jm$HT%Kwzz|3w|Ylz+OpIT>3WG@IEbG{A7? z8GVPiV1*OHTG;U|c{;a4z1|KP`u$~sr`=!!deEji@y+Z$eTSE=%u71yV4MDIkD#YF znJOrqY{!d9jQ_yiPm0XHsEqg8-FQW{h7;)naT`FF3J~gO(MR);^TzNDawZ z)O`@$yvBmg2MDRs!Y3X22pn@f%h9BC1`M_111KFQJCfd~#brY-(qu!6Sk}o=;`+s`%KUJI)k8y&b0TQ+#J|IU0&`kMkxPY5M+YTh zST1CNpi8ivRI~5^@Dh>c>s%=lF}kWY%RQ4#)=JX;qV|_b>7oRH`!ScOhK-h43!(fwo+5u#7R_Bk7fuv103vFH*6AaqpWtk-S&HO5-?{xl55P1*{ zmh<(3Xw9{$$BFj%Zr~Q@y)*Bt_PsvKLPFQo&>?Iyk{b_hpzdPv}hcCyE`r* zJqOHtIGaAx`0xRGgjhU;I*}7p)|f_6lGwTGXF`rHqr{)GLV2b^$j~&Go^J z^tv%n0;5(kT=lbxU9&7$WLOa1WC%6F=z*}fgat@vhev}ow}GcPsSV0TBp?k6qXJ*- zf=$}V++E>g<6bMMHvQ$zPnxnA_Y*Cw9%gn4#@%nuFc2vz-Z}&yxTg_egf4|@cW|Wc zwB18F{JrsSJ;9MKgG$&pR9y19%xa!E>&|B#?`u8#|8ys%Xywo0W0(<6Vo!!c zY2Y&YARbI0^}EiOQwM^2d|C_u>AO2P+tF1N~)1B&Rq}H!07pm3ThPdY|QqRa>%gA$I6n@=MvZkjF1pD{Cf-* zj5U3@8d+1ZV78`^V*2_9Czq!T%)k6vGTun9i;^ElCS_mxzi*!BSF$TgQrV){E@&yPuBS?#E+j<%LJ!SsQwSRoyU=93X|U%k_g9IUI* zAKw7jks48&a8;GX8E$Tg_Bvi#P1)XG*_70>RNS-_=AGisnm3*$n)n=+tTBU=Jl3~} z(#Te7ZCP$xWI`&b%8pIOC!bNG$js>Q)Cw@eRlk>iXXN%6v zT6eTh91N#RVCi|CbIf4EPxj#6=0ATxS-?skFNcTGk}i(o0xw|{VLhW!cL#!_Bp2MN z*-d*~B+Dp7nbF)3BSPFVrI|%AuEhOZS$%8s_r>!DX~m0eu$1tAC8xPnt_Y)isk`2W zi2jKRlp7d>%hdz(6|OZwJeJIZA)O1ZBfobS$$tmYyhfBHmtHoQNqpznm+6<*Tro*> zl2^BsiKIxxpj6r~Nkjpa3f5tU%0gBv*2Y2TSHc>}iVyto8w|k)*>Y`7x26B*&`x`P zuQH96>SiQbAKzJ0Nj)nlz>`wOK^5ZlYkLmLdT%SQ=z5H4zu6_;&!tpuHe4C@^%S3n zb&V?0ci=?dm}D*u#@A<5*`CxaMa_C zaTjOZG4ni4(M2)(ak&@{XuEOCh#)3B+pFsz{2}?_mhG(FnisvrYMwW2W&z?0i4+^c zZEZYp6+t;f81b7v`w=U4-7Z@OS*tuBr29O5%1w6T8!%U^+pCm+hgb2HgV2kwH^DPK z0l|g^n~x=46)^yLT1{}B^9%W~s5W+>7w!ev>bQCQ%)MA{GZyLn~&B7i7WCWMu zjQh@Gs5ha+D7%V7ttxKgIVK^T8P2?ytGum!jIrh|O@@w7;b&&T`!&;{E1*BL9%4rk zzMb`6_ckmBbBsABc$0S5mj2&j@}}(Gr4IwF&pC+}9X!%sp3o%($CVh8H95>M?(gj%oNeP9{hizDqXY9P1u@y*LYM6lYRL=kB7ZTl1Mt9Oh znU4cSFHG&aII_U`3Z5cR*)l7!>Jm=Cx5N_6KN>%ge!(fyz+P8<(N5^m-NzRmSSmeK zC07UdNeDq0Q)rLl9ZBWd<`f`FO>3nJx}=Kdev^{;-c43yktK>!jiYp41I&p8x>f2@ z0=*{8M=;A+4h+rQN2@_u(*cA@qYz3WSojcwiZugBL)v9;)#R=}=dg)mDtXe9XXRVt zLKjdpasdCzMN~=cgh5!%Vi53gb=bU#JyJZIr=>Ogyw&Ra%O+Dn_J*$<5h{uyZ^8q6D65j96 z3m38%D^iLvg__O`_H`2s<&|}~`;G>K)*qkYWF(N8?bp22o5n?&NI63L%eEyT%gr?` zGPU$~CuA%#Iwie4X=RVp=_Psm=o8)>QFkR~USD}}-i$Zych>jx8d7`WNl%JX z07&_=IL5=xOc8K6n37<`K;$@YSmg-EW^t46mehsFO9kan?uE`p&N)bVq9#*6Hw^#0 zo$_#YK2hvC%m2*eST%*!OX%&f5jC%EN}_Y<`eVe?W%~vO^LQ7x7U6#qd;a@Ec3yzL zfVWVS4+ka4k8-1G1cRVmH1fW&!~8U?Nrs4uW+c9+{hpSC0M}tfr&|GxtK|9XRX}eQ zk$5K@(i%j0;Zqnu1IYgtShioMS2X_xuk&zZ9d0k^&D})3sfjGxlB2P2hD<3;%L!b3>Jk8X z7fY;_h^(>Z0pvM|YOfYuSGepGUEbp;f|Dezw0b9}%x6OjED5h{`k%$KdlKpYo@g}x z(UH<42M5%%GH)xPk_M(6Im{ow##frZVK;g01~(Qr6|F_d8(Y2voz)XxX|&PDB|Uy- zb-l97ceRjSiO`!;G6!D$z{;1-ou2Zmw=l1;D5wF25M_z20#Y!zLDW9BsA$$o(5b-{ z3b-yf#na)rmZGcsY1u)Wxyq$7Uu+>*O_w8P%xXrKY5NGE^#3p^2jNC!nt*>W0_{}X zTt#veR6Hvf)!@GW#B=N}~@ zg@N5s)$x;*f`Tnb==t^j5ps3kg7o_n85LM$=OG;O)XQbu_hAM97_5Sg@=VHnV01{} z@$g_X7*T&>^4*oo4aJ>8>KN#yXmy&L?c|e#^(mGIiJn&7J2y9z5BRrKC_)W>#*|a5f0tSY?IGPRo1Jz8pe>VE-RPp|aFY@Os?&CC_|4m=o-ucPsbC`vvEd z&!yv<6{3H+eU9!lX4MdG(ay!YwyC94G}Qvd^ej{wm}nw1dp~C1MCfAluwvnV^H0`~|At(EwJ)xKC79p9ETKHAo=cEqlKZ zG$MX%-EXoj|2=6((l}W=T>lsO=9V@6g*jFfJx0nVP7W@oKw%MM?2`yXlV}$=sz6Pd zm_Q3EZ4Qg}X5mU)2K{BF`b$6Z*CH1bM#r5;9!o+MM=}7buWun6DLz%bQ@`QG{e z(e%y1k+;Ft(Z<@?**F{9wrz7_+qO5>#@LB%+qP}nU*3D~_t#WS)l|(h^ZdF`pFZ8^ zefbUk2{dVs6cO}Zk0yW1{<7u!jSZhAy&%FNkdf!&3-o5TKpXV#nBVrV4EAp*HSr;m z0Z$mvnOZ4$TWd`v-I?0m8UcH7p$A#R&`A!CM9@;kf*K};!R>`S<95}$VCqBtF)$8J zB5OF{i70sJ-6{dI;GNbKk`KFB(-uK7sH6>(%R1Hv*F>@5q=!$L6IJdidq4F*ddIN7 zX59Q6#`;G=jeH4Aim_q>jI<8L5!=sCd=Cbz_-@xu=;S3Nf)#~&xd{>j3YxF=qSE+L zccGY@k;P4nSi~hhPCCfJaVn(W^+*Otp;3%QjQ(wYZzW5IBs-3|Mi~Z=_|Q%c{bfRY z_@RMot?N~7)V2bjuJlEXF!FQro!6hLm<9(_R6)T3X$IVa0!H_dg3Teq8BhJ)cN}@s zvI7`G$Mt3>&hqd<7}rFU-)ek`!nqaaeQLXA0=7`7Waj_iu<&M8D6xU&&}sVBLyOT> zx*#OS^#=414lO5Lc-(Fa)=muv_H|VpHZAitgfQ0ig>!0PB#8+HW`x}8Fm?2zqM&S| z|EeI5I*f|aBy)OMb*!RKUaKniwJz7LqS2|we81gaO&7OueEj+9JiEE}Jm`1Rm)Q0- zimCVa3hC>u=Uok|UiM6!ZHMd2l;*#?X@dA8^b}0Gd)G-0MX5e3BocVCjfM}5&gsMt#^}+7!H-E23@DdFF5IyG;xLna{ zw`2!Ch2PhMp*yd1HS^$)NCA6e-AeRm@hqc&D9e14NqaR#i3d0xaDJ1{U23{n#A>f6Zv>MSK9e+IRXkk8^?aIB`R;MA>6PRmPYMdp}s|GE8 zs3iB!2O%@(u&#^4k5xuMol)t@oRL?C;uybgmLu9$4w+Q!N>wC+2gk$BAJpR{$k03h zlleACs+)-7P9tA3zE|u|t)a*+%JvvY2M?%mxQ3In!7r}e$m#BmaEStDv=&u`7hr#N zx@6hJWU%%tX1fh^7+;D|ID{6iG7oz;8aZ@Cj+IQx3`qbBt8?npv7I6&liX*tp;k$V1N!Vi8AxA|>z2C_Tk>CIff&a{*+GAJbPZr4VBb1m9D;IW-f-ApoVEF0{8A09C* zmrxQijt=D_^Z_Mw@WdH=OeV?pgy{A>O7%2&Ej-&6)GI6pkt%3aD3w%n6I`E2M6bUu z!6B?(kdV)5fFw*bwLzOeb+)R2;RS>=x&mQ1v2vN0u9y z%pwX>(q78!z~EpvMDjK45c2v#1B_2x&v6SPmSL7sSsI{?<(Oun-?U*GSHEat!(1oP zqAO!9OjKih99m$lX-cpqbWl3JeF|w!tn5GGMl57B8DqOrmRfa(VFxk`Hqv2$V|1YD z*lBUKy_BV@OcU(p^zU48@rgc7%v9DMNqjF2W?E~%WiqGo1Fz``=?qR^@U6?E9VRw# zRvTqMoFA^{%{B}2UQ>4Xqc*HWiwM|u^7nd1LmB%vVzW|aFa?jON@d`+OHPAd4vXXY?DwI!*|Sl#g3R)b z=EbYsF{mx*_#6}Fe}270*JjkG%>{;MBiMGig15QZ-A(gS7Xz;+dw|8X==owO!_X!e z!`aki)tp5ec({*G5ifkxV+eBLqfifVQPjc7U?EVhyw)hH0(t?pu>ADi&#m`@7A&YL z$iunQ1Z6Ihhv$VPNm)cmUb%f(3v=;URt5>}r?g-}K?0pBhI{L#I-eg-I$w`b(-)cD zpXde*&~enogE!EXsX1duVO>5~C44u2JOO^~G4z$iOSVEn#L?eT8b9q3KZdybZ@7UV zJ~^Jr00=20>C$d`D`o>ZX#T`-IZ+lD;iHu*B8Vt5)`Epl?2Ms`*{S(^BcjM9DXyzT zT1xH?eEKvpKV&Y;vh9yo2`M6gWG1%E>PX|SU>of>Z`olNX9d=sc_Pf#3HLt=)L&|@ zeW$$)nYxI!?M^IvdVu~_p@!)#oFl4+k;=Z)d0GqI-spO^i&nYsL5{GCIRLbav-|t5 ze0t~n&{Ql=q&Kd#PLlo5O^ zb&lE<%J&g}JoALV?Y`aaw7E>$*y|*}EgW1`1&2{5dKq5Qu_xFacOc0T`oce615ZvZ zEoIt@s$bJjQS3p@&egx=`^IK>-u*g-vmldHYY?^9dfvd@dZL(v>wYL}m+8c8>1DSm#&y>(Um3|H*k|H+zK1o>kItN*X=4^e zULHF3qBgg{a$_z!d}4M5?Y5X1aIxWWgY5@h7tZ}w zkf8$9w%D7WEXDck-WSN1`?`~C^#A_^MEtl2rHfFfl{BkjBq{!G1c@4SOrR+}jvokO zi7`M6O*CkrD*?+PZh|ck83Ec7$O&(hE83-EV=-rLR}k{cx;oo`{zXjpOnID@2?iC4 zmbY0sKowqtxP{^q5Q=s(3#ivb8N~~riR>Jk6hkQyQgTcB2@FSf0yxK%RaCfI@#vn5 z8E6Z`E%>&_;*G$sQWm1kK0me^?nMVDx{&ka@$~n455dO@V5hMIiO9Jo=!#i;b{-gU zlKlG(t-PT(dxIucr=kTT<&tBG|4qV~H`yfVgileYsp3sY^cDOn`xI43u`*yd^QW~l z3{8uVkH4ntPJio8=I-NGs6i;{YrpcUJtqpA7>B)1>fsF!;ALED`Xy zQm>+W{(bEgnWOJx^}3TT{=BfYaavI{pbk)uL2JqL=o*@oB?% zZHs^g-uGxlx?^c>A~QZ7y5Kt-;iq^hvo=r-`xw1OV+q)l29XQ2CR~P&-pUzk&{9Rp zu~n-P4*ark6;8y5cWTMc!FDa~9;B;Lg{309&44&YMxJ>cjKwO#NUo2>Jh|q#$>He$ z-BVIjH3a)bd~90hn44i;yVy3#!B}%V78Ld7>5cjvG}fIg8)5;??<{NXTxNLdz&Tdd zqb{g?kgJ$HcXRp!h6SXTUDbMapFM0MqpwjbK^Z8H-+8Q2BD6GH>b?Lk7<3U695iEZ zj@bN_yDct<-1k~l<9hCGS8@zH^;`BY+Amg4XmC+vG&Nlpb}jF@ zK%3r~d&)`|gR#iqEjOgNBu~orVGG56FU~egn;w8Et|1FOl_}72wIMo!W(Yxz>k$mw z@fEZyZFclUW$$|BVe5LylBI8lq@e+UixOFc@)lJo68z4$UoS7oEnDaG^k0kj8eiz; zzV$NfcK?^0LO9@^jwEXl4Q;t5tk^=bsU9ek|B<+rXHJj5K6!PSv6n#|OPaT0aTQd- zTalP;wL_j?ftDNw5GX()Ey@9l8KV-qd)DSVm&SwVjUhP{`vBN#`5^g6{TNP-7d9@r zZn6^Riaqo4@t}BK+bam$sroEBZ6|`@S>VAK3(EBp>(#eACTg1s7?30~lWCZK~r4NDp?`@blU+-UKzYgBi2q(nZ5jQ+u2BdSctuV6bYBtUc?&{ZZ6POmM!4*rWoDE}W{nMv)g)+Jg$XmnMl>od)ug2y z4a?y`Xwr3?`_X)bXK4C6aV^Za?PLcLFxe7CdUdhAG?18E-rPiofThpmkKR5E49t~x z7N}efcg#dZ6w^%<_}NKE?z*u7(l3#1CZpfrS0MX+RF|WLM@#DD4`v62bgeD|a3(XB zr15IpWh8@#M|Mxm{K+()#q6D*uQiVKcU6~_HvCL0%dPSy$_5;0*pIw-;{r_DquU18 zKuWaYB9s>pw#~u)ch2_D0d&C1+r{!n7-LhFxUvCLsH&-k25g1JV*5!M6qUSk)lLTw zK%?&Y4B^B zP#?7G5BL-qRx50(SfIXFx@*HP-$%A?(JnBhc7`ar+l!TK0)n+plk7b35vg%XRF=b z*2%`aeUTnuD9rr@6>*UUlJH^3lhiExgdq}SQ8OwwQmyrOf|oIAOv1VwDBw`NAE{8E zziD_6izy{T;xj_P3_-oCa`;5PW6--nP18*In@V{zUB4fmk1LaAhf_T$3C?hTB){-* zm(oR_D)?5{@GCZ0e_yXmsMCLP4@_Q4qKo5kK%~p%+3C12HHE)G5mwLno%r&4TgO`2 zS?~O#?~Kg0^F`uH2lIfui<}th3OZ`CGx)gu;CNVhtF}k0M#ycqNRz>uL&DmhXWW`C zKrD_${l}G>O9C6&QKh0!ue(sD2)V$Olbb@oC?jBgF{+NQi_FArXqa!wlGm*r3j4?7 z@NM7_2|xwjV_xznwbOHht?QkI{75g~x=K(zbktW4;DME%2wMymKRaeem(6j_-`xHb zwlp-CI{Wbr8vh6J@J4RXQi-T6sALIZagAC^LNA-URcL<_-1!)3VrhFgnEVhLtaCY_ zXs{Q7{+q#`wOXRl4p{#7NaF3g!|kr@)mv3+^Ge|1A;s_#m;!AHnHHuHp_>+kk>92r z5AA>|fyGr1y->2L0MXyL_ja79-U~Q^U`x&1Xxq9|7H5VxQNvT!zS>33oMjFL&{u$P zpsqKWzf%)Juw63T)fA5hB#}3y7t8)}qIH@CYeOH&nD6q&tLi5JhY&uBkf~(PRVPE7aC&)14Rjxpo2|h z8MzcAdqhMnw17oO(%&(Re|zfMYdC)@s0_g4hS9INeUE)TduYm@wa=7|yPv#EP}CMg z{KiBvj^Bh>j5WU|MPj@RVU}e?N zF*HfEKyCw6{7qpv?e5DbTyw2s2vT61OUFW&oHj4^XRJiC)Or54kqz18v8g^TZ=$Rw zsPVBGy}-1!e;Qe;{6&p1Qstn4th z+g0b|l4{cUzjz0}3}uFCZpkorEk=Wlyuf8Qr?Ca0>t?OJ*j@z{3g!aM#7zdkcf-Z- z`bH+`oz?%IPjN#xgfu`J6>;>IL1K~M#Si@tKxdo`0C~C-Ed~zyqhQ&}qDsQN3^)DF zOy^01naaB{x(5@C47B~DHM?Q*Kfh*whjC*DngcWK=OQp*!=?f3>8zT<-94Ze;-Nc8 zn)p&SkWS>RilG27lNrN-aW1ttcK~>ca%#IpVi4^FHhOOH@%VUeAZ}kT%N~=CL4yTkVa~gW+8YcoVc@b=(5Y1CPfnvW-QjkkR8gh zN~?WkX9f!Zku9fpLAI7Qb6784ivF>J%}2FUjwibb(f~6H*AV&m1>d^Rpl*uDs*%P#*JaEr-@sjBt^Ly&0YoZtoGRLwU%3 zcZjfhjo+oIVx4iSEOj_0v*_Z|f7^@_F}H%BxQ+VOt9i`Wuqclw z>Y0+rG*wQsY=!pM#%s6UyW_miXRa#wI6jY5Jimkf|Ddnz=$Pj!$TLi1>v~L7R3~%G zO|n~1$bf%2ziTXEBDQ~4?Rm6@7$8_|gYGlDA4kBqZSKvM_CH9*!Uz9zFb3OPR&Wv; zW9l|7^b{(<8vqUWZK$p-WbH95r@&;%5RZp!nYA~8{=|LSe{SK3EQ;fW zj#*-wuPKJ;RxlVwU_m*mt?t^p7IBR_IXRYSd*RIa>?9oQN!{Uq~}I!O&zB$ANboNqivbsE_4XlRaHybjD(>IO%aMJktf81f1I+9zh>Fvuf6H<8 zJ>q{Jb^D^+Q2RehDb8@K(}$r&;%-NoUne_7M^SdCV7#9Pp_1{Ri*QBe_U>y}gA30s zJ_0zh3aepeF9g(EwckO~o;VUTVVmXSE}OlFNO=r`dQ;CtgricpB#a44(GZI}Gxbp5 zsMURY7!zy4b}8IciG3k0QpB4)^jFy%^LiIQOTDa7jMca%Q1?0j{?s0Au|{U0iv?U2 zJWSaM6TXGF!VvyJGKy&9q6MWVy8d6|`AjdEc47!^wk@Y?ZI%^IQ8Yw?2%mgga3mP= zV*Uj(IT?{L6Axd!Cx#<2ZeZ2ea(w(S$YS4urwGa}ScU)@j7tgM6Jsn?CG?lr4J{30xn!r76@^{Z7Ew-(jrnw_W z`7R6H9F7DW>V~{gaZMW^7+D_r6{c?(K&8LBH`k z+oytFfKPAd>jjRxa?|#E0=hCXyvi_ivqzLWn`u*^04| z7F-yv6^ZRR1tBqNyyCkrXlh|gP*4mMGO!Tv@0@#ly#X1-BOzD^yxRm<#)4WL;=Qpo(y;S}&;$F9j%M7cZN$lSn3Kq(sV^ zH2kGz>zdJWEXJ0dqnaJT1}2Mmh2o+MXOqN9*~Vz@%=D^nkpUhSkO~@X2Nes%GFNmn z9a#G`uyb)VyB}j~wSF#2OdEexuwxw~$hJjh47S|Zr|IqeS3QFCQdW9^h~at44kkW) zUM_vS&$L0kEta&)BGM41HJ{rCc(12dK%d|V{G4{#jGgEX$x8o6b3r8+Cshak@iH1& z!qETYsM31B$}F+r27e$xSV89se%D608dcMIY-haS(w;5{``aIiX@$V2mpawD87p{S zTf2V(7t441gX3inY59%6ZmWOBR!?cO89)<_2cMgiyLm%kk3Jtq^wHx##OI9m@&4T- zwTfEzIgmByWTkm9AD9PP!1&!Ty&qzbPnB;UMv&lbx}e-O5ei;y^W6IIj^o3XIqe#j z!(StILZgCI2)zp^V)?+cvLMuvSEQCfOVHVKrX7Xq$-~Dgh`V=3=JzgIp~`Kw2kiEu z%h2oe>`%zbu(OS0h8X$=9CHsCK<{G{si-6yYN43^E_^MwW6$32%0zhU$|TJAN>pBW ztMYzg=hrI6r6wZ!Dfa!VN}}!IXSn|{Lc?iq+!2{MME{Lk7k|9|m|#R6yxbZsB`l&b z77Jm;HEvYoDLcy%uu=2NRh%VLyHopGLUB23SO2eKT^2y*vm0C1#TKu zL%w_bM`%I40huw)+%jsZal(k<7}f*|HXx>&Dl&shaEePfI9D0bu3>nzT>JSa9M5j! zOl4@szM_rz;{vkC4)%DP426y>Ezn@P-zJPfk<93B_>JWkzhTJxIrOYX z${*J+KALC#h-?rhEbcq96CFRKtZp*XCYm4wkcT!NLtHFbCoWnAWzURfrYrdr6TAUtKJ7}NP2bP;tRFLc%zCGJo()=RG0nTZgyR(hMC==i}*Qzc+flhCX(e?`7tAz8A0i z3(`>HW>XOAF0D*W>oFWWNjp6^gNt2S=W@Q~S!mSAN1!<5%8pzI+mp&1kKeb;CdW62 z7Ju0K0%5A5Y}*`y!Re4mNU$^{R6Pl#LsQ@XB{{nJD>#PEZuxl-y44k7*eUm$87o>b zk2bOj8kmq>^Sz*|HKTXjY3y6%=L-9r`Eeh2Ubh)wx_{@hA4H(T|BbX$e`;oN9RAo@ z$X|$7&~K`CE+Mxpj&wZT5&u!#Mk2%R%Ft31aWmi&z11ABdyC_2Og;Q3l((-J8EX<7 z0v0Y&Iu``^=X$gM#&YqB_d>^^lAr%6F3xXXdCSZ7LAWhdN#_4U{;^|(j^83glXY|r zMluPNXEUvZFsHsSCJ#`rT>CiTHN3jXGBzZC5J6F2$PqY&)COiFql2fhvK#`w7%>Z< zolG*tZE&cXu+qptRVT2(3WN*upahsznSV!LFM58LyO2P&ZFA#);M^V)(IPVJ^_jXt zO%WHBQP^C{WiMI0pPJeo_FxVYo|WIP~nn46H!(sN8} zv9z)cZpk)9+Gs-xV2v&aQP0PZzgx-}p=h=q5wrPEk)WpY{RRYr978TqvoB?)mp3^5 zW|2LnA(A{qu}`Z-&{zYMH0x3d6rCEb%(?_PTgLO>?TS=QOr)TH9DmII^>Q;hA`b20 zzklIRBb*j6OOhZteu4_B>n-nMjcJMpdNY_OkRB9kYtb|-pK)tUz@)T*z}iBT?gvx( zMR6YU>ArQDpZsF34_RgnOqKiF?heDj>0=cq*z1LQ^ZM7rnL{7VO+DmOeBkji4lQvP zON0k68CSd4V&Hw756@?RYHcHj%X&;2@yyP%#UU9>Hn4S>Q{$iDWZ6zkMrYxEOHX?~ zmhxB`_ceRdMDd(wDDojhhu$#TA9N!YrnS}j+lP{tPbKWeWBOh-x$37*?iudJt=F*B zX?~u#9Vw&^AH*P!Fg<$aRL&8daT-zuRl!+ny`2)vIh!~~tH2vTz)eix04^?@?;TZH zS!y_L>IC|k;Usewb2%Oh%@rJaJ4i0DlxLf|+e?7gTy#Y53Sj4PQ$td6^~HS<_;y&d z5EskliwmK)Hqa3Ke`yhO$L(;zi}nOLEh7}vzbAkycfLXSxY0rr{{}U`1iV8jOl0a- zhH<|5XDf%0u}I!8mhQ9w)e?rkL|O``Qm#XfFUC&Z^_Gl4FH6I3zbLgISSU%`R)-=+ z9vapb7sy(9<9`)PjkCQ;T*v0Pc9y-+L}jfs%EW3HXVsUMgwKSk)KKTb8~QCBOAsBb zT|-vIyKN7Aj#B+u+83hpOR+O1AtdLxa422jErF$DOGY$L1U(AZCpE^cbf{{k5Yo}2q zt8TxKPe@AO3k{Y95w<7l&@N8;mWve&$8jZ_t$rmTE^cOIaA+VDUOkcoF7#aG(M^S1 zgfm|{3F>4}{HsID@AM$|fag5d4eT``ANXl{xI9tuR9xzdL_O?t~fpIWV<6l!=qjt$3Hmq|rj1Ni_zP7h zI~>c{#K9Q0iFw-Q`e2#g)sxNrth9>q_O@d80SI*n)lNrHM*b2MA|Yrj0h<~b!(z9T zY^Bys{~2Y@JywLjCS(G9Jl?oh{0_0lK3nxtSOV&3a+@tt$&>LXAa>+|o^=jiwS zkzajTu=GUuE*k%1>^ovzOhBN2-XSZ)-DJou2M^0RxOOnB_y7EdZNQX#=3k-sCk+~ zoZ`42mil{Uwm~Lw&&?6Nxlq>+Aa)CDm{3F2h^QOzSUWQr+IgSwR3^6j^pAL$L!kSy zr6}4J)fUcJco2H(4&3WqFS$ld#M>IG@145d69*=bWg56Y!-2F!iSV1Kdl7kQj-ONB z$W4BSplw%kVbf>awmQtV>!ihGf$I}S4v^SPkO=lh!=c-|pk}iaP5Rn>$y?lEGt5(p zzax`<@^s6u4LKFFYPOK1c{jtbGiJvh{6Qnip-#KYGkU!RqilX{;wsEA{Da@4H8?72 z9V9t!83?)5(jUkrL2zQD=-wsXW}1fC#*04?IP51~UOWC7h&cMMM;($?2!x%#dB^i( zNb&_7@Nu_d|2Yz~lOUbxx7S1Uv*Le?z2+hYw`Y*LJ9cKSR6)vsV$fVj*0L3-#dVQ_ zSPv^}fG$AGZq8I=*{07Dx(Ex|X3-EYUnl~9NVQ(2A%PtsbA~97t5E2z+Eu1uG^7q< zakD)y<)M1f(bPINHinkY(u5ca!Y~oYTt{*iPo;a~m*rMNjcJM4JQvDlWm-3QyHEjd zHEGrMc6ePAmUSZ4Wu9%zoyS@XHCfA-jYrx^Hk|48h+AQ~SgXSNb9n?c?nzu%dWr0I z`7iwmkK)(_>;50n4@^-Bz@)#~eFw<~iADs1pAxotxY*aYX2jK%Cl}@6O!LG=77-)A57;S@C9XK?TWvnqoUd z^anN33x3niV;KK0Lhoa=Sb_=rn?EBHnf>Mv0su6JQx0pbiTgf7;a{}@zH$_aKE7PpOSO*30_i__&Eh!= z#sgH!`e-b0aHOe1lF`f48k0#^(@h_CWr%T+HEoBT>=_tZ+aJq+0z;(`l1n_~OGR5e z56FhZ$X`P8Z;v(%uEp$3U)sd4-kJ5e{623o3-sSkI8qsk*ZvP9H=&JIL>TLPj_V+b zW40SZCJ_|%N+D}DanVG|&`g>Zoy=vV7fYm;8N7GPR~!fl&KkQkD$42w`(!{m4i=Kx zw$cd7%CUlunCt3IaHx`486ry+w%42D?7GGv4^1m>NTi-c0E;Kl$`#N0(PlMHH|LiN z#txj-Laod{vTAP1KTW2gBMW_YIccXk&^#S2h3`x`|o z8hcq$=>G}luKHgi!l>uGikXsHPx5o8G*zNks1mt^H^fiP!-!rfNzta8Dkh^(Hn0)! z&zZ{JGgqmpA~4V+9`OS_}mKz{eCG1`Vu`f=db;Ce0cohrDB4$-+if`3C~lR1N88FwMf| zPUAvXE>-!*ONJcEH9j<-3uBvq*dHqPtcar_`K?@BZSYvP9ds$$$Pxl!{lNNu)cp-V zzr>;BCwF&?sifMmddgC8s(QthT9kKe8%i)~P$XCz+_EL^EwHA-=fgWBxbZXzpiT(x1#j?`qRowRJUZXrY zSFZkgl27HO!WfB_1uily^Gmj*yl1|g>af8JH*uy^E}~4E9OO4zkqIOMEQK=CT;x3v z{!lJNlPGYbd`QvH;kq|qP0rhJn(+P5>FsqXYGF#{XzMjlt}5q$0n0iSG)oMi2&iR& z;zBR0C4Vjf_f;*o|4%cpRJfL{465E1v^|bALWFN5%)9@YBf^$AEe>8P3%Q@lOFoF% znT6g9wPfb8dEhV8>RM?$S6m%7PCj`UfQ+Z-Z*dHjWWlK<*9D;Awur!rgbA3F6CSKe zI@SvT7uoupU1zQ0W>OC(p__KF`4CC$I`+j7~M7VBjX`YIL!8vA`+#8P7U~;T^=RxJF*+ z2BH`OCzg?3g?8AdHa2!r^dBP>`zv-bG=DNzMT3>oN&nf(^%eg75OvNj!t@UL#G@gO z%P1kZ-wi7jb==?>28|(OrX375hyjt9>o&VV|0=vm|1*JV+xKs2pVTbz3 zPr=M6)MQ>ZTqa%SpVJZ$Kcj`RZJE`jDbu0be}I+MG!Bs0YvNFe8RBx+Y-JH?l^6WU zSRnTCOK_5nl(pte(GbZXn_>a7Nc=#p`9Y`wS9aWcy#>l2$doYti=_e( zdvPPTOMhpnVnV<9WcZD%{ME`zS=w-~^Y(Oa@;hgiRCT7_efGQNhGN(A{Fs~DIMH9s z=Lp@bhC1?}!CKB*-UffVZ4Bcde)D}tj-`QNV+%O5>Nn?JY?snOR!Yl=Br0`F!-k~h zop>~D^l-pe_r1bv?0Ueb?O^A1r(B+v38)1bfMwrmGw9yR-L6?edZgQ3e{iRVz2rtX z5+8bt-BV}Z(rAlExJ_(vlCI3jR!Z&I^6Kb|Jk5QzGyr1D{zz6V%uPwMS1+q?z4CmR z^-^jN587`rikH1B>S0Yis+t{v+uOJqb6!VI-AEePIp{I?Dr3L=Yiszxyg+@jDEU7( zM5veM)hX)mAu^$|Se`gLFYl?d$j6$TzGST*UAS!JAa=PQe_>xJ6=jCa)FV{EBPu(p zu74OFYR&{cq}8KhgxD+dLe|JN-X%PSy z=6z!T2&}{9)+*7JTdlURg04>4w*)J~uCO>>z9`q$S^RmX!5zAavZQzWs8jReFjNfK zkO2-KfY{(_Qwv&72^zyd061wUA@N;8%{H7SY{k$d?FMIYWyS>derSyy2TPSK>i;)$ z@;!8dniI4`6VBYd<+nY2-1Yt%vsC8OSCu-dOlGo)_7q7}!ptGy16?~eY97M=Z(e1* zk?EP9)2@qkc4Y7AeeQ!h)fcdhxEIg+&TwBNg0bPraaX$LelozXE%)rC8X%va%E^JE zDwtv!lsM$@p7(ZMDWB6jLlQfO&^L%vQ-^Q)d>kzV)KrjOvNEcKy2pTNN;7`z#i{Z+ z;M9BTqu3VH20|gF(_X+i-W$nqH4$}u-c8;hIZk|z4BCAhu)eF=3?e=4*O~2rqJg+p zzaB{Qw>!ICQluWb+FEC8wYlDb4=i5d4@}4$3gN#_Q;C(yKAfVw|dy{zn)=5;Ja|l8O&9=)Zr=1%eu7?&i!e0w4`ApylEv>Q64Ht_IEpCeAAekYGZlPaw1H{_M_i$){Rbr+p3rYPLmfx6W0z64(b(iCu%FR zl>0c)|{UuC(*0n01%NI-|O?^5#@t+~n<4eHD z(JPet=T3yz)eHAjrEh8X-`_LV?)OI#3t=DZ-LTzQ-8lY3W^rTtVX1VFAN#ZGX~Ouc z8dCeSbwUcn;<2@-W&|LE+(9GAs28;8i(471#$`F_mmrOgAMzO>Wfl&<|Ch*xu?zG0 z_`$k)PkayIb4-A6nKK%$Bpa%U%7&N3iBcD))ft9^&PN+I`_Cf|Hn~-@ys^Y0%o#bj zc%c~|@VaF6wy5_*s^Z;&L7AhUhiDM^dMvFBA{8W}jT$t9AG0NCeC!y;b#f>Rg_uvy z*V=Gh*CJJ^xDR6ErEPU$DV(EvH@ws&erg%Q|clD z*fCSm-r{QPb?;06vt3ARivhAD97l&gj6zykcp+1EAMkznoord0ij0c)akrvwP=f13 z3)Wtz${fFq0iws5gAcm)S+}^Z2Z!rHGv-rC~=g@^qVgoMXnYRDG zbe0)WkQoW`!V!t^c1tX5gZPk9~oEI!o7me&-%CBH$Q zUma@y|8e)p%T#_Sq8I9BwkkndfY^lofnXUdXfb#!&g3eQz1?xDz=NS|+1!NDS>b0U zJzWnkGbAQDN$Hz$R6as+Rt%vjOwIab+=d@6fU$tvpebHHl0-hn9m_eaGLAz$7%k=6 zTT)aB7R4#aW_)B>w!gMlU0gH1%5x%jsg!xwKb*uevdHN48*eC@cRXVVDxJNeCRB1y zzmEJT3S>1AfVf9gxXHK$)s{e1r7opOg2YAZYDFY&X)JDfsXCo{Bx=5oK@&Qu6Cs-||(;4oAsbloNX}uYZA_Bi*lRCeI zg6OQNx{>+OBlJsbP=1NJqR~v5i9uLv)BZmi4^oI9o?9pE_lMs!g^%DA9~iIIe=6i{ zryS$V)l~a3gS+=v@2=Dj7O#${AN<$>4VlhwvAfqpeBnqR{V?ztUh7)mwmR%JfKMt?u> zFLu6%wT2JBn#9F3$%67bF09`lty@388!YG&TtB{F@MMrCRSzVF&{80HLgHoM0ct?a zJV+&H^37J%DrHm>)|0uKycL4Za9!@X&4<5S$IY81u7PFTmPE*Q6IhYuQ7%v+DcyOC zer_7#FUVqS7_^Nz#fOxd(uT`F<+Ky0i~)8;eHm!>bA!GM_*>eyaYn^T&~LH9v*Qj0 zFk+`#53356Y-{Oa18Nmuwa*4tZUQ#)vh1lNGQ$4u>^h~NTHK?Ra-%H+AU2j(WOdjc zDXgT+)=Zx3W_A2FNR6DLE@F$DxTUBWqLA`ikIntmORfr(;1htIa;eM6Q3l@YiZ;~$ zNlCFoEn$5*Z8xFz#^44PsadN|h@b5sYYJTl)L)UFUqjfVW^dQ}XTn{as}HGfAODbY zQm|brV4A3amRxDpm);r(P=YYja&ss_ZMJ#wE`|uHgkFeCgkE@BvHl^P1NMA0P01n94kTwsTf-@spP!WzACu4L zBzDDR|KZFpG|BI8dX3l{up`Q!eIA>=2NB`{mJZJ(M7@^oelCL$_QvA*PkVHgoW(gj zUF_RA;1>~Nsc_mk5dyOI=rA@CmbM*+C7g108wrBud_NzQub}pf0<5hmbeTHj`THn~Q- zZ%X&Rzx6$zIjI7XBGoM&BY?ZH5QaNoQ#QF{qIs0%arXzc0mb-8Ikp(@FE-G%idP_N zAevK3KAFuGdewmhFyRUXr`}k7ZhBS?HO@uAjomncDbWT3To%OITK?w!?2NJjih)@m z8l={@lX~04C0Ww)zgn%b`?bE7(|rILOQS{8vy+tXE!1h2q#o@~p2JQbbrqlU;YM#K z=Ss2cCNI(R^=V3jq*|hIh8DIU<_n-EGX$rF#;XF>n{EnD*ZxI`amj101T+dhR%KzpJ5uUrQa&<}wv1zJ^VsXwNx}g4-fE z*M9#Vz5Hqr-{Pux!F1s-e*5mF{MV&~`RcvF0%;w8oqSO|$ODWYI#FwGPvB}dH#hb@ z(b96{RU^bljN)A|AeCB8!=OYjT&kghWm`UQm4#=;G%>=+NGq&P7t%`Cbz@e0jH;RT zW1~=&SLIKffRbqbq|tUUujh(d7v@clz^Hq6=`#$;JxBJ!kAMYXz>N46^@d>;LG-7z zuck*JX zub$I8`JeuXfX)Kj(^c@kn?*V{xN}W*tZwtdg&olVE%=?aMF3`=@Mt>ZZNh|TN@?Y+ zYuhXFoPkiSoEout3tU`R3u6ylm9=?KCp*V7oJ5O7VCcON3d@>d73j!KF2vH5`KN@46DqsnR2qrB3FwlxoTadm` z$CMV+$d1t-N)VD{*wlSk!Z|XUaKnN`JIe%s^%9pjdIn}Om^R=ErYqQRrV1r25eg-{ zBe_XCfi9}a{ND`$l>p?0MPM;ebsJv}t0@Js;se@luQ3y+0^_8nqCT7wsA6bi(`qf0 z9hd4{W-9ynY|~WK#8eM0d@@UcW<$H*=kDmvKtJYpZ=#*r9z)@M@Z_|+=~FNw?21xv zi-!sO;ArmD&=A_LAL6^J8&GvSOkJr4LQ?u>Fd`hBq5i=DG`+_Eh zucniC<#7;Yv$S*jr-!p;52wUMk{bDCZUa0#hWp3g&IW7&tA$iD9}rH|h(%A$pU*$q zp2zeTXIe^f7tk~`K(dgz*?Y2GmV{qUJB6kF-MrEF-u`ia-n-U5=kC4s`Qn&ULF`!S+d+oAw0#BHMR(zVB|c~V(KP2U zi6x^VLHrI9g847wamg%_c}pVUTc9LU=scIos8=@49JZC<=fxsIXwtyvVWP~OaJ?6z ziy$|&C8x}owOMPbjZ{Z+7Oz)+(*f2i2L)csjuYyKwif=zPRz@qqYadX3{1hAE<7?V zp6>*|t!ntsSn@R7XNp$mH0|nG}zRLhcQeC?sb&0@iL)(n=SLZ+_-1SMMzwbT<_LLIE zs^mSUV!2=98d%IvW+rtP%3y!~=`+Z5Wn%s4fM!4V7vrrS(jqn-H@?5IsJm2O+ z0`ftnzWi{4!#{F|7j?J48RV_k(I6b&!`L|tLdwAV@Ysjbd9zH_C3we*dmVbf%xY~f zL%h^g=v<~&rDTTvA$+`%eWAi|iUE&Ow8##z>U!zX|7|?7`4>vAGUn*L^af`f{Rm(K zD?0SrB+yCVm-)9Xfqbp!ARbn+AvDiESj|gE>zNucu&&A{AW~onVGEgq;aYXdeOE@J zJ!EdG;$wA^lACH7(dO;`nMk#J6IE4~;EL-)MdPbj{91;_5I~h(a@BQ}pnJ(eqU=o0 z@s{44Xfo6rA^Iz=fjpHJ%@8KdRyEEbu4VF+|KTaeRoe0UlG{(L0mTk`?^`0hXQW}c_LT^ny*m!*LaD0yMEhgunlEsFaTgta zvAGnOw%PA7*=U7lu_x=-Rlaa|=*L$Duph-AH%hr@ z4MgxS7WQ!VICdwE^Q9Wkc1Gwrj)n4W_wgh$-hGn(ANhGxuXn<--fzQUupmTL+<*{4gpdQqU2Ih#~W#!-GhYO zHN#;qYnqJ+9)Nzc&r!IZokod;h(bhDmYrD4D@~?{N=|2*kaCQ5>xhfRV!xun*n)2A zq^>yLXs0Osb#ME^7KiQ*$~4It+-4Q%5w*?rHTr;h?7KckCc|7S@H<%pak4m-YF`Ef zXrH3y=mJ=$72{{KK*K$?%WhD=Az?SwM!BzX35{m4&i?0RhU7SX@nc*du4#2|iitnL zq-4On>u+K+X~(!%LYG+b*DfnY+2TIO#%)ROSK!_I7=sppTRhU9#FR0H@JWA%^XU09 z_b{7+*GI}IFme>s+TyXzv6e{o4CoJ={b;&2d^|9nkUNmX5qZ6S{QkSND5^591&`~;7PcR>lJqQm?Q1mW z7EzmlWndZ()v-ihGg_L~k36X1R17sXtJP`p7{Se6`L!C$#E7g{EMw0< z(Fh4jes|a%?54~&X+f9<@+8%$8AuWq7s#A*`=L(po2r)G+O^d(iJhMC_7w(cQ&~;5 z#dOTD4Nq*&%G{pBunSLxVR25>f`k$ld*hv`V44+;yxGN!!0`N|w*~1)KQ51@%b#?} z0zV-)-UW3cQA@Ys&hta(_JLsnY_upddH8xZI;3o9wcvVdTJxSxbM(^W1`kg6(*5|? z#DbP)f6>122Jo=f+sxjXG|3qtGB#!*O8fkC=^AaE?Mo%8Rn#8b745w@PG{f;blu~2 z8UsiiSDnTE14(-J&-#EhZffw;>7+8zz#d=0WM7+_{(O$%iuOs|B zF#I+TO!(+#=6%59dx!Px%k!|#$D(`)&QEXUVM)5?p&|Lv<4SVdNBxdAZ}^vg=oGDL z<7NDyh?AxT-A%k44N)4CfL(ulN2xUh*f?;>QBZxeDq5%3;AkdMV1eK1TcX6wiawyV z1DY1jy@xN24cjLUlO-(6b^y?XMCNWDL!+;LzZO{YYIUmdJcJqFk}O&i7s^1I*?=n6 zS}J(ojAAC9I>9P5lieBg`>2xhZ-1!7Yl;owYY$$z+FN~J6>wQN{h8a#ZhmDnpLl0r zf8S;NM;*6-rFW@qK-Xlk{`n6XEMC_{UncGP>mXu7rxQgfH5WF_{W!np8Au0u?uax^qt7p)4w1Q-@6T|xzV8X2 zrux3#x)4Q65}F4BSBSIe{66nLzP$eSyp=@PasJ&T>pG*ZE`YHc_V>kqsSFE!+o!(* zAEg$TIvOQR922A%7|lZq(StwupLe?nHY9@eWa|(@>$)ObPgjf{y5;Z6Dx{XYbTdaXUkGP zdt?De$1fXM;f;^sm(I}6PnePN(c|0ic>X6xE@VG{j_KTP3TAQ1yb+c{j_Bv^)Q7RL z4uQSR>4D5IwW6T>koZQKvAS`(#b?;^=_#J%-E!dL^qBWShUU5c|4WK2^)5>27!K9cx(*qIfNwBrH@Sf!GGyNP~N~ zqIG3#)(OZdiV;hharhyM0O67q!OvB@%BN&(aoy2wfy{>!H(vUpvDWMu18VhJ^ZckX zvv5AsY}_2fPtvCFS4k(&wwg^#O4@WO0-knm5i^PW%$eHf13|lTG}=U>GjVR_fT8LX z(42%Eiji+#Hg$!Z-Mq64;SkU%^vejOW}meMd_ss0Qlf&;gj8qq@7YRWZ3~DyePdN> zGLDeIY+vKDPW9!31as*e`~jdMM@X~cJg;YE-wc`rQU{)41qO{Q6E>Fmker84$J34D zO&wc3Z+_`V3)mgfOgJjhb%&=(x{ou#W^(B$N=k|%Q{1Axlk2>{v-%9F3QDa8I>PQ= zPV_-i>f^6AsEo?qubHGJgkN&k3irARABw3M2 zmGazNx_eE(y{$$({J<4uHgs^csb@$9-w@uY4nofBEpXL9{^JkD`>zcsM<0RAL1877 z=ajrIUBUL@qtY#EoZHhKmc|a!Ob^lZIugVpQ7u0lR8!r@Uq*v*4LS7pEoOF3G1=)B zTA(c=uacR*NZOpp;Xr9p;`iSop;@H1VL9x5FZvWBx^9o3= zpFLfiyI#1%)PxHg>=1qRHQLsi)NsXoR4wlExjoxaPc>+pyy_4^$&E}{-{+gIo_1W}Gk-yT>+J$JdIr#gHDf;H*| z>)QpIcnDuwI%V?mS5EZlILy`y?Wn0H0g`Py%*P7V5UNZ+E4&{V=I1;WXr1-`DomxJ zMVFtbvY(yAmt5I#SmO-J{$+;FYHv`pnG%XJ8ihTgZnn?`EAbv8yf2;;z;~b zMBVb}jI|$qV`K{_2Qj**`_DHh%igyysv7wZ)?E1UZj_7?T*f&$AD-^t(LA8Fu6(>` zZh9WfzuZmBfg5uqCc>?fd#dU*SgO1bv)9@_)z77UINVA}iHpOdIza4jTpal1${Y4u zcjaMy_i1LM^*UGdW+v?UXm)=W@b?FJ#wpYM3y2P6$365vb29*I zYVNtm=M;-96&Xpti*}3J`{tRHyKfzesOu~hb}xAv@G#zAez4j4`s{a)WVi$wK(ud% zf(d|(NRS#%Y{ypxqGYJu+~f5k7IZu?7CSnZtoHFXW>^3leebDyhoIpN z1SrO8A!x+d7?744;x2@N2wEJwje(q?#-R*r1o04|R;p?(sla}M`3o(}I&z<4i0Ox5>1dykYYYdnbs z31?MYdwaW(358@^oVNY_%|#vrzFL1pvEYf{8{-sTIm%%_VYhQw5za>4Ze^@cn2z#8 zNH!HC)fT%Jv4hx!SZAO8XdV-(PP)gRspJ}JlP^6?F$Z|48+S5PxW0OjV}|_{F0KA- zVMu5YcGLo(X>u9{kGkI&<1K=mJADgAG~je1iA{RTiCCjYs$;+Y3>AqT+NN zMec*B1;QF`$zn7%gb$Rw(%siuOcJ(An&iJ?8E_PPb9y~A^miq+UgZrgsSmk2VVmvXveqpYJj|Hw7%~5POe22X}2as%y*C_TfwPR}uqwXxbte;!Vj`wv!M$jp81PpbwW6@mSdF)4;DX{zG(XTe zY9v-8EuU@mJNJSw7_kL>VU0y>drQ2bF1~}vMa;;B0AhQ&CcQgra~^duR2L$AG#h4O z6gzHA>;iW4o0LIGezJ)$HkEE&huKtR5&<*Wnbdf&hAqD6Y^EGe??zkyB7Pt1xUza0 zEoB9Z1|WxzPf4L&2dmiy?DNS4C`QPL)$=*Cp7Zo8b}Z@}*~l=sj18x9XA5T)DNTf< z3Uf0zNxKy7jGA``YwO;6BFhIU=7r9ukq@n6u;svZAq^3fS_A}CsNx%tR-(z?_RUHR z>^whDHM$6%+yBLXQ~azz9{iav0phzA1N(Hd6m}R`M}4bGnzDf;3zvL788LSk67X{< z0Xg*ar=l_R)8!K9fb3ddLu4znYnAPo@)Vn(CBXg!S!@rLPwHyT3Z`5LKz~E;wS~Zj zGFI~y3e!Apy3ibp4gmyB56CJC1J_Taz5Rx;lI=^;i#QO4D_}&)L5bDFA+2{l24i{(s2@dx$fKUu!vRf-Hk~jpToNZyEGd0E3(YXGr#p}A*ljI?9YNT zRut(2F)=6B}^LGzZH! zTa5;5X$P5mWGNc6$W^e<7ijEz^_h;F7OC83p@_cJ5G#}Gz;9Q%%p2#OR8U93QO`x7 zkz1$tG;hV=Ls!H?qtgi5Xh~8I@d+D4Zaz`kFHgYZrj#Lo@Nz4gdwBlVh*X;q4UJSf z1px=d`M&RGO-Z-weQ`*CxK5puI~OHeHv?6tej8FYrET@G>hYM@ouLr zacP02!L1{F77IecGwgV&M438Z`wCmKa?B(HbO8PQoU|xGZ15v~5D7wNG_Z@mh#tZ) zCOz6{;HZ^Ch{_Y1C}&XcfnF^Uv!>`{G^#so5ML&DdIiYbPPgV!y;L2_TIU9O$pjKd zLINnnRup6rZeV(Y@#%Q_$mdliShK$P`2}PKQ;vQ~4bCY-!uHT=Q%KQQP8NK@-JsAQ z+rfsa>`?QA5PfV34~=k2G&q~5&wykV@Z)5C^Z4bNcJRk!U}lnB#k2w*))jALSgON0 z!aRA$F}jPVcD6jL2~!c@>&SRpe0JqH9f$D>AT!TUl$xp@$^}}`7$RR=UVq={#@)=* zt(2&j_ml2>f2Z>-GgTMA4GXl7leLl>CAt>>%IUw7>WioU4}yH>x9K9zI|Nk;Bz?Br zpLbY3ycUG@-yV1e2ADlR^sRHbv{hX^dF$V%HA>e)>oM!0E>rKVJ<&QTQu~0Ig8{F% zJgt+IxLFY+ajX~_4^S9o$LWDqj4#-gWuzz&L)$8FUvw1}cdCQdl=lv3L%v{Z^H0T{*sX;o-;N*Oen5B3%UJJ3F?5p{2~lLihw#WA{e$#hmQ^!(xz}!Tl zr(Eu`>FsW?}ev#rFN~kK}52lQ^J7aIJNz5rt*3# zW_%Wa2aY3HMSITt1jPfR49dO$f)o-Nv!Wt_(&)_~5_}Y18x0M>Z@%p4q#%bmUby8s z8V1Vzy2S3Cy*a84VD|-@l0qSdej~9_@-Q;g9%DeDS_$zobkC0al<%qO-X0e&K zjMwv#xiv54g!$m~xKEZFS}6FGDDgwF(wdM~rBIp#P0KV5dJ5uF4A~GP1!Xf5bC;;d zOogqSfzx(!8yt{(-kfQC;l(#H*RS8GQvqSF_z0Mxl!&SdW%bNDa4SV~O7aS3&YuzI zIEd6JTgrv@FOEO!U@<`RltMmZGOiji6U)jKBk{_=$Wq)IeX18a#Pdxl^?#e~Gi1)4 z0lWPomLTaQeztWt`n}AC&SwC2mp}>OV$=GI8T~g_`)^ None: + op.execute( + """ + UPDATE public.schedule_items + SET status = 'archived' + WHERE status IN ('completed', 'canceled') + """ + ) + op.execute( + """ + ALTER TABLE public.schedule_items + DROP CONSTRAINT IF EXISTS chk_schedule_item_status + """ + ) + op.execute( + """ + ALTER TABLE public.schedule_items + ADD CONSTRAINT chk_schedule_item_status + CHECK (status IN ('active', 'archived')) + """ + ) + + +def downgrade() -> None: + op.execute( + """ + ALTER TABLE public.schedule_items + DROP CONSTRAINT IF EXISTS chk_schedule_item_status + """ + ) + op.execute( + """ + ALTER TABLE public.schedule_items + ADD CONSTRAINT chk_schedule_item_status + CHECK (status IN ('active', 'completed', 'canceled', 'archived')) + """ + ) diff --git a/backend/src/core/agentscope/events/persistence.py b/backend/src/core/agentscope/events/persistence.py index a948b6b..35c0eaa 100644 --- a/backend/src/core/agentscope/events/persistence.py +++ b/backend/src/core/agentscope/events/persistence.py @@ -7,8 +7,9 @@ from uuid import UUID from sqlalchemy import func, select from sqlalchemy.ext.asyncio import AsyncSession -from models.agent_chat_message import AgentChatMessage, AgentChatMessageRole -from models.agent_chat_session import AgentChatSession, AgentChatSessionStatus +from models.agent_chat_message import AgentChatMessage +from models.agent_chat_session import AgentChatSession +from schemas.enums import AgentChatMessageRole, AgentChatSessionStatus class MessageRepository: diff --git a/backend/src/core/agentscope/events/store.py b/backend/src/core/agentscope/events/store.py index 23eed2b..3113785 100644 --- a/backend/src/core/agentscope/events/store.py +++ b/backend/src/core/agentscope/events/store.py @@ -6,12 +6,11 @@ from uuid import UUID from core.agentscope.events.persistence import MessageRepository, SessionRepository from core.logging import get_logger -from models.agent_chat_message import AgentChatMessageRole -from models.agent_chat_session import AgentChatSessionStatus +from schemas.enums import AgentChatMessageRole, AgentChatSessionStatus from schemas.agent.system_agent import AgentType from schemas.agent.runtime_models import AgentOutput, RouterAgentOutput, ToolAgentOutput from schemas.agent.visibility import SystemVisibilityBit, bit_mask -from schemas.messages.chat_message import AgentChatMessageMetadata +from schemas.domain.chat_message import AgentChatMessageMetadata class EventStore(Protocol): diff --git a/backend/src/core/agentscope/persistence/user_context_cache.py b/backend/src/core/agentscope/persistence/user_context_cache.py index d8d8b67..a040ed8 100644 --- a/backend/src/core/agentscope/persistence/user_context_cache.py +++ b/backend/src/core/agentscope/persistence/user_context_cache.py @@ -9,7 +9,7 @@ from uuid import UUID import redis.asyncio as redis from core.config.settings import config from core.logging import get_logger -from schemas.user import ( +from schemas.shared.user import ( UserContext, parse_profile_settings, ) diff --git a/backend/src/core/agentscope/prompts/memory_prompt.py b/backend/src/core/agentscope/prompts/memory_prompt.py index 20cd2d7..ccc02cc 100644 --- a/backend/src/core/agentscope/prompts/memory_prompt.py +++ b/backend/src/core/agentscope/prompts/memory_prompt.py @@ -2,7 +2,7 @@ from __future__ import annotations import json -from schemas.memories.memory_content import UserMemoryContent, WorkProfileContent +from schemas.domain.memory_content import UserMemoryContent, WorkProfileContent def _wrap_section(section: str, content: str) -> str: diff --git a/backend/src/core/agentscope/prompts/system_prompt.py b/backend/src/core/agentscope/prompts/system_prompt.py index 6eac2d1..a9228d3 100644 --- a/backend/src/core/agentscope/prompts/system_prompt.py +++ b/backend/src/core/agentscope/prompts/system_prompt.py @@ -17,8 +17,8 @@ from core.agentscope.prompts.route_prompt import build_frontend_route_prompt from core.agentscope.prompts.tool_prompt import build_tools_prompt from schemas.agent.system_agent import AgentType, SystemAgentLLMConfig from schemas.agent.forwarded_props import ClientTimeContext -from schemas.memories.memory_content import UserMemoryContent, WorkProfileContent -from schemas.user.context import UserContext +from schemas.domain.memory_content import UserMemoryContent, WorkProfileContent +from schemas.shared.user import UserContext def _wrap_section(section: str, content: str) -> str: diff --git a/backend/src/core/agentscope/runtime/orchestrator.py b/backend/src/core/agentscope/runtime/orchestrator.py index edf00fd..55617ac 100644 --- a/backend/src/core/agentscope/runtime/orchestrator.py +++ b/backend/src/core/agentscope/runtime/orchestrator.py @@ -6,9 +6,9 @@ from ag_ui.core.types import RunAgentInput from agentscope.message import Msg from core.agentscope.runtime.runner import AgentScopeRunner from core.logging import get_logger -from schemas.automation import RuntimeConfig -from schemas.memories.memory_content import UserMemoryContent, WorkProfileContent -from schemas.user import UserContext +from schemas.domain.automation import RuntimeConfig +from schemas.domain.memory_content import UserMemoryContent, WorkProfileContent +from schemas.shared.user import UserContext logger = get_logger("core.agentscope.runtime.orchestrator") diff --git a/backend/src/core/agentscope/runtime/runner.py b/backend/src/core/agentscope/runtime/runner.py index aab1a4d..7cc9ef8 100644 --- a/backend/src/core/agentscope/runtime/runner.py +++ b/backend/src/core/agentscope/runtime/runner.py @@ -40,9 +40,9 @@ from schemas.agent.system_agent import ( AgentType, SystemAgentLLMConfig, ) -from schemas.automation import RuntimeConfig -from schemas.memories.memory_content import UserMemoryContent, WorkProfileContent -from schemas.user import UserContext +from schemas.domain.automation import RuntimeConfig +from schemas.domain.memory_content import UserMemoryContent, WorkProfileContent +from schemas.shared.user import UserContext from services.litellm.service import LiteLLMService from sqlalchemy import select from sqlalchemy.ext.asyncio import AsyncSession diff --git a/backend/src/core/agentscope/runtime/tasks.py b/backend/src/core/agentscope/runtime/tasks.py index 7c52889..9798ecc 100644 --- a/backend/src/core/agentscope/runtime/tasks.py +++ b/backend/src/core/agentscope/runtime/tasks.py @@ -20,13 +20,13 @@ from core.config.settings import config from core.db.session import AsyncSessionLocal from core.logging import get_logger from core.taskiq.app import worker_agent_broker, worker_automation_broker -from schemas.automation import MessageContextConfig, RuntimeConfig -from schemas.memories.memory_content import UserMemoryContent, WorkProfileContent -from schemas.messages.chat_message import ( +from schemas.domain.automation import MessageContextConfig, RuntimeConfig +from schemas.domain.memory_content import UserMemoryContent, WorkProfileContent +from schemas.domain.chat_message import ( AgentChatMessageMetadata, extract_user_message_attachments, ) -from schemas.user import UserContext +from schemas.shared.user import UserContext from services.base.redis import get_or_init_redis_client from services.base.supabase import supabase_service from v1.agent.repository import AgentRepository diff --git a/backend/src/core/agentscope/services/context_service.py b/backend/src/core/agentscope/services/context_service.py index 4260462..383b590 100644 --- a/backend/src/core/agentscope/services/context_service.py +++ b/backend/src/core/agentscope/services/context_service.py @@ -6,7 +6,7 @@ from typing import Any, Protocol from schemas.agent.visibility import SystemVisibilityBit, bit_mask -from schemas.automation import ContextWindowMode, MessageContextConfig +from schemas.domain.automation import ContextWindowMode, MessageContextConfig _DEFAULT_CONTEXT_WINDOW_USER_MESSAGES = 20 diff --git a/backend/src/core/agentscope/tools/custom/calendar.py b/backend/src/core/agentscope/tools/custom/calendar.py index 43cbec6..eaf6fae 100644 --- a/backend/src/core/agentscope/tools/custom/calendar.py +++ b/backend/src/core/agentscope/tools/custom/calendar.py @@ -84,7 +84,7 @@ class CalendarWriteOperation(BaseModel): le=10080, description="Reminder minutes before event start.", ) - status: Literal["active", "completed", "canceled", "archived"] | None = Field( + status: Literal["active", "archived"] | None = Field( default=None, description="Optional status for update action.", ) @@ -163,6 +163,10 @@ async def calendar_read( ) -> ToolResponse: """Read calendar events with optional keyword filtering and pagination. + Status semantics for returned events: + - active: Event is actionable. + - archived: Event is historical/expired and should not trigger reminders. + Args: query: Optional keyword used to filter events by text fields. page: Page number starting from 1. diff --git a/backend/src/core/agentscope/tools/custom/memory.py b/backend/src/core/agentscope/tools/custom/memory.py index 87c0631..87ba62f 100644 --- a/backend/src/core/agentscope/tools/custom/memory.py +++ b/backend/src/core/agentscope/tools/custom/memory.py @@ -15,9 +15,9 @@ from core.agentscope.tools.utils.tool_response_builder import ( build_error_output, build_tool_response, ) -from models.memories import MemoryType +from schemas.enums import MemoryType from schemas.agent.runtime_models import ErrorInfo, ToolAgentOutput, ToolStatus -from schemas.memories.memory_content import UserMemoryContent, WorkProfileContent +from schemas.domain.memory_content import UserMemoryContent, WorkProfileContent class MemoryWriteArgs(BaseModel): diff --git a/backend/src/core/agentscope/tools/utils/calendar_domain.py b/backend/src/core/agentscope/tools/utils/calendar_domain.py index a2504e2..be3261e 100644 --- a/backend/src/core/agentscope/tools/utils/calendar_domain.py +++ b/backend/src/core/agentscope/tools/utils/calendar_domain.py @@ -46,6 +46,9 @@ def create_schedule_service( def schedule_event_to_dict(event: object) -> dict[str, Any]: event_id = str(getattr(event, "id")) metadata = getattr(event, "metadata", None) + status_value = getattr(event, "status", None) + if hasattr(status_value, "value"): + status_value = getattr(status_value, "value") location_value = getattr(metadata, "location", None) color_value = getattr(metadata, "color", None) or "#4F46E5" reminder_minutes_value = getattr(metadata, "reminder_minutes", None) @@ -58,6 +61,7 @@ def schedule_event_to_dict(event: object) -> dict[str, Any]: if getattr(event, "end_at") is not None else None, "timezone": getattr(event, "timezone"), + "status": status_value, "location": location_value, "color": color_value, "reminderMinutes": reminder_minutes_value, diff --git a/backend/src/core/automation/scheduler.py b/backend/src/core/automation/scheduler.py index 69b70cd..dd38574 100644 --- a/backend/src/core/automation/scheduler.py +++ b/backend/src/core/automation/scheduler.py @@ -5,7 +5,7 @@ from uuid import UUID from core.config.settings import config from core.logging import get_logger -from schemas.automation import RuntimeConfig +from schemas.domain.automation import RuntimeConfig logger = get_logger("core.automation.scheduler") diff --git a/backend/src/models/__init__.py b/backend/src/models/__init__.py index a0f5f4b..6a443d1 100644 --- a/backend/src/models/__init__.py +++ b/backend/src/models/__init__.py @@ -6,7 +6,7 @@ from models.automation_jobs import AutomationJob from models.group_members import GroupMember from models.groups import Group from models.inbox_messages import InboxMessage -from models.invite_code import InviteCode, InviteCodeStatus +from models.invite_code import InviteCode from models.llm import Llm from models.llm_factory import LlmFactory from models.memories import Memory @@ -16,6 +16,7 @@ from models.schedule_subscriptions import ScheduleSubscription from models.system_agents import SystemAgents from models.todos import Todo from models.todo_sources import TodoSource +from schemas.enums import InviteCodeStatus __all__ = [ "AgentChatMessage", diff --git a/backend/src/models/agent_chat_message.py b/backend/src/models/agent_chat_message.py index fbf72ba..d55513f 100644 --- a/backend/src/models/agent_chat_message.py +++ b/backend/src/models/agent_chat_message.py @@ -2,7 +2,6 @@ from __future__ import annotations from decimal import Decimal import uuid -from enum import Enum from sqlalchemy import ( BigInteger, @@ -19,13 +18,9 @@ from sqlalchemy.dialects.postgresql import JSONB, UUID from sqlalchemy.orm import Mapped, mapped_column from core.db.base import Base, SoftDeleteMixin, TimestampMixin +from schemas.enums import AgentChatMessageRole - -class AgentChatMessageRole(str, Enum): - USER = "user" - ASSISTANT = "assistant" - SYSTEM = "system" - TOOL = "tool" +__all__ = ["AgentChatMessage", "AgentChatMessageRole"] class AgentChatMessage(TimestampMixin, SoftDeleteMixin, Base): diff --git a/backend/src/models/agent_chat_session.py b/backend/src/models/agent_chat_session.py index 6e096c4..32ada06 100644 --- a/backend/src/models/agent_chat_session.py +++ b/backend/src/models/agent_chat_session.py @@ -3,7 +3,6 @@ from __future__ import annotations from datetime import datetime from decimal import Decimal import uuid -from enum import Enum from sqlalchemy import ( DateTime, @@ -19,18 +18,9 @@ from sqlalchemy.dialects.postgresql import JSONB, UUID from sqlalchemy.orm import Mapped, mapped_column from core.db.base import Base, SoftDeleteMixin, TimestampMixin +from schemas.enums import AgentChatSessionStatus, SessionType - -class AgentChatSessionStatus(str, Enum): - PENDING = "pending" - RUNNING = "running" - COMPLETED = "completed" - FAILED = "failed" - - -class SessionType(str, Enum): - CHAT = "chat" - AUTOMATION = "automation" +__all__ = ["AgentChatSession", "AgentChatSessionStatus", "SessionType"] class AgentChatSession(TimestampMixin, SoftDeleteMixin, Base): diff --git a/backend/src/models/automation_jobs.py b/backend/src/models/automation_jobs.py index baef990..2e0322a 100644 --- a/backend/src/models/automation_jobs.py +++ b/backend/src/models/automation_jobs.py @@ -2,23 +2,15 @@ from __future__ import annotations import uuid from datetime import datetime -from enum import Enum from sqlalchemy import DateTime, JSON, String from sqlalchemy.dialects.postgresql import JSONB, UUID from sqlalchemy.orm import Mapped, mapped_column from core.db.base import Base, SoftDeleteMixin, TimestampMixin +from schemas.enums import AutomationJobStatus, ScheduleType - -class AutomationJobStatus(str, Enum): - ACTIVE = "active" - DISABLED = "disabled" - - -class ScheduleType(str, Enum): - DAILY = "daily" - WEEKLY = "weekly" +__all__ = ["AutomationJob", "AutomationJobStatus", "ScheduleType"] class AutomationJob(TimestampMixin, SoftDeleteMixin, Base): diff --git a/backend/src/models/friendships.py b/backend/src/models/friendships.py index d7f3f45..b03a753 100644 --- a/backend/src/models/friendships.py +++ b/backend/src/models/friendships.py @@ -2,21 +2,15 @@ from __future__ import annotations import uuid from datetime import datetime -from enum import Enum from sqlalchemy import DateTime, String from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column from core.db.base import Base, SoftDeleteMixin, TimestampMixin +from schemas.enums import FriendshipStatus - -class FriendshipStatus(str, Enum): - PENDING = "pending" - ACCEPTED = "accepted" - BLOCKED = "blocked" - DECLINED = "declined" - CANCELED = "canceled" +__all__ = ["Friendship", "FriendshipStatus"] class Friendship(TimestampMixin, SoftDeleteMixin, Base): diff --git a/backend/src/models/group_members.py b/backend/src/models/group_members.py index 07d7e8f..fd9e944 100644 --- a/backend/src/models/group_members.py +++ b/backend/src/models/group_members.py @@ -1,30 +1,20 @@ from __future__ import annotations import uuid -from enum import Enum from sqlalchemy import String from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column from core.db.base import Base, SoftDeleteMixin, TimestampMixin +from schemas.enums import GroupMemberRole, GroupMemberSource, GroupMemberStatus - -class GroupMemberRole(str, Enum): - OWNER = "owner" - ADMIN = "admin" - MEMBER = "member" - - -class GroupMemberSource(str, Enum): - INVITED = "invited" - JOINED = "joined" - - -class GroupMemberStatus(str, Enum): - ACTIVE = "active" - MUTED = "muted" - REMOVED = "removed" +__all__ = [ + "GroupMember", + "GroupMemberRole", + "GroupMemberSource", + "GroupMemberStatus", +] class GroupMember(TimestampMixin, SoftDeleteMixin, Base): diff --git a/backend/src/models/groups.py b/backend/src/models/groups.py index d54b607..0694aed 100644 --- a/backend/src/models/groups.py +++ b/backend/src/models/groups.py @@ -1,18 +1,15 @@ from __future__ import annotations import uuid -from enum import Enum from sqlalchemy import String, Text from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column from core.db.base import Base, SoftDeleteMixin, TimestampMixin +from schemas.enums import GroupStatus - -class GroupStatus(str, Enum): - ACTIVE = "active" - ARCHIVED = "archived" +__all__ = ["Group", "GroupStatus"] class Group(TimestampMixin, SoftDeleteMixin, Base): diff --git a/backend/src/models/inbox_messages.py b/backend/src/models/inbox_messages.py index e77269f..5293671 100644 --- a/backend/src/models/inbox_messages.py +++ b/backend/src/models/inbox_messages.py @@ -1,27 +1,15 @@ from __future__ import annotations import uuid -from enum import Enum from sqlalchemy import Boolean, String from sqlalchemy.dialects.postgresql import JSONB, UUID from sqlalchemy.orm import Mapped, mapped_column from core.db.base import Base, TimestampMixin +from schemas.enums import InboxMessageStatus, InboxMessageType - -class InboxMessageType(str, Enum): - FRIEND_REQUEST = "friend_request" - CALENDAR = "calendar" - SYSTEM = "system" - GROUP = "group" - - -class InboxMessageStatus(str, Enum): - PENDING = "pending" - ACCEPTED = "accepted" - REJECTED = "rejected" - DISMISSED = "dismissed" +__all__ = ["InboxMessage", "InboxMessageType", "InboxMessageStatus"] class InboxMessage(TimestampMixin, Base): diff --git a/backend/src/models/invite_code.py b/backend/src/models/invite_code.py index c9ace1d..bab7f63 100644 --- a/backend/src/models/invite_code.py +++ b/backend/src/models/invite_code.py @@ -2,7 +2,6 @@ from __future__ import annotations import uuid from datetime import datetime -from enum import Enum from sqlalchemy import CheckConstraint, DateTime, ForeignKey, Integer, String from sqlalchemy.dialects.postgresql import UUID @@ -10,12 +9,9 @@ from sqlalchemy.orm import Mapped, mapped_column from core.db.base import Base, TimestampMixin from core.db.types import json_jsonb +from schemas.enums import InviteCodeStatus - -class InviteCodeStatus(str, Enum): - ACTIVE = "active" - DISABLED = "disabled" - EXPIRED = "expired" +__all__ = ["InviteCode", "InviteCodeStatus"] class InviteCode(TimestampMixin, Base): diff --git a/backend/src/models/memories.py b/backend/src/models/memories.py index afb8f8d..3a3cd0a 100644 --- a/backend/src/models/memories.py +++ b/backend/src/models/memories.py @@ -1,7 +1,6 @@ from __future__ import annotations import uuid -from enum import Enum from sqlalchemy import String from sqlalchemy.dialects.postgresql import UUID @@ -9,16 +8,9 @@ from sqlalchemy.orm import Mapped, mapped_column from core.db.base import Base, TimestampMixin from core.db.types import json_jsonb +from schemas.enums import MemoryStatus, MemoryType - -class MemoryType(str, Enum): - USER = "user" - WORK = "work" - - -class MemoryStatus(str, Enum): - ACTIVE = "active" - DISABLED = "disabled" +__all__ = ["Memory", "MemoryType", "MemoryStatus"] class Memory(TimestampMixin, Base): diff --git a/backend/src/models/schedule_items.py b/backend/src/models/schedule_items.py index bcc6a25..28fcb26 100644 --- a/backend/src/models/schedule_items.py +++ b/backend/src/models/schedule_items.py @@ -2,7 +2,6 @@ from __future__ import annotations import uuid from datetime import datetime -from enum import Enum from sqlalchemy import DateTime, String, Text from sqlalchemy.dialects.postgresql import UUID @@ -10,19 +9,9 @@ from sqlalchemy.orm import Mapped, mapped_column from core.db.base import Base, SoftDeleteMixin, TimestampMixin from core.db.types import json_jsonb +from schemas.enums import ScheduleItemSourceType, ScheduleItemStatus - -class ScheduleItemStatus(str, Enum): - ACTIVE = "active" - COMPLETED = "completed" - CANCELED = "canceled" - ARCHIVED = "archived" - - -class ScheduleItemSourceType(str, Enum): - MANUAL = "manual" - IMPORTED = "imported" - AGENT_GENERATED = "agent_generated" +__all__ = ["ScheduleItem", "ScheduleItemStatus", "ScheduleItemSourceType"] class ScheduleItem(TimestampMixin, SoftDeleteMixin, Base): diff --git a/backend/src/models/schedule_subscriptions.py b/backend/src/models/schedule_subscriptions.py index 06c86dc..856edce 100644 --- a/backend/src/models/schedule_subscriptions.py +++ b/backend/src/models/schedule_subscriptions.py @@ -1,33 +1,20 @@ from __future__ import annotations import uuid -from enum import Enum from sqlalchemy import Integer, String from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column from core.db.base import Base, TimestampMixin +from schemas.enums import NotifyLevel, SubscriptionPermission, SubscriptionStatus - -class SubscriptionStatus(str, Enum): - ACTIVE = "active" - PENDING = "pending" - PAUSED = "paused" - UNSUBSCRIBED = "unsubscribed" - - -class NotifyLevel(str, Enum): - ALL = "all" - MENTIONS = "mentions" - NONE = "none" - - -class SubscriptionPermission(int, Enum): - VIEW = 1 # 001 - 可查看 - INVITE = 2 # 010 - 可邀请 - EDIT = 4 # 100 - 可编辑 - OWNER = 7 # 111 - 所有者(VIEW + INVITE + EDIT) +__all__ = [ + "ScheduleSubscription", + "SubscriptionStatus", + "NotifyLevel", + "SubscriptionPermission", +] class ScheduleSubscription(TimestampMixin, Base): diff --git a/backend/src/models/todos.py b/backend/src/models/todos.py index c636164..cceb7be 100644 --- a/backend/src/models/todos.py +++ b/backend/src/models/todos.py @@ -2,26 +2,15 @@ from __future__ import annotations import uuid from datetime import datetime -from enum import Enum from sqlalchemy import DateTime, Integer, String from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column from core.db.base import Base, SoftDeleteMixin, TimestampMixin +from schemas.enums import TodoPriority, TodoStatus - -class TodoStatus(str, Enum): - PENDING = "pending" - DONE = "done" - CANCELED = "canceled" - - -class TodoPriority(int, Enum): - IMPORTANT_URGENT = 1 - IMPORTANT_NOT_URGENT = 2 - NOT_IMPORTANT_URGENT = 3 - NOT_IMPORTANT_NOT_URGENT = 4 +__all__ = ["Todo", "TodoStatus", "TodoPriority"] class Todo(TimestampMixin, SoftDeleteMixin, Base): diff --git a/backend/src/schemas/__init__.py b/backend/src/schemas/__init__.py index cc79b61..82184cb 100644 --- a/backend/src/schemas/__init__.py +++ b/backend/src/schemas/__init__.py @@ -1,45 +1 @@ -"""Centralized shared schemas for cross-module contracts.""" - -from schemas.inbox.messages import ( - CalendarContent, - CalendarDeleteContent, - CalendarInviteContent, - CalendarUpdateContent, - FriendshipContent, - InboxMessageContent, - InboxMessageStatus, - InboxMessageType, - parse_calendar_content, -) -from schemas.invite_codes import InviteCodeRewardConfig -from schemas.messages import AgentChatMessageMetadata -from schemas.schedule.items import ( - AttachmentType, - ScheduleItemMetadata, - ScheduleItemMetadataAttachment, - ScheduleItemSourceType, - ScheduleItemStatus, -) -from schemas.sessions import SessionStateSnapshot -from schemas.user.context import UserContext - -__all__ = [ - "AgentChatMessageMetadata", - "AttachmentType", - "CalendarContent", - "CalendarDeleteContent", - "CalendarInviteContent", - "CalendarUpdateContent", - "FriendshipContent", - "InboxMessageContent", - "InboxMessageStatus", - "InboxMessageType", - "InviteCodeRewardConfig", - "ScheduleItemMetadata", - "ScheduleItemMetadataAttachment", - "ScheduleItemSourceType", - "ScheduleItemStatus", - "SessionStateSnapshot", - "UserContext", - "parse_calendar_content", -] +"""Backend reusable schemas package.""" diff --git a/backend/src/schemas/agent/ui_schema.py b/backend/src/schemas/agent/ui_schema.py index 11104cb..a0b682c 100644 --- a/backend/src/schemas/agent/ui_schema.py +++ b/backend/src/schemas/agent/ui_schema.py @@ -12,7 +12,7 @@ Version: 2.0 from __future__ import annotations from enum import Enum -from typing import Any, Literal, NotRequired, TypedDict, Union +from typing import Any, Literal, TypedDict, Union # ============================================================ # Enums diff --git a/backend/src/schemas/domain/__init__.py b/backend/src/schemas/domain/__init__.py new file mode 100644 index 0000000..9ecb748 --- /dev/null +++ b/backend/src/schemas/domain/__init__.py @@ -0,0 +1 @@ +"""Reusable domain schemas shared across backend modules.""" diff --git a/backend/src/schemas/automation/__init__.py b/backend/src/schemas/domain/automation.py similarity index 70% rename from backend/src/schemas/automation/__init__.py rename to backend/src/schemas/domain/automation.py index c642e6d..cfd757f 100644 --- a/backend/src/schemas/automation/__init__.py +++ b/backend/src/schemas/domain/automation.py @@ -2,13 +2,27 @@ from __future__ import annotations from datetime import datetime from enum import Enum +from typing import Protocol from uuid import UUID from core.agentscope.tools.tool_config import AgentTool from pydantic import BaseModel, ConfigDict, Field, model_validator +from schemas.enums import AutomationJobStatus, ScheduleType -from models.automation_jobs import AutomationJob as OrmAutomationJob -from models.automation_jobs import AutomationJobStatus, ScheduleType + +class AutomationJobLike(Protocol): + id: UUID + owner_id: UUID + bootstrap_key: str | None + title: str + config: dict[str, object] + next_run_at: datetime + timezone: str + last_run_at: datetime | None + status: AutomationJobStatus + created_by: UUID | None + created_at: datetime + updated_at: datetime class ContextSource(str, Enum): @@ -50,8 +64,7 @@ class ScheduleConfig(BaseModel): invalid = [day for day in self.weekdays if day < 1 or day > 7] if invalid: raise ValueError("weekdays must be within 1-7") - deduped = sorted(set(self.weekdays)) - self.weekdays = deduped + self.weekdays = sorted(set(self.weekdays)) else: self.weekdays = None return self @@ -90,20 +103,20 @@ class AutomationJob(BaseModel): updated_at: datetime @classmethod - def from_orm(cls, obj: OrmAutomationJob) -> "AutomationJob": + def from_orm(cls, obj: object) -> "AutomationJob": return cls( - id=obj.id, - owner_id=obj.owner_id, - bootstrap_key=obj.bootstrap_key, - title=obj.title, - config=AutomationJobConfig.model_validate(obj.config or {}), - next_run_at=obj.next_run_at, - timezone=obj.timezone, - last_run_at=obj.last_run_at, - status=obj.status, - created_by=obj.created_by, - created_at=obj.created_at, - updated_at=obj.updated_at, + id=getattr(obj, "id"), + owner_id=getattr(obj, "owner_id"), + bootstrap_key=getattr(obj, "bootstrap_key"), + title=getattr(obj, "title"), + config=AutomationJobConfig.model_validate(getattr(obj, "config", {}) or {}), + next_run_at=getattr(obj, "next_run_at"), + timezone=getattr(obj, "timezone"), + last_run_at=getattr(obj, "last_run_at"), + status=getattr(obj, "status"), + created_by=getattr(obj, "created_by"), + created_at=getattr(obj, "created_at"), + updated_at=getattr(obj, "updated_at"), ) @property diff --git a/backend/src/schemas/messages/chat_message.py b/backend/src/schemas/domain/chat_message.py similarity index 100% rename from backend/src/schemas/messages/chat_message.py rename to backend/src/schemas/domain/chat_message.py diff --git a/backend/src/schemas/sessions/chat_session.py b/backend/src/schemas/domain/chat_session.py similarity index 100% rename from backend/src/schemas/sessions/chat_session.py rename to backend/src/schemas/domain/chat_session.py diff --git a/backend/src/schemas/inbox/messages.py b/backend/src/schemas/domain/inbox.py similarity index 85% rename from backend/src/schemas/inbox/messages.py rename to backend/src/schemas/domain/inbox.py index 6110332..d33129a 100644 --- a/backend/src/schemas/inbox/messages.py +++ b/backend/src/schemas/domain/inbox.py @@ -1,24 +1,22 @@ from __future__ import annotations import json -from enum import Enum from typing import ClassVar, Literal, Union from pydantic import BaseModel, ConfigDict, Field +from schemas.enums import InboxMessageStatus, InboxMessageType - -class InboxMessageType(str, Enum): - FRIEND_REQUEST = "friend_request" - CALENDAR = "calendar" - SYSTEM = "system" - GROUP = "group" - - -class InboxMessageStatus(str, Enum): - PENDING = "pending" - ACCEPTED = "accepted" - REJECTED = "rejected" - DISMISSED = "dismissed" +__all__ = [ + "InboxMessageType", + "InboxMessageStatus", + "CalendarInviteContent", + "CalendarUpdateContent", + "CalendarDeleteContent", + "FriendshipContent", + "CalendarContent", + "InboxMessageContent", + "parse_calendar_content", +] class CalendarInviteContent(BaseModel): diff --git a/backend/src/schemas/invite_codes/__init__.py b/backend/src/schemas/domain/invite_code.py similarity index 100% rename from backend/src/schemas/invite_codes/__init__.py rename to backend/src/schemas/domain/invite_code.py diff --git a/backend/src/schemas/memories/__init__.py b/backend/src/schemas/domain/memory.py similarity index 79% rename from backend/src/schemas/memories/__init__.py rename to backend/src/schemas/domain/memory.py index d4ccdf8..361ba10 100644 --- a/backend/src/schemas/memories/__init__.py +++ b/backend/src/schemas/domain/memory.py @@ -1,13 +1,11 @@ from __future__ import annotations from datetime import datetime -from enum import Enum from typing import ClassVar, Literal from uuid import UUID from pydantic import BaseModel, ConfigDict - -from schemas.memories.memory_content import ( +from schemas.domain.memory_content import ( TeamMember, UserMemoryContent, UserPreferences, @@ -15,16 +13,7 @@ from schemas.memories.memory_content import ( WorkProfileContent, WorkProject, ) - - -class MemoryType(str, Enum): - USER = "user" - WORK = "work" - - -class MemoryStatus(str, Enum): - ACTIVE = "active" - DISABLED = "disabled" +from schemas.enums import MemoryStatus, MemoryType class MemoryModel(BaseModel): diff --git a/backend/src/schemas/memories/memory_content.py b/backend/src/schemas/domain/memory_content.py similarity index 100% rename from backend/src/schemas/memories/memory_content.py rename to backend/src/schemas/domain/memory_content.py diff --git a/backend/src/schemas/schedule/items.py b/backend/src/schemas/domain/schedule.py similarity index 78% rename from backend/src/schemas/schedule/items.py rename to backend/src/schemas/domain/schedule.py index 1988176..10c276f 100644 --- a/backend/src/schemas/schedule/items.py +++ b/backend/src/schemas/domain/schedule.py @@ -5,6 +5,15 @@ from typing import ClassVar, Literal from uuid import UUID from pydantic import BaseModel, ConfigDict, Field +from schemas.enums import ScheduleItemSourceType, ScheduleItemStatus + +__all__ = [ + "AttachmentType", + "ScheduleItemMetadataAttachment", + "ScheduleItemMetadata", + "ScheduleItemSourceType", + "ScheduleItemStatus", +] class AttachmentType(str, Enum): @@ -32,16 +41,3 @@ class ScheduleItemMetadata(BaseModel): attachments: list[ScheduleItemMetadataAttachment] = Field(default_factory=list) reminder_minutes: int | None = Field(default=None, ge=0, le=10080) version: Literal[1] = 1 - - -class ScheduleItemStatus(str, Enum): - ACTIVE = "active" - COMPLETED = "completed" - CANCELED = "canceled" - ARCHIVED = "archived" - - -class ScheduleItemSourceType(str, Enum): - MANUAL = "manual" - IMPORTED = "imported" - AGENT_GENERATED = "agent_generated" diff --git a/backend/src/schemas/todo/contracts.py b/backend/src/schemas/domain/todo.py similarity index 100% rename from backend/src/schemas/todo/contracts.py rename to backend/src/schemas/domain/todo.py diff --git a/backend/src/schemas/enums.py b/backend/src/schemas/enums.py new file mode 100644 index 0000000..ba4bf8a --- /dev/null +++ b/backend/src/schemas/enums.py @@ -0,0 +1,136 @@ +from __future__ import annotations + +from enum import Enum + + +class ScheduleItemStatus(str, Enum): + ACTIVE = "active" + ARCHIVED = "archived" + + +class ScheduleItemSourceType(str, Enum): + MANUAL = "manual" + IMPORTED = "imported" + AGENT_GENERATED = "agent_generated" + + +class AutomationJobStatus(str, Enum): + ACTIVE = "active" + DISABLED = "disabled" + + +class ScheduleType(str, Enum): + DAILY = "daily" + WEEKLY = "weekly" + + +class MemoryType(str, Enum): + USER = "user" + WORK = "work" + + +class MemoryStatus(str, Enum): + ACTIVE = "active" + DISABLED = "disabled" + + +class TodoStatus(str, Enum): + PENDING = "pending" + DONE = "done" + CANCELED = "canceled" + + +class TodoPriority(int, Enum): + IMPORTANT_URGENT = 1 + IMPORTANT_NOT_URGENT = 2 + NOT_IMPORTANT_URGENT = 3 + NOT_IMPORTANT_NOT_URGENT = 4 + + +class AgentChatMessageRole(str, Enum): + USER = "user" + ASSISTANT = "assistant" + SYSTEM = "system" + TOOL = "tool" + + +class AgentChatSessionStatus(str, Enum): + PENDING = "pending" + RUNNING = "running" + COMPLETED = "completed" + FAILED = "failed" + + +class SessionType(str, Enum): + CHAT = "chat" + AUTOMATION = "automation" + + +class InboxMessageType(str, Enum): + FRIEND_REQUEST = "friend_request" + CALENDAR = "calendar" + SYSTEM = "system" + GROUP = "group" + + +class InboxMessageStatus(str, Enum): + PENDING = "pending" + ACCEPTED = "accepted" + REJECTED = "rejected" + DISMISSED = "dismissed" + + +class SubscriptionStatus(str, Enum): + ACTIVE = "active" + PENDING = "pending" + PAUSED = "paused" + UNSUBSCRIBED = "unsubscribed" + + +class NotifyLevel(str, Enum): + ALL = "all" + MENTIONS = "mentions" + NONE = "none" + + +class SubscriptionPermission(int, Enum): + VIEW = 1 + INVITE = 2 + EDIT = 4 + OWNER = 7 + + +class FriendshipStatus(str, Enum): + PENDING = "pending" + ACCEPTED = "accepted" + BLOCKED = "blocked" + DECLINED = "declined" + CANCELED = "canceled" + + +class InviteCodeStatus(str, Enum): + ACTIVE = "active" + DISABLED = "disabled" + EXPIRED = "expired" + + +class GroupStatus(str, Enum): + ACTIVE = "active" + ARCHIVED = "archived" + + +class GroupMemberRole(str, Enum): + OWNER = "owner" + ADMIN = "admin" + MEMBER = "member" + + +class GroupMemberSource(str, Enum): + INVITED = "invited" + JOINED = "joined" + + +class GroupMemberStatus(str, Enum): + ACTIVE = "active" + MUTED = "muted" + REMOVED = "removed" diff --git a/backend/src/schemas/inbox/__init__.py b/backend/src/schemas/inbox/__init__.py deleted file mode 100644 index 80d5f22..0000000 --- a/backend/src/schemas/inbox/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from schemas.inbox.messages import InboxMessageStatus, InboxMessageType - -__all__ = ["InboxMessageStatus", "InboxMessageType"] diff --git a/backend/src/schemas/messages/__init__.py b/backend/src/schemas/messages/__init__.py deleted file mode 100644 index 2cf9e80..0000000 --- a/backend/src/schemas/messages/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from schemas.messages.chat_message import AgentChatMessage, AgentChatMessageMetadata - -__all__ = ["AgentChatMessage", "AgentChatMessageMetadata"] diff --git a/backend/src/schemas/schedule/__init__.py b/backend/src/schemas/schedule/__init__.py deleted file mode 100644 index 48b28d8..0000000 --- a/backend/src/schemas/schedule/__init__.py +++ /dev/null @@ -1,27 +0,0 @@ -from schemas.inbox.messages import ( - CalendarContent, - CalendarDeleteContent, - CalendarInviteContent, - CalendarUpdateContent, - parse_calendar_content, -) -from schemas.schedule.items import ( - AttachmentType, - ScheduleItemMetadata, - ScheduleItemMetadataAttachment, - ScheduleItemSourceType, - ScheduleItemStatus, -) - -__all__ = [ - "AttachmentType", - "CalendarContent", - "CalendarDeleteContent", - "CalendarInviteContent", - "CalendarUpdateContent", - "ScheduleItemMetadata", - "ScheduleItemMetadataAttachment", - "ScheduleItemSourceType", - "ScheduleItemStatus", - "parse_calendar_content", -] diff --git a/backend/src/schemas/sessions/__init__.py b/backend/src/schemas/sessions/__init__.py deleted file mode 100644 index 0f3c651..0000000 --- a/backend/src/schemas/sessions/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from schemas.sessions.chat_session import SessionStateSnapshot - -__all__ = ["SessionStateSnapshot"] diff --git a/backend/src/schemas/shared/__init__.py b/backend/src/schemas/shared/__init__.py new file mode 100644 index 0000000..5d46bec --- /dev/null +++ b/backend/src/schemas/shared/__init__.py @@ -0,0 +1 @@ +"""Shared schemas used across multiple domain modules.""" diff --git a/backend/src/schemas/user/context.py b/backend/src/schemas/shared/user.py similarity index 100% rename from backend/src/schemas/user/context.py rename to backend/src/schemas/shared/user.py diff --git a/backend/src/schemas/todo/__init__.py b/backend/src/schemas/todo/__init__.py deleted file mode 100644 index 896123c..0000000 --- a/backend/src/schemas/todo/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .contracts import TodoOrder - -__all__ = ["TodoOrder"] diff --git a/backend/src/schemas/user/__init__.py b/backend/src/schemas/user/__init__.py deleted file mode 100644 index 205a8b5..0000000 --- a/backend/src/schemas/user/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -from schemas.user.context import ( - PreferenceSettings, - ProfileSettingsUnion, - ProfileSettingsV1, - UserContext, - parse_profile_settings, - upgrade_to_latest, -) - -__all__ = [ - "PreferenceSettings", - "ProfileSettingsUnion", - "ProfileSettingsV1", - "UserContext", - "parse_profile_settings", - "upgrade_to_latest", -] diff --git a/backend/src/v1/agent/repository.py b/backend/src/v1/agent/repository.py index 06a50da..2687319 100644 --- a/backend/src/v1/agent/repository.py +++ b/backend/src/v1/agent/repository.py @@ -9,10 +9,11 @@ from fastapi import HTTPException from sqlalchemy import Select, select from sqlalchemy.ext.asyncio import AsyncSession -from models.agent_chat_message import AgentChatMessage, AgentChatMessageRole +from models.agent_chat_message import AgentChatMessage from models.agent_chat_session import AgentChatSession from models.system_agents import SystemAgents -from schemas.messages.chat_message import ( +from schemas.enums import AgentChatMessageRole +from schemas.domain.chat_message import ( AgentChatMessage as AgentChatMessageSchema, AgentChatMessageMetadata, ) diff --git a/backend/src/v1/agent/service.py b/backend/src/v1/agent/service.py index aff480f..f234838 100644 --- a/backend/src/v1/agent/service.py +++ b/backend/src/v1/agent/service.py @@ -18,8 +18,8 @@ from schemas.agent.forwarded_props import ( RuntimeMode, ) from schemas.agent.visibility import SystemVisibilityBit, bit_mask -from schemas.automation import RuntimeConfig -from schemas.messages.chat_message import ( +from schemas.domain.automation import RuntimeConfig +from schemas.domain.chat_message import ( AgentChatMessageMetadata, UserMessageAttachment, extract_user_message_attachments, @@ -362,7 +362,7 @@ class AgentService: before: date | None, current_user: CurrentUser, ) -> HistorySnapshotResponse: - from schemas.messages.chat_message import AgentChatMessage + from schemas.domain.chat_message import AgentChatMessage from v1.agent.utils import convert_message_to_history from v1.agent.schemas import HistoryMessage diff --git a/backend/src/v1/agent/system_agents_config.py b/backend/src/v1/agent/system_agents_config.py index 550de07..a9e3af5 100644 --- a/backend/src/v1/agent/system_agents_config.py +++ b/backend/src/v1/agent/system_agents_config.py @@ -11,7 +11,7 @@ from pydantic import ValidationError from core.agentscope.tools.tool_config import AgentTool from schemas.agent.system_agent import SystemAgentLLMConfig -from schemas.automation import ( +from schemas.domain.automation import ( ContextSource, ContextWindowMode, MessageContextConfig, diff --git a/backend/src/v1/agent/utils.py b/backend/src/v1/agent/utils.py index d67522d..c2344e9 100644 --- a/backend/src/v1/agent/utils.py +++ b/backend/src/v1/agent/utils.py @@ -8,7 +8,7 @@ from collections.abc import Callable from typing import Any from core.agentscope.runtime.ui_compiler import compile as compile_ui_hints -from schemas.messages.chat_message import ( +from schemas.domain.chat_message import ( AgentChatMessage, AgentChatMessageMetadata, extract_user_message_attachments, diff --git a/backend/src/v1/auth/automation_static_config.py b/backend/src/v1/auth/automation_static_config.py index a857973..ce0ab2d 100644 --- a/backend/src/v1/auth/automation_static_config.py +++ b/backend/src/v1/auth/automation_static_config.py @@ -7,7 +7,7 @@ from typing import Any import yaml -from schemas.automation import AutomationJobConfig +from schemas.domain.automation import AutomationJobConfig _CONFIG_NAME_PATTERN = re.compile(r"^[a-z0-9][a-z0-9_-]{0,63}$") diff --git a/backend/src/v1/auth/registration_bootstrap.py b/backend/src/v1/auth/registration_bootstrap.py index a6c2d22..d5de7f4 100644 --- a/backend/src/v1/auth/registration_bootstrap.py +++ b/backend/src/v1/auth/registration_bootstrap.py @@ -10,12 +10,12 @@ from sqlalchemy.dialects.postgresql import insert from sqlalchemy.ext.asyncio import AsyncSession from core.logging import get_logger -from models.automation_jobs import AutomationJob, AutomationJobStatus, ScheduleType -from models.memories import MemoryType +from models.automation_jobs import AutomationJob +from schemas.enums import AutomationJobStatus, MemoryType, ScheduleType from models.profile import Profile -from schemas.automation import AutomationJobConfig, ScheduleConfig -from schemas.memories.memory_content import UserMemoryContent, WorkProfileContent -from schemas.user.context import parse_profile_settings +from schemas.domain.automation import AutomationJobConfig, ScheduleConfig +from schemas.domain.memory_content import UserMemoryContent, WorkProfileContent +from schemas.shared.user import parse_profile_settings from v1.auth.automation_static_config import load_static_automation_job_config from v1.auth.schemas import RegistrationBootstrapRequest from v1.memories.repository import SQLAlchemyMemoriesRepository diff --git a/backend/src/v1/automation_jobs/repository.py b/backend/src/v1/automation_jobs/repository.py index 194251b..02fa081 100644 --- a/backend/src/v1/automation_jobs/repository.py +++ b/backend/src/v1/automation_jobs/repository.py @@ -9,9 +9,10 @@ from sqlalchemy.ext.asyncio import AsyncSession from zoneinfo import ZoneInfo, ZoneInfoNotFoundError from core.db.base_repository import BaseRepository -from models.agent_chat_session import AgentChatSession, SessionType -from models.automation_jobs import AutomationJob, AutomationJobStatus, ScheduleType -from schemas.automation import AutomationJobConfig, ScheduleConfig +from models.agent_chat_session import AgentChatSession +from models.automation_jobs import AutomationJob +from schemas.enums import AutomationJobStatus, ScheduleType, SessionType +from schemas.domain.automation import AutomationJobConfig, ScheduleConfig if TYPE_CHECKING: from v1.automation_jobs.schemas import ( diff --git a/backend/src/v1/automation_jobs/schemas.py b/backend/src/v1/automation_jobs/schemas.py index 27aaa3e..bb6c82e 100644 --- a/backend/src/v1/automation_jobs/schemas.py +++ b/backend/src/v1/automation_jobs/schemas.py @@ -7,9 +7,8 @@ from zoneinfo import ZoneInfo, ZoneInfoNotFoundError from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator -from models.automation_jobs import AutomationJob as OrmAutomationJob -from models.automation_jobs import AutomationJobStatus -from schemas.automation import AutomationJobConfig +from schemas.domain.automation import AutomationJobConfig +from schemas.enums import AutomationJobStatus class AutomationJobResponse(BaseModel): @@ -29,20 +28,20 @@ class AutomationJobResponse(BaseModel): updated_at: datetime @classmethod - def from_orm(cls, obj: OrmAutomationJob) -> Self: + def from_orm(cls, obj: object) -> Self: return cls( - id=obj.id, - owner_id=obj.owner_id, - bootstrap_key=obj.bootstrap_key, - title=obj.title, - timezone=obj.timezone, - status=obj.status, - is_system=obj.bootstrap_key is not None, - config=AutomationJobConfig.model_validate(obj.config or {}), - next_run_at=obj.next_run_at, - last_run_at=obj.last_run_at, - created_at=obj.created_at, - updated_at=obj.updated_at, + id=getattr(obj, "id"), + owner_id=getattr(obj, "owner_id"), + bootstrap_key=getattr(obj, "bootstrap_key"), + title=getattr(obj, "title"), + timezone=getattr(obj, "timezone"), + status=getattr(obj, "status"), + is_system=getattr(obj, "bootstrap_key") is not None, + config=AutomationJobConfig.model_validate(getattr(obj, "config", {}) or {}), + next_run_at=getattr(obj, "next_run_at"), + last_run_at=getattr(obj, "last_run_at"), + created_at=getattr(obj, "created_at"), + updated_at=getattr(obj, "updated_at"), ) diff --git a/backend/src/v1/automation_jobs/service.py b/backend/src/v1/automation_jobs/service.py index a8acdc1..0500b34 100644 --- a/backend/src/v1/automation_jobs/service.py +++ b/backend/src/v1/automation_jobs/service.py @@ -7,8 +7,8 @@ from uuid import UUID from zoneinfo import ZoneInfo, ZoneInfoNotFoundError from fastapi import HTTPException, status -from models.automation_jobs import ScheduleType -from schemas.automation import ( +from schemas.enums import ScheduleType +from schemas.domain.automation import ( AutomationJob as AutomationJobSchema, MessageContextConfig, RuntimeConfig, diff --git a/backend/src/v1/friendships/repository.py b/backend/src/v1/friendships/repository.py index 68ad13b..998414a 100644 --- a/backend/src/v1/friendships/repository.py +++ b/backend/src/v1/friendships/repository.py @@ -9,9 +9,10 @@ from sqlalchemy.exc import SQLAlchemyError from core.db.base_repository import BaseRepository from core.logging import get_logger -from models.friendships import Friendship, FriendshipStatus -from models.inbox_messages import InboxMessage, InboxMessageStatus, InboxMessageType -from schemas.inbox.messages import FriendshipContent +from models.friendships import Friendship +from models.inbox_messages import InboxMessage +from schemas.enums import FriendshipStatus, InboxMessageStatus, InboxMessageType +from schemas.domain.inbox import FriendshipContent if TYPE_CHECKING: from sqlalchemy.ext.asyncio import AsyncSession diff --git a/backend/src/v1/friendships/schemas.py b/backend/src/v1/friendships/schemas.py index 2b73293..d847442 100644 --- a/backend/src/v1/friendships/schemas.py +++ b/backend/src/v1/friendships/schemas.py @@ -6,7 +6,7 @@ from uuid import UUID from pydantic import BaseModel, ConfigDict, Field -from schemas.user.context import UserContext +from schemas.shared.user import UserContext class FriendRequestCreate(BaseModel): diff --git a/backend/src/v1/friendships/service.py b/backend/src/v1/friendships/service.py index 63d334e..e038e70 100644 --- a/backend/src/v1/friendships/service.py +++ b/backend/src/v1/friendships/service.py @@ -10,8 +10,9 @@ from sqlalchemy.exc import SQLAlchemyError from core.auth.models import CurrentUser from core.db.base_service import BaseService from core.logging import get_logger -from models.friendships import Friendship, FriendshipStatus -from models.inbox_messages import InboxMessage, InboxMessageStatus, InboxMessageType +from models.friendships import Friendship +from models.inbox_messages import InboxMessage +from schemas.enums import FriendshipStatus, InboxMessageStatus, InboxMessageType from v1.friendships.repository import FriendshipRepository from v1.friendships.schemas import ( FriendRequestCreate, @@ -22,7 +23,7 @@ from v1.users.repository import UserRepository if TYPE_CHECKING: from sqlalchemy.ext.asyncio import AsyncSession - from schemas.user.context import UserContext + from schemas.shared.user import UserContext logger = get_logger("v1.friendships.service") @@ -593,7 +594,7 @@ class FriendshipService(BaseService): ) def _build_user_basic_info(self, profile: Any) -> "UserContext": - from schemas.user.context import UserContext + from schemas.shared.user import UserContext if profile is None: return UserContext(id="", username="") diff --git a/backend/src/v1/inbox_messages/repository.py b/backend/src/v1/inbox_messages/repository.py index 3caf85d..c2aa212 100644 --- a/backend/src/v1/inbox_messages/repository.py +++ b/backend/src/v1/inbox_messages/repository.py @@ -7,7 +7,8 @@ from sqlalchemy import select, update from sqlalchemy.exc import SQLAlchemyError from core.logging import get_logger -from models.inbox_messages import InboxMessage, InboxMessageType, InboxMessageStatus +from models.inbox_messages import InboxMessage +from schemas.enums import InboxMessageStatus, InboxMessageType if TYPE_CHECKING: from sqlalchemy.ext.asyncio import AsyncSession diff --git a/backend/src/v1/inbox_messages/schemas.py b/backend/src/v1/inbox_messages/schemas.py index b4be2e4..6d28609 100644 --- a/backend/src/v1/inbox_messages/schemas.py +++ b/backend/src/v1/inbox_messages/schemas.py @@ -6,7 +6,7 @@ from uuid import UUID from pydantic import BaseModel, ConfigDict -from schemas.inbox.messages import InboxMessageStatus, InboxMessageType +from schemas.domain.inbox import InboxMessageStatus, InboxMessageType class InboxMessageResponse(BaseModel): diff --git a/backend/src/v1/memories/repository.py b/backend/src/v1/memories/repository.py index c07362f..b072c3b 100644 --- a/backend/src/v1/memories/repository.py +++ b/backend/src/v1/memories/repository.py @@ -9,7 +9,8 @@ from sqlalchemy.exc import SQLAlchemyError from core.db.base_repository import BaseRepository from core.logging import get_logger -from models.memories import Memory, MemoryStatus, MemoryType +from models.memories import Memory +from schemas.enums import MemoryStatus, MemoryType if TYPE_CHECKING: from sqlalchemy.ext.asyncio import AsyncSession diff --git a/backend/src/v1/memories/router.py b/backend/src/v1/memories/router.py index b8fd8d2..74dcf76 100644 --- a/backend/src/v1/memories/router.py +++ b/backend/src/v1/memories/router.py @@ -4,7 +4,7 @@ from typing import Annotated from fastapi import APIRouter, Depends, status -from schemas.memories.memory_content import UserMemoryContent, WorkProfileContent +from schemas.domain.memory_content import UserMemoryContent, WorkProfileContent from v1.memories.dependencies import get_memories_service from v1.memories.schemas import ( MemoryListResponse, diff --git a/backend/src/v1/memories/schemas.py b/backend/src/v1/memories/schemas.py index b621bda..b4f4ca7 100644 --- a/backend/src/v1/memories/schemas.py +++ b/backend/src/v1/memories/schemas.py @@ -4,7 +4,7 @@ from typing import ClassVar from pydantic import BaseModel, ConfigDict -from schemas.memories.memory_content import UserMemoryContent, WorkProfileContent +from schemas.domain.memory_content import UserMemoryContent, WorkProfileContent class UserMemoryUpdate(BaseModel): diff --git a/backend/src/v1/memories/service.py b/backend/src/v1/memories/service.py index cb8e32c..c597f4e 100644 --- a/backend/src/v1/memories/service.py +++ b/backend/src/v1/memories/service.py @@ -8,8 +8,9 @@ from sqlalchemy.exc import SQLAlchemyError from core.auth.models import CurrentUser from core.db.base_service import BaseService from core.logging import get_logger -from models.memories import Memory, MemoryType -from schemas.memories.memory_content import UserMemoryContent, WorkProfileContent +from models.memories import Memory +from schemas.enums import MemoryType +from schemas.domain.memory_content import UserMemoryContent, WorkProfileContent from v1.memories.repository import MemoriesRepositoryLike if TYPE_CHECKING: diff --git a/backend/src/v1/schedule_items/repository.py b/backend/src/v1/schedule_items/repository.py index 3e3bc4b..6b60680 100644 --- a/backend/src/v1/schedule_items/repository.py +++ b/backend/src/v1/schedule_items/repository.py @@ -9,8 +9,9 @@ from sqlalchemy.exc import SQLAlchemyError from core.db.base_repository import BaseRepository from core.logging import get_logger -from models.schedule_items import ScheduleItem, ScheduleItemStatus -from models.schedule_subscriptions import ScheduleSubscription, SubscriptionStatus +from models.schedule_items import ScheduleItem +from models.schedule_subscriptions import ScheduleSubscription +from schemas.enums import ScheduleItemStatus, SubscriptionStatus if TYPE_CHECKING: from sqlalchemy.ext.asyncio import AsyncSession diff --git a/backend/src/v1/schedule_items/schemas.py b/backend/src/v1/schedule_items/schemas.py index 769bf44..044c4fb 100644 --- a/backend/src/v1/schedule_items/schemas.py +++ b/backend/src/v1/schedule_items/schemas.py @@ -7,14 +7,14 @@ from zoneinfo import ZoneInfo, ZoneInfoNotFoundError from pydantic import BaseModel, ConfigDict, Field, field_validator -from schemas.inbox.messages import ( +from schemas.domain.inbox import ( CalendarContent, CalendarDeleteContent, CalendarInviteContent, CalendarUpdateContent, parse_calendar_content, ) -from schemas.schedule.items import ( +from schemas.domain.schedule import ( AttachmentType, ScheduleItemMetadata, ScheduleItemMetadataAttachment, diff --git a/backend/src/v1/schedule_items/service.py b/backend/src/v1/schedule_items/service.py index 8336659..8e43c14 100644 --- a/backend/src/v1/schedule_items/service.py +++ b/backend/src/v1/schedule_items/service.py @@ -10,9 +10,14 @@ from sqlalchemy.exc import SQLAlchemyError from core.auth.models import CurrentUser from core.db.base_service import BaseService from core.logging import get_logger -from models.inbox_messages import InboxMessage, InboxMessageType, InboxMessageStatus +from models.inbox_messages import InboxMessage from models.schedule_items import ScheduleItem -from models.schedule_subscriptions import SubscriptionPermission, SubscriptionStatus +from schemas.enums import ( + InboxMessageStatus, + InboxMessageType, + SubscriptionPermission, + SubscriptionStatus, +) from v1.auth.gateway import SupabaseAuthGateway from v1.inbox_messages.repository import InboxMessageRepository from v1.schedule_items.repository import ScheduleItemRepository @@ -35,6 +40,8 @@ if TYPE_CHECKING: logger = get_logger("v1.schedule_items.service") +_LEGACY_ARCHIVED_STATUSES = {"completed", "canceled"} + class AuthByPhoneGateway(Protocol): async def get_user_by_phone(self, phone: str) -> "UserByPhoneResponse": ... @@ -417,8 +424,10 @@ class ScheduleItemService(BaseService): permission: int = 1, ) -> ScheduleItemResponse: status_value = ( - item.status.value if hasattr(item.status, "value") else item.status + item.status.value if hasattr(item.status, "value") else str(item.status) ) + if status_value in _LEGACY_ARCHIVED_STATUSES: + status_value = ScheduleItemStatus.ARCHIVED.value source_type_value = ( item.source_type.value if hasattr(item.source_type, "value") diff --git a/backend/src/v1/todo/repository.py b/backend/src/v1/todo/repository.py index 1919f7b..01a764c 100644 --- a/backend/src/v1/todo/repository.py +++ b/backend/src/v1/todo/repository.py @@ -10,7 +10,8 @@ from sqlalchemy.exc import SQLAlchemyError from core.db.base_repository import BaseRepository from core.logging import get_logger from models.todo_sources import TodoSource -from models.todos import Todo, TodoPriority, TodoStatus +from models.todos import Todo +from schemas.enums import TodoPriority, TodoStatus if TYPE_CHECKING: from sqlalchemy.ext.asyncio import AsyncSession diff --git a/backend/src/v1/todo/schemas.py b/backend/src/v1/todo/schemas.py index b8d0c98..64ecc15 100644 --- a/backend/src/v1/todo/schemas.py +++ b/backend/src/v1/todo/schemas.py @@ -5,7 +5,7 @@ from uuid import UUID from pydantic import BaseModel, ConfigDict, Field -from schemas.todo import TodoOrder +from schemas.domain.todo import TodoOrder class TodoCreate(BaseModel): diff --git a/backend/src/v1/todo/service.py b/backend/src/v1/todo/service.py index c0e5bb2..4b6ed5d 100644 --- a/backend/src/v1/todo/service.py +++ b/backend/src/v1/todo/service.py @@ -10,7 +10,8 @@ from sqlalchemy.exc import SQLAlchemyError from core.auth.models import CurrentUser from core.db.base_service import BaseService from core.logging import get_logger -from models.todos import Todo, TodoStatus +from models.todos import Todo +from schemas.enums import TodoStatus from v1.schedule_items.repository import SQLAlchemyScheduleItemRepository from v1.todo.repository import TodoRepository from v1.todo.schemas import ( diff --git a/backend/src/v1/users/router.py b/backend/src/v1/users/router.py index 3b4cb62..53941f2 100644 --- a/backend/src/v1/users/router.py +++ b/backend/src/v1/users/router.py @@ -5,7 +5,7 @@ from uuid import UUID from fastapi import APIRouter, Depends -from schemas.user.context import UserContext +from schemas.shared.user import UserContext from v1.users.dependencies import get_user_service from v1.users.schemas import UserSearchRequest, UserUpdateRequest from v1.users.service import UserService diff --git a/backend/src/v1/users/service.py b/backend/src/v1/users/service.py index 70d5840..11acee1 100644 --- a/backend/src/v1/users/service.py +++ b/backend/src/v1/users/service.py @@ -13,14 +13,14 @@ from core.agentscope.persistence.user_context_cache import ( ) from core.db.base_service import BaseService from core.logging import get_logger -from schemas.user.context import UserContext, parse_profile_settings +from schemas.shared.user import UserContext, parse_profile_settings from v1.users.repository import UserRepository from v1.users.schemas import UserSearchRequest, UserUpdateRequest if TYPE_CHECKING: from sqlalchemy.ext.asyncio import AsyncSession - from schemas.user.context import UserContext + from schemas.shared.user import UserContext logger = get_logger("v1.users.service") @@ -105,7 +105,7 @@ class UserService(BaseService): ) async def get_user_by_id(self, user_id: UUID) -> "UserContext": - from schemas.user.context import UserContext + from schemas.shared.user import UserContext try: profile = await self._repository.get_by_user_id(user_id) diff --git a/backend/tests/e2e/test_profile_flow.py b/backend/tests/e2e/test_profile_flow.py index 0dec6fe..92d1f98 100644 --- a/backend/tests/e2e/test_profile_flow.py +++ b/backend/tests/e2e/test_profile_flow.py @@ -11,7 +11,7 @@ import uvicorn from app import app from core.auth.models import CurrentUser -from schemas.user.context import UserContext +from schemas.shared.user import UserContext from v1.users.dependencies import get_current_user, get_user_service from v1.users.schemas import UserUpdateRequest diff --git a/backend/tests/integration/test_friendship_routes.py b/backend/tests/integration/test_friendship_routes.py index 8da9241..5d7857c 100644 --- a/backend/tests/integration/test_friendship_routes.py +++ b/backend/tests/integration/test_friendship_routes.py @@ -9,7 +9,7 @@ from fastapi.testclient import TestClient from app import app from core.auth.models import CurrentUser -from schemas.user.context import UserContext +from schemas.shared.user import UserContext from v1.friendships.dependencies import get_friendship_service from v1.friendships.schemas import ( FriendRequestCreate, diff --git a/backend/tests/integration/test_users_routes.py b/backend/tests/integration/test_users_routes.py index 20aa42b..d067beb 100644 --- a/backend/tests/integration/test_users_routes.py +++ b/backend/tests/integration/test_users_routes.py @@ -8,7 +8,7 @@ from fastapi.testclient import TestClient from app import app from core.auth.models import CurrentUser -from schemas.user.context import UserContext +from schemas.shared.user import UserContext from v1.users.dependencies import get_current_user, get_user_service from v1.users.schemas import UserSearchRequest, UserUpdateRequest from v1.users.service import UserService diff --git a/backend/tests/unit/core/agentscope/persistence/test_user_context_cache.py b/backend/tests/unit/core/agentscope/persistence/test_user_context_cache.py index 446ef0f..4ec64de 100644 --- a/backend/tests/unit/core/agentscope/persistence/test_user_context_cache.py +++ b/backend/tests/unit/core/agentscope/persistence/test_user_context_cache.py @@ -6,7 +6,7 @@ from uuid import uuid4 import pytest from core.agentscope.persistence.user_context_cache import UserContextCache -from schemas.user.context import ( +from schemas.shared.user import ( UserContext, parse_profile_settings, ) diff --git a/backend/tests/unit/core/agentscope/runtime/test_consumer_registry.py b/backend/tests/unit/core/agentscope/runtime/test_consumer_registry.py deleted file mode 100644 index 17905fd..0000000 --- a/backend/tests/unit/core/agentscope/runtime/test_consumer_registry.py +++ /dev/null @@ -1,28 +0,0 @@ -from __future__ import annotations - -import pytest - -from core.agentscope.runtime.registry_builder import build_consumer_registry - - -def test_build_consumer_registry_from_system_agent_configs() -> None: - registry = build_consumer_registry( - system_agent_configs={ - "router": {"config": {"visibility_consumer_bit": 16}}, - "worker": {"config": {"visibility_consumer_bit": 17}}, - "memory": {"config": {"visibility_consumer_bit": 18}}, - } - ) - - assert registry.resolve_agent_bit(agent_type="router") == 16 - assert registry.resolve_agent_bit(agent_type="worker") == 17 - - -def test_build_consumer_registry_rejects_duplicate_bit() -> None: - with pytest.raises(ValueError, match="duplicate visibility bit"): - build_consumer_registry( - system_agent_configs={ - "router": {"config": {"visibility_consumer_bit": 16}}, - "worker": {"config": {"visibility_consumer_bit": 16}}, - } - ) diff --git a/backend/tests/unit/core/agentscope/runtime/test_orchestrator.py b/backend/tests/unit/core/agentscope/runtime/test_orchestrator.py index 1f1d48d..b2eb6e7 100644 --- a/backend/tests/unit/core/agentscope/runtime/test_orchestrator.py +++ b/backend/tests/unit/core/agentscope/runtime/test_orchestrator.py @@ -6,8 +6,8 @@ import pytest from ag_ui.core import RunAgentInput from core.agentscope.runtime.orchestrator import AgentScopeRuntimeOrchestrator -from schemas.automation import MessageContextConfig, RuntimeConfig -from schemas.user import UserContext, parse_profile_settings +from schemas.domain.automation import MessageContextConfig, RuntimeConfig +from schemas.shared.user import UserContext, parse_profile_settings class _FakePipeline: diff --git a/backend/tests/unit/core/agentscope/runtime/test_pipeline_registry.py b/backend/tests/unit/core/agentscope/runtime/test_pipeline_registry.py deleted file mode 100644 index 6967799..0000000 --- a/backend/tests/unit/core/agentscope/runtime/test_pipeline_registry.py +++ /dev/null @@ -1,24 +0,0 @@ -from __future__ import annotations - -import pytest - -from core.agentscope.runtime.pipeline_registry import build_default_pipeline_spec - - -def test_build_default_pipeline_spec_worker_has_two_stages() -> None: - spec = build_default_pipeline_spec(mode="worker") - - assert spec.mode == "worker" - assert [item.stage_name for item in spec.stages] == ["router", "worker"] - - -def test_build_default_pipeline_spec_memory_has_single_stage() -> None: - spec = build_default_pipeline_spec(mode="memory") - - assert spec.mode == "memory" - assert [item.stage_name for item in spec.stages] == ["memory"] - - -def test_build_default_pipeline_spec_rejects_unknown_mode() -> None: - with pytest.raises(ValueError, match="unsupported pipeline mode"): - build_default_pipeline_spec(mode="planner") diff --git a/backend/tests/unit/core/agentscope/runtime/test_runner.py b/backend/tests/unit/core/agentscope/runtime/test_runner.py index 3144850..e985c9d 100644 --- a/backend/tests/unit/core/agentscope/runtime/test_runner.py +++ b/backend/tests/unit/core/agentscope/runtime/test_runner.py @@ -18,8 +18,8 @@ from schemas.agent.runtime_models import ( WorkerAgentOutputLite, ) from schemas.agent.system_agent import AgentType -from schemas.automation import MessageContextConfig, RuntimeConfig -from schemas.user import UserContext, parse_profile_settings +from schemas.domain.automation import MessageContextConfig, RuntimeConfig +from schemas.shared.user import UserContext, parse_profile_settings def _run_input() -> RunAgentInput: diff --git a/backend/tests/unit/core/agentscope/runtime/test_tasks.py b/backend/tests/unit/core/agentscope/runtime/test_tasks.py index 446fe0f..0f73baa 100644 --- a/backend/tests/unit/core/agentscope/runtime/test_tasks.py +++ b/backend/tests/unit/core/agentscope/runtime/test_tasks.py @@ -7,8 +7,8 @@ import pytest import core.agentscope.runtime.tasks as tasks_module from schemas.agent import ToolStatus -from schemas.automation import ContextWindowMode, MessageContextConfig -from schemas.user import UserContext, parse_profile_settings +from schemas.domain.automation import ContextWindowMode, MessageContextConfig +from schemas.shared.user import UserContext, parse_profile_settings def _run_input_payload() -> dict[str, Any]: diff --git a/backend/tests/unit/core/agentscope/schemas/test_agui_input.py b/backend/tests/unit/core/agentscope/schemas/test_agui_input.py deleted file mode 100644 index b6f7113..0000000 --- a/backend/tests/unit/core/agentscope/schemas/test_agui_input.py +++ /dev/null @@ -1,250 +0,0 @@ -from __future__ import annotations - -import pytest - -from core.agentscope.schemas.agui_input import ( - MAX_MESSAGES, - MAX_RUN_ID_LENGTH, - MAX_RUN_INPUT_BYTES, - MAX_TEXT_CHARS, - parse_run_input, - validate_run_request_messages_contract, -) - - -def _base_payload() -> dict[str, object]: - return { - "threadId": "00000000-0000-0000-0000-000000000001", - "runId": "run-1", - "state": {}, - "messages": [{"id": "u1", "role": "user", "content": "hello"}], - "tools": [], - "context": [], - "forwardedProps": {"agent_type": "worker"}, - } - - -def test_parse_run_input_rejects_invalid_uuid() -> None: - payload = _base_payload() - payload["threadId"] = "bad-uuid" - - with pytest.raises(ValueError, match="threadId must be a valid UUID"): - parse_run_input(payload) - - -def test_parse_run_input_rejects_message_count_over_limit() -> None: - payload = _base_payload() - payload["messages"] = [ - {"id": f"u{i}", "role": "user", "content": "x"} for i in range(MAX_MESSAGES + 1) - ] - - with pytest.raises(ValueError, match="RunAgentInput.messages exceeds limit"): - parse_run_input(payload) - - -def test_parse_run_input_rejects_user_text_over_limit() -> None: - payload = _base_payload() - payload["messages"] = [ - {"id": "u1", "role": "user", "content": "x" * (MAX_TEXT_CHARS + 1)} - ] - - with pytest.raises( - ValueError, match="RunAgentInput user message text exceeds limit" - ): - parse_run_input(payload) - - -def test_parse_run_input_rejects_payload_over_limit() -> None: - payload = _base_payload() - payload["forwardedProps"] = {"blob": "x" * MAX_RUN_INPUT_BYTES} - - with pytest.raises(ValueError, match="RunAgentInput payload exceeds size limit"): - parse_run_input(payload) - - -def test_parse_run_input_rejects_run_id_over_limit() -> None: - payload = _base_payload() - payload["runId"] = "r" * (MAX_RUN_ID_LENGTH + 1) - - with pytest.raises(ValueError, match="runId exceeds length limit"): - parse_run_input(payload) - - -def test_validate_run_request_messages_contract_requires_single_user_message() -> None: - payload = _base_payload() - payload["messages"] = [ - {"id": "u1", "role": "user", "content": "hello"}, - {"id": "u2", "role": "user", "content": "again"}, - ] - run_input = parse_run_input(payload) - - with pytest.raises( - ValueError, - match="RunAgentInput.messages must contain exactly one user message", - ): - validate_run_request_messages_contract(run_input) - - -def test_validate_run_request_messages_contract_accepts_binary_url_blocks() -> None: - payload = _base_payload() - payload["messages"] = [ - { - "id": "u1", - "role": "user", - "content": [ - {"type": "text", "text": "请分析"}, - { - "type": "binary", - "mimeType": "image/png", - "url": "https://signed.example/a.png", - }, - ], - } - ] - run_input = parse_run_input(payload) - - validate_run_request_messages_contract(run_input) - - -def test_validate_run_request_messages_contract_rejects_binary_data_block() -> None: - payload = _base_payload() - payload["messages"] = [ - { - "id": "u1", - "role": "user", - "content": [ - {"type": "text", "text": "请分析"}, - { - "type": "binary", - "mimeType": "image/png", - "data": "aGVsbG8=", - }, - ], - } - ] - run_input = parse_run_input(payload) - - with pytest.raises(ValueError, match="binary content requires url"): - validate_run_request_messages_contract(run_input) - - -def test_parse_run_input_accepts_snake_case_aliases() -> None: - payload = { - "thread_id": "00000000-0000-0000-0000-000000000001", - "run_id": "run-1", - "state": {}, - "messages": [ - { - "id": "u1", - "role": "user", - "content": [ - {"type": "text", "text": "hello"}, - { - "type": "binary", - "mime_type": "image/png", - "url": "https://signed.example/a.png", - }, - ], - } - ], - "tools": [], - "context": [], - "forwarded_props": {"agent_type": "worker"}, - } - - run_input = parse_run_input(payload) - - assert run_input.thread_id == "00000000-0000-0000-0000-000000000001" - assert run_input.run_id == "run-1" - validate_run_request_messages_contract(run_input) - - -def test_parse_run_input_accepts_client_time_forwarded_props() -> None: - payload = _base_payload() - payload["forwardedProps"] = { - "agent_type": "worker", - "client_time": { - "device_timezone": "America/Los_Angeles", - "client_now_iso": "2026-03-16T09:12:33-07:00", - "client_epoch_ms": 1773658353000, - }, - } - - run_input = parse_run_input(payload) - - assert run_input.forwarded_props is not None - - -def test_parse_run_input_rejects_invalid_client_time_timezone() -> None: - payload = _base_payload() - payload["forwardedProps"] = { - "agent_type": "worker", - "client_time": { - "device_timezone": "Mars/OlympusMons", - "client_now_iso": "2026-03-16T09:12:33-07:00", - "client_epoch_ms": 1773658353000, - }, - } - - with pytest.raises(ValueError, match="invalid RunAgentInput.forwardedProps"): - parse_run_input(payload) - - -def test_parse_run_input_rejects_invalid_client_time_now_iso() -> None: - payload = _base_payload() - payload["forwardedProps"] = { - "agent_type": "worker", - "client_time": { - "device_timezone": "America/Los_Angeles", - "client_now_iso": "2026-03-16 09:12:33", - "client_epoch_ms": 1773658353000, - }, - } - - with pytest.raises(ValueError, match="invalid RunAgentInput.forwardedProps"): - parse_run_input(payload) - - -def test_parse_run_input_rejects_invalid_client_time_epoch_type() -> None: - payload = _base_payload() - payload["forwardedProps"] = { - "agent_type": "worker", - "client_time": { - "device_timezone": "America/Los_Angeles", - "client_now_iso": "2026-03-16T09:12:33-07:00", - "client_epoch_ms": "1773658353000", - }, - } - - with pytest.raises(ValueError, match="invalid RunAgentInput.forwardedProps"): - parse_run_input(payload) - - -def test_parse_run_input_rejects_unknown_forwarded_props_key() -> None: - payload = _base_payload() - payload["forwardedProps"] = { - "agent_type": "worker", - "client_time": { - "device_timezone": "America/Los_Angeles", - "client_now_iso": "2026-03-16T09:12:33-07:00", - "client_epoch_ms": 1773658353000, - }, - "unexpected": {"foo": "bar"}, - } - - with pytest.raises(ValueError, match="invalid RunAgentInput.forwardedProps"): - parse_run_input(payload) - - -def test_parse_run_input_rejects_missing_forwarded_props_agent_type() -> None: - payload = _base_payload() - payload["forwardedProps"] = { - "client_time": { - "device_timezone": "America/Los_Angeles", - "client_now_iso": "2026-03-16T09:12:33-07:00", - "client_epoch_ms": 1773658353000, - } - } - - with pytest.raises(ValueError, match="invalid RunAgentInput.forwardedProps"): - parse_run_input(payload) diff --git a/backend/tests/unit/core/agentscope/test_calendar_tools.py b/backend/tests/unit/core/agentscope/test_calendar_tools.py index b0d87a1..64d9023 100644 --- a/backend/tests/unit/core/agentscope/test_calendar_tools.py +++ b/backend/tests/unit/core/agentscope/test_calendar_tools.py @@ -40,6 +40,7 @@ class _FakeService: start_at=datetime(2026, 3, 17, 9, 0, tzinfo=timezone.utc), end_at=datetime(2026, 3, 17, 9, 30, tzinfo=timezone.utc), timezone="Asia/Shanghai", + status="active", metadata=SimpleNamespace( location=None, color="#4F46E5", reminder_minutes=15 ), @@ -247,7 +248,7 @@ async def test_calendar_read_returns_structured_result_with_ids( assert "total=1" in payload["result"] assert "timezone=Asia/Shanghai" in payload["result"] assert "description=今天下午五点的会议" in payload["result"] - assert "status=" in payload["result"] + assert "status=active" in payload["result"] assert fake_service.created_id in payload["result"] assert fake_service.list_calls == [{"page": 1, "page_size": 20, "query": "会议"}] diff --git a/backend/tests/unit/core/agentscope/test_hitl_middleware.py b/backend/tests/unit/core/agentscope/test_hitl_middleware.py deleted file mode 100644 index b2ffca6..0000000 --- a/backend/tests/unit/core/agentscope/test_hitl_middleware.py +++ /dev/null @@ -1,132 +0,0 @@ -from __future__ import annotations - -import json -from typing import Any, AsyncGenerator - -import pytest - -from core.agentscope.tools.tool_config import ToolApprovalConfig, ToolConfig, ToolGroup -from core.agentscope.tools.tool_middleware import create_approval_middleware - - -async def _next_handler(**kwargs: Any) -> AsyncGenerator[dict[str, object], None]: - async def _generator() -> AsyncGenerator[dict[str, object], None]: - yield {"ok": True, "tool_call": kwargs.get("tool_call")} - - return _generator() - - -def _extract_error_payload(chunk: object) -> dict[str, Any]: - content = getattr(chunk, "content", None) - if not isinstance(content, list) or not content: - return {} - first_block = content[0] - text = getattr(first_block, "text", None) - if not isinstance(text, str) and isinstance(first_block, dict): - raw_text = first_block.get("text") - text = raw_text if isinstance(raw_text, str) else None - if not isinstance(text, str): - return {} - return json.loads(text) - - -@pytest.mark.asyncio -async def test_hitl_middleware_default_write_does_not_require_approval() -> None: - middleware = create_approval_middleware( - config_by_name={ - "calendar_write": ToolConfig( - name="calendar_write", - group=ToolGroup.EXECUTE, - approval=ToolApprovalConfig(required=False), - ) - } - ) - - responses = [] - async for chunk in middleware( - {"tool_call": {"name": "calendar.write", "input": {"operation": "create"}}}, - _next_handler, - ): - responses.append(chunk) - - assert responses[0]["ok"] is True - - -@pytest.mark.asyncio -async def test_hitl_middleware_pending_when_tool_requires_approval() -> None: - middleware = create_approval_middleware( - config_by_name={ - "calendar_write": ToolConfig( - name="calendar_write", - group=ToolGroup.EXECUTE, - approval=ToolApprovalConfig(required=True), - ) - } - ) - - responses = [] - async for chunk in middleware( - {"tool_call": {"name": "calendar_write", "input": {"operation": "create"}}}, - _next_handler, - ): - responses.append(chunk) - - payload = _extract_error_payload(responses[0]) - assert payload["error"]["code"] == "TOOL_PENDING_APPROVAL" - - -@pytest.mark.asyncio -async def test_hitl_middleware_passes_when_write_approved() -> None: - middleware = create_approval_middleware( - config_by_name={ - "calendar_write": ToolConfig( - name="calendar_write", - group=ToolGroup.EXECUTE, - approval=ToolApprovalConfig(required=True), - ) - }, - approval_resolver=lambda _name, _args, _config: "approved", - ) - - responses = [] - async for chunk in middleware( - { - "tool_call": { - "name": "calendar.write", - "input": { - "operation": "create", - "_hitl": {"approval": "required"}, - }, - } - }, - _next_handler, - ): - responses.append(chunk) - - assert responses[0]["ok"] is True - sanitized_input = responses[0]["tool_call"]["input"] - assert "_hitl" not in sanitized_input - - -@pytest.mark.asyncio -async def test_hitl_middleware_rejected_short_circuits() -> None: - middleware = create_approval_middleware( - config_by_name={ - "calendar_write": ToolConfig( - name="calendar_write", - group=ToolGroup.EXECUTE, - approval=ToolApprovalConfig(required=True), - ) - }, - approval_resolver=lambda _name, _args, _config: "rejected", - ) - - responses = [] - async for chunk in middleware( - {"tool_call": {"name": "calendar_write", "input": {"operation": "create"}}}, - _next_handler, - ): - responses.append(chunk) - - payload = _extract_error_payload(responses[0]) - assert payload["error"]["code"] == "TOOL_REJECTED" diff --git a/backend/tests/unit/core/agentscope/test_memory_tools.py b/backend/tests/unit/core/agentscope/test_memory_tools.py index ce8bbd7..4d39e50 100644 --- a/backend/tests/unit/core/agentscope/test_memory_tools.py +++ b/backend/tests/unit/core/agentscope/test_memory_tools.py @@ -9,7 +9,7 @@ from agentscope.tool import ToolResponse from core.agentscope.tools.custom import memory as memory_module from models.memories import MemoryType -from schemas.memories.memory_content import UserMemoryContent +from schemas.domain.memory_content import UserMemoryContent def _decode_tool_response(response: ToolResponse) -> dict[str, object]: diff --git a/backend/tests/unit/core/agentscope/test_system_prompt.py b/backend/tests/unit/core/agentscope/test_system_prompt.py index 6328c58..690a6a6 100644 --- a/backend/tests/unit/core/agentscope/test_system_prompt.py +++ b/backend/tests/unit/core/agentscope/test_system_prompt.py @@ -9,7 +9,7 @@ from core.agentscope.prompts.system_prompt import ( ) from schemas.agent.forwarded_props import ClientTimeContext from schemas.agent.system_agent import AgentType -from schemas.user.context import UserContext, parse_profile_settings +from schemas.shared.user import UserContext, parse_profile_settings def _build_user_context(*, timezone_name: str = "Asia/Shanghai") -> UserContext: @@ -159,7 +159,7 @@ def test_build_system_prompt_keeps_sections_focused_without_language_duplication def test_build_system_prompt_includes_user_memory_section_for_router() -> None: - from schemas.memories.memory_content import UserMemoryContent + from schemas.domain.memory_content import UserMemoryContent user_memory = UserMemoryContent() @@ -175,7 +175,7 @@ def test_build_system_prompt_includes_user_memory_section_for_router() -> None: def test_build_system_prompt_includes_work_memory_section_for_worker() -> None: - from schemas.memories.memory_content import WorkProfileContent + from schemas.domain.memory_content import WorkProfileContent work_memory = WorkProfileContent() diff --git a/backend/tests/unit/core/automation/test_scheduler.py b/backend/tests/unit/core/automation/test_scheduler.py index 1f83c04..365a7a7 100644 --- a/backend/tests/unit/core/automation/test_scheduler.py +++ b/backend/tests/unit/core/automation/test_scheduler.py @@ -6,7 +6,7 @@ from uuid import UUID, uuid4 import pytest from models.automation_jobs import AutomationJob as OrmAutomationJob, ScheduleType -from schemas.automation import ( +from schemas.domain.automation import ( RuntimeConfig, ScheduleConfig, ScheduleRunAt, diff --git a/backend/tests/unit/database/test_base_repository.py b/backend/tests/unit/database/test_base_repository.py deleted file mode 100644 index 9989139..0000000 --- a/backend/tests/unit/database/test_base_repository.py +++ /dev/null @@ -1,87 +0,0 @@ -from __future__ import annotations - -from datetime import datetime, timezone -from uuid import UUID, uuid4 - -import pytest -from sqlalchemy import Column, String, Table -from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine -from sqlalchemy.orm import Mapped, mapped_column - -from core.db.base import Base, SoftDeleteMixin -from core.db.base_repository import BaseRepository - - -class Widget(SoftDeleteMixin, Base): - __tablename__ = "widgets" - - id: Mapped[UUID] = mapped_column(primary_key=True) - name: Mapped[str] = mapped_column(String(50), nullable=False) - - -@pytest.fixture -async def db_engine(): - auth_users = Table( - "users", - Base.metadata, - Column("id", String, primary_key=True), - schema="auth", - extend_existing=True, - ) - engine = create_async_engine("sqlite+aiosqlite:///:memory:", echo=False) - async with engine.begin() as conn: - await conn.exec_driver_sql("ATTACH DATABASE ':memory:' AS auth") - await conn.run_sync(Base.metadata.create_all) - yield engine - Base.metadata.remove(auth_users) - await engine.dispose() - - -@pytest.fixture -async def db_session(db_engine): - async_session = async_sessionmaker( - bind=db_engine, - class_=AsyncSession, - expire_on_commit=False, - ) - async with async_session() as session: - yield session - await session.rollback() - - -@pytest.mark.asyncio -async def test_get_by_id_filters_soft_deleted(db_session: AsyncSession) -> None: - repository = BaseRepository(db_session, Widget) - widget_id = uuid4() - - widget = Widget(id=widget_id, name="widget") - db_session.add(widget) - await db_session.commit() - - found = await repository.get_by_id(widget_id) - assert found is not None - - deleted = await repository.soft_delete_by_id(widget_id) - assert deleted is not None - assert deleted.deleted_at is not None - - missing = await repository.get_by_id(widget_id) - assert missing is None - - -@pytest.mark.asyncio -async def test_soft_delete_sets_timestamp(db_session: AsyncSession) -> None: - repository = BaseRepository(db_session, Widget) - widget_id = uuid4() - - widget = Widget(id=widget_id, name="widget") - db_session.add(widget) - await db_session.commit() - - deleted = await repository.soft_delete_by_id(widget_id) - assert deleted is not None - assert isinstance(deleted.deleted_at, datetime) - deleted_at = deleted.deleted_at - if deleted_at.tzinfo is None: - deleted_at = deleted_at.replace(tzinfo=timezone.utc) - assert deleted_at <= datetime.now(timezone.utc) diff --git a/backend/tests/unit/database/test_profile_models.py b/backend/tests/unit/database/test_profile_models.py deleted file mode 100644 index 1e9c0b5..0000000 --- a/backend/tests/unit/database/test_profile_models.py +++ /dev/null @@ -1,134 +0,0 @@ -from __future__ import annotations - -from uuid import uuid4 - -import pytest -from sqlalchemy import Column, String, Table, select -from sqlalchemy.ext.asyncio import AsyncSession, async_sessionmaker, create_async_engine - -from core.db.base import Base -from models.profile import Profile - - -@pytest.fixture -async def db_engine(): - """Create in-memory SQLite engine for testing.""" - users_table = Table( - "users", - Base.metadata, - Column("id", String, primary_key=True), - schema="auth", - extend_existing=True, - ) - engine = create_async_engine( - "sqlite+aiosqlite:///:memory:", - echo=False, - ) - async with engine.begin() as conn: - await conn.exec_driver_sql("ATTACH DATABASE ':memory:' AS auth") - await conn.run_sync(Base.metadata.create_all) - yield engine - Base.metadata.remove(users_table) - await engine.dispose() - - -@pytest.fixture -async def db_session(db_engine): - """Create a database session for testing.""" - async_session = async_sessionmaker( - bind=db_engine, - class_=AsyncSession, - expire_on_commit=False, - ) - async with async_session() as session: - yield session - await session.rollback() - - -@pytest.mark.asyncio -async def test_profile_model_create(db_session: AsyncSession) -> None: - """Test creating a Profile model.""" - profile_id = uuid4() - profile = Profile( - id=profile_id, - username="testuser", - ) - db_session.add(profile) - await db_session.commit() - await db_session.refresh(profile) - - assert profile.id == profile_id - assert profile.username == "testuser" - assert profile.created_at is not None - assert profile.updated_at is not None - assert profile.deleted_at is None - - -@pytest.mark.asyncio -async def test_profile_model_get_by_id(db_session: AsyncSession) -> None: - """Test retrieving a Profile by ID.""" - profile_id = uuid4() - profile = Profile( - id=profile_id, - username="testuser", - ) - db_session.add(profile) - await db_session.commit() - - result = await db_session.get(Profile, profile_id) - assert result is not None - assert result.username == "testuser" - - -@pytest.mark.asyncio -async def test_profile_model_get_by_username(db_session: AsyncSession) -> None: - """Test retrieving a Profile by username.""" - profile = Profile( - id=uuid4(), - username="testuser", - ) - db_session.add(profile) - await db_session.commit() - - result = await db_session.execute( - select(Profile).where(Profile.username == "testuser") - ) - found = result.scalar_one() - assert found is not None - assert found.username == "testuser" - - -@pytest.mark.asyncio -async def test_profile_model_update(db_session: AsyncSession) -> None: - """Test updating a Profile.""" - profile = Profile( - id=uuid4(), - username="testuser", - bio="Old bio", - ) - db_session.add(profile) - await db_session.commit() - - profile.bio = "New bio" - await db_session.commit() - await db_session.refresh(profile) - - assert profile.bio == "New bio" - - -@pytest.mark.asyncio -async def test_profile_model_allows_duplicate_usernames( - db_session: AsyncSession, -) -> None: - first = Profile(id=uuid4(), username="same_name") - second = Profile(id=uuid4(), username="same_name") - - db_session.add(first) - db_session.add(second) - await db_session.commit() - - result = await db_session.execute( - select(Profile).where(Profile.username == "same_name") - ) - found = result.scalars().all() - assert len(found) == 2 diff --git a/backend/tests/unit/infra/test_worker_runtime_script.py b/backend/tests/unit/infra/test_worker_runtime_script.py deleted file mode 100644 index 1c9ac8c..0000000 --- a/backend/tests/unit/infra/test_worker_runtime_script.py +++ /dev/null @@ -1,32 +0,0 @@ -from __future__ import annotations - -from pathlib import Path - - -ROOT_DIR = Path(__file__).resolve().parents[4] -APP_SCRIPT = ROOT_DIR / "infra" / "scripts" / "app.sh" - - -def test_worker_commands_use_taskiq() -> None: - content = APP_SCRIPT.read_text(encoding="utf-8") - removed_runner = "uv run celery" - - assert "uv run taskiq worker" in content - assert "core.taskiq.app:critical_broker" in content - assert "core.taskiq.app:default_broker" in content - assert "core.taskiq.app:bulk_broker" in content - assert 'pgrep -f "uv run taskiq worker core.taskiq.app:"' in content - assert 'kill_pids_gracefully "taskiq workers"' in content - assert "gunicorn" not in content - assert removed_runner not in content - - -def test_web_command_uses_uvicorn_only() -> None: - content = APP_SCRIPT.read_text(encoding="utf-8") - - assert "uv run uvicorn app:app" in content - assert 'WEB_PORT="${SOCIAL_WEB__PORT:-5775}"' in content - assert "SOCIAL_WEB__WORKERS" in content - assert 'UVICORN_LOG_LEVEL="${UVICORN_LOG_LEVEL,,}"' in content - assert "SOCIAL_WEB__GUNICORN__" not in content - assert "uv run gunicorn" not in content diff --git a/backend/tests/unit/schemas/agent/test_pipeline_spec.py b/backend/tests/unit/schemas/agent/test_pipeline_spec.py deleted file mode 100644 index a682149..0000000 --- a/backend/tests/unit/schemas/agent/test_pipeline_spec.py +++ /dev/null @@ -1,36 +0,0 @@ -from __future__ import annotations - -import pytest - -from core.agentscope.schemas.consumer_registry import ( - AgentConsumerBinding, - ConsumerRegistry, -) -from core.agentscope.schemas.pipeline_spec import ExecutorKind, PipelineSpec, StageSpec -from schemas.agent.system_agent import AgentType - - -def test_consumer_registry_rejects_duplicate_bits() -> None: - with pytest.raises(ValueError, match="duplicate visibility bit"): - ConsumerRegistry( - bindings=[ - AgentConsumerBinding(agent_type="router", bit=16), - AgentConsumerBinding(agent_type="worker", bit=16), - ] - ) - - -def test_pipeline_spec_requires_non_empty_stages() -> None: - with pytest.raises(ValueError, match="at least 1 item"): - PipelineSpec(mode="worker", stages=[]) - - -def test_stage_spec_normalizes_stage_name() -> None: - spec = StageSpec( - stage_name=" Worker ", - agent_type=AgentType.WORKER, - executor_kind=ExecutorKind.REACT, - ) - - assert spec.stage_name == "worker" - assert spec.agent_type == AgentType.WORKER diff --git a/backend/tests/unit/schemas/automation/test_config.py b/backend/tests/unit/schemas/automation/test_config.py index 3f5558a..bc8b85f 100644 --- a/backend/tests/unit/schemas/automation/test_config.py +++ b/backend/tests/unit/schemas/automation/test_config.py @@ -2,23 +2,25 @@ from __future__ import annotations import pytest -from schemas.automation.config import AutomationJobConfig, default_memory_job_config +from schemas.domain.automation import AutomationJobConfig +from v1.auth.automation_static_config import load_static_automation_job_config -def test_default_memory_job_config_has_expected_defaults() -> None: - config = default_memory_job_config() +def test_memory_extraction_static_config_has_expected_defaults() -> None: + config = load_static_automation_job_config(config_name="memory_extraction") - assert config.agent_type.value == "memory" - assert config.model_code == "qwen3.5-flash" + assert "memory.write" in (config.enabled_tools or []) + assert "memory.forget" in (config.enabled_tools or []) + assert config.context is not None assert config.context.source.value == "latest_chat" + assert config.schedule is not None + assert config.schedule.type.value == "daily" -def test_automation_job_config_rejects_non_flash_model() -> None: - with pytest.raises(ValueError, match="model_code must be qwen3.5-flash"): +def test_automation_job_config_rejects_missing_weekdays_for_weekly() -> None: + with pytest.raises(ValueError, match="weekdays is required"): AutomationJobConfig.model_validate( { - "agent_type": "memory", - "model_code": "qwen-plus", "enabled_tools": ["calendar.read"], "input_template": "x", "context": { @@ -26,5 +28,9 @@ def test_automation_job_config_rejects_non_flash_model() -> None: "window_mode": "day", "window_count": 2, }, + "schedule": { + "type": "weekly", + "run_at": {"hour": 9, "minute": 0}, + }, } ) diff --git a/backend/tests/unit/schemas/messages/test_chat_message_schema.py b/backend/tests/unit/schemas/messages/test_chat_message_schema.py index 2049fb4..baa2197 100644 --- a/backend/tests/unit/schemas/messages/test_chat_message_schema.py +++ b/backend/tests/unit/schemas/messages/test_chat_message_schema.py @@ -3,7 +3,7 @@ from __future__ import annotations from datetime import UTC, datetime from uuid import uuid4 -from schemas.messages.chat_message import AgentChatMessage +from schemas.domain.chat_message import AgentChatMessage def test_agent_chat_message_schema_matches_messages_columns() -> None: diff --git a/backend/tests/unit/v1/agent/test_dependencies_queue.py b/backend/tests/unit/v1/agent/test_dependencies_queue.py deleted file mode 100644 index ca1a93b..0000000 --- a/backend/tests/unit/v1/agent/test_dependencies_queue.py +++ /dev/null @@ -1,283 +0,0 @@ -from __future__ import annotations - -import pytest - -from v1.agent.dependencies import RedisEventStream, TaskiqQueueClient - - -class _FakeRedis: - def __init__(self) -> None: - self.store: dict[str, str] = {} - self.delete_calls: list[str] = [] - - async def set( - self, - key: str, - value: str, - *, - nx: bool = False, - ex: int | None = None, - ) -> bool: - del ex - if nx and key in self.store: - return False - self.store[key] = value - return True - - async def get(self, key: str) -> str | None: - return self.store.get(key) - - async def delete(self, key: str) -> int: - self.delete_calls.append(key) - existed = 1 if key in self.store else 0 - self.store.pop(key, None) - return existed - - -class _FakeAsyncResult: - def __init__(self, task_id: str) -> None: - self.task_id = task_id - - -class _FakeRedisStreamClient: - pass - - -@pytest.mark.asyncio -async def test_enqueue_returns_task_id(monkeypatch: pytest.MonkeyPatch) -> None: - from v1.agent import dependencies as deps - - fake_redis = _FakeRedis() - resolved_client = {"value": False} - - async def _fake_kiq(payload: dict[str, object]) -> _FakeAsyncResult: - assert payload["command"] == "run" - return _FakeAsyncResult("task-123") - - async def _fake_get_or_init_client() -> _FakeRedis: - resolved_client["value"] = True - return fake_redis - - monkeypatch.setattr(deps, "get_or_init_redis_client", _fake_get_or_init_client) - monkeypatch.setattr(deps.run_command_task, "kiq", _fake_kiq) - - client = TaskiqQueueClient() - task_id = await client.enqueue(command={"command": "run"}, dedup_key=None) - - assert resolved_client["value"] is True - assert task_id == "task-123" - - -@pytest.mark.asyncio -async def test_enqueue_resume_dedup_returns_existing_task_id( - monkeypatch: pytest.MonkeyPatch, -) -> None: - from v1.agent import dependencies as deps - - fake_redis = _FakeRedis() - resolved_client = {"value": False} - - async def _fake_kiq(payload: dict[str, object]) -> _FakeAsyncResult: - del payload - return _FakeAsyncResult("new-task-id") - - async def _fake_get_or_init_client() -> _FakeRedis: - resolved_client["value"] = True - return fake_redis - - monkeypatch.setattr(deps, "get_or_init_redis_client", _fake_get_or_init_client) - monkeypatch.setattr(deps.run_command_task, "kiq", _fake_kiq) - - dedup_key = "resume:session-1:call-1" - fake_redis.store[f"agent:dedup:{dedup_key}"] = "existing-task-id" - - client = TaskiqQueueClient() - task_id = await client.enqueue( - command={ - "command": "resume", - "session_id": "session-1", - "tool_call_id": "call-1", - }, - dedup_key=dedup_key, - ) - - assert resolved_client["value"] is True - assert task_id == "existing-task-id" - - -@pytest.mark.asyncio -async def test_enqueue_inflight_dedup_waits_and_reuses_existing_task_id( - monkeypatch: pytest.MonkeyPatch, -) -> None: - from v1.agent import dependencies as deps - - fake_redis = _FakeRedis() - dedup_key = "resume:session-1:call-1" - redis_key = f"agent:dedup:{dedup_key}" - fake_redis.store[redis_key] = deps.DEDUP_INFLIGHT_MARKER - attempts = {"count": 0} - - async def _fake_get_or_init_client() -> _FakeRedis: - return fake_redis - - async def _fake_get(key: str) -> str | None: - attempts["count"] += 1 - if attempts["count"] > 1: - fake_redis.store[key] = "existing-task-id" - return fake_redis.store.get(key) - - async def _fake_sleep(_: float) -> None: - return None - - async def _fake_kiq(payload: dict[str, object]) -> _FakeAsyncResult: - del payload - raise AssertionError("should not enqueue when dedup task id appears") - - monkeypatch.setattr(deps, "get_or_init_redis_client", _fake_get_or_init_client) - monkeypatch.setattr(fake_redis, "get", _fake_get) - monkeypatch.setattr(deps.asyncio, "sleep", _fake_sleep) - monkeypatch.setattr(deps.run_command_task, "kiq", _fake_kiq) - - client = TaskiqQueueClient() - task_id = await client.enqueue( - command={ - "command": "resume", - "session_id": "session-1", - "tool_call_id": "call-1", - }, - dedup_key=dedup_key, - ) - - assert task_id == "existing-task-id" - - -@pytest.mark.asyncio -async def test_enqueue_failure_cleans_dedup_lock( - monkeypatch: pytest.MonkeyPatch, -) -> None: - from v1.agent import dependencies as deps - - fake_redis = _FakeRedis() - dedup_key = "resume:session-1:call-1" - redis_key = f"agent:dedup:{dedup_key}" - - async def _fake_get_or_init_client() -> _FakeRedis: - return fake_redis - - async def _fake_kiq(payload: dict[str, object]) -> _FakeAsyncResult: - del payload - raise RuntimeError("enqueue failed") - - monkeypatch.setattr(deps, "get_or_init_redis_client", _fake_get_or_init_client) - monkeypatch.setattr(deps.run_command_task, "kiq", _fake_kiq) - - client = TaskiqQueueClient() - with pytest.raises(RuntimeError, match="enqueue failed"): - await client.enqueue( - command={ - "command": "resume", - "session_id": "session-1", - "tool_call_id": "call-1", - }, - dedup_key=dedup_key, - ) - - assert redis_key in fake_redis.delete_calls - - -@pytest.mark.asyncio -async def test_enqueue_uses_critical_queue_when_requested( - monkeypatch: pytest.MonkeyPatch, -) -> None: - from v1.agent import dependencies as deps - - fake_redis = _FakeRedis() - - async def _fake_get_or_init_client() -> _FakeRedis: - return fake_redis - - async def _fake_default_kiq(_: dict[str, object]) -> _FakeAsyncResult: - raise AssertionError("default queue should not be selected") - - async def _fake_critical_kiq(_: dict[str, object]) -> _FakeAsyncResult: - return _FakeAsyncResult("critical-task-id") - - monkeypatch.setattr(deps, "get_or_init_redis_client", _fake_get_or_init_client) - monkeypatch.setattr(deps.run_command_task, "kiq", _fake_default_kiq) - monkeypatch.setattr(deps.run_command_task_critical, "kiq", _fake_critical_kiq) - - client = TaskiqQueueClient() - task_id = await client.enqueue( - command={"command": "run", "queue": "critical"}, - dedup_key=None, - ) - - assert task_id == "critical-task-id" - - -@pytest.mark.asyncio -async def test_enqueue_uses_bulk_queue_when_requested( - monkeypatch: pytest.MonkeyPatch, -) -> None: - from v1.agent import dependencies as deps - - fake_redis = _FakeRedis() - - async def _fake_get_or_init_client() -> _FakeRedis: - return fake_redis - - async def _fake_default_kiq(_: dict[str, object]) -> _FakeAsyncResult: - raise AssertionError("default queue should not be selected") - - async def _fake_bulk_kiq(_: dict[str, object]) -> _FakeAsyncResult: - return _FakeAsyncResult("bulk-task-id") - - monkeypatch.setattr(deps, "get_or_init_redis_client", _fake_get_or_init_client) - monkeypatch.setattr(deps.run_command_task, "kiq", _fake_default_kiq) - monkeypatch.setattr(deps.run_command_task_bulk, "kiq", _fake_bulk_kiq) - - client = TaskiqQueueClient() - task_id = await client.enqueue( - command={"command": "run", "queue": "bulk"}, - dedup_key=None, - ) - - assert task_id == "bulk-task-id" - - -@pytest.mark.asyncio -async def test_event_stream_caps_block_ms_below_socket_timeout( - monkeypatch: pytest.MonkeyPatch, -) -> None: - from v1.agent import dependencies as deps - - async def _fake_get_or_init_client() -> _FakeRedisStreamClient: - return _FakeRedisStreamClient() - - monkeypatch.setattr(deps, "get_or_init_redis_client", _fake_get_or_init_client) - monkeypatch.setattr(deps.config.agent_runtime, "redis_stream_block_ms", 5000) - monkeypatch.setattr(deps.config.redis, "socket_timeout", 1.0) - - stream = RedisEventStream() - bus = await stream._get_bus() - - assert bus._block_ms == 900 - - -@pytest.mark.asyncio -async def test_event_stream_uses_configured_block_ms_when_safe( - monkeypatch: pytest.MonkeyPatch, -) -> None: - from v1.agent import dependencies as deps - - async def _fake_get_or_init_client() -> _FakeRedisStreamClient: - return _FakeRedisStreamClient() - - monkeypatch.setattr(deps, "get_or_init_redis_client", _fake_get_or_init_client) - monkeypatch.setattr(deps.config.agent_runtime, "redis_stream_block_ms", 200) - monkeypatch.setattr(deps.config.redis, "socket_timeout", 2.0) - - stream = RedisEventStream() - bus = await stream._get_bus() - - assert bus._block_ms == 200 diff --git a/backend/tests/unit/v1/agent/test_service.py b/backend/tests/unit/v1/agent/test_service.py index 0c5a536..f6132d3 100644 --- a/backend/tests/unit/v1/agent/test_service.py +++ b/backend/tests/unit/v1/agent/test_service.py @@ -12,7 +12,7 @@ import pytest import v1.agent.service as agent_service_module from core.auth.models import CurrentUser from core.config.settings import config -from schemas.messages.chat_message import AgentChatMessageMetadata +from schemas.domain.chat_message import AgentChatMessageMetadata from v1.agent.service import AgentService diff --git a/backend/tests/unit/v1/auth/test_registration_bootstrap_service.py b/backend/tests/unit/v1/auth/test_registration_bootstrap_service.py index 819f859..265b77a 100644 --- a/backend/tests/unit/v1/auth/test_registration_bootstrap_service.py +++ b/backend/tests/unit/v1/auth/test_registration_bootstrap_service.py @@ -10,7 +10,7 @@ from models.automation_jobs import ScheduleType from v1.auth.registration_bootstrap import ( compute_first_run_at_utc, ) -from schemas.automation import ScheduleConfig, ScheduleRunAt +from schemas.domain.automation import ScheduleConfig, ScheduleRunAt def test_compute_first_run_at_utc_from_asia_shanghai() -> None: diff --git a/backend/tests/unit/v1/automation_jobs/test_repository.py b/backend/tests/unit/v1/automation_jobs/test_repository.py index d1277b5..e281a54 100644 --- a/backend/tests/unit/v1/automation_jobs/test_repository.py +++ b/backend/tests/unit/v1/automation_jobs/test_repository.py @@ -4,7 +4,7 @@ from uuid import uuid4 import pytest from models.automation_jobs import AutomationJobStatus, ScheduleType -from schemas.automation import ( +from schemas.domain.automation import ( AgentTool, AutomationJobConfig, ContextSource, diff --git a/backend/tests/unit/v1/automation_jobs/test_schemas.py b/backend/tests/unit/v1/automation_jobs/test_schemas.py index ddb34e1..8366854 100644 --- a/backend/tests/unit/v1/automation_jobs/test_schemas.py +++ b/backend/tests/unit/v1/automation_jobs/test_schemas.py @@ -5,7 +5,8 @@ from uuid import uuid4 import pytest from pydantic import ValidationError -from schemas.automation import AgentTool, AutomationJobConfig +from core.agentscope.tools.tool_config import AgentTool +from schemas.domain.automation import AutomationJobConfig from v1.automation_jobs.schemas import ( AutomationJobCreateRequest, AutomationJobResponse, diff --git a/backend/tests/unit/v1/automation_jobs/test_service.py b/backend/tests/unit/v1/automation_jobs/test_service.py index 1fb9881..08bde36 100644 --- a/backend/tests/unit/v1/automation_jobs/test_service.py +++ b/backend/tests/unit/v1/automation_jobs/test_service.py @@ -17,7 +17,7 @@ from v1.automation_jobs.schemas import ( AutomationJobCreateRequest, AutomationJobUpdateRequest, ) -from schemas.automation import ( +from schemas.domain.automation import ( AgentTool, AutomationJobConfig, ContextSource, diff --git a/backend/tests/unit/v1/friendships/test_schemas.py b/backend/tests/unit/v1/friendships/test_schemas.py index df1b0a2..e7a70c6 100644 --- a/backend/tests/unit/v1/friendships/test_schemas.py +++ b/backend/tests/unit/v1/friendships/test_schemas.py @@ -5,7 +5,7 @@ from uuid import uuid4 import pytest from pydantic import ValidationError -from schemas.user.context import UserContext +from schemas.shared.user import UserContext from v1.friendships.schemas import ( FriendRequestCreate, diff --git a/backend/tests/unit/v1/inbox_messages/test_schemas.py b/backend/tests/unit/v1/inbox_messages/test_schemas.py index 9e7474d..cbdc278 100644 --- a/backend/tests/unit/v1/inbox_messages/test_schemas.py +++ b/backend/tests/unit/v1/inbox_messages/test_schemas.py @@ -16,7 +16,7 @@ def test_inbox_message_response_schema() -> None: sender_id=uuid4(), message_type=InboxMessageType.CALENDAR, schedule_item_id=uuid4(), - content="Join my calendar", + content={"type": "invite", "permission": 1, "action": "pending"}, is_read=False, status=InboxMessageStatus.PENDING, created_at=datetime.now(timezone.utc), diff --git a/backend/tests/unit/v1/inbox_messages/test_service.py b/backend/tests/unit/v1/inbox_messages/test_service.py index 17fc0dc..ad2f3cb 100644 --- a/backend/tests/unit/v1/inbox_messages/test_service.py +++ b/backend/tests/unit/v1/inbox_messages/test_service.py @@ -22,7 +22,7 @@ def _build_message( status: InboxMessageModelStatus = InboxMessageModelStatus.PENDING, message_type: InboxMessageModelType = InboxMessageModelType.CALENDAR, schedule_item_id: UUID | None = None, - content: str = '{"permission": 7}', + content: dict[str, object] = {"permission": 7}, ) -> InboxMessage: message = MagicMock(spec=InboxMessage) message.id = message_id diff --git a/backend/tests/unit/v1/schedule_items/test_service.py b/backend/tests/unit/v1/schedule_items/test_service.py index 713f9b3..8f6d632 100644 --- a/backend/tests/unit/v1/schedule_items/test_service.py +++ b/backend/tests/unit/v1/schedule_items/test_service.py @@ -500,3 +500,43 @@ async def test_list_by_date_range_rolls_back_when_query_fails_after_archive( assert exc_info.value.status_code == 503 mock_session.rollback.assert_awaited_once() mock_session.commit.assert_not_awaited() + + +@pytest.mark.asyncio +async def test_get_by_id_maps_legacy_completed_to_archived( + mock_session: AsyncMock, + mock_inbox_repository: MagicMock, +) -> None: + user_id = UUID("00000000-0000-0000-0000-000000000001") + item = _create_mock_schedule_item() + setattr(item, "status", "completed") + service = ScheduleItemService( + repository=FakeRepo(item), + session=mock_session, + current_user=CurrentUser(id=user_id), + inbox_repository=mock_inbox_repository, + ) + + result = await service.get_by_id(item.id) + + assert result.status == ScheduleItemStatus.ARCHIVED + + +@pytest.mark.asyncio +async def test_get_by_id_maps_legacy_canceled_to_archived( + mock_session: AsyncMock, + mock_inbox_repository: MagicMock, +) -> None: + user_id = UUID("00000000-0000-0000-0000-000000000001") + item = _create_mock_schedule_item() + setattr(item, "status", "canceled") + service = ScheduleItemService( + repository=FakeRepo(item), + session=mock_session, + current_user=CurrentUser(id=user_id), + inbox_repository=mock_inbox_repository, + ) + + result = await service.get_by_id(item.id) + + assert result.status == ScheduleItemStatus.ARCHIVED diff --git a/backend/tests/unit/v1/schedule_items/test_subscription.py b/backend/tests/unit/v1/schedule_items/test_subscription.py index a855b70..14381b4 100644 --- a/backend/tests/unit/v1/schedule_items/test_subscription.py +++ b/backend/tests/unit/v1/schedule_items/test_subscription.py @@ -1,4 +1,3 @@ -import json from datetime import datetime, timezone from unittest.mock import AsyncMock, MagicMock from uuid import UUID, uuid4 @@ -50,6 +49,11 @@ class FakeInboxRepo: return self._inbox return None + async def get_calendar_invite( + self, schedule_item_id: UUID, recipient_id: UUID + ) -> InboxMessage | None: + return await self.get_pending_calendar_invite(schedule_item_id, recipient_id) + async def create(self, data: dict) -> InboxMessage: return MagicMock() @@ -80,6 +84,9 @@ def mock_session() -> AsyncMock: @pytest.fixture def mock_repo() -> MagicMock: repo = MagicMock() + repo.get_subscription = AsyncMock(return_value=None) + repo.update_subscription_status = AsyncMock(return_value=None) + repo.archive_expired_subscribed_items = AsyncMock(return_value=0) repo.create_subscription = AsyncMock(return_value=MagicMock()) return repo @@ -196,6 +203,9 @@ async def test_list_by_date_range_with_subscriptions( mock_repo.list_by_date_range = AsyncMock(return_value=[owned_item]) mock_repo.get_user_subscriptions = AsyncMock(return_value=[subscription]) + mock_repo.list_subscribed_items_by_date_range = AsyncMock( + return_value=[(subscribed_item, subscription)] + ) mock_repo.get_by_id = AsyncMock(return_value=subscribed_item) service = ScheduleItemService( @@ -214,7 +224,6 @@ async def test_list_by_date_range_with_subscriptions( result = await service.list_by_date_range(request) - assert len(result) == 2 - assert result[0].is_owner is True - assert result[1].is_owner is False - assert result[1].permission == 1 + assert len(result) == 1 + assert result[0].is_owner is False + assert result[0].permission == 1 diff --git a/docs/plans/2026-03-25-protocols-doc-fix.md b/docs/plans/2026-03-25-protocols-doc-fix.md new file mode 100644 index 0000000..0aa0352 --- /dev/null +++ b/docs/plans/2026-03-25-protocols-doc-fix.md @@ -0,0 +1,99 @@ +# Protocols 文档修复计划 + +> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. + +**Goal:** 修复 protocols 文档中与后端实现不一致的错误 + +**Architecture:** 直接修改 docs/protocols/ 下的 markdown 文件,确保文档与 backend/src/models/ 中的实际模型定义保持一致 + +**Tech Stack:** Markdown 编辑 + +--- + +## 修复任务清单 + +### Task 1: 修复 Memories Protocol - 移除不存在的 `agent_id` 字段 + +**文件:** +- 修改: `docs/protocols/models/memory.md` + +**修改内容:** +- 从 "数据库存储" 章节的表格中移除 `agent_id` 字段 +- 该字段在实现中不存在 + +--- + +### Task 2: 修复 InboxMessages Protocol - 添加缺失的 `group_id` 字段 + +**文件:** +- 修改: `docs/protocols/models/inbox-messages.md` + +**修改内容:** +- 在 `InboxMessageResponse` 数据结构中添加 `group_id: uuid | null` 字段 + +--- + +### Task 3: 修复 ScheduleItems Protocol - 补充 `permission` 位掩码说明 + +**文件:** +- 修改: `docs/protocols/calendar/schedule-items.md` + +**修改内容:** +- 在 `ScheduleItemResponse` 的说明中,添加 `permission` 字段的位掩码语义: + - `1` = view + - `2` = invite + - `4` = edit +- 在 `ScheduleItemShareRequest` 中补充说明 + +--- + +### Task 4: 修复 Friendships Protocol - 补充内部状态说明 + +**文件:** +- 修改: `docs/protocols/models/friendships.md` + +**修改内容:** +- 在 `FriendRequestResponse` 的 `status` 字段说明中,添加注释: + - `blocked` 和 `declined` 为内部实现状态 + - 对外返回时映射为 `rejected` +- 说明这是实现细节,客户端应处理所有枚举值 + +--- + +### Task 5: 修复 Memories Protocol - 改进 `source` 列移除说明 + +**文件:** +- 修改: `docs/protocols/models/memory.md` + +**修改内容:** +- 在 "数据库存储" 章节的表格中,明确标注 `source` 列已移除 +- 或者在表格下方添加更醒目的 "已移除字段" 说明 + +--- + +### Task 6: 修复 Automation Jobs Protocol - 添加 `bootstrap_key` 字段 + +**文件:** +- 修改: `docs/protocols/models/automation-jobs.md` + +**修改内容:** +- 在 "Canonical Fields" 表格中添加 `bootstrap_key: string | null` 字段说明 +- 简短说明其用途(引导配置键) + +--- + +## 执行顺序 + +1. Task 1 - Memories: 移除 agent_id +2. Task 2 - InboxMessages: 添加 group_id +3. Task 3 - ScheduleItems: 补充 permission 说明 +4. Task 4 - Friendships: 补充状态说明 +5. Task 5 - Memories: 改进 source 说明 +6. Task 6 - AutomationJobs: 添加 bootstrap_key + +--- + +## 验证方式 + +- 人工检查:对比修改后的文档与 backend/src/models/ 中的实际模型定义 +- 确保文档中描述的每个字段都能在对应 model 文件中找到 diff --git a/docs/plans/2026-03-25-schemas-restructure-design.md b/docs/plans/2026-03-25-schemas-restructure-design.md new file mode 100644 index 0000000..b302159 --- /dev/null +++ b/docs/plans/2026-03-25-schemas-restructure-design.md @@ -0,0 +1,29 @@ +# Backend Schemas Restructure Design + +**Goal:** Restructure `backend/src/schemas` into clear domain/shared/enums modules while keeping API contracts in `backend/src/v1/*/schemas.py`. + +**Architecture:** Move reusable validation models and enums into `schemas/domain`, `schemas/shared`, and `schemas/enums.py`. Keep versioned request/response contracts in `v1/*/schemas.py` and update imports to explicit module paths. Remove legacy aggregate exports and duplicate/empty schema directories. + +**Tech Stack:** Python 3.13, Pydantic v2, Ruff, Pytest. + +--- + +## Approved decisions + +- Use one-shot hard cut. +- Keep API contracts in `backend/src/v1/*/schemas.py`. +- Keep `schemas` as reusable constraints only. +- Remove implicit root re-export usage. + +## Target structure + +- `backend/src/schemas/enums.py` +- `backend/src/schemas/domain/*.py` +- `backend/src/schemas/shared/*.py` +- `backend/src/v1/*/schemas.py` (unchanged naming and ownership) + +## Validation gates + +- `uv run ruff check ...` +- `uv run pytest ...` for impacted suites +- `./infra/scripts/dev-migrate.sh migrate` diff --git a/docs/plans/2026-03-25-schemas-restructure.md b/docs/plans/2026-03-25-schemas-restructure.md new file mode 100644 index 0000000..b880d02 --- /dev/null +++ b/docs/plans/2026-03-25-schemas-restructure.md @@ -0,0 +1,123 @@ +# Backend Schemas Restructure Implementation Plan + +> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. + +**Goal:** Hard-cut refactor backend schema modules into clear domain/shared/enums boundaries while keeping API contracts in `v1/*/schemas.py`. + +**Architecture:** Introduce `schemas/enums.py` and move reusable schema models into `schemas/domain` and `schemas/shared`. Update all backend imports to explicit new module paths and remove old schema package wrappers and duplicate directories. + +**Tech Stack:** Python 3.13, Pydantic v2, Ruff, Pytest, Alembic migration runner. + +--- + +### Task 1: Create new schema module layout + +**Files:** +- Create: `backend/src/schemas/enums.py` +- Create: `backend/src/schemas/domain/automation.py` +- Create: `backend/src/schemas/domain/inbox.py` +- Create: `backend/src/schemas/domain/schedule.py` +- Create: `backend/src/schemas/domain/memory.py` +- Create: `backend/src/schemas/domain/memory_content.py` +- Create: `backend/src/schemas/domain/chat_message.py` +- Create: `backend/src/schemas/domain/chat_session.py` +- Create: `backend/src/schemas/domain/todo.py` +- Create: `backend/src/schemas/domain/invite_code.py` +- Create: `backend/src/schemas/shared/user.py` + +**Step 1: Write failing import checks** + +```python +def test_new_schema_paths_importable() -> None: + import schemas.domain.automation # noqa: F401 +``` + +**Step 2: Run test to verify it fails** + +Run: `uv run pytest backend/tests/unit -k new_schema_paths_importable -v` +Expected: FAIL with import error + +**Step 3: Implement new modules** + +Copy and normalize existing reusable models into new modules. + +**Step 4: Run test to verify it passes** + +Run: `uv run pytest backend/tests/unit -k new_schema_paths_importable -v` +Expected: PASS + +### Task 2: Update all backend imports to new schema paths + +**Files:** +- Modify: `backend/src/**/*.py` (affected import lines) + +**Step 1: Write failing grep assertions** + +Run: `uv run python -c "..."` with assertions for old import patterns. + +**Step 2: Verify failures with old paths present** + +Run: `uv run ruff check backend/src` + +**Step 3: Implement import rewrites** + +Replace old paths (`schemas.model_enums`, `schemas.automation`, `schemas.memories.memory_content`, etc.) with new explicit modules. + +**Step 4: Verify static checks pass** + +Run: `uv run ruff check backend/src` +Expected: PASS + +### Task 3: Remove legacy schema wrappers and duplicates + +**Files:** +- Delete: `backend/src/schemas/model_enums.py` +- Delete: `backend/src/schemas/automation/__init__.py` +- Delete: `backend/src/schemas/inbox/messages.py` +- Delete: `backend/src/schemas/schedule/items.py` +- Delete: `backend/src/schemas/memories/__init__.py` +- Delete: `backend/src/schemas/memories/memory_content.py` +- Delete: `backend/src/schemas/messages/chat_message.py` +- Delete: `backend/src/schemas/messages/__init__.py` +- Delete: `backend/src/schemas/sessions/chat_session.py` +- Delete: `backend/src/schemas/sessions/__init__.py` +- Delete: `backend/src/schemas/todo/contracts.py` +- Delete: `backend/src/schemas/todo/__init__.py` +- Delete: `backend/src/schemas/user/context.py` +- Delete: `backend/src/schemas/user/__init__.py` +- Delete: `backend/src/schemas/inbox/__init__.py` +- Delete: `backend/src/schemas/invite_codes/__init__.py` +- Modify: `backend/src/schemas/__init__.py` + +**Step 1: Remove old modules** + +Delete legacy wrappers after all imports are rewritten. + +**Step 2: Verify no old imports remain** + +Run: `uv run python -c "..."` or grep-based assertion commands. +Expected: zero matches + +### Task 4: Verification and migration + +**Files:** +- Verify only + +**Step 1: Run quality gates** + +Run: `uv run ruff check backend/src` + +**Step 2: Run impacted tests** + +Run: `uv run pytest backend/tests/unit/v1/automation_jobs backend/tests/unit/v1/schedule_items backend/tests/unit/v1/todo backend/tests/unit/v1/friendships backend/tests/unit/v1/inbox_messages backend/tests/unit/v1/users backend/tests/unit/v1/agent backend/tests/unit/core/agentscope` + +**Step 3: Run migration script** + +Run: `./infra/scripts/dev-migrate.sh migrate` + +**Step 4: Commit** + +```bash +git add backend/src/schemas backend/src/v1 backend/src/models backend/src/core docs/plans +git commit -m "refactor: restructure backend schema modules by domain boundaries" +``` diff --git a/docs/protocols/calendar/schedule-items.md b/docs/protocols/calendar/schedule-items.md index a6547b0..4d8adb9 100644 --- a/docs/protocols/calendar/schedule-items.md +++ b/docs/protocols/calendar/schedule-items.md @@ -28,10 +28,10 @@ Base URL: `/api/v1/schedule-items` | 值 | 说明 | |---|---| | `active` | 进行中 | -| `completed` | 已完成 | -| `canceled` | 已取消 | | `archived` | 已归档 | +兼容策略:历史数据中若存在 `completed` 或 `canceled`,服务端统一按 `archived` 语义处理;新写入仅允许 `active` 或 `archived`。 + ### ScheduleItemSourceType | 值 | 说明 | @@ -96,7 +96,7 @@ Base URL: `/api/v1/schedule-items` "end_at": "datetime | null (必须包含时区)", "timezone": "string | null (IANA 时区)", "metadata": "ScheduleItemMetadata | null", - "status": "ScheduleItemStatus | null" + "status": "ScheduleItemStatus | null (active | archived)" } ``` @@ -116,7 +116,7 @@ Base URL: `/api/v1/schedule-items` "source_type": "ScheduleItemSourceType", "created_at": "datetime", "updated_at": "datetime", - "permission": "int", + "permission": "int (位掩码: 1=view, 2=invite, 4=edit)", "is_owner": "boolean" } ``` @@ -132,6 +132,11 @@ Base URL: `/api/v1/schedule-items` } ``` +说明:`permission_view`、`permission_edit`、`permission_invite` 为布尔值,内部会转换为位掩码整数: +- `permission_view = 1` +- `permission_invite = 2` +- `permission_edit = 4` + ### ScheduleItemShareResponse ```json diff --git a/docs/protocols/models/automation-jobs.md b/docs/protocols/models/automation-jobs.md index 14f8a92..1a76325 100644 --- a/docs/protocols/models/automation-jobs.md +++ b/docs/protocols/models/automation-jobs.md @@ -10,6 +10,7 @@ scheduler computation, and Flutter settings pages. - `id`: UUID - `owner_id`: UUID - `title`: string +- `bootstrap_key`: string | null (引导配置键,用于标识预设任务模板) - `config`: object - `input_template`: string - `enabled_tools`: string[] diff --git a/docs/protocols/models/friendships.md b/docs/protocols/models/friendships.md index af4bfb0..f8529a2 100644 --- a/docs/protocols/models/friendships.md +++ b/docs/protocols/models/friendships.md @@ -49,6 +49,8 @@ Base URL: `/api/v1/friends` } ``` +说明:`status` 对外返回的值包括 `pending`、`accepted`、`rejected`、`canceled`。内部实现中还有 `blocked` 和 `declined` 状态,在返回给客户端时会映射为 `rejected` 或 `canceled`。 + ### FriendResponse ```json diff --git a/docs/protocols/models/inbox-messages.md b/docs/protocols/models/inbox-messages.md index af09c3a..cfa9ca6 100644 --- a/docs/protocols/models/inbox-messages.md +++ b/docs/protocols/models/inbox-messages.md @@ -92,6 +92,7 @@ Base URL: `/api/v1/inbox/messages` "message_type": "InboxMessageType", "schedule_item_id": "uuid | null", "friendship_id": "uuid | null", + "group_id": "uuid | null", "content": "CalendarInviteContent | CalendarUpdateContent | CalendarDeleteContent | FriendshipContent | null", "is_read": "boolean", "status": "InboxMessageStatus", diff --git a/docs/protocols/models/memory.md b/docs/protocols/models/memory.md index bc8573e..0ea587c 100644 --- a/docs/protocols/models/memory.md +++ b/docs/protocols/models/memory.md @@ -172,7 +172,6 @@ |------|------|------| | `id` | UUID | 主键 | | `owner_id` | UUID | 所有者用户 ID | -| `agent_id` | UUID | 关联 Agent ID(可选) | | `memory_type` | VARCHAR(20) | 记忆类型枚举(当前含 `user`、`work`,可扩展) | | `content` | JSONB | UserMemoryContent 或 WorkProfileContent | | `status` | VARCHAR(20) | ACTIVE / DISABLED | @@ -181,6 +180,7 @@ 说明: - `source` 列已移除,不再作为行级来源标记。 +- `agent_id` 列不存在。 - 来源信息如果需要保留,使用 `content` 内各条目的 `meta.source`(字段级来源)。 - 唯一性约束:同一 `owner_id` 下 `memory_type` 不能重复(`UNIQUE(owner_id, memory_type)`)。 @@ -306,8 +306,9 @@ build_system_prompt( | 文件 | 职责 | |------|------| -| `src/schemas/memories/memory_content.py` | UserMemoryContent、WorkProfileContent 模型 | -| `src/schemas/memories/__init__.py` | MemoryType、MemoryStatus 枚举 | +| `src/schemas/domain/memory_content.py` | UserMemoryContent、WorkProfileContent 模型 | +| `src/schemas/domain/memory.py` | MemoryModel 聚合模型 | +| `src/schemas/enums.py` | MemoryType、MemoryStatus 枚举 | | `src/models/memories.py` | SQLAlchemy ORM 模型 | | `src/v1/memories/router.py` | API 端点 | | `src/v1/memories/service.py` | 业务逻辑层 |