summaryrefslogtreecommitdiff
path: root/include/trace
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2020-12-16 12:57:51 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2020-12-16 12:57:51 -0800
commitac7ac4618cf25e0d5cd8eba83d5f600084b65b9a (patch)
treee5d28907ff72690a0463a2238b96202d751a535c /include/trace
parent48aba79bcf6ea05148dc82ad9c40713960b00396 (diff)
parentfa94ba8a7b22890e6a17b39b9359e114fe18cd59 (diff)
downloadlinux-ac7ac4618cf25e0d5cd8eba83d5f600084b65b9a.tar.gz
linux-ac7ac4618cf25e0d5cd8eba83d5f600084b65b9a.tar.bz2
linux-ac7ac4618cf25e0d5cd8eba83d5f600084b65b9a.zip
Merge tag 'for-5.11/block-2020-12-14' of git://git.kernel.dk/linux-block
Pull block updates from Jens Axboe: "Another series of killing more code than what is being added, again thanks to Christoph's relentless cleanups and tech debt tackling. This contains: - blk-iocost improvements (Baolin Wang) - part0 iostat fix (Jeffle Xu) - Disable iopoll for split bios (Jeffle Xu) - block tracepoint cleanups (Christoph Hellwig) - Merging of struct block_device and hd_struct (Christoph Hellwig) - Rework/cleanup of how block device sizes are updated (Christoph Hellwig) - Simplification of gendisk lookup and removal of block device aliasing (Christoph Hellwig) - Block device ioctl cleanups (Christoph Hellwig) - Removal of bdget()/blkdev_get() as exported API (Christoph Hellwig) - Disk change rework, avoid ->revalidate_disk() (Christoph Hellwig) - sbitmap improvements (Pavel Begunkov) - Hybrid polling fix (Pavel Begunkov) - bvec iteration improvements (Pavel Begunkov) - Zone revalidation fixes (Damien Le Moal) - blk-throttle limit fix (Yu Kuai) - Various little fixes" * tag 'for-5.11/block-2020-12-14' of git://git.kernel.dk/linux-block: (126 commits) blk-mq: fix msec comment from micro to milli seconds blk-mq: update arg in comment of blk_mq_map_queue blk-mq: add helper allocating tagset->tags Revert "block: Fix a lockdep complaint triggered by request queue flushing" nvme-loop: use blk_mq_hctx_set_fq_lock_class to set loop's lock class blk-mq: add new API of blk_mq_hctx_set_fq_lock_class block: disable iopoll for split bio block: Improve blk_revalidate_disk_zones() checks sbitmap: simplify wrap check sbitmap: replace CAS with atomic and sbitmap: remove swap_lock sbitmap: optimise sbitmap_deferred_clear() blk-mq: skip hybrid polling if iopoll doesn't spin blk-iocost: Factor out the base vrate change into a separate function blk-iocost: Factor out the active iocgs' state check into a separate function blk-iocost: Move the usage ratio calculation to the correct place blk-iocost: Remove unnecessary advance declaration blk-iocost: Fix some typos in comments blktrace: fix up a kerneldoc comment block: remove the request_queue to argument request based tracepoints ...
Diffstat (limited to 'include/trace')
-rw-r--r--include/trace/events/block.h228
1 files changed, 54 insertions, 174 deletions
diff --git a/include/trace/events/block.h b/include/trace/events/block.h
index 34d64ca306b1..0d782663a005 100644
--- a/include/trace/events/block.h
+++ b/include/trace/events/block.h
@@ -64,7 +64,6 @@ DEFINE_EVENT(block_buffer, block_dirty_buffer,
/**
* block_rq_requeue - place block IO request back on a queue
- * @q: queue holding operation
* @rq: block IO operation request
*
* The block operation request @rq is being placed back into queue
@@ -73,9 +72,9 @@ DEFINE_EVENT(block_buffer, block_dirty_buffer,
*/
TRACE_EVENT(block_rq_requeue,
- TP_PROTO(struct request_queue *q, struct request *rq),
+ TP_PROTO(struct request *rq),
- TP_ARGS(q, rq),
+ TP_ARGS(rq),
TP_STRUCT__entry(
__field( dev_t, dev )
@@ -147,9 +146,9 @@ TRACE_EVENT(block_rq_complete,
DECLARE_EVENT_CLASS(block_rq,
- TP_PROTO(struct request_queue *q, struct request *rq),
+ TP_PROTO(struct request *rq),
- TP_ARGS(q, rq),
+ TP_ARGS(rq),
TP_STRUCT__entry(
__field( dev_t, dev )
@@ -181,7 +180,6 @@ DECLARE_EVENT_CLASS(block_rq,
/**
* block_rq_insert - insert block operation request into queue
- * @q: target queue
* @rq: block IO operation request
*
* Called immediately before block operation request @rq is inserted
@@ -191,14 +189,13 @@ DECLARE_EVENT_CLASS(block_rq,
*/
DEFINE_EVENT(block_rq, block_rq_insert,
- TP_PROTO(struct request_queue *q, struct request *rq),
+ TP_PROTO(struct request *rq),
- TP_ARGS(q, rq)
+ TP_ARGS(rq)
);
/**
* block_rq_issue - issue pending block IO request operation to device driver
- * @q: queue holding operation
* @rq: block IO operation operation request
*
* Called when block operation request @rq from queue @q is sent to a
@@ -206,14 +203,13 @@ DEFINE_EVENT(block_rq, block_rq_insert,
*/
DEFINE_EVENT(block_rq, block_rq_issue,
- TP_PROTO(struct request_queue *q, struct request *rq),
+ TP_PROTO(struct request *rq),
- TP_ARGS(q, rq)
+ TP_ARGS(rq)
);
/**
* block_rq_merge - merge request with another one in the elevator
- * @q: queue holding operation
* @rq: block IO operation operation request
*
* Called when block operation request @rq from queue @q is merged to another
@@ -221,48 +217,9 @@ DEFINE_EVENT(block_rq, block_rq_issue,
*/
DEFINE_EVENT(block_rq, block_rq_merge,
- TP_PROTO(struct request_queue *q, struct request *rq),
+ TP_PROTO(struct request *rq),
- TP_ARGS(q, rq)
-);
-
-/**
- * block_bio_bounce - used bounce buffer when processing block operation
- * @q: queue holding the block operation
- * @bio: block operation
- *
- * A bounce buffer was used to handle the block operation @bio in @q.
- * This occurs when hardware limitations prevent a direct transfer of
- * data between the @bio data memory area and the IO device. Use of a
- * bounce buffer requires extra copying of data and decreases
- * performance.
- */
-TRACE_EVENT(block_bio_bounce,
-
- TP_PROTO(struct request_queue *q, struct bio *bio),
-
- TP_ARGS(q, bio),
-
- TP_STRUCT__entry(
- __field( dev_t, dev )
- __field( sector_t, sector )
- __field( unsigned int, nr_sector )
- __array( char, rwbs, RWBS_LEN )
- __array( char, comm, TASK_COMM_LEN )
- ),
-
- TP_fast_assign(
- __entry->dev = bio_dev(bio);
- __entry->sector = bio->bi_iter.bi_sector;
- __entry->nr_sector = bio_sectors(bio);
- blk_fill_rwbs(__entry->rwbs, bio->bi_opf, bio->bi_iter.bi_size);
- memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
- ),
-
- TP_printk("%d,%d %s %llu + %u [%s]",
- MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
- (unsigned long long)__entry->sector,
- __entry->nr_sector, __entry->comm)
+ TP_ARGS(rq)
);
/**
@@ -301,11 +258,11 @@ TRACE_EVENT(block_bio_complete,
__entry->nr_sector, __entry->error)
);
-DECLARE_EVENT_CLASS(block_bio_merge,
+DECLARE_EVENT_CLASS(block_bio,
- TP_PROTO(struct request_queue *q, struct request *rq, struct bio *bio),
+ TP_PROTO(struct bio *bio),
- TP_ARGS(q, rq, bio),
+ TP_ARGS(bio),
TP_STRUCT__entry(
__field( dev_t, dev )
@@ -330,133 +287,62 @@ DECLARE_EVENT_CLASS(block_bio_merge,
);
/**
+ * block_bio_bounce - used bounce buffer when processing block operation
+ * @bio: block operation
+ *
+ * A bounce buffer was used to handle the block operation @bio in @q.
+ * This occurs when hardware limitations prevent a direct transfer of
+ * data between the @bio data memory area and the IO device. Use of a
+ * bounce buffer requires extra copying of data and decreases
+ * performance.
+ */
+DEFINE_EVENT(block_bio, block_bio_bounce,
+ TP_PROTO(struct bio *bio),
+ TP_ARGS(bio)
+);
+
+/**
* block_bio_backmerge - merging block operation to the end of an existing operation
- * @q: queue holding operation
- * @rq: request bio is being merged into
* @bio: new block operation to merge
*
- * Merging block request @bio to the end of an existing block request
- * in queue @q.
+ * Merging block request @bio to the end of an existing block request.
*/
-DEFINE_EVENT(block_bio_merge, block_bio_backmerge,
-
- TP_PROTO(struct request_queue *q, struct request *rq, struct bio *bio),
-
- TP_ARGS(q, rq, bio)
+DEFINE_EVENT(block_bio, block_bio_backmerge,
+ TP_PROTO(struct bio *bio),
+ TP_ARGS(bio)
);
/**
* block_bio_frontmerge - merging block operation to the beginning of an existing operation
- * @q: queue holding operation
- * @rq: request bio is being merged into
* @bio: new block operation to merge
*
- * Merging block IO operation @bio to the beginning of an existing block
- * operation in queue @q.
+ * Merging block IO operation @bio to the beginning of an existing block request.
*/
-DEFINE_EVENT(block_bio_merge, block_bio_frontmerge,
-
- TP_PROTO(struct request_queue *q, struct request *rq, struct bio *bio),
-
- TP_ARGS(q, rq, bio)
+DEFINE_EVENT(block_bio, block_bio_frontmerge,
+ TP_PROTO(struct bio *bio),
+ TP_ARGS(bio)
);
/**
* block_bio_queue - putting new block IO operation in queue
- * @q: queue holding operation
* @bio: new block operation
*
* About to place the block IO operation @bio into queue @q.
*/
-TRACE_EVENT(block_bio_queue,
-
- TP_PROTO(struct request_queue *q, struct bio *bio),
-
- TP_ARGS(q, bio),
-
- TP_STRUCT__entry(
- __field( dev_t, dev )
- __field( sector_t, sector )
- __field( unsigned int, nr_sector )
- __array( char, rwbs, RWBS_LEN )
- __array( char, comm, TASK_COMM_LEN )
- ),
-
- TP_fast_assign(
- __entry->dev = bio_dev(bio);
- __entry->sector = bio->bi_iter.bi_sector;
- __entry->nr_sector = bio_sectors(bio);
- blk_fill_rwbs(__entry->rwbs, bio->bi_opf, bio->bi_iter.bi_size);
- memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
- ),
-
- TP_printk("%d,%d %s %llu + %u [%s]",
- MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
- (unsigned long long)__entry->sector,
- __entry->nr_sector, __entry->comm)
-);
-
-DECLARE_EVENT_CLASS(block_get_rq,
-
- TP_PROTO(struct request_queue *q, struct bio *bio, int rw),
-
- TP_ARGS(q, bio, rw),
-
- TP_STRUCT__entry(
- __field( dev_t, dev )
- __field( sector_t, sector )
- __field( unsigned int, nr_sector )
- __array( char, rwbs, RWBS_LEN )
- __array( char, comm, TASK_COMM_LEN )
- ),
-
- TP_fast_assign(
- __entry->dev = bio ? bio_dev(bio) : 0;
- __entry->sector = bio ? bio->bi_iter.bi_sector : 0;
- __entry->nr_sector = bio ? bio_sectors(bio) : 0;
- blk_fill_rwbs(__entry->rwbs,
- bio ? bio->bi_opf : 0, __entry->nr_sector);
- memcpy(__entry->comm, current->comm, TASK_COMM_LEN);
- ),
-
- TP_printk("%d,%d %s %llu + %u [%s]",
- MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs,
- (unsigned long long)__entry->sector,
- __entry->nr_sector, __entry->comm)
+DEFINE_EVENT(block_bio, block_bio_queue,
+ TP_PROTO(struct bio *bio),
+ TP_ARGS(bio)
);
/**
* block_getrq - get a free request entry in queue for block IO operations
- * @q: queue for operations
* @bio: pending block IO operation (can be %NULL)
- * @rw: low bit indicates a read (%0) or a write (%1)
*
- * A request struct for queue @q has been allocated to handle the
- * block IO operation @bio.
+ * A request struct has been allocated to handle the block IO operation @bio.
*/
-DEFINE_EVENT(block_get_rq, block_getrq,
-
- TP_PROTO(struct request_queue *q, struct bio *bio, int rw),
-
- TP_ARGS(q, bio, rw)
-);
-
-/**
- * block_sleeprq - waiting to get a free request entry in queue for block IO operation
- * @q: queue for operation
- * @bio: pending block IO operation (can be %NULL)
- * @rw: low bit indicates a read (%0) or a write (%1)
- *
- * In the case where a request struct cannot be provided for queue @q
- * the process needs to wait for an request struct to become
- * available. This tracepoint event is generated each time the
- * process goes to sleep waiting for request struct become available.
- */
-DEFINE_EVENT(block_get_rq, block_sleeprq,
-
- TP_PROTO(struct request_queue *q, struct bio *bio, int rw),
-
- TP_ARGS(q, bio, rw)
+DEFINE_EVENT(block_bio, block_getrq,
+ TP_PROTO(struct bio *bio),
+ TP_ARGS(bio)
);
/**
@@ -521,21 +407,19 @@ DEFINE_EVENT(block_unplug, block_unplug,
/**
* block_split - split a single bio struct into two bio structs
- * @q: queue containing the bio
* @bio: block operation being split
* @new_sector: The starting sector for the new bio
*
- * The bio request @bio in request queue @q needs to be split into two
- * bio requests. The newly created @bio request starts at
- * @new_sector. This split may be required due to hardware limitation
- * such as operation crossing device boundaries in a RAID system.
+ * The bio request @bio needs to be split into two bio requests. The newly
+ * created @bio request starts at @new_sector. This split may be required due to
+ * hardware limitations such as operation crossing device boundaries in a RAID
+ * system.
*/
TRACE_EVENT(block_split,
- TP_PROTO(struct request_queue *q, struct bio *bio,
- unsigned int new_sector),
+ TP_PROTO(struct bio *bio, unsigned int new_sector),
- TP_ARGS(q, bio, new_sector),
+ TP_ARGS(bio, new_sector),
TP_STRUCT__entry(
__field( dev_t, dev )
@@ -562,9 +446,8 @@ TRACE_EVENT(block_split,
/**
* block_bio_remap - map request for a logical device to the raw device
- * @q: queue holding the operation
* @bio: revised operation
- * @dev: device for the operation
+ * @dev: original device for the operation
* @from: original sector for the operation
*
* An operation for a logical device has been mapped to the
@@ -572,10 +455,9 @@ TRACE_EVENT(block_split,
*/
TRACE_EVENT(block_bio_remap,
- TP_PROTO(struct request_queue *q, struct bio *bio, dev_t dev,
- sector_t from),
+ TP_PROTO(struct bio *bio, dev_t dev, sector_t from),
- TP_ARGS(q, bio, dev, from),
+ TP_ARGS(bio, dev, from),
TP_STRUCT__entry(
__field( dev_t, dev )
@@ -605,7 +487,6 @@ TRACE_EVENT(block_bio_remap,
/**
* block_rq_remap - map request for a block operation request
- * @q: queue holding the operation
* @rq: block IO operation request
* @dev: device for the operation
* @from: original sector for the operation
@@ -616,10 +497,9 @@ TRACE_EVENT(block_bio_remap,
*/
TRACE_EVENT(block_rq_remap,
- TP_PROTO(struct request_queue *q, struct request *rq, dev_t dev,
- sector_t from),
+ TP_PROTO(struct request *rq, dev_t dev, sector_t from),
- TP_ARGS(q, rq, dev, from),
+ TP_ARGS(rq, dev, from),
TP_STRUCT__entry(
__field( dev_t, dev )
qwڤ՚hG9c5O:E{VA:ذG g(–6]a<>@4v[&";CL`"]ՃX@0DT0Sʳ ֕pOK$VŇo!9P&y# i pl#Jz$G׈^ai;w{8j5xn`DSji+Qis'ɭd{)j[V,fП)7h!gchVh1 hEp@B&Oi[$ Scb Е|ޝJ8;”h&n}#xZڱb8yf|hc{ܺ,mqVN0 ;ack 4ER"]%I~ CA(@]o9RMqԚKadoR SmR%"dzGA DKkBZ=£1ckoogR~LCh=._09:\!Y9CNފc][Z Y%K){5vp[+Ɖ4jR?^qrg`ZT)< 爴wIuQ&U;Z^{md'Üf*3[:mvm?X"r{/dçAofhDK*$~PK3hJ^@߳n4k[7k$!DzX)U*lHpDz"*D=Ad5UPk,IJŕfio5W{Z YlicrSdG87NmL '8Y{ ]!u3G*ƽIV5<:ٔu51Y1i#1#o, !қ)eOu| GSKuFq/^Cѓ+c^cx_ÞH@~ӯp 7>~ ql4 =u<9{n ]k$$Y"~ϰ陴I<.op~k!\bT2h:($+Jѳ'~XLx.k`yHbY.!Ө!)}%M+.`-:H-B'G d$ڍjIrVLξ_`;utgC^/o*j2uteDFdwJܯp6Qq*օ{ .-ɊDѲB4r_vK_U,ߓ R<:Z{}9_|c$ Ȉ^  l{=8x mdPb5$x:3k 5}:8@LԼ= #jQX(Q'Bf=Ϙ1󰣷H]5ȿmH 1+=M9+"O .x8h}^zn~ajǗpp{1zeUF0XjL(}lߩ[(6]JIC\le2.o1($2ɴ6!RqU:Nk9팓Uk[Eעtִ[v3L,@ Ĺ&p1q N{Ph.Stqy?'e8r/^~:6VhJ%=pe8φ;[wgŜJQrG[/v[%C/;t"m{--__-'2 "( 7ʁD"k>  iq$UK?BGRQ78BPD^-MrF\*'iJS9F3WB5Ygoܠ.HI~5= ءWŪ`7XeIqk ,(gT Yq-#{4]D-`jv>|>FϤ(GW`ﮍج,eG[4yM4'W+fŏVMQR$\Fxڍ9|v$=F5zjToW2Y.PxɎ O9C@ffưI@'d5uiw!$LIfA G;4o r?\beHEߔI=u=g+]d~zu<\@}V/\ D6aW(#]7 `ZŔrίBw!#_"׉wG mh!kK P' C)ݑΈ]Gl܌q^ݛH;ԅѫgbV ع@I- ,MUs |<4@XYn e_*@r^@AqY`pH٢s2f"Ό8}naQ8.@xt[w['А4ʒaiuCM1+Jx((14 ȅHO6 V^RCrZBwd(K>?enh YaHR'ZtWKbL*6 Sn'ΖݵTΦݒ#g@v[jv9"+7!pGwa%bҕZ\0`ea!E !بAߨ=Q[+&2vTaln^*`'mБlŠzkJmh6.h . .p=7fw%tg.dA kЅ8"b10 PH,IOgc>{ۓE'ORq|yuUp̧d6-K/Xh wCHfmYV*]y 0Q.sl& 2`}D@о=UӼ20O+KCIӳir39qDJ%zdqUl- !yEW@ Rd:: 8d;5Dƌx`X ]jAZ<wޥA\fMȝ8O{ |uty]}q<p_P!u@*8o)N` HH씯!1NyηM1N8EgS?A=P@2͙HҬ X;c.$$1Ik/`Cޮhߤ>NMu7ZJơh~!*o\΢)i+0ԑ'a>dҋ/ߥ̗Aa (x(S}$#&^V?ڮwh#vEV5S3#ڀPH'M:M|OAf5`쁞ъ'}*rlۑ8E[alEW oۯ`㓭kގQZ," l!|5Y:8b˓%K dFd$0Gwo=vL~\،QD3yznf-3Y$%iIgd < ? ;nGߦiNkIZi]g"I?w6n衯p24=__i,Y,^V]i e}hlIoRn,TYXY@>vR, >H.K >mbsMНdqi@>=]h"(SMu\NTr5m1umI՞> Vd_K/bJLX=N -W+Tcy L ' ӄuޑ W]I,}N$]WobHZhf6PgU?8tfX~&$7U&i|$#fs7&QٰLƓͺL䥪QoUzN p]ֱNC>l衷G$>vd/fv&LƬԦV sXGx4A(]\@S!_gkdT|tё2j P#VѬH2_gGi.S%= "gd34/^ (85f^>jtu.f 7w+@zB :A,YGw9e׿;7ҵ`Y>&=Ŧ>Or3${Rl^Ld\,oAzK$v 逘osJ´kIv:;2 e/R?kJD/m91Yz2 B/6~B߆_ԏrP>Jrrڤ(0 8KntZ $Kn*'t{lH`ao:XuUHXcuW)tW-xq,Q6f=FN;VpQQ] GdSQgMsp)kCu4QY9Liԋשmv2_Q]GG+;e.k[}&AN QJ_L$dci6v{J~d6z;!=F5V>N9:CU6A[E?a22ip|<^8itlH'XJB=MϦ; J${ds CrkX29A~t.Tھ41t.{ & = TƯƗp%B0jȂ$ \,u8h1WݷLx}f̺G䈐a61_@O[RHDt\>-r{q -;4U_`WF{zrZ2տ; PDP61{$NRnE0^;K46 9̺ conSTV@+CنگIh CHGFrA;E]lÍ=RVg|pf%M5iOfjS1}h^Qg8RNAFK^`]NWWWn5u ʕ`A u7=[ {%dJ9s xH£δ7C7%h6n[oB$TNiF)R;I9YymBglS֕1ht#ȿ$~kT/$}@&L3j',aN콑n (ŭ3nDi=먋Rp2.>HM @*>1 3]QN4dAd5`=M H;"`@sEZq\MBvh|Q9?GN]`a\Pf E" N >:n)~=Ԗs87%ZOq7Aj@J\jc{ˎ/gw RtVKmQ)A_('FQXamPJ`J NZfc2{pɱ*Q%=VJ2h-1 j5 xsRVR=xֱBnO}2; <euBr~CDݷfTS +-Z x)JDP:H=/N9fiq=gWLr? m$EkNvE/4Fv]{/H1\C?WdpV 3[v0$ +35,O>42OM5'y_cim)&MPeRi9f~UbB1L7qX`dz&pkh=).옿'>h^茋Q 9Co._/꾱¬Qmԫ-$YdW9AF1ԫWu1s[E3)A2V6f8 7c7K3+i[Eg[DDѥBݑY"L-s&9QepU[/Txd9uy\m>l<%7}<ث!(qڜn5B1Bvdˬ_>ji;8-{s{8[~ r 3Q[:@S?=6';%T~e-w.WR hY\H(]LpɌζJH z9C*d>@ Kv.(?KizzW,K|j{g@b<\zo a^R" 2mE\.P_W+@kI*K4 nG|",y 2neEF7Ɨ1?YK?N鸹ȋ]zrɛ_YBՅMDpe ߯ [.z9$me&,-8 Z'<]#̇JҺ |>|}⭕x u܃$} WB_G3jueQe%+;(vWǽl|%obHiE>[i=<-ΣJV>4X##qg!lv>?lkc 2Sj㡹 B4y ĘfJ\iح\=LP~+$K̇p%` lhS%++]04vmX0 G :9{\kzN`Mi5+NQi ;[vY:q1b헯ϊ8*&AKcr.ӤOB]S5=`%j|yp_~5o<`G5FcSh& 4ʌ%/.ҩh2mD0 '>ɽx6|S+&պh]t)jj_ޞđZJI%]Jh _t\/oIX8nzdcpqYc Qk,ÚVv)8v|L16G 48 #23fi;t @yLXcMgScbE6k@\1_pv /܆uY@v-Y!L9ݐl 2тZAkE? sMDž=71"XEvgWPZ?9ndC2$VQDR)ap&ޕ?C]r r'' VL WrCͿLWx+g ~3QɟEB6T3&q 'L7t,;WP2Fa"q6m/Gʁ$_-ޕUnUY{Euޫ({mmFZJn2\F3 gE7;ZY48*2ٯ8SUZmu8m,9ۊ^̭VR&AV/b T\pcD+DwIyV}J `(c|ַ]N5R bQ+ HP?u^d/矋Qr&Ӗ.y]s/|z_s i,^{pKe$z:|aĺ0"D/D M;py| `He(9s}/"?.0ae-]wLCYb1x%!m{4{:[^}6;p591iꜙS-2<[lV<#뺡=٨}C-%lhvScM]e,4g~4jG+;sfHK.8㸈B!ɍV#r50 ID3&HA4p^in}ٸ3"F,\391X\,`?9#_@~d:ƤkO04f<+1!o2鸣Zh b'&'fѣqƐLKqy@ObGI,FMɊM[Ԟ.`.-$?N4RFv^lrH' /|ǧHz+gp'{k2Ϥ=QؘqrN<9sw^!jz w~,7PT3toAa;n^33] ;ɓܽP!,!GP!ρOJ蕠zUP@.C\Isq__Hph-@.=UcuܯC8mY?WI`5l^fcTP̛^j9#D}H' R=Us. W0X$3!<鐗;8`G1 (u(9,?1hg ͞cЎu6HU#\4dQ,:0LaOjjWm2qStg=ҠSդGXVo,B7zd<^gQ岤%ϦB[3):BA+O6 V?|=+hìy2sT[Zw47 M΁?S#tݕ.LTUOsz\NJdžs.4?4g53;и?XR >d%76ûkf^YhPj}$i?aE"e ]kS,ǪoO5kOyXlo'k8WQN%A+I`kyc3i?ګvM/6ŇTk4ߤ<'t]HiFNFQi-'K?3mڟ3Na/:Z$kى)pS@h▲=6HрQ@*ѷIN%|ʵj":%z{)̑p_4"` q?btV(Jjo!\\AJqNr@+&>9r{oo%.\3| "eAƢ/]-6I6)2wBGñq JwdN+_ڞyP9iCxGU:%j]8 n]/n|t[oh {#_ C;p ?G&h㗰qpBV{=.x h ]s:Ow֑poaDg V8At$/3{(iĮI-\xz҂K1R>(BXGZW*q̅׷&〨!K(:][hM=B*.#D `텥euPy3*O4ypT@6`Ƿ*4a+y}f˃bY'Khkkڢ*K 7 oU̗K9~_ +&;eMSI,hsgh]/w+43Yz RW nJNh/@YqBޞJPc>!O18d7_%FpS 7i:f'd7^?IS9O]f(Eڈ`w#sxi-MI6J6Z-鑕{J'ꃧ=i P8ruxͧo9;~H # =F7}rx?6kϞ0Ͷ)FOi\o҈^AH6r&+ "Rs2klZF w2 "a6v֞g%y-N v#l ||s 7Z%=$۝s:xnջdѕ X* eel:_i(I2Ogzk8ƚ+]M2F%w+s&,KM7&ta SI %f+5쀔P F=UR v@nnYl-?f\F({uhBծ_+^e񑆃,Wv_@Ɋx{|i/^G ]\kH<2~F!J- `O6&,r>d"Q$E}醔vG>¬uٸ&WYt]Q=Bgui* p vL봃8$B]B_NZ[[Lٲeab^X*Ͽ4[yzY:xMd2u{&̷\.>>:t>3J(&mքP}bxCmҠȘYysG*3+ imnO.,.oCk_їu,pG 5 Q=jx~D5I2 8QekkIҷexY gTL׉ p__oh >k)y\,_R֗{HdAvNAij!e1.eಗ7>ڥ^.,]B۫;_[ xSg1Xx"{ikMewHW:#sH>b]fovԽPct]37{f3 ej*ķQd( 52e] sI&Ìf߭aP @bQ4φ(H"P[ sZ{V>Q͆q\EYquCZW][.uߠ"-KeE4fjZX6qEe{uyah弾WY:"Rj?X- ca1+Qj|5`[G4r^_3.{@FpkhLDD9+BBjn hŎ̮C4-D}OKL*#oQ+ +Q1XM yEXLJׇ4Ls`-cG)y ڲFQw5|&5#u2$!QK4jhP鯤69ކ"Ћn'K8s:>$ (V PGŢD:9.Rr*yo<ѧEL󀴃pDZEP*/DlG@G\!6KMHozF))b4%t_OhbNQiJs哶Hr/9RKT':vOK|tW]'֬M0fyzY5T㖵fE <@NВ]0CR mrJPV7I|{`ԛu"! M*E:WKƢu uEaZ "%' 'piE d+RV-}29Ȓ[x8 (we`;ze #H<{jzL$j AKt6_8Xav٠}PWZ7z-'T=SXpfk:54癭fI` >Z)oV8xT"679mOc% "9S2|X/!sk7^Ƽaf]4c[q~H@ȣ˛N˅f7k;ݛoA#JWTXC6m?nj~dč*.0&v9Qy֪LJi[MP!4 d`'%%wE%ͮ`9#7mJ-\c6M{^&[Enlhdp W]N=z̸q6ÒTn)2A͔o!:kj!8DlRlmYYySc'r4kF$wÞWbM։MzÛ|"R,m{ٽ):gʼh_SfLh[[*7fnQ]׎jީO| izක;0F(k]Qm(Z\heQ ZkIَřhiGT$˴v{gOdE} r7=lZo'#\O8׻+0֮FڎflvV)A0h)|&)aGH~SzJkS7@hijO0AGEg#:auK(V!\> rA$HǬ4yR]{"&0a!!;s;R v1ibWYYH88y]ǹY|FyLs $2y$G{~$|QNяˢOe|qE*&+B7(MT)^h%Y}Cmx+r9@ؤ5 ̖m\C\<6|#pVH_4qQ*lQ ?Fit?霑^ l7*j裎DڗmMgm_"Ќ,WNmg=K9hw&m5:(+ 2qc+J=;Um!-RM8$D=pгkOw#O''/r32N'͔r>Vh#IikvI{zY?''P}•fE_4'(/%x6RUR$w`itzn`%+݊ԫ7Qd RK.A۟ { 1 b@z_\Aa*IJC^N\w4'ͯ]~Y[0 L$x "/|eȆ,z u1 [}?am5J q-vvN:'s꫙WFP\0UуUjH }uiQŎ3EބVănAtx'x6;}5ǪckV dѣ}c€󓺣2 u90@'D@+/ z'{t~`m$ՙr!w>eeY[FZv^;] O.ڎYZ^vz4EЮu8gybMqZtS9Iv,±ЖB"^OiK~no#e4s$,uMQagpnu3{mSKW?#Go+p 7ԬIP8k+! 3!b] ;3$P0ok5_Mq}ro@ɄH庣סubGotPbmu>G]A?'W3=YXğ]T:zVL6ӳ4bXIXҒIhNf g(3^VBzxΜ|ug"2*~ɑ& iz)M+(Cӥ4ci1U$kZWӹ-H87f'uPJaT!,?BX &x$?C_`j>fiq>I '5XJJ5HTCֈ6?t; ;xAp@Ѿ {uЦ)Pb\Iر8<m|AQ6i%?di&Qt*%US*⸢ހp/w$`8~vvX=m]Fhiw2É6`[[`k-Dƪ;ZjcL=K9vۭ4Ppӆ+CODq 18]ñ&CR )Ђ%\Pix[Z_{|5ՔD= ȭ^MUצ)S ?lY&[o@^iz[: ?o-o |ZgD*qB'2D"GN^CG ßZhv]l"$9|[euO70|q,<.'&ݫAi \ jGhC%#+{Hn'Lx7֒竉 !ܡ>z-LOw W:;>]tҮmt8iq3iss+taXmxO4QzH{gE?p4(֊I4-krq&_@w>V{'Ma~(^x){ X'c>AgT>=sڭ%i5/ZЋP,,I_|.vDЈf]6ҧIPWl.X 2FM(w\Pezo~-[6pAB813%`ҩI-[zkv{:jBsnTIV7#NP8Co׆{w#Yqm|qB?xHk5 0V $h% o>2Uœϟ?(h[4nqM\RL{  \N%sFE-7BM _بG) T -4O>0o19!`aiw1ç϶(b<WANY;n8N=:KfOKE`qvn۷(e_!g Wz|"@;x'99L iOywiA,V P͓~p*? \4&Pp[ɷl0\zP쵎6e+#vǹ,t&Z{ֆBSgQ''yx;>I^hG#D$iE-}"C Hd 糧VHoe|ް9-Jyn8Tw4N|1{3HI~+.LɆiPa?+[熺h=qR9݂Dc=n98m%%uؔDlً FOp!vݱ(D_jV껀hf,cǘBh&nӮ3 SEQ|\? f6 "ÈAźE8;iBQrF\xx`đxԦ}уР)2Pq$5M ~$ 0nEW+ݦӆG0) 9;=~”Xsr!Y^;8 99+bm>U/JlN XsJw0pS#z+)~$-`_H2F51Y(yz-ԐT5R6 op'J^+-Y Ic󨿔;||>"1ygRῲBt AInLR7"$ eiPpJp1H/NтD=K" ޕوg/G9t8lkHws yٌAͺMYGܵ-ܿ9*7b:eH5ڪ>HwLs2JJO Bq_Ize(3Z߼ZTr$] c t!PWs @FGZ U?CE0V[oDߑ%RK=Y#؜g:FtRVm4MEDH"P2bq|w/ripXFJN hDυB:hB;.ש(: }:װO e_O` ɪg rUf$r`ܻYjh︒22 \ p-Q3i !q侐Gf\Nf'{P-`7MeqhJV<f !&}HD(KIy"׿z3NweޒDD/3 u, r 8I! ńm }gu-z(=t,Ļ?#}{KKJh{Mr$qV1XxEot|~UP <O' 0Ci#?SL)psl; GfWgvXWOom2{s~%X $?DO\3?σuRyX޽GĸdC /@"溢z^TxAV!}{?߃ 7(%K :_,a,ݘ jlܴvA<}L %fHp3هwN)]CLNtZ}Bʹiԧӡi:) t&*SGRCWz E%\8{ĂҘ}\!3B;np'x$vs hE?Fʷ $LvjoE]Vw<3*7tͼV!IA+і= pgƲ{a2 7 dMZ |ܱ&Q*= ]TfѾqݥĖ0؇<9ўEWiƴr3 %nM@׍ϧVݣJ^ȞMB o>e 3s!Ƹ3`)I.R<㻱(1 DI^L&N՘B]rI) ;3Peg YGm$=2 A9օ5 |cEA}a4rMZŷv UXZK:~8uuJ[S 23[H2ZLFm 4͋TGg9LLN-c+[grz^nHrW$wdUQ%g?}[uɫd 8 ή1V&NGaS-:WEh-ϒFqU2 <*7cٍ3k;jH̭jhp+rדLv,x7)Y<]t_M.Q{t}$1F+o'~b{b)O~/ 3>be,4)$Yty)yzBxJ<8r F3Y*ס$gL K(͔nO\[U֑~BZ0A**9O;/V|Q:XMsi5q$VpR,)qǥ|tǭ(p )mz s)wM2xĐjTq-CׂrN܍KG(ōY޼;'k҆b^ڶUW7mw-j5j-ostNyw}r_ID(p'_ O7鴾;2Psh?r+t _-_UF JWA?EPU8kt z?7w~)/X1aEHL,ey.{p.  d=(Emd9OG F&Ŭ)$E \Dt.Ξ[;@y>2{O䎠IW~4&٣p'wO#/(g7M{T0\7ѿ lp`@|Zm"VPK< `op+[<껓΂HScgY~iI W껕&=up^:L8@ێ y ?е5uӌ ũc@4 |]gd'S8q߯}@w=Ђo> <Ϥ0 g`d C=#ʃxqi*t(#/xE-ЙC91/<DE=q36A{.<}|yCUy۞u$[? 'sLN /fu%o0߃%c#JMyLw<Q86dqVX\&\\ݟ}\Rw4\ƥ&$]ptC~[,Ք\zob|xIOUh>>SSvqMGQ3 >2Y9R`[pjBMGez%u>wI+HtLDKtH6^2̲硻ac]Ps$)οy5P/2x2l+|>#ei\: :25^}&,:85xG|']1cy:#Iu$ɺ27m sc },\A;#XXOVsH%ˋ<] tmMפ_Ea]8lw A ,+u"1Kޜ< FSeqgJla ҪVnU%`1Mz"gI^vG^RR9ͅtw/j|Iq!}"n="*;Y\哂ޘ5 {[Y,-wycpÜhϴ"ׄXxk=S{Hx\@p_ʓ ȫW7<>*1~WZHG]Sɇ,tVFSoo"_&ԑhwq>>J{҉}Ǜ#_A)(E&HN>%W:`&m"? MyTi@m9A}ax0V;~(~!)P{9-tHk}ӜF4:HP"kN$pՏUj)z:NP_##+o OIKDd|Q H3=wa Ds]Y|$CK0Aݝ7SB!=[< ,!?9]VA6B<1ʆeE4,7I+ 3N7($rĊ7<sVŕA 7O!ψiqϯne=*pĽf:]zK"ǒb`h&J ->> j:D K9Hu@VݸDď8ځ߿=++vBwX?6%%D_[ \D+2O?HPҨ,FJg,\UA Dt+a)B)Ƿ7˷_f/XCpQ` Dt0CNJ BT,D}6J6xk-pœh}fMMU$!D#@ڄ|Pa Q!(>˛Ĵz}@ _HVo q /f92m_Ӈ(g5LCtփKWY5tR|%IhM,)T;Fu|'!YÈ@/_P6뤴+R!qL:%t8$]&.\fM?2i7Ng$%VX*#}'.Lz=m&$̿lo:kͭk^:pI(8CAp:t^ݠ.ݟjܩ9ወa{fʨBH_kGL4VΉN0{x@u_ѣ&c7K%)-7(pM|ݠBbOo1-_iOsmcD~HPU=zm;^zw_!=GJS(2B6;tD/n}G>";*+7EsJSP;lK8_1'ETgmIycu6wg2\b4SWv&$A@[#chP_\IdĐe,z Mr:KzDANex'ag_bE&Jr,jEMkYI`)ӯtSgח]zfDD U* 4.@7E[  xFdW'/^nb%s~.\db=+/ٶ7U/@4tGgQҝ+#㳗H*+K ѕT*z>beF!bǗы+%#r3AMd&fqMfx)vwr3k>Wɑd `1g7B8swslY!$A>Q<~Y[~tWm_@nE{.KtRb/5 = hԣ?D?Cx*Q|TNz%9M?0B>a^慽 гѣԖʁ A*)GmjxRNڜ?~ {2 c4ܿ͠;\5΃T+ơYsYHBh0_JG72 :G4U#ࡾ }fpi_G[&3ط3\ .gEwV ;n{v,&q曊@+>FL@)zumNK'orm H^&#%bd ? e,F+Ǿ3<^TF?{vlNZ[qa{#B?i'X_?60&yL24VZ3"}6  gvwϙ_`0+;@:Onիf~LB?p#\ imk\fQu}Hl؛2kjzzQ~H_w/ ö_7ޤ"`5]ydGe?n#IE| o{ܘ9)Y*H*P̺u "dDC7'/{ @IػR>l7E0-ᏽ7:R*oR6>W} v|QʚC ܪ 7}BbRJ}gMRC`YH.Q6Oğa?I8Fm 6 a3TY/oh&6CTu-4E%Z`+,K,*՜YQ b1^t=0.,āgpKAR',V;H4*{Q[n|fE&)r|3 sӎB%_G]ɬ\SF$QlNQ9j {߇-cb'df+,[:/͊!۵RlL!_5Z!iAW.ϿEBړ!T\B)XAř>,hӈ9NR)5፣^ C yd0ou@5a,XC),I"Uۍ8 xfϸ̍6Ò.F!W?T>m CI!+ ł]Dȕ0NYVbq)(/yIJrr dҽ{ߝٟn+X>}9{2a$|.{ngأ'\00?kߛZ;0|dlgp)\?1SD&5ir%H߸իAٿʮ4{r<*b#&%F]<7~IM헴@D97Ies̱ڏ*ru.;\QS}LaKՓ:(JQԄ])ul[j#R(KmQd1ՠ_bOX? eE9ip=F]D70,I!l +PDn5Gо]-L74߾QtiêYRt|(ͧON+S(z3P*d7W{SHé#l.%R^,6ņʑ ={ ڥUr1%bb~@L$Uaax&&?3a BK"3 iXs#g4^p͙ MG&e;2@)  ״4vX]/oˉĘ;=M?(ف?ܔa3=#siI-JVרk~84ۺd>48?\.O,PnD v:QQ{ NPnI"NC/37=8 ,+[FK$>년fs7< <1=>}nvρPܙbv?-k)M=kM2']kwӔzV {I,߃}ڎV욋ס{-(T ѵg=Iur6W+tVh ¯0MDNjM\.e!2OGmn7kjݺ♤JҩcPPn6M!o(XLйMÉWn֘w1}0S|[YE8ts7]VO]URg'JO5oV 0GV>-֌ vFku2~/Nݲ%xa oc?9K);:L]/y-m ,/+:Ny#bыb[R,bc_LۖThV}**+gYRVc{\ nYb  NoCOJD k׿* PRkxud E+ C?YP` i 2Y0c?&cCtP!]FeWKrŁꪼ6i yz}q3Ǥ`K4,dNk2v~Qߐ-`\нVrCHwZFņ6mDҋAmc Nԗ#q|Uq5EI?m6V[o|cBDD&p1W2{ F)%Aa{qzKٯФjv ._˖;3fo/H&1_l*6)xH4{ 3u.k-=K7b_4|$_t%F5jz}?>sBFŌҪ?$Ti wvj:uۥfd:dm杓UwM&eW]L'6yGw 1!S D1ϭẌ́Ď7.l_O#qbJ_fd %cNđUE&!}n!xLE9H"szz #/HEb"D3}G\7@{qW'D3^pd"C_='zaUۍ`tE mo v,Q)$^^z-pRfUyby<kp G3Ÿ҈ŶƯ$O&ѻ9s~dkSX~<'H& /4_fb O#NwliyI*won`Gn0\wʙFV1_ єA<Hʳ}/^Xcolc'{۾U`p^FioQ٩42Q~K⛟Q‘_Uj鯚' :޵;:~L@CD}= &}w:5eGgz/I$V߲P?k75+کc2} Jĭ=WQP"ul+ [R0 >:@Ҏ_n yb45E(J =I?9zk_wiRFNߴ5IW8wJ:ᾼ`0Ldtc