namespace = 'wp/v2'; $this->rest_base = 'statuses'; } /** * Registers the routes for post statuses. * * @since 4.7.0 * * @see register_rest_route() */ public function register_routes() { register_rest_route( $this->namespace, '/' . $this->rest_base, array( array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_items' ), 'permission_callback' => array( $this, 'get_items_permissions_check' ), 'args' => $this->get_collection_params(), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); register_rest_route( $this->namespace, '/' . $this->rest_base . '/(?P[\w-]+)', array( 'args' => array( 'status' => array( 'description' => __( 'An alphanumeric identifier for the status.' ), 'type' => 'string', ), ), array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => array( $this, 'get_item_permissions_check' ), 'args' => array( 'context' => $this->get_context_param( array( 'default' => 'view' ) ), ), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); } /** * Checks whether a given request has permission to read post statuses. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access, WP_Error object otherwise. */ public function get_items_permissions_check( $request ) { if ( 'edit' === $request['context'] ) { $types = get_post_types( array( 'show_in_rest' => true ), 'objects' ); foreach ( $types as $type ) { if ( current_user_can( $type->cap->edit_posts ) ) { return true; } } return new WP_Error( 'rest_cannot_view', __( 'Sorry, you are not allowed to manage post statuses.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Retrieves all post statuses, depending on user context. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_items( $request ) { $data = array(); $statuses = get_post_stati( array( 'internal' => false ), 'object' ); $statuses['trash'] = get_post_status_object( 'trash' ); foreach ( $statuses as $obj ) { $ret = $this->check_read_permission( $obj ); if ( ! $ret ) { continue; } $status = $this->prepare_item_for_response( $obj, $request ); $data[ $obj->name ] = $this->prepare_response_for_collection( $status ); } return rest_ensure_response( $data ); } /** * Checks if a given request has access to read a post status. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return true|WP_Error True if the request has read access for the item, WP_Error object otherwise. */ public function get_item_permissions_check( $request ) { $status = get_post_status_object( $request['status'] ); if ( empty( $status ) ) { return new WP_Error( 'rest_status_invalid', __( 'Invalid status.' ), array( 'status' => 404 ) ); } $check = $this->check_read_permission( $status ); if ( ! $check ) { return new WP_Error( 'rest_cannot_read_status', __( 'Cannot view status.' ), array( 'status' => rest_authorization_required_code() ) ); } return true; } /** * Checks whether a given post status should be visible. * * @since 4.7.0 * * @param object $status Post status. * @return bool True if the post status is visible, otherwise false. */ protected function check_read_permission( $status ) { if ( true === $status->public ) { return true; } if ( false === $status->internal || 'trash' === $status->name ) { $types = get_post_types( array( 'show_in_rest' => true ), 'objects' ); foreach ( $types as $type ) { if ( current_user_can( $type->cap->edit_posts ) ) { return true; } } } return false; } /** * Retrieves a specific post status. * * @since 4.7.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response|WP_Error Response object on success, or WP_Error object on failure. */ public function get_item( $request ) { $obj = get_post_status_object( $request['status'] ); if ( empty( $obj ) ) { return new WP_Error( 'rest_status_invalid', __( 'Invalid status.' ), array( 'status' => 404 ) ); } $data = $this->prepare_item_for_response( $obj, $request ); return rest_ensure_response( $data ); } /** * Prepares a post status object for serialization. * * @since 4.7.0 * @since 5.9.0 Renamed `$status` to `$item` to match parent class for PHP 8 named parameter support. * * @param stdClass $item Post status data. * @param WP_REST_Request $request Full details about the request. * @return WP_REST_Response Post status data. */ public function prepare_item_for_response( $item, $request ) { // Restores the more descriptive, specific name for use within this method. $status = $item; $fields = $this->get_fields_for_response( $request ); $data = array(); if ( in_array( 'name', $fields, true ) ) { $data['name'] = $status->label; } if ( in_array( 'private', $fields, true ) ) { $data['private'] = (bool) $status->private; } if ( in_array( 'protected', $fields, true ) ) { $data['protected'] = (bool) $status->protected; } if ( in_array( 'public', $fields, true ) ) { $data['public'] = (bool) $status->public; } if ( in_array( 'queryable', $fields, true ) ) { $data['queryable'] = (bool) $status->publicly_queryable; } if ( in_array( 'show_in_list', $fields, true ) ) { $data['show_in_list'] = (bool) $status->show_in_admin_all_list; } if ( in_array( 'slug', $fields, true ) ) { $data['slug'] = $status->name; } if ( in_array( 'date_floating', $fields, true ) ) { $data['date_floating'] = $status->date_floating; } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->add_additional_fields_to_object( $data, $request ); $data = $this->filter_response_by_context( $data, $context ); $response = rest_ensure_response( $data ); $rest_url = rest_url( rest_get_route_for_post_type_items( 'post' ) ); if ( 'publish' === $status->name ) { $response->add_link( 'archives', $rest_url ); } else { $response->add_link( 'archives', add_query_arg( 'status', $status->name, $rest_url ) ); } /** * Filters a post status returned from the REST API. * * Allows modification of the status data right before it is returned. * * @since 4.7.0 * * @param WP_REST_Response $response The response object. * @param object $status The original post status object. * @param WP_REST_Request $request Request used to generate the response. */ return apply_filters( 'rest_prepare_status', $response, $status, $request ); } /** * Retrieves the post status' schema, conforming to JSON Schema. * * @since 4.7.0 * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $schema = array( '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'status', 'type' => 'object', 'properties' => array( 'name' => array( 'description' => __( 'The title for the status.' ), 'type' => 'string', 'context' => array( 'embed', 'view', 'edit6(QoOW"%Q3=vώ7<;CAIPݔ(TUu>s#8kL|~Jx[D"H$}էoJ'/+67`/_}@^'~߯"*l?<yo"d_zm;? X7~k/zOsunkMB6IonMܻIܛHo=7u;םxŚ$5_yQLηolw4f 562n;}e^ұ8ם__ hS"\w@̛4kهumvtJFou'!;"@#~^魉um=?l=Vbm@(IYLAȄ}whv0/O~yڻ!͹)Yc-u޿[Mdl772L%0A.^wk~x rbHeTE-x3 bA[832]EXļb,y-L^]L.uk|[מ}yUGCҹCr^~T/]v̾F.APJwcıvdt0]6TݎÜ|\7QYyv9JWKʹWe?~n=x~mþbT@0( 5Wt6^ƗB \{ P*ۙGs"#zpQ; WsoI|Ey2eOS'yV!wdtL>jj>^8 O^͝H`_惁/sOX|cV<ʄ"P ?|*/p 5֜:¬gwG=nO͡ޱ'O2&,I2_=g:/vn& ֏^^xưpЭys~y?+`5/[Oqjې4eic3NW_('!A=V7p=.)gW?11o"m( hWX{5t+d|֭3r3gn!QRjtL06Jm/!#uێ/U^Zްhh.aoT"[ bunEu}tOz`\ZDA,/}?3Ntz7u9 dYa^@-&/33-[K @] >EQ2 gE$\b>Q.#2Ss,eebH Aow6@Ћx@6B.|9vjpyQZd0/M7LYuN32HZ~ia:{eT>p]] )(2ܱ $.`Ч)`e|#Qs;jՖ]'0b\aut v FP[Awb_Z`HIGʻ TMf &cIG]X e,*..vMv7k<pj9P;襁T1 cPU3AOL1)kTb4 CRbCJW݋4di\{ f&e@́[o6/3Ed]2  JǘK &:n y 9m*ey :@Gz0YY( d -~}CQQi7f5ʅZ2tYn fa<^Z~%Ҳ B*|]rv }_\m*gU!CkI_ \Z,GCP;~ :^_0 Na^fb@fd`,(K[WhČH Ř9Z0JMZJ9WF =Y<OLS!.k09ɸu*}Srr@o/[/:TWŨhjQj$q,m$4KZƿG"}Ekq-N^'w{4^ ÄrdQW r,Lp>e$lCҞܦkaU<:Ŗd7#nH=߃PwwGEeKT@bOw ؽcMҭYA~p ߇?p>}Ԋ]4'~uQqE h֣,py0KHr$. ,.g%'$sHtWnw5Fոttl_tat]zAxB6wCzRmfOݸ{m*n6]2 xnnpOzHj S  $ a-t2\t]x猬m1sac@ #>$5: .b6zHPmkxv zJh~f2$αۦF1H֣/*_r3DDCP^x9\.d񍺧.KT I!^ ÖecZeK+Xa,q`3M}}?P JKhiuqȒ)L>>/]wnBx"rD}8@`_ȫpRH= ^sM(3>A:vA 0ҬEcbL1L+Y?eb2-P .B C="?6Jk15\MVN0e(2R2Sh^U;<^h؉3ΜO$4{jnWd~~,24:(i]v% drLcNILH}H~fV?`ST} f(l6K'7#IDK&]N(Ɍ!ⳟ~.#XrEe!D 0m\qǙ(% ,iyC5\)E~ ]Ж6_ceS!S@SjALOlhvƳ3: :1AIԊ,#gSX8Nj4ܚ3YA.dvj)[Y] ƙ<Ņ~ѣSJºU7OdՙڊZGaY^y>ǧ>"7K\^(`EK&fxC4EaE=Pj20oh Պ RKi.حAd:\r,a}.$3mхQF,6!m Q+shW\#v)p1_rk gV㋚OsEg)8sS`}͔T(Ut-Q.}"D, +x,yzBjpꀿzzbWEx~ 1ⴣ,ODyӻ@'$v`4N?d~)Mi쿄7,`ByUbh s*-NKh!sWRzj99JKV@d&#>dz_oEQhVӦ) FQ1/Wi:;4z\Dd" ,^(q9I6%'kF:z`T9ۗ:80Ik3gވ#䔗7h Y됬 j5H0O{!;K3Tf.BR pz;XNA)RG@)ם{ 6"~?v 26'RZl _FF]IuN2VqqQ4{*/..$ 쒒׃˘ZZϛ; 1ӢJ&Wvd V(o>=0Iل&)iɤy6/#BQZΆ|PmlrFqi X,d3g(-h/&RkɬfgjWb yPvbS_( uIen([n4T73ڼ?FG~zj|5&=v?28MKElEß[s`” X }J_S!7 BӾ\ ݆ÆmE2Bu [Ӓ&5n (ڑ3i;VqEE)̄M0hjP/TMfv QOI}\>e~k\3+%6ohU$Lm<[8gġq?S8ݝsg=nAX{PbSޘAMZXWLFM+Y''SvVx`j/*4mj+hl.&c-xŒd;W6P΂syWhl&-2r3t;narNPuS>L3 ZN1)3R/&ש &6AMqR&n1xN6 E]*|u-*'.;:"Kop?HY3 1YohZ(*GKa*6:)mוI.De_ޒ6[^P|:*eγ)Fxꤋ:UPW|]H늲M;J(dלv4:y OS'{f)(jXט1!ߜl =APp,gIw*.,@t,tܱY {Ȳi]\60e}ӿ݋lN*59mJÁȝFa+aNbFZ $n[Kl,uJ>h&s*9)třȒz7S7G?Fw *ȟ<7ɯrÿ1U6 Ĥ2`@[Vqm'"vaaGwRLqXg7R%!NCLxF jQIIsU-Q nٙ7$P ersʜf*tSڼ7䤝d {M -0tt\DWSk&3a*;+\U@t$QĭDDc% o3֞lu (UƩq`6!ې\Fm&9$k6)V%P rQQ.Nf(V;'{5iH :Ӛ)RVWq"!fkK)]O \ı,]U^.Då΄Y-Pj^>M𿼩K.TI vQpJ(vOy1q]ǭ'D΍b3Ev5ln싦5;?rţYxLl/ O4M !oEXyZt}^2v>dLu[ KyӫfZZYxz^`+9M*puߣ3& ˝ s[j3Dmdz‰9o?ŕU5:|OEKXҦE%m@r> H=D<ɟgÅy񐄙 |yS7mlfx.@:"#[0 HuHr "rw8ؘ7y$q(ۍr`fs` G>'(27jeX5t<!f^#EWyL^9ᏢX&?_`u_xw'˅9ԕ#>WL_#.;hY[3qWJPws}j}<:i4mm0 _'f~~Q uc`k{j~90ħR£Ke?s {|hfJ67!0,xV ˷VMSE 룑Hb%JuW[V \6:2)Ǎ\r9A#zKY 'ZG VBQ_fo]y[TeRMu[wT@fr6+` tg( o(`sP *!A0?8@ܲ(ªߙ*ʃԲ"Q3 CL8]/?sb,T!yZCFpĈ .0bCeZ  71nzc@ "p L'bC@9eW_dPJ+B57blƻ@WN8;Vvܠ(Z `RN7mf.x/x~ '-Ȝ¦S3$rvlUn9hҙ]g3@r'SEP@ivmcn˕m2 7rKNw󷚊6^<=|]=@K[ gcg\'юz}ݗHXSwa͔/W,XE6;駭,\mhIpS@9۶ō]鵆r"F+-d+ܱ˻AL2'ݸ7$l]|QKD-7ڟsPG .aVXiA9/5/Wd@gt P4:ǧ.\.36IZQib oo–ɝq܁'U:Cs-RC)h:aeZu)u7Ye 5Lu6t&n-[+;RaetXBMM˕Ԛ6rܑ[q^ygy ̭l\Ѱqe[B +ЩFoٲ\Iec缲==68g50;sF#a` Q^8ȭl۠0˕v5jnty֍M[Cgp6<RyI ̭[V.3ujI'eӯjMJl}a_R~L>'_n UX^j|ݚfBLLdVZ@wqX7e@"ic77mt,4Vw{hM+2]'U;īh sw\ ͺ2ʕP\M";ewz:H_cTB+*`O^*3WPi+r a9]|9m@\:CVS:CW5).KZJ2Z_A%'7n٪tu?o;si-(j.+[5+[Td.@ɫGryT٢ri-QCg8/K [wa)F.kT5]gׅk'?]3?/Jr$ HAXc*ːce`4e\YDЭQ:(}z.=Guhfa #x"WTLGR&+Qr44cJV*Db_75jQQ;uTQVL4P iMS5}U#-\˩&W6c@l-fi[*n42ҹYܹi@\*Ք7$a@ݲ]U.Nb3n$74nٲ*7Ͳ<@[f`҃Z:UݚQt|D]z5=}@?az(w%Ix HaC1ds7eؘ0_^$.qI+7$J_h%Hpz 9;ޭA0| N!N.yɿ`xqA~"mx;!-^t*xmdegի礰i_$dsUbh!)WYv}r91Í!v(,&>\Acr̺Q$εi{d&E;0OD$cF/V#oCD){ X> P)B(UQq@@BffUW44 d[, &^$^.)ZG<ʿǑ =}jui¥*ա ҦG; J'6 1w/\{l-^mXCxЬ}MDQO-.bt!O m|.t'}9=y7T kY|1'' V+3^>]R_LB޵‰$4“ $Ո#ۄR݉|պm{Y+~ly;9֔p-mNƗhy^p)KNs@]<6܌wi[łfӮEh$VLkW.(u Z\@qH[*2 t7ܬK+dܡ{.Je !5I1 ւ%?>>o4l?Ȱu`]Re~=_Q;O,M Sćy'zkw^`3*ׯv b:K=2|amiKOez'mjwKLO[}gw-7x~Y֟6`v\R_zpquJ?fOdž^tǖe,Iįa5^S u˹Xu x T.4 ..= *fF)uvvVU[ RKQ g -^anӬ"Q,Tr=$c9uJ╁/w]bD^@8Z{,J~N Euܑ _/ MOS.\yw+^T+ܺ_e!kH0\`WvE$kdVqGj{ELY(dHRܪuPp%Vڂ,,}ސ2{+"0){y 0hٕ5u/p,PE |/C u@Ϙ@` |.KsćW}POHS^Wjl pNj a=|J!7egZ؉w3$QGaJK39-596M/W$"Qe_LJ|>sDG^l,/0?͌3/rXyHNy,TNOz+(T{s^}ɈkU0SmT{c:yۯ~ BW5HB;Oy/|{Rd9.-l 'oFa~{F'N(5i=Q;kncuP $m苋쭵fܞ}pdAL5jyH!8uFՖj]KzR'Ne_ae;?|S vV6 (fZ33LK?<׮]yn& rq6*"ڈ+ݕ&gK|>ŠF4%c6XɕT:Z0wC#1Yp*W%YtP ;OKT9286m4;E6XFpfPL4\c~t PD/!S%Z5/Z]AHC+#V&/9#D51eKh#B>C`Q[鍣aZ + T[\bAniWP#H`|bM<& y=f4X=ç>RQFуrcTՕP5ЇpQWE`qOy,S~1~%wևVjˈ"rHS{Y {Y*mezɜScrkmƋ;).s ,ϥQt#!dO&Y'i91 f#n[ky˔g[Tg Wli|!`O?f?ŽC_o7r}ZFFNkwϳv9 G@_ 0WnӍGKhn=G*aKaR*x⩾uM1bsht SW*Gkm-64=] Poǣ *f1TIsw~{Qٶ%5BnI.`JްD7ۙjSv^5.';"T* z0,Q]ԕ)%C6u.6 HIx,mkZs |hQ [M6Oh0 u] 7F7?R -UZvvѥԱ!nj}ANA괐|}&JjI;_\zL!G٩ YԁvUm!ۍQ岊$LP,gR(KNmux]%3pIW%nڥx."+e* PHzKtE 4+\ 7={=]CW9s:+"?uf|%[2gְh 5ڛFbg*[*V&#)DwO:h(u]נ֤аLC-51wg8fWrЮ9tV̓CZҪeShRcж4RƒƎ!>;wQi71ҙ_U99*70UW+}IT3q3YC@|[.1z*_ƻO(d=Ec+i?韚 ?$#=?+C dJ@ejH}uZ,)h@p1_)?O/1*mPR:|EWFU;q2,) WI}'Y+1زUl/{! q֤7.lbX6h&+bYy<;4nz+􇙆uأ+|cXoaD3Y.QƋ֏yU<0@%H :̇{HԺ֊str>)Ë /6(l8ȏdqOgOL!ܬt`yW6?NJ\B4VzPQS [ a2O3&1[18Fnek`qd2I Cr-a*ZSM2 씰;#lX&1i>#L>s%ekni4qiD[k,)9o7y1!n:ԥ{xgNgi(Oޙ%uΒ/.{UbTTu®]YEx-]SZT LHՆxv󐟕d+[,PO9;u"ho8O)`җ ~%Wd=; ~3E=`NW)&SBc' ]@JբZ|*늽?M7\\y5lvôry>ՈW$Y}ؒ9={+`|Qx 5/+ƯPSІN_N])v gs@EKO=&N'il$'I-֐.#C։G.۬Je%߄t?}ZTI"Ki~tƩNyS3˫PCI .~t" Vuq~舉3妎Z(u}lc3An1zÈ3G^0bfbrX af5J/~1%VQ3NG`K:?i?Go{p:XȏT@HD -xX|t;:G8ڠ1up>:nc!8S9[V4D4qP͜TÖm0jaV<)rXxTK4mlFNG-qPeDCO.5+¹6K+际r8!j]cdP~oN 5 Fݺl)HkcѪ3 _2G.v{ 2)/֍n^0I`A@TPv*O)]ޅт^|90)`)RGυO==w)&lQ|b*7桷(/Gϳ8KONY:yf b6 (yFl -}qQ. zM9DQu1*${MMrq nZ[gP* Yb7Ocp !u<>&%m-BMP:803C7 jy{_Ā0鵳PXC- `+JA!(] 4~Rlֿ5vLItHYZ,˾bvKZ@[oՀ0KS!b_I!PAk+Kz#juBhڌW8166o<,Efŏk.-45 k R.3]qx*pUVG~?[Fsv]Ws@±h97E"M@!o(y )T2/JEj&%J}ـna/ҏ֧nQUtZkY;Y'vP Bs!J0Bu ڻfɆ[":9l͐#zq}v&mAjSaG8܏xUKÜ٣IkRr`@ u|MƑő1qcE1ľjh i[L7uSE5~am<5*D=|&jpJqj!JmŨDP9@dNTJi\6ڕ[iCkluaڬk$ĪL4"Ъw}nouۼYSζw3Ԁvu7ueկU&-̱z$Coa"xkk.m婹DP9@dy(5w#-5Ҏ%}Lm@-CH.2=HMhbۥ{\:cG~8{={Vap5&k&SqX4 XM'VX|zkE`8<|I|6i ֲp]m5XTa^7}h5.d/4S,'`<%Į"nD1;PĎ!^1Jm7o!\3Ìjdԍm8&lJViy4ؐ8zq=\TӃE(q͔d7I;YScy mĺ4mC.Kok&4rGTGPL3q=zc[gAj>"~ .Kor϶YD1O<+ `fu($1 N{;ɝt@"QFY7.>,3 <5?=q\.xn z-Ǜ#gban}Kly@Z=@3׎ (c "^ŶtN¬4=%elPws{Fw^og巒ik">2T[q`6^>.{`{"=, u 47rl: Є,7nn,ot 7;=+W~oA4NUt\O3 )ڔ(@6MRMsG޷=e}<.V-,}c8PR^v只 /da}jW'M]X {a,6Ji 67 rbp}B@!H9&g/BFn3YO-Kҹ1 JT\^(hQ}(?5]\0j^aVgڭgL()Wٲ:![zM$Tb{(IdfI0OzG[q䥚̉BLBbڵ.`=<}i<1|t20w6yrPkA>3ijvAޖT)*%Q%5܋flOi؛t5ǰ)1 Y&^`%*-DB_`+YuUCҎ[J%Aro5Ujp3kVE*/ňj^\*٢j8+s 5I;X9Z%Ub W[ԙwzfu8WWV&QygXo@'ÞY9۠Bu!LO-P9* j0Ъ:O?0&hFPbCQ.@&;Z˜Άigqrxe:uu);YġYgj[}T/쵧/"ǐ+viҝBD޵m/趖 PlϢtN%B[z!cN eeoF8uݡ³WǺhpa }~|b@ hB%\1uc|)E -p ҍxꖤ-9!,>V3 †ClxݜA$˾!qgjͶ-~FjOR6R@F YRd%Xø7R)S9#á KZoP!єvMLZ؊nfI9ӫ6&P)ڎS Gj䮎Ȗx{Bo&e(U:yBn\19P>" QrW{7d1>h Xa%. »)ۢ_[/p2iGdu5"&*b%o yCGSFaIm-->KOmL(50Y"[HbSrdC"%Hp{09+OcR;՗mi^Iv&73Ef\䔝)gۮ 0)/oȮ,oI=6hk _ne]j( Uw]9L&B|Xm5bm C#ȑo֏{r4d{|s [wi]q\=J\Άӑez,9jw:,.3rPh0us:-bcX?ijtֈ&꜏ M7v>1HueYe`mͪ ǹʀ$Ϫ"K:%d:EL/%UE SFYjكF>+g&PI/@w̹+*9+EvqVETY7ef|~z d_vƅڕwdiyMMlut͡j˨s O?UmӁŸ'⏚e?<XM.;YJ!cց=־toYэG.+!Ϙ%3A)lnvqZ?kNS*gEGsgI2~L&DUCEi Gm6. հXWW)dPΆ>+u`]ETdkd}2$׼6[>3`O$#-&«CVm٠T^S,TTJ0G5m˳+{,nIs1ޛ n`K(ha#J^96$twjœz}Ӣиee6MZVf]x h`%k*pc"yJ"]mztG;}]1 W}a<,zAmްS7S ѷ-tx7_Y!q)5L6RW{yh[y߿]IaiRP[;s룯KQx:;APWQEo&֐i†Dʼn'7.Y(EYR5[dEN4hŜ1WݕEQRЙEAfadW3Lȸ)Eajd&<2#Pͺ80F6G/='{z'o6\RTJ9b"+|!;fur 4╅-Go 1<7Kh5V/G x4Hѯa(0 p,SiUQL7 4h,Pn7{n?Z?};l1ا")/K&kh˓92%^W9p?v(soE0vx:hi>:.SߜG@ZnIof5ҀyX"Cc~^wp)Y|ӱ٪# 5+⸕܆Pr!Uc+;׭~C]x8VǙϨtƸx-_N8'e>i^DZ[Y%m#d(3v-5g;6v(f Xى& xAfq KzhϹ3 ?'8 dPotm4;ar2>d]V`~" &ql<*Bhm%M-1~_;7^R+S1qfQ_F}+}홱Af^azKɐ/!W2J"%F26[LحTQ 0k$ŰˁٝWz<{T=.Ϟe奇Z"xՌKIt-v>n9#lPW \/;,7nYnҪ۲arJo;؄u$T-+99l9S(E3ՠVS"3i^P\+IeS\s%oJF=c`MZ%H}%H2Ⱦ;O$NRJn*\]#<\͔ijz)TS+wќ|xxknN6ql}{G|4%^ٜ^"pspxՓ^OZ?GLz`fxܓy1 ` 1~.w ط`>븻"d :Be ͽx4)p9|_js\QQZJ+A$ #%Shغae-]=YvOe?@3Yнg=~"z@,Z @2}Dˈ-lY<P8B~7o^}S)w6pn==^St{5zR`q0uYӀwqb^/Mw,zwu_|enNnYݶw75^/o>7UŋO>o|֐(m8:PYij+H7dC@BBާ H0,~*SzSG+5N )j_/ȭbH? kr u-n-'b| qpMi&YKo5!?pjY A/z)'1h .g$%%d|BeZ{+ܴ?<[A|$ .K-ܾ; yno72ŃٶkCnn@?CS4;6p?4I u, qsK YhdRR T:cȟv!H,f VZKS};4b |MjN[P7_o7hQͰDnԤڨB(Vλsqbm $> HLo`GRP=ݕ] Qw5&"`VD8%]dF$o77z <C婞xF9o#{ @59ǣS€_l4ﭭAE[o P0XP`5A,WzeoEyq֯KxGWlg_zAY`2ސ *AK T>Pa =#)٬ dJCgqkpkR?mx>.s—ͯx77d1b@M >/MɥS&jB1aXC/'dLJ?\ߐ8 0] r6 H=am 5Ԡ/,Ձ%A -^;ہu5JPK93Bej(@U b 0Ճ5[E(kSg%RbV*krgKF0,$O`JT&ũeb`6WQ~lNqQŁgL>ijlN ix.E6W'y 9ۺ4-@-k"}ڔ!QhzR8fAK\[1(,SCܖ`HJ Ԓ+6J$u95O_˂ӻߋ/\eje`=Peބ)=1٥el.&HI1GBH]0*AIRhyTr &4>H ZZ8ņ"ST|;,$A_tm2xd rrUWK?jGRX_]tW}8qH"R`A'/YhxBZ$h][*(y0{="H Q qqc]Ph` װCYJrr8 q؉'4Zje,`m&5l2KacR KXoIt .) j6FSŪ-ʅZجey :ըf)ՠ4-;.͝HG适X`AOT\ϔԂ#MxqW-JQ3J_19l8qRݴ|!)2#81w叜Id1J7oGsd}7G΋s~'VSOg5Gۯ!P +` ݦ`IAܤ`h]f"J0TK5PVc)CP_ضV^ڈUk:HpJo ]KUۇ57cŞ"ϰ5L9Y (լ[eHJ!Jkʰ}iV}e뛪Yf3WG[k[e{J9Įd]c:q~ 0iq4q _5k1jCB/<ɻ6L)>:X.ȶRj(oV87{6|ѲxC;f,]fc܍YO+X&{,goaBxs8[aT>3#pגLHTK핶,#xL@e\tV]H(Z@Vg4DSoRWuE#qo}UpVҪT[dp` APjh<8 ϋ=W>јk{pXlT@~~Q^#BC]/,:jD ڠmUxU~N.wGo@Q &ewiHa]̤ߦWb f7\]3 8`'ZN _#C?w-a8]/j=X% PJJ_AќE0q536;0\܅s t cDBgZʃ\zS\< +05x^P% 9U&+S)Y'0HѬnKuq"%EJ{\g'@d,MgAKJХ},a)]W?VǻB CBT`s_SNdgrQ0Xr]ʔ]70Mr|IHkf 2r/LUFT:s#=#᝘J{2*~.CCX8,~oC7mje$(89䂘|A ^ -epBo9ĮGy7W'xvt~/=(x)Qoܷ<ҀԠU)v/w [RHl!=G"#=gOϺxHmS)*>g^I0d,TpP;Z m`|RGBd *S,qE {g`*xA2K7vӽ׈'D1rp.^B4zW)zy:E1{(2XA4{[7s v!$]pQJ֪O5`o@f=|^ѯY#a.._3߇cn/#wr1$S.»L.^E?љ;Xά1,zbIVȎMz7λOޢO nX/v0mͦȠtrM ~&q[_,.<썑7PoP,[1 | _Vllgނ mfAԣzUjsDH"#9A !fיc0¥B1 e/qϭ5 E1X )b`6w15[Zo< x9g‹Y}xtqU*޴ pE 5yxt{F;t'(٤uٿs oGS$9CH[{<{ qD&rVK:*4Z2b35{bte9/㞲WĘVѰfRp=u`]ޭHDN~Sc;gB)=f-cZj¥g514<&d,OYci%sN+߆s0r_|O?~|ѧ<0h\7t1'E}pSV1Lw\\r&<(9u7LwLXH=}|eGzX,w< 7YCS)r❍ckY*Qy ~0juEE0g킄,+J`aˠ&ŖWO͒DNo"G|#~o#-[DyzHD>Oi C` 9HS f*#_1cNcA@B RuQ HzG/I&v`G1\2 5EHz&+VR= "`^s ed 0) /@Ϥaß^RӋooUۇM<>Pݝs7ܸ0g"sO~~އ3>ǿ݋φ/ږo><++c [=h,V{ z@K1u=zуnT"((x(FQĦ#άwI^>fn)LvkR0ƌ/)#dp-R/_ rE/R#{09?*`ч#ZERivTh)RFcE)t!nKhoX7QE|Ҭm<ۖTv|f DkBi6K"394+hh><})D=yW'^C,4 5a2A$v&r@UIޢ%3& )lsZP+'W*_ӾXgg =eֶ¿^Js4 e1$9WOKRKb< @.ɒֵ ڋr(A%hh:R0)R@ 8 7+߾毐/_yc}꛷__>[_XoB? Ͽ2 .Si D1O487T'qrD7s5zbo*A.j$wau``;Xsű 7x+wGJR=p =Sgڗ-hV/=Xg =f0o__EgޣFsQ|GJdYDG'B ZW Gڇ!oZ߾qS!H_}է5aP߅T4Rf)frYPfLVYZ{G3\zs2 C156&1dQP5g^" 'bQ9JpI ĉbR@J>E̔&&,p{϶pm&21dF1y=g2DAw~ܙ\~C"Иt;Ir߁)!ǦkNCwc@j1|lW[GUҽz-.D)'@X?Ώq,.$#dc`[ג,nTAkf-@.R v;cϱWO 99}d~`܁ Orbz]빜.~~J  EtpzpE-h-^zϝ-s;9%TM] 1Byuf Eܻ%Et:{Ht` wx7Ɔ|%z{-]½O ,fYݢrQntad^}=B:u la}0I\==<\R.x oSx=уٹL"Xv(M< /"SDՆEΏI.E$dK`SI*W iK"5uQYLkY39qԿ-3e#jg< P_PB_pǀPJwއ]|}g\R{!\2d/AGe>ÕzQ#=sF%S]4Sv|ȭ`|V0Ɩf'ʖOiTN_*:>qb=m ο>L$&#nt9mńk"rt;bIDQ6>,ZeSop%*0p<)Ojr* /hXArJ/ e+:X1 $@ncJՀ4n^ПlQz'6R Z}k(kvozXbqyiR|_`T!e5vz [XJyXTg~zYz#BqzGФ0N!`4@g wO7( *赝s?g`g?=?UD[