diff options
author | Chuanbo Weng <chuanbo.weng@intel.com> | 2015-02-02 14:42:30 +0800 |
---|---|---|
committer | Zhigang Gong <zhigang.gong@intel.com> | 2015-02-06 15:06:39 +0800 |
commit | 184cd93d54c60bfe059f0a6b7f3fb72c2f18695d (patch) | |
tree | 7f1540ede5454df8f119d75f708826551d2037a3 | |
parent | 77670c3fbd3b24a60ecbbb9bf8088ff3bf433f15 (diff) |
Add example to show libva buffer sharing with extension clCreateImageFromLibvaIntel.
This example reads a source nv12 file to a VASurface, and creates a
target
VASurface. Then creates corresponding cl image objects from them. After
using ocl to do mirror effect post-processing on source VASurface,
target
VASurface is shown on screen by default.
Code of loading nv12 file to VASurface are referenced from
libva/test/encode/avcenc.c.
v2:
Delete 1920x1080.nv12 and 640x480.nv12 because of large size, add
256_128.nv12 as default test image.
v3:
1. Re-org files: add libva as a submodule then use display related
files.
2. Show result on screen by default instead of saving as a file.
3. Fix warnings.
v4: Fix whitespace format warnings.
v5:
1. Modify upload_nv12_to_surface to read a nv12 file and then upload
it to an NV12 VASurface. Also modify store_surface_to_nv12.
2. Change the cl post-processing kernel from gray effect to mirror
effect, which make demo cooler.
3. Minor fix of other problems.
v6: Remove unnecessary OUTPUT_NV12_DEFAULT related code.
Signed-off-by: Chuanbo Weng <chuanbo.weng@intel.com>
Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
Reviewed-by: "Guo, Yejun" <yejun.guo@intel.com>
-rw-r--r-- | CMakeLists.txt | 28 | ||||
-rw-r--r-- | examples/CMakeLists.txt | 35 | ||||
-rw-r--r-- | examples/libva_buffer_sharing/256_128.nv12 | 1 | ||||
-rw-r--r-- | examples/libva_buffer_sharing/libva_buffer_sharing.cpp | 465 | ||||
-rw-r--r-- | kernels/runtime_mirror_effect.cl | 24 |
5 files changed, 553 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index bfe04316..7cf0b3b9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -184,6 +184,30 @@ ENDIF(OCLIcd_FOUND) Find_Package(PythonInterp) +OPTION(BUILD_EXAMPLES "Build examples" OFF) +IF(BUILD_EXAMPLES) +IF(NOT X11_FOUND) + MESSAGE(FATAL_ERROR "XLib is necessary for examples - not found") +ENDIF(NOT X11_FOUND) +# libva +pkg_check_modules(LIBVA REQUIRED libva>=0.36.0) +IF(LIBVA_FOUND) + MESSAGE(STATUS "Looking for LIBVA - found at ${LIBVA_PREFIX} ${LIBVA_VERSION}") + INCLUDE_DIRECTORIES(${LIBVA_INCLUDE_DIRS}) +ELSE(LIBVA_FOUND) + MESSAGE(STATUS "Looking for LIBVA (>= 0.36.0) - not found") +ENDIF(LIBVA_FOUND) + +# libva-x11 +pkg_check_modules(LIBVA-X11 REQUIRED libva-x11>=0.36.0) +IF(LIBVA-X11_FOUND) + MESSAGE(STATUS "Looking for LIBVA-X11 - found at ${LIBVA-X11_PREFIX} ${LIBVA-X11_VERSION}") + INCLUDE_DIRECTORIES(${LIBVA-X11_INCLUDE_DIRS}) +ELSE(LIBVA-X11_FOUND) + MESSAGE(STATUS "Looking for LIBVA-X11 (>= 0.36.0) - not found") +ENDIF(LIBVA-X11_FOUND) +ENDIF(BUILD_EXAMPLES) + ADD_SUBDIRECTORY(include) ADD_SUBDIRECTORY(backend) ADD_SUBDIRECTORY(src) @@ -194,6 +218,10 @@ IF (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true")) ADD_SUBDIRECTORY(benchmark) ENDIF (NOT (USE_STANDALONE_GBE_COMPILER STREQUAL "true")) +IF(BUILD_EXAMPLES) +ADD_SUBDIRECTORY(examples) +ENDIF(BUILD_EXAMPLES) + SET(CPACK_PACKAGE_VERSION_MAJOR "${LIBCL_DRIVER_VERSION_MAJOR}") SET(CPACK_PACKAGE_VERSION_MINOR "${LIBCL_DRIVER_VERSION_MINOR}") SET(CPACK_PACKAGE_VERSION_PATCH "${LIBCL_DRIVER_VERSION_PATCH}") diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt new file mode 100644 index 00000000..904f2593 --- /dev/null +++ b/examples/CMakeLists.txt @@ -0,0 +1,35 @@ +EXEC_PROGRAM(ls ARGS "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libva" OUTPUT_VARIABLE LS_OUTPUT) +IF(NOT LS_OUTPUT) +EXEC_PROGRAM(git "${CMAKE_CURRENT_SOURCE_DIR}/.." ARGS "submodule init") +EXEC_PROGRAM(git "${CMAKE_CURRENT_SOURCE_DIR}/.." ARGS "submodule update") +EXEC_PROGRAM(git "${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libva" ARGS "checkout master") +ENDIF(NOT LS_OUTPUT) + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/../utests + ${CMAKE_CURRENT_SOURCE_DIR}/../include + ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libva/va + ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libva/test/common + ${X11_INCLUDE_DIR}) + +link_directories (${LIBVA_LIBDIR} + ${LIBVA-X11_LIBDIR}) + +set (examples_sources + ../utests/utest_error.c + ../utests/utest_assert.cpp + ../utests/utest_file_map.cpp + ../utests/utest_helper.cpp + ./thirdparty/libva/test/common/va_display.c + ./thirdparty/libva/test/common/va_display_x11.c) + + +ADD_DEFINITIONS(-DHAVE_VA_X11) +ADD_DEFINITIONS(-DINPUT_NV12_DEFAULT="${CMAKE_CURRENT_SOURCE_DIR}/libva_buffer_sharing/256_128.nv12") + +ADD_LIBRARY(va_ocl_basic SHARED ${examples_sources}) + +TARGET_LINK_LIBRARIES(va_ocl_basic cl m va va-x11 ${X11_X11_LIB}) + +ADD_EXECUTABLE(example-libva_buffer_sharing ./libva_buffer_sharing/libva_buffer_sharing.cpp) +TARGET_LINK_LIBRARIES(example-libva_buffer_sharing va_ocl_basic) diff --git a/examples/libva_buffer_sharing/256_128.nv12 b/examples/libva_buffer_sharing/256_128.nv12 new file mode 100644 index 00000000..230f4cf4 --- /dev/null +++ b/examples/libva_buffer_sharing/256_128.nv12 @@ -0,0 +1 @@ +FDFGGGGIIIJHKLKLNLLOMOOOPRA)BNQPRRRSRRUTVXVTUVXWWYVXWXWYXXZYZYYYZZ[[[\[ZZ\[Z\\^]]]]]^]^^^^^____`_`_`_```a``acaaacbcbdcabdbccbdcdcdcadcdbccdbccdbdddccddcdcdabcbcbcbccbbcaabdcbbLhiututtuuusqomknopsqrstuuututsrqoponnmlkkkjj“°„ƒ†ŒvWY[ZZZZZ[YZYXXYWWWWX[YSg_[CGGEHGHHIJHILJLLLNNMMOPOPO:(EPPRQRSSSTUTTTVWVVVVXWXVYXXXYXYYZYZZZZY[[Z[Z[[]\[[[]\\^]]^_]__^^^____a``aabaabababbaabaabcacbbabbcccddddcbcddbdcddccdddcdccdcdbdbccbcdcccbbcbcbbdb`Lhiuuuurqopqrsqtttuuuutvsrrqpoonmmlijiihfddb`ˆ²†…ŒwXX[Z[ZYZYZYXXXXXWWWWWYYQ†_FFDFHGFGIJIIHHLJLLLLOOOOPP3+HOQPRRQSTSTUUUVTVUWXXWWYYYYYYXXYYYZZ[Z[[[[Z[[Z[\[^][]^]^]_^^^]^]__^```_aa``aaababccccbdccdcccdccddddddddecdcdddccdcddddcddedccdcdcddccdeccbbabbcddaKggqsttuvwvwxxwxvvssrqponommlkkjjhgfc`]ZUROLKx·ˆ€€„ŠwYX[[[ZZZYYYXYXXXXXWVWVXVeZECFGFGFHIHIIIJJKMLMNMOONOP,-KOQOQRSRUSUUUVWVVWXUWXVXYYYYXYYXXZYZZ[ZZZ[[\[[[[\\Z\]]]\^^_]_^^^___a_`a`a``baab`cbbbbcbbcdccccacddcbccdddddcddddddddddcddddedbdcdbcddcccbbbbabccccaIghwyy{yyzyxvussrqpopnnmmmiihfda^YURNLJJMOQTUw½Š€€ˆyZU[\\ZZZYZYXYXXWWVVUVVVUQOCCEFEGEGHHIJIIJJKLLMOOOPPL%/KNPQQRRSSTTRUUVVXVVVWWYWYYYZYYZYZ[ZZ[Z[ZZ[Z[[\Z\\^]]\]^^]^]__^_______a`_a`bb_cabacbccbcccbcbcdcdddccbddcddddddddeddddddddddcddcdcccdcdbcababcbbbbdbKfhy|zyxvutrsqppnommljihec_[WRNKKNORUUVUTTTVVvÑ€}~‚…z\UZ[Z\ZZZZZYXXXWWWUVVTTUSOCDDEGFFFGIHJHIJJKLLLMNONOL"0LPQQRSSSSUUTWTUVWVWWVWYYWYVXYYYYYZYYZZ[[Z\[\[\\\\\]\\^]^]^^]______``___`a`aa`cbcccbcbbbbdccdcddddbedddddddddddddddedefeeddedddcdccdddddddcdbbbbbcccMefvwtttrqpppnmljifc`[WSPLNNQTVWVVTUVWVWYZZZ[uÀ•€~}„{^SZ[[Z[ZZZYXYWXWWVWVVVTTTSCBDFDEEDFEHHIJIJLKLNLNNMQL 4NOQPRRSTSSUUUWUVVUVXWWXXYXYYYYZXZZZZY[[[Z[[[[\[\[\]]__]^^^^]^^]___``b`_babb_`bcbcbccbdbcdddcccdddddedeedddddeedeeeeeeeedeeddddcddddcdddfdccdccbcbcbJefrsrrqooljfe`\XSPNNPTWYZXUWVWXYYZ[[\\\\^^^_qĘ€~}}ƒ|`S[[Z[ZZZZZZYXXWXVVWUUTUTTBBDDCFFHGFIHHHIKJKJKMMNNNF!5LOOQSRSSTTTTWRUWUVVWWWYXXYZYYZYZYYZ[ZZ[[[[[\\\[\\]^^^^]`____^__`_``_```b``abbcdbcbccbccddddddddcdedddeddeefeefffeegeddgdedddefdfcddddedddcddcbcccdcLdfoonlhc[SSRONQVY[ZYYXXYYZZ[]\]^^^^^^_____``nÁœ~}}€{bO\ZZ[ZZZZZYYYXWXWSVUUTTTSEBBCDFEIFGFGIGIJJKJJHKMMMF$:NNPPRSRSSTUTTVUVWWWWVXWYYXYYYZYX[Z[Z[ZZ[[[[^[]\\]\\]_^^^_^\___]__a_aa`ababbbbabcbbccbbddcdcdcddddeddddeddfeeefedeffedfeefeeededdddddddddccdddcddcdcOcdb^YUQNPSZ]][Z\[Y\]]_^__`____``a`_`b_``baaci½Ÿ}}}€}dT[[Z\[ZZZYZYYXXXWWVTWfVTT56<L>&17@CEGHHGIIJJKKLNNMA&>NONQRSRSTTTTUUUVWTWXXVXYXXZYZZZYZZ[[ZYZ[[[Z]\[]\\]]]^_`__^___^_``_```aaaabbbaccbccbddcddcdddeddddededeeeeeefeeeefdgefgedeffeedeeeedededdddcdcccccddOcdVV[aa]VQ\^^^__aabb`aabaaabbabbbbbcacaccbcdkº ƒ~}}|gTZ\\[[[Z[ZYYXYXXVWVQcfbUT *+%,: "#"#&)-149@CHKKLNL=&?MMPOOQRRSSSSTTUVVWVWXWYYYZYYZZZYZYZZZ[[Z[\Z\[[]]^]^]]]]^^`]____^`````aabbbbcbbbcccccddddceddedddddddeefefeeeddegeefefffefffeeedfeddeeddeedddcdddcddQcda`^__`\Tbddedfcedddcddddcddcdcddddddddddeej³£‚}{~|iU[[\\\[Z[ZZYXYYYXWWM\EWUU"%.$"( !"!"#""#$$&$%&+/373',BLOPOPQPRRRTTTUUUVWVXWWYXYXXYYYZZ[\Z[\Z[\[\\[[\]]]^\^^^^`]_______````aaa`cbccadccbcccddddddedddddcdfeegeefeeefegfgfffffefffeeeffefffdedeeddddddecccdR`eefhhhhcYeghffffggfeeeffgedededeedeefefeffgl¬¥„~{|}zjV[\]]\][[ZZYZYYXXXVKQCJ_T" !""$"" ""#"#$$%$$$%$$%%&'''*.26;AHPRRRSSRTVWVUWVY[XZYYZXZZZZZ[[[[Z[[\]][\]]]^^]^^^___^__`_a_a``ab`aabbbcbccdcddbedddgdedeeddedeeefffgffgdffegggegfggfghffffeeededddeedddddcdccQ`dkklllki\ijjjiiiiiiihghihhghggggghggghhhiigl¨¥…~{|}{kXZ]^\\\\[ZYZYYXYXWWKYHEbV"!""%$""""""##$$%$$$$$$%%$&&%%&&'(()+),28<AJPQWVVXXWXXYYZYXZZZ[\[[\Z]]Z\\]\]^]^]_`]__^^__`_``a^`baabbbcddcccccbcbddeeedddededeffeeefgfeffgggfghghgggggghfgfgffffedeceeefededcdddSadmnoonnm_imllkklklkijjjjijihiiiihihhiiiijjjm¡©…~|||{lYZ\\^\\\\[Z[ZYXYXWWL\]@VV+*-))(&&%%$$%$$#$$$$%&%%%%&&%&&&&&&'(''(()*+,+.4EVXXWYYYZXZY[ZZ[[[Z]\[[[[\\]]]]_^\^_^___`````__`aa`bbcccccbccccccddddeefddfeeffeeebfffgggffgghhhggggggffgghigfffieeefefefeeeccddV^dmrqqqpqclnonnnlmmmllkllkkkljjjjjjklkkkllllmŸ°‡|z{zl[Z]]]]]\\[[[ZZYYYVXOTuKkY+++++*+++*++-++*+)''&%&&%&&&&&&'''&(()'))())+)++5VYXXY[YZYZ[ZZ[ZZ\[\\\\[\[]^\\^^^__^^____``a``a`a``aaccbbbdbddccdddddfeeeeeeefefefefhgfegffgghhhggghfgihehhggfggfffffeefeeeeeeedV^dotstsssiopqqppponponmmmmmmklmllllmlmmmmmmopš®…|zzzm[Z]^]^\]\\[\ZYZYYXVQMsnx\+,++++,,,,,-,,...-.....-.--+*)(('((((())))(*)**+3VWXYZYYZZYZZZZZY[Z[Z[[[\]\^^_]^_^^_____``__a_a``aabaabcddcdccddddedfeeeddefffefeeggfggdghggghghhhhhghhiighggfgehfhggdffeeeeeeddX`dqwxvuvulttsrsrqqqrqpoonnnnonlnnnmononnmoopq—²†{yyzn]Y]^\^\]]]\[[ZZYYXXSHrz|[+*+++*+,+,----..//./.0//0//11/0010/./-,+++))*+++/PWYXXYZZZZZ[[[Z[\Z\]Y\\]]^^^^^^_^__^___^_`aba```abacbcccdbbcdddddceededdedeeffffffgefffhhhhhgghhhhhghihhhhhhgghghgggfgffedfeeefX^eqyzyxxxjswvuussrstrqqqqrrppoooonopppprrwy}œ¶†|zy{o\W^]]]]\^Z\\[]ZZXYXUI^}|Y+++,,,,,-,,-.-././/1/00/0101111212223433332211/-/KYYXXXZZYY\ZZ[Z\\\]Z\[]]]]]]^^]__^__^`_`_a`aa``baabcbcbccccbddeedddeegeefffefffheeegfghhgfhhhhihhihhhhhhhiehhgggghhggffffeddeee[_dr}||zzzpvwxxvuvtuuutssrsrrrprqquy}‚„‡‰ŒŒŸµ…}yyzoZW^_]]^]^]\^[[[[ZXXXNPz|Z+++,,-+-,....-../00///0011112313343344445454653,.GWXYXXZZ[[\[]^^]]^\^^_^^^___^^^`__``__^_aa`a`abbaabcabcddcddddedddeecdffedffffffhffghhihhhhhihiiiiiiihigjgiiggihhhhfggfffeedeeeZZdr~}}||oxyzyyvxwvvwvvtttssssrss„‹Ž‘Ÿ´†€}zxyp[W^]^^]]^]]\\[Z[ZYXXSRwxW++++,,,,,,...././000010011221322445446555566665..AYX[DtÃÔÕª¢œ—š—““˜™œž¢§°ÁÊƦdJ\b`_____````ba``cb`b`cbcbccdccddcdedfeeeeeggefgeeegfgigghghgihihiiijiiiiiihhhhhiighihgggfgfhefff[Yds€}ku{|{{zyxxxxxvvtvtvutttv†ŽŽ‘‘‘’‘‘µ…~xxyq[U]_]_^]]]^\\\[\[YYYWSjjS,,,+,,-..-.-.-.0/00/0102121224333435555555566760-‘º¤›‘Œ‡ƒ~~~~€‚ƒ……†‰‹’•™ Ïó¬K_``a`aa`aaababcccccbcdeeeddddefeefefffefgggghggghhihifiiijijiiiiiihiiiighihihhhggihggggedf\Xdrƒƒ‚‚€ju}~}~|zyzzyzxxwuxvwwvuv†‘‘‘’’’’“’ž²†~€ywyp\T^]^^^]^]]\\\[[[ZZYYVSKS+++++,,.--..//000/0011112323333444345567866779€¨›šˆƒ}{ywwwvvvwy{|{€‚„…†ˆˆ‹ŒŽŽ“—”—œÓXa``_`aaaaabbbbccdccddddgfceefffffefgghgghigghiiiihiiiihiiijiijjjiijjhhijihhhhihihggfgff]Wcr…‚ƒƒƒƒou~€€~~||{zz{yxvrqljedhl’“”‘“”“”““Ÿ»Ey}yvwp]T_]^_^^]]]]]\\[ZZZYYXROU,+,,,---,...//0//0101222222334344445665778878|”‰~{yxvutwuuuxxyz{|}€„„‡‡‰Š‹ŒŽ‘’”–¢b`abaaaabbcdbcccccdddddeeedefgffgegegfgghgihhhihhiiijjjijjjiijijiiihiijhiihihhhgggffff]Vbr††…„†„pv€€€}zxrmgefhjknoqsuwwx„’““””•”“••‘j_@y€yvvq^R__^^]^^]]]\\[[[ZZYZXXWV+,-,,---.../0///00021212222344545655579787987…Š‡}Œ€v}|xwvvxuuvxxxx{|€‚……‡ˆ‹ŒŒ‘’“œr`aaaababbcccbcccddddeedeeefeefffgfehhgiihhhgiiiiihijiijikkjkikjjijijkijijiihighiggggf_Vcq‰‡„‚zkdgddggikloqruuvxxzyz{x|‚’““’““”“””“ˆiQM}yuuq_S^___^^^^^]]][\\[ZYYYYXX+,,,-,-.-....1//11112233424354545777676777898€Š†gy}zxxutwuuwuyxz|}€€‚ƒ„…‡ˆŠŠŠƒŠŠŽ’’–š‹a``aa`abbbaccbcdddddeedfeeefdfhgghgighhhhhhiikhhiijijkjiijkikkkkjjjlijjihiiiiiiihghff_Tbdhffghhijkmnpopqstuvwxyyyz{||||‚’‘’’’““’’“˜ˆk4eztuq_R^____^]]]]\\[\\[ZYYYYXW+,,-,--......1001111333333335355567798767798:ƒ‹ˆ|}w|zxvvuwuuuwyyz{}‚ƒ„†‡ˆ‰‰Nkˆ‹‹‘•™žva_`aa`aabbdbdcdccddddeefegfefgggffggghgghhihjjijjjjkjjjjijkjkkkkkkjjjkjjiijjijigighgh_Sbceikkllmmononppprstvyyz{{|}~}}}Ž‘’’‘’’’“““—¬g[;qusp`S_`_`_]_^]^]][\[ZXYYYXWW,,,-.../.../0/002113233443545565777897778798:€ˆ‡€Œ}y{yyvuuvuuuvxyz|}€‚ƒ„…††„nmynk†ˆ‚f]‘™žma`abaaabb`bbcbcddddedddffgffdfgggghggiighhhihhihjkjjkkkkkkkkkkjiljkjkkjjjkiiiiijhfhgeaPbbbfhjlmlmmnooppoqsuvyy{}}~‚‘‘‘’‘’•§„cNGptqaT^``a__^^^\\\]\\[ZZYXYXW,,,--..//..//11111123444544456657678887788:8<„ˆ‚Œzx|zxvuuuuvwvyyz|}€‚ƒ„…‡…r„ˆ‡~n{+.6—šma`aabababcacdcddbddeeeeffefggfheggghhhhiihhiiijhjkjjjjjkkkkkkklklkjkkhjkjjjjjijiihhhi`Rbaacdfhklmnnooqprstvxy{}€€€ƒŒ‘‘‘’£Šib7VrqbT_```___^^^]]][Z[ZZZYXWX,,--.-../.0000112333345445556666678898887898;„…ƒ‰wzzywvvvuuuxwyzz|~€€ƒ…†‡ƒ>‚W…€q]Z,.30”nk`aaa`aabacbbdcddededddefdefdegggffhighhhiiiiijhiijjjjjlljlkkjlllklllkkkkkkjjijiiihiihbQa`aabdffhjmooopqqstwy{}€ƒƒ{g‚ƒ‹Ž‘ŽŽ’£w`X=aqcV`aa```__^^^]\][[ZZYXXXX,,-.-..///1/111121334364455656678889:9:998::8‚~„ƒ‰yzzxwvtwuvuvxyz{}ƒ„„…‡‚Q|iva<-.4:‹faa`aa`baaccbbddddddeeeeedfefeggfgghiiihhghihijikjjjkkjjjlklkklllllljlllkljkjjjjijihhh`Obaadbddefhjlmnoqqstwzƒ†‰‰ˆ†si„‹‹ŽŽŽŽŽŽŽŸŒxpaHIkfZ_caaa`_`_^_]]Z[\ZZYXYWW--...////0/0112222344555565677788989:989899;<v……‰sz{ywxuwuuvwxyyz}~€€‚‚„†‡„;Sj]‚n2,13@€{fa`aabbbacabbccdcedfdddeffgfehfffghigigihijjhjjkjkjjcl^himkllklklllklkklllkkkiljijiihhcOa`aaccdeffhilmpvyy‚€~~zz~lQbrgƒ—ŒŽŽŽŽŒŒœ‹xvf\5Se[`bbabaa`_^^^^\\[ZZZYXXX-../..0000011222333545566566678999::::999:;:=wrƒ…ˆfyzyxvvvvvvwxxz{}€ƒ„…†‡…tv{qv}:G.SS>€d`aa_a`acccabcccceg…rsuritnigigbb_`^Z]\XYYYWXUSZYUVWUURMPow„…nllllllmklklmlmkkljjiiiiicLaa`bddfeffghh~ÄÅ›‘±œ©º¾½½Â˜E_nqcX‚ŒŒŒŒŒŒŒŽ˜xws_S;TZ`baabaaa``^^^]\\[ZZYXXW-2..00//01/11223334366666687779::::;;989::::@sxx|~gxzxvuvuvuvxxzx{|€„ƒ„‡…„L0=QPso0/4>€e`aa`aababacd|œrOIF=OLMOONNOOQPPQQQQPQQTRQRPSRQRQPOQOQONPMQXcmy‡rmmmnmmlllllljkjjijjiicMaa_bddffgfe_UqŒ„tmnfgi_]WQG3@atdJ{Œ‹ŒŒŒŒŒŒ—wutj]@>V`ccbbaaaa`__^]]\[[[ZYXX/.../0/001013334454465557878898::;:;;:;::<;;@quvxvoonoqrsstuwwyyz{y~€‚‚‚‚€|ymYeErxxH7:y…„_`````baan¥L5--PŽ²¶iVNLNOOONORPONUG@HHHKEDGMRRVc\^dam`fT];=ADHMUcy„mlmklimmlkkjjjkkjjifMbbc`cfggfXI>7>FAAF;313,)).)'5^rcFw‹ŒŒŒ‹‰•‹vtsp`Y2B_ccccbaaa`__^\]\][[YYXW./.0000/11212243464667677879899::;;;;;;:;<;<<suwxvonjjiijkmortvwy{{z{{{zyvwxywibkt|€zJ]‹Te_`_`ahiJª·¨sqlŒ‡‡yDSžœŸŸ ¢¢¢¤¤¤¤¥¥¦¦¥¤¦¦¦¥¤¤¤£¤¢£¢¡›€U[eiI:><BXnmlmllmllllljjjijjeNab`]adghge_VHD-(',*()((-CV<,5]qdFy–›¢£ŒŒ‹‹ˆ“‹wrrql`O5Rcdcbbaa`__^__]^][[[ZXY/..00/0001223334656768787999:::;;;;<;;<<<;;<@rwwxupmjighiiiijlmpswuqijuxyy{|~c_ayŽ†Eqˆtc```abYHLˆ‡Škgg‡„†vG@I‰œŸžœ¡ž›žœ››™—˜‘–“ŽŽŽŒŒŒŠˆ„Œˆˆ{uzIHI||{^af€„nmmmmlmlmmjjljjjigLab][^bdffbbge`<**@=6310Eim[=;\oeE„´¹²£œŒŒŠ‹‘Švsrpof\67adedcbba``__^^]][[[YYY.//0111101134455667789879:99:;;:<<<<=<;;=<==>rwxzxppSfidnoonmoqvxxk>--yƒ„……„ƒ€}|~‚†ysƒgba```a[JP‡‰‡hfg†ƒ†tDA@BiklkkQSRRRjhiiiDBACGiiiiiPQQRWqrqyFIH~||^`_}|rmmmmnmmmmlkkjjljieOaaa\\bedbbfhhpY+-QG:654BghM67WhdTÂÊÎÎÍ̦‹‹Š‹’Švronmj]T4Adddcca_a`a__^_]\[ZZXY./101211123334585878889:99::;;;;;==<==<==>>?9{q{„ƒaqiYY^jlnstvx{zwE))-w…†‡‰‰ŠŠ‰ŠŠ‰…„€~…‰c``__`ZJQ„‡ˆggg„ƒ†qDA@DifgggPQOQPgffggEA?@FhhfhhRQQSXooqxFHI||]``}}nmmmmmlmllllkkjjjiePag‚|pvq~gfgm‰ncNWhaY[adinlQAFOPLM_’ÀÏËÎ̪‹ˆˆ…{tronmkc[F5Vdddcaba```_`]][[[ZXY//2121112334656788899:::;;;;<;=<<=>=>>?>>>??;sk{„f.^4-epsuvvxz|{zs[Agaxƒ‡‰‡Š‹‹‹ŒŽŒ‹Š‰‡†€‚b`_```XKO„…‡gffƒƒ‡oHIIFhggffRRQTQhfgghDBADHffgfgQRTUXnoqxXHH‚|}da`}}xmnnmllmmmllklkkjkfLbg…|€‹€smlflihgggdccabc^J?<>@CEGAJ|¡šŽ€o]XUOiqsqpnlkcZY06bedccbba``__^]][\[ZZ/012331233556677888;::;;<<<===>?>>=?????>?@@9Jsyxtoa4*5lsuuvxyy{|}}wH/*7ƒ†‰ŠŠ‹ŒŒŒŒŠ‰‰ˆ†‡‚‡``a_abYLO€‚ˆL>U‚‚†N66558lihiZ555559liiCQ44444ShjSWQ3564FzHHQhy{d`_~|ummmnmmlnmllkklkjkfPbafb`[YX\\]_adginnpqtstrjA559@?C?:6@?=31/+3?BcqtqonmkcW[Q3Idedebcaaa`_^^^\[[ZY100232334467677899::;;<<====>????@@@A@@@A@AA:*wwvtad4(:Mclqtvxz{}~~zH,-r€…ˆ‰Š‹‹‹‹‹ˆ‰ˆ†ƒ}w}aa`c`aF<I…?_zE<ƒ^dZVWXO5RjH9[UUVYF6bj5>[VSU[44nX6=cXZb:8K[90;:j_i:3|pnnlmollllllljjjifPabfhieagifeb_\YWRQKIFDB??9217;><:529>M311+/7;\jtpnnmkdWY\;5`cdccbaa```_^\\\[ZZ/01244344466779::;:;;>>==?>??@@@A?AABAACABBB<'w|}k+]jllgV+Kmswzz|~€|ulrL}ˆ‰ŠŠ‰Š‡Šˆ‡…‚wmiv``_`a`Z[Fy6fjkgk\lkM=ASWX5~YW\I9DWUZ3PZV\FANYUM;3YWaUU_XfL6`a`f8a:pl]mnmnmnmmllllkkjiifOa^IFC?><9754321001012112874661001024=U756/-13?XqpmmlkdV^\W2>eddcbac`___^^\[[[Z213344456678989:;;<==><>>@?@AAAABABCBCBBCCDC:"z†lWwyyxutspc(bty{}‚€€}T+*U…‰Šˆ‡‡†‰Š‡ƒzmhek_`ba`aBF^–iC@A>j›˜<88847T‚€5569766Y~637873:bƒ\648743b“€@==Ycm_lhkmnmmllmmlmlllkkjieM`\;43554442101121033434472042-,-////8G8651-211KqpmmkjdX_d]H3Reddcbbb`__^[]\\Z[223445576789::;;=<==>?@@?AAABCBCCCDEDDCEDDED;#~R}}|zywxxvsm9]tz}ƒ€s1-~‡‰ˆ…yLx‡ˆ‚}rhedj__`aaa?:4‘>BB=ol¥;:8775W‚€‚6567765rƒS‚/568674ƒƒ€5988852Ž’:?=;|“39=`mmlnnnmmllllllkjjfOa_PLJGFCEF8.02233344544;C7122/-/1.-.6M9662-430LpnllkjcW_i_Y39bedccbaa`_^]]\[[Z3444566778::;;<===?>?@AAABBCDDDDEDEFEGGFFFFE<(x2|‚~|zxwwwwun0gw}€ƒ‚ƒƒ€…‡‰‡‚(.a…†€xmfdcja`aa`a=<Y™Tiquxedx€iab``__^_^^b`Cb``__`b_fdfiu…~€Œv‰T959œ“V=;almmmnlnmlmllllkkigQ`qÏÍÆÀ¹¬¦˜v614554555768JƒiAC?83461.9[Y9864/440KomlkkjcX_if]P2Efcdcbba__^\\]\[Z44466677::;;<==>??@@BBABCCDEFFGGHFGGGHHGGHHH=%zj„‚€€}yxwxwxxul(pz}€‚‚„ƒ„†‡ˆ‰ˆ†vUT‚zrjecbk```_aasGVLMQ]PRRZZ¡‚€€]]^a^^]\]\]^6]]^]^]^fbe_^ƒ„ƒƒ…INdGHaNNMOSglllmmmmlkllmnnkmfPazøúùùùøöïÑF4677678689;A€‘f_f\TRKA9Q|]<:950562LomlkkicY^iha[<4Yeedbb`__^^^]\[Y45667889:;==>>>?AABBCEDDEFGGHIHHIIHHJJIIJIJJ=%w~…€}}{ywuquwxt]Vx}‚‚„…††ˆ‰‹ˆ‡‚..||wmheebn_`_`aasHIZSNXQ[UU]£…€€€€_]b]e^af^\\^6]]]]_aaa_^_`ƒ‚„„…ŽMMO]IbLJMKAtlllllmllmls›¾ÀÅÔÕuPbmõûûúúùøóØE698989::::;=Xt€€“‘Ž‹rPToR=;;92753MomkjijcZ^ijg[U0;bddcbaabd]^^\\[556789::<=<?>?AAABCEEFFHHHHJJJJKKKJKMLKKKLLK?&-…„mt}}{yuU<_vywr&s}€ƒ‚„†‡ˆˆ‰‰Šˆ‡zfgtrkgedbn``_`a`nJLOLLZPQV\W˜ƒ€q\_[^_^]^]]]7^]]^^]``d^aƒƒ„„„…GKMNNcLPQNVslllklmmos£Ê¼©–ÎÙ½RbxõúúúùöôðÕG8;:;;;<<===?Gp™˜•’‘““rPOF=>?;3:55MokkjjjcY`jiid\I2Nddcb``de^^[\[Z47779::<<>>@A@BBDEFHHIHJJIJLLKMMNMMMNNMNMNNM@28‡„*j}|{zu38rxxyt6l}€‚ƒ„…†‡‰ˆŠŠ‰ˆƒ_/lmihdc`h_aa_``mJLNKN[TSW]Y–ƒ€€_c]c`c^_^]_7^^]]_d_i_`_‚ƒƒƒ„…†ŽƒLXJMcLKLX…mklknlsÌ»¡‡¬¿¼¹°±¼WbpóúùøøöóïÔD:>=AKQLMDCA@DyŠ|d\UPNW[RHA>A@<4<39NnljjiicZ_kiii_X/8bddcablf^]][\[78799;<=>??ABCCCFFHIIJKKLLNNNOOOPPPQORPPRPPP@Ga‰…i||{ywsrwyyyv_bz€‚ƒ……†ˆ‰‰‰‡†ƒwgnhWcb`[e`_`_`amFGHOM\QZQS|™„€€‚l`cb^_a^]]^5\\^^bb^_`fy‚„„„„…†‘”WKGR`LRML”gkp˜»–‡vmkŸ©˜˜Ç œŽX’qóùù÷÷ôñîÕG:?OP_efj^cYTR[_QB@@@ACFGGHEFJNe`;8KpljiiibZ`kkkjh]O2Abccfw„k]]\]\Z889:;<=?@AACCDFFHHJJLMMNNOPPQRRRSSSSTTSRSSSR@kqŠ‡‚~|{wwwxxxyywhIpvwx{}‚ƒ……†„„yslc\_YXR\_`````l^MLQR\\WZ\¡˜ƒ€‚€^ab]UZa]]_6___dcbcde`‚ƒƒ„„…„†“MQRVaNYO[“r´Å¿€lhiii¡”»°¨¹²›zpóø÷öôóñîÔB;@FmQbTP\`OgjOC>>>==?ABBACBBH_‘£†ANnkjiihd]`llkkjcZ95Xchu€ˆzf]\\[[9:;;==?@BBEEFGHIKKMNOQQQSSTTUUUUVWXWWWWVWUVTBrxŠ†…zneiotxxzzzxl>koqrruvwxyzyxvsnhbXT<:DLS_`__``hkEMIM\NOeVœš„~€€‚t_c_Qcf[__8^]_^_`e`_|ƒƒ……………†“DLMK`NKQ^”ÏÊĽ…u€Žž§¨«ª¸µ¨«©Ž|eoò÷öôóòïíÑ„Š‘”œW`TQdZLb]NBX…ym?>>=;=?@CWˆž˜dJmllihhb]alnllkk^S/=j|‚‹‚r_\[[\:;<<>?@ABDEHHIKLMNPPSSTTVWWXXYYYZZZYZ[YYYXYWAtz‰ˆ…nrxwuoVtxyyzxk@loqqstuuvxywtsold`Y>:@BDO______knONPL[PVNOœ—ƒ€€€€XGCNMfa]]7_^__d`^_fƒƒ…„„………‡–‰Z]^`JXLZ–¹Á½²°µ±§µ´Äº«•›€gs}èóòóñðîëÊŽ’“’ŽG28CGDRyaIBVŠ„x@?>?>>>>@Rt…fYmkjiiid`annnmnlg\B7[~~ˆƒ}m\VY_;=>>?AACEFHIKLNOQRSTUWXYYZ\\\\]]]]]]^^]]]]\\Vuu‹‡rz{zxtlVuyyzymNloostuvuvxwutrojda^YXTSNW__^`_`if?WNOZQWP“š–€€€‚‚JMDKIHbW`8_____e]`‚„……ƒ„…†…‡’”s\~PcPNK˜–¹ÅÇÁ·¨¢§¸À½Ë©›‹““ZX[^dfimovnz€–™˜“I:?LWJs…‚sQb”Ž…„€|y{wrnd^j‚xf`mkhhhgdacnoponmlaV.=}„}€}^e{†=>>@ADDEFIJLNOQQTTXYYZ\]^^_``_aaaaaacbb`a`_^hvgŠ‡;rwwsk4:vyzzvW]npqruwvwxyxvtroiea`][YVRW^___^ZjI;GbKXOMP”™“€€‚]MCDtFcH_^7_^_``__„„…„„……††‡‡‘“VdfpkSNP“”Öʼ¥ «¾ÅÆÆÈ«¤›‰›¦—SRRLKLLKKIKKY™œžšJTDYab~‚€zWY“Žƒ~|€€‚ƒ‚{z{vwtmX\liihhgdedoqqrpoooZJ6Q|y€wx…•¡¢ >?ABCDFHIKNOPSTUYY[\^``abddfeeffffffefefcccbewF‰ˆ+,IU<,+fv{zzr$forqrutvxxyyxurpjfcb`_^\WK__VKLHl=:F?MZNS€“™”ƒ‚‚eEKQHTEKZ9`]^_ga‚ƒ„„………………ˆ’qcgmdOV^–—Õ©›¥½¼¶¯ª¨¤šž©µ“TROIIKFC>>GHOƒŒŠ†J`jdgjwƒ}o=Z”“‡c^cihkehhda^[S>HljfggeegdpqsrrrsqX4<ky„‰•ž¬¶¾«=ACCEGHJLNPRUVXY[]_`cceehhijjjkkkkkjkijihgggWx1ˆˆ„r)))*9itxyzwi=lrrsuuxyy{{{{zxwsnkjheb^UOMHLE>;l\pOCW\XL‘’—“‚‚‚€€`GBjDb5_^_j_Zo|ƒ„„…†…‡‡†‰’p“•ccaQN™––—’«¤¢©¦•”{ŒŽ˜”‰UQLIII@9<CGGGu‹Ž‹O]BScjinjhPT‘‚BDJKPPKNMOPTPA8Gjihfffdhfpprrrr|‹‡^P7IŒž§®´¼¿´ª@BDEGIKLOQSVXY\^acdfghkllnoppppppqqpooonmmlkuƒR…‰‡€yqnpuuxxyxn-nvz|}~‚„„†ƒ…„ƒ{wqnlifb\XQME:533mnqJ@ddtU_`—“‚€€€€€‚‚‚ƒ}OgGGpYjkiRSS`d]{………††‡‰Š“—˜—mcldaw—žÉ¦¸ÎÍ°Ž–tgig‹•pRNJHC=:?FGHHJt‘”—”WfkNgotpwI4XŽ‹}758:=??@778;=87Fiigffedifqppoot„‹Y;Lz·ÂÑͼ¡BEFFIKLOQTVZ\^bcfgjlmpprstuvvwuuwuxuvuutssqqzŠ‡y……ƒ~|zxyywwuo1jx}€ƒƒ……†‡ˆˆ†…„€}xrplif`]YPB636=MjnoJ?pZx?…UQƒ€‚€€ƒ‚TfKYjYXXqJI„z_SPZ„…†††‡‰”™˜™}picf–k‘ÒÓÆÓȘtfynkkpn€Š^QMD>=C@FGHHGLu“—™˜S[CPcp^y„]3XŽx333567<?1-,+)47Biihededfepsqpoy‹”›eRDt±ÃÈÅø³¦DFIJLNQTVXZ^`bfhkmrrtwwz{||}~~~~}~}|{zzywt}Œ‰+}‚€|yxyusnX-oy}ƒ„„…‡‡‰ˆ‡‡…ƒ€}xsolhe`]W\=BVcbbjnq<@GKC;‹PG“€€‚‚hCFGEG[orKeF€ƒMTOLZ‡†‡‡‡‰”™™‡ifgqi™pÙ×Ʊ˜ŒkfflsyxrvˆƒSE=?EE@DFFFGDIqŒŠM^krjfJiˆp3V““f:KOVSSJ;8/+(*8:Pjihffddicorsqs†’•›¥\C}“·»¼¿¿²ªFHJKNQTWY\_cehknqxxz|~ƒ„ƒ„„…‡†…†„…„„ƒ€~{€ŒŒ€%ltwsqoi]9.brx}}‚„„…†‡‡‡ˆˆ…ƒ|ysokge`]VW=?DGNUjmG<]E?>eŒNŽ‘‚‚‚‚‚‚€KHGGD[EHMHNYa„‡NNh…†…‡‡ˆŠ–œ›hkwr~’—|׫›”œr`cd^SSSPw‰kI:EMGCCEFGDCBESŒ—””L\cDemPi‡s7W‰T09BCHJD:453/*07Jjihedddhbkoqo~’˜Ÿ§®°wVAx¸´»½¤GJLNQSW[^achknrv{}ƒ†ˆ‡ŠŒŒŒŽŒŒ‹Š‡†„‚‚Œ…<*+! .C-Zkrx{|}~‚ƒ„…††‡‰ˆ‡…„‚~wtolhea\VK/0//12lm<<DJVCDBŒ’Žƒ‚‚‚‚‚eDEGHFXHFJG\gF|ƒzƒ…†††ˆˆ‰‰˜Ÿ¢mk^qanu¡¢š——‡j_dd^OEBI`~~D:7<A3PÍðîæäåìíïììé˜NY^bms[t‚r8W‡E,09?@CB82/-+'/:Kihgdeccd^hgiqŒ›Ÿ££§²«\M\‡²²¶¾½ºJJNRSWZ\aegmqu{|ƒˆ‹‹‘’‘“•“˜•™•™•š“”’‹Œ…‡|ŒGfi*`hY*U0mvz{|}€‚…„…†‡‡ˆˆˆ†…ƒxrmkhda[UL<99998la=EEJWJJEj‚€‚‚IL\J[]]9_^WEKFI‚………†††ˆˆ‰Š™ ur\Yn[]n™¡vrrkjac`XSV[PTSZU@¿äÕÑÑÊÊÜçïòõõõõòðëäÊ`Jgf[eo9U–”>,,37:;;;2++();CKiigfedb\[a`\Xa~šÅÄ°¹¥x‚Ž†‰‹•¥79:==@CFIJMPUX\_dgkmoqqqqpqqrrtututroqonmmljvŠ€HV*VD[Q8\Qty|||€‚ƒ„„…†‡‡‡‡‡†„ƒ€xrmkgd_ZSL@?=;:<hXmDDIRJK‰R‚€‚‚‚€JKH[]^^^:_^]^[GNG…‡†…‡ˆ‡‰Œš pYYp\Z¥u WW[^_YSQc_^[[hˆØ¿¼¼½¼Á¿Ùìõøø÷öõóðïíêçâ؉n`Tfzd6T˜Œ1+,.00002/)'('1?Liheded_WW\XQB39LŒš“n‹cuxrnw€9@MVQGEFJNQTZ\bfjpuw{{yyxxyyz}}€~|ywvuuuutsxŠ‰ƒ'otn$PL,kxz|}€‚ƒ……††‡‡Šˆ‡†„ƒxqnjgc^ZUJ6:.-9>gkmCDHQJK€w‹‚€‚‚‚‚‚fUQ]\]_^_5^__^^_]€L……††‡‡ˆˆŠš Ÿ YWq\Z…œžSZ]\``UaZWhi¾°¬ª¯µ·ºÑåíóõøøùøõòîéääáÜÙÖÍ·vqwmT4U–w@<@?GHKK=5.'&%+3Gihfedc`TQXVMB74@›˜—”qie}–¡£¢¥ž50+%'*1=J[X[`chotz‚„…‚‚€€‚…ˆŠŠŒ‰‡ƒ€}|€}|z‰ˆˆ‡Œx;b7\oD=Gwz|}‚ƒƒ…††‡†‡‰ˆ†„…yrnjfb^YSI:;9448hkmDEIOJJV‰Š‚€|Xa^_^___9______hp]v……†‡ˆ‰‰‹š ›WUwYUTttxwvvuuw¨«¦Ÿ £¨°ÍåëïñõõòðïîåáÙ×ÕÑÑÒÎÍÌžHXZF4X¤¥¨©¹¹—qVK<74.,/9Qjkjfdd_QIo{}~€|‡„K4-2gqposqrlt::>?AIKD,$$).6CQdy|ˆ€vvljedgirujaYOHHGHIOQOGG‡v|‡Š|)b3kvuoqxz|€ƒ„†„…‡‡‡‡ˆ†„ˆƒwqmhe`]XRH6;77CSfjcBDGSHKO†‹‰ƒ‚‚‚__`_^_a;^^____`‚„„…‡†ˆ‡‰‰Œš [WVtVUSœœ_rnlrpr„¦Ÿ””—› £ÚæêìíìëêæáÛÖÒÍÆÆÆÇÆÃÁÄÃÂÆÆcMB4f¢£¢¢¡¬˜Š…†’”Œ†…Ÿ®Žec_N@sƒ…ˆŠ‰†~M*((,KSVX[\>7e///00002223433.*%&''08?GPYhb\OFA=:;;::;;;;;;>ˆ+V}}u<r\hvxxyyxyx|{|‚ƒ„………†‡††……†vpkgc_\VCG;;?JG@ehGACGQHIK†‹Š‚‚€€€‚a_^^^^__:`^_____h„†…††‡‡ˆŠšŸžYUSqUTT˜›EJKHIF£Ž†ŠŒŽ—œâèçéèçãÝØÔÒ¾ÈÁººº¸¹º»½ÅÇÉÈÑÖ×L7x¤›œ’Š‘Š}~‹‹€uyzywy}†zfcM>[lqy|~~x@''((/+((++%%+..0011114453588;;=>ABAA>;0,'%'')+*+++-257=@D@{)NvugOjdYouvvuUPnj1q|‚ƒƒ†„„„ƒ‚ysmgc_\VM=HnWE@??cfC@BGPHHJ€‰‰‚€‚€^^_`_`^_8`__`^``a„…††‡‡ˆ‰ŠŒ™ŸTRSoSQP›™pqrkp¢“…~‰•šžßçæåáàÝØÓÐËÈ»±ª ¬²¶¸»ÀÃÌÒ×Üà̧KkÑþò”ˆ‚etjx‡†ƒ‡Ž†…„xm†•—˜›šŸ¤ ¢„*(((,,%'*****:05<966577>763;<=B:555A2:72005;5105458221<.4:o(Nun'1cC-7fkml`mkqcirtvuxxxyxxwtrnhc^[WRPERIÄ5468bf@CBEQHGJd‡ˆ‚€€€€‚p__`^__]`<`_____``{……††‡‰ˆ‰˜ŸžQPNiPNOš–LMO\¡ˆ~†…xssbÞååäßÜÙÓÍÊÇÁ¼·µ··¿Â½¾ÃÆÍÔÚÛÖÉ•ˆK`©¯ŠŒ~Z2345457677:<=BBCIHMQX^fllqry@677A:9?HP?%&+&&)'-77*-0<`]T1310957./1//8A223708:447:<494?+pruqb^c_#bdjkhToxzhRlqtuvwwwwwtrqmfa]YVRNIJKu<7-,+TKZ[KMTZ^nv†„~€‚heeeffgffHhgghillqr‚‚ƒ‚‚‚…Ž‘v‡xYT[i˜KU©ŸŠsrojgce„ßåâãáÞÚÔÐÍÄĺ¼¼½³»ÁÁÌÍ×ÚÑÍ·¤‘Pfi™vxrtx|„x=88765124231/.//022122223457?>932425200//.+30/..,--.-././1244579999:;<<<>=<<;:68#+04DH2+uxvsmknl]hkkiIakutgO8qtrvvvvvvurrlf`[XSPMHBIPJ1/..SLXampuy|o|†r}ƒ‚~~}€~nnYeor„€„„ƒƒ…pq„†rq…‡‰‡‡‰Š‹ˆ‚c€™››š˜~•~š˜zwefdcb`ZÈÒÑØÜàààÜÙÖÑÐÒÌÐÎËÑØØÙØ͵•~‚ƒ†ƒ‡}›Pdcabbbdvƒ\E=5,../202234333323343222232211111/007r““,)AGXdgijcYSEBBB?;:98:8:9<;:<:=:;<==9<:<<=:=?(sxxusqpnmlllkfd^cIhjnrtsvuuvwvuspjd_ZVROJHEA:7447<]UW>DnqrKit|r]‚XmpYrnW{ƒ„„ƒ„ƒoXp~…qsRˆ‡‡ŠˆˆdS€jMu•]J“…”ylbaba^^_b¯µÁÆÊÏÒÕÛáâáàßÞÛÛÙÎή›‰ˆ†…ˆ‹Œ‹ŽKR[cw‘šŸ¤©¨¨¦¢ž˜”Œ…vnf\N@:2.&'+*+++,-,-+(*+2Luš¢0011257877655579:;;;;<<==<>?>???@??@@BA@ABBCFdwywvsqppnmllklljG^moqsssvvuwvvusojc]POIEHFB9+**-CHGK4bD@@CR{mq†HFIJOJHGL‚opmw[GHNLJLJIxyprq†LJNKJIIK’†~ŽŠLMJ–DB:\\]^_^\[†UU\‹ž®ÂÀÆÌÐÓÑÒÌÈ¿°¥˜‘Ž†„‡ˆ†…†‡‰ŠŒ•´·µµ¶··º¹¹¸¶··¶¶´³²±±¯¬¬ª©¨©¨¨§©¥£¡ Ÿ™—šžŸŸ¢Ÿ Ÿ¢¢¦¥11////123:;;;;;;;::;;<<<>@=;<;:9577<CJMV]W_UMvxzywsqponmlmllmmklnppqssuvvuutsqoia[OGDDEFE9))(((-///2ejmsw?7>A€€jPLYv€`:eH;€~aSYt‚€;DG<S…†€vx‚†‰}<7;{–š887:\\\\^_^XVIP`NWw‹––››—•‘‹‰……~ƒ…„ƒ„„…††‡ŠŒŒ’—¹¹»¾¿½¼»»¹·····¶¶¶µ³´²±±®®®®««««ª«ª«©©ª§§¥¥¥©§¦¥¦¦¤¥¥58;9<<;<=<943321.--*+)&'''''&&&&'&''(')('*(),uyzywtqqoomlmlkmnnmppqsrsrsutvtrpoh_ZPCP1CDG2()(((6/./0145764779:8t~ƒq?::9::::9T}„€~C:;;<;;;<3KlpS2=<99;8:977668^^[[YY[FGHDKEEElz|{vx{{}|z}~}~‚ƒƒ„…‡‡‰‹‰Ÿ¸·¸¿½º··¸¹µ¶¶¶µ³´´´²±´´±²³´¯¯¯¬««¬©ª¨§§¦¥¦¥§¦§§¦¤¢£!! !!! !! ""! """!"#""#####$##$$$$$$$&(s{|ywurppnllkmmlmnooooqqrrtttrrpnle]WGOM9BBG++,+..6//./113546879:8999:99CB999:;;:9;9;;::<;:;;<;?;<:;:98:<:9998786w“¢šbZ@=F7;A?IZjmqruxwz{y|||}~€€€ƒƒ„„‡Š‹Ž–º¹·»À¿¼»·º¹¶¶µµ´µ´³²²±±²±±±°¯¬«¬«««ªªª©¨¨§¦¦¦¦¥¥¥¤¢Ÿ "!""!###$$$&u|}|ywtqpnmlkllllmonopqqqrrrrrpoljc[UHACA@@Evtvtqp`1-./1125676689998888KG9999:::<9:9;:;:;::<:=?=9;::9799:8777878:µ··¹º¼¼ºUKC<8:EYhostrwwwwxyyxyw{|}‚†‡Š–¸¶µ¸¾½º¹¸·µµ´µµ´³³³²°¯±¯¯¯®®ªªª©¨©©¨¦¦¥¥¤£¢££¢¤¢£¡ŸŸš !!!!"#$$%'*v€}zxuqpnmlklllmnmnopompppqnollkhbZSLH2A@=C —“‹‡…/../011345678989799IEGYGPSM<9>AAKPSG@;D9?;A8;::99979;878767668³®²´»¶·¸¼nH@@MGclppqtstqstuvvvvxxz}|~~ƒ……‹µ¶µ³´»¸¶´µ´³³´²´³²²²±±¯¯°¯¯««ªª©©©¨§§¤¦¥¤£¢¢¡¤££›•–•••!"!#"&(*)("&'(/;T`vˆ–Ÿž’ˆ„|xvrqmmmlmlmlnmnnmnnooononkjif_YQLHC@>;A”•—•˜˜—-.../0012446897898??;:BA:;CH9AM<<:7:;>=;>9;::9999:7<;<<;<<;:89d_debfea`\^IHKTkoqnorrrpppopnpqsuuxvxz|„—´´®¯³¸¸¶´³³²³³³²³°°°²°®¯¯°°««ªª¨¨§ª¨¨§¥¤¥¤¤›‘“•–•—••&'(*)&'# %,5;QiwŠ’—”‹Ž’’’“”–•”•“”””““••’‰…ƒ}yxusrrqqppoooopononnoonllig`ZTMJGCA?GzuqeZL/-././0033357777888897989=<9;;8988888898:8888899999;===<<=>>>B‹ŽŠ‚xl\XUQQM`q}rlmoppommbklihilnoqssuvx{~“•–•— «¬®°°°±°°°°°±¯°®¬®¯¬¬¬«««©©§§¨§§¦§¦§ž‘ˆŒ’’”•”‘‹†ƒˆ‰ŒŽŽ‘‘‘‘’““”“””””““’‘“’‘’‘‘ŽŽŒŠŠ‰ˆ†‡ˆ‰‰ˆŠ†…„~~}}{yxxwvttsrrqqqopnqonmlkfaZTMIGC>;>USMIGEE@94.-.//0245776887788698798898877767787676766566689:9984-H[Mg’‘‘‘ŒŠŠ€vlbWRMrmldiihYahcehddhjjmlnpstŠ’“‘’˜——˜£§ª«®¬®¯¬ª«ª§§¨§§¦¦¦¨“…†ŠŒŽŽ‰‚wof‘‘’’“””•”–—–––••”“’’ŽŒŒ‹‹ŠŠ‰Š‹‰ŠŠ‹ŒŒŽŽ™Ÿœ”gHAR]jfjiijgggeddedcbccddaa]XPFA;>@DHHHGMNMMKJHB>;40049=B6:9=788776776677677777557665866666676977C?%,06>DIR`vŠŽ‘‘Žˆ‡‡~zk^]g^^_]Uaaabccbdefhhklnimr}ƒŠŽ”š™––”—§©«¯®¯®¯®ª¯°¬«¬ª¨ª¨¨ª©«…†ˆ‹‹ˆ‡ˆ‡ƒ€lcZTQ‘‘‘ŽŽŒŒŒ‹‹Š‰‰ˆ‰‰‡ˆ‰‡‰‰‹ŒŒ‹‹Ž‘›¢£¢¢ ŸŸŸžŸš›””‘Žˆ‡…†}~||{yvsqpnkjihikmnljihbbbbdcdfeegb`PJKIGGEFFFGIJKKKKKONORTPRTSYZYZZZZZ\\]^^_`cfkrx†“———–š————————•’ˆytndLMRVWXZ\^^_``a`db[fjlptx~ˆ‘““‘—¤©«®°°°°±®¯®¬¬ªª©ªª«©Ž…†ˆ‰‡ƒ‚€yja[TOLHC‹‹‹Š‰‡‰ˆ‡‡†ˆ‡‡†‡ˆˆ‡‰ˆ‰ˆˆˆ‰‰‰‰‹Š‹‹ŒŒŒŽŽŽ’“š Ÿ¡ žŸŸžŸŸžŸžŸžŸ ¢¤¥¤¦¤££¡¢Ÿ™–’Ž‹‰ˆ‡ˆˆ‹‹ŒŠŠ‰‰„„…„…‡…†ˆˆˆ‡‰‡‡……„…†……‡‡‰‰Š‹‹Š‰Š‰‡‡††ˆ‡„ƒƒ„‚ƒ‚‚„†…†ˆ‹‘“–šž¡«¬¬¬¬«¬«««©§ ›”ˆ~pcXPHCA@HLOQSTVVTPLXbimnpsw|…Ž’•™Ÿ£§ª®±±±²±±¯¯¯¯®®°®°¬ªª«¬®ƒ†‰‰…ƒ|tg_TOJID?<;‰‡‡†…†…„…………„……„‡…‡ˆˆ‰‰‰Š‰‹‹ŒŒŒ‹‹ŽŽŽ‘‘’šž ¡Ÿ¡¡¢¢££¥£¥¦¦§¨©©©¨©¨§¨§¨§¦££ š—–——•”••—™˜—••‘’“’“’‘”“’““““““”“•“”““”“”““‘’‘‘‘‘’’‘‘“””–•–—šššž ¢¥¦¨§«²´¶·´¶¶¶´³¬¦¡™„wk^ROKFB=:723438=ISX]beimotyŠ• ¦©«¯³µ¶´µ´´³±²²±±±²°°¯®¬«ª¬¬„…‰‰…‚|of^NC@A?=:76‡†………„„„…†…††††‡‡ˆˆˆˆˆˆ‰Š‹ŠŒŒŒŽŽŽŽŽŽ‘’–œ £¤¥¥¤¦§§¨¨¨©©©¨«ª««ª¬¬¬«ª¨¦¥££ œšš™™šš˜š››œ››™—”““’”””—–˜–—•”••••”•••–••–••—–”•••”••–”––™›œžŸ ¡ ž£¤¥¥¨©©©¬³´´¶¶³°«¥Ÿ™—„xha\ZYWURPNPPOSUX[^abijpzƒŽ–ž¤ª«²¶µ´´³²´´µ´³²´´³´±²³±±±±±¯®®®±”‹Š‹ˆ„|tj]LGA>>:9767Ž‹Š‡ˆˆˆˆ‡ˆ‡ˆ‡ˆˆ‰ˆŠ‰‰‰ŒŠŠŒŽ‘‘’”–••˜™™››Ÿ£§©ª±¬¬¬¬¯®¯®®®¬¬®¯¯°¯¯°±¯®¬ª¦¢žœšš™˜˜™™››››šš˜–––•””••––—˜—˜˜˜™›š›˜˜—–––——™™š›šœžŸ¡¢¢£¥¤¥¦¦§©ª¬¬°²±²´µ³µ»¼¹·³¨¢žžœœœš™–’‡‡ƒ…„ˆ‹•—œŸ¥§¬¯³¶·º¸¶µ´´¶¶µ´¶´³´µ´µ´³³²³²²²²³±±±®¯¯°˜«“‰ƒyvcMA>:;::87::‘‘ŽŽŽ“““”“”—–˜™˜™š›œœžžž¡¢¢¥©¬®®¯°¯°¯¯°²²³³³´³²°±°®±°±±°±±²±°¯¬«©§¤£¡ ¡¢£££¢¡¡žœŸ Ÿ žžŸŸžŸŸŸ¡ Ÿ Ÿ Ÿ¡¢¢£¤£¥¥¤¥§¨§©©«««®®¯°±²´³¶µ¸¸·¹º¿¿¿¿º¹µ²¯®¬ª©§¦¦§¨§§§¥§©ª«¯¯¯±³´·»··¸¹ºº»¼ºº·¶µµ·¶µµµ´¶´¶µ¸µ´µ³´µ´³³´³³°°®«°•£“ˆ‚zpYB98689:98::•–•–•••—–——˜–˜——˜˜˜ššœ›œœ›žŸŸ¡¡¢¢¤¤¥¦¦§©©«®±³³´³³´´´´´´¶·¶··¸·¸¸·¶¶¶¶µµ³µ´µµ´³²±°®¯¯®«««ªª¨¨¨¨§¨©¨««««ª«ª«¬«««¬«¨©ªª«««¬®®®¯¯¯°±±²²³²³¶´··¸¸¸º»¼¼¼¼¿ÁÂÂÁÁÀ¿ÀÀ¾À¿½½½¾¾¼»ºº¸º··¸¹¹¸ººº¹»¼»º¼½½¾¿½¼¹··¶¸¸··¶··¶··¶µ´µ¶µµ³¶´µ²´±±¯¯®¯±†›„Œ‹„zrL=53989:8:6*™™™š›š››œ›››œœžžžŸ ¡¡Ÿ¢¡¢¢¢££¥£¥¥¦¦§¨¨¨©ª««®°³µµ··¶¶µ¶µ¶¶··¶···¶¹¸¹ºº»»¹¹º¹¹¹¶¶¶´±±°®°±¯²´³´³²¬²±°°°±±±²³³³³µ´´´³´µ³³²±²³²²´´³´µ·¶···¶¸¸º¹»¹»»»¼¼¼¼º»¼¼½½¾½ÀÁÀÁÀÀÀ¿¾ÀÃÀÂÂÁÂÀÀÀÀ¿¾½¾¿¾¿¾½¼»»»»¼»½½½¾¿¾¿¾½º··¸º··´·····¸¶¸¶·¶¶¶µ´µµ´´²²°¯°°°«›ƒz†ƒ{tP526899;+ œœžžžž ¡ ¡£££££¤¤£¥¥¦¨¨§¨¨©ª©©ª«ª«¬¬¬®¯²µ¶¸¸···¶¶·¸·¹º¼¶¶·µ¸¹ºº»»º»»¼¼¼¼¼¹¹¶·¶·¶·µ¶¶¶··¶¶²²µµµµ¶µµµ·¸¸¸º¹¹ºº»º»¹¹···µ¶¶¹¸¸¸¹¹¹¸¹ººº»»»¾¾¿ÁÁÂÁÂÀÀÀÀ¿ÁÁÁÁÃÅÅÃÃÀÀ¿¿À¿¿½½¼¾¿À¿ÀÀÀ¿ÀÀ½¿¾ÀÀ¿À¿½ÀÀ¿¿¿À¿¿¿¾¾º¸¸¸¸¸·¸·¶¹¸···¸¸·¶··¶µ·µµµ´³²±±°±²œ~‚|{Z25794#žžžŸŸ¡¡¢¢¢££¤¥¥¦¦§§§©©ª©ªª«««¬«««¬¬¬¬¬¯°³µ¶··¶·¶µ¸¶·¸·¹¸¸¸¹¹»»¼½½½¾¹¼½¿½½½½¼»º¹¹¸¶··¸»ºº¹¹º··¶µµµ¶¶¸¸¹º»»»»¼½»½¾»»º¹º»º¹»º»º¼»ºº¼»»¼¼¾¿ÁÂÂÃÃÂÄÅÄÂÂÂÂÁÃÂÄÆÅÅÂÃÀÀÀÁÀÀ¿¾½¾ÀÁÁÁÃÃÁÁÂÀÂÃÂÂÁÀÁÁÁÁÁÀÀÀÂÀÁÁ¿¿½º¸º¹¹¸¹¸¹¸¸¸¸¹¸¸··¹¶··¸·µµ³³³²°¯°²±™ž…}zv86/žŸŸŸ¢¡¡¡¢¢¢£¤¤¤¦¦¦¨¦¨¨¨©ªªªª««¬¬««¬¬¬¬®¯®¯±³µ¶·¸¹·¸¸¸··¹¹ºº»¼¼¾¾½½¿¾¿¿¿¾¿¿¾¾¾¾¼¼»¹ºº¹¸¹¸¹º¹¸¸¹¶¸·¶¶¸¸¸º¹º½½½½½¾½¾¿¾¾½»»»»ºº¼»¼¼¼¼¼¾¼½¼¾¾À¿ÀÁÂÂÂÃÃÃÂÁÀÂÁÁÁÃÂÃÄÃÄÂÂÂÁÀÀÀÀÀ¿¿ÁÂÃÄÄÃÄÆÆÃÅÄÆÅÄÄÄÃÃÂÃÁÃÃÂÁÁÁ¾¾½º»»ººº¹¸¸º¸¹¹º¹¹¸¹¹¸¸···¶¶µ´³³³±²³±µžŸ‰|{yb$ ŸŸž ¡¢¢£¤¤¥¦¥¦¦¥¦§§©©ª©ªª««««««««¬«®°°²µµ¶··¸·¶¶·¸¸¹¹¹¼¼¼¼½¼½½¾¿¾¿¿¾¿¿¾¾¾½½»»»¹¹º¸¹¹ºº»º¹º¹¸¸¸¸¹¸º¹¼½¾¾¾¿¾À¿½¾¾¾½½½¾½¼¼¼½½½½»¼½½¾¿ÁÂÂÂÁÂÂÂÂÄÃÃÁ¿ÁÂÁÁÂÂÃÃÄÅÂÃÂÁÂÁÀÀ¿¾ÁÂÅÅÆÆÇÇÆÅÆÇÆÆÆÆÆÅÅÄÄÄÃÃÃÁÃÂÁÀÁ½¼»»¼»»»¹ºº¹º¹º»»º¹¸»·¹¸º¸¶¶¶¶´±³´³³³°£¥‘wysU¡ ¡¡¡¢¡££¢¦¤¥¥¥¦§¦¨©©ªªªª««¬««¬¬¬¯®¯°¯°¯°±±²´¶·¸»¶·····¸¹¹º»¼»¼½½¼¾¾¿¾¾¿¾¿¿¾¾¾¾¼»¼»º¹¹º»º»ºº¼¼º»º¹º¹¹¹¹»¼¾¿¿À¿À¿¿À¾¿¾½¼¼¼¼¼¼½½¾½¾¼½¾¾¿ÀÀÁÁÁÃÃÃÃÃÄÄÄÂÂÁÂÁÂÁÃÄÅÅÅÉÅÅÅÅÂÃÄÂÂÂÂÅÆÈÉÊÊÉÉÉËÊÊÈÈÉÇÈÅÅÅÄÄÄÂÃÁÂÁÀÀ¼¼½»ººººº¹ºº»¼º»¼º¹ººº»»¹¹º¸¸¶·µ´²²²³²³§ ˜yspW! ¡¡£¢£¤£¤¤¥¥¦¦¦¨¨©©©ªª«©««¯®®®¯¯¯¯°°°°±³³´¶·¸¹¶µ¶··¸»¹º»º»¼¼½¼¾¿½¿¿¿¿¿ÀÀ¿¿¾¾¿½½¾½¼»»¹ººº»»º»»»¹¹»¹»¼¼½¾¿ÀÁÀ¿ÀÀ¿¿À¿¿¾À¼½½¼½¾½½¿ÀÀ¿¿¿ÀÁÂÃÄÄÄÅÅÅÆÆÅÄÃÃÃÂÃÃÄÄÄÆÇÈÇÆÆÆÅÄÅÃÄÅÅÆÈÉËÌËËÌËÊÊÊËÊÉÈÇÇÆÆÅÅÄÃÄÁÂÀÀ¿¾½¼¼¼º¼»¼¼¿½½½½¾¼½¼¼¼¼»»ºº¸··µ¶´´µ´²±³²´«¡…rmT$¢¡¢££¢££¤¥¥¥¦§§¨©©ªªª«««ª¬¬¬®®®®®°±²±²³´¶·¸¹¹¸¸¹¸¸¸º»»¼»¼¼½½¼¿¾¿¿À¿ÀÀÁÀÀÂÀÁÀÀ½½½¼½¼½½»¼¼¼¼½¼¼¼º»»»¼¼½¾ÀÀÀÁÁÀÁÁÁÁÂÁÀ¿¾¾¿¾½¿¿¿ÀÀÀ¿ÀÀÁÂÃÃÃÆÅÅÃÆÇÆÅÆÄÂÃÂÂÃÄÄÅÄÅÅÅÄÅÃÃÃÂÂÃÄÄÉÉÌÌÌÍÍÎÍÍÎÌÌÌËÌÊÉÉÉÈÇÆÆÃÃÁÂÀÀÁ¿¾À¿¾¿¾¿¾¿ÀÁ¿¿¾½»»ººº¹ºº¹¸¸¶¶µ´´³´±±³²´¶³¥ª›ym[+¢¢¢¢££¤¤¤¤¥¦§§¨¨©©§ª«««««¬¬¬®®®®®°¯¯°±±²²³´¶¸¸¹º¹¹¸¸¹º¹»º¼¼¼½¼½½½¿¿¿ÀÀÀÀÁÁ¿¿ÁÁ¿¿¾½¼¼¼½¼½½½½½¼½¼½¼º¼½½¾¾ÀÀÁÂÁÂÁÂÃÂÂÁÂÂÁ¿¿¿¿¿ÀÀ¿¿ÀÀ¿ÀÁÁÁÂÃÅÆÆÆÆÇÈÉÇÆÆÄÄÄÄÃÃÃÅÅÅÅÅÄÅÅÃÅÅÄÃÅÆÆÉÊËËÎÎÏÎÏÏÎÍÍÍÍÍËÊÊÉÉÇÈÆÆÅÄÄÃÃÂÁÀÂÀÁ¿À¿¿¿ÁÀÀ¿¿½»»½º¼º»»¹¹¸···µµµµ´´´²³µ´µª¢¡‹mhA!¢¢¢£££¥¥¥¥¥§¦§©©©©©©«««««¬®®®®¯¯¯°°®±°²²³³µ·¸¹º¸¹¹¸»ºº»»»»»¼¼½¾¾¿¿ÀÁÁÀÂÀÂÁÁÁÀ¿¿¿¿¾¾½½½½¼½¾½½¼½¼½¼¼½½¾¾ÀÁÂÂÂÂÂÄÄÄÃÂÂÂÁÀÁ¿ÀÁÁ¿ÀÁÁÀÁÂÂÂÃÃÅÅÇÆÇÆÈÈÉÈÇÇÆÅÅÆÄÄÆÇÇÈÇÇÆÅÄÅÄÄÄÄÅÄÆÉËÌÍÏÎÍÏÏÐÎÎÏÎÍÌËËÊÊÊÉÇÇÇÆÄÄÃÂÁÂÀÁÀÁ¿ÀÀ¾¿¿À¿¾¾½½½¾¼»½»»»º¸¸¹¸¶¶¶µµ¶´´´´µ¶¶±¦Ÿ›}gQ-¢£££¤¤¥¤¤¥¦¦§¨¨©©©©ªª¬«¬¬®®®¯¯¯¯±±°°²²±³´µ·¹¹¹»¹¹»¹¹¹º»¼»»½½¼½¿¿ÀÀÁÀÀÁÂÁÁÀÀÀÀÀ¿À¿¿¾½À½½½¾½½½¾½¼¼¼¼¾¾¿¿ÂÂÂÂÃÄÃÄÃÂÄÃÃÂÂÁÁÁÁÀÁÁÂÁÂÂÂÃÂÂÃÅÆÇÇÇÈÈÉÉÉÈÈÆÅÄÃÇÆÈÇÈÇÈÇÆÆÆÅÆÄÃÄÄÆÈÉÊÌÍÎÎÎÏÐÐÏÏÏÏÍÌÌËÊÉÊÉÈÈÈÇÆÆÄÃÃÁÀÁ¿À¿¿¿¿¿¿¿¿¿¿¾¾¾½½¼¼»¼»»¹¸º¹·¹·¶·µµ´´µµ´µ´´¬£š‹r[?$¤£¤£¤¥¥¥¥¥¥¦§§©¨¨©ª««¬¬®®®®®®¯®°°°±°²±²³³´µµ·¸¹¹¹ºº¸º¹º¹º»»º¼¼¾¼½¿¿¾¿¿ÀÀÁÁÂÀÁÁÀÀÀ¿¿¾¾¾¼½½¾¾¾¾¾¾¾¿¾½¾½¾¾¿ÀÁÂÄÃÃÃÅÄÄÄÃÃÂÃÂÃÃÁÁÁÂÁÁÁÂÁÂÃÂÅÆÇÆÈÈÉÉÉÈÉÉÊÉÆÆÆÆÆÆÇÈÈÉÉÈÈÇÇÇÆÅÅÄÅÇÈÊËÌÌÏÏÏÏÐÏÏÎÏÏÏÍËËËÊÊÊÉÈÈÇÆÆÄÄÂÁÀÁÁÀÀ¿¿¿À¿À¾¿ÀÀ¾¾¿¿¼¼¿¾¼»»º¹¹ºº··¶µµ¶¶¶¶µ´´´¶±¨Ÿ™†iM££¤¦¥¥¦¥¦¦§§¨¨§§ªªª«««¬¬®®®¯®¯¯¯°°±²³²³²³´´¶··¹¹¹»»¹º¹ºº¹º»¼¼¼¼¼¾¾¾¿¿À¿ÁÁÁÁÁÂÁÀÀÀ¿¾¾¾½½¾¼¾¾¾¿¿¿¾¿¾¾½¼¿¿¿ÁÀÂÄÄÃÃÄÄÃÅÅÃÄÂÂÂÂÂÂÂÂÁÂÃÃÃÃÃÅÅÆÇÇÇÈÉÉÉÈÉÉÊÉÈÇÆÆÅÅÆÇÈÊÊÈÈÈÈÇÆÆÆÇÆÇÈÉÊËÎÎÎÏÏÏÏÏÏÏÎÍÌÍËÊËÊÊÊÈÇÇÅÅÄÃÂÂÂÀÁÁÀÀÀÁÁÁÂÁÁÁÁÁÀÀ¿¿¿¿¿¾½¾½º»º¸····¸¸¸·µ¶·´´µµ¶°¦ž”€£££¥¥¦¦¦§§¨¨©©©ªª««««««®®®®¯®°°±±²²²³³³³´´µ¶·¸¹ºº»ººº»º»º»½½½½¾¾¾¿¿¿¿ÁÀÀÁÂÁÁÁÀÁÁ¿¿À¿¾¾¿¾¿¿¾¿¿À¾¾¿¿¿¿¿ÀÁÀÁÂÃÄÅÅÃÅÄÅÅÅÄÃÃÃÃÄÃÄÃÂÃÃÅÃÄÄÄÅÅÄÅÈÈÈÉÊÊÊÊÊÊÉÉÈÈÇÇÇÇÇÈÇÉÈÈÇÆÇÈÈÉÈÈÇÉËÌÎÏÏÐÏÏÏÏÏÐÎÎÍÌÌËËÊÊÊÉÈÇÇÆÅÄÄÂÁÂÀ¿¾ÀÀÁÁÂÂÁÁÂÂÂÁÀÀÁÀÁ¿¾¾½¾¾»»º¹¸¹¸¸···¶¶¶µµ´µµµµ²¬¥›¤£¤¤¥¥¦¨§¨§¨©ª©©««««¬¬®¯®¯°°°°°²²²²´³²³´³´¶·º¹ºº»º»¹º»ºº¼½¼½¾¾½¾¿½À¿ÀÁÂÂÂÁÁÂÂÁÁÁÀÀÀ¿¿¿¿¿¿¿¿¾À¿½¿À¿¿ÀÀÀÁÂÂÄÅÅÄÅÅÄÅÆÅÅÅÅÃÃÃÄÃÄÄÅÅÆÃÄÅÅÆÆÇÇÉÇÉÊÉÊËÊÊÊÊÊÈÉÈÇÉÇÉÊÉÈÊÉÈÇÉÈÈÉÉÈÉÊÊÍÍÏÏÏÐÏÐÏÐÏÎÏÍÍÌÌÊÊËÊÉÉÈÇÆÆÄÃÃÁÁÁÀÀÀÀ¿¿ÀÀÁÁÁÁÂÁÀÀÀÀÀ¿¾¿½½¼»»»ººº¹¹·¹¸¶µ·¶³´¶³´´µ¶²«¢¢¢£¥¤¦§§§¨¨ªªª««««¬®®¯¯¯±°°±±²²²³±²³´´´µ·¸¹ºº¼»ºº¸¹º¼»½½¼»½¾½¾¿¿¿ÀÁÁÁÁÁÂÂÂÁ¿ÂÁ¿À¿À¿¿¿¿¿¿¿ÀÀ¿¿¿¾ÀÀÀÁÁÂÄÄÅÅÆÆÅÆÅÆÅÄÄÄÃÄÃÄÃÅÅÄÅÄÄÄÅÅÆÆÆÇÈÉÉÉÊÊÊÊËÊÊÊÉÊÊÈÉÊËËÊËÊÊËËÊÉÉÊÈÊËËÌÍÎÎÐÐÐÐÐÏÏÏÏÏÏÍÍËÊËËÊÉÉÈÈÅÆÅÄÃÃÂÁÀ¿¿À¿¿¿¿À¿¿ÀÀÀ¿¿¿¾¿¾½¿½¼½º»»»º¹¹º··¸¸¸··¶¶¶µ³´·¶µ¶¢¡¡¢¢£¤¥§¦¦¨¨¨¨©ª«ª«¬®¬¬¯¯¯®¯°°±²²²²²±³²³³µµ¶·¸¹ºº¼¼ººº»»»¼½½½½½¿¾¿À¿ÀÀÁÁ¿ÂÂÂÂÂÂÁÁ¿¿¾ÀÀ¿¿¿¿Á½ÁÀÀÀÀÀÀÀÁÂÃÃÄÅÆÆÆÅÆÆÆÆÅÂÄÄÄÄÃÃÃÄÄÃÅÅÅÄÅÇÇÇÈÉÊÈÊÊÊËËËÌÊÊÊÉÉÉÈÊÊÊËËÊÊÊÊÊÊÉÊÊËËËÌÍÎÏÏÏÎÏÎÏÏÏÎÏÍÌÌÊÊÊÊÊÈÇÇÇÅÅÄÂÂÂÁÀÀ¿¾¾¾¿¿À¿¾¿¿¿À¿¾½¿¾¾¾¿½»¼»»¼»¹¹¸·¹¶¹¸¸¸¸·¸··¶¶µµ´´ ¡¡¡¢¢¢££¥¥¦¦¦§§©¨©ªª««¬¬®¯°°²±±²±³²³´´µ¶¶¸¹¹¹ºº»»ººº»»¼¼¼¼½½¾¾¿¿¿ÀÀÁÁÁÂÃÂÂÂÁÂÁÀÁÁÀÁ¿À¿ÀÁÀ¿ÀÀÁÀÁÁÀÁÀÁÂÃÃÄÅÅÆÆÆÆÆÅÆÅÅÅÅÅÆÅÄÄÄÄÄÅÅÄÆÇÇÈÈÉÊÊÊÊÊÊËËËËËÊËÉÉÈÊÊËÊËÌÊÊÊÉÉÉÊÊÊÊËËÊÌÌÍÎÍÎÎÍÎÎÍÍÍÌÊËÊÊÉÈÉÈÆÇÆÅÄÃÃÂÁÀÀ¿À¿¾¾¿¾À¾¿¿¾¾¾¿½¾½¾¾¼½¾½¼»»»¹º¹¹¸¸¸¸··¸¸··¸·¶·´³³³ ¡£¢££¥¦¥¦¦§¨§¨©ª««¬¬«¬®®¯¯¯°±±²²²³´µ´¶·¸·¸¸ººººº¹º»»¼½º¼¾¼¾¾¿ÀÀÀÁÁÁÀÁÂÂÁÂÂÁÀÁÀÀÁÀÀÀÀÀÁÀÀÁÀÁÁÁ¿ÁÁÁÂÂÃÃÄÅÆÆÆÅÆÇÆÆÅÅÄÆÆÅÄÄÄÄÄÆÆÆÇÇÇÈÇÈÈÉÉËËËËËËÊËÊÊÉÉÉÉËÊÊÊÊÊÊÉÈÈÈÈÉÈÉÊËÊËÌËÍÍÍÍÎÍÍÍÌËÌÊÊËÉÉÉÈÇÈÆÆÅÃÁÀÁÀÀ¿ÁÁ¿¿¿½¾¾¾¾¾¾¿¾¼¼½¾¾¿½¾½½½»»»¹¸¹»¹¸¹····¶µ·µµµµ´²³±žžžŸŸ¡ ¢££¤¤¤¥¥¦§§¨¨ªª©ª«¬««¬®®¯¯¯°±°±²´´´µµ¶·¸¸¹¹¹¹¹ººº»»¼»½½¿¾¾¿¿ÀÁÁÀÀÁÁÁÁÁÂÁÀÁÀ¾¿À¿ÀÀÁÀÀÁÀÀÀÀÀÁÁÂÁÃÂÃÄÅÅÆÆÅÅÆÆÆÆÆÅÄÆÆÅÅÄÅÆÆÆÇÇÇÆÇÈÉÉÉÈÊÊÊËÊÊËÊËÊÊÊÉÉÉÊËËÊÊÊÉÈÈÈÇÈÈÈÉÉÊÊÉÊÊËÌÌÌÌËÌÌËËÌÊÉÊÈÉÈÈÈÈÇÆÅÃÂÂÁÁÀÀÀ¿¿À¿¿¿¾¿¿¾½¿½½½½½¾¾½½½¼º»ºº¹º·¹··¸·¶···µ··µ´´³³³±ŸŸ ¡¢¢¢£¤¤¤¦¦¦¦¨¨©¨§ªªª«ª«¬«¬®¯®¯¯°°±±²´´µµ¶·¸·¸¹¸¹¸º¹ºº»¼¼¼½½¾½¿¿¿¿ÀÀÁÀÀÁÁÁÀÀ¿¿À¿À¿¿ÀÀÀÁ¿¿ÀÀ¿ÀÀÁÁÂÀÄÄÄÄÄÅÅÅÅÅÆÆÅÆÆÄÅÆÅÄÅÅÆÆÇÇÆÆÇÈÈÉÉÊËÊËÊÊÉÊÉÊÉÉÉÈÉÈÈËÉÉÈÊÉÇÈÈÇÇÈÇÈÇÇÈÈÈÈÉÊÊËÌËËËÌÌËÊÊÊÊÉÊÉÉÉÇÇÆÅÃÃÃÁÁÁÁÁÁÀ¿ÀÀ¿¿¿À¿¿¿¿¾¿¿¿¿½¼½¼º»º»ºººº¹¸¹¹¸¸····¸¶·´³´´²±œŸžŸ ¡¢¢¢££££¤¥¥¦§§¨§¨¨©©ªª««««¬«¬®®®¯°°²²´µµ¶¶·¶¶··¸¸¸ºººº»»¼¼½¾¾¾¾¿¿ÀÀÀ¿¿À¿À¿À¾½¾¿¿¾¿¿¿¿ÀÀ¿¾À¾ÀÀÀÀÁÁÂÃÃÄÄÅÆÅÅÅÆÅÅÅÄÆÆÅÅÅÅÅÅÅÅÆÅÇÇÇÈÈÉÊÊÊÉÉÊÊÉÉÊÉÉÈÈÈÈÈÈÈÉÈÈÇÇÇÈÇÇÈÈÆÈÈÈÇÉÊÉÊÊËËÊÊÊÊÊÊÉÊÉÉÉÈÇÇÆÅÅÄÄÂÂÁÁÁÁÁÀÀ¿¿À¿¿¿¿¾¾¿¾½¾¾¿¾½¼½½¼½¼»ºº»º»ºº¹¹¹¶º¸·¸·¶µµ´³±±œœžžž ¡¡£¢£££¤¤¤¥¦¥¥§§§§¨©©¨««ª«¬«¬®¯¯°°±³³³´µ¶¶¶¶¶···¸¸¹¹ºº»¼»¼½½½¾¿¾¾¿¿¿¿¿¾¾½½¾½½¼¾¾½¾½¿¿¿¾¾¾À¿¿ÁÀÁÂÂÃÃÃÄÄÅÄÄÄÄÄÃÃÄÄÄÄÄÃÄÄÄÅÅÅÅÆÆÇÇÈÈÉÉÉÉÉÊÉÊÉÉÇÈÈÈÇÇÇÇÈÈÇÆÈÈÈÈÇÈÈÈÈÉÉÉÉÊÊÊÊËÊËÊÊÊÊÉÉÈÉÇÆÆÆÅÄÃÃÃÂÂÁ¿ÀÀ¿À¿¿¿¾¾¿¿¿¾¿½½¾¼½¼½¼»º½¼¼¼¼¼º»»ºº¹¹ºº··¸¸···¶µµ´³³²››ž Ÿ Ÿ¢¡¡¡¡¢¤¤¤¥¥¤¥¨§§§¨©ª©©ª¬«««¬¬®®®°±±²³´³´µµµµ¶µ¶·¸·¸¹¹¹ººº»¼»¼¼½½½¾¼½¼¾½½½¼¼¼¼½¼¼½½½¼½½½¾¾¾¿¿¿¿ÀÁÂÂÃÃÃÄÄÄÃÃÁÃÃÂÃÃÃÃÃÄÄÃÄÅÄÅÆÇÇÆÇÉÇÈÉÉÈÉÈÉÈÇÈÇÆÇÆÆÇÇÇÇÇÆÈÉÈÈÇÇÇÇÈÉÉÉÉÉÉÉÊÉÉÉÊÊÉÇÈÈÆÆÆÄÆÅÄÃÃÂÂÂÂÀÁÀ¿¾¾¾¾¾½¾¾¿¾½¾¾¾¾½½¾¿½¼½½¼¼½»»»º¹ººº¹»¹¸¶·····´·¶µ³´³œ›œœœžž¡Ÿ¡¢¡£¢¤¤¤¦¤¥¦¦§¦§¦¨©©¨ªªª«¬¬«®®°°²±²³´´³µµµµ··¶·¸¹¹¹¹¹»¼»»»»»½¼½¼½¼¼¼»¼¼½½¼½¼¼¼½¼½¼¾¾¾¾¾Á¿¿ÀÀÁÂÁ¿ÂÃÂÂÃÂÂÂÂÂÂÂÂÂÂÃÄÄÅÆÅÅÆÆÇÆÈÇÈÇÈÉÈÇÇÉÈÈÆÇÅÆÆÆÆÇÇÆÈÇÇÈÇÆÆÅÆÆÇÇÈÈÇÉÇÈÈÈÈÈÈÇÈÇÆÇÇÆÅÄÃÄÄÃÃÃÁÁÁÀÀÀÀ¿¾½¾¾¼¼¿½¿¾¾¾½½¾¿¾¿½¾½¿½»¼»º»º»¸¹ºº¹¸¹·¸¹····¶¶´´³²šš›››œœŸŸžž ¡ ¡¢¢££¤¥¥¥¥¥¦§§¦§¨©¨©©ªª««¬®°°±²±²´³´´´µµµ¶¶¶····¸¸¹¹ºº¹ºº»»¼»º»»»»»¼»»»¼»¼¼½½½¼½½¾½¿¿¾¾¿ÀÁÀÀÀÀÂÂÂÂÂÁÁÂÂÁÂÃÃÄÅÄÅÄÆÆÅÆÆÇÇÇÇÇÇÈÇÇÈÈÉÇÆÆÆÆÆÅÆÇÇÆÈÈÇÇÇÆÇÆÆÅÆÅÆÈÇÇÇÇÈÈÈÈÇÇÆÄÅÅÆÆÆÄÄÄÃÃÂÁÂÁÁÀÀÁÀ¿¿¾¾¾¾¾¾¾¾½½½¾¾¾¿¾¿¾½¼¼¼»»¼»»º»ºº»º¹¹¸¸¸ºº¸····µ´µ´´ššš›œœ›œœžžžŸŸ ¡¡¢£¢¤££¥¤¤¤¦¥¦¦¨¨¨¨©©©ªª««®¯±±²²±²³³³´µµ´´µµ¶¶¶···¹¸¹¸¹¹»ººº¹º¹ºººº»ºº»»»¼»½¼¼½½½¾¾¿¿À¾¿¿À¿¿¿ÁÂÀÁÁÂÁÁÁÂÃÃÄÃÃÄÅÅÅÅÅÆÆÅÆÇÆÇÇÇÇÇÇÇÇÇÆÆÅÆÆÇÇÇÆÆÆÇÇÆÇÇÆÆÆÇÆÆÆÇÆÆÆÆÈÇÇÆÆÆÅÄÄÅÅÃÄÃÂÂÃÂÂÁÂÁÁ¿¿ÀÀ¾¿¿¾¾½¾½¼¾½½½½¾½¾½½½¼½¼¼»»¼¼º»»º¹»º¸º¸¹¹¸¸¸·µ¶··µ·µ´˜š™ššš››œœžž ¡¡¡¢¢¢£¤£¤¤¥¤¦¦¦¦¨¨©©ªª«««¬¬®®°°±²²²²³²´³³³´µ¶µ¶·¶····¸¹º¹¹¹¹¹¹º¹¸¸¹¹¹ºº»º¼»»»»»½¼¼¼¿½¾¾¿À¿À¿¿ÀÀÁÁÀ¿ÀÂÁÂÃÃÃÃÃÄÄÄÄÃÄÅÅÅÅÇÆÆÆÆÇÈÇÇÈÆÆÆÆÅÆÆÆÆÆÅÆÅÆÆÅÆÅÆÅÅÆÅÅÅÆÅÅÆÆÆÅÆÆÅÅÄÅÅÄÅÂÂÁÁÃÀÂÁÁÁÀÀÀÀ¿¿¿¿¿½¾¿½½¾¾¼½½¾¾¾½½¾½½½¼¼¼»½¼¼½¼»»¹¹»¹º»º¹¹¸¸¸··¶·µ´—˜—™™šš››››œŸžŸŸ ¡ ¡¢¢£££££¤¥¥¦¥§§§¨©ªª©ª««¬®¯®¯°°°°±±²²³´³´µµµµµ¶···¸¹¸¸¹¹¹¸¸¸¹¹¸¹¹¹¹º¹ººº»º»¼»»¼¼¼½¾½¿¿¿¿¿¿ÀÁÀÁÁÁÁÁÁÂÂÂÄÂÂÂÃÃÃÃÃÄÃÆÄÅÆÆÆÆÇÆÆÇÇÆÆÆÅÆÆÅÆÅÅÄÅÅÄÄÅÄÅÄÄÅÄÄÅÆÅÅÅÃÅÅÅÄÆÅÄÃÅÅÅÄÄÃÃÂÂÂÁÂÂÁÀÁÁÁ¿À¿¿¾¾¾½¿¿¿¾¾½½½¾½¾¾¾¾¾¾½¼¼½½½½½½½»ºº»º»¹º¹¸¸¹¸···¶¶µ””—––˜™™š™ššš››ŸŸŸŸ ¢¢¡¢¢££¤¤¥¥¥§§§§©©©ªª«¬¬®¯®¯°°°±°²±²³´³´µµµµ¶¶··¸¸···¸¶·¹¸¸¸¸¹¸¸¹¹¹¹º¹ºººº¼¼½½¾¾¾½½¾¿¿ÀÀ¿¿ÁÁÀÁÁÁÁÁÁÁÁÁÂÂÂÂÁÂÃÄÃÄÄÄÅÅÆÆÅÆÅÅÅÄÅÆÄÅÅÅÄÄÅÅÄÃÄÄÂÄÃÃÅÄÄÅÃÆÃÄÃÄÅÅÄÅÄÃÃÄÄÄÅÅÄÄÃÃÁÁÁÁÂÁÁÁÁÁÀÁÀÀ¾¾¿¾¾¿¾¾¾¿¾¿¿½¾¼½¾½½¾¾¿¾¾¾¼¼½¼»»¼»¼»º¹º»¹¹¸¸¸·µµ““”•––—˜™˜™˜š›››œœžžŸ Ÿ¡¡¡¡¢£¤¤¥¥¦¥¦¨§¨©©ªª«¬¬¬®¯®®¯°¯°±±±²°³³´´´µ¶µµ¶·········¸···¸¸¸·¸¸¸¸¹¹ºº»»»»»½¼½½¿¿À¿¿¿¿¿ÂÁÁÁÀÀÀÀÁÁÁÁÁÂÁÁÁÂÂÃÃÄÃÃÄÅÄÅÅÄÄÄÃÄÄÄÃÃÃÃÃÄÃÄÄÄÃÂÃÃÄÅÅÅÅÅÄÅÄÄÄÅÃÄÃÃÄÃÄÄÅÅÅÄÄÂÂÁÂÁÁÂÀÁÀÁÀÁÀÁÁ¿¿¿¾¿¾¾¾¿¿¿¿ÀÀ¼¿½¾¿¿¾¾¾¾¾½½¼¼»¼¼½»¼»ººº»»º¹¸¹··µµ“’’“”””•————™™™šš››œ›œžŸŸ ¡¡¡££¤¥¥¥¥§¦§§©¨«ª««®®¯¯¯¯¯¯°¯±±²³´´´´´µµµµ¶··¶¶¶··¶¶··¸··¸¸¸¹¹¸¹ºº»ºº¼»½½¾¾¿¿¿¿¾¿¿ÀÀÀÀÀÁ¿ÀÀÁÀÀ¿ÁÁÁÂÁÁÂÃÁÂÃÂÃÃÃÂÂÂÃÃÃÄÄÃÃÂÃÁÂÃÃÂÃÂÃÃÃÄÅÅÄÅÅÄÄÃÄÅÃÃÃÃÄÄÃÄÄÃÃÃÂÃÂÁÂÁÁÁÁÁÁÁÁÀÁÀÀÀÁÀÀ¿¿¿¿¾¾¾¿¿¾¿¿½¿¿¾¿¿¾¾½¾¾½½½¼½¼¼¼¾»»º¼»¹º¸·¸¸··¶‘‘““’””–••—–—˜™™™ššœšœž ŸŸ ¡¡¢£¤£¦¥¦¦§§§¨©ª©««¬¬®®®®¯®®¯°²±±³³´´´´´´µµ¶µ¶µ¶¶¶¶·¶¶·¶··¸¸¸¸·¸¸»º»¼»»¼½¾½¾¿¾¾¿¿¿¿ÀÀ¿Á¿¿ÀÀ¿ÀÀÀÁÁÁÁÁÁÀÁÂÁÂÁÂÂÁÁÃÃÃÂÂÃÂÁÂÂÂÃÂÄÃÂÂÂÂÃÃÄÃÄÄÅÅÅÄÅÄÄÄÃÃÄÄÃÃÄÃÃÂÂÂÃÂÁÁÁÁÁÁÁÁÁÀÀÀ¿ÁÁÁ¿¿¾¿½¾¿¾À¿½¾¾¿¿¾¿¿¿À¿¾½½½½¾¼½½½¼½¼»»»»º¹¸¸¸¸··¶ŽŽ‘‘’“““””•”•––——–™˜š›ššœœœž ¡ ¡¢¢££¤¥¥¦§§¨¨¨©«¬«¬«««¬¬®®®®°°±±²²³´³´³´´´´µµµµµ¶¶µ¶µ¶···¸··¸¹¸ººº¹»»»½¼½¾½¾½¾¿¾¾¿¿¿½¿¿¿¾¿ÀÀÁÀÁÁÁÁÁÀÁÁÁÂÁÀÀÂÁÃÁÁÂÀÀÁÀÁÂÂÃÃÁÃÂÃÃÄÂÃÃÄÃÄÄÄÅÄÄÃÄÅÄÃÃÄÃÄÃÃÃÂÃÂÁÁÂÂÁÁÀÀ¿ÀÀ¿¿ÁÁ¿¿¾¾¾¾¾½¾¿¾¿¾½¾¾¿¾¾¿¾¾½¾¾¼¼¼½¾¾¾¼½¼»»¼¼»º¸¹·¸··¶¶‹Ž‘‘’“““””””•–—˜—™˜™šššœœœŸžŸ ¢¡¢¡¤£¤¥¤¦¦§¨¨©«ª«ª««¬«««¬¬¬®®®°¯¯±±±²²³³³³³´´´´µ´µµ´´¶¶¶¶·¶··¸¸¸¹ºº¹º»»¼¼½½¼½½¼¾½¾½¾¾¾¾¾¾¿¿¿ÀÀÁÁÁÀÀÀÁÀÀÀÀÁÀÂÁÁÀÀ¿ÀÀÀÀ¿ÁÁÂÂÂÁÁÁÁÃÂÂÂÃÄÄÄÃÃÂÄÃÂÃÂÃÄÂÃÃÃÃÃÂÃÁÁÂÁÁÀÀÀ¿ÀÀ¿¿¿½¿¿¿¾½¾½½½¾¾½½½¼¼½½¾¾¾¾¾¼¾¾¾½½¼½¾¾¾¼½¼¼½»»ºº¹¸¸¹¸·¶¶ŠŒŽŽŽ’‘’’“”””•–—–—˜˜™™š››œœžžŸž ¡¡¡£££¥¥¥¦§§¨©©©«ªªª«ª«¬¬¬¬®®¯°°°°°±²²²²³²´³´´´´´´µ´µµ¶¶¶¶··¸¸¸¹º¹ººº»º»»¼¼¼¼½½½½½¾½½¾¿¾¿¿ÀÀÀÂÁÀÀÀÁÀÁÀÁÀÀÀÁÀ¾¿¿À¾ÀÀÀÁÂÁÁÁÁÁÂÁÂÂÂÂÃÂÂÂÃÂÂÁÁÂÂÂÂÂÁÂÃÃÁÃÂÀÂÁ¿ÂÀÀÀ¿¾¿¾½¾½¾¾½½¼¼¼½¾½½½½¼½»¼¼»½½¾½¼½½¿¾½¾¼½¾¾½¼¼»¼»º¸¸¹¹¹¹¸·¶¶Š‰‹ŒŒŒŽŽ‘‘’’“’“”•”–––˜˜™ššš›œžŸžŸ¡¡¡¢£¤¥¥¦¦§¨¨¨©©¨©ª©ªª««¬¬«¬®¯¯¯¯¯°±²±²±²²²³³´´´´³´´µ´´µµ¶··¸¸¹¸¹ºº¹»ºº»»ºº»»º»¼¼¼¼½¾½¾¾¿¾¾ÀÀÀÀÀÀ¿¿¿À¿ÀÀÀÀ¿¾¾¾¾À¿À¿¿ÀÀÀÁÁÀÁÀÁÁÃÂÁÁÁÁÀÁÀÁÂÂÀÂÂÁÃÂÁÂÁÁÀÀÀÀÀ¾¿¿¾½½½¼¼½½½½¼»¼¼¼»½¾¼»¼»»½½¼¼½½¼½½¼½¾¼½½½½¾¼º»ºººº¹¸·¸¸¸¸·¶¶€€€€‚}€~€~€€€€€~€€€€€€~€€€€€€€€~€~€€~€~€€€€€€~€~€€€€€€€€€€€€€€€~€€~€€€€€€€~€~€€~€€€~€€€€~~€~€€~€€€€~€~€~€€€~}}‚€~€~€~€€€€€~~€€~€x}‚}~€ƒ}€€€€~€€~€€€€€€€€€~€~€€~}€€€€€~€€}€€€€€~€€~€~€€€~€€€€€€~€€€€€€€~€€€€€€€€€€€€€€€~€€€~€€~€€€€€€€~€€€€€€€€€€€€€€~~€€€€€€€€}~€€€€€€€€}‚}{…z‚}~ƒ|€~~€~}€~€~~}€~~€~€€}€~€€€€€~€€€}€€€~€€€€~€~€€€€€€~€€€€~€€~€~‚~€€€€€€€€€€€€€€€€~€€€€€€€~€€€€€€~€€€~€~€~€€€€€€€€€€€}~€€€~€€€€€~~€€}€€€€€~‚}ƒ|‚|€~€€€€w~€}‚}€~€~€€€}~€€~€€€€€€~€~}€€~€~€€€€€€€€€~€~€€~€~€~~€€€€€~€~€€€€€€€€€€~€€€€€€€€€€~€€€€€€€€~€€€€€~€€€€€~€~~€~€€€€€~€€~€€€‚}ƒ}€~€~€€€€€€€€~€z€…{€~‚}‚}€}€€€~€€€~~€€~€€€€~€€€~€€€€~€€~}€€€~€~€€€€€€€€~€€€€~€~€€€€€~€€€€€€€€€~€€€€€€€€€€€€€€€€€~€€€€€€€€€€€€€€€€€ƒ|€€€€€€€€€€€€€€€€~†{~‚}‚}€€€€~€€€~~~}€~€€€~€€€€€~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~€€~€€€€€€€€€€€€€€€€€€€€~€~€€€€€€~€€€~€€€€~€}€€~€~€€~€‚}€€€€€€€€€€€€€€€€€€€€€~†|€~€~€~€€~~€~€~€‚}€~~~~€€€€€€€~€€€€€€€€€€€€~€~€~€~€~€€€€~€€€€€~€€€~€~€€€€€~€€€€€€~€€€€~€€€€€€€€€€€€€€€~€€€€€€€€€€}€€€€€€€€€†z€€€€€€€€€€€€€€€€†{~~~€€~~€~€~‚}€}~‚}€€€~€€€€~€€€€~€€€€€€€€€€€€~‚|€€€€€€€€€€~€€€~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~€€~€~€~€~}€€€€€€„z€€€€€€€€€€€€€~€€€€†{~€~~€~€€~€~€~~~~~~€€€€€€~€~€~€€€€€€€€€€€€€€€€€€€€€~€€€€€€€€~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~€€~€€€~€~€€~€€€€€„z~€€€€~€€€€€€€€~€€€€„|}€€~€€~~€€€~~€€~‚}~€€€€€€€€€€~€€€€€€~€~€€€~€€~~€€€€€€€€€~€€€€~€€€€€€€~€€€€€€€€€€€€€€€€€€~€~€€~€€€€€€~€€~€€€€ƒ{€€€€€€€€€€€€€€€‚}„{‚}~|€~~€€€~~€~€~€~~~€€€€€}€€€€€€€€€€€€€€~€€€€€€€€€‚}‚}yƒy{ƒ}|€{}y‚{z|‚vƒ|‚„|„{€€€€€~€€€~€€€€~€€€€€€€€€€€€€€€€€~€~€€€~€~€~€~€~€ƒ|€€€€€€€€€€~€}€~€~‚|€~|€~}~€~€}~€€€‚}€~€€€€€€€€€€€€€€€€€€€~€€€€€}}€€~€€€~~€~€~{~€||€|€{€z‚zz„v‡t‡€~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~€€€€€~€€€€€‚|€~€€€€€~~~€€€~~‚}|€~„€€€~~€€€€~€€~€€~€~}~€€€~€€€€~€€~€€€~~€~€€~€…|€€€€€€€€€~€~€~~~}}€~~}€yx†sŠqŒ~€€~€~€€€€€€~€~€€€€€€€~~€€€€€€€€}€€€~~~€€€€~~€~}ƒ|ƒ|‚|}}}~€~€}€~‚|}~}~€€~~€€€€~‚}€€€€~€}€~€~€€€~€€~~€€~€~~€€€€€€€€€€€€~„}€‚|€€€€€€~€~~|~~}||{ƒw†uˆ€~~€€~€€~€€€€€€€€€€€€€€€€€€€€€€€~€€~€€~€€€€€€~~‚}€~~‚}€‚|ƒ|‚|‚}‚}ƒ|‚}‚}}}€~}€‚|€}‚~~€‚}€~€~€~~€~€€~€€~€€€€€€€€€~€€€~€€€€€~~€€†}~€€€€€€~€~~}€~|€€€„~v‡€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~€€€~€€€€€}‚}~‚}‚|ƒ|~~‚}ƒ|‚|‚}‚|‚|ƒ|~€~‚}‚}€~~€~‚}ƒ€‚}€€~‚}€€€€€€~€€€~€€€€€€€€~€€~€€€€€€€~€~€ƒ}€~~€€€€€€~}~|~{€€}~€€€|ƒ€€€~€~€€€€€€€~€€€€€€€~€€€€€€€€€€€€~€€€„|ƒ}‚}ƒ|~~‚}}~„{†z…z{„~€}~ƒ|‚}€~€|~~}€€~€~€€~~~€€€€€~€€€~€€€€~€€~€~€€€~€~€€„€~€€€€~~~}~|~|{|€|€}}€€€€€€€€€v‡rŒs¸r¹sºt½r¹s½tºuºv»s¹q¸s¸v¹wµt¶t³u²t¯m“k’rŠ~€€€€€€€€€€€€‚}„{„{ƒ|ƒ|~‡{€€ƒ|„{„}„{€~|}‚|‚}ƒ|‚}ƒ|}€€€€€€€}}€~€~~€€€€~€~€€~€~€€€€€€€€~€€~€€€€€~‚}€€€~€€~€}|~~~}~€~€~€€€w‰x‹ˆ}‚`—t«u²uu§u¦t¨t¦oœlšp™q—t–n“onmnŒmŒmŽvr’s•roŽuˆ€€€€€€€€}Žr†y…z‚}€€€~~€€€€€€†{}€}€~‚}~ƒ|€}€~~ƒ}€€~€~€~~‚}€~}€‚}€€€€€€~€€€€~~€~€€€€€€~€€~€€€€€€€€€~~~~~}~~}}€~€z€€€s«a¤b—~wz€c—v§s£oŒn‡pˆt„t„t‡nŒnŠru’pmŽoz€z€qŠh‘grªh’w‚}zi€€€~€€€}©]‡{„{ƒ|„{ƒ|€€€€}€€‡{w~~~~€~‚|‚|}€€€€€‚|€€~~€~€~~}~€~€€€€~€~€~€€€€€~€€€€~€€€~€~€~€ƒ{€~€~‚€€€€€~€~~}~}~}~|{{€|}€€v©pc—~{zƒe•t§v¥sŽjh’}}}x†lkx£t¤qŒll~|~{qŒkj‘t«h‘s‰|zd‘~€€€€€€€~~€Šƒu‰zƒ€}‚}€~~‚}„|„|€€€€x}‚}ƒ|‚|}€€~~€}}€}€~}~~€€~~€~€~€€~€€~€€€~~€€}€€~€€€~€~~€€~€€€€~~€~~}~|~}~{|{€z{€€€€€yŠnŽg”€z†e–‚‚~ƒ„pŒl€€|„{ƒj‘xŠ~€~ƒm}}€€€€mŽtž{‚n‹|{h€~€€€€€€~€€€€€‚}‚~‚~„{ƒ|€€€€€€€€€€~€€}‚}€~‚}~~~€€€€~€~€~}€€€€€€~€~€€~€~€€€€€€€~€~€€€€~ƒ}€€~~…{}~|}|~}~}|~~€€~{~z{‚€€{„€€~{ƒ€}ƒ~}z„~~~‚~~}ƒ~~€~}€~z~~{ƒ~|€€~€€€€€€~€€€€€€€€€€€€€~€€€€€€~€€€€€~€€~€€~€€}‚|€€~~€€€~€~~~‚}~€€€€~€€€~€~‚}€€€~€€€€€€€€€€}€~€}€}~‚~}|}€}€€€|‚zƒ}ƒy†‚ƒ{—€„~‚|ƒ{‚y„~ƒ|ƒ}ƒ~ƒ}•{‚}‚}‚~‚x‚x‚~ƒ|…~„t†}ƒ{…|‚yƒ}…€€€€~€€€€„{†{„|ˆ|ƒ}€€€€€}|ƒ€€€€€€€€~€€€€€€€€~€‚}~€€~~€€~‚~€~~}~~€}~~~€€~~~€~€€~€€~€€€~€ƒ~~€}€}~€|}~|€„}|}~€€€}‰z‘|—|–|™šu‡s†q…pŽg•h’i“g“h•x†h”f“i“h’i’g“q‡p†q†t•n£u¬q“t«x¨€€€€€~~€|€~~‚w‚xƒv…s‘r€€€€€€mšs‹nr‹w†rŠ‡~€~€€€~€€€~€€~€~‚}€}€~€€‚}€}‚~‚}€~~~€}}€€€~€€~€~€€~€€~€€~~€|~|~~~}{~}~~€€|‚}€€€z…}•z–|—{™{˜s‡t‡u†tˆg“i’f”j“f”x†g”i•g”i“e”lo„q†n‡m‰j p«r”pªqŸ€€€|€€uƒM\‡v}~ƒuƒu„uˆqŽu€€€€~€y…’w“v“t”t€~‚}€€€€€€‚}}~~~€€~~€~~~~€~}~~€~€~~~~~}€}~€}€€~€€~€€€€~~~€€~}}~|€}€€€€v‡{’|•~•|—~”uˆs†r‡r†l‘i’i”j’i•z„g”f”i“g“k‘q†q‡nˆp†hˆn¦n¤t•s¨b”€~€€~€Sf…v‚Q‹k‰}„u„u†r‰ov€~€r˜t“wŽuŽsš…€€€~~€€~}€“x€~~€€€~}€~€~~}ƒ{~€~~€€€€~}}€‚}}}€~~€}~~}‚}~€~€}}ƒ~€€€€€€€€€€€€€|}~~~€~~€€€€€€€v…}“|”|•~˜sŒt‡sˆr‡r…s‡m”kšsk”y…h”f”i’i“lŽr†o†n‡n‡g‡s§q§r–pªg‰{{x…r…Jj‡v„t…NŽt‚~…s†q‡qŠo€~~€~wœv£t£y—w§{{„€€€€€~}’w“x€€€€€~~~~€‚}„z„|‚}~€€€}‚}€~€~}}}|}}}}€|}}€~}}€}€~}€€€€€~€€€~€€}~~€}€}~€€€w‡|{‘y“y”pˆr‡s†r‡q‡r‡q›t¥ržs“z„i”g”g“i“p†o‡q‡oˆnˆhˆyzxƒs™o£cˆuƒt†:’Hu…x‚t„x†Wt–t—t“t•r‘qz„|~†{y“|Šx‹y~€|ƒ€~~ƒ~‚~ˆz‹x~€€€}ƒ|‚}~‚~}~ƒ|‚}„{|ƒ|‚}€€~€ƒ}~}|~~|€}€}€~€{€z€{€{}|~~€~‚~€€€~~€€€~€~~~~€}~~~€~|‚{ƒ}€€€{…zˆ{|’’p‡sˆq…t†r†rq‘rŒtŸv¥y…i”h•g•o†p‡p†o†n†o‡u„r‚{}t™k¡d‰L1”@’?’J‘JŒYD|u—wšt—|ˆz„xšw‡~€€€†z‘xsvŽt‚~|ƒ~€€~~€€~€~€€€€~‚|~}€~€€}„|ƒ|„{„{€€~}}~}‚|‚{}~}€|€|~|{|€zz~|}{~|}|}}€„}€€€~€€€~}€~}~~~€~~~}|‚||‚|€€€u‡{ƒwŒz€v‘wu‡q…sˆr‡r†q†q…s‘v¨x~y~nŽl”r•sp‡q‡m‡lˆeˆeˆz}utˆf†u„hˆ}i‡r†hŠZŒ{ƒ€…u—x“{…w‹t˜u–f”}€‰{x‹y‹v’w€~}‚~€€~~~€€~€~€€€~~‚}~‚|„|‚~y}|„z…z‚|~~~~€|€}€}€{|~{}z|{}x}z}y~yy~z}|zy~y~|€~€€€~€€€~€}€~~€{|}|}~||‚|‚}|‚€€~w…zŒxz‹v‰ytˆu„s†r†t…q…qŠu¦v¦t¢ržu§r—pˆt¡n•pˆr‡mˆf‡k†y|x|o†j„m…o„nˆr…q‡c‰c‡|ƒy‘{„u”y‘t—s˜v™a˜|~€Š|yŒwpw~~€€~€~‚~ƒ}€€€€€}€€€~}€~}…{…|z~„z†z‡y†{€€}‚{€}|{€{{}y~{}y|y|yx|wyw|xzxzx|xxx{y€~€~}€€€~~€~|~}}€|~}~~~€|}~€{ƒ}€€€€x…{‰}‘z‘{Œpˆs‰t‡s†r†t‡s†v™u¨sŸvŽm›v¦x¤nŠp‡q‡o‡n‡nˆ`Šv|j¬l˜v\‹s…f‰qˆ{ƒyƒ}€€€|ƒx…Z”OŽOŽV]‰`ˆ`ˆ]Š‰wzŽx‡x‘w€~€€€€~€€€€~€€~€€}~}‚}‚}„z‹y€~~ŠwŒwŠx€€~‚}‚}‚}€}|{{~|~|}yy|y{z}||z~|}{}}}{}|€€~€~€~~€€€~~€~~€~€~~~€{z‚~€}‚}}‚}€€~ƒ}t…z„}’~’~“pŽt‡r†s‡r†t†s–pŸi“j–{ƒh”g•h–r¥mŠq†n‡nˆj‡e‰d‹d°m—d¢\Œ€€€~€€€b’H–F˜C–G–TZ†d„b†`ˆ\‹Y‹YŒ^ŒŠxˆw“t€€€€€€~€€€€€~€~‚~€€~Žyzˆ{{€~‚}~~€~€‚}„{ƒ|}}€zy€x~x}yy{x{x|v~x~z|~{~z€}‚~}~€€~~€~€€|}€y~|}}€€~€€x„|Œ||“~•r‡r‡q†t†r…qˆqˆg“i“i”z„h”e”g•lŒoŠo‡n‡kˆmˆdŠaŠk±iœk¬`‰€€€€€T“P’Q”P’I”JQŒXŠYŠXTŽTŽTWŽWV‹YŒ‘tŽr~€t‡s‡t…~€~€x†v‰uˆzƒy„€~€}|~€|~€~€€ƒ~€~€€~€€~€€€~€€‚}}‚}ƒ|‚}‚}}~€€€}}€~}€€}€€~}€~~€~~~}~}}‚€€€€€y…}€}’v†u‡q†r†r†qˆs‰h”k“j’y…g“h”h”i”p‡qˆm‡m‰k‰bŠqœi®išj¯]Š€€€€u„U`]WŽO“INO‘Q‘L’POP‘USTŽVŽYŒYŒfŠx†|‚vˆv‡y†kkii‘h’irŠ~~{y€z‚}€€€€€€€€€€€~‚}~~‚}…€€~~€‚}€€€‚}€€~€€€€~€€~€€~~€€€~€}€€~€~€~€€€x†z‡|ˆ}Š|v†t†t„s‡u‡v…m’i“i“h“z„i“i•i”h“p‡oˆqˆn†m‡d‹m¢m£sŽf˜kŽ€[‘cŽ`cŒf‘=˜HMMG’K‘L“P“O’QOQŽSX[nŠ_Žus‘xŒ{~€€€€€€€€€~~~‚}ƒ|Šw†z~‚}€~~€€€~€€~|‡zŠy‹~€~~€~vuŠuŠuˆvŽw‹u‰vˆ€~€€€€€€€~€~€€~€~|}~€~€€€€€~€€uˆu‰~|w‰{‚q‹|‚|‚|‚zƒj‘|}nŽyƒy„{ƒx…i‘x…h’w…y…xƒv†a—d”mˆl‡k¡h“[‹kfŽiŽjŽU‹V‰T‡Q‹OŽROQUŽVWŒU[\[ŽX]ŽfŒƒ|•tw~~|ƒ{ƒ|‚|‚{‚€€€€€€€€€€€€€€€€|€€€~€}€~‚~€€~~~€~‚~€~€€}‚}€€€‚}€€€€€€~€~€€~{€€€€~€€€€€€€€x†xŒz„px…wžy xŸv‹{ƒnŽy„v–y¢vŸux‚mz„vŽv t¡qz„|…oŠk‹~ƒ{„iiŽlŒnt‰tˆrŠWŠR‰PŠPPŒSSW‘YTXXYŽ^Žao…€€~€€~€€€€€€€€€€€~~€‚}~€€}€~€€~€€€€~~€~€€€€€€€€„|€€€€€€€€€|~}~€€€€€w•€€€€€€€€€€€~€‚‚ƒ‚€‚}‚€‚‚‚~‚~€}ƒ‚ƒ‚‚}„y…~„|„}ƒ}ƒy‡l‰j‹j|‚z„€}t†]‰`‰]ŽX[‘[‘XZ\Ž]Ž^aŽ`Œc‰~€€€€~€€~€€€€€€€€€€€€€€€~€€~€~€~€€€~€€€€~€€}€€‡€€€€€€€€€~€€~€€€~}|ƒ€€€€€ƒ~ƒ~‚}‚|ƒ}ƒ{‚‚|‚}|‚}}‚{„{‚‚‚|„~ƒ|ƒ{ƒ}„|ƒ{|zƒzƒ|‚€|ƒsˆb‰`Œ`Ž`]Ž^^_`Z`]a‹h†€}}‚€€€}€€~~€€~|‚€€€~€~€~€€€~€||‚~‚|‚|ƒ|‚|‚{‚zƒ}}~€€~€€€€€€€~~~~~€€€€€€€€€€€€}€~~ƒ~‚€‚~}ƒ€€~€~€€~|ƒ}‚}|„‚~ƒ}‚}wƒw…x…x†x…sˆiŒdŒ`ŠbŽabbcŽgŽcŒc‹addŠhŠ€~€}€~€€~€€€}€€~€~~~€~~y‚zƒz‚{‚€€€€~€€€€€€€€€~€~€~€€~{„~~|‚~€~€€~~€€€€€€€€€€€€€€€}‚€€€‚~~~~€~‚}ƒ}„|‚|‚|‚€{‚|‚|‚zƒx„z„x„x…y…x…x…hŽilŒf‹hfŒhŠiŒe‹e‰lˆ~€€|~~€€|~€~€~€€€€~€€€€}€{}|ƒ|ƒ~~€€€€€€€€€€€€€€€€€}‚€€€€€~}|‚~}}}‚{‚|ƒzƒ{{z{‚{‚{‚zƒ{ƒ||‚}}‚}|‚}‚{ƒ|‚{ƒz„{ƒzƒw†y…z„y…z„w…y…z…x†y…y…y…y…y…z…z„w†{„x…y…x…x†y…z„{ƒv…w…w…v†v…u…t‡vˆt‰tˆw‡w‡uˆq‹o‰n‰mˆo‰o…wƒ|~~€~€}€€€~€|}~~€€€€€{€z{‚~€€€€€€€€€€€€€€€€~€€~€€€~€€€}€€~}~€}‚|ƒ~~|‚~€}{‚~~€|~€~|}|‚~|‚|‚~€~|{ƒ|ƒz„|ƒy„{ƒz„{„z„{„{ƒ{ƒ|ƒx…z„{ƒz„{ƒ{ƒ|ƒy„x…z„{ƒz„y…y…{ƒx…{ƒz„y„y„x…x…w†v‡v‡u‰t‰r‹t‰y„z„{ƒyƒzƒw…s…v„u…u„y„}|}}€|€€~€€€~€~€€~€€}~~€~~€€€€€€€€~€€€€€€~€€€€€~~€€~€€~€~€~€}‚€|€}€~€}~€|‚{|€~|€}~~€|}‚{‚|‚||‚~~{‚}}‚{ƒ{ƒz„zƒz„{„z„z„z„{„{„z„y…{ƒy…z„|ƒy„z„zƒ{ƒzƒzƒz„y…{„z„y…y„y„z„y‚zƒzƒv„y„w†v†tˆv†s‡v‡u…y„x…u„t…tƒt„u„t…uƒ{‚€}~€}€}}€~€€€€~€€{~}~€€~€€€€€€€~‚€€€~€€~€€€~~€€€~€€€€~€~€}€}€}€|~~€}}}}}‚}€|‚}~€||€~|||‚|€{‚z{‚z„|‚{„|‚{ƒz„{ƒ|‚z„zƒ{ƒ{ƒ{ƒz„{ƒz„y„xƒz„z„zƒ|ƒy…z„yƒzƒz„y…{ƒzƒz„{ƒz‚|z‚x„yƒx„x…x„w„x†zƒv†z„wƒw„v„v„u„t…xƒyƒ}‚~~€~€€€€~€~€€~€€€~}€|}€€€€€€€€€€€~~€€~€€€€€€€~€~€~~€€~€€€€}~€~€}€}€~€}}}}{‚}€|||‚|‚|‚}zƒ}€}‚|‚|€|ƒ||‚|‚z„{„{ƒ{ƒ|ƒ{ƒz„{ƒ{„zƒz…z„z„{ƒ{„z„y„{ƒz„y„zƒz„z‚x„z„z…z„z„}z„{ƒ{‚z‚zƒyƒy„v„t„xƒx„wƒw„v„w„w„v„u„v„v„xƒ|‚~€~€€~~€}~€€€€€€€€€€zƒ}~~~€€€€~€€€€~€€€€~€~€~€€€€€€~€€}~~€}}€€~~€~}{‚€|€}}{‚}|€}‚||~€}{ƒ{ƒ|}|ƒ{„|‚z…{ƒz„|‚zƒz„{ƒz„y„z„y…|ƒx…z„|ƒz„z„y…yƒzƒz‚{ƒw„y…yƒz„z„x„zƒ{‚{{‚}}y„w‚xƒu‚x„x„w„w…x…x…w„w„xƒx„zƒzƒ|‚~~€~€~€€~€€€€€~€~€€€€|‚~€€~€€€~€€€€€€~€~€€€€€€€€€~€}~~~€~~€~~~€~€~}€}}}‚{|‚|{{}‚{‚z‚{|‚}‚{‚~|‚|‚{‚|ƒ|ƒ|ƒ{„z„y…y„zƒ{ƒzƒy„z„z„z„{„zƒz„zƒzƒy„|‚zƒ{ƒxƒ{ƒz„{„x†y„zƒ|‚|‚|‚|€}{y‚yƒyƒw„w‚w„xƒu„zƒx…x„w„z„yƒyƒ{|}~€}€€€€~~€€€€€~~€€}€{‚€€}€€€€€€€€€€€€~€~€€€€~€€€€~€~€~}~€~}‚~}~}|~€}€}}€~€{‚}|ƒ{}}|€}|‚}}|‚|‚{‚{‚{ƒ{„{ƒz„{„z„yƒyƒ}‚{ƒy„x„y…y„{ƒ{ƒy„{ƒ|ƒy„{ƒzƒzƒy„{ƒz…z„x…z…zƒ||{‚||}€|‚|‚y‚y„v„wƒx„wƒw„xƒv„zƒ{ƒx„y‚|‚}~€}}€~€~€€€€€€€~€}€€€€~€€z„~€‚~€€€€€€€€€€}€€€€~€€€€~~€~€~€}~|‚~€}}|‚}~€|}~€~€|‚}}|}~{}}{{ƒ{‚|‚zƒ|‚z„{ƒ{ƒzƒ{ƒz„|ƒx…zƒ|ƒ{ƒ{ƒ|‚z„{„{ƒ{ƒzƒzƒ{ƒzƒz„y„zƒz„z„{ƒ{‚}~€{€~}{‚|‚{‚y‚z„z‚x‚y‚yƒy„yƒ{ƒz‚{{}~€}€~€~~€}~€~~€€~€€€€€€€€€~}€€€€~€€€~€~€€€}~~€~€€~€}~€~€}‚~€~€}€€~€~}|~}€~|‚|€|}}~€}}‚}€}}}€{{|‚}‚|‚{ƒ|‚{‚{„|ƒ{‚|ƒz„|ƒzƒ{ƒz„|ƒ{„y„|‚z„{ƒ{ƒ{‚y‚{ƒ{‚zƒ{„zƒ{ƒ||‚|||{‚}‚}{‚zƒyƒyƒz‚zƒz‚wƒy‚y‚z‚{}|}~€€€€~€~€€€€€~€€€€€€€€€€~{‚}~€€€€€€€€€€~~€}€~€~€}~~€~€~~€}€~€}}}‚}}|||‚}}}}€}€~€|}|}|‚z}|‚|‚|‚|{ƒ|ƒ{‚|‚zƒ{‚|‚{ƒ{„|ƒ{ƒ|ƒy…z„z„{ƒ|‚{ƒ|‚zƒ|‚z‚{ƒz„{„|ƒ{‚}}}‚~€|€}€~€|zyƒy‚zƒ{‚{‚{‚z‚||y‚|‚~}|‚~€}~€€€€€€€€€€€~€€€€€€€~€€€€€~€€€€~€€€€€€€}€|~€}€€~~€}}‚}~€~}~€{€}~€}‚{‚}~~€€}||‚|‚}~€||ƒ|‚|‚|‚|‚|ƒ{‚|‚{ƒ|ƒ|‚{ƒz„{‚|‚{‚{ƒ|ƒzƒz‚yƒ{|‚}{‚z‚{‚}|‚}}‚|‚~}}~€~}||‚x{‚{‚|‚y|‚}‚|‚{‚~€~{€€€€~€~€}€~€€€€€€~€€€€€€€~€€€€€€€€€€€€€€€~€~€€~~€}~€€}~€~€~€~€~€~€}‚|€}‚}~€€|}€~€|‚~|€}}}|‚~{ƒ}|ƒ|ƒ{ƒ{ƒ{ƒz‚{ƒ{ƒzƒ|‚z‚}|ƒ{‚|‚|ƒz„|ƒ{„}‚{‚zƒ}‚z‚}}‚}‚z„}}‚}~}}~€}}€|{}‚{|‚z|||‚||{‚}~€}~€€€€€€€~€~€€€~€€€€€€€€€€€€€€€€€€€€€€€€€€€~€€€€}€~~€~}}€~€~€}~€}|€}€~€}~€~}}€}€}€}}‚}}|‚{ƒ|ƒ{‚|‚|‚}‚zƒ}{‚}||ƒ}‚}‚{‚{ƒ|‚z‚}{‚|‚|‚|‚}‚|‚}€}~€}~€~~€|}€~€~||{|‚~}}}~€~~€}€}€€~€€}€~€~€€€~€~€€€~€€€€€€€€€€€€€€€€€€~€€€€€€€€€~€~€€~€€~~€€~€|}€€|}€||}{}}|‚~€}}€~€}}€}‚|‚|‚{ƒ{ƒ{ƒ||}‚}‚~|ƒ}‚|‚|ƒ{‚|‚{ƒ}‚}‚|}|‚}{‚}~}|‚|‚~€}€~~}~€|~€|{‚|}{}}}~€}}€~€€~€€~€€€€€€~€~€~€€€€€€€€€€€~€€€€€€€€€€€€~€~€€}€~€~€€€~~€}~€~}~~~}€~€}‚||‚}{‚|‚~€}}‚|~}~€||‚}{‚{‚|‚}‚}}|‚{‚}‚|ƒ|‚}|‚}‚|‚}‚|‚{‚}‚|‚}|}‚|‚|}|~€}€~€~€~~€}}}|}||}}€|~€}‚€€€€~€~€~€~€€€€€€€€€€€€€€€€€€€€€€€~€~€~€€~€~€~€€~€€~€€€}‚}‚}‚€}€}~~€}€~€|ƒ~~€~€}}‚}|‚|‚}€|‚|‚||‚|‚{ƒ|‚|ƒ|‚|‚{‚}}|ƒ|‚{‚|{‚||~|‚|‚|‚{‚€~~€~€~}€}€}€~€|~€|}}}€~€}~~€|€€~€€€~€~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~€€€~€€€€~€~€~€~€€~~€€€€~€€~€}~~~€~€}€~€~}}€}~|‚}{}€zƒ}‚}‚}~€|‚|}‚|ƒ}€}€|‚{‚||‚}}}|~€€€~~€~€~€}€|‚~€~€€}€~~€~€€}€€€€}€€€€€€€~€€€€€€€€€€€€€€€€€€€€€€€€€€~€€€€€€€€€€~€€~€~€€€€~~~€}€€~€~~€|€€~€}}~€~}}|‚}~€}‚|‚}}‚|‚|zƒ}~€}‚~€}‚|}€}|}€}|~€}~}~~€€~€~€~€€€}}€~€~€}€€~€}€~€€~}€}€€€€€~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~~€€€€~€€€€}~€~|~€€~€~€~~~~~€|}‚}~€~€~€~€}}‚~€~}‚{ƒ~€€~~€|‚~~~~}}}‚~|||~‚€}}~}|‚~€~~~€~€~€~€}€€~€~€~€~€~€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€€~€€€€~€€€~€€€~€€€€€€€~€€€~€}€~€}€~€€~€~€~€~~}€~~€}€}‚~}€}|}€}}‚~€}~€~€|{}}~€~€~€~}}|‚€}|‚}€}€~~€~€~€€€~€€~€~€~€€}€€}€~€€€€€€€€€€€€€€€€€€€€€~€€€€€€€€€€€€€€€~€€€€€€€€€~€}~€€~€}€~~~~€€~€€~€~€~}~€~€~€~€}~€~€|‚~|‚~€}}}~~€}~€~}}~€~€|}}€}€~€~€€~~€~~€~€€€€|€€€€€€€~€€€€€€€€€€€~€€€€€€€€€€€€€€€€€
\ No newline at end of file diff --git a/examples/libva_buffer_sharing/libva_buffer_sharing.cpp b/examples/libva_buffer_sharing/libva_buffer_sharing.cpp new file mode 100644 index 00000000..88084fb4 --- /dev/null +++ b/examples/libva_buffer_sharing/libva_buffer_sharing.cpp @@ -0,0 +1,465 @@ +/* + * Copyright (c) 2012, 2015 Intel Corporation. All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. + * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR + * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <stdint.h> +#include <errno.h> + +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <va/va.h> +#include "va_display.h" + +#include <va/va_drmcommon.h> +#include "utest_helper.hpp" + +#include <getopt.h> /* getopt_long() */ + +typedef cl_mem (OCLCREATEIMAGEFROMLIBVAINTEL)(cl_context, const cl_libva_image *, cl_int *); +OCLCREATEIMAGEFROMLIBVAINTEL *oclCreateImageFromLibvaIntel = NULL; + +const char *input_nv12; +const char *output_nv12; +int frame_size; +int picture_width, picture_height; +unsigned char *newImageBuffer; +VADisplay va_dpy; +cl_int cl_status; +VAStatus va_status; +bool putsurface=true; + +static const char short_options[] = "i:r:o:h"; + +static const struct option +long_options[] = { + { "input", required_argument, NULL, 'i' }, + { "help", no_argument, NULL, 'h' }, + { "resolution", required_argument, NULL, 'r' }, + { "output", required_argument, NULL, 'o' }, + { 0, 0, 0, 0 } +}; + +#define WIDTH_DEFAULT 256 +#define HEIGHT_DEFAULT 128 + +#define CHECK_VASTATUS(va_status,func) \ + if (va_status != VA_STATUS_SUCCESS) { \ + fprintf(stderr, "status = %d, %s:%s (%d) failed,exit\n",va_status, __func__, func, __LINE__); \ + exit(1); \ + } + +#define CHECK_CLSTATUS(status,func) \ + if (status != CL_SUCCESS) { \ + fprintf(stderr, "status = %d, %s:%s (%d) failed,exit\n", status, __func__, func, __LINE__); \ + exit(1); \ + } + +static void usage(FILE *fp, int argc, char **argv) +{ + fprintf(fp, + "\n" + "This example aims to demostrate the usage of gpu buffer sharing between libva and Beignet.\n" + "The result will be shown on screen if you haven't specified -o option.\n" + "The input and output file are nv12 format.\n" + "Please use the following command to see these files:\n" + "gst-launch-1.0 filesrc location=file_name ! videoparse format=nv12 width=xxx height=xxx ! imagefreeze ! videoconvert ! video/x-raw, format=BGRx ! ximagesink\n" + "(Please install gstreamer1.0-plugins-base, gstreamer1.0-plugins-bad, \n" + " gstreamer1.0-x by apt on Ubuntu, in order to use gst-launch-1.0)\n" + "For more details, please read docs/howto/libva-buffer-sharing-howto.mdwn.\n" + "\nUsage: %s [options]\n\n" + "Options:\n" + "-i | --input=<file_name> Specify input nv12 file name like /home/xxx/in.nv12\n" + "-h | --help Print this message\n" + "-r | --resolution=<width,height> Set input resolution\n" + "-o | --output=<file_name> Specify input nv12 file name like /home/xxx/out.nv12\n" + "", + argv[0]); +} + +static void analyse_args(int argc, char *argv[]) +{ + input_nv12 = NULL; + picture_width = 0; + picture_height = 0; + output_nv12 = NULL; + putsurface = true; + + int c, idx; + for (;;) { + + c = getopt_long(argc, argv, + short_options, long_options, &idx); + + if (-1 == c) + break; + + switch (c) { + case 0: /* getopt_long() flag */ + break; + + case 'i': + input_nv12 = optarg; + break; + + case '?': + case 'h': + usage(stdout, argc, argv); + exit(0); + + case 'r': + sscanf(optarg, "%d,%d", &picture_width, &picture_height); + break; + + case 'o': + output_nv12 = optarg; + putsurface = false; + break; + + default: + usage(stderr, argc, argv); + exit(1); + } + } + + if(!input_nv12){ + input_nv12 = INPUT_NV12_DEFAULT; + } + if(picture_width == 0 && picture_height == 0){ + picture_width = WIDTH_DEFAULT; + picture_height = HEIGHT_DEFAULT; + } + return; +} + + +static void initialize_va_ocl(){ + int major_ver, minor_ver; + + printf("\n***********************libva info: ***********************\n"); + fflush(stdout); + va_dpy = va_open_display(); + va_status = vaInitialize(va_dpy, &major_ver, &minor_ver); + CHECK_VASTATUS(va_status, "vaInitialize"); + + //ocl initialization: basic & create kernel & get extension + printf("\n***********************OpenCL info: ***********************\n"); + if ((cl_status = cl_test_init("runtime_mirror_effect.cl", "runtime_mirror_effect", SOURCE)) != 0){ + fprintf(stderr, "cl_test_init error\n"); + exit(1); + } + +#ifdef CL_VERSION_1_2 + oclCreateImageFromLibvaIntel = (OCLCREATEIMAGEFROMLIBVAINTEL *)clGetExtensionFunctionAddressForPlatform(platform, "clCreateImageFromLibvaIntel"); +#else + oclCreateImageFromLibvaIntel = (OCLCREATEIMAGEFROMLIBVAINTEL *)clGetExtensionFunctionAddress("clCreateImageFromLibvaIntel"); +#endif + if(!oclCreateImageFromLibvaIntel){ + fprintf(stderr, "Failed to get extension clCreateImageFromLibvaIntel\n"); + exit(1); + } +} + +static void upload_nv12_to_surface(FILE *nv12_fp, VASurfaceID surface_id) +{ + VAImage surface_image; + void *surface_p = NULL; + unsigned char *y_src, *u_src; + unsigned char *y_dst, *u_dst; + int y_size = picture_width * picture_height; + int row, col; + size_t n_items; + + n_items = fread(newImageBuffer, frame_size, 1, nv12_fp); + if(n_items != 1){ + fprintf(stderr, "Haven't read expected size data from file\n"); + exit(1); + } + + va_status = vaDeriveImage(va_dpy, surface_id, &surface_image); + CHECK_VASTATUS(va_status,"vaDeriveImage"); + + va_status = vaMapBuffer(va_dpy, surface_image.buf, &surface_p); + CHECK_VASTATUS(va_status,"vaMapBuffer"); + + y_src = newImageBuffer; + u_src = newImageBuffer + y_size; /* U offset for NV12 */ + + y_dst = (unsigned char *)surface_p + surface_image.offsets[0]; + u_dst = (unsigned char *)surface_p + surface_image.offsets[1]; /* U offset for NV12 */ + + /* Y plane */ + for (row = 0; row < surface_image.height; row++) { + memcpy(y_dst, y_src, surface_image.width); + y_dst += surface_image.pitches[0]; + y_src += picture_width; + } + + assert(surface_image.format.fourcc == VA_FOURCC_NV12); /* UV plane */ + for (row = 0; row < surface_image.height / 2; row++) { + for (col = 0; col < surface_image.width / 2; col++) { + u_dst[col * 2] = u_src[col * 2]; + u_dst[col * 2 + 1] = u_src[col * 2 + 1]; + } + u_dst += surface_image.pitches[1]; + u_src += picture_width; + } + + vaUnmapBuffer(va_dpy, surface_image.buf); + vaDestroyImage(va_dpy, surface_image.image_id); +} + +static void create_y_image_object_from_libva(VAImage *surface_image, + VABufferInfo *buf_info, + cl_mem *yio_p) +{ + cl_libva_image info_image; + info_image.bo_name = buf_info->handle; + info_image.offset = surface_image->offsets[0]; + info_image.width = surface_image->width; + info_image.height = surface_image->height; + info_image.fmt.image_channel_order = CL_R; + info_image.fmt.image_channel_data_type = CL_UNSIGNED_INT8; + info_image.row_pitch = surface_image->pitches[0]; + *yio_p = oclCreateImageFromLibvaIntel(ctx, &info_image, &cl_status); + CHECK_CLSTATUS(cl_status, "oclCreateImageFromLibvaIntel"); + printf("\nSuccessfully create ocl image object from y plane of VASurface...\n"); +} + +static void create_uv_image_object_from_libva(VAImage *surface_image, + VABufferInfo *buf_info, + cl_mem *yio_p) +{ + cl_libva_image info_image; + info_image.bo_name = buf_info->handle; + info_image.offset = surface_image->offsets[1]; + info_image.width = surface_image->width / 2; + info_image.height = surface_image->height / 2; + info_image.fmt.image_channel_order = CL_R; + info_image.fmt.image_channel_data_type = CL_UNSIGNED_INT16; + info_image.row_pitch = surface_image->pitches[1]; + *yio_p = oclCreateImageFromLibvaIntel(ctx, &info_image, &cl_status); + CHECK_CLSTATUS(cl_status, "oclCreateImageFromLibvaIntel"); + printf("\nSuccessfully create ocl image object from uv plane of VASurface...\n"); +} + +static void store_surface_to_nv12(VASurfaceID surface_id, FILE *nv12_fp) +{ + VAImage surface_image; + void *surface_p = NULL; + unsigned char *y_src, *u_src; + unsigned char *y_dst, *u_dst; + int y_size = picture_width * picture_height; + int row, col; + + va_status = vaDeriveImage(va_dpy, surface_id, &surface_image); + CHECK_VASTATUS(va_status,"vaDeriveImage"); + + va_status = vaMapBuffer(va_dpy, surface_image.buf, &surface_p); + CHECK_VASTATUS(va_status,"vaMapBuffer"); + + y_src = (unsigned char *)surface_p + surface_image.offsets[0]; + u_src = (unsigned char *)surface_p + surface_image.offsets[1]; /* U offset for NV12 */ + + y_dst = newImageBuffer; + u_dst = newImageBuffer + y_size; /* U offset for NV12 */ + + /* Y plane */ + for (row = 0; row < surface_image.height; row++) { + memcpy(y_dst, y_src, surface_image.width); + y_src += surface_image.pitches[0]; + y_dst += picture_width; + } + + assert(surface_image.format.fourcc == VA_FOURCC_NV12); /* UV plane */ + for (row = 0; row < surface_image.height / 2; row++) { + for (col = 0; col < surface_image.width / 2; col++) { + u_dst[col * 2] = u_src[col * 2]; + u_dst[col * 2 + 1] = u_src[col * 2 + 1]; + } + u_src += surface_image.pitches[1]; + u_dst += picture_width; + } + + fwrite(newImageBuffer, frame_size, 1, nv12_fp); + + vaUnmapBuffer(va_dpy, surface_image.buf); + vaDestroyImage(va_dpy, surface_image.image_id); +} + +static void load_process_store_nv12() +{ + frame_size = picture_width * picture_height + ((picture_width * picture_height) >> 1) ; + newImageBuffer = (unsigned char *)malloc(frame_size); + + VASurfaceID src_surface_id; + VASurfaceAttrib forcc; + forcc.type =VASurfaceAttribPixelFormat; + forcc.flags=VA_SURFACE_ATTRIB_SETTABLE; + forcc.value.type=VAGenericValueTypeInteger; + forcc.value.value.i = VA_FOURCC_NV12; + va_status = vaCreateSurfaces(va_dpy, VA_RT_FORMAT_YUV420, + picture_width, picture_height, + &src_surface_id, 1, &forcc, 1); + CHECK_VASTATUS(va_status, "vaCreateSurfaces"); + + //load + FILE *in_nv12_fp; + in_nv12_fp = fopen(input_nv12, "rb"); + if (in_nv12_fp == NULL){ + fprintf(stderr, "Can't open input nv12 file\n"); + exit(1); + } + fseek(in_nv12_fp, 0l, SEEK_END); + off_t file_size = ftell(in_nv12_fp); + + if ((file_size < frame_size) || (file_size % frame_size) ) { + fclose(in_nv12_fp); + fprintf(stderr, "The nv12 file's size is not correct\n"); + exit(1); + } + fseek(in_nv12_fp, 0l, SEEK_SET); + upload_nv12_to_surface(in_nv12_fp, src_surface_id); + fclose(in_nv12_fp); + printf("\nSuccessfully load source nv12 file(\"%s\") to VASurface...\n", input_nv12); + + + //create two corresponding ocl image objects from source VASurface + VAImage src_surface_image; + va_status = vaDeriveImage(va_dpy, src_surface_id, &src_surface_image); + CHECK_VASTATUS(va_status,"vaDeriveImage"); + VABufferInfo buf_info; + buf_info.mem_type = VA_SURFACE_ATTRIB_MEM_TYPE_KERNEL_DRM; + va_status = vaAcquireBufferHandle(va_dpy, src_surface_image.buf, &buf_info); + CHECK_VASTATUS(va_status,"vaAcquireBufferHandle"); + cl_mem src_y, src_uv; + create_y_image_object_from_libva(&src_surface_image, &buf_info, &src_y); + OCL_CALL (clSetKernelArg, kernel, 0, sizeof(cl_mem), &src_y); + + create_uv_image_object_from_libva(&src_surface_image, &buf_info, &src_uv); + OCL_CALL (clSetKernelArg, kernel, 1, sizeof(cl_mem), &src_uv); + + + //create one target VASurface & create corresponding target ocl image object from it + VASurfaceID dst_surface_id; + va_status = vaCreateSurfaces(va_dpy,VA_RT_FORMAT_YUV420, + picture_width,picture_height, + &dst_surface_id, 1, &forcc, 1); + CHECK_VASTATUS(va_status, "vaCreateSurfaces"); + + VAImage dst_surface_image; + va_status = vaDeriveImage(va_dpy, dst_surface_id, &dst_surface_image); + CHECK_VASTATUS(va_status,"vaDeriveImage"); + va_status = vaAcquireBufferHandle(va_dpy, dst_surface_image.buf, &buf_info); + CHECK_VASTATUS(va_status,"vaAcquireBufferHandle"); + cl_mem dst_y, dst_uv; + create_y_image_object_from_libva(&dst_surface_image, &buf_info, &dst_y); + OCL_CALL (clSetKernelArg, kernel, 2, sizeof(cl_mem), &dst_y); + create_uv_image_object_from_libva(&dst_surface_image, &buf_info, &dst_uv); + OCL_CALL (clSetKernelArg, kernel, 3, sizeof(cl_mem), &dst_uv); + OCL_CALL (clSetKernelArg, kernel, 4, sizeof(int), &picture_height); + + + size_t global_size[2]; + global_size[0] = picture_width; + global_size[1] = picture_height; + OCL_CALL (clEnqueueNDRangeKernel, queue, kernel, 2, NULL, + global_size, NULL, 0, NULL, NULL); + OCL_CALL (clFinish, queue); + printf("\nSuccessfully use ocl to do processing...\n"); + + va_status = vaReleaseBufferHandle(va_dpy, src_surface_image.buf); + CHECK_VASTATUS(va_status,"vaReleaseBufferHandle"); + va_status = vaReleaseBufferHandle(va_dpy, dst_surface_image.buf); + CHECK_VASTATUS(va_status,"vaReleaseBufferHandle"); + + OCL_CALL (clReleaseMemObject, src_y); + OCL_CALL (clReleaseMemObject, src_uv); + OCL_CALL (clReleaseMemObject, dst_y); + OCL_CALL (clReleaseMemObject, dst_uv); + vaDestroyImage(va_dpy, src_surface_image.image_id); + vaDestroyImage(va_dpy, dst_surface_image.image_id); + cl_kernel_destroy(); + cl_ocl_destroy(); + + + if (putsurface) { + VARectangle src_rect, dst_rect; + + src_rect.x = 0; + src_rect.y = 0; + src_rect.width = picture_width; + src_rect.height = picture_height; + dst_rect = src_rect; + + //XXX There is a bug of X server which will cause va_put_surface showing + //incorrect result. So call va_put_surface twice times to workaround this + //bug. + va_status = va_put_surface(va_dpy, dst_surface_id, &src_rect, &dst_rect); + va_status = va_put_surface(va_dpy, dst_surface_id, &src_rect, &dst_rect); + CHECK_VASTATUS(va_status, "vaPutSurface"); + printf("press any key to exit\n"); + getchar(); + } + else{ + //store + FILE *out_nv12_fp; + out_nv12_fp = fopen(output_nv12,"wb"); + if ( out_nv12_fp == NULL){ + fprintf(stderr, "Can't open output nv12 file\n"); + exit(1); + } + store_surface_to_nv12(dst_surface_id, out_nv12_fp); + fclose(out_nv12_fp); + printf("\nSuccessfully store VASurface to dst nv12 file(\"%s\")...\n", output_nv12); + printf("\nNote: The input and output file are nv12 format.\n"); + printf("Please use the following command to see the result:\n"); + printf("gst-launch-1.0 filesrc location=%s ! videoparse format=nv12 width=%d height=%d ! imagefreeze ! videoconvert ! video/x-raw, format=BGRx ! ximagesink\n", output_nv12, picture_width, picture_height); + printf("(Please install gstreamer1.0-plugins-base, gstreamer1.0-plugins-bad,\ngstreamer1.0-x by apt on Ubuntu, in order to use gst-launch-1.0)\n"); + } + + //release resources + vaDestroySurfaces(va_dpy,&src_surface_id,1); + vaDestroySurfaces(va_dpy,&dst_surface_id,1); + + vaTerminate(va_dpy); + va_close_display(va_dpy); +} + + +int main(int argc, char *argv[]) +{ + analyse_args(argc, argv); + + initialize_va_ocl(); + + load_process_store_nv12(); + + printf("\nExample run successfully!\n"); + + return 0; +} diff --git a/kernels/runtime_mirror_effect.cl b/kernels/runtime_mirror_effect.cl new file mode 100644 index 00000000..a9787920 --- /dev/null +++ b/kernels/runtime_mirror_effect.cl @@ -0,0 +1,24 @@ +__kernel void +runtime_mirror_effect(__read_only image2d_t src_y, + __read_only image2d_t src_uv, + __write_only image2d_t dst_y, + __write_only image2d_t dst_uv, + int src_height) +{ + const sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE | CLK_FILTER_NEAREST; + int2 loc = (int2)(get_global_id(0), get_global_id(1)); + uint4 color_y, color_uv; + + if (loc.y < src_height/2) { + color_y = read_imageui(src_y, sampler, loc); + color_uv = read_imageui(src_uv, sampler, loc/2); + } else { + int2 newloc = (int2)(loc.x, src_height - loc.y); + color_y = read_imageui(src_y, sampler, newloc); + color_uv = read_imageui(src_uv, sampler, newloc/2); + } + + write_imageui(dst_y, loc, color_y); + write_imageui(dst_uv, loc/2, color_uv); + +} |