Spreadsheet-ReadSXC-0.38/0000755000175000017500000000000014456566534014530 5ustar corioncorionSpreadsheet-ReadSXC-0.38/MANIFEST.SKIP0000755000175000017500000000052314456566532016427 0ustar corioncorion^\.git\/ ^\.gitignore maint ^tags$ .last_cover_stats .travis.yml .appveyor.yml ^\.github Makefile$ ^blib ^pm_to_blib ^.*.bak ^.*.old ^t.*sessions ^t/.*\.disabled$ ^cover_db ^.*\.log ^.*\.swp$ ^jar/ ^cpan/ ^MYMETA ^.releaserc ^.*.cmd ^chrome-versions ^Spreadsheet-ReadSXC-* ^frame-\d+.png ^demo/ ^.*\.mkdn$ ^.*\.patch$ ^\.prove$ ^t/.*.zip$ Spreadsheet-ReadSXC-0.38/Makefile.PL0000644000175000017500000001670414456566532016510 0ustar corioncorion# -*- mode: perl; c-basic-offset: 4; indent-tabs-mode: nil; -*- use strict; use ExtUtils::MakeMaker qw(WriteMakefile); # See lib/ExtUtils/MakeMaker.pm for details of how to influence # the contents of the Makefile that is written. # Normalize version strings like 6.30_02 to 6.3002, # so that we can do numerical comparisons on it. my $eumm_version = $ExtUtils::MakeMaker::VERSION; $eumm_version =~ s/_//; my $module = 'Spreadsheet::ReadSXC'; (my $main_file = "lib/$module.pm" ) =~ s!::!/!g; (my $distbase = $module) =~ s!::!-!g; my $distlink = $distbase; my @tests = map { glob $_ } 't/*.t', 't/*/*.t'; my %module = ( NAME => $module, AUTHOR => q{Max Maischein }, VERSION_FROM => $main_file, ABSTRACT_FROM => $main_file, META_MERGE => { "meta-spec" => { version => 2 }, resources => { repository => { web => "https://github.com/Corion/$distlink", url => "git://github.com/Corion/$distlink.git", type => 'git', }, bugtracker => { web => "https://github.com/Corion/$distbase/issues", # mailto => 'meta-bugs@example.com', }, license => "https://dev.perl.org/licenses/", }, dynamic_config => 0, # we promise to keep META.* up-to-date x_static_install => 1, # we are pure Perl and don't do anything fancy }, MIN_PERL_VERSION => '5.010', # we want/need a special binmode form, and "state" 'LICENSE'=> 'perl', PL_FILES => {}, BUILD_REQUIRES => { 'ExtUtils::MakeMaker' => 0, }, PREREQ_PM => { 'Carp' => 0, 'PerlX::Maybe' => 0, 'Filter::signatures' => '0.16', 'Archive::Zip' => '1.34', # for seekable streams, verified thanks to Backpan 'PerlIO::gzip' => 0, 'XML::Twig' => 0, 'XML::XPath' => 0, 'XML::XPathEngine' => 0, 'XML::Twig' => '3.50', # no_xxe option 'XML::Twig::XPath' => 0, # what we really use 'Storable' => 0, 'Moo' => 2, 'Scalar::Util' => 0, # for weaken() }, TEST_REQUIRES => { 'Test::More' => 0, 'File::Temp' => 0, 'File::Basename' => 0, 'Data::Dumper' => 0, }, dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz', }, clean => { FILES => "$distbase-*" }, test => { TESTS => join( ' ', @tests ) }, ); # This is so that we can do # require 'Makefile.PL' # and then call get_module_info sub get_module_info { %module } if( ! caller ) { # I should maybe use something like Shipwright... regen_README($main_file); regen_EXAMPLES() if -d 'examples'; WriteMakefile1(get_module_info); }; 1; sub WriteMakefile1 { #Written by Alexandr Ciornii, version 0.21. Added by eumm-upgrade. my %params=@_; my $eumm_version=$ExtUtils::MakeMaker::VERSION; $eumm_version=eval $eumm_version; die "EXTRA_META is deprecated" if exists $params{EXTRA_META}; die "License not specified" if not exists $params{LICENSE}; if ($params{BUILD_REQUIRES} and $eumm_version < 6.5503) { #EUMM 6.5502 has problems with BUILD_REQUIRES $params{PREREQ_PM}={ %{$params{PREREQ_PM} || {}} , %{$params{BUILD_REQUIRES}} }; delete $params{BUILD_REQUIRES}; } if ($params{TEST_REQUIRES} and $eumm_version < 6.64) { $params{PREREQ_PM}={ %{$params{PREREQ_PM} || {}} , %{$params{TEST_REQUIRES}} }; delete $params{TEST_REQUIRES}; } delete $params{CONFIGURE_REQUIRES} if $eumm_version < 6.52; delete $params{MIN_PERL_VERSION} if $eumm_version < 6.48; delete $params{META_MERGE} if $eumm_version < 6.46; delete $params{META_ADD} if $eumm_version < 6.46; delete $params{LICENSE} if $eumm_version < 6.31; delete $params{AUTHOR} if $] < 5.005; delete $params{ABSTRACT_FROM} if $] < 5.005; delete $params{BINARY_LOCATION} if $] < 5.005; WriteMakefile(%params); } sub regen_README { # README is the short version that just tells people what this is # and how to install it eval { # Get description my $readme = join "\n", pod_section($_[0], 'NAME', 'no heading' ), pod_section($_[0], 'DESCRIPTION' ), <new(); # Read POD from Module.pm and write to README $parser->parse_from_file($_[0]); my $readme_mkdn = <as_markdown; [![Travis Build Status](https://travis-ci.org/Corion/$distlink.svg?branch=master)](https://travis-ci.org/Corion/$distlink) [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/github/Corion/$distlink?branch=master&svg=true)](https://ci.appveyor.com/project/Corion/$distlink) STATUS update_file( 'README.mkdn', $readme_mkdn ); }; } sub pod_section { my( $filename, $section, $remove_heading ) = @_; open my $fh, '<', $filename or die "Couldn't read '$filename': $!"; my @section = grep { /^=head1\s+$section/.../^=/ } <$fh>; # Trim the section if( @section ) { pop @section if $section[-1] =~ /^=/; shift @section if $remove_heading; pop @section while @section and $section[-1] =~ /^\s*$/; shift @section while @section and $section[0] =~ /^\s*$/; }; @section = map { $_ =~ s!^=\w+\s+!!; $_ } @section; return join "", @section; } sub regen_EXAMPLES { my $perl = $^X; if ($perl =~/\s/) { $perl = qq{"$perl"}; }; (my $example_file = $main_file) =~ s!\.pm$!/Examples.pm!; my $examples = `$perl -w examples/gen_examples_pod.pl`; if ($examples) { warn "(Re)Creating $example_file\n"; $examples =~ s/\r\n/\n/g; update_file( $example_file, $examples ); }; }; sub update_file { my( $filename, $new_content ) = @_; my $content; if( -f $filename ) { open my $fh, '<:raw:encoding(UTF-8)', $filename or die "Couldn't read '$filename': $!"; local $/; $content = <$fh>; }; if( $content ne $new_content ) { if( open my $fh, '>:raw:encoding(UTF-8)', $filename ) { print $fh $new_content; } else { warn "Couldn't (re)write '$filename': $!"; }; }; } Spreadsheet-ReadSXC-0.38/t/0000755000175000017500000000000014456566534014773 5ustar corioncorionSpreadsheet-ReadSXC-0.38/t/regression-hidden-rows.t0000644000175000017500000000705714456566532021570 0ustar corioncorionuse strict; use Test::More tests => 5; use File::Basename 'dirname'; use Spreadsheet::ReadSXC; use Data::Dumper; my $d = dirname($0); my $workbook_ref = Spreadsheet::ReadSXC::read_sxc("$d/hidden-rows.ods"); my $expected = { 'vhvh' => [ [ 'visible', 'visible' ], [ 'hidden', 'hidden' ], [ 'visible', 'visible' ], [ 'hidden', 'hidden' ] ], 'vhvhv' => [ [ 'visible', 'visible' ], [ 'hidden', 'hidden' ], [ 'visible', 'visible' ], [ 'hidden', 'hidden' ], [ 'visible', 'visible' ] ], 'vhhhv' => [ [ 'visible', 'visible' ], [ 'hidden', 'hidden' ], [ 'hidden', 'hidden' ], [ 'hidden', 'hidden' ], [ 'visible', 'visible' ] ] }; is_deeply $workbook_ref, $expected, "hidden-rows.ods gets parsed identically" or diag Dumper $workbook_ref; $workbook_ref = Spreadsheet::ReadSXC::read_sxc("$d/hidden-rows.ods", { DropHiddenRows => 1, }); $expected = { 'vhvh' => [ [ 'visible', 'visible' ], [ 'visible', 'visible' ], ], 'vhvhv' => [ [ 'visible', 'visible' ], [ 'visible', 'visible' ], [ 'visible', 'visible' ] ], 'vhhhv' => [ [ 'visible', 'visible' ], [ 'visible', 'visible' ] ] }; is_deeply $workbook_ref, $expected, "hidden-rows.ods gets parsed identically with standardized values" or diag Dumper $workbook_ref; for my $key (qw(vhhhv vhvh vhvhv)) { is_deeply $workbook_ref->{$key}, $expected->{$key}, "hidden-rows.ods gets parsed identically with standardized values ($key)" or diag Dumper $workbook_ref->{$key}; }; Spreadsheet-ReadSXC-0.38/t/03-error-handling.t0000644000175000017500000000262614456566532020317 0ustar corioncorion#!perl use strict; use Test::More tests => 12; use File::Basename 'dirname'; use Spreadsheet::ReadSXC; my $d = dirname($0); my $sxc_file = "$d/t.sxc"; sub dies_ok { my( $code, $error_msg, $name ) = @_; $name ||= $error_msg; #my $old_handler = Archive::Zip::setErrorHandler(sub {}); my $died = eval { $code->(); 1 }; my $err = $@; is $died, undef, $name; like $err, $error_msg, $name; #Archive::Zip::setErrorHandler($old_handler); }; is Spreadsheet::ReadSXC::read_sxc('no-such-file.sxc'), undef, "Default silent API"; dies_ok sub { Spreadsheet::ReadSXC::read_sxc('no-such-file.sxc', { StrictErrors => 1 }) }, qr/no element found at line 1/,"Non-existent file"; is Spreadsheet::ReadSXC::read_sxc_fh(undef), undef, "undef filehandle is silent"; dies_ok sub { Spreadsheet::ReadSXC::read_sxc_fh(undef, { StrictErrors => 1 }); }, qr/Undef ODS source given/, "undef filehandle dies"; is Spreadsheet::ReadSXC::read_xml_file('no-such-file.xml'), undef, "Default silent API"; dies_ok sub { Spreadsheet::ReadSXC::read_xml_file('no-such-file.xml', { StrictErrors => 1 })}, qr/\bno-such-file\.xml\b/, "Non-existent XML file dies with an error mentioning the filename"; ok $!{ENOENT}, "The file 'no-such-file.xml' was not found"; dies_ok sub { Spreadsheet::ReadSXC::read_xml_string('', { StrictErrors => 1 })}, qr/no element found at line 1/, "Invalid XML string"; Spreadsheet-ReadSXC-0.38/t/test_spreadsheet_import.ods0000644000175000017500000004416614456566532022453 0ustar corioncorionPK1D(wn {gNP"!eRt}ԣ_6[r[^#@vTS.x{rOC3g2uޛ{~~$D~F,XrE]ES7.=n~ u?p.VdIpU07NJ)j/)&ʩg=Qû0Zo[YzAL v󽮭*VS+_:ZݳRkA?pnUaiFb֣0˳-J_Zh4uǶ\<uR8=AyhA-@3T?y4\G[_48Mk"XKN9vゾ#-G#U8m'%®ѦrDN2;ފ佋odGM~~ O6ɣ[Y\IƆzDu ҳ#QG,,k!ʊsj"`Ȇ+k/\t|[jUJO(V_Zһ!W7md >5Džj!`/ {υ:Zʥ`\Acnyx>h_c/{m.ǟ[/ɭWaH$;78,Z q@/{jq8z\!\fdPin򅈑 wd#YՒTN鴵`^dz˥G\}C2T55@0a !?#qqa̓TdٳRu`[}qm1kL!Nz)2sbTSsnKceQ\F J)z,Vqֶn{>d>m RMf||F+,=$Q[7ux}>h8o'HL4T\>6IǷMR*ZaJF'ofX j6#_X "!Evi&dummZ%EZ$Y|v&d3EQK{ȥˀ 3j-Jodpj_1r&&ד3a#SZq ub=)EX390$^9ы[dxxdM 4^{gr[॰ ۇvCH iKиػBE oі? å=h3㈼0f2#E ;CyvuOڅRm` bj|ڽ5HNQ*|6w)9BnKH#in>Lw>)ӮRH(^ZVCpz m~@QAY{s}`:l\N͋WU }7[I,ю + xRPȯ(B^DȖ 3XK}EGl%m.Ϊ]싏=vciJJ}ڂy2x>h+ZamS2Q8ghw2RQ`Z+~4dĺ=>$cYzD؍] M [yZK82IOjX+V(_2cY6٢(o*lh~ZWhFzPEك:Ak0FAm uLv,ANd8{uIs8vrXIXw#+7sd9)3a$z^ 64eOٚY]'Ǚ+[7~G o)mCB˭4ɝ԰as<,vkb~_[|1PCNR0PZoOnҾz>q-v}hMcnZD.^cMʋ.N}̷%@##"m] ͺ^B9Z7֠.Cc.z)u\2x9Ru[_uB2yFS{%xO iH.0\ژN[ѽ >O Kɖ]?5-p Ej'R]ְ HF.YB lؓ8a$iXD_.ruBl=K<AstmYA   uNF+tR_%f,Xjo=i_}'6ukK@WEc6G܊<~HTޡ|?]N+QVxNu ,,ڏA!n%Ž7A]K:|3f%J`ކeC$rE& %,w eI=Y¢Edž^aň+jv*eS6~d'À1"^L *&D]ʩةfaퟁ6atޞhǐ0Ī=)+wv_d-8Ƒ/7$j3}XEY;ֵ#E)Uסae;G~rX)lYΤTF5O T m4TE~Da DњPuhX9S  TYw!@()bwa]c"htItvw"2=qbH+9eXWϓ}֬Ξm7? åE f4gVM$ʻ`-ElH"n0“qnmcIS4f'!)ЛTffX}A0]\8.Eĥd=|X/ȝ@xx8|u;]JCȥL+Ҳh*+>ܼ[ kPVW`1I}n>/z}hj̬e/{?䁙x,Ҋ-5$(FFAVA;)\I~ ?$s_9ǼL!VV3#Eado:iXF^YdOGO +ְʴt#(bȓ?5nK%r>UAUI NwՃ\':PV0=wBjXB\M;?+FwWlLߍ/Rv=īT&&r)#9=u4俠+JJ;;/aܲ[=/$([m(jtt8Р6O)ы-/ϜOdU +9Nl#Jv"@D=Z_t >Öބ_cͻְVf.ɤa:7M4!k1PpBPVkаJ-LNl ˑ뉾pܰWz|[,"EX2Fy!ŵ=7hllpu)^IJv7_ˇ]A}C+E)H]EJ4L̘\a41y m󝁥=G {پ\ٝp6 p θ^K沪cv 8|XOgX%{[f.:>\F#_#쪆_ Ź𷃿9v65:\hBd(Bmaڒ_6Ӂv~)]djX% 3Qw,+2`YX^ Z 9*RKe3aQz axt,cX^oO_u=A)hΠ껓90So_77OQLһ=D+߯zUQ0|| Jl=j:ι{̆QdIվ#e6ew`Kъ@x|c OVU;-}憰Msn* 4j(7=25_Y8fpau6Hn1U)wTɚ ڑamY +v;-UW}Xr@kq|t4I~/u0>]_14|i }/X~w*qg}>h?-nC~ԡݖNհRqj=XgYww:}OMiȷژV]Ӳ+ZZ ) T]Eհ6.AhZO\mfKݹΛ *<Џ(s55O +ʿ+@`L4`",F]oչbk#X:Hra g5i-$2`bҒE[ۡa&XɅ_C˴ZV'+%Lg5FN~{KƮyzobk3cV ;:::]mtpi0O,x2>=\gaIד܎M!kiZ!ձX֑;dw|^T[g`Šylе>}ŜcoHNhzz+Y݅02Ϥ@BqҁRRF8+(OpM#Z6S"j_2-*y Ҭɪ]3י64dX^ug_~ kRE !3+emJ:Ĭux}n IENDB`PK1SYjfPv6#6RŔ-h֞6j{M,9=hٖ$y:G9NZnz(fl~(U="`dzmeϤ 4M=~!~Θ0զNCCi/$o}ya#ԫL2I޵A><'uh7ZG[Wv>~`z!_a6K!>rJht4'0ۉ[(M%Uۍ㝀Jw]DTr(H P_U?' xqIȧ$S#ncŨxQ*PKB G4*  x y +7O4/Kf]ߧ c,)5@`LN`^::N_+8IU"@ UMG1 OU"wμh5/1Hmjeѯ5[X1֦gȕD6_(YUYMosNlTa,PL07U ? lbCʽ2q1ewTE *W}E|@RMOt|31$T7cA+lo+PK3?ӲGPK1pO- U\"m.9~} R[пgI\lm1X6)t*&IE'ߎW U]ד1Q\fFD̕TbBu:)9+-GfAլ0 +b=:i\!$qU Vž3#T>~y}%LFjLT R\].@$_31+&r q5tS((\>fBVΗ*e<=+CUԦFRPa Q ^)Ųn$*ƯSM4x`˜l:i[OfDT!W6[8=ƥX&sHC)즣-S *'к4M*1@L)LxΜ6YF&V,l&xY(~Bގd'@0J <>jw㟐Kihl`@Џ604BG%ւ^q $ K&G /[MCHGuVܙ|j%qaaEnĥIePL<@ 9 +%Q"d/jB"!GH琉Qo&lq6.\;r`HBkHOJu$ ӊlEnъTYgUI 5@$_*#FNWFɓG|hg쨁gƃCkfOuVcwvzi]M[m Ԛ,=ă)4ao"+bFnsV4ba?aOQ[0H VJBQ:/rC4K )e߭7p ._ɝbyZ9g5rDZi&!q &Ɍs#OZ aN`/9bc]ʶz*~ZZOpF@n ]mT< Gvy.p*Px(" \6o}n3BA&0*S_lmpS$︔ݎض_7XεXr+{_UT-b~eiYjjfuqU`TĒ- u>n% ܺG"jN-mjhޠ}3d3|ʼlڡtGh1$zx]!_m82NP/.Kh~V0+!"K˜jK)*1i*'ZvW'Ya&V&`Cwc[R=#}aP a"Uz0s0c1 ) 5;,VX|]1wV/{82$6M[0CvHO*f_2f_,f_oRZ^U*|E㋰?Ts^m`gH'g 볝ًSkJ.TS`Ӝa*~3ƀ'5gw9gw6g猸]?s@퇢&F3 rQ8aK(k?0Ux١ORv\HN j:S&ڡm([)2IWS#qA&[-5NH"2D v\c⬸pZ/%q-B{VJ S>m{R>D{[{H{3H"VyQBuMǷmfnEP烫pVYNpQhkqiW5fDmFRvE8LU3FGĘx+xIqJ#=dM,q18mhj(WDFoZx'b )x!s(ሳBq P K=1Yw1h&Y1?-?/dGMdػZ+`!m/$H9l-Ka+E~{T،N،CfO]rN(>qb*iE*ІF!,bA]ݎvlQ .F9G]+XoJe6,.ૌ\%ԧ*U.B+Rfݎ'<Hm)br4XG~>b/ 3TPmr9M5)P9JM3k^mjUOq*+iDhH~I!Ҁ6]d*ҥ1]5Z*) "Hla`&T̎?pC# G>M(U䫌kj뤝Tx(XdSyR(8u&*>Ffy#ҰE|+cojaRTPA[ WΡҫԲ? ]ݗӴBYMU N#hYlİ#^ ;.Po8n4~~WcHzoE q1EJZL[`ak6WRTO)Q*0hi /ɍϷRb{9eGEϽxri אp-ؼ[dbF6*m-Ջh(ދAײː^Rjl6_PKXs _PK1EdXKRZ+IT$uؑ44\ԁ~w\ rD1 Pq] U%\mqQpmʅ5:\Zc)'QT3+,UFKA[蜦ѨP9t]E"ҦdPhɯ\9P%;XH<'oGZ_z| =إqʔ]%!s,< I0?;xJ >F a9a;vr*"G)$_ȝc )v`u~8z҇Py^W`AnPK78kPK1*/o=n\yƞO *kURrgQij-hcr7m}h%@GD; uB X cӒX1N"9NN9A!,=WsSXx]YzݣQ'^Pz[M_HkKMvi1T _PKL3,PK1]C/'ͧ?/鸻,y،?{_.ղբwf|\uYWUW|GMwAOѹW><{nГK~6^>_RϦlVWwww;.}{n]"5_v.ܬ厝w-_`οvkѴ_uz]#}}~/O=4KOoA{?sLp?yۯ_Ʒݼ}~.:~rݭ\㕯ľl#ݡ7IG^jěxmn}Y2B'pv%Pov1I@z[OávO:¡gW\2pTOeѼb_>~oЗW|dqS_2צ1; .6HuAv܍&x%?rZOgw_|򿵳wG~N* sZK^|8tG7 }DοN:`"}7-euc3]t{D|ϩ,n7K✎G:{?x7˅fbwᇣwSN]zyuݵ}íwWt}z?(e[?WQ'J‡ۛ7MhLltxf~❔?QM}8jڛnO/_};_>r /G_6dگfB[ ro3[6_{<mm8}s^fݑUmѮnc~Vx{f1uh~kgn _uQݺ]E7b9 ޝ5q:2۬Z&ɨ]܄&@(Mb_vnrt=}:-|C ܮۛQ>;3%(V95LlwMɸ]OJ2LM=o|4^_wf  Ey+.K܅1&a>|X_SXAV4P%#ރfw\֘h?J5g7bBIS]T>⮡]zO/>JčUo|Ֆ8OGV?[{)Y1|wۿnkPP) fػĶO~ٲ%z1$v{)~0JKVщ-Wl|r~GmȆYUbi}%2JlLuŠyFH)mf}ea,Ė+-<6+k Kl'uיJ5[$W94Ϟ}6߃WACRǁhj9 .8a}ŭe};}}68A|IDB-C$p_)a:i8m G>-WXPW'|_<68?, k 5l5C1%Wާ-Wxs(W-u}_EW[t_a'WZK$Ծ[Dp_5Xpy"ucxĖ+,oԼ-lfItSdKV45o18S%[q]B:p̒-$ft_|yv]K+l}%:vx]bרAgp_N1(_]4bNpzWol4L,qh}_?^@8,Jw}X}E;^\^80L,J* -"[Ʀs]G:+n‰-WX]?0 gO, e|`bK\:_xTVq`b}CLl2XL/Xb_)-<{bKb|tQn_1c!ҙ%E}}v:`_QP܀SP3Kq`bKuŠNZpxf6pU`K_x~%'}hW_WNpkJYIlrXj8p(;UnU}Ů=,_%W8PJ-WX j,q-#[q(_^L1e}N@fKV W9t}p= 7 .V$V -a⼰6AIM,Ғpb0GV80N,kV -aZ#,} ]7 s9zdcag0.BhiG8l&$ oI$DsMѪ߿yRqtGZ͹V -an ;Yj TKlIX(Yꌄv`lIspnZf%V -a朐|Z´#Ri9*%LHH$ UbcanYZH&j%PH$Jxh 2l/%0s ] %Ug&a[nYb +-ФZb0u,̌m1%$E%*%L;gEd9gGV  Y꼰 J$0Yb >7 ;!*KXYLlIX;aH|)9*%L;Rpb%sX,*᳓eH$8wV -aY^ZpDbkaQ>7 35K\ KgZd0qsN1?KݵayZı;EX!ʗ*%LTcF-K[gJxh ]uZpbspf0mUZ߈GKXHDJxh of!0R?#KI[5p#L$"[5 5; use File::Basename 'dirname'; use Spreadsheet::ReadSXC; use Data::Dumper; my $d = dirname($0); my $workbook_ref = Spreadsheet::ReadSXC::read_sxc("$d/hidden-cols.ods"); my $expected = { 'vhvhv' => [ [ 'visible', 'hidden', 'visible', 'hidden', 'visible' ], [ 'visible', 'hidden', 'visible', 'hidden', 'visible' ], [ 'visible', 'hidden', 'visible', 'hidden', 'visible' ], [ 'visible', 'hidden', 'visible', 'hidden', 'visible' ], [ 'visible', 'hidden', 'visible', 'hidden', 'visible' ], [ 'visible', 'hidden', 'visible', 'hidden', 'visible' ], [ 'visible', 'hidden', 'visible', 'hidden', 'visible' ] ], 'vhhhvh' => [ [ 'visible', 'hidden', 'hidden', 'hidden', 'visible', 'hidden' ], [ 'visible', 'hidden', 'hidden', 'hidden', 'visible', 'hidden' ], [ 'visible', 'hidden', 'hidden', 'hidden', 'visible', 'hidden' ], [ 'visible', 'hidden', 'hidden', 'hidden', 'visible', 'hidden' ], [ 'visible', 'hidden', 'hidden', 'hidden', 'visible', 'hidden' ], [ 'visible', 'hidden', 'hidden', 'hidden', 'visible', 'hidden' ], [ 'visible', 'hidden', 'hidden', 'hidden', 'visible', 'hidden' ] ], 'vhvhvh' => [ [ 'visible', 'hidden', 'visible', 'hidden', 'visible', 'hidden' ], [ 'visible', 'hidden', 'visible', 'hidden', 'visible', 'hidden' ], [ 'visible', 'hidden', 'visible', 'hidden', 'visible', 'hidden' ], [ 'visible', 'hidden', 'visible', 'hidden', 'visible', 'hidden' ], [ 'visible', 'hidden', 'visible', 'hidden', 'visible', 'hidden' ], [ 'visible', 'hidden', 'visible', 'hidden', 'visible', 'hidden' ], [ 'visible', 'hidden', 'visible', 'hidden', 'visible', 'hidden' ] ] }; is_deeply $workbook_ref, $expected, "hidden-rows.ods gets parsed identically" or diag Dumper $workbook_ref; $workbook_ref = Spreadsheet::ReadSXC::read_sxc("$d/hidden-cols.ods", { DropHiddenColumns => 1, }); $expected = { 'vhvhv' => [ [ 'visible', , 'visible', , 'visible' ], [ 'visible', , 'visible', , 'visible' ], [ 'visible', , 'visible', , 'visible' ], [ 'visible', , 'visible', , 'visible' ], [ 'visible', , 'visible', , 'visible' ], [ 'visible', , 'visible', , 'visible' ], [ 'visible', , 'visible', , 'visible' ] ], 'vhhhvh' => [ [ 'visible', , , , 'visible', ], [ 'visible', , , , 'visible', ], [ 'visible', , , , 'visible', ], [ 'visible', , , , 'visible', ], [ 'visible', , , , 'visible', ], [ 'visible', , , , 'visible', ], [ 'visible', , , , 'visible', ] ], 'vhvhvh' => [ [ 'visible', , 'visible', , 'visible', ], [ 'visible', 'visible', 'visible', ], [ 'visible', 'visible', 'visible', ], [ 'visible', 'visible', 'visible', ], [ 'visible', 'visible', 'visible', ], [ 'visible', 'visible', 'visible', ], [ 'visible', 'visible', 'visible', ] ] }; is_deeply $workbook_ref, $expected, "hidden-cols.ods gets parsed identically with standardized values" or diag Dumper $workbook_ref; for my $key (qw(vhvhvh vhvhv vhhhvh)) { is_deeply $workbook_ref->{$key}, $expected->{$key}, "hidden-cols.ods gets parsed identically with standardized values ($key)" or diag Dumper $workbook_ref->{$key}; }; Spreadsheet-ReadSXC-0.38/t/04-hidden-sheet.t0000644000175000017500000000067314456566532017746 0ustar corioncorionuse strict; use Test::More tests => 1; use File::Basename 'dirname'; use Spreadsheet::ParseODS; use Data::Dumper; my $d = dirname($0); my $workbook = Spreadsheet::ParseODS->new()->parse("$d/hidden-sheet.ods"); my %sheets = map { $_->label => $_->is_sheet_hidden } $workbook->worksheets; is_deeply \%sheets, { Sheet1 => undef, "hidden sheet" => 1, Sheet3 => undef }, "Hidden sheets get marked as such " or diag Dumper \%sheets; Spreadsheet-ReadSXC-0.38/t/hidden-sheet.ods0000644000175000017500000002230414456566532020042 0ustar corioncorionPKOOl9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPKOOIIThumbnails/thumbnail.pngPNG  IHDR'eZPLTE$$$***444<<5~}Hf/oBʚ7} ^}R1Pr.Ͽ3!1jM+N΀糩֏jUgzSZj냭=usads_=ڽjz4nD),/L` }ϘudL/YLkZ{7J*Պ1>Z5vN!ZNA j՗mKWV)-Yj.H:k3ڶ(YLkVjԱȾW6L^ RkrIrY{ QŲU:dއT. _!'[|dYxً y˫]5 /a ɬBcyS-J=%4o[*NY:Jeן٧348^S/c=@6}?R?C۝uo Φ4~u<}/Cz{4Oo=VkF2o%j^k9cМSYWvޮ˂s,u'oLV9*\k*yo}Siԯl\{:jS@arz^7+U{:X<3jRNejDz衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇?~ VIENDB`PKOOConfigurations2/toolpanel/PKOOConfigurations2/menubar/PKOOConfigurations2/statusbar/PKOOConfigurations2/accelerator/PKOOConfigurations2/progressbar/PKOOConfigurations2/popupmenu/PKOOConfigurations2/toolbar/PKOOConfigurations2/images/Bitmaps/PKOOConfigurations2/floater/PKOO content.xmln6}_!Cڸq^n]Ru3((% $k{ކA/v(J2HҤ96t7s*sAX2}‰|SG,'>'X"DL4vjg<0$$(b" KqRrMLIKC\9-JeV5^49'6}}-dX_敠N q$iX$y;#)Ӊ.r<`7x'N:ơ˶ܾ~*& B.r7н@  {T_-ڏ![3{ۂ>\RƄ]2Na{>YgŻ/qŻ_K3g?oKy g=/+EPlB<@Kzm cN;NguI jZFR"=< 2)u BrbG̵ag"[5:hj[CޤQ8!NxK"e +Tk}XD /PB鶭AǸ8u/dl<}5{jaFﴲƬuZiGC+r|ذRV^Xvi'viF`al2R~1LT %բ: ǹ9l}B\67Ζ bZQ aF0_ F{K%uLf3l.1\0wRbGs<ʨldo>)EžBn0O6厜_ߜjb/m ٜ@}ubHXKʒP),j:cGξƈ+.9SQx8m>aپw_m(x,Љ/$Pdfjz*K?-}K _50n]+Lj1hXlSRޜU=:rPƶUh|IDבGn|6t *ݵcٙѵmpď8mmf=t|h Pqy٥wwn5mg<{[E{MeO0^w^dWSWpPK_kyhKF'PKOOmeta.xml[ +,sqz*mJMELZMkDG|9Wp^YS SV*S s.LUZC@3V^ynxG0_Ӽo4(gC8rBNS|JcjV*Ņ;6N4t'j'pP1ᔮْ'r)h`+(f5xpJ%MWK:Of9וR]! 6'4r1oYٸ>Wc}cwKyp]އVACՀmL(PQ֓dhwdxsa ;e@djv6bacX60r䭿PK23#;PKOO styles.xmlZn6S P@dIvn], e$ZJE.ͮv1`0`;$EZ$WmؖItCG)uVeS7$Kg_z#6Ob-S 0gD/N%& d(DD0MR)JX_vr |!2Kl׬Uu_fV/EA9"H-+.(^L݅`=0x<ժ58|ɩBő) ?XIlդlc;4HFVs . kUhx:Sz2)~lꊧ}uIl-T'yo75Jٕ zD`^G;8KۂW K;% kȼ V]voUj V(3a¦VjlwǾUN0%nsbt0E9K*IMBb({ RPkS۬Kb#'/hKų'\}S9L̜sE؋qDّxgiԽ S^ %mqu 珿r~<ɒ"ie;j%]IW1%-o*Fri:Sp`.o((-pqp/\ ܋I!P&/Hppnyp4;6؜M(ʒ%JcE\-ƃ)e-I@6RYx|֔/f/ںk1 -.=:QinH_)ʛE-e)R>$HR"ʈEMUƋ6-R%2YB[u-;m7 g\]ԕju5sezΨU(T쏫-!7۵!TeSWɽ _pW@ā1vSa9q_@Gt w k>2ǂ}!?fH %ేSE3}( U5u@ Qҁ8iar&n{ڠS7C`Rw"P2et:88DeR%r蕔 >:L"չ"Й a.M%;r}izW\2\=ENփrHX$ ٨B UE.pQTt;i:u{P \-uvV,E|JK2Ku wwDlS^d6xe'!"C̿P qp;" MLY˾B 2 p$Ps|` ФC=VC`пd?" ypXSZuo:Yv-D E+{K٬m$tQ#y:2^oVnI[0)nUצISOle0q{`m۞! [ۮBrxm=#d-Q'yʆ=u<+3MW^ٮYde3aػWY_|'ݒjOsVlco#nɜ&ntMKt Gns:kTFFWCk>5Mk֪&ZМyRtM-V ΢@H^Д?VnȢ/ 0 8ml ~Ny6 LibreOffice/6.1.5.2$Linux_X86_64 LibreOffice_project/10$Build-2Christoph Terhechte2005-04-30T17:20:512019-10-18T10:02:28.432221080de-DE6PT15M34S 0 0 4533 903 view1 0 4 0 0 0 0 2 0 0 0 0 0 100 60 true false 0 4 0 0 0 0 2 0 0 0 0 0 100 60 true false 0 4 0 0 0 0 2 0 0 0 0 0 100 60 true false vhvhv 1861 0 100 60 false true true true 12632256 true true true true false false false 1000 1000 1 1 true false 7 true false false 0 true ngH+/0RFTEwtQzE3NjVuZi1Db2xvci1NRlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ1VQUzpERUxMLUMxNzY1bmYtQ29sb3ItTUZQAAAAAAAWAAMAuwAAAAAAAAAEAAhSAAAEdAAASm9iRGF0YSAxCnByaW50ZXI9REVMTC1DMTc2NW5mLUNvbG9yLU1GUApvcmllbnRhdGlvbj1Qb3J0cmFpdApjb3BpZXM9MQpjb2xsYXRlPWZhbHNlCm1hcmdpbmRhanVzdG1lbnQ9MCwwLDAsMApjb2xvcmRlcHRoPTI0CnBzbGV2ZWw9MApwZGZkZXZpY2U9MQpjb2xvcmRldmljZT0wClBQRENvbnRleERhdGEKUGFnZVNpemU6QTQAABIAQ09NUEFUX0RVUExFWF9NT0RFEwBEdXBsZXhNb2RlOjpVbmtub3du DELL-C1765nf-Color-MFP true 3 true false false true 12632256 true true false true false true false true 1 false 1000 1000 false 1 true - . . $ - $ ??? Page 1 ???(???) 00.00.0000, 00:00:00 Page 1/ 99 visible visible hidden visible hidden visible visible visible visible hidden visible hidden visible visible hidden hidden hidden visible visible Spreadsheet-ReadSXC-0.38/t/09-formula.t0000644000175000017500000000142014456566532017046 0ustar corioncorionuse strict; use Test::More; use File::Basename 'dirname'; use Spreadsheet::ParseODS; use Data::Dumper; my $d = dirname($0); my @cell_tests = ( [0,2,"=2+2"], [1,2,'=SUM([.E$1:.E$1048576])'], ); plan tests => 0+@cell_tests; for my $file (qw(formula.ods)) { my $workbook = Spreadsheet::ParseODS->new()->parse("$d/$file"); my $sheet = $workbook->worksheet('Tabelle1'); for my $t (@cell_tests) { my $c = $sheet->get_cell( $t->[0], $t->[1] ); if( ! $c ) { diag Dumper $sheet->data; }; my $name = $sheet->get_cell($t->[0], 0)->value; my $literal = $sheet->get_cell($t->[0], 1)->value; my $formula = $c->formula; my $visual = "$name ($literal)"; is $formula, $t->[2], $visual; }; }; Spreadsheet-ReadSXC-0.38/t/00-load.t0000755000175000017500000000057214456566532016321 0ustar corioncorion#!perl use strict; use warnings; use Test::More tests => 1; require './Makefile.PL'; my %module = get_module_info(); my $module = $module{ NAME }; require_ok( $module ); diag( sprintf "Testing %s %s, Perl %s", $module, $module->VERSION, $] ); for (sort grep /\.pm\z/, keys %INC) { s/\.pm\z//; s!/!::!g; eval { diag(join(' ', $_, $_->VERSION || '')) }; } Spreadsheet-ReadSXC-0.38/t/t.sxc0000644000175000017500000001363514456566532015763 0ustar corioncorionPKG2Emimetypeapplication/vnd.sun.xml.calcPKG2 content.xmlXQo6~߯ഢ؀ȴi\E]1diH@QvioÀA_HJKJRg;#H*ђp`uZm . uq~a~ztvr 9shNP%| l"iX (B7,d-Wְ_8qhBʨ10|nY[A,~3^#2W9dՈVyZZ}1~E@r.W> /kZA$Q̄HRK.s΂iĦ"w30$I>8o'F 537+;Ox`őčnTVOzvþF:$סK|${ ͹IzJ",l)?nL}>{hײ; q`z~灌wP8Qd8@MEx-E`Qt:-klj\ZL^$Pa"&8K>U[NRI$d]=?K8I17YF*dti( eNb_VhtDWU\2o3:誐4<, ]"aݝ/Vf.A*x6#:'/Rі=őOuLs!9}xiLڷyNdYrγzP(uKa.txJn.Vu0BIY?~ԓ/%QawnNfZ7g2k"MvہϷ㪟GA_>tS^Jbo&L3UMddL@+٥VT_sW )4(^5ԅ,-.G\R]e؁*n4O-ב$ek;ё {ՋΞq*djy}~xu7:ox;WaK5\3郒 ?R--,J׿=4gcDwӟ]>8er+2tlN)u`qD Atr+pť{pPK'FPKG2 styles.xmlXnF}Wl HS8F 9bHچ˥e?5P I"M9svvPニ8Bg%k8p-D4 'c{:y7G'$eD24;}0}YLIRsxrY`yB67D`y5$ʉ"wj뺎~\ ы6VpEK0^D/r[!{{{\D4y43=x.ey? Q1l`d;(bM(կiE{K@i﹆XENKYs?ʼ" j~cdL8ĺSݫl ϣc4CW\_zOd:[o?eo! o'H ?}b:Ń5BgֵQ 9:M(U׵ܧ6+5$ /X-  Myj >"}Md.Xttjo!~\zpOlI:Gˈtk(iQ㥺mDUS XGvadkT󬟒'aC@D |'·ZflQ+! . ob5 Y۾4"]uP-1 Ҵ\M h&p"[p0cn3Ԓ|Z$ɮVc92O1Mlŀ\ح8sн;shY^|{x 9S5k)Ni^N*S.3X`WbÈסx*{3:vD F9XtL &j8QNnݾ{NqF&v +i;ԧra.TS] |xE~&ż|#wмP#dΓpAA%TǽM*k . 08B xAɪNJ%TSV!TK ѩ4vr.ǜ^T$fl(wx&kǷ zAQuGPN|}V#QF̙RhcYVkm;4s]oRٵcx-o54?KH1̾ YU j]taw_ +9!"2x]z%4.'按1j:{29)^R@~9]?FhnB8 d[,P,o)YXA@IugY+Y{6n#FգS]lAIH|,f0=QV{ebe OpenOffice.org 1.1.2 (Unix)Christoph Terhechte2005-04-30T17:20:51Christoph Terhechte2005-04-30T18:50:14de-DE3PT3M6SPKG2 settings.xmlKs8+X_ȐJ22pd#+0;!`fj}jKnosfqDɽԔ$&+ōߥ6)LxkQs  !ey->Wr Z:T.m"U-ו/-a)ti%Ab ު*zz2A[ cD?}߿kt>W׽I+|N ⵟ&  |M#g2C9Keۘ|q4PgtbNDRO8 ,aoC箯W [-p{Њg#+[c0VJ.\Jaՙ+h!mBc5)GB.A$Jn#(BZR"n`6eG,p2OEY:( '@3pO0xhoA+Ķv#ZBP-_~> ?=$@d{̎)H\&ۙfR#9nYv"J@?me>m2*|b1^p5#~K`:B?2/  ŔИP:f2_s <x4sH,YsD:Hsz7<3a@HDIC[ I\囂dZ39o/1ķf4?!xqx}x{ALQ@t`6m.*-hx ggxFdu- bjqt>8& 㛲DƎȐHFnc/~%0殊P Yx_t+O9WW:^5V]7Tv[~,[Oɣ6lsܿjA5./=뱷0f83Ik1cp3csINm؟ftW ODrþ6-1: .߇<gAQ%mQ]̱3ݼdt˭8.-E{uōiYS4Ͼ^N%,.jze//'/":6JzG~Q+ϼnxVLs}iB0f;ӐGz#yWAիyw F׺фW :_OC^- 7ר$/ox_~o9J\2ŋ.H>6`1Ơ _Eﴪ;dDGL-ȉ\oS~!H?u:q?:_Pc,UcdjuͥAPKTK<,G"PKG2META-INF/manifest.xmlұj0Onө;)ڃ3t9Ȓ!~BI_pqkg3X 38T+l7Os^쪟r/ZiuCAϏMŮ?"U.`#A\Co5sFtw$+$fц"܏SecGȮ3ZIƳc?8 4 f0&$2@&WJx?1]CrCu=lK,JaiiSY/PKSSPKG2EmimetypePKG2'F Bcontent.xmlPKG2%) Ustyles.xmlPKG2F meta.xmlPKG2TK<,G" settings.xmlPKG2SSMETA-INF/manifest.xmlPKZ-Spreadsheet-ReadSXC-0.38/t/formats.ods0000644000175000017500000002114714456566532017160 0ustar corioncorionPKrROl9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPKrRO2ֳThumbnails/thumbnail.pngPNG  IHDRqE<WPLTE///333;;;CCCLLLSSS[[[bbbkkkrrr|||kIDATx뎣87|z2iiZ=+HR8P:h_ɜkI}ju6]4?.uk}{%!^3#{w|;7퉎p5ɔIDuΧvUZ}#;#6[Qz>]Ar.qZ>C>!9*u0d5?8wy=9Bs)~b0\t 1ZM~OaM8z#e^`/Q&'Ea.EEx bS$j4,vI|?QB0񢓲(?lʘr]9cޗOy>R9#C~c.ҦUԐڐ0qrϠϿ9t'OnJө-EC+.S<սuqWˮzMN:H_Sr)u|UI^8?b gXå[Wo=|'*I^ޯR5.+]d;,Ls-0JJ7}tRSL^SsQ@!+Exc,)Bw"ݱHhe>̹**ο缡a/.g>[( "‚8O8"{]!҉ ψMM#)>`D3pvʌЛ0$B57_حEmR6:&"z@'!F{J?zx=ldQiLs$aO_$"L0 w9T0+ն- v3&;Ͳj7![K}on9]<;>2P}{飧eH_p1Tqa^׳kbPC"2y}iz|Ϛ…Q׹4h54xs.̢LkpT8ܼv>`X Rx6WP4NSVl!gU ei֚"ʡΉPH'[AtKv][u~-:cߊb1[-V܂,x 51:`&eDzqGh~{n! ⹢)fVV i+O^La%8!h!1.dc^9NJOeMO=V@)Hާjfl=<tw-5_;Rp?Yvg)cI NHދ᠗n? ;Aj#ͯ>VeHY]A, :$0eB0CBJ3#Cpф*-)\<ZXn$տq NIHIv? vf~M(JP.ӯZ_5x0VKr,j:]B[d֟;t>/tQs:SŹ݌}ybݮ⁢ڜ)ڕ=ߟ+-GbZ$w@3~C?$J>pt,B w\Y`|' F_hH6C(B,"yꌰYMl'{Y֣`K{L6ˤٛls]lV<^0]E Ҋ&GmA3ܶ^yn#x'0_|4)g̯ ‰=WغaUUR\SHIA@0Y!{C u$keЀOq9Է Ц ;ǿZxeCmDdU))+[QZ䆣߰f %c*WѺ`T*ċOe^m9_GW~߰Y!AdCא ۙ&Q-E ",2Ed|1u͓;25λe+ ؝F?vJ4W7Cn PK!IPKrRO styles.xmlZnFߧ 4HR<$bhsJ"Nџƚ\R.r)SI:<۴lA 6wff/:hKp2DR{c;eO\𘛆8F"n(N4EֹS-JHPp,Q!jE)+UiXaɢ#+pUh;VXbӪ _'0F4${n'zK*皘b9Xb,!h}[5)J+GSjE58+rL-6=4kGSeOW Xwf~Nر$FI< ]gJؕeso9W E-gaiM@x#S@st&14?;NYkR4 s&-!x6 ?7: ؖ)1e ɖr41Dv!5 ՌlRPX E.uaDd,^Tk$SϟLgU|bb>ra&l+Y?> IaZ*!7K)YuZG5O%IRCD0l'*7[Lck"x"Lm nXwSTho~]x}AJﵲO5⟷g+(МJp1zGGڈ!1dYA $Er{f;aPm[Pړ>[P) êB{No0`~D`X@Y=y{ \S|ݙu%rMˮ_U:±:Ͷ5<,Dj @# C ԡs@a(IcOq v$DԈ)$! )m 8KcuTPC!//UQ'oGkؕQ̅eE6DS@^Cq ۨ6.Wbם|&'шH=ƖRn97o}7ɝ!ߜ\QNc7Y`+S-56::+[#AJ{^/f 3vf+޿'0H\:3L/e v֞IrR^ucG>j#V|I,*mPGUDw[L5!6^e; 0^q7\ |%l8d3XsAt+JJkW[Ngfrw]TQ"!&­>eʸ'+H-axړ% NէDA|Ϙ~r E}R;:&k;Oو ʘȖx^ ڗ DfKwn>5ǔe|1q*.EEJ>!e>?:)?gc$!۹` |UVJ|%w{K9RܭE@O.L)Z;z9mh"6n?iQ=qe]ճ/AB-Bj#֚T%5(|U_.%*Azfsö {,kYVn~ Z]yTܬ 77*(7PK7F^\+PKrRO manifest.rdf͓n0c4NȈgt=1~+CGpt 7b$aTk]t$'D*ȓ )~2faRЕf;ң[*KoI;*#9\[: TA(H̦ጙ~K\Nw8K{>a(MKJ, IA؄ɆjNp ` QIv\g10-5DNeO1NsCFT)7OC*7Y|;3[`Zx֜? -LFJwM]W{ rU}f倫ߥ2+4'KrNهѿPKNJPKrROMETA-INF/manifest.xmlAn E9Ŷ2YU(Nz  Qrb+N\Ub);`|fw]udž}wV^[}?n DrZT۶a9*$Q$@/GnfWi H.Merijn Brand 2008-08-29T07:34:592009-01-05T15:17:51LibreOffice/6.1.5.2$Linux_X86_64 LibreOffice_project/10$Build-212.0000PROCURA B.V.0falsefalsefalsefalse 0 0 25470 7408 view1 4 2 0 0 0 0 2 0 0 0 0 0 100 60 true false DateTest 2711 0 100 60 false true true true 12632256 true true true true false false false 1000 1000 1 1 true false 2 true false false 0 true ngH+/0RFTEwtQzE3NjVuZi1Db2xvci1NRlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ1VQUzpERUxMLUMxNzY1bmYtQ29sb3ItTUZQAAAAAAAWAAMAuwAAAAAAAAAEAAhSAAAEdAAASm9iRGF0YSAxCnByaW50ZXI9REVMTC1DMTc2NW5mLUNvbG9yLU1GUApvcmllbnRhdGlvbj1Qb3J0cmFpdApjb3BpZXM9MQpjb2xsYXRlPWZhbHNlCm1hcmdpbmRhanVzdG1lbnQ9MCwwLDAsMApjb2xvcmRlcHRoPTI0CnBzbGV2ZWw9MApwZGZkZXZpY2U9MQpjb2xvcmRldmljZT0wClBQRENvbnRleERhdGEKUGFnZVNpemU6QTQAABIAQ09NUEFUX0RVUExFWF9NT0RFEwBEdXBsZXhNb2RlOjpVbmtub3du DELL-C1765nf-Color-MFP true 3 true false true true 12632256 true true false true false true false true 1 false 1000 1000 false 1 true : : : : / / , . . - - - - . . : : : . . : - - - - - - - - € - - - - . . ??? Seite 1 ???(???) 00.00.0000, 00:00:00 Seite 1/ 99 08. Aug 20080808 08.08.2008 08/08/2008 08 Aug 2008 12. Aug 20080812 12.08.2008 08/12/2008 12 Aug 2008 08. Dez 20081208 08.12.2008 12/08/2008 08 Dec 2008 13. Aug 20080813 13.08.2008 08/13/2008 13 Aug 2008 Locale settings on this PC Short: dd-MM-yyyy Long: ddd, dd MMM yyyy Default format 0x0E 13.08.2008 Mi, 13 Aug 2008 8.13.08 Spreadsheet-ReadSXC-0.38/t/20200617_Testnummers_inclusief_omnummertabel_GBA-V.ods0000644000175000017500000025143114456566532026661 0ustar corioncorionPK !l9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPK!OƧ styles.xmlXIo60X([X2(=h9D⸿(GNb!Ʒ|oq>lL+PNъt%hh%*xG t"};^״$yˡ%J:1"W`{ƒr%y[2=N iK;G"}E^Rm-mXlcJRe- YkTEI+ Ɏͼ0=To6q}ܮh6n.r FtQ&[g/ 히VXWπe z ^CZA$9%I*R2ygd? @ѽMDZN#g󶁟lFAy {x^jDh>KhHCDRц* qk3Ѝ26zȔONdoT .}wo(m1KzaTo#وnG*|@3:$|>,=,禚y4I ~z>kޤ$Lpt+@= dayt BQ5|j ڐqn~~:] =i΄deoh>Lx`{%cC+ZztxPY`$/ …࿞)6İU"G.lg% P,|i3I8ǢtcN<0*GhS`k+G|.pCjV[ef_Uef2|77>A2V *PBwqxK`eiI%YЋђ#:ͶwL?)l].eC>s }REDMJh?8c$ ۫a d; I|PշYHm$0bUJ[ t};9t[?a swp |Jrk+8EG9QAH⽹,s.9_Ya2"AHy6 J.(:؈{`,@1>rP)R{ w{(H߀%l^]ۿb&f 5&Xo%ݸ,I 7ˑ)Ξ; Tc&8l7Eלo*|€;և1WH_PK!gIuY content.xml}n\ɕ CۘI=B((_]60/$y$$ɒTOz~_2dIJ"4 wm FJ̌Ί}goΗz=fd}zz˼6t\ƧGoϞ|\m'V&<.b}uz^l6OVQb\ғ;Ov߽g~;lߞl~f_o^.^< w7ZP?Xlfyzv{ׯ_?z/_{~2߭֓MwZ~}9?v?X\Nwi>=|qXL7v8:\}*dob~q)r{6nS`XF]_͞\\۝cuy]Q\,xqju*aݷ\6\B\nʁB{w=x)~x<=,~ګ%,?5.7N/&dq9{8?gGgr|,Qa-.O=?lu|&qtw2x"{v% Ÿ8$O/qe_vnډKz)Hr|q/-F{cIa6tCJ8~$9As;7ͧG~LqN C~<aȽ?;|SN k&2du.SʭNYIDw u> __]uRO0$CgCYv{).uqZ?˫)/ Ǘx|`7]%͓Ϙ>;ݾ|zӣc>8|h}eG,qnm/L(Eni/(͟-2XO*^#]͸kOK}ڥNzW£ZHuT?0C_;/(,GώC_O')sx~~^0U/ke]sh}v].\??gog,:$^5,yBXM7} 9J` _+s(ufAm\,-by5ηo/g7dFxrOV`zWgg8GGaAomvo/6({_O,;?e\~^_p6f?vvYL0l+׼&(^sxho_q.J>x|<}8uc,buX*¿/9-|ѧϦ;8>^.䢤rZ8l|+o+Yk3/'631XlG{z=._`? g_W!f~8n%=|׿^ ;w/\,kA|JUw* XP+yb{6A>/Wrb$cWgtB[m%!9Yb|^ {vuϩnPw\]$qbn),qGQn/<ʽQZ>ɷf3WS =aiSY~(wxfjq}onSm9̎Ͼ{1\ e WO>]3\ru>޹,tg6ys4a Q,Ͼkw(.'۽/N'>_e٧?olo?M} 8Dz4yzd]`kO/l|_ʡ;%!ݏz(f_y83vqg?ܹ'̾\A#p@֍uO ũYߌ˷N@P;ړ^g,':LiKy;"D tr_o$Y,:]$~oTCڭL=8[NtBiJV7_#FyǍRI %:/?fI[3CvqTŔt_2WS"(ONX#wOf67˵귿wإ?b0| }VL<Ï]gUy6q&=Iu.;}%9#MYnGlj^wԻ.߿J7 EЇگjҿGzfLG>oKރZ?>\$ϓ/y#wADW 䃫x.ϧ.wS3SO_]ov2n;MXiD6z w}C_1oG~2_m7] s~3va󕿔>ھz}sM/;;A_3ԃHOs ŵk`w`7[ek/׋lԌ{Nu2Nriq[?36w8zvNz!yOO8$O!s+0H6)>?O>)q()??OFuTTHk>>jOݧJh~j^ΧS#b>> Kn Fo8Ē[;Ef\soswߩph"L@:`{ "4p?r<I|}Sg¥!اT"V=u9=>IXSmYcLx9/;&y%*WupJh/+0#&M0ewhO0m@J&:-+jD)d Ў(Xў tFF>RF tA=X)侅hW2+Lbam J&$ tP!&!Y-@O c{}أ6&Q HЇ_C f_6B$R} ЦRHdP t"֧a!-J&$hJk@w CCJbi!f(PFG ;Uqz ~G ɐ3ڣ#zSe% tC2m*Hk@:M.R;U1M% #hm*BLJM^% tEJh*E2nhS)62ThN(i@]Xd Pבy2ܷ0uɓKP 4Y-@G"`TJDS)thS)e2Qh,.hSIޢg!`- tEJaB)$ML4اQ4:jڡ#; G]Gf畔h,h?:2Q 4oa#Tʑ:dȇNhS)'2L(Se3TK Y{`3M\{dGM%(D(ezO<&&\:( ;dȇh^+SeX"K̭`F'QY3)e4y0uf tT:҂`G`FWQ*a*e4I':J#@e tP!&\oa:*+ЪdQQ A^% t@ۤ5RFe tBJ}XJ)$`3TJT7~M*V ftEJK's$6j#7Rj h?Z,M2@;u4gut G]X`4oaFXE8>Se"TK&$6Z"RFw [FJbid$]ЦR+hvML<^% Щ҂`qѱ{7gđF`c;Gw{VGw;4 3Yit 6F[ di" l ߳8Iۺ0q'BM8s6&rC;gc C'Kvku E;usDIew,>hPαOQiսEKGfPw:Otȟ,Mj噰LKP¡F1/(jt.ysRwdjFg1/Z/|mLK jt>y}4脾6&*;֠ZdO@`VtJ߉ jtN_NxվWI}'6XMI謾 6f1 wƴ4 zA`c^_F']1/ ^P3.i@ȇ`_ѩ}' 5hPs.P:[KfqV.kPЫZPGTؓ P¡Nh$2T 5ZCvSdj(ơ.h24kܼ8m7J P uPV8eueWXDK&7/@j$VVkB{ bidYH^b-hD,M}^guE{ JY]CHe@^bP"6hnu bijCQ<:2šhcZU-҆! m7DQZYM^&uAMM8BM&Z8m7JfAJf+5ꆶdPwO&";Ȇ8dijOP~02P~02>FC8%+5jtFY]jtdLpq~?YV;U~@'K^#0:dCKDm G88wWơFBÆ!C5:q~C{gd}5:q~vh E{{U҆>پ]||zt2g_m7'φK Piw8Kn :zUbij(Y{oc886`ۼ886`8옪ְHzpV5h886` 8Kn ZYݫZ 8KP#? 8KPC`c_8FP>痃^P>痃^P>A}`D&{iqq~iB+ԽňKcBM0#:ŒZ&Chc_P9FP>3^P>3^P>3^P>3^P>3^P>O*M|j1 KvkW̞XڀW<"NL+{U)^,M:S#Xڀ IpaԽŔAH/6&?GT2JiXdj8T$ 5hP7P=ҧF&ZU-u biW9-P"6&7/GH:|h)G2W 5;CvSNd©jQ8m7LfAZ&+5ꂶr!CV͋C]vSd 5P7ݔYU4P~ Ky5 CHqF(j:>̦Ձu@%YV͋CvSdhV 5{؄CvSI6MWX2nKŁRۭՁKCMbidHY]jujzbij2hvkսX`5hNh&j2q33{ePRC]He_٦ԁOP7RYexP9- uP"&2V$ڡJ;ZYM8u  uj*6YNh=s&CvSdh uj$&Tm75JYjqP7BM(a@&K I8ԨrB('8ԨrB('UN8ԨrB('8ԨrB؇ٴf Ey-D,md dNUNơF`D9}4UNJIj*'4YLjT9!8# 8ԨrBpFwP QN`?5-C*'gD9}$5Z [$נjVg5PM0UNbiaߟC*'oD9ġF ?P QN`^C*'yݑ _I GVl.jq>>=:ѳ퓋gg5qV QN`8ԨrBְHVj8ԨrBljy`0}Xrk 5y8ԨrBlԽ$pV !PN8FP Bj24kšFB`%BMVj8ԨrB6䁹^UN}@B+{=P 5`Q &vň*'uj1 A,m@Mn^܁ !PN 5 y6ۼ8ԨrB6^P !נ4c#Y*'>^bDXr;K+Խ4+A,m@M2 v Ɂ+A,M@;ڃ+!yv+u W{U)3bi^g)BA,m@M^&3^6Mu:C*d©5,¡nMY+dN CbiWCQVg6j|lȁ̂B͖8hȐCHNdjRáh$g҉i8dVY+Խ\XHqV7yWXԁ VfuqKPGXڀLpVZĔHIꈶJ$wV{U%&4@s=m7BQZYM^&uEMU 5qn*L8BM60a:D ڡke5yq=@'נj2šh 5y8m7UR 5ꄶjnbp3n duAM}VɜʕkWbiIPV IF*6&+5@Z$V_Mn^@ĴBݫZl큈  .hv+e5{C]Hc_^bkhD,m82:?YڀSt5(8 8 Vg5:Hj18diդY8?;C8!880biWP/dǡF32PNVJj jt?:#qq茌9-5:ku EG4챇M8q茌/K8K&7/5:qlѣQ,mL8FIXjt?z#٢GRd#Wi^;(g5:=] 5+ơFgV{Ubi"id:Q,m@M$jt?S@ا@qq7rPQClÁGVl.jq>>=:ѳ퓋g' s=87KـWq(6&sZ8 Q Wq~y3Pf<` E@d懻Ljt?9.2qq("P5:kPChc_f~8FP1痙^P1-8VZbj1Q,j2YP$ ġvh59Rj2q=@YPP5@&ZYM2 :m\j1%P=RE24ke5yqVP=2&vZ+ԽTA(&=GI T[+{Uy@X`5`Vg:uj1{ԁ =YĺtbJ}5ŁCvS uj1'$6pVgݔ3yW nK&?ꊶ2;ЧսvX`5h.@$p@ ۇ@Ȝڣxv+ՎơhD&)PꄶJ"s{&ꌶJ&NP¡.hZZ&-ꊶJ%CV͋CvSa%BݫZ@D öaVW:5Y>P{ԁT$H!C~u d©jV:,H+dQCvSMdh 5yq3nZU-֊DI m7UVH+{U͡K&CQV ɢ:MȝՁ:=ۭ^bKhD,M8y9클l㙽DF@"BġhU==ȄS+IFPUN,mE2šFJ he5yqQ4QN`_+C*'r;JC*'r[P i`oR_Vj8ԨrB('/u¡F`D9dáFDL8:-CP$#0ZU-:T9!j}g5ܫZtrBK&/g5"jT9!9$HkX$8ԨrBrl©BP QN`bjT9!9# *5m0UNHbi"c$5BzpQQ 'fӚ=҆U-zT9! ͋;T9!yՁ=7 F7NWP QNS@&K0dQC*'`D9{UUNJ;Ki^]ɐ;T9!# WP$6qV )R–8ԨrB FrBK}05vP )QNhdNC*'$yg ҫZwfv9WX}l\<?I,m@ݫZr|JkGn^܁ )hpQ('4OP )PN.$P8Œ[N"eP;Pz%P¡JAl@lQv dhjrNPgbսŔA$6&$ u>xՁS:X`5pV7ݔ2J+{Uy@X`5+:;ԁ D ڣ${rg)u W+ه 5⬎h)GvkWnK83nʬVVsAMbid>a$`ˀZ,miq=^)96QK NP¡hD2 5Y>P'RXrP:=xjRá.hhZ&$uE{  uj4"&j߫Z@d;P"6&?GH6{C&j dPCjF$&+:ʾ0E+{U&j2$ᬮh/ZYݫZ m7 VfuP"6&CP:2¡ils@+Խ~Xp l଎hkPjV:ƾ^+dW :^+dC]vS+d©jQ8m75VO+dNBtσq~V σq~-C8?Ojt_ɓ a}'5:Ο#,pq<gbjt?FgPy02 P;t?&Cggd}5:Οq~v8ώ}Mk^l1;ts=8vlhVjV;8?h"5:/zBjOPg[=0bi",88F[Pg?5:ΟqIq҆&Cjt?{#ePg/8!Oqq~D%fSZ-/u8Hxkӓ9 g5:Οq~ jt?#c88sZ}5YP9=sP:ΟFXuq,&dN;t?#Wq,6XM0#:Ο$pq~y)@ط-P9g?5:Οqkn1Y,mjOFsd{Ubiսňg4uU-bi^brHEKP)Y,m@ݫZL4wkPNaN@VVu% sb 5q (iS!NPS% Xd952 jrP lfv9WX}l\<?Y,-Z׸ġvn :Y-keP{ԁPC@M,7ـp#n IFP'$ٞ {U&5yqVWݔ+Ĵ^bnhI,m0ˀ:5YP;ԁgÁGH6#7/u@%BiXdp#n*VI?CvSaBݫZ,m7 }guAMS^bhI,m8n*,L:D,mWX@Ԟ̦սT@"6XMn^T,Y)*F P uP"&ŁCPBVj8u q $p*iiսŜvXYvSf^b.hI,m8+nʕZYݫZ m7Vx4w0EԯKn :Y-eP;ԁ PE1GLـW(3ra_սEyU 5pv.p ŒvXڀ8 n*,:2qn*L8BM&Z0u@Y-&CQVWJY>C&j dn^bhD,m8Q8֟VVuF{ 5Y+š.hZ&+5@j%V{U=fuP"6&CCHs6;JCQҼ 8m@fa}uDM-B+ԽŖvXY]vScEW*nK&CꆶZ#(&/8didǡF`c~ 篃q~y܋ۼ88l$z/q:I^Pu1_j܁u1/X7lY8wbCXrk^բCXڀWq*6tX:?Y::_eCXڀ88u6E}c5:_q~Q5:_q~1rbn%L$sZjt_Fa2J+ePg,¡FgOWq*&|uU-zt {Ubijr8? `jtz#8KpqV8jt_ɖV{UbiÁ~g5:_q~y9jt#r88 F*jt#Wq*&"{Z :U,m@M2 8&sZjtFvLUi 60qq٧aBݫZ8KL8l©ս#:_J g5:_ql1U,mWP ˄HrHKP@Xڀd,HiW]p#Y;jrP'P=DfPS#XդY]@He'RVW-C]AȚ*BݫZj4@#T١KPs5QXڀ8#옪V_ݫZ 큈 V! guF{ 9eVVC]H.dnj2PW^+$pFˀ:4*šD,m@Mn^j:¾CnE^_iPPKDMbiÁ@n*L8duAM}G+ԽRvXp YvSij|׽XZ`ueG~p@D$p=@DQԽEEH CN_-:&y[V{U4jVM+ԤYvSeBݫZm7 B$m7JnU-ֆ KPM8u p {iq=@@X-ꈶZ$J"NhZ&CuFM uj$622㬮hU2jQ8 m75a6P uP҆!7/5 V'Q8ԨrBl('[zA*'rթԨrtȝ4,z2$UNh yS/V m@?UNh yS/V m ouCXrk{UUNhbi^բCX}'$pQl('Ȼ8FP r`Nfa}U5М yWY/V PNwUNhΆrUNhbɭA&C=dC*'4̵ܼ8ԨrBlhV 5{C*'4oC9AUIjT9y ^P PNwUNǫ5hսE*'4nV˄}u@XڀWP&6U-T9 {UUNhbi^b@XU-"H"?5ЂDjT9# 5ЂԫZ rBKaiaVGT9 {UUNsr Z3|Y*'hD9mP -ZYMVj8ԨrBlL>C*'hD9!#D8Q('d-C*'hD9N(҆U-&J45Yю%_W8I&ɤ`<6t_jhUը̌1#:4`VA2"+%R{;?^`_jH;jO=:K?pS'::K; :kcuR~DlYR޹%?uuwKnɡTp ;wQIiZOS=14FT_lRgZNh $ԟz'QOH;/۵4~뻛^_۷W9@ Д{ǺՒ7Ag?~?^?\-{zwoo_] D!9Dj\?A_<.VwC}`vOZ{xnȏA$]|a]:V +3JT]+KNhԐv2vyd+C^и%)BwUg.;yT32>]AΘV3݅#kQxZi-fHi40xW/QwoߜF}fl݇oNׯ~{pzwy<}+uVcj^^`&hޔּczl77[Y%uRWkC7ДbC.N"se'2%)ZЛ)g,ɒalHVO;NdAsAV̈KԼ صY" xxخI~zwzxwտ]z_]CoSNxq2 OIdC&jRlr-{^DzԋL1ݯ"L ubD>}N\ ~Gĉ h5spHL#ΚěRl#kx/>U&% y!k;3WhRLnlHyR}*{ۏ48T2Q)F6|IIi@>?Z^.R{[\nMiD>?JR2J'8FRjilHR cb#_. BCx^ h|9&khHS#BtD;_WU)'R)(0I)韛zRlsܝ 'hu{zrW_S2oϕs[Ienonxԏѿ7W)__pUQCR RlX$l$vo7 h3ܔbkћRla)9[dnJ1 ],)PM)6bwNfF ahnޔ?9k9UAw7xٻilyqcהbCHS>Wt4gv4G?@rK4j?;/0~;?zkNjcw zy$ؿGJwdzS ~S1U/{?RM2VJ!ޡs豟FG4xW PI)6S*`FS TQ+ņ8 aA1ꦼ4jjJT3U䕦/{ɧZ/7)ņV cjr8o8CJ deS?f0{gQaXiȟjs?Nr5BC"Miȟj6H)^>.K<[iW;?yL0)5$$:R;b?z`V]0lɦ٥ea7lJ!-ga7.bpZ<>[6RjeP2Zc(k\CWnVH,;%H?|uKo!ߜ_߿p{txW.QC)BL}qm]ke^&NHCS[C9;E  lJ1 c{w/*ņϰ&T;~H)᜷uPoJ!-R5&t'. wI)6İc'6MbX)%+ņb,h`,FSibIVj2[Rla)R5C-d8)4tHJc6RM}h$N3[APjҰ|j'EFbޒZL1q)ņ{K%0)4tZ: bReVT KQxM>f7aXfy2ҳe󫳒^-ho7>|z<~Z7lvMgWt55SC;n} ;1¯7u&!?ugɯ:VioԃMݔeނܒKZ(AS )?A7vUjZL-J1J%awZvjM|SxٻQM)6v|뻛WjΆzeWrRӔbC??%š/)寬X%I)6S 1!ЮDp+%]H)^^p9 byhÞrV*%D|`cS?eg8ДesךRl? eg2g*)ivX~߁OT[зT%^@cbCRl??J_;T^4}z3J@(? xٻo=M)6TeA[ِR]jB/+ņ8ZN]TmJ;;+VRV nJ!QHhf@܄GJwnT6pJ~ &Ae7 5xq:*[B\ +ņbڧ9s(X?iS 1w`VU K°Rl@:ԑUb[0+ņ;̃qQ՚P(YMiy Q2V,RG%~֓ $k!ªr۔̽L8qA`Rqr}YJb\ SX5oM#W.Rݙ1*J\*` 841,8ҦbR/U,GH)ơ˥ b\ʹT:ֱD:5n3fAoVd:J86ߔpqHZ)8t8VX)6q>qLRGJ1]. 2~G?=)v<?\ʗ_?\7oOWv7?~u?P[R7o?޽~8;\`$) tk}?xR|'4̍'ؐDp~mT=ơJ)8մ8dГRlq)?Q(KBޔb\RdrE7R̥W<03ZRD'\xS'*bZC85ZbC_R :”0jζ-HHIi\^TrS%rGmz_L8zpXg.ёkƤFk _.j 0>9F`hś^+aEu^o(/)c4P5UCl8)~h=$Rl^/q G.mH)^!0{b!aѹ.EM9s$J-8(9`u}t4?S:ՑR-$K.bCl Ʒࠚ7~P%$jFׁ1`?͉P5A٨uzam/)ņU3!H)^.kycRl@5MF+Ek ,Д[jFǣX-Zh.4P~| :fm!XLT* #Ժ|[Hj[+1`U4P52W%WLqL[0VV) jLXRݳ@ 2X J!{ ~9!g+ӆNu4gLpڔOϪyH)ጿ!!bC_Ai=cZu֨խ?nXҸebK@Ky:uU 1)JhV7f4rU/ecR9gpZͪJ!/;}@3􇯮}-ږJaGءS(Iܷ?~o.y[{woߜݛ}f<2"ۖr~%n}kH ͛Rl_>`_NkKG?ūŁinMcH$e[WR|Ҋ3m@ cSq~ AJqۦb\ʹTM#Q+qƒb\Nz:0jJ!ƥK {AK? ZRNo+4.? !KE~Sq5OGeJ!/R5D>^^P+ JǺ i즚R9Q# ]bR/LwiJ1].7ؐ{LEG7PŊ썿4,lW+Q 1P<1R/ޛDš!M)6< ;jҌVrR]}^1Цb&*oHQ0F3oJ-8&_R<դTͱb3PTה*ehJwL/ٿb[-X5B=#g(ReCC<*7nS׽׍uNlJ!wx@I$xݻS35gjRl@'0~4x6PRNnJ!U3!t@6Miq3?) #πJ*M)^,K4H5;W'3sS׽ uq zԦbP3p0a J[0+ oEica~jvH]ؓ<@L>m5.oJHo񈞂uunkԅ5;8jfB<.B=w2#Mi53!.Jկ[PSG Oee9Mi6M)^g@qYNRl3 ougY9%WLXhxj"ġ =)حwbP5QuX'ZOBRl@D|Wk*\1q@) # J_ UH[~ i4Pk+q}cTFgbt5x$4c:4gx$*{R( 7츄(E6F=BJw,n#} bC @@~cQ*2R1ª4܂O%{UxݻJnJ!wx@/{@tTZ _;<*@tTQ0Z+^e<@LGGzR,t dۂwlJG/BYn58"ޔP5QuzL%XM)6< YhPoT!=w[0rdxT̈́йuzƅf%ߦ4; 9r.*#7Ħr={uWbCew_՗_xpo߽gƆ݇oNׯ~{pzwy<}+V?T^]"Uі't&u|]Cj3@=37R/U)١8)8t\ZgRlq)R)Hn4>;`Rlq)R5b\ҽgM)6ĸsv?{K"zJ7qyq%7ŴEZ"GU+fq\j d.vM)>Nu_bClZ = nTYF]tϹSaayRid,q԰)8q44`UbR.mDgԓRCKW3mJ!ƥKtr`?.th46qyVe-\[ZZu@AX7qy\*mg4=Ng@1]ms㊦b|WM,MRCK*ƈUܔbCN hƟ/=.^j*[E"]ܫsRlșU}3N~;|NJ1e-դ0~|kJ!v_^12+NomiߔK4R>NJ1]~ M)6_*E#_q)8biqH|I)6ĸsF*3ZBJ1].C1|ٔbCK9Jlq6lJ1].<1=)vr,U=% Ų1 )ņr.3,J u]ǡ24.:ea.Tהbrݜk90 ٔbC_墴}8ơ)8\ڄb\ʹB IR[@,Yi\^>tc.Qa JԪ΀r)_$?mJUfڤ֪S舒"ڳfS 9;.J&ۛ 075x`E)CRdD1VG`QUNQ!o?:f{Ahz„J4tZU)6[0:8f&*݆*V4 5*el+ R5'љbYd5%:3x s6?ㇻǫ}-&yn_?ޝnO~ʥpsp#rYG^:34)ņG{d80ZcES/΍;5󝂟'ꑵ3BqtM7OTaDuZ3Q9ęgm[^NVb~5"_S|x|;;7"V9F:4t@X2$W6q]g/ k &]M)6qq0An)y?1єb2]Y)69pcЙW7l"7Lɥa¸Vì6ju4{/ >֢v `֔bǃڶFS#';oi^5;5V)8t}O2ASb\ʹT:->Z Bm~Smftj 32,`rxYI)ơ6OM)6ĸs@E>sU9p<>_6qy5GORC_oR]D3 bCZٟҲ`EJH(@cCU ͖.32I4P~)ZuƷd슛 隯UNώqFktIbڔOopDK艻㮙DAdfؐ/M)ơ.Nc.Rlq)~5Si[B2.aRΥj%b\ne5 P ޔbCK9J׍_ҨP0"IJ1].-elHS 1.\jKRqrY#ԿKVoJ!ƥKk00jJ1]./?Rlq)R5!s9+R찱 4./ ~Y8\F3zR7Ҹ.p`_f-L-~IJh~|J0ш@4./K seQ X"WxU"IHna{AKQ7>xJnqX)_$[m݇oNׯ~{pzwy<}+hu^]`+ܸ,z< n)4AS 8veҡǃ I'S7ٔ\./1拊G7lR׽m)ņ\cD֝= p_nJtY {R 1eI;cR]CWFM)6< ]w*%ET_Q:pyPU2F.1Z>7y#`ByL]P3 + \^51yzZlMi {0 jQ: Pt/R&7x$ԁnR=^؃)V K~ Y:tvZCOi3 + #=aS׽דPS 1fB:t&xݻ.n(SjJ!U3!z:R]_s1pU 1w f-uXhT J!|PRgh/sU 1w ¨zJ`YVނf_CN //3<@GΤ-/9`hV -߂j&exS6oCMi:tZCO}͂ 7x$^BH)^3[-J!؂o馳ךnJqTe"VGz@LGǘΤ{\ ؔbC.1ENʎc:(O6)oU5\cLgVq:·^AQCV 1)ׅTSq8å&h4{U 1.\7B#oJCg4Ƚ)ņr.O c:1(EkJϗMīSc:K371)1I)ơm9ѫ)$PJ!ƥK N@ǘΤpK_(KV 1.\*m|DǘAkn%WL;4./|fa.1scJjbqVH.m\$0.^"+3tT )ShgO/i"v<%:tyb۱4RΥ-fzTSqr'jGH{S 1.\:4}2ZcL NKҸ|SM#Q/ 1z4,/K,fP,9de ZCVxFgsTr>yO5r) ڃ9DgγSx:9+nJHU@3:t&xݻ7iJ/ Rlޤ/q VDgγLfʍCMiUs/3:t&xx@G[0Ew6.IaS׽ r[4pJjR]QjFUbC @@&GE%P2F~ eMixJ7pFqVYoJH֝gSL V -xp&&4CLJp)abPZG?R}L}迆IbP)X7xݻFgؔbC *|V qnJw4\.xS 1w I<P:ݴRz@:*nJ[<ޔbpI(#6ebCKqY5o)c%].eyJj c֔b\Z9SLRlKTͲ,3Z@J1].멑HRlq)R5Dbps}{X)6ĸs@ )8tw9M)6ĸsY2+]Dgj KV>-X.cclɥt鯮ߟOw~-]xn_?ޝnO~QsۺG~PL}?xgG,jS RBU1pKVK{CSpTP`ZVY^(v14./K퓹Ǚ+^$SJM)6q>ad"ZGEb\RvbRΥMLPSq8D Ьb\ʹTM) Bt˷/~xg`.!aJKR:JϗI5Tu\ S4 ⒕\./0P*hT79HCr%+qBUxݻS/4mJ! Lk74xݻsD{ J!5s2SIU 3i3 +ņ;Tد'[E4|5DORWd(Ez J<@t ?gTY387x$yL\a\1@&? Yi ٟBOFj(^3b5oDOƩ(Vyg㚪4Yi7:#׽}ōkΚ<@'ΟNkVq Uܤ}ks#DZ_৻F64wwڕe%#7 3 0p$&!F(P͂cVr9LhSdG5TkFL>)Հ5JUo{w)5`JbO>5~ŝpJ|oB} \' z4RQXw 3tOog')|y}dzݖI&!/>;䃈L~_4weGp8Kx\2 ӹ6a5YRpYT!Ⓕ Mh2W0l%2S%wo&ͦD5:X޴\ˬ]ّd2OoA2 _V_rlt.w* ~Q/Uuq\Uo߫U}ۯ+UW~xYd,ZFL ;=O]]^9nApBwY]>=kы@6-=Ý$ww캿 t?w*qf޿M}5]҃[qfb~qu݋fFQ i\pg,Iv>puTgឞ& ft`$pOwO kΰ VqfbܾvZXP ;1G;wsmטt cpZUm qi7hAN݅@z|Й14&AW|]zV5N)q]3T0u |IY+-wlGY= *#ɉ׀B߹zPIN > !|_-kbMOb>uODrHrZg pNkMz i>v >05wkמa+>tKv4wukמa>|_zzk[ k[1u!;?] INp`/;?s='ehOCVP}m/f߼:u]=r/>>즯{a1߯?nY?Uo~Q5 3fV,GrgͰxׯf˻zzz |ŕ8==E?mHN9B?|ӧՋ1i`tNѯ.>m_W bʵ~gx~T٦b}B_wbBj|]z*oVlfVשz W|ȧeou=B(ĴlSs9KB?߅50B(σ .~30#QkּfWW;âSS\6 ^+^oQ OO/C{>{{)8Fx~e3RϏX?~ }Iy_m'6m܋^.,3qM' |OpIo'Ҭ_z,藎Ss܆j+B?ߥ/=~HC޾mK?~/K7:'gkIY {|moٿ#bs/z,jyOOnnMA{֋{z:vZNoFxXh : Fc%s0~F=ZtV)@8۵`6S,(,:u­AG5Ycved$}mٙ%&,y X)bNYBmͶANYWV2E0k m`>wn VJPXrP^;e =O޺$$ōphC^;A$%$RίlB!Ff}3ߤ$OYšqu6LP֪YͩX7?ޮ7ǾZ7vnĽ rQoZSQ5'$_qR_'RpWLlۮM (v7V+7sv(abXv]zG0-W qwi ڙtV1 FLlXvGHΥ7 5(& ΰ)s{I2edȑ8̘Yۛ!z=af9Ҽ/7+~~m5T޾a/?ilv`mOo>R6~=!1O0$]T֐NL׹ kO$ǣo!Y{r[4| cŲ ۧ.|Vs-KzY:ng@?B"erb4y"vz&X,Brbzނ(!erxOq,B*t 99!er ,Tf$V(Y&' dQJO R]|8u.gԚbY, @0|S77Lܰ- X82|S}7B!dY7u|6H&nئ/yeZ7 >bYIJLmY.,٢oj氅,B*t,٢oj,Bfl1놑,ɢnBe2e Y4 SZ0 w0_J↉VZn#%I Y,Tq) MbY&Y9HmTL Y,~@Xn#`A"d,|Fq)'!er@,H< Y, 0놑d$Vv6fkuHR"d),B-aZ&+2r)5RMbY&Y@$Km Y,%k_n#%IJ"1K1 *r)Y+E,%k_;n#%IeReqY+s)IR"d),Y+MuHR"d),Y+a$)dN0ca$)dNg!I!p вFʦY+cIO:Fd鸍MY,LBd1FƀQ!er⸍sB!d3 Y<`ZN"d,h#K$%&ٰa(H͵," Hۢ6`[0q&w@-Y&' X q{Zt_E29Y@$>!ers,Z0xY&' *dqްցE29YV[ #IH:K ~Ws0Y&KWo07S\7$,BɒiFB!Kdв4' %86RX,[0T-6RvdX,[r)IR,X- Wq);VGŲeܲ⹍ >B!dPYLuHR0q w@Eq0@'E,ԖEeuHR,X- :', =i@֊e2eZ7-$Ųe)ܲ@вtFJӁQ,bY&, FAn#1`G"d,`$6R 氅,B*t,HiiB!dYl͵,$/LyY.>\U1ʩ+/fQ}۪_To޾a/?c'?V}W ?.-i-盫O0ŕ~$1pn,Dqσ8jLWeOj[<޿Wb=[}[;t)Hۣo0/'d2eAdiaS B!d,9v`$dLNrpì09Qx̂EbaJs1|pf߿ZͺՐr1jGdp/Uͬ8_ׯ.Y+q{HW g|ϟ7"R?XM_ofCAu#T"s[Ŭ+;30bZw57#I3Gz왋 S\ߌ$3™[E~I g30 ڙIxFg gZnkA'μgV6`f]oր7hg,YÔe.- g9P$f/囁*3ە<g^3z8koFHs! g:3[w`[ؙ39lm}̓$p9lYe5J_fᛡ.ke``%f/䛡m^ g<t3™ F`Q57#Ig$x,%Q\L)$xT g47SZ|3̅p,ioάBzJ<#K3KrhVz4\:n&IJ@rn2(f/䛙}r{4IRؙ38~xnң)e3 1kgHRؙ˰3Yg.3` 3 -FzH@r/[nI;svLv,;Rv*7, g3/0]rrʹ EKqT gL;0-μgPrsʹxKq,`ijoF7E,Q\߬QAΈy);\ߌ$Έ ;B3 -@Ӏ"3bg^΀w3-GipF8R;lG Kq&k@c=$)3π.hgGq(vFKٙ}h3agXJL[s}3g.3YZHR8# ΀whojdepKrᾟi0S/oή*rfupUE}_~~m/7o|]Z1Ǐ㺚Uj_/W7꾗$ %\F6i$ܭpf}(UP(̺u]m=)r+\<޿W0|'+?mm$??qh3pf1￸Z-@}5_of:5&MH2` ml-H^$yx&k#@M$)v戝?I oT~]mkL}z3$+htцT23J#0sOD6]͵8$)\X^),=k{:%^Jlih>W˟?7"tZ?ȞTk~W{e rӺ {$yydOmQ:$<{ mV 0{^=cmka˳Lq}$<{@ dvuL_,y "`j1SsUW1oLq-Q`yr̠\hhOەJy`]j0z9BibZ0x75Gn:nwIӊ29f6z~b,_/DzVqIR8h>@ynx:cYsjE8|cVq"Iʍn,kjV$I1֍!c oP=Z;@X$뽱9q3$)ZArp3րy˚󰖛 &Icrq3QX̧_~ݯ>inC,ֽʚg}&\\=ͯ4ɑ:G~ڟ$%4>WKC>QǡJM,M(0Qi8W JZn5`:HtɄDV0\&4%SL(1ܪ3`H.(% AXnY0L0Q!@7ZP2%J@Es+R%(%YsZZ0x9.kqHRPR.Jd͵8M܈řQp.|䂒 Qdͽ[#I8Zt'K:nw-dJ]*z%[t%S$kDr$kq@w%[)uIܫ6I%r ]jNARPR.Jr^]ݝ0H JE HaPpwPs%v4ApgỺYyA׵(|wu3%t@pg悒P3j ARbWiu wVͪRto$g)|ARtI$kUqgr;WŝHRPR.J^w#IAI(ɚ{Uy$%t#%NqgbQQT#K$pUZt;QWŝ%HRtI -"rd%.)ODsg;]R.P%9N9PdͽjnGK%`"BS|"G]꒬W݁HRtILfEyJp.8&nb&>Yt K@ G>S(zp:߮ȑ%J X|P/t# J@iG~ %ܝ4:tLU J;-_dͽ6ܝ$%)61`p$)()%`D wkdE0N NQ5pwZ8Sɚ{m;-I JEIkiHRPR,JlkiHRPR.J^N GrQp$)()%`hE-w-wSn-ł(p(8_bD wkeE(ɚ{m;-I_R_:.p(Ydͽܝ$EK%ܝt4"N NQ5)8$kq\k_$%tM%(ičOC4nC`H.(% At`KP2%J^;MHRrPуM~hq,F.R)O%u$(%;M~K.q<7Qwjv{_go+=hs1Z9T.1GƇ#dJ]5;k쑪!JvAɔ(P#UC8)Q5;kQk0LWp;HR,NGgͽ[#IAI(ɚ{[#IAI(/j \//ɚ{$)\]:.}7H JEIܫ IAI(C PpZ;W ~x ײϠ`/Agp>Q: J38D3(%9s3${-{E[A]rl.}%뒜W_s K%`%>]BrQRDɱ}(}%[WDЗWul!Jd}(ձ9(9[ACQ5͡?D̡/%` csQ"sKF CQ5͡?@ IJVج:\%CuIܫ>6%2ddͽjzObqʵ8YsC]"sK%Ys;ޓbuI*z{=6Pu Z>QC̡/%YsC]"sKFIkÝCIRri,Nsl.!IAI( J͡?D /)&Leͽ69$EK^zOrQ:96c׆;ޓbu %99t4"cs-̡/%Ys9(!I8ZCuIk{l!Jd}(Y_CC_2J^csQ"sKF uɱ9(A-LX1Ys9(9%뒬CQ&Al>DMX -0t'(!IɪUCǬ(QG6D!)u Ha%kq:-\]55>EP4-dJ]*zP̭ӾCGw JDIk:}K:8-(%;sd!J h%S$kܩ$)p+4:}KW%a(15Wbu˚{5KHRPR.J%͑ 4 \Liq^M˭㐤ru qLDLKQbucčdJ˭ 䂒)QRDq  JD (:`%(%Pbk!Iqq|ܫU\CrQ&@]j89`0q#~Ʉ~S JZn϶`H.(% Atj`KP2%J^VHRrWPуq}ցOtɔ$kzn$EK@w%Z0 Dq-Sbq͗8t4"͵8N)%QpK\:HN罺L(i>ׂOP2%J@wDIǭ9tͤdJdͽ:í88FPXnYK%Ysq}$)\].j`zOtɔ %Z]Kg_4Gx:[-Ͽ]-էr]fu0:~J9 5C-盫Oŕ+1Dd[}ASAh}T1zځdL$_}>.}Sm/?D].~~o~!|Aɚ푒Ti/:"yy.F5OwxL x xg x̑!x +0cc䀀㎔#yy!*?S=ΰ)7>S}>V?Dh{M_n gQͪ keٗ~}@6TI3 R)E.";_m ;I"?jH,WM7_o(aqs/\;6̜j w][(jЄG"P Z:NA9BiSNG)(Q[؂Q9(NA/oإg@_FDzP4-Mz@xPT̎wX@񲡘nOhtOAb D)gD$EH t4W)-z.KҺDe-H_ԁm%IsEϥSzT]!܅sYK;҅ut+ ̝uJnWt .s)YnW`B0^B=9ǭ*~܅`.=\<9E[ĭ:,'-Wϑ``.=EqJ?s%'dCעb\6 C\H n$EϽ=nN9ͭz@ =צ0}%^'si> Ar[c,9#60x'~{W2￸z8Ռ{ֱ߯uWV˝Z6aVl-~vbvdV};Ig{TBcS^-3L1|W4Ii=yuav?='\0{oJU~VZ> ~ͯDSs}t#ggUO4ۻq> : 3q5(@Aa 'UnGݵMSאQxA~N3^5ߩGEo[䣜^+7_VzvyJcQOL/AD!ZcUQA4ޣGiLl-cKXM>@YoJ`95x 8&{(k:P۴hQlvޭoM``L[n0 |Q Rolj>D"c0SD]zp'|Q R*[` | *$-F(hG1ծ1-`M>`L%Ot1$A4m5\vaKM>`L5̰<>W7&_|k0*9&E0`"IG>XGzphG1hi޲c0B | $ԤBƸى&_|Ԅ`"x~D"c0SdQi&hG1 | $E=8D/>A5pT%̵N7hM(uxp | $2:SnT䋏bP[Bv1,3&E0`:6^c0&_|Է qqM>`\uOa?H}[䋏bjROT'xŝv㹙 |Q Rү-%;hQ| fPRFR D/>^NՌLA4(A>sIe4;䋏c:dVgvG 1N]hxj `M(T8d G 1NBH{H 䋏bZm[*^!&E0`: ))䋏b}=#MM>`\K+UKy4GD/>A*ZkrL[; G 1NBo8nixJM(mZebYAM>`LuW7bA42N;ư | $ӜUFmqM(*[F/M>`Luc0&_|i VD"c0SqGPL2䋏bPѳΡn G 1NO8[f'|q jutx|M>`LuE#O2}3A4l赽u]ID"c0SĩVǓrA4 I | $:S?Š&%H>FBM>`\KhĂnH 2䋏bfPmdގ2T'A j H;䋏bbw 4&E0`:q3T!  =,ֵw cQM>`Lu%C6Џ |Q ң&sU' N:ي&_|SG݂ | $?8khG1HMKxYM>`LuwOx\䋏b`a"u7& G 1NB($4xq;䋏b:Xi,GM8&E0`:=zFы SqvA4(A>3Ih >imN4њ F(&E0`W'ыu УW>A4Q(Ee%M>`LuF8 c]pM({Ab0&E0`: MƕOM(R5fmgM>`Lu\~GN40s&oT'Az> |Q ғٖn(A4(A>3I,Jc,  գi"f׃A4(A>3ITG1 d;䋏bpJL:T'$h1 &_|Hma|[M>`LuzA稃hG1iW[X[D"c0W -W>ԴM(im }O4$4s up41sI(ĤU c?ۉ&_|.޶T;T'i\mi+:=s |Q Ү( i8hQ| f?(hG1HzԎA4(A>3I%_1A4)p8 G 1N-Hu-V;䋏b&[ZN[GUrM>`Luh'&_|4T'0j׃A4faO 5&E0ƠT'Q$A4--I | $4м+6zA4ҰNLM>`Lu@7NXM(iEP4iA4(A>3IJR Ό^|M8a(Y^~aG 1NBj4䋏b5 Q:U'qHJ±M(iaPdA4(A>3I,jmi7A4ōCM>`\uN'i(V4˃$<hQ| fPލ;aA4(CDmd &E0`: ͹t㹙 |q dKw)0ՃN4(A6]:Ihy1i ̝hG1HOڌu=A4(A>3Ih0q䋏cPӼ*0f;T' ܸ Š1xLD"c0Sh7  ,#:xJ=T' c0Š 5O0T'A<hG1H{;zΡCM>`Lua]hi¨ Š `T6G 1Nb)eMF |Q 'H DmǨT'itMA4$;_xWD"c0S!`4&_|T' G 13I)SVM(Uw;T'ٞxPb4& `*P||`M>`Lu}]Z]M()gw5!&E0`:IZD/>A}UvA4(A>3Iha!+8zA4T8Gى&E0`: -p'[u; |Q 3Hf`LuWE9C`M8 qT%hQ| 檓^2v'|Q wCφ9G G 1NA`4/䋏bRs3A4(A>3Iar h''q |Q{{ʄqfS$D(hGAHQK<{(A4(B &dh^7aC(C hQ3ULHԦJOFOM8-T>ى&E@T11ÚveADo> ¶h$(hQsUL:E08;䛏q~PiA4(B*&Ғ7MM(]ZzIaM>a #4И )M(jC+s MaM>a0fS{8 |QҐ~R\yD" @b'!`8~hGAHrfׄA4(B*&wV4 u`4vf2!&E@0SńIּC&|4PaxtD" @bBڡb˘MNM_[䛏P{Hs=N4(B*&/͸ 7];eǏD" PgP~V |QQPBy |!L~&A4 Ɩk-cHM>a s+hήWE}c11` rxA0dr&9oofFl #B n|UX ak}̶0-2JA8ac/ƬcaM*gޅpf?H!PL*R@G&3BHQü1JA8ac!pyr]9rTʡ&9&\Ӌ 6Tμ !oX7'4JA8ac\/鸢1y6젒cg`R9p$hTrfʙw!-1 ʡ&9&14y·9tti5JAxI9{ʙw!)O"ʡf9& s$]yB91ʧVʡ&9&ɔ::dTμ !AH`bR9p$DŽI?;6b&3B+\;NIJhR9p$y~7yy 0;->T 01io,7n 4`R9_8U+oR9p$DŽ5=L*gޅp}uǞФr(I )hR9.I%Mc;Dʡf9&m+=My^0߃IP uxcʙw!=&+!r\oR9-1hwymb9 6JA8acr'd1I)>Tμ |2v/JA8acr\OsfkTμ I ޺LL*R@r9akR9.?iٹ{G*R@l4/7•Фr]ԹTRtךT 01xIKtŤr]'zut$1JA8acCSMH2䜛y.#C) LrLR{Ƥr]h6a1Фr(I ,p;l ʙw!F+!&C) LrL^45wTμ !rt?Фr(a?{cq4>sc֤r]Ba MBM*R@msɲww5yBcL*R@laۙTμ !3v^| WBʡ&9&Tq1\F̤r]y>a[|P7JA8acmUsMgޤr}yϷJȤT 01aᡚp_:FHTμ !OJg96JA8acr|)/L*gޅ`'WE[C'ʡ&9&O` &3CHc&S94T 01k<\v&3BLmS_kR9p,DŽIr] gɱeIP ~,djBsH̻.;zјTμ !O~ KJhR9p$d;!ўrfʙw!\HA&C) LrLycG؞:@ʙw!tšT 01[8(gR9.JTtlR9+1a}c:S^Õ_/yBFRýy T 019nlϏʙw!lԴ0=T 01! =h'4ysR-kIP VM$c1y{SGLʡ&9&pM}uǞʙw!2IФr(Y 4+j>/ye }QlcT 01a5]Tμ !SD9{mʡf9&+1/ߋ%3BU5׶E&C) LrLGǽ#3B4^0Ťr(I =)l/?&3BF| =IP ~$DŽ/@HJʙw!Lg#C) LrL9JhR9.QЧolޘT 01iMhv0Tμ !2qwƟG*R@䘜<6L*gޅgǞФr(IIkN4ǥ\&3B !74<&C) rL=~yfʙw!qIP z\UJx?R9_=a]*R@C&9ʙ!өʡ&9&n0:Tμ _mIP Lhfޤr])%互2ʡ.ScB 0B9r]߶yL2YmR9p$ӎL CI̻^qOhR9p$DŽm,!&3B=@PϱIP :Sw !4yBg#pRCyr(I~2>kyʙw!\?JBM*R@GNT@ʙw!<[7{ܽߤr(I| Ǥr]g=qʡ&9&sLtlR9.s0㶞G*R@䘰l5+'4yBсaMq'4JA8ac2PW43oR9.~0ʡY 7۾aToR9.8:L*R@deb=I̻R ӱIP |cnŎI̻RC3F`xbR9p$DŽ ,Tμ !~F#εƤr(I SLl=X=I̻2b/jʡf9&c9yǶ~/yB{TLoL*R@󀕐11yBCOCnR9p$KM*gޅZjG(&C) LrLC_V 6yBnw䭣IIP ة8w&3B̉'&|3IP ~$j])%#I̻kdM!4JA8acB2Juu\?eR9.M0ߛT 019($] MG#3BH􉧧4K ?&C) LrL.{0&3Bx2䓛½ʡ&9&{MK#Tμ !E8߇p$DŽ=n Y ӀIs d 1rBhR9p$R9n(PL*R@0y;&&3C҉zm7JA8acB~ <3Фr]ϙ8P;rT 019y>ѧuKWL*gޅ5iIGiIP y<;&Tμ !:zVBʡ&9&,Z!4y£R%Ĥr(Y OdfH̻Қv&C) LrLpɎ {Bʙw!\6x{jR9-19h/ؤr]yN״u,&C) LrLn\m(* ?&3Bxmp&C) LrL؁r?0y$ k;T 01l;hL*gޅp岈{GIP u;^?&3Bx#:F͚T 01xqO6%3BH5Os+=T 01 21&3Bx2<t( H&C) rL [ӡ%3Bx _[ؤr(I͍Hsئ0yBv\rW/&C) LrLVy-WTμ !'{;\G*RCg9&c;yH̻IP CŸʙw!v.&^M*R@,ƞp:^Tμ !]r.T 01ٙ6:ʙw!iMNjk)L*R@䘜/І|Ǥr];_8ʡ&9& s;&3BȷR7r(I ^پS|01yB6\TsN,M*R@ОXe I̻҈vsSʡ&9&f!JhR9.k-1JA8acS%Ȉ᮪G*gޅㆧ.DZcbR9p$:.V‰F̤r]4*3JAli4`R9_pg5ձ}ѻ]*R@`ܽ\Kyʙw!٘>ɤr(IL>slR9.41mgR9p$d(b`L*gޅ(`hr(I ƙ7yBS0׎lR9p,DŽ;x#Ƃʙw!\ {;&C) LrL&3B ӜˏT 01]Q{ut܋Tμ !Ϝi=ϱIP  [}x0yB*Z)`WWјT 01Rxw5y6N嚷&C)! e_ΙTμ a{b10!IP VЪ5vLL*gޅp̛Ƥr(I -2-=5y…&u[ܹؤr(I̵ʙw!|{LLszM*R@0}]vM*gޅZUunL*R@Ηt0&3BFॣIP Ÿx1yB#.&C) rL +!^R9.;Oi1)ʡf9&O-\H̻w9 !4JA8acmj+~,&C) LrLYa%&>Tμ J766\ M*R@τy}鵲) C1JA8ac*ZZ:&&3B]=M0ʡ&9&+KXWx8.?&3B dXM*R@䘴9ԑW'4yB9W~IP VFzÕФr]?R9.Fs:T 01f9&3B,셙W30JA8acB9 в:!6ymf%ChR9p$DŽ\ ~M*gއkM2)IP nPבyfbr]1❁IP {x[P`bR9.bpWM*R@p`yktϱI̻6f)AT pMrLj۴xOhR9.V^{zJ4JA8acmEcR9.[E٤r(IIJ&3B' M*R@xV8\~L*gޅZq:O&C) LrL OvG|:6yB\vz/gG*R@0MtGWBʙw!.]rʡ&9&<<vؤr]i K2;ʡ&9&eOKTμ[rQʡ&9&;{t':\~L*gޅ` i&C) rL| .Tμ !\6ޞT pKrLޚ $!&3Bz:"8^ M*R@0GM*gޅ3=C1JA8acrМpڤr]ͥ9\|01JA8acҊVvu M*gޅpg ^&C) LrL:ocOhR9.G*R@pΜ3^ M*gޅp=&R9.Trˢxg`R9p$d8cbR9.4&<4ӱIP &mq~|/bR9.G*;ʡ&9&'W[lϱI fDx09JA8acrT0=G*gޅQG;vT 01)"zoR9.fZ4LJA8acBgB\ N=I̻R4T 01Y?tL7_VT 01i{Bʙw!d?otlR9p$DŽkBys7Фr]n}T 01~>/Фr]v;>&C) LrLgqI̻TM*R@yN;kP 4yB:GaIP Y i LL*gޅMq8T 01L?0yBZST61b1Фr(Y VkqH̻3h(l(1JAl͆hߋTμ ro<gJT 01'Q&,Tμ !(ԡQfIP ބ#3B8ܓQW&C) LrLxn>SQO)ix0@:0,  CyФr(I oWBʙw! KIP Uö3y5kǞʡ&9&he[OG*gޅpέhkR9p$8 Tμ yrQ7&C) Էnylw]qyI̻a)gGyIP j1 I̻RÝ9 7W&C)!ܦ$DŽT_јTμ !AzVSӱ=}r(I0AcIBa]*R@,/pUMN̛Tμ niPL*R@p,n=`3H̻lm&C) rLg&!#3C&a~r(I$6lM*gއ𭀡=,  M*R@ iȅ7a4HP wNG ƆI-w/ʡ&9&=m4*\ M*gއR5 T|ʡ7m5w 3oR9n(!c C1JA7Y ;M*gޅ6#4L*R@6y_VTμ !۹nL•Фr(eQ3;Tμ #鋳=JA8aci[|\`R9.7EeIP 7;y[`7ФrP6\j_zT 019iL7ZÍIBaLq(GwJA8ac4Tμ ;'^;C1JA8acQhڤr]Ajſʡ&9&.i.?&3CH;'aK*R@0̛Tμ !KԎHL*RC$9&LaJp%4y™XPL*R@ܼsyaM*gޅp;B1JA8acN+?qǤr]H1zW4&C) LrLv+W|:6y…U.'|IP ΢ʫ).3yBލQ&#C) LrL6^aSTμ s]9{p%4JA8acҮۮ o#3C WE/"]*R@Љm0x{r]yrEbM*R@ЦM>\qM*gޅ>O?ǏT 01a:^1Tμ ᾰ9} !4JA#^+ʙw!`T 01fwaM*gޅnz{ L*R@嘜 @OQʙw!rƿʡ&9&&\6f,vTμ !y_<^ M*R@0Q o X#3Bxѭ>lPPL*R@`?)?⃉I̻s;ޣT 017><iR9. n{kM*R@i{r]v֭_IP  g;~r}׉BUE*R@`-~ʅʙw!|5ܗƤr(a?[cҺPBʙw!6qHP qHTμ !Ӝ~|P7JA8ac3qxq/?&3Bx4(lbM*R@䘐u)8Tμ !K3'pg`R9p$aM*gޅt0ʡ&9& zZÙTμ !ۯa[ヺIP ^tĤr]O ĉ->T 01! *QH̻ ㍉IP yxLʙw!s6ɈpOhR9p$DŽjY:3̼I̻. a(&C)!ܳ+ap$}I̻ cc\Y~ʡ&9&&7xdR9.C)kۀT 019w<̛Tμ ! E]ϱIP <Tμ :1cIP Zo̐ʙw!d,0ʡ&9&x aM*gޅ!]dʡ&9& )jr]w4s|[dR9p$ǤƭLiR9.T>;>&C) LrLeФr} קT 01&7t M*gޅyC &C)!<h=Yb̤r]׉Wp_cM*R@P/@3l⃉I̻.%1alT 01a3}cĤr][ek;Фr(Y CiӁxr]Vͻώ2ʡf9&L䪚Om l8ߥr] ʡ&9&LD!i'4yBL˵v8R9p$d]3ގJRʙw!䢚aɌ&C) LrLF6PFzwO}ʙ!\YZMk|Eqqo>qAHP ~,DŽ (.%3Bx,[{Ĥr(I {ʙw!<J1{7#C) LrL(·d:nbR9.shPHmc3xr(I< 8L*gޅc= &C) rLx~66ʙw!+yD_јT 01a0/L8ʙ! t8T 01MoTμ !Te;ST 01aV_<%3B8C`)zkR9pBp3ωdFk)L*g e:|*zE٤r(IɽQEC֎JRʙw!dɛ}g$ʡY S1h.?*zI̻5f)%I IP 0pƫʙw!9[yʙw!l+!Ӟ&C) LrLu(BhR9.%̐)W96JA8acTl7&3HV_r(I Sf}M*gޅq9/Фr(I /xT 01` ~ʤr]O6'w[IP cW4&3Bxmd`bR9p$GSߎ'&3C8r{BByIP 6o8cR9.ֻc%4JA8ac2q !Yr]OHo'&C) LrLΙص4E*gޅp0K"\M*R@0;]G*gޅ.u&C)!\rM80Фr],/ ؞T 019w7Ztt4yxMIa{0JA8acw)'L*gޅ fb(T 01}nt 3Ϸ%3BēAL*R@`PcФr]iNSǡT 01;ZˏIs37~޻#?~n=OOۿ黿|?~K_/?Ƿ?}?}_O?|oo?F??ObCf;m ?To+|?@ajƒ;efX+6/$Zyv3be+r_.VY_혎},ߥ9)VwՖ%XH9If{ӯn ~r/Feʤ?7V<#U}KzoSh'AL}]πZo,Mscu̹M֘{jZJX-|`xSiҟ 3{f+eǸoMFXjrW+bBE641`0i.Vt|o?7w??e,]=pӏ.b (jMI'wekeAoITm0äX+3 %UW]qW1ml[p3i!!7.bT볈QN_He3P WbzzD2GabaI ~w(ׅ?zŏyGZ}HĒnu~*fBC"tY/f!b&->$bIL]mCLZ}HĒn/z̴sbBC"tp%F*ṲGDH۰)F̤؇D,vvX_%âz:%ޞn {1bF]sVLZ}HIJn/*-΃A*v?BC"t"F7l*zbLZ}HĒn6{Q.Ҥ؇D,v` r~(MZ}HĒnDy]z1b3vԭzH&->$bITls;ߘ%s^GiBC"tO_Q>BC"u06xoSH Xv_'Jb}Q.2`+\LZ}HĒnetv\Z%1etbɤ؇D,vWצ%MZ}DĮ}{l % b/ߤ؇D,v?iA%(MZ}HĒnω!Nkpb}:@s\:^ib}݄@KZ}H/{g3qBNJX/e e0@EOͼזEMfcD *`uEVfO.G Jg)1QuK;*}@2+Dݑ,/1YJLTo}1Uj9Jl+H4+D=Aߏ4+DR.Y@b}%VuWQRb~ OC~׫A_,%&h4+DÞxA_,%&v%fWb?K ǘ{ϓؗן, ロ-Qy~I7{'x}1Ͽ^_O}7UDu2F?U}5L raq` jUWi`РFQtb.1諑gjDTcf3e 35"*>TZyFDU1) }5LʴFzA_2o諑gjDTgMRIƠFQ6fx1諑gjDTgY^jĠFQu |d͠F^4=E|{}5L K[(|@_4yFDuVb`A_bW#ԈʲŲz jYU9GyFTuzujQYwsX{)~@_ }5L$aoz}5Lꬫ<{bՈA_FUU|@_o~P?o_֟$GϏ_SOw_oO}~7?ç}Տ/fl=Q:?:#dп'3"=uDڂ{&³):UUåz0CJ'%Qi1\{ܛA_#rt J'%Q!^$>X}󓒎>xgbo󆆐_*i5KyῲcJ=UTIjЪigj4*TUvN_J' S%%UoA_#*0ijPOJ:bX!xI2g-l=Df,מ|l0+tDf^XJw> IIGT`^ouM 'yENQ\;: 4*9>RM7\> uVz^݃ŠA(OΊJz r\>Y~CAP.r)T>74"Iٖ>`1hEs*x6i go44K>'.Β|4"rR^*d ']O\dW{ rlm^ B}@XUAP.r'ڵu)7hEs2۶*d g!]aX r3Wk݃ŠA(WOFX`Z?X ATsq'/C B}Rw)-_A(OVJۧAP.rQ޺C| r\X rXI#˯4"3Q}G2hE L^>ohEs%{I4hU+S_ AyOo rw%ѠA(O: ց2hE~J. B}J? r1yP5hEٕq B}r#'" r,{5(Y*7hE (ޥܠ1("9O B}2:m|4*VOgrlyg ,SDr\>)$B9;7hEs/bl9i2hEwN"{AP.rT>OTa 'F(9]4E>L`_b/ B}vvܠA(O\D%AP.rL E AP.r{B98> B}*'s} rLxJV;o r$ r\v2Q>) rx[b *rSQ-\>m+AP.r}gy B}&o, B}YܠA(=߭e gOsAP.rs0;AP.rU}4*I03'+Z|@cPTBA(O Hwpq B}K9wrP5hU  B} ҈M8 6hE$%7 B}~@l}$;4".~D\>ܫ?%ѠA(O_ r+Cr$$u> r䩹.> rd=yf;ϧAPrD~Aܧ\>Y~r,7hE#nGh ' nb:d gfxf)b '-i.i$Gk]B B}R? r5گ>\>ٝE~0+W|+tCP.rT-6QURn gcy7^74"ɘ-3q r̝MNW?i3hE 9O B};9ZAcP>EC74"ɣ' ϧAP.rc7|_n 's4pNnhEW .AP.rt 5ɽur\>`E7\>qx4" ieFmohE mX> rgWw|\>YBw9g g'ɖQ[\>)$rci A(O| B}r_ B}Mh '\t B}۲4"X?r_c1h%rdAy÷B B} gr\>'VYFذDqCP.r,>b dJZ~rV3)AP.r8}"4"YŒKAP.rDs.WAP.rk rL uf?vQ4"I(u/^n g+̹M-ŠA(Qr9\> (;sAP.r,'\N9(7h ʳ}2>YG B}RRbvo, B}.o5ΥܠA(J344"6"̥ܠA(J3B'm B}%N4"IPˬ`\> 5D,7hE_ t^ "r{TN> rl` zܧAP.rs 'w? B}r!g2٠A(Ͻ/'Vo B}̍0g '䨜}\>ٱm B}nO.y>8X *rԄk, B}a8>CP.rĀr3> r;Ɍt?4"I m4"YY&OAP.rL|vN#4"ʻ `֠A(OQy+ɿ4"Y+;}4M>0UAܠA(4L2AP.r$ēr\>gd>i g;W!ΠA(ϙp3AP.r6C9n|o gyѮ!\>^>V  B}Ҫ4]>; [\>Yu( r\L[|ohEsO }ܥܠA(O>yo g+u4"9+, B}Y~ur\>/B}ͧ<hEwf6ڎz74"Zn=ܠ1(_"9~r\>yhuNZtCP.r}AŠA(ĜsGZ74"YvTׁ2hU"= B}r`ӥܠA(Ν|/b )3Sn g;ʔ{4Ts\'ry(g==y7hE&Dm+L4 "ZzBAp.'N AܠQ8y>YǵqO¹ʄ|1U9(\\{p?7hE64_XŠQ8PJ] ϠA8O"h{f{W4hE>t'Y1_5hE>Ny9Xl(|hLӥx0o(|hyt>nhE>5|CuϠQ8YNBܠQ8m/h(|ăR:XOa(|h,`h-74YC3Ap.mD¹ʇޟahU>W3tF\C%ӽ+4 "U3K] sqW͌4 "l?i[ sz6|(|F߉ yPn,v0Jd(|躸Ѐ^Ap.,yʽql(|(8`qAp.-tfa(|h&7ѹr05g(|(Y1u0rCp.9P~n(|(Y, sMdƅ?[ *_ˠQ8Вɴ\[wF\Cy %bwruEF\C#Ȥo(|h+ohfչAp.e"tVmDo4 "=,>Xl(|hR&=[ s {K!Fh(8o:ɽQ8=xzC TZR]RohE>{"U4 "ZqUܠQ8Pr97tsF\Cŕ%ssc s-y gAp.-SJ_܃PF\C9Gb -I ¹ȇkr0Q{F\CW[V0hE>t+D~Ap.~1ȠQ8L| ]ߠQ8WPf1NnhE>tv ڠQ8PR˕g9Ȇ2hE>t=PtQl Oe k¹ȇN3- sTՊŠQ8PC ۉs¹ȇ.f,Xr sDȿ s]<22.?KĠQ8P[48ws =[ sO_5hΗȇҨK>¹ȇA's¹ȇX1-¹ȇv,s 5hE>'hWsF\CdA^Ap.-:7hE>47?wJ ¹ȇʂ ";¹ȇՊ.yD>%?, sH,t?6hE>2.r{D sMeу9hF\C{1EdPF\C'Bl˹Ap.A粛-74 "7 4 "JbNc"\l1hE>.JC. y(+ֽܠQ8P6p'v97hE>45矗+4 "sAU~n(| |} s-zD sML/6q4 "_ =4 "x˞W4hE>Нu cA8"2 s#$z-nhE>P:\k¹ȇ .pj\¹ȇB` Q8о4 "_YAAp.9u'נQ8=6hE>4Vb4ECl)o(|(,XD Q8P9w׿˹Ap.~UF\Cr;7hE>PAAp.ʕݕ{Ap :O| ¹ȇA-w¢{o1hE>Mfҡ] *qd] sT1]{Ap."cܠQ8P&rS.-¹ȇF¹ȇ\A^"ܠQ8yUW4 "Z 2h ?ܠQ8P.Qs s]\Ἁ|h*g"= s堏ˠQ8БٓӸ¹ȇRAp.򡻣h0y~ e(|( E$Z~0k(|hWω t߇4 "J:ܠQ8жrՂY!~~Cp.ğSk!6hλȇ}ǕϹAp.5³?A b(|(-4¹ȇ ݋]4 *>F\Cn]|FtN4 "+(<h(|hr^954 "|PoQ8ЕI.Ap>D>T &[o9赸Q8Y3BH{?7hE>܋\B] s͟!h|4 "Zwz?V砮h(|(K8[ \l1hE>\>/*] s]B4 "C+4 "Z}\h A8"35.Rv4 *ZDF\C9U8[¹ȇ1b(|(Zy?@3hE>ޠ sm;o׸ srqAp.[ܠQ8PjE!:7hΗȇRy=".¹ȇB>xsF\Cf[ ¹ȇfyN3Nd(|(8'2hU>t&:UohE>"y'F\CCg+dF\C/${"F\C btqyD>P-d! \ sedܠQ8}:'2hE>AW\4 " ¹ȇ1:4 "Sق"h(|hq)?ҠQ8VwE~C seb~!s<|(Ͼ\9F\Ci$0չAp.\,4 "Z]>[ s Asq's%m~¹ȇxi~-¹ȇR;f7ԠQ8WPvsk!=[ ¹ȇ-`gApE>OO@~-נQ8P9>¹ȇ&U6(|hʯ4 *#"w޲hE>QL%.¹ȇ"6F\C;fߠ s形6wF\C;㿤׸ s"x yНl1hE>lŒ+{Ap.cfG; s_']_Q8WPjWע(|(tp?7hE>C%]u[nhE>Eg縜4 "3:D[>2hE>ehܠA8o"ʔ"PfDYEF\Ct0e(|,VߠQ8P,Vsn(|hD-Ap.,Gepn(|( qG h(|h}ҠQ8AH,'2hE>;&Ê5hλʇjq= ¹ȇsF\Cە8[0 s- s-db(|h̞4 ""b(|h냳8sF\C)^e {"F\Cy ll˿Ap>D>W"sx{- sa&.j(|h2xAp.򡽤H94 "ʦ9Db(|l;L3hU>WBAk?}F\C٨Y;{"F\CJNٿK¹ȇʋ]˯4SCI?nHؽ4 "JŸ`nΠQ8EC sM?F\CoZF\CWCdeQ8yqu cQ8Px,v¹ȇEڗtsms獀 Pheg_2hU>F74 *ѭu>nhE>4{F\CydF\C(l4wEF\C<4 "J@E?W¹ȇSrn(|莵s\"J DrAp.lo(|(K,sԹܳŠQ8PzO4 "Jʬ&>8[ sM{ W<.F\C/j\yVtuCp;M\'*74 *iE4'Q8B,4IChsw Ap.ݒf=X0hE>9tC s8r 5hU>k I'sF\CnBԿ ¹ȇ&z*rgAp.Mw¢sF\C[F\Cw}ڤ:7hγȇR* P~kqCp.򡤟36GWe(|栿+-¹ȇB...¹ȇr9~ŠQ8WҖ8((|(D[ݳŠQ8WоooF\C!J$ ¹ȇyN0:9 "򡝦>¹ȇZ8[h)[ s%2:7hE>t@3 ]sF\C%{F\CoYL>ԠQ8P^ݽ4 "J? [\Ap.n9ŠQ8J.4/нἪ|ndcV?Q8d Y¹ȇ6(o¹ȇΚgzD|Ap.=F\C3{ˁ7hE>Hb dAp.򡉽uf6ιߠQ8P6p rn(|(6\~n 7] KOmΠQ8P,4 -ݳŠQ8P3¹ȇRniҀ׸ s%, Q8PO:(|(rzo(|(m,)r-¹ȇܲ?[ s,ʨ yКy54 "mΖ^[ s%В4 "-EȠQ85vGQ]٭¹ȇrNtz ¹ȇNvYN ܠQ8WP,gh߇(|(XM̂"j(|hxqCp>D>4kuF\Ci/p_9Q8=ʻ#E.¹ȇI6hE> 8g=e(|(;rz ¹ʇO-# 4 "Z:4'4 "ʛ?K[йϹAp. sF/΂PhE>t]Ѕ"ȠQ8WPVտ/(| J}yn(|h!%|Ro1hE>9E*\ z|h&a0q;g(|h*15¹ȇ4Jjl1hE>*se5sܠQ8WP[ނ¹ȇ#Byb{4 "yۉr s]L:ssF\C2ʁ~Nd 'qa0yrsF\Cyf+C4 "J_#1KЂ{4 *ퟵse/nhE>tf,*3;ApE>lz3¹ʇJsK;usx[ s +ܳŠQ8WPw޿(|hD\4 "%ܾ smq4 "J?9"j(|hɂndἨ|&3oQ8P\? sF\CY7W`?Ap* s?K$(|(/(}sn(|(1L[ sM׹Ap.{s{Apu:/74 *JxAu WDQl1hE>t5"ܠQ8Zvx+ApKk\F\C;7E[AܠQ85(]-oAp.򡕱s[x(r¹ȇDj? sMLQf, sME 7%P kF\C~ rs¹ȇ6fŠQ8Й:=?ؕc(|h.w<7hE>M+nnAp.dΑ!zQrsF\C+]帢u e(|([K[;hչApt3B9^ w2m\:7s%k2ܠQ8~=Wun(|.(:7hE>PmԖϹAp.u2+F\CgxEֈPF\CYS(\¹ʇx8¹ȇ2 CߠA8*&gKcu{see В¹ʇV+VW?Q8PֵDYRtrCp.gPt2{~Cp.9n.-¹ȇfƉȝo1hE>@hz(ؓ{PoQ8WЋna2nhE> MEyn OE;7ŠQ8W+\sF\C =E(|(8[ 5hE>Pm$ 5hE>?2hE>e;sF\CyYٖse%4gsF\C&BnC hE>EAF\C9 n<7h/{gqBEOg9AFbH)8 wG-d+鱒š˦XWP蜖"ȠQ8V8߶:7hE>4Ȏ?F\CK s%EH=[Bp.m VѠQ8\% 4eP,جkk\¹ȇoc+yn(|hϑ60k(|:3uF\CӖ֙m-¹ȇn,b(|(eB`oAp.+R?[ s g\7hE>H^E<|hAP Ap.sc4 "+[nsG s{%It[-;4 *JR%AsuF\C3DۜAp.e"aajS¹ȇ2I]G{4 "0 .p>6CpE>G\{닯sF\C#Hdb{4 "Jk ':] s/mP¹ȇ6ƉU=E¹ȇrl!E3\¹ȇnKי=ԠQ8P9ٔPF\Ck15¹ʇ/o]t|PNt^4 "JsC{- s,}aչAp.,3hE>i5hE>"T߇4 "B獁<7hE>7; e(|趚h[8W7 F\C;: 4ȇreW>Q4 "׶ŠQ8P ܠQ8Е]ѠQ8P-zMx'ڡQ8PvTwun(|h샪4 "ʳePt4 "ZCʱE=[ s]%|˹Ap^D>tCI sF\Cl!ʿ4 "J' c~ƂAp.KeZq4 "Jk)Ap.K=sF\CD`_?7hU>4#Bp.򡍌 ¹ȇb[ y- :sF\C-Ld-¹ȇm {[ sY8[whE>J RhsF\C[Gp{D sK(ryF\CBk 9:7hW] /[fa(|hڒ[;C~OAp.KaD5.F\C:¹Ap.L.,U s-^h'2hE>e\\4 "1N-¹ȇ|74 (|(C8Ʌ y?3U>ȠQ8J@Ap.uf휦7s~Vd,4 ":Wʊm߽4 *uz9'q ¹ȇ63M5hE>t뛣4l1hU>㫛9!/WhE>Ƴ D] . ŸQsF\Ce[ sʹ+ܠQ8P|jlԸvhE>t(sl1hE>-t-mb(|hegoi;4 "J7hDCo¹ȇ֩>.F\CΖܠ18ȇ\]9¹ȇb9sM D¹ȇ @(|(mХy\¹ȇ59JչAp.̥ͥ:7hE>穮LfȠQ8mz2C sVb 'm}/ן5hE>4osv d4 "J3s\ŠQ8PFh@NAp.[K.,t=Ap.L95hE>4 qUŠQ8P^20gAp.}fXܠQ8Pmm yP:!@Ap.p8jPh(|(]f~ޡo¹ȇm4.׹Ap.l?s4 "ZV(_W s͜+t{Ap.[V.DCs;4 "QRnW4hE>f",[~E|yrF\CJo1hU>mP6ghE>;¹ȇnp3hE>tXR¹ȇ@-b(|(V[ZAp.-S)8[ s-SNs|e[5?'2hE>¹&ܠQ8Wm,@~¹ȇقL:7hU>4 :r¹ȇric:7hE>42QsU4hE>h%~Ap.ik[Xi׸ sMLO D9oCp.̄@FAp.򡌵pe KĠQ8P6AisF\CX4p{"F\C3CȜj(|(Ŝ ˹Ap.mZ8ωk¹ȇδ[vhE>NzkۡA8"vMkC s^Z~C se7tsF\C)nD$溜4 "nm -¹ȇBy!zйAp.[6$ҠQ8mO{4 "ZpEF\CD@ƂAp|hIuߠQ8BubܠQ8LH'Odk¹ʇB! yBp3VuwnF\C)cBߠ s5:=[ s퇬J} sM[0Tsj(|PL3:b 7󖃛sKm|HoAp<@(|(I"Q^\4 "J-v+4 "J`gKչAp.kY2ϡ84 ":O[C s²M켫sF\C%B- y6pNW4hE>[BrܳŠQ8P'C st7xwun(|RP@3hE>Y  s͕9[2s sexؓk(|(DQfo¹ȇPT?U] uй6Tyun(|heOQ"yC se"4 se׹Ap.F 5hU>L% ¹ʇ@wBpJD3E,s%βPTƣ+4 "JAq%D 'eZyF\C;YML{W4hE>іVrPF\CilYfZ 4 ")N,#ss;4 "ZH)t̶(|( \94sF\C|M@Ap.˖2O}Ap򡕃ιůs<|h#:-;4 "l6t4 "'D(|( Oui Bp.[տ4 " z>Sd(|貲bF\C>ωOd(|YSqȠQ8PtźD ,+qQKq se99[uAp.o?KĠQ8Pr-¹ȇ22 ¹ȇ)"-w¹ȇRn?ˠQ8x!9Ap.L*nɻPF\CSHH=Ap|\cb SqE}=Ap.\sb=]ѠQ8P"Y4 "ZOOn(|hr!ŠQ8PZy~n(|(E\8@.Ap.Ziz- smӖ>U ]Od(|(#>tἊ|2O[LЮ se)ȠQ8к%ց^hF\C22Cp.3?nF\C7Ǟ܁|EF\C+-e<ϹF\C׉Mo¹ȇF[pz sߟ?¡|o "J=8yn(|hbMDߠQ8P[iaGQءQ8mj4b(|({X USr sqkb 5hE>9tN 4 "?>~EF\Cp+4 "\+c;ApD>4S:/3o>¹ȇ2¹ȇni3ܠQ8к9sF\C;2#4 "J:ڜZAp.Zzfb`Ap.L0tfg4 "2-¹ȇ0f%C smy4 "J\S9=[ s%r>-d 3hE>3g ҠQ84ºOd(|(+-NF\C4+#{vhE>:.Pr9F\C Ϳq'qyD>@\2_Q_¹ȇ9_-+<7hE>4-t+6whE>tI":;g(|(ي\=E¹ȇiεesF\C'?sٿ+s<ܠA8O"JD+W߇4 "ʫ\g/ܠQ899Ap.tq l5hE>txk~n(|(Ӹ,WH=wEF\C;f^hF\Cka sL{W4hE>%kf.w 3ǠA8"ʡ_-W¹ȇ"ymv97hE>\tNsF\C tj<:7hE>Ĺz sLaYܠQ8Pr8Ap.m *H6¹ʇΉ?[>^Q8WP-W^pYCr[z¹ȇfv0?6Kb(|ZrpҸ] sMksv¹ȇ8gKn0hU>nоCp򡬙_*Cp.'ҡ(PF\CyN¹ʇf5PoE "y%znݡQ8P̣W¹ʇRji[9+4 *ʔ⺰D}F\CWܖY0l-¹ȇtA4 "Z i"~ܠQ8Pr)LAp^D>5~ܠQ8PĠPF\CrD.sF\CTN[ 5hE>4'[x^7hF\CbzDwF\C^y 3gF\C;\uun(|6LGo1hE>u_ yPBegAp.sow|n+. Q8P9%.sF\C ў, sɂȜ'Qb(|(-< rn(|9S\>tF\C ˥[9 WhWӺ-#};4 "Z(2(4ka(|hcVi-~ܠQ8P0->¹ȇ5G3tYsF\C )[5e:s{Ap.)~As97hE>4sV¹ȇn<ܠQ8Й@ApD>2r?ߡQ8WPJ\y;Gz?Cp.򡼆s whE>Չ"B-¹ȇ ]4 "ʪ9͌sF\C <C s]֑^(|hsؙC *WO?]no_~^~ o~?_rww/_p{r&OϏskM<=|{s"&:s GE<#3à"3;ۘe/? y #y`A(D֗^P??~y<]\߼/py|?.7>y|}%^xRE~$~֫ k8?_\.*2lmт ŠP|*#,oDم&B9PD-nICI z BՠVZzz z BUmjS'1a'UtB66Q\P,UuBX4ʾCOX(g[qAOX(l:_f0bS(2Kp%[,XBOX(,Sxʁu}sBOX(l[&ҧG=r`*Nd1ֽʁ"̲/^]qDم6{lS(2K:WqeޡP,Uel W) ETSFI?Q z BUfea߯o z BUfi *o z BUfhYB9PDٴ xbB9PD٥O3z z BUfy[ ߮#!;qEYSgXt7 z BUfD>#;ʁ"f8Q z BUfLu%|B9PDٙkD1) ETe9gJ+B9PD<% pS(2[X59r{ʁ"̶NEy͏q4) EUe9t' pW) eUfPӔ ŠP,UetWz BUfi2hʁ"M# .~wbS(2Kn=Q z BUf3%W(=r`*􉧞>B1) *#(=r`*3lLC_p3) ET%M==r`*$ ʁ"͡IubS(22yG(ʁ"άB _AOX(ͣx<ԠP,Qe6m6QVz BUfiaU[7) *P*5ubS(2K(=r`*KJ祧C=r`*(Hd`A'?5T޿<޼~VISJ(Yp뗯/嫏y}{ח~py{OϏs{ Y1~AO%|^|O_ /oo_EӖ*E+~K%e"$>=aS DOgQF`6詄R &(a)7=)!O⣥̾ z*p\!fF-{|knx}S_|_}s rx{z}} ys_|?O_¿$w^n\~_?lՏݛO_N?}\?|oam7o=}wwwT^}x~~W~_^z@_|GNavQH;I}y8N8sμhjL P\ ^a|~4! Iķe&W;$ڐb KAs];C_Wܴ<4VcAAk9~=Q4_w6#D>"Y֌lz_Ԃg?@C%G3H{ܭ/PK!j2meta.xmlRO R[)i㪉FVތ203~{)m7#kS<tJ}7xU8 ]ϟnrr<QI>:4z˝:p+x~zLR˞\%;3#'8zS:'J00 %h{?N*X4$wQy { {Etw⧼"6%-o y-icVmVIu4iɷ߶i>!df!Q  [}wB,O1ms1W Wm10mx}ǟaaT fMbTӶWy_ٿz-Yo^`>7PK- !l9..mimetypePK-!OƧ Tstyles.xmlPK-!gIuY #content.xmlPK-!OMETA-INF/manifest.xmlPK-!j2&Pmeta.xmlPK QSpreadsheet-ReadSXC-0.38/t/10-wide-col2int.t0000644000175000017500000000127714456566532017703 0ustar corioncorionuse strict; use Test::More; use File::Basename 'dirname'; use Spreadsheet::ParseODS; use Data::Dumper; my $d = dirname($0); my @cell_tests = ( [0,0,"A1"], [0,1023,'AMJ1'], ); plan tests => 0+@cell_tests; for my $file (qw(wide.ods)) { my $workbook = Spreadsheet::ParseODS->new()->parse("$d/$file"); my $sheet = $workbook->worksheet('Tabelle1'); for my $t (@cell_tests) { my $c = $sheet->get_cell( $t->[0], $t->[1] ); if( ! $c ) { diag Dumper $sheet->data; }; my @r = Spreadsheet::ParseODS::sheetRef( $t->[2] ); my $v = $sheet->get_cell( @r )->value; is $v, $t->[1]+1, "Cell at $t->[2] matches address @r"; }; }; Spreadsheet-ReadSXC-0.38/t/05-print-area.t0000644000175000017500000000365114456566532017447 0ustar corioncorionuse strict; use Test::More tests => 8; use File::Basename 'dirname'; use Spreadsheet::ParseODS; use Data::Dumper; my $d = dirname($0); my $workbook = Spreadsheet::ParseODS->new()->parse("$d/print-area.ods"); my $areas = $workbook->get_print_areas; is_deeply $areas, [[[1,1,4,1]], undef, [[0,0,0,0],[0,1,4,2],[6,2,8,5]] ], "Retrieving all print areas works" or diag Dumper $areas; my $area1 = $workbook->worksheet('printarea')->get_print_areas; is_deeply $area1, [[1,1,4,1]], "Retrieving all print areas works" or diag Dumper $area1; cell_content_ok( $workbook->worksheet('printarea'), $area1->[0], 'Should print'); my $area2 = $workbook->worksheet('no printarea')->get_print_areas; is $area2, undef, "A sheet without a print area has undef" or diag Dumper $area2; my $area3 = $workbook->worksheet('multiple printarea.C3')->get_print_areas; is_deeply $area3, [[0,0,0,0],[0,1,4,2],[6,2,8,5]], "A sheet with multiple print areas has the expected results" or diag Dumper $area3; cell_content_ok( $workbook->worksheet('multiple printarea.C3'), $area3->[0], 'printarea 1'); cell_content_ok( $workbook->worksheet('multiple printarea.C3'), $area3->[1], 'printarea2'); cell_content_ok( $workbook->worksheet('multiple printarea.C3'), $area3->[2], 'printarea3'); sub cell_content_ok { my( $sheet, $range, $value ) = @_; my $match; my $range_v = sprintf "[%s]", join ",", @$range; # Check the cell content for each print area for my $row ($range->[0]..$range->[2]) { for my $col ($range->[1]..$range->[3]) { my $v = $sheet->get_cell($row,$col)->value; if( $v ne $value ) { fail "The range $range_v has the value '$value'"; diag "The first offending cell is at [$row,$col] with value $v"; return; }; }; }; pass "The range $range_v has the value '$value'"; } Spreadsheet-ReadSXC-0.38/t/15-gh3-warnings-with-empty-sheet-name.t0000644000175000017500000000122114456566532024035 0ustar corioncorionuse strict; use Test::More; use File::Basename 'dirname'; use Spreadsheet::ParseODS; my $d = dirname($0); plan tests => 3; my $workbook; my $ok = eval { $workbook = Spreadsheet::ParseODS->new( #readonly => 1, )->parse("$d/test_spreadsheet_import.ods", readonly => 1 ); 1; }; is $ok, 1, "We don't crash when parsing the workbook" or diag $@; note "<$_>" for map { $_->label } $workbook->worksheets; my $name = $workbook->active_sheet_name; is $name, undef, "We have no active sheet name"; my $active_sheet = $workbook->get_active_sheet; # we should see no warning is $active_sheet, undef, "We have no active sheet"; Spreadsheet-ReadSXC-0.38/t/02-read-xml-file.t0000644000175000017500000000115714456566532020027 0ustar corioncorion#!perl use strict; use Test::More tests => 1; use File::Basename 'dirname'; use File::Temp 'tempfile'; use Spreadsheet::ReadSXC; use Archive::Zip; my $d = dirname($0); my $sxc_file = "$d/t.sxc"; my $content = Archive::Zip->new($sxc_file) ->memberNamed('content.xml')->contents; my ($fh,$tempfile) = tempfile(); binmode $fh; print $fh $content; close $fh; my $workbook_ref_from_xml = Spreadsheet::ReadSXC::read_xml_file($tempfile); my $workbook_ref = Spreadsheet::ReadSXC::read_sxc($sxc_file); is_deeply $workbook_ref_from_xml, $workbook_ref, "Reading from XML is the same as reading from a file"; Spreadsheet-ReadSXC-0.38/t/16-warnings-with-styles.t0000644000175000017500000000056314456566532021530 0ustar corioncorionuse strict; use Test::More; use File::Basename 'dirname'; use Spreadsheet::ParseODS; my $d = dirname($0); plan tests => 1; my $workbook; my $ok = eval { $workbook = Spreadsheet::ParseODS->new( #readonly => 1, )->parse("$d/GasLichtWater.ods", readonly => 1 ); 1; }; is $ok, 1, "We don't crash when parsing the workbook" or diag $@; Spreadsheet-ReadSXC-0.38/t/regression-stockchart.t0000644000175000017500000003274514456566532021514 0ustar corioncorionuse strict; use Test::More tests => 2; use File::Basename 'dirname'; use Spreadsheet::ReadSXC; use Data::Dumper; my $d = dirname($0); my $workbook_ref = Spreadsheet::ReadSXC::read_sxc("$d/StockChart.ods"); my $expected = { Sheet1 => [ [ undef, 'Fun Microsystems (FUNW)', undef, undef, undef, 'FUNW', undef ], [ undef, undef, undef, undef, undef, undef, undef ], [ undef, 'Date', 'Volume', 'Open', 'Low', 'High', 'Close' ], [ undef, 'Apr 7, 00', '15,000,000', '$88.75', '$88.88', '$94.50', '$92.69' ], [ undef, 'Apr 8, 00', '14,652,562', '$92.69', '$87.00', '$95.50', '$93.69' ], [ undef, 'Apr 9, 00', '15,070,589', '$93.69', '$91.00', '$96.50', '$92.00' ], [ undef, 'Apr 10, 00', '15,207,571', '$92.00', '$90.00', '$97.50', '$93.00' ], [ undef, 'Apr 11, 00', '14,869,716', '$93.00', '$90.00', '$98.50', '$93.60' ], [ undef, 'Apr 12, 00', '15,225,943', '$93.60', '$87.00', '$99.50', '$93.80' ], [ undef, 'Apr 13, 00', '15,243,446', '$93.80', '$88.00', '$100.50', '$94.00' ], [ undef, 'Apr 14, 00', '14,889,873', '$94.00', '$89.00', '$101.50', '$93.00' ], [ undef, 'Apr 15, 00', '14,781,243', '$93.00', '$90.00', '$100.00', '$92.00' ], [ undef, 'Apr 16, 00', '15,132,068', '$92.00', '$88.00', '$96.00', '$92.00' ], [ undef, 'Apr 17, 00', '15,253,822', '$92.00', '$89.00', '$95.00', '$93.00' ], [ undef, 'Apr 18, 00', '14,919,019', '$93.00', '$93.00', '$97.00', '$95.00' ], [ undef, 'Apr 19, 00', '14,972,533', '$95.00', '$84.00', '$95.00', '$91.00' ], [ undef, 'Apr 20, 00', '14,642,786', '$91.00', '$87.00', '$100.00', '$97.00' ], [ undef, 'Apr 21, 00', '14,804,376', '$97.00', '$91.00', '$98.00', '$96.00' ], [ undef, 'Apr 22, 00', '14,907,452', '$96.00', '$92.00', '$102.00', '$95.00' ], [ undef, 'Apr 23, 00', '15,319,376', '$95.00', '$91.00', '$96.00', '$93.00' ], [ undef, 'Apr 24, 00', '15,066,118', '$93.00', '$94.00', '$99.00', '$98.00' ] ], Sheet2 => [], Sheet3 => [], }; is_deeply $workbook_ref, $expected, "StockChart.ods gets parsed identically" or diag Dumper $workbook_ref; $workbook_ref = Spreadsheet::ReadSXC::read_sxc("$d/StockChart.ods", { StandardCurrency => 1, StandardDate => 1, StandardTime => 1, }); $expected = { 'Sheet1' => [ [ undef, 'Fun Microsystems (FUNW)', undef, undef, undef, 'FUNW', undef ], [ undef, undef, undef, undef, undef, undef, undef ], [ undef, 'Date', 'Volume', 'Open', 'Low', 'High', 'Close' ], [ undef, '2000-04-07', '15000000', '88.75', '88.875', '94.5', '92.6875' ], [ undef, '2000-04-08', '14652562', '92.6875', '87', '95.5', '93.6875' ], [ undef, '2000-04-09', '15070589', '93.6875', '91', '96.5', '92' ], [ undef, '2000-04-10', '15207571', '92', '90', '97.5', '93' ], [ undef, '2000-04-11', '14869716', '93', '90', '98.5', '93.6' ], [ undef, '2000-04-12', '15225943', '93.6', '87', '99.5', '93.8' ], [ undef, '2000-04-13', '15243446', '93.8', '88', '100.5', '94' ], [ undef, '2000-04-14', '14889873', '94', '89', '101.5', '93' ], [ undef, '2000-04-15', '14781243', '93', '90', '100', '92' ], [ undef, '2000-04-16', '15132068', '92', '88', '96', '92' ], [ undef, '2000-04-17', '15253822', '92', '89', '95', '93' ], [ undef, '2000-04-18', '14919019', '93', '93', '97', '95' ], [ undef, '2000-04-19', '14972533', '95', '84', '95', '91' ], [ undef, '2000-04-20', '14642786', '91', '87', '100', '97' ], [ undef, '2000-04-21', '14804376', '97', '91', '98', '96' ], [ undef, '2000-04-22', '14907452', '96', '92', '102', '95' ], [ undef, '2000-04-23', '15319376', '95', '91', '96', '93' ], [ undef, '2000-04-24', '15066118', '93', '94', '99', '98' ] ], Sheet2 => [], Sheet3 => [], }; is_deeply $workbook_ref, $expected, "StockChart.ods gets parsed identically with standardized values" or diag Dumper $workbook_ref; Spreadsheet-ReadSXC-0.38/t/t-multiline.ods0000644000175000017500000002516214456566532017751 0ustar corioncorionPKDCOl9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPKDCO Thumbnails/thumbnail.pngPNG  IHDR|[L[PLTE###+++333<<O e_or) >z2\_/~Ou|w__?}q珇1T8Ox'< 4y|1;&@^LXqY5Ř.ρk3=޷>m\)I~U)ky/ D'.9^﫞 ,+wާkć>,Jyκҹez|Һ$ .6 V:0X_^m8Ox'< 8^6[x4ԠJa(js}cE]=⇆CN;<8e+9O +,33|cxjŒ CCkuc-e;Jq.5 s_PӟbNs~aQ,vخ,Ahgg2f$58l퓷]R gx܌4Q:s^ L4vE$A 8zc% yxy@=WtsEIcWٺ/j1b)?`]gJƝꌼ~HηG`y5=u5bI7ЈUbuF,8I3g0Ӻ3d8!Z0Ti6<^k=noxP&qnX+kYW&v_MhCK#x=: ok&V`Hv [eˬӾy^Ƀ*)'< piPWP? H)xsuO u)$}R;Ku1!2t]}wޟZur\cІi ;-Ҕy7u@."N.2:k2^,\Sm'upb^;ƒ2E_[ḱ3bfb}Zu]V3*y`_MZ;p ї?PK}t.brUA嶙`Lhd`< `8s]WyReKǜ(񃦰FC|WƩЭc΋"Ào.,ÐbSJni3CeIfWr<O7qy3݈xQ8@j|esfguHyyxʭUarTgKvf<ԓ3!-O#ig8~~^Qb2byP=b`e٤4p%:!Vr7A"t>;~ #"a_kMWfkxWXX8'Sr1ܬʈԸ{$jm@v:3)7 :6J+n{mQTYGtOf8VaF"PTs~A<>sb+It#^k]TQ˘ONɼIZꄷeu[3PCr(0YCXTQt_ X 䮫>v\0`X0VBG y0Yp1{0c*;Hv+ɤXL@?62$ؙIcD[!|مs`dd7:nvLʚzXҾle4m3K^-c=nA''< Ox'< Ox'< Ox'< Ox'< Ox'< Ox'< Ox'< Ox'< Ox'< Ox'< Ox'< Ox'< \ #IENDB`PKDCOConfigurations2/progressbar/PKDCOConfigurations2/statusbar/PKDCOConfigurations2/accelerator/PKDCOConfigurations2/popupmenu/PKDCOConfigurations2/menubar/PKDCOConfigurations2/toolpanel/PKDCOConfigurations2/toolbar/PKDCOConfigurations2/floater/PKDCOConfigurations2/images/Bitmaps/PKDCO content.xmlZnF)&ZEɿѴ&WK.k[Q@@Eg$ERBY4>H73_Ԙb. ]W[7l<&.x̍JeoC1ԡp bt,a&5(r[zE9m-0%moI]0=fm/(>fmo DH [J›92l6}988jӄsmL2&lo%jO!qpy v5X L)~ av'γ*}}la3 &gA[[*(ˡ*}nwJ'E#΂c*C!z&kT-- EdڄFOwl#eq ˱Md@Kf>ZVӷ!Ϟj|8b=])tmœIE~ޟ,=]t0m9Q$DAIC1)ʴ4 =4;KjIϢAA7xpNJt捫+/hjRKqg@a c1raѡyظ@0~4 g@|h@/lzmgƹq񯻏}t|yz^\2N?v wx~Boemu![^s^ghU8AԸ p8(SOcx(4c07{$gOű1EeJib VJ56,2'7^vif&Y\"hK1fkHCt1eO ^gw/8:xS8UJ& &vgWX$IU0rpR@3ȹgq~yam'*]+~5E4~—/y*(Xd_ 7 Ҍ!mf5,H^,cZWgojJ;_/C:9K!o؍ShJf|~  pusK>Fq^(2`kE#GkhMtax2Ñ C[f?t=ljt}uT6fVit8V:􃈠 X5:v]R<5畺Ct{U* oK&tʞ5PKTN%PKDCOmeta.xmlO0ݫ $Y,`*mJM"bO[ǎl}@D{o~ AG/ZeMXLQFXLS_/=U )\Zx|_Gմ|,sۺU-7ZG0_<4W?rBNS|Jc<':Rct a32C{C e$kрCҌnz6%}E=/|蔖8)}(j~;z{Gkp{{O]`ᔮي'/ )d`9ft(g X|ErQx]$OC,Y@ M?S [ˣ+[ Xhh=k,D,SDSH{Zfg#v܇aـ$oPK-;PKDCO styles.xmlZn6S*P@dINn?[ Ae$ZJE.ͮv1`0`;$EZ$GmؖItC)ue7$K&_zwgl6#,Z8^!.(.`Ί^ *H1P,ǙaWcJS \\e/:Y1G 1X_z3E,͑ VSs!Vjwx⇣W G>X*+pb'UEzy Y9.ʺ'SeһIG9L륲/ݸʛ"1]Տu].*$FWcTɠ72w{~W[+Nx!و-h }@xx)KޠtSqθ7;nչHiV8n9>l[4ޒՍZ/@! |[»n<-Xo; |cNm\PAdyT$+6RƼHEqbWs_yTYCwjNSs"8@wKp}"ŵL<"0>ݼ 1͉p%P<ݶmwQ^Ǻ`zo<|syE.fJKb$S'||1I E-8E0{/BېHˈf 9zlֵ,nݬ&-ruQW}[ԱǦcFV RU?.7L[&n׆PM\%of|m:; ]ruf"MlɢphZXodGɅ3cp7YR`5L(z%g,6=F66L nIO>h]]~g*RTXz2VD)iZ-M?=P!bFOMbI7wD \4?DR>H> aU VF -6"kD]Ҡ &[/ABF@jk$6 wNZ0Y._p䅁  (c N-AFtýpp'F{wbmeXզɘ_eP7hTeдPK&.!5!PKDCO manifest.rdf͓n0Gv^{} : Ӂ8i`r"n{ڠS7C`Rw"P2et:8GKic0ʭWS4lh?m[bT~S.b`BgV*昆=&``]=(zMF=Yzpփ|l >BY΂p ! $5LJLǮ)|k{tr}Dk53'tdC8at2pǘ1OcY'Pt>K>BmRLt)W+eʳ7ӚCP: 4@@?#q"&. 8F7E1}}H=h!FęHY &T}Rea` ,i0&7 :d\Ȥ)>Dq`9hXv>-uFlE|JS2K}c?^|W s%oC 11 dZM@lsE[Ĕ À<J, 5XMz>dme=T=o A3ϸ5~n T'οŒޚh!=i40|c+H'OӍug׃{r0=wSվ/C5U]OG ۭX]7Ic.K欫ڴ?i7]]=cʦgmCV+/6^YȪ|/nsT4 34; use File::Basename 'dirname'; use Spreadsheet::ParseODS; use Data::Dumper; my $d = dirname($0); for my $file (qw(hidden-cols.ods hidden-cols.fods)) { my $workbook = Spreadsheet::ParseODS->new()->parse("$d/$file"); for my $sheet (qw(vhvhvh vhvhv vhhhvh)) { my $worksheet = $workbook->worksheet($sheet); my $colnum = 0; for my $col (split //, $sheet) { my $v_hidden = ($col eq 'h') ? 'hidden' : 'visible'; is !!$worksheet->is_col_hidden( $colnum++ ), ($col eq 'h'), "Column '$col' is $v_hidden"; }; }; }; Spreadsheet-ReadSXC-0.38/t/Dates.ods0000644000175000017500000003024214456566532016541 0ustar corioncorionPK~aOl9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPK~aOR Thumbnails/thumbnail.pngPNG  IHDRQc`PLTE###,,,333;;;CCCKKKSSS[[[ccckkksss||| 4IDATx흉z8;)lz\ tϵfC*\|Hl_qT֜ pn&TKgqFT51A@ara2$ؼ,(07+:tlvS.x# ӭAtX2ҕ VB 08Px;Q#U +<duQ knDU>X1~El9܆;Z*uXOVQ;pm^LTӇfr*gTzck4crO*YA>9_Ni$$iSOE?/*s7B%n:F]:]BPޒjMLb23a0r~@)zE Q-(_\f*Wl,-*0c+<[Lק߈hvѫ(24˜@]@rh7fQMe#JPNtp}+XZ *B7n^+*{@oO/g+9leE&& lCc|~7%D=sUpѨ>:Ok(BNP5JdU!Eʔ i<цP,o!oC)DVIKF3E{!^Z˗ S: (E83 ?F4y.22-KMٜ'^HeVڧvQ4 K[R y776Qf|.*޿nr`{ԯgYcc+WmA*')<)@L 6A:8!T$rLh2~CSb>O:R?c7+9T*ǁ)2'z@vpB|̸ O F|RN!U]3qY $m }q^$pVh{~>I{LJ50U9~9d- ՔX ,Dz9#h_Es?spd C*Pleh`ɍ|WJ =I!f'CpP_Fc|,EEH TT2!cBfg*b*b*b*b*bRh]4ٽ.\"\I 6Ov1M13) vXv,6oa;{ HfXV;Cq)G?0|]diҸ ?uH'^cױo9H'~-J<i|a>m |:hTdyx\iۑs1F4!;4Ӣs{CD|bk D%+ ܢ0 ށ㲢8D}ϹBT ղ?,tLC~KHM^3N(x t*˭–0cHTr\7++pRso/h(=(= qH8ơG̺f@j +X^ nZ Q= (AjYG>29VgVh a oݺ۫79]hFTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTLTӇ= xmIENDB`PK~aOConfigurations2/accelerator/PK~aOConfigurations2/popupmenu/PK~aOConfigurations2/toolpanel/PK~aOConfigurations2/menubar/PK~aOConfigurations2/images/Bitmaps/PK~aOConfigurations2/toolbar/PK~aOConfigurations2/floater/PK~aOConfigurations2/statusbar/PK~aOConfigurations2/progressbar/PK~aO content.xml\mo6~Bp~*-KN/N qQ4{}+y+Iԋi[rD$wř!X8 ʒI<$ h2,G>$y,։ ɔaA41SMYJjjjOu[yV6%Y˶Jw?oY+>ǫJjZD(`8ŒXG4:,LZvl-{^HkM"3tR7&ŧtMHI?5XQM9UlWiïeؚ]˰<ʻT2MEN9n+mK4m\۴gUPA;]:Tn{G=yY\4sl@d(_rh0p\\) V>h"$Nj{zis2.+/[a[8jNJZkU؆4Aɭpek%35pFҩB{yXO?O3:%*t{FŜf԰)诺T[ c(@ =Kuљ׸cY7_ i&%cnʵA ]F@ B+I'UOU6FF2Z۔5bIj^c)!y,o!7X8)(*%)j%"YjU);#:J;5#j"a鑦,ծ*^zrQa7U ߇d@w Y&aNbT9 βpA7a*MnXAoXп@848d][ 쫽 X%-[iZGI!,5yGT>"5JI%oƲj{1VHӻ%2SѝW}3a,WzzaH=W9rHIBEј*dbiI*"c.Ai˄X@/L}P]3&(" q4f7&Os@M}Mjql{M%=3G[b\D y=Z'Bbu<{N|z8T!Y6(%v8+&LJ V\8D8DɑkrF}%{Kpojv3ESe_( /#ctw:%-^vA~WʧdF_P;Z`v,E#+H⟆ʾ"%#Ut8#z;}w~8)z;}w~y2R$o4nqL*߼ã}l}cm ؍ 7ۛ7)' BuBהEy@ P||O\n 4QH$tw1.E ! iUތ&C, %ZV_ۛl:@ګGG~:BzUTHX` Gz.kUy!Oy|'! kYqOJqE΄ :&[⽫U5n5T&I(It={IWIt|>!֓hʬ'A#Īlɂ -%Gt+ @}T? }4 yy\KB>|n PGpai֣:\yh\d"}O,"4S}6 ܫɿ>^L^/rIXxaSk〫p@ ZĕW5 E$Zт[  m(J/dWqTַ.m,dKmmpЦoc! ;oSZ'+=|8lٔ2W3&k3L.\3OJٖ=,:4cjh9k-[zC8E5d8pW𲟢bs[`V.Sef._B{wb~߾l *t=43U443-~.Ho:7p V<+CMSi&n|1R3C1>TEm*2nsf [4g\֍\B5! 7Oͦ;v1>Č*f"c<:@e24+^:2PJ  ֥E3O4QYfOa25'tt(̚jcˋqˊYy5s~|eO& dT'DzX\6vQm[)i⪋Om̂dX(ڻ/?ڐ(*I[8#L+•ȅ6Uqc5TB7=Zlk0ZxzecdjN IIMR12F&fj3iBC&GXxsŀ7С PkcY`A {B̏ΰT*Io}Y֞IHUVkp,/[n+(a>)ɓO?]hg!;jЙ1WyGz!zcKh &r&Ӻ[4h5[zw1Iq,ıJBw[0ˆ,4룅sc KSRSϸ"cTOi{cT''8V)s^C' 2߲c+#NW=y}m͢=3,=g>GDf]JC]84jFҨg}si8[Gˢ ħD|X۝I٘9|6ZϞrigOI?e,>R|ȏT?3xܮ~[ZEw&SP'F h$$-`^RwK9;Yy١DNe#4F{V*+/WV_c3ўFγF-a #qʍܘ7s~IA- +υ؋P'5!b-j&= y&ʄA))/`⮸g{փ0.v")ٍy"hDXvהAQiEg l5q,+*riS9+'ݬCuV'Rf;w+JD=b+.t='8ZJy0~%pʬ_t@Ęxt8i[A֜H5XGRjҝ5d[}|ِO9񚳜"%I|}@ϏO,pIJgCo"nlrg(;~FHi+$nk[xuwcG P$ Bđakz$ yۯ ۬ٱaV+y>qbiEjUywoLNXg[WqGu)w@œ &SmlZR 8]%|%/ Par!+Y$xLk'16r ,B#f~q+<7&mԸH5LAS >THSi5g,r]iSH)ݛL".Jz`8e$X\,uϧg-!5S1YM i{QN,s bڕq/r$aG  fT_D#UnZ'GQ"B+iXİ,/m&G+cׯ/jaRVPZW^_71j@eĄc%yʙ4 e5R]%;mj@nCrtf aW|c' @[>  KE+)RvP1W CՁL:^[+J/1ģ}_\)Z|9e_x9wnpěw4hUó kHz 펖֜-%c'PKL} ecPK~aO manifest.rdf͓n0ލ咺`{>pՖ"[z9v: 1; use File::Basename 'dirname'; use Spreadsheet::ReadSXC qw(read_sxc); #use Data::Dumper; my $d = dirname($0); my $file = "$d/merged.ods"; my $book_h_ref = read_sxc( $file ); use Data::Dumper; print Dumper [ map { $book_h_ref->{$_} } sort keys %$book_h_ref ]; # Output: # $VAR1 = [ [ [ 'a1', 'b1' ], [ 'a2', 'b2' ] ], [ [ 'A1', 'B1' ], [ 'A2', 'B2' ] ] ]; my $book_a_ref = read_sxc( $file, { OrderBySheet => 1 } ); isn't $book_a_ref->[0], undef, "When ordering by sheet name, we don't lose the sheets"; use Data::Dumper; print Dumper $book_a_ref; # Output original: # $VAR1 = [ undef, undef ]; # Output with applied patch: # $VAR1 = [ [ [ 'a1', 'b1' ], [ 'a2', 'b2' ] ], [ [ 'A1', 'B1' ], [ 'A2', 'B2' ] ] ]; Spreadsheet-ReadSXC-0.38/t/11-date-formats.t0000644000175000017500000000467614456566532020000 0ustar corioncorion#!/usr/bin/perl use strict; use warnings; use strict; use Test::More; use File::Basename 'dirname'; use Spreadsheet::ParseODS; use Data::Dumper; my $d = dirname($0); my %fmt = ( A1 => [ "08. Aug", "dd. mmm" ], A2 => [ "12. Aug", "dd. mmm" ], A3 => [ "08. Dez", "dd. mmm" ], A4 => [ "13. Aug", "dd. mmm" ], A6 => [ "Short: dd-MM-yyyy", undef ], A7 => [ "13.08.2008", "dd.mm.yyyy" ], B1 => [ 20080808, "yyyymmdd" ], B2 => [ 20080812, "yyyymmdd" ], B3 => [ 20081208, "yyyymmdd" ], B4 => [ 20080813, "yyyymmdd" ], B6 => [ "Long: ddd, dd MMM yyyy", undef ], B7 => [ "Mi, 13 Aug 2008", "ddd, dd mmm yyyy" ], C1 => [ "08.08.2008", "dd.mm.yyyy" ], C2 => [ "12.08.2008", "dd.mm.yyyy" ], C3 => [ "08.12.2008", "dd.mm.yyyy" ], C4 => [ "13.08.2008", "dd.mm.yyyy" ], C6 => [ "Default format 0x0E", undef ], C7 => [ "8.13.08", "m.d.yy" ], # at least that's what LibreOffice with German settings creates D1 => [ "08/08/2008", "mm/dd/yyyy" ], D2 => [ "08/12/2008", "mm/dd/yyyy" ], D3 => [ "12/08/2008", "mm/dd/yyyy" ], D4 => [ "08/13/2008", "mm/dd/yyyy" ], E1 => [ "08 Aug 2008", undef ], E2 => [ "12 Aug 2008", undef ], E3 => [ "08 Dec 2008", undef ], # this is plain text, so no format, no localization E4 => [ "13 Aug 2008", undef ], ); plan tests => 108; my $wb = Spreadsheet::ParseODS->new()->parse( "$d/Dates.ods" ); my $sheet = $wb->worksheet('DateTest'); #my @date = ( 39668, 39672, 39790, 39673); my @date = ( '2008-08-08', '2008-08-12', '2008-12-08', '2008-08-13'); my @fmt = ( "dd. mmm", "yyyymmdd", "dd.mm.yyyy", "mm/dd/yyyy"); foreach my $r (0 .. 3) { for (0..3) { my $cell = $sheet->get_cell($r,$_); is ($cell->unformatted, $date[$r], "Date value row $r col $_"); is ($cell->type, "date", "Date type row $r col $_"); my $style = $cell->style || '-none-'; is ($cell->get_format, $fmt[$_], "Date format row $r col $_ (style '$style')"); }; } foreach my $r (0..3,5..6) { foreach my $c (0..4) { my $cell = $sheet->get_cell($r, $c); my $addr = sprintf '%s%d', chr(ord('A')+$c), $r+1; my $fmt = $cell->format; is ($cell->value, $fmt{$addr}[0], "$addr content"); my $style = $cell->style || '-none-'; is ($fmt, $fmt{$addr}[1], "$addr format ($style)"); } } Spreadsheet-ReadSXC-0.38/t/empty.ods0000755000175000017500000001315514456566532016646 0ustar corioncorionPKTZ3l9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPKTZ3Configurations2/PKTZ3 Pictures/PKTZ3 content.xmlVMs0W0ziPۙtzJNi;b1胑q}%pô2^iYz8A:n$U9ut>l>TQ0 Yh-@ZDodtZff2ILU ,Fgm1Om`=v%[p5i=֙ 5|0ʹ.*bٙgeVM̚LL{\Ukޢr/f|6GKXdk%onw'bDOzyĖ#wraxz<͂Sky*Y5̀J^'wn,N)w\K9;~f|4gZ '0{4HL{ts\p@'*f ߇_:ƬH~&3f&nx:H*e^4jTR7{h)')MS_ځD^rDJc0t a9/܃ݙRD!JRπka&v)& ՊO d3F~bCB֩5O0kY;}b:\\~Hk3 B<:Wi2*0/GT' P~RSynYB>Vy])*s. Q±RW?zݿNgKfݔ#ULU#Ozg FEN!N}s;.&VW1L7fv(a=/ >[}J}R8P?$rCބ<'pzかLgV77eB]Dc[h8!~ҽev_i Sx#s~ImtB5(lUHd{zܙoUW0.<_lV3®cz40]RZ OpenOffice.org/2.0$Linux OpenOffice.org_project/680m3$Build-8968H.Merijn Brand2005-10-26T12:37:22H.Merijn Brand2005-10-26T12:37:57en-US2PT35SPKTZ3Thumbnails/thumbnail.png sb``p @ H1}e``ltq #'ρ-O94!uC^c3w 2hxZw֚atsYPK-jPKTZ3 settings.xml[SJϯzJ1 x[IҒLjfB_"[%.p\t$g>9srT:tzڷ?g ;p@)qSHϵCE>t,x; /'e((:jGOK]KP'PվRWJJIuJ$#D {ꘪN]d`*wHI) iEK58^7~e-j7[㹟\J-eq`MZ䡫C{kkvLTպ>j s塇cUx^\;;nۡ~s|7}CttbӾ~kFwC]"Nbad/:O'rdVߺ"payn:;YHG9Ÿnt5pjh/ ц牅<,@3'a~P0!CB BT9+f:@PR1Za,rCfq_W)`'PKpMWPKTZ3META-INF/manifest.xmln0<{춧" T-¡G7Ky޾)@E.3fgOwe[h')Rޒ>,^-X)IuZ~O\eirgs"[g{<¯q(kʃwhP9]*U&58Rc2bgpi,$Q0:} )mkM) G/qi! ?C`mjڤ\ry''bW*gRϷCW&oH1 <"-H6qXE몡 DqOՎՆN~PKЃ99PKTZ3l9..mimetypePKTZ3TConfigurations2/PKTZ3 Pictures/PKTZ3 content.xmlPKTZ3u_b  styles.xmlPKTZ3t meta.xmlPKTZ3-j Thumbnails/thumbnail.pngPKTZ3pMW ?settings.xmlPKTZ3Ѓ99META-INF/manifest.xmlPK BSpreadsheet-ReadSXC-0.38/t/hidden-rows.ods0000644000175000017500000002117514456566532017731 0ustar corioncorionPKN@ROl9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPKN@RO/Thumbnails/thumbnail.pngPNG  IHDR'eWPLTE+++444===CCCKKKTTTZZZdddmmmuuuzzz'V|IDATxݎ nQA@AB;f&w2&V`}o^O-U?\a]UbO~leK::`bݎNDp ! JoRfW^48.az}4m*VJw Jn[omSp_ǦMTfjVN169'ݘ)MrlT{ZY{ZY_RZqY6booeP=l3!6 Ђ%[,k{Kݗ'gi=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=z ڴ-IENDB`PKN@ROConfigurations2/toolpanel/PKN@ROConfigurations2/menubar/PKN@ROConfigurations2/statusbar/PKN@ROConfigurations2/accelerator/PKN@ROConfigurations2/progressbar/PKN@ROConfigurations2/popupmenu/PKN@ROConfigurations2/toolbar/PKN@ROConfigurations2/images/Bitmaps/PKN@ROConfigurations2/floater/PKN@RO content.xmln6}_!Cڸq^n]RM3h(% $k{ކA/v(J2%Kt:loSLg1IyDN vf"p,$8&r OIRrMlI@Z9ͭJeִ5^<9'}5-f+МC+ڰbhfFJ[.xE [Wti&XNaD+p0Jژ(>Mkdޡ oe5D V_wu-Ž0,'8_*捱:{;dqz+եikM{im~yef0=7wtpp3r'RPEE$1-h@7.@g :E>=9# 1wbDpI'Hʅ3|![ʶHŬuhlI h%s8hAFC/'Nၧi# 4Viγ$0mR"FaMj fD3͒PkW.>7D'N:MCK9Vm}8& B.r70@z`;cL_ힺ!88})[Oݛ8~n99s.qw.V_[_?/aoѐgwV]GMѮ <3"=|TAMJRJgA>>J*ApDQ2Ld A\Y-zkȏ}4<($ \orIL<{jy ObrNp<ݶ5WWܜt;/I1,:bhz]LUG5|>>]ʼn[r@ BQ"9̠ߠRbA^TGww82gmOh۝{c芛ˆa2(  #wF{$Ƙ!Y7[vK` ."PC 2S ,72ex]SH[:mQ d2lTs'ԗ= ~1:ɦ52eIXŋƓP+,z[9yc$Eξ&Xh϶(L6>;(ö `N 3uIR}X?_-Eo+gԭmamfJ^^x4SPK2p{KT'PKN@ROmeta.xml[0+.vRG^ [iU ˛! G<_&zhg b")mZz,nr= :mX*PpUa4"H`ghT^ (9N) [VdΨgz3PJ0wh>ὡz2sܨC;NiJL^).a*EQ9ṅ05XUp|[@11xҶ}Ζe]w@VyNnV],= ꧽMp}09o? p7ݠ LS5 8 6\I1 3YfTP.x ьdzTnJv,4Д˩|ͪk?oLh;}: ZF,]kC45Mf)"m+i j$E-7sa}Xcj%[PK}<PKN@RO styles.xmlZn6S*P@dINn],vH̕]ϱ]b0`g-vHdItm- ;r.R,1/&n8\gILϿܣgl6#,Z8^!.).`Ί^ *H1P,ǙaWcJS \Be/:Y1G 1X_拂z3E,͑ V\Ps!Vjwx⇣W G>X*+pb'UEzy Y9.ʺ'SeһIG9L륲/ݸʛ"1xWBqvS1kdЛ]; =_?WЫ' < lY4> <%o\:)y8g\XCfDgh\{UMxB]-loIFmWj-]7[`Y1'r Q6IV e wo_?Tdќ$LI<*[EPQIvv-Kp}"ŵL<&0>ݼ 1͉p%P<ݶmwY^Ǻ`zo|+NN+ޛ~W+-Nb -hyS1K)ER$/sA~cDE$E@Ai1q刣|^L 2yA 4]s˃ɨ۲flLQ,P+Bǥ/M1L)(lI lwӦ|90S|U\MvɱJsKJQ,jI-5p7@NL $ @"VF.—m40^,!o/pr"kYjYM8[ꢮTVcTM.sFzElJ2mYxh]BU6ep1+:v)b/KD훉7%򜖩j%w'Rs6PoSGLi̾c?Ŀv4WʣVpT{w^̶4 ea*DFusJ2l0$H,߹`-)oڰ$ÅfStU6wzh~|~eR!$Wь\`B |3D I B:q#,o%hN!55#6L\N\>ʒO9t.8.B<=m5M-/rO353X6c Fy60U+2 P<zP'rޠ3!B;|x#Ѵn@ = c`o;79[ <0L(z)g,6=F66L nIO>h.U."dRҶٵZ6z>CcĒoa#2pl:6V|f}}Z#&8)g%[";lDFBл!8^6| {&FwuT9Ⱥ|L@0* [`yOۧ0Y0 J+d$=1,.΅0SVr'(Atۜ~;p(2WJ' '%oC>b,}:38NHSG8/#@!qDTYjzG.&y|[o kCv~Fp7VdX2Z=^ 10; use File::Basename 'dirname'; use Spreadsheet::ReadSXC; use Archive::Zip; use Data::Dumper; my $d = dirname($0); my $zip = Archive::Zip->new(); ok(( $zip->read("$d/t.sxc") == 0 ), 'Unzipping .sxc file'); my $workbook_ref = Spreadsheet::ReadSXC::read_sxc("$d/t.sxc"); my @sheets = sort keys %$workbook_ref; ok((($sheets[0] eq "Sheet1") and ($sheets[1] eq "Sheet2") and ($sheets[2] eq "Sheet3")), 'Comparing spreadsheet names'); my @sheet1_data = (['-$1,500.99', '17', undef],[undef, undef, undef],['one', 'more', 'cell']); my @sheet1_curr = ([-1500.99, 17, undef],[undef, undef, undef],['one', 'more', 'cell']); my @sheet1_data_ods = (['-$1,500.99', '17', undef],[undef, undef, undef],['one', 'more', 'cell'],[undef,undef,undef],['Date','1980-11-21', undef]); my @sheet1_curr_date_multiline = ( [-1500.99, 17, undef], [undef, undef, undef], ['one', 'more', 'cell'], [undef,undef,undef], ['Date','1980-11-21', undef], ["A cell value\nThat contains\nMultiple lines",undef,undef], ["\nA cell that starts\nWith an empty line\nAnd ends with an empty\nLine as well\n",undef,undef], ); my @sheet1_curr_date = ([-1500.99, 17, undef],[undef, undef, undef],['one', 'more', 'cell'],[undef,undef,undef],['Date','1980-11-21', undef]); my @sheet3_data = (['Both alike', 'Both alike', undef], [undef, undef, undef], [undef, undef, undef], [undef, undef, undef], [undef, undef, undef], [undef, undef, undef], [undef, undef, undef], [undef, undef, undef], [undef, undef, undef], [undef, undef, undef], [undef, undef, undef], [undef, undef, undef], [undef, undef, undef], [undef, undef, 'Cell C14']); my @sheet1 = @{$$workbook_ref{"Sheet1"}}; is_deeply \@sheet1, \@sheet1_data, 'Verifying Sheet1' or diag Dumper \@sheet1; is_deeply $workbook_ref->{"Sheet2"}, [], 'Verifying Sheet2'; my @sheet3 = @{$$workbook_ref{"Sheet3"}}; is_deeply \@sheet3, \@sheet3_data, 'Verifying Sheet3'; ok Spreadsheet::ReadSXC::read_sxc("$d/t.sxc"), "We can read a file twice"; $workbook_ref = Spreadsheet::ReadSXC::read_sxc("$d/t.sxc", { StandardCurrency => 1 }); @sheet1 = @{$$workbook_ref{"Sheet1"}}; is_deeply \@sheet1, \@sheet1_curr, 'Verifying Sheet1 (raw)'; $workbook_ref = Spreadsheet::ReadSXC::read_sxc("$d/t-date.ods", { StandardDate => 1 }); @sheet1 = @{$$workbook_ref{"Sheet1"}}; is_deeply \@sheet1, \@sheet1_data_ods, 'Verifying Sheet1 (raw, ods)'; $workbook_ref = Spreadsheet::ReadSXC::read_sxc("$d/t-date.ods", { StandardCurrency => 1, StandardDate => 1 }); @sheet1 = @{$$workbook_ref{"Sheet1"}}; is_deeply \@sheet1, \@sheet1_curr_date, 'Verifying Sheet1 (raw, ods)'; $workbook_ref = Spreadsheet::ReadSXC::read_sxc("$d/t-multiline.ods", { StandardCurrency => 1, StandardDate => 1, ReplaceNewlineWith => "\n" }); @sheet1 = @{$$workbook_ref{"Sheet1"}}; $Data::Dumper::Useqq = 1; is_deeply \@sheet1, \@sheet1_curr_date_multiline, 'Verifying Sheet1 (raw, ods multiline)' or do { diag Dumper \@sheet1 }; Spreadsheet-ReadSXC-0.38/t/GasLichtWater.ods0000644000175000017500000113016514456566532020210 0ustar corioncorionPKCM'bDt¥}7w-b56ɇ:`țo񺴕 3#ҼGph'#u8o5&{DL5Zu{ЏڏɘݞԛϲO:"NRk}bifn~8g > c8z8੍pGiCޔN UhUFvvPK:[- PK᧰y^-JnƒcUm~R(جi9Jr{Y6/H@/rdmN,/ _;$qdc3n/o""r&C8 O+Rxu2|Wkh/q `xxbI0>d޹{vr$r,@PGP0NYr$dLhC~y(˾gix(ˋbi6džaAhwUOby0}ɢU-`f,ZzihjjL EK{ǻ;˂赨-[r̜“f".$jL\x"&ʹiKY`ݳ+8d6,]'SVصO0 ~q[89v 39I7hiْ64U}Ҭkg aqZ<7C%_1V9~,{U<藣%chOOxU_շORQi3lh.qOmF\ \wTlڛbFAP8kV#7ϋp>H21/hR,Uu؜?~Ywi^dא~ur@ )m4̒S91,Oi@xϭ6o(\KNѠŹy?ћwż1_i A)>ZUO=wZ)/ID?{^b;}΋pyI`9;`KUzYdqܷ9}}.R҇&Zy5(nwb˛[LEbyʛ;X֜ފ][,onoyC)(77b)7ruW0o-s 7[`-XPo /ޚlP5Y1M3Wr)Qz<ڤg^{h"\ $e(Q:7'Fs!ׁ8,]SΖ uGIX!V,H vWwI1*>vlk#Tͣh|U],[ґ65{H`JG2A-ʜle: i<Q 4r8NZ>5/kc]%3piK*B{zd ;Y'رK`F +GDSiM[L^iJ/M)&dԧ)\ra_ oԃ ]gCkʁ02dQ(/2yIas}:aNΉ:!+(Z q US6ŲZ1Z!k_`StjjTlT]׫w]ժײX}YߔtHKep,]lK`+ݪWLd;VI0MKWWzKMjZf 9Y~jmfѿI7v ۦ26R׊tEn;?E.{Ց2/))s yni$R{C˓tp?Vx)g" o Tkqli]χf31:I&I ,I'J,0wJ|z~Ϟƫz b /t6Bo_<4 7ͤ`Ҍڞ3x¥W, tc*_z}% 6#ܦ>gA;<{NǓ.MJ3_(gҒ|m/ŧAB |M*|})_LJ;)Y (Y|,?BJr3 ۨ Tѯa (c^TGxV$sx,  "ֹ.|ׇ|(ge!"`ܓtQ8; UϫEE]#^ge>sWK9/弔t^?FEw|܌W-]ݫTe*Ϳڝgn$K$̢ Yeɢ\Bw(TB /t6&C$;ks:\2:⛯)IO1{  کGաd2Lrq 悳(jq \99}ȵ\&o+4ݽYDyسbG gF |ʖu@W+paNt( U'i)cso[6)p> 8+p>YϮΗaMs- wDJ|.|8q}1֔ 9Ϲtu\̖= %N{KLep]=E%}0UE^s7y1=#WQ0 p'$3H"5vY$oVW`]9\# :iڎ2+e 6`17 p"5=<`LRcSAduӪr`TcQG8`s  )2S*)ÚOhȡaƣ0QbQi׹lgb3 g~i)x @mgb5_]ۀ3l }e};GR6aJʰ״D3 .\vOLvj8R Ll/ak&XG$݉Wj)O^ nleՈlT xtA" 3tgQjt~F5-iw̵+67jBJ62R2pwhț)jhְt@Iu0PZۘ4Jb8JY&tTXJF5)`Nx 3@TÂ|w+Fzk%+v;Ot״t;wJu0!Р^].'&;i5|X1B@_IMue. h\6 Lc]AA$l1h@4` f&W2+='~H"j4 BPͱ#hNSQW,Ag&-ۛB]T-BQF5iiw̵+670&=J0) ՠ/ X=4edGF 5B]ZkDQTGQ< =Oi)x/`Atj ;&]Ϸ\૷j=Se;DU?V7-$2рQ͆ڳq/0QbQM ӯugaZy[fRyujA56 xq|ójR68 a< 0c&:u`a`rs Йض|*[tkV RX00QH0jՁZPYGD#":oCψl"0y|A" 뮃|*Bx=x:4+Ϙl<v\8sbz:rZ݊h!tcG`V㙐,Y♨HMkMZim Β4[{+TG5d83j)xB`r@tj;mgy`01s٨C0펹vFvG˄,G,PhT5x&;Jl5"ij큎P 9<'BpTZF5rྼv v6PG:t%%E5f.x1׮ ^n:N-eU$ѐCA.$=9dGF58^CD51:2&QLm@jT3TM"JDGa:F,e@YQMp_^@w}MD\6Lc]AQ5Rmv}GB;Dm \0J {@5Ɏ[jÍE5H|W[_JV͹#Rt0" L:F,e@Yn$9r__@404V xao {=ۛJu$+"5,&-J8;D5a_^6YQ%Й3hp iL(իv:hZۙfv@K;.s@kYZwk>DV4tΩß~Od`-FYLd}\3 MpOsKxfxƹ]8w8sNY&W29C*ׄ=[ 88[mxv\2=p/j9g ڷZ}V#G{={@ :;D5aKެvwT;F5kT,pF5hp f;iLNe2 4 N@5hiGv@5!d߽s2RbGWP .+i4X#G{={@ :;D5aKު6?/P(ϯF5hp PMުR|T^4hϨQTcvDl]0גf!Fvѕ4w&T~; UK={={@ :;D5aKެ6 q렛A5UpF5hp @eQd=]huN 1ez O{liGĶ tjR%n=ک/Q;}#-5r4kL\AQMث7+xԳ3vh p yVJ3YGxJi+ޙ4h|/ v-6>L>>BÃS7?~)2A5r4k P3P 2a_ފe!胉>B t3'>؀¹+$S_^o__hF!{f 8+ h@HmC4d.1%o he\b!9>τh_:`QhDc׌Tʼ@qyh~YyгAThƆ-gY!52桙 Qd #YC2V Ϩ`oDfɀfH&˱2jztt̜ ;F1pVcv0Qvʕ;YJʁd-|4@݅sW/EL¹+y>kd]PC.4hLjVz2Zm&d",ע&hh_Oǯdog?駧w>OO?},. )zt?<3 !RУV9 ٴ5ǦRݴ;)ieC,>ٴ*b]TňR٪Q6|hnѠ=S fTkA;/޵@kQ:xU^uTfx*:|QT5r0y6.͸qi{=.T|iBOnnђWރW*ƹ]8wDZn_`9 Lj&Ke+n`SJ hw-6DxaEe>Bmzn[~?Ow!ŵ_L97wB(MIM ^VQ-/uds bV.n-w=A\^*8D+ʄλǖwDqPkA=?3?l>^|vj]8a'v;a>-|Dl ˼.!^)(Fgsگ:v )8|4%B݅sW3Ѫau<@oZ ]+rBc; .Ak̋O.ZgS4{g8REi`VNM@9 7+VBa/\5#E5Nju@c# ggBVl}9;} eE=| Z.B1:P! !敇Rfc%wQ=Нx=ZmPv\ tS3ou4,~O2[F|;w ƛYRyYh!ԟhYpAقmZ.B)EٸewhĻfEhT{gҠ=X P'#LVI?Q>yr|{01ЁGG(r4oF|@&5u qE|ףGe Zp VITDшF-w]!J|vftDL{.jlB=|`F5;!#PdFwMXRL;}+ه ie@ց%‡6Xs_#G;! A7HhƽDh֦о$ʠm%4MhrwNi= &e ErycFw͌BhG1[!r =fpTfsMCe؛aǻf@]#G3[fEي@H4< Ê2mVNڽ6 UExƶ-uN]!Lو,»fgD켊>aDFLdMP3m ZmDv\^Ͼ~-&gg2ޙ>]z39fJٔ@H7`{7ςn)}r|VlQl5\rwLvT3`u4@ *yl9֌nl hhaPy8m7%Ze@1@Tw th&g:OqRSv} .8Byo*H A̾>ˌ~ H!x~?MB3) lR&{0 AjHhmM8\!DLB1^B(Q&FlV«JH>)*{Ѡqנ^HZQQ` >-x.V;9<_#$Gڲ iFy-|3Q"r+c]ЇW*x"x*Ĭ=z]D@K"&6k|C"$2_J=0[fO4=" ]V[AϤ?XDK@xJ- ط->Q9x?SZnG b)ʀԂg+0ѣ UAaS2/TM.= * dT)߄xiS!;kgk6ӃL@fISϗD.gP 9Z%Ychfe{tF5(g|MRb I€#ZZx-IA)6 HmBEY!hǃ uhes1:zpMʙPpemY@ؔPbL2Әy@tbTw ϵa-\8uK=yl[=A½AA"ۃfTJh[qT50w&[Q!7^LBx Y?>ʒtST;9$V>khePij0eÀ)עK@ҀWc[6i UU/PɲlZ˿mNvIEBOŘ"!\ye"?h>N9Dp& sݯ)A7vѺ]icsJ+{]z`@JU}*뜒)b4ZP JW" BTlAVlJeU^j:eQU 3-*3/Q𯛋idL kӵA]bl Է m Ьbқ6_y"Y2Y.6)O.\9NeZw8>-)rT`̇#˞ GѨT'C0z\x0^*TB@+µTH&ڭ]kjikj5%ꤜ,42A~?~s>ȿ~ۯûxO?>[>pJg@?.6es-wR(1 gE ;5٩Y0ڡ(4GFk د.Ox*{Pп yR>ZSs[W +)̯da~::5Jv14h|EOX4ĩ^< ۲ Iޥo]pY; vDAåu=.^Ex8U3{Ta$jBL̸B!ug[#G 6q9Ѱ&̩BMqgyPO%x1(:Bk8%-z='qnje%%Ѩ e؊"6J䥆iup L}heп<]'-(g CQfV Y"Gp9ٰ? ga **$DTE }`^?$?I`綰^XBM*VR}wT L!N.Q;| :h@4O]26zƹ  B+fh<'YUťx.l%SQCeS]_J- ؿ- R$h$ԣ2* O%(|C$y^0sR s 1Z1RE Jpx-J( ۪JۺZx] a4Tp(D|f,9]T)f\p4Z)JN6mΡX҂{|W;UAz `mva `qo4O(H͝m&R y߾YHߤ~^Oz8U~TL@a!$3qst񊗪t~ؽ:5Bh{zW;9$*> )'Jפ|<~j.}ú-i+Hl{!~dwA9 /+Ja2Bnl- tTx0źICJڝ~??ܠ#?fV2* }#q+x9R-gBWM:vjp@VVҮz:NT6|V%ěj^J:ʧXT,~W[,`ksBB)q1!*XΆ^BYaYR&{d:%'?ǁ(  A5JDOB#(uI(`!d`j9ulJֱ+YN=*qB%k5A$vk] BRL+Y:=;0ˆw(#ȔE]v,ǗЇ{l-B5^YQBxDŇp[00#p 2,IjD? 2=z҆s @FDؗ;DG!|u&@uO@0hLW&_|hk )t |Ló_N^FчTOƃWWWTԩ`eX 0 @9Q)h i6E9!)UieY")x2'ڢqaY^59JºB#VbL0DybfĆz YKy,n:=,0^%MOD]dUSa1i`1kW]vh岊:PWk3Viؼ l=ֹֹ0ukޚZۄxQ.S~y6h6'p )V.l{^(҂}>.abaqze@;Pnz?  V`$S)iq<\YW_~\w ) }R +eǠ= *= (H|6*tWWl+MJ25 2jiۜh:*J\~)xPU }ֳ"‚aaiV:6f(2jfG@RJPőNOƒ U[NRc+tl-C;ťi :&蜺B NY01謍R  bW;8/XLg3IWtnu%z9Sř *i6N`̋F4$AL ~ڒ/[X`IsnQtc,ת8v'AǬ.9ą !9P$}aP&tqQP<ʛ$Tߎ-if=$sc_O;^SStN]Yx:J_x}!,~z\bW 8(H7IwЅ[t{t sR'5{8n#VD/9M:01D3)󂍗wIdafk &d)6d؍ko2&S8ž (^'M~2WU+Tߙ3 #E։-gCwNM9u}gP\k'gFLg$s*y쾺f}SR3Nj-2vn= )tB(7H TEӹ!}!"?3o!>% tip;brL@!3sϲs!`9Znq!=q)HEp!\-ظǠPg_/::&%oK6X1ق5/ZF ])]6/ Y eU4IۢլJ\֓qL ;.yME˘|.6U N YKm'2 tWh{`O_?vec,UAl2peMD;4t 4s׀u:har PN BW\&T󵘎G|v(DyܢBF.ݢܣKeuu:t)A3E]$B8؄PPkˑ l:z /kٯ$=2 VElIt+xB? ~nsXX9Kt;'H-rr6'ts 90$1A,m)m4@bW\* Wx)ČPg`unu%BUў ao?u &u:_zaDeF 3Sd12F@ E^_[H0( ˨W?.^g>bBY!~ӫTD6t@ ,@&\@4LE &q8`Į@&"ZD_lF2-=Yj@J,x{qւ@s B6T+j=CPB-.vP*>= R!h2րC7 v ½y7 IpgJY}ݬO]j9tnJй+ARwDX 0BW  5`CAf>$ts+a2zWtx<ޠL6!j~0T`Δ),訕BRE ]Î t4@iSDW656SutRAN{SCsutE_~z4{Fz&,HL-F$.H uxNR͂&ƛ> 8+.EiD=8I7&]EֹG0mh_kDImV8.&NL+^7^5pu&BEǣTd%[X0d"{LԚ[oL<RN~a wNPHl{УvGjI({z߀B ]:7=qZa*SfYP1(]Aڬ*,a@IA&K]ܜ9}T-FHAe:^gQ`wzM ]N BJ+u]( KrGRRΙr ',; EgX4 #o $g<[Ά.hD:#ͧ@t^d:^PjxIKQ!(0#ZxeP7 QD`bQAk*^J<^d38žpm -p @b,VB/P' WQDJd@KvFVDQAeI*`ǔXC#*$+dž/ <1EgBnu%LFV>CYu:Tyl[ eш‘Q!l%_EQBR>z6*tiL ;*RkWq t[ LP^'gHǩ@Jb_pR`ON.nǟlVš&…߇ef w?44ZrXdו$IOr>s\r_\v/D_lo,PG| [x{x{x *_Њl6^w ܚ6(biEa!˽3kl'6ɸE ;0˄VPa%07Cuzjlr?X[.-ܛwӱ`C '=ZX{|K.Cː8un = ЎZ,@ I;26&󉁃A%01UbZ@,4a-Y*{md#_ꢅ «y EM*PغBߚtd >t bhS.x!4E|| 6d\tʷ86Taއj60*(?LSbXj9K̆%c mX"ӢF}Z%BM( ق +5$'<Lt01&,/*ܢ1 q.^&uh_Pf$ȩQLFLL'"YyN&q)vT!Sޗ[+!uHoċiSiA}PZN`6XRC(iɗrG1×C/Ű, fQt^fںF=FuBX)S's_Pӡ,^&l> j;ydTB]5[p|Q ܚ; *!󢅰 PR_pg#wx41w8 to%_>\ ‚Lƨ|/#M l娖m:: dZ.4FA+00P̗bm:. de7˫Sp3/Z 2uꤢ/Yv[)ʝ0:rLw y Nu6Hp$!҄sZyBH ෵ ܅0pTs@NPLe}Q6E/sGPC< 6>NBQf?ipr_~@1>+(.g4yk D|(rngEa%ȴKﲉ'p /O$N!KWlĄ\Cߠw(qWP" iϤ,Z7VJFb08x0 |CR׻Wz!}6#Be@Ė!l:?dǃw[ys!,!.yb3"F758 _ltfb >t6|w5S2L@N*j'1S7xc(F-12|EJOCAl_4{16Lbj!R0G{gH2xGrpoM}<`#C @Pԧ' {&CAv>E;,}URhyΰ\AJ~!En \(2|:Ač b'(IJV RLJt aSoAÇ(kM(=x*yC6|H2",`u/[|)k,j1S>(PH<%5Q"8rYOGCAI勖5xshYHutrg jʰ';hS@Re.B ݂C6ze!yoAB f!olҙ> H$/^{i~IN>Fe2w]Og1EL6QbVpͶ+QBĮK39|$D7IUKhx9OdK]W47ȝ&MGIt>>urQ^HrgZ%iⳔ B4QIcD06kҝ&F∝-TRȉ 6,Q:w֩[f?V6l-ؤ廽}=/qiWl:RXȃEQ"˽)tTSZ/j 7eM)aTq YKz鋀G=C-Q<384@( ϻinx M x"TAl4 0}\&TkZNM 6m+,eBx ^X#l:Z-6Nd WL|:Ml iSbP9ɒ/&ʢ-Zlk 4Spj|h lQbSȦMW ̻d f  (!UNNh=8xJ-wЁU1٦Pic-JX$ĮUĚdh,nh.]hD2?cDX&b-; 2#0;62W?a%J?X-S4RLWL&`M]6kYdYnM{bm̺h!74 pW ցFWÙWNM5] X SӤ|Lj^[p쥒B'"{; -px}JO#wW~ӀN~Q5I&V]tFȃlGdPd̦Mf jDJ'BiO(h\%g?/^' )##IH* )~^ A&M]86laJw2%AM0ȔR(;m͋C{cLyhUUF%atHل gӕp0w]ѯ$P\(es;28mȝ)gװ[ߴ]'1^`PI,]e&-&M]:6l PP*{r_5!X/dh&-Ly>ˢ /?+ư5Lc&! ! MM6]i mlZl h㰂;S[CjX煆 FEM׆~1F6 U`7zm?~(Dt vzs 'tl"br`Y#H3 6umOu},xEˋ"L]ǽuz#3 {S˦,jqQ )#0dϦMWRT: ΘI~w983cE; 2PI[ F\"(5iD䳩g&-;a`f V@okɆ/6(M̧&M]<6lYtEG5yBrJgE!QlI7Nv6ulg}w3,n(gK)Oւ,od[S>eo 32| {e/F=M2 ^QQ# o2TlӦ-;JԥRbh|6RHxNE(eNYaȨK6}mڴk_M,{DJm3lWL wƐ'p?DL[!cצMWH*>$lGx kێd9V_u $\O A^agFGVT+g5l!֖ʝ޶w4eX)f2}0ugMшB15gֵӿ|_?ӏ_?|?|ϟs7x]O^{ xوl$/%my7@f}Vh#k(c6>T~.L},N-P&CsOˎ}{w\̑G *Vs.Vw4_0]6JP|Ac#zl&; w8{Ojc1 b(X)US]}0u'mmwZV_B` 愫`wmgYA6´{am]|[kV0:G++xaIGS7BExpn ] +—_zLw0 ƗK\l>Ѝ`8hH#}4T Z{q0h-ZB)CƗ";yKފ Vw{Ol |x}0u3.iw`p-Co ٷq+&}6TO5r5.ww-wh0N ѳHmC},>-`A@97)!Smu':ȞGA6#뙿4$ qV:" P(P5-D /rB ] 44Lm|'. 儍]ɥ`}9pB0N[3.RZb_A)wMM6qOe/=mQ9L"QO 244߶A($m-NwS}, 79/6n\#6`q$9r0}4/)x;ԭ-e-zyM7 7/h;CQnx$y`0|oqDg9|#\v9&I.x{KdjAv444*; F)|EJPz`h |`H =|90L7 7MgzS&%W'0m9l7itIO:44t&6hy͇|'*.')SH.r9\;^]HECm+3H+2Ch{{{۶<Nq򴋆tgǢ:[Isssj#~5r];װ`]Iy6:ua죩8-x;,VI(*0544t6FS_ڈ VvG- dLJCF<)p.j#F-,I ݲM6 T=K%5U T6$M6 6MǶmu+aR0Aɉ8-#ǢLhA yP/I/')ئ!ئ)ضZ$dpVL"a5f (>{^ ӭMíMgnm[ocWF\ƜywM!jІl\`C6Jډ}da; `%FcСy/E"l"l:a}`GN+wPC >ޔ&SIxp-)߈H7mʳ Vv 5E.g桧橧Ż3ذf]ӻZj9˙!{X t5qw@ qOjS djjjaqN`sE9Ѿ GsjM;'[;jj>TJZdAJxJ탩m%t#Z$l|#w lCY OOOm[ 2:3gAbKaSz>q( >!֭SrBzjzjzjۻ%.򈰱ms]>6,G` -.Sގ х Gr^vjvj>SڭeAGarک5)#*݁ >ɵkn8SqõEq܈G ]M6%bݕ̑" L7aکyةyکm+^G`Tjz*9},JŸ%;RФC_NSPCPSPm{%-lHZ1 p8 A=>ӯGOM.z)z9;L]5]5骍Gq0;XuZd7uw;_Y$n`]ؒ}lS$~#R-tNGSYCYSYm[!wtiJFf=E3acaaѣt^4<<F8tTn$Z]Gs"06S3Grkk>X=baXkd;l&xI.yK_t=xQ~lS2Ik(ϵDp[rkkk QTq5hK]̷ h=Ӭ>4dWzrjjjj#:M =l3@%vW>懸Rh:Xւ9K[:7ć桭3m]GЍ`UWc)e;*Ҙ兏^J_+ /k^jjQP5"0E.ZNiayymoWt`c `S)aC>Jz,#_Gia3C<+ )ykyUQKw B@+([yKr5_0DrhA{G!癇癧%Grku1rzP80죡 Ͼ?1)T3,1<|f}650<%gQRNX~Y"ӭ>f/  XMf3ĝVFSс#[r h h h Q-l(6Π?w>/ fZ)Í?—4B0B4BwkjsBK=fM?D{h96dh* dWތ3  xy ] gvh;Q?3xI[vh?(3 >|+ 3!\ t#fH[(Z̢o(ڌ.)!)ݛ%j= !)p(T6̐qۨ4hdeyꡍdP=Fl\M=x`jX_P죩/X<ߵPnԣWLE E4);Otup3$딪itzG}0w#GYG r(!lۑT*Zh~NZKsQ"STEPETEVP٘d?!Wd%MRh-Bq_+3022жKZN&XOb74&f=5EJh~{hyCT ho@T7GA—EE˙.x8my|1>;c@P}0 >J_`k-.mW!ҽ pcD* A?Z?Z?5E@Pd] l&"JG,oDBL.fj: 6 02r&6n=-V{.(\3$>6C@TQw8t /J_~p~; jP.9 4%TVcdee90 f{tH^URLw6Kr\fVShhh# &LB<`nY뼌rVl d ,.۷Eo`yL^.}ia3kqINRxV(QJ ^Ri$-@T O>re+rpl3l eƮlhhhPS_‚MISݭry7(N=Y9FrX~h~h~h+& g%kijf)ӛ6ԇGC!'vPX;HOXhh93Dd_FX)I!>੮E%mX}DʛbC:+F2y":!{ZZڸ1%pn@ V~ S-C-SmD@vɃ~ ꉎ-//YwB̭ -g8Plڽ#އ7Pa:e8mnj!Bl(*Xs?ӿW2 __ӏ_{__?|d_E߆Ev7Y+*COE8XEZZڸf>mG*7I$ǢlA"K[—TQPQTQޮm:q I2ibI:4u,PM٩x<Q> 4kA\ziii NNnlh+G_I`v-r>*ZeݢSCA==ty݄NiNnDL)2`zn \ Õ|ȐܤwZizIMB35-r93LNqyVz[H F;fsS1 ܆n91:֚ mt psd .;Ju:u8u:mVNd[zFZ9+s?QZ(K+fN_ߝwBhsiZiZL 8\N_q:&)ZaM[8SGGɇk/j%?x.k5; %|]N$eeem\:I^8Q 60IF93@*9퍩\wu\f}_.)!)c4:[u{h]kFYS}ߒx(h*u hSvF!w](iigNk~(n'XAB.QTo1J>]jGq좆"!kle܎VG[!e2Qc[&tuu1z~v3z,D9drtf1t v_ӈ_SfCfSfm{R+=kD-h`piL̙*1zr pNMhs>? t#|9>LɵɵNɵ-"z&i]kjI#C)Kh=5}8a+ F?E/)!3ɵ-l>`YRUrh,ʰwd?}4u N;+|k9?~| nV[ S_cWXȟi2ϐN(CrA|PvBMW V]5<=$m~(2&)_W c5tcujs4&(~Բq KD r&uo ,dj/%XKv<[ []6(zJ˦{mdŗR߽<1 #\]JK5z;P^)CD](`HKAbm|黿}ӝBYUf]D(i3z)=d3Q50ũ7#oZ ]NCY ]Y CYm|Ƭl4UFft9af(ɔXe5.`8(hᡇ/gana6a[\2>EY4F BD|rz $ZV ޾CC=E/lj!. s.b?n5NuCKa#τўMS2*d};UH7-ofB)xvJ6aI F^t[P"(Z!Asr9Jc+$zrjjj#牍u + 5KirR .opDH?.A"'dmW$j+9.ud* * ۘj$vz졈dDv1xc_t/=}㯿{>2#?[pUS%Bm(QWrJ: I6tI6 I-8"cecňKrmmm\JYlu#P?twMhOGry2EoOFYe $r`ZlZlZl#ʒY)'T^يxEy!z{:%孼OfuB,Ganƃ8%ȩ[u!$3RLI V`oBlPwD _mbȵ3/ *癨jQPq^buT02TU8T[QqhuM^ٴ͉}F';$s)rIYلӊOZz<mmm#7GGvz *!*S4gx{:fD;ZvNl=7܂wanƃiۈ-ӔZ̦,Jܲ=њ?F}*ҕe?BEPb3mٴ=A=ۭ\Hr6v6ӶNo^͸Q&{K ODў]ޅs;/[e=~9W 6v6zKzфU+LT!C*@r÷"Ӊrp ,+TuumJ<4C_Ĝ(-Zح1> Ah&wP{EVL)ZS(_l)ͻVvJXZ"h;?D1ح8۶r⾦h[2 Q6`BɞLbP PC*>rjjx{qx_rDh#>F@Q*s2P/7PmI-:TZ]C]Ͷqz sl SLZt0kO ɞA]|gUf5~QnD#ʛOfF];wM#1*y$u] 6v6lblQSEH`d{29cN}/ Dmmm+;볫ֿj21M(3,Q3j"lO'zڃ\ :ڊKr:mm<3gqgsZrDT&ɽ>+sEEocmnM+dD^=Qֻpqqh\f ):QZ'S2vɰNkg5R\—#pcpp[gK1[߻֋6"i @,O8qzzy^D{:FŁr]EtD1\]xpqg;`nJfwΜ)b!P~o{v&О ;zk7F qcN6wNr\ǦUM\B0oc7o0o[;Ff.OTMdJaЎ{0(a*>¼޶N3>&Xwp5>F@_ {sqQ;.۱Z#C ncnAm<4^+'ǜZr0k`dh9=e`~&ÕG |ù:66|:=kRwMuJ5r5FPnSWnPn[7n\qխ`ۓ)t_H @a}+0rrr:Ügftdm $lP,]%؞t#d\f˗ mm<3/%al2leQ"G.=F=fYQ4\瑦/5{Q#QnJվIɦܨ,܄ oL 7u 7 NA%)uIf)7!2@:U$oO嘫2$eJ-~ݺ{psSwspsۦ g}`a $a VV/ :X$oO'&,j]/b6.ăr"e{R% ;/o Y$oF,fYRdz[%RsjMA6)[9C opjSwjpj¡9OFq4UHL}ٯHL'y{`Y[9;CM]MCml|' ]rFm&t B/]u^S td~M+h?V*XQҢ׽X1ԭtj95瑲t^+VQV9j]~;jSg|>M<',6~r߹_~ᇿ>~{>$q+ 6fKWLyM#$EZ==$#˫ii7'}i#QXH8+wvK'S hǙNnO/'t_%z= u7uu7 umUUmTՂP{sQ{8_HAф;1gԾlyg)=;62r#QNQ!648ٴ=cٯkNNN|Rn%PFd"*]:N:N:nErE9Œ^ZBD}LNٟwJ0" /Lj!.!1uxZ'ms]'WhE=r6o)"}4 1ԅt[!N繢J;*J rVVlg|iOTMX$|~!ڛRBj&sO &ed24f+ .$hϢ,%%9|yVJ6*_<cY|)YPb.,ѩm@{:L־5x;=yz]%YNYNg I}iy8*Fe)k=mjAu>*A۾ VUZవq6Xbܾ޺ƒY^΀=Q!ȞLǣO<!...!.72G)aN rьcoiL݈mq }urr:ˍO |GCzF9ωZZ=AMs5 r7&-gFWNm&ũ!fo:DPsWPۗʼ "AD,jq70s)䮭Jj}@FR"x˹iˍs, h#Fƨ\>]#p>Ӊ!glRg"ȩ-v5FPsWA]nBle(x"<*|gs7jo{:k5돿|禂{Qܑ߾qMV]zN0\wng$x9 _:w_:_)vHF1jɚ\[ n`R5>X{RL^O0C]Cnc8=U.E f YX/ZO0(). +ʥ%v9 E:wE:.6Boy8#_ߩrٰ`gFk 3.~o_W73Mf)eE>Eu+]^C]Cn7U|і1 !i_T`ϥ m^< R}^8DyuV/H/6s1DJah={:1Bf[Kv|Nn.Ǘbb烊8A>XUXJ_D&>LlZ!WT 0ʚFylsk$7;[]쥼ٌŴ`Nykr.v.v.vݩ פ8*ġ<3N`rJVifعy؍XncӱWL S 030ў`Xp1+kvN/U_ZZju# w IN/ў ImAmt㧼+_0?!70t/j`F0MV:wHgx<,-%5r9 :w:b;xaڃ-K'#r^Bgp Ev Kyֹy֍KpVvmle!qֳK=ɀb޿Rdi.a[n[mw\.bS(W*׋KgS9T<͗k.)܈] 3Z3.MVaE+DN3&]p ^/n=Ib= c:lϥ(_Ϩ:p˕a.f޹yލ+|Rh#ج#)JFZE&Ӊt S]1,ٕG-.f޹ {7>Б7Ώwxr2L\Ώ%$^u~н5ͳV:;)+Hso1ǝ-ڋ:J?aw$#\ ABl :w:źmevxPޑԋvMTrGY.ZHGF؀aaur[^w*51X>g"wdNl MT_YpR~ȞGxV$߆UtO=MV`}Y#G(lj)HYۘrS4mܶ} 嫬ٗ\ }/ѓBxGI}~:ݲ_;`Iim8ԄV(i9>hm]btbt>э hgUNQ^{@4eNFQu)ېnOx)HjLgPwC]Cn0Y);fALHeF7(%Sc0&*>H]!O.O!OM0@]Ew-ltpJ.K u,3 D Z~cp;#O2`DDus4mD0(;ngSİ1}WV/ nPgBCdv}~#DDDz Sh1(qɨفdOg'H+>u_W"=XbxԹ{yxm fm}DH}_x]/Q;M=8NѸR/N}B>u>u>ԍKotpNPwէnVU"{2Zk·ro,ҿ((YBY%L]~F8GUYY[F3i_%+/(:InQ!mHXGK >|"`{2<<[c$Ы;I 1'Q19SUAq&Yc@ ʢ]"؞N[rj%嫶Kb}4xۃM9rJߍO{a|Y+v~fn*6]`I;'CӁZ)*d7x,8x40xco/?3MH?_kC-:~TN@S{ZB[NԸ7qp?8a`zI 1Ý 4Xf> |)ks;K}7t~ZKI 1sg%D.sb _Zc򜖬ƐwZޝchpI-1);a~/vS)d<]B4m($J4FiBMMBMGb<so 0wo#ͧm!!#_ @3BX[!Px.}ڹ(-4!⳧kgk/j2>5|1lʽ 2'e}8AaD! C$#ڞcƋR3N:$~t GE,;M>D/ZLɬ>aw%BG (-+4 Lr|LK`"l0۶yD26rw%bG0P=dp®QP~zE(L,1؉b#"l,QZ8X"v%X c7ڤޘq8b9ll?&G;քe8,ann q`D.0{ EG6ң TCzKۨiljG.\k'&Zv.NO-] 2(݇dT7AUÚ;ˤ2L,ޛ2TY攅?kJyC0^ pmIfR8hZm && H/4 c)e_l43#ͼ!bҭ'D32g/Lq5ѴMD: K p1ѠZ𬌖HND4oTu_ \Q!ߓF5%;sD ;H xMk Px\ f1f[ `bilyƂ?Hn%ZQ%@Q" [&%ݣtJ4t*(V-_FH"p"6D,|Q"%J`ħϥCXbLT5Hx4qjihx,!W4 f a#~%`;ȵjQ6n}v'2Ȣtȃ,;GkXK}^0BOx0~.#JȻdZʼn>|w('JljQNZ~2jLlwlj2pt8=tZ]5ql݊;)@8h۠Gqe(Hwq@nX6@=1| dxuD8QN8Ŏ)xDIQY3EO12$GJ)EmuEhQZ`oet:v&-D ]\C`ݎkbJhQp8 -ڤh!N=(u-jgrأ8g0nb׶B)kH}o(x45lWقLiO$a#UloBߧC bfb 6-ґ{ 7Nu(.oHa% jROkmx0zrHuƋE0SС+i8Okc{\u7m Rr `/ XpkYiO^xzk{A8 iil@q I[TwWޤpOwoaؔn> c\+&mpB-\gz0 Fm34544)KgxI[5-/`@Lx0ǀZ]z7dNwana[h|i&-ci$6u%fi׉&y<EzA4Dq ޽W. 8u 8]XX2)4VA-1ZbH< LCk~_??O~|/V a+7,2϶l s)C+Lxь5a; 9u 9 9zW*on5̀6Xr-'>>L,A~*䯼;z 2:tɉpSwp;IlؕG2:%D TێMZ0G+GQG2yő0S7Ӆ\Id siG+r1hf MUBɌOO?~W_@36>~^IP :~F9D3Q|6eRxtttt 32 v\Hfbk1 a<ev>Ԉ4wg!E.E!Ew&Av*D* M>[J~L7I\'sU|: 9:u9:]SvDI'-T9$Gƣ歅+3G+\{]@ S~CrHC%gvރ,C$W|R^P,J qB`byI})Vlw'HHH[mg4n& ̑^[*)l|Mڟ,g;*`Q|,ķ}#Ylw'HH E:`JBѻzaJՇSTmWgd>VkIdV (PQ:9ʈ29Bs?kҩi}8gz3lHυ"w`ِ(4Qښ\ʼnmV7pbhҩkihұerEW"0;V}"WX̻Mڟ" nܫӤnttP!|g 3O9&bH%+CHIHh_ KDaQ_ŮO߄ ==x!E}jјO _9u_9 _9@%>hf}ŧ"AK \3lc,Uﯨrrrp~S;6i!]`@ ŗ⣷upf݆GB'M:B<}}{7b-'چ}Gߜ98=ƊKtn`GPyȅ9b !ZcD>k]>_o~Y=,ͭN[}P-V[? :u: : R+R8y $<epc*1jLns; :u: :ڧ=4ҔfEQ!ec6iIx8T8_CG'~NVjuInہ3B.w@1Z=;Sj $71r^;a6a0fӺu%'7>!fHݩKiH7gLƛb 1ԽV^'+دs&{ZX 1Ƣ0%,9BwBwBwp+O熩V0&t.L"` 3ҔnKƣn69agY[ 7"۟_˝˝.\vߺ_YMەgБ3M# Xf zC:zA.Nb![B.APE`5-~'m24X[`e|$kn)x016uCpK%r.}2ԍ4&OK^YւC'EDisIPqॺh|0CO]OxY eEȽ)Y xSR=폵izx01j}e@/z,t<3iM vXmcė5jۤ(z&@C4̞ /<$%t!!RݘuWj-w$,0(|2|{/P_? ¸fMț&QM`?/`@Đs{p{!xmnjrԭa0"{<3ccGj0'o[<ܥ+(ƚ%Bx0Ca]6~.C]CX6&-dTJ\I"0CV'̭mr/Vcb{0>x>xû~N 2g\VVA}A\cuԭIvrE9HUXkP&egT.qbf9X +;w+;+;xְ~,`{(,xfI`<,a:v,W2:@Yl',d1TUvzj|/qB`bwF~"4uFO}|1܅<>#&c6va,*OmXQt.CIWt{|;X ;w;_x}E)},P{Ԝ\<ߕ_+  ^|V׀1n\3N>1(efD»ddd̃}% AJ׬s Θ>L$*Klwgacncac@ ,k*0+{q9PJm ppfNQŔSDr%ݡbXٹ[ٱG-;mB,)nO&k"(7sXEEE|>݁% &cg@štcббsױбq2+gTXiweP[oF!;[61p)q4|wvvv]߶I"f4%HMiۤGoJz=6i9Ng> :w:_(wc 뤕Rsu xC4XIͱy<G\;p{QCcuڜX Pc1GrOgoppswp[pi4 %s& Hx0Q9 #pmRhhh>7U%YϼPnS$[V)p6\X "" FsFs0{n.{6lHޗJVZ q3:Lag`}߾R)N?I36l s? b<%DG; 9w99?&s΅MKGWR!gnIJޟXœœ||hj;I+{Ia$붌zc6idx8}/nj YKƤ>xwhssИ;~rl4i" ,5o=@hZ76:6x _f;1oM,Θ] 񎾾4ݼ'YYYQsҸ7Wig|Mfx}Mԗ ̷WY_lw狡.R97 W3_`$5eonEáRgE}ۤ|ȱi|1,-|aIryU\I+}3z =xJ-(x4hi3E(X[ޔ߂*ZC,Ef-dHKyH{DGZ3Y,rR|_jKȢlݤ[m~Sc7F{ t88.p#cרBJZc`kI6ix8 [OJxM2|&# j5rq!G5w2YЕ9PNdayYw,8Er KpJ7)&p&p&pa΁Z \oשp: Os.~'3< EFmG2҅2 #:bj[ݷ'03xvS N\B1\h/J0hDt"NI . .npp?BYST(jl@U K.#%@Q< Ib[_b+wLGJ*[PO77V̰K@Ls]EfS StS S7vŁQ5]Y"ٻ.&yP3h.t7؆C-]-C n]I\n̓*5zM̞rzZW-@.G4J'-/u;[ ctc\ktj=cslklb2Q_Gԗ]3~}X]qp'8RڲUu3^-3Y1H,4UO[[G|l݉/F I8܅`3>VcQyd id1ҥ2zˊA;J,0gwv)ܺGn' QHNF, KUi!- nnv[qs]+kcPXƣ& Ʀy DkvkT6c`Z7qnP9~be;HΘ2I }մeDQI7l~,&OsqHdW6he+C-]-C֍g9M'E>}fu?W7#B;CI"[z݌r)[[.<ӌMҌf@I$ \5.ZTV|Mjlo[>;d|Ex~7("\PEx78*19Ap; EtE E8Vaf5#ǡs3R/t;cLMxf; ata a8MumBIܲ/6ϱWh"NP 򌸚Ow! . a8`NP=RAQAM1㽨wB =pImí=d¹F1vݹb¥eCvtk(3V,2X7 [VC.].C-B>J&[im&ώYCjNZP6pe+$%ciUC.].plS)".9gUVɧRS-~@M* ǿlbT\t/ F\`x}?c&kVhuqqqF~06^ M\(gnb}NU &*f`,"ͻŰK˰[Wx,<9ijkVt$fXֶ$r>r>rp{m"z;ɭR"IXC% x w;C@.]@.rlawP8XjOp w2Lq>.1X[!/unRϊTߺc Z;O-o}ȴCKnaJ8x^%87KĘ3ұ3*!-!.!3'S vI1YU:iAIá" dk*5:pE}K˅U\t NiWcT*ޞU%(0Bx=<%RSFuTT<ݵFxr*JpT}WlZtC3f\f[p0j$Fv:ia8v*1ڧR9oۤ1(1kt3QQy4zxg0<{3͕ a&[0vamQ )V֨x45x:,LIMTCd|1{,&6y.W x0!+%9R&TQ=RQ2GEUTp˽A5k< 8ܲgY6dS^84$*6iw r)2J2 F%p;T xp.:mRF}^*^_X͎$q_eN5!d> ƫ%X]h O ڊh5F>DәI~ɈPEb$|ՋSEldyjƤËK] /z&FxqOJMK',OYQc KUcC[wMk&-V݆?{NʷdfXQO`)~ݷ222n|ȂC{^+lqr샲l^+=!db_}Rzrqq8ƍp9?)͘ 0BJ!( |EgSh,އܾ.MzWn"*`|`p> ~MmЌ+Wbơaƭ{贲ue^(?(hJd3:Pc,*B-#_YC0]0C0nr%*Ef'%Y Txu$Uh;UG0pЋy1QVal{ZcNsG ٔ=\,dd %7/܈aORy$K[&ٓAdoRB}Sr:s:s:s#V%WJ®mϜ\N3${:uf+:h^b'#iiAa{hN?I&ٳᐶi|FÝ\dOFBiq]Hwt.dsPK1?F{xRaLQ7 8t8  .Hj^5S؜$O:r`h=S==:"Ɉ\#[!.Pqh.TX!;" gS"8o?"WxF/>O_>O?>}O9&~Cn4Z4g6!4Y;F.!6.6!67.jɺ^Yfb1Ql؁3oH7}3pVWW9/!3.3!37nc-x U/46y{b\zzyyC:! >/4ӮrvhOZr6s6s8̍kχ$ʁ0Ī3̩㻶 H,A2w4r/I")HI(KӌFA=FCc]cCcn\Gcxݭ$f<}[ɴW18eE),Nb̡a 8aiF&F$93{փ A|R3~u_\1Эp%vfjq!&@+ȞMAw"7ÏӒot$SDTU^E7}9|Bv `".UI+rrrZ8LV5=v(d7DEXuUI'p˱amEti֋6&mLRj:6L*toSvj` ^M8صpЖWpL(yB펪c!6l{Ȣس) W3,,./ȂoCo+;FJ,l-glMdӖIrsssB Q=@ec&Hbh7D{" g]& S%Nˇ]PcWP,{hA\׋5F :e>rq9h&l%ȺRh[DMVMyiJ 3D#|& ^_4 x0[qΥ|.QyUU !ʵh"ړi4AJw2M\{A64{}M#4q^"CTy01de8du4+`]G5YybR${퀂1@nE,!(222e[dU ӑE" ̵c\@QO<'Ox^NWq) t֥!T+&PX"ȥV%f%5Eކ%k)Ѫ􆙱Yh;:jrppp)t6 }l /͔"; '䳺fLݥ6?~v|xu̒]x?F2ԲVo}}B2 V78~'KaY(- ;8v;8;q톤oa3'P;k!tGJ·K-8إ]!.!7Dcmf|ńw̗_ 5|yC:$T6· ZpZpkIn̔]-b,Z\4 I{:bRN;Eo'P)hYoֻNPO@hũ7Bs♜G_ODW%s;Qz1<F^̜̜E9K^4%<9&*GZ//N(-Z@.^jrz2s2s:̍PvFbZGP9ba{6ub+~[Ѫ!TU[49_tgb˩iˍk}o! Կ = 3NwPah]rrr+Wu[vFxe7I|?-<Ro(ASWЖSזA[n\|V $} ;(;hKRSp7T#7w/$/I6HtlAA'Bƌ6$IVJF-ʬ"Q}.xOEV'*)BrP)z= 9u9 uRZojm\#1dߢ|}E3ʘPI:CjvGe `2t۞ I씟[o'W";"蛕;J-~ >>>=b; ibϩ>7.B2H2rzpxC W;A| 7!{*jqzH8%ٶ(kQ%v})ՐSӐ[ .[=w'N}2o8A\IcUq.j&N] 8u8 ݸvg~*Z6xqMRZGh=F=Pb\cDr -zFCsSA4n{6{pKB5@ g#8*يs\=R3nmrHLd5{3 3&C ]:N:N:n|Q;*Tʺ3DaC |QۓAE<>c ET{=~9R 8u8 ѱ\b;$ 81SP^ #S-`=ZTSƃť)/z(ҍB[{h֢Č %V@6w!@S5JCay؁ bsae-{5I]<ܥ<ƍl9zƱN[U9"=EN1سPyx ݎN1b(+6>P? ćo˖&جlӦFW\ۤn oRO=*|%~ȿ8нʺUIN}|?5N1ړAmGk | )bػۻyػTm?X܈6ewq)/):"mўNV7"Ӷ uMC]ayh]{Z|io6X 9Yӛӛn_̡Y~oidId򞫡-)*k* 2<] Um$޻z 7m(JtLᕧo>`7Ѹ1C]`wvT!j·?ZkIlJ@G\ ;iT$7n1 o^47[1WwK!.!3lkH%iLז7=ILucM _5C]CmT#mI[{Ƌl/-(F5`O'zv]ur۸/F\cu}g=kM~|Wj|%.h a eĔR,Ll5}äR NGҌoWXby{搭}v7ƺg,dXm9%D^@2ܥ<Ƨ-^%o/@"6%f|moH'*ySnԷ)x9L 7w7Fz?=Qͩ„Usa.rxC6+?=Ϊz4wAFd?,x`l5^⌒,`Ƅ+d1 < ֝8i]Ja, CL=zؠPj$&Zzooor"7]^OZ%@9f+Al(oYn| ^C]ٷj5l^̲%CӠ*gSbp⻓?fsU<>߀[٪_'c\X3a8;y8a#2ޱpZAށ lOA!,ʱZwdNoNoNofhE[` Z>a䒵Vzz|`{:39ݟBP?0ܝ|pzr|mפv7`>hl'S_:Dc¬ÇKM69#CSzU}P}o' ^Cana6*czޑRjQ-S'HZ7ͨ.(Jg)~9K 7w7}j*\ʤc h'Jt1@E Lp%=;EoG vu$1lm|yQ.9>VJvDXg{uٔ)?6+o-٪Npt{!:H/m|݅QfHjixCUlBŞL=ppƶ9(U׀Ưہ"wJoJo#!:<-)iXX@aIk#og!")kE끢Ӊء)z7P`)_m-x*QaP|5\.Z'yE%IʭC3Z9Zu-OX}3D!E&R'S%0qbp78Q]$q&Փ7GRbv<:ϰG؋d]]S%U]c€"L&dD|olzI'y+ӚX)a{y{ 5aF!HJP{;b=` 'S)dw (La]A]tvojvovoW>a3BxR(].߄PN-]$>zBdlJB[rh`oqY*oυ "e"@}6 hSF=o+Y=袈 ᝺dmR)YB-p>ω}}}[4Iw [S%@)Q9O& CJ荐EkpE N]MMM]dE|@v{!Bb@ʢ.z|pt2+ ^eڗ+L;MM;v£a{h6 pl %8v p?.#&Z #vK*JF=(/skjkk;=pB*`=0g0Vm-O&OD~@g5z~S]S]S]6o<t555mDJz+FWɯEdZ^MĶy $!͛# g%$HOw9MzMZI8d?_4b*UX{RcSE^S^S^k+xK,xR[-EL1pH^H+dBқVoNZI~\bDɀ,td]y-{TVpFظ" ѢOGZ x };},<lerk@AxuNO*#:cNE]VvML{R+i NvMvMv[!np,4A%P(ZD0^PD}2!ȇŎU]Q80RBD o=]墅D`'2R`)aL¦r|t2#x-D_$<u"lj"lڈq;X.ZH;+֣k"oyұcZ_)ӏ{9|> ~oww_~_?}y9?㛄c w! j&{rԍ NN4]MMM]ŭ\ḼQtbQ#PHXB4IL褃kU L9{y{]¶"314r'SpI*z|IlІҶ!m h(x"mQ;9i=6eW$4-1Ur3,5eWI ;khC ˮ^ߤ Hu燧pby|_}`18h; .kvI&qn.q#W#cPSSkGiaaRM)!}2fdX   K+ĩ)ĩ+ĕ >- `PhbcNSF{|o X9j_8-TDAlJw9~/^FZUر9 t rq:FɁ@@@\b׈E`ۧ-bF[%dB KC4yS*g>¹©• `:NMQWԖv(t*D ^d5x^mT pnp•(gF%l^X:BW2bC[ز&X ;g6>R3B-R)=Z!yoWW9k]!=He%$^N---W.Ph6gҹ[#RQ-SQl2ꓩ,ҹ S/0 3][M[][{ڢ q~嚅,'>R3 92ө}5xĹeؤ f<ZZkr_n!맕,QvVMe {ؔXAK VH'/뫵e5v:Vtk97k9wkv^$=^rZ"QsE\d'z#]% UӹK˹I˹K˕h&|Ѽ1/BNp=A,F49 ЧS9|BE Lj+rnrH@H\4^_N*犊1Rq1,A,ëY#B Og^d4<)˜˜7.s-g7Ӧ3hWTH)b* >ő;(2@qU|5`,끂QzDc,o'̹̹̕zꖸ!*)P( 89~j\g$d<6hH#EhE܁̵̹̹ϛ 1h,$ A1D)" qpПNf4$ZG$" &JO_wӉ+̹)y0W"]~nBh!\'% +)Eo=X4pʟ d8(Krh-T U~.sֺ߄O9v~SWsSsWk#F IiB/wϞ^S'E'g%۠ ƌ]trnrr!(=_/[g/u1LfYF>q+E ^g˱D-_n/f/獽\$ۂx7R9HU*UHuKh"``8?Bz)}&l[#:~p^:-GN W.tP*'[ÈGjo#{A HdJCķ9!!";_|b 3ql!B?_^4">X^>C6{J5t>Ati87i8oZ3qL l Bk  VjA\BIMc~!_4 ^)5?wO|1wumBˑUZB"Z5G >ZN.&.Vb+#J6ج'SF {rW1oH.|:t878wzk7_{ŵ#QF&8߂V8^4eHN*-R L4 [ ?yעM[ce N%|~+]q茓{9'ފJlO_. ("pg"71PGqIUyZO?qE %3EF ~<\iU`}!^KmDdy$jlA?hڍ&};_4u$I pѧ$1c)`}:X 9z,)"wQ?nGE=JPΙMtjz!JhE \og ;K;K32,!?S[IBNbr|HTz0Fq׵v(13!(2i:@LqXn]L0B}sa=5?m?0g~Pn>FBbn\4 }:hM=4z6MiY sv ա-]:,JB*f`}2Lz&zW`8x! ]XaBk~g9UVc8N` jWjK8N2N$\JQѲ'PL>+lpmo˴L)N8N` R}h!Nۙ (VmӦLh&R;^k,нV2J ۩ 6eؖv- gTf1 ab`푿w/Äi JZ6Ӟ$עDTdQb6([J z)JM)w'IW%&h"b.z~D0L-uǺ¦4]LZ63$?RMQ0 9vQ*cjTC$'"uH**to#2q2hoAJj6!N(>BWT*R QۀS.@Ѳ 5x:VP jX:V(CxF X;e@beL$}2e-9vģpy(ӖVdmwx"uP=f }vIֹzB }$,z|Ht/wˉ›DW$5H9_\8 +% cN\BI 3YK#Jo(ҽcS7zO(7њ'DӣeN,&pS܁PP %сJ.<Rw 2\kj }2!Xid WܹWP y;)td ݄@!#\1nW>Ȧ\QsE2]tܰ6X]{`R!rBڮ2uK隤tF6֖9—qrn{akL-yWSI9ְ|/C6 ^۠dH[/zZPb!0_%mlnnFr:QBf88y}̰>:PJLP] EOC{e@.F)3`~ۘw+¯tkT֖Gt ]l|n=c3NEE EyC|!1IۂV /T1 *]p|= z_>=!{7I)(B \QEWRo2D (hJ)eA J~oh~o~ot{24ХDAnDO&H((R3JW{CS{CW{/ ZF*;"6%REOȒA1Ji5,=b{ya2 ʵz_ѱJgd`tsSB߹:fK2\"K3tf% 70^iGF |ҵде5 AYA #)E i`O&xʻ"q/Qx6(PK6^(wȱ@iGX&jXͳq=O(Dg8y$<ܩ' ԧ ɀ$Iһ.DTVF?qhqqlq*-$ g<ߡ>SB,-t ԵƮ/"<-,㰱>{2Θ N)KxŸшˊGlo'tTwvqŽuχ⎊ *Qz.qššu kx'ː:)K1BwƱdZqqg0@W/0D/2 5CgSv868lT'${ ߸a)E(L=liӸ"3y ]c;?/q{4cHK*GDU]X.c6_g.&..FaNp%%3@uy%Y}2y(o;=J N+"""{ o<\VN;aMh:$O$BQGUbҝ؜qiS< $mK`%3D}?x!DS.%QsSP9şktolooQnoTx"x ty#,_O&* Y 96|q[!]tolooe܌qlV႒/o(dS`| t5 @[Z{:W]toloܸχ7f &!qV) 9Cӏgdc+)*O۱4c pô*U7;}t]h5O伤%v:Ot767v׷z8{]<Mf%"r>%T %bUbXPوf Ix2j\ӌe7K%?!Sof,.hkG ړ!4A$t,8s gÔ*G+ôeéS=K۩7(M)P#U fbnK0x a=y=8ZN#0nTy7j㩲ը^۴B|G6SwP/^ꋺxӯP7z!*7&CcE0ZZhEeeW7U0C7Ǎa6>bpt^~͝ӘYIR0~ U;#.sZ#?_>|voCuij䘠%?prLLhosLnu0nsLࢭ0" :t: ӺyR::صAַqVshI~aN- :t: mU9nFY06:KP@l>&1{{: KrQ[3hEfXס[ac] 0xN_RK-bW[gԻ?1ȵ |HCݭͲFъdA~ðCðg-Yx KN٣R=F T3Ld $=3?nununu#% 4lju@1WlUN!_n0C#]E{/OEjݡ$zFooЫC׫Fn\iGvGҿL60Œ k@"سo,7)(vgLte%(`ǍP]@[V#wWWWm(4M*2f PE'C}Sk@ER4[7bաam"C?eW5yh\_ͭ.ŐC +jў:VZ[6+'S01qEڦU+!l 1жV1%=&<=F}5*^dIQɟ+E9Hx 1^`M,Fd`es;/C]C~rߎ/+Q)wpK59삲)~wuuux7v`VQ9C:F3vo 9 dDآ#LqEYo#CƳnY/y GjY'*0pG6 گ ȟ+sQő&9ZVf;CfT>J֚%M,ps'C` $ݪS41Х0VEn]ZH6ɃKGK0~&؞BrE e;&]\5Х民H+/ĕRs.We@ܷ??oOrZx"<?XkkPana7 j*KgP3#NH"_rEfZbx@N%: C$]$mLDaIH// 6Ɍ3(7xWDwdk OFNj ~ AwTiZq4]+?(C}lI{jJ30إ8!qWmȜSLY,@>=p$?= 8v8m[ne!-le{? D1S)ڟ#=a;S=-tÇǮǍV%bW" a{QD9*g5 ƧM}:m*_|yKo˵ݪZOyͪJ`s{J[ӷ^0kpcwp[PCve5LbL2D{2KtYIpql0Cg]gCgnoa:-dΜ\*S=?D{:%b69&OCЙcיFgn^ (ee[T!&'OLxr `wdㅊ58+DP%! et Q48mIA,؜0+׻Ћc׋Ћ爐)f9,1&=y{P]X^[uW+ woS***ndCQD}h!HجV>!G/U8+`O$uaD/(G֧Qbhűkq (\y)4c x)ОN2%rsEF yQ?C-]-m֪Z Z<(b>ck't~:5֐XݔHDhÁ+x~|Wa%MRZ9ơƮơ6N25SU߉#p(@HqG2Tr@Qإ*P oooh#yV;yUDa}#2A[ڿm#h35zyFzSK7oKm7E)!WO_Cdӊ6'm<Qwf͇0Ƥ( +0S|dwG6!-VV)}*+Ђ1d>!󂋩H;e 8v8qeY^&ZZh쳽| B Zdž<4ce=XaѶ&)BǍ6@zs>'p#[TvM3T\;x6%7T.+u_sMMd 4q Sԇv皡Ǯǡ7NOmܥ\c֏PdTj\Pmo_}9އ.5-~U!"."!"75t& ȲLr=#; :v :n$=Θ-ţ\(&ߑMW~LU%ALd'oI&Wd}tfXL!{3 9u 9 tf0#PňIfllkF{2T(߳ JDSAC;N];C;n^ss lZGwQDI+Ԏb&`*!Jt)!ϸManǍy6>"'!Fo텪<Ϝ}?9YTHEI3Bo ;'{!n9eΩi΍P(WBYv^b)_dX-mhXB)]eM@K[>UHtNtNtn\g Ebc(2(=C7j͚NROM%xݭzGX6s㧨8tUmmbz*{.F8waF D^xu1V/![8IV 7:D ;*g,7MBh{wx$1e֩i֍sR.w}˜0@vZ/ }Qsh ,w׋pSwpWeg䗺_uJBCɌ | lHkomRM-S3tuѭF"NjSJ1Q `ؗPt҆5 X 30P<ٝrm$<%t֘,Ѽd Kl@SPnJ$K 9u9 q~˵) -KŬ\ч p aM5^z*eP Nqbhϩkihύ|\D xk-  FxEu3hO'P.rTn+YOd풮.+==ܼ=RLx4a/*Tr&8PHlZ0T8,$7wrn]F,dS6Vw! 1KJU#J섟 ~uuu$Rg!Kh~!:L36(IT-ZϡD98ݱeH֩KiH֍$=`ղN { 9k:u*SI-W^K--tjuu(֭vܲ@SR>=ӱ*׸ZC z 7(K)fswFL kuzq-7 :u: q|7'aWv!Pqɴs`< Hua=3-M|`{6Oj;]uM35Eq?`tɪɪNm&Kg܅/ØNݘNØn/Vkm!0dVW~IdIHЧE9EO0CN]NCnm)\{h!X5%D*>3Gd0${:$Ņ,|`{`$$6tz?8\RYS=RPedϦV;l`Zu\yQ v M4a9Y!lZa(0dҶoS[i.*Ô֪Z0ZT!2jvhЧ@AB A9uA9 Aq|6-t!6$R9}aoPCg: ] ;>;4 )9u)9m56 3\nrYťu6Ab @XblX=, _;=!rTMV GϱSHUk{S :w: C.wҾ$"?]YCoCÚ wSѳ\R3j{S !:w!: !mm4^roK*(*0{61ך|05z93+O[~f;0s7ƈn\cMsSJQFS\?{6JyN=/$\˟>~41a7ЄnGm6M&*g\3 MĎ;2_女NNNn8[MB@O$ ޞ`tXi C9wC9Cmet>M|]ZXGn{G=,Į\zvG/Hw=Z}7vrZmiX3۫l'*)xޞ5>%W-/j>1r 9yhrr6+)ӞxoБsבБ'z?ڭUZ+Fer ZᵾDG_<nL18R? 39w393m%YKE[QZ-639;5YK%p`O'p?j7ZrB?r0MBVrQOdu+"N_'HpGh ܌~7(bxɹ{y%7.m@-&2R>>I{6!TA„ĿNA˵zx{)}Z2MV5z̯]vC~0"2C]Cne?ݮ$m_e#Iȝ~30vf c oJ-S=MHꚞ9;gJUJ$ه^r ŗrC9Sv6Ks=SjDA/]^ݶ}-=DvSM^ŀQ]ZN@ώ;NkD6?^ ]-Ã^[e+cD|C=B@-QL٪~-t {vB7ގ{f ;f䔈 uZ{2(G#S OTX+\D?=exm "&Ȍ jy p9@T~6mbOG!9&%e&t {9h͛ox+xT~m #L: 8Q"hwAaKh"XW}"8SHS8ۤcpF/Ín~Pvj֌j0ѱ 2վ`ړɜd3u'3i/8ܚZDaI/ݒ^%ݶ TvFY(C mEL=5z7aԏu2AÓ^'<7yXW=,KfLld@.+?ۅW1~cW:j/Fw;TŪfJƮ5{j2rU2uN1KKLeȞLnt Ɍq)VUi* S{2L Myg)Q3M.83:@^4caȞNmt5z]dmU ^0C^F&3, VilmKQYCE[BlKԾƞa~OhQr-h9SaWӞJ~BKaP*3f}Zpڱ0B#wvJ-XDD=~tt(4V78SBjƒH.3 b{6EyxTcv[sAE7v`f"e Z<1ص8V_'iF͐'vL!@>6Dd*$8  P?/'mmm7"bq_KIEm8R;A.ZN (kI{_ME[BnnǃݸsS$L:-OYգ'$'gӆh(g'[zEcB(J*u="P^.bX^MC]Cn|2C8h3a#<1s E?J~ Pm+)D :v:ms&,FE!&QGyj 9F(rr"=%:"otLJa%zFWIbԱR7Ir'/[4_Kp3y#oU<$=6m1[pAKHZBjoΘv^KҥNAk!fԱqԍz([CZ]e֪SRif=̅%}:5~EU`%z}uՐc㐩VFW(뫔ĸv9(dƔ3( EMf-(-xyC:v:|3^CCxg@avL ^~;D{6B%3C|x5YoxqUQ'fXWީq'NR> jrvuvuvuA̮`=L${׉NF=t{bsDdJ%|9L :v:m:nEnzѺ Äͩ.\1©RČZ;0jx%K,eU5t}Ypcwn|\;{mwS#יH"ٳv.8 >}˭UKHz HJJZ+饆>PRJ/5x !9v!9!mqE׏2zFzewrh?jdž6 ˔rrI]/FFqC%^_:r7 S[j-*r*r<֏g{\lS "#iO# ۳7e0)O\bL$?\m];%59y. N1\-5v]S???>N1f9+llZb'SHrBbgbС~Lo_0NNn[o_X^C ʡQ =Kz>8ZvGR!Wltc#Ca-DTV0oȫ29}wHQ^nzNom-H d}E\,luwbЩiЍψ΃)fPj0+2(2\BO %9u%97鄶vvFPr9TȋU3 zCrCVַȫސB.MNV q"i+$vyO; :u : } I ,f9~^zPI$>rc"1Bvj+-|9 9u9 mm?Ar\.bs';8Ĩ4ՋַdOunQDW.3o+C|N]|NCuU|N3j^1 ĀL)ٳjx}Θ|GZ4⃎>\> bIzFrFrFr+#<kf | "g(V{2GBLBpR)ܶex[lS:4N<cݬ] # `#Qd_bŐSANnWX,Tf99! "){س$8fAB'a/\G9")RӤUuuEF3ФSפФ[VjZ.&B8N4< ҽ2\ÒNݒNÒn[b "4c nGDL˓[K3eCiܢЭ545tФ۷'ʷg̚t$L>(ids~Ι|$.|55E#ʒSDӤUH]gLQDIyv ^ÔNݔNÔn|F:Qe>ݴaW3p`G{25yMbc.HEE%|9I Y:uY: Y FI v6d饞xr Ɛ'=Hӹtki1G<* tt:ҍX*7VQc}3{6j=?CS3׽|ݞ?~\~W9[O^~řAQɪkd  v0j ^"2ԍ4TERc 5Vͬbȡ5hOx0b<@pʁRiZӑ!p.p!p7bW46{GTIs24hOG0|jHvhV ]4CN]N]TsHip;BtHEYPDNG/CN]N}munŠ֞1@ڃYȞLSWKŧ_N`_~O~ϟ?~;s;(TKv TPLU^>D95ŐW5 ѝѝ̭;c1Μb-d2<'ޥhvLrrr7.S0$՛ ؞N nGA. ;w;Lq>v=]|$!kK ۳ t 5;pL~ o7E| 4;[5ˌ,p]ghs[eu..==%A^#&=>j_ 9T~k—sƝi֋6., ʓz)a4&!Vsc:-xy_=;w;G?{ڳ[f PaӼV;N.Z7ү"Ős[.ک Blpb Dqd21)M&:acs D{@P ;w;XjI[HLªp 2\cg f  PAXI 3ƪ݃hOn`*wI-v;Bh+\BWU u;wu; wp>h)MaaF (ۗ3HD{6Bi^N:\haZ}3uU,2@Uu0Ka.g!o.o!o7>B[˪㎑0V_=^{'FǗsss~ؔEbӹ:>RZP/ZɞNkRNZo_jz|&w&w>ܭ{5,!Kg#3;ny+;%O мl='B.0<}D("Y.ۗKAmKd{2_js0fWg0O5 a;wa;amQ%ST/^r]$Ȭ;tk$JkAX砗0܅|[8kn1 H!s{=23̚rk֩pmUnK9S'JHh9ߑWgu@SU:-JyRYY; E'4LLLB]y^ٞ$T#GuV{2Cv^m똢<W,S\ůwtttۊP6l >=˶A=BfTfEUPA"+j1*i- -|t/pswnE;%\AP|*Ĺ h.{6mdZ't-u hH:+y ̜IMVi:ry3Q/g!M.M!MY(x-bDPYeО>d>"Qfhӹkyhm +@5==;LjY)Msʀ ڳiT!W-xsAnEsUC)R@J=lL>TԢ|V/3337.*c%K4aӘ M\up?s QT8x.GD#j쌁_bylљHty ݓ)Se NXbDlO&si("=GUwW$ Y)ƺm_wμ.FGn0*xVLHs D/ lO'BGHʘKv.+ۀzb}y4xc ۛdՋjl 4b[KVQtlqxg:ȾE` /[r..hpa}Fpb " CD\OTTW5Y[ ORi[p*T\—CEPq1fݳ Fj-*lor*Cb}S]st堮ۡϸ.g0bn3D#[Oɭ=SHrͷ[.k6 iǮ}!ō{ )AH3#EhHa *iĆ1S{%R)Dq EHR]z;Pn7Z/7TEDS9ۺ:dV[-RL9DzsM=T[W?s?T(GlAԐ¦:f*]c NiSNI 3avH42CpZ2\(ݪ0/G!@#l o5BX%' f5gM'p;$-C A;K0:BBvɑC{N!=in c!hgxmh` V 55<O;<0PgҒ*@ RET(pU 1 +2:]'IF< ))b-d6|PN)pzKr$B ?@B5ʜ3U]=jh#Hh!7 {G:kU/5x;G;€! B> ;w 6nv)+lwdS7~Bx- B-@L5 x4  b0BIp\W61x ZP",њ(%H |S]qD,,[zӱ8{%nNVrhs=,T3K+/bo[ o%t1>Dld%`Y"Pjkŧ2\;/Qj]DdV`/4`"u&T-f#=7l.Zv$v-]&>8b>%zD2߂pJ'Rx )CЄX.yI-fQDgs1סE?u/+"?a?R`DjH|`"6`-a]OyEDQ(.D#KP:k_[mI®Cω xƶQvi \k}ˑ")@ ՀKθxpµ^Z+ΙRuvK =>w& *Z1bE@;PPla,0)D(PUeTx'lsW8{"鳩&~MY MMD`ւ}>a'fOTq?7qlljnQ\O)X}6a8s_9{A~/c ԇmB*46ݥkXC3lm4lxjOyKC3JP !.؄Hp`zːmSmӐm[+n6ݩC$%" EYҧSxLJQgd×hbmS`y[)mm:z;xszp>o;>淰'/闇/y(kvʿ?4kG{ǟ>}L3azLLto!M ooo-T yzzPDM( b"A ؂5Oa E%:SMЂ4=|9 7u7 ׷rQ03[FYB-r`Pb^5x7ʔU. Z2҂̐|S|A\;#k`3,/AF-G&6.Mo )haWaFmϪF60?n MJQI":h$&]^NMM91r=yKҵNCO&XKLx%{abX[iX.#+%v%JlĔ(sr3z\a_DP-Ѣw5x컶Њ0J(1det}+Wt8 ժl$ % 6ml gSi޳3O!Ir$IMMJY rݕ򌓹#Q_*GpG krp׌.ܡXA3<-<9‡_7`RXB@-3˰1.'$l0gzrLzq.)E ()v7Wtz2:sg=KO-%iTWGLj}Q׏p?Kz>r׬FK&?,F0& ٔ!3S,8@wk!굝g5,6`-`4褓>ʖgXO{%]@o w$6h^S>lЄ,e=|9  n5 лGCiQ.ϽP_{t0%}&3OtvP+Gc]7sZhS1Ȧ 2cyg5ڬ~3ujVtR׌G*h]@4c<1ԥ4ZK"CTx"+7Sy,dwj}D#%z]7ڡ*ԋ6z u]Hjm(! t6;cÉ2aǾjrVtVt:XѕB׮`fP[ѽ]g lj׌wй/n'&F'E ӵM0ۛXgD-|9Q 5:u5: 5r2E;!0,HWѓ'-p@QL=wg?΅)rSE_+]7//ʾv\G#83uopEԧ6E$hMe:J.b8ҩ;HW>![ygPP;]L1:c~OOyN3v矺`޷ !OYmtm&g'ͯzkk DS"PSWP+'& &xe Z͞"K |L'"O͂SNp&= ȔPcG 3ԭ4캱kdtVh\&1zBOԋfd>!bNvpfC!A Ϧi Ŗq*?"= (8q|ç//yY u ۨ9{4@X<SWs_d>uʺ9q.i333^=µ|P/ڨGݬ\ %*gكEi'\3괅v"Z=~ ^;<܍t0+)dViJ3PzlJQWvC=X lE??<\r_/2O`MM:_at-^`5v9R y}FnJ'mODҧ@򌗩V1"yW뿸;9t%x}Mp,܂3J /I 3~o͐skqnun.* 4cxа>P]a>І7槇m͝͝]Id hsG"8[f~mXS27gjvI=|]N6C]؀w܈3j;e/ul gSil 9los.7Gĝ#L=}s ơ%y wwwA΄kEp֝'{j{&yF'j08B,vp=|9G ;w;nȹ`R"<mlO+|dSaG>PۣB g$t T7o]ݖNٗg0}6mľ%X(!?xe'XۀK-yYuq(ڿm7ڢ0s70+g @B_"ZО)FS#hNKTOˢ@A38 @- hC]Cc.'Ay^4aކaB[S9.XL fT.J£ӧÅfM@jv`G]ÝݝwTPE9BN>Kb umϦuBnN7M|uMOߒ0tȪr=4y:/(xP n02<ʙvgv|6.ȥ8PdoPY^111]7\i#)n2=Q%ˠ^^EߑN2Uv0s7]o\üv^aGB9x #+EWg|#n@l&Ig$p }1φv ·%%%]9EEڝo>щ ΃>C>!Dwq"''']`AMFPu;M>&C+Zv=x9D O:wO:<R6t(8;l5*ob}<0}6d)X5vL|#@ht֚ҳ{GkvS2mjrtttq~PkҳDT=q>ףhݰ%tɪIIIWPH;oR ֓q*lփEԧ6K5v^%YAtt>p ףU(+Ԇt"ከϦr 3l Uc=Zz *$܆e-,o\23ڒ:ހaHnHaHWKfvYfԆ]>%Idjd S`b20C]C]YKjJC.d%3ǤOqH&XPwSGY^BSТsעA]HZnB*%Wg 6]u[@E+7.Aʒ n9ȐKkg\+MS@PQP TRyt9AOw]ݡP&KrV!8.8!8W7Wڧ/p«#MZ!8mE%), nm I/˹E\ߜ~s?{1d,q !=je!b헿|* w-{vV[ޖEOOuOw&/Kr t r&*Kt\YRm ['o٠czѝK F_! RRRW`bNNw>Li\Z$ GC>Ca˾<3TUrP`n%r]b/Eyr pOT>$0r\ }O;037B3&n=ʤ%vFw7Hfۥeە3S%k"i'ɨ9)ƍڷA)EL 61҅2 ,T7d5[f2:=XLθNeYVrD?521VPjFG>[T!%8z'7c99>bԁLlЦ0r0WP*W36D$.OϦ!Cǝs G@^[L\n q"mrizv̈́"k6 x)s ;t; ;rf:)(epr)Idt]DL[p[b˗ـg2|}2|A ]%elu6Y /Z$J(WPh}$tNȠ2\]rp?/عvsYЋ)D '4.SХ$ *;(~Ge3z(6 t r^U}|kݾKQj Ƹ >M}c>`ǷdU SnIbߺO႗׍rF7:V'^d*x)y;~lp= ~#`K ^?=ƨUb)#._qrl b 3 ؟Uĩ ۛ]Bv}E-r9L t rvP_)k(3֭(L(Ee\J}.H&X\^X}\-MeX٥[eXuc-=븽\ Ύ Hdo\3H)@kzJvJv9(ٕ>\Mqg.mE# -'4CjZdz"E+?-pKwp+g#B{(URܥփ>-wv (VpW]]]7Ȫ0=\4auNQ2cOp5>Yx%x;D#02rпkqaJXw. oφZ2zu6pfcQ xFPB|"]]]9CP>uv`=m'-|9O t nՅN#oxE;?wI%rշx")@&!Zjl$-Z&..zp(PB QPQM9DAV.c /NvEj_cJ 쳽 7M/:X]Ɍ nBm]nt3tu2tV#4JWdaqNBL4ILlV3>3@M5xRM0A5//g0jV/Ջ6RV _Vm.f$XTh=$}:mZk"PW bxbx9P]aN4kԚB>UKIϦ^5?~%^kGBo_ܡ[X۝S.o,+Yx]׭;Kalw.خ#(:aTᅂ'd ebPAOhD.l!l 7_)=픀C?[T>jڐՋ6>Vn 1.<7 cv9ەOh]{zsTBBRY ٶ^CbN{Wg@og:yKi]G@ (ib]!RMp[T|Izyz1Ya+~AdO& % CR]Mw]6]0Kz}slfY/:mz0)Y!e ɃgRÔ78"[}:͆;oW<ؗ(1{!vnL(JT(;x0k?oi[mgu#HntէV9pyU ZrztnuӒvӶږ^cc<݁.O&X-$QPK`9 Yt7dUZ|/{EJ"2ޢK6GLd-j!}:MHp{Z,uY;u#$%x;T=r_ue;(ەOt=A'DDb Xڹ_Ew ?՞GNoQGQ3:MpF^_{89n: 1ЧkA2 W0S֗%8p5Uo2ińq}kʐ.sOCneǻםC"Rl'C!Sج1T6;h,◳0nvOndӖ8A%.hc3K0 f mUhCt jD^%r ^5ힺ=V;BMXH=r 4grCjPr>chrdӡ_nG arʲ*=u{rw+%lѭkR~lO, t/O^ t!2(ݕ.NbxSy-=qKį,mn !/{WKqC)+[4ZvSzl14kAnT@c(gLUT0b-cl|*%W0x#>L's (DŽs=u{vs(Y;*c7CĠZ`Ğ $Ɣ0Épì|n9/arO䞆ݶ֋6r^ Xr.Z-bO|G\CNq'arO&w+@:ս;N ӳg!="Wd˖D3.v.rɖQ+ڪrp{FcKH\垆u0<ĵn7Tsc8bjlOBvʳ(XN{PQ׷pcwr-7tϫM@ -Z"FB>HfLv*= V]wCE.h+Zj!s.sOy NKBvJ0*Su߹0E"]QO篈"&sG: Oڃiйc׹йJ_ڍN0zg P'2hD[T "ho U8/ЋC]Cn[n$ti(Res9R mY/|JJH@O5x9Q ;v;VsvUJQMf;C?ZOm}o We{_^>pO3†U+G(_L3ռ9NH %|Ǚ!_._!_7>ΠͱgXq23h;pB!eQ }I5C2-z}Րc㐰g@CU.Z2`OwDjqF2oN%p(fر `7.O@1f;bBB=WdS)F;~;t&F4BMVHH9F؞6N :v:gPnp'O|'=(v3db.IP+O =C]Cn}a>\/u[V+z({\LU, okΚxe*Qìw8׻p&VWu쀐QtNBF++GMٳ!ĬQGhv@H" !B>Cj)U ~&lUh߯SN./[ևJw^|w)Bq# N;3δw8Z9E!m.m!m7Atp܄6s !NJM'ɞx&ʧ'WKN ^_ 6t/Lvе[ySj|1\F)Ӵޖ9ڴJ W{ /}V~cd5a:Zre#LLQ~>u:ͨ)::: rX??7ASa@8ŨDna+i}_s .g*ZY?@ce*q]gm Os#mxPqE:StX!_N5kjAäݤ$nj: lRGY Q5ٔ o~BU6PA j"sMڍ )"5vFo#ca:A!E ^81xpwߒ͍Sj0;8 Wn "Z/x'.Q\0n0GsU#Űc㰘1^87JwTAs R= ]Rǀ @U^^^n[r궯Xa՗82f~lOG5$3|}8|)H*4T=D6It+ 1gg}۟c3u}Yʿ1rE6Oyo)nпG^QLfP'olByom_ch(ԩ+q(ԍO?1Q{9!i`3GP@ݏ>Cw$DvE\NBâNݢân[qeliJH DvzlJ2ʮerAtSrQQǃGݾ3K39&]I;`&_MJQ/_g2wC35aU =ӌRfBMT?$Z1D3 krvvv+M~򵋒(FlԓeT }>xjx:E/oZaonoao-O2V}{ H>qE> @={g56Y*(9aonoݾ3bL1@J[ lꙌ:L桚VjZ {/chvٍ sϊ[ pdlGnqb۩iۍH׌ډfq;%P0 ([p"ؓ) "dԋ,D%7;`Ѣ׃зS׷зb oݶ6U JyhItBfZJDN)p-tqv ]JQfw{ R' aE"qZ11*.tg݊{,Clν|6,0C%YopSwp[.9<Tlk*YdʞbC`Oy]W ֏PZLZS_NâNݢNân\p酢ݝ ȇCŌԏH@K$iFj94 t0@I;JJWaSZ4LM4Lw3;QV:I #ATӌz"2Bxvm ^ÉN݉N'\m0h̀T-V)Kb)y){UD{2P6,#U֫F~=mu'\dE3Q6-r9U I9uI9 IiW-gÌn5U%9dG"ٓ%DqL՟O,1,-4,VMMod \ LU ɞNyu>Sfc"oVP 1tQNʓr )"r& =lѵ3x6;΁toꚟSB%ǫv#ѭ`CMQI]'˹fҩiҭTym 73GL%j'+ri0.ʏ2,;eKaS!G.G!G7.ʞE;jGs!4!Nf<?b+ҁ*UʲZtZ^] 9:u9:RCxJjrt˿~E6x_?I' UUXa O4I:zǃ^y7AQttts/N9ޒZ^pjR ]7ٓ!-%v/ЂjYO=|9[ O:uO: O}4[趻A(J@+H*͘5R=ѻ@QS%x,R$) t+9gPϚyNb2S$JM{ȦN+}46U#G K~ h~t2>GOx:LDk sCoBFska,Ds Δ,d ӊ8JcCTOYbѩim NȥhW//T3M3gT~Wm2tCv 3/Z()jt*ZCyMv5:HJR;~lϦSxx0ȶ\oRGn_* hr2*\86-Z9Nd1LM4LV#=3FO(S.`jJesG d먼fW/z ĐF QS` g9ug9 gh'A؍`as+!)ovz{:w6`cc0S7Tn\\YP/ڈvUynI9=t=X + x4U8?˷؏4zX ppp+5Slz2m9dR>2<"CpJƅ)xùimKN*F#ʷ>-2ډMh透9?+OOlXZj;vjB(["X mlϦv&HįފwҗW6t,e47]ޟD$.lm;bV0F \Lj1Hpޞ +Q ԉY3>d1de>VS v ^0CS]SMmR8usT,Z~1[ʁ7m \䔿;*+[E_A,lk;`v1z ^NCS]SCSn|B@mpLS5N}m'(!D7d(kD)8ʍO=|9Q 99w999mIp!zӽE-Q-5:܃>Y(h<@o Nfh zrH}a۾:8C5ԔD":,WD_r uoMpBwnAS'ϵR͆IYقs[y.ǝkCuֿ Flx280gN|8 C)s/lj'''-8CaEJMS.uՌA7D0^yN;~7Rmw8- tE6(U_@P6ns>|9hjpOw{BQ;%v9Q 38w383rq*dE(J+DSBDqE2k/ DA&m)~=R M8wM8MmťNx4K3Q(f /tY@o:p"Z8*Oѻ"炶S &tJ9ӊPaքGA(%OZ&yNܪ_TUh[(nCJDlt-Gbs0s70[9.^a 5GQ@BHQ{?'CGZ3GUOܸ.-^QaO1C((l% x1|pI ko߶d]f78@ʝl|}+}a/jHکRꤟ&3ڐC֝L1<Dafh7PupL-P٤J_ @tWw-"""ܶ0x* );5Z|p%1ht ,G%xF6HN.'an!HveO_Ӓc}}[Ȃ{tOvF>Y\*,zGnC:jo1Y418r(B[t3a# RX1ܵ<ƧCmQM;a,OC 'ClqJ=0GVE/s7ܵWLn)[EyʲI%}HԕM%t}ePsWAn|;QW=0+AB[AȦV6iȿ$UeSۀC,oA&)Jn\`"kA[\IxUv)syi`lOS~*30Ct6< C-]Cmܥb!/m<ݥJ 9]U6e{6YԷ)x;ECoo>Ⱦu9ͅ e׎_i G+Mڛ~q[5Uވ#o 9"6ͷLm}2 "{PKH14524GD,sߵv~Fτ~*H1 E3VH=#xMwHQ`m=|9R ϷtϷ Ϸq˚\:ONSNkmD ?k7,: nKk~O8|_n~rG*6ܒp샥N8R .p.p.p qN1C&Be>;'ؓHDC}+LPp \ \ ܶಋL8,5ƪ)K-:ԓjeJ/{:E\TO3&:kvp2p2p9YP>ҺqƎ@7v(9c^ԍnWPo;t[M-F`VsÌ )rB]OC-]-CmE:(3^j01I$$IA`O8G D! 'LD128d162U-< |S=(OHEر۠hguM҃)[[~n+\d )<31 SrPR*93+S EKM=:F[OAWkeePN_w2O*OA *=ʯ51T]ՂgtC-]-Cm}GʢvF˹ ]f<#F{:\y)qo vIqb\uü,}E_fAw h N+}A~{A~헟O?Sຩ'/?\7OSr̥ګx#<\3jƶ1jdJrrprprp)HƖ]f98f(*ٓ)ۮ?@vI/dXȥ[eXȍ\T( 4FX_pT~B,W$C1g>zWz\z\zܺp_jv/pŠSU=D JFhFcrE:wY+ 1Lod0qqq9Ǎ ]>=zbt;CB|=sE6KЩ;D 1v3Ey{;*U*PBj]<r0m ՂXAT3ҝ2UЋF΂2 m!{2TΘqPî~SM_?kxХ{exmˬkSuEƪAgOC!]jȞN ʡ-z{ c)xAAe#ؿwZ펪T@mӹ ٳ)i5vC5sPwx#⮦B =fii$zߎcq_/s} <8 Hp#v^?EW$zu4ﰪ߄4h݂PBC#jN1V,}Wc>;&0[pT$`2:jPE`=~9U z <L񘋟*MSNȘLt)A"ΨUAI?MNעתlz ܂g OÁ=9Շt+gT+qDp l*~4|SJ*ʺbyA]ӠgcPEoћg0oP0nBÄźd23 ]p"f]B="#/ׂ4kPE1̴nP—CŐ.EC$E#$Wq =+^$lH4J P|bwEkFjG]JD~N~C;B7jjzb ݃Y?Fg}_y3ŕ HL]E/ULJ[j(C^(=Qv~:nׇur6U)gC`&(k T41[ҢCܧ2D饋\0LЄ $p`S9 ;8rXqAE?`(;C>`Н(.Jgt%ZS[zԇrB R0[DQH([%? PkEe?Pym47QzъܼĠ/w*C^ =\:s⃋|HŢM7&\F뗫= H$kRF39$ZsG/]^]G{Ϟ9q[ ׇs42HڢgtqD69W5x9H 9zrr&GWr`Χ$t3J@F)Z- ~4dɄAb JĵXo} H4!yQ ;zL8ݪ-v9R y>2|Z{| \QΡ .H?e~:(\LtRThL^ 3nyK8JvMX .9swL(]O4^p~ Mb"˛0)-zbKw37W/'8'l 3П?/CݖZԾssHv).8`5Y%%maS Le~,s>1ekSu S߼hGFa1E0`/zʰn7/n<GO/ 2-j9' 9pulL9 }ΨVK__2楻p+;%_i*P7IId箶@'?p@ 2Sd,kk˳7 iQf(KW3Źr8SN5!hF҇e(% niW~4ds0ْ@Cu;^@V=S;^w rV&i݅[P;9eM;lw &rHh*D!@B=l8//9^s\Ɇء*?)n#q[l DA~{Xr8iyX^pw=.7a/8^ΌZ*PSΧ>Q8h Cc4٠Ld qEG3cSiV;.&וk >C w2,-¯@@YW}s!9=PD`A/xF AA?}UhˑbK~!֭8ogvm9($ܢ1-#x|EB\Zzm| + OVj۷\ hy%8#Ǵ/? U2?o'Y};bNCmv6JL{فI?>{6hQ❪Zۊa.][;#lȆBTD.liwk-J 5jrE_ҭ;yӞv?)wF(]߲2(YEҏEBWtQDip§.h)j!.]][UOp y0\ߎɦ?Y?.>~<#P ܸ|2t xp :J>\)aY֢%W ZZ|WY?CJCzr5L|3y݉1mOGCw" Wl2(J֟NS%O˗?8A^(~kCS^d,0/ֿߍxDIFIdu]h'T%&=jwL&'i0pAͶ`Zb+~+N{BG%yh=%(gi%d4Sڠ ,ᴶU.9ܢLm zzbK_eN dHξ߀Gu)UfJ =60LяFę>\V?o_痟0tl<GЎ6YlXg04`;oPnԾ*r0j'W!gRv,)P~B8ᶼ ?B_j['~eև6'Dz)}i,Ǘ洣i@<pގ/䈶oѫ[[񥯎1_}6u9CXTg\W'j OKp2v=~0.Ӂ'^ ΤVSQ=u@Q]0mmtBAQgF%::{41gfTYַ.=h]>t ;vܠihGHᘘަ)Y(.;18g-nQ/ӏRr;<ӋM?wX|.Zw0{07Z-yQ xro_;˿. $`lI i]qQĊ,61"E9!~93Ì0;p-E0 jq+mɳat&kHFL1=WG^Fp䍦C턪 e[G>~FEFKm|5*^ L0L~Z = ׇv1zD"8[xWR(M8D4:M3нsPQ6S GJu>H7?&\|83h g3;ЙbL8;΄3Ja{2I~~/Ψ[.9[2j߀3L *'Qd&4н8Ď3aVP-8úgtw!kOS`zyp8_ 7Czebgp2`ɩ!2j8Ȱ"Ze1`cFz2/H}-̓Cl@1̧Bui^C3D lԒ.^-lbeCD`"go񧃊Of6%b0.^zrH%Rg8XBa$eGFЩ-G* }nD>x+Fߙ=v9LD< ;Ձf)= PP=OD X!&~4d3Nx%)UW_s;]\K{3϶Mjd b4#gT9<吓9i@+A*yE0> ܈6Tځ6I?Z=OH3!~yMD;ѤA4eVoYuDSI4Za| '0Q>&gMҏ)&c-zY9Yu=z943M:c-3 ^/wRZ=Lixvh˯g!k)$fl!HB(GQ<8$eg@V ^eD0L6 p\{aB-9?fLd`"'24h{90q_eD0LLZ1|C !Zh"s GœS&jwPݣD0Q:L3нjQKVj3'_IY?6l V?a-L\uQ?a‡fk'kO CK;Sd Ʈf v%` d;>UT1C-Rr>t~k}<U`jQ)?Z^oki!zTA~Xp?=&g;Bܪ=*tESN6g8jߢSt)Fo ovՂWS Way48Q >PΨJ%z1dPEяF@!J QCNL 𜻃)bE&3^PpI&EC—˥PPPWn.Ԟ.na][PSn)y3p"Z`T=CρdN"F3SV[RCB+PDd(S#h$ {kv>D1tOWjEi}2% >gYE4j֟7wb~\YM$C2!uHlvR LL eU,㝓5_a e];=.ʨ}R͔zeH? Fs n!jjj~A6RV^,/J6Z3PjwZH?fφћrc'[EQjg4%o=e磯UZm~4"$--zzH$?70MN:ApօRˌ*j 1`✆];=. 9Pr.JJ"4p~qeשi׵g?/:z26ug }"Gԃ-S[nzC?޷2lmtf[W.@/jۺ%LTK^X?F/H'<\z{Q׌Tt}xInTUtuuuv׏QC÷&ra&IsaU/×SSZSm,-yK0:z2lK Ɯ~8jZTZق#L-1FKQZruu:+DŤpnY ƑK|=0ӏFDx\ff}JA+.P%^CaluRФ6&2;{Ԁa\n\a\Ҝl3(J=EN6rH+!(&)S/=|9S :u: ߺvea֭YBYOrXͩhS h](1Hen= 9u9 r[:(G%CD$;0c"|xèI1704#%xm->Iv9Ev;.`ӕZv~T'0tf6Wɜ/Se6ȹXE1V~u j_(s .݂MkN:Ii _j?9bHΩKiHΕ;D$Vr[PN(ً3n$~0)謋<#Zra6n6a6-w.”`&tbdB&9FMp&l0a穚ASDJ(NiYbͩLl'CqB6}cTn0N$p 9hBv쌶m'SSΜQ6|]vGqBKŇNl͡OsT=OD>:vmuȟ/m ^C(N](NC(!{rB^X.k@='OTҿ@14 pMx7@3'9jN5C"vz(jQMAxD1t&WC>e;Ƽb]Η@0 M# (E>DHgUVa *^cW8w8 rOB`oLw'ي/r;E?p ;VD! Ѧb)xhŹkihu+.%Ӣ64t% ((]L.%p^&~4\-hi&%bhILLd7QxICIB9C#9!{.E?T6w}2pWZ$I`}gIYwoڞ$L0g.!.!Wn,$m|\dL縚 3Z_Y1TUal 89BقCzvovo>{+d L!jV6LCA2(%Z#N47k ¡$ G^7Hb y')=yuyKj7=~[H") (1C#D,p_N,1<J:\pqNy0:ǷAfX8]C"S}"Z "w2"`ygɭ@PC/=5pv!#ph"8Dqvu+(]ׅ&n %(08n=rbTVKS8E驪]EU=x4ya&oc\82lm0C8 m=j.?e|MA`ƞ9QMOnU%mm; |ac۵~RN>eO nlaj_LkF--vhMB)hSmL:W6ºv>ݥHIqxJ7]/)վh]~!w࣑қ;^(xp"ZxA0PJ1k)`t`tvR| )Tf"eK*~kj~X(a_ >)՛՛/(z$m$jJ5 Q}-JA Q<Tă2)ppppN\]vqxPaub2U^ECؗC.0e"ZNFH14t7܌fLaVW%q@L![xP !ŕO\l9h+z\JcGiaiR/R8ȗHa"],JEp;"#ZlkԋV%xURQwO8 8Mbͯc3hgcU Q3'p]"n'-EJ|8[L-8 -8]hͩx9A+[+ZRTEF:ԯn}6kC44Sןf'X.zJ'iNNn}Edw}^AXpa3K&4u#M@g髨⒡~8RL[8 [8M[c'RJ'IVYOJx 3VT`b_NlgQ 8wEoo%SNCNpc N.Xw5 B(A Z`)}5 ١d|Yalx:6uM_ER+n#Ew+t`^!E@q >)xyi­Lo "xC5hp"E6 E#Q}(]7a(FDSCNSn{ܲp:^`% =Ja*^XXOEվ~(0 ppp[sI.:~j+xG5P($i RTj~u2χP TA  &R g]N"*pJQQBO) ppp+B֒ϯp(6RF ({B;zb:R'b^)N3Ŕb9 ?^v6ȡPRBg锐)JsƁi=(11/\!HvSaB c!#4MsO_!xe7MS{(1m?!-`B9yĴ18bcnjb$**`_~,0wPhS8OS8S8OS&ԌBM]QnU HrzuhqNM!=pppp3?=xG5ȉcl``_Mh#hYs8?ݻ]C_x_ka˵M)|2VF. gc# D h3ukԧv0XA{ގ.츠)p ^WF 71U|)uh_BftY.J ]͘-RڥlS-+ IB+4!OW2[VpmbeT o`/ŗP]ǘ~8L7979O7L5IgHvkeaΑ8I`VE1d_MlNs_%.Í=prrrr~s-8r3X!2pO>ŧUWwsrM? xc9Q2sA  G*S_C_S_n{%m+}8R u%n w,F"ZT=NA B:SSSn|'k)mlb섉B6AZˉAmZ-:6SKCKZrE%Xm^D%_լGWӳЕ{r+Of?rB*('78a*y(y*ɭh f 9fЩK;HA싑2$ ^bգDž =aFrf#<ٵVXA/:ľE5O"Om6hR;<|7gڗmTe}"x75tHQtj{Z6M?4C/*h?Ts6{ϽyDEjEeyyϭYf|I1f9TRБO;(&#x=h~ ).gA/82wwwn{USP@SBh#t+g ,"2پEbwL M &-xE[ηafywn/a;Opy;`&WRx-:(/*޴}폻⧽ wVy.# wBm<|0o@;S%T؅!kS)}"fTb)oocSL1<<.Z ݡLa֟壗sE+|r7ؗ3NG@q}NG*jǏњsss(XGln@Ͻx"Ob_MI1V烊ko/N*ϓQJ<T1w,I i04[ҹ ݁'4P*4)з=y@վ%tE"*LOkZoE4nH֓Q泩,? 0at3}iVYb@[f_|Ǿl`_L?AyErudr ?_v= zuG)Ϫp]aKV|ϊ`߮Y}_}51F2ږރ?4Bn?OVj}T} 2@5^wz2 \lGG%` 0Ӷm=Mۺ e[[Q&>B-Ѿj'y :iaK_pt[r= zuc]Sq \h#X1u! 8_tOFy{ ;Y7̈́ӄ =M\1T9Lv׬xs*Ⱦu+!𢦦_5UiTRe6Uj"\oٗbN.K{DӅ =]Ѝߦ|=+> om1= r DȊٛfts հEw'fSIEhgË;szx1miӴ[k:^$jۧ;QRhCɆO2=oWGOӏn|=y"v+~^/rNp ޯOoۗ@*)W١2|8bLKztaI7>$եp%=OI&go@ Q } Ɨ˵o9̮#MhקZgҊy6zBA=j)7#";°~!OD)AT.jbc1g qQ25cŔ!#OSFnF#>o[fh#UXx/NJJ[TĐ4"D$h.HSN<]ɍ 8;-DɎDYK_;V|i;hIԂ$ 7@QUե&S6ϽP=p4 iʭ 8a'EwN.rE}1 ZC$O㫟< Kyr (P- A)B{5Ul]xBˉIP+^Dp$Hot*OrR\\EwVWZ*Q$ľ\Wy>W^oZ+NL+6Gtcx2ށ#Jͮv_ >1i4[sÁǭK0S즜Z0E/3:hE*. .N4aOn4 DmXt 芗9 VugIBINپŅ@Dغ}^n$h1iӅ9ܜs6n7F(>ߨ}[djC?) ׶<4VН.9>V/ IV=+8< qxp+ܑgq8fqxab_b8Ucކ4G)OC8qr%V_/vB/ډVsOR9(@աNۙB4C[)zL1iӅ8ܘG^GU^t\qחLa&fA})J;e a lOhA5@].F6 0Q"pd~)djehԆ[SyZlD H!>E 2(}-J Ao:iŚ-H-lcȴ˰i 7feWE cQݯ-(HE|~lQˉE롓f{p!..oSi׿jB…juQ#K` HB.‹ʡ_~"tkXTbca5(ߦi a i kJfxC5,"^J|틑(?B*ĻZ^Ùb:e8e:Í Fn۱yc&mxc1fƙb;So_NǕv"5!`=(3\3\. GwTWv\ApŃ["xjz6 `UV>[&aS80"C HQL LO 6 (oRyKvE/F"Wbv}h==dO#poooC*݊0RX5>)KDp{)B/'.ERoGP%)xooxHsM.X TªVPLӥ-Lda pM[R-HѭbQ"Qt=H=pbmbmbmB]"fXHavlKF xl)}1»Nz(#pmmm#xl/VvQPþI"ڗʶ ^s"mmmlIM kd(T%۹Hź*}5A~Bŕ|o"*,p-ކnaUP"{2AH -vt)a[a[a um hx?)SdJ/d_RBlC.QX<RD1S律fmfmfm#c'zF0Y+ ^Qˉ/NYB/SӨ-è-Fmc3[{'mOHd_Mgu+_M7?? 08ݡ-VvwD,bﱇthphth[^١sDpn @}1p9BrLLc4')ϖ!ϖ)6raQLlD/ٶU ,փV#@ /m7)z;J4QbeœmL£' 1 0UA8,FwBl_MS0ڐ1kTqiMDU`O܊Tѵb?ZTQCqXb4bjehejYx-w;G<]ٹj`T%ޱ# M}.n:ES-C-Sm{Ȳ:bͶvơK7Ec;I<ۋ;O:M[ [\ز_l=,[̶6m2$wBXM;op_}BrAݕ-VW䋞 "V4[("x/lwLLY YLY SvLn2{KHDXkP}- DK%iNS-C-Sm{T|[>0QXٔ{<k(hCؗ*˨oDԀE=(4[4[.;:n[(E,B|fWv`Wȁ'uiHGjl:{ĮȝL<rrvI>'3[3[3 t&[%b%Gkul_Bw5ْOI&.t|Ê)͖!͖)Ͷ=z9(%xUt6URJUjP_t)R#JgRD5̸wt F 6&ydg7DC[V|C|Ð|r~hb*"@Xsn v@E'SBV=GrrbJ+Zb m[q\8Jgik9m !RFO+ל +=~|E[<+䒶*$M8S]=ׅVgQ**=qݺg\v}6T|yOnloj^yf|+7a(:; ooo3"yBp-V=nBʪXԐ+mSeSxjI /=|9^ 7t7 ݷqJҾ[F Qz}#eC6f=V${6}qUi۩ U[тS}C}Õ۸0嫻U۾4E S1*= )zğ*n}xSm+NM V5S(7'Iz @P10VM8{& P(.i3%B .-JWj 7t7 q8qɠu)o€>J/mztZ_[m;Q'`C P8oo~ѥ+P5v^~J=c̡Wlφ)Ax'>OGԌ`5~_=g`"9v,1Ѝ0ƧC.S\JY(zRkN a;QD8ExRU(Tq _NC]Cn[y]VA GCMf 6ߑN.?Kv Wן$x9W 8t 8\ipu:AV p;iph-nAicӀUlxZ$_Jcana7> rn⡭iY6=Z- dtR՞ SJ{]Fxbaܘ/P*TxЄF /1CLU Z՞N`JrQ-hQSVd1|}p7nģKo^Š'f)>$ec=dQ$ld^oIV_oZBp@b<\T/$x9Z !8t!8 ! AEX F xp!I{2fxP|q _ppprFyZQrSWJ[jana7> zwDaML1J@9k 'S#V> Nr/߇  nxs.&ck%lӳo˭cPגC)[WzzjǮ+-q]cO8&lSݳ#jm g".hOEby 8D[ԍ!r(=59u/.!$.$!$"dp\9q> ĔRBAIޞL5Q>s&촵 5=|9 )9v)9)qӞ(6]M/rT6h9$oO'@iwtϧu4CL]LWbr *&Q\sIޞMs{wp_o=\ޔ_p|Np h4}%pAPpbñqÍb{IFc8,1r G dj}xМl3-f o8vo8oqgAs-*o,a3@) RB ?I !9v!9!q-kDP< iə *e_Cmf $=-󏣷+xeM_ ^G 7Kϙ%%b(WʁP"ٓjr'4!CPnsDӒUK~uJdnHr)W) r&;?u36Z0Z)0 r4@lOJY] $@Qê}9O8(ܼti$ (lVFQ{#fQd{:= Zb.} ^CM]MWjr+9JڮvS~ Z0;郷:+al&>AԶ',T:C1T4=9Z!j.VقScjK~vw2[ɳ|D֧`;)xW%=IFn×CŰc㰒7\u} *V PYj#UeSnЃ#Űc㕕 u_܁sZij%Rᦼ)FR8\}6(o'x0EQ^簖Krs~[Py[[7pɱqɍψ,]8Opmu",&ϵ>xƋE'SźS}0S5CG]GCGn\ot^oʻy2f#Rm1P|MQnt7Hh/CG]GW:r8'ee)YGjrRˡn>U{6}L3cχ*Q ő)9W|)0'ـXkˉbȱqȭHG.WS|1' <ĊJZvؓfWo~3 )SpRCG]GCGn\mՕ 698^m[2h=P=9ڋB[ XБcב㕎ܸ.KerPXu!Cꖻ[h/}Դ%3+Ux[+% Zh/%l#G.r=q2Ht$v= 9v9$1fy@!H.әdjM3g@iNˑfxɱ{qxpbIʠHc#2D*5hҠ= Nۉ\T<2 /9v/9^yɍ]xN=X!rs A{6L*iv}^91<.FlFy&e1J} Ni&u-:\0S70>&'mueOz[DZً> Rm A9uA9Am;`>&wSm2 D$v%# (?[Ue[{W$Z /3 =9u=9^ɍ[pvfA*K%:I ٳaN`HU3Ō}7,VaAߍFNoJCն>M;E{>lgv˙ NQP 7 lR>&X>gw~YYYʟf;&I{~={ucp-5Xa}^^^ݶN쓇Awθ~lG/yNp_$Hʚ=vS]@x2셆_gW~u cW^"TTLgydm@±%*hϣMN~(ٖ>efc.x;ߔOPQͰSӰ[y;M*y`!B5m|o=c:}A-5t3ԕ4VrO1Op*h'a`QRh>]n𝮄ב|mT*sN״pc}J:${2R^ouyS(-@єd™(Y7ch*R"_pSwp[N'(J9P2cm>;"ۓi@uO51Em3irwwwےƺ|FPʠLa3x %bZYRٞMÄ-|7U*T/>_Ɗ!}.}+黕d!>n ]Z^>Vd{6pݫϭEWx{u |C2 9Rs`ᛧᛷ]q9w7/WD⁴*ړQNZf\U58/'ᛧᛷĥ8Z)g)5j,ey&> jOȫ_ S@1|}t7oҬ2)Da')S'(=!;HN(M%G|Q(L*ɪ+ F]twZryyyd-%D`^39B=-+|Z~y飖sS_|:XI]f jA{2_W> ,PQ˩e䩫i/+jfR$ϻT*ATʠא>\Y(cf1XwPZXXF&R+11V6P ڳ BbuƮ;ة_o5zS'R^?NDDcH=-b=W(} %~"_x,ƈՋUK+CjHC3h[h@'äNğ j~<ů5ܧ>g.8ILxLPx@uഡE0 w9FN"e,8/6: vJ /$R ňe:!{6~S;-Auac-ʫ3~-7n]۩uktE^%xݾ~pKrԷp\|]oAN(ύg,Yd&q`v+O`ZjXz4uF`P H0VU}w9 >k:`RV>OF &}}a@-0-H]ToQajI$.0>;T3̌ ɉT?WuXˡ.*ݥ^/3JM㮲De~_b0Ÿ߯.Y[sG{~1  8_=JEV8 qlA҂`K_-q`KV3Q&|M2f#X1rZ=t\@=.8%vh Wb'{UjWB%G`φAZ}A\ Xeov[7TJ dy#x_%\8r9A.Kb i[$Tky&;%ړi4)J?eZ2Vܧ>g7rb9,gftJ? eyx|.ўHu=,}t!+\Zcu0vm].(]Vy_)ʙd*zaFQ|&so\prliY\R*.ۑFh˩%jɝZҠ3H NլbG(ɞҪ9vš>K"Q@% D1-/t9cEQf` ?jDp0t g{PPBɃPr'tE( v NxI2xf [$ٳ 7O);)$;o81Eu/)ZeL SSu`3_2(tJɃRlOR:_PtqZZdjV'΃'IZՍ2ԗ٧̬ᯁVy_h(` @%ie q F+I-9/JR:+\yo/'*uH^yT/ÚM՞̨z]I/xO?/-cn9Էpm҄mcJ~#&AOX S;Ȕ2'QA,Tj̾?r#kv ,$1Ȝ—L S;Ȕ2e55/9-C)prG:&Q6ꢖ)J1#ɠdpA2L"/V%O!|LQyf]Ȇqi &O^&˭No Y҃HNRXxi'l-[r\+q\=+wxCEʨڂ+՞LXԽqFuhEJ@Ǖ:pŴ̾\)#}bΈ6h=T{:CqH~J)x~ѨB+~p.tb5~DT0]=h/ͱ<ɞ^ogHAq$}V}dlC#ppv`3խ"&{)RH&qD=[ 4'CDS+Dd8/g !`0mW϶Z6h#D،}d-4kt"񕿙")r3z ^8 ;DDV{䥕 Ҍ-"zRI畖@سiYw "M"t ZB`CI>_EhbƍB$9V^A"S=!2|D (=R5/X*j{@ 'SKDu2LQZ- PA*p@ucM 6󁗶BހmC l֢w;MbǍdC xm?^F*{Hd}U4??~#vFpc)ȏ~iN`vG ݌5ͤ-l& |ah !S3Mf"qN d| #ZßHJz9 X1aOXu]2/: ET削XBPR\w~1dO$NviAFWL~i@s#IPwէT;XT^6:TW.h]ՖKW"[|ٵxfzK7) Lm`5ΧxQ^F5)NӵD3 [\utEQ]$Q@<=C_6 c k^l~=)4ݞپ9WRqYLJ Dc$ ReDoOC”LrGDeeee޼e.vFYJBβRjY+=Ⱦ R~ ;ۡ8R6CÅd|pnQ ;%qL fHʓ-$=*/ĕM3ȷ eoh x*/p«Gni[Γ_ל=xb a ew՞"/$5{RNȝ2Ff{A(ho{6h˱V>xmu?OyBG[Xfb &,]#3N&5. C]Cn9p|kGS Ȧe߂'ОL W:&g'JtjY)|9O +;t+; + UbIO]R䢍^r(&s9WK3LDA8bbpCwpck#(Vs7JZdbY9@B''v O<1Х0FF$G|V^l5ϔrCIQ!sLyxJN8 VsVs7B 8t <$Jl$~Ɨ "~Jo>ϿFCC]/6~^>kWǮ_Xlڬ%Hrzuuub$/7~Y(w3&7xC,> @:${21dJ@@F×C 0CE;b|IV}Y6vhàdOGS5xNT΍;z:u:uЩ7VVr<*;m|)BbYdO<{E{?c\U$ކ(4(v%E{Y{"qbԡaԍ˃zcu"PdK8Xg qF cr|"zrtttc&xX/ 6zlcdK]"=V%USZvjO!bӡBnsGYχrmj(g5mlj gSpr:xQ͜eYCo5{:M=amm HJJ+H\+8ؽ0ƅH[v?S +qA[V=VzK}3P3hn=|5తcð'2zѺb/`vVuڐl u k&|4{U=Q3WO]ܠ^8m_^ +8pH7;?^A}b*w` bZ%X)lPSTp)HO~q7C3teݟ ́ufMGe5f,e6]\N3ÙݙÙnEmݺc/ix "7h 0=YU$3CRqIibR{PcEtm획cW)1PҗmmT֫"$NZpxѱ{‹n_(EOZl7餅BGexIޞ x^g@MySŅ [s.-DBQb.:׵Co %g㐢c㐢VBʬfQBR91= 3j}0芲Y/熡AǮAǡA7nOklTl9r@&p{:>}+Fxp+K~ZAÃ݃t; /L=A+`|h.F~_>ÿŇ?w?9\4zeBf_G-ۥl\2`DO>eױq׍ K籉s\c*LP_ڃ dbZ! [N?|||٥?6ic'Wc%ŬY/@1hO֠(78hC3g+3x!^7gQy[0XrXYv =y_e-[w_%\>:Gw 34;U.ڕ= Cvu}`ݸ,`7L G^[x} ILXf߱qq6BM_m)^- I׋ONdOO.ks 2A@F15v9 g-v#A؜첹ZXX; So$z?Bd=-x]`dd 'q Xr ne= (Ux[h4P+y`>ǿvaUQg.A]0&׆v(D ^ÏݏÏn\!8bG \%~t"J>P]>`4I}D&njtjtjt۳VdTi2^'ljToYSE7›/黎 )t}]cݼOOas.݌}J`eWxC6Ǩ>TwP]> mE9n 4;Iq7h!*_-v9 ;v;q!:> <Y=:'՝}qJ#R!9E痡bǮbǡb=x8lED+/ŦbHeVH9]_=*pڑ_ЁfرBn`nF_ r9,0ў@Itʛ0 M*nBrfGG\TE~3%.5x] aGnGaG7PX%Ypb Yƻ,=VX,ª",~ˑbѱqmO\NG"i@rFs==RI}$2CR${:O] [v Wv^V P1xG2]Z9m V?/!2x=S${2'leΘ-Ϻ5G.D-/B"cϫr;fS:3Dm4N1GÐݐÐn{JvĨ{؍`^ojLJlO2g9i|# Ie)v9< /:v/:^xэ{zum=c',凖×S۞!=}ݩSmmr3hJ."!{:sR-xªh$T)~1PSWӅ*ܼ}/WzF(JP޸u (!{6u 2.'>G?}[WDj˧ǿ @ldt`&mܶ씼VWm ]9u]9 ]quB)؎Xm̺ ʧRm؞P͌G RpP Ҝ#SyUIա7hmD\`(if|i؞AoۙFnyXh.?J-n۲ W#)gs:eyWuvooVoT4o9e.ա6zȌNl˙bh˩kihˍ mk¬-TJrrO)ސL>h0{'u[?}Q-Lq+L14'eYJw.6yye/Jߤ J0A5-x7R$p²Srrr7!''QK  o; 4@>mȝŵ_߳F QZ׉htB; zFݧ(Jb]*N*N*n\ H@颕O[^* BbH ўLjX[{lE_H1lm4lOo=ue/f@z>\h=PD{:8VJOہiQZ3 9%^9ʪLrzdZk P\ٕ<|N3ɨy)$v}7S[nr@<Ɔֿ Đ oNp"`8h'IIIcYDI[R/Q Gd{:uTâ[ɑ2s ^ >ԥt!7o|.o)Jeg#)ÑP"۳N?%J J({jכ^oo0PkQڛڛ۸F %\yN1â*7J>$^2{21DvIIz|'soSvRd\Mm}\,S.ΰdD'v -tЗ[vw*.*% oo}$}\aygHIŞͩ'[{DޓE{F\qҌl5~kG&8D{,1,-<,uA`u[(DbH!k%7`#Z.Re=~9S 7w7߷q^F4,k64lkفc)$<.ZAZ%w#Ez:D/x~Wk";2 Uc`,ނ۳iGZg߻?YER(?m[oOo8Qڬmy'ooo)[V=Yo# *\2F-Pd6%KؔZ$$Ѣ}$1DEI,yfQJ,,F/W,Zf0˰swʜv6A+αڀh${2xwC [M$t 8w8%ÔmPl$#䣶]P=SOnQ[8Іs׆6ܺVn}g̩QYs,NQm!dѤIσUz.{D'Z413 #9ej] 'a8CwpW@oR!ֲ~B9zdCuy)dd;H*RVqOXW0n|^1Wgo12CQ8*YWK&@t`} r*_ ^;CR% ;\7]_3@ʚ Ӟ k2r{:d& {"0DǍӹ!_^ul>bIS򉢲㸢cYl)~rfw y:C7քb].TVtt~e`xO2(7pN{ByG1Zz!8.m2B橩]o('0}>ݸ&&HF.ⳡ7M `[s7r rC7rU.'vR[䊑'6P\;>h Β{ `e*_?;fb )2[CLyy#ldg3 (̧LWM >v5x݆ahag9gtjĩR\06uiq]AGapgc*lLM >I+ؚ`@L2z)\9Z^!{S/,^_}wwW7߿/ € DsFgh|ǻ3a<4b aHXW-#LM~>vy$k?D\J-jy>8@ځZޙe#<υZT_B [tDcmPη9cBhiΓ9F!'Rc˂ӻS@„ j[`T8|SWkuRZrH@m 87D+Ώ1Z,y7U&}:"*4t"b9!ch}*܇𡕟5?#.tĒK"v:tcWI6u.w)4B'>O&"w|zw*"$Ȥj,&Ex.{=|ӞW CKRQ9|zTm_>Q͡ ^gl~}i7Q=PL>Ћp^D'=|#B:jD&#CR)K g ]GE;s:$UOzǮ7$?{Wهtn2|,PraAZw Xtx?WV\aRN7|ӛW\ v="zq.2ŔPԴgwTisQMj'/R1!߃keOĞU9\S`3=Ŧwl ޱ+x+c>go! QNTdw;d,;];6 ︧ ®-qCT ZGJ`+?tSv׀ol϶?l_\]޼DP~>( &J)fFyh(CzwMvJV:w +kQ}&侕?̇z1ဳ(M SN]2fWa/3? ػ0OEZ n{̠`| V!W'.@wڰ\y+%B 0, d{S: C4U\M-4*nX^3n `UZV V *rris&qlK bEǦ]]wR F4QU-\9DDZU)ȍb!1Y {jV'_~<Ϊ]:v!te$Pb bۅ@牵(dg8?3ޛmPt3 n1896sܓ>^C;yD<^/bxo?l?N9)O)ʶ%REQ+j.p⽽t 7QDQ(,G_?']9vs$D-mʩi. ?%xzg'͟r.PC eg?P96msHP vanu2mҘ}YC#PO ٵ$g?daqabAz|xBQ7³4 俱+Έ E1J5TeJx3r .#%U%vQ}c.a&HKv!Jhe!wHQb@Pq"(,D֋{B1l<%76oV -Kkry=8}A(C.曷?%dB|D7jC8bJDpq¤yD(e~cV(ҧ]^%S8`H\)H(X "d}a+@Π`? `+hϧ.M(Pnr+ۮChާ$ά@;xjnHP |`yAwMᕯlP#1ME:pN#P "FHc<;8T!~;"'dEh?3 /1-Nxi*[NljюMFpv!8hX޻%+nYwe#D"}46@J~:Mtvl"EڕȓosBЊ;"_N1 YX| ;,btz1MI¢Bl<&D;6vܓhWy #iR .\6k Ӥ&{f_# 94~^laj=LՖDeGJ;K ǖa˲ce.ˮ<>M+6e3D(0D; wB2T!W_4Tڱ)cWhW5裰خTP+ m` =TNCVأ^L`(Rqf:UtvlѮ|%d҈g1U-Ɛh U$7maǨ=H ]BU4*qINQݲl.NM0£cDU* R*La/wY)gAXK]`bg?4;5iv-Pj&tk os%.x RYNQh#n4zwd/ 6h{⛶'*T. wFXjVNpR=)Ή%ޛeGYbE/W+T 5c_%*ץO,fD͓:7iչϬ*[|2 +,[NgMM>6~ 0!3b_3tY3a O,1w8 ٹtd +t+)4$*.-B)%QX],q ,Y/F!.f#K覦M{O2-2^y,[P2t 8l$+/,qh kpa a7 +`MZS?gMl9Z65ljAZoPB~82zgCQ ,Q:(^ UdSSɦ\#KvN!b\err!pU}h>.Qlpbb:XX65lVzP<W`(KTPAhSN wnH=?o߿\=_:NH9݃ɷ~MZ$RcÁG6ᑅ֖-SL&M][wņ NPs  _+A /e1 Ɨ.p31]Z7uneXPc%H2 %EOpӻCJ;S]a$uvӞnnDNrr9ac!푄 K)bpN ߿0acase7_]]3 ~Y*NZo:>`xbeNZqVXir:tpj:u•T"eX(]a[tzgʛe}{| hw9D%+ٻ1EȩS!W"o6.u V 1d"pTyhH BzwDgNY/&$b}#)!tBriO\I$r!ȁXr^ {)cYUaXECLir.Ub䴗t7hj8,%Ixtfɩ +/T1-U,jAL1"/awH4^ cG# 4qYe|2dЩˠvu X~.moc*Q|rvk [S~m SA=t-@JGӲBQ;kScL{S> `ΩM V=ۻyք!q.l[N0].:u]t/~eryc-f*k*ǎp fD`3apfDw|'_˶~6}#I h% &<~2 uxjU㕸 JG&VۅUT jY-h :g|o W` \|:{Qg/j셝T' (by<K F#Q<$PN|J2԰W(<%&t_ K-1dRR."dwM-zg8oeK1rC 柶JK*|)e E1—OZ)˖+uJ ×[b _lv-a/+T).WySr:~__$q WW& Wvӑ+uJ #JG^X ~h Vf| `C6pHZ>^w>`\N1֫ x^l|_h苟X_% Kh+wʍR/Ń7 +'S0TH0a*?4"h~9҉Lz1v#Sz+QmSWԕu=J;ZL]:X.v_JzojȌ<;:T} OC]֕N %ԕ҈SWmԕ;u)XVDYQr1u% $:zìwH Kv1v-gcocؑؕM^y  ŵ=LjW#KHb'*2IOJ`0!2/l'w2kn%oሂ5(̘Zv=$Qk{⛶'*!^Sg8YC*%L>xQH/k,)XEFHSl_!wmZiƙ{[L'"؈EOn| )>8 Ӳt`C0>7*iE:bU>D0U' uź0dԀJZ9 gW`G` FOK|=:ADZ :vQ c0Vևj3Je ,ɸxlҺكqD^\xXUlz:A0o`Z5R b0 [F;%^[<%u;Mi(\sxB0/of=u`:UHg~]CS+mtg:`L/ MXX{\b5 1{:+-= 5sx!I> 9 bk us$b"J}T~h!63TEK}h>eW[*V,x%:`\KMjR`].30{S;e%: I{YF=M`N4֙"17~ FZ*~T8-N`J|!an``! V,A0wP,lM7 N`əH`~p`3o :΢韨d0~heLb9A >`N JiQ1Wv:`!C0x@/1d Ly)Qv>U ~}`n2NC`YcKWI:CuRp4"0[,B`;!˖ ,t |'0dQAZY[`_K[ީ-/w\*eL W*j9B_Yxb6[z)bu B/K * eu cAO=\zw AAcW21KoT:w]~t1~4t\]:q:<)>%ހ$,[g!7ǿwW7Wozo߼xq{ۛ7?>{Ufg|cԧ v&#':%͛qN^8زtꋝbЩOyIROĪX1&~3".ƾDB:ӱ/6 'uy}i{,(}lӱ/v B>-N8!mWfT{b_ T Ra_лOEAq9E!v_c_=i} Ty-]b\^$޿ޛ}~EXϯk%ۆ>V{4&̶swbi£-sv]sɲ8'ɇԥ[`L]fJy>Πd Hc56_K^ޑΎc䅍W/Q߾; SGKza[NG2HF ɰ#y%"nqޔ AƐ5PL,h+TiD.Fc(Ŗj9Ǩ5ãy;F?dNr0c0 vӏr1~( TҘĄAUL'p8vlKƻw 4=|S .TOflWSBؾĖCg/a^3lzXaoog_l<D/%8#\BrX}" NZ_#R_i_od9n(N (O^ L$@I' b7AC$bwIUu/2`yVבDr!^p%RW/[;y>AA^^]Dy_a+ti Q^;\)NL`]%v(jEJrZ4 QWWB o`Wvf.kn`e-L.{>3/Ush- ]&3\0B:sOm;/݅]Lk*3:e]! P&T|нJ>+" ;+\.ee'ta.V?tW}2d~'-K.ک/TIALK4+؇Iz jWr| ^/ίp/(6O k(eˠ= ѰSvI)}@ߟiE}@Llrc3rI,WXÙBߖJb\bqH,vᐘi /)Gȷ@ cSs_)y9\bK,vc?:<,L)hsYuYv_8\pBy1,L-l]#^b &m8aHtҢ78(-x9`Y,ٞ2AX7RֱZ(TH٘{>j;pK^R,}H@1;}ߦXl#=!OA7X,ȃD. QXRFɗŌ7YV-PáA/&5F]c5/?SlF8顧1~y~,E'xf2, DnE[=dsR=cO]R^gu.0|cխXP *n`,G*M;Ęꄢ/gŒmQØO!j”,X`sAYKr!FC`Cy|lgcToi;P"}wDòm:Rc.0F19|k3>C, 13H_r(o k&5*"_<C73.Py.I,u9iH,uщlbv?5I'ze=`4O.jVs^S\݈bt}[OSPb)b>(jD.X˝biP[4fQSv_&?l ;(!*E"F3c[$VaY\n-ʁ=N_!u[EC`y,w!0BĘ)GLD&l}o`)/@Cmb+`,V[gdf`@ 2S[c7!J)IL3jXF kV:JX/sTy\`8EIU$;/X+`yei-(k2[ $-_ 6eg ep"h˴K%`5X+``'(ҌeX 0[ϬehxS8}`gnW:xSK,RGF^"2fZ9t3f`|JCQ FS>VE"vw5L0 |2fZ.;",1V]n29_qi?O_ƿ::lǾ_ֻiZCQJBj Iy:-f Hz㖧y< h]ygkJgSлrx^ͪO~,B)e;V7UyD d UÆ}jKXbEuU.+kUcjЧF3LZNP}~gJaoc c{U9 k//?}//w_~K~%" D9eE3ߤF9['rwϥorʣ&^"SQ?B9z=L9((:_7zCS됙D|3c|ѾbƩ,\+ֈzmؓ 0ۼ#Ҷ͙ji){ ^WEc(+/(Fպ9r_}FM$f X$W토i.wN޻T+s}_d2l%F7e.__%lZjgRÓ_ LHэk[f\M`}0xIW 3r&MjuT1nW_xP]M1|W¡/V?`'͏gz~ĭMS+X##W a0G>Hi%(ptۋĔoC4!|[ 1!1*j8hX %r9X+bED5#C 1-&˹/`؜[1TfkK!V.bSl%P$dbe@mA04fQqh=Ê}8av-x9`X +' =WGhޓ3 Xf\/ +)ϷTòT䔣sa!HCWb2fƁ׷Va`kxsa)PK,HY6Kj/α0*,"4{K0-& *R!m 0p\0`٥ mA>3lNÒI_3p|a}XTfEfB*dTUwE3j@\ڞ=W@vX?<0ۓ~qse DFgА"[Rq k{z[`)f/[oDfT9j HlG{es1&峏D. {^t4{ j{n1W}H%:ORV` n/8Kuޱ -^^pW_H5?-I|ь)i3$>zqh}{Y|1؋6cK/8K-ʪ]_*[%s:^6%]̂B_c+%h5BgH%z?׺cY_ZړD.W ]_0e\D \0M&=%Yy|>{_1r$pBWlpI *Q1~W/2T]<䢍5fJ$BUnE˲d\Pf Qv ^ί0:_6Svnȍub !۷* qÏͯ8WEǯW~/[{rI5F婰_L.WI_)5/ _F(7_m!Pohw+sGnv~aW_q=k,Jž(/~aWupN)`S uG3#T-J E)`Z ޘſ9z ^/p/\);*HFzXV -9ayu}_^H W,[_L磇GB-%rW/"]@6vX#}0*%p#m((3< ]/;'^d|R!_-~W/34f4R)3QQnڇѥMmѻT "3}`q,v t9G3EG1`xKCh(:㆟uf]|z%TWl(GG'r__'D. QW2E=yש_?5CAt;WHn)_/KQu+ל6Bzw=~hqrX2_Lїlj-.z]> 6.l~ͮ(?/g vQgW M1m[渣-̀0hv)Ō8`)g[zA)lOfT8v]3_ՄR50lCXxiۀq#VPʷG XK'͋(5B{aak;f S:W!XYU ?!~`~)MXˍ`N)uGθ"R>T2'*]+wѢm5#/O.۝܅PP)]>Җ"e U'v-IYu_ރ/B3>_P؍2DJ6,ieՕ'eU:*_cruՕOeC 89=RDK-]ԨU#֜>m}4̧m?mj;"+]ZvOWiв h%ЇcdZj Za7UjV2*3zh`+9/M IP߇VЪZ=5̔]Tw=~9V*Ze(#ۋvFs&rSL9* m2Wb R=S{ژg$UU?/7W\\6g6 S|eӊUa?-aJ unmy¯` Ψ I_ck%V< O}V?\\oPlF7(VÁ񕤽3Y4ƏvH̨>G~sd6Û k!f$_ekX0b>Ut ϩ_ׯ|yۿG~>zxl_~z}vϏG?= %rϼ@D f|7 ښ˥X%!6EuhBfwV#TrьPV%p VXھ{e]B,# eN 5E.-#mNk8-mmYz)vt(:`q6o_^{q=lݎo}>alw_"e?j\0`϶hi݄pƛLWK1N.`+>Ӕo6/=i<}5TPBw R]%Lg3Mc,MT_E38>NZnE<_ ~p?۷trOS?gk-r 9Ԣ*=۵w.mE^h/4ٚH^+h'^A< x*(Jg?mwVPJn!^n'\PfRf@y仐x*ۋLO0(\x8]xaϴ2/Cx]QxYj3\ܿ,JA+rtoR/J#ei[lA!TFrHFa°crFaE(G)q/ڹ g"68.*;$mJD84hqCπRw8}rE _wG1k(L[{g:w(E\_ʃP[lݙQ7. :!<\e\<;Tu2fp$Tmp%`n\8$W\x\"emW_<;i*хPt\341;?Fn| d$/%EZnp!kU[ Rg>WJ'Qj<@ Rd!PmѰfs쇽a/C(ױ->^b lFGjfꃅq2U: ʯMY늼OHX>nqbN҉m)8mpw^ `1zrAWLkPSsEeu3bQ\ UK*5Pw]dq2&X$֕ |a r6d{e _nl!9ٵ Iuग़sHV]Oo@&[ -xơL+~/O.Z䡍UCDfJ.\J"ִ\蕐?0wԩ(ÿ/{c7Bh m5Xة V#Wߌ8tuKrO db|=#m1X7 V �LvUSc̓VW#OBoofLB5~fc]e<aa\뛯fsC }sJ"=cZ)vXX/eD;:Nilte9K#~FeKU}7+eKrP'TShrєCF񿷳&#F&;V:%zQW'k_c{ 9ս5K٬;؛hӐLNu u-|>@κ:/p8 dZҶbKnHDﮎV+3>>#dL ) xgFz^Ԭ]Y.H XOƄ5z`#jEs2n(c/]㪯kʣ-W+ z^" }/RݣZT_NUW.D"}c*A4c* \H}/EW rHg kz× zN/RA1AwQژSD7Qǀ&mCQP [n{3ZRM>:NҪL5U#wK[`"N`n^oMK$k>+ץC$n;_KW;]*p1C5l%{w?1Kg w^ {Gdb2r0ZU7+ j{n/Rx'3UU/ח]_nK5 :SR6KW8@v|l͡%$:Hn}Ix+nGǷ}t4sKPO2n, CLաTλ(h@[##dYY$g}N}\1j S%{qH^J<ކ ^{)g puf/CHS}/oL%E5cxI7+t{n/_snӫU(1~m0:j8.[x{h#TYŶ8ўYo/oM}9 '{ѻlw ^n0ti69j/Շvnb&X l]J{y}k MS:e~~O߽4zEg$ }xOW Y2"qIK6¡*>+%;𚍕!> C|ʹŧd">ۋ@n|mc=zSΞćO;ʧ? ^)>pA|s>cėp.\|<]|aO5 `j rM9ge:6* E~}KHO'yFz<]zLzs1e6JOWy[#Q5Uo+{]׾_5{ayq:37`%%{9 Z",0SJ3j١u0).Fd]8SZnX`|5<0ow[Mh5w_#0SMC!L9䡝S 䆪]$EGqB]50z-1gN؂K,.1>=]LWHl瞛$wˁ$ߒĮhͱ5'%_Ed1wB߂K*\kb˘ж,{8zl.y~tͽЄ3^:h+iEުUOZV"WCfáCK5q$VZw Ȕ$?d鿡KkEVS'tÐוO=H+엖l_;9ǯV_͘+z'ݢӕH6H /RNY6ӊ9JhѻLF2N"7FtdȪE)PM_68Wѷ\q. :HeEҟf}_6*!WߧQ FVwD.G dY2-4d0QO]EC>LX2mab:ڌ*cPC-t+ʒ%͕b8xʉ,<SbˉEXt$V+x61,©gI0T0cYNJsOybɴmea.ѻ Xc (,CXj0]0I*FBp-!mqS 6gS{b~x޼5u7t_^YrգGW qMs8,,q!@Z>Q:x$r9@裁>,&JqbG3On7<2_<\7+t~/2z\6gOů\/NBח~+Xw=Q_q, )P, -/ϬZ&5s荄_ɢ{1v°WgҲbCU`|:_ɺ—׷}y8׽OBxBBg- _*w2W|{{Q*c_<_aK53eE/ʁr17/ / W+b{-sh7|u_͘ԫ RC"Iv6Ĕ=6d^6&91z7`*{ ^/p/\V} 1̫PJh6= Hfڌ듘G7mXILW$|LJ,|H> JͨX!1,;I^9uz,`Įh-K[1v9bX">DڕX"Mif-" >H0f<`[ٰ!HdF+fRՙs*!b{UЌg`vEs(2XE0 flC0fÌ`s7 S*ǡSA6}pTbE3,JRUwd鿔 |T.liVbc,r]44Ӑ@ tf=Z7Lr `` <3.@emILbd;a9b U7lȥn ? )ktm)nt.u͘Ȑڬy7Xa-7 b'͡ @ZZw_MK! oIr7h',!ʲܲN,tg@ufUåuܣ,! .#fLWv|۟+,\a_SaTHŽ%Ŧ}ŒSRr &Ro ["nzME7,wt6͞1{BbyP,wA1C$=5{RR5EU.b9DgK,[CL-zĊ V_TCbK,IL 'y:RW;[B}?o _IߚkЩΨ!u)%ڣjOSʍ_ʉQw}w<mO+EW$r0W\i%!7n]\~ se}cf` m.0n0W*\UN`|UJ7WRMBѴ>i5Te\nCbƬoNmD4u~Ifs庾 ?YJ7W>3N+g7Ҍl.]ujX_976+[SwWKGGme).pշ_W\rbF3j\7^\y#c_%& .eǪ őٲG}Ψg1LBF<[׃KaӇ Cj부:$ o$]G?;<\q,vE1',x=\EߜF=cI`8탣.U+,ES K׋{U*\m˧WH  qtsJ6rJ|Vr, ꫸!8ůQ"Jr}%sGӗnI5;3T_>&+] ܽ۠6`a [w+[5p닎εRfsvtJFjEC_tW{uqSSdRcc" mMKTO,qޭd/:K-Xu"770mkJyvmLeX0h6;c!V=zqu_^aۑ#Yj,w&+*X_pqXa|hU q%rp0,qTvU;F0)$pвa;uk. _5;/wsa4c)v"+lLǕTĩk'9RsD()sU+VҀk!\AL7>ԋ~kE]/}_J.: &/ҷlI&lZtU/2ɺ/mOե`\lW*_T|R";wB1W}`c P[aBS ]7w~/w=_`,Eڅo~/7qT ,#mjX8sZ/oNKMwV~/w/R?>[u1YJ780t@qHe0-'{gʍ, Nl˝CwN- xdΝ9ȯʳ1I] 9/GO{I駳#1v ÎџQ:&ܺ+ݮ?sCtִM<0[zw?1tѽB;ҎܐɆH] TJ |AI ~<ȝaQTA2꺓d㶎]A&0[%cВ;? B253ȃu$j)[d 4:мaJMϑ1\CFB#3ϐ1Q'p&2G*^Qr mkZt؛ ?}x/Ppis ?w7 0 FnbK%S6r9tr Jio 7`dHՄuy.}6q.9v0Tb/@ |LiN;1v'D)ƫSif1~p`@$ LkZPtX=J⋞imZ61=x)crAg)nJ+z68'=л5oހ;z_tӖ{Ɖt%R\:J *%Ujr}Tx.=Nex)!q[*}E}cJ[_=% ܠ¦ٓQPX㳢@__e }8`/p{ʙGX_q,Oz>@i(NqHW2WJ__Zx8*ڂ_)8%!\|5-%8U}Moi~]V]|!~;{ۥ/]wg oIjO_3ւs`\dDlu| 08Ls!I]Ӑ ,SMw+<3LeVJX>.pr[1. svDY$,%Y9 .!>{ǻ߼{?K]z#}!a @!_ԕ;w%_m aZF&_%pSV[ŗuʟO|>9.eBuwS7Q'0x-0`7H||/?'7Wx3&!-(7^(tXFu%ŇVdo_7OG4GDo\?D7Ʒ}l4Օ+jyOןZZJ:W![eV6 6x^}!$,KNJ݁߿  5#$$Hy% ]]@8Mr HHt$Lc 3LB]'ZWBI;D(Fۖ[13yL!kE$O"^ɛ×>i!69PWz< DjV{h9eV6*>WRցC(BCZrLwvC㘹L8 mkfob3.&Oo~߽~~|ŰRJGwW%>]MΛ [ _}a`>夅7׸u3y!=C~oLZ|^%?0ns]~tI~a3>Vw_N?7:hO5 e+[lCǢ8c}pInnӏͩKyųK'-xy>8탣D?^}sN ~:B}o Vٲ(Cۚ9ɽoNWu.||tϾ#f[Pk;˃W[+Ɗ1r,#1|ǘSJYh§u3Xo(_l7 h!1ccw1FT(?JTcg;/ǘcn`L5 6S*JSX@Ճc37*Y}(?1?0;tbd&x?LP:TØM)yӷFFRP 1v_#Kt#oc= "5Fk\D`, 1?0336*&1]7;3uy}cK2*$pBXWc %1*[_;ca`,t14E؍S_AXѻ]`Z0oev&780^\P ;ba ,t3WQ^^Ѳ8[*"{*Z83KW$:-Uy*/o mD.yqWRtݬˇ>N~3p혠fmPɫ3nwyqWL"=IRtV'X?믣wy!/4La C3ndS dT`OE2/iC9-z7B9/'q'X8#/=sKW׻t.ZBoʀzѵ0z!\tEooEcS%`q,v rAoOLl .vp]_SDHto`?tq0U0XKv _.8xL7 #U 䡍Sc8Lx0y{hhN5UM_XD&b Lg27R[ٛe\_-0`WFy&Vc'*``~oy0]-Gg,?$c5[\q࿲Ѹ6HX*n ;pђK>29å{r`[-|rXnKb(d#8U#LՁR>[­o6`I(5XG/Cl1x:rXnK'مf+{SD`\#ҋk׿F$o~W]@.]Y|nl}&wnvYd-#Xrس)A}q(&4.N:l˝t㲐t~֚%"% %Ez+HNŁ9'\H9l9'ss.y#Ϛ#~va\1Ft'{kBΩ:oŔeC9́8 9,Ҽ9s8O8)M[qts|~,\ַUGasL sJbw?_`O|*NWm` ^uIGN^+zحD.=v5cqݞ2룾1vpFŁ WJs>#e#Xz+]zItBr|@PևOՑqȘ-'9P\4 G!StCZ盯tf><1VKũlۥ)uÙ 4'`CFxwD)-^cVcYW0wل7bb,|[07jl'P0Fc YPV` Ƙ-n%Gay1~^6 j«> i.htV^hudvXp@ͨ؀)}sd=yʴ~.rBP)ₔ"wncBx,VsZQB1ƲuM.=9+yI#;h39<`LŘ1b~;c1XI[0&hY#c :1<*Ɣ>6-Ę51l>Ƹh05Ƙ0?.4c<و1}1L}M1~:ŠS k./$]B1ʢ\#pGy xT6Kl+q^M1*<"\GIb)GqSśUfC qжRLilˈdb疫4s+iI3Ubb:T%gciKr5r\k.1%cvxFQĊC}c g\b"eAjCFɚu'1H,l|E.$\tA6ńKRgn\O(&cb Vzw E͡L hAYXb28x:\ǘkMbB)SSc5 ,)!oGz;se<&*/|\(*_1tѷ.i1$^˚ǔ$-L}cI67/h{k jt1<{u ahgeçw3uR2{]-ԙ[3RLlPH֚Be m`(&zE ^m2a 4#VPXccZ8{r`!_U>z 铰1[}kIq^1IG &;"ద$V *?(m!g;maBްM 9rS`j]J{wpfԽj$A6aKwHpCc4#:[?{@XY25Y.p1*g&e30uYU Vͩq}$-J/bpn x^@4ދ(x~^-utF6\yJSWmG$\)ڧ54*eC#;3Y{|! a"LWfnra%!,o&J@X a#L7HWʭ8k5d.m J6Y`\Ma9a_5~rWnJ_Et[ $-+NJiig#G{_IȅKQ _=⶟_I k_+K'hUUdm`}(U\_IA$#N7"W:X8XсHnn_Z\Lߪ'"G?l]N)c #aӟv}aW ",MهLS8SΒo̮(p  Qpdž?__KM_i9U7dzмS̨\u)y'&x^EjFaB{9^Qv/[33. {R,쩞uѷnI|}an> >ÈVJ%;qDE*3aP6#3 :0:*ôTnMΫaʊ0祅$; prIS1o?:6L L4stZtAF>~J-cd).`'QIԣ_ѫVLIRi{h[S >C_&\~we5_+i,<9r\gTL{8wpY#+trF.ɥ6+ɥ{\4b^<'7&J/;sjr%iil#@ֱcRGjL- 5vBVh[(EJɺĊА)T}gCt}XC9D)g@bO4Fiy鸢t[Ǩ7۹(>f'S -}%w-oM-)&̎*)kNJW8xaOJ_ܼ+=wO{Ӈ۫w?^9ضY܇;= 7 e_&KPfLxQLs$D{b$x_;]87"$0t]^3&aιe;څ ƐFԑ0 (p c#al$ IL81) ??H.ͅP#n1x!U=lWh(ru#\Fa72M9c!*]0P)}aRs@UήYFrc‹kK:!̌2SXf7A C8<-o/ޠ0GO/:MCXsnI0;-{۪Ŝ ɖ#BŠ;tEHRX1ٺ=ǖ:tj5RX-BX z/~heGU_f_,KoCQ9m4y9z1ʒ5&;d,5龬!G|glnciWE~ _"ّ6/Z:ԿzW?}&[p`|P¥7O̢K0s_/Ӫg`7R &s3G59z5r V݀0P9D{_&yPt%6laW5ظchCtA>Ҡ?o7p|PՑr=1I@H3yPƫԀ~̆ ݀ O 3pr6SWK3Ne}3OSK1P?[|}p(^a{:a n6a#Er&[O{9a;4awnΣc^j0O3z/ ;`I4f0|` q VJ3v)8Ŭ? #{ΣIw$~hDr' I8U׊m Ʊ#t0 ۘ Øo  /E>f1Q/c14y@wXŊƳ)x%&=\83qe,,bZ9 Oql'L,D7l|sI-|͎azg}c"pj 19pŸf8$SϦX^U3 WUyKK_#o $&D?G/ckq< \[".KC8,+G95+֐VsX .?x /i ZLWRreI_*? +Jmgvԗn^^vt+m ~hYZ!IWo?ŶKYͭԆəŅZt{A Thħ|l/U?Xl xX6Rv&W9z55Rzqhon}^ʹ}1ҝiHt[) [-2#M0~w_Ґdwnޙs%HT=NPJfy1Чy]"AIӝ\st,Q;ӽd<;XA@yoL"\(̠G \slvp[yaLT+/?x~ޱ BڧBj%"m Yuw$KL@Bem. bm |׭wTSOLV+3^( f#,,F}o '4ªI> b9&D)!_zlyK*tu,zI'w@=u*\j>~e VN=ߩ\nҭR)4l&Ws+􍉀Wc(p|Þoseo) "AX!KG/y!Ogh ̓~!Ol[AM&eaçs0tA9N!e!O~ha9]_s,!ʋ/8C9Μw%}@[Ϩ$s8}4= f@׷SRWo\l<& ɛwn>}w{_4d_O?◷~h2T?@S&׈͏8=p@?lW߼N7?gk_흹:~N ӏ=?ӯCy`Q_ݿb_J@# >Obݡx!xwW~n~뛿}C]7ѕl! tcFN_}#ՏW?T_ȫds{{ڜӋƸB1m tcDBG|+|Ķ{V S 8īԽ=GlzL_=aA3C W=T}0M;t9 ׇz}s-ޠL=F^@#ʡ=b_m#{`ТpD{^<6 o­YR ]%תѫp }^u}%dCSՄe}EyɌb&踃rHV199r:R_j~KVTd}Azݏ64&lIϽs~7sԴ7kOXN{8y:INWW㧓/uFɧ7 w% d}Z(>U?f\, -3ׇoCs bI‹ϫw͗R3_<1n{šc`'`I6jń$OS,U骨bHxpT^1#S,wF)FE0ҼD){ɘb׿CoLib#: 78prXnK7doe=J0\OL?bk˝bQ,uV LwSMY3ScR-D1@Lj*OI,[Cc5Ҵ5zĂI|h8i.$N$OU/Qb.5YH,[CbK.>3ĄU|OK,W.+B$ 'b5J8rİK rjAB'{Hb|[ .I3h-XַJFT7@, Hra6S ~FkAaOOwvasX A4)aмꑏl*d%'s\@"$NDYdp 0l'ӱ:3TSuĔBA7e}k@p~ 3kV.0a[t5=FIYpb\!yՎX(%AVð;L5p%c1xt(Fbo J#j_ &q *Zy '.$]bAȸn{QKLՏUΡ-BQ.sͧ$@ʄ+;FX1kNX[ߨ".xr8Q6 C뮉)ߧ*1g^ ^kĊ5UbaN/7�7?}xKQ[~GIi6mf@z ||鐢$bݪ/9!xrhCy5O1|EmK#>0_.4շ迍Kʭt7>d{ރ)c$, L7^ b}{<,iCC;ozx~ߥޣރ7<Ɵ 7wTSF>hZ=d"y!}7^ByxOtʅ;otuwsyӽ\tF"kSY_L^Z:{@ߔ½ \=a:\=׸`l~{/^{h,p>i>=׹sOa]n?{~rsr9XfC&y7^(Nϡu{8Q0=G.$:~N/xr@@#+ͱ_W>׹TZkWI]Ez %{!%ͧ4GN^K58'%#{@'mc"rb}e/3M_mח2_1Z#͊#]_u}!Na]p%=4)Lx.E>4__NY ;1zQ|}/N99Y)OuK1"o Ĝ54Fzcy|8'C:LWz̍X9밒a\UFPz#;,t0EwGZ;KrqW)j4@)Uq[\rVdF\C^)K7{#.V0~/9,$uC5Aw`+:]8]`\8%) N]6jWf\XBߎb,Bde kxR/2CKSGPY*á2BCt Dy֡lݐ(K>HtghoW8b,R7^W~!j@1|9@ZHÁ4ۛ <޻QHfA"nG3?JL洫f-&{=8m craԍgFżW6异hԌsT4^oo𥺬ڜ"i,~?|_ ||tud:8+jV1K ciTDkfMTlԍ.hRJrqMU^^{Xqh놂H5%^іxUtۇIYE70w}V/a>݇i4)CJ5u|~hE6P!a (<3# <5bPO[*Vr]' @,\z0 BP{[##1$$"O1H֕{D[d$"Ik3[xS-);F2n@"u$RGb~HLEe8A1|9i :@m*Fo|sT#4|>ń*<4# JdMuE8jRbtc++1)_m%Y|! ^~!&f{k 7&w&Ne⥬1TӮdJt S1Á<kIETWS *NETyXWy4OuC'IRE*Dn"B^'X'$pKbVmEtʜ%R`T,4h[:HŨeaobLHfz܊WXn"ٛ*E_ Sr𛨘(˩XK"QJ֩h+ꃈG}*RL^}CX0ITSN%ʯ7 !&KTȑUX kWa*4MaK6u4`f }boL =)LT^y ݁;\@Ɂ4^ɁRW݋i/H .2$h{bxLҩWMxi B K!(,4eR Arڿf ^.:$X˙po,gDJʺ4{W9Oڸ }^ՑQm;"<0ԟ=V}lC嶿D_?lsN՝BBQVB^jo #Uw@2=%C{o^<1wdMwHh>OØz6S<;׍ai>ql"e}"ZjoN ҧ.n?Z¼weNe]_ј;%)%rl·cHڛ{tW_~FI o~~Olwij ;oγUdyϥ Fy4*\\Jt j/"+]#^~;?GY0c\1V6 )k[$mqˆsn t +AcX|}}R?cR2ɑDYyBrkHaL̳v?/PP&&ksZeA01@f@ǯka ~hc [g:0LnJ[H(CꔇVo6h(w_^aĆlQWeB~hp?n*/b-,م9а֤n"C0 A4M\98<]#нEqI@[cB 6- =aqOKSSrn x_E[x_0a(І&W|U37Zq,}'cڝz9:1z]Qo CK$hE?kfٺ5hOl: ?7tOF5ތr81?>~ Sԝ0 Mr85{XxdJUw^_]a4[)wrfl!gd=,>=vIL'<(;b_xߩX$~8;=+5mf̲jƱ3) EPQ}tFưa!OE$sӦz^Gـ$hħL&?#Z|z">)U0&7tO5VrJÔ3_=\:nj/6jFϏ\|Qzbfer "KK/f)ҵvu2 bHʒ*[Iw8p¥bO$rav7}ׯD\ɲZzv!=$,=:wJ3cA[Ld}&qEE{sn[{gfy!=ҋgҳH3#B5G\x]ɖ2N߿1YBy%)ߨlɦZ\vHEiUE_2:"+ /2M#Ef,uu20_2B%mޘ>߽7%pRW3J_6rW_4pU)׊n }g^`.&1kyJ/I %F8Ӗ^)1\.1.<$fEަ{.1['ynuX7&yTI[ 1.|ĔrO $S,(20zrрu1$77rMQtuj_ 10Sђ3/ yh}m9́,ܨ{6gKഹ1x9h@:ln Ǟv2nCPѡ:'e{kXW&.OHuHĔ'O'T Q<̥+%Fl3U-%rʐX!14E;?ںN?E!Y$pŢ%{-VJiɉzc 13.]5+lbEBUka_EW|DhIcP1]20V: cQ]*b 9ֵ.5A_ocdo  Nh%<)_ c]Y=_XidWO%+VzX+k\`uv!0ܡ 3.if[m7,k*-+$ߛA9V$x´+v'MBIa %@ןMCa+ Y)'2墤Va|T0b ;V́,Hݢw+Q=ۂ'௃a31]]:%Ua1(rK؊5 oG. }rO,ôĶ0 ÂrhROrO y&y\-2$8tu٦mqODd@5*gU{cv)*5]z \1ٵ3VCРdWrkE4v_> }‡1 \ mɿuI!i6V%=Ewhڛ|UPѻ5VvH}t|GGS٣lxl󄢭C5K?/ Qc2(ƌ)߅q:f>'5EO<;% [&cښ!)"{J08\hX>|'n3}`f+&.B/>0S k(ƅX0$Xĉnֶ"Uf JʂuJ~rZ2kfL'冼ůX `0f{p*gSjrقSIf=a2/Yp%zwvMB`p"?b-sb J7^5+pon}# ] xrG,ŔkؒĞBӘ j5FCcuTtiZrš5Ƭӈv ٨1[7k2(olX7Ŕ$pHJcX WkLeNS,b, rjaz8;`i!)^0S"g{h=Â9LhOHvnz2pJb'X8#˙HT.ig1[gjK173Q5sr>H?~韣w7wŝ %bU/@:}oHVȗ"%a|\N>N8ghnȇ$][Ma^+Hnm >Wʜ낾cr@vŁ> ÏNF-S d/@}ղ -z }5ȅ__r>؆>mŲ>d9p;FҪh]3V1冘a;H;~).|y>a󔙯0lUyg_KS񧚘y媝=ayi0/u`H)kFW3͎n'݈k#nL2,:R^ <]?ovxKY{{'KCx LH~l\Fp{hLØPL DyhFzْˬUҌ/o{ޖRW)JbֵLh/ Wi%ӕOʮ<醇|vtoY&|)lӣ;K4),uvg*HSͩj* 3Lr7Y&3N+W3 h^j XypC`Uw: M8prZTKWSMgv%δɜXj=|ZRKCj)xΥν88t \WYnjѾ#?e؋Ci+-)}]+L i-JÌ-GiWEd'..c{r^ǁ.[mKpJǚrU}f'Fuo\>꣮'X/cVoܢlo S.:RPp[:npuQw_}aprߜGrH.x%~=~9h:iV*elmi(ᒯe)yh]7(A[n^~ou3٬]Y֡ 7T$[5mN޷. LY3w ͨV1:^vԇ$geDfR-L3VU\_ N343RI ~0x1X/}&1{+J %VjKv5*";/X+]b4$f28 vC%f-WsXK,ÒiF$F!:|%ѻs%KJÒeHtљl:ʕTrbU+1Sjˈ}M${k┗$]b%.-\WK#12a)$Vl M;0$V N\.:$Vʐmb\-1[7e8M#bo knnX]bj^$6砧EbԲp(Bzr!%VLeH^4ZbߌRbpG- E9@uqZnEAmF\buHv3kdnEJXu%EXuD~>NEҗ˓qpG߄PY x$ǩPHxx |E[F_v)o%" (Tt} &ѫȟW@4lnR6&57jo ^'QLk*Q(#~HQpBS)"Mžzj9C>9J e*τ9SE,_ZojoP. Wص8mJ ].>6cQ6@qoN 9B"uV\R_DXaS^^؛$$sa o<5Rz^dFqk5+ A) \NA#ej4N\QPKs>',>KyޚR 6y'l<݄ԛMG*淬1Z=~9 a(쳓U*su-vM#YG>6/"3'9P >^[f zܫ+ֵA8jPРOb|ԭK&]\jԡS%nK-am OEh58#[:lv);sulvCL 4*^ޜ̀iViƵ4 f l6RXwlL4Vc= ɠ6KWhlkfƂvn4BcswϨLr]Rn5B &$*6؍3dUBKQչ=^c`o ]&n1Ke cc 0f:T#(0S'j9a*5*OèNYevإUēr6taG2B#(+mYF.95ܝ{k40?Y}Pɷl+޼7fٹ3 ^3"A" ̰,M○Iaf,@96ho &8p̰ ;M/ eXe=|p Pi>RC;Qf (EyEZhoק\VnIn/<[M2(Îx2akQf,j%N,F{kXZiJ/?+_&ݿ?:3 !ޕ=o6 Rw~JR{oao U$>)a!NJNe]zdk 2Co\'g(emѤ&1X<\8C6*O9KnMݺHх(Q sGa(4.UQ2sVk@CkѻsfoJ'˫auͅ\pʦŭ8sL)7D+ZAp{IOLuқ1[!1ڙ{1Jfe[18e$r9hp:/35e$ne{cWvLa-F` [gܗsbP~ct}J?cJ. /mN8un{hLZX%NrFI\HC-aW{u2_&1xhXl T\MS 3Sj0#mՑ=00w=٥Oׁθ42̨X}`K03|P@yE.Y0+f4`fUFhafgGŒS|K%R9a6" fʛfìt0?lA ̬̒ !d0+f4`frq>DN]?kmiP*V,LΤ2GYT)PyR`Nȷ +`VJ옳uʂ~FBo5l0OTthi0S{٧`w~͏aJ`fJaF"0C 3fm%(-r9Y0+fFb6JcqY5zL7UӲQSØ$HOd;(xm$m< 26U%?c7&%[[mٔy\9?>2#k6DG5~hluk(!|K5P%m:4a|~|$ﺽuiFWzQ7!D8ۺ "0B"kA| rv})0Ԅ۹&]"Ȍ6*%"]pT>ݎ\W{ W ]` ׂ3H;cCvn5U'$5HN\I6CJAS)tw(XG$*4](ئ%5[<T JAX,un y6!vQ^LANXTn9:AJ= mm.J~h!ʽŕ#p5 Fȍcl߽ęMp&=$3dqgr$#3u@Z|WuILGZJMJ0I| .8 |'odslXjױ. ,LULP2zW0x=tsD{n~uxyotnn7݄H76\&[ .7\94qt'<rS*7M4Cq`p/q}8Fnn|s;s9~EySmUt9-O+6Zu88u15ޔˈpn6s۔ YfVlj[-KqtnЌє/ڲn Ǎm&FUQ"cZ4oL_~R<H i!_봿6y*l2}V'ocE-Ci>CZ_7> 㬹s9P^ʹdHӖp+N i9͟9Mds# 5]mB ׷앍QO?o?+9hI&F&βKL u)){UW㣖H&T,D"GN7a&̈́P5g (,F1Ϲ`LV#u1买wrQƆ#Py.j1 !0tQKk8zh!Kՠfַ#W^A`7wI#WH0Q:u#063M!9X[T@ס*!;B`зf&s/̉Y|# ט&bx*Kru0f zաJieabj&!y8_LY2ŰE}c"fa΄ fTf,501S>labnVhOGe˴2bfRPpV-Q6.rYԷ (9x5ˊIkug'醇3gW+2'>_[߄eQg"SrXv^ݷpQ*to[w˰b!$iI2"Q+(e,ufBaޑЗ(2FY}i&і؃vl@oS e8pr3Yn&KM&3dCnL.hCnMR7N0x\t S9C Md9c@K.^\ bz#-x`*]e,LH?}қm,(H_^Xhv/NQQ,ۨ \U+VJ@YP`6cJrh5gk=N2*UEi#^F*C$m;¿Z²oLD*[β(eY\2h,ƲeQY-/F4gtAcY,!&Ͳj,Wy3֔IG-"'rl Ơk t}gm5mpO?< ,e}kjm0;Kkz~~|~k^$_\X" K{ޜoͬ #/YS#.]"q&IMb }e9 vX6#䓺~L}N[K8Ɛ٧#+m]. 6b i#0 OĮAlAz1TikB 2Ц $܈yiqH~IxF/`2תA`ZAĆA8àQV?b|$]cA7Y7(.,xQ/.`=ՋUx>mx# _-9Uޤt x*,HKё &„DS\*FBwѺ KWai*ĮBle+!fuN!;OD(uJ'i4 ~ *U3kp 5XkPƊg!9ڃ̮Kf^faE| 5߳:'_W[x_B/Q(CT0+%^Ә8kSqpWPhtWpDq,z::a|Y^xq}ȉ8h5sÞ(uW]f zG6!}ph6l&Tk\p8ceb*0yw 188: ʆ 0Nm#yV|6wfnqئ)8dLCP%UnL箄He8b 9इkj&S4 Ub_QxXجઽШP:)b!ר[C4ʗ|+s6H yhmEnqXBZ`&AғeW:܆4=*tӈ0W%tX9uV@+Lɸeuhw \jҰRq2A;YdCȲ4$}e`Gf,sencYdc,4fܞ/YMZ윰?4$gqA\GlCjXVq԰[t2DgRg,V*e : C)e֐Ғ#rV#mwO~z?~o%wpŵxx L(|i" ZWMG(wԩq= 1 3wD OnBM ]7j.GPY|Lb)SKL􍉐0/7!H L }3oBeXyDE;~Z7.BKC8-Ӎh](>[B!-!Di:^7LZ,T\KwrqHew+SUe:,anј'TW0 \N)|jG麖B:Zg ż1b#)(CbQ,4SWI4c,]^X ccL5!egZL5U6]$?4b^ߜf6QϹb`@n1 o-ttqg9~htb)\2X6׷΁pڎxc-&:5FSZLWӞRcx,B,CrE 9e,62ՄIwqI?]uhsm^1F'|Qߜ t%=p.RWR_jgi 4: 6:9 qKwp\v?W/yw7؁w1*t3 cg[p+0pJP%ȴ`d ccL5:^Ji,؎Ɛ;pNN`,7冱c5ca}:⣁p~/`l1RǘjBJF ICeĘz6P; U4% _؈Cy*)Ad 1ԌǜcLՋ6aU5 ؎8 ňXKA]y zr# O pcʕ*}! ߕl3a %6*t#c :Ơa,w4"c^F 1ctA|YwƲ11b\BpA4[jԂ:&cl11֢2e?c1ͮJA r" Ʋ9^W I˜F8n-b,,SL4;R8*e2j െeYk1[dHT|6]o: }+p¡0} }Pj|PtaG6AGj*VzL@G/JmZX̗(p`inL >j>o>f>ӽ0*=2MjL3:%"ЈݓWl!piHGӄaG6ti"U2g:.Er'څȋ[jHXY+TO,{8i@[ގk!$PC=ˆ=jC4auTd߿qe]/dyHJpCn4+NUn Nx46|u 5&y-|:Jg[il6DZWĥfĉ1TCхr|NLʶ;^cCC8 N(]f[tІghө0ZJsڒӯ{ڞC}kh-FZmĩsz~wIㇿ>?㇧_=zw?<=o?j•ϭ썶oz+lŬ+OM"wHH7:7#gː>84!6f2J7 #ER*! \ âoLOg^2 95Kjj7\qlu' R:':Tub~0K'}khMFzߔb?JÃۿJ|+lUZHޑb ZQTi9]i+mJ*M7AKe/cEosEi6.!m SU.Bs2WA{],oP!2F?@ۧ'$?q)=K-tjL3,8⌸ T(msB ܢW 0e<v.sxLtQ2~ht}ٹQ}.mMut,Lvٵm\vW'-.Ռ'bcΓ =6eB-_#w2]G3FRLe22'MeNߘaO=!U.Ԁe77 db.4w2]x30SPM|2՘&b%!'aN|9}s0gU.+&'i=_|s;sn_̩t̔(u,A>eNaGⲗ.&pF.9ZM2_].˖\6Y(+a:B0SM$;aˍ1hfO4dK`0cF3iu:7C jKH0P0y:BYh0fu)%ݫLnH3 [/Q2oCN8zunZ -v:BgYh,g,}]wݘ Rz,`BDW(\q/(s?Km_?=}w{ P!HTB]{oN ǖg0:RCG*t/N--lbG^}E06BCOt~ u̢))Sw oL\aM}F!Ө0 g'\T :ُ]7*fZpܲ kc06B8wTP5Ix8rH9VO}h> 9=0'4(om ] Ù Uヾ)J|5ݕr\/bD ୼v܀uk0 ְާ %uO?@ͩ@PW힐wVN8Z&d#0 y}+z.e cj*,W[,C]7c:992Ĝ~ l΁ d Sa/Cep'9/ya.e cjBJtHX\ 1P5x4 XlXWJۜ Yx60 Fx[t\\s7֟\(ƼP_aHVt 5õ`q1>:{U}9*tu9ۯ@~Gv_cfa̔.6i"0I;vPa50ZYX#vوo,%Ltbo㲻JGt%*eRi2]R !,(֢&GNwtAsY.S#(?. f첄6Kw]\\8pˠ ~)QD0I$m]e\t .c"<&ZczL5VdSɁd=6B x,KXa>-zǀ%wrwA43ibP a 1>e}ke&Lr2[aބ^\g7R^AU7*0$RXIJrǔktaW6AWj"A>b+LXasҤKLӺ^a8LJaz@aMaТrw,,k gaw۫+ °) t+laYw,̗S jr:k}h>@W5I h ^b< 5]c4g9&NRSMtb?E':,Luk˞dk?er9ZX &9fì4ar"Rf.1|1a_C37&沣0=fYЬ4F3M3᱄# V04ӬtF34SMI8W@EHkK4#+z""\R/37 xa-z1͂#~ζiV:JL'`|~EC#ҙJiPf!+YXp PߚJ3/6b+_6 tf6Cl6W $7M30~ЌlI8£~2sc|c6͊1=G('ɁecyR+3ee2@3kvdVˬMHSxz&I9;L7YYŐ-AgÂ;eEV0%Xaqfxr ǖF6:nD3d gKeSi`<9BoTf.[!%jt5i甪5䂉u ¯*mcjFiAv,MG f6^ 5[~ lrjU$== Hg'%5h< .ʌ/O)EḩML8jIzdžoe#kbu l<&:ԾїsCޛO"-0 #-mcפw7~/ힿgkI/./*ѻC]yo6z!zba`FlҌ9S7 NAռW=`M`Kt)!b)%tmIT$kYu/IH H }#OB7wo9҄-~: }Go(teUI6(T jfdꓓr#]^1ӷ!w_$Dl inBLL#tM#5?U$NZXEȗ$Ĵ+ciFLfי+tRi)GqI1`FL!tRyδЙ|gn&GKL3]O4˖T1 K-7elT4»o}]v E}cbM~وT* p&d04Of,74SfY|>#[f,73ՄD*f#>alB C"ҏhCP9J3Z0#d0f,L]ĻoiI!0Vd'hLuȗT2ejjo2\4e*D#[Ì!;\]e\˔1#2ψ]i5$ i+\!bW׿`.2h.oe b02h.e )E[Z2Ր9-R45y6ǡ& uE/wY1]G}e]ee:x#|)C󒛼Ę7X Q\"iƲ5$,0b}cpݲp71&,cP1+Lkw8c1lޅ1=9c1 c1Fcʢݜb*AHX17&fZXf5FQbLIVla6n)1O„a?>1Æ1SMH MS ivU&]ƐRLA@U4%zKO/?ߒ\'W齖 +GcŽkҐJbIj,/K$-nP;HdbS8lu1XKg1LˏJ݂1%b0~ƒ~4UXhʢ0^.~h_Fch,7zd׃,FC΢df(N `J}^.2Vjm)YF\(Sۺe`8zwZ]Ϗ;痮ҵ=jmQ:}nk=|9ZXk, XX/PM5]F o63XP%ˬDﮞA`K}2V:ՔT649!mTwB!eZcw/O* GOd^Fؓ ?/"2̺r;n0Qat}biX??8t v*W$'_%3: Tvc#9TL5 r \@`etΠ9_ҼmJ5)uug ೑z1{]j.k,rߢ6YP۴!x`5v#t_۵o22vpM&v0mEɵ)&t\ \5:rMk~;ׂ`Kt×k訵&mL&֎׺ݴ#ECIXI;J1b \e[nES.ߴSMlTSA2oΣL5]oiVzedrhGSf 64jݿ~owww܍=/fR3,DO_|&D]/Ⱥ+2Lt]Q xnxuj*لBʖ3ZC.u@e0COyp!á%\ʌt= ѳwq;puaL?0J`x_C7`: iP8UHؒI'9uSZ% 8^-rtNY!&{-ú0Z܆nuҙ uz/lj6h>6ZKdzhGS,؀7ބ ۏ?~_Ǘ|tIt^@8!ퟳw Μ3X䢕 , W`7B\B?@;n4ͨ #Pٝ\ K_*qtpط_By e?~1&c2__gp?!+5ɞc@.ڹ#kO.Nч*XO.gáM׺~՚m;ώtNrwSӵ$CdRhGS  xUIM`<9Z/#*}7tj`-W ,t:Gh\.0.0?[GPhi Lم\VB>L~4 0.0)(9%iJ*u>!0C`E(Sb(JՋm.~*04L3ڐ?'0N5d؀YB-x7: ^̟LKPi1]rnb^?f1W}bJt2ߠm7ZK۳۱#Xݰ"PY,cknX b|ŰgGˎ#w°Xa1" SSMcaUQڑ2 t˪%MaVY m16 _-x]״a0,b:qgY ]hgYK,\a-eA~4YB环>g @xb5314@`k7b]e1i-bXӭ#U&uwXe>g*vt+|~4 `-͝sK)v _N8(; j uؚEf\p"ʼ]bW b"37-x7Ū}#mg)bX8V.x=u}K_+o_WF^pEV/wT0>_^Xl|W%x̿BRJ0"(RWR#;uKw5dK 69@[P[Ж~J |#+,RXbBh9O4+Lxyci`,uŁ1Ղ 5wh#TSZ\bY\5PT_E}բwk,&pk, x17v6LSjL`!=Gh;NbjS]j:npcj5r'fj,oUc\5ϟb\<4ИrA,֨ӎ+e7nOJfeKS7,w.tGl]2Tca< 0jd|JSMʩT,CJq6،#,#ͦC &ћ `%!{ ^n< ҙtztP E;n昗" x{ǒ~4Tidfr JN/±[*ڑt^1o}ͱ1j\97p α<8 X6qƱ$c;sEuFSp,#%9˖ +cs,_1ĉcsr/U+Dpcept12ᔃb~hg~j"],.ۑ7uI; ,g<[Bh ^_1 α|1t1|/[ :w)fi3xCѴji-^܅ XxR"+N: yc5bA JPL -f|nn0:R%dFT`L`#`8TGqW'0ٕ_? F`a"w=|5t?i5)L7R>6,9p(Js.r}z;`/?!gǛ>;NN:@:t7Աu[̗cM3 ;p~:M˲/ozxO>J;`_~-[olt ክ5=IzP.BMh 0W+qѸJ08iHūIP}QKBa_yAOY1P DŽBTp$x7 7#iHGʃص44~N:gT4hHGEI- >jnlg̕y9{9fKJvrڤ%~ǂs-z +Ѧf-v9 iА4I1huTIXR34TOG\"CΛA;ڥ2~ݻ|1$ƽ ohP DA8c"789D CN#lbFG^ׁl .B"T^9׿GF+tc LBݝ($dG&ABCwnBI7ґԪn $tICnu jUlJ8=bӸ]Q\qWfr9tyhI?J._ e-ec+\nuҙo˙7|*B]*BJ 烈#!G*UeHKȮP׮wMrK(tAj&9[0E.nPVd<=~xӌ ^Nhc*6pҳN?1 ܌V ]?9᏶㏙L˚c}IXȾ.I6.ڨ?Dd]ai[~85l-z7J3+ZQ?E61rEygc ǘ)Fw7G f5㻿o዁ |FE xCM7:E;s^.9EF Pe*;[D.g rg TY 잻ncS S ώy`8Xo<.؏&>=_ӂ*zrw?BJu\I,Z6Mfq\q\l`ovzyh(`BFKJ\K2/=}< Z+E>m٠#Jay5m~4s"å>:/ 2pdȸL/)'5^g$\wNDK"˚LOx Y"!2BV Q#>qʥ,Ma%pNfAck,t[q6nHRUګƎ5B XhCo.ۢ>i`Sr46$b~8TcW9(ѻ[e61~+. 1>Ә/dRc4e?՘SPhߐX? R ~g0I2ӐhYh5kF>7\9&"8"s,α08ZIcX3S)#qW ܰy 9;«xE4v _84И.Df-䢍S1-3E]^cW /~iѻ56Cck,iL2OypSih=b0h_1y]ΓCk0"hXlu&SLq9Hg9"2I~8D/Z@KhqM$/R6M;{(׵2DkµL}s]'fn [dKlzaO'd!3h[7t 6][s)mI%%KЖږQ?}fH_ Mx,œkeLp3ZfO[Sl/^9vȧbn^nVm!`>>4 L?|ݗG w w1Դ̍&X,A iV?hWJg_SY~y+gAէD})EmP_Bn 6A|tלYmohp_O2W: )JZWӁ~ia O5o.7JϠ/C)qt'Ӣwm6`_gә{J37o }r6&fA`'x27^X"ohjY4+VE*+^n`FAË4VhS̱f`faaǡL۾L}V5.f |ٽEcE?u]O܃eӨJd ` ioJ3ɇC bf aYbj3\8sg㌮/uh e>cz`UT$1z'jn@uрjebppNG3j-b>QzP#p* P *`gx'G j:8in'h#T7TZa&rh-P#h*AKJ_#mB;{w??|x~k~N)^y"2Rth#-RtMDw\BL]7#UB8ӧskSyB:DҦ'S5҉0nPWp}LǪ5B5X^mrV UT3oh ~8Myց,&tRY5[߶{L7}r4L#T2,|.I3*&!w)bdQ GCd]ӛේ~~T|b߿.[N`/ih͖ L> s LEu.ux%r9y0;`jŊk8 j@}&^p8[ a6}Kr7 w߰+ܞ H㗫!IQǭ S.ڨ>/|兒}I=nS͔SnAJ>'TEM*? ɽJm7<(4CW V@2:~jBݍXMXA;~0C<_BF|0t.؉G9Mt. &ލ-|9 `a,BSBx<}<ɧ^=1咂T73,\_RV&p*) ="'o&d0X: :wg Pe񺰐mb69~4m3iglCOl{oowx?{rRz!!U14!V{uFfI(lq>W}Pk<0 [0faOy }1$;xx`O$x7na{G7= PMM=ERr|`v3XFE.`L]qhP' uU{s mCQ?YT1^߅J .% 4NWiP0u AA)a P0-vo׬`ԏΛ^=PJ `~1xӐ`gYC 7 Qe{JA'z\P0GC'P3JLp~r*~OF3]L 2U~]Pj",N4h{svfn\iEVobI?v`#j m1%^/wnt}ҦrW.\N&?gX _N<(;Ҡn 2٧ZSj`SMcaUnqSlCfҏOmۢ7S7(rX:N.|t[% T%Ϥ YhEn}!ox/ ;'^nuZ;kfmWL|%ڽE.'^+xyO8YEwYQG'n6^'Jnҍ7W~27^!1bcraҍto6 s䢍SMc/=KJJ%JZ/ ~8mТȳ'Z; 䕎|<AOyE#Ou5%Wcv]ڃMdzNd<-.~r/@PL"#U[iPU&+r ,E"Wî~qS-P`(G^ca`u`A \:k{+/T/y_ O~AZ8H8* E(uXDރ E?J521'HMSN#/>a'Ǜ>9NӑH4j)ݜst7Tk"A-+ѐh<#n~wso_~x/6g:\l{!ҳ=?U3QiN{ٺ _Kg P -/lK >qHtD,\ JwgRDM%lʤM,5L` AL֚FhU7Bt?dJ},TnՋftD%˂:*q)`M`hƳKP&pڦ/qeݒ 1xiH91$S9 (2/,A]yg_ucvHPv4dw{ ˠ,lTЧZV+Q"KV>o\Ā" >S-V{oAyILR )IfKlns|t֟23OLMI3E__>7:hOغf>n7j7m!d,6/C)c3$zFr|EmR3D!{rvwnczgq%P`G~4m;ܭ?*͇wI+8e}p߽Ł@UP~eaM&|'l}wy9N40;Qw;| "}wށظN3<l(}wԱIZM ̨;P5t+G E3:?@N]rѻ(uѦ{!p݁́:hcbC1@]syq$oȁN?j;y:pAt$oT}A@ɽ Xhv uCDA0yd14*eC55^-r9y@;jţBK;@S}U!X,/ !_sw$g<$'Api}\~ݛw?~!꫇k߼/}LF%!/P'= X}`H>Z>î>3Xƙ)[>[?%Ll YC}`o cN[aJ{CGꓮiv0uVߜ|6á>ꃡ>W4á> X!;~J`Z*ы3/_Q[#xWGk׉=N|)Ξ ذg*:n[귯^m!:(?Q=:I=r(Hq4H8h m>%[WvuymrdHA7&G_Խg,M$L @B$NBJH_ L]/! R!^8_NSFV̸@<ωi:(_<: R ^h l z>LGho T?wo~?iGwepuXܓMKDM^V9& uв!h4 h\.~a:&C yx?${c9%p7R#v4 dWRE-~]:Xi(4%kΔs<a,KXbخ80(ٛ0+EZg7!08P|CҀ`tA4ีfJ{I!Z1i#MJ fr^>$h#*g)fWY"ԑ4bB\ 309tu&eb~ TP4a_̓<7AyE(v_M> =OaLBֵ~v5C#hƤ,q,򭗠ZojoNGRnȷݥRrI߂'emdgVDb뒎>?5B(hU{kK=/^Ʈ_cʓ^ޤ=1 c]LwjqƱ+m 1&ul4_(O` c1@l3rcIc?Rvc2hA C7c,($pBX8bL>bLg3Xӄ]厑`ca`,1'!bڜx(OI*֘i ,`<'#O)9At_E}}um|1SXE+rGam K2~j56`Xe>ІИÝBӘ&*sV.X͢*g7Ll,e\cqh,v1LL+3TZc~麚 kc^+SAck,vO))97LCܢcrš5l{ʧ|:6jVa%9t!ZIܔf{FcޜL yޭ1vcqp,v YHHZ1SjccȥB'{k٩_88vm2+dl.YVP$bI9RfqLZr9L3 xSp,ː' kc/'$q~F2c @I:⫾8FrEy"FHCDd^S:m(I&m$":*y])jĶ֓,ڛ.HDo #w$Kd,^6@ËR:T#B|ٷdnw~~ʺՑ,^.;dV2:x;dQH&k^\N[IVE*GuUk "^aLHmWJW_3XJ83exauR2fmIU[7/^+pїoFr=/B1;HCg2W:@m V9~GyHJڈ>@+^v+25)G_7 "UW 2Tcrї/gcTw8Tީ>Sjr9/[ÒNlƛ׶v0]Rˇ?~V>33_Ȇ7& KRZOĮa2S<"1hdGUYn<6"K İK L֌ZjH,}z/;$Ƥu$pĔ)%pİK v{؜\(H!o' !1!1$h䡝mYTac%}"{sBCMԯ*Zd!8(bpA1QH4~h#LQ R(,Fb`o p8i?'1E}f=ҰIV%n2#5a., K,,K&{!1!1$XlK9RP梨 kcRUސZ.1%f_JX]"QX_DĨK LP]НWl×) (e^2cE_hoNiZ􌥿_R[/euᅿl^KyWnMhPGk#5*_Y]KXy)_n5 FW U̖tB `QYE.X`4fE7fL j %ia _me #{c) Iv)rF7̘6{Kud 7-~UgUj ~٦ RC33m2*\ ɿTHZ&#ksbrX$z_(m_.eovryhjoN@9V{MglU?ƮWoh;ˆ_p aC[SvO5K(E6cDvHdeDvG7*2Nţ2=aDR,m`YQ!!pL#MdEfg"TS gvL1JtE{ʌtnPY* G*FFIeyʰ{Ee-~ݍ0T*Ӑu_#^WQ,marBcAR%*3Ҥr2 IEoVYj, e2eFW/%*MfC5 LF1Sv=jv ѝ0w(4J2:Y$i9J/o.`e^8P;@i:!v΃'B T=Wf `oK">'ѓ @h-޳7>}bY>3H#9E{hl#UC,f3T ς5Kui%zwDy:Cg,\̦cpɟ7eHޚ֟DgH1E,э1TT/n}g>1,6j2. )RC+ O\ܛi˥RZR3ڦOe]Y06W4vf5@ Ԣ!l6Mcn6=lt/áypԴ jkq۲4M_4:‚iBt|P{h#l#Y 7 rUYNZQ&&ks0)o(P.xc ^.4l_؟֙V~ao3mOMjc((7H-[Ӯ)$}f9+/?Z_5&5[BFYP&kR+r <Jf FnТK-.4f Zl 0 Zj(R1h-(UuZӞ{sZZK6Z,D*M֢'sCƜdGe<.S1[v[mFg&ÛX | ^<;ldr*ԭmkUkޚJd̓}e'l^uGaۄm[ؖl m񼿦LtrԎBB/@G!# ۲ke?l8mmet6#s'+ ħluƶ|9hv-(vdjyh;t?n[|+o^[E@N× )7h lYk hKjqsfr YmJ5ը8T&×[ հ[ LS/ X{hl#<\}΢nƑJNyjMIfޜ@޻ʍ}.;+Y5-]d-|CfN\ $r-S͸df\mcnI-hNE_ZX GɐX3b/[SjfO kv%ʜ[&ښZ)/b)A<_kMle"ߘ$0vFRW_jC;L}鸟WOAݽmޚZ$֛r~_~|"z57 [&޸T*YymۮJ08/#@{G/_+]y4Yɉr_U&yn%*(e{ctNS˓ +/ߎ?c=WJWAۿ+C/fv\Nڨ?XvPb-Ayk5Ms>jskv,*&m3C5$m/cM=ֈ*̨.6^gʷaKZl-^\C|JZ#^ RM⡄xM=MR+"8=3`6`+l'KYz1K[Ol,s-)FXP:]E<+HAtY~ss@j[rb;/ A[b3MK8ucb3fWdHyhٸgvCs0hNM6ttB-t A[ IvvSO 6Swj`\B|)vCk$eP}0e֞ݟwO_^2>%b /DD<Јh*|-(BD.g^k*VG);(W!b" !&3)~:ү̐#c,rQ"D7&AFuIZrRV? B.DBIZ$-AN+':{r!"v!S2x BfsM܂B7'@e}BרϤCe2A*yZ1=dL9{kd+ϓ_ |Flpǣ)xoaHNuZX)_&ŒE^gIRE V3#O:zui|>}r3f.cJ1j3bC{cDR:$6kK 6b.6]lgͩ`[y%jXl=|hp&R9MKʻv3f5Ԑ("m9`)c ޽'pFnp9K7萇6Z/==e7 iY5uʽdnE,-2 ԽٛpBAjUfy+MɂR!F`u,xt'@קҬÃ{MsWFG9vt34cg!SEsޘϔmj{v  x0:{܃uxvmx>_; ;KDzBsaF} ٛ«@$xF;LL.PYC.DhƝuvV0dgܥOܑޚ?|[yyFWwţyᅶfح݊fr×3sn<|حTn; tLge0|/?o_pnY&K1< n)'ޏݪ1̱;J)ún2"a햍/ ]^fWۭOKSxӒr_"]) ٬CXhVʛhV{sȢT{ФaZqr涳lcW-Ἷ|C>孙kԼF>%Y{V8ec}UgvHiBJS;l4[]M9xqI.F&< ENdQh)d^ξ)oI,*}3rZ;*6?)ME=*YiUi;l\UޟlJk˕Qi}Z2a8Ҟtq8 V<֖Bmj6'@*.-$zش-t>4vrBȜD%8Ѥ;5BH~శʵ]]gN\~/>㟽ۿB_õGwoSA6PoFk4H Ӱ!`ɲK#q0vAC4V[>EynSMC[OLrʉ;'a7&սNwPyHQ70vN_z?1+YkF2+/ȱ0ez{s ڢwP| ^^}t4$qhC{Q<?>*כO AZ\-ޒK'G\.WB96ZrSdN(/(K [ZuUIo;]k0]kDk6-"F*FrBSZ"!񆒧ڛ*ߙ2yJTc\;3A>Zn:Af+"'7 6IOZI;_dM%%]Tk- .6b͔(75Hdy>Z"Z!6w2J2B- YĆ,` -u.6Xl | ŖR ߼H|~'\PlYdV+ķ aUGڳb@I}o<]li-ul&[l]\-6xy݆|պFl`M )3pOb{,xf\ش˖-5*`FwZ@8NNPiG"Y%bdIX2M# ̕z[bKCl%g'Y/L3D[~%{g"R`F4\#dMŭ2ꙛn"}orE%ѯeU> 0TY{ M06ȵiaz, yQ R.@vPĝd/v,tz pa.Å,18qZX8}BZnh'΀Ԏ:i؅ \X Kwa|'OH?mROBhz0,0%YNrBnfIQF%G.S`[`ȏui:m `*#ȃͮ{6z:,ǰ1D` (` /r릕8'I@D, A=C`[iܸtt!7,t!cnźnƂY՘Ǣ:lmܢ3ltx5P7oIp7pgq-Y\o[xznlqpImq>Z-7۽\\M֤$\4?.S&kw#MneK~9nOf|A䬞6ʸLx!%Lܒܢ7Tdixh53ۙ5uLEBnf)'%oBn)Rd7+Q"$Zh*ː*p{n[}Bni-umΔ0,#u`! mt{g ux1ݢre$ -uN7<\Rt8Kn#S ϟUo>ni-uM:7V2# צʓr{wbr&=& ~xҐ[rP'Yf/tK nn` r)Y7s΅<8vo[jtU. &lt#9&E%35簆]@_?Y؜Vi 2[tKnYF7Sv+'y<MXԻl< $zc&UtҵOf=;bʽμEp5LIS j,tƼE2?Y~Ow%ͯӃ@W-=yTShGdy9$KeI EكUAyzS.|^8qiDLxWD!D&:]wzI$TCH$NB$,32Hרe$7NB$N2HhqBY3#mWv/0CJWe6v|{wK|v g}kVOK 9NJ!G&9lY6MJ\)um!]CL2# &} 6@d\s|T X5_^=r+ xר{ /yF)r$ϝZ^5^5Ӭx9zMN9ql2ZK(>sDڂKw ,TexAk:ʼnD(OqBkԽ'^3zQ5G\=gPk?1C{ox]luv 8&[7Qv/JJtضx<%6w QT]M`[v 3ruvщl62oӤi@5TcīFP3q?D^o$R6T:?;7tev/^|wO_ܟ[c2_ӯQk{n]?߽x.^ -N?鯯>i+j?IW߽B%$_?8:_ ko݇Ow/޼? !}6~O~wڡ?C-??i嗇_Z~yC˯->+_}?~zÏߏ۟{^/Oo_o(x7?ܿyV{hcy[N"Uo=@S5VyϬ2 L1 w%)[$g70=T-}?/ƴdEut ֽ0y1{UVב%ӴGYU.}gWh>]sxp4_iE߼fzԕ` 1 EF;6 +->0`)6BP7S-:if 6}VxR:nr64\`ѥ`35+ϟAP`70`Ӓ[XHyT.Z6۽CGXrtd>RQF%Z-2ioR~s4fi-,aP@Wf Z"6=!,N$Iv.׃s:blWoPl9ElWa'M@"6'aD6Zz[b ClFt+\XŖcH{Uյ-;@=be+vi@l-vŦ\0ĶQشIl{WP9|[b Cl%>Jʃ|ECbUjM*[w')m>nEG,b弶7.8‰lbf. WT[ș?2,Fl) ۙw-V$6V=16J!"Rlb#Dje'|ȵny-wA7B.KCDn|r[ .'>rO-ٻ <QWӭOƍ$t˃n-FgrNқ>t3458j!I-m%{oЅdxOr{,sQ5b0'՘lWtA z() P+-ٙ'RY]<2V:i0GcV-NfcM?t/XԃNvBݖxdTԻm|p[nme\ u\ֽNfē j-qrAwB0 $ݷ^6rʉt~fh+mm64Sf fCBT"⓲6OQPE^[ŁO!`LT Kà+)mZͧ{{ ֊+*}99;e}|;'宲UԃN2!4\`ЭVѳFtQӭj}NZ jQVV3RŻ`"$" ЖؐedN(Ψ np k4&@ *;~g4f4mspP 5`jP5)2ɭa)o<&w{.~&s7σqaYoBe%& ̈́ڲfy6a<#nΟ$t8צ-2O0N0Hh‚_oAMB@p՗6K {g N6V0iǥ #>hK i_yM c7a&4MJL~ƺב5~Z_97';qAo沯*voޛx S۹rn4*RFm7ʢ6ˀrٳ-rU[[lKm l3 O)rzE`ml5XB @: ѲmL6e[^:Rgtl72ƜkYhՒ;vG>;{zPg:C(>^>Y$RO&0GZ>+g,f쎹(V]6ip; vZ%5L/ZAN}7?Sn9yT!^gM%<3[IV [<, (XνՈuFCguCg?TS_w1lQxV<ngh S յjn ˨ x:ʷE}0303Ӥ$qPXy]Pf[HC*6}ޝP25v`yၬӯ+hFfi'43if={I;S*f2HR$ˬ^*8eo3($rgZ2CfˌL F1T^<-$m xJu;宲v ޯ~wZ~M yn@fˬv3Y^j]o|euvpiJ*$=,͋ }2ۍĪ)DlIZmyedM8CҾ~mWLx4iVj̦PG;2-=fOM^??_q$"qO~Mw\?k哤4U 6gnRCrkfJ{#9cI*^|swWZUdtE!*5r"5.zs^R"Vܘraf.5|k?6mR-,]^jVfX8Ej"uU{gx6i3ӄL2#<5ԔAFm5?jۢj ^Ej\\Ϻ3<41eq*gi?I|yxU{w kū XGK6>kxMmg٬ N9)<`+H){9jrOZwR-| r htm5yr-M WY_f*( 4urCFIBhx kr42-'և -4Uh,B3,/:)Ϭf"k>T2y ɴv+t)4-@ K- K[pm[^Si}<41Oq&d%A#<4Y ix68 AxMigFָ/df>Pd*XRS.̾ 3U%ǰV1jׅ!oѮr =oduʱ(#Gްjp<և'iS٦1j"jPƤ>&)+h,;W˱!mǔQgpƱq,`a7L;g[9Ʊ8f[x%u*z9lSeEA*L{ό8yFcޛdB'i<.vJrA+2n|\&D7 0 l{k5~hb]lx!*?hޛR+@2א2E>=~~{~$}<0.84ŽԑGa_J6:PX*y sZlgPևCablP4j."BmQ-Wd3r4DRnQ'D؜w;Q'ޝ8LBR߁ۚDhN͉9Ѵ&RcD'ڦrv+PKIPz_*+ʪ~m|8A6( (.wkhN"!u'F{ox;Ə*ݳ}rn; V)oá|Wx'_/ dJ[B\ʲ$paCnh6S_*J[NrڌQ ?uk EaHl$׿EׂhZU%C\Kki6sm+ow֌uKYkKd;A$gkMy, 'h-mZKpt:8k-ZŁˬZKMki6V5{I5dfxeʑ{QuF9,Mބ !<]Zu96"~i|![jXKk6栣P_6xbQ%+(9nC{o %.4"ڕDk6ZȴhTQ֤&jbک2rV9Ó/LxrG \EZMkyZjZ3,ĻFRs6%GM)(ԆNڎ,kEkKpƵq-̵17m\#rUA6?kq-o\Kkei?to䡉U/҇Q~TR7c6j;zSELi?߽{?}<~MS\K!= MU%ﱀw۲djLBt@HHHYJa,'!5FHhZHʜ-F`K'mQDj-0%l 佦R#2/D}yBo_PT{"ܚ.Bj"Mд*aqtqD;Y(Bd=reZ:^ޝ%acfMEe_Bj*MBw*rEBxFD V_uo0{S$2ψww-*MFyG)#OgXkU.%XpKY x/Ỉ>\kilZ5BsYoe{m .UK 3)nqWt5i8keZٸFxҹt5zZi\+רqʹ,!|ގ*K^C#qhfYK$R&*ٻ#I %Qkuz11'e_εҸV6׬ c&r60[p c9?߽j BAr7eAetqO}u$NB,!2I}:) E! T0X26Mд~!xe& mQK&RSPXY]2ʵ57ºn(,QQ78ÓOE{&ˏ_K,'͚'?ڠyv`e J:E+ራf_M.z- HeR\G$U-w&MuKFEq^DTD,uGox; MTJ1Ύép' ;oă^2s/R-RVyHsaf wyh^P]oPM䡙iɻ 56wse8욙?uvMi<q#n!⬓$az}4sw$!;cރ!yo>>?߿?=jݢ~"z#IjOdX%i+(= Âǔ]b:!:-ɽᠺ:͎T\Q"W6?ގ16;nG&29yR~AC3hRdK^RA(swv,/ wEy] yfȊ ;\W>O,hT`*Y 1wHqFuD/Z޲'#n>VqzK\a C( +).vřDņyqzԊ GQ\1;R\ћUqJPg\i8qqqk#1=1d^akq;LxQWX8ۜ5zޥFe9e2']Pu_ώLfbK]q/g#nǚE8ۘ#)/ qteד[xpÛN`EJgt@܈dW\l ȓ"Y:Ktd8 .+J a p gZ^Ȼx.iE^(7m4|IPi~ ;zPpeD"Faup`I1oYw 0gm͏'va#t6sB=S:C3 g3y=.N!!4 ܵ T8}sbV89P2:>]:RW(+R5-ߢaqYY}RZO8+]si欻o~AsȚqHwtO7L406#x_pJ\ixni~J\i9$u!%pfrfT%$TFCю䕓n"g^&>md4 EWRtYS֤CV)=lCIW!Fy)aNyˈ/ oUN~yw)3̩$PVZžpdB[ 1D_YRNnڼazBUVJi}?WFT6y#A5`(sa7QyTO(Jvn٭Of d&C!Qn͏[vnͶaK)_v,cX0>,٭O۷4]$Gʂ~i|!U[tnn6;#N~hjBJ۠Q$ * %Q\ѝRAv(jw[qx#\]LU-dp>SV_> *O'JȻ{j"a歷RT蒻+?Oƹ8D=u*)g*8EqT*d/ō(`C\U^'Ӣp{ɈKECfۖWx՗'3wLvkR#8c xl8eķ<4"3;.Qܿ48rʮ~m{ Ms32oi9=NqLဈR-09;֖~Iܗ~7K1x7o>o= K$p=nGQYsGbi92.eWaNȜ?`ۂ+kNy_RW\jî8챕Jͬ3n8>"0嬌4a ,[o &Gti\ls9 bQY:p? ˪F]_fS"xJ _[|SzOPgRR*T&^ߦwtG\n[ZRw~w_M_ ~^vXsZ iy-/CBȄ"0!Q-9MUjEI }:5L6C4ɕ_kNͬbH5zvo3C{zߧyh&ե M4kR7ΚR˪Ⲳɥ]i2uM)ù (˔)Zפqn+kҗzgFD==afZƳs2Rɯd̍钓6|I= * =*prOwJAwiuQG uδΠgwKtǝ}~u(CLI3uyGoktDv9G9Rf30G s0']9te Wm+6Wcnm~L{'T9R[@0+1N. ֭"sU2+tp*wι8W:L L,.oDQ=lÑ92)}9:seGo%7FyC9W@Y\mseғR¹񜫝sqt)|t;8$s[~Ic=ù?K&( /'s%cW}QZ ʀ2yhsᇑ)DJ^yVp#l^*2wWqq='VQ. N,Wr.Q .(ޕiJ n8hp&Uh{#ex0I Gޞz$Bg. s,0"ͼpI&J04A3\[qc  GT x1xA74n8:< I:晆3m'A)J6y懎7\џ%2jOY/;ꆃn8h'8U'NMiT99 1wdTE^*ކsTg`圭,7崯qęuyHp*,25ށa_}@j3ǻ.uץ:3TE8njwmr7Qr%뵫 nDm\;TN}aIhR]q{5׶ǣ.uԥ:D@ŋzʯ8qD1r]ecRh pGwJea7J[2(uswcnnLݍƵc#ȯvm4 (kFLq,эO4ܘn7*˙u7[Q)e qx7ܘm2ttyhD!m[a*P%,ОT(\Zƣ{|kscL]oJ'"R TKi zH ݴh}5表=d:ŇP|=Ǵ9Q_ZOy#.ċqKqpC:FԟY"ʽɳzlzVϲTeչa ?T? ҼEyy^tyK]yb2i$#>LtyPdՖ_[WKssst?Wq>9`[g*vݘ{ خ&7 DפЧm W~ky 2>6̼WgrOEGN: K݉=|3PϽP' zM^Ы[wzAs%'ɶCy^B^0~zkY0!yT5yk-дS Sd=Eߏ~m_k2o]zZ =`6Ɓh+*Pb?H~m_k2֍k"4=5\#Q0؋~m_k[w~ס,cJ:k6 mM[hceܠݬ݃,\g7?:(ǯ8{$;C]uCԵuQU=Nk; ]kvCi p]k>솺j77~{}W=Gukɋ tRRQW^a%P P'Jc7MxF]nzԭl^Ske:uXn({<Ǻ5 9(hPuV:~r.%0˄>:7[ZC|EǧJw~ 00cĕzW^m( Hw3 *wv^t`t`؏E٪ЪUy{ *cZf%Pk aŠΏɇlhK [m%xuĝBP7 ]WzvWz7ԙ W~U7` >.0;Rovtdž]ًO؎z Eǡ^4 We\T]퐙ؑzѫЫ>>fSg@SgȦΕc)YrwafIL 6 pqP=†0Vܚʟ|ٽнڽqHP/l(BS_)57'zM#RoфJq7)uc~#fkJ@kJ֔u[mM-zņҀM^{]w&&><f?E@?E~c)QQH-D"o[v/QPƵqKl7ްz=jkԌ[r і] Z^<ɲ^8*F@ہ[[6YJu=lhVymtg*A]r RȮRP[ZZGwb r=z pXmW+R9hI;p願7Ҕvp5es((C\pRm"jHקڞ5K'+ogolեbwPDzlhٞ?ٔYڍiDE*6V7Q|>llpl{6ll*GSo=WJ."|P45Ħ'??,j''Z6H0^:SmjCqkWQ7An܎'` PoAҊ)-4>*ԫ7r.K۹}Xԋmmpl6mm j [kHss2nJC;|>}_拟o7zq߾a$:_~[c˟埿d~xoq?:\ror!ijH+ĸ1!&.Ę=d=& .&wNKL@ɔbb2-1@ $+.&wNCL@ItŘɝS'A'Q'IՓx $R;wNCLWjD|8%xƣJ=N29-1VVSVTSXO^OXO*ԓj'x Ƥ)s'ݶ/{w1w1bi^#!!X!ԇDlo2Gk"ŢES{t*Fk|"~sRWj.SO~.[y1Ny R*u"&ĩ;Rx=d<,FUjvhv*)5hKbTjQNq:k(# 5 ǬH-WbP6էiknL AEQt,A[  AEQt,A[ L,A[ qFq,A[ E,A[ E,A[  A|8 Cй,A[  C ,A[ YBY,A[ AЩ,A ]Nzֆ"'q>0r{6. m C0C/wk"06 Q@ֆETamP)ܭ ˨@|0GB?[Qa(*AVp6/ۆQ⻕x}@8EHa@mTb6/ m0$i}nm@^58߭ ˨|0,PSVw{JFT'dbBDŽL2}H„ "da=3s1=bCِ!#i1 ӧ4Lϱ&r0"^=330=f`Cِ~PL|SɆK*Ā1ѧF/lHlD]Bi}Jkk! `(f4zh)ч,Fr-|CC)ѧdFL]f{&#* zPcSv=J PLaS ^K ^ . L殡T1ҧJ2*QPFb>|J)}ȡ )gQ92R)}J1T(*8.ܗ( 5mqTp]ƹ/P  ⍢K8 䛡AQAQt澜?t34H7*}9{2fhmT%Eǥrd ٨@EF䚡AQy!H5CTJR}1k2xw2 ts_Ι A$PFс澜1<343*c}9_2ifhfTEgrd ˘ ,3ee12#2S,c cTeFe$ˌ(L 2SQQ,3,352&2.LEYfDYfL̈ ˘ ,3ee12#2S,cN:TLEYfDYfL̈ ˘@SQQ,3,352&@TeFe$ˌ(L b42ee12#2S,c:LEcDcLLj |@ SQQ115.`!\ -=,L4SQQ115.<_!BԸ:JMZ×#TeFe$ˌ(L !2SI,3FYfL̄Wχ}'=}/{/_o_;PK4sh4PK=i BYxt_6oOmG0#V/ыs8)ޞgMNqFزֵ0jHbIa1rsm>e3;5(%1Tw1(ށgǑ"`:\0DRAR_r%$`QH%L$<|d436:9褣 "ՖgufS>`޺A|iGIniλ_t؝}qLn])47x7}jܰk=>&11k嫬.x PhZG \ir1[=ߍ]ƺoSnk q_+@6wO!K9[Mqzqw__PK mPK#V"sAGwvFof*^D\`*rEL~r=^=['YS='BM2>:Fq. ƽ _20f{XHpؐ z#,rނ5.`4 h"WNZ7/&-I:N ~x="TV.w#5S,FFfsV. BqβҦ#,q[E$+iIs$$LFVBv*z&,!l> lM7 zFJ&Hfq(-!^kJd2>ڞ IIh'D`')ýժj&6^ Q8s `1:do=@Q,yVH6nZGs?jVr\^3ɪq`(KF'rۙ/l:PEY6gI;)~|Ϝ3xx~7یvl@㦪!E5;V;68>8\ݍL*w f0ASv-hT4y~3lrlr#l$VθX vS#x@-8ǻRغjQ*Gm&Qf^9>YѹT&湦euJAk2"&bR^CezPU:?5yLaLVKW﹝׎P_S^S tڜд.AFVw"iE"Ǯbܔqs2n@{\H຀gќF {_FK2nǸi" g<14bzdZ,GEbjJWG5SEQ ej棚&C?I:o+*š:iEOOO7q)q΢?iLI6l;^CעеBׂ't͎.F (͎/F (͎DQ/#:[R-)gKva5HlmԜA޺lU5BHD`r xZ."(!OB0uKRiA&l^u~)UacW-ېWƸJᓏ<8.q̖WB85Bgޒ{sH97\z99 p+"T;(_+N^OrбmUY*,mY\Y\Yڜ,mXZiHs>4i k'eOB..4B+8\[[6)&"_p BxO0?O+̏k5-8(Z4DR:*}ό?R8%t8E D-:["--H %@Y4lV qeg-tߒq%E&m:/. 2m)m)mu޶>MO2av}r>puRܓkKAO-\[26ݣўk+{mǥηޣ/ګ˷k#DG!W?$GPz|sotս|@3{8__Ze+k7-+nܘwzvw.ŭtA"g]ʬo g֟3,.u^n !Q/}c-Ow!og vW{0&q蜅t|7ܪ2[:||&_Y__X15E,{19)nlO}!4m)7;]X|5"hͧp50DX`.eCZou4qA4zvu@ixRpXXD&%/c#\/㿘GrHY,ru#*Jf. Uj\^vPrI_>Cgx}C_%y{j*;Tu~(r&4%AGa7v[[VC㯍\rE&C Qyz8VzDbRkU%bN5洐 usȱܞrI^`2g4*z5kM sWZnBskwmMwJ{MX̱y_^0,Ю>p; \sqk.(p͹ ,TѿIX4iu;g~S1G|A--|&rJs\ 'z ָd1֋gq-N'=&eEXlu)cvsi ƐMі(#kjʜRq-H.r}_k!SS.uc&@m>ӛYU [}|+X%dI;pjȊze{.]ʮYq 9$slU`뭵 ZJ>YNG亠'iBVīV-z nɆ?Cцw 6GB.w lr-$=}pB(¿ʐT,q hrbW.]}@MسJD!P03F=F-LZ.Cͅe6e'&Wv1L9P'XG2,\p?(4OQFEgtT7*)ŲNv3DnTQJ}f7i56r9mvN \f]d3yrtqTCSL7$m^pa۷oL+~<%#HMxDɇ=TܵJilr137ZA-Y!5I@ 06}1W5  (KRj3j*IFCCGJULQ]TJGTMP[RLVTWNVaU[eZaj\gseVKe[VkcZtgZjhgekuoqhjr|ukcytix{x#*(/088186AG8MATEJFOX^NUWQWZ`fVkws}v~yjccehpuftwy}x{x{Ɯ5;:;;D}?O}<t| gwZS9 C'ӏ3lw(*r|PCf_SEO O9q,Ѝ8(4.Z{͖`O^t?}l9Ìү<D:̽a37dRf^>DXt}`2Ϛag5K%JO]}IkG:|zbדfo>Dwﳳf>s?.HJC)5I6}trN@4c֌ϭF.s!w_a=r=,~x |>DÞ㑎HGtU +;wt]_x/?0KSDKmG}a7_w /CS,ywwwr `_kA} ; ^dD}%_oo? x W7α~~o;~ۧƒķ}t{}c<=?|w^:|aߟ?H7R?>|_}968ooߊ#G[|GGطac{wl6+/2/o~.p7/Lю߼;Xxq/ rO?[~[G}Kx}+lG1ֽp :x#8NfLDd-CBAUhGۻ1Ɇi)[nyUh_tǎ>rQ 7띅s#GaϞ'AKIy:֗3!DGpO/TWvU#,pQ? Щ:"Bz`t0Emjo$zp …z=sO[n?٫ Drs+ `"UxzΔM/O)o>]vi i#0.À^[2JfJӓ n+* zX~jlq-y (W*ۊ.{팛 WGG:"t U  2cxAd#vD@o3,4Z 6b-U)QQBahNӏ3XicˀlZ^3FbX?39Tjx8h#`4IYiy9v𙹷ș**l+T!v4A(;邐$2DFj3$D9~sA֨q{{/o3LPVTQ8k&>c,6|"@S3v2 fG5Fɝ O2 sC/q@Gc#B=7:"h?.(J]9q8\}Bl@K̴ fٟj Zpau}'ʫȥ Dn agV#lX=hl6}ԧ)IGa'm ,(^ ,|mC)'!/Bǜu1I ؎f9 B(Zs%KƧ`I1UzMWLn_:ĽΤ1"dEݑ>θ20q1404M<GocSU(CD!0gXO#FcǴVNAZ" TM h qAO2D84!aJXaZ3yƜan洔R̟+^=6x7p:m&GXGS3@Ԣ1g2KO[%"/k'p<񂛤1VbgBPNZlm)sRj/* 9P편>/8.͂Ym13: >zaDS=n<`=gᆰCbβr-kfGTXGsy9\>ztD:GD*W$$o.V}#A!";nB h0b@L( E?ֵ}]Peh-z<鈮 11Vc@1bBh/QI \PģUG֏q{xpǡ#Ye&'-+' [fn^`Acj$"`#0b|ə(rf&[K w95΀ 6›v`LrBN}"%%۔2zG\^ v >FvLB|,Qr"VvX XS4 `|v7lʗkkyh+'+#99TK9tDWQ_Б>PlU·p `ŧ0B@E] 0dV\>w(osм܃p='CtU|\RND_ o&8iK:]ujRxa!` Ȃ|J$"ͦB98C[2J ̤I:O]9:%L } b@03@tZ&:d 7. Ff;7VTn`:'GD9.3- {7p!<< BcAMHB=''zS iP6k!6)[Gmm KYsD70F3 洂֙ sS T)oWa`aȃ}.&H/ѵKca,esmf`bym1)JY)iSFմ l+*ލ:'Fhoˏ h53-}a斅 R#uj@B U5a\9qYPeqFܽ%7,ꍉⱟQݪ.;Hauh&>+( va0ep9ae ZZ̻|mt4 lhTjF^xctD:"MtaTu^t\ʰ"cEGVNPZp[`3PNbEg`)5 _vӸ=D;#[7¡Fim/ 9Cfaii7\*j%Bn@(<v\=589E[XQ%{w wxY!7IzLpOjnR6YS3*vÁn:y)рa, ωi~Tmrg5eXۛ7U5j<:j>rAm΁STD;X#o @EKݣErWE AEb[X:'a< -߼<0;A]9qx_PxCX+tzR2A Ix:FR#GTZNxFc_ƙIɡӀ)YP 85^m!ne67y[΂Գuv`*"[,#sԄ.{b+NJԭ>|;T!y.l>lΊHуc.K#Å2%$HMlGo*A;qEʏأ1-U?Z OyN*#{iC SXs{C4Rs0 Ȣu &WnExam?M0Y9i8{n+= BV΂(ZYJXIVqJlTFrz&qd9qF^4Ú:ViGSgP$'v ގp`A,ۓL:'6鰂#NUe08,@N.u\9Lu쌬0GnGoHG4 I3U\q lP{NK45A@91L"7XRWNB )`.D[:׼{TkRMɳ$jTӂ.RNZ?yaHK/5TV-J>}A8Plk&p6YRe`@pHѦVx Ru,\.ě-&Z1Gv^1"02 %VELa(B_BGyc[G#X"BH8O*Ċ ;hd81c'1 kHܕX["U=uDu$VМ]T_+ep4;yYkΐ<^!v<[e` 66rc,ܓ: Q 7w%@]֠k ,'09g8Tbm4VNw%X:܅6$:QR@yr@]G q"='ؘ枓 vd9f}CuS <̩ZX,[<=XgtD:+(B /d]+KP_"H dkh|VAsϟPqp5iÆ!,SN;L82t~`e~}}tDӏhK 3R#PtD n!|X2rחI- lra 7n1^+WNT <`Ľuܠ/RN4wuܭԂ܀wB{m" }8>J`JtCYE,NLϬuoeqk" :߄vhU('0XG똲ZQ& =DZ9FVRp<$Iݑ#G,^!6BC:HG4mx3uΨ^ylb[v"K"zwܡJ=!<ќ"9AYuNEw,bX$ںW3\>wlj`dX_C'ݍ'Od'uq+(@gTٳgYAFN—6 p~DL9tt@LҝIENDB`PKvo ni):,m0/=լOƂ. @Ӟtލ IZh]WAHKR '#Br#YdTrwQܲP\u JpP f7D}x:+} be])4ƫBV~E m#<:5Љug>4xȖćƆL<۩=h >fn{!=5s],4:6{ͤ$ Kluu"VeM~ɓWon~\{-vyroŻg^m??.ɋ'.?\^7~߰''t/i?^x7Oo=~~wOn~v_n?qq(~˷Op}\zÇ? ӋNח~wO7WxGy}}}]A~y[/6j=דm?{u'Wk凌xa9ӻ&27>yw/r{O'+v~}߮}i+Gt{?w5?Sx'n|˟[ן[V };mxO7-\㟿Ǿ=z嫋.^77;]h>{准OOvO h͵_jû[|^_}~ꧫ/>?oWE?;;tuQq;r{«7/_{6X͋._4vi?]:|/\=^J>Y8h^/_^Z_y͆m+ջ/ڞO~i)~k>{sYӥ/_Inkz~onQw?~??_~_ǫ~oW_?~?/Ջ]ϫr%PޏnЫ_v3|gqC'?m]<6=ygW?|ӫWy~#]]~zïwo]} xsI:߼g/ۭ\zoWw-es~|򩺙wWz뻫7?TGsv]B?Em'uԜټ7OV_^hTv˧q=Իy,j\^⟮>|x߯?hw!bQ=~=i[sي?3mLެ,ig-c]LC|O|Z“Ӭy/_^Nܲ]~\Q|ߧu9+C^QQipȭhl?ChYV]j?WZIo~Ս_ &x^6ԛU͟OP>L'z?Y/}^n)8b~ ~ûE~#z}Ϻy]Xr*n*8!Uh?gg LT=2Чi{I[3%Oa[i>a_im}zSC{F?zlwW1w;"?}u} 8:EɾJ(g/o>=߽mn%[S lwl=6/ݪR?B!T uso x}iϞZxu~ﶫ?n_~ouɿn?'*~_'um?yn,ɀ]xfk~?Ťur7{S,|e}v}O={f "z^G1K4F=K1嶋[7ۖ-~˶}6AZay77ٟK/߭63h֗/޽|gEy'o5R"\s=Qw WN[{omN[ͯ} r[8}oۦݿj|kMQp]{Ѻ}K o~ͣVX鷿 ˥v?_zk[ʵSA˛?ݘ] n~u[0.n2~.~|vn(z=b7׉>7v/=7?xџg+jrەU2|?}+[Jm ^y?zs7?moOc?{~/A??j&i֘__ߍeѓh2S8w2\~?M1:[#c'|D'|QY- '>|̒ xx!ݥo¦NA-?VP+g_6T1F8{?89q2fq%qHlR# J8őx$8 Ƈͪi[R8,/l:g*ޣYE|sy&Me9(*)1iq'XgJ>S{Cr錏qc^"w!ʷJCXTʹHQ#ȽiHzRf!-"s&|g[N9 IUl,kgI,ڴ(/Wq0$a @@f*N˥:jҬUa;k\B\6c4̤VF5=4%aJH3TɫuDɡW{hUT̨1Ti r7pBh RO)d& @c限5smet%2TUvh8IՑT<.NifFh˟+2,L$UZ@eO^_2kiaL.斻 w@!4[EṲ=Ѽq,R9h%[!w@!`ˬJd**RuD*.&4QB"U0af$u R6$wo D~R2DeX$/J mn}65nI 9)J#3i@Ios]Fkl' ªcrGs@R*#XEj9۩ʂ!-؞2T46$ɄBd ?$O: S]#^2T 46=}zVK]_l X5B#V݈  *=%pTBqf=~Ȇ !ZpB%/i.~^j*DHt&xio/ȕzu_I:yףݕB ~n (]k%.TpirեRpΔXgQGiXAJU!1*)?hd*2`jx&/[5)jkmjXrgZѲ!XeQU.i$ 1]l?HQZRIIS)UR:aZY.yM](fR*ކ$Jiބ+til!d&"(mHz [8@H5pZSpeJ1A'jvVU)m߶? L %Pې0ퟯ#ӬyE@ @f(bN2MY2cLTY%VGo \h(+Bc/I_RTZNSIFإq/i&M3={LTTŸRcZ!=Goە!42Texᬊ9awp)%I+H8VejdjkHgđIai2gpo$/XqGHFf̂Z^X.( zL?:ȀFfRǁ&^hLGQ',DU %]~ 3Ag|bϧCDgh@ ϤQ W\ NIeEgwpX4IZxrV qw]j#FX Ir JĢug{)6bc]S,SXϮ(d&hm O+'e־n͘Bǂ$WF<)#5A41PBH2 %GO$BU}HOXV~v2EƚOCU +d&} ۬#qDO0e c"VS%BfKgW'\E#$yԸwk'|#6(d*PgObbAJռ ]Nc\5ҋfd"x=-ЖdڰI¥m{"͛ 4"-~ Bfɂ.^isZDE:5R|~H$.5H!3I@,YqDu@qY,Jw{Ǟ\qLQF"`-i@16$}TٷfLx}/$Ż uA[-:$-i/c6h4=]*d&hەUVy@NF됷9468oHb& J4"ي4R{/Rֽ@S}x4tL12ƈ!7ó*L#][p=B6@f*݆KbduHd4M7ceri+!2DIʶ;OZD됴\fmr']Ȥ䬐$ʨfgVS@6$y|(M-j.M!3iTP.,鎿yyͳ4/mBhfq}̰d&Cy힮)qƾIʦ.r=@hlNvK!3ɕ W:,pdAyF!$[VR˞U] Jt.`A`DkBɑjLZ-̤VFMUoę5'KaHP"4-eF:IZ; e 7j}P}gvpaؙ&6w@9&FQ:2T{*>r"!6K19YH!4{dV {A>+Lzx;Y>ݛdS"hZg$ZXI1XfBz8FY!3eA\xPXIg@-[A$%i*v5"݌iK\o3AYS>\WuB[i &?I> J;Zu-qΔFXKKS4B|jBBf.nY%IǴBdVqiʦ=KllɡrĊ l \-Ybɖu[j+ d* ҋ6/IGFhZvBmݻ$\ Y_߈Ha1P_ iԊnީFh>X̽3j[̤VF=8 Ocv i&Tr&YN逅rP-io4rU\aIŘLrTYW||qg9B#VdhIJ=ܾ\Ra,(0uUkCF0@&s$ڐ0BCkFf͂YԈsؽӺa6Lkd**u$]KnsI#^}SмE;@fˁYYS*5;Xo՛% q8@6<[˴Zj+Dh|_a4BI0 $[ ׿Z04Uݑ5BSA yLVFjqzxR@;GMNtZ@yz2B6<[V͎{C#;lk't/yxtK!a;FE"4yvTs3t]b2n:'7DLLD" t˨ܳB%#\}oi_ijTm1KnS@fҭr#Y.ݣBӵyE@!S}a5W P#L1k*t糎GchTɺU,w{yHXyvkpmJFH,I7 jrƅ/hgឳ se*'Nx;^$UVTze[_MA;\,ڰI< I8*#2BAKY VS#4+I7 -OcoM Q7h+n"STJ<#x,/ !mni;㓕B1; 1IJR{bX9~|Ԋ!eϲe!je. Q5@H?E!VkG3F|x18M+,v]d&whiIb.PwO8jg<}O 2}2*RѪSi\aFHѢ *)6~H!ʸe^3J+T)g;e! 4$ZgbnĽiLn[@ jd&*j6!B,mu#B$1Io.CM"P#M gr6Rnrtˮ򥑩*HW~,%jFR%!=Mk|m>ԲGb4d g%0)VϔLx4O|PH#4tTn42Z2#Ul`VfJO!Lj I8:z^LGI9WNDXΆ6eBf.ކ$ ?"L둱5Hf@z,n+N$VM xtFqa-%҉Êm؅Ṡd*2&'`lqG ل"Xd%[8$\ ?Jǎ MGc™?kwЇ˨gZ*Y2w+H#A6fBLF1ör̟LݎWa-6ΐA.$\8¥&u>*H4$qq{|9ydm i>ͅpu԰X!06i%>=hvl*މ^Yݹ}̤>Z 8OY 9h&tpHI!3 @O4eiՈMY"&ZY ;H-krې43ڸG-VT8ysa&<(m2BKajB%q&LF 2Vt6|e8z>ɤTj뵏R-7j7%*埚*h@f*.ކc@om/F(BA-p%ίK'Zc$DS\"=9* JԢiYxlF8N͘P,-@f+jIhC6vTgLy32|" T2nU{ַ7;F3r\Oqi*euDg1EmB@8/&4X{bQ_8}a/K̭;+Dxkl%+, Sz|9_=~I/9nL; )"$UE-u8Z2U"u[]usf#:l U [`fHZ!o[]S5BNEIM#SVn4E~$M1ჩ\&B 2P?P!3 gA/>%?g,4:ٛ鞪 {X I"|uBzTT!$z_pDhWaI7j}?N>= M ͯ^2p F-`ĄM7SwGI~xIJR^ U­ΠBX/HL!3 AoCtfUj$ S\-Dh_MҐz`%$KRjyk aykB` 3 "І,}G*:," KcR^]ʨgZ%@|2ϫh}٤QMhuBL%*UFƳ8$BXaF}"2X|VnHƤ1JN!,~i۩S3!I 2p~R4`Y{ _FHjK 4BA. H_YMUFt :~-u,’ Y4JԢy|[VeD7]5V0ޯWV\Qc5[EփeDuw,8"<1CJ I8ze5EX5UAւ"dPX#,?J# VN- `!=lB/)LI8z>Q/Vc%nL#,Άw?}xDf.@| IaDN_酷uJ_E#)%IMM\EѪ3F=Y:j QGA3!:І: B_&271$U@F&-IɈ2F'lDH(RLe3K{IBX;Ds/w}/J8 d3 ^,G 0i끄-*zbLL NIʮGZP]uICТN(cDDfbT csKj0u9%*d*0*@n=󚜳4+5{H*fAK* WCUy*Jk2aBۋZ!^=KO3c:Pid~Υ8'H8Ѯ~=Y5PM|ŽpV2p.9W)5XL(7i?E#3 =γrEr? tC}{+95Ad&4 4͍gSma f?gH8B=G"5B{J" Ip21"6 !ѭY܏JL! y؈2n3$/nO,[N#EB TR$hc?Y=Ke!| -@!$WF͟^vIǪDh Iַ7}s;:- &&ӳR!S=2%]B[WKs5B[0q?Y@#3VQg=>eҹ-vJ# Oó]GnYF~P[F(d&q,g',DHKoױA#<;%,Ud*2ҍ팉1W+7-K BN8'*d&ݠQ-'##]!ʙXcOߗBht;p52nP|g_LBӽM@F r, tKH7t+T A#M=ـϦ]!3@շSo,-XSF"5BLűS[VRdJ".#̯}a.TU?y*~ץ rqPIя&R Ff-HԀW 5DH-*BhtxBf-cbi_N-Y\rT!W m=Dw̤U(AaE dKP Y3BH'To 8A9Ntn mZ .{ FH2)#I{'ExPCOEz5B"\2Qhd"s[J^uD/hbbzvV^#S Wp_AmbR→lшI8 GsGo=ꈞNS[#FHEW5+d&DMG7Rc42p GFihS.| :"ԧE9YQ`@f3>+cH%̟ĊV2L3nv˻hFf.@< YC%\wbFIG8|LE3/XX55v)eZ̕uC!SiVB28f)leN4d(d&Dڐ0w{3轙p'Ed&2F2-oDd2dU#Up*hJ8&d"}L'X31j Id& FԶ: BhKjaxڦ2p ;x؛@8Q"$B$\w"@ ,ZFX!l!**+37%-, B#E5WD W~@FKGRj#S2$A>Xܩjܬ+askDHgD "2\b8jIa wU@@+ViWT$kirjtr>nŒ<I1 ׶?$"PLys UZ,"̸ L%c!QAI-5:#R]%2p Gk =b,\=| 1FiܤJ˖ +&^{ NN)d& F 9;^|㼭A@!$SjOڐBhʚ2pc(<_qT#£o TaU8xD?kD7PIwK+"6Du*{@Fyt{ yB '̢T:T@5ނoRujd* ҍՆPDjH{9,#ћpg#`PnP!3 RXgymDۯۡu[zΆFH fIZQLy&..M%42nƊlrdhd4fL"Q0).$ {J(n™FENFxtAId&"Dڐ0ݳVL˜"$ :,/+lȨ2n mx5OLFX IM{`s2@+#Hڈd1V"${ۻRUϚ(|2n"mx-fcD8DI6@օ-N0/U#$M9(X*H*ZiAs@jΝ-V8Ac7DfR+A\ I}HԊ,j&(jڌZ I1|}Z5vY>JhTZ֟ϸ;V\CWCDʊd& !v_.T!]Yr1,\42p~V1.-!K kPv lB޴0@skDh* QTe$).W }8p& B :=.B ʱi`@X,j hF-q*b<r''5r[ȭ FHϸB )(d* ;d$hB F9NmȊ8k#HߌiNl3_L٥| hs552wh&I8A:htH8Zӿ6tۇep/ߙ@SX@^,rvWĽWobR*߆-m=Fkʘv4BsIj& CK "]e72IrWtC?EҤ׶~\ff2ZUҡ-a74I֯/T{s&qc\eu"5(>ңZJ.Y3X vD쵄h٫TreHyOײ깫gj { @n!ٽ52nL_9BFOt;ٔZ@F^+b>ЛT!3@oCÐyM/ƹ%JD!, IaV#3 !ІlςY5 MJ}jSHFe?_#3  І!7Zۚ,{y\@%B"\5n=eFFhQAq&L%\FJZR9BZRK;k_mѧ!hCnMHtkT2;9sUÓeB7E Iq6diRm`G%xjَuǧڮu2Viuε~YgҫoFh\=_$Wxm+o9<88)nbOc 3V0PH1u3™?WܮmYS!,҈ kd*0PHʲ*3 &dqWB[.†NIg1Nv#oi{nvnY]#Ʉ >Id& hCO#hDIM".2n `~m w41o<ݜ:IQz݀+#Y\#UuzZ!}jABx@Y~a60Gq)X$aBC 3UQgW\aDE8+H[)JKF#S =M ZMNc\q=aM FHÁ*)*dVR \h?F&<\ZhA־BX) (d&dpo|<xB)neRdZp_p0XĜL,y+TJ[+~D aQJuJTbe$9+QF#Kl̤@+ʳZD'~ExR 6d&jw.z^:oY#^2"&惿Od* %h=p2 8Ra2"ɔJe2mXr@IJ/Cz]{N +3Zng߫kD8Jq(TKzMgQKT#m<2a[Le3+3hI=@qIpyx' (IZ=Q67Ӏ"%5״[l@#4MMF)*d&**+8dIup jrH[![R J8 В^iBnQK{#y0VQX_ Y#0(JPI8 K%.79j[8&\GHƉF2^I@ XՈ%խJ O& WmIMݎUBJ"3 9\5ҢFhMRQIY&3FhHBfCۺuePp<2nB#ZL`gATU$$ Jtc%Eò{~DٽP|'o/f+2IV/LrYP<π]/E Qjl{o;2n~:o%}"Ձ-+D@7>V-W.(IQL!G,m&O޳yfE!$f0bҾjd*0IQީ`OQ0-4Y-ѯd& ͦH+RnDHאBH_w:'1Ʋ\Sp>,}AD2p1Hµ! #H.(H͌XQLBG~gtH7;lIA䫭aukt;FfBZ>LB."$­6ZCJ0jL9xZ_!)'4[DeXY#W#$-0:J::C>5T_hN>!}}Y޶BfCD YpfY.Yf_)6,i&k3r+d&mxb5g*M"eOpFH~bL%\EѾe28!LFki4Bx4^'P*d&"D <4-.`²pΖmp*DXqKJ+ I6dɊRHdY8uGJhL*l 31&I1y\uVa[{p#b{;)G*YD +d*0*iAV}}0FH7+7-T. wE.RIq^iD/usg"L8.RLTTiti9Su*%AvO{R Ԭ' ҧkjlhd"Z'C,M4vDz]ե-$VGZd&,!1Ċ壤F73 } `TU$8܀F {DX[ɴ?"ZD+$ ¹lʾZiIL:I8,_p~sA{BAYbOۀ$\@0$Uuq3$pLj,\.42p GcM'4HF8WgoSv $ *Jd&"ڐJítwΨ#B[|:’pEvU!$\hBЖS,ʮ6ffńWT$9͞M?2$ۙ_#<‰ 'g`thhiDk$b$@HtPC&}+d& X d\`DcR˷Z4Q!0BWQL%hy ;$_۱!zf=L-I^cv_L!7KʽFH,+@*" DZEh|³7W8g/!nP#4{~=d&,D "K v,,5DBje4H#VףRv= kr$C7wGqnH蕅K 3AoCR' bPߌYs- $*LRA*zrI!,ZZ<@Bf,߆?.QWh)ɕْVVQ:o*$W) YzTY,ܳ$8"^D~8"/H8Ð$ܞgF.ID|;zrz#0n 46$mD})$kH]CǺt@f.cDҍi)譝$-Fh,8J.YwX (eJWEZ3DX})7̤[_-2TWBzxDQLU S۷+r툰ojxi_B l& TalֲU%B Ca;͸3,0nyA)QroD݌iD8g#$\,';ȼvNj~@N "Bڦ}s_L9'dV/Ơ?V1~ڛ^X~L%\F±̽t`iDeEFu|ʹ7hs6Ft##V{V}/Ff.@ܠ wጋ\e*FX^ӃC3Z UQ>Jc-k4V ?q}Ml248mx΋L{cmWg $ ФXIB!3I@`?겥!ᢨpL%\E±A#MkB傫hj鞼 h'kd&2֑h6$+/sB 6UjI^̒fV%D%2lRG$v7&ʫ6a mѼ !B,"7(d&**ՃV׺@oDH8 C埖95(Ԅ?g6^L|L̿'9+DjTxeFQCVp/ƹ%#YzN4Yr)v.k5;[adrb- z+H8|KؓY\ئ5zƲ'JHͺYe]Y..ʺId&DlY.™?.mEC#4飊ҽtH% ϖXs=")`+fDc)(9t *GBsm٢rQ=Z6Jt;!QZ*+ BTq]uI6 Qʪ1bK*m(9bBdQI7Q*,5@7 BHB0uL !-͆oJn42nmH駺4GjHNTRe$j>QQil{u.BhtisĊ*'t !a\;rt@!,%BʓN*hC*yA[&8cH0_Q[jYuL~K[!4LlwTN- S{Ix➈0鶩Uӭ#Dus2ncmQg~Mُjtc~O$\=%='NQOv^x#qԀB^­E!kp* Tʂg;Ib_ -2ViŊFʧ5qKY#X|̈́+I`U4-dP 2"z~\Q2pc JC:™?XfG:"47]Ta,&Gء!&otD7@|1 \Ǐ-DSzfT5bq H7XcХ%muSͺU+0]] 3fAwʃb!jJzNJd#}y#Z#C,"c29,Tm!Cd&((Q>a!ȳ:?yPkC/ӒX _69op_Ko,4B[bTBҭ ηCV&LnagWLe!e7Ғe=5B"9* >˶9b&DH 5W:M#4D49(2nvmX ތIwSj&^R&I}B!3@oó]8AfUi˛&heD ʨsgӄ$zZkGTiL{RLJT IG$' T;oE!TJ+L=hGUQu{X5B*q+d&**1k`M'.0#-Db4ϒ( BX %H\/o!+d* ҋ_>rPB(ԺevFh:XHQd&,0?N M7@#_3<:<[mlmt*dݒiU4B,)@+d**ҍӐsӀvxo/<:<Lry=KAJV\ҙ) Y+F*} I:g5<*&O)Ba%L蒅tI6<_yz)\L4R߬u= 3V0NpK =YhMO "4W/<F!WlNKd&* )NdQg)G2BSk{@SijB?J8R\u x֗v"yA2U!3 5d";P/??&5n(pވ. z2ppuٞMobR;WP̤8B5/xƌ'KX@- dqd2ZuΝ}8Mn-Kҍk0>rfC̠ Yf]r2 "!)k!"=%q45lXUrjXPYf"U:XjY~4I==x]5&jo.TIL'7-{ a}LbY<9a4˷xdHhiH/xYd*XLڎH`L@r:$be x̊hl驵Df$mb%m 841K#NkVy ͮnLxPqېs}CV6d3m)trTd+Ⱥppm^ϣ{b1 Z݈Xڷ/U#$'7gΤO- "YVfYIe%_^sscӪ{R,$sDhBdڮJ՘ZX>%P+;B܃-eք$[^ e1 [D2*Gg?BsӲkF FSFmًH&eYIoaJ0 Qp!=e4V^LRE@sy &?L=*Õ ^cf(+ݖ¤]4Hb܆$GX&yI{BhM{862c!`rê= iD!+e q pRfV]2)̗ f l$=8,WӅ%d˂,hy֜Ȯ YXreUtXus7kF,6 g,ə+փklHl@-8qg%nL0 gwxΤOF 9r@@q^ndAE ( w&%uXP$l52T5d^ 6f R4B#i*y*jʴ:cZ871h;$7BVR }2X9)K~Bsqb]z@&,=t&_`X^ BTݵT$4HXɕGs ,V`Do2TIEKF$u"DchRg~<'nΤ5GxO#ZgSm9] 饯fJMd&<܅UhD1<^%݆ l葑,z@,YU$h YPZy2mSȃ ayb:37$Ш=u1RI/>ܤ` K?3[!ג |4`6G<<\#LdTYFlg A TLRT9m҈74B?tTR|/#Bqn ;B4/)};D߳ 1ψFcX@Fib 2@]@s|i@pX{]H-BDdL̽gAM >V2դ?BXJi8@ D+ w,XNš%b(+Ş3 @w#z-У,iAenACGjZ. 0@ θǘBwk]}R# pk^QISɎfL!3)eAq$iT\zj&=FhILУiI#* ~%iD*H*ZkqMa9veFХE >6d R' 2WV#S>ԿBf*:݆U/IuV'8i8>C; 7#|1s! Y!4SE< g'nYn8er8~Qb xc `{ow".g0}dFWO=skeCU&z^>_k)U;)Km8["2ź?Y$ Ru CaN-W]iI3EcDQ32IRUұJA3~X94UQ]M Gi՘Vo\{@\:5,0^N1:!'iXV@ 7]Ku>c6D)$]:]jpn[Ph.vAd-Oj-SEhQ*:1rf:<}`yNr|z;\ֶ?Xik"rZKšĒ;鰒'5;̬~CHF?[9J߯uC'~j nY CNܳpQQbAN*t  y"2Ԡ]!'iIN[heQ*.t"#}F*2IZ%RkT.\H埧Z(J$ U*R+ZDvBcʤU˷Ic4i"2AN>ib;mXg_+"3_|1y Gՙ\v_"2RdDO%I!Ht浪шgh.6@i۴cjX3C$(͍VW$,=DQRRT[79NMSdDKgE\U fX%ڜB#m1.&Z*˒9Izy4cYՠYOּA:W󣣳AReOjxVUBo.TJw¡"_9)^GӘ>2Uz ,>r}AZAN(UjhE-.51D IΪyjam@!yO_dhIA3DΎuZ]%=8lрFfJqg1ϭf "n\8 3%R5[&E|^CR?v#{fi!2GrU!G5\/}4b,ITVcÜAN^>/5cC/ Wrr!6T^ng.8^5>WV)BQXooor{˰ "Ie<(3(X/-$cNicAD rVOViWWÌ 6N=8AkFNmr);\c. P>X/=/E0]cATN0o%rƋ 9J΄]U.{,rV<\DD2L"4UCk}8"F^A:pxY|•1okQ.vGDC.k| ZuZ͘pJ1"W3$nvpnՑ }*]j@c "#'ڕMY~#MU7I諪:;U 5N%Qz$:븼a G טp ;|;]cgW yñEN*_e_6XST}:vs 2׈E'HaUo~nl69N* jB3TP~GVqޯhWcI0OW9JR)[6; KZDF3mu)zX>NѥXXD%8fj[heQ.Uj _FjJJܰVksZF .gggb\Uug j-԰ 2={Y$媩(;v)?U9kd}tuQu8^"wQٮ͟k'ʨ%Z~iI%k#R =3}) "[t-7IЛjdž%o1u[DtUWCcGYB9IHz5@]5.0`C,"aH6L*U%9x CR2 pSAtjJ .[a5YK}Ha3[ ǃ$2)_77]", %tIz'j ?Ȅ qy,"v `HF@ rVtyV$uAU]l[DF5ANDvdޕTb]pHĆf9J8Uv=V&h1su(:uXAp]$Rg彿<8W"2 , 9Ixc}tc;D _H 9J*eKNKLωg$Uwn}fƆ_J4BD8K{psEN-U!ADcwǵIl_'#]5;o˖UJJlpمT kV"!G טpz݄ڼU܇Ed/< 9ID}W)4;Yu>yHщ~{$U&2_~SWM% rbAtr#s$(:JH<Ք+o+?8GDDyB~d ')UHINz9J 642iz$U*R-=DDf@dJW`"$n׍k1lXDMZ&zq5؛lz<\?mNsX-m=K6SYC)rpUvٞ gqj~Fì3eDEN1IR VUQSU 4V5K^WR>N^4(XA0Jo UuicrRÓF>dΏr|_ ]u-Wry8EN(>d63Ԫ"P6#'RjtAݳL~{.Z}iD{Y˓rkٳ^j4g2pFd@{OlJ٢$&5M.ntvcD-((JUD_Pj=yDFJdZ_ ZquܾETf}-cD\ETEIѾR06p*kWLj,ho/ rT* ;[\rA{ ,}.6QR5&] ߐۋnZ'2q'' X/omPY 7b_eDɹ3S9IzWe6PTP}-p"#Fg]5NceJ1$FTGj JY$`]Vܷcr$ ? ;yɆ)Y I8qlSuXDDB=~\EQR &l ޭnVv!;$,h\"'ihy6`Pޓm#w͈,0ʌ$v}\qT\ZR,"#\kg!^ _EJ>y"\RMtGw52dXD!>0•] rp 7zb¯YҦduNrVR0v,&[u\IōT'?eٱ=oMIZ@* H2-Rn$QH@vhD*B3T8D*chk{,rTTq)zUB:,B0V,#8Bd>wY/wO . o-EdE`U~ te> fPҭ`XCsi&#<)]g($DsZ=<2$ <2[cDL]Uy#R sb\'6 Ums"fT)VܘA} "z(!9IH*l FDvr((>D&> rTIUuJw1~Ad 5ȏ˓I˷Iŕ "ӭ w@|'>?[~SЃK?4 4Bj0TX|!/5%"WZjނyP_/$@oYjf GZj֚KacADO."9Ijᆝ~(JfO⌻lEd.e*erRut};nGQF)Wh~Z8"2"gJ(XYZMն# 6EAREOz{;h'; Xg{l`YtbۖEN^9wb/ "׌M"H cL*U6]IO`~ai+Dg`DbIERj@48\6|\5W7u97C 9ID|H,^^Jn'$M\] 6Q: F_f[D;h !G՘Zo<=ǥNnv+4 \9IBz|0d+Q>)C[\aYJQ=G$*)Q0vW%ڼ# "beM65r\5aL8^a ir=QK..VXeҲANaDdq:D8Wkq EDur텅3Iueh7i8zjwuѝ+Ye-z颮xćg}>J*lfU88U1%֟>H9ҮA<zIOѨ;%7bO6"x@f Kˀo*?bE'U" CV(JwU^h*BȻ+-"Ӭ~++ rT wTg툩+)LXcjLMCD*$U"=\!tyk9s.=r%UgR;˩ܭ9,0@(S!rTyƖ 6U[NTz,.d9IB*yRv`]5y (Ne~nk\{/Fe׈Q &_'\w<-M;i~!rnt`v8M\]mk҄Џ8IJ5V*~jB YYv)8Bd&irTU??LT}2KR IEQR Uu;b Tv@ "! 9CIR Ve}q;,~:M֖ܿ_Z '>Ǝi_͍,0Njͩ~ 9JΤ m O^; tQIˆ ')HϲD`BDUѵ飚wY$ MUVϻF S"]TӊH __zUExv; Y@BBNR*>/ymTɮzpAdRċztT!%|^ͅ!kn:LWhl9JdSթ|qb"\Y(m]e QQ`P $[,B{I;9^7"{!sSmP_~ò30s' o u<D:]: "s/  U%OR"VEd-"텮ft㬁J֏*Uxq-!"M HBҭR/u2Gl.C,:m(~2FCa'AN.PޠfbЬE->O JDD6eEDܠha rp N?* 5ΗpQ: 6͈L*BN.SF;6xb;7U"ҥoZWZÈp81SX$\,üT;tp2Zc}ET.5#kKeDq9IJYyQuYH_#* 7jٷ9JtSUoX@i0%! naEi63";v耊I51j%PWie$8r& ;,vdtaPI| !R!WnO59%gT-Hr!2 P*Vc5ENnpA5i[{E"* %>X҆o u }g=N옇uֺe. !' 8DVFqpAdxnqnxR%!Gƹ"})mݪЄn 22̼9 7ljhYD]; \yQktGPڰq?U\jݚ mekDɺ [@KQ (: 埬ED sctkL1o>$NRJKѩy"J];_x}2EP%1hRu.tY: a{J j$l3%ceY<ҺMȊˮ?/I q+KƆ`F':"[r.Of0]YD,Z^[D '}m: "r.` J9I ~S5E\w@"_3gW|_ٱiB&tc_5pC:, fٶkIV`'YW-Z:-""[v7YdEӫ;m3[SH@@fB]eZl!sf*1>grl嫚6,.AVD״\Df`)V6A *.يc5{SO "]߰ADdg$ehmn,ecb "&,GDF7F@Ŋ9Jt{ Aݏ'DL?EĚrh<#_4~?Տ,sϿ_o?PK)qAY PKConfigurations2/floater/PK]rQw"ab4L{:MS'Y>q隄S3JdzćO'5>=zy#g"g }8M 9>ƜR_?5eva;@fawn,H@Rx`}eIiCDq,xYt"07;;]9ɲNGv3eυhJkp6ԇSJw 4s6 |z{66$w&wݕ8]UKg X 4?-{%Zx.'/'60N0-"Oe <.Y4K AcN^9ćw~qL_Hªg,}o5p*MS gBvڴ_ςo\sz?0G?JUU[k ozj{|iB@AqiR׷5)C}rx&Y"%%78D# iu˭g'|}~ZނS4`/#aUl wY̗R!LmåoO?hy ˱A]X\w6 e)52;2y Z;lFf'/눍J'qoNYn<6v`Sb|{0Yw~ 9ݖsևd8sn^Mܨ1s997iF3ϹKn:lt8sn֖s6+9sQ]3vЭVzqI2Iƚ̆ ˛t+'0O q&@7rܾY;AyMnдyMdoxq&7sMZrAruٖ.t2"#yqFl) ts/Tyux* : 'z'6ȚvI:~yg准&d,zM!@Yg9rYPe!QO0>fUq@QM|]=yqw뚆Qy۾Xޙ{o&> Ϲb$:W=R$%o*},Qnv`pג`&(-C"D&8)8h|n,!$r4rx+n$ˈn:>K +fW-s\+- dRY:^ph9 =e>aEX;)E7w҇ÛYw+IYOWZkw4 |b@44TE=D1\N{Cz((u:(*QtRI#v=(*n}(O4L?MNu3N:]Us Vg+>ZD'0-,$IQ ˴ʤːHQ,,C3EZReHJ8S!ɨzL2%Xb`+eZSeH/ yǽTh v1˴ڗXE=%X־tcjQO /sL }阫,SeK\,Ӣ,k_:`aYq1qqRX: kq'{p ]Caօ1.WX?UN1|&r#W^Mw(L}m|W>g]&py$ʅH6KF>3$> qЈ&rƋlmsbAש+ND;[p ԛcKVߍs?9.*Kz(Y: ᬜhF@̜ju.okgW"NWꊵHWRu:_e:%rsЏ'ʧujZ͚VX:62EaݬQe9#кu[enrBE'V C7 =-^ZEsmU|J{&A[t-߮u3F+F|b-)$.e[THM?MLztkd;O}@y%< -]V'@$~8DN # &SkdBnLOߞ~@!$(e^I›RTB!oJ?Iݼdk)y'7ն1Y!pqI.Ȟu>H: fc]{4yXȃynh5M˞{u9:4|'N72_/ezk:s&џi2aIoVa.=-%&4@=klоC68 dSF\`Y=Huocf4b'1{":R \ibןqP|`hf4"EDHnB7]17ni'p3BJx9o|F-rpb5+^Ed ,2h=PfXmaJ%&"$E" UXhh6+$,b!a1 mZHhwMr4EJ[e0.0p[8`#Xâp`1)  fÕQlXBB‚`a m [HhXBBEh ,T6Q* ,xaٰ7/,,~aa &wa$XlWX$Äa rh#XTÄ"&P!a它z`*YevHr GCA8B@p9$i#!!rDw@Z ]jBW0FЅ 1,MK`wK )t]*W9ݾTo累iY_Nf4-;}>`.AAmWbpOiS>ظ7c; l\t|ܶx%{(& |3 p`$x[xoko_}Ey1GM PK"PKp4 styles.xml][s~pݙRH.٤aĻ}$DaB>W/]DٴL6s'S!92T6vP.߾h3v^#.l> ѝ#5ERTc,0P8AhQ^љls!\lMmeKmB!`+ۘ2LXSikE-<T7 ]nx\v.RC"z&C dED@Aͫѣ+͈G{47pٽcG޽ctⓙ~*ſ@|ٱl *PDc$TkDO N-A)n~hLԙ9MU% !b6h{&V^$ P&#oݍB,U BXJT-\@V>v d&OR~9^c9@`%F1[5@EQ$տ=@l}}UA HqA~% a6%4ً{("jFO9OF@+$UѶҸg;ݷ&eI{xls`kTy{uOHlNasto,޶,I&54zNfCS3}خ F>`4ZnXlpj(]šsz;a^k@e06JAjkO T!8Y]eSվkzi}2M+oI4 /y2,G ]A. ,5aDŽ=i(Ӹx eE=͜Wu'WI9Jcuvպǡ/ pLmcஇzm?|aq,2t|b+~K\ahk%bU,2aj }'g^uιi̺'eN }1bvR!L/L~bqoʬ0b~#L]14? <ǔ$Xmr [-9[Sy@9EG0!ѕw+S3{0cJՒo#ydJag+9o}]ksoZ=]묹;Z;,m|ɵ2ʮZSH2$ B0r>0r>09j9=a20/`J[Ș&}zV:/)ae{ْq!{YK5NfjmdvP 0?;sНb=7-Awsi!kY]=K`YzG^-LKŠ*PsԲ ؖ}WKh妤{lBYM*5! BV l \s$D"EO5J#a+CFKeͅ4cZqS`q͘Ƅ^{jWQ2˜,&WM)bRx۵ϋIًPqϟZ3˼b߮U%+bM|Wzc %tQ,Re&&oE GV5w ,n>Dۙ~zsV7OVPKD aPKp4r7-(77meta.xml OpenOffice.org/2.0$Linux OpenOffice.org_project/680$Build-8825pc092006-07-04T10:45:04H.Merijn Brand2006-07-04T16:04:452006-07-04T16:01:26en-US2PT3M19SPKp4Thumbnails/thumbnail.png헇3C Q#",у艶X5Doj=z Dh,Q6Jz*o~3?μw3s9ߙ;Q'{޽{dT ;ѿKqkW vWJl_I3/]F"B<(NiCn /YRSՎ)ufeJ!&Tiލ (f~m19RPRI "/h~ƽO퍛-J;$B|{$K}u /o+'pxa|KmvwW(C&W.wR~ݤl%5=mnw8oUH1##r=hoW6h`EsE[`g.+ZF|Z6k{%bdNE TvhsC; 4A8돛λW `AlbW]+\Ȯtl%BZ4{yN^rgBY'G|,6?_{|nApyrW^@k̏1GА"j ֦ w@-5 L@~~zs/x5 LMCX"?QXyx,Y}!_?V~] 4C3:Bfo`ͦ:/_? VF`4 w_AP LbG~͉>F<.&UB;mJ! W5>ڑwk$-1Yi+8 em8xuo=־U˦h~>x> Tu[߫CxeO /vefs ᾨ gk+Fx_*ݳw=PpPS^sXw犆#h_p3 V _Dm:g&zh1AC -r™\XRF[ޱ:w:Cؼ\hKH hvt*Zm gh{;i<_|̽eI{ fՠEwcbxg,ݍPi QOHQ;Iţ+&&ȕzbD ħF,Jޏڮ@C$;$#0JRG.h@hw.vҡdzO:X$:,Ր+!HN%[~ޮ˞/JmJ$fbRJ}vKUգkj֋rm+eX!*w``B}[P6]X{YmU6WNfR/'&-G. ݀nIV7t՛wלpH ;<+ICRuS77]OY*[nYdcE(穴H(y\ZIْ,;J+O㴵f[Ue=n-dKuH̏/[vU%9 M> (S%zvȥ8Y|P{B`Mԩ"m+HAf/P'"(>ÂȂsR/Z:]q?zkPgKZyGHꆿIKʴ0z/=%~& wRd,MIzUL^90ֹ*Xv~=0`hXh~V3o͝lPڻJ7"CV191-pKG;+A`rT7@65YDLم2jZ1N Hk >^MAx4Q7gp̿߂L%Ŏ~nٟ5 ܑQ43kx[}#oZ' ٛVYD-$mS"l޳jca,ڬ!ef2c1_04MnqNBG8 \mb3J^[oIU>%eTwߚ-%}aIOq/L,is`\Ϣ=H}1s= p,_h_GKkp=mDk|k{~SbHb em6~p.d&KCˎ{ wD"kdJwe 8l1iߺCae}~B̈ENףyN珝'^Ŷ}} ;j[U)ZtY ;qʪZ9l*yՔF*`󰧏If~S 0(ާX\$yz ĊyWPYNcI]Lr`_^Sw^SoQOcΟ8+꾭.WU)&*vd;?LX:X@"siAZѽ-#X,{=f,*N AxVkfQ骒1R%CCI%w+򀑛F/ 3zZJ޸%Fۣop J1F/=&-e/qLԳд6A|HRBqVȒE8NDT.ۊnsSOOwW,|gM,0w'}tut4Xh҈ԁU7W@}xft^28Ci V3_ P |Gd+R'yHá+60HG \ K;iQǚӥ>Q8v)#pQ>&{Swe? _v}͢jY_68n5*l19iMq٬7NH^*W3)j<9p 1 _%OX/R'$_wp3jn9{7Wxz aaTvP*~R և )OncVuATEN]01@ rOJDd##|O0!|f{<yZij)Eܺvbkٲ÷*O~]eˠM9hF4KO%y\HZaoUkV=i[ڂ q1~l`@iJOuX¤ ?StjrG] (,ZҾ:TqZAxY|ȐonDԔoWWYKz(>s_]=,?roܦƻ-;Tw2K=[Y܍sXh 0>y>x2'N0訓tbahmu铻n| 5_=f8 %[A`@ek ݲU%6VJ>t̅չc6 O}W;$UmTldCSC&fH{!GqΘ2<'S+1[]S!":,M\x D/c vɇluu}ylV:^F֖42.CԷL*ӇKfԨg(LуIu#1,_[C~OC3^dl_I6rogCWwD 2f.%"ќ*0';&Գɮ}CŮ;%œG؂ '.f=-ՆzDFUgrAg`h²B?ݔ8{ s$88 IK71uJWyƵ+xcp;翧H1+,Lc;Σ jn> b |iK$ Ru\e{J(9C|yeY.sp,uiàx9/oC-±S=ʌJz[2pWW:ܲ7^ciٿF|9q>AtE>e3U^uSLd+XZ"wWp\\1oq{NRxDcˀd=KIR:PVv֢ qz qƤCO(0кbAi-\q(i_os-JԳu|́炩(1gӹc@ҰR.c!t)򟚽UtϾ'cF.4k󐔜x`2|`xF,Cr^#4Ac_0cEkJʬ\HٕԼzYZ"|".|O5HK0cP.uurTʕРNR!}opG$g#˅5kGCUsg@M1ǸqUVwiu})oV}ȍtITBާ\!%3`Gx{ I2cƆ\6^e{eOvhF$[w9.䣔GЌj<"fW_^~zwWqڤr>Πe|Q׃}-hD0Ic0Y9EXxbKϐ 3;GA7~Uڥ8CAIl(AFc)sTd,/:_wSh$r/cƎhq/xa݅NJVDEdNQջΟ[Ȍ &u,FY Iw\Ҝ zCWt${d9N}cO{7v}j ,RW&Ovϳz=I$EJbwNKݗl24īOgB,IU qPـ Fْ, [:[ZdA[w_]54<]O0DWY6lL;78OVlH1l+i?kfΤȴHejXHŔhl<-^@[`{'%w1VPfP55%g!~I[Ψ~ 9Ne%J]0y ૵h.rL{s 5 QͶGrmp{ m0&L+ޤ,i4'ⶺ373 iB/i2 Tj s9T30! HK&re_9ޓr.+'@Yl/$$xC.72:+qIw3R\1#`v9֨ J f8}PBBb`xM&, ]Pܝ%,8A J+2sq*0MgqH`;\)4y@ 1x/lx|;qNDVTF`\Qi\q11f7S}D԰VpU~$YIFCxU(ᚓǨ w)jqmLmd3G~~vQ~YeJSƙ>c`0/54ܛ̈K~X+B[$W?,f\73Q},zblɑ,e!-;5Pw% EJ'r~2TU+:0!Pm09W,o~gȜJVV&b! 7F) uY͎4Dt {#ɟV }d b3VXI$@J'bwgţvp&ښt"C{I{#>t=Q<Y9.\~%o)ˁ[:*JVaPK+\dPKp4 settings.xmlZ[SJ~?)J VEmdt2\ Td._wf#{S3zP9NNlH=<` "t*qpZgH`QQv@oGDsBaIzaѻj3'G{MY+B|(niuX~E@%x4GhJd}!|]5mռsFX` -;WJQ<.|%< bGKowꕣ)}LMZQ( aIh)$W5җ4@zZ)~AF .aKwֻn/#ga?3*+@r\Ʒ0rۻBOh\,;7l@7Y7cZšXeKl |dR2 +?ub)ΆAj9 3 gB3Ü?ro0¾L @r #u݋ɦ(ڼVO 3B,Vʾ1c@d 3h1 DOS]F #x@D@z1clX'@` k&w8Y9B<MXEa\VR= n]f]3S=чdLDH"L$$$7: ϊ3 & _$n ,O8Z3,sjQ )(eBgrzqCQ_yǍYܸi;H3Ua򐔇?#$NHBoIUǵXs3 \9oXHa)sa ؞^5O4 | 5+_ GMp謹YoZ9GC{4* rU[>lss}Yfpza]=ԯFJ9.g]"W0a+ʳf-*V{T߆~#A1lfH͹"les-DW785F& Њb&4QFO"L"Ig<3BAJ":8gV QR*S;y{X>WXcPK "y.")PKp4META-INF/manifest.xmln0wTY*! ,%g+>#x,m_;]۰-t: tbu=d4/gjZ@/j:c7Ƕ@۰b/Զ Rx;X J{X^PK&.PKp4l9..mimetypePKp4TConfigurations2/PKp4" content.xmlPKp4D a styles.xmlPKp4r7-(77)meta.xmlPKp4+\d"Thumbnails/thumbnail.pngPKp4 "y.") 0Asettings.xmlPKp4&.FMETA-INF/manifest.xmlPKwGSpreadsheet-ReadSXC-0.38/t/01-parseods.t0000644000175000017500000000250314456566532017214 0ustar corioncorionuse strict; use Test::More tests => 2; use File::Basename 'dirname'; use Spreadsheet::ParseODS; use Data::Dumper; my $d = dirname($0); my $workbook = Spreadsheet::ParseODS->new()->parse("$d/t.sxc"); my @s = $workbook->worksheets; my @sheets = map { $_->label } $workbook->worksheets; is_deeply \@sheets, [qw[ Sheet1 Sheet2 Sheet3 ]], "Correct spreadsheet names" or diag Dumper \@sheets; my @sheet1_raw = (['-$1,500.99', '17', undef],[undef, undef, undef],['one', 'more', 'cell']); my @sheet1_curr = ([-1500.99, 17, undef],[undef, undef, undef],['one', 'more', 'cell']); my $sheet1 = $workbook->worksheet('Sheet1'); my @raw_data; my ($minrow,$maxrow) = $sheet1->row_range; for my $row ($minrow..$maxrow) { $raw_data[ $row ] = []; my ($mincol,$maxcol) = $sheet1->col_range; for my $col ($mincol..$maxcol) { $raw_data[ $row ]->[ $col ] = $sheet1->get_cell($row,$col)->value; }; }; is_deeply \@raw_data, \@sheet1_raw, "Raw cell values" or diag Dumper \@raw_data; my @sheet1_curr_date_multiline = ( [-1500.99, 17, undef], [undef, undef, undef], ['one', 'more', 'cell'], [undef,undef,undef], ['Date','1980-11-21', undef], ["A cell value\nThat contains\nMultiple lines",undef,undef], ["\nA cell that starts\nWith an empty line\nAnd ends with an empty\nLine as well\n",undef,undef], ); Spreadsheet-ReadSXC-0.38/t/wide.ods0000644000175000017500000003246314456566532016440 0ustar corioncorionPKBTOl9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPKBTOA5-Thumbnails/thumbnail.pngPNG  IHDR'eHPLTE333:::LLL\\\bbbjjjrrrxxx3Y;IDATxA0 PT_+.yYɼ&3dI-nՒ/ cLmٷH>-)/X_nsK=|?ѦhU2L!]\NSOcӟzonIENDB`PKBTOConfigurations2/accelerator/PKBTOConfigurations2/popupmenu/PKBTOConfigurations2/toolpanel/PKBTOConfigurations2/menubar/PKBTOConfigurations2/images/Bitmaps/PKBTOConfigurations2/toolbar/PKBTOConfigurations2/floater/PKBTOConfigurations2/statusbar/PKBTOConfigurations2/progressbar/PKBTOmeta.xmln0E V|YV$BV.Ju li :Yι3Cz<M >hg7a)mP-A('#ؘ!6IoAL j :!(;],I9mmЏOp+˒UZoFJI 0 j`#9.| =fd^W:@ϮHMC|sT/bFzhbOjNY2reTp.Ǵ(2{(XEn8*%-J\Yb]ұT~Uݲyշ&[5剽!jzlRZI`Ep[bzw- dyeWoR̉BTihLӪjz0fřEH25FgT[YrUyG[L=sY!U3D>ly^xuQK#'ӧr޸B $)LK4&vaRP-V'ے,k R"|^65;A @fضpqCd)*m\5(Z9$hC/ۋTUCr{Ui. VkRtm { РV@2=sɫ8Q(Ӷ+ HÐ)JE`C {oUX0?doX@_W=ew \S|ӛM5rM?/Uz±ux Os T1Jٙ#W-Suu1=WIl7z vG#:&k{L lFedKyE`!J gǪ.:}_Rtׯ{c%ߥȩH)'1f''wt,t${Wc/ '{?P]~{|<1GDQ?Cv:O/XSCSP s&5t.;y5ox7 Mk8qm`iΆB-jVٺA:M $ak^䌘T%.Ƅ{ \]dٛ{>f(MIJ4➊HI؄i1d[KQ݃('TTDBr"v}4G\1 "FT%7կD?Y|;B3G`Zx֜ߧ攄 -MFJO\]Wۇ` rU}f?2+4'+웧]5xPKހOPKBTOMETA-INF/manifest.xmlAn E9Ŷ2YU(Nz  Qrb+N\Ub);`|fw]udž}wV^[}?n DrZT۶a9*$Q$@/GnfWiJ~sp*vHPb$Xt&RltyA?ؿnu//?<ۼ9ߞ}Vgۛ_^ݼٮ77vs7wc\w[6E[>]'X\/b\Y|/oNN>}ӧi{w'wg&|TwawuWu~v۟c氦;>͇뷛4of,/0YGۼX_.K%Rmׇ?xw_u}qveW?onzlpan>=-'V7?.ݳ,?[_=].RNq?}bS]˿_7_&֓v;<] ˻p}8},};?n28Ybd>^n>l0Oo6H'ǚv ݻ} _xj}u͋ˇ{ڳ^v/aY7Zo? }{~m|8|˟NVrcxׅY?y:p|GX]6ן3?\.7哶c՗_^vo~cfK\?]/*n/gK~\.Vߙտm>o6?7dr_?2w?_yj,m'?z?-lu¸k;ۦ^]^,w7[>?]fw_]l߼m],K~8c.ϏwלnϦ~47[k7竫rX_I/3ZsyLU}:?[_ɻ_ _#]mc󻗴htSz x;C~f},tc:[_=]|9BΨǵ}a:|]*/g ~x_ڥ_'ۡ3<;< 8W4xuoh |3DOgtRTr\r.KR%uIʺ.IiX%) $%^bK,z^R/w;NJR/KYe)2K,^f,z^R/RKR/XꅔzR/J,BJ`RKR/XꅔzR/ z!^aW+,z^R+̓R+RzEJRHWX) K"^eWԫ,z^RԫRUz!z^RԫRUzUJRJX5)K&^cפk,z^Rknok,z^RkRuz]JRKYu):K.^gץ,z^M+Ruz]JRK7X )K!`7,zސRoR zCJRoX{f=)K!d7ԛ,zޔRoԛRMzSJRoJ7YM)&K)d7=pKnS)ʧNSUګ| 7+ZOvSk)ܰ|jX>[O=˧pkn[>-˧VR J6$hCSmhn MnP 74A7(%Hq$Kq$88ɒ RdY1G4G#Y#AБ,ё HHu$Ku$::ɒ ҎdَqGtG#Y#A, HHy$Ky$<<ɒ RdYGG#Y#A, HH}$K}$>>ɒ ҏdُGG#Y#A, II$K$@@ ɒ RdY1H4H$Y$A, I I$K$BB!ɒ! ҐdِqHtH<$Y>$A ,! II$K$DD"ɒ" RdYHH\$Y^$A0,1 II$K$FF#ɒ# ґdّHH|$Y~$A@,A !I!I$K$HH$ɒ$ RdY1I4I$Y$AP,Q )I)I$K$JJ%ɒ% ҒdْqItI$Y$A`,a 1I1Иd˘dhLeL24&2&l II$[$Cc-c1ɖ1Иd˘dhLeL24&2&l II$[$Cc-c1ɖ1Иd˘dhLeL24&2&='>(D{R}T+ BhO ўB=5>6D{n}p˘dhLeL24&2&l II$[$Cc-c1ɖ1Иd˘dhLeL24&2&l II$[$Cc-c1ɖ1Иd˘dhLeL24&2&l II$[$Cc-c1ɖ1Иd˘dhLeL24&2&l II$[$Cc-c1ɖ1Иd˘dhLeL24&2&l II$[$Cc-c1ɖ1Иd˘dhLeL24&2&l II$[$Cc-c1ɖ1Иd˘dhLeL24&2&l II$[$Cc-c1ɖ1Иd˘dhLeL24&2&l II$[$Cc-c1ɖ1Иd˘dhLeL24&2&l II$[$Cc-cИeLI@c1 hL2&IX$1 ˘4&a$,cИeLI@c1 hL2&IX$1 ˘4&a$,cИeLI@c1 hL2&IX$1 ˘4&a$,cИeLI@c1 hL2&IX$1 ˘4&a$,cИeLI@c1 hL2&IX$1 ˘4&a$,cИeLI@c1 hL2&IX$1 ˘4&a$,cИeLI@c1 hL2&IX$1 ˘4&a$,cИeLI@c1 hL2&IX$1 ˘4&a$,cИeLI@c1 hL2&IX$1 ˘4&a$,cИeLI@c1 hL2&IX$1 ˘4&a$,cИeLI@c1 hL2&IX$1 ˘4&a$,cИeLI@c1 hL2&IX$1 ˘4&a$,cИeLI@c1 hL2&bIIƤXƤ@cR,cR1)1)И˘hLeL 4&2&bIIƤXƤ@cR,cR1)1)И˘hLeL 4&2&bIIƤXƤ@cR,cR1)1)И˘hLeL 4&2&bIIƤXƤ@cR,cR1)1)И˘hLeL 4&2&bIIƤXƤ@cR,cR1)1)И˘hLeL 4&2&bIIƤXƤ@cR,cR1)1)И˘hLeL 4&2&bIIƤXƤ@cR,cR1)1)И˘hLeL 4&2&bIIƤXƤ@cR,cR1)1)И˘hLeL 4&2&bIIƤXƤ@cR,cR1)1)И˘hLeL 4&2&bIIƤXƤ@cR,cR1)1)И˘hLeL 4&2&bIIƤXƤ@cR,cR1)1)И˘hLeL 4&2&bIIƤXƤ@cR,cR1)1)И˘hLeL 4&2&bIIƤXƤ@cR,cR11ИT˘ThLeL*4&2&j IIƤZƤBcR-cR11ИT˘ThLeL*4&2&j IIƤZƤBcR-cR11ИT˘ThLeL*4&2&j IIƤZƤBcR-cR11ИT˘ThLeL*4&2&j IIƤZƤBcR-cR11ИT˘ThLeL*4&2&j IIƤZƤBcR-cR11ИT˘ThLeL*4&2&j IIƤZƤBcR-cR11ИT˘ThLeL*4&2&j IIƤZƤBcR-cR11ИT˘ThLeL*4&2&j IIƤZƤBcR-cR11ИT˘ThLeL*4&2&j IIƤZƤBcR-cR11ИT˘ThLeL*4&2&j IIƤZƤBcR-cR11ИT˘ThLeL*4&2&j IIƤZƤBcR-cR11ИT˘ThLeL*4&2&j IIƤZƤBcR-cR11ИT˘ThLeL*4&2& fIIƤYƤAc,cҠ1i1iИ4˘4hLeL4&2& fIIƤYƤAc,cҠ1i1iИ4˘4hLeL4&2& fIIƤYƤAc,cҠ1i1iИ4˘4hLeL4&2& fIIƤYƤAc,cҠ1i1iИ4˘4hLeL4&2& fIIƤYƤAc,cҠ1i1iИ4˘4hLeL4&2& fIIƤYƤAc,cҠ1i1iИ4˘4hLeL4&2& fIIƤYƤAc,cҠ1i1iИ4˘4hLeL4&2& fIIƤYƤAc,cҠ1i1iИ4˘4hLeL4&2& fIIƤYƤAc,cҠ1i1iИ4˘4hLeL4&2& fIIƤYƤAc,cҠ1i1iИ4˘4hLeL4&2& fIIƤYƤAc,cҠ1i1iИ4˘4hLeL4&2& fIIƤYƤAc,cҠ1i1iИ4˘4hLeL4&2& fIIƤYƤAc,cҡ11Иt˘thLeL:4&2&nIIƤ[ƤCc-cҡ11Иt˘thLeL:4&2&nIIƤ[ƤCc-cҡ11Иt˘thLeL:4&2&nIIƤ[ƤCc-cҡ11Иt˘thLeL:4&2&nIIƤ[ƤCc-cҡ11Иt˘thLeL:4&2&nIIƤ[ƤCc-cҡ11Иt˘thLeL:4&2&nIIƤ[ƤCc-cҡ11Иt˘thLeL:4&2&nIIƤ[ƤCc-cҡ11Иt˘thLeL:4&2&nIIƤ[ƤCc-cҡ11Иt˘thLeL:4&2&nIIƤ[ƤCc-cҡ11Иt˘thLeL:4&2&nIIƤ[ƤCc-cҡ11Иt˘thLeL:4&2&nIIƤ[ƤCc-cҡ11Иt˘thLeL:4&2&nIIƤ[ƤCc-cҡ11Иt˘thLeL:4&2&aɰɀdXd@c2,c211И ˘ hLeL4&2&aɰɀdXd@c2,c211И ˘ hLeL4&2&aɰɀdXd@c2,c211И ˘ hLeL4&2&aɰɀdXd@c2,c211И ˘ hLeL4&2&aɰɀdXd@c2,c211И ˘ hLeL4&2&aɰɀdXd@c2,c211И ˘ hLeL4&2&aɰɀdXd@c2,c211И ˘ hLeL4&2&aɰɀdXd@c2,c211И ˘ hLeL4&2&aɰɀdXd@c2,c211И ˘ hLeL4&2&aɰɀdXd@c2,c211И ˘ hLeL4&2&aɰɀdXd@c2,c211И ˘ hLeL4&2&aɰɀdXd@c2,c211И ˘ hLeL4&2&aɰɀdXd@c2,c211ИL˘LhLeL&4&2&i ɴɄdZdBc2-c211ИL˘LhLeL&4&2&i ɴɄdZdBc2-c211ИL˘LhLeL&4&2&i ɴɄdZdBc2-c211ИL˘LhLeL&4&2&i ɴɄdZdBc2-c211ИL˘LhLeL&4&2&i ɴɄdZdBc2-c211ИL˘LhLeL&4&2&i ɴɄdZdBc2-c211ИL˘LhLeL&4&2&i ɴɄdZdBc2-c211ИL˘LhLeL&4&2&i ɴɄdZdBc2-c211ИL˘LhLeL&4&2&i ɴɄdZdBc2-c211ИL˘LhLeL&4&2&i ɴɄdZdBc2-c211ИL˘LhLeL&4&2&i ɴɄdZdBc2-c211ИL˘LhLeL&4&2&i ɴɄdZdBc2-c211ИL˘LhLeL&4&2&"c6Bm ,X  )H<jS`x,ԦbXMPc6Bk  )t3MGK,=t3MGK,=t 3MGK,=t3MGK,=t,J:XMQi:Z"e陦eRi:n)ެ7fO)헃;ߞ}Vgۛ PKtPKBTOl9..mimetypePKBTOA5-TThumbnails/thumbnail.pngPKBTORConfigurations2/accelerator/PKBTOConfigurations2/popupmenu/PKBTOConfigurations2/toolpanel/PKBTOConfigurations2/menubar/PKBTO2Configurations2/images/Bitmaps/PKBTOoConfigurations2/toolbar/PKBTOConfigurations2/floater/PKBTOConfigurations2/statusbar/PKBTOConfigurations2/progressbar/PKBTOegJMmeta.xmlPKBTO%BWb% styles.xmlPKBTOh manifest.rdfPKBTOހO settings.xmlPKBTO93,EMETA-INF/manifest.xmlPKBTOt content.xmlPKe0Spreadsheet-ReadSXC-0.38/t/StockChart.ods0000644000175000017500000004430414456566532017552 0ustar corioncorionPKn!5l9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPKn!5Configurations2/statusbar/PKn!5'Configurations2/accelerator/current.xmlPKPKn!5Configurations2/floater/PKn!5Configurations2/popupmenu/PKn!5Configurations2/progressbar/PKn!5Configurations2/menubar/PKn!5Configurations2/toolbar/PKn!5Configurations2/images/Bitmaps/PKn!5ObjectReplacements/Object 1] pUSyI6!IۦP!}B XP0"VN #IzJd 穸ÓU\;q ~|68JS!e~R3W: 5>ViV,Ԩ&MgFU 4QGjtkNf|k4zGN"8 H aUaa9 9  pA؋ #40B pAË8 lrmHrAءF#4{7aa-F8fXZ>z[9+9eF[HDGjd3~vMT*;;p^Q7#pUHw jTٴZѨ5FYQ\GpgF++hykL6'SچN9h۲v~g[6-D/] Nvdt .nw ׇ"a,îڸ;/oi| v=~l,jD7X:eO.daYVyCG`:R+kh CQ: YNfYN~Z:m';|uNvdY;H>`~S<| qKzvv5"*9Z 0o5?tȰF /0B<#4˫0B0:&AFa0BRJ*ةb w* ߬rahH#a"DdsF> uC=ޗ E%ńq s\8f."}M?q48O˂T܊.A, '0K4>;' A<- zJ=yAZPv8eA_DX=k]0iYg" 5>K A<- eyNPv8eA L䖹{ A<- 9LV㵕q48O˂^TD]ב]0iY:g=o6q48O˂:9P]0iY3Hl A<- z &TƗ.A,{әe+eyZb&0]j@ hpTDTۑ]092A]a{/-rU 骖})>}.hr!THsFi|BBzȥՃ3UP!(KbJhtXKbr[iG2:J!\P:-\KEpm}'.ݵ>tttN+QJ\˧6a#j-.C.4٢| X1t$+F>}s$~ V+2< QPܻjUJ J*.-j]Z'}*PKEPKn!5 content.xml][ۺ~0ܢhݒiS IEmD;.F$[X!#97O?z4H+Sy<¡C\/\/_Ow{CV+ 80G;irႠ؋! pHpZ\VJ߸;g.NcҴ39sKѮig Z"M;?ƾ"Ao&Il;mJzض=`\3>f2Uf9o-C =%ɮ>4ƺ۫J6GĚ}F.Р,+,C4SrBHuH UeY%ݳ;%؝g;ŊnрO">Asv68@f̒ d.MwL<8Oi,7Q6q9VG9CܕHkbSP|@cl<{^= 5ǭ.3 ׿׀#H-=l'8h *O$oh+}vLQ2:& (Sh-`uRP(8Y&J;ъ,)Fߤ{ 2s^'P8R ->=r*ȀR61{M–F5-?ycD _*wOȪ\$pBT*91S)Bk,=IeVől4^!H>P,ä?j ({O×;+d YK]o%ЪkJ?5W 9e#.&8M-KQ? +#{hiB6|b["Da? Qy<*oQ2.hL{1/ ix\u0^}I/$!N-9ߘB.s&rݳ-RpH͇/(u(dKٱ[,%`8¨4 qlGQ]KB"qi*>^%D(`~B9o-OeEr7@s6b{20bcJ(\lMbyIn@w(`++mam6#'.R]o_µXH{+ꮖսd.$ P&L9At[9Z8.ͧf7SeC~MlΫz]7Xs=毙J'mPPNP,UoE~PWT zY=qKb7D̚qF+IfΛl'hP"6./Xc{1#m $3>I&:krL"xjse-)k,Xo Ѻ*S]VdxU8@Z]-qfò6}J[xw_?ofY;|k$فL &tʘw6S={3Seev0 vL5! Qǹ~ f<,>iʊJ=~ M1?a* ̩fipb~lLuSs**Znj"N3[%ۈ9D!V$-O0^PZOX=S!/tJ7,`Xd7'!'ق嘄 o8/@k\+5I6VSMQ[G['3IRޓݥD z)YI|~턛jz jnp[cgI%y~'#Y>m kĮ|*h# 1gDgK 9a9meM1XUua>-C` [B0=,ӪzYY[\y-zCMC5LdHbi;n}!b/kA^^_ooAϧ]llCsd; d;YvnvnYabdO-r;P(e&)ڢy+­"fȗ*ύ"'&@5ޚV_˸=P]Ь,V*fu˴)@0;&̶[f{h",d6Dg`eU+F^#ƪkbU zVWq+mheZĵ>)ڲMM;2v;d#"˂Z]|=HWPc˲&f=ZV;v_˦l"+ Wj_֨Xvn).2X&*뉶8[_蝱YA YESer` MoU_K soL85p?˺+%OJ5OY*e m"6{z~*0dZ)RQe+B Ä{CU~m5v;3Z)|R|9S :ݔ>];X^鯽nZ}R|U+5OjtSWX+ =,+^ :FAFXR[$ڼR$uazj]e F_2K' O-uCW<@M|cU;d/ Vʝ^˝4#1Rz?]g]MEJzJ'C6ME`4ZVibZeT`kL<0 _k|SQk/z _/˟_PK} prPKn!5 styles.xml\n68EMl7vP`-HID}XV,y 693ߏ2dQך@pe}=y-2~A"l.T&|v%%K/i QZzE뫮>J 6Ge퀁}_e%+sZVҾ[j4@G^N\`Q߱l%U>Cq0S>4wU)T;u['}.I; J~gFMIr#%lhjM%lr}1_?ʛ'd>eUc@dHFT$b$| `H=Oxȡa켣}pGɯɗ68)*u;vFC< v2M;mDӽx-Hp˙KzG}eċ&;fL OS>rPE.b@@kIrpѺ7)ծVUK HP6B|d0_~5m-fL)O̦hl amuylx:ϑ˞ˉT@@$~V'h?{< Z@ E"w8J\G* yA +.dG-Dz#Hm D6 Ui#]mkB^d)nJ&ڲ R҃SY&@|Qy7p s_ogPN_v~4\# a_͉}?Dp/u8;㱪ږ/;ԁ+?O;W>\15RJO 3RpF~ 7MFƼ5+e9Xe>JlE꺊"hFɽwLit}@[ݓ9T/|)Qrwv%Qa+tvEp-1:{zerv =Gƣ(KE5 Oky8e1<|Jw*Ώ8syMp>mjX];]xZc:\]wqI^_2 bI6)fLH")1ZbB?4Ǚ!nqR_/BWfOCp87絽zRC -N/w FiH|cO '$,pQ"G.ZHd^Bqq`Q+kCqP̦əjbמp8t\h)4a= dYGy)})F0|YMwՎ& 3˨wVJ }RʨHo*nIZIe6ƣh"*1őg5}^! X+m[J%zGxuxaLQz&,}nUOe Buo6p{-<4ntS47Pqv{Dw"1?Q e{(7,|W˓TuBk:(ui;Mqu:"s(@uUДgE}K_?}egTx7f-QWPqYj;`|O*AyVqkόWj`LUrSKc:;%TҔ?/TN "ȓv%܅zoe^(&a~y;_nt{}3JM ^,ʂiۅ4uϬPKejFPKn!5Object 1/content.xml\ms۸_Q{R"NM/ɵ3 Ą$8$eY]|eJT+bXIj'Cu1N<)eyJic*k5$.JKIAq 84`8"`p\GO_ Ipg֢(q"SN]IoK pXމQA ~+0M$JAmI FtlOҭ`(ˈe%Ӟ #kkbx $Ān2C2]1`#$kYӞףn3^R@ .H`hYˈc .F3@*:Pè~,xjpX !r ]$Yu l)iiXr &(h0Ӻ"i(d)Y^M:C4ATj?L5(+ )MI5P/#lpl4.p?]Ḩg%`i]W6$ZoOdI|)3 r=ZX&,sK4VlXf N8}3VDqdwMU!M^by$"Wxb'iOl8}NI{!,lKQhPK 9晫̰J;c ~NW9FʽGwYfDA=/0ys5%6#'ssZ_mEd2$nPd GNlHYXIVr6gŨB0^{x.$у& E?^*ZCӛ3D!mq-3kP0it+ c|!X/Q{g{>o #%§-j)qtq.2IMUv!gw̏v# 7ey'Σ_rft%3 2gk$qQT^BV6Y{J&5WDzRa.[>l(i/J~_?ͫ񻹤CEվ<6-3fK!c18(@R9qcX:=]a/BJ4\ThZ(5@PVp74 r^W{\b]+Q%- Ism'᨟C%鏊`h1i}}vC\cnoݾ:nGa/{T00kT-,q!Ԝuͯɢk'l\'3{S#ΛrNyR4ý} x 򒽩G>\чƣ7C=4=ܜGT}֣mxQAFKKĴ(NJC ,0Z~&bJ$w ^[88e $gm1Ad.%QkWО*ꝬҞPҋyc`2u{'Y32+^}wNtb0ً!8b_|i>kv,ciy6 k}7sVT;PCCjbO3TEįLO!0-6lGj>k zp0]EP@iFlw%Ph׆$EHJG]wXPDJ,kHƢuH_Q|@W]ZhD*K.r-(Gu,1 yа}AN WD3o4$Jht)7(i@.C?N}4ZJ{٩˜2zDǠs궐DgC[%]\QFM Q*VHw쨬4tǓkћþ|Uun )}bئg ћ~zJ}J_ב|K]QFm:n_KW>H,߅\9 >Iy7 B*ߊXe^NZPF{7;gXSNDLNSFMcܗo2mTO]ҌuAot9dhPD~7U#z-M8ue^ ޭM`x}?KweҲ/+?}zPj)Hpe }YPK, PKn!5l~x,,meta.xml OOo-dev/2.0$Linux OpenOffice.org_project/680m172$Build-9037$CWS-chart2mst3Björn Milcke2006-09-01T15:32:39Björn Milcke2006-09-01T15:48:00en-US3PT15M21SPKn!5Thumbnails/thumbnail.png{4D ~$M'm2Nmq%E:2EHҎ5l c02]m?=du9|.x8!u%%%3[q&*VnUv#A+ow1x_ Q{an+e[wka u5w>+Jwf9WT}Nh ?c37/waU~@lFPA',]l`r$=2C;XTF>;mhs Kg)1CtٛZ݇AnYA]JO/E/wpWM:t/S@8(1 iܷerJZu.ih upZ©C]0+Qg.eY2ea499;-3yb#ISkr VxMחE/=_< |Dt>óxumy5R111QvwܫlN'獄EsPy_MFCbUۑD hҬOKŝbGnw&Z(v`!2d1#<;@ Q?|'(Mug?,Vv2_7[KSuSpl-f̡}@|f+#?wr&r|j~C|-"ŗfIID̐]js5E2p`AXnȇA>lj! pGD[=D2 y僫+<6:ȗQ5;yG:Z>ר;_=x}G'(n[Oص,$Tԇp,<&j1H"ବb ZsgjHv|T:%?t hnm`nmI# CBe Γ4aH\q=Aݮ>c'=#܏yBzūzf}_a@Gh fih2A YP^415&I RlEKTބ.h{WD&&ضtcfPgJf~/sALZ&'`])h,wV"q; Nʱ8up;?F ε4D4#@A6`}#T ĽԃnkԜ \WA)9J7K .'ىeI}s閯 RO+z-R9S[G;];؞ X_R1@fAٙW߈$o"n/Igyp+x`\ocwټ9Y~,.h?LTj5v32@&0%7߅VHe9÷>Kf1}B'B,B\u7vENM kG8_PKhBqPKn!5 settings.xmls:_N+b8ۺ} %kH$ Ӳе3wvꋚ9s||#JJLUN qȼ Kk+:!]>$C!~"^OJHxp4d7zt}#,iYaD "W*QE3敪MnC ~-RKP ]X4իLd5rEi~8}Zۛ̑.h {7&LzҌ;4i?)vJσPTpB3d.H=0b+<$wJ#D]G2cS,Tfx#n y;Twg4fyݛoQNKacWвSJ䔺c0MMZ  ]EAxϣQ,%3`\64gsX\2џ ,<ߡX[ҩrL5),4BU&볋V\Ģ,"dHd9S_$5vB,CEnk[n&c3FApȮw&yK #GtCd\*rcpNLL1HR 5105Um@|גE%x]r+o*yo?PKQ`cPKn!5META-INF/manifest.xmln0 } Çl= nТaНF TI̺YDj3=)k~_huZ-F0GfQuö 4HQc`DjX6֡ #n~o8{~[İSPa[sZIx0]Uyֈ\ }кr8Jsɚ^ ?B8 |%jٱ . u 7\r /W^}֚N,evʀ$xY;3 ۑ9<ٖPKï PKn!5l9..mimetypePKn!5TConfigurations2/statusbar/PKn!5'Configurations2/accelerator/current.xmlPKn!5Configurations2/floater/PKn!5Configurations2/popupmenu/PKn!5QConfigurations2/progressbar/PKn!5Configurations2/menubar/PKn!5Configurations2/toolbar/PKn!5Configurations2/images/Bitmaps/PKn!5E4ObjectReplacements/Object 1PKn!5} pr content.xmlPKn!5ejF styles.xmlPKn!5|*e M$Object 1/content.xmlPKn!53:L@.Object 1/styles.xmlPKn!5, /Object 1/meta.xmlPKn!5l~x,,1meta.xmlPKn!5hBqY5Thumbnails/thumbnail.pngPKn!5Q`c (=settings.xmlPKn!5ï AMETA-INF/manifest.xmlPKCSpreadsheet-ReadSXC-0.38/t/print-titles.ods0000644000175000017500000002272614456566532020147 0ustar corioncorionPKOOl9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPKOO`R%Thumbnails/thumbnail.pngPNG  IHDRxf`PLTE%%%,,,444;;;CCCKKKSSSZZZbbbkkktttzzzojIDATx׉rܶPl$`'44DqRw`7՟omO,!usv:Qwض|'gY{h][u&t_̿blnRXo՝IEB22gK_uvzL.Z(9}ˢ5\DOv+Ef[|#]QEqV9{`Gb0Kdďo|:_bueBI|^ !+=T={b)M|uY\?;NlQS^uhMvnoK,2rM*0EdN?EsǤxOշQQЊxz;qJ藃ҽFou]/ݗ<2g-M~}\(-h۝i{7:V4ŗ^-xVnL霜vT^qgF2VKWm5wN{J__(̖<ǎwT♊<:N8xṽy}CSjI]S}Wjkj4Os/cdbT&TekjG?ȥDGgJQ@f}QB?+qYyF#U¬A.ltbV@Fּ+nkV?:ڬ|ac{pTZg('cԘe-W3Ʒz0x[Ѥ^lQWGWGKtj 7~6~؃-Z6Sc\0N>Eg\nܮkz4u (\;LԷI.")Wy~Vf܉,hCs+xƊ.U{}ęd{,[^Z{زL#uK.V?{Pgj{Hen͔ǐ6*#(zQr"}1q]C -ѿe>O.9Ɉty&e+S,[Zfza}>q&JkgwrV:urG/,ߕolU]^V?l큟)\7,'Yrdۖ>s]OV5ߥ9.b_F&?AgP(5Jq􃥷Xsh͔${/[Ghsn4# ֗y{hAfY}R.IENDB`PKOOConfigurations2/toolpanel/PKOOConfigurations2/menubar/PKOOConfigurations2/statusbar/PKOOConfigurations2/progressbar/PKOOConfigurations2/images/Bitmaps/PKOOConfigurations2/floater/PKOOConfigurations2/toolbar/PKOOConfigurations2/popupmenu/PKOOConfigurations2/accelerator/PKOO content.xmlYn6)Z\yqb+^&ME\%BI5y^z(Pd@ߢCQ%Yȱaךߏ3R{lqgAb"Иؽ89#I#kDDX;vS+GT"qW̗(3᪶+WtLHld!U諼RD=Jf +cwu{r,wBp˸%`R%T@<ʩq`ո/>#[єޡ_j"X)~:Zkv̱]gpTvTu#N}\Օ2Pɒ˴U}!D (͞mo?sEzQ|)"N6Iq H 0%_n"ա0,VA'2fF,VW& +$Me`f/dkTbw-DCgǃ6-]>eB~QarKB 4i6`AW ̰0js&VPkbKj5#Hv}nhϜ)t̚(r{3=KdW똪S @)>}=6ප۬YYr"! HBYX;x{O57#q^y5:9,>5ŚYmF. pkHM{ZLiJ 3yJ .f NegS[x`pW !Pπ܂n6:m[f yC;p])_MVfJ5ܯ<-S WC=Xk>_@j<J%jsS =,Ѡjeh‘r:,!lZXP)ܱu:RRwLlP={Z{nC.4'y'~k.aj%jz>FU0 puzR[ 4{xR}^.6<6Ggчgo_TpO{|}0:oOn9953lt_s|4f:c<_rҜbFUA&umn?4d%4 _i,7s}߇NA$j¶&(C(@Ict2Lon=8,a ȁ7D&>,݇=FvWPK (=PKOO styles.xmlZn6S*P@dINn],vH̕]ϱ]b0`g-vHdItm- ;r.R,1/&n8\gILϿܣgl6#,Z8^!.).`Ί^ *H1P,ǙaWcJS \Be/:Y1G 1X_拂z3E,͑ V\Ps!Vjwx⇣W G>X*+pb'UEzy Y9.ʺ'SeһIG9L륲/ݸʛ"1xWBqvS1kdЛ]; =_?WЫ' < lY4> <%o\:)y8g\XCfDgh\{UMxB]-loIFmWj-]7[`Y1'r Q6IV e j/RhŊ2$v6p46'y(C t۶ce!pzfӯϝg8YP;bxo];*3MH. VaJ]_c#y $r{1))t-&o1EY@ bkp7x0%)hWJ6 OOLE[Wr-f7%ۥ'*-+Ey%,9SJ2u'PZdZтs_ xdچE ]F4Kceqf5lR[ݲuP=6L5eg+qCȴemvmUٔUlצ^إ(+8/][o&Ė,sZ«ߝHLCMv{3 16 qf`\)ZyCվceQ( Wnw$2Sa)%qdEb-@mI)Uֆ&.7 Sz5CGSc-s !$&ɼ-f8HZn!Z+&-ZčwWJr r2;ԤhJ8tP2ԃsE:5 Ss(K>ȫӹ(d Q$OC4Uz X=q|^`5ڌ1HF,zu#|iVR$6uYJƤU(}sCsdÚC\taWb8a]FCF Y5ArV{ٻ]YcDo%^X ]X~GEQVŸզd~iRP4`Ll$)IC_}nȵ[I EM:51SĐC0thO4"¥|S䗀{pA~@_ʕ˓+\q:Ǧ`xz1]aud_4=sD@~CKrϨ? qA٩`אO!AwpFOx%/`89B?,WKsWmV0FY$oY' q场)#)1.Wic0JWR4l8o[bT~S.b`Bg^l+昆=&``kSRA5b KٔA?$dS*[ExoWcYq:G)S-'*Hc%7BG@CH#-p1OcY'Pt>K>BmRLt)Uʥu5t.i؁~>FD"2M]vpo\b6=#1;bȎg".Xd]6&P0I[ntȤ)1Iuq)8B,O;:;xux#">%hҿ{?=݁A~IBMr/zt8? 2Xt(gj5!Ρ,'MLY˾@ 2 pBfa>hR!n+yxc0xE<8֔`7R,:e5B>j40rg+)kLGtc`X#*w0GWPMUocvK~&ilõlκU]'M?Kkg VVJP B+IYϲ3{,qOD15/1"/FEQMDh]u$W2f>5uUL93gˁU7\Xe'#Ai^|\y!a5p0(!lxN>+[.)iwiBKC{m `˰~h~OVL*oQaw'AƢ碽r<\ :-Jx"~竱s,ojg-9i+W1ѶWPKi>d'PKOOMETA-INF/manifest.xmlAn E9Ŷ2YU(Nz  Qrb+N\Ub);`|fw]udž}wV^[}?n DrZT۶a9*$Q$@/GnfWid' +settings.xmlPKOO93,META-INF/manifest.xmlPKe[!Spreadsheet-ReadSXC-0.38/t/12-active-sheet-name.t0000644000175000017500000000113514456566532020675 0ustar corioncorionuse strict; use Test::More; use File::Basename 'dirname'; use Spreadsheet::ParseODS; use Data::Dumper; my $d = dirname($0); my %tests = ( "$d/print-area.ods" => 'multiple printarea.C3', "$d/Dates.ods" => 'DateTest', "$d/hidden-cols.ods" => 'vhhhvh', ); plan tests => 2 * scalar keys %tests; for my $test (sort keys %tests) { my $name = $tests{ $test }; my $workbook = Spreadsheet::ParseODS->new()->parse($test); is $workbook->_settings->active_sheet_name, $name, "$test active sheet is $name"; isn't $workbook->get_active_sheet, undef, "We find a sheet named '$name'"; } Spreadsheet-ReadSXC-0.38/t/merged.ods0000644000175000017500000003532314456566532016751 0ustar corioncorionPKl[Fl9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPKl[FuYThumbnails/thumbnail.pngPNG  IHDRsIDATx]kU_׮ZFiIZTXd={H^if&}ɂ/AE=f%J/%D_Z{_p\wY5gf;::?ޫW/ӝ}:^,3hDJ©##39?Eb!3#̑CTv|d1Sz2SRr@ _"=J5{r)nؽzmr`{Lv,SK&Hc9-nNtЇױcl Z[ѣG[n=]Ƿw(.*vqF-+BCU aXm ?]߿OΚ5^>|x>},޽ pJӯ_?{ ͰJGlo׎eJci 4'sTT/|ǰ{3f 2_~3gέ޺y:thȑ'Ofu5\hѢ6l…a3s=w\+yy@ɮc[Jtst)t lm۶mҥv}Nj7O_r%ӧO߿I^k>cǎ U z+d=7tu/c"D2pHGmӞ-gyڵc|M߾}j-[ƌg]{&LzjO>_PT5uLS+ PXdrV-)D龺;`رܹG5{oٲe/[of[o&[LO?q֭[{Ymb!3ZW@2ds䥐N9ȚFuir/^bŊܹ6N=Է~{Ĉꫯ._ov9tЖ-[f̘_lڴiڴiv_^ӧO 6lݺNJސ1.Б9c`GegABҕMPfR@2GE2Y ӹEVy=۱ ,_|ɷ~Ν{wx]dɪU> ͚t"I5 Lȑ#cƌYh zGˑ#GΟ?ߊ@̙3>lV[g3\b8@X?%GXrL$y#3h^ 9^#8qcǎΝ;[۷۷ϖu;)֎Sd~2͚5eM|PG>߫۷ l7iUW]e]wec&Q7niO'xPKDT s ̒ B9&Bi 4c/ rJ˱de˖ovڐ!C8`2㎉'Z1E+%jzQ$U1hYtlKr-$UsͶ#sK65uY.y'_~ ؉r(k6t~w1ۺ8kkϽ:vI^#2TB6KU #e(Wac9䑴h Kr(w]miQ M Gݻ7] 3iv3gλku=_׻wP3<#\~%%ҼQW kPqHUmwCxw}r#G̞={ݺuW\qĉΝ{w} cǎ\R$mX>|x޽v`cβqF "֯_?y3gWYe,=e\͛7k֬>}ח_~yŊVx=x=\owرvZk֬y饗&LhѢO?ꫯ{Ǐ< Vmb$[qGIx!;qxr--h߷oW_:th]wG}믿{ z׻Qvt=@HS.e6lMd@sf4=Qh&`{M#(sHj̱kң5Z(shF\\=qYҬiBYU#+ tR3KYCXgC$ 3#<eHkg9)~_SBȆ|(T5u&tJ:c!u<$gѬYYugW:`/j!_ 9H !g畈$}Dy 5(rz ͚'KtPx&}r1 ILrv^LWIP(/B*y#Tsv 4gVsY3fMIUQR%= Ifc,Z|u5Rt=׌цLd/ *F:"gW)!0H&9t 0[S1МYMO|\Ra!TXFٞc9s{n+ՖzSl1Mzʝz?OO-٨ct=< '#?y 8*I΢GYH2Ul1f- M:%*$WQ1f- mIJ tjm-)DBA28BX<!RQ^P1r֙,f=(I],~pT$Ek֬k4JJ$ Mn׸SxJe"ЁtB~쇤6 x9Xa%@s2ZrWR!iJJEǏիWc]' {W "HI8u$@`጑Q^T5u&9DBή +@1SGE2Y4kj֬q4<=}TfIH%Ώ"W֏V0+̹hNF}׬k~Yُ|P YK$΢H2SicfѲKؖZHT)fm{tE˂nmIJRMIwPaU40[hc94Z3hALT5kGYiԬ)rNi:㔾ݡG^T5u&9DBή +@1S5O5JJ$Q$ĘY,MlK͉hkjY'(8}|IENDB`PKl[F settings.xmlo0W5*Lkn>LrU)$iW4^q>߇9~wVwc{S>[W[1fG/ ˹t T: 9ϗ9TXQ~ӷJmqݣ#;ͧzgt^WT6{S" Jdʤz΁}Zk%7Lӳ?8^ TAئ~ַHgI!Uk*P`hjAʕ5ۏ!_L!Zߙ~t(ռ_u퀄m}( =Jh: C|Jh;ti-9! O)p #~"!Q\J{!g`; z\憌/C ;7E=S<=EDŽ+S|>6r*m6vT 4 HMvCZH?.0(h1jOn \p3YT QJ}EBIΑؔ]?*K:R@RTyی0Ynu\)vg)rB!CQ@3LNPw>l`_ XHz1g@|ݖ.4[t+*".3n#B\N TP&NV>~Ę1Hߕշn[F"FS.T!xۺNR鮸\1nF'HPo ??9[HKd ٍ7>b(Ms~} .޿D|~qOEjB0 JxOi>Z}~A(@&xv+ԂДH8<8eF}_' NG!ܼ]a^d!K,W'цrЋ1Ct=x'5/pa&;Wq[^57W<t[e4ZJ w߻\T?PKCgPKl[F content.xmlYo6~_axhYN&^bЧn[A̖"~GR)Erۂ/NL~w~ܾ>|J3)b9QIDq7t=}ݭs5Y]RaP&3zwk5kK&[ˊVjΖ_OwXЃ*lYnفci~łSc\N>hr ^/+lXŁ3n5Z'~_/RIzss@8 VܡHPN14i%5x*?)P55GQĜ(׮]byT SIJ%6ۑ^'`}{{+UNeWeUѱ2PryzWP ,x\CN\ѝMPDzD`dT_޾϶G021 G(ѓ^%VR|zh)x밻-P BEm魧&qHńp*Z3衢-̝غ!`." F(o?iPԐ ZG{CilK5> Cڄ };^ÌrQDhay[w_'g={T4V2p7WRa|QimBٷ )Ӧ{cDL}|sIj?jO~Іϱy:=W8OJIFgǹ=ƞc2:+e >;'d5]? ץ"2Y.EgPҠКn56=#vzX-:+875M}Ĭ]RVl,WW?ӄkM +1Gt_C|uFׯ-{],aH UK{pL ajVuPl,xRP23:Ô6Uae_ j[Lkn9BCb9+ҲVCF!Óu ^E^VB""Lp._> 7, M魂72hA`h~@[jmX$U4\mްn>v7j%VܦtVׄ}^lm KE4޷<ll$y8΂Do)5IwkmJ w 4v48o LrhXQmӀj)اXY<6%qt:šA?ʪڡi['P5s6M`2ͺCocQ?KsO8SpgM;f}3ŗ~/PK2\PPKl[F styles.xml\6~Oa(Ndw++AڻWe(Pz7yT$7$Z-ڍ6 g~p5u)Gc{Ù.H{xlWsŒ3*7I QpW,a>hU^p%\-;XʖƢ3+h]R0-߰bjn BTx$ ,kMw),KKj]-%*)ϵ0rrXI٢Ia<`$P-1ǔfףE7ϔp*s?U^qlĶ%{T%eKPDLcT9 ]ܙm_YsAz)D`^w;]D]8 @9 ?J\:ݪyaq1.!Й饺m_759s -,ݛR.i)bؖK'[`ÒK] ~0' Q5lUPd e'RhO36.Rf:6 ra4EI,7ÿ$Q>_dcRR)eM%<ޑ86iH +r/JDD'CL;cs. xjn[]v06~gie JhV3[U.1]LG#hkF Ĵ A L^p=prY*C[a+B?A>T59>3*LH(1D rۼ'ӘwC](~[[RU~Ӏ.-QdO M 8DĀA&1i*DZ?ڹBD%kƓv'ڐ9㫉B9c!0ՀL^ig3m'ڐq5)=HɳB3}<|/m?gtZ{7zy漸gBOh=ݷٗD'X @_ݒP`FkYŽ>Txy|N9 ω6u]L;J-T`iv53du]QU~/S4:}Nf?'qevT|Qri5Ϧj xvq5\|!8gseQǿSШi5;V?=چPj/"W`./tt Vy}zyWTisr(gsA8/84PF(s);%yGj< 6|>U<`*<^ëP@OyT)jȔx5XJ:3%..2eq˜xq_0 L{ʏFiCf`vqf T3.^_h9{=_Kֽ2^u۳n:ҋfF[ݾ}Sg{Q! ^-Re}Lq𹴭~nU€jU1 8N$j+9k3dҧ5Ϣ#hF_?,_aYGw?~XK z"+K2;8'{ "nO '9%!ebF"#|Jk&UsqrPXpf'SVijBO/c LGQb,F<90һB~9NxS +7\yg*fkZs^03D q\}iҮiU.g vͼ#&E,%Gc45\'4R`cgԶ9Ց=[No\]Aj3ۘPl 2q|GDԐwK{L↮41h2?e?Ap`'(v℠GH+doO'Bg̙E,[;|X~(5u80HYke[S۷ojcUP["$Zbg(}d_;| &X5A){IYy˲Ot$ؓS9A-Ԁ(TjR.zӍJ$UY̜k6άMrz^?&bXEA!z, m_{ҏϋ{Xݬʕ:Ơ8YYj~PKPz UPKl[F manifest.rdf͓n0؉{*6*t>ۉQGC4hKd^.ލX/+4EC$Yte/,a{F(ZYa w6-E$y 0A%xxAh2>rҋIft$*}jx!9LE0I,M銌ZE_[zF[!IݡsחhL}֦k>OzTF\GM,f5mE(IԜt.K3SbG>C"Lu}DON8]KВW]$^ks:VXֺ܋~WcFb+}:1XwO`v{Cq9P͞#"s'.PHSM7'gcڬ_|z~'gΏn:1hN)B.'#ד/&#cԚHd\khy5 x{?PKh۟b[=zd=~Qx ;o:+vAdC3m7fQ1V5!{APKˏoEPK:TO styles.xmlZn6Thɺ8mm7q[ M Q@Qvҟ{=՞dź[qbS4ss!%&L'e3~>qcnH8@8J䙞hPBEB,`1 EPKe#JXqJ |# KlM]_YG V}6V& 1a %gJxafNL{>j4-qqʩBy)%=b'U4|45HVTc2/)kήuCB|t)p=UTzUUO|gGT}+]KbkTģUyXiȊ]X։]WЛAy]Dݒqv82 4Nj~ar3.JCqR]-N(35lh5'^6Tj-Sbz͖v471DN!5 ՌlRPkӢJ:0fA"H2/*ҵO O3}3_:9}\lxإ4x尖]K#ڧr^D$)z{?E1K^7p٠TKI6$Ijqra[kdmkwǺ &B{Rx}f|<;H^yG)͏W`U) x8 8WF p&˦ ZXlx$(3ۙ-2mۂО4ق(HQV.`wzSEaQeUڋ75vMMgjֵi/~PQ4;䧛ZH˯B.G"ZC爅lVÚQ< > HSHBXij)m 8KcuCz_^$ ΓO|߂\'(K\U]> !<b׈x}V14Q ..Wbם|&';hDF$cK)77o;}&3䛳w>jɷu6fUoBod1q6\aQ*@fv"L` |sXWW*M0rW28!@TnX{&a3H@Ȩ;",Q ' (pNbQEpvxIs9ƫ;pa`{{saE>0W†s@6>5J#0K2䫔hvܿedz&"QiOf鿏q> Z {D0dS0/"%-ؑ==c0S*:!l'kTDQRx)HCUόy{ڧ]WR/;!KoSXo )I =K$# q]xg!r#o;)^+<-{P 9Gʅǖ[*QR(V>(5 =V@Gc_/dq^|$n b}8}DKuM%&k;{h+c- ]5m0[DSjaYfߕl\>D*4~"bmHUR WU&}GdwPa=7lpJ,kYVn. ݪ%Pmpd [vrW:ݕu19Ug9W%?/.PKhf'q+PK:TO manifest.rdf͓n09raͣnCK r.nABR!V# 9,]K힬1"ҒV.q.᢬Tr:zR2GsMf5E)b(Ys&5twMhT~v/%ġf8qA&k+/QNz1`4|ADT߂py1S)U;-'=ʕsK>Jxp cK0>EAps0zGN2 4="s%cAf2)C\#OF~>^ܡ!R>,ixaȑ[yB_r)"#<nߜ)W曽 9s)M+ 1j"_IvW KCtJ1D0`Bτk$ڊ9q.ɲ5e;mqNȹ8/PHtnH1v@1(.P:10Iq1cÐO?(b}ڤ'UT.m- (O w *x !.{pW\'=ȏ:IRg&8d]6& 0ǤX|*̂ Wlw R_\ ?t?'_JFlHH ft77Q62q1p~ 6D"C?Q qedwD"A}!dG(Ps BФ~B|C-b0|#鎋 yt*" HuY|+Id#Q+)k2Y@7ug׃|VSrӲGSMkQeiq_cvK~k&ilVgݪOfSy웮:=krMRږ\_b,6^9/ȩ|]xZT=W#f3 pWo,l"pF~3{ko`cСٕ_[=Qi\ݶ_ 6; use File::Basename 'dirname'; use Spreadsheet::ParseODS; use Data::Dumper; my $d = dirname($0); my $workbook = Spreadsheet::ParseODS->new()->parse("$d/hyperlink.ods"); my $worksheet = $workbook->worksheet('Sheet1'); is $worksheet->col_max, 0, "We have one used column" or diag Dumper $worksheet; my $cell = $worksheet->get_cell(0,0); is $cell->value, "A cell"; my $cell = $worksheet->get_cell(1,0); is $cell->value, "A hyperlink to example.com"; is $cell->get_hyperlink, 'https://example.com/', "Retrieving the hyperlink works"; my $cell = $worksheet->get_cell(2,0); is $cell->value, "A mailto hyperlink"; is $cell->get_hyperlink, 'mailto:corion@example.com?subject=Example mail hyperlink subject', "Retrieving the hyperlink works"; Spreadsheet-ReadSXC-0.38/t/04-text-outside-xml.t0000644000175000017500000000137214456566532020636 0ustar corioncorion#!perl use strict; use Test::More tests => 3; use File::Basename 'dirname'; use Spreadsheet::ReadSXC; use Data::Dumper; my $d = dirname($0); my $xml_file = "$d/text-outside-cell.xml"; my $sheet; my $ok = eval { $sheet = Spreadsheet::ReadSXC::read_xml_file($xml_file, { StrictErrors => 1 }); 1; }; my $err = $@; is $ok, 1, "We can parse this XML"; is $@, '', "No error was raised"; is_deeply $sheet, { "Sheet1" => [ ['A1','B1',undef,'D1'], ['A2','B2',undef,undef], ['A3',undef,'C3','D3'], ['A4','B4','C4',undef], ], "Second Sheet" => [ ['x',undef,'x',undef,'x'], [undef,'x',undef,'x',undef], ['x',undef,'x',undef,'x'], ], }, "The sheet looks as we want it" or diag Dumper $sheet; Spreadsheet-ReadSXC-0.38/t/gh5-custom-styles.ods0000644000175000017500000021230414456566532021016 0ustar corioncorionPKhryNl9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPKhryNwkkThumbnails/thumbnail.pngPNG  IHDR֘PLTE      $& - %"*%5 $%0* 9()))%,4*194,&4.6;1)545.B*8H*=P6;D/@Q:BK8HX>O`>Qc@.H8(C;5P>-P?4JA9XH8`O=aP>GEHEMVKRYVKFXQKXXZCTdFYlMUcJWiNXdKZkK^pT[eN`q^`bWgxaOBhWFd\Vq]Lib[wbNwfVhhhflskrxsidzrkvvv]nfvj~v|n{rrv|{{vz~p]rbujxmucxf{k|v}j|mr{~ru{{{ƧȩѴIJȺ¬ֵ˻żʳҲٵڹѾҹ۾ðôø˶ͺ˻üѿ»îIJȷʼdz˷ͺѾ* &IDATx] XWT%r1ԭKmK ږ-j]%FmWut06Oa0?3܁5mLΜ979I&pBxL$r:[瞙T{EW1|nL"SOl*1T~;ekauq+QIXV(\<Ozx#'x<6wdOċ:^Sdnv7sc2@nί%y7`?Ak el3A=ʐAy 3̴'~$ˆeQra Lq]7A+W"}HkDO+WkD3P~ _dK;s$E fdԤ`oqOg(n.mQ!AC~!|{ƞYI9_ }'~9[U?x4HJ8Rk uʊs™>ggoZ7'c[?.@Ñ)|| xd:g N :̻@7oN~$H>#)T3RSƥ; }_Bz>vv(>{;/D/eHG:r€j%g8Tem$V qd p" ;DNl0U>@<({"@I B1d%+sL Od:,J]| {n^aNLr>ܭf AL2 飔J)qLWwg],4G,dɸ5:_ |b\k'QBW X }R[B*h645&.S4G{*#T4I*Kd,dZ]]*^YJY6AhTic)>+-jq5&Z]΅Qr-uU|3%s1ԧ>]m<%SԹR Vu䪁)?I. N\TPD3muSȿڰ mbl kiJ\1 * 1֪xYg ;|Q\帶gZ~jYwo J̻/z/~[VZV[(MFu5&sEsJנE zS]'ZX W@v *lP"'4.ej ֱ1eGznd[#ǀ&ʳ9ңsy) cܗ<002q@U ܛ)cAvp N"˟Nvl\i)$)=&yőړ>KCE?Ϗ  TϪ Qdzi#zcVe&ͨ5H@GBחP&o59pYt cvcSbxhzSlI!JiDѣMVU&z `L 4xEJʌ@yߐ]6rP1ϲ/{iؒpqJ3ZVB3 &͘]U)[VD|8/ZXbl0AD[uɃWjۢZՈHQ"HpW+Dċ'f`&Uĥ YCB3u[j#tTNtPDTԑ!:R-RY'Z"d+K U4_f#qzE@Ow]Ȧ8H$f<53 K~PtúKHIܤ'%`4(h Q `M0J>/>e^_'Ca ^_@ہ Ac#@hۿP ұ|G|A8 [SNTW%ol32rxWohw-5PnÀ`-hP yek_L "gv`/>Yy۽|}9{8tm.Xo 2(^睳`E|L8`_ 0AF 9_ nEyCVܐuX ?p2GUn5".pp/WB~]z۱z.H-_O C8ySt-/ C.l $S(kd`竻Jo+|GN5 y|d{ ^m U)˅5 ki߂ii}\X Bq=†*Qp~RpD& p <Xj>1Qg=]liMǓ''μKHפ|L7˃lodH$:bH_ *l"=kvq1& c\oin Nx$ <xh> 4]iѕ+MW:NJLT6rΝmf[/b(Ӝ,|ձ3ˆi;hHX Ve@WscRA>:|Lt ttŧ'JGW:ѕfT(bYE iSwt.>@]wn_7crR\m  i4H$ I 3= $j!LO'N x֥ mcg#|eڭwaL>36HʜdZ"׸WDKes2m2>J2'#A}2)8bEM=]3jzq }_(YV&=ɐr; 4O]ZԏIX([*eD,)p8d#6sKz|g;}*9R셮uP/IGa[ߓҮ8.\*х!џV`9ċp_е&Yߠle"'AIfzd(UzF(~e$j9idnJ2KNMR` |P-P&ZT)q4I6GiӖ|51}WD)z)tܢ-ZU*ETZGޠ#:/(B3h)Yf.`b* Kǜb=^okqHyGXW! Ckuh&RR74qӹ%DK19RqvŘ6پ?JJa=X z+ $$w 6uNJ1'ٌ9UſO%v(́h][lf=/|Ǿ:ɠ\^'%!1ȉHF2fc5k^.q`EJ7]0mSNmޏ![ XDۆFlJlXH׀v5k</qhDxr70i.{1ePύ@6-g`؞OZg,x^=Ri>V'ʐJg#0z)DC9/;6MYc!9n| jGڸٞNW _HOr}\ݳ9NNJKug9:IW>&8(L`K\1sO& Su0(%#ykz5N Trw""$ vb$;4.Y5ɵ @8jHv@mÓ~ŏ( Osxh6t{AnHBXv~DzL;uAfHS"\9]':934Zz0ZTLA AFK%e1daT9OK~C &[zUgL A>WU<^IآP,'2} )1_ `ұ2^ [Z=e&wfAW:s`LhJ/\(e-/їmk讓uoF30X}Z*{3bحa ]޷?f_ҿ4MV|?ƌQxT/%btY<7N@ 3|f%1yYjd Yn_)ݏEA"H1v'! ݕ [ؚۡ JP*C̑!m -}E![~ $ԙ 7vZx {x Qwp ]ϭٙ1Ȯ&a^m+}aa=PW|@z8AZ)1\J0x pXRC\x _$3{L4V2p4&&=t`eEp_0' :2B ̌˃7 Y?пHf1MLKX).<ӇYMWttJuD׮vs7Ii+bF&=8ځ2 'ΐtUJIENDB`PKhryN settings.xmlZ[s:~?"3)\Z!\&l07^@,y$C~}e.= i}jo''S3z? Py^~I\犍F؅*OHrZ 9-1$(Q(IeK ZHr(>Dgb1]OuT/c?Kad]?-k'+!_zXo|"X~b ~XkMQZӶ{; m=(Tje*䧀`$AcONA./oO~yQG)h)-(}$SHL@+)Ic 9Hido! VC.o3-56䳽u8~fT"b{L?ȁKf!ZCi^җgoOan":NPO0);5UMׁQ+LJo: yȘU0t j#n.%-xh {݁~քE 7]D!x= ^fA#¢;#w5BD$my2<% /Ⱦ7yaB*\qO_>ڤcJ#}YB~ ~ɬ1j7 /QpyV(\이sh=ɢ& OUCXI!k; 6c|*$ o Y5D{zǯ&( DB¦UAV{Z\1 q%Vy]?mo-1BS,O |ޘaaU2Vgg:~rAQlM?QJhf-2&F(œ*. "l=*a" wp+Cm)K NGUDC#ȼ' ?ʼn+2ܬ+$)si=ǽ&qo^K*{j0 >j1OOY~h*_m,p%xW:OBaϫ~QﺎŰmW.5}Wm>볪89A~yNEw77oNa6u}ߦ[]q?; 0GE5 ç`<zŗ=|vJ*֚g5s5j_ͦ)󇧋^Nv+wv rktbWijz^luu~Ujޠ"I)[G]K}I@cd56lq{mLXX'!\fB^_1w*=Fw̙,ΪgOjg3UqCdbpxS{{NeC%sw9;r$/`ܬun`I"]w3*;TN.%ZEus$7x%PKnvM$PKhryN manifest.rdf͓n0'KyP9ǏlcQ-ˏT66uPTg) ʥn'G(-|i|ߝvͦw([vd J#FT]3+e]la1U;jwW>'!9k{h>[UaWĔ(_Kiv=,SlYP*}S*}3F*e}[^|ܾٲc2q֎FPEPZwc7'o1U7NV7eDvx=k(AP>R"!/ ʞo+l}erBG^2L,BL]]H0 yWK|J7tWuL3*r3•Xy xՁm=͇I7'$_ghZеcf ~t1#YAAq[4G=-Á'i4n(UlX}ُr Ssq(SĶ7H1wAk?-у2bb? m|.pߴO,/xnq3hwRZv7Cj[~Ilq ]B? F:1R9^*z ;|ѹi6@Ӱbud =y>`%]c^-ֻRA*Ԃx>h|b(A?X FmQ{w-0|ւN Oss;CzVSxN l;s V6ukٰk6̈M ۰3ҳaԅMuzj6lt ب6`Zg0΂F7G8H<\a\qg> va>[.,S,KУ@$%.t-zsMNS9p띁Vn%\M*60fϵ莭D\8KŦ&b?j!Joܩ 60҆:8JBᶙ('%$K" j+J44?U$tQޭ@v5DoN#uWfsWnF,6dN*8Ö+qeyUG# _#AǛoFC !("KG蚉OBiOjʜzuPA/{f7Ԏ6($|{iPkQQOLT ̺wǾ.WI+0h N"jUy2ӊ9_*Gߴ֤)Uk;k%֫ӕ#z]&UK)C%L5*Ŧ%Ы>}8-r5ꖧ1 bXu4Rv<5+J6V~k<n;ۂ95k #[a?fZV‘a_$X0 aOpa~qLw6Qew(^%43@_'X\,gQvklBH_=n{yp 7ǢK:j'!YQAaԉ+?i:Ah2;꤄)MqfxqhF[6]Lo>t^HJL M(Z2Q,~ _^Fg"EX?acKo`uG]qsR$jGᵹZYK,95Yigp@HA$Z4 Mtx󏗯v$žumޟ)'fYv̅,wmY,8F Oq==#]bc"u1)T\|̴pU)jqZWGC%![KVeCJY=[q 33f{*x: 씑uJL+'VNe]y  ݟRU(- 5 +^{ץ^,/WNt=j9jj2i_7~aI_ޜM)u)U* ˩ JJ匩Y-bu67ʲ4Aˇ KJ>_ޣܯm;(<%kupm۹~DA"y^Ӏ>S絞_eߗB߯LeKvDZ?1N kϔxbʛpۆ,1)\&,ʕܧcBI\ 3KePԞ>և'x \Q#Ɵ# ~tPK'.kvDPKhryNmeta.xml͎0} 0R5#5}5vf} pν\V;E,(+ҶڢOxw{yrz\/j[1mQXV–5K`gXb (9Nቇ˲3ƌ -a!#3;4R[|*=EdzQg9įNQpvE> 'po",Ôc񽈳0NymrrÑ+)LiP?d-M)/?@[75f *}%9'8hV`\SwOvMO`쏍JkzFa~ aԫ-EɎ%e!O$bՌKn}_Z˃,]g};h%h0uH$/PK'\sPKhryN EODD5Pictures/10000201000004B00000013D3BD31C4849D8952D.pngPNG  IHDR=7n pHYs6IDATx|$]&G$M9缻;; cc>;q#8mN9MFijtWKUUGZ;vu~@K""x[.{#kۦ䕿νm_v1`bg oJD3n6g׿`Ҡ6IDg~"53s&qn$""ҏ'E>Ԕ7N]X> LYwID?LY guK.%:A}?50]jD?xcBg1pq%~,XceUWS۔]Whyx'jnWNx5K"##K Nxj煈,K N({:u% +e8҈@yhߥO}f$""aAC|X/o%u1"❂bࡏmrS:`ѓ~{\CWEDXvh`ǀ7QKw~DDf``oq;jD|sbw65 .dPhj*J.WZfȧa~DD x78vID2kXcڝ.5h:UD$K Vk]J+_dk] c`P3)W$"/$5b"0!+니dB_n]FLھyg H"8zA5ԀKD7b20{ߥV).ˆH 5Pc5l("3I^;:M"Hj6'FDD `Y lw8}ם~""` SsyN Xw)ǀۀ;~DDD<6X\^e׀/(ROD$ bM[:p~ߥ0cI~hmנ]/I݄~Fxr10XT0x[4HqfG6zH=HE$5)Qp.dQ1pX#} x M5j$ 髀qVxuʊFKJD,"ɛY5y8 }Gv[|ӠUIiZnp/m~FD$`{u*!M0P_D$ (Ĺs9Idҷ2u wID$9Fs6Hb)7m$ͳ~DDD<>$ztH<+9~DDO1'գ bH WPuacYK:CD$ (խxׁJj$/~ 1~m0O|x:GD{Ѩ~$X"ml%4) Cw4H{M[|?FDY }XJ]vet 1ģMZ ;Zj,0r|K""հ o}_D s&c%~DDDҠV4&u:\a> wIDd9xXMZ),"w>w)+YuA[NR 5$uz҈ e`|K""`.'~xM t\}5`hKl\5i p~%)r a ,~ 0]DeRt·bЮ"s-zRO_pAkMR7#&;A,&uWC7L]H0^ 6۾mС"'= ]p79VK""")ȼ/fc :4@(FL6xc@a%.Z=nЩ6Jd:Xߥ\`3-3EDBFDr`o#cR} 4`o:'~W :F 90$nt`}7.$ID0jʁ.dRnL\wIDDsF1ubRKd >ROŽ/EDBDD$_Vcx'yHXXZx–V d;ZRyng?|/EDBdo|U]SjDD&x@[pe"lT I '*> }hwiDD$A `%k `]? w66`'4)"VX <{K K˞n~tbX^}7_TD(wIDD-MV>d%<v / $""_M҈H$J]] 2mz!y ,%&m/$""W6x3wE" BKgUkSNnVrb4`}NED$4&u_k@e|~>x ^IC(W_: \UX6y(|9غ9~N@NDD|ViOO|3000eߥ y?X)4hW{%"9 ߖ;l5[wW I#]Xgh/gҜ >""`9m7M_31QɬQSY]\? \>{c"8`ҏr;)<e|GO9O۾m%Q #;rk#{jDCN%]u:ׁ~ a! x `O/1!gC P"nɦ9W,xhkv>+L; RQ'yl7X+L_dOm5hQ]("#[uuqdG> wIDd:ԙvw :5pɔ[y'.ux{[hR6W!k-zA?]p5׀{Խ'&mS@i%I]G;^E}ˠL]NDc0nbg /5e hsb.Nnj{Z7N;Ӕey@~}[6c(%" `_n9'>@QߥIM~7YK~& 3V 8pb%?4Ej0aߥX3VT1j5Z$[T$?=ѻjS/X^} nY%"iscӦ_*Ke KVGߥ `՟ǪE[O|(,4)t7{y pW1i;i7W3x)4 G/\UUXg6lσ/P}nk#: Z$p<NKE%bbۿcE~&5gA8I'.$[2l\DW sD(s3b Z.EjO\[f{o6z^ p-K " `ٝVGz2ͳĭ?ql@3 sG;y;-"*85cJ8mߥָ937+%`FW_qQ/5_>- -}#_z`hcz7+. /Ž{bP6ҤnR`5LZ ȰcL̴`?4ޚ *7&Eل +k-Ñׁ%-G*Xo;f ^Ħ&R@1Xę-l0l+p|%IͰq|JjZM_Cl`hiտ1xFN4ޚ WW[ Dr;$3~5W17)a{鑹sz%0{cߥb`*_5xן]Z_ڏ08c.I#p]{ ^kpוnUt3u0aߥH OAply`(K<&s?*Pۓ+)*gH,qIo~&5EG?/@cgm]tLDD2NzF/.|+̀#{{HuV_osD{lotVŜI7f0:uߪKD`#';{Êo6 ~RIET]klKVo0 pzX=cu Ks~^XH V'fNx1X.Z7duwpkɫ'8?As&P[w)Dd QG xùJ>ſ2hF'LwRK[""~as-R]oz VJҕ'67.E.vj`\K髀R [0o@}ߥ$Q I'.MFN}[M [jyDñ@G[?dQ9c/Ms}'/F((6v0lm@P%'>gh檼Ug=>TsufS#$"AڿQ΅5qߥI EW+a'sqVLھ@ch nC}g%Ȫ )55Y$qs(KmKdK.Ia|ڸٙ)R"2(妩.-lC]pgs@50t ۿ T*CLg Y~x Ztܠ!sqySp௾f<$V(?iYc8imΜ"2(OU`뷝YA~&5,nT\ߎ ү80bR}O E$M|×]OZwi5eIM_3hkR,xߥH W~"9O9yf }r3V7~}ߌXO-(Hx݊/<'&LIW@/{hmdաYah]ܩoDhS$p -g K˗=\<`qd4d4'wG|?0uyx zIIE$.`?TWO] JVkSۿk0l0rߥI Ou0g/Zcg;_Mhě ^H^Vw3x$ȧ7hpn?c iz/'Rb 7?b}/?10Nn`L0ӑ%"2Pٝ69)EZ!ée|2I[*]qKq΁bx[$_{k!Jhq;S&Ww)2Vt%Iǝduϑi#z`ǿXo9#QQSABu |8H`Ϗ0o6joo~j*TKf@8!c=ORGѝotVEt)VfHi>^k[x;Kc" `|Oo51 XB8б $W*|K{:8bvDDuF_X<=lތ $K5%s&-~]\?.Ef{Imya3o=pr3{f0> T"2)Ym&uҤn!{#oNup@vlc`GDNRlg"`pO@Dx7dҐEL#7`tu]}':coO }P [> /]6oZ[:k/"@t68G?NFq[ O9?;zC VMuV u%m>M_3xr0q>Bz89ff`۷_Q,(j0z9w)ljNR.Id'fLݩw_I,/c0bbߵT_3~ʽ?hwv`wg.?#~*⊋ys&NZzߥHMgֿ \u~`BS`\q%~iΛ ꫽*K!"X^v0x7B`ރQ nNO\: L`ze%mfo}߇ >[]$`~fP<1c iFluf;4ʜW07Y+"!WԝGN 8zbE),6X^KV`O.Ecï ŽNo|Kj#?/]""2I3y 0DB`Rwܢ""ayrW|$/n8 اW9g.EjZ?kocfNcsqŷ.Jx_ڴJDAL` >o~f`rxP ц[m TmJGiw)=b]qs"Kc9 ~g~ ̺./(iL >?B/D[74Ti"",WcYևwӁ' b5eDr +O._\;1#`{?]@{dT_V[|j9/#8حu[[,£0dߥ &mED|pmg#̮ET\P2L\d0tt0kmFr}t΋*xE_&p^+ 6v2 _6xOֵP#+"&C>ѯU'z( şAu3٬`*og;M䥪prC$VjDf0j 0wc pj+kwIDD:;"R`qOWlSXbphUX/Q_ k-ɍt ~O,aq nK!"3۾c0l<0nߥ &&mmZH0p 1(*f45 /A[ڞl2c50fߥHM aKNo& rKz=F hu]DBB ii`??f$dWo}źFj`ED9M_sNYwi5ag7贷,1hgù⽽9y#ao&}? )hZ5<>PnƆo|zM+ J[i주 lPsM HP6F [Is1X|IU_Ŕ!kio[UD$\ " &jµͧw^qlcbW?l:x%X#`OVK];h]<] ,|;+{-4c8r$ObR\&uѾcf]d)տ5xρ~;\Y }SA2`\}R~2>b]_џsPVXO/W2KӿT4שq g6'f|`G&v!:n>S~"] gG˾#·6UF?oSXAw_G>9pYm*/q k#%~/ڰB`' ֥ֈVAyʴ M״*Z"8@n[𡙯羀w.]:ZCG.H ;׭jj$`΃~"5 U7tM?:uʺV(8q:ҢXa eGp,{@GWl7窥P2x⳰O^+hrr ?$)0@u a[ |ׁo!7|E+ ?¤f[e;N%""}vO Jτ$xN;eQӀ]԰ot-ʠY3_euVy.7 CK㍶f`@/DD\gG;Ě.Xcf} x j胅Xng~$yLpbP[wIUxκEF4=Zox |]]Z}%"A,܉NRw.6.nNk dU>I?lAs}}irV]NnNW> <,0~\v{:? 45eS%+"Xa L^wiՋb#XX,y( 0n4x)' 7pE[^\7vdHoa'q.{7|FD$BK\#]?%~^N;j8ED$[6X&4&3FDSC~<)zԋџ41 5hNKb38?8}2)H(mEoρ5rr.G[)DD&#{Ҫנ!>q-(}dt_κ#`uҿX_U``[G}#itS]\3?̭+ ?WD$Dd:p <]W;-XjP8Xl8ҿ<w)Rse~3]tn۟09q~Vk"2p(["=a_Ji?I\nsa?`SGJKNM$+Ϥp5'SR+[5TEG߾lV-~8A,7Rfq3=0lߥHCS~BB jZyMD(nxw܂};w*4qd׌}֤ bɽ2XX8NV ^p>`-O\a"F `e5ٝ#&+;&#=&m\//;}܇㛼}] Sk୯wi/\Y>AK+IpOKG!r3Ϣ+5عF9D$LHxGM6o}EIED$n/<{@Gj$\= w)Rsz;PuRH@մ;y{ ïf=DD<րb"8`T`3lsڡHr(M_7xwA~F3]4ʾ&$I/ojgx'6~PPkᑹ;`{G^NnQv_gwFP0[=K#"bݙKi'67.Цk~-CMC~)""&uqֵc:1ƀ@Q pGӵ$ L]w)RX }C~r||SF[W~o6SkgT""n:AA xxoxCu.ȍQ}7˯fQ)ygBZD$ȸzj~3%%m4?6(([M#.Uo> ~͠VX;Q\2MdCLo=%I Mu~B|><>빧$n\~`W&E$Guyb9qn[_ZԨHp5DV~F5>`THǪ+꫁kϭECř)2?dۯd ]W `/\<w_o/7sY]']IU~w!2U2T6?^;.Nbq7'LH{Q/8IgB*b{u~FR1!`$K=~BY{;kyFIu՗Y^n$""1{u;C&eco*in:o?O~y%X =.I pQ}d+_@}.RJ^Nݿ"( `I;o̍lHHʏl*g $Z0lߥH~B 7 l45]ru%yA-\*.$""PKU\اT^졈W_o#$@V4`s@$Iݘ.`ρfܵ~ PSW:uVǕn1lYE$)%ݥKDDz"+DDDdj/akC@$@Cߥ*@K쬬\\\ ܺTTCax8%ÁEO;k/!߁X""""nR5`ߥ>s5bV_S[l)tu[UJzs5Ί:'pUS 44l=xb .M= T]$"2(%"""Ͼ瀜 |5;2XX?39L|唗+f$+ ,~ cDDX""""0Ѯ;Gte+1.EjjҫFDIh0iP#o*.]@MgG[iAJW~]ρFg ]>Էl:RD(%"""җ6~YMY#]ܩw)$[p硗 .u͌&p%B,D6E S`lKN+w)RL~(z)ީ $ceg0hs!"H"x ~&d"s w)$Di~$ySW]IF}e~?4QT ,RDv2U]]ˬՉ"i `$] 4,|<K!kYLZL~.$"IŭsNNgY]$>w)R O&T{# V;$"'Y]Y~ܠ9d0QKDDD$UWFW ,P0W_-~ bQyK!O`8W*2TQKDDD$wGPTbǭUߥ #EO]tu{~XZU"w2coa~.Mr"9+ ZBVx DDDDu|c2wi#c]bypߥF`z`XK3髝 " `x@a =@Nߥ ?w)Rj?5}_*,I4ׅ" `xD_ Op鱜\on+Gk(80b%I)W.d_jo)rK <5~ *.Y]T_m;w.Ebn]]@~H7U޼s\;<'c~B;%.Ijk<6ݩ?cru~7PwR$;VSmDE|ޢ/(+]KR$-3;.:#8RͳP%= V?tߥw)-""""""""h `H)%""""""""X""""""""h `H)%""""""""X""""""""h `H)%""""""""X""""""""h `H)%""""""""X""""""""h `H)%""""""""X""""""""h `H)%""""""""X""""""""h `H)%""""""""X""""""""h `H)%""""""""X""""""""h `H)%""""""""X""""""""h `H)%""""""""X""""""""h `ͰaPRRB䠣mmmO{{ֿ[]f_ `/Fm̝ &"//\11?]vK.&*,,4%%%S__@Y3|pP_@3fI'N>tw 8h c;>{Vy D[Ϝ߷17̙kƍoBssy1cuMUw1Yg{RKDDDUNNYt͛WQɓ`5+6m܀>O>mzv*ojԙN%%(~AWgtb%^[[+ZZZ"o@^2e=S'OS̘9/w.7:jkk{ f?s1?~dr4s_сɀ7juacb]ݺug>[FߓIȻƭxTWW[UV[6[LHXt,\jd\(9ޟ`$Č7\1终L޳vYd44+jk 7ox!8+7,|0H=ӧOw--8sb@$:uZg?uOIΈ#{6'vl߆k8dh=m~}aP?qO\qǕUh K, SLƿ"\yV'!Rq떙l=Ѹ?XL$V貴}P""""]nAd'ݾ}9y[U]UܨqzʗMkb {}mm+S;ssPPX"£d @YTlOkVp455<{N#w[EDd`{c7n^[`;("""5dPs`&׮^7n$܋Gt/Z6:qn\F׏TnOaau OcRw߅ q' u›os(=c=$]f~~9"6q-ODDDiqW4hPW/G}DDD$m# fh A>Α_hen\{XVfJK':/ܳX4v8_GdјAu""""7~TWWjJ$"""֭=gKQ2}'B3O%}pnn/(@A~4,,, n#''վ.uuvB}2'}vMrAoС4h4z464Zk.q㑓guunׄ3ź h>o2pfĺﹹyO:g}cսΥ{JsuҰa-ڗ.]I{L}3Sx)"uO[Jœn-{ ۄvSgOXu_c9\=>x`˷U6kim)wsK3}v?9&]clGz2Yuﻫ+}öqĈ8ǎ6עzo7Yϔךu 3J3Po)&q!(>_ltvZu]G^6Zu]OuLm}9쇲OgNn׳ٺw'Pmy_?޵xmy-9<'.`::a-=l!mKXl(}u)*dgX\I`/k9w`Jzxm\#Op>z ߓj. > rh]>y(7Ol}V9xYtuUFb>sO[ٝn;x@\zVd_\Kn:^l?us][cox3^?XG2*jYsR oN.~,G;nMnY!Ļ [mm-ʯ]3W\JOޏv09~ܾ:i$;ۉ=kWͅ&]VV̫W= qYHɪOY}g $?Mz.s,Ha?ֵAGcEv6՟5.^Pep`}njR{amҭ.n/هe0eP {updZK_tJի'zw.E;s՟>5h7wM6;}u;g2u֘1cN-=Ym?^^n.]h[S͞=L'J٦nݺŤ:688Aoizq2&z%y2dnl{}'wMc W11ŋ<)kwz}65F` u u)S=q<$'q'L<ٮM0s n;±5ʱnO vؖT%S.Xv,ZcS#soj"iع8GEJѠ" j8ݪP+>U|ZQF%ac[&͟gԩ&4`${Άd5f1sP&2Xt24:X`y+Wp>Üim5d=͉&aƌvТ'~f3k|d25<}`eQKoX&4zhO/hu?SagNN-Ȭ38,v~'LOq7vLX*իWЕfŪ9{R{x<0ޞM;nާF`=g}=SޟH:Q5w $|ޣ;b_n[{-"Xٷw]u' |i`pBIu3%w;Db5),; &zA2e[7˳n QGNL>&>f N DŒŋ1e괤TGP8r8a9fX3eT{}ѳ.4i2nݺeM|zh}o$La=g.XD`cFPO~d˭*^kĀ‚sטmx^㸌NqaA2חc?sp%p[QQ.9ʙddX7̛oߋһkMu5?j\jq_gRG8+Ϳ'8ʶ9v &Lhدc}ݏ\yvL?|ǏSi2cvqYfہ6f5߿oZcq<8m.{/0r/:E í3P[Wg,>l@s1WX65V9kƎpJ&ʿMkM6͞!ؼysSs s^4|2 ɓ'Lз1p~⪎#Gv&MvԸUlX `Yj4ΘB&\sؿ/>m87w|{uD$V۫&茺= #>[اzތDaj9kVҁLcyږֻ[^ˆ(;kn?  []}Y}bVuW=cVw._R߉-֭[i zket2{@vohgYct%lǹ*};~%%~d}:@]ƌ/VsWpekkgo"~| {.b谡XCv1)=N~-7l=ٷ,_ҵ`YgZ̨w_scyãe b+V^cWќ|=0- b+M&Lg&x~%NM=]j(e˽z9eW&{p(+Jts>WsjZX-EgJApWx=);A;gf,= w.NɬLJ'67|48BSz2wsuWuO ,N-hnVpKe 90ѕ)9Xb߉9XϜ>YE'c~Ֆ~(IzXM"ׅ.((oJk[o +ҹ{'Y3gͪիufsͮ3,I1Dy~3?sLNvsoc%V<0UE ^u!}DvF83NJ o57n$ݍb\p$9!L֭ke0ٵ/vEF-_ qK гgz~&Na߇عlһwtRޮHawE~G$Ns7 TK{ vR`b"cTq֯p-?xÉI]8 q1cUO\mtt[%8М;w=13M p9;5?uVcr?ȱ"z>Ü%l=}j8=a<_匫CXVg9znYgݟh}.ޗskЄ_s ܿ%v1nItj)/NAm<`nߘK(^;2oʊ+F2qwONͮ5a]Ƕn"A,[Li'/LN"Nyq#,'tv?oN'55#|˖/Ǧoyr"H#1WGjmÆdLkk'N_z=1q' , ;܉b.3}+⅌df$W[';=gv6P'qj9m-GŻI{bG|Ç b"x-tt gf' ~d[@7w>Oځ`#{ԩ#ѣb~=r+F{Sϝ=cϒΜ5>!z&Oy{ިw?YXLcCɓ+ϢԲcXd;'kPwGqF?OqbMg\^58u] j͜0cƌ8(˗Rw^qn\ľ 'ܹsLnA"8ʜ`w<'Z9,ѕ,#/_5w 'S96Lb,X'#g_$D+^S-^wgL*x_x nDoo0e\҈y( )mO`Y}s {)3;A,{6lЗf̜S+={v'=<~(;D}aÛoZ{զǼbnb:5h~&;sTre/׎gxq[}r&ݵs' ]g0]f05`M`=~SI៷#IeVƚ1cIMVr`{$>E2^84O>\UH HN8G%uL:x3_yڹIb['81WL0Ӱa WFcjСìlaq:x0.-*Gb`"N%ŌE~g>{x3ĺZU&6g?cׯw.hu^c_iUk[9yvGc!lK=(pӞoΊvƎsYm$+Il mKJbV۰>}= \IUtq;阨syܞݻpҥׯG>d8mv,9qEw"S)UMϰ:dhR+t 'sl8?6G^ Μ9f…azʟ:U^ϠK{w nݲ3t)]s{Up+q.Zk+v{8epȭs]; \>;\$61'JYq""rܺu3rAzGفWdnk\x=6r :L{sq5m4m®,FQ wV2W)eKrZ=S1u! a #6_+OH+hܜ?wpX6|^r~ac[/| r\DLƁ/s${L/CӓYqGZo*,fl*gmU&{tpփ3Ne3^wgΜWGx7OanP:u°HzBAZgDx g_{iv횧'I㊀+/٫P91 ,AɵW~0qJZ&M%xS/0\ 87~,pV\s v<1΂l򔩮}$:rP`Wp Zw z&`Nr xJ)M n_\z$f#֘,]so2u T?o+@c<^8̝g܀^cgHވ-H}d10!?EU55Oǻ['OK&O4JJh\]S\8dP{v<#J@ 鎍Zd$38n[<~1 ࢝H0j% d,u3uڽ?yLX'I`FGɥtdrս4 D?g{IѼ;lXĭ{ڋ/0rp-!׮]c>ϒ8nmkmkYnd &>2j4sٓNmm1=ϼL80ɓ'##&!'SL}tѩ)&N*GјG'qO0hS /߭O;:ӣ4i~&Tj@GΉĭf\owyܼ[Hޠ9}^~̶[46ɫt/Ys1oWwi5V\mGO'./:EcnjW43Py.:ĉVf'+7si;},6mxwYpWq˿Sh "滉`!pR E?9rĦ#ᤂ9'+9(j XALwZA!qQAdcdիWLt jdkyqOd{I|nIoO&D/=k[)c*ֽ9.n!!a ``v9YؿqX3 #6шKiFxSI:>X%/0P;zx*⬺JWĀ$|wnL}\tO\5tUN)46d𲘶tWtOj `10QdoC@ ̱B9v8w+@-e``Ntd옱1c$e N.sV7r+%8^gUQC'J{Iw0dX8ÙXtWWcMMn o-7 s~h8(p(vʉ̖ BlCr\ƺLm,3x^^vV"uwyy24y 5Θ}̞=9:m Jk(NcSɃIJ!?qR[@ M;LJ3 *dwOFxp]lŔN5Os[䥉}Kpzӎ\:/G5UU ܂^'%tD'?Dq[==N}(1_I|.,6 g$x7Jq2:;3\ÀWq ;Vg3'6w >2g>'وDN `6zy&O{=X6\a9e %m<^~lu^t `%pvm;haÆ!:PK2`y\Nf_a[NE&O}nkV?#˿j8yDR9zyrfF OTSg_1'Om¯-?NCt _г-o 7 *vàՌ0u4;ć2SÀ^ee) =v"긌9*m=Jqu̼ύ7>DXDqՏ)$n`}B|o'rtO| ;w6%Ϙ:Ѯ-9;:bPڹg=}8 ? [ ю8ܜJ ZM8ɮƍWP9@I`Ms6$CRzɧ=oY-vq&nDgU+<|x?&9ݍfDyD7dcƎN|<}~*ɓs4 dZu=U^^Y`5, ?؛`d]=*birpyvGi 3FCnML١M &m=J/SX rUsj)懜3g=ܹ\圕-cR%wOE⬪s:v8x+o`_dU I^I> aD< 9rD\'XGU;L u,H5g(!qF1Vxk j E!%P83vll+8"?0{1`Kw{ {8ʑJ[[}B$sS]$T̓}Gkq^qIIQ>oՍxn`"^ਥŵvKLPIlgaѢXxIZmLjc/P9Wyc1LKa&CS `ݹSg/`1I"g#ʜ4cݘ\ڇz ^1ﵾ4ىJvNMvr/$0k\Af=%%kjbMnU^M5~;z4nʜ2AdAu۷oψOϺD>'N7&LI+1k,\xt^gb䀐pii}S1fظ3g$|H:TU'y+p8ٮ'Λo'-0d5c1ZU3~=iz=j"=0,}q\fALnq={R w81.''\T2xB¯g7n`ZAq4JSCC=.lO2} 1[b֬v7vv1\| P%94G .UWWzNcAm}ڍv`g *Eܪn2#S־Gˡj髮#Gbʘ!F79vsթ]&?~Xf%;;vh\5Ac=^\q5qk?vr] `  piTuvNό}H?N%]5po=+dzJk[k '#JMM/s"'D2_ w ~{OOo['IĶwҥ̡l;,?tM̞3'qk x tԨQnH/Ho>\x/A$fv8mV I*nBt%,⭌g?{+a%UYW._v-QRN;gt*z9z^^3L:3cw #,X7HMUUnɜ[_),*Onii hXod>q7]eoOTYgBq5Ȏp@][ M=l#xǏTAɴx'KV;/ɓ >y:pAށƘؿϬј|Ĝ]p!kݚНy궽43zwmS W*\So::d-lO~?oڥUvɃFe1ڑ\s g6{p0]q"r{b+ϝelzꙔNy$q9{[~V6-[7#؟gDλUCѓEeuKۄWA>zyyv)HӸBmR+,t}x_/7;X[lඒR$9r-ueد5}M&6F7eҽ%bK=mݺJVdMM&|XLY'6q`GN0Z_"1`-'fjݺǝ;w" pu$:u *)\CdqU52 w~)i}l|I֜xg*XqNZ sFwjLq q҃+Swet3< b 9;^o!ms'˯]R$YT"^|"&MiӦ{y͛D𦺪*np[8 ^fp[aʊDgr2f+pacoeϱ.OZаr9=eKwӨ1r=k^Nm\Y8hfAV"Fxɞ3\3" `\:xb2492,&e} 'ʊ7,q6^ VTtKo氝iE.x<sVW[k0aׁ$}&mK$x㭊S%P;9ijl2krĄA XѫvJɱծT2w&N|*)|>ՇI`E2CF}AdRlۺ%n;wSSSD8̭Fn,١ܓ{!qd8Y92:`v+çtTUW3p+3N77$i`Eru3}pՙ5[8}۷dKmcU>^N3;l}Љ`'aؕc[;4q~A3Ζtri+WT%xQQa8N !eLz9О5{}b5Sq6} x1'[ |m *Nj)N=HѻY34JX cC;= 娩2#.e@>}~nVt˱VAd?ʄz~8)ee#Luu0"=zԬ^&`[>ܞys+̞qㆣ16Y[S^7o`I1>cg/]J+ SH,M;^jƥDH/(0֠Ec]Nr2[1n+xj9uOE 1skD/U,g6<%SW-L< 5;2Q9 F3S͎l]I -->c}g %󆫭&j;o>>O`瓳ׂuĉ&SxI Pg0L՘+2-e0ȕ嵛V?+{>utN&F5v/XǸ:$oKO:4 5|wUU bL ^^h1>H*uz^0zXn35ɼm\Tif=l4}35j5p퉕:ѝ%TYrw2KֽV=̓~v13sy퓿#UI@0gsr[t˳|v̒sUVy?~KEkopfP+3e?籹^x[a:7\vN*ǫr&Loqx3d!7v9#'O|/[k7k6:*m^|Xr(̷nNr.ZSyXjvt=v}v՘|IZ[Z"55&z+ bn*Audq~í3>K<)m1+IVc A53g b--R ͙k\=4&  F3z`sT`OL=Kt̝woԂ+JK>#]:de\'d~܏.p5Y uۃ\{+nl}8*.*W ,[Mj֐S̜9JFohN3AdsKV ;ag喛V'¶ٳgcҤ)W^A816B}^qqc u_-}\Xzڹ\^29.YtYtb3H ,N ͛o_T<ɒ' sI@e#Y)(Լe:w9k>S$}src &yߢWͧޞ{7~}uO\cvSQq+)S'ǦXH۪ ^`h}!aO0M F?mt\vtz2^bբ-ZNw Opɪѧ]]03N N,ވr ݭ1=[qgtDŽ3\zlU,2<8H20WP_ &bk9s\//g`%Vl'M˷/bWW;'D -gVgCo6 < =޺xm:6ݯt2~{W`{(:kz}طwtN td)jȸaBd*A;!3fδ-L{N4#F 'ug".\8ojk{~@<4{nfpwf18yse{WV/^6IRwSgSV]">XȣDs2sY2 hw$8l;tAAs&ngNR]eG󻊷{y+9|Y,{{>nS}O<,u#Sl8Q9޶9s1gҫle-y5'N[*ᄠ䔳.SGy wP]Uz*XXyb6OG:qرvۓ@<P6c_`O칳Nl_du81Y`oIb֧=A)!fnS9DSocǎ#=?a+/[gÈܹs2?gyY.Ysk43:}OrZ0Hz{g'3]e^;;ZD__^TAmwY++ +KwF/^8o8r<ՋAUx657ݲW8Y[XJJ󏾽k"B6-&}gֶV\iq)n,uМr>}L4'1kl;j8aXYee"w΀duoֿ3%=/o.LNm79sP5O<_g WD>˹pb;صkW>a3ӢAPINP`Gy6pM(;n|<X?Ј{=!~}?3uDW3qQg}7D VZmoG9׸zYF=fL^ღll) rw…A"^eߵ?{!AA 3^㵨Ɔ7Hi T|F{u"Pj~'T=Svs]عc[[Zg)2dǫ ߣsj]^'j߾=8wxݪ嶂8 1&3[Z[6+ŝ:r.^;'U&88 gϙkל&H!\@Etq z1Y:P[XQP܎ @1?)jozx}? (pp@"._9Vgh 0ipth ex;[g:-J}^R3Ex{u,8)a4+.A=gϝ1˗t *1͟$zr&Lo=N0`}]֛\NMUw^h ?x v~V;Ԝ>A{a ^WH޲&g4Dq5ޞݻGYmݍް`/l7=Zfc}bPr)Φ$J'^yj#(ڵϠǏ{8AA)s2XوS'oc~qI߸rîyݝ t45eu*tegΜSD8;|\mf{%)fr5\7o4Leu$7/A8epGw1}v'nܸ)S%1Nq5C g~/Y}d8^Z!6(W._;ȯX^3ў{>aF=;ĠgHTR {`z֭[ O]v L}R̙<},Aļ+ 1HtTWG6ohx ;B9AΝϴہHDi wQ:w6g·lkX?TUݎss{ r=gβ3ȢKx; nټp!ܚu2ydOXgGoʽ3±\-zOXĀ 2X|3N>?U<ɲXIv⪯[6S33ҹ.\ֆ7̂0cF\ɗXu^ߒ}w`s{bޓ7n0)8he.dg^%sX]nA a[lcx`Nϋ7=;_$rWUs6XnZ 2E?X[6o4͜9b ܹSr|؁iuv޵}Lŭ {;a}ٸ>R}_q3\sjL[!H&Sa6gG23D^k愫SKgLW25(z:]`Ԑ.7ﻳb}jj gbx>s[;`^ !Y'u'#vjļ%ɞhiKLc^gq}Ɔ_˪ Wmaz}1gc[}x { POuhj#˕Ѭvۺ߲9|x/A~̏s3!AeþjkbdN :(/Y0ȁgɮBgwٮ;jIO Nw'm߾0?/^N$a֖Vڒw''~eשκoH7pg`ת[>,TޮWGsIH^zH?4}#O6su s5շ [߳ ݇ôX}t8e=˰>/ue!`}MЭ{ฌĘglv4ܳstwLgZg?GnWVӧId/V c2vvȹrum`)AӹeNw:zО}{$pSؿ$is*g>%d @yY;VGNb2A+>do7֟,bj /C)d']|١=8H_xBΆϿ uJwN5oF6mZ${"ʾፘ߳JcHs݂ cW ;w0ZT4Ȱ.'mgnTʖ͛\e92 fpO;xp0R3A wZˎ[t}l:$1fŃJ.h܂6f-k >+\RAP&*v?;3LVV;9=[:}S'O[Y=ݫ;sasBc +rI&xosMIT,0peíÆ{g2*n͠N55vm쵏6řL3l36s&D8;p`?;jR'$ֵdߎЮ#nr;d4 rرcֵb_}mv;< lǎʼncë~ K/{\vPy昌sL{=☉דd=XpOŲ}*~M--wT*x#>tjxUK ĝ!u{}>O!M3N6=b%쇗u/>#wwLAh^?{pkt=UTT_=ۜd88z6Nweիn)Xdg7 =09~o`焍[C^_n7O93X6I5ԧ; ڵa 7_O=z>==R'E9kuwV[v|LwG{:4qwh:AtG%a:^aOy(uȋ)KI%Wxt`Ä7w0/MMn<7;/񴶶D**Z합~ ߗrA4ڇd]>N2Sg;czLߓvYM}[9TDD$ød1ۏ8wϞW=qtQ:*dw~DDDDDRH1Oըѣb~]^uf{q[ f4`LSKDD$úsDcnQݝ:D$"""""AH r?:Sn=r\DDDD/ `dOrAfr17TXDDDD$0c&ʬt(n7J.""""!H~ĈWaa)++}GG;DDDDDX"""܄=%ӧ@Ѡ؄uhm , 'DDD2:t=/.. wՕvk1f񒥈Db_zy92tKDDDD$ɰfTݾbi9r0eI*d/3UQQl^- """""RKDD$:w2u*rsso999;o>Lk׮͛MM#* ^cb„ 8q8ܹO(""""Y `[p;hI 8llCouN o1I˘ 1izv蒑A^(vpIGiʲ;K+uRn\|/P˓]_B+ oFcO|6nKנ'x@IK,?>9-&4R4M e<1y@Dʺ{HHZ-j[~#q`З衘 :%өd"zl2}ߗf)bX׋AuqldSfb!|.T$;VI/OaʷIENDB`PKhryNMETA-INF/manifest.xmlTˊ0%ۡI[pU2Y8ioj MB?i0&{sι熬6N&GNhUg(UFDt6٪cJpp$S-Qj愣uਯ6]t (Zj8#A5  XчsQCֳVҘn7I$ ۆ?^ẕӊ6.rqGF/7<{9g o}HQdÔ-Ôjn\|TˏzȿOg PKw]PKhryN styles.xml=ɒF c"nŲVVX4  Hpa*819qNW?/Ll@,L,$ݖ\|7>n[cBښnm?p9柾k]WL`27-*l\V<ݻxWze;]{_ :Gf*wo:Gk;4M_۸ @IPBb':jR`Uf6Ŕ!cXu`ږT8m '2۹JhM"Vq@'x\p\+*47K; Cߙn=a[ `(k[ܵ,׊ᥖs=<`f ՀWF;TXU'ǶP99i !r|=mkUklVkwIeefRO=ecy e&pMVqM4AP>9{1! !AY3&Pp,cEDr.J$gu ,R3q>HX9-z v kD t>M< ኄmZAl3gOa Ҵj:[IQ39,/k=y9j:-2ȖE)u3`bfxՙD:j:m^gS1@ʗ܃ /(@rl v)8f:FpwOlzzXgU \!@9uxrpp6kCBڱx l]<=]K>{K NSB=ݱx 쬱2gJG YJ~Q>:I jûWx ]NWWu)HTlGC]-JS& 4>Q4evC#Bsft 0b1141}5ljx}$q_h'ٹS="anfl7~4&[5{,3fYdI@c`,yWjHn^Dvu6w#25V1n[]vfwΘY,͜ITo+8370'*+9@!:=d-X+;Ï'_+n@f^gZ(Ǻ;e[ ǵ} (FUtB^Dmwf̬kpqgBi^ 91P؈  Cߙn1>W:)|y$POW I^k{M~sc0Gm\]G{<۸AquC@Ut t@W&=6%(? Jn]}?ֽwoP61$A$ƏQzhX >ҿrjmEhzY0Gn} nk)I읫Sb؀MF `1qsHpg6l^dQ`!OMX?m'~;DN#3hkyպׄ 1kC86&L1pt ?Y%2{**.|5W[bd"0\)v6_G/.--L K;w\f?GQDWԏ(hֺ5U6tOGLSO3L&@O`zvA^q'~tu>^“ \zYeRz/b=Z9G0Y#$DrcBcdņP<9EmL).].Fw` ^ q yU{4!NOEX^ךē18_MZ+( m<`xz6") .;RoQuZcb.M AAK}/څN zjAKf,!G Ux/r-VgAQhir6;BG5X-fS)ycZ&kw֥繡ɓuj3gj3:إwa=fp3ԊcJgdv^}7W꣼^^K3YQxA^q/MVYO_Z[Ye–"hJPȐW3%Ӆ | q(r!3Ō"N6d?p(Ӌ&<8L:)3 A Jₘ9.0 ]> J2%7&K^"kr,Eu=3wb=I.5S}RJ8H P{Q}D}a4)+ˤq'=͑RFӳ{`Nom7'P 0ҙj!lȢPb%L>< 6{A-bo-;$3EpQevI QE85vf?W٥= ,ӻ6H<_Ajz庵)[F,mpN$=)#%,Kkc YqIF~Ap}YPke8BT}Px`d#K7) rCy F aO>XLc'͡71FluLkĵVwБs ?6,B:[E/Y$Hst Vi?ʗHVwkϿxe&IOa$iʤQ>B:;%*dv&=/&9trfs̀g"Mάwձs2bQAά3 Ϭju72{'|;q۔oox$ѶH6F1>)Me9BH9v:VV\d'uP& PC",=iMrvAד,د+lMլjY|2nE}n(;fvvX޽;~(A S+u?i`ܱ`4xŌ+bJe4Ȭbœ?t#1EQj.*r84yU@Y70"pX1q,o(5oo)P72/wl7p(B\ &E~P(߃6& VЖp=+;uOs꾃Adxb\p=dO%ȷ8B:`5,;@kԍPtt@˗9( MV2!8q_徢̕Bs̤Cl9]hy&p/{MZW7OT!~0c4)-oDz$^imT"fr叵35*?B~MM`}+]HKnt+ø -<%fU!*'KZ"] ޡo"7IvA)]vA홹 THlmpۙ 6+BG,D"=vVt RBEH8꥛4'Ư.X_調s7Pѝ,a4>J/fj.^8p 馃T>S|5T$vlOegZBϔB9!Üw qk}Ɂ"b(-(VV4LAQɩty֬iV,% zNI x,cB\șm*(/ sB6ЂLP}Ƚg}wҾB9,ZjPzP!}}by]jP NP՜$,OY "E_/ڭ?w^82*LP<]zll0eYADcmn㖈qË6jjS!XzB' aNZzeIk9%]* JX^IHo^iU=JULQ!YϪUY`$z żz7oY^wهuׁ^#wVUIiF&j0/%y! e D|<0rFh7+'sk+ )EdyhG:l|3$kv[_8b_>)@4(!_DIHtLlRtnY):=~ڿ{ tukAS.yZ+7qbP;Sv Uj<@1A[ɝᒠ'voq{'m&^[X՝y7PKDPKhryNl9..mimetypePKhryNwkkTThumbnails/thumbnail.pngPKhryNnvM$ settings.xmlPKhryNh "manifest.rdfPKhryN#Configurations2/progressbar/PKhryN$Configurations2/statusbar/PKhryNV$Configurations2/accelerator/PKhryN$Configurations2/toolpanel/PKhryN$Configurations2/menubar/PKhryN$Configurations2/popupmenu/PKhryN6%Configurations2/toolbar/PKhryNl%Configurations2/floater/PKhryN%Configurations2/images/Bitmaps/PKhryN'.kvD %content.xmlPKhryN'\s4meta.xmlPKhryN EODD5p6Pictures/10000201000004B00000013D3BD31C4849D8952D.pngPKhryNw]META-INF/manifest.xmlPKhryND styles.xmlPKSpreadsheet-ReadSXC-0.38/t/hyperlink.ods0000644000175000017500000002205614456566532017512 0ustar corioncorionPKvOOl9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPKvOOBR==Thumbnails/thumbnail.pngPNG  IHDR'ePLTE+++333>>>BBBKKK[[[ccclllsss}}}.v6{:~=CHLSUV\`djnrxvy}↰㋳䐶啹晼眾LIDATxo4֮Q8M$K[^z캹yn'⹃$V*SUl~s萯#V|E󓊻Cҟ\i0pu||u`}o'GvK: -Vq!aQǂϴZe#=k VnyлVӯɫӦy[G[.+G$Ģ iыj{M,iUE:Y*ֻs*Efn+rz,flj(Tm↷@gz6[r~# 3T!lSzlS=oz_%Y֥G}JJV8Y6% I:Jֺ!%&,k8%Q(sRM?{u)ܤ_]9lS1 Du%n|jB$_C19TwqҞR2͍#C'}bT +-q oƨt1-x~G7gܒ=W&鈊9Pfl==N!]oR"w=B}⵩1uV"xjBrcMHٹ yk/{f5+}WBT1Xdm/1~ȩM*:֚wFɦ^^d~ vok LcTYZL$i9SaY!iVixx S${?i{'l7a`WGܖCc6AJ2X5U7xFUvvpXR=%+l*MMؽZصCecJ VS~[ƆŸ Vz + r2Ԕ(/JM {CX46dל:M>"{߇˛b qYY. Mݛ@| Ek \c- 2Fݴk! ARX$A;crco1U9CۊO͜npO>^SwR o}/p{qT] m6X偡,-'Y#p<x]X[lOnkaUnPit(+35'")lpjE^~i3S>)`A J#3*{ SzMbj?U+_NiS(Y5/NކI9aH/unzWʶx7JC;Ւq'ߪgXsV-fa')|U}üڪHe+ L&q9U)(3ՙZpGH+]L&S s!ԓ7|3O4܍$A(n0O_"$j*k 9##,X"*/(|ޥxpr ٧(ӦJh'8}VJݗFJj8 M|-PNWiQž4PK5PKvOOmeta.xmlK0g$PbԗTiT*@}'Af~\?ʧ^Eo`4zh47Bf~z>f0݃x:vl(-Qk53zyda4 夤D;؆Т(HNgZ( (;8BcJ&Oxod97!th&IND7V.ak&qOQ5n*C4[=ˍyLY>>Kݞ֯zG`S+iInZzY+-Ja<[rU7tgɊ~diftt_sl4*,ŋtQl^d%WnںJ5ҐDP7 \UokV6~h#]1d%M}wh9(5i٨M/ 2n:XVjٿ%&a}Xvz_PKV;PKvOO styles.xmlZn6S P@eINn?[ Ae$ZJE.ͮv1`0`;$EZ$WmؖItC)ue7$K&_z6c-R 0gX/N g(XDc0R)JX_vr |!2Kl׬UU_fVg/EA"H +.(^NܹW`;` <%o\:)y8g\XCfDgh\{UMxB]-loIj˶+Pme_b-Oq0c,N_b$T+wY! J05ͺ*1/-9{dAﴲYwҒ$ƫЂ7#4X^)u |Mr8 07FTDR w]8J8M.YŤ(p8K5<8ʿ-le%"Dp\ =ΖF~g_),<;iʗ3m]ʵ9ޔl4oz͢Բ\wO) _L$B)jieD "|٦* OŒQh)w,!G-ҺŭՄE.Jou˺:At2=gȪWVjǫ !Ӗ۵!TeSWɝ,M'v'[ױKQn7V}q^"7oHĽ-YLW+i;Gz=:fgLcm%&RݵrCվceQ( Wnw$2Sa)%qdEb-@mI)Uֆ&.7 Sz5CGS-s !$&ɼ-f8HZn!Z7LZЉayl4y.ܮʹ^2ˈR^)8ҭ nCKP(hoL,#>Nr-D< PT.R1`-:Ssy=h3 igL^S"# 3u" 9B)mPiɇ7nM ߓ9px,?vrpV6xg'P_ X }Ärbw@ `RLpH~~UiFwvr!EQ'cEͮ=ܴb^.k$|#yI eӱO/4[O&Qo5oM=-?/a#fH% z`k?D*T?jFRi py,G^x;  vEKZx/Kw}bmeXզɘ_eP7hTeдPK7k&5!PKvOO manifest.rdf͓n0~b :2ЇQ瑂p1OcY'Pt>G>BmRLtQ*eEMLxDaGȠ\ĉDdл1B:ֵ(fcxZ313#u";j$Jtu٘oBu8<%U3VntȤ))yyq%8F,;:{xux+ZKfd mDl d6_|!eP jbCCYk8~=&,te_OT8#I0\4E+P<5H"C@jJ 0Xy@[N%5B>i40`)䁎g$OGtc`$[)Uf|bԙ TS8zuį[EzUz&ildλU]'M?ծn{6TomB}zGVsv[zV~?+4pf7]yeg igT7ð:;:N%jOsVxhsnzOqw\lNJa7F&%:Zh9x5*MJՁyIڦ5kU-lhμj`):~|Wp $+4[( p LibreOffice/6.1.5.2$Linux_X86_64 LibreOffice_project/10$Build-2Christoph Terhechte2005-04-30T17:20:512019-10-18T14:48:42.461608956de-DE8PT11M19S 0 0 6799 2709 view1 4 23 0 0 0 0 2 0 0 0 0 0 100 60 true false 0 0 0 0 0 0 2 0 0 0 0 0 100 60 true false Red tab 1861 0 100 60 false true true true 12632256 true true true true false false false 1000 1000 1 1 true false 7 true false false 0 true ngH+/0RFTEwtQzE3NjVuZi1Db2xvci1NRlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ1VQUzpERUxMLUMxNzY1bmYtQ29sb3ItTUZQAAAAAAAWAAMAuwAAAAAAAAAEAAhSAAAEdAAASm9iRGF0YSAxCnByaW50ZXI9REVMTC1DMTc2NW5mLUNvbG9yLU1GUApvcmllbnRhdGlvbj1Qb3J0cmFpdApjb3BpZXM9MQpjb2xsYXRlPWZhbHNlCm1hcmdpbmRhanVzdG1lbnQ9MCwwLDAsMApjb2xvcmRlcHRoPTI0CnBzbGV2ZWw9MApwZGZkZXZpY2U9MQpjb2xvcmRldmljZT0wClBQRENvbnRleERhdGEKUGFnZVNpemU6QTQAABIAQ09NUEFUX0RVUExFWF9NT0RFEwBEdXBsZXhNb2RlOjpVbmtub3du DELL-C1765nf-Color-MFP true 3 true false false true 12632256 true true false true false true false true 1 false 1000 1000 false 1 true - . . $ - $ ??? Page 1 ???(???) 00.00.0000, 00:00:00 Page 1/ 99 Green column background Yellow background Black background Red font Blue font color row Intersection of green background and blue foreground Both alike Cell C14 Spreadsheet-ReadSXC-0.38/t/14-no-settings.t0000644000175000017500000000140014456566532017645 0ustar corioncorionuse strict; use Test::More; use File::Basename 'dirname'; use Spreadsheet::ParseODS; my $d = dirname($0); plan tests => 2; # Only run these tests locally my $resource_intensive_tests = ($ENV{LOGNAME} || '') eq 'corion' && ($ENV{DISPLAY} || $^O =~ /mswin/i); if(! $resource_intensive_tests) { SKIP: { skip "This test needs lots of memory", 2; }; exit; }; my $workbook; my $ok = eval { $workbook = Spreadsheet::ParseODS->new( #readonly => 1, )->parse("$d/20200617_Testnummers_inclusief_omnummertabel_GBA-V.ods", readonly => 1 ); 1; }; is $ok, 1, "We don't crash when parsing the workbook" or diag $@; ok $workbook->worksheet('Toelichting'), 'We find the worksheet "Toelichting"'; Spreadsheet-ReadSXC-0.38/t/13-merged-areas.t0000644000175000017500000000122314456566532017731 0ustar corioncorionuse strict; use Test::More; use File::Basename 'dirname'; use Spreadsheet::ParseODS; use Data::Dumper; my $d = dirname($0); plan tests => 2; my $workbook = Spreadsheet::ParseODS->new()->parse("$d/merged.ods"); my $merged_areas = [$workbook->worksheets()]->[0]->merged_areas(); is_deeply $merged_areas, [ [0,1,1,2], # B1:C2 [1,0,2,0], # A2:A3 ], "We read the proper merged areas" or diag Dumper $merged_areas; my $workbook = Spreadsheet::ParseODS->new()->parse("$d/attr.ods"); my $max_col = $workbook->worksheet("Format")->col_max(); is $max_col, 2, "An (empty) merged column at the end still counts"; Spreadsheet-ReadSXC-0.38/t/hidden-cols.fods0000644000175000017500000012142514456566532020044 0ustar corioncorion LibreOffice/6.1.5.2$Linux_X86_64 LibreOffice_project/10$Build-2Christoph Terhechte2005-04-30T17:20:512019-10-18T10:24:43.483320357de-DE6PT5M51S 0 0 4524 3160 view1 6 0 0 0 0 0 2 0 0 0 0 0 100 60 true false 4 0 0 0 0 0 2 0 0 0 0 0 100 60 true false 6 0 0 0 0 0 2 0 0 0 0 0 100 60 true false vhvhvh 1861 0 100 60 false true true true 12632256 true true true true false false false 1000 1000 1 1 true false 7 true false false 0 true ngH+/0RFTEwtQzE3NjVuZi1Db2xvci1NRlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQ1VQUzpERUxMLUMxNzY1bmYtQ29sb3ItTUZQAAAAAAAWAAMAuwAAAAAAAAAEAAhSAAAEdAAASm9iRGF0YSAxCnByaW50ZXI9REVMTC1DMTc2NW5mLUNvbG9yLU1GUApvcmllbnRhdGlvbj1Qb3J0cmFpdApjb3BpZXM9MQpjb2xsYXRlPWZhbHNlCm1hcmdpbmRhanVzdG1lbnQ9MCwwLDAsMApjb2xvcmRlcHRoPTI0CnBzbGV2ZWw9MApwZGZkZXZpY2U9MQpjb2xvcmRldmljZT0wClBQRENvbnRleERhdGEKUGFnZVNpemU6QTQAABIAQ09NUEFUX0RVUExFWF9NT0RFEwBEdXBsZXhNb2RlOjpVbmtub3du DELL-C1765nf-Color-MFP true 3 true false false true 12632256 true true false true false true false true 1 false 1000 1000 false 1 true - $ - $ ??? Page 1 ???(???) 00.00.0000, 00:00:00 Page 1/ 99 visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible visible hidden visible hidden visible visible hidden visible hidden visible visible hidden visible hidden visible visible hidden visible hidden visible visible hidden visible hidden visible visible hidden visible hidden visible visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden visible hidden Spreadsheet-ReadSXC-0.38/t/text-outside-cell.xml0000644000175000017500000001063514456566532021073 0ustar corioncorion A1B1D1A2B2A3C3D3A4B4C4xxxNote 1xxxNote 2Note 2Note 2Note 3Note 3xx Spreadsheet-ReadSXC-0.38/t/07-hidden-rows.t0000644000175000017500000000117614456566532017632 0ustar corioncorionuse strict; use Test::More tests => 28; use File::Basename 'dirname'; use Spreadsheet::ParseODS; use Data::Dumper; my $d = dirname($0); for my $file (qw(hidden-rows.ods hidden-rows.fods)) { my $workbook = Spreadsheet::ParseODS->new()->parse("$d/$file"); for my $sheet (qw(vhvhv vhvh vhhhv)) { my $worksheet = $workbook->worksheet($sheet); my $rownum = 0; for my $row (split //, $sheet) { my $v_hidden = ($row eq 'h') ? 'hidden' : 'visible'; is !!$worksheet->is_row_hidden( $rownum++ ), ($row eq 'h'), "Row '$row' is $v_hidden"; }; }; }; Spreadsheet-ReadSXC-0.38/t/16-gh5-custom-styles.t0000644000175000017500000000101114456566532020707 0ustar corioncorionuse strict; use Test::More; use File::Basename 'dirname'; use Spreadsheet::ParseODS; my $d = dirname($0); plan tests => 2; my $workbook; my $ok = eval { $workbook = Spreadsheet::ParseODS->new( #readonly => 1, )->parse("$d/gh5-custom-styles.ods", readonly => 1 ); 1; }; is $ok, 1, "We don't crash when parsing the workbook" or diag $@; note "<$_>" for map { $_->label } $workbook->worksheets; my $name = $workbook->active_sheet_name; is $name, "Tabelle", "We have an active sheet"; Spreadsheet-ReadSXC-0.38/t/t-date.ods0000644000175000017500000002211214456566532016654 0ustar corioncorionPK$COl9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPK$CO!02\س,(dPV& J^}-M"I]cE8;tk\G{ѣG=~Us]zՍpY;&p&qX6â+hdTۯ=&?=x7誱i'$rӗ^$.o~Sb7wI:.km(b(K5!3T`D=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣG=zѣGl8 9!IENDB`PK$COConfigurations2/accelerator/PK$COConfigurations2/popupmenu/PK$COConfigurations2/toolpanel/PK$COConfigurations2/menubar/PK$COConfigurations2/images/Bitmaps/PK$COConfigurations2/toolbar/PK$COConfigurations2/floater/PK$COConfigurations2/statusbar/PK$COConfigurations2/progressbar/PK$CO content.xmlZ_o6ߧԢ؀вdIE`ݺd+#2JHʎ_ϱ=m0`(}EIdɕ(<ǻg!DHʣE"4 ~6O##{IH"<)@:#CۉFK*G)ocR2(eVZ)sYZ[UXVduw)sYxUXBPSUV240ƊP2݌RqEo1q8ᡓR ^'\F1=yCpW| )Jk":+ X]e*5:g|]Xݻ}ݻ?ryyy:}[}? f4jFe]2 U?̖Wm-|yyuAx.(fUDa#EzxǙ)g\&TyxtSTI%_0F֍l`6m$j[!>[hdP@"8ʭ RJ^@32@[ T$k9ǯ~.7$H( VJu(8z(SXCzaeIٹdy2PHkGא7@t1c_P_A0L66&& Vʨ I/ f_w{{o" Ɫ!f,DB6/C'bd$N'L|*c.>1 OM_.JBhc W p߶2ȅoeΙ`< lUYޑS~i!Nj/ ڳg /D޲G~9gF`i`8 ؘMbуY Յ`k^s]ƒBʅX [0yH#@̃ T=0j> è[P8}=Vvc vfYN* 99h:O=/Ps^v"qQ#7HswOt\2c %}mcrJ~Zװ#IbX媿4dYotW :dk/o1$_6>yɀլLYd؞b&u.Ft,J$HL­s&4S mHj@_6]'?RXg\}O"c{~жW%1GNt6o:e:wa.`wj\bMB<bs2Z*j{!̎ՠֱW'jh*32ĝ ><#Ed*X@=?ml+蒭 ɉzᚆ\mQ>_!wyvucHV]'nKgah:TZȭC,ëLNe͟^1PK }!PK$COmeta.xml[0+ X7VT[D qؑ1 DIyxΘx>T F( ) @s#nJks0pu[uR:[2]e3s=[5|Q9+hܑr:Sې(s3*;vVyJp -ˆP{si4ch.4%y+zkMHv5~pziQ5*|4[ȭ 0 0~z;o~E\5;ѧTo_jd0Տ{+[g` v|`rޓߟ p?T)N:Z,ܷ\!8 Q(3F0]e]. 36MW7P >E\A[S;[\ʣIx[N%h9(5kD,SD,H{Zzg1,~ K#7IPK;PK$CO styles.xmlZn6S P@eINn?[ Ae$ZJE.ͮv1`0`;$EZ$WmؖItC)ue7$K&_z6c-R 0gX/N g(XDc0R)JX_vr |!2Kl׬UU_fVg/EA"H +.(^NܹW`;` <%o\:)y8g\XCfDgh\{UMxB]-loIj˶+Pme_b-Oq0c,N_b$T+wY! J05ͺ*1/-9{dAﴲYwҒ$ƫЂ7#4X^)u |Mr8 07FTDR w]8J8M.YŤ(p8K5<8ʿ-le%"Dp\ =ΖF~g_),<;iʗ3m]ʵ9ޔl4oz͢Բ\wO) _L$B)jieD "|٦* OŒQh)w,!G-ҺŭՄE.Jou˺:At2=gȪWVjǫ !Ӗ۵!TeSWɝ,M'v'[ױKQn7V}q^"7oHĽ-YLW+i;Gz=:fgLcm%&RݵrCվceQ( Wnw$2Sa)%qdEb-@mI)Uֆ&.7 Sz5CGS-s !$&ɼ-f8HZn!Z7LZЉayl4v7nW\/eDw IGєpVOd%tj4M7Q| ̑Ws9Qtqn i|ny){|9jcԍ4ʳy^^S"# 3u" 9B)mPiɇ7nM ߓ9px,?vrpV6xg'P_ X }Ärbw@ `RLpH~~UiFwvr!EQ'cEͮ=ܴb^.k$|#yI eӱO/4[O&Qo5oM=-?/a#fH% z`k?D*T?jFRi py,G^&  vEKn7CbmeXզɘ_eP7hTeдPKw* 5!PK$CO manifest.rdf͓n0,zu#|i% VR$uJY(}sCg3KЃ\taWb8amJCJY;UCV}ٻ^YaDo~X]TzGyQT*Ťuաd槚~iRP<`LbLojШRmnvġjw9vV&KoQ~1dc/p&%.|Ǡ*G=W<q `t|1]aqd<j1_4=s D@~CF rah0 qA`kȏǐCnm(|x0 \@pp~>@Y.З瀯9-an2O zߌHK)fu92(%SFǠCmύ8^>|Q+@iۦC@Bx &tpŮbiԅslf)Ǝ\|4ZJԃ3C~B=&ՃzV5'u99' HVcu;Ōϲ_=1~Y1jbZ.u9i!(mG !pa$Lz݇#GkϦa}H=x!NęJ YCRea` ,i{2A&TzT]\ ? m-ΟK-Bl[Ig߽ٝ ?{! @̦_9A`5JK߆|v}b,b:38PNܓ,ta_`@4!8"I0X8b4ŷP}6 H2"C@jJ0X~_GkFnRiZHAJ*u\fo<*ȇj٥pAzZ}kbmUjʏ#m 5xib޸Ǝfi*뮩L_:P!X-],;^w5.}kګ⻺bSㆧ,mX2ٸ-E +Fu4Ӓ1N۠qG~mDhlM-Q565p}h_b`>_VX=<;PMiNecbC Q]wufM}[5?=%7}#En|(_Y!zk*bS3kȳ;<oS_ M3ZzkSkǿXMwx|{dR =2u>mRS/;_fyS?co9IfHSE^񇧷iϵվPKP{'PK$COMETA-INF/manifest.xmlAn E9Ŷ2YU(Nz  Qrb+N\Ub);`|fw]udž}wV^[}?n DrZT۶a9*$Q$@/GnfWihVbA/_ { ~>t-ゥ&;؆ Oe!MIhFҒ1_1GӾ#:mfnMr.׻HUikҫؼ)wYqP&5Om[v}Yg@zSci)jn"W0 jq|usѪ(YءMfYM|yw,M,L1oٵ͈I=o\_ :N)z{po?cF7'}]0n)4]kQ f7_ZJ1R+Z,)Y%v| 6+:\B$V0F$tFf^ficq-΍҅]"`WeQmlx3:ef/&̀jӈZ뛊3|,>lVneyΒs^u~B7;5[2TU!bg vZ^7PP!JMmCK?d\ʩks~{a I*ީRW׭o_F? )M-s突=9fߠVH^J6Aw-VMl;ZT,Zvnꎻ6k16W_GTwʜ1y217G倷]`1>#lnmObsRe>7l|`>4ejKRIFbePC.9'wi 2v-IҌ%45/Mԡf 谟mUc8ͮEa;B >ŠݣKӝ6ƽ~c["co>k|71;r)ɒNGSTvH1W|`(a 񊪶02zC]zN,ǬǴN䨐(o>W `twau> ՘ >8'=Å>ul;*%dzaze?Op>ܺ',?pE>&Ko>f>G->~m{sq==ۨo~V^Zr ˀ5X5jOZHoT7nC88m^vY>{uI~c:'4{ W's>&J䵾~@¯cNӐ^,F*i9uв>+ßtT1:)_@uN`eh'OPO< /;oW L[0-V{Nw韕{j T+;*v1g8`ix>O,v(źP:8OЎPvCEz:n>=bd651JՊǔR}̥b ҌsQլ7w*jS7sXt1ԭl$n jWy궕|1qURaex,qcšip%Z,Z_yJBV5ߴ2u6Q®V69D?wW9FLR+{ju?u\rUZ|mL>Naooj;viV\f~tLY8O!؅ |`0&670|’p[:?\sT m: OPF nkZ )ΓmoXsǬq~M:[?`Nh1<,g8N6)B׮Ӵ?N;15ۉ2fL.,gs?|L.piߒAo4-{^S_v'"z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'z'+_ 4ַiIENDB`PKCROConfigurations2/toolpanel/PKCROConfigurations2/menubar/PKCROConfigurations2/statusbar/PKCROConfigurations2/accelerator/PKCROConfigurations2/progressbar/PKCROConfigurations2/popupmenu/PKCROConfigurations2/toolbar/PKCROConfigurations2/images/Bitmaps/PKCROConfigurations2/floater/PKCRO content.xml\n6SPl@N5n?X.)zKKDm@-v(JHdi3lP˘ZsammN<$'o~pڏcA@<<8 H'bS;Ʉ!A$A1MXRjR+:XGŠZPᥠN q$iy$y7#)Ӊ.;usjW9﹘beL[X)޺KI0$ѹ `p0)45kً 8TvldS߇!Ã3\x-HI:8L]gU*sw]}]^e_p"1{k=D*,J\p\AD*G`jr,^o茙\DHe"F8e\V 7_ָ-1oZ;YlbgNNî3ZѶx- >k\rƄ]2ɦY:NuNQ՗Yo翿\{ǼLFĻg(+CziŲP.seh]pu8aI=x0cB;E1T\ZڊЈLex}s"ȌP"WjR[* Pc)1P0|/W=U pV`[壃(Rt?=sfD|'j҄9t[6pLlHinpAalPyW.xTE<)7O1M_f6lH{7( ,ʆiw!alH{7(?nWg 58Hb?TglӨ-eǾm3t/|*\GB|/ *7\.)W/PKZPPKCROmeta.xml[ +,% +&UڪJ}8"QC9 OʚRD_=U )\Z|PGx>J:m>Ap{3[%͇F[}GNtOil]Cj"CuF8s遒',fdfHsCJ32gqRؔt P(ƿxU1bӀWgu}"fq'ʴfE0UZ 7+5)qAL[rn U7hiSf<<PKCRO styles.xmlZ[o6~߯ThȒtA/[/KaD\)Qh;c;=  Y;$EZ$WmؖItã:+ ²Yb%S/h!I'1)΄W bg RL2b" qf&UD%/W>}%ƋkV*wѺ/BLs֗ޜyKs$Ȗd/B|z Op<jY\TKeB`S,P_$jRL0$P#9@]YUyjJzW*s@w)pTFqRUEG~XT?N7uӾ$]gYS%a^9WNxhd#Ҷ.,yNɷ|sƅ5d޿Atv.DJ\5Єq+max+jlwǾUN0%nsbt0y9K*IMBb({RPkS۬Kb#'/hK\}S9L̜sE؋qD١xgiԽ S H@?XE-^[~qdc1&4PbADR/]%|+}Ww Zx{5W|q `5]l}0;Zr$zL4Awi)~w! )GBw/CzD<0}]{@prB~k,9k@K,RS>|oAk kq [[)c).jZ:`C{G6CaۦC@`!<9# \;YU1zpu999ߝ994 'GLqrv2F1K=MT?_|v&tc Ӑ\"Ƃ&'Pt>.6)l/]Wr"ݶ`R':#dA(dBoSp7g"$a|GV8 dtI8Stu`B %U66br`@.ɕXHzdۅ] ?m-OU?#K B|=s^8B@̦_y+,jK/C>ib,m:+8N7HSG8o#@!qDYjzG:@a=+ݷۢDbw=v=˹q@NnvijWebkPKh"(-PKCROMETA-INF/manifest.xmlAn E9Ŷ2YU(Nz  Qrb+N\Ub);`|fw]udž}wV^[}?n DrZT۶a9*$Q$@/GnfWi<[meta.xmlPKCROZ !5! rstyles.xmlPKCROh manifest.rdfPKCROh"(- settings.xmlPKCRO93,"META-INF/manifest.xmlPKeC$Spreadsheet-ReadSXC-0.38/t/08-color.t0000644000175000017500000000141414456566532016521 0ustar corioncorionuse strict; use Test::More tests => 14; use File::Basename 'dirname'; use Spreadsheet::ParseODS; use Data::Dumper; my $d = dirname($0); my @cell_tests = ( [0,2,"ce8"], [2,0,"ce4"], [3,0,"ce5"], [4,0,"ce6"], [5,0,"ce11"], [5,2,"ce14"], ); for my $file (qw(colors.ods colors.fods)) { my $workbook = Spreadsheet::ParseODS->new()->parse("$d/$file"); my $sheet = $workbook->worksheet('Red tab'); is $sheet->get_tab_color, '#ff0000'; for my $t (@cell_tests) { my $c = $sheet->get_cell( $t->[0], $t->[1] ); if( ! $c ) { diag Dumper $sheet->data->[4]; }; my $value = $c->value; my $name = "Style of ($t->[0], $t->[1]) is $t->[2] ($value)"; is $c->style, $t->[2], $name; }; }; Spreadsheet-ReadSXC-0.38/t/regression-newapi.t0000644000175000017500000016105114456566532020623 0ustar corioncorionuse strict; use Test::More tests => 5; use File::Basename 'dirname'; use Spreadsheet::ReadSXC; use Data::Dumper; my $d = dirname($0); my $workbook_ref = Spreadsheet::ReadSXC::read_sxc("$d/NewAPI.ods"); my $expected = { '3D' => [], '2D' => [ [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, 'Affected Charts' ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, 'Pie' ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, 'Bar' ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, 'Bar, Scatter' ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, 'Net' ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, 'Scatter' ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, 'Stock' ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, 'Instructions:', undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, "Click \x{201e}Create Charts\x{201c} to create 5 Charts", undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, 'Then Click on any other Button to see some other things happen', undef, undef ] ], 'Data' => [ [ 'X', 'Y', undef, undef, 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun' ], [ '0', '0.07', undef, 'Berlin', '2,001', '1,987', '500', '200', '1,000', '1,500' ], [ '0.16', '0.22', undef, 'Hamburg', '3,000', '2,000', '600', '160', '900', '1,600' ], [ '0.31', '0.41', undef, 'Bremen', '2,156', '1,800', '800', '180', '800', '1,000' ], [ '0.47', '0.51', undef, undef, undef, undef, undef, undef, undef, undef ], [ '0.63', '0.63', undef, undef, undef, undef, undef, undef, undef, undef ], [ '0.79', '0.72', undef, 'Date', 'Volume', 'Open', 'Low', 'High', 'Close', undef ], [ '0.94', '0.82', undef, 'Apr 7, 00', '15,000,000 K', '$88.75', '$88.88', '$94.50', '$92.69', undef ], [ '1.1', '0.95', undef, 'Apr 8, 00', '14,652,562 K', '$92.69', '$87.00', '$95.50', '$93.69', undef ], [ '1.26', '0.96', undef, 'Apr 9, 00', '15,070,589 K', '$93.69', '$91.00', '$96.50', '$92.00', undef ], [ '1.41', '1.01', undef, 'Apr 10, 00', '15,207,571 K', '$92.00', '$90.00', '$97.50', '$93.00', undef ], [ '1.57', '1.04', undef, 'Apr 11, 00', '14,869,716 K', '$93.00', '$90.00', '$98.50', '$93.60', undef ], [ '1.73', '1.05', undef, 'Apr 12, 00', '15,225,943 K', '$93.60', '$87.00', '$99.50', '$93.80', undef ], [ '1.88', '1.03', undef, 'Apr 13, 00', '15,243,446 K', '$93.80', '$88.00', '$100.50', '$94.00', undef ], [ '2.04', '0.96', undef, 'Apr 14, 00', '14,889,873 K', '$94.00', '$89.00', '$101.50', '$93.00', undef ], [ '2.2', '0.83', undef, 'Apr 15, 00', '14,781,243 K', '$93.00', '$90.00', '$100.00', '$92.00', undef ], [ '2.36', '0.76', undef, 'Apr 16, 00', '15,132,068 K', '$92.00', '$88.00', '$96.00', '$92.00', undef ], [ '2.51', '0.62', undef, 'Apr 17, 00', '15,253,822 K', '$92.00', '$89.00', '$95.00', '$93.00', undef ], [ '2.67', '0.51', undef, 'Apr 18, 00', '14,919,019 K', '$93.00', '$93.00', '$97.00', '$95.00', undef ], [ '2.83', '0.37', undef, 'Apr 19, 00', '14,972,533 K', '$95.00', '$84.00', '$95.00', '$91.00', undef ], [ '2.98', '0.19', undef, 'Apr 20, 00', '14,642,786 K', '$91.00', '$87.00', '$100.00', '$97.00', undef ], [ '3.14', '0.07', undef, 'Apr 21, 00', '14,804,376 K', '$97.00', '$91.00', '$98.00', '$96.00', undef ], [ '3.3', '-0.15', undef, 'Apr 22, 00', '14,907,452 K', '$96.00', '$92.00', '$102.00', '$95.00', undef ], [ '3.46', '-0.22', undef, 'Apr 23, 00', '15,319,376 K', '$95.00', '$91.00', '$96.00', '$93.00', undef ], [ '3.61', '-0.4', undef, 'Apr 24, 00', '15,066,118 K', '$93.00', '$94.00', '$99.00', '$98.00', undef ], [ '3.77', '-0.49', undef, undef, undef, undef, undef, undef, undef, undef ], [ '3.93', '-0.63', undef, undef, undef, undef, undef, undef, undef, undef ], [ '4.08', '-0.74', undef, 'CDU', 'SPD', "Gr\x{fc}ne", 'FDP', 'PDS', 'Andere', 'Summe' ], [ '4.24', '-0.8', undef, '34.29%', '35.43%', '11.43%', '8.57%', '4.57%', '5.71%', undef ], [ '4.4', '-0.92', undef, '1200', '1240', '400', '300', '160', '200', '3500' ], [ '4.56', '-0.94', undef, undef, undef, undef, undef, undef, undef, undef ], [ '4.71', '-0.92', undef, undef, undef, undef, undef, undef, undef, undef ], [ '4.87', '-0.99', undef, undef, undef, undef, undef, undef, undef, undef ], [ '5.03', '-0.93', undef, undef, undef, undef, undef, undef, undef, undef ], [ '5.18', '-0.81', undef, undef, undef, undef, undef, undef, undef, undef ], [ '5.34', '-0.75', undef, undef, undef, undef, undef, undef, undef, undef ], [ '5.5', '-0.64', undef, undef, undef, undef, undef, undef, undef, undef ], [ '5.65', '-0.5', undef, undef, undef, undef, undef, undef, undef, undef ], [ '5.81', '-0.39', undef, undef, undef, undef, undef, undef, undef, undef ], [ '5.97', '-0.29', undef, undef, undef, undef, undef, undef, undef, undef ], [ '6.13', '-0.06', undef, undef, undef, undef, undef, undef, undef, undef ], [ '6.28', '0.09', undef, undef, undef, undef, undef, undef, undef, undef ] ] }; is_deeply $workbook_ref, $expected, "NewAPI.ods gets parsed identically" or diag Dumper $workbook_ref; $workbook_ref = Spreadsheet::ReadSXC::read_sxc("$d/NewAPI.ods", { StandardCurrency => 1, StandardDate => 1, StandardTime => 1, }); $expected = { '2D' => [ [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, 'Affected Charts' ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, 'Pie' ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, 'Bar' ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, 'Bar, Scatter' ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, 'Net' ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, 'Scatter' ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, 'Stock' ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, 'Instructions:', undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, "Click \x{201e}Create Charts\x{201c} to create 5 Charts", undef, undef ], [ undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, undef, 'Then Click on any other Button to see some other things happen', undef, undef ] ], '3D' => [], 'Data' => [ [ 'X', 'Y', undef, undef, '2000-01-01', '2000-02-01', '2000-03-01', '2000-04-01', '2000-05-01', '2000-06-01' ], [ '0', '0.0736160629771725', undef, 'Berlin', '2001', '1987', '500', '200', '1000', '1500' ], [ '0.15707963267949', '0.222381328196949', undef, 'Hamburg', '3000', '2000', '600', '160', '900', '1600' ], [ '0.314159265358979', '0.407497597612808', undef, 'Bremen', '2156', '1800', '800', '180', '800', '1000' ], [ '0.471238898038469', '0.509797219370413', undef, undef, undef, undef, undef, undef, undef, undef ], [ '0.628318530717959', '0.63395633752449', undef, undef, undef, undef, undef, undef, undef, undef ], [ '0.785398163397448', '0.719141179928584', undef, 'Date', 'Volume', 'Open', 'Low', 'High', 'Close', undef ], [ '0.942477796076938', '0.817336001844437', undef, '2000-04-07', '15000000', '88.75', '88.875', '94.5', '92.6875', undef ], [ '1.09955742875643', '0.949218778830976', undef, '2000-04-08', '14652562', '92.6875', '87', '95.5', '93.6875', undef ], [ '1.25663706143592', '0.959774132620732', undef, '2000-04-09', '15070589', '93.6875', '91', '96.5', '92', undef ], [ '1.41371669411541', '1.01017825625409', undef, '2000-04-10', '15207571', '92', '90', '97.5', '93', undef ], [ '1.5707963267949', '1.04025523422298', undef, '2000-04-11', '14869716', '93', '90', '98.5', '93.6', undef ], [ '1.72787595947439', '1.04753199951172', undef, '2000-04-12', '15225943', '93.6', '87', '99.5', '93.8', undef ], [ '1.88495559215388', '1.02786291206465', undef, '2000-04-13', '15243446', '93.8', '88', '100.5', '94', undef ], [ '2.04203522483337', '0.958401671062797', undef, '2000-04-14', '14889873', '94', '89', '101.5', '93', undef ], [ '2.19911485751286', '0.830847150364955', undef, '2000-04-15', '14781243', '93', '90', '100', '92', undef ], [ '2.35619449019234', '0.758422682219809', undef, '2000-04-16', '15132068', '92', '88', '96', '92', undef ], [ '2.51327412287183', '0.61750874736503', undef, '2000-04-17', '15253822', '92', '89', '95', '93', undef ], [ '2.67035375555132', '0.508331188555977', undef, '2000-04-18', '14919019', '93', '93', '97', '95', undef ], [ '2.82743338823081', '0.368970261437009', undef, '2000-04-19', '14972533', '95', '84', '95', '91', undef ], [ '2.9845130209103', '0.18734508575333', undef, '2000-04-20', '14642786', '91', '87', '100', '97', undef ], [ '3.14159265358979', '0.0695369149416393', undef, '2000-04-21', '14804376', '97', '91', '98', '96', undef ], [ '3.29867228626928', '-0.148695695469987', undef, '2000-04-22', '14907452', '96', '92', '102', '95', undef ], [ '3.45575191894877', '-0.217646287234005', undef, '2000-04-23', '15319376', '95', '91', '96', '93', undef ], [ '3.61283155162826', '-0.401230768200599', undef, '2000-04-24', '15066118', '93', '94', '99', '98', undef ], [ '3.76991118430775', '-0.489735482416856', undef, undef, undef, undef, undef, undef, undef, undef ], [ '3.92699081698724', '-0.633651622065608', undef, undef, undef, undef, undef, undef, undef, undef ], [ '4.08407044966673', '-0.74060350042111', undef, 'CDU', 'SPD', "Gr\x{fc}ne", 'FDP', 'PDS', 'Andere', 'Summe' ], [ '4.24115008234622', '-0.795288510043229', undef, '0.342857142857143', '0.354285714285714', '0.114285714285714', '0.0857142857142857', '0.0457142857142857', '0.0571428571428571', undef ], [ '4.39822971502571', '-0.922963238013719', undef, '1200', '1240', '400', '300', '160', '200', '3500' ], [ '4.5553093477052', '-0.936119316703055', undef, undef, undef, undef, undef, undef, undef, undef ], [ '4.71238898038469', '-0.921722266134677', undef, undef, undef, undef, undef, undef, undef, undef ], [ '4.86946861306418', '-0.985978999383097', undef, undef, undef, undef, undef, undef, undef, undef ], [ '5.02654824574367', '-0.933540629292918', undef, undef, undef, undef, undef, undef, undef, undef ], [ '5.18362787842316', '-0.814248187085184', undef, undef, undef, undef, undef, undef, undef, undef ], [ '5.34070751110265', '-0.751500933485474', undef, undef, undef, undef, undef, undef, undef, undef ], [ '5.49778714378214', '-0.643419808952295', undef, undef, undef, undef, undef, undef, undef, undef ], [ '5.65486677646163', '-0.498992516447254', undef, undef, undef, undef, undef, undef, undef, undef ], [ '5.81194640914112', '-0.388155431380584', undef, undef, undef, undef, undef, undef, undef, undef ], [ '5.96902604182061', '-0.287117767544654', undef, undef, undef, undef, undef, undef, undef, undef ], [ '6.1261056745001', '-0.0589241128694329', undef, undef, undef, undef, undef, undef, undef, undef ], [ '6.28318530717959', '0.0883249840644768', undef, undef, undef, undef, undef, undef, undef, undef ] ] }; is_deeply $workbook_ref, $expected, "NewAPI.ods gets parsed identically with standardized values" or diag Dumper $workbook_ref; for my $key (qw(2D 3D Data)) { is_deeply $workbook_ref->{$key}, $expected->{$key}, "NewAPI.ods gets parsed identically with standardized values ($key)" or diag Dumper $workbook_ref->{$key}; }; Spreadsheet-ReadSXC-0.38/t/07-print-headings.t0000644000175000017500000000155214456566532020321 0ustar corioncorionuse strict; use Test::More tests => 9; use File::Basename 'dirname'; use Spreadsheet::ParseODS; use Data::Dumper; my $d = dirname($0); my $workbook = Spreadsheet::ParseODS->new()->parse("$d/print-titles.ods"); my $worksheet = $workbook->worksheet('Sheet1'); is $worksheet->col_max, 3, "We have four used columns" or diag Dumper $worksheet; is $worksheet->row_max, 2, "We have three rows" or diag Dumper $worksheet; my $cell = $worksheet->get_cell(0,2); is $cell->value, "Heading1"; $cell = $worksheet->get_cell(0,3); is $cell->value, "Heading2"; for my $row (1..2) { for my $col (2..3) { my $cell = $worksheet->get_cell($row,$col); my $expected = sprintf "Content%d.%d", $row, $col-1; is $cell->value, $expected; }; }; is_deeply $worksheet->get_print_titles, { Column => [0,1], Row => [0,0] }, "Print headings"; Spreadsheet-ReadSXC-0.38/t/NewAPI.ods0000644000175000017500000006100314456566532016563 0ustar corioncorionPKnZ!5l9..mimetypeapplication/vnd.oasis.opendocument.spreadsheetPKnZ!5Configurations2/statusbar/PKnZ!5'Configurations2/accelerator/current.xmlPKPKnZ!5Configurations2/floater/PKnZ!5Configurations2/popupmenu/PKnZ!5Configurations2/progressbar/PKnZ!5Configurations2/menubar/PKnZ!5Configurations2/toolbar/PKnZ!5Configurations2/images/Bitmaps/PKnZ!5 content.xml]ݒ۸ߧP)NjfӢ38;[J-HIs'ٻ}<!(R-~l=!8|88ɸяQ\uv;~0o{ǗMxw7p0AAv r( x_ď/e8[җi[YJ<~=-;?%۾z۷ο=m_eaP߅۾)BKF*>G/W݇$^#q辏R4wI`Yn:i}XG/Nۖ>]6OR0C%W[K#b7Ⱦkx*Fc2Hɓe_C%7<^8MFo˿D3+XnE8vW> Xn~ԛz~/{ڿfЫ\23z8ciNϼ6m:ܛvGv̸ۘu$B $hx,H{GA/gvݍ>-r#{KdyHw- CӕL%a\ț>"Tp yEnfm@ds<4ɥJtkK۫D?m1q__qG) FE L]^+d~s /~1|RZb_xr9hQWy՝?\]r55l Ul]J dH*\S]MGԒσFS _tpao֬%,쵄!n@ ڪrῃyK978CplzЍgy>k@\6j]jcjKr[-@-ȉ:vQ +Io ԿtD=j3r9 NBϰeގJ2؜_,"ߺm˟⟝kv Rv8n2wqV'/"(d|ݝ?" =̒S݂8hɎ&9b,ɵLCv~U# -\Ԕ_Yɬ ^44^e\1'(2,r$Q8&j /S0Ԣ:qYĉ9-<.o{?E)QNzCӜ̄4t}Kx 2+{%6}wތY;Oc\Z83GV~7GHjYC JfBv;K0ȫY:Mo22 uXzZ'[|}7x;řW9z&^& jFlN:̽1^<:pV8dڝ7e#VURkLR)0N% .b33O]pjfݎJֵa89 u2Ff|?˦_{h;o28d&{Z9=cSߏܞw(̄B茮',RSLot1,zº(0C^/;g=]}F(,g=aIXx34])?XOY\3~* EsS،?HI؊fOWh, :KvWR0%Yx.1>ȩn֘8ۗ,FcIyP_=^yzy\]/t ķ|e/Fߥy +wKٟҫS撟ҫ`%:9( 4!u8cx4=Elc/gjuޟVGYwCYID,R"8(?11}. ;oNYzKC55Xn4S.SQ] v3\ؠXVꕫg+}϶rٺ\r%+)*労+W,Wr8r+R[|FT5^vruѹ%,5f)`ۛTuMZ7 XlveG?9HEubXI]:U=~'oBRV~9Kd g"ZZ,Q[*H"R1xwʡYJQ?lژXRfiK|Q5ʨCf<?8w' ;,mE;vX~Ɇ) :^ ?dbzbğg$~yS?ǘS|9s9|Г%a>\ete7e͟i~x6^Rq&%:F:aҊ;| P,Jġ k@]Ul{0w*LñzF뫀 uZ:Itn8|#^f/S.V~ſxăV N m<[YJԋeFz.>ٳrZ5A6ֿ=! 3'rZ$Vv':,vK)l [R ^z^\^ݼ9߿O~eϜ w9VB Yw7&<7 W)owĄ+' EURo5aDKx@y{Yt_#ؓ=6'{zWzU}7+#"0gI% D!V6D9QkȣJ0%8ҕyn6lEzcgπd8)8Eـ'@+(;mOd EBj<<霣2>kb'r`}2a@xBm}^Zɉ491MNԂ}Ne:&ӑ&;w<'9)b)YgXw"9Vrfn޺I IĔPMZ;ICYOn7ڏDkg|,)g'=5Q` v +T?w]oOI".˱PyvlMOZ@Ozv}[s.nzFгhxDU̼1 . ut{M6v>NlH׆Cgwm"?FBc 1 l[::\2OqBnt6:tӔW ~h+Ŷ_4Vϊm ~0n# 3_؜)ַúĄX46g5(dІ`l~víVZ{o΋? g~4Ļ}qBd砝p6NO(g9ʙCI[r*(GuʿE#[^.&ڥz*i딿GIxζa@Q'#L4uRltQH4@8DsU킭I*ճ};hwb|ν1m[1`gLJw_e W_ﰒgȲ؜-i1*Bpav}lk!!Es]iÃ#qFT}dY4+|Ƙs!G+Tԑ\Q.a\N[ ӠO8B$SB*H9W%6G6buyUȆ"s9V2}v~f9H6U5:A^$bIFJNW6R!}.BHkXWɵM}) ,7.*&>i{x^K1*Z^%;gc5 -E wgI`AjD@m)Ɋu)GYśUm) qJfZV8=3 Q *XUé %Hf+rV#9+\ֱ jb5+ZE$rǿH4jwH$S+7 s+ZfC/ 0{;ޱgޱuWbbzP0ZFSVI z:FkDSиVyWJ׌VԡPzMZfTMo:*k OH8bɶT(Nڑ̷k ?PJ<3hS5砆ljIBY,Xh4?] P㱿7krXNp*2=Όdg?鋊/' z)C,X}X&ͯw`%8@򕉂)%1pd7@8IM+B(0"VI]a Ssn@\Ђ9߇ΞkC":HvĊяˎ@ u DS PJENJ oeJyUDUͱ2Y#<6ơVOxr%f&!?$T=' GqbM`.4ce9&p?Wmc8}# 1\y]Z/rP7n㔇׎-$B\%uY*&X2tH!IOWc-r4޻PKOte0PKnZ!5Basic/Standard/CreateCharts.xmlYmo8, ?,+εXu~KCi>-hyDI%^q=Dr<3*{B@,ۮWG$Y@Uu~oj6#$|N7"bA4ڿPmu!rI}2j!2C'%Vk4w Œuk)7twԯ]#F `VH=mBSY͒2njCDx&DNh&9xu/NF [H/8) yD>\Į] j-o/ GI^˴0vb7Vk @߰Qᮈo.՜MDc1I° kcG.q3k(NqҺ` ?G1XdIX;J1=qKkKw9NЅޫwh V|S_])(@5?=5vߴw~GOOZ%coKo ϖgʺԎϷ9nIHV'}&o_ʟb9++ _8)σԚge)j3gli? 4F ='&T:KƇX,j=X}-:%YDKʅT+ 3 NZ|bWS" SȞfU6+u^>n5tq+!<]Qrh$Eվ92ų\FdɗG*1K$("rOK"$ ptXC( d}9 [ aĕq]M60b:u%|H$(*5v+̆,Vq ~|ܨ . p A-GE!_ BX "F0ĈahEuF_k,x#E#[͞& nm6iK URUY.V9Q A@F%BoUXl RcKml' )%fèG krP ,l6W5Y sk+͌4)|*xn.m{TЫUtwUF +5ʫ0 ;spܒ XU`HEu9^>w }2rbT)M)e nɡwN z}^.-V)Zb 4œ/kΙBKeǑJِTެ̿c;=0O jaM-0LؒB1I+F57`Dha2ҺpAAX@M5 umf2kd@ԛJuOҴ(Q=i-E4-^?s;89hujϧK_'hx q FW $ dD0"ESfNd||"Mjo<Ӑ 3SZ~7Pݻ&jYqq!k{:^Nos|xfNem| Q9"+燄lwn*oY1HhQkY/ց&!L~1:cWOPK [ PKnZ!5Basic/Standard/Utils.xmlVmo0 /*ڄM"|ا$dK,v8o@N4$;?sgs'3Ͼtz6AvYO/>۷7x1Z[N(yLr3|}ẋEF>uxsz12u'sv' mL Dy^ʴy~".)1P,XT]Nv`_I |On'F 4Ц<,r Ȃ=|+rO7`-gn9<U;*HmLW4{bҬ"+ 9SQYJH~D(KX(6oXWRX = y΂xeAQz5AJt"kN%fB(悪`үcBfVyL=; ePPIMTye2=i| ׊ZhO29S*)j]sLtL #r8ȎTpN QF0j1-nd^# RrUI:A7 K<<;e^BS qԚĂV71LF ?f$TU5y` 1 }H͹'*DT5(M(I5*qyIUT!|;v me:dKf^((DlZF 3yOݾ01VHu<0"Ttz݆ F |a.cٮ ZCfyq ^ w"@5,x6XӯstW*YSk/PK CJ PKnZ!5Basic/Standard/SymbolSize.xmlVYSH~~ŬR8EFdS[I\fBo4'!󘰬yBc¸5`<,>!fh.R uj}T F$N@f*29yNx#W+5Hf6Xq;L4Y}_n,< qɳI&|-6SrK !տZ8WH)I6k*X3-)-g9,dK-,+,Z*δКSQA걷.gr^ƫ^6/gTTj8:8h 4&YQi-6[uYK0^a"fR;ѓxL  R~KD.46Vv]Bۀc;V` [x.vI) |ԝ=کĶޙBu) qb3C 1h>$ήц`]!/J孇"d,};C\X{jJ:]vA-d65'AT04eJT6#@|(J vՌĞ󔑏.ӽtRZMb'xx.M+ pJb}*~p2f=f@Њ>Z0ٵij/_;Ͳr-O2o7Y4=n2p7 qbޤ0Lh*v0@`N)byLa*8-0Gn09’&Wc8~Ot8$5Vhi;ܐ2[DpPNuPDVi*L6v.FP8{W'ˬ%?ގTǿc@8 zõ@-7WvU!ގ[[gzcI{U7$+N->!ժ-hjN_ G(߬l;aN3nY@VKT->h9RU] .XsQLsRE[ j}H޼8 }hl `&U2n[VT&+ 3 !J*by}`JS<̊KurTi=,W3&Zx^7uɜ*U:%C Q6M [O/)O` 'ŒE{rrorv5'}( Kp<念j3Zldm=OeW<)EAdʼny'ƈt=iΕYs^r;@[6(=7pt!dY'#)ŕɒ`ǡ~u]w鬻Hj#*<0V7sBqn·/PKc4PKnZ!5Basic/Standard/Pie.xmlVmoFl?*s /i^`{ϻN¿̮m D>̘yB8 LT*.^_&?)UZe/y U & D%UΥ>LhT&%r [Ib; +GL$[N~ٻ\E&a|Um װ2%cejg,5Ϳx\ Riͤ;^^\%&nc$*u%C5m12s%E[9FshuUS+Y~.^R̰52L\}Ⱥ?凢نg$E'0 %9JbRxǰfM@Ff8q5}ߛma ʲ^a{.= o<(º=#w|Ӕ5tx1cJⰄMM E(PlcJafuІXhׇ¦it.iWf!%K[ZIr$(P.TJݨeDͻFztNvQ/@*aLã3 ew/enqjH|kzJa؇C[m-9jaS̲ >Õ(p7=(?7&Tx'Lmt c000WO!uLxseATv$(tY>8O4ƪd[u:ѮD8{-! "5y`"ܶj@D3S`LCGp6Q޽`Is f SjC"HI=xkm P<j_CS=N޳\Lk0:eHt]+O!ϪFr*+VA#TJ/ϫ|і}/-ۚkvhR)<ٯIfu걟nNfc²Y-@D$%Фgk""z?0FҾ0PK"yPKnZ!5Basic/Standard/script-lb.xmlO0+j,2a&&>[=5h{zm1 B@qǸx,Obo4էͼ~8< 'y{B*CuڷEN3Fxe_˺TҜNBsP]df%#ĸT2ٲ2%S0LԘ٤; ]u9@a?:{ @5>|+OcD? Ֆ #4,7^t5hK׽'yus`T=LPKĵPPKnZ!5Basic/Standard/Statistics.xmlU[O0~N~N4MSK@4)R%hQS6h4Mws~*ͤHS܉,X$Ktytv7@Ple,-3LQtKl!da+* 8"yw\2𗘐]/K1nK@;N{h Môa*8 K^D" n~r(Ÿ00fBdJ(hI-(0^SŨ>V=Sz?YTUD pW-Dd>r7apDVRHEfI!Z"e9 E:wY=ZE%| 9d zH$!-/"$!y)ꖄom4>Qu[) &'hAM_;Vc~qP; sW張au9Sd,p*j6rn^1Z.ȩ7Arݸ&uk!+ R"j=\90A,!ʧk]*9LFB\w5cMAv\Sp3Mھ}[{C0Vpt?^{3gOD5ݟ߅ݭwr0{|_,, -y*puߺ-^}ۻ̏ l)4IRTRgؿgn PKhl7PKnZ!5Basic/script-lc.xmleAo0 e4ʤIhE8fM ҰUAplTl 8 BŹ1N'/$eJkmGשU {8 JӢй %YWX)v D$zƳuwFDS̍!u7ؽJiy(XT*ƕ,xl[VH>2=ePKlRPKnZ!5 styles.xml\kS` DOvcII`glHyr$$V[򌦑n`"Ū"K69/Q=C[^XG|?wdGK")L1ۤ[=xCClAن{Cڔ7jE):\ Gs‡iJ<ڧ8t/,4HjV<rAh`ڮ뚪0+℆JLB93m`}RlN'HC8hD=t@ %\ ޥ_~ɝ(:?@sI TE`7SxBHa&2ױ>G8%qWW N6Єm >KZT]FXSnZ,1?QB3FbɃ']le#w &Ǻ`ڪk%13?DsC!-塲 PR̴vEa'a4*" m I1vv+AtOϭ$a3Nhx0 \dT9H*E@tbR՝31 >4G br>b`Y`X 9TyXe۞lBч# TOz}!R۳TIrAX$E6\nW!|i] ɦK !T#d\FU/v>9, rEFöd4OAі ',2ȇ$a|(' 6[pI @TDyܖDfD l+aA؇rŭR"PE yXΈyτACT.5GB"%N?r l'K 9.'LP j niSqnj/T>ڦr/I(H,=T;h.%IȫzIǝV'溪eK}|,tZ:^ޕF*ghMщ@\$W53mA;aQ92Tۤq?/; AqKD$6V?&jv[/ ra!A=6 '^8_Ƌl[$qnlǁ$ftpŚpAdQ況l~c;0(3Nwfj2K] a?ލ-la|?zUUm|bTӇpfیᎣcmzX nVoy/oP@ )W-)U{! ϐC-hpE|L0Hn_0/!KE;g'=0d/| _ (ܹ¥Gs*^MЍ,-oC%r.%dXΩ(I̗#\bƷǐҸ[1G%=\mݫkyOUJ˪FյL;U_'pu=W#:lv-:?oo6 tIq7.)VLb"5btP&TǤ=Mb _Å# yk(kI-iZ1=[m^$0 Yp8D:okiz9uq"/קCOe !rD%ϱwHd/csG(ol'#MqB 8!D LL F*K :/eJ'B}vr~ocθ`fWAcЕD!W+S4ݬ%#13!8W<#[oz[8Ky$8db:7MYi"]H.۹:k?dE/{Sm|p.1Z ˽[FVe| K9[ͬd6t9D/&js흥~2nw!c}]nw% WK8`# bD5;#PUj\Rwr3_v0=<<ܛƬ%aP e3Q^ M1'8Բ'ivZ|R[Æ\W^Ƅ"[_S' eI{^ }*" *3UTfeqge%BP3}Ҳֆ嚖-/3+Zn^nlw㸅m8eAudeF3۳loMvPK OOo-dev/2.0$Linux OpenOffice.org_project/680m172$Build-9037$CWS-chart2mst31999-07-30T11:11:322006-09-01T13:19:29de-DE0PT0SPKnZ!5Thumbnails/thumbnail.png sb``p ҥ@ H}WV```ltq #'ρ'ps1ͼk{{Ʀ'(72hXZ'}! 0f<]\9%4PKzJ=kPKnZ!5 settings.xmlZ[s:~?p{k/u[ j!a _螖g:{싕d}ke%En~]|2#JJJ,@bSqIkʏ?7t4B6,:]H)B)D^KHx򢰋ԃd-V|;T=cD%e"WT ΂ec5뺺]O)񮪢oUQJ( "cʴ\\+'+#߹z囕 膾9Y=M+)Req`k&2]đ hSOY'J"w~MuA1yuu7=DF.Nq:qU0ؼSKybaĬcYl }/Uw88e ʑ){AWJ-#Lw]~ @3Do2Np|moiy L=q{O _p;%G!#=.qd#{|G{Q8Ǒ??Gu㗅PBU6[%VUJ)u'v㨫+cV[/S&4Tdu?m0LbGs^2')Nš2@QM)Ac^vYд ^\I{5PH9 l-\bނ`^60YܬtЄ\2-7·|A3|iNoo-=aWRf ;pҒ?ƍ,nd>T=|Cru%zyNG{;` 2U ܯφc/Wj^-mmj0߫5uͨ ;ߩb-WGͻZn2&,@"7?.755]]>zVf6i.=3̾~IAoĠH$tv)6OU@ӹUxu lm7CoutҹmV--or;7'TJy=/:eC6 VL%FsE ] >~)|0H<$._cDd~*o׻iRcy\[`C8n/bb+DfQ ]o[8C̛C rg Ll);8VjһgPKo&PKnZ!5META-INF/manifest.xmlMn09ĦB$ v@Q#vO_*5Hzp$Q{ז|ؖ/[yYYHqPO2Ex'-`C\Us}37Ix0 z-+:hKJR)^]_ꏈC@IdHTAԖ1ϫl*$%d䑗JO e_or) >z2\_/~Ou|w__?}q珇1T8Ox'< 4y|1;&@^LXqY5Ř.ρk3=޷>m\)I~U)ky/ D'.9^﫞 ,+wާkć>,Jyκҹez|Һ$ .6 V:0X_^m8Ox'< 8^6[x4ԠJa(js}cE]=⇆CN;<8e+9O +,33|cxjŒ CCkuc-e;Jq.5 s_PӟbNs~aQ,vخ,Ahgg2f$58l퓷]R gx܌4Q:s^ L4vE$A 8zc% yxy@=WtsEIcWٺ/j1b)?`]gJƝꌼ~HηG`y5=u5bI7ЈUbuF,8I3g0Ӻ3d8!Z0Ti6<^k=noxP&qnX+kYW&v_MhCK#x=: ok&V`Hv [eˬӾy^Ƀ*)'< piPWP? H)xsuO u)$}R;Ku1!2t]}wޟZur\cІi ;-Ҕy7u@."N.2:k2^,\Sm'upb^;ƒ2E_[ḱ3bfb}Zu]V3*y`_MZ;p ї?PK}t.brUA嶙`Lhd`< `8s]WyReKǜ(񃦰FC|WƩЭc΋"Ào.,ÐbSJni3CeIfWr<O7qy3݈xQ8@j|esfguHyyxʭUarTgKvf<ԓ3!-O#ig8~~^Qb2byP=b`e٤4p%:!Vr7A"t>;~ #"a_kMWfkxWXX8'Sr1ܬʈԸ{$jm@v:3)7 :6J+n{mQTYGtOf8VaF"PTs~A<>sb+It#^k]TQ˘ONɼIZꄷeu[3PCr(0YCXTQt_ X 䮫>v\0`X0VBG y0Yp1{0c*;Hv+ɤXL@?62$ؙIcD[!|مs`dd7:nvLʚzXҾle4m3K^-c=nA''< Ox'< Ox'< Ox'< Ox'< Ox'< Ox'< Ox'< Ox'< Ox'< Ox'< Ox'< Ox'< \ #IENDB`PKơOOConfigurations2/toolpanel/PKơOOConfigurations2/menubar/PKơOOConfigurations2/statusbar/PKơOOConfigurations2/floater/PKơOOConfigurations2/toolbar/PKơOOConfigurations2/images/Bitmaps/PKơOOConfigurations2/progressbar/PKơOOConfigurations2/popupmenu/PKơOOConfigurations2/accelerator/PKơOO content.xmlZ_o6ߧԢ؀ȲIC`ݺd+#2JHʎ_ϱ=m0`(}EIdɕ<ǻojL1CtM.HWGl<&.x̍JeoC1ԡp bt,a&5(r[zE9m-0%moIݴ0=fm/(>fm DH ;Jۡ92l6}9<<jӄsmL2&lo%jO!qpy v5X L)~ av'γ*}}las &gA[[*(ˡ*}nwJ'E#΂c*C!z&kTҝ-- EdڄFOl#eq ˱Md@Kf>ZVӷ!Ϟj|8b=])tmœIE~ޟ,=]t0]9Q$DAIC1){ʴ4 =4;KjIϢAA7xpNJt捫+/꽭hjRKqg@a c1raёy ظD00 g@|h@lzmƅqt|uvQ\1>~v wx~Boemu![^sQghU9AԸ p8,Sbx()ʊSy'զnE$Фܒ7P\] ]4REaSVAf*sləÍ9ǡ;с E7 ۔QR!L5P1la¸/9Ҭ5nmyAEEZeP哄w1J0KE@Bj!<7Q^/:!Ln( rx܅j^XyۉJDy =_}M߼a(h/V%Wkc{ SQ"՛ߢͬ+eL ,|PVmh3[pxpj=A:9K!o؍ShJa|~  pusK>Fq^*2`kE#GkhMtax2Ñ C[f?t=ljt}uT6fVi|蔖8)}(j~;z{Gkp{{O]`ᔮي'/ )d`9ft(g X|ErQx]$OC,Y@ M?S [ˣ+[ Xhh=k,D,SDSH{Zfg#v܇aـ$oPK-;PKơOO styles.xmlZn6S*P@dINn],vH̕]ϱ]b0`g-vHdItm- ;rS,1/&n8\gILܗ/lF"uJz1qo0MqSysۛ߼~Jq?ïSEs01'юmiB]%yֵczNm Nu^fWQɩ16HhR:$DDІd=oOC" 1Jo0JDu, Eom}:yM5 v)4bEkxD`Q}dybgm$u#l;aVdXxNA=cB7v2 *-F-ia{2'(gewnKrAx0蕜Q T0)&Q$ ??*4uuE]\HQaEXmku47m@}9==<<<7%%FemC/&r8tlK S44* FT-[Mq*KDv؈ytI6ؚOo ϷiFڰ+9ifA| ‘^N`B;18ZYq7FQpgooxWot[xi2Ww:U4e{a7PKZӰ 5!PKơOO manifest.rdf͓n0^ҰômQ! RL8- \{c؛$[sY#ߗwA6=E.zTу =+AE.pT2㧄󭝎lbl?CF')w4ez"yA#&?JrR._< }39hR!n+yxc0xE<8)-`"Hu[,魉V ;^HXFtdl=M7_>QYaV'9z}5 Tu9>o*HoJcu$ x.k)'vypj+! [ٮBtxe=#d-Q'Y_=t<|0Vg]dz\} te3R0ݩcNnIӲ*=493Dzw\dNJa7F&%:Zh9x5MJZƬO mzh)64g`l9:gp ~$TwZWhʟd^7~krM6 xbJz<#ֹc ݣ8%8~ M4t2,eh~J& [Bsr<\ :-Jx"~[cZ\яX[r*wHO^tPKlՓ*-PKơOOMETA-INF/manifest.xmlAn E9Ŷ2YU(Nz  Qrb+N\Ub);`|fw]udž}wV^[}?n DrZT۶a9*$Q$@/GnfWi~s=wϹH1` *25{2I*qk%ޫ;@Y#u1{Sя.罺kk #!=R&+`KjJKVWVŠT6SeQ&djո$v,cXDdfkj<$>3u ;Lգ񘜐Jb&ʾA&bbV Q2&*~_AzO}ٻn[p=Ma*iW3U?UFE?$a2nz]Nf # -*b,~)nAJ,޿O,bjhNmY#QZAhK(eR0E;:& K](31^WȚjD<@m_ۄn~}ꐴ }7Zv;n+Nг0HwR,4MKx!=#=}"zHӉ@ m0z@^ 9ùaCQ]#!́BڜA~kN<΋>g87@?|o~o`xb|}w?=t_Ǯ"VbDm M'=<ȡ~y`Ǐ|s¢Vefb'nҢ4䛕=l}_~ϡ>M2 x{{x/D r2NGr(pȡ?LJ9ԑQ%+%i,zȮ:yWJ%r# /:LnsHd5r"U.12+V|TaClh1Y%J]BeoOHQ^b)Ձrzv9h{%;S!4֋}Sw2s١ .Z)X]jNi DpB~rs"`ۨXEvۘyZY$-ސ"Z]FUl_ ^(,̎ZȮbDn/ӧbp Z'xҝ+[w"pifdE2{O-^%3bQ9;'O_]{盷g޸E7gޞy[o 'k'Nb\Jn-@r$؄朚=?߼vb{(S8|/gY&^^Fs `9ъs'5'8^PY>{xʾx:unKz']m?F߮IklOa>􅤃 ͻ$D~Cdn:qaExM20Nj^6662mF7S  + mrS  %3d*wdz$&s7Q#.".O3W!%dzVPtWKϰZƲm Mt:'HEie+J^]dѽvORy)97]7]s+hs{qhNca=х|# ~?t&AOQi& AZO!K[VTm4;g_I:C]ӓQ|..|MaGy_.=H; ;KSķwx7]&ɜuDܕײ?gX) Pa]H[zaRWOSm& #R rzHG9I5KDŽt (dנA6_ou-&l Ic0F }^oY6ǵ9H,&`Ҕ($Qyl^L|f. [Ly۸m÷ `s B[*ⷣb+`z@C#dg7PjA92l$= iNV?ʳ"Iq9Ȣ6+̺X,&r#5Ucfvn4*#+ d;f98idZ a2\XP8Sρ|9gE4ZAgg;'9Kt~~VM>y d9(c+@i1_U<&A,c-BFxy |wVDs%|5p>@.l.>Q \"`'qeġk-lM^Oil9gwksrQЌH6~VlQ9s+%(W~dzlz+ Y c62>{&k5ZȾzW-P*굀bB{!ۜ JY+q|`pT]oU|>xzxbC"9ρZ ?'k[o)?KR@!fF9Xc+T[(EIdIVqs*>y~3Nh86C]zc;|~ NG.urh(ꐏtl,Q (|$pQtQ"Kp[':--ТI{ N2hK,q:%5 BIx36gBD#^,e=>>hE1,ױ0nwv`'qu8`5HF s@sebckήWfgXqϻϟ>.'_?/n3#3<1ޤ uPxWxYȎ\T jr Fo\v8l_gC\R*IhFe҂#)nK"`Ə)!@V +6(8[>[ڨh,P0T<#{%Y^T3"xBMn%6-6ڽx{Xu]Js (ZA+g6vsa e׏(C+ S:@*X J}A\zO _SIumbpk@p7:8@v1 oĂŸUp̊-EOQ싒M=hr[:m%& 6:5gǚn+/ZW}i(̕Daa/@|zR`z*Ӄ[`tɗ1iٚ193CgYecE'sۜ`@93Ћ!0ck`KB2P=s J,r##pۃRz@B9r \X7zQ,Jw&.L(΋[$. tz4G~'TFQqJ. !&ߨ2b$WuVUIl%4r!Iv.Z`ItY~ kRC}|)"]ca"L Pwz0:LW;tMcu1&cs|.73YzϨ ORdb8°IJLEڛK)=vz_Zc]*TIAWβ)Yqzޭ# N0C#ӪN~b%H <˚$v"֠߃[%7q/nٴ常E]Uݣz{߶N'29nN[rQ/OR; h:5*@dU7"+2 MRnh @.גmMڸ5m8*f ިwV{xa7c;X_IG2M4J1bJv-|+%nnvh|UPK/_(PKfROmeta.xml[0+v_eYBoPزo&ZE I}} I؇`cTͯǨ!Ll퍭42nO,]Ip ?R ~ ~Y9yKM](hE?8bK:Bp6hii K2a4eZyU릭/_Y\|͊+J׍\mw<t_o`nZK@AY'l2"ŭl1ޚއaF?PKm ;PKfRO styles.xmlZn6S*P@dINn],vH̕]ϱ]b0`g-vHdItm- ;rS,1/&n8\gILܗ/lF"uJz1qo0MqSysۛ߼~Jq?ïSEs01'юmiB]%yֵczNm Nu^fWQɩ16HhR:$DDІd=oOC" 1Jo0JDu, Eom}:yM5 v)4bEkxD`Q}dybgm$u#l;aVdXxNA=cB7v2 *-F-ia{2'(gewnKrAx0蕜Q T0)&Q$ ??*4uuE]\HQaEXmku47m@}9==<<<7%%FemC/&r8tlK S44* FT-[Mq*KDv؈ytI6ؚOo ϷiFڰ+9ifA| ‘^  (c N-AFt7w0߻#Uշu }4 ; ղ=0PKx"5!PKfRO manifest.rdf͓n0R{>u,C#;/#2Djs1"6(ؤԝL=:Ɗ*rZ+)K}t-J1Ds?)˜Й5}Ӱ$ɚTKy9gl2{=xAp*΍o$=8>~"T>U&Nё/CF\4ǝ#Ƅ>gهO?BmRLRKJۚQ: 4@@?!qC*RM]po\b6>!wDBGD3ѝ..MN[ntȄs%2 ISfcRq`9hXV>5bE|J6KFg{z݅7ʑ02q0p~ Iib,l: P Nw<&,te_OT8I\"|Ȣʼ=T=o {A;Ǥ V>6FEߢ&ZG[6vHo䧱n<^[յiT4xv{`e [ٮ`!D_:mU"nsT*7K3MWYڮYduڊU0ݫkN,Zi| b<493qw\lN䰉#]C-Qj[Ĝ<DUGru`h-c&SC[[D64g`l9J:~x@HZWh*7k2/ p&vO@cȋ9;@/SQ ~g/4tmb7GxЏdUɤvd,|.+͵Ӣ'b_w;WF8 '#M$y*&=VPK !q'PKfROMETA-INF/manifest.xmlAn E9Ŷ2YU(Nz  Qrb+N\Ub);`|fw]udž}wV^[}?n DrZT۶a9*$Q$@/GnfWiLY slZr7-.r`z͗lIT]lXYޥGpjg3f5ǥ%i3ӖZ;)7S>_?||ߞ +WPz8瑭 ݩgγ6s6VtL=9̔8+[wu+ O+#ǺxW/Ӫ8 8_8LATM˺>.q2T,|^C7[N>uRݥnb:M񪠨vsSѤcD_ֵ{sTד6H|_ ~S˷vLL+Y﹵.JvGtk!_JJv2BtbJ?Τ-ULY&Er]'zR1zOl1ɢh:2};Gvߪ:[bQ"}3[LicLrjosmyg撐띹z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇z衇zΓIENDB`PKOOConfigurations2/toolpanel/PKOOConfigurations2/menubar/PKOOConfigurations2/statusbar/PKOOConfigurations2/floater/PKOOConfigurations2/toolbar/PKOOConfigurations2/images/Bitmaps/PKOOConfigurations2/progressbar/PKOOConfigurations2/popupmenu/PKOOConfigurations2/accelerator/PKOO content.xmlZnF)Z -Nbr;H(.r]Kr%]b*xՖ⭹$M]gP>ή+ܳ3N$vw-[zEMN /rhؚ\2 Uӓ]1- +p֝'1~ Bҡk= m(#p)ں>팩ZO wlSIUAٟ|ƞ.x`N L̩if0ePZ'RƬH@2@ҳĩHԩDgqлB eSl߿RmCn2. b6е@3#[v8<5\6=2_s)6(u]̇(aYM=283./ӧˋ #C_kɐgiH/:_6޴Z򊝳&CD qzC)BV%H .4)CxDsmfM =ֈeppwxB`*zxK|D/(vlK]-]нeq'c|lAJoE&1v[)Q*JZfk{sY4!k04Bh%20 gR5=@2]hgS`{$28 ӛ`m~l V4I-!lǛ lDQ*,yÖv s+AK죔ʥ=Uo EOMMp"'#rKNV;㦜]Xa=)NVsm,@Q|d\ta<p[hhw*JS \bE@>!0"@UMf# JjYda7ko< `KG ߁?+WV 2{Z#Q2G))|6*S% b-%LV1%A\,xΑ]V1Uj -Fʙ'B!Nd󚡕' `UY!3TJ<5KyWhМ5vg^[ޠϛـC2ձ삮Ӓ8a86@ECRψ4(9^6`a*SLi^ ۗkmkqq13n4LQo1O*,$&eI){͋.67xWmx:5I`<ыQ&^.LLG]4utW݋"^SѿMD6(anc`M5[l]up ^ V^w\yo/Mڿg)|eW2X_O??PK.0PKOOmeta.xmlO0ݫ1 XJ[mRo'ĭcGl}@D{o~ AE/`4B4NP!u[_xw$& =>oުKfq11ϙ9-fѨ*Vhr:SZ ;%8CGhL 51F>$x g3'l|_$ޣhSTϯ;Ĩ Ork9dxORw߫fGhc'iInZz(-Jq=L[rS?tgɚ~`itr_sl2źՂҬX%WnZ%ҘDP \Z׬lUX{1GAVӾBEJZ^LfD; I b$E73Kò|J~?PKq<PKOO styles.xmlZ[o6~߯hȒfA/[/KaD\)Qh;c;=  Y;$EZ$WmؖItã:K ²Yb%/h!H1)΄W b'gc R3b,1qfUX%/W>}%ƋkV*wѪ/BL3֗ތyKs$Ȇd&\|j0h4ժ58|Bő) ?XIlդla;4HFVs . kehx:SzKe/H;{qr+%PE*?c̚*fWද+VymGF6,m B^ʒ7h.s3.!3[u.RڽU媁&<[`Ξ6$xSe?ڿ2/1v @x͖'8Ems̉\BTkC;,ϐZc%f]jØɠX>pv~Q쉶Tx5O*7K=tN9cpjPGgɎ~FN{:s'] SB/& ni}9u._*y9Ou+IĜDΣU udiCn9mS-8AyhszHJNABs"ש$)'"6D S!{ QQ|Vv&cvY-zkkygK+R\c#}؜!^ %mqu ƃ_98pwZެZiIwUghA˛\NA/”&y9 #*") J;\.G%&H,bR R8[MFߖ 6ccd@X"8.~n`JAYgKR`#`ͯl6ˁbZoJKOU[7=WfQKjYrʧdO/& ȴ2phSb( y|hi]Vj"Wuڷe]Mzl:v1jd+`+U5g+qCȴemvmUٔUrg6 kIVuRۍD_.[7qwbK9-SJNlަnٙӘ}F 83hGw+?/a#fH% z`k?D*T?jFRi py,G^x;  :͢%h-zoaNaݿW&c~A|QAZۻPKJ) 5!PKOO manifest.rdf͓n0O(ߋ~.* + 7oj;ۯ>l?rC'rڣ$DV߬&ŭ~1dbx+pZxK8 Oq7-Xݱ99Dl(QFx>Fa-H_4=sA~Ksbx =8ƼpǺ1)C\D4E%|rzhC]⡋RƂzg;8B?~o4+GKkS< |o9l%e3q{:):#GcCm.j0aDMfqR A,aLh?"ciЁs`df b.~TI@ͅ.pa +\X!cVHN %\(B JPBf4=ѩT±Wi(&O.ߡز1h?K?BYAgB:ԋu]X=m(-C4 B.Omsb6t[aA!Ju-N"ok SQBw(5N >_5M4t܏6,t}B/XVIK{{p(x>+1ݠ'bw=v=˥「:&/KסPK(P-PKOOMETA-INF/manifest.xmlAn E9Ŷ2YU(Nz  Qrb+N\Ub);`|fw]udž}wV^[}?n DrZT۶a9*$Q$@/GnfWi 1; use File::Basename 'dirname'; use Spreadsheet::ReadSXC; my $d = dirname($0); my $sxc_file = "$d/t.sxc"; open my $fh, '<', $sxc_file or die "Couldn't read '$sxc_file': $!"; binmode $fh; my $workbook_ref_from_fh = Spreadsheet::ReadSXC::read_sxc_fh($fh, { StrictErrors => 1 }); my $workbook_ref = Spreadsheet::ReadSXC::read_sxc($sxc_file); is_deeply $workbook_ref_from_fh, $workbook_ref, "Reading from FH is the same as reading from a file"; Spreadsheet-ReadSXC-0.38/META.yml0000644000175000017500000000210014456566534015772 0ustar corioncorion--- abstract: 'Extract OpenOffice 1.x spreadsheet data' author: - 'Max Maischein ' build_requires: Data::Dumper: '0' ExtUtils::MakeMaker: '0' File::Basename: '0' File::Temp: '0' Test::More: '0' configure_requires: ExtUtils::MakeMaker: '0' dynamic_config: 0 generated_by: 'ExtUtils::MakeMaker version 7.44, CPAN::Meta::Converter version 2.150010' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: '1.4' name: Spreadsheet-ReadSXC no_index: directory: - t - inc requires: Archive::Zip: '1.34' Carp: '0' Filter::signatures: '0.16' Moo: '2' PerlIO::gzip: '0' PerlX::Maybe: '0' Scalar::Util: '0' Storable: '0' XML::Twig: '3.50' XML::Twig::XPath: '0' XML::XPath: '0' XML::XPathEngine: '0' perl: '5.010' resources: bugtracker: https://github.com/Corion/Spreadsheet-ReadSXC/issues license: https://dev.perl.org/licenses/ repository: git://github.com/Corion/Spreadsheet-ReadSXC.git version: '0.38' x_serialization_backend: 'CPAN::Meta::YAML version 0.018' x_static_install: 1 Spreadsheet-ReadSXC-0.38/lib/0000755000175000017500000000000014456566534015276 5ustar corioncorionSpreadsheet-ReadSXC-0.38/lib/Spreadsheet/0000755000175000017500000000000014456566534017545 5ustar corioncorionSpreadsheet-ReadSXC-0.38/lib/Spreadsheet/ReadSXC.pm0000644000175000017500000003514214456566532021337 0ustar corioncorionpackage Spreadsheet::ReadSXC; use 5.006; use strict; use warnings; use Exporter 'import'; our @EXPORT_OK = qw(read_sxc read_sxc_fh read_xml_file read_xml_string); our $VERSION = '0.38'; use Archive::Zip ':ERROR_CODES'; use Carp qw(croak); use Spreadsheet::ParseODS; use PerlX::Maybe; our @CARP_NOT = qw(Spreadsheet::ParseODS); sub zip_error_handler {} sub read_sxc ($;$) { my ($sxc_file, $options_ref) = @_; #if( !$options_ref->{StrictErrors}) { # -f $sxc_file && -s _ or return undef; #}; #open my $fh, '<', $sxc_file # or croak "Couldn't open '$sxc_file': $!"; #read_sxc_fh( $fh, $options_ref ); _parse_xml( {}, $options_ref, $sxc_file ); } sub read_sxc_fh { my( $stream, $options_ref ) = @_; _parse_xml( {}, $options_ref, $stream ); } sub read_xml_file ($;$) { my ($xml_file, $options_ref) = @_; if( !$options_ref->{StrictErrors}) { -f $xml_file && -s _ or return undef; }; _parse_xml({ method => 'parsefile', type => 'xml' }, $options_ref, $xml_file); } sub read_xml_string ($;$) { my ($xml_string, $options_ref) = @_; _parse_xml( { type => 'xml' }, $options_ref, \$xml_string ); } sub _parse_xml { my ($internal_options, $options_ref, $xml_thing) = @_; $options_ref ||= {}; my $type; if( $internal_options->{ type } ) { $type = $internal_options->{ type }; }; my $line_sep = $options_ref->{ReplaceNewlineWith} || ""; my $workbook; my $ok = eval { $workbook = Spreadsheet::ParseODS->new( line_separator => $line_sep, #%$options_ref, )->parse( $xml_thing, maybe inputtype => $type ); 1; }; if( my $err = $@ and $options_ref->{ StrictErrors } ) { die "$@\n" }; return unless $workbook; # Cut off trailing columns if any # Down-convert from ::Cell to raw values, depending on the options # This conversion is likely best done in an immediate callback to # speed up things my $res = {}; for my $s ($workbook->worksheets) { my $rs = $res->{ $s->label } = []; for my $r ($s->row_min..$s->row_max) { if( $options_ref->{DropHiddenRows} and $s->is_row_hidden( $r ) ) { next; }; my $rowref; for my $c ($s->col_min..$s->col_max) { # Depending on what type we want, use ->value or ->unformatted # depending on $options_ref->{ ... } if( ! $rowref ) { push @$rs, ($rowref = []); }; my $cell = $s->get_cell( $r,$c ); if( $options_ref->{DropHiddenColumns} and $s->is_col_hidden($c)) { next; }; my ($method,$type) = ('value',$cell->type); $type ||= ''; if( $options_ref->{StandardCurrency} and $type =~ qr/^(float|currency|percentage)/) { $method = 'unformatted'; }; if( $options_ref->{StandardDate} and $type =~ qr/^(date)/) { $method = 'unformatted'; }; if( $options_ref->{StandardTime} and $type =~ qr/^(time)/) { $method = 'unformatted'; }; push @$rowref, $s->get_cell( $r,$c )->$method; } } }; if ( $options_ref->{OrderBySheet} ) { return [ map { $res->{ $_->{label} } } $workbook->worksheets ] } else { return $res } } 1; __END__ =head1 NAME Spreadsheet::ReadSXC - Extract OpenOffice 1.x spreadsheet data =head1 NOTICE This is a legacy API wrapper. Most likely you want to look at L, which implements an API more compatible with L. That module is also the backend for this API. =head1 SYNOPSIS use Spreadsheet::ReadSXC qw(read_sxc); my $workbook_ref = read_sxc("/path/to/file.sxc"); # Alternatively, unpack the .sxc file yourself and pass content.xml use Spreadsheet::ReadSXC qw(read_xml_file); my $workbook_ref = read_xml_file("/path/to/content.xml"); # Alternatively, pass the XML string directly use Spreadsheet::ReadSXC qw(read_xml_string); use Archive::Zip; my $zip = Archive::Zip->new("/path/to/file.sxc"); my $content = $zip->contents('content.xml'); my $workbook_ref = read_xml_string($content); # Control the output through a hash of options (below are the defaults): my %options = ( ReplaceNewlineWith => "", IncludeCoveredCells => 0, DropHiddenRows => 0, DropHiddenColumns => 0, NoTruncate => 0, StandardCurrency => 0, StandardDate => 0, StandardTime => 0, OrderBySheet => 0, StrictErrors => 0, ); my $workbook_ref = read_sxc("/path/to/file.sxc", \%options ); # Iterate over every worksheet, row, and cell: use Encode 'decode'; foreach ( sort keys %$workbook_ref ) { print "Worksheet ", $_, " contains ", $#{$$workbook_ref{$_}} + 1, " row(s):\n"; foreach ( @{$$workbook_ref{$_}} ) { foreach ( map { defined $_ ? $_ : '' } @{$_} ) { my $str = decode('UTF-8', $_); print " '$str'"; } print "\n"; } } # Cell D2 of worksheet "Sheet1" $cell = $$workbook_ref{"Sheet1"}[1][3]; # Row 1 of worksheet "Sheet1": @row = @{$$workbook_ref{"Sheet1"}[0]}; # Worksheet "Sheet1": @sheet = @{$$workbook_ref{"Sheet1"}}; =head1 DESCRIPTION Spreadsheet::ReadSXC extracts data from OpenOffice 1.x spreadsheet files (.sxc). It exports the function read_sxc() which takes a filename and an optional reference to a hash of options as arguments and returns a reference to a hash of references to two-dimensional arrays. The hash keys correspond to the names of worksheets in the OpenOffice workbook. The two-dimensional arrays correspond to rows and cells in the respective spreadsheets. If you don't like this because the order of sheets is not preserved in a hash, read on. The 'OrderBySheet' option provides an array of hashes instead. If you prefer to unpack the .sxc file yourself, you can use the function read_xml_file() instead and pass the path to content.xml as an argument. Or you can extract the XML string from content.xml and pass the string to the function read_xml_string(). Both functions also take a reference to a hash of options as an optional second argument. Spreadsheet::ReadSXC uses XML::Twig to parse the XML contained in .sxc files. Only the contents of text:p elements are returned, not the actual values of table:value attributes. For example, a cell might have a table:value-type attribute of "currency", a table:value attribute of "-1500.99" and a table:currency attribute of "USD". The text:p element would contain "-$1,500.99". This is the string which is returned by the read_sxc() function, not the value of -1500.99. Spreadsheet::ReadSXC was written with data import into an SQL database in mind. Therefore empty spreadsheet cells correspond to undef values in array rows. The example code above shows how to replace undef values with empty strings. If the .sxc file contains an empty spreadsheet its hash element will point to an empty array (unless you use the 'NoTruncate' option in which case it will point to an array of an array containing one undefined element). OpenOffice uses UTF-8 encoding. It depends on your environment how the data returned by the XML Parser is best handled: use Unicode::String qw(latin1 utf8); $unicode_string = utf8($$workbook_ref{"Sheet1"}[0][0])->as_string; # this will not work for characters outside ISO-8859-1: $latin1_string = utf8($$workbook_ref{"Sheet1"}[0][0])->latin1; Of course there are other modules than Unicode::String on CPAN that handle conversion between encodings. It's your choice. Table rows in .sxc files may have a "table:number-rows-repeated" attribute, which is often used for consecutive empty rows. When you format whole rows and/or columns in OpenOffice, it sets the numbers of rows in a worksheet to 32,000 and the number of columns to 256, even if only a few lower-numbered rows and cells actually contain data. Spreadsheet::ReadSXC truncates such sheets so that there are no empty rows after the last row containing data and no empty columns after the last column containing data (unless you use the 'NoTruncate' option). Still it is perfectly legal for an .sxc file to apply the "table:number-rows-repeated" attribute to rows that actually contain data (although I have only been able to produce such files manually, not through OpenOffice itself). To save on memory usage in these cases, Spreadsheet::ReadSXC does not copy rows by value, but by reference (remember that multi-dimensional arrays in Perl are really arrays of references to arrays). Therefore, if you change a value in one row, it is possible that you find the corresponding value in the next row changed, too: $$workbook_ref{"Sheet1"}[0][0] = 'new string'; print $$workbook_ref{"Sheet1"}[1][0]; As of version 0.20 the references returned by read_sxc() et al. remain valid after subsequent calls to the same function. In earlier versions, calling read_sxc() with a different file as the argument would change the data referenced by the original return value, so you had to derefence it before making another call. Thanks to H. Merijn Brand for fixing this. =head1 OPTIONS =over 4 =item StrictErrors Turn on error reporting by using C. Otherwise, functions silently return C when errors are encountered. =item ReplaceNewlineWith By default, newlines within cells are ignored and all lines in a cell are concatenated to a single string which does not contain a newline. To keep the newline characters, use the following key/value pair in your hash of options: ReplaceNewlineWith => "\n" However, you may replace newlines with any string you like. =item IncludeCoveredCells By default, the content of cells that are covered by other cells is ignored because you wouldn't see it in OpenOffice unless you unmerge the merged cells. To include covered cells in the data structure which is returned by parse_sxc(), use the following key/value pair in your hash of options: IncludeCoveredCells => 1 =item DropHiddenRows By default, hidden rows are included in the data structure returned by parse_sxc(). To drop those rows, use the following key/value pair in your hash of options: DropHiddenRows => 1 =item DropHiddenColumns By default, hidden columns are included in the data structure returned by parse_sxc(). To drop those rows, use the following key/value pair in your hash of options: DropHiddenColumns => 1 =item NoTruncate By default, the two-dimensional arrays that contain the data within each worksheet are truncated to get rid of empty rows below the last row containing data and empty columns beyond the last column containing data. If you prefer to keep those rows and columns, use the following key/value pair in your hash of options: NoTruncate => 1 =item StandardCurrency By default, cells are returned as formatted. If you prefer to obtain the value as contained in the table:value attribute, use the following key/value pair in your hash of options: StandardCurrency => 1 =item StandardDate By default, date cells are returned as formatted. If you prefer to obtain the date value as contained in the table:date-value attribute, use the following key/value pair in your hash of options: StandardDate => 1 =item StandardTime By default, time cells are returned as formatted. If you prefer to obtain the time value as contained in the table:time-value attribute, use the following key/value pair in your hash of options: StandardTime => 1 These options are a first step on the way to a different approach at reading data from .sxc files. There should be more options to read in values instead of the strings OpenOffice displays. It should give more flexibility in working with the data obtained from OpenOffice spreadsheets. 'float' and 'percentage' values could be next. 'currency' is less obvious, though, as we need to consider both its value and the 'table:currency' attribute. Formulas and array formulas are yet another issue. I probably won't deal with this until I've given this module an object-oriented interface. =item OrderBySheet The disadvantage of storing worksheets by name in a hash is that the order of sheets is lost. If you prefer not to obtain such a hash, but an array of worksheets insted, use the following key/value pair in your hash of options: OrderBySheet => 1 Thus the read_sxc function will return an array of hashes, each of which will have two keys, "label" and "data". The value of "label" is the name of the sheet. The value of data is a reference to a two-dimensional array containing rows and columns of the worksheet: my $worksheets_ref = read_sxc("/path/to/file.sxc"); my $name_of_first_sheet = $$worksheets_ref[0]{label}; my $first_cell_of_first_sheet = $$worksheets_ref[0]{data}[0][0]; =back =head1 FUNCTIONS =head2 read_sxc my $workbook_ref = read_sxc("/path/to/file.sxc"); Reads an SXC or ODS file given a filename and returns the worksheets as a data structure. =head2 read_sxc_fh open my $fh = 'example.ods'; my $sheet = read_sxc_fh( $fh ); Reads an SXC or ODS file given a filehandle and returns the worksheets as a data structure. =head2 read_xml_file my $workbook_ref = read_xml_file("/path/to/content.xml"); Reads an XML file from a SXC or ODS file returns the worksheets as a data structure. =head2 read_xml_string Parses an XML string and eturns the worksheets as a data structure. =head1 Reading an SXC file from an URL use HTTP::Tiny; use Spreadsheet::Read; # Fetch data and return a filehandle to that data sub fetch_url { my( $url ) = @_; my $ua = HTTP::Tiny->new; my $res = $ua->get( $url ); open my $fh, '<', \$res->{content}; return $fh } my $fh = fetch_url('http://example.com/example.ods'); my $sheet = read_sxc_fh( $fh ); =head1 BUG TRACKER Please report bugs in this module via the Github bug queue at L =head1 SEE ALSO L has extensive documentation of the OpenOffice 1.x XML file format (soon to be replaced by the OASIS file format (ODS), see L). =head1 AUTHOR Christoph Terhechte, Eterhechte@cpan.orgE =head1 MAINTAINER Max Maischein, L =head1 COPYRIGHT AND LICENSE Copyright 2005-2019 by Christoph Terhechte Copyright 2019-2023 by Max Maischein This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut Spreadsheet-ReadSXC-0.38/lib/Spreadsheet/ParseODS.pm0000644000175000017500000006023714456566532021531 0ustar corioncorionpackage Spreadsheet::ParseODS; use strict; use warnings; use 5.010; # for "state" use Archive::Zip ':ERROR_CODES'; use Moo 2; use XML::Twig::XPath; use Carp qw(croak); use List::Util 'max'; our $VERSION = '0.38'; our @CARP_NOT = (qw(XML::Twig)); use Filter::signatures; use feature 'signatures'; no warnings 'experimental::signatures'; use PerlX::Maybe; use Scalar::Util 'weaken'; use Spreadsheet::ParseODS::Workbook; use Spreadsheet::ParseODS::Worksheet; use Spreadsheet::ParseODS::Cell; use Spreadsheet::ParseODS::Styles; use Spreadsheet::ParseODS::Settings; =head1 NAME Spreadsheet::ParseODS - read SXC and ODS files =head1 SYNOPSIS my $parser = Spreadsheet::ParseODS->new( line_separator => "\n", # for multiline values ); my $workbook = $parser->parse("$d/$file"); my $sheet = $workbook->worksheet('Sheet1'); =head1 WARNING This module is not yet API-compatible with Spreadsheet::ParseXLSX and Spreadsheet::ParseXLS. Method-level compatibility is planned, but there always be differences in the values returned, for example for the cell types. =head1 METHODS =head2 C<< ->new >> =head3 Options =over 4 =item * B - the value to separate multi-line cell values with =cut has 'line_separator' => ( is => 'ro', default => "\n", ); =item * B - create the sheet as readonly, sharing Cells between repeated rows. This uses less memory at the cost of not being able to modify the data structure. =cut has 'readonly' => ( is => 'rw' ); =item * B - legacy option not to truncate the sheets by stripping empty columns from the right edge of a sheet. This option will likely be renamed or moved. =cut has 'NoTruncate' => ( is => 'ro', default => 0, ); =item * B - a premade L instance =cut has 'twig' => ( is => 'lazy', default => sub { XML::Twig::XPath->new( no_xxe => 1, keep_spaces => 1, ) }, ); =back =cut # ----------------------------------------------------------------------------- # col2int (for Spreadsheet::ParseExcel::Utility) #------------------------------------------------------------------------------ # converts a excel row letter into an int for use in an array sub col2int { my $result = 0; my $str = shift; my $incr = 1; for ( my $i = length($str) ; $i > 0 ; $i-- ) { my $char = substr( $str, $i - 1 ); my $curr += ord( lc($char) ) - ord('a') + 1; $curr *= $incr; $result += $curr; $incr *= 26; } # this is one out as we range 0..x-1 not 1..x $result--; return $result; } # ----------------------------------------------------------------------------- # sheetRef (for Spreadsheet::ParseExcel::Utility) #------------------------------------------------------------------------------ # ----------------------------------------------------------------------------- ### sheetRef # convert an excel letter-number address into a useful array address # @note that also Excel uses X-Y notation, we normally use Y-X in arrays # @args $str, excel coord eg. A2 # @returns an array - 2 elements - column, row, or undefined # sub sheetRef { my $str = shift; my @ret; $str =~ m/^(\D+)(\d+)$/ or croak "Invalid cell address '$str'"; if ( $1 && $2 ) { push( @ret, $2 - 1, col2int($1) ); } if ( $ret[0] < 0 ) { undef @ret; } return @ret; } sub _parse_printareas( $self, $printarea ) { my $res = []; while( $printarea =~ m!(?:'[^']+'|\w+)\.([A-Z]+)(\d+):(?:'[^']+'|\w+)\.([A-Z]+)(\d+)(?: |$)!gc) { my( $w, $n, $e, $s ) = ($1,$2,$3,$4); push @$res, [ $n-1, col2int($w), $s-1, col2int($e)]; }; return $res } =head2 C<< ->parse( %options ) >> my $workbook = Spreadsheet::ParseODS->new()->parse( 'example.ods' ); Reads the spreadsheet into memory and returns the data as a L object. =head3 Options =over 4 =item * B - the type of file if passing a filehandle. Can be C, C , C or C. =back This method also takes the same options as the constructor. =cut sub _empty_cell( $self, $readonly, $is_merged ) { state $merged_cell = Spreadsheet::ParseODS::Cell->new({ type => undef, unformatted => undef, value => undef, formula => undef, hyperlink => undef, style => undef, format => undef, is_merged => 1, is_hidden => undef, }); state $empty_cell = Spreadsheet::ParseODS::Cell->new({ type => undef, unformatted => undef, value => undef, formula => undef, hyperlink => undef, style => undef, format => undef, is_merged => undef, is_hidden => undef, }); if( $readonly ) { return $is_merged ? $merged_cell : $empty_cell } else { return Spreadsheet::ParseODS::Cell->new({ type => undef, unformatted => undef, value => undef, formula => undef, hyperlink => undef, style => undef, format => undef, is_merged => $is_merged, is_hidden => undef, }); } } sub parse( $self, $source, @options ) { weaken $self; my %options; my $formatter; if( @options % 2 == 0 ) { %options = @options } elsif( @options == 1 ) { ($formatter) = @options; } else { croak "Odd number of values passed to \%options hash"; }; if( $options{ attr }) { die "We want to store cell attributes"; }; my $p = $self->twig; my $readonly = $self->readonly; if( exists $options{ readonly }) { $readonly = $options{ readonly }; }; # Convert to ref, later my %workbook = (); my @worksheets = (); my @sheet_order = (); my %table_styles; my $styles = Spreadsheet::ParseODS::Styles->new(); # the workbook style my %settings; my %handlers; my %style_handlers; my %setting_handlers; $setting_handlers{ '//office:settings/config:config-item-set[@config:name="ooo:view-settings"]//config:config-item' } = sub { my( $twig, $setting ) = @_; if( $setting->att('config:name') eq 'ActiveTable' ) { $settings{ active_sheet_name } = $setting->text; }; }; $handlers{ "//office:automatic-styles/style:style" } = $handlers{ "//office:styles/style:style" } = $style_handlers{ "//office:automatic-styles/style:style" } = $style_handlers{ "//office:styles/style:style" } = sub { my( $twig, $style ) = @_; my $style_name = $style->att('style:name'); my %style; $style{ data_style_name } = $style->att('style:data-style-name'); ($style{table_cell_properties}) = $style->findnodes('style:table-cell-properties'); if( my $prop = $style->first_child('style:table-properties')) { my $display = $prop->att('table:display') || ''; my $tab_color = $prop->att('tableooo:tab-color'); $style{ display } = $display; $style{ tab_color } = $tab_color; }; $table_styles{ $style_name } = \%style; }; $handlers{ "//office:styles" } = $handlers{ "//office:automatic-styles" } = $style_handlers{ "//office:styles" } = $style_handlers{ "//office:automatic-styles" } = sub { my( $twig, $style ) = @_; $styles->read_from_twig( $style ); }; if( 0 ) { # In case we have an FODS XML file where all sub-parts are contained within # the same XML $handlers{ "//office:styles" } = sub { my( $twig, $style ) = @_; $styles->read_from_twig( $style ); }; }; $handlers{ "table:table" } = sub { my( $twig, $table ) = @_; my $max_datarow = -1; my $max_datacol = -1; my @hidden_cols; my @hidden_rows; my @merged_areas; my $tablename = $table->att('table:name'); my $tableref = $workbook{ $tablename } = []; my $table_hidden = $table->att( 'table:visibility' ); # SXC my $tab_color; if( my $style_name = $table->att('table:style-name')) { my $style = $table_styles{$style_name}; die "No style for '$style_name'" unless $style; my $display = $style->{display} || ''; $table_hidden = $display eq 'false' ? 1 : undef; $tab_color = $style->{tab_color}; }; my $print_areas; # we currently only support one if( my $print_area_attr = $table->att( 'table:print-ranges' )) { $print_areas = $self->_parse_printareas($print_area_attr); }; # Collect information on header columns my @column_default_styles; my ($header_col_start, $header_col_end) = (undef,undef); my $colnum = -1; for my $col ($table->findnodes('.//table:table-column')) { $colnum++; my $repeat = $col->att('table:number-columns-repeated') || 1; if( my $style = $col->att('table:default-cell-style-name')) { push @column_default_styles, ($style) x $repeat; } else { push @column_default_styles, (undef) x $repeat; }; if( $col->parent->tag eq 'table:table-header-columns' ) { $header_col_start = $colnum unless defined $header_col_start; $header_col_end = $colnum+$repeat-1; }; $colnum += $repeat; # if columns is hidden, add column number to @hidden_cols array for later use my $col_visibility = $col->att('table:visibility') || ''; for (1..$repeat) { push @hidden_cols, $col_visibility eq 'collapse'; }; }; my ($header_row_start, $header_row_end) = (undef,undef); my @rows = $table->findnodes('.//table:table-row'); # Optimization hack: Find the last row that contains something # This is necessary because a formatted column extends 1.000.000 rows # downwards my $last_payload_row = $#rows; while( $last_payload_row >= 0 and !$rows[ $last_payload_row ]->findnodes('*[@office:value-type] | *[@table:value-type] | .//text:p')) { $last_payload_row-- }; # Cut away the empty rows $last_payload_row++ if $last_payload_row == -1; splice @rows, $last_payload_row+1; my $rownum = -1; for my $row (@rows) { $rownum++; my $row_hidden = $row->att( 'table:visibility' ) || ''; my $rowref = []; # Do we really only want to add a cell if it contains text?! for my $cell ($row->findnodes("./table:table-cell | ./table:covered-table-cell")) { my $colnum = @$rowref; my $style_name = $cell->att('table:style-name') || $column_default_styles[ $colnum ]; # If there are repeats, they will respect # changing styles anyway my ($text); my $type = $cell->att("office:value-type") # ODS || $cell->att("table:value-type") # SXC || '' ; my ($unformatted) = grep { defined($_) } $cell->att("office:value"), # ODS $cell->att("table:value"), # SXC $cell->att("office:date-value"), # ODS $cell->att("table:date-value"), # SXC $cell->att("office:time-value"), # ODS $cell->att("table:time-value"), # SXC ; my $formula = $cell->att("table:formula"); if( $formula ) { $formula =~ s!^of:!!; }; my $hyperlink; my @hyperlink = $cell->findnodes('.//text:a'); if( @hyperlink ) { $hyperlink = $hyperlink[0]->att('xlink:href'); }; my $repeat = $cell->att('table:number-columns-repeated') || 1; my ($merge_source, $is_merged) = (undef, 0); if( $cell->att('table:number-columns-spanned') || $cell->att('table:number-rows-spanned')) { my $colspan = $cell->att('table:number-columns-spanned') || 0; my $rowspan = $cell->att('table:number-rows-spanned') || 0; push @merged_areas, [ $rownum, $colnum, $rownum + $rowspan -1, $colnum + $colspan -1 ]; $is_merged = 1; } elsif( $cell->tag eq 'table:covered-table-cell') { $is_merged = 1; }; my @text = $cell->findnodes('text:p'); if( @text or $is_merged) { $text = join $self->line_separator, map { join '', map { my $tag = $_->tag; $tag eq '#PCDATA' ? $_->text : $tag eq 'text:s' ? ' ' : $tag eq 'text:tab' ? "\t" : $tag eq 'text:span' ? $_->text : $tag eq 'text:a' ? $_->text : warn "Unknown text tag " . $_->tag && '' } $_->children; } @text; $max_datacol = max( $max_datacol, $#$rowref+$repeat ); } else { $text = $unformatted; }; # Yes, this is somewhat inefficient, but it saves us # from later programming errors if we create/store # references. We can always later turn this inside-out. my $cell_obj; if( $cell->is_empty ) { $cell_obj = $self->_empty_cell( $readonly, $is_merged ); } else { my $is_hidden; my $f; if( "Default" ne $style_name ) { my $ts = $table_styles{ $style_name } or croak "Internal error: Style '$style_name' encountered but not defined in XML"; my $s = $ts->{data_style_name}; # Find if the cell is protected/hidden my ($cellprops) = $ts->{table_cell_properties}; if( $cellprops ) { my $protect = $cellprops->att('style:cell-protect'); if( $protect ) { $is_hidden = ($protect =~ /^(?:formula-hidden|hidden-and-protected)$/); }; }; if( $s ) { $f = $styles->styles->{ $s }->{format}; } else { #warn "<<$style_name>>"; #warn "<<$s>>"; #use Data::Dumper; #warn Dumper $styles->styles; #die; }; }; $cell_obj = Spreadsheet::ParseODS::Cell->new({ value => $text, unformatted => defined $unformatted ? $unformatted : $text, formula => $formula, type => $type, hyperlink => $hyperlink, style => $style_name, is_merged => $is_merged, is_hidden => $is_hidden, maybe 'format' => $f, }); }; if( $readonly ) { push @$rowref, ($cell_obj) x $repeat; } else { push @$rowref, $cell_obj; for (2..$repeat) { push @$rowref, (ref $cell_obj)->new( { %$cell_obj } ); }; }; }; # if number-rows-repeated is set, set $repeat_rows value accordingly for later use my $row_repeat = $row->att('table:number-rows-repeated') || 1; for my $r (1..$row_repeat) { # clone the row unless there are no more repeated rows #push @$tableref, $r < $row_repeat ? dclone( $rowref ) : $rowref; # This is nasty but about 5 times faster than calling dclone() if( $readonly ) { push @$tableref, $rowref; } else { push @$tableref, $r < $row_repeat ? [map { bless { %$_ } => 'Spreadsheet::ParseODS::Cell'; } @$rowref ]: $rowref; }; push @hidden_rows, $row_hidden; $max_datarow++; }; if( $row->parent->tag eq 'table:table-header-rows' ) { $header_row_start = $#$tableref unless defined $header_row_start; $header_row_end = $#$tableref; }; } # truncate/expand table to $max_datarow and $max_datacol if ( ! $self->NoTruncate ) { $#{$tableref} = $max_datarow; foreach ( @{$tableref} ) { $#{$_} = $max_datacol; } } @$tableref = () if $max_datacol < 0; my $header_rows; if( defined $header_row_start ) { $header_rows = [$header_row_start, $header_row_end]; }; my $header_cols; if( defined $header_col_start ) { $header_cols = [$header_col_start, $header_col_end]; }; my $ws = Spreadsheet::ParseODS::Worksheet->new({ label => $tablename, tab_color => $tab_color, sheet_hidden => $table_hidden, print_areas => $print_areas, data => \@{$workbook{$tablename}}, col_min => 0, col_max => $max_datacol || 0, row_min => 0, row_max => $max_datarow || 0, header_rows => $header_rows, header_cols => $header_cols, hidden_rows => \@hidden_rows, hidden_cols => \@hidden_cols, table_styles => \%table_styles, merged_areas => \@merged_areas, }); # set up alternative data structure push @worksheets, $ws; $workbook{ $tablename } = $ws; }; my $options = {}; # if we don't have an FODS monolithic file, read the styles separately if( !$options{ inputtype } or $options{ inputtype } ne 'xml' ) { my ($method, $xml) = $self->_open_xml_thing( $source, $options, inputtype => $options{ inputtype }, member_file => 'styles.xml', ); $p->setTwigHandlers( \%style_handlers ); $p->$method( $xml ); # read /settings.xml in addition, to fill stuff like ActiveSheet ($method, $xml) = $self->_open_xml_thing( $source, $options, inputtype => $options{ inputtype }, member_file => 'settings.xml', optional => 1, ); if( defined $xml) { $p->setTwigHandlers( \%setting_handlers ); $p->$method( $xml ); }; # Also maybe read /meta.xml for the remaining information }; $p->setTwigHandlers( \%handlers ); my ($method, $xml) = $self->_open_xml_thing( $source, $options, inputtype => $options{ inputtype }, member_file => 'content.xml', ); $p->$method( $xml ); return Spreadsheet::ParseODS::Workbook->new( %$options, _worksheets => \%workbook, _sheets => \@worksheets, _settings => Spreadsheet::ParseODS::Settings->new( %settings ), maybe _styles => $styles, ); }; sub _open_xml_thing( $self, $source, $wb_info, %options ) { my $ref = ref($source); my $xml; my $method = 'parse'; if( ! $ref ) { # Specified by filename . croak "Undef ODS source given" unless defined $source; $wb_info->{filename} = $source; if( $source =~ m!(\.xml|\.fods)!i or ($options{ inputtype } and $options{ inputtype } =~ m!^(xml|fods)$! )) { $method = 'parsefile'; $xml = $source; } else { $xml = $self->_open_sxc( $source, \%options ); }; } else { if ( $ref eq 'SCALAR' ) { # Specified by a scalar buffer. # We create a copy here. Maybe we should be able to feed # this to XML::Twig without creating (another) copy here? # Or will CoW save us here anyway? if( ($options{ inputtype } and $options{ inputtype } =~ m!^(xml|fods)$! )) { $xml = $$source; } else { open my $fh, '<', $source; $xml = $self->_open_sxc_fh( $fh, $options{member_file} ); }; } elsif ( $ref eq 'ARRAY' ) { # Specified by file content if( ($options{ inputtype } and $options{ inputtype } =~ m!^(xml|fods)$! )) { $xml = join( '', @$source ); } else { my $content = join( '', @$source ); open my $fh, '<', $content; $xml = $self->_open_sxc_fh( $fh, $options{member_file} ); }; } else { # Assume filehandle # Kick off XML::Twig from Filehandle #warn "Duplicated source"; open my $fh, '<&', $source; $xml = $self->_open_sxc_fh( $fh, $options{ member_file }); } } return ($method, $xml) } sub _open_sxc { my ($self, $sxc_file, $options_ref) = @_; if( !$options_ref->{StrictErrors}) { -f $sxc_file && -s *_ or return undef; }; open my $fh, '<', $sxc_file or croak "Couldn't open '$sxc_file': $!"; return $self->_open_sxc_fh( $fh, $options_ref->{member_file}, maybe optional => $options_ref->{optional} ); } sub _open_sxc_fh($self, $fh, $member, %options) { my $zip = Archive::Zip->new(); my $status = $zip->readFromFileHandle($fh); $status == AZ_OK or croak "Read error from zip"; my $content = $zip->memberNamed($member); if( ! defined $content ) { if( $options{ optional }) { return; } else { croak "Want to read $member' but it doesn't exist!"; } } $content->rewindData(); my $stream = $content->fh; 1 if eof($stream); # reset eof state of $stream?! Is that a bug? Where? binmode $stream => ':gzip(none)'; return $stream } sub _build_styles( $self, $styles ) { return Spreadsheet::ParseODS::Styles->new() } 1; =head1 REPOSITORY The public repository of this module is L. =head1 SUPPORT The public support forum of this module is L. =head1 BUG TRACKER Please report bugs in this module via the Github bug queue at L =head1 AUTHOR Max Maischein C =head1 CONTRIBUTORS H. Merijn Brand C Mohammad S Anwar C =head1 COPYRIGHT (c) Copyright 2019-2023 by Max Maischein C. =head1 LICENSE This module is released under the same terms as Perl itself. =cut Spreadsheet-ReadSXC-0.38/lib/Spreadsheet/ParseODS/0000755000175000017500000000000014456566534021165 5ustar corioncorionSpreadsheet-ReadSXC-0.38/lib/Spreadsheet/ParseODS/Settings.pm0000644000175000017500000000051514456566532023322 0ustar corioncorionpackage Spreadsheet::ParseODS::Settings; use Moo 2; use Carp qw(croak); use Filter::signatures; use feature 'signatures'; no warnings 'experimental::signatures'; use PerlX::Maybe; our $VERSION = '0.38'; =head1 NAME Spreadsheet::ParseODS::Settings - settings of a workbook =cut has 'active_sheet_name' => ( is => 'rw' ); 1; Spreadsheet-ReadSXC-0.38/lib/Spreadsheet/ParseODS/Cell.pm0000644000175000017500000000126614456566532022405 0ustar corioncorionpackage Spreadsheet::ParseODS::Cell; use Moo 2; use Filter::signatures; use feature 'signatures'; no warnings 'experimental::signatures'; our $VERSION = '0.38'; =head1 NAME Spreadsheet::ParseODS::Cell - a cell in a spreadsheet =cut has 'value' => ( is => 'rw', ); has 'unformatted' => ( is => 'rw', ); has 'formula' => ( is => 'rw', ); has 'type' => ( is => 'rw', ); has 'hyperlink' => ( is => 'rw', ); has 'format' => ( is => 'rw', ); has 'style' => ( is => 'rw', ); has 'is_merged' => ( is => 'rw', ); has 'is_hidden' => ( is => 'rw', ); sub get_hyperlink( $self ) { $self->hyperlink } sub get_format( $self ) { $self->format } 1; Spreadsheet-ReadSXC-0.38/lib/Spreadsheet/ParseODS/Styles.pm0000644000175000017500000001164214456566532023010 0ustar corioncorionpackage Spreadsheet::ParseODS::Styles; use 5.010; # for // use Moo 2; use Carp qw(croak); use Filter::signatures; use feature 'signatures'; no warnings 'experimental::signatures'; use PerlX::Maybe; our $VERSION = '0.38'; =head1 NAME Spreadsheet::ParseODS::Styles - styles / formatting of cells in a workbook =cut has 'styles' => ( is => 'lazy', default => sub { {} }, ); sub part_to_format( $self, $part ) { my $t = $part->tag; my $res; if( $t eq 'number:seconds' ) { my $style = $part->att('number:style'); if( $style and $style eq 'long') { $res = 'SS'; } else { $res = 'S'; }; #warn $part->toString; } elsif( $t eq 'number:minutes' ) { my $style = $part->att('number:style'); if( $style and $style eq 'long') { $res = 'MM'; } else { $res = 'M'; }; #warn $part->toString; } elsif( $t eq 'number:hours' ) { my $style = $part->att('number:style'); if( $style and $style eq 'long') { $res = 'HH'; } else { $res = 'H'; }; #warn $part->toString; } elsif( $t eq 'number:am-pm' ) { $res = 'am'; #warn $part->toString; } elsif( $t eq 'number:day' ) { my $style = $part->att('number:style'); if( $style and $style eq 'long') { $res = 'dd'; } else { $res = 'd'; }; } elsif( $t eq 'number:day-of-week' ) { $res = 'ddd'; #warn $part->toString; } elsif( $t eq 'number:week-of-year' ) { $res = 'ww'; #warn $part->toString; } elsif( $t eq 'number:month' ) { my $style = $part->att('number:style'); my $month_name = $part->att('number:textual'); if( $month_name and $month_name eq 'true') { $res = 'mmm'; } elsif( $style and $style eq 'long') { $res = 'mm'; } else { $res = 'm'; }; #warn $part->toString; } elsif( $t eq 'number:year' ) { my $style = $part->att('number:style'); if( $style and $style eq 'long') { $res = 'yyyy'; } else { $res = 'yy'; }; #warn $part->toString; } elsif( $t eq 'number:number' ) { $res = '#' x ($part->att('number:min-integer-digits') || 1); if( defined( my $dec = $part->att('number:decimal-places'))) { $res .= '.' . ('0' x $dec); }; #warn $part->toString; } elsif( $t eq 'number:scientific-number' ) { $res = '#' x $part->att('number:min-integer-digits'); if( defined( my $dec = $part->att('number:decimal-places'))) { $res .= '.' . ('0' x $dec); }; $res .= 'E+'; if( defined( my $dec = $part->att('number:exponent-digits'))) { $res .= '.' . ('#' x $dec); }; #warn $part->toString; } elsif( $t eq 'number:text' ) { $res = $part->text; } elsif( $t eq 'number:text-content' or $t eq 'number:currency-symbol' ) { $res = $part->text; } elsif( $t eq 'number:fraction' ) { $res = '#' x $part->att('number:min-integer-digits'); if( defined( my $num = $part->att('number:min-numerator-digits'))) { $res .= ' ' . ('#' x $num); my $den = $part->att('number:min-denominator-digits'); $res .= '/' . ('#' x $den); }; } elsif( $t eq 'loext:text' ) { $res = $part->text; } elsif( $t eq 'style:text-properties' or $t eq 'style:properties' ) { # ignored } elsif( $t eq 'loext:fill-character' ) { # ignored } elsif( $t eq 'number:fill-character' ) { # ignored } elsif( $t eq 'style:map' ) { # ignored } elsif( $t eq '#PCDATA' ) { # ignored } else { warn "Unknown tag name '$t'"; warn $part->toString; }; return $res } sub to_format( $self, $style ) { return join "", map { my $res = $self->part_to_format( $_ ) // '' } $style->children } sub read_from_twig( $self, $elt ) { my $styles = $self->styles; for my $style ($elt->findnodes(join " | ", '//style:default-style', '//number:date-style', '//number:number-style', '//number:text-style', '//number:time-style', '//number:currency-style', )) { my $name = $style->att('style:data-style-name') || $style->att('style:name'); # Currently we simply ignore the default style... next unless defined $name; # ignore language and country # This is not ideal, but oh well my $format = $self->to_format( $style ); my ($font) = map { $_->att('style:font-name') } $style->findnodes('style:text-properties'); #warn "Defined '$name' as '$format'"; #warn $style->toString unless $format; $styles->{ $name } = { format => $format, font_face => $font, }; }; } 1; Spreadsheet-ReadSXC-0.38/lib/Spreadsheet/ParseODS/Worksheet.pm0000644000175000017500000000433614456566532023502 0ustar corioncorionpackage Spreadsheet::ParseODS::Worksheet; use Moo 2; use Carp qw(croak); use Filter::signatures; use feature 'signatures'; no warnings 'experimental::signatures'; use PerlX::Maybe; our $VERSION = '0.38'; =head1 NAME Spreadsheet::ParseODS::Worksheet - a sheet in a workbook =cut has 'label' => ( is => 'rw' ); has 'data' => ( is => 'rw' ); has 'sheet_hidden' => ( is => 'rw', ); has 'row_min' => ( is => 'rw', ); has 'row_max' => ( is => 'rw', ); has 'col_min' => ( is => 'rw', ); has 'col_max' => ( is => 'rw', ); has 'print_areas' => ( is => 'rw', ); has 'header_rows' => ( is => 'rw', ); has 'header_cols' => ( is => 'rw', ); has 'hidden_rows' => ( is => 'rw', ); has 'hidden_cols' => ( is => 'rw', ); has 'tab_color' => ( is => 'rw', ); has 'merged_areas' => ( is => 'lazy', default => sub { [] }, ); sub get_cell( $self, $row, $col ) { return undef if $row > $self->row_max; return undef if $col > $self->col_max; $self->data->[ $row ]->[ $col ] } sub get_name( $self ) { $self->name } sub get_tab_color( $self ) { $self->tab_color } sub is_sheet_hidden( $self ) { $self->sheet_hidden } sub row_range( $self ) { return ($self->row_min, $self->row_max) } sub col_range( $self ) { return ($self->col_min, $self->col_max) } =head2 C<< get_print_areas() >> my $print_areas = $worksheet->get_print_areas(); # [ [$start_row, $start_col, $end_row, $end_col], ... ] The C<< ->get_print_areas() >> method returns the print areas of the sheet as an arrayref. Returns undef if there are no print areas. =cut sub get_print_areas($self) { my $ar = $self->print_areas; } sub get_print_titles( $self ) { my $hr = $self->header_rows; my $hc = $self->header_cols; my $res = { maybe Row => $hr, maybe Column => $hc, }; return unless scalar keys %$res; return $res } sub get_merged_areas( $self ) { return $self->merged_areas } sub is_row_hidden( $self, $rownum=undef ) { wantarray ? @{ $self->hidden_rows } : $self->hidden_rows->[ $rownum ] } sub is_col_hidden( $self, $colnum=undef ) { wantarray ? @{ $self->hidden_cols } : $self->hidden_cols->[ $colnum ] } 1; Spreadsheet-ReadSXC-0.38/lib/Spreadsheet/ParseODS/Workbook.pm0000644000175000017500000000443114456566532023320 0ustar corioncorionpackage Spreadsheet::ParseODS::Workbook; use Moo 2; use Filter::signatures; use feature 'signatures'; no warnings 'experimental::signatures'; our $VERSION = '0.38'; =head1 NAME Spreadsheet::ParseODS::Workbook - a workbook =cut =head2 C<< ->filename >> print $workbook->filename; The name of the file if applicable. =cut has 'filename' => ( is => 'rw', ); has '_settings' => ( is => 'rw', handles => [ 'active_sheet_name' ], ); # The worksheets themselves has '_sheets' => ( is => 'lazy', default => sub { [] }, ); # Mapping of names to sheet objects has '_worksheets' => ( is => 'lazy', default => sub { {} }, ); has '_styles' => ( is => 'lazy', default => sub { {} }, ); =head2 C<< ->table_styles >> The styles that identify whether a table is hidden, and other styles =cut has 'table_styles' => ( is => 'lazy', default => sub { {} }, ); =head2 C<< ->get_print_areas() >> my $print_areas = $workbook->get_print_areas(); # [[ [$start_row, $start_col, $end_row, $end_col], ... ]] The C<< ->get_print_areas() >> method returns the print areas of each sheet as an arrayref of arrayrefs. If a sheet has no print area, C is returned for its print area. =cut sub get_print_areas( $self ) { [ map { $_->get_print_areas } $self->worksheets ] } =head2 C<< ->get_active_sheet() >> my $sheet = $workbook->get_active_sheet(); if( !$sheet ) { # If there is no defined active worksheet, take the first: ($sheet) = $workbook->worksheets(); }; Returns the active worksheet, or if there is no such sheet, returns C. =cut sub get_active_sheet($self) { if( defined( my $name = $self->active_sheet_name )) { return $self->worksheet( $name ); } else { return undef }; } sub get_filename( $self ) { $self->filename } =head2 C<< ->worksheets() >> my @sheets = $workbook->worksheets; Returns the list of worksheets as L objects. =cut sub worksheets( $self ) { @{ $self->_sheets } }; =head2 C<< ->worksheet($name) >> my $sheet1 = $workbook->worksheet('Sheet 1'); Returns the worksheet with the given name, or if no such worksheet exists, returns C. =cut sub worksheet( $self, $name ) { $self->_worksheets->{ $name } } 1; Spreadsheet-ReadSXC-0.38/META.json0000644000175000017500000000365014456566534016155 0ustar corioncorion{ "abstract" : "Extract OpenOffice 1.x spreadsheet data", "author" : [ "Max Maischein " ], "dynamic_config" : 0, "generated_by" : "ExtUtils::MakeMaker version 7.44, CPAN::Meta::Converter version 2.150010", "license" : [ "perl_5" ], "meta-spec" : { "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec", "version" : 2 }, "name" : "Spreadsheet-ReadSXC", "no_index" : { "directory" : [ "t", "inc" ] }, "prereqs" : { "build" : { "requires" : { "ExtUtils::MakeMaker" : "0" } }, "configure" : { "requires" : { "ExtUtils::MakeMaker" : "0" } }, "runtime" : { "requires" : { "Archive::Zip" : "1.34", "Carp" : "0", "Filter::signatures" : "0.16", "Moo" : "2", "PerlIO::gzip" : "0", "PerlX::Maybe" : "0", "Scalar::Util" : "0", "Storable" : "0", "XML::Twig" : "3.50", "XML::Twig::XPath" : "0", "XML::XPath" : "0", "XML::XPathEngine" : "0", "perl" : "5.010" } }, "test" : { "requires" : { "Data::Dumper" : "0", "File::Basename" : "0", "File::Temp" : "0", "Test::More" : "0" } } }, "release_status" : "stable", "resources" : { "bugtracker" : { "web" : "https://github.com/Corion/Spreadsheet-ReadSXC/issues" }, "license" : [ "https://dev.perl.org/licenses/" ], "repository" : { "type" : "git", "url" : "git://github.com/Corion/Spreadsheet-ReadSXC.git", "web" : "https://github.com/Corion/Spreadsheet-ReadSXC" } }, "version" : "0.38", "x_serialization_backend" : "JSON::PP version 4.11", "x_static_install" : 1 } Spreadsheet-ReadSXC-0.38/xt/0000755000175000017500000000000014456566534015163 5ustar corioncorionSpreadsheet-ReadSXC-0.38/xt/99-todo.t0000755000175000017500000000174714456566532016566 0ustar corioncorionuse Test::More; use File::Spec; use File::Find; use strict; # Check that all files do not contain any # lines with "XXX" - such markers should # either have been converted into Todo-stuff # or have been resolved. # The test was provided by Andy Lester. my @files; my $blib = File::Spec->catfile(qw(blib lib)); find(\&wanted, grep { -d } ($blib, 'bin')); plan tests => 2* @files; foreach my $file (@files) { source_file_ok($file); } sub wanted { push @files, $File::Find::name if /\.p(l|m|od)$/; } sub source_file_ok { my $file = shift; open( my $fh, '<', $file ) or die "Can't open $file: $!"; my @lines = <$fh>; close $fh; my $n = 0; for ( @lines ) { ++$n; s/^/$file ($n): /; } my @x = grep /XXX/, @lines; if ( !is( scalar @x, 0, "Looking for XXXes in $file" ) ) { diag( $_ ) for @x; } @x = grep /<<<|>>>/, @lines; if ( !is( scalar @x, 0, "Looking for <<<<|>>>> in $file" ) ) { diag( $_ ) for @x; } } Spreadsheet-ReadSXC-0.38/xt/99-changes.t0000755000175000017500000000133714456566532017224 0ustar corioncorion#!perl -w use warnings; use strict; use File::Find; use Test::More tests => 2; =head1 PURPOSE This test ensures that the Changes file mentions the current version and that a release date is mentioned as well =cut require './Makefile.PL'; # Loaded from Makefile.PL our %module = get_module_info(); my $module = $module{NAME}; (my $file = $module) =~ s!::!/!g; require "$file.pm"; my $version = sprintf '%0.2f', $module->VERSION; my $changes = do { local $/; open my $fh, 'Changes' or die $!; <$fh> }; ok $changes =~ /^(.*$version.*)$/m, "We find version $version for $module"; my $changes_line = $1; ok $changes_line =~ /$version\s+20\d\d-[01]\d-[0123]\d\b/, "We find a release date on the same line" or diag $changes_line; Spreadsheet-ReadSXC-0.38/xt/99-manifest.t0000755000175000017500000000204414456566532017416 0ustar corioncorionuse strict; use Test::More; # Check that MANIFEST and MANIFEST.skip are sane : use File::Find; use File::Spec; my @files = qw( MANIFEST MANIFEST.SKIP ); plan tests => scalar @files * 4 +1 # MANIFEST existence check +1 # MYMETA.* non-existence check ; for my $file (@files) { ok(-f $file, "$file exists"); open my $fh, '<', $file or die "Couldn't open $file : $!"; my @lines = <$fh>; is_deeply([grep(/^$/, @lines)],[], "No empty lines in $file"); is_deeply([grep(/^\s+$/, @lines)],[], "No whitespace-only lines in $file"); is_deeply([grep(/^\s*\S\s+$/, @lines)],[],"No trailing whitespace on lines in $file"); if ($file eq 'MANIFEST') { chomp @lines; is_deeply([grep { s/\s.*//; ! -f } @lines], [], "All files in $file exist") or do { diag "$_ is mentioned in $file but doesn't exist on disk" for grep { ! -f } @lines }; # Exclude some files from shipping is_deeply([grep(/^MYMETA\.(yml|json)$/, @lines)],[],"We don't try to ship MYMETA.* $file"); }; close $fh; }; Spreadsheet-ReadSXC-0.38/xt/99-unix-text.t0000755000175000017500000000151314456566532017555 0ustar corioncorionuse Test::More; # Check that all released module files are in # UNIX text format use File::Spec; use File::Find; use strict; my @files = ('Makefile.PL', 'MANIFEST', 'MANIFEST.SKIP', glob 't/*.t'); my $blib = File::Spec->catfile(qw(blib lib)); find(\&wanted, grep { -d } ($blib, 'bin')); plan tests => scalar @files; foreach my $file (@files) { unix_file_ok($file); } sub wanted { push @files, $File::Find::name if /\.p(l|m|od)$/; } sub unix_file_ok { my ($filename) = @_; local $/; open my $fh, '<', $filename or die "Couldn't open '$filename' : $!\n"; binmode $fh; my $content = <$fh>; my $i; my @lines = grep { /\x0D\x0A$/sm } map { sprintf "%s: %s\x0A", $i++, $_ } split /\x0A/, $content; unless (is(scalar @lines, 0,"'$filename' contains no windows newlines")) { diag $_ for @lines; }; close $fh; }; Spreadsheet-ReadSXC-0.38/xt/99-test-prerequisites.t0000755000175000017500000000653514456566532021502 0ustar corioncorion#!perl -w use warnings; use strict; use Test::More; use Data::Dumper; use File::Find; =head1 DESCRIPTION This test checks whether all tests still pass when the optional test prerequisites for the test are not present. This is done by using L to rerun the test while excluding the optional prerequisite. =cut BEGIN { eval { require CPAN::Meta::Prereqs; require Parse::CPAN::Meta; require Perl::PrereqScanner::Lite; require Module::CoreList; require Test::Without::Module; require Capture::Tiny; Capture::Tiny->import('capture'); require Path::Class; Path::Class->import('dir'); }; if (my $err = $@) { warn "# $err"; plan skip_all => "Prerequisite needed for testing is missing"; exit 0; }; }; my @tests; if( @ARGV ) { @tests = @ARGV; } else { open my $manifest, '<', 'MANIFEST' or die "Couldn't read MANIFEST: $!"; @tests = grep { -f $_ } grep { m!^(t/.*\.t|scripts/.*\.pl)$! } map { s!\s*$!!; $_ } <$manifest> } plan tests => 0+@tests; my $meta = Parse::CPAN::Meta->load_file('META.json'); # Find what META.* declares my $explicit_test_prereqs = CPAN::Meta::Prereqs->new( $meta->{prereqs} )->merged_requirements->as_string_hash; my $minimum_perl = $meta->{prereqs}->{runtime}->{requires}->{perl} || 5.006; sub distributed_packages { my @modules; for( @_ ) { dir($_)->recurse( callback => sub { my( $child ) = @_; if( !$child->is_dir and $child =~ /\.pm$/) { push @modules, ((scalar $child->slurp()) =~ m/^\s*package\s+(?:#.*?\n\s+)*(\w+(?:::\w+)*)\b/msg); } }); }; map { $_ => $_ } @modules; } # Find what we distribute: my %distribution = distributed_packages('blib','t'); my $scanner = Perl::PrereqScanner::Lite->new; for my $test_file (@tests) { my $implicit_test_prereqs = $scanner->scan_file($test_file)->as_string_hash; my %missing = %{ $implicit_test_prereqs }; #warn Dumper \%missing; for my $p ( keys %missing ) { # remove core modules if( Module::CoreList::is_core( $p, undef, $minimum_perl)) { delete $missing{ $p }; #diag "$p is core for $minimum_perl"; } else { #diag "$p is not in core for $minimum_perl"; }; }; # remove explicit (test) prerequisites for my $k (keys %$explicit_test_prereqs) { delete $missing{ $k }; }; #warn Dumper $explicit_test_prereqs->as_string_hash; # Remove stuff from our distribution for my $k (keys %distribution) { delete $missing{ $k }; }; # If we have no apparent missing prerequisites, we're good my @missing = sort keys %missing; # Rerun the test without these modules and see whether it crashes my @failed; for my $candidate (@missing) { diag "Checking that $candidate is not essential"; my @cmd = ($^X, "-MTest::Without::Module=$candidate", "-Mblib", '-w', $test_file); my $cmd = join " ", @cmd; my ($stdout, $stderr, $exit) = capture { system( @cmd ); }; if( $exit != 0 ) { push @failed, [ $candidate, [@cmd]]; } elsif( $? != 0 ) { push @failed, [ $candidate, [@cmd]]; }; }; is 0+@failed, 0, $test_file or diag Dumper \@failed; }; done_testing; Spreadsheet-ReadSXC-0.38/xt/99-pod.t0000755000175000017500000000123214456566532016370 0ustar corioncorionuse Test::More; # Check our Pod # The test was provided by Andy Lester, # who stole it from Brian D. Foy # Thanks to both ! use File::Spec; use File::Find; use strict; eval { require Test::Pod; Test::Pod->import; }; my @files; if ($@) { plan skip_all => "Test::Pod required for testing POD"; } elsif ($Test::Pod::VERSION < 0.95) { plan skip_all => "Test::Pod 0.95 required for testing POD"; } else { my $blib = File::Spec->catfile(qw(blib lib)); find(\&wanted, grep { -d } ($blib, 'bin')); plan tests => scalar @files; foreach my $file (@files) { pod_file_ok($file); } } sub wanted { push @files, $File::Find::name if /\.p(l|m|od)$/; } Spreadsheet-ReadSXC-0.38/xt/99-compile.t0000755000175000017500000000152014456566532017236 0ustar corioncorion#!perl use warnings; use strict; use File::Find; use Test::More; BEGIN { eval 'use Capture::Tiny ":all"; 1'; if ($@) { plan skip_all => "Capture::Tiny needed for testing"; exit 0; }; }; plan 'no_plan'; my $last_version = undef; sub check { return if (! m{(\.pm|\.pl) \z}xmsi); my ($stdout, $stderr, $exit) = capture(sub { local $ENV{FORCE_FILTER_SIGNATURES} = 1; system( $^X, '-Mblib', '-c', $_ ); }); s!\s*\z!! for ($stdout, $stderr); if( $exit ) { diag $stderr; diag "Exit code: ", $exit; fail($_); } elsif( $stderr ne "$_ syntax OK") { diag $stderr; fail($_); } else { pass($_); }; } find({wanted => \&check, no_chdir => 1}, grep { -d $_ } 'blib', 'scripts', 'examples', 'bin', 'lib' ); Spreadsheet-ReadSXC-0.38/xt/99-synopsis.t0000755000175000017500000000257114456566532017504 0ustar corioncorionuse strict; use Test::More; use File::Spec; use File::Find; use File::Temp 'tempfile'; my @files; my $blib = File::Spec->catfile(qw(blib lib)); find(\&wanted, grep { -d } ($blib, 'bin')); plan tests => scalar @files; foreach my $file (@files) { synopsis_file_ok($file); } sub wanted { push @files, $File::Find::name if /\.p(l|m|od)$/ and $_ !~ /\bDSL\.pm$/; # we skip that one as it initializes immediately } sub synopsis_file_ok { my( $file ) = @_; my $name = "SYNOPSIS in $file compiles"; open my $fh, '<', $file or die "Couldn't read '$file': $!"; my @synopsis = map { s!^\s\s!!; $_ } # outdent all code for here-docs grep { /^\s\s/ } # extract all verbatim (=code) stuff grep { /^=head1\s+SYNOPSIS$/.../^=/ } # extract Pod synopsis <$fh>; if( @synopsis ) { my($tmpfh,$tempname) = tempfile(); print {$tmpfh} join '', @synopsis; close $tmpfh; # flush it my $output = `$^X -Ilib -c $tempname 2>&1`; if( $output =~ /\ssyntax OK$/ ) { pass $name; } else { fail $name; diag $output; diag $_ for @synopsis; }; unlink $tempname or warn "Couldn't clean up $tempname: $!"; } else { SKIP: { skip "$file has no SYNOPSIS section", 1; }; }; } Spreadsheet-ReadSXC-0.38/xt/99-versions.t0000755000175000017500000000260414456566532017462 0ustar corioncorion#!perl -w # Stolen from ChrisDolan on use.perl.org # http://use.perl.org/comments.pl?sid=29264&cid=44309 use warnings; use strict; use File::Find; use Test::More; BEGIN { eval 'use File::Slurp; 1'; if ($@) { plan skip_all => "File::Slurp needed for testing"; exit 0; }; }; plan 'no_plan'; my $last_version = undef; sub check { return if (! m{blib/script/}xms && ! m{\.pm \z}xms); my $content = read_file($_); # only look at perl scripts, not sh scripts return if (m{blib/script/}xms && $content !~ m/\A \#![^\r\n]+?perl/xms); # what my version numbers look like my $version = qr/\d+\.\d+/; my @version_lines = grep { defined } $content =~ m/ [^\n]* \$VERSION \s* = \s* ["']($version)['"] | package \s+ \S+ \s+ ($version) \s* ; /gxms; if (@version_lines == 0) { fail($_); } for my $line (@version_lines) { $line =~ s/^\s+//; $line =~ s/\s+$//; if (!defined $last_version) { $last_version = shift @version_lines; diag "Checking for $last_version"; pass($_); } else { is($line, $last_version, $_); } } } find({wanted => \&check, no_chdir => 1}, 'blib'); if (! defined $last_version) { fail('Failed to find any files with $VERSION'); } Spreadsheet-ReadSXC-0.38/xt/meta-lint.t0000755000175000017500000000216614456566532017250 0ustar corioncorion#!perl -w # Stolen from ChrisDolan on use.perl.org # http://use.perl.org/comments.pl?sid=29264&cid=44309 use warnings; use strict; use File::Find; use Test::More; eval { #require Test::MinimumVersion::Fast; require Parse::CPAN::Meta; Parse::CPAN::Meta->import(); require CPAN::Meta::Validator; CPAN::Meta::Validator->VERSION(2.15); }; if ($@) { plan skip_all => "CPAN::Meta::Validator version 2.15 required for testing META files"; } else { plan tests => 4; } use lib '.'; use vars '%module'; require 'Makefile.PL'; # Loaded from Makefile.PL %module = get_module_info(); my $module = $module{NAME}; (my $file = $module) =~ s!::!/!g; require "$file.pm"; my $version = sprintf '%0.2f', $module->VERSION; for my $meta_file ('META.yml', 'META.json') { my $meta = Parse::CPAN::Meta->load_file($meta_file); my $cmv = CPAN::Meta::Validator->new( $meta ); if(! ok $cmv->is_valid, "$meta_file is valid" ) { diag $_ for $cmv->errors; }; # Also check that the declared version matches the version in META.* is $meta->{version}, $version, "$meta_file version matches module version ($version)"; }; Spreadsheet-ReadSXC-0.38/Todo.pod0000644000175000017500000000102614456566532016136 0ustar corioncorion=head1 TO DO Steps to implement with/for L =over 4 =item 1 Do not strip whitespace of cell contents, It currently gets me ', but xlsx returns an empty field. It is up to you to decide what you want And a field with just a single ' should return an empty field, but I would accept a single quote too a field can hold a single space as valid content. I don't think you should strip trailing spaces by default =item 2 Support for cell attributes: background color, text color, =item 3 the rest =back =cut Spreadsheet-ReadSXC-0.38/Changes0000644000175000017500000001303114456566532016017 0ustar corioncorionRevision history for Perl extension Spreadsheet::ReadSXC. 0.38 2023-07-21 * Various test suite updates, no code changes, no need to upgrade 0.37 2021-11-21 * Really require XML::Twig 3.50, since that adds the no_xxe option 0.36 2021-11-21 * Require XML::Twig 3.50, since that adds the no_xxe option 0.35 2021-09-08 * Fix memory leak in the XML parser callbacks Reported as GH #8 with a test case, thanks to troost-c! 0.34 2021-03-10 * Fix OrderBySheet option in Spreadsheet::ReadSXC, thanks to Kuerbis! 0.33 2020-12-28 * Read style attributes immediately from Twig. This increases memory usage but removes problems when we recycle the Twig object for parsing another file * Custom styles are now better supported and don't crash the module immediately (issue GH #5 , reported with test file by mario-minati) * Point bug tracker meta data to Github 0.32 2020-10-06 * Eliminate a warning when reading a numeric format without a defined number of digits, reported by Tux 0.31 2020-10-03 * No code changes, no need to upgrade * Change code to work around an ambiguity in Perl to placate Filter::signatures / Filter::Simple. "-s _" could also be parsed as "-(s _foo_bar_g)" by Filter::Simple. 0.30 2020-10-02 * No code changes, no need to upgrade * Remove "use XML::Parser;" line, which was not used anymore in the code. Spotted by MANWAR * This version will be (re)released as 1.00 if the smoke tests come up green 0.29 2020-09-30 * Make the test for the error message on non-existing files more lax. This addresses RT #133432 0.28 2020-09-29 * Require Filter::signatures 0.16 to fix Perl versions below 5.20 * No upgrade necessary if things already work for you 0.27 2020-09-28 * Defang resource intensive test * Eliminate "undef" warning when trying to get the active sheet of a workbook that does not define an active sheet (GH #3) 0.26 2020-09-28 * This needs minimum Perl version 5.010 * When reading a sheet in readonly mode, more aggressively reuse cell objects for repeated cells * Construct a cell once, and if it is repeated, clone it if not in readonly mode. These two changes speed up the parsing of some sheets with many repeated cells vastly. * Properly handle ODS files without a settings.xml (GH#2) 0.25 2020-09-27 This release has major changes and will be promoted to 1.0 if there are no major breaks. * Added (proper) parsing of ODS files * Added support for formats * Added support for hidden cells, merged cells * Split up parsing and classes into separate files * Spreadsheet::ReadSXC now uses Spreadsheet::ParseODS * Added ->is_sheet_hidden(), ->get_print_areas, ->get_hyperlink() ->is_col_hidden(), ->tab_color(), ->table_styles(), ->filename(), 0.24 2019-10-08 - Fix parsing the text of cells that only contain "0" These were returned as undef, instead of 0 unless the StandardCurrency option was used. - Fix parsing multiple sheets. If the first cell of the new table was empty, the last defined value of the old table was used instead, if the real (instead of formatted) values were used. 0.23 2019-10-03 - Add a test and fix for files with text in annotations - these caused a crash 0.22 2019-10-03 - Lower Perl version requirement back to 5.8 There is no current reason to require more. - API Change: Formatting or read errors in the compressed input or the XML are now fatal errors. Before, they returned the half-parsed data structure. - read_sxc() and read_xml_file can now also return a fatal error when the file is not found or not readable instead of returning undef. Pass a true value to the the StrictError option. - Bugfix/behaviour change: Cells with leading/trailing newlines now return those leading/trailing newlines in their values 0.21 2019-10-02 - Add 'StandardCurrency' option to get at unformatted number values - Support unformatted values for ODS files - New maintainer Max Maischein (corion@corion.net) 0.20 2005-06-17 (Fri Jun 17 2005) - almost completely rewritten to use XML::Parser's event style (instead of its tree style), resulting in more readable and (hopefully) maintainable code - this version allows for multiple open files by returning an anonymous data structure instead of a data reference (thanks to H. Merijn Brand for fixing this) - new option to return an array of hashes instead of a hash of arrays - new option to return time cells as time value 0.12 2005-05-08 (Sun May 8 2005) - comments no longer appear in cells (have to find a cleaner way of returning annotations) 0.11 2005-05-08 (Sun May 8 2005) - eliminated a bug with 'DropHiddenColumns' which would populate an empty table - edited documentation 0.10 2005-05-06 (Fri May 6 2005) - almost completely rewritten to use XML::Parser instead of XML::Parser::Lite::Tree - new options to include/drop hidden rows/col, covered cells etc. - optionally truncate empty rows and columns - optionally replace newlines in cells with any string - new subroutines for reading unpacked XML data from SXC files - option to return date cells as standard date value 0.03 2005-05-03 (Tue May 3 2005) - more prerequisites in Makefile.PL - minor corrections in documentation 0.02 2005-05-01 (Mon May 1 2005) - fixed prerequisites in Makefile.PL 0.01 2005-04-30 (Sat Apr 30 2005) - original version; created by h2xs 1.22 with options -XAn Spreadsheet::ReadSXC Spreadsheet-ReadSXC-0.38/README0000644000175000017500000001163514456566532015414 0ustar corioncorionSpreadsheet::ReadSXC - Extract OpenOffice 1.x spreadsheet data DESCRIPTION Spreadsheet::ReadSXC extracts data from OpenOffice 1.x spreadsheet files (.sxc). It exports the function read_sxc() which takes a filename and an optional reference to a hash of options as arguments and returns a reference to a hash of references to two-dimensional arrays. The hash keys correspond to the names of worksheets in the OpenOffice workbook. The two-dimensional arrays correspond to rows and cells in the respective spreadsheets. If you don't like this because the order of sheets is not preserved in a hash, read on. The 'OrderBySheet' option provides an array of hashes instead. If you prefer to unpack the .sxc file yourself, you can use the function read_xml_file() instead and pass the path to content.xml as an argument. Or you can extract the XML string from content.xml and pass the string to the function read_xml_string(). Both functions also take a reference to a hash of options as an optional second argument. Spreadsheet::ReadSXC uses XML::Twig to parse the XML contained in .sxc files. Only the contents of text:p elements are returned, not the actual values of table:value attributes. For example, a cell might have a table:value-type attribute of "currency", a table:value attribute of "-1500.99" and a table:currency attribute of "USD". The text:p element would contain "-$1,500.99". This is the string which is returned by the read_sxc() function, not the value of -1500.99. Spreadsheet::ReadSXC was written with data import into an SQL database in mind. Therefore empty spreadsheet cells correspond to undef values in array rows. The example code above shows how to replace undef values with empty strings. If the .sxc file contains an empty spreadsheet its hash element will point to an empty array (unless you use the 'NoTruncate' option in which case it will point to an array of an array containing one undefined element). OpenOffice uses UTF-8 encoding. It depends on your environment how the data returned by the XML Parser is best handled: use Unicode::String qw(latin1 utf8); $unicode_string = utf8($$workbook_ref{"Sheet1"}[0][0])->as_string; # this will not work for characters outside ISO-8859-1: $latin1_string = utf8($$workbook_ref{"Sheet1"}[0][0])->latin1; Of course there are other modules than Unicode::String on CPAN that handle conversion between encodings. It's your choice. Table rows in .sxc files may have a "table:number-rows-repeated" attribute, which is often used for consecutive empty rows. When you format whole rows and/or columns in OpenOffice, it sets the numbers of rows in a worksheet to 32,000 and the number of columns to 256, even if only a few lower-numbered rows and cells actually contain data. Spreadsheet::ReadSXC truncates such sheets so that there are no empty rows after the last row containing data and no empty columns after the last column containing data (unless you use the 'NoTruncate' option). Still it is perfectly legal for an .sxc file to apply the "table:number-rows-repeated" attribute to rows that actually contain data (although I have only been able to produce such files manually, not through OpenOffice itself). To save on memory usage in these cases, Spreadsheet::ReadSXC does not copy rows by value, but by reference (remember that multi-dimensional arrays in Perl are really arrays of references to arrays). Therefore, if you change a value in one row, it is possible that you find the corresponding value in the next row changed, too: $$workbook_ref{"Sheet1"}[0][0] = 'new string'; print $$workbook_ref{"Sheet1"}[1][0]; As of version 0.20 the references returned by read_sxc() et al. remain valid after subsequent calls to the same function. In earlier versions, calling read_sxc() with a different file as the argument would change the data referenced by the original return value, so you had to derefence it before making another call. Thanks to H. Merijn Brand for fixing this. INSTALLATION This is a Perl module distribution. It should be installed with whichever tool you use to manage your installation of Perl, e.g. any of cpanm . cpan . cpanp -i . Consult https://www.cpan.org/modules/INSTALL.html for further instruction. Should you wish to install this module manually, the procedure is perl Makefile.PL make make test make install BUG TRACKER Please report bugs in this module via the Github bug queue at L SEE ALSO L has extensive documentation of the OpenOffice 1.x XML file format (soon to be replaced by the OASIS file format (ODS), see L). AUTHOR Christoph Terhechte, Eterhechte@cpan.orgE COPYRIGHT AND LICENSE Copyright 2005-2019 by Christoph Terhechte Copyright 2019-2023 by Max Maischein This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Spreadsheet-ReadSXC-0.38/MANIFEST0000644000175000017500000000316114456566532015660 0ustar corioncorionChanges lib/Spreadsheet/ParseODS.pm lib/Spreadsheet/ParseODS/Cell.pm lib/Spreadsheet/ParseODS/Settings.pm lib/Spreadsheet/ParseODS/Styles.pm lib/Spreadsheet/ParseODS/Workbook.pm lib/Spreadsheet/ParseODS/Worksheet.pm lib/Spreadsheet/ReadSXC.pm LICENSE Makefile.PL MANIFEST MANIFEST.SKIP META.json META.yml Module meta-data (added by MakeMaker) README t/00-load.t t/01-parseods.t t/02-read-fh.t t/02-read-xml-file.t t/03-error-handling.t t/04-hidden-sheet.t t/04-text-outside-xml.t t/05-print-area.t t/06-cell-hyperlink.t t/07-hidden-cols.t t/07-hidden-rows.t t/07-print-headings.t t/08-color.t t/09-formula.t t/1.t t/10-wide-col2int.t t/11-date-formats.t t/12-active-sheet-name.t t/13-merged-areas.t t/14-no-settings.t t/15-gh3-warnings-with-empty-sheet-name.t t/16-gh5-custom-styles.t t/16-warnings-with-styles.t t/17-gh7-OrderBySheet.t t/20200617_Testnummers_inclusief_omnummertabel_GBA-V.ods t/active-sheet-2.ods t/attr.ods t/colors.fods t/colors.ods t/Dates.fods t/Dates.ods t/empty.ods t/formats.ods t/formula.ods t/GasLichtWater.ods t/gh5-custom-styles.ods t/hidden-cols.fods t/hidden-cols.ods t/hidden-rows.fods t/hidden-rows.ods t/hidden-sheet.ods t/hyperlink.ods t/merged.ods t/NewAPI.ods t/print-area.ods t/print-titles.ods t/regression-hidden-cols.t t/regression-hidden-rows.t t/regression-newapi.t t/regression-stockchart.t t/StockChart.ods t/t-date.ods t/t-multiline.ods t/t.sxc t/test_spreadsheet_import.ods t/text-outside-cell.xml t/wide.ods testrules.yml Todo.pod xt/99-changes.t xt/99-compile.t xt/99-manifest.t xt/99-pod.t xt/99-synopsis.t xt/99-test-prerequisites.t xt/99-todo.t xt/99-unix-text.t xt/99-versions.t xt/meta-lint.t Spreadsheet-ReadSXC-0.38/LICENSE0000755000175000017500000002127514456566532015545 0ustar corioncorion The Artistic License 2.0 Copyright (c) 2000-2006, The Perl Foundation. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble This license establishes the terms under which a given free software Package may be copied, modified, distributed, and/or redistributed. The intent is that the Copyright Holder maintains some artistic control over the development of that Package while still keeping the Package available as open source and free software. You are always permitted to make arrangements wholly outside of this license directly with the Copyright Holder of a given Package. If the terms of this license do not permit the full use that you propose to make of the Package, you should contact the Copyright Holder and seek a different licensing arrangement. Definitions "Copyright Holder" means the individual(s) or organization(s) named in the copyright notice for the entire Package. "Contributor" means any party that has contributed code or other material to the Package, in accordance with the Copyright Holder's procedures. "You" and "your" means any person who would like to copy, distribute, or modify the Package. "Package" means the collection of files distributed by the Copyright Holder, and derivatives of that collection and/or of those files. A given Package may consist of either the Standard Version, or a Modified Version. "Distribute" means providing a copy of the Package or making it accessible to anyone else, or in the case of a company or organization, to others outside of your company or organization. "Distributor Fee" means any fee that you charge for Distributing this Package or providing support for this Package to another party. It does not mean licensing fees. "Standard Version" refers to the Package if it has not been modified, or has been modified only in ways explicitly requested by the Copyright Holder. "Modified Version" means the Package, if it has been changed, and such changes were not explicitly requested by the Copyright Holder. "Original License" means this Artistic License as Distributed with the Standard Version of the Package, in its current version or as it may be modified by The Perl Foundation in the future. "Source" form means the source code, documentation source, and configuration files for the Package. "Compiled" form means the compiled bytecode, object code, binary, or any other form resulting from mechanical transformation or translation of the Source form. Permission for Use and Modification Without Distribution (1) You are permitted to use the Standard Version and create and use Modified Versions for any purpose without restriction, provided that you do not Distribute the Modified Version. Permissions for Redistribution of the Standard Version (2) You may Distribute verbatim copies of the Source form of the Standard Version of this Package in any medium without restriction, either gratis or for a Distributor Fee, provided that you duplicate all of the original copyright notices and associated disclaimers. At your discretion, such verbatim copies may or may not include a Compiled form of the Package. (3) You may apply any bug fixes, portability changes, and other modifications made available from the Copyright Holder. The resulting Package will still be considered the Standard Version, and as such will be subject to the Original License. Distribution of Modified Versions of the Package as Source (4) You may Distribute your Modified Version as Source (either gratis or for a Distributor Fee, and with or without a Compiled form of the Modified Version) provided that you clearly document how it differs from the Standard Version, including, but not limited to, documenting any non-standard features, executables, or modules, and provided that you do at least ONE of the following: (a) make the Modified Version available to the Copyright Holder of the Standard Version, under the Original License, so that the Copyright Holder may include your modifications in the Standard Version. (b) ensure that installation of your Modified Version does not prevent the user installing or running the Standard Version. In addition, the Modified Version must bear a name that is different from the name of the Standard Version. (c) allow anyone who receives a copy of the Modified Version to make the Source form of the Modified Version available to others under (i) the Original License or (ii) a license that permits the licensee to freely copy, modify and redistribute the Modified Version using the same licensing terms that apply to the copy that the licensee received, and requires that the Source form of the Modified Version, and of any works derived from it, be made freely available in that license fees are prohibited but Distributor Fees are allowed. Distribution of Compiled Forms of the Standard Version or Modified Versions without the Source (5) You may Distribute Compiled forms of the Standard Version without the Source, provided that you include complete instructions on how to get the Source of the Standard Version. Such instructions must be valid at the time of your distribution. If these instructions, at any time while you are carrying out such distribution, become invalid, you must provide new instructions on demand or cease further distribution. If you provide valid instructions or cease distribution within thirty days after you become aware that the instructions are invalid, then you do not forfeit any of your rights under this license. (6) You may Distribute a Modified Version in Compiled form without the Source, provided that you comply with Section 4 with respect to the Source of the Modified Version. Aggregating or Linking the Package (7) You may aggregate the Package (either the Standard Version or Modified Version) with other packages and Distribute the resulting aggregation provided that you do not charge a licensing fee for the Package. Distributor Fees are permitted, and licensing fees for other components in the aggregation are permitted. The terms of this license apply to the use and Distribution of the Standard or Modified Versions as included in the aggregation. (8) You are permitted to link Modified and Standard Versions with other works, to embed the Package in a larger work of your own, or to build stand-alone binary or bytecode versions of applications that include the Package, and Distribute the result without restriction, provided the result does not expose a direct interface to the Package. Items That are Not Considered Part of a Modified Version (9) Works (including, but not limited to, modules and scripts) that merely extend or make use of the Package, do not, by themselves, cause the Package to be a Modified Version. In addition, such works are not considered parts of the Package itself, and are not subject to the terms of this license. General Provisions (10) Any use, modification, and distribution of the Standard or Modified Versions is governed by this Artistic License. By using, modifying or distributing the Package, you accept this license. Do not use, modify, or distribute the Package, if you do not accept this license. (11) If your Modified Version has been derived from a Modified Version made by someone other than you, you are nevertheless required to ensure that your Modified Version complies with the requirements of this license. (12) This license does not grant you the right to use any trademark, service mark, tradename, or logo of the Copyright Holder. (13) This license includes the non-exclusive, worldwide, free-of-charge patent license to make, have made, use, offer to sell, sell, import and otherwise transfer the Package with respect to any patent claims licensable by the Copyright Holder that are necessarily infringed by the Package. If you institute patent litigation (including a cross-claim or counterclaim) against any party alleging that the Package constitutes direct or contributory patent infringement, then this Artistic License to you shall terminate on the date that such litigation is filed. (14) Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL LAW. UNLESS REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE OF THE PACKAGE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.Spreadsheet-ReadSXC-0.38/testrules.yml0000644000175000017500000000012114456566532017275 0ustar corioncorion--- # This test suite can be run fully in parallel par: - t/*.t - xt/*.t