#!/usr/bin/perl
#use blib;
use PDL;
use PDL::Audio;
#use PDL::Graphics::PGPLOT;
use PDL::Audio::Pitches;
use PDL::Dbg;
use PDL::Complex;
$|=1;
*_dur2time = *PDL::Audio::_dur2time;
sub HZ (){ 22050 };
sub freqz {
my ($a, $b, $w) = @_;
$w = 512 unless defined $w;
$w = zeroes($w)->xlinvals(0,M_PI*($w-1)/$w) unless ref $w;
$w = exp i * r2C $w;
Cabs(Cdiv($a->rCpolynomial($w),$b->rCpolynomial($w)));
}
sub play {
my $pdl = shift;
#line $pdl;
$pdl->scale2short->playaudio (rate => HZ, @_);
}
if (@ARGV) {
$pdl = raudio $ARGV[0];
} else {
binmode DATA;
local $/;
$pdl = pdl unpack "C*", <DATA>;
$pdl->rate (11025);
}
print describe_audio($pdl), "\n";
$pdl = $pdl->float->filter_src($pdl->rate / HZ);
$pdl = $pdl->filter_center;
my @stdenv = (pdl(0,0.1,0.2,0.9,1), pdl(0,1,0.6,0.6,0));
$env = gen_env $pdl, @stdenv;
sub tst($$) {
push @tests, [$_[0], $_[1]];
}
tst src, sub {
for (qw(22050 11025 8000)) {
print " $_"; play $pdl->filter_src(44100 / $_), rate => $_;
}
};
tst contrast_enhance, sub {
for (qw(0.1 0.2 0.3 0.6 1)) {
print " $_"; play $pdl->filter_contrast_enhance($_);
}
};
tst granulate => sub {
for (qw(1.5 1.3 1.1 1.0 0.8 0.6 0.5)) {
print " $_"; play $pdl->filter_granulate($_);
}
print " +SRC:";
for (qw(1.5 1.3 1.1 1.0 0.8 0.6 0.5)) {
print " $_"; play $pdl->filter_granulate($_)->filter_src($_), rate => 44100;
}
};
tst modulated_src => sub {
print " 2 hz 0.7 sine...";
play $pdl->filter_src(1, 5, 0.7 * gen_oscil $pdl, 2/HZ);
print " 5 hz 0.3 sine...";
play $pdl->filter_src(1, 5, 0.3 * gen_oscil $pdl, 20/HZ);
print " 90 hz 0.5 sine...";
play $pdl->filter_src(1, 5, 0.5 * gen_oscil $pdl, 90/HZ);
print " 300 hz 0.8 sine...";
play $pdl->filter_src(1, 5, 0.8 * gen_oscil $pdl, 300/HZ);
};
tst ring_modulate => sub {
print " ring modulated with 20 hz sine";
play $pdl->ring_modulate(gen_oscil $pdl, 20 / HZ);
print " ring modulated with 1000 hz sine";
play $pdl->ring_modulate(gen_oscil $pdl, 1000 / HZ);
};
tst touchtones => sub {
my @h = ( 697, 697, 697, 770, 770, 770, 852, 852, 852, 941, 941, 941);
my @v = (1209,1336,1477,1209,1336,1477,1209,1336,1477,1209,1336,1477);
my $dur = HZ*0.22;
my $env = gen_env $dur, pdl(0,1,2,9,10), pdl(0,1,0.9,0.9,0);
my @mix;
for (0..$#h) {
my ($h, $v) = ($h[$_], $v[$_]);
$h = $env * gen_oscil $dur, $h/HZ;
$v = $env * gen_oscil $dur, $v/HZ;
push @mix, ($_*$dur, $h, $_*$dur, $v);
};
play audiomix @mix;
};
tst noise_fm => sub {
my $pdl;
print " 100 hz";
$pdl = gen_rand 2*HZ, 100/HZ;
$pdl = gen_oscil $pdl, 880/HZ, 0, $pdl * $pdl->xlinvals(0.001,0.1);
play $pdl * gen_env $pdl, @stdenv;
print " 6000 hz";
$pdl = gen_rand 2*HZ, 6000/HZ;
$pdl = gen_oscil $pdl, 880/HZ, 0, $pdl * $pdl->xlinvals(0.001,0.1);
play $pdl * gen_env $pdl, @stdenv;
};
tst simple_fm => sub {
my $fm = gen_triangle $pdl, 16/HZ;
$fm *= $fm->xlinvals(0,0.1);
print " 900 hz sine + vibrato"; play $env * gen_oscil $pdl, 900/HZ, 0, $fm;
print " 900 hz sine + sound"; play $env * gen_oscil $pdl, 1/HZ, 0, $pdl * 0.08;
};
tst filters => sub {
print " filter_lir(<0.05s echo>)"; play $pdl->filter_lir(pdl(0),pdl(0.5), pdl(HZ*0.05), pdl(0.5));
print " ppolar(0.8,220)"; play $pdl->filter_ppolar(0.8,220);
print " zpolar(0.8,220)"; play $pdl->filter_zpolar(0.8,220);
};
tst waveshaping => sub {
# this is the spectrum of a cello playing as3
my @i = (1.01, 1.99, 2.99, 4.00, 5.00, 6.00, 6.99, 8.00, 9.00, 9.98,
10.99, 11.99, 13.00, 14.01, 14.99, 16.02, 17.00, 17.98, 19.00, 20.01,
21.02, 22.02, 22.22, 22.93, 24.05, 25.04, 25.99, 27.00, 29.03);
my @a = (.0839, .0414, .1265, .0196, .0377, .0117, .0111, .0151, .0207,
.0033, .0090, .0039, .0039, .0031, .0038, .0023, .0026, .0069, .0020,
.0017, .0007, .0006, .0002, .0001, .0003, .0002, .0003, .0003, .0003);
# add a slight vibrato
my $tri = gen_triangle 4*HZ, 1.5/HZ;
my $pdl = gen_from_partials (4*HZ, as3/HZ, \@i, \@a, 0, 16/HZ*$tri);
play $pdl * gen_env $pdl, @stdenv;
};
tst simple_generators => sub {
print " 1/f noise"; play $env * gen_rand_1f $pdl;
print " 900 hz sine"; play $env * gen_oscil $pdl, 900/HZ;
print " 900 hz triangle"; play $env * gen_triangle $pdl, 900/HZ;
print " 900 hz asyfm"; play $env * gen_asymmetric_fm $pdl, 900/HZ;
print " 900 hz sine summation"; play $env * gen_sine_summation $pdl, 900/HZ, 0, 5;
print " 900 hz sum of cosines"; play $env * gen_sum_of_cosines $pdl, 900/HZ, 0, 5;
};
tst noise_filtering => sub {
my $pdl = gen_rand 2*HZ, 1;
$pdl = $pdl->filter_ppolar(0.97, 440/HZ);
$pdl = $pdl->filter_lir(pdl(0),pdl(0.1), pdl(HZ/440),pdl(0.99));
play $pdl * gen_env $pdl, @stdenv;
};
tst spectrum => sub {
$pdl = gen_fft_window(100, KAISER, -1.0);
#line spectrum $pdl, 'db';
#line spectrum $pdl, db', KAISER;
#line spectrum $pdl, 'db';
exit;
} if 0;
tst karplus => sub {
my $pdl = concat gen_rand(0.4*HZ, 1), zeroes(5.0*HZ);
my $dur = 2*HZ;
my $freq = 440/HZ;
my $damping = -0.5/HZ;
$freq *= M_2PI;
my $e = exp $damping;
my $c1 = 2 * $e * cos $freq;
my $c2 = $e * $e;
my $tm = atan2 ($freq, $damping) / $freq;
my $scale = sqrt ($damping*$damping + $freq*$freq) * exp (-$damping*$tm) * HZ / 750000;
print "$scale, $c1, $c2\n";
$pdl = $pdl->filter_lir(pdl(1), pdl($scale),
pdl(1, 2, int(1/$freq+6)), pdl(-$c1, $c2, -$scale*0.1));
# line $pdl;
play $pdl * gen_env $pdl, @stdenv;
} if 0;
tst karplus2 => sub {
my $pdl = concat gen_rand(1.*HZ, 1), zeroes(5.0*HZ);
my $dur = 2*HZ;
my $freq = 440/HZ;
my $freq2 = 88/HZ;
my $reson = 0.05;
$pdl = $pdl->filter_lir(
pdl(1, 2, 1,2),
pdl(-$reson*$reson, 2*$reson*cos(M_2PI*$freq),
-$reson*$reson, 2*$reson*cos(M_2PI*$freq2)),
pdl(int(1/$freq),int(1/$freq2)), pdl(0.49, 0.499));
# line $pdl;
play $pdl; # * gen_env $pdl, @stdenv;
};
tst vibro => sub {
my $pdl;
$pdl = gen_oscil 2*HZ, 40/HZ;
#$pdl = gen_oscil 2*HZ, 40/HZ, 0, $pdl->xlinvals(0,80/HZ);
#$pdl = $pdl->filter_zpolar(0.9, 80/HZ);
#line $pdl->slice("0:30000");
$pdl = pdl(1,1)->partials2polynomial(1)->polynomial($pdl);
# line $pdl;
play $pdl;
exit;
};
tst chorus => sub {
play $pdl;
my $lfo = $osc = 0.02 * gen_rand $pdl, 30/HZ;
my $dly = $pdl->filter_src(1, undef, $lfo);
play $dly->rshift(0.030*HZ) + $pdl;
};
tst phazor => sub {
play $pdl;
print "rfft...";
my $fft = rfft($pdl)->Cr2p;
my $im = im $fft; $im .= $im->rshift(-10000);
print "irfft...";
my $fft = irfft($fft->Cp2r);
play $fft;
} if 0;
tst strong => sub {
# as done originally by Alex Strong
my $pdl = zeroes HZ*5;
my $freq = int (HZ/220);
my $x = $pdl->slice("0:".($freq-1)); $x .= gen_rand $x, 1;
$pdl = $pdl->filter_lir(pdl(0),pdl(1),pdl($freq,$freq+1),pdl(0.5,0.5));
play $pdl;
};
#print "original version..."; play $pdl; print "\n";
for (@tests) {
my ($name, $sub) = @$_;
print "$name...";
&$sub;
print "\n";
}
exit;
#$pdl2 = filter_granulate $pdl, 0.8, rate => 44100;
$pdl2 = filter_contrast_enhance $pdl, 0.1;
#$pdl->scale2short->playaudio(rate => 44100);
$pdl2->scale2short->playaudio(rate => 44100);
exit;
$pdl = zeroes(4096);
$pdl = sin $pdl->xlinvals(0,20) + sin $pdl->xlinvals(0,50);
$pz = zeroes(40960);
$pdl2 = filter_src ($pdl, 0.5, 80, $pz);
#line $pdl2;
$pdl2->scale2short->playaudio;
__DATA__
PONNOQSUY[_cinsw{¡¥§ª¬¯±±²²°¯ª§¤ }xurojheb`]]\[[ZZZZ[]_acfhmqv}¡¥§©ªª©¨¦¥£¢ |wsplifdba`]]^]^``adegimoruy}
¢£¥¦¦§§¦¤¢
|yvrpmkjhfdddeegijlnortvwz}
¡¡¢¡¡¡ {vsplhgfdba`____behkosw|
~}}|zxvtspmkigdccdefgiknqsvy}¢££¤¤£¢¢ |yvrpmjijjijllmnoqqrrruvwy{}~zwtqomjggfeeefgiikmoqtvy{}
}zywutrpnmkjjijkmmoprtwy|
~}{zxwvutrppqqqrrstvvwyz{{}~
}{xvutrqqrrqrrrqqppqrsvxz}
}{zxvsrrpponoqpoprsuvwz{|~
~|ywutrpnllkjjkmnoqruwxz|~|{ywvutttsrqrsrrrsttttvwy{~
~||{{zyyy{}~~~~~}|{{ywvvwvwxy{}~
~{xvtsrpoopppqsuwyz|
~|zxxxvvvvuvvvwxxxxxxyyz{}~
~|{yxxwwvvvwwxxzz{|{||~~
~}|zzyxwvwwwwxz{{}
~~}~~~~}}||{{{{{{{{|}~
~}}|zyzyy{zzzz{{|}~~~
~}}|{||{}||}}~
~~}{{}|||}||}~~
~~~~~}}~}}}}||||||||||}~
~~}}}}~}}}}}}}}~~~~~~~~
~}|{{zyyyyyxyyzz{}
~~}|||{zzyz{{{{|}}
~~~~~~}~}}|z{zzyz{|}~
~`b{ztroPPWW° @_¿¿ ¿Ð`?Poïÿÿÿÿÿÿø7@¼u® /DD */o¿è T ?g]k·¼¤XSw§ËÿüûÿÿìëèÐ ©('W¿åÈ°ljbVJOox`DOo¯¿ÇÀ´± lXVH;8$'?_«ÏØÊÇÄ´qry~|l\R]ao¥³°¦trlhc]PDOco¯»ÍßâÔÀ¤pidistppnd`ceo§¦pil`RPNMOV[k·¿¸¨xqrtww
{§ª unm`VW_mw§¹³¬¦p`b[coplrmhb^_gw§¦¡ ytklo{®»À½´¢|ja_`_aghcg`_aago{§®¦ tnl`\bgs¥±¹´¨tqospowzts{|u}¦¯³®¤xlb`TSW_gm{¡ ¢¤z}xru}|wy~zzz£ª®ª£ pi\WZ]elpv
|tpniknnnjfono}¢¨§¨¨ |rjdgmqu}¢¢umkiknqtux|tmgfcgkntv£¡¥¢ ~|}
tlnhfefoorpsxxz}xywy|}zurqoowvw~|yy|{zw}~
{wploou{
z}~~zxu{zyxqsyzz
|xx}|~zzz}~~
~|z{
~xyxxzz}
|{}wy|
|{|y|{{}
{zvwwtw{{z}~|}|~z{{xywvrstvw{{|
~}{}}}~~~z{zxy}}
~~~
~}yvy|
|~
}{|{{}|||~
~~~zzzx}~~|||{{z
|||~}|}zwstwvvyz}
|zxuyz{}
~{~}z{{{}|x}|}
yyzyvz}~
~
~~}~
~~
x{uzy{yz{{~xx|«p`ZTVYXZ\Y]i{¡¢¤¢£ }xpopkkmosyyy}
tmheabacisy~|wrjfkoou{}}}z{
|xpijigjjou{
¢¡¢ |upmmlnnouyz|
~~xsrmjjknuz}
|zxtqppoquy}~xuwwy{
|zywvrvz|
|zyxxy{|}}{zzzuwyz~
~|yy}
|y{{{{z}
||{yz{~~
~~~~~~|xxz{{}
~~}~~~}~}
~~}|{}~
~~|}~~}|}zxy||}~
{z|{{~~}||}
}||||~
~
~}~}~
~}~
~z{}~~~
~~~}|}|
~}{}~~|{}
~
~|yz}
~|{~|~}}}~~}
~{}
~}~}~}
~~||{{}
|z{|~
}~~
~}}{zz}}}~||}
~~
|{|
||yzy|{
}}tuxwxvuwyxx{ywz}}~
||~
~||}
~~}~}~
}|{~}||}z{
~}~
~~
~
}|}~}~
}~~}}z}~}
}~}}}{{}~
~|~
~
}~|}
||~~~~~~~~
~
~
~
}}}~~}~}~}}~~
~
~~
~~
~}~}}}}~}~~}~}}}~~~
~~~~y~
~
o whoyH&7[«¿Ô³°`K\o¶¸@?¿÷ÿÿÿÿÿþиd@ +?[c¿ÔÛïÿÿÿÿÿÿöà°rvz
»°{eakl`ZRD(/K_oÇÓ×ßãááą̀x`D0" &/;G_®¹Áü´³¹ÁÀ²X@03G[gs}¦¤xhckw»ÏßïøðظdL@2& ?_{¯¿ÏÝíûÿÿúäȬx`TMNOW]gihf^P:(%3?O_s
ÇçûÿÿÿÿÿøèØÀ¨x`@ 3K_w§«¦¤¢¢ £ ¢»ÃÃÀ´¢hTD80($#-3:GWo«¿Ï×ßàÔ° vnh`XTUYbo£§ªª¤vlf`XTW^`co{£¨¢p`XTUZcoy«·ÃÏÑÊÀ¬zhXE8(+?Uk£³¿Ä¼²¦§³·¶´ª |p`P@4.'(+/4;EUgw«¿×ëúÿýøèØÀ¨t`PHFGJKJIIMSYbjlmlihgoy
©±¹¿ÅËÓÙÚÔȸ¤lXD4( +7GWjw«µ½ÁÀ¸©zwy|}~vkdbeefjqy©®¯®ª¤ tdYPPQU_m{§³º¿Åü° lb\VSTTUY_jr{
£ª®®ª¦¢xhTD4( %-7ESez¯¿ËÑÐËĸ°©¢|upnnlheb_^\[[YYWTUX\ckw¥¯»ÇÏÒÓÎĸ¨p`ULDAACGOYcoz
zth`YWY]bjr{
£¬³¶´°¨ tpkhikns}
£¦¤
|vrpppqswz~
yvrrstu}©¯µ¶¶±¨ zpdXPNKJMRYcmw
¢{uld\RJDDEINV_m£¯·¾¾»¸´®¦|slfd`_acgkmoppprqqsuwz}£ª««ª¤ rjc\YWW[_ems{
{zzywx|~}zxwvxy~zvpllmosv{¡¤¥¥¤ ztpljhhkmnswy}¡ |th`\XWVX[^cmt{¡¥©¬¬ª¦¢}xwxyzyxvurpomjhknqv{£¨©©¨¤
xpkhdacgkmqw{~~
~zvsrpooosw{|zywtruwz
{||w`exw07o¯º»ËÕ¨¯ 8(NW¿ÿÀ` @ ?w§¬¿È¿ÿÿè÷ÿÿÿÿðÀ»´P6 ;[§¦§ÃÏãûÿÿÿÿÿðÐËÀ¤§¿¸pTHJB0?wpidXP@:?UoÛåÞßÞȬ¡xppX@?MOS]o«¯¦uzlT2/Mkxj`eo{§¬¤¤¦¯½Ëßèàа`H0($#'$#/Gk§¿×àÝÛ×ÞæïôîàȨl\STPH@61* %3CWkw·Ëß÷ÿÿÿÿÿèȨxldT@$#5COU^fu«·¿ÏÚÙÐÀ²¨¥«±µ° pP4 #/9EIS_o§³¹¹µ¬©¥ xlccirw~xnijrrsuvtoup`\]afmy
¥«©ª©«µº¾¸°¡hTID@=?A@?ACGS_o§¯·¾¿ÃÇÊÇÇȸ°ª¢
th\L<(/?Sgv¯¿Í×ãìëæÜÌÀ´¨tdVD=2&$)/7?JS]cegow³¿ÏÕ×ÕÓÒÎÈÀ²¤r`PD:677=FKQWcfku£µ¹¹µ®¥}vnhcegio{
}urplhioty¥ª®®«¢xjecbbbb`__`agjow£§²·¹»¶°¨rh`UI@2,+-3?JWco{«µ½ÃÇÉÆÄÀ¸°¢xtpjdZPHB<:<?BIOS]fo¥³»ÃÉËÈĽ·²¨|pd\TNKHLQZagnsuv} £§ª«©¥xpkf`]_aagopw}
{xwwz
~|}~~|~~{vutrpoux}
¥«¯±±®©£xpkd^XUSQPU[_ksy
¦©¨¦¤¤ xlbXPJEB@CJRW[eo{
¥®µ·º¹¸´¬¦ xplhdb`_a``^\\]_aiou}£ª®«¬«¨£~yrmfcbbefgkouz}~~
~~{}~
~yvspqrsuw{¡£¢}vrmhijjkmqsuuyyz||}
¡§«««¨£ {upi`XTRQSY_emw £¤£¢¢ ~{yxrlieeebadghms{£¦¨¨§¥zvspljllmnprv{zx{{yzz{}~~|zyxutuwz|}
}ywwvuwyxz|~
~}}{{}zz{ywuvvvww{||}vpmifegjnqswz}|vvtrsqptty{}}
}yx{~
~}~|{|~~
~}}~}}}}~{zz{{zxxyyz
|zyxursswxwzyz}|
}{yzxtuuutrux|~
||~~}}|z{}~
{{|~
~~}~~~}}}~~
}|}~{y{{zxxyz~
~~~}yxyxwxy{}~~~}~|}
~~|}}}
~~~
~{xy|~
}{zzz{}~~~
|zywvtrrttvy|
~}}~|yy{|z{~
~~|||~
~~~}~
~~}}~}|}
}|}~||}}~
}|{{|}}~~{z{{{~~~~}}~~}~
}}~|}}}zx{~~
}|{{{{|{{}~}}z{}}}
}~
~~
~~~}}|||~~~~}{|~
~}}}|~
~
}~{o
¨poukop_w]fbbPO_aplu«»ÅÓãïÿÿÿüþþìäàÀp`P@9:6( 7Vcs³Ç×åïýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþòàÌ´ dH0 #/?JWgs£¯»ÇÒÙßæìóûÿÿÿÿÿÿøêÜ̼¬teZQH@80& '5CO_o¥³¿Í×ßçíõúýÿÿüöðäÚÐȼ´ª xmbVJ@2("#/9CNYcnw£¯ºÃÊÒÚßãæéíò÷ûþÿýøðàÒ° xhVH<2*$ !'/:EU_n{¥¯¹ÂÇÍÏÑÕÙÝßàáàÞÜÙÖÒÎÊÈż´ª tfXH<0$
%/;FOZgr}§³¿ÇÏ×ÞãçìïñòðêäÜÒÈÀ²¦|ph`XRLHFB@<742.+)*+-/27;?FOYeo{©±¹¿ÉÏÕÙÝáåççæåäâÜ×ÑÈÀ´¨pbTH@4,$'.6?MWcmw¥³»¿ÆËÑÕ×ÚÜÞßÞÝÜØÓÎÈÀ¸® rjaYRJD@:52,)&$"!!#'+29CMWco{§³½ÆÎÔÛÞáãäãáàÝÛØÔÎÈÀ¸°¨ xlbXPE@4.)&" "$&+15;BIOW_fowª±·¿ÅÊÏÓÖÚÜÛÛÜÙÔÐÊļ´ª xph]TLFA<720,*((')+/3:CKU^go{
«³¹¿ÇÌÏÓÕÖ××ÖÖÔÐËÅÀ¸°¨ vme\UNH@;7410.-.149=CJRZ_gqw§µº½ÁÆËÏÑÓÔÖÖÔÑÎÉļ´¬¢ulbZRLIDB@>><;:::;<?EIOU]gq{§¯¶¼¿ÅÉËÍÎÍËËÊÆþ¸µ±¬¦¡
vph`XRNHD@<:989;>CGKOV[agmsy¡§¯µº¾ÂÅÇÉËËÊÊÇÃÀ¼¶°¨ xrlf`\XRNJFCA@???ACGJOTY^eksz¥ª¯³·»¾ÁÁÃÅÄÃÃÁÀ¼¸´°¨
xpjb[UPLGCA?==>AEILQV[bgou{¡¦«¯±´¶·¸¹º¹¸¸µ²°¨¤ ~vqlid`\XTRPOMMMMKKLMOSW[agnv}
¤§«¯°³¶·¸¹ºº¸µ´°«¨¢}xqkfb^[YWUTTSSUWY\]_dgmqtw{
£¨«¯²³³´³²±¯«©¥¢xrlfc`[ZYWTRQPQQRUW[aejqw}£§©«®¬ªª©¦£ |xtqnkhda_\YWVWXXYZ]_bdgkorv|
¢¦©¬¯±³³´´²°®ª¦¢|vrnkheb`_][ZZZ[[\^_bcdinquy~ ¢¤¥§¨¨¨§¦¤¢ ~zuplheb_\[ZZZYZ[\^adgjnqtw{ ¡£¤¥¤¤¤£¡
|xurpnmkihfdcaabcbbcegilorvz}£¥¦¨©©¨¦¥¤¢
~yutqmifdca`^_`acfiknqsuwz|
¡¢¡ ¡¡ ~{xvtpnljigeeeedeefghknpsw{ ~|ywtroljhhgghggijjjknpsuwy}
|zvrqnlkihgffeegghjlnoqtw{~
{xvrnkigea``aabdegjlpsvy||zxtttpmoljkjijijjmprsuwy}}|zxvtsponljjklmnooqrsuwz||zxvttsrppppoopqqqrssstvwy{~
}zxusrpoooppprstuvvxz{}
~}|zxwvttttrrsrrstuwy{|}
~~}||||{{zyzzzyyzyzzz{{{{|}
~}|{yxvwvuuuuvvvwxyz{|}~
~|{zyxxxwxyyyzzz{|~
~~~~~~~~~~~~~~~}}~~
~~~~~~~~~~}}}~
~~}||{{||||}~}}}}}~~~~
~}}}|{{|||||||}}}~~~
~~}|{|||||||}}}}}}}~
~~~}||{{zz{{|}~~~}|{{{{{{||{{{{|}}}}~~~~~
`uovx}h~hpK_
ª t}P<?°ßÿ @ T?·ïÔïÿðçÿ°ßä / ?`W_¯àw¶HC4/KXIUJCTo¯ÔÀspH[ªxhP_w·Çßýüðùôж± p8("$!/Ofq{¥©³°®ªhemprh^fbTQ]w¯¿À¼ªph\L:27?Ucs§»ÇÓßÐÀ°rdXIBAIJIMWen{¦³»À¸¨xhihhkns¿Â¼µ¬zlhdYSVYYgv{¯°¬ª¨¦ xhVPNJGMU^eo§¨¢|ty~x}
£«®¤zpbXROR[gu~zrd_`]fjjkrvx{§²¬£¢|pjcfku~£ xrh`]\Z[abeor{|¢ usldcdjjs£¬ª¤
pijkmmz|lea\X^abdo{¤©¨§¥ |rmpmo{
xkd`][_fkpv}rmfc``begmy£¤¥¤¢{urnorwpjd][^cjosw}~}yxvpqtw{
¢¦§£¡¢~xpnosru{}~xtpnmmoosvu}
|yywyz|
|yvusrsspruuvy}}~zxzxuty{}~|}}~|{}|}
|{xuwvrryxrw~~
|}zz}~
}{{|||{}}
}~~{{yzxsvwz}~~
~}{xuvyzxy}~~{xvvtvvv{z{~|zzx{~
zzxxzxxz}}~|y{x{~|~
~|zwz|{~
~||~
~~~}{{}|{}~
~~~
|~|~~}z|~~~~~z|zxz~~~~|z~}}
~~
~
}
}~|{~~|y}}|{}
}|}~~|~
~zx|
}zwxxvy~|}~~
{wxwv{z{{z|}
{|zyz{}|yywy{{~
}yyyyz{}
~{{}~
}|||~|}
~xtsstuy{
~~~{xy{{~
~|{yx{}~
~|zy~~}~{~|{{|
~}~
}|~|~
}zz}
~z{{}~
~}{{|}}
~~|}
}~||~~}}~
}
~~~~}
~|}{~}}~~}~
~~}}}~~~}
~
~{~}}~
~~
~}}}
~
~}|}}~~~~~~~}}~~
|{
|}
~{~
x|zy~po}utxtrlhca_bfbcinps{|
|vvrjhiqy|~
~zy{{|~~}z{}|zxtrruvvz
}zxyzz|
}zvsrpqrtx{}
~{vqqpnmlnoouy||yzyyz{|zx{zyy}|{|~}}~~}
~{xwtppquwy~
~|zxwxz}}
~
ywvtrrsvxz|
}yuvrqrtxxz}||}~zyyxxxx||}|yyxvwyw{~~~~}||}}~~|}
~~}|~~}
~zyywvwwy{}~
~||zyyxwwz|}|
~~~~~~
}||}~~~}}~~
~}~~}~~~|}~
~}~~}~~||}|}}~
|zxyzyz|}~
~~}}}~
}~}}
}}}~}||~~
~}|}|{|z{||}
~|||}}
~~~~~~
}}|{yy}z{}xw{t}op_p@?oumo ¯¼ËûÿÿÿÿÿøаP ?fwz·¿ÏßïûøêâȬ´²¨¦
t`D0"'?Seosw§¬ª¬µ·²¤zp`PHMW_o¡¦ª©¤|tle^[[]_istpkggiiow¥¯»¿ÉÍÍʸ° x`L@2,(%-5:==FUew«·¿ÅÈÏÕÒÈÀ¸¬£
tj`ZRH<0("+7K_s¯½Ë×æïôôðâÔĸ¨l`TF<1**.7FS_kw®·¿Æĺ°©¢xhVH>:9;COUYbiow¥¯¶·µ´²¨xrnpsw
}|zutssx{~~~}xrlheegjnu}£®´·º¸´®¨¤¢xi\PFCGHHJNRW_o{¡£¥©±¶¹¹º½»´¬ p`TJE@<:98:?JS_o{§µ¿Í×ÛÙÐƺ¬ xmfb^\ZTSRLIFFJOYakw«³»ÃÇÉÉÅÀ¸°¨ zj`RH@=?BIS^gu
|xrqpoopnquuz
yplheccgkov¢¥¥£ yrnljihjlkkkilmopsw|¢¥©¬¬ª¨¤|peZPLHA>?CKS[eo{
¤¦¬¯°®¬«¨¤¡
xmfb\VRONMORV]ejr{
§¯¶»½¼¸²¬¤zphc`__`ceikorsw{}|wqlihhkou{|xwxy}}}|yywwtqqqrsuw{¥¥£¡
xqkgb`_^_cegjnrw|{upjb[XVTTVZ_cirz¡£¦¨©¥¢
|xvqmkjhdeeghgkosux}|uplkkklnqtvz
~|wuuuutvyy}
~}{xwvusrpprtwyz |uplhedbdhknrw|zvtromljhijknrvz~zwusrqporrsvwy||}
~|{|{xxxxxxyz{}}
~{zxwvwxy{|}~|{zzxy{xwz}|~|y~hkypmsqhoËÀp¿ÿ W@Ð@À0 7H'W¨e·É×ÿÿÿÿÿÿÿÿÿøàı° `8 ?k«ïÿÿÿÿúùõÿÿüäÔÌÄÀ tggl`Ugjb`TORJ86Ko£¥»ÏååаX803./?OUWg¯ÏååääÚȨX8"7Wu
§¢§µÅÏÓÕÝÝÛ×ÐÌÀ°pX@ 7Kg·ÏëÿÿÿÿÿÿüàÊ´ j\J8,!#/9=CKWg{©·ÏåóÿÿÿÿÿÿÿìиT8$
&/GWg{»ÉÍÎÌƾ·´«©©¨¢xqph`VKA95./7?O_o§³¶¹»Â¾¸¬ laYYZ_jqz¡¡ tlb\ZY_abd``_eloy}
¥³·½ÁÂÁ¼´¨p`J<("/?Wgu§µÆ×åíõôðâÕÈÀ° xl`TPH<60.*++/;CO[j{£µÇ×åñôôòêàÔȺ¨hT@0 )3?O_o«³·º¿ÁÃÃÇÄÀ¼¶°¤rh`UPH@8766:CS_o§¯¹¿½¼»¸¬¢|rmlhgkorwz
~{ttqqqquuw
§¬±³¶¶±®¨ pdZQHB@>?EOWcnw§¯´¹¿¿À½º¶±ª¦ xh`TJ@41,+,/;ER[g{¯½ÇÏ×ÚÛØÐÈÀ²¤p`TLD=;:9;?CGOW_is~£«·»½¿½½¸±¬ ypd\XTNLMNOTZckq{
¢¥¥¥§§¦£ ~ztrsppprssuw{}
~}}~xtplfdb_a`cimrw
¦²´µ´±®©¤xple^[YTSVTY]cimv}
¢§¯µ¸»»¼¹´®¨ vl`XPJFBACFIOW_iu{
¥©¯°²³°¯ª¤xrlhbZUSRNOSW_cirz£¦¥¥ |xxvsqpppssuz{}
|wtpnnmmoorwz}¢¤¤¡~zupkhefedefijmrvz}¤§¯°¯®«¤ xnhb\XUVVWY_eksy¡¦¦§©©¥¢ zxsljfd`]__cekrv~¡¡£¥¥£ zvtpoqqrqsvvvwwxsy|{}
Í×?Wgggghhiijjjkkkllmmnnnoopppqqqrrrssstttuuuvvvwwwwxxxyyyyzzzz{{{{||||}}}}~~~~~
`K¿ Pï àß ðרð¿À{ð{ ¼¿¯À?kihijjjkkkllmmmnnnoopppqqqrrrrsssstttuuuvvvvwwwwxxxyyyyzzzz{{{{{|||||}}}}~~~~~
`M ¿ Pß àß
ð¿°
ð~
¿Àzðy¾¿«À?kiiijjkkkkllmmnnnnooppppqqrrrrsssttttuuuvvvvwwwwxxxxyyyyzzzz{{{{{|||||}}}}}~~~~~~
#O ¿ Pߨàߨð¿°
ð~¿Àzðy ¿¿«Ð?kjjjjkkkllmmmnnnooopppqqqrrrrsssttttuuuvvvvwwwwxxxxyyyyzzzzz{{{{{|||||}}}}}~~~~~
~|zyyxyz{|xsrrpqux~xrmjhgimr{¥¥¢|tlfd`]afo~«¯®¨tlda^Z[_gw¯·¶° le`\ZTV^g«½ÅÀ°p`ZUSTQS_u¯ÇÕÒÀ hXLHHJFO_w·ÏßàȨhL@;;?=K_}ÇßíìȤ`D80/77Kk»ßñöèÀpH1( '3?_¯ßõöòÐ xP0 +;_¿ßýüôà pP"'?kÏïÿüðØh@/O¿ãûÿøèÀP( ?o¯çûÿýðÐ `4 7gßùÿÿôà¨`4 ?k×õ÷úõè¨`0 ?w×ñîñòà `( _«×èãééÐ@ ?·ÛÜÛÞØ°`( /o§¿×ÐÑØÀ@'k©»ÏÌÉÏÀH'_²·ËÈ¿ËÀP /_§¼¹Éȸ¿¸H7o¯Ä»Êı½´@ ?¿ÐÅÊÀ®¶ `( OÏàÒÒÀ°²@ _¯ßäÜØÀµ°p( /¿çâàк¼ P ?ÛàßàÀ½¸@ +o¿ÛÕÚȵ¶T( _×ÚÓÌ°«`4WÏáÚи¤`0 ?ÏêäàȬ`(
?¿åæäÔÀ¤4 /o·ÛääØÀ¬@ /o«ÏÙÙÔÀ¨@ ;w¯ÏÓÍÈ´ @ ?·ÕÔÌÀ°`0
_¿ÝÚÑÀªX _ÍßáÒÀ°H /o¯ÏÛÚ̸ P ?¯ÓÕÒÄ°`@[¿ÖÔƸP(?·×ÞÐÀ¤X8[×îäØÀp@
/¿ëôìÔ´P$ OÏõöìШ@ /o·ßðìàÀT$ OËëðäШh@ 7w·ßêèØ°H
/_§ÓæéÚÀP('_ÇßåàÈ `0W¿ßæàÈ `0OÇêëàÈ `0
?¿ïôðØ `0?{·ëúôà°p0 7o¯ß÷öèÀ@ /o¯ßøôèÀ@ +_ßöúìÀ@ '_ÏïõðÐH +_ÏçïèÄP 7oÏååÜÀ@ ;o¯ßëæØ°p8?»çðêØ°`0?¿ëõêب`(?¿õ÷ìÔ T OËõúðÔ H W×ûúðÐ@ W×ûüðÐ@ '_Û÷øêÈ@ /g¯ßóðäÀp0?·åïìØ `0O¿îðèÐP /_ÏïðäÀ@7o¯ßòìà°`0
K¿ëñéÐP
/_ÏïðäÀ@;o¯ßôðà°`0
?¿ëóìØ P '[ÏïðèÄ@7o«ßñîà°h8 ?·çðìÔ T +_ÏëíäÀ@
?w§Ûëèب`0'O¿ãìäÈP$7oÏêéà°p@'O¯ÝêäÐX(7_¿ãæàÀ@ %O¯ÛææÔ `0/_¿ßæâÀH(G{§ÏßâÔ h@ 3_»×ÞÜÀP0%?w§ÏßÝÐ h@$7_·×ßÞÀP0 'G{ËÙÝÐ p@(!7_¯ÓÜØÀX4&+O¿××Ð h@,%;_·ÏÚÔÀT8$/OÇÙØÈ dD0*?k·Ï×Ô¸P8(7W§¿ÐÔÈ`@0*?o·ÍÓаP8,7[§ÇÑÒÀ`@1/Ow·ÊĮ̂pP8.?g«ÅÍ˸`@03W£»ËËÈ hP60?o¯ÇËÊ°X@07W«¿ÊÉÀhH82Go·ÊÌÈ°P@37[«¿ÌÊÀ`H82Ow·ËÊƨP83;_³ÇÌƸ`D43O«¿ÐÌÄ hJ83?g·ËÎȸT@46W¿ÎÊÀ `H82?o¶ËÌÆ°R@27]¯¿ËÅÀ `D73Go»ÊÈÁ°P@47_µÇÌĸ`D83Kw§½ÍÈÀ¨P<47_·ÇÎĸ`@94Kw§½ÎÊÀ¨L807_·Ëи`D4/Kw§¿ÏÈÀ¨L:17_·ËÎƸ`B4/?w§¿ÓʬL8.3[·ÍÑÈÀ `B2,?o¿ÏÍÆ°T@,/W¯ÇÑÊÀ hH4+;_»ÏÐȸX@,-O«¿ÔÍĨpP4(7_·ÎÐÊÀ`D,)?o§¿ÒÐÈ°P8(-O³ÏÕÍ hH0'7g»ÑÒÌÀ`@('Gw§¿ÓÐÈ°P2"/W³ÏÒÌÀ pH,$7_¿ÔÓ̸X@()G{§¿ÒÒÈ°P4$/W¯ÏÔÐÄ hH*%;g»ÒÓÐÀ`@"'?w§ÇÒÒÊ°P0 'O³ÏÔÐÈ tL0 /_»ÕÕÑÀhD$7g¿ÚØÒÀ`4 ?o«ÏÙØÒ°P0O·ÕÜÚФH"'O¿ÛàÜÈ h@ -_¿ßâÚÄ`4/gÏßâÚÀP(7o¯ÓæâÔ´P$?w·ßèäÔ¨@ ?¿ßìäФp@O¿çîàÈ h4WËëîàÀ`0'_ÏíìØÀ`('_×ïìØÀ`(+_ÛïèÔ¸X(+_ÝïêÒ°X$/_ßñèаT(/_§ßïèаT(/gÝíèаX0/_ÛëèШ`0/_×çèа`@!3_Ïãäа`@$!3W¿ßâаhL*&/O·ÛàаpT2,/O{«×Ûд`@21?oÏÕÔÀ bP85?_·ÐÔÀ¤j`@<?WÇÍÄ°fP@=Ko»ÅÆ´ p`D@G_§¿ÅÀ¨lRFAOm·ÃÄ° tdLFG[w¹ÃÀ¨pXH@Kg¯¿Ä¸ xhP@?So½Æ°t`H<?[¯¿ÉÀ¨pP@:Kg»Ëʸ t`H:=WwÃÍÄ°pTB9G_·ÇÎÀ¨xhP@=Ok¿ËÊ´ l`JAC[{ÅËĨl`JDG_«ÃÆÀ xm`MEOg¯¿Â´ xpZNCOg³¾À°zp`LDSkµ¾»°zt`LCSo³½¼¬zt`LDOk³½½°xp`LCSkµ¿¼¬xp`LCSk¯½º°xrdNESk¯»º¬thQHSg§¶¸¬vlTPSg²µ¨wt`RScw²ªzwpXP[o¯ yz`TWg}¯¤|{pZS_oª¨xx`X^k}£¨¡z{t`Yeo£¨ y{p^]fs¥£~}d\_gw¦ ~z`X_gw¢¨ xZS[g¦¨ tTR[k«© ~zpXTbo«¨{yx`[esª¤z{{p`fs¡~hem{¡xfiw
pko{pmov}lhis~zhdmw|pjozxnqz}
rjosw
p`ckrxpdbku
zsrimw~
|zpt{}
|qquz
tllnqyyp``ioxlldgw
|{zvyzu}
}w{x{~
xllpszzpksu{zpqwz
{zpsz|
~~xwy
~yx{~~
vtuwy~ursw{~xoqsw~
zxpqv{
}~|uv{~~}xz
}{|z{xuvvy
tqstxvport{|xprvw}
||usyzxz|{
zuwxy
|utww|
urttw|spruy
zssvw}
~|xswy{
y{|{
xwxwz
|tsutyyssuv|
xrstv}
vrstw~tprsw
}|vswx{
}yyz{~
{z{{}
{yzz}
ywwwz~
}xxxw{~
zuttuz|vttty~
~ztstv{}zvvxz~
}}{{}~
}{{{|~
}zz{{}
~zxyz{~|wvwwy}
|xvvwy|
}zxvwy{~
}zyxy|}
~}}{{}~
}|}}}
|{{{{~
|zzyz|
~{xxyy|
~|yxxy{~
~|{zy{|~
~|{z{{|~~|{zyz{}
}{yxyz|
~|yyyy{~
~|xwxxz}
~|zxz{|
}||{|}~
~}|}}~~~~}|}
~|{{|}
}|||}~
~|zzz{}
~|zyzz{~
{yxwxz}
|xwwxz|
|zyxyz|~
}|zzz{}~}|yyyz{}
}{yyzz|~
}zyyyz|~
~|yxyyz|~
~|yxxxz|~
~|zyxyz|~
~|zyyyz|~
}|zzz{|~
~}{z{{|~
~||{{|}
~}}||}}
~}}|}~~
~|{zz{}~
}|{{{|~
~}|||}~
~|{zzz{}
~|{{{|~
~}|}}~
}{zz{|~
~}|||}~
~~~~~
~}|||}~
~~}~~
~}}}~
~}||}}~
~~~~
}}||}}~
~~~~
~}||}}~
~~
~}}}}}~
~}}~}~
~~}}}~~
~~~~
~}}}}}~~
~}}}~~
~~}}~~
~~~
~~}}}~~
~~~
~~}}}~
~~
~}}~~
~~~~~
~~~~