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(;^kGw'"%QV=8Irbg&^ZSBRY!q<ɭ@ OQgn, BP(ዯ_W:ܸ=?kmo;dIJ? {<<\g^[duY.z?׵'܍'1ަwӗ6$۰s76 @}i-פ/z?=,ۀfם`;ن\[~@woO;Z@_ 5:2n;Կ{6;+t.hWľ!mOh]Xz-qحw@ɨCɺ6|b{(1\B/]+6D֞<l=Vbm맾iܨ[CWz+u-|P=￱|k\׫v:??$a⃮}{pu NB 6}C\ap-4vb?Qy/ۮ\gJ;39F4\ /&@eLf5)+Vifɳ?vZD.t6/pk}YAyvkN SӵH# A~'z@X7E?х9X-qI+"U~Avmֳ5>-O`0=׹m̦ȠxraM.~xg l"֦1z۾7FRBE ֖ݘ9 K{o{ l#1aӋ*b;h2$u4'w6>\7d6BmBIޅcCi6 DjӘ'|$> ,t[)`4eɌ=d`=c_P[9!=ܭֻCk><&xX .`y0`|b[`*x` tO nNF:zyf+|l3]$LZY& O/Hx4SNz`z.@(٤5_-]gp= @_%!+W`dbg4fkǶjgٸX"Z \b-]h$P)e3:**4Zbht*ڇ &+j79xC5$E,=Q4/:  ݭOΨr;htjb΀g-Au໸$>X W<{X !(ӊ8i Yp.U6Rp.R 9ln~^&ac}<+f}$ɲV@|.ÑU ]V\% hw# )Š3!wGC[$Pc-|=ޣ(j q}ө4U\-P1J^Gʴ`š23S˸~FЛ5e4 LQ)K&# L5XN]k)' H_/-wyfL&d}uGc8ϔz$2$<*^ks9t1VxЭ)WG>?uK3li!XGy:Qn[|̓O=朖-2$(N|TIŧsN˖v(N|TIŧsN˖v(N|TIŧsN˖v(N|TIŧsN˖v(8P->'z9-[eH">GtBݶLO*>sZːD|GGm5WG} `Y1:c/p7ІI>gm mY1:c/puІI>Ga mY1:c/pІ2?5WG} N0=)[c~uǐ_i 'e~{k̯ $UN:2WYg ܿCcp1H.#ʸArgc5#LzTbwH:d5j#%nmh9ۼ;ȑr'* )D;9pbW `U+@- JZ\ [TG]+$*tT 3Dʜ8pi_pYwyoH(wy5#8sD\YѻJdǶm`6m$voI?2~svDoMC3Fo;~!OB& Q$YeML1tÿ~u\JC4D|H+[B̝pŜe9` W fPB3I:VBiYrTHx CkP@lHOvBO;FVy@;=˵ڀR/˚`{y}g1Kl_? r)x _HP䐕UiHb u}Y/g})04;Z1e@PULO!% -<F\1)L@ӊ3 6 H?>+[+gQ,M>ZJ3h0?^+Uv>|$*'xގle t]ZZ-ZYͬZkveq^-ҊKb&ʠꠣꠓ8?95^`n ĒtQ>;Ő ]*-_ +."2["()AÖiJШ%2x4n MZ"(A ӾMnS|TDg {Rn?)hԙ{_,d909Ec\Cpq1%1TQjk`meh uGCh:;r^ R3@>{3efW{ {2P Me!&LEsas逹xxyG!8tԗCz *YJu&||^I9DChDzҢ*L iiS񝕦}-Rk+!Cɥu S''fD$io?+xq6,as%xY!{W$(RտR`SzFjgMuݟzACt4=>ɻ!^3>b<іPv EO?COϯ>Fr:Ynm\7R|R.TNeUC0%t AlהP2CYruql,6ttv|S6'pf~ /Lζm|oC%8\Nzfv)g we\Z`{3wܡ;wx(93Yi yNPw~zXώʎ6zʦ[>gCr8aP)l#MKQp^J^Ky'/f=AFw 7KP*Jat9%0_b3۹X^@1sM8Z;?!nlDzޞ֊O,^s3*ʃ\Xx@FB%kj@JEM3'l-43kM#w9 'W΢}F~fN^`=?F-c&dQ.rx OI1,OƣL{S a,*| : *DhhTZ "._ڭ@وT%Y7T.!W,CVjbnR[s)nŒ0 4awoWO"Jȫy U ^TJ=)~[hYD"T= =ge'ɳCbg JK*,Bm cX?=rB 3<-}{bcQx%{_0"Kv]\$`Q ə"xq~(68yk`F(ԝ_*km{삅k) +i8ZMCf64խcE&iZܖ9La bznw\f9 +)^Ԅe;wZ9G~;ɧꆾE`ÍW *ṔT[߻ ,|~[k5k|Iӽg}P3U9 8 jx/Zր,mǓB|zۛ7ƨ@39~Mqjs>Af9A'Q>)Ct|Bb5-1n YK`/YXy-F<\zGm:0f攛FSYW؃Í#H㾴פ)uZtF>P\hZn}6pyaSwVv@ /W=#;JRgPbq[1>sI8"1,|(gv6 ;1O>k9-.jk// bS\~PԼr}ZVYNd?]R)߉mQ4DU:Y 'u.:(yTir:*4o51;k 2A;B U69Ik`Zeͮ@X߬9s<]q|aNogs4KRûCRA_!Fȋ:c_iYi im}mf81R!ax݌`D }oАNQ!}.ײG>GCVB#)ӧTjiHg]2 & ߘ2i}n!55ČTC|#/-V+(qQ;Ov]vi|C3D(ЬTf]Ŏxp&If J'sJnݩ _sХ_dЇK,FZkC]@gؕO8)m o'+݃|uC g=?A'_ F-맠sj=n\or oئ'/[vt9{*gjgڨ7,꣙6JL2 L,n0/Igeo0I1iYfyo` Z,4n F8~5rDm]n[t +D ! , ar׬Tk >Y.МT7>![XŸz ߷ӴLO=X-p UI%Qp ,&kZ }2<1'ٛT,iB=.Lqٟv~i y@ rd sl nB <ZD>БPXs\OTs;e52{:\#F帬ad~g0)buQt&fg@hĤbрϠѴ{Q>`p02hDR1aQPR45quGcZX~wbVP{aw00&^^.\IPSeUS-IhIST Bߓ AYEyt(kTb0 CT6ː:U2?7Y^ 2 B = El`L>D`#3+ٟi}c4a2  ޏ1.I @.dh  S-=6 ?id 3݋Qi~z(4wIͪ5C\\2tiѯn fa;w,UI)=h8;@CL;:8Ԡ?E֢0ϡFEl!hυʖ쐛&i 4BZNCcT8F+LqcFB@+sSv99Jv![91.ay g>wDlp#Ui ^15[]ܔWG:%3<~ uVmu5VDx\JLw4l+5v |̕t'0/F3hX߻ @</LiѮ/] ](`6aw=tCsu1/ u`-|q,OEs.LݟA76.U`gm, 7`]7 $'gDC}1w7o-UyIV@~XpgT,ݼ,n-y_̬{91 t)\0NkCkz.,?D)#>ds6k69D{?0}]Fp1.t9CDgYK\ҵJx]wkF%r 7Կ #@v_`P@nv%e^ A'z ܧ\{q?akl AR_t/%xص<mZn䜵^~_8 KQpήT$F*r5D5r'恇cXÕ*B*C*ڀeSg KUXa,a 7U/^A:!.- g@.Q__u7֣GRvUt.@i"u|z{@$FcM/&<iRLz1jvamKY 4JZd v4 {LD t rMEvlBkFk&x4D}OS|2Rvwiւg'jn-d~}x^p)jлG'+` q߉Ov`1oaH;Phfu ^9h/xB1<"O ߨ!.>(=KD$c^C*pKdDeK="`+ ,x=)]YְziZ욺cЋ|[2|O5+y>ba/Cb٪1'Gyf:=w 'f d:655@!b0S%S+VR=\oZ0x=K9_hr":$+-j-g+1CcbE!.Un\[<̤O,4cbHA? 9d(DN49IN$_٢_xBMP`-XgP^Z -LK)h!KcuPZH\G7|f2C U8Tq1r ɌXcF1Yp+.z$K崻J =CX2Q0ke$XYTF&HوH8ҽ7$R 9!IAUkaR940 *EC^i-iI pZ{X9{SQq)PH13=Qэ5ķɭ!{ɡK mƖejD^9A-:룅7jO`]cax)C.h-ug͝ʆjQ{%VV>.}`U{c;cva ,R^zK&"nP%w:$dZZnì`۶azvFaA{9yД'5 IcboȂB}|=NIfj#<Ӫ|TR T /WB7KEclEß[qw\`œ h%UzO fق GzЭoքքՄׄV$#XS-i4{ۑSv,㊊H| 7p,/ o戽diy?Ih>MJ;}nŴٷL3+&6ohU$=tMujSzCݔ;pfw=9(T%|gȝ;ۆkvh%^| # Me:/[ǰfEǫR,?9\@ Μ % 3^ E ?n5VEMJ$F$qdV \K]ŧƧhlc|r ws8;5[0s 9_ܰf”%`:^nj&znd!Am} z7j lӬ%Yx{2>NZUHÎX"s0u@QTnB&֦%B-g@|[|1։Ww%yvisZhC .>!3BPWCa"AvK'Cc)Ts*9S I:o 4n`\Un u~"k;NLa0<튓mXmC`p *|I=4>K%$ȁ8mjX2\B_I7>Q vQ DnxˤV;S ~oQ>LnʧsijAˈ׿0%F$uJCyV%%8X?&n1xN4 E]* *>"ˮ9?|op?>r % gIWcX+xL7\Gm Z c!LEG;~lKTKD mPs{BL;OĬa^IsUPWrd] 늢M;J($לCJܴ֟kH?:!hb[~8R=NM Wk>NiRP]PUoXp}HfU#UهcI!7}w7pz8>fbNTfU'ه^$87Q*Z|*jbbbbvlKYΩMJC 2c;B1!$bI9!Cs$W _.i9nY}ά۩_85asF_' Jؕ\-LkYFk/jhnxۼLBJ4ܥW{̉[ S=zH=p^uYZ'\յf2ǒ7VhB6:7UƑOѝ 'iB`#y6`-iyf)0-[8WVevanG{wBLqXg7b%UڻcN^A}'N:oZimqN #B_*zMQS`)^+]rNpކr͌0L 4CqsOȞZSa2i&cgPt n2THPYyq !DŒjO22:/"(5ōsCxQ7!tL 4dޔ'YF(,H|wQp0C@5i~>բNLCWUHX@DX8"iu%d֤ڼT5u`ϺeŹtes]pZ,(]gG5y6Pw꧄b ~zO\l*)H߸qVZ{&?O~sLEHv5tn59?rţYxL4 !kefD29ܴ52v>$TuLy.Hd:4LOU+3 A 4]%3%k 镾?X}#I]1~8>b"UI癞G+UOG?R"SOqҨ[oWc,ЏF5?_oe@y?s͝uO3O\({t) O̕Xnx-N#Ok5گ^ _or**_@J*_pjЩ]we Ŭ32?(NP˅)Sn[JIuPh$Eƕ7EU$YoAyD/("PɡY\ 0Xn0Jҿavb 8@ (dE yZΔy\UenI9'E|焟dBQ*,d!#R;bUJPAY*ʆOA͂mk(J Q "pB'k|C@:eW> 0Vojw3i:rv<ϛ ܚ)_8bt7bZO{W:۶]qZC!hW:).w.0~8Ee8}`ƕ/*"~kmuDoA(s~n$c[a!M 0z4=K=^Woj !+:˃{֡W6ؠh uλ[ۯRm <-w3ǵ2o,} Z6Cq 9ua\r,T*H(iœǏӉŠj -N]E*a&a <GU#A1]X8WB/pY54sކ-ʔ"s>\M&drQ*oتL4qԪR4>EY.=DZ [)Y[ѨEf>ʔG Ká1;`ʔݬJo+=dmܢޠ b3+ )YEuMxsM5iЬTbOZz=N_ss"xrm`BRWbd6C+itJ*|EU;*\39ǐnK(K% HQXgdteȱ 2#2.-^o֣{NmO[z^&fZ'IS\EfF1 1MJ9V0AɗVW1xzu QؗM:ZW{|GU7U3f57Tx3/̚'S(4oį}U#-\ɩ.ZND5&mR5ǦJ*Piels3ssSP )Rf~us|*sqF,=̯OpsUnN-+ss936m2ۦƴ]V0xPV}_aMżYXOaÆFTwd=E"pjT=VfH:@8;@JyN+f#bZmUU5lb1,01qÊYai):2~Syo9H(ƫr۔GqѾ1620{>K =xc םλ⋩ U=<R'+2*^h-k:5xvD-Zw|?5蒪?ѹ"Y̅d7 *ѕiQDc_ &%yw;ZT}j .GO7;1ucǶ]Rd m04?}*aFX#Rt2kktfBn'C|qD4,X5) DT,i[i~$tߐ{OSb-{?$ac!1S:*[-Pg!|_yAZIȁY1t\~T4w96{8JQ̷JM=,O)0FA ~Ց'2I%BߘǚcGҎ#ȲMJ|'6.đ# wμ`!){ҙ$vzt5̐"A FB !bgg~HvsHMH\ Ǖ(fL"/ؐԺ0EՎLժ^hO4RU̓ae;@Qr>slK|;+t;_Z31Sy@UK? <[Lqn& 2q2J"ڈ+&~N3FF4c6pɕP;Z0wC#1ك)9^dҥC3xZv ~f5mP"W"K˨܄ʚI 4J8HH2"0]¬UREۻ8"bhE%HQiM̬AJGr6F!!ZR0ͬҍa +!l-bAniWP#~`|bM<S󛄩e'I*j4X='.)#AYJsKXEJ\pRݯ^[x}Oy&-gS~0~wIVj)K"rS{QY }(,*L7R"=TgΩ0zklƋ;)!/3ϥQW{StԏA' Hdb*u7i'^KeHO(oloUTTu/dw6\(,9RFo[NVW4zh΀ZeON[1eʲ@~[ 4P/5EP~}noYu<盿Mq߄;w'p>\ޜ&S( &pۀnI[#6&!{s=noa#sm7 Xx-@NLNG^( (WX6UJK}n/J$J9-L>(Vf#Am«Zy$N/q1)娊^̼ TWrq~49luY\gHx,lk;"PUG0T@^uCQI}3| %+g\U[چǬ" >-1|~oHqOj燗f }w?WA|4>?C_'ETsF[@s󆧙RSQ|zOԏ[%V(,_ѕQ4g8s3}XWGKI}Ghڧ 1a%պݬ׳-ؐ߸`_:K `ߢoaO'!z䩝-5?k_@M^AiO5.CE}cЬ g>}/yvٷɍȇr،B ֫%^kr;?Kn =nI]5lZ?조߳ qZw]*?әהkHt~_G:} :w]*s|$as~t(%i/9Z`Cd㉥qSdOQP"Z:2I6RՅ'2"ˆ="{go/HT.HdGRU]X_ti,gs[#|'Fzc(`ҥQyzZ v(u'Ph8;xrM '5EDJF+hreHt3 ^P6 Jvd(;aa v ߘo[?υ#QDr@KT2zG9Q:)#SFȸxD&LeޑJ)J5Z=ډEC ,*a,lRSR%e$^xJoQ9xW9H'֪ŪbOBCsQ$j\kɹ}:XkVaY3Z:7=k/2;ÌJYlsltBY=-L1lV 5xcV~ a!SF6FBe?&<M[:8w5LbEXK@8dVՀ|E:A2gd6&gpgߪ(~d1R3V샘2U12 KGIY%q߲}S@4#˵oAԆxv󐟥dK,UpH~Rfo\g: e9Ο:xP|s0 e} *پ14΂9bPr *d hĒ JAu4qȽ /Fҙos,}ƲX,;L+VSI-ݘSާ9oRdF4}6a:M_N]1fsg)pمVECg3h6Ǔ MYkȳU )BkȷHp^Xd Z$ڳ_.8T5jjf*$P9ED!xxT-EBFꈴOWW](&9Zbd &+c90j89d] J2M!\`ZC5Uڽ}}12#ܮYFG8UQ& FHp>P*md#G [!#586lY%ԿR3FrH܈A}lh>Q_kR ̆K 1[fKZK)h2+UD\21=<20t,W$\tkZe9;JjV٭2 * `GE^h}1AʴҦ6fCuVH vK>R v,*wzo-q1WoQ$G&itB3 y-6)=oCe5t6Ctθ=ӡUarrD F8>p\|P,8 +`䶉8}vߑ}zF= qܯKnS7Ӳo6Si 4OEjE7d/܄mq`R垜0^H-T:hAtSld}cSݏPK,% uѴ#(/8Motcdv)fgqcLJFNtIZ`[1y^/F( r1uc9,/_,(ضɐ$?:Am^V4tщ~;TB¸ޖAYzlTzxt@Ϝx<5E c]x>Z+c}-@F匹'쀗x3A4M3Jα4mfK9X]1˨CI!痉zdyۀ_M` 0xM< ~7f(l+/C fpgj#Tk̮*(u*ÌZx0,o+ YbclkXn@Z+6l'WW(j)ƕFۇŨ A> vLaq_l0S5ؤ+W 6>+2泴XYXX}"*|PV+2[oeBEJZrV\uJ|5J][]Z+eQ*w@=WflEssss.lCы&3l&Wt`f2 'uu/4gWe}9 !p4I?IZ΄X~W+_]>) ;$yʿ!R !pj(9ZB'>:'62"7jN<2M^WW5u=T6НMb*:ڧ^1j&m02ڍWi*+Lz^SU\#YTA X` K#A)$Mp%M(E>Q3ɮbj)2Q/ud_kkTR[WUu\U,&^+<SYՔFSSHHS8J0 Q-,-*kb )t qշ"&ߡmpW{J>f=2܊(&pkۮʩ7mj!O]8nXȑ;*N#9~3]7ZǨalg{ 6M~q~cXjt<mNZ͐=GGR>9-zEEKCPhq<N!-)ľldQsxz-5E*S j?fe+hsk>GOQ8 k85bT_s!2NJ Wyy'pTQm%T[.tVWYJU!XY5oi:8mVUՒZbU_&AmhͻQ7ݭf U)VeۻBAmW2ǪWݨhX570*^n̦T_s!2NJK~<`f͵<B#-/)qۀJVK.vem uܶ] S ީ ܩ[1qL`=(jXu'F4X5XxkD`8<~$G v;Bݞ@, rB\LM3=hLyiZ۔x2{ 9=UUjm^6Za͍K,x`aĞ;[к/6 :b WJaAۃ6ŋ&]1Ʃo["\B]wN6g: 5G$'[/t$ڲ;Yb]< ԮO\Y`HZ+.R~j٭TɴSrE8 Dm2?,"=ZC.b`1\ fqmkHݖ:cgNX*J%A-pUt VڱmMY:xk-sA t3qOG;j~pjzC5w)kɮ`tTK./,X=j= C~-nMyw*/b\7A1[pqTh,5;J:Se#zmoOѹQFVԼ"%]P\Sòu,ҎZ2靆}Rs&o-Vb7՘MV w/Ъp{._1FĆ(c.Y]>c&$JH/5u_aL9u3no]eb}r|`Dn{nl봢v-}cIxdsl/6Rf*FtPJ S'lV[y˽%_ t.(/R)Uxͫn2PqԪJkU FuDdH_e SeQk ZO:rBͯ oQӭ1LHs߀N =3vnBgJKʂ(Ô {HV///ջ ]ai#a(@1xRd"(>@&;P cf:Ʀ Ĺ Fr0㡤GsDR A_7G8ͧ +Ssgi0շJŽ!uE6UN5}\DZD4T潙ϗu#=ҖVꐱIFqc#BYڛ#4.;TFxX*/rȎoV6PC6FPɠDh7SLD_ {lG!8 ]jIj8ܒ S޿ʍ[ ˈN/yozMB[tS%g56e4 jK O%h0#*#`g:"Gu^g>Kb]J%q1D; ]l@ CvJ\1/h+RUb*FEU-%#ON[B|_+ F1[+(0X7i󱝠 ct~1=tze v!Kw󝳜m` 89h!ut1W67~>I%\NaN 4X4ƅ8ZQζZVzx#gA_8F}^SI)8'I.`HgnDkpJI9!04OڲS>YY>B x,1؄kGN 8f{o!e8t N׿U&S_^\ 3r|NUo2ѥ 9p U;fqv9H&C@6븻.#lY=Aqs8Wl8Q{dOrsHܨIZJ+f! @|K1"P2PX,kڡcd}}3 ?,գu|e;qL$ ߯hMnB9[&@XWoGs;הOm=.Ϙ ^E5)Yz1G0X{ bv.Wev2/>AAVv37B}oUx^n<ԇ懡i7_HpݡOR"64?D&%,ֽrN @P[%1NE$4&K֬L\20P/Y欆z(˭۸r8RM+'[Pt2L'jQy+uՋkO*)"=P2?28,-m8Kj̪{iOƗc@#A1XwUWR\)OkXb2 |aGACE"WÌe- dC/@483l=5YwG9%E7lfkjew0W5~0ln;&jXY`=c+"g* ]y^.2B 4/mhs$YґD z gD Dwn#C纷EzG0d;t{ xԀE~K<ôO:UfR1 ϜM垯V3* no >O>|Lo@EwwwݐfGҟOSm^N>\8k.81e8뎉Lk<rwp`Ad73˒gO`q+)טsC{BG%ϴguqft]gP…-gZH0bL_82QF Aڸ ;qF_G:ba= YuNuUPwV~:aZ%Wj9(yRT4 A&"XflD-GyvL2zmm)twJ̧`a6%w :^.L)ڃ! jp[o=LUna"Og4{W$\aA-P;__zelA^9 Of(CEj8 f~Onwޤ  -"pDdh>r} MZ |>M%CLh%SUr1~|u !JqZ[)u+siP>BԷ%A_`L?{6#AsC]c=V ayD8!v`uE4Qr]c|UH !o'q'^+Z40@o|k0t&BO[VgKКhڍiDk. ehoq};hFMfm` {q㭐Uvi0RKx6;t7P3|KhKV.F |hK\k*` u|olB~Kf=DL\NCa@iOÿ` q, L@pvQ?UuOiTНp [!SLl2\NbzQ13,ٳxȵ2'VDfF\f>|_/'MI n䯜!DTP-?R砧sr\W NFˋ&Zldzijчň |)i}^he"*4\߂9lWj@h4Qm`|;^ *wn}` "J1cȆˋoy`R'L0`35Q\S"P4:{ _03;2q [X 8%``q^ߣ&4IR4u:&M4N*TSR%,@eKtZĔ?]_&Iɢ~Zu')BW38a5cf̫iq_[,y⧮h4WI|S[uVNJ;L/cA? =#?0 A5&U#K-9:gR]9t,-t62hdB#~+PiQK o߼ .8V4AWc5lQ_ 1K4fQaS^ -^ߣ8V#͛+)Rd7uS2F~?oS.l+g~{!Iz'?IX__FDt B}ə߼~Kko_՗z%Z> HϨIb_|:5k L;$[s903(f`"oyHjka*=Kb7~ l h ;v~d*΄2Kf[2Z2_ǒ:#d6kIc -{7Zb+-^[&)&j8tGZ wNJ8ȾNu`JP"P<ȳCGՊ}YLb,9wa]R#erxMq2som{;/ ? xBD/$q1{ biLϷmd7)FOn-wL 5[S84!߭/o;P7Ds-a;k7k6nw.ʣGm1( @Y2VhhۚNl JaH}cX7b#k gSm{BslH =6OpZpsyWĠ`M"A7#}> z:YKb[cʶmHyțbp`S5RQ6ON= q:n۽֔|mzt{i8iN[ DIRZRI0fP?532;a m/^//y;&l+<~`'i]O㓭W2ǵ_n V8`|L5aېG1|5K<"NK'#@/оNv] }L=hY- y¢;54JyM9{p2gmM*1oƢfi_m]I' dGR@iw_ɱ@|" 1x`wꃁ" w!aLNς?s ?V)#0we x~Hj8`8{`G<ڧi*v35f|~3B7)A1H@R^GEԔ11J KݳiLM(͈B'ͺʉ1vcj:N3aI;NrXcJgv@ceŬ="S;ɕ)vGiٻOOggwq,I [??s]λNIm]MYPCC@#[4g8Zxor=Me~zε9^jZGKo!Wq^&b=j?=s":|Q-Ia1WoN0-`3.OyC۷dk{~@ w[f9x0ogu쮰6:/dhZdutM !/Ξ0q{a:Ol5|DŽ'H?0-PɯMC M, {3]RHBY(%?EՆCzλnW& IfQ0ʖ2_hbX^[`2<[Q9c-k&/I0:j-%u~AF;,O]4P7|mt }QzQ2TImnHḓĎz[:M-jbsf@w G&5 aPmS 3[ Ƹu~V0kv3 n;?  6u]`\y*-`;H]~lCd1Vm4vgL7G ĞńArz@%,T#UKw֬8pD͙u~8#qCs~nGG}W^bu 9xE7`4h0C/n| S\ Y9^{Yx>?[@{;Ͳq9D_smLS2\# m?  (8PJ.yXʨ/L{]:GoѤK Rj4N}c0h@xH6=:4ӊ{O??/f,푮?hġb