From 31ee74c786ee75923ac0dd94e48a623f49da6a2f Mon Sep 17 00:00:00 2001 From: siqihuang Date: Sat, 12 Sep 2015 14:36:50 -0400 Subject: [PATCH 1/4] HW2 --- README.md | 221 +++++------------------------------------------------- 1 file changed, 20 insertions(+), 201 deletions(-) diff --git a/README.md b/README.md index a82ea0f..a169eed 100644 --- a/README.md +++ b/README.md @@ -3,211 +3,30 @@ CUDA Stream Compaction **University of Pennsylvania, CIS 565: GPU Programming and Architecture, Project 2** -* (TODO) YOUR NAME HERE -* Tested on: (TODO) Windows 22, i7-2222 @ 2.22GHz 22GB, GTX 222 222MB (Moore 2222 Lab) +siqi Huang Tested on: Windows 7, Inter(R) Core(TM) i7-4870 HQ CPU@ 2.5GHz; GeForce GT 750M(GK107) (Personal Computer) -### (TODO: Your README) +PART I: +This part is for cpu scan and compaction. The relative code is in cpu.cu. -Include analysis, etc. (Remember, this is public, so don't put -anything here that you don't want to share with the world.) +PART II: +This part is for Naive GPU scan, and the code is in naive.cu. This is not done using shared memory. So multiple kernel is called in the process, and the num is log2(n-1). In each kernel, each thread add a different according to their current state. -Instructions (delete me) -======================== +PART III: +This part is for Efficient scan and its compaction. This is also not done using shared memory. So I still using multiple kernel. And the num is 2*log(n-1) because both up and down scan takes log(n-1). Each thread work differently in the kernel according to their state. The compaction is like this, first get the 0-1 value of the input, then get the scan, then put right value to right place and copy back. -This is due Sunday, September 13 at midnight. +PART IV: +This part is for thrust scan. The thrust is an enbeded function, so I first copy the input to a vector, then initialize the vector, put it in the GPU and get the result back. -**Summary:** In this project, you'll implement GPU stream compaction in CUDA, -from scratch. This algorithm is widely used, and will be important for -accelerating your path tracer project. +PART V(extra): +This part is for radix sort. The input is n number from 0 to n-1. In my case it is initially sorted from top to bottom. The process of the sort is like this. First get the number of digits, which is the digits of n-1. Then for each digits sort them in parallel. After log(n-1) step, we get the result and copy back. To change the input, you can simply change the number, or customize you own number, but be sure the numbers are consecutive. -Your stream compaction implementations in this project will simply remove `0`s -from an array of `int`s. In the path tracer, you will remove terminated paths -from an array of rays. +Comparsion of several scan methods: +![](image/compare.png) +This image shows the time used for each scan method in ms. The CPU uses the same time, do not know if the cuda API is also valid when no kernel is invoked. The thrust basically uses no time, I do not implement it, it may use the shared memory. For the naive scan, it is very surprising to be faster than efficient scan. But since we do not use shared memory, the time to invoke multiple kernel may be much higher than just invoking one. We notice that when the input is small, the naive scan is almost twice as fast as efficient. Then I notice in my implementation, the efficient scan runs excatly on more time of kernel than naive scan(both up and down scan for efficient scan). So if we use shared memory and reduce this disparity, I believe their difference is small. When the input is large in the last case, the efficient case is smaller than half of naive case, which means in one single kernel, the efficient case is faster than the naive case. -In addition to being useful for your path tracer, this project is meant to -reorient your algorithmic thinking to the way of the GPU. On GPUs, many -algorithms can benefit from massive parallelism and, in particular, data -parallelism: executing the same code many times simultaneously with different -data. - -You'll implement a few different versions of the *Scan* (*Prefix Sum*) -algorithm. First, you'll implement a CPU version of the algorithm to reinforce -your understanding. Then, you'll write a few GPU implementations: "naive" and -"work-efficient." Finally, you'll use some of these to implement GPU stream -compaction. - -**Algorithm overview & details:** There are two primary references for details -on the implementation of scan and stream compaction. - -* The [slides on Parallel Algorithms](https://github.com/CIS565-Fall-2015/cis565-fall-2015.github.io/raw/master/lectures/2-Parallel-Algorithms.pptx) - for Scan, Stream Compaction, and Work-Efficient Parallel Scan. -* GPU Gems 3, Chapter 39 - [Parallel Prefix Sum (Scan) with CUDA](http://http.developer.nvidia.com/GPUGems3/gpugems3_ch39.html). - -Your GPU stream compaction implementation will live inside of the -`stream_compaction` subproject. This way, you will be able to easily copy it -over for use in your GPU path tracer. - - -## Part 0: The Usual - -This project (and all other CUDA projects in this course) requires an NVIDIA -graphics card with CUDA capability. Any card with Compute Capability 2.0 -(`sm_20`) or greater will work. Check your GPU on this -[compatibility table](https://developer.nvidia.com/cuda-gpus). -If you do not have a personal machine with these specs, you may use those -computers in the Moore 100B/C which have supported GPUs. - -**HOWEVER**: If you need to use the lab computer for your development, you will -not presently be able to do GPU performance profiling. This will be very -important for debugging performance bottlenecks in your program. - -### Useful existing code - -* `stream_compaction/common.h` - * `checkCUDAError` macro: checks for CUDA errors and exits if there were any. - * `ilog2ceil(x)`: computes the ceiling of log2(x), as an integer. -* `main.cpp` - * Some testing code for your implementations. - - -## Part 1: CPU Scan & Stream Compaction - -This stream compaction method will remove `0`s from an array of `int`s. - -In `stream_compaction/cpu.cu`, implement: - -* `StreamCompaction::CPU::scan`: compute an exclusive prefix sum. -* `StreamCompaction::CPU::compactWithoutScan`: stream compaction without using - the `scan` function. -* `StreamCompaction::CPU::compactWithScan`: stream compaction using the `scan` - function. Map the input array to an array of 0s and 1s, scan it, and use - scatter to produce the output. You will need a **CPU** scatter implementation - for this (see slides or GPU Gems chapter for an explanation). - -These implementations should only be a few lines long. - - -## Part 2: Naive GPU Scan Algorithm - -In `stream_compaction/naive.cu`, implement `StreamCompaction::Naive::scan` - -This uses the "Naive" algorithm from GPU Gems 3, Section 39.2.1. We haven't yet -taught shared memory, and you **shouldn't use it yet**. Example 39-1 uses -shared memory, but is limited to operating on very small arrays! Instead, write -this using global memory only. As a result of this, you will have to do -`ilog2ceil(n)` separate kernel invocations. - -Beware of errors in Example 39-1 in the book; both the pseudocode and the CUDA -code in the online version of Chapter 39 are known to have a few small errors -(in superscripting, missing braces, bad indentation, etc.) - -Since the parallel scan algorithm operates on a binary tree structure, it works -best with arrays with power-of-two length. Make sure your implementation works -on non-power-of-two sized arrays (see `ilog2ceil`). This requires extra memory -- your intermediate array sizes will need to be rounded to the next power of -two. - - -## Part 3: Work-Efficient GPU Scan & Stream Compaction - -### 3.1. Scan - -In `stream_compaction/efficient.cu`, implement -`StreamCompaction::Efficient::scan` - -All of the text in Part 2 applies. - -* This uses the "Work-Efficient" algorithm from GPU Gems 3, Section 39.2.2. -* Beware of errors in Example 39-2. -* Test non-power-of-two sized arrays. - -### 3.2. Stream Compaction - -This stream compaction method will remove `0`s from an array of `int`s. - -In `stream_compaction/efficient.cu`, implement -`StreamCompaction::Efficient::compact` - -For compaction, you will also need to implement the scatter algorithm presented -in the slides and the GPU Gems chapter. - -In `stream_compaction/common.cu`, implement these for use in `compact`: - -* `StreamCompaction::Common::kernMapToBoolean` -* `StreamCompaction::Common::kernScatter` - - -## Part 4: Using Thrust's Implementation - -In `stream_compaction/thrust.cu`, implement: - -* `StreamCompaction::Thrust::scan` - -This should be a very short function which wraps a call to the Thrust library -function `thrust::exclusive_scan(first, last, result)`. - -To measure timing, be sure to exclude memory operations by passing -`exclusive_scan` a `thrust::device_vector` (which is already allocated on the -GPU). You can create a `thrust::device_vector` by creating a -`thrust::host_vector` from the given pointer, then casting it. - - -## Part 5: Radix Sort (Extra Credit) (+10) - -Add an additional module to the `stream_compaction` subproject. Implement radix -sort using one of your scan implementations. Add tests to check its correctness. - - -## Write-up - -1. Update all of the TODOs at the top of this README. -2. Add a description of this project including a list of its features. -3. Add your performance analysis (see below). - -All extra credit features must be documented in your README, explaining its -value (with performance comparison, if applicable!) and showing an example how -it works. For radix sort, show how it is called and an example of its output. - -Always profile with Release mode builds and run without debugging. - -### Questions - -* Roughly optimize the block sizes of each of your implementations for minimal - run time on your GPU. - * (You shouldn't compare unoptimized implementations to each other!) - -* Compare all of these GPU Scan implementations (Naive, Work-Efficient, and - Thrust) to the serial CPU version of Scan. Plot a graph of the comparison - (with array size on the independent axis). - * You should use CUDA events for timing. Be sure **not** to include any - explicit memory operations in your performance measurements, for - comparability. - * To guess at what might be happening inside the Thrust implementation, take - a look at the Nsight timeline for its execution. - -* Write a brief explanation of the phenomena you see here. - * Can you find the performance bottlenecks? Is it memory I/O? Computation? Is - it different for each implementation? - -* Paste the output of the test program into a triple-backtick block in your - README. - * If you add your own tests (e.g. for radix sort or to test additional corner - cases), be sure to mention it explicitly. - -These questions should help guide you in performance analysis on future -assignments, as well. - -## Submit - -If you have modified any of the `CMakeLists.txt` files at all (aside from the -list of `SOURCE_FILES`), you must test that your project can build in Moore -100B/C. Beware of any build issues discussed on the Google Group. - -1. Open a GitHub pull request so that we can see that you have finished. - The title should be "Submission: YOUR NAME". -2. Send an email to the TA (gmail: kainino1+cis565@) with: - * **Subject**: in the form of `[CIS565] Project 2: PENNKEY` - * Direct link to your pull request on GitHub - * In the form of a grade (0-100+) with comments, evaluate your own - performance on the project. - * Feedback on the project itself, if any. +Performance: +![](image/analysis1.png) +![](image/analysis2.png) +Those two images are for the 32768 input case. And the output for all input case are in the following files: +"""output/512.txt""","""output/2048.txt""","""output/8192.txt""","""output/32768.txt""" +The test case for radix sort is in the bottom, which contains power of 2 test(256) and non power of 2 test(130) From efe4b679e3e248a32446482faf76087ef261c8d6 Mon Sep 17 00:00:00 2001 From: siqihuang Date: Sat, 12 Sep 2015 14:43:08 -0400 Subject: [PATCH 2/4] HW2 --- image/analysis1.png | Bin 0 -> 74383 bytes image/analysis2.png | Bin 0 -> 50836 bytes image/compare.png | Bin 0 -> 17725 bytes output/2048.txt | 93 ++++++++++++++++++++++++++++ output/32768.txt | 93 ++++++++++++++++++++++++++++ output/512.txt | 94 ++++++++++++++++++++++++++++ output/8192.txt | 93 ++++++++++++++++++++++++++++ src/main.cpp | 29 ++++++++- stream_compaction/CMakeLists.txt | 2 + stream_compaction/common.h | 5 +- stream_compaction/cpu.cu | 51 +++++++++++++++- stream_compaction/efficient.cu | 102 ++++++++++++++++++++++++++++++- stream_compaction/naive.cu | 42 ++++++++++++- stream_compaction/radix.cu | 100 ++++++++++++++++++++++++++++++ stream_compaction/radix.h | 8 +++ stream_compaction/thrust.cu | 17 ++++++ 16 files changed, 719 insertions(+), 10 deletions(-) create mode 100644 image/analysis1.png create mode 100644 image/analysis2.png create mode 100644 image/compare.png create mode 100644 output/2048.txt create mode 100644 output/32768.txt create mode 100644 output/512.txt create mode 100644 output/8192.txt create mode 100644 stream_compaction/radix.cu create mode 100644 stream_compaction/radix.h diff --git a/image/analysis1.png b/image/analysis1.png new file mode 100644 index 0000000000000000000000000000000000000000..441fb2305563aa1fd6f0db37bcf9fd5c3bb25e31 GIT binary patch literal 74383 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 eU$seCPor!Lj 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 z zqzGH3Qc9j(BaYX{{%WX}EVzIZ!Ze`TstgQl-C2161)dmS{74Q2g6?T;6`&w%Xx7#&U*8nJ+GvyPHrBWNDhV*8c6w*8 zfdzno81{kA`q3AJB`CKIi{e|P-{JdVy9lh3&xg#OlEu(zM+_;q0WjAqhQv*VGS zOh}bU_{1gFilcD+-h%6EK_cKeND(7$ia;A@l6t8xZybVV2RsN)8ZIXume{`u9Bf#` zqTE)XQ62H~?2qMP<41!|ZDlkZ(sTA63MX=)g7`yH0;zEEuAx|Ja-;TF{2-5?3Z*Gt zVV8$Z912Oa<8JU{wjol<=p5VMclyw0jYfrd^y1|pkB*z=m$S>f9S_c?pmTjdf*%D- z#bbxTp)Qe!US`w;-!^r$_5^XJH-7=$O->{b7Y12^XCVkp1ZXUbCZaRTn$H|?V!K2^ z+~1R)?XvnGn$f)*^jP@mKC#gGUvMGk^ya`Jh0?jb6vEnBsRW}aQ6v6PThJMWc?*Xv zwVjFy`nl_*=9U6DI>%-iFH9|7eX8D&{JwHKD=nX?zIv(T(nh@kd~k53BKe&RzQ4FL z3Y^Uw;X`xk?h731m~z~Bj+$TG3zelx5+6{5E950$h`MqDvX_|np~XP8>G^G^Jo2Pc zGKVU@%29tH@+6={XiMKplP95~VsW+&mcMgDt1R=aB=A+MaMX71aOe9O$t<~sgZ3WF ze5$N$0Lf{ucA5LVbT#Lz1D==BM8@}QG$y$mJoIvyMPPK49PBx3Fc^7w!V)Ru^+IeBU}2_AEENW z18%-ZCnWJL7~MGJ(i_}YFhov2UtJO~V&Kija{^r@!#*v^*l(9`n(X&cn;oAWAwD>` z-fYX+PTkY`U)Io>w?7&`w2e)SyUn-2&SzVhZJ~emb=qisnke+D9kBo;ijds!LgFkU(&vTjiDhv`9YOB*vK+PAoN(o^_$OezJ{JTQ$O1w-l{k zLHL|u(m?9z`2!pqh^P0>WL7b@cRMBGi}kK@V%Y)2TR5_FOA2Iu(U^MeVJKdZZ3l?8zDP2#N3o~SFc%|L#-t|AY^B%t<24VF{536=T*=^+ya88 zvPVU?Y52}1N8!Z;*~D<*xw$-ZHJ*&{CizxDnO%mxyHG?;oC1}9z{)@D;HrP7YL+># z#~F)p{CBo?F2M-N`;c0^$FGIEQpLaQ6@?NAa39)+MkWBB3U}Dt)L?zD#RYA{`iC+& z6K;7@dHE&PNltX+u8*4LE#gc*%|%w`b_~)CDCwsy1qHTB^}GGl-O5BIbfpwH*bT=^ z#Tf{+sRAyNp}}^u3v}J=OyrkMyxY;XAh2;u{yc1x8_Es%&4``;`LhyJX2q@iY8lZW zO7N6&sO}aK67wp+40@7m(ug~j7C&qT>!{e2M`yV80ks+HhxAa+NJ82*@Qs)soVKm< z!M$6MQUH4!+i04#uW0rC%jNWFw`Z=BCowLq?2?_2$$Xg-Zx-X&m-oN@;~C?p&>I%_ zH0i)#RPvZ^O+vqQl;C6|0l|Nt<>MnX6HhZ2CaGUso@AQ+G4MJr=jNa$Mq&Jqi4gnZ z;2TMk5h}!~ZZBXzXhglTa5$&>^_}1+SoAWTsILfbyFXx4_y`D5gCG;pvJ5C7C^HBAp%c)3Co7xfB(wg@?Q5Wy+E&|6>&Th5R!nFH7l|gFr%XwQyI|4z zigdaOpv9~t#|5-~A*CaypdhE4k+`NJ))|P?iHS2|r~hG6h%jOq@75?kRoXisFm_GP zLP+jAHlHyfiN^;IH~2B%RZO({FJJ$TH5^Wtma(+Y_W9fI(xU%GiL;vfjb2`xdI0CHN#A`Zd%+eN4nKe? z5_Rb)#{rF8dBO@ZE5)J!PgWfc4-=vC|9q$-7{VfD`0?vU8T0vpsut1Ul<$Jj^w@4} zKd_0U*ykj_JkWu>PGBrEwXxS7aW+T7@Ekn2K73f==BgKL3&KoFx<72zR@D}J(TKKj z_9t_*5Zh{A4!O>0%3Gn1%{@x%kP=;h*K|3rDf?OS#mm{Gv)5wIC;g>?X?5xyvyz@_ z7;KUbQoRS~WJG{RPus*u5k~~^2V3GCbL&V%5%2t*vc&kVFHkPI{M(wx>EXwUj*D_*LZ(lzTNfSzi%5+nc%0X0ah?7 z+)sHpzX{f`Z%zwnA{guNBDXb!^fh~>v~Ji`XKKp$0nRZ>WQ!@@u8*lU_9VGUIdO}} zc2S359FWcAM?B^FWi$u&hCM4DD!~O8A7$2C=c7hw+UU}~4!byLHJ*(Ahz*YT z#EXawvlvErd7dYuIz8vNYvg}`yw=wK@Yha`v5bt|uhcz zr4|}#P76b(>+zLv^}Q9g1eBUCC8C1}9syqE`^lY{Ry>q0PqlQkMlHJ2F{T2qTtsV= zhh5bLT9bfsK7myChYvvAP(;TFuqg6dHN;UwG~L$UC8_+KE0K-9LL)mgtePX+g8K5q zoWok}Qz$JX-=oAB1%dX&QDEeXh+JXLK4ddvt{*TorXWpBI{o>2!cz2`W>g-*FSp|2 zL$aUQi+=AwqW#0YCwqA1#n5DoNGV9^?!(Gf3T()lAgTV0*PhWA4`1fJU5=gBC-!WD zS>n-U1%3bVZod;Mz114dsCjE&K>Z||q0V&WWP(M-sH?b^t4{K;R!V9lnw&E}3~*H% zvh3RhKU!>)(d%fZE~ZACu2=0QR=n4#+?3Zd+DkwX|7fH7v4r4( zu<=*XblGS?f*qk5;auIrT+~$Z1j(Lp3Ag&xV1XyU$#G0?n}t(L^3NFeQOdjdyGL+8 zPY4?K883o|CuWRl6D<7FgU$`R*0hJf>)fk_vI^-qG;XZApLs5Bl7$$SkF>K>*tL7^ zwT)vnytFbK25Qll97tG{wa_ee=f(gP)*^B~_`M>ri6_yT$DhEFNA+lyxzfI0^A2&0 zz@#d&mtmp=aeR^V7_Q4AE0N7c+y2BCN&GZ&zMI5C*uaLc*TEy}a?<0$RQDcvK!1&Zf*;ysozRz=1Q_+$ z@9*~L{%d0#`E_Rt+TeP90c&vo+Omx{nX9KU6PCnhc`KY=JBmt^bBVQN5z zaPEYxM4qlL6Ml}pZ}p4ALMsmHE3m74jb2(77aZ=K7$sG2ZkdF~7S}+!LG>LSn z>Q9YLgil(>a5cr{E^OD)66{#Bt{i=v&xaqayI#gO&|cGSXN=SS8-BuTX5#3}C)zvy zzgoNQaJIiSo=&4i>7rUIl%Exw(uOKkwfCl0j2bmUNbRC_)sHG6N~GsMWk3@5@}Z*y&v&C z6h4u~yw54MX*4LBoQof4SQD=FBv^c=jqF(Ndu>q#mZmOSdB-&f7+4D1!`ruIko@d` zE;P0>i5ym^R4@bMI!s0c)0H0IM^|5kKOS}kJn&xol+{KfUhAw9f;0Zj%+u0tT5*ta zS%8Uo!F*I}_%Wt90r^CO`(sO9kcX{z-BIx6d zJRs%N%aBq+YVES%@GtkytQDGrO+*bg$rI@AFq)U|6#y6R(1Q|nQeg@*%Ljx<&Bc!t zUrW0VeT>$QvaInUHo~NS@7l_!^XhB?)1kH9OyK(NqxBC3<;~-A6`8d#^JLgZ@Sd*q zcLSM77nuCa@|l*qqy6|q@cbGt4g`YwsIeY|l6NAUQC5l1)oii;LQN6CX0d^J{?#Kt zDw%9DbXUs)yG@_#Az3}DPfx|gM1;#eDQWuH4Iee7F0|Julf$l26yMwt%Zj?`uJn_A z_8<65^K9THu6ecRMeJh9Nq= zsW$69v@xw?>t5wHP|IUJ>?=E+wBXRLwIz#6=d__=Vi8mmsIFK(%kCd$KdAX;e0`+8%BBLNehSp6ge%!KLD_#owf!CA1GkKl6C1aen{{21 zw^tSzy?30+wtM3XURcW>LZp7uRx(PJE%R^KrgI?azfIUHGf&gwk0R+Q)W+aJ~>E!Qf( z?lu|c`!mSmmRD+gL#Pd+`;80CDEr}ke}y0YPm1f5u7LEgx2(@6RZrj0P|ErBS}S^k zPewMpX+OUxfA~u`25Q2vI)2_;2=|B-q9II5I#3iQ?|bZqGjZZpYG)nc#qkvykKF6E zqItAN;JJNu@hc;!j4u}}j4u!wYSqDw?jO0%fMKNFjTy3-K#9HOBBq0hg*j#6q zo~-mRD=;+`n`y7U0;j7v|4qg|e$8^QsQOzFc4xeLVuvOy%e^n0J6}CrLm{&rm7JEg z;o4^7S?DRj6*g9TTUt#iE{1Pbo(YeMGY4BFZtks(M!puj7tInGXOfIU`rrtyYi zC&P?}xav8!*ajzhDP{g-T@S)54O(`YAJ)*wi^=#d!CR^ak5W566kLzD2+Ty>6uH$F zv@;04Q$~eqhMoWMlQz=tM#YLSat-=?Rt{GXGGJV)b}6pU)xmB3CdzCxDflyP;N;2p zDBaooJn31pFIvM;YlUjBAAouqcc|QxH~H&;#`BvI+%Mz$=kY30B)M4XE&COegf5QR zI;0Ew^aRT^&a}Z*oLY1Um97>IXbaV`uaXE$ce7XU*$L9^?r5Dil?x)UFX(B*wXNqm z%7v>k{cS6eP&r#fMy*oP5eO0DW2j>5yKBlDS(mgXI+hE+*uN7SjS-e zzQZ^hIBm8L0A%d5Uf=d`hbzBMG5f2$Njo9kF5&%VWrvrc0|62$-1Oty3 zq8U1OrX~v88Evg)sB70+!l+s@d5-FHV1+=Ci&MhkWFBU#8TAOaHh#9aZ^E4D%(0sD zYF9>=X{w8Zz$U=FKr;Ocw2?1i*>?kMwC{@JO46*H&c%4jp*<)^%YF7Vb>0eGg}o@l z4)=v}hs7G+cJpW4ip|4Ah zPCXg*I`czMU;0l-5gj=mF6`!TWL<3-|3}$Qudmf@OxM*^j!DL3(qa7T{l`~1vcw$o z=%wC-Tzd{_;TD@}j%u*l@SP>}oW<}7wdk4Iq?C0fnO|0Upk{-~E6nT9;EHz~3p5F! zp(=`DhXqqCR2=HM6ns+DZYnXgVJ;C~E#VqV07A1U`~}`X~|Sv3CbvX z*I2-uS5j!R%v}ZGiw>)8;Y*u4P#HKrzAJ|B41Yg|xhBIMWnf5YZ6MtDE^y&1P8*tG#1%_cY5&Wl6c7vDo;6YBZt~T5<6aOsuL2oSaPSCclt|~aee3DhA zGjR6{l(aZve1-Zu4qhO-Tqr^Plh~cr+p{&iDcK9viW1|qakj(v9!ePTtW6jBp^enq z7HMu*_$QY~XXo?o*_j#xANRVv0E%SfDtv@dbTmz468PJBL7-DOYK;KE2iE;ML;#BK z?=7X%-$=)HmjO|V&XyB3$p&G-vNtp4^=DaRsKD8`X76E4Jds~We3d#4QdBy z$``m>|MWm0(JQJZN5J^SujSvY_S#D}t({eP{6$(;ZFpdx`$(%ZI_ah908swzdVoBue zkR3_S&r3@y&r7HgH;6%Ej%&NMUwjv~llSgZ{x-&?AGwi+cBbIwPl1IuXKQKd1DO^F z*Z@uU?LAn*=tQtRORWfw!N&H?W#t(ELi5?5dr04Dk#lb@BPH~cWP0gWJ$i6U=xT9dZ0u()zT zLq!E~TfNcH(D3wZp!ej6^0Ef6AqT1!YEM&EBy}RJ zx~l3428i2fwY$yts!pt{xVZS^$B)_B*}B!1BJf|a_7#{l-=RaV3mR|)dys2SrtXPo zAS+M*KBL!Q%3Vq_TdL3ZQ~%=;=()=pG@`V$v>@Z%&ZrCpeh4XV2l)6`A9y%pq29sR z%4%zCG-ttx!b-d(JwVw>#5EM9>gvDK@yxpR1UCeBk&3)?9r-FAC5oW$b&80H07c~A zc!f$*QBY(at@RqWcphCIt=Tm_aFq7_`nb-OK(ME0gn_(JqHpM)QGXL*zM;V1_l)Cr+^hwxL+ak`xQF*?+QJ%Yc-WL z=rUnsV#-rvz!o^)9js!;4(VCV&!^R%46>L(AQ0Xc`$ZazY-|lE_aY$fgRU>p970+ycHNdz}9FS(fC@9E05&Ea$#jY;e-j_ymi zD}{*VfLWB37-B1Yf1z2ZsMrt%Sne$K`yIF4gm{RI#8Z~9$ddLxYhSFbbvrwA!wKnz z!4#;XzcH6+l}uRkz^XtI(q)r{Jl0xW&ZMxaQoS5HMs-mLCq9VDX7BS~vKU8z1 zlfgC~zP56AH<<8L_4+tXymOG^CyMQvYHu+IhxUz)tJ(|easx4U%acmq;tCzgd5Wf0d{Zb~< z^{ua7zE+9Ym9WU#xa*zxSpdxK15b4IPWLGkhv^FS-Lwz6&TI9R-aLIEkbx;WtD{$D1 zxkpWXJJN|M35LNgIA?NL$c)q<*p`E#SEAmhPn{Y(rYhr$VppLTQz|(xe zLd1zLL~_7J!Kmvld$3lJ`|AWZB5n&$M!dlDg#kJs-mY)zjD;T5sH0JEt&r3)+k4n) zdl~PmM|w^iNHF-I?Bb6Bsh<7V+bE{BCl1?Dj+n_|2QlR6ctx4GnG{h7f)S zhXa5U0p7XTnyCgv?!&@E$E}*RAdF} z4fE#W4mCgJ$;hD<50T#YGR$%)b+Zrrs)5-d(BiA*=g&W#=GD69vi61g*B+?QW~z9* zU~^sx8C7{JJK$ordaai42`q{nZAi3w56>8yI>gJn4?}E{?K?Az)AxQ(O#Ag%on+ro zmN+vCl$8j5s)s&m4AMf(n zYiMgT#miI0$Wj~Ogy>MM#8xuT{rvfJWaN#uw#UW(0>BCPTu}rlw!;n-GUx5#T3|Ju zTz0e$#3w|q;8&Lj#3fwbr?q>LN_n8Taf4R5Xd^{{gXx?=D6tUjQ-dI3~h#dJFT^7l!RPJ|n({Yy1I@SpNa|5ElBcxp5D79U!D3n*s z8DTh?e^M*4i}Ag{sx^96BfHlF)mymHBNN{4ziFsYS;Hw%ZTH-O1c|4mK!c}v_ zM-12^7ksk8>x`G#4_XA8}M*siayC$bs0 z`M{k$Jug>#!ek;q_(VijEa0mhGbJM<`=c@!N=$@8ODj#=B924lw0?Jp4hH0Bn*3lf z@Jj-u+#QKd<^hMYEs6s79k$=JSM3-dEB~tH{hk3cB;me0d6w!|EZm|qqM~?8yGE7~ z47=K|uA?yTiVM;bXjI>_hOXgGg(wOISm|`O&o8hjp5_-b%4m142?fAz#;=DZ71{_g zF1~$!xn~zx;$@s}r~PEee5ry5P(qvZf+=tjK1fd}gCYqs35Pxp>4n6qqj!E<203A) zLCsqFUP7SlFIyuo>zPn|a`^Ad$-Cg7)|lk8+2!#fp}W2Cj;AzUD9Wk$mxh`X6%;pF z^<8Mq-uulGQ)FLM`u6F1+nv^GOPQdx=-%r>L7H=_nrHO9MjW$nsckNESN3>(yop&4 zPp}0Jz}%8;ZGe?OClj`MQ(@G~YTRbvS#-EDm|9y~ivcitvqwc;d0kc2F?29h8|VNm zxP`^~ufEv3!yvIkaf}fAS2FsaG$(h=uwhjK0=*BPED(AtP%oNBC+hrCqBa$f&N0zo zEKj~0WiNgpPPu5*HpMs;($aIkCkkUMI%fyCcYv*8S@-wZyB?{EIDOk1($=sH3iv1vX0hu+A$_XA(A*mMEvGIzF>FB{G6OH zY z3K4R5>;IyO@eJz`MPD2IW*Q-#JL$;CQ>0-~ouUC!=CNH)3Y+p*;~F$&i}3^=sXF|? zC?IioVroi%I0N8X7aW=vxb^OxTU*MJDZj}!9&=rA-{w?5pV?SbwWKYgnx!T+ zp1kI!1n?9_p51eJXwJHS8jsB)D)wlkKk7r0Sqs+ByXuF{mw6lmQ&T^5X(ks0YTEXt z2U6_R2RF0v0Nv%cS~msOC4EHoW9fK@q$xl^ukZtV2z$igK-%(t`x2<6{Son%mcl22 z@EFio!hSLd9`|j;xa5?WuVuqZ`k07I?cDVTmy5WRP1d3l#(nN&%~k9i%2Q6Zkg76nlw#4q)>Ow7N?gaG*8UVakzQk)#LGMa{@vn58P|SM zC_2(HjETL^AZn~kd9o2vYch(SdYasr7gsW%i~pM2Zc{UoOHm78I7WI}?~J;9ZI34o z5h2{qHRJ3eyw0ziN8z2KZ6i$jjo_kLc@D+^bHFvdLZpK(FFz@9r@Xc!v{Ggrw5>e*UtjMAVb0Xz=DCP+m9o5&oL8}-D>JV~Xw^-1US|n-o%Lp3 z;E*x()^>^S_R-v$-NmF4-*-LNT%!-$Z*CdQceRd&j#|Q~rUKT6p*)!k0QH#5k9LeRA@*lS>Y`D3s_gMu<&vn{#y*jY9@bI1Nw8kS} zV3;4#o@(u{PwNARtnt5d9V+Qg7x+Ra+?+j+3{HMV(Rz*&X%=heyvO}z?f{020qo0xS8X|`0j2+j-6niz%p_%= z#HvObX(0 z)(RmOznveAZ_dCX?%@T#Qs_8Y&tUsv7?D-3;(=58keRskYm-S0;p6?->a%!#-;T8x zw%p|QwF@AtE>VF*=fC}&FS&v&{e9)K-q7QL)t>kv2Fx5lS_xQ|Z`@V~1C|Cw^IIDl zPtR}=r^%NKG^D)&E!Y02J;`w)lAjWN?uT8ssPa90ohn{2S`Eg`A2(i4AYxQMyYdJs z-?dQ(=BQj-T2>p{a&A9@UebA>#q6G@v>kza@+uP1X;Xd_+_oo5xZ;xvT_+nGi{(_T z{+1X2?6`3=wq)?1hZ(-HV+rkb4ggATp6g2^3X33vh{u zbH%x28=V35<|n;Xi5`aIk9qrt2~Squ7aLbq!(P*>JRe2jy%b>y;OVb}KGG#cACsPP zZ?)AJ&r)cg7AUjbUG)ga3jLy)X*ZJDSNn;i4s~}DydiX;qgx$kp_^b44^2r)`DtA% zOT7b_Q7hRW?;jw`%ga|7w~vmDj5tc{l>KMnU2wzLdAN-RFUGhJzqvctw)xtDHZ~Z#NG4U4RAxEo{ zI5=J$R2*HhL>N3gyu5mYH>>N$!AYZ^Q0g=SuI>>2u}jQE?HmqW)C=X}Y?gc8Ay<%v zP!+agAq{IPQ|R4U>|-CTPXxez1P4o2m|I6#ryTdAtOeivzKgV;GaSUhe)*#g((g?t zO4OU*TPDINn`KWhDV0Y{rL|zbSF7e_GUc4p|NPyN7+jGJ@SaHoOFp@VehomkE46{D zb?xReRQRw*3Y|=Fn8-wL#rxikoX6=J?{H2Ou=N=Lgi3ZVz+*~#FC=fzYGYi_{k|IN1)i9;2sr@=eAfqwjxz( zxv3d3)n4oO(pS^Vf}a0lrsWuquMaEwsc~D`L_FW+_rSN&5!qxUW7Bd3oggWpe37;Y z9@N5a+twOi#_F{YNjvkG;0fHhX}LMpZJUCK{-?VQJI`_yYv?YH&tashm&ZPJXX~#A z%F|OcNU;kblZM<&{qXUYUlb^A`0b(j5b70 zn*M#ruG@v}#Ax^A7MIU_8;3Fe7S~uQ?Uk6H+i6w&YPbhnjNN7Og^BZe*~dE}*L2!$ zF0c%9re#{+wlQT0%gG1DKOj zK+16Z(#ZWTS9-z-Q64`|E~vi=RW((hq7p6trrAtZ#aIx7J3o8U#g<=|X~A9EIy~)l z^19A`!TWS}EKj0$D3!2^N9ZaMgA06~HJkmh3bNbocX3_Kaowz;uQB4R^XawLI^Oi@ z(>MZ6va5;+I1tcnpjpqp6z2SVj23Dwm)IJR68CJWUj7b)&p&L9zfy;klyrbS`#yKD zOE6uaascFJnmrDRHHx>kwz4FG5O8?WgmtZ+9miZXrv zuQ!TBoRnYJ@6WS=B}u!mdPk9O=oU*^%E2YF*^~~EDL~IaN)EUzHBN~XcaaX&SfO4q zGTog!8^>Bk2K#sViO;M}87P zg;<{oo$GHC(LZ30`i-aDW^!5LKh=uUTC+JOq<&^cZ)>LBlYBzqf1yn^+GCpM{JyRu z$%({>ThP4I3=MLSI7>~yIZ^jwiG?=8$miPM&l1{tmF-2=V2Oc!QO!G-;QAhL-?Bdp zQ#2e4FXc89J~^1YK!%7liupTjU1riL(yXRR;SKvgPt{Qa(3Ot-ScRv#_3&hsRriC4HWZ7Kf|I3=f~F~FIbCtj7&u1!US z^Hk9$-C~zPXR_X5>GS8$0J~-gx`hVks%v>Y#g!ql@RnX4e0yH1oi#y(PdK_XB{)?qK{5M8NP(W-3}I&sBswLm3V4vf$;j`VCmxgd>=@azIyel zBxo*cqVkoWpP#5Arq&>iQ+V)t_q;>Baz?|u!-+nUhs|!AK0Ik`Ft}CcRRl{ZBD#h9 z*I=b-WH)oKBWdLaKard3>(UK!kYLkR^PgB6TIds_9K~BYX`U1 zF+Yxpaj-qg8>X%EwNB`V?lvn3M9D~dow#`{v+B5{TT&g)TmuSL8`Dj(&R6fOu0AX@ zTY1j6neOdF{C$$9ePvG02C4M;T|!q__BS!A$=Rv-L>)RJC&fDKZi{EiCX@k-;TUkQ z`NPc~TnA&sP6&4;9>}Hk|MpxxBFF)8TpyFF1T&X=n`jQS;L~=A-&&bKB4W_Q9JwK` zNqzf=C{%8cuyQ;{$!JWXs8cNJ5liQH>rbPX{k9&AhcNPfI}Gw&R`B*~@qr(&Q(Uxg zA8rsj*a>LbdDfSo&MP&+d$ON>RQU2NtgQjk@Q@>eMAdhvRmN?b+*|+3lW#@cK*h7>Z zBz*jFpd@-tnnF~^%8gy4yY*42Qi;j5_lW_-5DhY*Jjfpp=O}a6@{S-EL8N;uM$6|( zo}P}Y45tg#2XyoLy_gfm%o`qHY23i&)8liUR2aWh#hi-VAH)nnKMn%hT|h6 z-`T@usjbfr>#T3MdYk~p%jpd-VusLC;kbl~%$Mg&<B|+_Zl~@A25XSObw|Sfq}7|tuI^irg7s!)n|K~Uv=j9z$D~nm*i6d$ zj9ONLaoDO@yLs^;j6*~bb0;Z%OrC@Q3}v|$!sb{rzgry^Hv0glBtVvLYAxgQwkfJT zP@Hr8l^zrlJUyTth)E%O+)5w@1|o%x0{877LYTN0C*H}nG(=CL8OFD zhfH>K*Ua8NmxtKHcZTd@KgTYh$8?_Jh2OFUQifW1>_k!%lz|NO_k~MwET{+K+P7`n zOg_95dGhe&b#P4whJFqS$BCAe_Ti7dMSH=t&Ldj8akdeYZ><58^t7cns+)Y?inlPr z1L?*2t4S>r^H0G~+G?(9W_W(wZla_bI>hZ6*I6AXQHA>OZI0zBB(kP2-i*ECY?iFo zLyja7b~B>Jzg9PbIvFHiXFf&-50TDveNj%Vc(ZRzoBD{cl)zHrB@r4rvB(>3vJyQZ z8(1UBfnAxQtyq4~kaatyM4;_rivTU{Mg-rY6;CBgrkwZW6uW**wv4BFa6m!ZvCW5_ zKqvI{voY@eCGXR%(N_3u2)Rh-ONsuf>L@bU5UY!lPM5rr{y2CeK~1?Cl|l8k%8DsU zvN8`X1hBG9@%_ccjDFZ{J3BjC8T}9!k6BfUc=@xfaG8U6uM!^XNHYO!Scon(^?AZA z_`S!)j7b=^-|FaCpIdRi{!U3apNwgwB(n^2$td^IS&FD{lXOmHhVRzT0(~^w&!45S zoHpeZ6Lw50jN$P~!C$btX7sJFPiU=Id=2w4F-WXf0w4nU6=fQe8ohgQle6D+GH#ec zjIK)$S8oYlGn1Mgkt)cue#v6fw{u@9(E5W^ zJ$smAnGEVe;njifU-*$+ohzuLLm;z(ot>Rwh%KnCL~ub_=38$dWVG47AOu22CaX<% zQjXR^u_iThoayDnyy*m5gTYQ5zkpCC#8#jklQXn*hBscI)#Ie!gPE;NJU5-y8Q~MM z&0xSVg0Z$N!S+}?oPq=vwQ400TUU9_XL#s*ctSxU!~0Nz>dDC9Ngj*HnP#SpuAln@ zjNrTLpw4!*{T!u=QT?KhpI*@#U($`C@#|nhNmgH7lA0|J`WCU#GN$zj0}>(&dzP@K zu@k-`|H~I>qtWCqDZFiwi~;r#vq38`)P8qMixK?vSxpKw;g(a*OaUzL%G~@{o!y+? z&4K7WrI44Qu;B)Z6)I&1C-8_hf-)W`{%uVPjJe`j%w{*EXLuLFFz4{VBU4SB^}G3NE7##dh;L>xweQXpVl5m~!ZhI}M#-p^#!gJ;&J#pLD!-E{ zEFRPFa&!)}@+zUlzker0DY@}|gK_mq#D2~6b=nQJ-q*Xt8u&9+CghEfm!=mKxCyY0 z&EIqzD+L9g9n;#srJV|%?nU0L*ccxJ{$=!Hfs6O_BDRv>`<9QTg`c~unf{a@VI+l3}H0ncM~*y ziC)m=aR4t_kx>(O z2XwT%_^)yGCnS6AZoj9c^pQzKo&;dBv%;JSEZ{SbshRueWBWo#)==q9YQ9 zQ-XigJcjE8`!R=lX~OfH+{CeRMl6`hJUdD2?Rq8bvA93P9?)RcD33%33m4O#pUHd7M%Bv9j{hzuxjIF$LxIK`9#nf zKX976&Xh2g?uVbaJE1gK3Z%1n!atW;*xyuB(G2)2zSO@`@4AbT%%Mz}DAZIc4pq1y zlDY$i$WzBmR$&@`yBjB*_63e7Zokt*U-ass&c|j;tTZ>B5r+qL30?e#c2U;yUB9@`asEdn+?;cz2z>S_W_f?L!V!)CEBx) z7yDBV%G(YPYf+vt!SD~f#f_hWCBU_lrlgy7${c9FlP39G`^SNCKHo0lzAE*dVwqfh zJNDRYxl2_w*0X+8EqvPEQJWbl5J+pee&FjEx~2p7{%Fa@AfS?PaE>AH&ba{ZzL?nv!@)9*m7cbHUH3t9da6yD`s=Kpc- zRHY+C7Z)s+6d|`HP6CyyKA1OX2g5 ziwWK|9vR6_f?qJw!&PH##j&2(10}^a7ksq=TK?^Jz8frSP)?hsNg-H(-qotr%(XC{ zxFphy;fioz zLOX%@>b(9c19OyMPVbYqYr!E#g#*9uL{!(&mryBQ{xQNK&Oyd^SZuuNwf!4{-(?YLc1Zl%DE z{<>s#Ot!49kV7k8jYGGtP3r+MI#^)j?8$8`xKZj=x z$F=R%9u#%I(?bS=iL|ued(67eZ4N&~*v+|LpIH6A8}jlY5$fZ2|59hV9^8$hGtR?c zTGy7yLcr04!p|&bn$RhDTS*Us)s7bQfx&x8ygr|;^4y1W?GklX)OEWOH;wZlUD{h} z%wnBJA;F-w)i}!7q%x5GBI6OW1g%{$ooubO2|{P#iWW~{@pH+~iux8*3w>MFU!6!I)1pXhkMw?yyzm|t^H|uT&jzmjDy2{)?XC5h z^l4k;CDqZbv9#`HF+l^N)*4Kd5o>RpTwRiK8X3fXQ<<8CvappFPYgL{B~%avIIuTV zxyI$@=5A*C`vFHBeD?EJl*xK!bbQLP`R@ zy)$=rZj5ztd<`E4fIoA)Yt}SZgra9tE@)ymb~kw11ar<{H-z$va_il)KdI;C-rd}V zPa#Q(N%n~=s>jX^N+Q8Kos-$#He(yWd@sA(wYonHDul0eZ6^HQy&GC-b^5emNH|sL z*`uSbKI}lBS~E4>CTavAPLR-S;T07+%=;51i9KfeLz8l6qv|CSm6bs5{OEhZUHXyB zJCnOUw@=Ws!d)%n6+x|H&3u^nN}1jb|qvy{~mE7>~(y-;S!O;sN9Xy`zZ92v@rYHOoLcBg;<6O zQ51Pm$GG2_;mx4OZx(L18s*WfGJCj6~xXH!4qL;$>;A;Bt$6$(jg z-_;wmzv`nZUtt&VJ_pWgH~5vQqWKRqYfLMX*7zf&*8l`U72?pwA1gZZzENO1kxord zPvq_t*mnD3_w|G%fCToyFFA}k@;}-DsorJG5VNMV zx7#hqPgf>=-Fk$;uIV47*~d?x*o<2EO*%gVSh9(qKMy^G_NZ|}n%s7QC=CGY+}+;X zBj-M_+#}~W0OXwY@IUARMp~o{W^#jPKdOG(d&z0YC)|pyJKdKZ*MHb1SpY(uxC^fOC|0 zeiB7L{my-STd}5qUAk}YpMN(skoeVx`12JBsRqqb;x97tRj+B%I{<(9_tuE2Ny|Mp z?Y_BEcLu!1{&y0j0w8j5erqo(y0{_4f%*7PA0$D>?t7rdefyg8+5lNFd@Ni5y^9^a zns<0X^TDQItgzj6%`dL~@+bTY$-f|Ly-^fmV%?JL9#x`*~-g9q)<=8x(XvcxRg zOa=3XB#yM#s0TQw3-jVaBu*GxFXXurScqd`P6l#_Mk`5P!3wUvacD&rgUNn53jb2_ zFHFeEKbS4UQ85pU{r7^k;cW1>MSR~YE?2ir4_YrJr#p6!sfPw{Uo-YPk@hmUtGIb+ zeuoTEtLW>sT>k!N?2TZ@LhXZ1FKU{*(#cSERPU-BH{Mmy2uIuoY3^w}S1>)diJ^0U zy_bDCCO_;Y0~~y!F5TD+T7DRn>yv)`6dPMaxO-~Q?E#&F?8+5l%GBacHL9VRci8|O zGlj=?i;(lsMn)oC9Y|cdF#g~vJr#3gDA$W-fIE_(e)Z0 zLHQEgTu+O%{HC2?JdV(@daei}Q}1^{eLFWblP+g;auZiS0yFGZkpotGp!?3*L+ZPi zA4@(ZVdmafF5K_r;25!HvISMY2$v>`;V_$DWfmLeaZSwxllj6)033@PV2K08 zTV-*b9GCG(d*5Rr=BAOxe9GMj5ZdrhoyVUVi4w*-OwxC=Q70d`X!cOicG)lHUDY&@eHqkH&x*8+bzQpPGym8P z|Cxi7`ccJx`D6aUWVUu~Mwi4$3NgRya~z9(HOb1R&qa3}e1(^U%%rn&BAmtT73cmJ zQ7!B}7w1wwMM8~S#(qowPC+fKF4_h!xmU1&z0{5oO^tDZ^91n@zDTJI5sJgw*_n;A z9N-|PHMQ&i1ox}o@6(5|+X;+5XXdsPB^zL%$sP-jQa@#RfJ8P0Fr$qX*9ML21L9%p zyPo?ug8b;RFUR1I8ZCBd8*Rp_{ym`F${FpC+Fx{cTj%^k2Ov#XMEG;t-7&f<%B`4a zjW{%@@kVHI3?wN@?d0)T__b9hWjXS>F$CJXIi@ggh^GBaXb3erENm7sv5Zcw<^1|_!PpjB?V{YgwO(B8mFI=(3Z6DUYL3?GahFE7!0(6N z?(7FtaG^^`iiaKJS2Q;ZE;C2v{$lfUzrH;BytHg6-fO@Sw^_OSXP{=>elmEAF1(=N3*UM`D1V74eee;Kp0rHS445IQ zHvl(W@Cr7;WG_MK3)`)?FEfs3dA3*w5A*h~aoXGudM?1;ZFN^VDq%KH$&8LU_I~k~ zQ>Q0<=2#k92U4oevFevRTql!(_~mQ<>CTOKdp{mkt(1B=J%lf0z{9gQXpQ)p;0!D21Z51p1RU7KxRpB8uo^lI=rusyS$E^5kZG`z7dDA5+SW*lc(>bA`N z4{#P3?Z|4A!!;{Nnb!s7v4ZBuoVv^=Q^Tw*^ik}$5-BZ+s`CUMp~a-I$`|{GEkQ)` zMsv*Ug!)e*)d=$qIKMLwHd0h~MGJ=E14PsAD`O9`Et~hsPmFiUyLxWM(TvM;v^wsks*|Iysq5I;imsR9%t^YaCr6%ZgB@n&SCxg6M?80#bBfQs zgls5bV35{ag2eivhcH^KXXyMUJtQt~EbuA# zHSQ!$fln%!=AQ?-rEY-aWtZ1jdjf(mFts^E837^opf^ccE*tr*G;0-MU!-v&a=-RK zGmJJ_f78uFf1tl7p{}&~;my53UGfKJh_afH>S5(G59+u(wjHU?!e1^8@qkiI8T=JO z(I9?`g*_r(HkD8Qnj}{fLxJ)v-=PxG+3!)w?2oYIU7n{r!7Ihe{bzz(gIF?zAC3_wc^=Os?RX=k-tYV%cAI!K|KMFsCY+ujrEo{?HEO^;q| zlSoS!8=92}brioPzl^YAN~?{1zWoTi_o2)jC9RfgtT{ipZYKr2$NLeb)qTA|+L^W2 zsj-iNLf@!3n|pIP$t@qvBdxhuN&j9`CKWIb3V2=~#;^yPByGiYDRhQI{RecCl>>TM zHXPIf!UaqMcEe3sIz@m@cOT=_SE;Xt!C)tar|CIQF-v36LSMxT=l;(pjXsIc!|#lZ zU!VRzpJqIQVXo^9Pq48Er_C*}hg$3uphO9iFR1S2&y~F(E?AyRRC!cI4m+P)56AUh zZ+(8#uV3Q3DhC-7mtgOHeG3KHggGa@Gnr|_o1S~+%V5EM{Rz-UW?bP7fxK1Nb-cr# zz8Gux5)2M3Ty#0y+$NjXpG?rZK9i*xXQQzt<<`9U-XBfDh3+5cCmph_>Sg05A$&>K zo?ywWpG^Yq5SyA9%MehU(l>s|$yt@1{V|x4k@1w|TE8<9;c@0r+q7h=Ww+p<_BlfH zI4wI}k7k%*HlAz+nr%3PZO=S=BGefnH8*wt@qe!V^HHSz<-AUf?|=LLPlpJy6-d;r z1)wZE$dG2gkGH-4^IC?3fSX{asH>{F{@wYH8i3OJbuBFgsnX*;X9j}Rf7<(kQGVx` z4?PV}HnLnj0bHoKxHw?%{@x6GN*?s_>_6U87vL@Z9Vb{ENj~)jmg|(fuH4ro%%#j2 zD@1c2K-@RS&yhG&^uyt?DbDI6;;dY8d=b$&-wWO+`5gG4y+MrU%o^R^`v4P4i972EBhh^xoD=ViB7U86nC}m_;C5QBh^{g zTum}z^%b7+T!Z4m6@gltcqTnw2emANI=!j+7)!Yz?w=>Tj~vi-!hpl)C|G^ReD3s{ z+p3w$M=K?Rf^e`^9d#rX`m)VYTt}mqWilggp)(WrB}hQqGB*&!lq%8?q*+p1uzkLF ziqWVDN=#wtJ2{Vz z)41isCZ2Z&E9J~*t5KmwCiW!uyRLCwcKs571g?Fg@SP3(9;obiy#t&HE63qR8_@bn z5OO|SGOc@5_#&_TBPWE}f|#xKuWOD}<^nvAN8M0g-OxAoj)CEJ!powTO0f2o$&0Wt zQ4eamK#H#Dtshmu?4v4T{k`-9W<(o(7GpX%%o2a)5s3wWS}I4_{9I%yYt`3N^^3k! zoz!OBWlGmh(^Td72xnMNt{QO8K8`_aq9j{S)*q{3km$<6U|1(EtEiw%>^p_qj|OtR z1}^`{PbVOo9@*emY}4v@U{5VbPL5`+r&3XrPmd=HptbG z?-sM+NeW)orlakVmX8h2R#(Rj@yC;My#7#11u5l@2&U)Y;YkVAg9%8}#zS{FBQa_H z+#(#PUgpW=&XHNr&`=2UP0;Z8KWF~KOh`4sfXog3xNtQ|zP`3Qxlzrz@;KdW>9-h5 zBLYWO0%D}!X@}|bb8_-I32$lD7@3*L-;t%`RzxTp8*6KW4&2;U6!jpi<=xUF5FjP4 zrKDJbWpfLE)!1qHRaBYQbTAnnZ{}a{&SKou3$2=pvn~p#q z9<&Yl3^DzE#CtBv|4+>sZ~(Jlh~kKJ`tna#PY^{W5}1(k87iu?JMpqcz5N0e)qifL zAP`qWtPfA#{GIn}PE14dLnOOz_dZ$}fp1#;a?0vtk7Yyti$6W0;@`TXC9KF@$Oqfh z?EFH!kHaRcCJbn3;J<>Em6hR#_56*-yQ-M)i=6`3_!HK3w8nwL9krsA)YO+$RB4W= z$^~jg^M-#E*8B3#E{6_58G{_#;TBaUXV(hTx@K0?(I<3MCOOd(v576ck(oT z+lu@ViA&ef8VJ)f`>2E3vp+I;g+r7YgO0f?svk?dp#0x4!#C=swMk!wG#-3$#E zfO@-hjRyrl5thBZ_7m#_{)l3`#w~R;%<2X^4w`#9Ux6+5P<8LdX7ilU5=VHAARea* z_CaY4XnI{IbB!n6Ji^m`XVrWp0fzYw1MY90LV+?oiX!f<$ufPwFx=kW0yPEqNw%Gh zjg9>L{H7*B(L!vj9?neX~NQ zH({~6$ZFE0ej60k+P}Uyat50O$_}{S%;h}PI%N2q!^b>CQ<+dU)F+W@R%cw}x#W=a zYJBV`o;0-)qEPV&~TChESYL|DdkJt-t_Z9R2Ovvc= zQtgXauv5ffHF6Dh5Kjb1 zpHAl3c(*>GhJgb0j4Dq637E-ERd5FG6rM@AdCYIj%&M(di3mY#BqW|vEPZna_6B-Z z{fuIkh}-ck1Ofp{Hh_!~P(K$hZ-MgE8Y_PN_EVihy0Ro?Sj^NTQo%;2rmrU9n_1T! zkWrWVs)Fn7H2a{?mkBl1il=ioF}J)Phgqi###&eratpZ1eC&TxB;T>wF?;Njf>!C% z>B>#G_oZ6zf{VVym|qH2mn|!a;%8E}!BP zPW6rHITcQL+UStZGamW3jakx|6Z@EC*k;EGqn;5#ckJh5&;T*C&LHcAmt&F85r>Os z`yP4P<%-+@P%Ne^%}Hm56h*+^tQf1``k^D?=*7-vKpPxTp>jPm{rt~G(*x1<>5eS_%g4aYjA z+T=D{@BTv76IqH_{zkvWS_}Pc;T~IK-t^%9^ITinS$nvZT^@mjajsVmYdlWv83!Y} z1OO|Rw@?Qf38r0jmCYvPWCQ62MBSZvQ!HYUb&C1U(neOdT=${E&@Qwk&L|suRNCR$ zW|jf-LFV)?Cdr7<`t_0fFAg-{A7 zzT|I0?fZlOa0_>NhYIeB_PkEDuQ$43Rfh9g&)$jj5t?$T!2Gx9Q!X*Br0__reA_t} z3kd=XK6FD0cE+~>E7Mrnzj&A|qfm9k@v42VK!~7PROxYGOGx*e+=bmGsc{zC{o9M= zynv)=9mN7KrG(6Qiuqc?vk<>Pt-X1k<@7qVXyJRHKNB$5*!I$jEm9BQ;WB~-16MFwBv*m zqptsC)D+Wwcbp@ZFL}q8Y-hk%hV$2q>U=%|xp#R2GEV9g@kMF|gTS5GlK)VDoDa40 zVIUz?uJ(Y(mRrS&(gJNJrNDZ6y0cs=Op$ZML5Fq19XO!?TuPU3fqsLNfM(z&7tPgA z&>$p4)r}Jte9KF=C@aam@cN-TWmugkmkP;IqZLBdAil4D=Vw^8GBHiVq1(^W3OBa4 zx*GM};V_&syQIGk`FE;rfZrPeb6g`Ep46Ck2V)NnEHb|}BmbVYO+o@HCC93wpR*NJ zL90x&^a%ghDf}nw5BsxqW1@la63Ky2#-pE)RL(cK*-U>k0SdAA%Y&KjbB&|fQXEXP zP0-+U=eks-m_M%Gmg(yO`;LCwHtpgHzS1Da=GP`N+c#HoXLCTdb=LL(QoTp86?6m| zIr6;ar~k)9zE|!7tTWcs`^e4ig8Kj3?9~MD(nmR<_WIu0c+WZ(<+3@nM+N@l4vsv# zynMvp{4}J!y}cTSR8U-2M)O~v0~7%jfP)e+Xrf)@|9J)y-$e%FzgPeu5E1;JRBvZf z)}KB|BhgRuv-nxcotnNW`rX#SZwp6n=pwj%kL~n-Sd2|``*8`@E(4A@;FtnFBg*Qh z$8t47{akBQvCe0`w3ZC!sv9$gviRhGvqDH@0oALZ~HXoOGabK zfTuc}2n0zetNH>zumt?VY;Xb;(J8m9AIc^`Lk<0eS$eS}CHvJK zWJ&5_*?yY-h&bBqMOe?yzq>>h#?@={Q(H@u(3n*d)qghHSmQM#jTDrapz{lCl@nHL zV@afi91k-c$I;f;ds73%UYrb63ItM;KvWZ|%<^W-f(A$H-?aahP8yHVOKaD=g#vqA zujGSzq2c=|lRa5Otec8Mff8-w0*o(bmIt}s-}?Cx`J)LT1i>eJ7(5L`NCP-e#IkYJ za$eS((@NHEWB=3?VW-@hdBKhAzU zNk)+K|0M$G5E-a*GBl6 z2{k{|H?rvC``t-d5_|G#ET45gQRTddiu}VD)@>lwXGNnB0cXCcr+*&*HP%VRKmt;l zzoFH$2RjGT4aF#b7Nd=_4Te_t|q&pYgu#oPKZ!W;S_u0pNp7VUa_kGtN{!m%>nrqH^UvpezjO)5> zB5fmO3oDk(e)b$FD+OEeS^t)yogZ4<}e8CX-nm$=x$u$4t~f)6@j{^a+bEd0qa90vXtqd%Onksl&-1TZ<5%&&kaueWu#==JNbO z?LJD_eZ_Zl$#nfyE(`?iJjyGOr{ER^FE6>l$i;Q7la?0^4Q*!SS#3s+ zYLzhmpZ|%0A=^p&9jVLy*B;YDs1H)juZFiG2D+`8Eym?lYTe#edZ_+E?~khl*ktD9 zVE#`TaMNd;*|pZI?>>~<=MN$82(Q1L)nTbVY;TC8BPNhh+?v(Vm#U5(WVI@zq(p}H z$=S*2`t|GOpuvF~q)?aVZG2o@?ki#`n0;aaAaZ1?UiYt=nd4U(HQWYz3|Gzz{@~~~ z{gBTmLk32gjijCVZcJO%q7lH>Y{UQ>3q%05pvUr=u&xoMP@HH>nICnz>$!_;h^(ln zC`jAYu>)QaV}8ORLapD>&Ky`885uz!bm~@rSuSB|SqMn_%U5io$PcD_ybq9JWWP;I zx^JbabRc9knwx!I=~Ie3X_g3=@|%^! zg~E04mgij`Vd?BW%8=G^*{kb|_cYAl@}uJ>-DSEE7qzkmM6Uy}4G2#(9pO*HA0)bx zguh6<>l2P=lE^qa8$4IWz^l2?C3ZM8gBR4B35~Y&`0@0!zkgT!3%50LbWlIvmz&x% zGz9D$;MHgDhWqi`)nR$ts_GlOJMu$5XwFuEN4*Fl)FRsKOi1s0`CL7M4B{G4S zYS{hAQsykP7#m6v+Lz0-*bAP^K)mIM=CFk)6zGAH1(zD%iTh4*&@HerRR@IioSYmT z1-WcFV3_tJ=zrAyOAr^^?<1MTO_A^F30HR_*04Eh#YtW73XgIMS3`edI*JC9Ho$r% z1naGu`7WaOiWBBrv8V}j*3}mZB0qkHVzl_oCso-bXg&$w4aN8#&NI-NNFYTjV_*r^ zuwtj151%dl#jiuDd;ZRMT$K&h+!O52d^E}7`OlnfhDz3ddoN;s}D zn~nz7^Ly5ZlazCMmd=xGNPgBL^JMsl?Xd~#69e`eSg(8a2gk=1=|*WUe%)<5Y`9UD&&%XfNH(i$4+86^4moeX?df>zVTHtMn3%$A6lobKLr!O_{^) zQl5If;w!VwnU^jEK2jOcz<=IGxo{8M-q@@bT2@v?6;xLP%Fawr?*+>!F%-ae?jm(s z;_v^wMpC7()^ukHr+ar0vgjb-i#xwY$%3|U1%lqGhJo)B)AB%^V|on$TiEMe8qcrk z`d2SQU~ouC87w%dBojhAV@6+gUc&tN2O9t|*r1}hy1MFyT@#a4QWE(~jKcNp`&9c! z=vz$x(}dxN2y^FLycW~P?n78q-t4tNxFgS_X^o%`Uo0YI$Y=}4=tGR3m%RqJ+8j+~ zhO3gAtMO`aE+YW^LX?*->5G*=w*W>yW@yK;oLx?RPFo&WtUgJiEhNnpI>#H?t zhZ1_Bm>3c$eZPxmD`T&ttc6BGDo|==rxD7F*+Ay^HxQwP`114X@)Xg5E2Ol@%b^XM zeWRux3k9P{S{@#Le#wFo53=Y-ENAa{%^y7;3oV)_t8Nih?trjTK4xO0X==UytL;{| z4<(K*(_f5YNK6B^6;(%eirB47rO2H{p+AoP;;$oIJi;nOD(E{%2L~7@5mf*<&CwBE(mgLE09*0~Ffr0F;`v7rO~kxRY}q`oLEW{8_8oHekT7Ml z+Micj%ZlFQjhdTRFbto23<;cR8~c8zXlRC|0(Y&F9$kP}%ejJda-zh=e(|D0E)6t& z5h2!>x1tC{^!0lgPyK#KCBF3u)SiF!Bn3T2(X96U1CFY!c_|r=4QG52j#iQf|hbhNyY!pRsSzj`(jUr})~~?%B9u z5*KNP4$K9%?dTKi;%B<|)OY`Uk$vrDy^teECUmIn#`fHz)q_2SH#C_mPdNL^_#-Mf z4#dW4@$47M#vS|1$H}Y$%Sh`w_db5q%EN!SLMcCRDp`{6OED_Do4w_~FCy6mnIzmj zJ!re#?zvtnOrvC0KI>MfD?Z?oywb-K^NiVLX|D6t>M$LxE0@K`bm&%7TCit+s=sj6 z#H`_Z%#q%EFE303?hg9%fPL5K=ry;fP2qRvNa-2bLh#3U>KzBsp&6uuq*J2!s&EZp2mRy zk=V(B`EYUQwXJ}GVV6r}@vnwX}?IIGsP_bE&+3sqW(W2p;hn0p!4 zMB%=1Xm`82^=5SDK7>omzWP1Sqc_q@vt}$SHteV^;HrV-LLVOexT$VvD02U%BsyQh z{mjxIfoqkGt_OX&=UwLw+)jIw1TEv%nwqn_5H&KQGboayiz`X7PN@aojq|uO=>zc3 z@`yEuQLonmz+fcqpS-#bCm<)cr{zRxb2e*A85d2l`M3=9L{b>$`xzGz@*ezdXGjQV z3(6=`9}-m+m9VFy>i~N0>wEGP!ReoGNh0nfrOpxkppp)Ksoyb?{X?G5zo5(Tegnge z?I&6p?M#<~ldJls}@A;Z+?tL3wT|3pv*QK8SoB>^^Io=!GJ_V$O#NvL z>FKJ@X1eY-Wpf|ZczIRtn-ZQa+EyRgx}Hq-ogYBXJ4S`23r<|m5A$93!ua_ok0*duj(fpqI0zsSW1fMA~k(7JS0={I(~KIiJs3 zrVe3uCuMWgWm{e@tGlH@AZ-#x-%sLSOoKcySwr4t$Q<7IdMH@E=?iOGd3Lm{c02;n$bSPWk$02fwPX1Xk6j0jl5Ecw z&T0-<`5)2=qiqVOX&q)RSDmj+)SPgy$GJu=uAdKV)&!rCs132AdxzP8&6bt?CGeI| zAY+vX*lSOw|9KUODgL^OhkvZ1S7qbW2adson4eklTS#A>$NQv(4HB{qztCpeWr)sq z3nvz4&Q?Y#mIqT2a;~Kw^B37UMmIKveD*R&vh{a?iF+llvR^6;clikt;U zmDXmEDoQ|F?6PRTU7#(>Ky>G;2J!)U@Zn%EUV+M& zWpN_$aT*nsaGN+y(5btuLMmAq9#cCQs{Pt3hi^b0_)}KGIN3VZ~N{PriZuDVI z&t3<2RGG`(xG5p&(aCm~cnsTaV?t6*_$kT+_sO36(aGf5Fx?OJSSU)GmE%@lM9pJd z+6_D(KWKuCNiRUTJ_s(v*WlQ3;(Qvu$9fW>#d>~#CM?Pc+4~;UzZ^N%VOww*p?zJk z98yT&*4NkC5};CKjZ{)fw*D~k+{jonvoB^BPcV69thv&%an&4G`Bl~1QFndY)0Bw2 z((Jj#EHabJkGHIJYI-~=qdH28i!po!N=ix)A1Va*GAs65`MI8?@2;$WM(eTVR%N5O zZM9WXPVNeY{fqPdOvB{a`H%2Nx0zzxu%I;$*7wHOdwssyY$NDmjc^}t684<$)vqUG zA!|pV!w$muHT;-9{zr{dhla*4Z2 zn!_&C%es?9Xg8&Br4WZZ(;mSXLlPwJK)84Kb4-kUs(k+alM!uPxz|9KDJ|>U z0+cIo-Y+&_sRFtFLBLJ8l_`5LMtkz|WMXC(`=-=u`!uNF$7{^o_W>Cg&CW0dWIdnIa-4rkL%LG=0~qFrEG*nv>odkw2&|fNqk_d$o2SDv#+_#J6HlO)8P%o2lhYK3_719Qdrv>8iGC#bfoNo6ss zJzUBJq(% z)6ns(msCr zo~LwIT)#C6a{J^PiAd+W&leEjE0#k&q6qFa`WM(W$Fys%;KfcUeWT~@9{!pv83++6 zW*o@fdCMzgTzNXEWN2vk@ZrNiV&Fu1Mf@T8irtyZW$8+2_I8yCut%D#*EZlv)gode zJ+{%pRAfh32#M057TxXBQlp~j5bgfRUaeBk`J!d^$*>2NCG}YNx}Fv4>T4rn+Bs5j zyI@&GH}ZfHvod9u8nyc$-%w*Bx+^Lwe(ArQw|5*E%PzjF?E>?hP}yNObCDE5!$~c{ zzOi2N4$*t}JeIvG`SF9?Ij-60e|3%3t8N*NOOJ?CT#_rmzVW#aCxgXr6tsAx4tjLE zM=yBx8|Y{ov~c+y-u24kDcobiC{e3_?wFcUGaU3JKYk2-w*7$rB)WMI8JTFS0~zW- zyxco>)B5$qT{3%ky|4<;$oI2eP|z6%)_K_H>Ru9-G>_#I;`EY2J!T>u>-4rWuYG_F zouH8fJEePFHMSCMeFSXBt=B;oE=ihO6EwTN4@E2=Fir`LkN1o`AMRn~8nq=6fljBM z*(V+{__`b2rts>}866q%5qP4cr1YBfYBHY5o*XlMGh;Ebz8BvXL?(`li_84{x$QC_ z$8OBy2@|6oR!tsrGH5c4t*jW?+LjJTUcOPrr{=h#W>n#@!_sN*bN~?EiGWjH=cTWy2Gd1CE$TUOpGcz-JCnzq4#DinT5}lQn z{xwr`+f4FlTWc#K>h$szUEZ+pvkxmPt=9P$y%#U@IQLr0+|od%oab9O1+JVL|2z1f zm+Fh$j^1=+H%ul^ytl3@NzK}IS8YnSzguI6p?s%e8k9$5b4+mUq&|sfT%=Y{ zzoPUZFKIHBV!8%7APnw~L>3HUIp8NP(Ci$sFK^@JxZ1>o=yayohwR8GVlX7(V)ETn zMiQCnVoi=eqn@E)G#p>q{f1;)8+or975{`FSb3eF2N>=L>Nc?kM zlNTZB=;>-amz<^H=JO2Ow<@{W6o$?T5PE|N-rSl(uCD1LU5JAIf^ww1ka&tLJ;PUZ z`X99edBkVYe27b3M6tY27&lhmu#dG{lNW})4igh6W`o|cp;j|)yU~0HEKT8j(0c!g zr^5|)>;X@Ggx&l|rB5|NRX3I$j71O6dxmPy1R6A_)OPR2{L{p#mp8n7`EliJ&t&VL z=8b23=6+Z=>nxL@-1_UZXVC6M1?fogxb?e{t_e(eZj#R7HWGxHWyJ?k{p@);kip<{ zI(hiL=ad9DT#sq2{%I;d{>+`BCeqqx|Jw4~nOu=VP6TH+D-vxpaLV1Ksd8S>Vyo;(sv}xtoAPHy5v7g* z6SW8SH{8%4ahA9H)EX4{o7Ze*f;^+jkhS*$fA;?L=7(0+`pst=+rzPfO$r*3;xg(I zt)Ey&R(A{V=fr+;n=Qrah#2HJj27>6(!BNC$tT=;o>wEeiEW4F!TXPE96o{e0Zjf{ z$lHIM{6}h^N}H5$m4)f;SxBm*zO(xlzj6NM1?U@QWnc)F3tQ}GW$e$uQx}S*6^hmq zQYEvL7SJGKa~SJ5i;19#b4pv_?teH`m(KN?J>7p`Oz}i?3I7em(6IH~zwvUV&cCYt zhe@J=hpkkp?LSWvt8b|#C{rq}n9FBQNi}{Qsy!dwobsawU3~qNRv~o$mbPcZjKuNy zPg(Gnj9FWN=|1u8?$c4$cdD&NZ3fydNL7k#eGhs3|6s5I>gME4tMryOc@vF|0^nr# ztOtJO`?rmZj6h%h8DI_(kK=OQ(pm+nxC2Ol=v)umKzFMJ+p4--Bq{-~)rt2N`u80I ztHxS;P{AZS+cqq#lr3{jP7@JXSV!AF2(XuTO03SZMX0Jki(Be(W^<8Q z=0(qR+KP!hmoWY9rsc+cI5e4Vckd+AC82ORi_wy{BQrUz_iH%LKpwWnl))P`*UrbU zOR@93zKl;!h!U7Aumul`q>7}Gp~Y-pXAjLSnZLH8aom^yK$V0aSF$!yB|}U@Y(zKN z{o5leHlFprrmF){3 z1FWV5J_I!mS5#ktmy!TW=@bsH+W0j$nhQ%k#{6{a`g?GqVp`Nozxb#HxLFs7vx^Y=}$wE$S#x`V`)i1Ng#ijV3fBM|E^NVe| zB6ypBKQy+^=UXoWtZ9vVXHH>ndl_SHV61SahK@|VhS&Q{b)geh&!?xd(cm6;5oEIe z7O^a$Ll;3C6Z^`l^X|%<>XA@{FVZ0c*TNI#XZjCCcAXjU6`x^}Gy_P;aj+n-<_v(p zG-z}yD@)>|L5(?U&xPv??^gHrsomC`P+DI^Q^N>Ql!6Oh^Ye3BT8Jys$#;z@>*Rym zugR+!aDlEhbsZZ!$2UIV0Ug&RQ;Jns;rU zy!#zZZskpJ-em>o^2Q3D^4scXQt9P5jZviEA(F2KnF;W;BiUxW>c zmtY3U-bSaD#p>+b&uplVW*__?%uq=+0iwHIEY{8U&_kel)=UBnye($1m{;YXUH+5T z^Z)ieGbi)d9*Ic4tKo&Xj*jMW1U`FQb3RCrN6~8V`5~vl$C_yN4s<=i7LIqs*U3KR z#Io9}e;Mn`EJ$UbrY6tueKL8_2qa*@+!71rzoAC+4iD~+KZs%IT}!!k=Wvdl={#ZL zx3`8XBlE>MaUg&CAI=FA`nRZ$D{88uIDQKSyn|-R?zV>5rWT%^y(BTrXZcY)8KWAL zSj`m~xol3sG|TucFJ|Bk-V80iTFkON`nj6?f-I)=!$7)TgO1{Yg5K`#FU3Nk^LmWH zKJ2jAo$!iy3z+0=C+yS8%SYyJBU$Y(4R9a0ap$pJ8hYOOl#J3PuyZ;e5hHs`}Ns z$yd<%R;sEVOKr>%boBtuvbfJ?xg#H-u?GbO!I0t4^@qFr^a;N~8O7Dz%h*h&36M#J zIH=j_-=gK>`j@UR98?NFx-?$BI92!|t@jbW8sG45r@UB3?%v4A_FT>RKH-}FL70QP zuW$U;`WYP|)j2cs2MkN(mp#lSPZx0r#qlT=q9ZoZ${ZHt(#B(t{iPfUIM?=eTnez) z_k~7SgVE~Ee{4Guqk(=6a!uFy`4hh!J1KVl|3RCl_**!Ex+I?t6z=^8SX*ZRl~K1x zN-VkCH|kGnyc}QsBS-+N*EA3CDoWUR{@kHEdz(L1;&gFqq#$oM$DT8~{U!gn7-Hc6 zgCXv9*<0_nx3E(>6jVP-ENY5O%Jcg4K4YOlkxsDjE2^tFR^_L}u5v@l%c@{DJY`cG7vj)MdF;QAz18Vbv+I zvgPw6J6*O<7WRTi|C=1;gP$1o0PN7_$d>pw5G5vr{jFr-W18isY6k?& zO?2GH6%4oj?S#v+5oC}+Hz0%28&+qnX%p{Xa<~ip4)lTv0(p`RbSXk)td8k) z;vvS@?6xd^w@h8J*yWb}{1+*LGnRy3+J>7x{^pn;JmSsO?5}iJb=7r_t>5kX*Ap?R zhL4MHD@zNN`_toFySk|238=USHd*+8LojbvqrX7jInhiInCeT|WE&BR;V2Rl5v{-0 zg|@d#D5@k%L%Su?EE0dP_eHoQlGw)_d_fEl|1P^txPA42pz3l+(KG(;W#b`ZrM=9lE1C*1)s7VAj17H`H6o$f_UdLQdqh3|Bfxbx z2G17oXpAKMsQw%Dmk}>$ce#AM2p?Lat81}Z<5@hUK z1I#7ey-M6guX6mhZ9{yq!q&t6Yw%tArwr6(nc2*^5D|>+YXKV^xrMQ&g_5uW zDN$l9YZ+N~7+5db!XakTHckFHAo$cwP6=lS4Vg#udp8!81iL$#=w%(g!2TU*MRfS+ zDS7Ja(^Q+LgU(jbDa-)vtrT{k%=U?pMEaCweHpE`B~gEkD%M#2@5w1RdOn`w)(UJ5 zlPRC>ZfAyAt92`H34Jp-Sl|Wz@#y`YGO8#3wjvZ9L{5-*z z=~tiUSmOSh&wD`DB#z0Gp{SssucrrqPmpqz!|w6qdG#*}jz=|?%Q=8Lms15|=Kcr% zk?K0x9DI%zh?Bqm7mYg-C2A1%Q>BbXpclrQdn3h=lNwks7h0z?SgHK zzs4n_>#p5`*u_V|_nxN~<`=M02z@CTObi%(Np#T8pI9M~KNfoH#gzTo5AO$Z2uh?M z!@m^YyLdb96rZ)+o6szn4im-M*U!y8b;rMCEj_j6LL%__9P>Z=1ilOegvMeVsxg|K z*LM~?y8QzcHT#4&^<3(a7{v+BX%lxbr3~^pUKws{t2fwa(x%l471d{zsS8MewU?D`0MfpBAn`DZ7?AcuHS^y*#WpfADPimF zt#7h(c$wY4P4Bb0Bb->omBaQgS2`1682=w zUiM5ZVf46D&cKo5an)Xx3fXv|ATY+UmyU54_s5JC{pvH=AS$<5(?VT){Kda@}*EW$~;xKiHVgb=l2~d_Iw$lM_np4a>|r-acL2KMv^c zHYz>VBX0X}KPfy<<^Dz!Jy6dOVc+82&yRBmv%z64xQ{pW?JM{U9#<7QB=FyGORE~fUJzMCUJ#JmZI3NyP8|dLJu-5d)x!*;qMg^oSvbDVJ@a6%Ps$dl7kh61eR}X9FLhee+o{Rv+^x>cF4${vi0Ay^ z1L)1-2WEwf{wX%|ya$1>0dOBoY&lfr)|?$ds`rY4B;n2frN7%7%Wn5s*InX`(OU$r zcsJnQCDzUYQkOEAIasokejC0}W&hqPgB(CyXniszW0z*A>JLqmbi(WgPq zJ#-;wehobLLx7X3b3w8m%2f~cX)*l4fKuq&HXL{te zwbG9W^H&c~yYKaISm5a==>a{)r8dZ#K|p1H>Yb%YIO*aTrw9RM+n!()rj2_(A(7^I^`f@IxFJda}05 z#~<7vur$fe|7)fadQ(CSM19ybQ%>wZ(BWnob}g}!e7d+U_lNWjjpPvEB#<3k93LBkXW@YtW3A^>Rvxv2ET`+)*b;Uv z9LARQ%F@!;FSeIQh6FqwGFjB!wiYQ_Yip(`)>`8CJny_Vtgj?tjVC_sX|=2%0$#kx zWnr4};Ywjw7V@R`g}5=@e;!*1&w~QmrQdVseOv)EqiHK(zLW$~aUj1WcvMWFmJpi# zC0he1)J(Svx86Go(%TXK8$${=;sxDTAi%H}wJ}lLBqvy}_~?Go@G7!r{ZA`Uk$%q9 z@cu@pyc&3(YHo+lgPSkV8zjiJtdmoqI^yDcTgBA#u~FwEMYUjj{nKgSb`(E+8{Mu! z%uPnc^gMT$oT=q#6{VMOVoaf|a083;IZn-u5}WFztdK)mkuIjjO-wA-O@ANbn#RfT z{c#1=Q3coX!|vz)5dF%oOiZSg zc4vwI=}0j!c*gK`3z+cE=KF=g5Dl+}*jczeo9|F1C1Kh@9-N+K%70!U6F<{xIHsU_ zyzP4C$-eBmgLSTIs5;x(JS@)rt&GcpP14+9jx22eKKMQ8*jKsP2!RX^f+vlFQiaT~ zU%}RG(BSA2OzL_2G@Y1f<2DA8RB8J>wWcdR92`2ziOhAlZHh^I8y60_TzSN$Y#evA zkX_$JwNONv>re@z0I$6|+XZgpnz10xfPh`IR`A{TbH>Z|R14UK4d*&Lky{iUKxnruF7{rJ%)u8v+WKk{XITZ%c(fI82XDU1}!%lRb1U zj91>@#Yy0vs&!U+2qVlfeStKq^~^I7{X97%6Nk98yp3glQmp%Pp?qe++h5E$4F{9! zDBPv8y87%;`)E;S)ycDW-c7uVw49hNE7#TK@Ka&MMBZ%kF}Fg^;k9D5Gbd*iR&NX4 zx&AQjSM5R-{{7-Y#&}#-dd9}anworp$-iRwoeOsf|HUfML0Qp5kXbxGSdt%7l~=+G z1vpcvx}MUI7ACLHvW#1no%S8_Yb2e5<>uz)7j!uvUEO)%+1s)!=4fG-c%ugxP&ewn zhfSQ2rHFSmmKsK%25%8&xCf4~Sj>4%u4CNgJVCIzh`^I$4O&0W-}}ofqCh43fk%gy0>y!*`V^Ng&Qp`F=4c5c ziPmoJG%gF`-yi$+^p*W-UB_;~6MjJfu9}mHjFFMm)|0rvUYEm|!;z6f;mz%XSy{1t zWfN}el09jnqp7WVnn(U_TlP+Fa{-WZJm1#af1^>F*`F6CbyWQR3gsb^f^>A&kvP?^5+`&oKByzZ>O6 zK!%IgfgXAZbJ1U;Mj!vxcO>2@>%@vk7wH{=Y*bX#KRSh!<-{oDLF3K5@EfnU=UN^R zeTSf4Ueu?fEldgM@26L;61eyxqxB*1*ZAP}&Q3-AD`Pu4>I#JXzf33YUJX~peI4=! z*M_pQ{b}e3fn?beX3pL7q6A}&C=!i9^6Q8*2S+6c`=_)NC_gHDUH!q3d zm-agA4~fPqjayUp-Lv~X-7{!+T{9YgQ!EaxGubr#hY+{!T!G zb!Wl*)BqM3lyhARx`v9n$q{#%JW1p~_ARUQ^#2_NkpGpM<%jv z+6?r`$;!@luUCI@Ke&%P|IKIUA$X`Wa2?gX1taKdnKNe(0g)n08#e9ld_p$s?4Tkk zqzZAne8s{E{TN4$mL+moh`_f>*xpo#o=l7pN_f<-wCu;!6ht_Iunmyh=6p*vMk@a}z#AAIP`BEJE`il$4H1!^XwZ z`hJp%Pu8QDMpsxE3D2M59i}f=KNC6??Myv8d|z4WGMAdnJmIpO4QdyCeUXF$FYK}} zq}))WFWn%`?<~oe%#a(%L!uxO+cd1a9I?)0*WDh@E4;_rd`+ydl}!4_LE z!&RjJ!2Ix1)agcJ8P&M;1VZu{UQ)5;qg8Z~>d*yJw$5TItej;6yzrX*x5^rBUbEkT z^R@Naoe%eY1%M=&lf%4m^yTBf%!hg~nDU}MQ7MhE29TMG?lll9TIdXxiewT63_K!= zbe$q0QjCmhZugmM7#PZrX?+tJB~d^oQopHNO`0S`f#LUu`G`pc&Z7Pjn7zBl;+cpH zmG~^BZ4HO{6-=jnst{`k{nQ=Zu>#A|!IbILhtRe0gjf@jUtRzyg5YOM5z>CvV8@rO z`CexA;{5#Eop%ziiQ5$wAGgl=rjqJ%qoM-uQ-$^rK6A;iQ3>ctq{moLT&#UE@ZReJ zXT!n0^^87dvY|>Z4efv$!|b{wP^REfZL4*~La>w5tr?lzdf0H0{S9J_N=F8J%vh4> zkEc$6z0aFJPr;1>2DQQK*&`6S?U9mXY*g#fADBRYydyIjD-=T<7#h+W=nwf-9`S6B z!?Qr?MOCp8m+35?4}pbn#NDP+c%BRgpmBl%573fl;C;9{3}P!SH)32|8ty5iEo^k3 z?+uWirV%}n2T9wIn+Q@i#A}XIQROR<#+3I zX@0&sjEkwD2F8407-A;(DWDb!q!uFT+WzopgJZI{SHn8*>V58kK`Drnxj?a_VAHL% zFDCu!fhoCq8!7zpp5&eul#4>3X*#0Xus(RDFkjHjk6+8NZ? zV9KFu*zk3#vN7p6)-LozaPs$Yj9iDz%mk9y6FaL(zPXq(E88R9hd+C4)FT~^bt(bz zYD6ghD|%L*?u~X0LiiFSwoGur84ZB)`u>v)b(X*14JNAf6&9sagFv^l9cA^K9nqiu zEG(2zYf<2ua`~ zO9l7-jn0I05HvWY2t1|0`LnA@SW#5&un^2HL$2WKcPO%XY+M9H%5)N+hQ~SnslmsF zcs0qKoPjV<>#&plC#VJD7nTqb=2ZxIbmI!q%9yCSc}a=I+R3j;iMUa90Sg#xu$(!9 z`$A=`0>BwRLJo#^OZ?zxrpkQpl9xMl5t?%lmwK!jbI(VdI)^{0X z;<5KptNkwi3r@mFwR%j0^VZrQZ94u!Utj(T+{>H$NHqUDj42TwJnA8Lv6o;K5N z6dEO|qyHDAS?Rd-VYJ@16U{Z-q6c8|_zn|W7Cf;uOVC>>mjW5jtomrF+S$>VIqK2v zL~;+_$Jq=rIW?ziwuP504O}hSze7rc9QCll6m=NOXg0)Wl5z}#m%u(RlZvzP5ipPd zPcc}=z@X&bz1KfHb)!_L_i~KAt)Jq{m39Mxe`YRS*+7X(=8d62c< zz6sj=?Y2ur*u{2TMk6@52QA*Nup!Wlg%e`SNTFpr2jM@k6k%0#MhQb;Q}Xsw_QmJl z%xcs#blD!Tp7gObUd4-__pFYl*PFkfoCr4Od1H1`{8k{0mIXxI{#d`Ohz?{ATfx zo2KhM^0Vt1Tf`uFG-a~0j-;?qI=Ndh|fIEjsZ z_Hs1_;E<;C0tfWeu>B`ZlgeBv_wNM$SftuX2)r%n|ALI9c-o@u#HHrZZD7JdM=UNX z`jx1|HXnLOYlq=|$<_>%3xm5{m~N)&Uj0L8juph7P$KD*S9-B!{JRIl*5htBwx44< z+5d<~X)*`x0z$OWZa&8KwZM~CQ8Av{rMiE0&%(V-0aFPUD|kpdAF$X#&aHeR!P)2v zN*LZ*@Tff}H|S7%ddK*4K7Tabdp+Y#1u*yl60?ksw-T-&HwH6~f-nX5A9;A>{-b7q z`7Uo0A7S7Ndy}36P#d61Wg6d+MQ`Q}jw^x;#w5DJR>b~eOS-NY>mY!H&~NYcRQ5v} z8Nht^(xwx*(Hk+34i3sO;tr3DXqX+gez=NLV7P(XxUEQZ<+j|<5pxnY! zkg2Q0(Rk!0&Z)&`kfvPPF+6y#a8s?rmQ8-aHg0OT89Ny~$8?Vq;q3~>6)W-k)~|6f zcr-PWB*U)%iXG&DPR^5Uc0pd{t7UvZMRk?R!M(lnYn#Bu2Pfn4Wz0bnt^xv&cc#PH zN!bAXyK9tl%R>VLvX9p<>B;ze;5HtVmXVd0FO0nrj(GF>U&>z|N@{W4>ipv(89>Ap zZqbc%*0H|woJ;U;a0Jg-=_c>Z+H#$@919lRLw4u2fzg=&!uTY@gfj0$^0orvmO$by z4!YadyS4!bEFg${Ik2~}0GXNVCd+LC783@|1lE#4YHL@qZKIah1ep*~rkyAseT)BJ z1e_#Y4@S=C=fxKlKR;kB1YB@t;BfAy?Y^^ZD8yzk&V*|R5D}5IhX*5$x;5WU4v&rn z7Xi_b5pc8{(6^LrE6~~7vAf#`zK+dY=TWo1l!48p+-6-z|0k~Mz4|yQN20BO-Ce(c z5r3wJoUf@1zF1vq{r#07Kz;rC6*SXi5ep=K*aRwm+blq`1n&kqRWx=XQP{81`AI=V<4Se)5U~mJEPoZbzy1P$jPnIpF9)T<4^BDH><>-X>O< zBVwC@UWK~Adr%qzp5apGhVYv>RgZUY6V!V*+yKNHTzn;{bRh|WcoCCp*POTX6{{Ik zkIW9xA)0WGTLLN)WU7F>)ahD6aXnfkgml4>*{%b`<)Fu#Fg$SJQ6j&=>_!6L-zsT5 zBJyUjF3R>Oufg$@QKnolkf8i&wA9}V{JDR$Z2Gfo2#nsnl)(O+Z296PEH}IFdPYC4 ztfr<`V?UD=!9EO6PM~%?El6hKH&;7jm=x>Ch?6gFQefWgQ zF&aYq2T*R6c=0YucJ|H-23Xkf6(R#(6DuCF0_ltUi9LX%6qdW){$BhGDDCFhkOp(u zDoZi{Cm%_G%6U4F)Z7LQ2A=d z94CSgn;vQd?(F%r^W{}F2kS9<#x+0#R>O!$MWRF$8;&gN(n0noX)Z^rU9$k@m9eTR zDP`_F-47PJ_Lt~bz!uv2q2@DKt<73MX2X$_SqPVDZQ-Uxp`7m04SJ~#E99Og3QnB2 z9358-t{9OJv2g}Q*0FFFRC7snNB^9)++zbj$D)eveX}9+(I7^v(?Qyven9-!5!?Hk z6678)Y_er0kq@Qm8gidb=?qGffhGiibMJSFu)eomxsAL`@rY{W;G%Rj4(JLJIp1~< zY~aXcK`~oG!t|jfekm>mew_2(ux<4=erD2Thii zu)lcmWPBYN8!KXif6C+TgkMo!PB{mA<{fwiU-PVQaq#&H+Q$xB!bywAay%w-!oS3P z@k5nPWepC9zoIo98PArM`x2{ckgFTWCy~!9$?em zzdZ!9;c?ow0&*W%I!x@7NZl4lEE3qfUHRxXM^_w+`S+!_7oQW)d*{QK6VpN7&cQ&r z#beoZxfV*Nn#SHdX>*;yFnPm713QWo>A^bv)1dJ%k3M+a_E|ht;cBTeJ=*s?-8!Z0 zc*tpeWv=IE5Of4&7By$<$?7WRDACKl244m*^)ooDLzAvaqTB$h4>JM0WTKM-(*1v3!>C1a`}&@t7J7l4MvZ_N>_fT2{dFn4(%0TF&~Wc$lnw%X zNXA`>vM|f)4dV`n4>3);StF&`?6*Z(H%z1%f};7GPd;*|1BkTFxO-#06p z8XT-{(JloDu)L*je**@+@S=J{0>P)ot-E&Pz|fszQ2%+tiwIx43(+1}F-M1nz7SJj zetJoSN_@#I#bbk-^3H?{X3x5*e~tEnF{GInz!sKEa#rVXsqtMn%SbW0VX^$m2#}GN zgr0=PlYcHsY*Vj+{~x%*{zW1pgH^m&>!JET}WJ)+3kR}S_DU5a&#;9 z#zzJM;R3*eoAvox?wi1}+ue4GCN==sl%L<WJCV;&y?2jGNsK<0x2yZ{_JFywGNem{*Kp)T|Me< z^W-W5Uc8^2pxN*dFekKj8is3pUyTOi6Wn%wv;qo;IbZbC>&w8wz?RBI!VXt^KN3Yb zxTEDRa0>u=-UuTvj<4zd#dY5G7Hq|lE&1&~*fRt}F~M;971#2RV?6^e?_x1!7MEjq za#;|yfLjYZB(8|yiPzGcIEz^G;BV8O@U`!r2s2y{7;T8`KGCs z#J7ndAsBy^RY2i)xU&2N?M(GABq|{+)r zk)>Y@)Zew;?a#4N!!t;8FCz$RWpuk+z%eKQ2(h_uB8-b-rm7c}1|b-l#(@1OsC=3Z z^~Gni+GyCu0#7bRf9W@C#2htl0`)S&OMCqQCbHCm%J$v%tAL2mwcT>ALz7;bYD1-u zJ7J2G>j4i7O`U4{_f$c0Y>bsU4l3|0iyY+FkZp=De66HDx=f8DTTxvD3}kJVSbk{; z^p-!@c7hF5lg&W$k*T`pKwAG@h74=}@|U9S75HN&bRaoOgBzD%eE&xwI{%!3UP1+x z>aLtTp9sg{=3+HjY|yuE0XEPdq|g3{fA#5Sco@JqvQBGW(!2!R#@Jx@hf7-rF7|@<7*+i?H;kB7(ep6fWDC07| zz66vsIuHt^LEf#5WZ-{&IAvgfA#E&yx5dD!UCjq%$SM0lFOAK=Jy7CO=EOqagg}vm zjfg@25`Ti-<5ST0=T}z`qN__bfGv6P{lO)@$mi$0ZRcr=8NY2A?RM^{aB~mLI#|W| z5t0yrn#kAxMIfY`V?u8>T$HJ^_XT_>EK5ERq7zlqlO|B?Wt|EQQ-2v_;bWgwi9fVopGTiv7@F-UOf`g$pP#@a8t{Px zhJa3{8G|mBO{~1Y{{F87-^GW--`O)H2U5}lR)w!~l^zxqpJP=FZA#Eki+xjco{ltX z*}uLBf}rS%!DHPfVf;!50gff`@&UmNagNFA>q?~uMdN7MCX896={f^FW{z0`97odO zA|oR|mtUs4?BNW`ER?U%H9@(t+Y>V@Isv zzunDtorX9dng7qJIGI><9^0FXSxlF(Bk;N2#n+Poi+4!u7`i%zW1pXi{2u~@JG`oV z?<+mTLO_uDo332)A9ZCpqDeq#SpsRfH!92{X4ZHAyHAf?A~+d`7~-M6RfjsOpP+P! zJ?Z2=cum7bpf^S*>Yx79NB8wiOa>V)b@X=x99?ARQN{5Skt5m3`gS$imAJSt*i>q! z>GD=WNC;?*Hm}=h=Jj?tl?fI>CSt*4bHAYwH!1tDLmuKxg;zZQ2`BimaKa-_(V+FDl*z{gEv6By#@YQ*y|p;SR^~^gem_F}%h&4O zA3nSbPr{6rffUv@zkht|g;#?{f<$^s$}OSG_6FqeAm#%fUd;bj*>}e^m33<~V;da- zK~xBcOaK9C(xo#Js`TEw^dh|qR(cUddJ&KS0YWdKigW>y8amRY1f&H60q#zinRo8o z``+*U&R-$FaLztw@4e2mp7pG?z$v#*s=d84oznapJ5CGV_V`a`(?Kxt4rby?7K-`1wX#66ec)6CHd- zmge)p%!T7qkFwc4-!-^1hyVCJZH))fRu3HP?9w8bMYmHp){IB?pI>~iroZM(FY_t~ zkFO7vpX_5X{9kw$;8c;i;UfI0>zi$#Zq@>iyr@? zBKfQt6V!xH3eD)l!+cruLw^PAuv+TpuG5Z-{fbal5WJICqj%DFf!sNX zHfJ|-QZUyu_0~n_swdxezmy*EWkaF7_DxJ~flQ-=T2rnL3$*?XM?D8=oxeo1mDSWx zlZ9Nraf8oPlyEceL5qUh?GEqrtKbx-tPY1mAFHxZnirlQWwX<4rr$eIyM{X>2-R`xtZJA=4D&5M??^YPO`m>+fmvuH8029C2veQ=ojx&r zPI;@CXSyhH{JglrTduTK`j|S~sT5tKrU0DJet3#*Wwu8Qcax&piZ%Y&H)7bHP?F~m zX^;I{3wP+b>z5)U_S`9aJJzET$w9xVBO!A4VIuf4 z*`L(1kUdSP%BF7vWbgwejWPO~42T2h6lhbFvWAZ-F;Q+E9)*zKQpqLC2;@T$i0&Yy z|En7QgB6};u?nVOimIm%`qxO${@h()$HBqzBS0dfPcDyeVusC5 z0i^|q-JL0;7Cv9^?wsD`^BW@9WYkl6y@2hFnn$lnD6_xz*?nZSFw~L_s#&)WJxLWw z%d}#=?xfXlgk4`>pPV!TSPKTtR0~xjyeFidp6+(SNweWx{W=V^aU&kng1UKkHKXGD zV=UI3_)`x}fo+d&z(#}XNEJ5V$G$}jbY8+9*;YxolA zXrmN~me*Wafs0?yf)9(+l^gCHFIB{GTlFgPOdLkYke-@14Gs|DJEh zHhhJG#`lLj%nD!7IGiu9VQ&!4ttzo~IdBN=SN~9(bAGDyv3Y|3b?-Pj847J}=}Zvb zoA$dwe5CA&Ar=<&ipjvzJrzT&)C+#mDPV;{jV;@WmhR>zvcWZAwF;%KxH+mDo|UM} z?=p~TQ&NN-3Jnd7WPJ>NDeK~{yo@OgQ7m$^KT@%J(Pp7sTinwNk}w4 z`jB3o7Z}j`gbGF($u0-mjKqhB^6$5^Q1>LAVHm<{!7xDNyF{ z>%8zl4G|@Vlby~+SXqG9$F)=a%yx)T3k(^1yDgM+=81)Xu&}Fmbj{ zrAC(aZ0Niq*Enr0Eh}IN(}5U)LV{RkRVuT8ukat14u8Dg)aQMp>TANuaY}&qPb5#M z(-ldcILYWAm}j8xFM0`cZPvLTS!v%9y72Q){|^fXYG7onq|d+9Fo~rmQM2^{gnd;3 zuyM0q!b&W`Hm~m(i!8cz7*}lca&rk5r_o4I6mWV$b!z*2?Ybx+1 zZM&-l*aTB9?issMJ$~guPw^|iSk*o({2(MxA~pLJkn^L+aBEObRU*}ECdJslaqCO^ zKABdo)?&~1Fzn%xcRfo%E5?n^b=c21D(t}&(hIe+Cm24l_z2a2l;!Dj6f2xtS1#A6 zUPEt}q75JF1T3_EPg`R#HgSpQb`{QPWYN;c9hB$x-C;Ma9&-eZsKT>Y!$BH4XSfA5 zu}r;HU?6A!C9&hg7>z&>-xWM!AOS*+|DAeB(aued%LkV<;2~XfVTI_cO0# z%5w3{-5^oBce+$8J_#^E?r;;18?oEl+h~(ReUZ1?!}ODWcEeq3CdKHrz2y9M5Jl5> z_G>WN?0tUY{M6c137A*ggcLSs_c9sl3Xrt6xP#+Yj(|a*N`3v>{QLz(xW%QNgyiLO z5Fs?Hy8}03q*7nPH={Afa9ofzs+3-9>MT3p1?W(U(Y|$jr2s7{zNsM zg^wJz&_y0|zb_*=T~fKBw*7M;0E@Hq^$bU8QA^H+U{46L3UKB?pis*hKNxH>TbGhM ziH9%XqpR;sT2TnZS=Z5YbTPf{CbOJ6OnX?36{t6>M@0rchMN9u8%R=7Toez2M2ejp zA0{;7(Z$E#6fE1mBqHA2+RwN*_b4VhefTOyBaB*fLT2oR}ss6H_ zzS|4>RVillr{pTD&H{w>HZa)wjdcY3Z}zJMzOGM5{LK63M`~67UwCk0Z2Ty3H1lGT z_T0Qcd)+n7iFYjd138*g^R73F{CC3Fdb`D+JC$CtWUR#CqG%NOGiYrw zhxP$)H2M~%klDRZs6Tl{c&kR#^wPq(!-nx^NdO$Gt(TMwyRFMH(?{)~Hs4+9A^zUf zD9}n0I7uNbJH!Kk&8ms=iYcO^p!KfFnK7M@sP^m-#?rX^F#A==!p3_RS36~6X%0NV zVz5@eAN^BL-Fsg@1E3GGN=dpc4=RBF-$+lWQ{a_TPKtxi?M-J?1#a?#aW1g`n(d#J zi4bZk_u|O%Xs1s#->?*uKCn4^*a?tK?C$OkW^ zdF)*Ue5VR^|7DVWMPwkAp-cAcQ0{zJrRa2#V=a@MY~sI#bZ($QVdwdWD{_j$=qs@` zNi6AIb!C3mo$Wd4&4WVGrfY@1yJ}?Xz;%-tue7+{E!(5kBJZUT?ZFma=Dw`baz%L% z(6m{s*REYd*%3kF3!^h*x*t)pJE)%s{_F7y8_hkmqjTH1;J2}NLltrM09}a%FhO~b zwP)aK4}H#0#Kn*)InmiidUs%hj5lDD>X5%Y*Lw}ggh@AZNDO)A$lmRJVLK1LGcILV zlocB45k*sA9qgzjGHvWX|6|C>Jv(l?w3teUr`T3ya{Nbbt}IN}{;lTH+Q`#-AJtr?Uo_J{mWVhwIimQmi30N*suyRtI9Kbdwcptw+KHI z1YPc|Xi>6W%=9_2cw1tx2Ugigv{cpG@28#Mo^UXNzhWH-za}YbJK0-KN&jge(?`s1 z0~#(i$X|p+I{W#F%$!Dc&CaFtruUC~C0-ajIT{kn3#=T9FB!=3FV_=~ zvj7HV>NKLPW)!!`ID(eqp@Bd?c>~D<35iwv$$C8szg&AECH{J4QR7T&!du>U2S;h3 z5(BS1=H~r^v!p^+_IZX3_EmzPQ#l9U9cIdfL0B9mZxe)i<5H zUwG;oR6kc2a-`STZcdyq*sj`9+O1wZFZVfjr+wO|Wovz<{L#I_wc0FJ(E7-}@(%R6 z3=imX8!68;w|@xg)5oc>6Yl*LuQoUY$m9D8MMf(s@|^aLZZ{Ujy?un_5y!TD!*TJw zwiS6?xj29cQ&!Avs`G9vQh>d;4vHZ7qIQbNhSg}p=C4JAhq_)Cd7IP2s+3DmLr@x* zF8UKdG9ZP}E?JnCnKCR70U--nCLZA8R@F9cbwtlYJ{@isiPrNh*-!w}hIj#7V4-Y+ znL^A6GwnB~s2CX>ea_VTF^jY2k5@=l;T_hS*&V&H{nY3IKh5oP;aQ`ORYEfXJ95QB zSAO9rhL@Ias31jMKho~;|6*K;7xVaiv#dM-Ob8zjF*2wWa{xof@#3_ zE>ZMAIFr~+WOOF?`f}|I zm?$rv{TWnvKJ`ksqqiWDr(=aNIWKkXdhaiM5gk^DS0O*zjv$v<$-@RP9y-8a$>X1k z6Wd-Fj*8qI11%apr-_nE^D6@ldU%!=aB0eaC(Nt-CDeJ8EIjTJvftwX!4XxKSmPy& zOpkUlaC5Zvd#*94f%px|dk`fDvzo)^5S&s(+AR)Mi6r{fx}oi-?%JGJZ&)6Fw zE#dR1dy+NBW}!;BXdW;BsQer(HzayEgXS7Vtok8yELh0taIkn7XGYgBHY1xbSv`(; zfTteatEj0-#Elc|n%SBLePW4|EbCnpMonPZ?j`su{QiDl&-3aTzlQad!CV^0GdK-s#(aOa+=Ek9%m+cU^0D$Mn7*gy zb+79(WXdWk;lE@s66W>Y7ct*$jtS+GMq)+*$v;6B1KX{@W8Y^9Qt*<#H9>wMAsd1f zEHJ08MS_%GTYkh^tvPjn9!1nD0%4yFN7zeCOE-!F;74NSZ&0ayLDZWe8&H=2hIex@ z*`RTZ(54opU{`(=r1&3@ZZuBU3BxvFKucX`dmx#U<^bN5soodhz!tSbRE8Tv?+9|- z-1PdC2*{wsdkL>E=0;9!6e@gCLMNK<3PwbFXT&=IR2Ix5@CZF7_$_wHq=kCz(+^r8 zx!VWsCwOZk*TS=az`0-;5voVk<|s)S_T%WdC4}6j-i~nTyZMOZugtI50Mq3o>k{d4 z)E>!{+(%l0eJs$ZkZ-f?jPAFlh;6uFAY+jam=ZUPz&_XVEdkCBL%yBcBM-~RyfySOXPhs93rTfZ)Sq|D20RdfJ7aqpIy5BEIi;XF zH;`N#toLK<+iYm4&G+oOGt0@$=VIui`G=Sx3$Y--9jG7-T^jbX(X_vujn^I2)6@G7 zELcX&DgOmtstiJkLg?>G(^GDCfETP&kx{40jZ6b7=lLI%wW?PO`$}WCoNW+K<;!|( zvsW?IHa0fPOG}_D0I)DG@1L3%x97gBol(FL+OJYNoh$p@PI=kM{pBUTVOyFb)~adQ zmVDKYHxAzQhGQNI(UEtvqd*SYL4btvAT(B<;fl}xl=npN?MS%z&D*a@q?`r*7UYRYQfk_!EU$~tC=v=?M>(MAmjNg8^B$y(eT}j~ogYa*B zzmKE@8R)31$2JST@&~$3*bh2_l_hy8i!Pr&`$y8RR4Ei7EZos%P{t;gWAn+;zUk86 z9K-b;gTzU$j>X5`$c#duyq97y`@ap$>haMb-;{g(hi83%x}C;vfB2AAcbkjwh`rHT z8DL8g-N^EE33M&>#Q<_j&#Clk=|GgT%JcugiyP#$JlFX9&m@;F03GEAFKzyLf#aRo zio@yk@tvp;Y`yn8k(@g=!KxKAn@#iL`pnJ=^PvSJYxYV;t6r7e%Ei^{lUyO)7*Bz4 zU+a1EYc?*)Z)=U4;$s@7@08CmvIK7$Nv>@B85%`*v+apze)@#Y5Pz(rkE`vq2Dy5g zR3Hcj64}+M2(BOy4Fl&3VCEzjT30RYUIIW3oh1-)CcvNqmwa;H`sCQGSz0|#@9x!0FExtWb}*x3@rxyy*msi|$qGgW+Wy}^<%#Ot;pGd!1qRvh=C>yY zlaIhF9?8B2JGa!bV`Hi=XxHz|(+}JB5I_w8#(#N-!hYfW-^mIP!KiVI`a-!gy6lg) z!p5+n1^GOKx^tq^j`k;Rl7(a&JA0`d9dz$YB5x{{NOaUrBC&A;uZnoGqlEU?LG(T? zB_%>O8<6!>m%zCx83X?$LI{+UbXF!HytcR9DA>5UgD{mDIhy*~nC7AcowWLmJwSF9 zC)wliZ<4R2>3I7nMpehR@$F*) zC^U-GMz_a8KY_-+P%o9gn@Xm1%rW@4WH<-|$*A{e{qj#*@cYTa*2#h|?~W8K9siwm z7jO3sH#k(_u)dymiJGd(-tdD5&LB)x4Cm?vngn$JLqUNCY@jBa#X$u&h;dWkt`&% zb4(zm(phWO>n3jdNVGIc!$?RDOqH)pR_jM`A9E$E_0aiexbd+d7NIxlFc`=6?zuUO zdvpdyMm_3pu22vc7}H<0F4%GS9dtRAyGT64FGriD*kAPzS2UYlqS@BNw*lEptGHd} zX1x2fMK`iS6q#xqqzr6Ef1ph3 zSO!L7eWIFsLfOptU$^Tdlege)a=JuyMckYx; zoiF>exgYTt82jco@;AO~{f~B;;R=(2#gV5*nnb3cq}>6(++w%iFjl!tOOEl~l=4JW z)*44+*+J!QEF3+Y=(b6)!z5DXY=uTGk6o~vCrf?k^b?FE-VlKbCX%-%F4>_ym+OLU zAgVfHU|Dw`ZWu}GzcmRWns6zJYdXkMq#A47K`&sN(~fR+wA*T>d8G9yWt^V+C)S!h zf&1*ZfS8P)W1hWLggtq*F||iWMly}WtZft2@<#MMI>5KWKvW==n%+w|-lV(d`$f6P z?wdgwY+l;yvfk_Xuvr?{I-RMi04NelJnbv8hby_?-AKcNKh4);$NL5fko}%J>u<3? zj51djJU4sG=hmC%_qh6CG*YX?$7uNRtHg_KwY4Cc@ zmIcs>`nU3oTTFXm73;b==e#O`;kF!U{dn4S*vg=J5t13oyS(4qdt`R3Bz{or;ou0? z(zGbBF;_{GA7Q<@7RfgH+1+x)1wUmSg-1SKqi`pS=m7a@baGsgT}Syzi?osw`pi&m z$)FiF8^az&d#rFT-0*X>@x6~~r@D-??5}^LsCzQN9?D!+9W1T_w^Y2pG{&Bg0Dr}_ zU<9!$6&v`7al2;{*)CtJ&!;)&EgZOg%6`gsMA)&uOmKLSF8Nq+|65GD8eVmE7-eio z&)GlfhHZOI$Jc_KrHKWm<$<(_buhQ7Lharx_yX|;y}2veYfdCyNEqBNIY`E}OZy+= z*7Rc&M$%O)WzlK*SIOk+aI5Re#i)0(mfd4mEMxSqpN~BS{hd6fRwP|pXRlDWVrNj` z&B7AoiM@YF(Qyv2#V7hW-mZ}#E*84zQoTWrlGCMQ&1O<8H1k->03R3x-~(_-5{n4_ z6Ub*>seRo%?pSqmsd=77V&`k`RPpu6Kf0SfVY)W*=f~E$3r_*dn0`CqE(yuGbp_b( zTEx{sRZ#Zw<;#HmpJ+ZT6Jw>U`~Z+lD935*=vdd0S`E*4#K^qpBMN2JY||x8d%Ujx z*@?F;{Ex=0RP0#kv0#v0M-UGb1)GEDBM=Yt=ONdE&0*QH{0LCA$SxUyxIj+d<84E{ zC3)kpWysYVm?F@#Z2>P|lFN4TxJzCLe~eR<%K;%YgCeK}wJbkmI9nay+vKX68bDJJ zS>ZENTs#>;KW4cD_v<{PPqtc2@q3#vt8IsQ$&KSh?&AaRH>R{Fhy5qGx`q>Wm&fNw z%oL_F*ua+{BKgEAZ=)~nY|c``LRT^APT7ym9?u|nz;Vp2@J_Vv9 zj`Vr}{_`yfp^y9j+-WNzuP68X&nNxnPKJuDxm?ybqyJR%Vm zwD%>6FQEs`%@vkWyFF*Mju*7rHhfkU^|d>cjtc@EsK$DSFbeN zKSmo$Aj=7)p+6ijGZPqE@@!j_pWg}|XtLZ^ULOs(jrqpNdwR;LcC^a)H~7{rKDV<& z2)f|kXB)r(T~yJTDOmnG`H1s%Y}f4+-fTc@C9kZk09lwUG**h?3*bM1v+)L7&C(8d z;czO@FcH<^6V(bx6gJ=sg~~g+Mi5qb=Ad#)@%37LO@-|<0 z4s+}YJ^YKoO5JRv5?{*vYdB(Yt%)Jqs?sNA>iwpkc$qo>w>9SkK~%z%)i`y=TKgmiOlQ3qdjDnmUy(j*5BTqGF>Kn}bw4*C+=$|);i z-xRl!Bg6SOxTKep6TSr@c>--?yePH7W5UP-P=R)bX(6qXBgDQ?1MIQ^ETTYQkE4jv zzR`AkJ^h-Hheu&UY3;nuqlS59k=Ja0@b*?`QRhkC$rE<5{{kc|)}hm{zg z8%7Y6%@~hL5IT3WYKXliS)kuhqqL+CXOkG0|83|B1v9mgXaGsu!q$8T=P2!s+MF7*1{$8TFRt}gOp z2|MSHR7!rfQj%+<{`98|hoaq(l4A*57i3{@(ACdOWW_GRh@DzWd;vGh${H(COaN!N=bFCU?z-%39tC3f}l>{{xS*t<}S`_(#Q$s0>%c z_)!H-SH&|mXW0C{+n(>y=;&-fP-vrOV|kRVQq%m-_8gPf$pKO06R(rrUpfgfQRX#L z8W#bXiMlmIy{qk<-*i*GSxF~s*uR^X8~H?Z_j?ehALX8^?ZTw%`HVGrnv3XHKDxtk zjt%rnXDP(XGj&_-77GjE=a0)94{eL$=1of*g~G!*#hcDqi(rgv;$Ap&XM@pRI7z1q zMBX@avyEElDYbZa??7z@Z0+qet1Mr0z9TwJ{{Dl~>&eq6VjnX&T^Am^TVnEw>AQCv z(CL0q3(t(uO}MyFL#-B_x}O^9eW{jZS&>6Wqp>Q}+#yPZ3l(~T7c6O1MSr>}!pb4c#sUojY3J^er1!$<3J4Hw6=)7C z9uT8Bn@CJdEKsYwi@jk-bYn08ad9kwzJCt(>-*Fe9CxhN8Ep=x<=$6Qt5`4$J2d8? zfIxH`j|-2_=eAT#RTb?myrqkX1j@?F(4mZ%+YSQgu2x1g+qY7<9T*dM)$Rvxeza6` zoX`-$fj~mzz)M^Zo>OnIZV}Bnaoes+PnSk43QU_<;xw68YH_*RFQV;R53yjA+<`!> z2P~g|%-kaD5}cYr>``c^9^uXP?P)snJso19LWe+<`5(2kz;;x|U_r!QBoP8wPM7`8 zmk+y-v!|YevCc>H8KXr+i3lEiO4HL;(+A4ias_mz>@_ABYLe0$Xo*><0C>lXl?Z`p zyBcx3?P{{5Zm>Z9yAtf)CnR}x?2MuTG~(ejjt@->~lU2Ek;B0wth5D@MQKZR@XMqi>&>2X06NN^m&t4zws)3X7;~Oeu}Sb zI4iesTPsd*SE_ZMD9PZkn04Ck89Hw~>vO;K?u(0JNa&0G)P0b#IwO*n(l3iszpuS> zXn`0>T+V1wEyol~DsoLTvf5i{JW-#CW6$%(v8Z=kc{q1^6(QqdIyKs(%7MKeE{C~i zSAp>%uS8_0^qo0w)5tu5_M7ot`;RMR0>2y@j~Ch!PsUdY;=OUw1fFSDl${mdi&HGP z*gn?0fHAq)Yi6Ob4E|0SVB#%>6%u3&a3i{u+(3udHE2_MbXdH&X$H`FriC& zbsT(EX3d$M?q_hm%PlRX-6{RTH%97ymCdZaX|4%o0_axHoJ@`F(kvK>Hk~S0TYJz+KFtXTZ1bpan! zt-QOgy;esf|2tE) zkTiF>5Ixd({2cdY^#;7wb%w|(4H3x9M!>nTp2d5$9~~cke=U`7$@lE6@T8WvZ2xV6 zny;<6S!Q8*C#_fB#EfoIcJ@gyS*$%(V0kB@(vMiKAqPc@qM6H}9T$Y}-09dcPnA?+ z&iQD(L92jH()oeA^m-9Qx5k%4vF>b=+lrfGy1qo$DvWjuWiZ!RemVHIbHmlLCxx5o z>MzNe%Dx2HMbqj=pvY4eP6>xcq=W)%UWS(~^nzoBt_yuhZ#L|j& zg`bk-6-dhrv*;Czwwd>Im=rbcwZF9S_Pu7{*TvCO@Kf_NV1&TXUr@H)d&=^En9_&-8qmy}jqAlleDJDg z+NXQdi2R%-^MZKPZm$L$NIM;agXJFEy+!wBoi*9i(x6QX_ zR|KKx3uB^qkm3e=No%~!HH~7*8~)DB&w^}7%~cbkMRCv-a_68`l!G@-&%}cUxCu%k zFY1(`D}6m1o0h`C76+qoa!O*bZSA+nX4*WdQBJKs%~tiO=b1Ts=pviLq_)uM7+H|b z#F5RMEF3Ps2IJ^bgH6`0{4GZ5WZW%y%=20lz2p|y@scTGcbk`Z;S@wfvE)_9_sY%g zg}y>IE&eT*Tz_6wQaz)tmds&1PX1mRIm?y>E`i*q_C`~G{ks6oqEQsQiv;Q6hL(-!gca{!cH^b*@NX<_hRF%Hj!n>d6?Br+ z_sLZYqs#a@d?2|EiP^YVRsySH6sPn4$oJ!}ge6ZaFOqK3oGE&6GVxt}`?2Ho=5%p8)) zEHJC_@7w%6vK*v^2+m}96K(l2pW}O!LW3Bcw{o88eoc0H=L=pRn%Mg#4m-0|Jm-yd z?yJ2CA$&(Cb*df=DyR)r8Y2;ti%)Fg;dU-r|l%sj2ceMBT8lFx88-z%}TQ2 zu@Cr-5ce!AL)r~~hW#*dFDbMM!C8tQcB;=;cmY-Kc`L~6(iZ&D%dBr(mx}}W zG5qN)1mcBbaM9E07rH<-bQdN+S#ewWNlpfi#3iq$_l-d;h?5?5{7 zz*4qBJKT=0{Y9pO ze+}7<_eYo`GxWD6Z=@3e^4H2M!nVQ zWuNgBIpqv;P~4`l{=W~zDonij2=Wx*Q+|=PHC}R3jCQ0cGFwqKn?lX@0CssYjr!)P zKk@^&-TV_Un4nK$9tzY;8fFhbE@tq}+3mBOl2gA!IElaSxMaG&ci`6R8kk9y3P_dy4O9VP(bHyfZ97>(XizSeAyC}g{*pdHN9O)moX z&(vfI$edM+4~VVgyEKs;Lsj|TA-zg)L>R`fQ`Q`dgJ;W z;;R*>jv#T!$0YyTF~lPG+c=r}X3Q7x!H9?yLr5mb@%JoWI`vH)uwdDr#P0j;{TPQ5IfmjT}0vkC=F*-s50wfg(YRiCu=R}^p z2#8}?k*7^kZ+~?wgF4;TikJ+_&jvO*T>_Cj=TNRNQD){67mP!RH130sob0!AxT9+;+72|C6J$S$s|Z;4JmM(tyq14v|A34L4o|g z%bzU#pyLr3X^gqYt_U+$4<-a*kvROtxH^03ZCtIzA!(T}L^nN5=l{|V7OI;u(qHI) zx%RK)21n7>)*0pS4Zp`PL}fj;M8-=MK2d0D#$z`kf8HE;hOULuF$fCA+bydeML6A zu1W3S^~xY=+Y!?429BI#=T#Aif|Z8A7Eor~U)YL)t=)Cd26XG*vRcSm*J3`;FweJie?`alp3CA9f}mx{hnIQk6Tz>3 zVDn@|yL-Obx3;Ec!9MY&)xzOiL*fE43MDpS~$Bh!U~*Cj~UE_{L<5)%v5%? z#&&&>zNjJ9jy^g3D_lP{EZbis|LHl8bY4ka?8rLt+|NNhh;^&@j>I3s{lcaIsCtQj zalPi~(|DZ1m28F1zimAo4|&v?BArj=Pv9JHX5QKPvT8@;cu}Yda6{xY`OAmB)XOc7Z_4$U#PxR zrBxy$k~XQh6_^g(()-?2QLlWasp4yOXcZO_oijSADXGq`b7>yxGaMuB?$%IR{Gzop zG)p5@d6kuMCF?2m@!RdJ19x3+u(EC`bx|>&Ky?4Y7If&ggPW$7a`p%3=cq{i`Of}| z!}n1eL!_D)j#)zW=tBWusj54E1cz3scF(ZaN~uxwf9HuAD4RoY&Oy0Z(|~1m|7&ehS?w{s~rlZ3edc=MwN+a z_2RB~)|Eb6VQ&M(XMgms-QhdFyeQC&EILmq$m46+pT*9TkawxCEo^;6+gQ!(`@pFX z%?pRCUdiB`sx;&z$k;}RKynf#O^nlvN zDKbxFHSXg#=Q(wzwtLMrBecK``W4!P!-No<8jFfudsB2{W*Y~y-xZ3{TVPB!GB3Ij1wXkj#)!dD8YKKADs)-DOpXi&(Nx%gTy9v-Lf z>?(I#?K988dFN2~S%{&DD^ zC_{TD&rGy^ShaglDjwNK2H8jPU~^g_L*HiNF7`t~(8U*Y@o%y7dIe$5>a@LX~|MOZ-B+S7$IhVHA;wv!Su0yE&>5BBm7(yZFDq0n3)9-RV=w!E0Dgkd# znfO<@khA3%`eULp=dZ__>Z0wPa;1t4DTJQWNGJWEA+I2I2zTK;5!PF7(n(wX;2JDS zVu}hBCAhzy$OpjlgQ(c=&8cX$V7mBW?NDdnte@xnOEf7alT}2~K|fTWdVzOD1+p%C zI#*V{XtW5^7Lb7Tog%TrB8bx}fDjvFfR-4bB|7xi+PI~UEfBQVSHSH9U;VAd^4Z>L<>TeH2t%#>J!uEg$!(84F~aznXfS=5{UmBHWp_E3!ekFW2rWW3<}T& zEpmk}f|w|wJJK4j;xNddVCueDJW8kl0E})yAW{eS&bU*#1juJj0%@v_gx)p23yWMg0I;IWzOiYk4+dIag0Hm*&Qrj4}2}Bx%&FpOEe*f8s{{ zK;rdW;Ze==IOMB8-*K^QN`=#~Po$CS(#xTHygIyw;skjWCWE*v<%FfW&1i@5C}zW> zTwazVx;C%%W&w*!yP=8^pvLSHG*Y7*a?9gj|2UzJcTMR9MX~X7sJE)*Y$-?iOMS+! zUsorAr|at=QeDqoj;?{(b}nLA35tXx!U~=Weks~#S5!+N7Y&%kT{6k97+n*RSTKh= zB#cyN2pgA&Sgado@)1IYasEO6hg19vBCctus6_WJe|Pq|XTt5e_)b!sc^e+T7LC5F zMvL!Sf3;R9v&%Z5k(Gzb5Ptt~sI;bYO4TCPI=y}rs$PgR4xJI#oUUpu&K_S0pqitZ z`F!Lz?^sdTI(en(Em*uqBB=Nmy%X`Nd5R!hG8L$bW2N;&Y3HyagT@7-rx2$3_gc8i zU!qfaRUN^!gpZwti-&jOE4XQX%E$mHXw)NnBO*Aa)v!A}F-T)TR(3b4 zw8i-zeS92JoMVmOKOaAtb0fg?78Mn}?Tba!xG(RBh&msARSiq=uIb#$z6Do!!DUIk zhtF#7OCxnfH$6|#MCEm%Gda5Z&2^#J@||iXkFo?^29B0NJWj<^lLKC)DoMHKaUBd2aZJZK1}~GHf|5ITO>z@h#piCxSZ*Pi0m9_ zZM&z{!#ccczZ|Nxabs&Wra2KZe|;9~#;lGEVoO`?lJ_{B^)74xn-@gy7I4m?KG zT0PwGu3GaiF&r(O@)6EU@l@^hVH_&bSY|BUFT<Ad$L?P~wYN?D@>YHs;h|f507>mUO&q)}qd9%D)SX4YYSOVe7K&;0f5(R&&*^RoW;&lg) zTxQLFtUVm-T=C&^h94haRmWks>l!c}G@LZf2A+pDmbPb)Eq6sXbfvxHiCCm6)76 zfB!Cv&g|m+tE@~JmU*3adOP%GgFyft832S7{N&dB;7>Nj-Ea~=cpNeLESB%;_h`^@ zR7Z%G%U(;5T4lqI>khuab19-9`Pacj2a4{Wpg0bDjqgz8KwG67n2qMiNW|_sA4vm` z^>SxqrF5f0X`aYzW1-{-BYpO>k%62e+72}Zv+|8r1MD7I?Gm6Vw#@jE@;RaeB$!`+ zyfuEHQEAP5ipn2ewgs$UL^`&K5+*ciO|+(-i+6rsXv0PqFFGBMHzH-^3B(cl+(l(7 z7{{3ThwZ`KOe3Q9{Mcj$3nCUBG28qPp^@ikhiuSL@9w^l7lp#V0{e?U&An)`8`k!S zCFb3WcGprT8K@zKgc4>kk}8lFJ!OyYvd_NmiN(9$!nEN}39*i>Kss3u6=uep{JrpR z?ynv5t&xCAe?3zQJbxK@2PL!=aMR8fW%ThBvv49~%>-4fP%Hp2+ok>?J`}eGt;!$l zN5~Kq<;iYs@K?N7NB5Xs`YYJZ<)or{&9H)D%*?Ni<|x}v!O5FtCjoi?({LQ=E7K-3 zK0O<>Vc+G`n0r7`d{-~w?^*z&5_9%Dhp6qit4xi#3P?0VDQ>-seD^mzK#iYi%Dted za;P-EUIOO_@LYXp!1dKjyif|FwV;bE*)~?5a za0=%kx0~M>1Zb3^H$`s@$mOTdnC1cA>Lk}{(!|ixIb3=Wv6qEsr}-;T+@E}H1BqWYrUxE>amoRi=~6D9H>`w)fzK8N zAiB&_TmsoGx<$Xmey8v3o_009JFSTt83C~h?S9LbBU*7|>#=p?Ns>DJjIU>BCp=UQ zPZmH@v&s}(Q=IpQMwWApm4k`v#e{3nh+>u~aVYZ3HKFd^`$|E*%V5vWPksUed};(1 z$}^^HX7?pqznj7p3Mo-IJ{$s^(Z(}*5eC}4gpaF^htz&JO%COUAgpfLvK^6R71ZC( zvbauE3%+^zo#PQH_5$zP0Z0+NS^Lg6h9rrYT^~j0=raJe0braVE~Xf;O=<}T4e75m z0pQmjIkMFXQfk5d z-C0VEd0jmERBa>Z&0TN~itxXH;RrD@aGT<(*^3=)(c93fY?p=i`;^rSgLJb0$}kP# z6snG$)8I(%(sQ7{ieJcaOBzf?SqP3DQwbwbM+?X6j#2j_!}1Msrm4L0n(2k`n%Oh8 zGKBDv(!smo;Pq=nJIcbV=t}~~O z$##@U*!Jr)6sf<6|IlA~)uNZ>gfcVq2U#JnexsSYkeG>orN%(YE91}_SeCNz zMc)rI#t}FIkA;+KM;UH-7y-+&1@@z7Yi06AJ+o_c8kj&lDId~y+<5BX_08mjtNZ~! z(hkHHy7yDe;DVEWJUEGKy}Zf?<2&>z5obUXqX4mnq{Bwj+YD-5g&fWTGU&CL(LhFs zlm+0_SXBR_xLIek)Ex@vVLHu%a2;TzYC!m@TP9Bw{4_)9-nG3O(=2Z3H03XUVYS`xz>((?804Ztjuv@e-tRnlh?>eSO2>e9O8q&!UV?SRgpU94~1lAsUi&;zaYr;{CBb~>bcLaV#NtB zLzv`>EaY?zWS{_X&2J&8b=^hnzY#p(XK6IIw|3EsGX}#uGf3&$fH zklw+g0sy$#yM3=1*UjyvI-WzG7yc{M1}xB!ZAz7@Q7f#^iK4u~br0n(oDaEM0dsH5S2h%i~$fUr9EZ%s)vsX)Z=xQnHz& zm4}^=fA=iYYo5$JTyU`HJ|M}aBE1X4&Zi1vl9PdApthOX5jrHW>noeE9Bt1$tTaGG zAMZ?8@9(vd%UsbwN}47LbrSb2I*|Dp8J@j+08-hiuWdD+PhIWCT#U<>q=Ryqe2s=z zWJFEs8i25kR00WU0#)D;)DlvEPQ_gm!6xW4>Wm6XGTLX&{L(7{9XozL0e+ML;`BBJleS~El6g{wfEGG%*LfD<{>~P zAqsm7T;kOdxQ$n795kjwCfA^Ji{~@IBaWvXxYSv7+{PxRBS>Rrj(tj=^MGCG3Fym2}?70G0UB9w+N) zP3QPq>OztPlM9cfDp*L5C(R}Bj z0VFUG@N;+HtK2|x#1mso>}9r1DPk79sQWkg zb^c;k7^jMVM_1WwsjgNw=9tO_bf|rT394#1?XGN9lajNpvJIR)80xz%-mMA4AwG#b z0)|T!B)G+gh{h63PMmaY-?>RL&?a5}jM(8QP))tEBO)N;Jt{Wa(Bg;#+0_^0w5^8v zZyv<9RRQjegMdqbv6A%R%kv6g=V+4(=E~0YZzJBp6bs?;Q&;rV;;1UMb+PNb^~_4 z0+4pH3NP`vwk#B1a42m)WmNsm=>%MoDM)E1=K`rWTbcCc;R8}10AOjhfvxFF;6^}$ zO~AP)Cn7xr85Ed`TRR|FLDeM!q+sN~`7ZA*bpO1TcULV203Z?vgK0eamtuo_c)7>p zki3?!?z@7^6c_zB5-IqRDedeJfb0epC?2aJg)R3PwagtW%u!_SQc3~$Gi z0$|9^2?9;)0khey$4$7=ja<7ZU>rrpZX~S3t``N;5gu$@d%gRei(eF`h`v*&pU=gC z^-T08+o3|1k}YY5ozrFzvpa?N&LR^+l#^7m_isDbfP~E_q#JIR15><{2}*c&_?=}C zu_m8-tFr#2fHkx4)B|$09Rsx3r+OShk4je0F=_D96h+j_mW;<5HqEIQ0pLbGSoq4O zYO=gE`OKJ1pOa-+imt&(>75Z=yv_9^#L1)URwJNQcq&cE?8B{2)lJstk<<0|Ei3F@ zd83STbslpGz}vJx0wW=r?c-U)Mwb4)?ZZkoNpege2}lg)mvY^iTBo^`T&t$a6v(`Z zq=Jc(DWisq(iw>e=+E=7?0moM`;(GyuWE{tdb5{sgTOQ;{*8QPAKJBtREvm{*Q0I$ zNR;0OYJrgR(03e}B#4)Ki+UR_3MR5{1rgO-&RH$(m`U0c6Al|(Ib+I+dn=7JyW41#gNKh z-BUDwd`}oez&)b8HSiQ)cGG(vwm_+f-(0U82vJ8}Iw18W^BMXd4$U-`X=`F3Ycu%u z*Xsvnx%+2_+-dJc_`EiVreg{YEKuq!;Vx9`h9UIk^?l+ZXTdwpD^H^ zMFuxc;hcEwWWe|>~7o_o;ar5^17j2H5 zBtEAB{{xtnDOJbkxyLu#=|H&%zJ${^TF3Ncm>v+iS#bvMKT&8J7w^9^OBmXI$lQ$= zPE&#^^(U+hAeEnvev7>a0uUhCnXf9}G4r(Sxf+&6-N|;BXe2VKP6YKuf3oN*X~!y0 zE79jSb}_?}S#P$Jc~;KB>Id8&^$)mSGK9B%MhZc}S2<8=OYLQr5`RPY*|oG#)Xi|f z_Jn=#^c1%`~`c^0L_OeZE#=3gDh6dzEdwGMBEplZ4hw7TDgP^3QQuBSXuMaoKfc%RK^S+Fw%wbp-_*Z^r882r}0HY8m!42hO4*=yrB@gwY9krh@2A2{%JLvuiF!7nFri?CO0ZFLVI zR3rDbbLLhpN2|VqHjnvvl6w!WXuc^+DMZJ$fYuO(s+b(d5gG_ly>Egffq7edidx^;AiSZ zj5LR24RmJP)wADQ4VE-tb%*@~;j+Z#426N;NJE7X4DKwjv_4~n92J$pwEiC!^BcgM@qhSJI9+Cb8!rF;#M+VuC)jJr%Sz|F ziLR;g`l_-eO^75v0~*MB{a0B^wV|!)$r(dqXq#~$_8fUVr>1yySSyEmbxsMt#WM}{ z3f+O+8}-F5Dj7K1BXX=Af;J$aYF|2G4*7!hd|ow~l@x<6?R62Bt)IVJFq=lPt(D69 zLM?FIC3=d`U%7HNDJkjg%1zemvCj$#OS9|h;H*g_72=RGVa(TZ3nHGgq}$lRXd;5m z;?j;%uRqN`DZ;1#Oby$8BBHpZqR$cMoP)M+(-qViR@_!s552vCQS(?4gT~zFAz@=9 z{EF{0-4~WgU-*=rh(zMc9jUH2qnJ=&yr0pYfsVq4j|!2&wE58JZIBN2kmSegV6u+X zwKc7~m$sA1L5hJr>&6tj<1Zy;HSm$5HEvl!z;94^G4lQ>Zy&w92{NoNGsC;?$KGk! zZ^FUd9M=DeXizM?t}HueX}iU{>jCzc9AM1F{O*TGE*PXb3k{;DBX??*w(P+^ly1ODc&vvCuzXd25J#tz@ z-B25fovpLB&{8~~687oSdzngb+hwAZqc2H5F@q45@-Cf_LKY)A4=C5$=aV@w?5Aq} z*z_Ls`3>^14rhfJP_*6#2Cu4_Ay%&EI3(o3+q+_ZU`jb+(A+l-cWBJn3{Ok;9(AaQ zp{^4WlhxZ@eZ$e-y&i7YQdar_av&dvbmS_LT_(*76$n>lMLdzEzA)@(=_u?oTn>zQ zBteV`=ujW$8qwQmgcqtl;g6yW$be)?3S+)iXvy7j=G$c`Q2SIz879LTeNcV! zC5nmTnTlMATRo2UdaKkeZ*T9eXriJ#u^|GKrRTuE4lE6JZ22>%7%?QYV@5MEsVG6c zlq#+rwefF`eIAK7#r14dDMYIL^eVtF5(7TBU8gC1sV9RALdJf;=OQM2na+X zIzZTI+l=;l{ieqTaGH~J84>ZTy}|-%Z`OqpH{)m}UQ8Q2qoY%AaM`P|(@wQ5$*#pKhzYR)0F_Y0c3lY5+dP5$@t``F$~(=5s(f|HuhOlereB|_lzb43D@2Ff0a%fS zetd`rc{C*CHMXxoi?1Dp>&aiG!B!L{r&slt)upEjpcmUN(vHqTLQ%z_KhmoPJH)i+ z5=>D!=Er>0RPjyA!8QHE{Ee=ZzmtRNn6!ZWLET3(KHPq=lxL<$~H*$`9^C zhJ`SHp4^w$v#F|eW_up{@M{Z0E631#h~&lR!;`c?DTTqir993rK7>Drc5YXd1A};~$!+HB+nJ%Z3w#ye4 zqH7Hj@oBjMzHXL)x*Dn>U|#4Xgp(w6X1+2Nn9%)33we(cCh(5^o6kBF9vwv&53fvr z8sFJOz~b}a1_Tr%3Ms5SPTIIQ;#gFy3pMZs-$f^PE}+Sv6E@v|EMdy|0m1V7fJc_fwaK$nfj~lY-ibp2dIB|hAP@)DgtKVz zc|MdkAp8yT)ZTwCRSoJ!b1;BgRi;gL$pg`Y6X3cHxGJSo*ih-ga1)~I2d=vvYu380 zm^wfIs0OQ`+`?LK^s1eBWBPTWKxe5QLa;bEE z2CvF7Z{3+m6XtADe@cG5r}d)#e1T%q=_14dVWC=i$LQi3X$xR66Lqq?d?sBBab)S!Cub4rNqsv(! zrC%oaYU!7$Yf!r*C z_d`-W>(cIgvl-bcVdPg52?>j!U$(LjB_xO<@9&&1%thZPVo+8a$~jQ4P3L>Fb&|+a(uTOZbnkn4HVZ#Y!0KoGj(~LVOq-UGdu64=@6lm{=*Va$OokcjM!OAp;$Q`_t2?JSUz#WxQBxBX>dQJS;aClLLp?SbkB${}>Z%FKPd$T4m>s zYL0kb^5=uBzthR$Kxmpp;{y&;Z6^lTE7Hd=;e+>5GNt- z`yB3RcJ%O;$BppCTFg6&1T7bjHOksgKqKV}s(4ynU8dRHTxOCWg=34lfuYi6*L%Ns z4jZ{#DP~Tc$Mu!fb21NdI_bMhIcFi1O*G42#%B$C%_)pI8onD1p?Pu{- zSA8t5+qd66l4(Gs)yoVM%50)o`%C*N$&|J9gkj8*59IRjtGaHiKW@Ajac5*@n8GQ) zYARkyih6)OF*p^(8TM}szjGX;?jK-$myOq;s1hCeH#+_{iisP-3*R+-a)59$D z0CyFal?v6Jk7pA33TAq0@vApFLU_kHo@>@|TP^(RP2l#%k#ReKf|~OP$*w53c^f;a zIcF;?t3B7_Sc_TGR}O{9GjlzYPwKBR61&6cmd(O70?5m}+ycb}`C0oiF{z_it?+hV zd)^u|*os519XaP2Jn=E_m4CfVjP@Nie#Xw4H=70`uWLYj3tl;5uESzSoB^jmgvNiqXx- z-masq+KL;muq(A|=Am%h^i<`zY22@Y;p+|DhN}BsXMed#(#d{SnK>S?)GAC@YZ-%Z z_{N;OdiFs=4Y1zwfFuIt_<-;Df4J@ydTSBzzAbs?2akAjdwKTrvR;KeD4k_=nAvo& zS)j2(yeVEyJd=qT({JP)s&8J@x&^nlE2?=u-<%DRebYhZWRTPF3whV=JK@V=J1MHzV|`HQ+&snFx}t-7l^*>Fkj>VH#S%X&UXvJAP+f)FWRy{VjHOUfyCc z(86jKQJg6;xVT^ueK9M&%@hB7F7%jhkdez<78J9BAUhr0W0JeAmS-wZW;aL__bp~> z+1wsuKD%6o*KDG`jrNsju<(rZ-$m=W(}U_Snz^SPHvL4$k2Zsy%v&p8?jV$-IvH4b z$ee3kf^Mr@aX33|d-k5V6Z31NhXyWPCrZLYe3pdf7_Td#a$`PzKxP=Tn)5a-K|Po$ zcHe~XE0ahmbfq4lgqg7uHj2S7x9U0NucT7%W>Zko6)Xr86iFq< z9P_dLs0uxJK#?7t{FU3J$2p4XxpvD;p;sk`Q)oivPeKk`yEhZu#$O*Hu=arD_+Mcx z_{s(+JsR*sokfJxNKF?{%=zq9nq1iJc_!dZuNzsg?YO5uToicsd{3g~Q?mAbOwstCD`cXxuvbu&m|5vKL4c(2>-^eT(yajM5_H8aa<>b6TM4?D&ldd<;kI z<9G@h9}yv?9CS(JvpyAZMk|ZbHnrML(wlwk<6do!&$pN1p`j-T%sNEM3puefa1(1t zsR199298yM8u|F+q@UvAwzZ&4idd6bkXaw@6-?+Dnvv09cM%aIjQ{JxLV7qvLEN~2 zh%Av#foK+iA$3eI)if3Pn~%TgXThGJ0If_r5LYVi^a=IcDg4GUSzoC)3saGX=$~1% zN5&=yx$WCF4gz~DAgtE@!2oE z^rfm>wVd1fN}GM$vj|qW{YUNX1FTAu4Yt*sh_U5+Suq;;9}$9Pfzle348b`jmb9c( z?3cUZKA#_%tV|JblUTIcMK2@;QnWt~8PXY{6%P+@Y+O|gQFdjErRVUqNks0VxdVCV-M+_%-kiC$|;=H9RK3y0i zs2~3x=N$Ub!JhY1T92)bzLReo53vI%D3rl4n#48sTlnr*@0vJXLLfgb>QB<5-*k25xg)HQX$D9#0bt($Z}(kk z<;9f4G4BMhnSvkSXs3^$qoES_7DfW$P!SPNW-4*`V#j?v%n$;iXv1L|@RaCF^j9A$ z+|xZ>OyY=iKOEqY2eTCbif$983TtU;NtlEU0Iu0q?+n(?2&Ui~ zX|vLL-)z=N3%4!b;W>=I1%7H_3RF>@p;r2|3Unr(#MYSPA8Q;ma&vLznl}SO&KMv> zwPUNPtTRI?yv2qNZK!o`#A&*?I=%zN#PS&#J)eE)YM-Xp+)2%WfRTiRq|S~tSyKlE!Y{2XhrE`eCzvwuv-oWW4z+kV z^7kX|VQ*l!WGvQ`bwx8#Jb2*ewzsQn`0-g;yWtZCrlfh2nrgNur=F{}le$`|Lm8Iv z`>Ox;8yj(#p`>Ns-C_58U!39@9Vzv}E{wPxpWsznI~#6v5iw~#^HP>0IYpqP2H4u? UYX5i&oE=15SX!u1;QiH6&`2YX_ literal 0 HcmV?d00001 diff --git a/output/2048.txt b/output/2048.txt new file mode 100644 index 0000000..355f231 --- /dev/null +++ b/output/2048.txt @@ -0,0 +1,93 @@ + +**************** +** SCAN TESTS ** +**************** + [ 38 19 38 37 5 47 15 35 0 12 3 0 42 ... 32 0 ] +==== cpu scan, power-of-two ==== +Time used in scan on CPU 0.002592 ms + [ 0 38 57 95 132 137 184 199 234 234 246 249 249 ... 49321 49353 ] +==== cpu scan, non-power-of-two ==== +Time used in scan on CPU 0.002624 ms + [ 0 38 57 95 132 137 184 199 234 234 246 249 249 ... 49267 49273 ] + passed +==== naive scan, power-of-two ==== +Time used in naive scan on GPU 0.047008 ms + passed +==== naive scan, non-power-of-two ==== +Time used in naive scan on GPU 0.04736 ms + passed +==== work-efficient scan, power-of-two ==== +Time used in efficient scan on GPU 0.090016 ms + passed +==== work-efficient scan, non-power-of-two ==== +Time used in efficient scan on GPU 0.16592 ms + passed +==== thrust scan, power-of-two ==== +Time used in thrust scan on GPU 0 ms + passed +==== thrust scan, non-power-of-two ==== +Time used in thrust scan on GPU 0 ms + passed + +***************************** +** STREAM COMPACTION TESTS ** +***************************** + [ 2 3 2 1 3 1 1 1 2 0 1 0 2 ... 0 0 ] +==== cpu compact without scan, power-of-two ==== + [ 1 1 1 1 1 1 1 1 1 1 1 1 1 ... 1 1 ] + passed +==== cpu compact without scan, non-power-of-two ==== + [ 1 1 1 1 1 1 1 1 1 1 1 1 1 ... 1 1 ] + passed +==== cpu compact with scan ==== +Time used in scan on CPU 0.002592 ms +Time used in compaction on CPU 15.2762 ms + [ 1 1 1 1 1 1 1 1 1 1 1 1 1 ... 1 1 ] + passed +==== work-efficient compact, power-of-two ==== +Time used in efficient scan on GPU 0.088608 ms +Time used in compaction on GPU 19.9872 ms + passed +==== work-efficient compact, non-power-of-two ==== +Time used in efficient scan on GPU 0.088288 ms +Time used in compaction on GPU 19.9553 ms + passed +==== ---------------radix sort power of two(256)---------------- ==== +Time used in efficient scan on GPU 0.05936 ms +Time used in efficient scan on GPU 0.059488 ms +Time used in efficient scan on GPU 0.058848 ms +Time used in efficient scan on GPU 0.058912 ms +Time used in efficient scan on GPU 0.061504 ms +Time used in efficient scan on GPU 0.059008 ms +Time used in efficient scan on GPU 0.059904 ms +Time used in efficient scan on GPU 0.058976 ms +0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29, +30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56 +,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,8 +3,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,10 +7,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,12 +7,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,14 +7,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,16 +7,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,18 +7,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,20 +7,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,22 +7,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,24 +7,248,249,250,251,252,253,254,255, +==== ---------------radix sort power of two(256)---------------- ==== +==== ------------radix sort none power of two(130)------------- ==== +Time used in efficient scan on GPU 0.058688 ms +Time used in efficient scan on GPU 0.058464 ms +Time used in efficient scan on GPU 0.058688 ms +Time used in efficient scan on GPU 0.058752 ms +Time used in efficient scan on GPU 0.057152 ms +Time used in efficient scan on GPU 0.058464 ms +Time used in efficient scan on GPU 0.05808 ms +Time used in efficient scan on GPU 0.0592 ms +0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29, +30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56 +,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,8 +3,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,10 +7,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,12 +7,128,129, +==== ------------radix sort none power of two(130)------------- ==== +请按任意键继续. . . \ No newline at end of file diff --git a/output/32768.txt b/output/32768.txt new file mode 100644 index 0000000..dbc7c5c --- /dev/null +++ b/output/32768.txt @@ -0,0 +1,93 @@ + +**************** +** SCAN TESTS ** +**************** + [ 38 19 38 37 5 47 15 35 0 12 3 0 42 ... 7 0 ] +==== cpu scan, power-of-two ==== +Time used in scan on CPU 0.002592 ms + [ 0 38 57 95 132 137 184 199 234 234 246 249 249 ... 803684 803691 ] +==== cpu scan, non-power-of-two ==== +Time used in scan on CPU 0.002592 ms + [ 0 38 57 95 132 137 184 199 234 234 246 249 249 ... 803630 803660 ] + passed +==== naive scan, power-of-two ==== +Time used in naive scan on GPU 0.381408 ms + passed +==== naive scan, non-power-of-two ==== +Time used in naive scan on GPU 0.370976 ms + passed +==== work-efficient scan, power-of-two ==== +Time used in efficient scan on GPU 0.540896 ms + passed +==== work-efficient scan, non-power-of-two ==== +Time used in efficient scan on GPU 0.541696 ms + passed +==== thrust scan, power-of-two ==== +Time used in thrust scan on GPU 0 ms + passed +==== thrust scan, non-power-of-two ==== +Time used in thrust scan on GPU 0 ms + passed + +***************************** +** STREAM COMPACTION TESTS ** +***************************** + [ 2 3 2 1 3 1 1 1 2 0 1 0 2 ... 3 0 ] +==== cpu compact without scan, power-of-two ==== + [ 1 1 1 1 1 1 1 1 1 1 1 1 1 ... 1 1 ] + passed +==== cpu compact without scan, non-power-of-two ==== + [ 1 1 1 1 1 1 1 1 1 1 1 1 1 ... 1 1 ] + passed +==== cpu compact with scan ==== +Time used in scan on CPU 0.002432 ms +Time used in compaction on CPU 18.6609 ms + [ 1 1 1 1 1 1 1 1 1 1 1 1 1 ... 1 1 ] + passed +==== work-efficient compact, power-of-two ==== +Time used in efficient scan on GPU 0.552384 ms +Time used in compaction on GPU 24.6243 ms + passed +==== work-efficient compact, non-power-of-two ==== +Time used in efficient scan on GPU 0.56576 ms +Time used in compaction on GPU 20.6086 ms + passed +==== ---------------radix sort power of two(256)---------------- ==== +Time used in efficient scan on GPU 0.058144 ms +Time used in efficient scan on GPU 0.058336 ms +Time used in efficient scan on GPU 0.059232 ms +Time used in efficient scan on GPU 0.05792 ms +Time used in efficient scan on GPU 0.05856 ms +Time used in efficient scan on GPU 0.058656 ms +Time used in efficient scan on GPU 0.058752 ms +Time used in efficient scan on GPU 0.058272 ms +0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29, +30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56 +,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,8 +3,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,10 +7,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,12 +7,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,14 +7,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,16 +7,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,18 +7,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,20 +7,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,22 +7,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,24 +7,248,249,250,251,252,253,254,255, +==== ---------------radix sort power of two(256)---------------- ==== +==== ------------radix sort none power of two(130)------------- ==== +Time used in efficient scan on GPU 0.058688 ms +Time used in efficient scan on GPU 0.058208 ms +Time used in efficient scan on GPU 0.061856 ms +Time used in efficient scan on GPU 0.057888 ms +Time used in efficient scan on GPU 0.06144 ms +Time used in efficient scan on GPU 0.058528 ms +Time used in efficient scan on GPU 0.062752 ms +Time used in efficient scan on GPU 0.059776 ms +0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29, +30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56 +,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,8 +3,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,10 +7,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,12 +7,128,129, +==== ------------radix sort none power of two(130)------------- ==== +请按任意键继续. . . \ No newline at end of file diff --git a/output/512.txt b/output/512.txt new file mode 100644 index 0000000..51920b3 --- /dev/null +++ b/output/512.txt @@ -0,0 +1,94 @@ + + +**************** +** SCAN TESTS ** +**************** + [ 38 19 38 37 5 47 15 35 0 12 3 0 42 ... 11 0 ] +==== cpu scan, power-of-two ==== +Time used in scan on CPU 0.002592 ms + [ 0 38 57 95 132 137 184 199 234 234 246 249 249 ... 12265 12276 ] +==== cpu scan, non-power-of-two ==== +Time used in scan on CPU 0.002592 ms + [ 0 38 57 95 132 137 184 199 234 234 246 249 249 ... 12216 12221 ] + passed +==== naive scan, power-of-two ==== +Time used in naive scan on GPU 0.036192 ms + passed +==== naive scan, non-power-of-two ==== +Time used in naive scan on GPU 0.03632 ms + passed +==== work-efficient scan, power-of-two ==== +Time used in efficient scan on GPU 0.068352 ms + passed +==== work-efficient scan, non-power-of-two ==== +Time used in efficient scan on GPU 0.068288 ms + passed +==== thrust scan, power-of-two ==== +Time used in thrust scan on GPU 0 ms + passed +==== thrust scan, non-power-of-two ==== +Time used in thrust scan on GPU 0 ms + passed + +***************************** +** STREAM COMPACTION TESTS ** +***************************** + [ 2 3 2 1 3 1 1 1 2 0 1 0 2 ... 3 0 ] +==== cpu compact without scan, power-of-two ==== + [ 1 1 1 1 1 1 1 1 1 1 1 1 1 ... 1 1 ] + passed +==== cpu compact without scan, non-power-of-two ==== + [ 1 1 1 1 1 1 1 1 1 1 1 1 1 ... 1 1 ] + passed +==== cpu compact with scan ==== +Time used in scan on CPU 0.002432 ms +Time used in compaction on CPU 15.9923 ms + [ 1 1 1 1 1 1 1 1 1 1 1 1 1 ... 1 1 ] + passed +==== work-efficient compact, power-of-two ==== +Time used in efficient scan on GPU 0.067168 ms +Time used in compaction on GPU 19.6162 ms + passed +==== work-efficient compact, non-power-of-two ==== +Time used in efficient scan on GPU 0.066048 ms +Time used in compaction on GPU 19.7871 ms + passed +==== ---------------radix sort power of two(256)---------------- ==== +Time used in efficient scan on GPU 0.058272 ms +Time used in efficient scan on GPU 0.058624 ms +Time used in efficient scan on GPU 0.058848 ms +Time used in efficient scan on GPU 0.058592 ms +Time used in efficient scan on GPU 0.058336 ms +Time used in efficient scan on GPU 0.058624 ms +Time used in efficient scan on GPU 0.058592 ms +Time used in efficient scan on GPU 0.05904 ms +0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29, +30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56 +,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,8 +3,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,10 +7,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,12 +7,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,14 +7,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,16 +7,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,18 +7,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,20 +7,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,22 +7,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,24 +7,248,249,250,251,252,253,254,255, +==== ---------------radix sort power of two(256)---------------- ==== +==== ------------radix sort none power of two(130)------------- ==== +Time used in efficient scan on GPU 0.058656 ms +Time used in efficient scan on GPU 0.058528 ms +Time used in efficient scan on GPU 0.059104 ms +Time used in efficient scan on GPU 0.058656 ms +Time used in efficient scan on GPU 0.058816 ms +Time used in efficient scan on GPU 0.058528 ms +Time used in efficient scan on GPU 0.058496 ms +Time used in efficient scan on GPU 0.057888 ms +0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29, +30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56 +,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,8 +3,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,10 +7,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,12 +7,128,129, +==== ------------radix sort none power of two(130)------------- ==== +请按任意键继续. . . \ No newline at end of file diff --git a/output/8192.txt b/output/8192.txt new file mode 100644 index 0000000..d9ed37d --- /dev/null +++ b/output/8192.txt @@ -0,0 +1,93 @@ + +**************** +** SCAN TESTS ** +**************** + [ 38 19 38 37 5 47 15 35 0 12 3 0 42 ... 4 0 ] +==== cpu scan, power-of-two ==== +Time used in scan on CPU 0.002592 ms + [ 0 38 57 95 132 137 184 199 234 234 246 249 249 ... 200667 200671 ] +==== cpu scan, non-power-of-two ==== +Time used in scan on CPU 0.002592 ms + [ 0 38 57 95 132 137 184 199 234 234 246 249 249 ... 200610 200643 ] + passed +==== naive scan, power-of-two ==== +Time used in naive scan on GPU 0.068576 ms + passed +==== naive scan, non-power-of-two ==== +Time used in naive scan on GPU 0.068832 ms + passed +==== work-efficient scan, power-of-two ==== +Time used in efficient scan on GPU 0.142912 ms + passed +==== work-efficient scan, non-power-of-two ==== +Time used in efficient scan on GPU 0.142816 ms + passed +==== thrust scan, power-of-two ==== +Time used in thrust scan on GPU 0 ms + passed +==== thrust scan, non-power-of-two ==== +Time used in thrust scan on GPU 0 ms + passed + +***************************** +** STREAM COMPACTION TESTS ** +***************************** + [ 2 3 2 1 3 1 1 1 2 0 1 0 2 ... 0 0 ] +==== cpu compact without scan, power-of-two ==== + [ 1 1 1 1 1 1 1 1 1 1 1 1 1 ... 1 1 ] + passed +==== cpu compact without scan, non-power-of-two ==== + [ 1 1 1 1 1 1 1 1 1 1 1 1 1 ... 1 1 ] + passed +==== cpu compact with scan ==== +Time used in scan on CPU 0.002432 ms +Time used in compaction on CPU 14.8358 ms + [ 1 1 1 1 1 1 1 1 1 1 1 1 1 ... 1 1 ] + passed +==== work-efficient compact, power-of-two ==== +Time used in efficient scan on GPU 0.139968 ms +Time used in compaction on GPU 19.58 ms + passed +==== work-efficient compact, non-power-of-two ==== +Time used in efficient scan on GPU 0.140608 ms +Time used in compaction on GPU 20.0698 ms + passed +==== ---------------radix sort power of two(256)---------------- ==== +Time used in efficient scan on GPU 0.061664 ms +Time used in efficient scan on GPU 0.058688 ms +Time used in efficient scan on GPU 0.061056 ms +Time used in efficient scan on GPU 0.058528 ms +Time used in efficient scan on GPU 0.05744 ms +Time used in efficient scan on GPU 0.061696 ms +Time used in efficient scan on GPU 0.058464 ms +Time used in efficient scan on GPU 0.05856 ms +0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29, +30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56 +,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,8 +3,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,10 +7,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,12 +7,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,14 +7,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,16 +7,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,18 +7,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,20 +7,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,22 +7,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,24 +7,248,249,250,251,252,253,254,255, +==== ---------------radix sort power of two(256)---------------- ==== +==== ------------radix sort none power of two(130)------------- ==== +Time used in efficient scan on GPU 0.058688 ms +Time used in efficient scan on GPU 0.059264 ms +Time used in efficient scan on GPU 0.05824 ms +Time used in efficient scan on GPU 0.058944 ms +Time used in efficient scan on GPU 0.058336 ms +Time used in efficient scan on GPU 0.058624 ms +Time used in efficient scan on GPU 0.058464 ms +Time used in efficient scan on GPU 0.058464 ms +0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29, +30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56 +,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,8 +3,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,10 +7,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,12 +7,128,129, +==== ------------radix sort none power of two(130)------------- ==== +请按任意键继续. . . \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 7308451..58c6009 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -11,10 +11,12 @@ #include #include #include +#include #include "testing_helpers.hpp" +#include int main(int argc, char* argv[]) { - const int SIZE = 1 << 8; + const int SIZE = 1 << 15; const int NPOT = SIZE - 3; int a[SIZE], b[SIZE], c[SIZE]; @@ -26,6 +28,7 @@ int main(int argc, char* argv[]) { printf("****************\n"); genArray(SIZE - 1, a, 50); // Leave a 0 at the end to test that edge case + a[SIZE - 1] = 0; printArray(SIZE, a, true); zeroArray(SIZE, b); @@ -83,6 +86,7 @@ int main(int argc, char* argv[]) { // Compaction tests genArray(SIZE - 1, a, 4); // Leave a 0 at the end to test that edge case + a[SIZE - 1] = 0; printArray(SIZE, a, true); int count, expectedCount, expectedNPOT; @@ -118,4 +122,25 @@ int main(int argc, char* argv[]) { count = StreamCompaction::Efficient::compact(NPOT, c, a); //printArray(count, c, true); printCmpLenResult(count, expectedNPOT, b, c); -} + + //Radix sort test + printDesc("---------------radix sort power of two(256)----------------"); + int *input1=new int[256],*output=new int[256]; + for(int i=0;i<256;++i) input1[i]=255-i; + //input1[0]=4;input1[1]=7;input1[2]=2;input1[3]=6;input1[4]=3; + //input1[5]=5;input1[6]=1;input1[7]=0; + StreamCompaction::Radix::radix(256,output,input1); + for(int i=0;i<256;++i) std::cout< #include #include +#include +#include +#include #define FILENAME (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__) #define checkCUDAError(msg) checkCUDAErrorFn(msg, FILENAME, __LINE__) - +#define blockSize 128 /** * Check for CUDA errors; print and exit if there was a problem. */ diff --git a/stream_compaction/cpu.cu b/stream_compaction/cpu.cu index e600c29..b517aa5 100644 --- a/stream_compaction/cpu.cu +++ b/stream_compaction/cpu.cu @@ -1,5 +1,8 @@ #include #include "cpu.h" +#include "common.h" +//#include +#include namespace StreamCompaction { namespace CPU { @@ -9,7 +12,20 @@ namespace CPU { */ void scan(int n, int *odata, const int *idata) { // TODO - printf("TODO\n"); + if(n==0) return ; + cudaEvent_t start, stop; + cudaEventCreate(&start); + cudaEventCreate(&stop); + cudaEventRecord(start); + odata[0]=0; + for(int i=1;i #include "common.h" #include "efficient.h" - +#include namespace StreamCompaction { namespace Efficient { // TODO: __global__ +__global__ void upSwapOnGPU(int *idata,int step,int n,int newN){ + int index=blockIdx.x*blockDim.x+threadIdx.x; + if(index=n) idata[index]=0; + if((index+1)%(step*2)==0) idata[index]+=idata[index-step]; + } +} + +__global__ void downSwapOnGPU(int *idata,int step,int n,int newN){ + int index=blockIdx.x*blockDim.x+threadIdx.x; + if(index>>(dev_idata,step,n,newN); + step*=2; + } + step/=2; + while(step!=0){ + downSwapOnGPU<<>>(dev_idata,step,n,newN); + step/=2; + } + cudaEventRecord(stop); + + cudaEventSynchronize(stop); + float milliseconds = 0; + cudaEventElapsedTime(&milliseconds, start, stop); + std::cout<<"Time used in efficient scan on GPU "<>>(n,dev_idata,dev_tmp1); + cudaMemcpy(tmp1,dev_tmp1,n*sizeof(int),cudaMemcpyDeviceToHost); + scan(n,tmp2,tmp1); + cudaMemcpy(dev_tmp2,tmp2,n*sizeof(int),cudaMemcpyHostToDevice); + getCompact<<>>(dev_tmp1,dev_tmp2,dev_odata,n); + cudaMemcpy(odata,dev_odata,n*sizeof(int),cudaMemcpyDeviceToHost); + int count=tmp2[n-1]+tmp1[n-1]; + + cudaEventRecord(stop); + cudaEventSynchronize(stop); + + delete tmp1; + delete tmp2; + cudaFree(dev_tmp1); + cudaFree(dev_tmp2); + cudaFree(dev_idata); + cudaFree(dev_odata); + + float milliseconds = 0; + cudaEventElapsedTime(&milliseconds, start, stop); + std::cout<<"Time used in compaction on GPU "<=step) odata[index]=idata[index]+idata[index-step]; + else odata[index]=idata[index]; + } +} + void scan(int n, int *odata, const int *idata) { // TODO - printf("TODO\n"); + int step=1,count=0; + int *dev_odata,*dev_idata; + cudaEvent_t start, stop; + cudaEventCreate(&start); + cudaEventCreate(&stop); + cudaMalloc((void**)&dev_odata, n * sizeof(int)); + cudaMalloc((void**)&dev_idata, n * sizeof(int)); + cudaMemcpy(dev_idata, idata, n * sizeof(int), cudaMemcpyHostToDevice); + cudaMemcpy(dev_odata, idata, n * sizeof(int), cudaMemcpyHostToDevice); + + dim3 blockPerGrid=((n+blockSize-1)/blockSize); + cudaEventRecord(start); + while(step>>(n,dev_odata,dev_idata,step); + else scanOnGPU<<>>(n,dev_idata,dev_odata,step); + count++; + step*=2; + } + cudaEventRecord(stop); + cudaEventSynchronize(stop); + + if(count%2==1) cudaMemcpy(odata, dev_odata, n * sizeof(int), cudaMemcpyDeviceToHost); + else cudaMemcpy(odata, dev_idata, n*sizeof(int), cudaMemcpyDeviceToHost); + for(int i=n-1;i>0;--i){ + odata[i]=odata[i-1]; + } + odata[0]=0; + cudaFree(dev_odata); + cudaFree(dev_idata); + + float milliseconds = 0; + cudaEventElapsedTime(&milliseconds, start, stop); + std::cout<<"Time used in naive scan on GPU "< +#include +#include "radix.h" +#include "efficient.h" +#include "common.h"; +#include + +namespace StreamCompaction { +namespace Radix { + +void scan(int n, int *odata, const int *idata){ + StreamCompaction::Efficient::scan(n,odata,idata); +} + +__device__ int getDigit(int n,int pos){ + int result=0; + for(int i=0;i>>(n,dev_idata,dev_b,i); + else getDigits<<>>(n,dev_odata,dev_b,i); + Reverse<<>>(n,dev_b,dev_e); + cudaMemcpy(host_e,dev_e,n*sizeof(int),cudaMemcpyDeviceToHost); + scan(n,host_f,host_e); + cudaMemcpy(dev_f,host_f,n*sizeof(int),cudaMemcpyHostToDevice); + int totalFalse=host_e[n-1]+host_f[n-1]; + getT<<>>(n,dev_f,dev_t,totalFalse); + getPos<<>>(n,dev_b,dev_t,dev_f,dev_d); + if(i%2==1) switchPos<<>>(n,dev_idata,dev_odata,dev_d); + else switchPos<<>>(n,dev_odata,dev_idata,dev_d); + } + + if(num%2==1) cudaMemcpy(odata,dev_odata,n*sizeof(int),cudaMemcpyDeviceToHost); + else cudaMemcpy(odata,dev_idata,n*sizeof(int),cudaMemcpyDeviceToHost); + + cudaFree(dev_idata); + cudaFree(dev_odata); + cudaFree(dev_b); + cudaFree(dev_t); + cudaFree(dev_d); + cudaFree(dev_f); + cudaFree(dev_e); +} + +} +} diff --git a/stream_compaction/radix.h b/stream_compaction/radix.h new file mode 100644 index 0000000..daf69cd --- /dev/null +++ b/stream_compaction/radix.h @@ -0,0 +1,8 @@ +#pragma once + +namespace StreamCompaction { +namespace Radix { + void scan(int n, int *odata, const int *idata); + void radix(int n, int *odata, const int *idata); +} +} \ No newline at end of file diff --git a/stream_compaction/thrust.cu b/stream_compaction/thrust.cu index d8dbb32..f09cede 100644 --- a/stream_compaction/thrust.cu +++ b/stream_compaction/thrust.cu @@ -16,6 +16,23 @@ void scan(int n, int *odata, const int *idata) { // TODO use `thrust::exclusive_scan` // example: for device_vectors dv_in and dv_out: // thrust::exclusive_scan(dv_in.begin(), dv_in.end(), dv_out.begin()); + std::vector in; + for(int i=0;i dv_in(in.begin(),in.end()); + thrust::device_vector dv_out(n,0); + thrust::exclusive_scan(dv_in.begin(),dv_in.end(),dv_out.begin()); + std::vector out(dv_out.begin(),dv_out.end()); + cudaEventRecord(stop); + cudaEventSynchronize(stop); + float milliseconds = 0; + cudaEventElapsedTime(&milliseconds, start, stop); + std::cout<<"Time used in thrust scan on GPU "< Date: Sat, 12 Sep 2015 14:45:04 -0400 Subject: [PATCH 3/4] HW2 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a169eed..4a5c20b 100644 --- a/README.md +++ b/README.md @@ -28,5 +28,5 @@ Performance: ![](image/analysis1.png) ![](image/analysis2.png) Those two images are for the 32768 input case. And the output for all input case are in the following files: -"""output/512.txt""","""output/2048.txt""","""output/8192.txt""","""output/32768.txt""" +[[[output/512.txt]]],![](output/2048.txt),"""output/8192.txt""","""output/32768.txt""" The test case for radix sort is in the bottom, which contains power of 2 test(256) and non power of 2 test(130) From bfacb6c0c05530fb33ec5a68d4675d959a0443d8 Mon Sep 17 00:00:00 2001 From: siqihuang Date: Sat, 12 Sep 2015 14:46:02 -0400 Subject: [PATCH 4/4] HW2.1 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4a5c20b..c3f1841 100644 --- a/README.md +++ b/README.md @@ -28,5 +28,5 @@ Performance: ![](image/analysis1.png) ![](image/analysis2.png) Those two images are for the 32768 input case. And the output for all input case are in the following files: -[[[output/512.txt]]],![](output/2048.txt),"""output/8192.txt""","""output/32768.txt""" +"output/512.txt","output/2048.txt","output/8192.txt","output/32768.txt" The test case for radix sort is in the bottom, which contains power of 2 test(256) and non power of 2 test(130)