From fbd04e8cb86d5993a0d9a45b30825e1ee218c59d Mon Sep 17 00:00:00 2001 From: Oli Rowe Date: Tue, 31 Mar 2020 10:45:19 +0100 Subject: [PATCH] Initial release --- .classpath | 8 + .gitignore | 2 + .project | 17 + .vscode/launch.json | 12 + External JARs/MP3agic.jar | Bin 0 -> 86576 bytes External JARs/jlayer-1.0.1.jar | Bin 0 -> 143624 bytes defaults.conf | 1 + src/com/pe/Playlist.java | 393 +++++++++++++ src/com/pe/PlaylistWindow.java | 895 ++++++++++++++++++++++++++++++ src/com/pe/Song.java | 110 ++++ src/com/pe/UserDefaults.java | 179 ++++++ src/com/pe/audio/MusicPlayer.java | 556 +++++++++++++++++++ src/com/pe/utils/FileNode.java | 84 +++ src/com/pe/utils/FileTree.java | 277 +++++++++ src/com/pe/utils/SetupWorker.java | 31 ++ src/images/arrow down.png | Bin 0 -> 730 bytes src/images/arrow up.png | Bin 0 -> 802 bytes src/images/default album art.png | Bin 0 -> 17231 bytes src/images/icon.png | Bin 0 -> 6424 bytes src/images/music note.png | Bin 0 -> 498 bytes src/images/pause.png | Bin 0 -> 2944 bytes src/images/play next button.png | Bin 0 -> 3948 bytes src/images/play.png | Bin 0 -> 4622 bytes src/images/skip backwards.png | Bin 0 -> 4571 bytes src/images/skip forwards.png | Bin 0 -> 9671 bytes 25 files changed, 2565 insertions(+) create mode 100644 .classpath create mode 100644 .gitignore create mode 100644 .project create mode 100644 .vscode/launch.json create mode 100644 External JARs/MP3agic.jar create mode 100644 External JARs/jlayer-1.0.1.jar create mode 100644 defaults.conf create mode 100644 src/com/pe/Playlist.java create mode 100644 src/com/pe/PlaylistWindow.java create mode 100644 src/com/pe/Song.java create mode 100644 src/com/pe/UserDefaults.java create mode 100644 src/com/pe/audio/MusicPlayer.java create mode 100644 src/com/pe/utils/FileNode.java create mode 100644 src/com/pe/utils/FileTree.java create mode 100644 src/com/pe/utils/SetupWorker.java create mode 100644 src/images/arrow down.png create mode 100644 src/images/arrow up.png create mode 100644 src/images/default album art.png create mode 100644 src/images/icon.png create mode 100644 src/images/music note.png create mode 100644 src/images/pause.png create mode 100644 src/images/play next button.png create mode 100644 src/images/play.png create mode 100644 src/images/skip backwards.png create mode 100644 src/images/skip forwards.png diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..185f286 --- /dev/null +++ b/.classpath @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..50c2ba1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +bin/ +Test Data/ \ No newline at end of file diff --git a/.project b/.project new file mode 100644 index 0000000..6976b44 --- /dev/null +++ b/.project @@ -0,0 +1,17 @@ + + + PlaylistEditor + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..b6593d2 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,12 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "java", + "name": "Debug (Launch)-PlaylistWindow", + "request": "launch", + "mainClass": "com.pe.PlaylistWindow", + "projectName": "PlaylistEditor" + } + ] +} diff --git a/External JARs/MP3agic.jar b/External JARs/MP3agic.jar new file mode 100644 index 0000000000000000000000000000000000000000..2c91b89c948dfc303aa60a4dfa5c062f93b1662f GIT binary patch literal 86576 zcmaI718^tZwl|z)V%xTDPRxI7+qRv|#I~JGY}>YN+kWS{@B4lC+*5UKSMBQV>fXIp z*IxRqy_UT64^UJfNJvN^eRo7Tpno|~fk1%(qRN7FlCok906|$vF;OLDdVtv17!c4s zU}9WGnvQ-JPMVH-YGS%xk#T`#=Wy>31V~;Q0oZT8DYWJ}cuY+X~Y@6y@9!El|A>BZn(HLjw0HPdG zw4qt)w(oRk)g@`+i0}3DGO4LM&SRO2z1nvFet&p5hSCe#l?(a~!KtkPl{5!ILksg7k5!Jk*QGor zyHkzS=}8;|7yQ3j|D64N9x2}O0mX^Pq=j2sfWM-xO6K=5^M8a5MKduK9=`!i8=MTHZFrV*Y?v=i36qQ;H1N zCGS>Fd7`W7^py@u!!2tR6aNRw0ZtVi)vtWb1HIdqRmY4T6OQa%>|NxEE1Wd?Pta?D zQ1UrJ9tV7-F5L?RCco|@d!0?l76Nq}dT5)v-6Pf1$zf&xujQ3b{h{1vzX`6hYN|wU zGB*)NGO02uuYVk6e5 zfJ4b9fW{Yy^uVFE&=9)}aoNERn4NMYu`QZSsl<{ysdO?^YmC95@fDYvgj6n}P@QoG z67ZlZYDXbuju_XpMi+9a5C?0Dld>pPZne9=BcP5}B95*NqgSslqEny23d$$k{d}!@<*Bch+ z{PCt7z65!;@;$I@SsZm)Hju2cGyqhHDC^AGtmz7bUMe-!AS z@gJ24<{$FTjs~t4PV^o&)_jq@@O_N1!q;EnA3ax;0zopP#Zh&#l3HQi6ni~`bvY(# z+3P!|)DRQ_lwEo{hkSBrNAGXI(Z|w6brMd=mRNQ`%eKBT3gM!Z$=k$Q#ZA9F2xLFo zjbDc}g*U5?@bv!S3`*a5-{3D@kN?40yvzTzACUiWX76ZcX=3E;659#iM~E6?2Jrq> z+@9;;kb9Zyz`~?J0JK}2M>PXv!nT$#a z*6!5vhlOYGH`I_XB;xU2>ub+*>o~&4e_1uk=JEI5zdz*%{J$*-?B6#G?Co7mJnS6* zSrMD)Ug$nXM3L)vG_P|>gh0a9H@GbjGIA}H4BI|(IMmy1y2>ryDI9l}sKVd@==NnF z_}NY#f9B8)wR=kF@(ECVBf~Si!!xvOV2~6`LuG&WpXUjH7tt5z{X>Lo8IrA*8A4@V zhaW5G?}lUtZR5p5<|J4{V#uK;o9s*Ty1GeQyl*MCCO*}Gsi1@-C<#HR8|?;sUQ1}0E%dx^C} z8oM49ow>S@NesMNByuJ5eE$4-RL|YAm(hrXCFye%&zaFoMv<->_6M*Lhc73z@(anZ zd%SPha;9yx&~3HD(m$cq*p;tpE+^|B{+dy-5lsG45By*GgZTT@-p+>J-Nw36ZPRX@ z9nmlP8(MXx|A}zSb;BA8)m1Pd4>+FfXPv=M1=t1=X&EvF5-N(`*l(X<1fRjO%gU9Y z%l%t-x9)dhylyXAmY92V>_II)mDtB>m2f9H%X;zR^sVwl; zrAJBBBx?&WDhdrKb1;6QF+ypynhy$glT>m;Khy#YKJGHb@R*&*bdJA<^ax1mr}Jr z6!^_TmHx&|mWx88pzx_21YERNy2+%dY}u6`#vUjYa^;N+w<0z+oQ^xJARSm++Q@!d zNtQog0%$xKotc@D)gYLgu#SmzW-orhobF%Oo3^zT@b19DsxTjY+jj-qNGub%TN}vA z%=2n1F5QuqJVeoi3L`BjW<<;srqN{#F;B{mSM9Kc9$C_d(a9zt2C#&5L0IzD$A_lx zbIpMe@1jQ#)C35y!k&wv50I(|s1%gksDSaA%JywR?eHs5yCJ>2o-6d!n1HmD4VufbC#6p})o_Q5sv{J} zd$(}%#E=LBhIZFUMB_quuzFOC9{Rm+NlPkza;TzV{Fz<@qD+HTqc3JG_Fvja3Cz)S zU%eq7q;JLWZA0SO$h~bEU75l?Y4{S(Dr6+lBEj1q6*T90>?)JNg+MV}X!G^r#d}-Q z*;(~osevfg??K8>nA)wXzMaPH{ojB&Eh{MY@QGaI>b3I1*RFtEZI4Wb=}J_mN1K5m{kw zu(m;$`DCudSJ*f#5IqRqN7Q2uPjBMdKrP@ICV4{Ih z5ggHL*;1NIKv=HH?r)#6Kyzkmm3)IH*JSCXQtHC)xmy`F0yK3c-wh=!(in;?+*?;R z*QbqrlrJd?(#`BY4t$zPRNBYD8nm5B9olE#Eu+ELUe7jMPo>)-gW+WymbF2*l|2vU zUoz0TjU7Rf?b@E^e|An{mkjz-@E!9H%$_`Lv@RwV<3bbnTlud1JH1!5?K?RJLSeEu zfX#YUWt|8Fyp0|+Y}?z@&)3!MiE7I1puKw?%e?r)2^aYK-VB6qA^d$`Iv|by6^k_h!NWOX#;vFjla?4MA*PGi5##u&ze)Wv?glxB}$KH-tm}v!G z0PbrcAAY15^Z*n0a7d%eRTrW2Bj)ksXp$qPK&gKFBGpHWiCgLHn_fL(UPJrD66v4Dggv`}7 zrks47m%jj7#&YxWY8DK06zvU;gMFKobwyUCr=70H*}GllX;5rG?$HtE8y`f}fY`7D zNi8w*U6JYN9J$9pN*57#T72e{1Ngahy6{e6cIuD?3+22Y5Ut^I6@sYRwOY|~B2A2L zJF@Va?zz^w?eYW%NaXy{mNKuyixiD&UozN~FG>7|)J?-9-}uvLi*w72xs#`jTTSti zW!ThpT{WBdvZaa>Uhy46*e{BH>w?e5z?s}SB{CSYYSOV9G)At`RS4D-OftXn!O*GG z6ilKo8B~Uv{1|QEQ%}XNub*8}A47L%xmCBcqs>TcZ9iGRvV0C9ekaCx0?#ul522~$ zmoQkTbv9@Z9b(R5SsmH!$XZXDlo1Veoo__sBFXO!xSfcnOLfgo~qmWuR|B9Ta&aH320e)J^fpB8eKx^2THxe3R8S>2yV>f`Go~C3q z8yP4mTpE~$2D^=cM5F+-9K;WLhh-Loh4Cks(I1D+`KcsLbyOsxpth1Mo2n3*?o_7B zgf~sLVW7CAKFtE0*RFY`3PSL~NSW9hE-2ecWkH28ZgppP5}Um=%b9tesO8|oTigyQ zN0+P?c0l1ZTmw@$Q&Qs0@nJ&VSXronIwz{g33Kx{u^k3nZ89cVTLp$WR}vEfMU%s4N95Ysedh(52J`a&#$ybwQp- zeAcS0#A|A>!nR~0bX$)Tym&ksDZ!v37oDAIt%n_eUn=`ZP z$P;=M`Q5jAWV!OFpk6 zCP6b*ds1yxEZC1C;4=i)s6;T>h2|Z(WY=T2|KAU$?tvq1WOvJyd1L7 z;Bx!0yN&r>A*ninYjx76Et_587V);LlhQR-;VG6>nPH`n;7NWeXK`9@M7LQ6w^f=Y zT&IOoBlt@nbpGh~vaP}T6@H;^xbeICN|zm#WzQ6pU0u0y;};5})=}LMyr4~j0lmL* zkt}+BYph&xCiIBL3n~Bp5-ZD$aYB0hKBd($G?modYBQ=~*@h_J7T^S~z){9$s?TCV zu`D$%{P19a{yfpLRyvZ?YPbG{SNNxk^2op==pVmw(mW`z$L;_Qi3_B(#X)Ij$|vFsuz6{P6)o$D&OItG1Zwt-*B4VmOkQ+cbpmifp@K$ ztwYxU3&xj8Dg9)MQ&%60-l#{GSy%YI=X6JaU&p4?2BDkR<3Xb?-*TB*(#D^~glB7h zhJvW>h{wbm?5S)uNB{Lty`SbH)f)V~h6@$A_)J!+a4|2I*r5bME8i0O1B?YE#YlL! zulWdhQ3E*Q&Yy8WWq_+Qm06^MH}6Dm%dy?x3WH^G=J-Ot`t?z@F{8y_yfJsV@JIOa1z*G~kkcfjZ(h0O=G zTAqHH_oGR*b)?=wpS<}nsFC{S-C%Vz&2omK*_b&bdB8^WA6Yo({3P5MF>ASGb&WMH zQ7@%|S!U_#A;-+5%fC2G)D&-hbf>#)4`;V22&FG-9Gnd(pDmGxFT*sqBvmNuqmNE0 zI0IRA5!jCTT!9QnSE}B9YP2`~96Mo9$_%!bkK_+&inBS|Ko`E|3W)Y}axrsjk(9Bu z;f~@~-l!Dq&Z*DTRaIcjXIt{qmvP#<<8B@jzQg4aGKi zEj-oO6ZXidMs7Y{2$5mhobbAe23_F{I3<5;|2U|M--gFMT$`67zRB#;krI?&rTqbs zO2$meF7A+4FOjIqX;p{E*j!(ON?@RMeTUR4mJ+(7GG6n0+qLr@mEEDp>ps`eN~U2N zPdud;d($wx=diAneeD>z@hD*GNwfZ*68%&w5=Gsyq--(0u=~cj(t*SK(rGga01=(L znY56&Vz^MJW6NR{MWRk$9`#tPYd4iOSh?%TUWs?lXPGDgtTaG8Njp))0;or~B}(Ta zPCG8`nR17;>#uw<>Jr$B=;s{r^&mJ#us>$q3U}J@!L=J!yM^Zs;kkkRf}GyVqK5Z! z4@Fer5HG(Wx!a((TmA5*5m1rpU&o}%+E!B><53rNt6|vg)k$#7aG($eFIrZzWmzT- zwNd{-)@(=;I|r+hT$aZZHnL?^>4e;lxap3Bt9t<9VqN=^<(TAtQN|*@$)QC{QHsBQ zDl9+6t~7x4+dHk1eP7*0|0A%WzU7fg?ZW`pHJuRlrI_@#`G!$@3uY)VhIUGZJaIKt z;2xC$wfX11!>VS}LhyRkl#{M(ixS2xNNTT}^yJ!%$=82)8zODb4XFx&#;D3ZI3?18 zfvv#x11vAaN|^3-Th7C3l~drSJsemId}UOyw}G?6g)`51z9IRvcJQG%uR1-o!E0W; zKY&dB-nN*HUVR&-PS60^Y(Prj>DfXJK|z z-Bk+B<@u-;h4JAB!0mn{XRvds!mN?l=yu%6l>6^Z^ogj@QZTLzNzz;>A$3Qps_L0aNLE7CZX)qcKUPiH-wmY;%5I=U zeJSTC&OV;v;m5!pi%c7YMmkGNTy<6R4yyDmD@-us9xQ+8^gfDv>cVl$JtY3&wl|f4 zYTq3bhBOwQN^5=GEAikTrRnuma#FXdqYbJ#froZp`;Eu6IBQh4hxI{XO+Ry zxrTs3ePUM=|Soz{0U zxxj@M*-;Da-1{OY!x1^#sGsPMHm>dBJ&P_5Yka4pYd@*11V#}#Kd7GBTZ`K~+Glk( zH(03x;ZenTruOC`+A@yT*FD#>{cBhMQ;RAFbVK zx**$mO(h!q+a~od_}gmPyOQrdO?d>29RkJ}-yBWZ1h-NzwDZ?oF^haftY>*9$L2;X z-}t-fPIwLaZ-8?$S~GZBBe_q`E4>+->wHo{v#gDzt;Tj6bUjRKGlrM^Oh3mMiyVt( ztJSP;*Dgj}-W;_yVYI^{M9^030 zmUMLEng{C(({On?_~ZOOh*i-tj(1gVtsa_DH~R`ce}vuS-svl;qv8Vw>p_b1o7z}K zO}{F$Rftuxkzb2`Bcq=cWec75aCj_T3k_MBJ8k7yjh6Q7m z4-ge5F!o5G1B4JMha{OL!O2++(9!84v?{&IRB5VuEj2}PltI8~npDb`EYH^ltGe|# ztWE_swNKryy;$xs$(QooG`L zc7VJBcI8=*U(KZ0n7ULG^5IonD@>QcVG%P$bygoc7Pq6J&)I zljYMImiBEqEUYDdE4DKkf&pyk=(1JsUHJp@gO!&rul~eko5e1TfE8t)S-Wvmp4mDy zSKp;_Y!dk>D^ab=j;Xq9u20skkj3Ifym)dzt$4?&6JjR>{-ixQK7n}}_yt` zzEUY?xkjP{n{DA_ff>$>L|k#4Z9xbnbpsdjRcl|E?@OYjS{#JN8vgk$P^U}c=UwOw zHV&)^*jR=@nYxa1fuT=eU!fy@oKER3afRXH zpm0AdUWrAMnb*YhXZ;d~RMH}LTcMQT!Z4zZ9rgoFC$Dy-i)#g1YL-R&kh`BiC+x2v z1-SEDumETacA};7EgnSZ@mZ8JxMxXz?5Oc9vl*spx8Bnd5nIo&P+RRWeMQ#7@%0}+ zf@JnS!speD8RLWSfe-Q!K3y3%loYYI; zk*x0FsA^0I#*$UG^H7{1zzu*OTSo;8M{2alV@x;IxHhT+J3rWp(0Hn~FUU5u8U*1R&0Q5 z#H#h}AUNAblviqE-cJd9*}Vgk*iKPh5N&~j^(E`VN%X7hm^Y953zXFC=yE1}$fs8l z56oV}v~>tJ-e3j#GrR}U4W=~K>p*g@PdYe+eWcZ^&|jZKL*)(mrw`O@7p({3;wB~n zL#Qgo6{fxMGx~=8V?^_1&wH8X@e@T0HqJ*I z=HaSqo&~CF;8cx|O>{-z7A4M=mU~a;f$`}y57G2&aEhT}leLsgtrG;7QJ~7~PPe$x z>$e}Eozji!jiG~I!W})3<>SRcOG{>F6avKQi+O;&o26Jh0n>8n(^8gwxX0J##z7;S z&!}DZQU*(E8o|P($sE<~qTyC52b)7tfXq}b19z#OcE)X6sG3Rn2)=2`0X{o73c}Dq z))Nbyz%au@4I7w`0(s|2qNlu&tqIh#HSc4sp)+zi+%UL_$AL@mew^<2o&SWo@1CtD zrJ6qdbZN+U9aDne_vZ$U85LfmmR%p)2)+6-6NH0~SRf z!CP|egBC?ks*Bd9Yhz%VTwr)$noMANz%TRz%i>(XYVSBfV17U?R!@JAW|RlujrM)( zkarR?q;3-#5m`Hg`C2G%RJmt13r;}!ku6Ox#8u6%tc>61k+es6b}&pP@OU>*C~!4a z5o8{pc_pzNG4@okWrBsDj-=Dedl(sK2-h| zWsU(;?B6rraYKtRWP>rpgXtAV_~n4Vr#?X;h*vfE+M%Y?L6x%Ox^RD{Ip)<OIyEmCg!= z1FvtUwvV`^sKy+(|G^Dc>&Y-alP7pQx~L;VtlQsYW4=GAJ20drzDxHetaY;#$QW&k z)Q79f92dA+!TmM(R$11m$O)Gx(`dAhTAseSFO=Oi7Y2ZHfP=GgQqUE^+CIkEzQAau z1g;d4UQ(D9+`VQzo(yUwy|$KAL*}ZmKGs?wJ8p16Pg}P_dRwHRu0@?yQQ#@wdWl%2 z)-bMcm71Zi9u^%6y5GdZE}^-&dF7KjVVF3PJ*B`2o8C?E{^T70hbNl2aZDJ6pB^Wv zvEoH>P)({xxTUoyJgg1l{tvv-^c=H^x{*h+Wch3S3;< z0GQw-WTl723u;}PgXUK8Xlc0SSs%``YPqAdYgp#Lh4f8M^W~U$}d@~F%v2>X4DueVbZ^su;kA!D~nyh6ONRf0-;GO zEzUHp!5(dwX+_t>jUJVoD7^WDvWmJXdOyRes_8fL((%p6X!GgFSM9+o^)Y;p?UfrC z%%@a-S2*5*rRy}!?>BCgw>Hu@Zf~u|H(b|LCS3VtS2BFHlae}N-T(@?hu0eKU~e8V zk=6@D5Qy8<-F_*RcjeiL8P!w))f0)`xtRS)ZD*LuYbG6ru>BT=Q|Q+%0y)h}_6k$! z^0Iy#r9K`R)w+a~1)`-n3-Q&Hnxg`5j^z!OUIl(>4K&V7q~A1nBNAeS+oP}pN$>|m zRajX-BSJq$;v#>Z%?I$tBaO^X{BsrQFc|>luZ;6EdknIW2ydh}@@H2DmV_{OEQz+0 zGYDY>ETNnk=$kBcD^cCwHwjsw1zMX*o(aiGpF+b7!T=@RMQ}y}@%D;@=>&J%VT^qtZmxVNZ zLAK;Md@(1ekuq%197!w}zwdrI7rc=a-#+0eCw0X%o)NF?BUP|fp^y^4oOXDXxKVjf zRL4kL+W&Lqg+-iyC6$Ce|T*h@YYEhGj!aloNh9;cE_WPRdSvMr#LLzfln_xzp3p?=O4$!-+fZp>0>&};9C_J@asc%GJN*c|k z{Wd@2Nek~*6@TRT2KxteL?rzPCHq^2;q}Ag_LZ5y*F!2J`5FATc8_GO-{wi&kX53K5YMNTNA%!w-?)kaqDY#`erC zQyqd9Nw34H=a>zNdaOzWhz6&s)z&lg4+3blxL8 z&s|cwE~0Ffy0za#ix>CM+F=S{5pT~H?~T!g$=KJw73kQu%5urg%r%U( z3>DRKAE<6l%M_ecXtu5KaK=x;ryaJFonBv38MBoT8KaJ(MCy!$*~{@xz(J$)U_O)h zo9vA^f?esGi^HL^mdV%t6x8t}E*!OhJK$klUOnvyBypd;uVrXOI85st;A2ESY z&rCPqrOBVf6N{ZTQmhn~X-YarRo5mhXk@>vefRz{9Q*`@rmGBfDuc$a3`13#Ka|)< z{ZWjnq7Y#@hrGeILGp5A*Jdj+4Jp7yFjX8+va;YymxhUkc)9PZsa3G2omrCG3aYUk zi@ljWW=^7(f)>MJ&V4_GfJuB)7kg$jDPw6k{o2 z-l|?xtk=4rz9VuQ>MZ`LdD8K;A`Di;=NLl+jW-}PN(mrO!m0Y!bD{CM^41MEZi5CvUIA@35sP?I?(5^ z7HwZMqLP|EL2SsSfWhQ->ncFfLZ!IsAssq3Q`$?i;q-(2gf0Hjiy;>}`R`--}hy=mW5- z1OCai+@;A^MoWeAHAI{#4&oV8EEP(i7em3}pid4mSf}{)*nGV+_AxueR3~Z5H4D9Q z8a=b$!vyRs>8^J-W**m0jku7cJCFRQ<@ur z>)tI%`?gnFXnK7qqbA{%q*9!$&BmaE6;;A7=?HpR$4%HWIJMs72~&077YYS?=Z3J$ zCaF-u$s_D@l`y<+e_CMNSTayFZROicjV_V%w#xVT1=H0~NV0^LbL>!g-i)6*@+ZY; zf@-h%?54c&>`T!VXs8#BipmuxCpA4&?U{T%%$07t9*)P*VIs~3d7KQY429WTE=_Eo z6i-rYSBvT$HGQY6Tzv0qZPl=pM@Q>&3lNY_xQEpU`orXHQ++z|M^LL*EJIm*3J- zg*B}Zh|HZh7(94@(OjUrDf9Jyh-+2Yl{_wTjz($~Pb4~Cn^Rr3Aa;zBuhPMOhzuIJ`vcH8wr{(#)S|fb&jG1=Dj7G?;mxxYM`Jt}i0l=V zhkq)v$0-I^W~)c7Ml&({um8NTRo(43zjPvWXSf)o%d30<`>~qo+9{6LwxLg-3Aa)W z@3;4DwqJZWdv9OZDbtt}OX8pq!~4-@O-G+(pyaz}M(on&MXO{k+WKm$^^)*cPmRcw%jVrmdU%8R z(I>*6pV|f}TOa-DRqi`ghmt506+$VVu8|Rt{syd$5xyI_-W4?b`STW2OD`IfGKp2)^9%{_ELY?we%CQZIThzeGhkt2wXz!r*&hSWqo`n<9u zV3_nkyPb?=M-I7&2bB;K+S{>0+mfm1x-umbipDXiKY?~kp{+kPV^o1wPazKky}jUL z$z4^*VmB9BE%6BryC8=VxIiq*LG!slUZYuJo1_T2U51W;6^(#jt4Lzy$zp>^Vz0S= zK&gPF70Ujd;R`d;AN`X!>1UM#=-qFYSP8ONUYDooAB9UGca&YzZbxh{L0taWG!ak! zB)J58;!SY{b0a2)gX`+p1>`m7WnTTfJriE9!%Y~qO5&p=zW0rNzDlyx_B(EP%4ecZ zS$%=z=g2GTWd1oqHLUK*iQsZd%CK)$do{1(^9nfYX|yOiVryMtFYt5MlLKxr4qIaZ zzBoJ|s#6*3i0(?NKVFRyaf4zX}c-@n8@K=#Ajyi3uMcI9m5w6 zw*jK*4!AM*+&*;zbth#Y*;sW)^dX|d;a0Mn$1T2jEr0iT7|@rAoIVvD@R*jXQJ0O6 z*s8W;&q21R$=WiUgSz`w_Ti=6?)LZS!96$vTYfbc4{C+wN~= z>m5xxnxHCb^xpYG6-aP-Y|0w&yNe`rkoz2?pMHBwq9F&J=oBrROjhlN&&hZW9_^dH z{EVe*TvIeUr6u_o+&@u zk~^Pxf1Jg~5oE_zL5It>k?EF~IxR6p9xSA9{>O8!Hz2&loQ8fR9y=)uk#Si;a`|1n z;+d#Qc(A`xy8#^|s@T*>p`M9)^gUtWA@OB>mzE)sR$T$6iufH#QuN~wy?a0PE z5?5e6Cii&c*kNmNx?Whfr--xH>qYd=Grps1K*%GlNq5)X6K#2qO*T;JqG5Se$F62z z%h;n+W$4quiye0;XO$TG^I}-9#muoAvat*MQTR5eKU`C-NI~g8S(c}f zI9rv|8IpDXW>u1NRFXl11#7{EUHRspmL^oyhQhe1X3S8xD`@GflBscjB0~P*M8uH5 zIHtKbpp-$A;BT-V_mUBF?bJV50!^HIPq+3$cPNZSAHk=Y-D1~L?KJl^O{9-iw?9)9 z#0{dB&C|>6wqA8?ZC6Rk3fHhv5IC(M_Kq*=dKw%W)x%d~TKN-?_L_j(dF52e%B7e^=?ENTqJ@y08ZxPmTJZL(Wk zCl_j%h3Yeg1~M5dwb0wYawdW4$qhPaR)ymZm1Uek$X$i}fG@D%@lLr&S2EjnX^+Py zFoY&?Q&uAA+%JU2BZ1aXqAvFM^CRFVzOTj_z%HS2Q;{i%mrneqz`(0+^iF9N#K#d_ zcvIEkmz!vrcu@mICcfq?4HXgu1*-$P(S43 z$ar=S*aM-YZg>Z#=jiqNG0j2F%5nLO{hj|byA9*&5B}^Pi%g<%LT^)vC^>T;&i7F{ z0r3(c4sUrhthxt6IAP9dKk+(x{Z##xIZB!%6z#%$#ES!Xdc4rflE47Jo-^NNYaOCM zOpDHNE20aUJ5B*%%YB?tok-ta&{aJLVH^ot??`jmR|_-AcfvW;SLvj%Qf38+w3;B$ zY9ooqbWr;)cKn=~cpMLYlxb4A7hE%?dB}Sh{A8pNnB2jHk*2;E>Y@;bN9q8j? z@8ON{hfh4-4=e}LPfs6$F63PrcjP@9q%Wn3U!4;#{4+dXSoIJ`sQS@wsg|)QhR~=V z6(Iuus2+m&^BB<&ARsvKe^tGIFXE*752`2R;cO!0VrpvQsN!s4?ezcjPI23AP9F7( z9u-<0Z-3aHSc#(q%%HUY)c7`ljGS~thFxPqcd0LAv#3E@YvLoqdohJxVV_`!z=XFM zF>5Ty#!>c~>$v^+ed_d?Ag3GHJhzOvuV%?@=@9ZcOEm&uJhT$iW%4OIf{W+ zE~GD(pKS}vWxPiGk?%h7*(dZRx+dg1kmyf}7wlLS%MO)D+ybI-ra>Nw^;T9S;0hnJ zco2&juf$HBuOID>7l!&P>;`j*=UcF7RQ}+&%j)6tYM>6jg$KQ9_r8}u?*d6!<2qQx zW>>q9eLQRXp`>UM6+KQR&R}Fp(0qhwI+oLkcNbN&sKjTkO*5N}09hMsAzajq3Q^+Wpi{l;;kLO?rTmm-0o% zUGDrR!R){&35JwE

$)9aGsMq=KD}&@agwdAWx1hhHv@(Lpl}@EnhEau>O-${*ll zgznsjCeHw^O-i`wj@KkpNHyP@bWwrJ|BzrXi#-!HBn-8%o6iY7*yG! zU>>}pM5Obn>;uAzq>^kmm>DAC!ckp0Gd7|X`VnUZ!E`%VCTL@Jzp}EwLI07-=6DA@ zzQ27<<$vY!zY`??E|ZM^K_&$ao&L5P89D#6JInlU8ImYvfE|tsD&I7|m$g~uio<%L zLu7*QF2e=;ZaJw%SOPdLR}CbbVx57t+&PJSn-cY?-%xPWtO5G;-8dmVg`tRjAWAOt%=}ocIAY%{owH1! z#pkX{*B56#N^4z84r@n0bCtip7t}zRt2wdHRnNN?=QH%8K|qCCKmQnGwLiPepGczp zKw|-Ey_dIKirZq+ay+Kw4IP&#PemEYZZ6{XzVUCfZfBWcjEU^&>-iX3;nHcHzBDLl zWU+3+_Euy|<0>}*j-Y)?g=HXvp(}VQXG*^N6Kd7cqX@4zzwCa3Nvoyb?a3`&e&+N0 znscMJ^7(_=%owCu(Wuu5Dk(EYW9|kWTE-q)A->AIg(}IkaPHl#ePFR|%W`yt3~pRe z*RmtUJAm32vNZbgF46zmVnn(}LW`imM5(n>xnM|l`(h5+8{s*sx27LEG^#q(^A`xi z(V1C>8(B96&YdvaxxNN5L}>l&ECj6V;hoWJRRRFD0q0j8jo!Gh^}5A)|8HjT%^LVj zb}x%z{HKheWUBKt{%*E$=9D@K4MAP$-rn{e4P96?q$veWEyx>S!;o#Rxo)B_m`b2x zPPsN74<0PM!-QOy(Fif*dH;9vdT8yR;UxYM4^#~dt*hNd;z#PVAK@?0sZ{)f7bK)D z9kn`?e7#A-zfr@r$;@ZKvYaF>L1S1BNli}yD4qfS@jZbl_9FU7%ML;QRLC9)cEAVP z&;bp7X~U;5Hcm+k$Ix=}6<*%O5``a-Nc7FJ;S?nB^BYi7PzqwuEC==;G9Q^Sc!t5h z=#VsKFj7@szm;yLARGG@>G%}3`LI;jFSuE36(3nteQVyAb4`<_2Y6Ad{qs;4kZ@j=L@(Zy~Ad>N_ zsISe2Bc*t!yWPQ|eaYRI=x-#?ocv!1|Co#4l}TW;e@#Wp|8QYY{}w&|r+licowJgQ zy}g~Ivx%{&yOD{#vxS}Q|8r!qt+M?;5ktSBWMRpPb|J+%=MR4t`ooL#k_8Z_|9l(N z;1X-%xC8D$S0RPQ_x~j{!Hq5y8%XC0|9L-od;9tXzXRD$?igHL`4KIE>~OMXjS$lR zq&nDX%&KTW3z5RmggaOTErS{S#`>D}`=B{eKFs(8x|*T?_x}4i49F&;)G_sML!<$p zT{7mFQ4*ou0l1BqM8H z;m3;O@lrN`4#j~@oXA9l>>_eSwv>>TZmVbg+QKPi3;*pC{v9Ixr$zoRUm$Psx6jk@|00C{PMSxlS~;OCWBEqA9zL4%4h^w3 z6=G75j%Ws<5L#GSQ>04E8#+M^K^22m7Y(A1#1mHnr92=zNo!#{29d@Jt)(S0Ot5A_ zg<9}r`{uKJQhmb7oH|Wa8Ec>mSJpmd)?XibMaoAC47pW#=l;!{?xs9B- z#B*H^3VqhDq}S6#I3=4iAPe${IjY z04t{sJUQ`R-|}u|ieSLy^*~~u@wv1<7FtU@a@L`tp^eN^d4D2{7q%$hxpZ2!{ zP~?Oe01TOjT{6d%G19F1cezNe*Hz^q*Ln}&Albd!>=xFh!2wlkqo%_C_%`vP9+vDK zsrd8TKRwhcq&|ZaWin4PV%YCtVL4JIyJ)h{#`n}<%Ir0tP$x9;q?K^#n0;2H{Be_$ z9y98n_=N@iQ76Oj8s2r>1^w~t9u4CIwiiS#7Q>a18Zn9`_+DUygIkH|c2E@&@YRu3 zW*a@FJ>ZYTNtZmCRH#m^)>|&|MTBFcMfVy!eo{gx4qx>{dbqECsFH!Z7Pdrd!u0jL zmdDB&m~~gGDu+5dcqrFBOT%(@G0#Oqe3s~1m5>k4I5{oI z!8HE_u`!X^EEOdQN_x!&2cdvi!AKEiJJk0duIVp}s3D`ruu$QDvydys`}NOLkJKyO z(N=0&2$@u2V4-LnsJk*ZFVbVHL?=lGEEYMaLAMqero(yZ%ng)^k1ILYG>8o+{Q1Ght&O~)!ljl|vR)#mYGIqU7J8!8SjdxbwI?mSN=v)GG`$j% zHYbtIachMeH!#hyM@)~?qAcY-3n+SbJ-C0;7KHXWK*(&NjrFi~^gtdEIm{Abx^&#_ z&}*0vp>BJU%W_5zW+Up){owU`fIIMcrtu(8X|!oh7^kzc zD8$uwiAbc~20E=y!<;>X!Kl^Jp4a&y5_2Wvdwf9BwcNtA0f^V)^oUQxUMA~Et%nNzhSk|zg?hPHJf`3n{fhe{-PSpf z%(wvid(Q(CJM1T93c`y?8GcjHOSbej3K)Ln;6rOBSv3}$q}}DFhwecog_neUFMHEh zfb4!f@#@?9-C(e9PpY8=iGIXxeV`WCw$=c{+lc+k6NK^}rR<(%))4OG=1GM-Pp$>JT#bzh+jM#IH8eH4RL6A z<5)GLQyxJ{eCRsp=(my}$&r5qhRkC`239xN&|(X-T>=z7Qlqc{#@#Nx>l^Kp2%OHe zF&J9Xx6m$B zSr(8H7g?oQQ zn}kyxJ+mU*QPPkM@M~sTLoJaz=x%Ynkf5H1&#?Z{T-%|-E|BUwif*EiF%=a_CsuCcE*UuO5lO7_84s-SZo1#3bUiSO&Mn5!2(N(pyE0D%y{%|7Eg|{ij=P*2Uw~E z;MvET2t+i;(nL$_fjMUWwHb?eNGn3}N|c}AM9u=zV}cfC8laJ?tVy*n$6y~t7^I2T zL=YDp3O`83nq5DplzAD!7S#}rW#x$ajn!6v{AZ2lCg2I0Kw+jfzK7aZ`~BiEIFMEs zxDN2;T38H*Qr+^xgN$t(F7f#0!Fcmq0 zIpE9tdDy^3W zE6sBn`BP3P!bHud>M=c5P{G7+`;qx_4*J5wWEJ4+3nqNc0Ch!)@!g+{dzp`1On`4* ze{tb1?YL0w*?D7?kftv_lU@o4r`%IYx;;}v+o9@3aw6=a=X^s^LY>BnV2X&>>eh&S zM3t{l@WS?&7!)|=e}WhrWJht&ZC^^yNiaz4sFzwoSaeE$+xtCAxSrF_b!p#B)^9fP znYjF28MOTB%s;JiitA=YSgzi!U=4>81Nr!KHL1h=Ya*(%)cWfAe=N0GBsH6n|8glX ze*SNi^WV&u^8aAIB1SG|{{>+~RW_7Sh0*xs0wRaNNr;6K$RjK{gv^vclwb-BLDeCG zFh)d^T|);(kTvALe(m z!f->DWttf@DIIF7tfu8&aaSyyBNy2*R9fB(iu05EyodEKs(HAbmC0a`_0*F*bLHY2 zC7-izuwYw;cf-+PR!&3GkG|q9gtIx_Heid-}EIE?0@u$VmT6=#NL(r01o zHE4)pUfG1l5TYJM8HGP`2IqI3+O)&FCYaJ*>YpJX{i&R)_{9}T+mYp`D*Uil#tP6v ztR8akuklidok0e$=bnu^U$ifrHKE9C1VweiG-MBf1`(y2+(xy~(U)F{a$i5^QDO6u z%8172*RJ&I&R%P%sgfyY%F`&KUd9;?cKheBE^f?P?zdaThvnk5Si{xm7GIFAC6bq1WS`$A`Ty+og^ke zt*K!keZMqS9qNFk%TC!F5pe*8n7oZ2rM9p2)kBI`7Md;tpyGs6^O6#mS6P3|X{^b(Ya$sR*tvfE2jcQaa~ zrdv;vPxLl zn*9$!EY*fFR9#sSpvnbZ? zCtFbW2wT10peluvFOXNgcWTVg|x5kCcr-vC3_X+Vi)bk_V%~47yFConJXj!WV&~NaFts( zw{`?q-WJ$8g;-Lo#umzJ+&}z+@>s znbn>(tqypzmo6oVHCHjh@jWMtl}HxVCdY|g(4n+pQ+G(UP7z0>oUxdU$u^5*Tm)I_ zsEmmUxj>5@UGTJ`U$i7Ki;mIuzSsTNn#z{NlrHaEnv5GP|(2Q$R5VV?k3 zV_AWXRbQm}L1`YUb8_*(il9%YCrn{0yNA}+{6l83V%Ee)g@DER4hue2w)V0?KBP8| zktM<@QPDGuannfl3^R*^BAz^!nO;a78rw#EfNda4MZ>5!!of)ybEzey02%sa3lJ!N z@SMls&t$DVDo$J$=h{RN5+B?0(_6=%r}d zfb+ETW!Q_7EpfVJP6>#nwqTM1D{`%7+{U3?IRky;Q17X6{s}tUl2yEr-gz$amY3Xz z`)Hc14*zrEjHC+-67G#N%^~WI7WgvKvWU{m&OTIIV5{ys4jq&@2-)x7do=+*VP?E| zYts_SFakq_s9_hz;Bdn{IgfwD68NHw`HAe)$&j+Na_ta*T(Ja#l!H`jUsXs^*dtwB z4K+jgQxURm<%|a#ix>>OF(O@_b6!rqE759{`Mh{xMl}MkgaR#&4BftfNNE>8P`h2( zNQ$>frHiv8(rzqZU}FPzD7H=*`J!_~!1Irk7c(aoqOt&vuo4GV9V648plc*tWyeYo z%&7$3$E$Z*lD%_*#bSaeuz-KrYbI|n#whM!B29R@sLs`>z9jNm6nDGT3jm^A&iFQ9w%%SG`qO(f7*LGS* zjoA(e^1CU?M@asCKFJm)0&+D)c}_iin`g*5z1BdzzWDRLbp+*S&S&SJ7Yp^)L{I1gTOA7q?Cen#7`#srG_A7zrs}rjJc}&r%0|XRLRZ^Q?PA_@2CLqR z1sNbq+)pXI$piGuYLNp-sY^rm0wp~?`U=+Gss$U740DvSC0rmbWiQMveo9;91e_ia zV+r`j+47`7<=;v>^t!yX?l1`UXFce zY=pE}(_A?%yc;w5Nsq-bNyVB+RDYk;njtyDh4P{gi?T+w<@aQX{H6THcwSQ4Mrd(3 zJ@9$0>d^CgoX^-VM7^y~C004{GIjd!1wl5RI6RSOL7Y#SaTcMn^8FQIr{DIV33 zw#kL?9h~y1221tq3~aa!=-9Fg(_*&S1c;a)TEUr2a5I*%WtHL&nz7AdDTa-@3TdH+ zJrb;L#00VNN0G2IQJ#4SE$VPPWU+DO=OUcqM|g!U9ugO^A3D%wR&1is8Ra&7!4^S3 z5_iOQ(yEgh68qc|6$>b>yHa}P+BZ{-lvRfyj%$wjVjnwySdxjM4V{gh5`-F*a!rTg zGeI*9Hpj&vF=^L>NSp1-s5@poTI=-m9lVX93`VGHdtH@yE{>@Qt3x@j6SmK z|E7X3WEPJXZwuFnC0<{S!#WgBa#vD8KiJml>PS)~eX6(mnIF)Vtr&M^y}GR8>I%;Ni4n7(#3a1EN_ z7%&75V4U;q)&IJ3eiR{R#kfGNQ%$4jfB)7kfu^EGz44X60kHZ;3EW>8D%Y{!HCD$0 zB}tx4Z5-w!)f7i(q3!O*xQ!F#`tc)Y^jw!aqft&6cs94iCtNP^4t>z?;V|#RhV4xi zJyK?K??y51?e2JA<;%2Ib%-{RyHl7vgn9O61f3t`x#s6Z6pr-2n1L~27}&qou&aI( zq-U6pO^I;+)82Ex?h=!i#Ym8C6R$8fkN;lP)E&^2BbpQ_xDW1;(Tgw&H1apGT=xmK z#uN;x*!`jEY@ANU{qyx++?k{>&r#-sU)tej$+I49B@R|~B{ucJTIdMyK-27`rJ@I+ zUstQEwKK1&*RCn?*XAQ4W>bT%+P=p1(d45e8412?whI2)mHp+XXr5uoJ2i0*OllgTV(ePazyg}#PFah{T3#K=cOTq+A?F*lj7T>uECbV zt4BumzC_Bh$L5coqy7<{Ae(OE;Bu!Ppyx8nZx70J1GYlHl+l?fE)U?a;EHFW+@krFpfs(%4p&NCf_ zIrMnrZcehK_C5)1TN8nKsJ&>;h52do9>w{2^XY8>5zvcg@B1(a5s7& zZ$VQlt!RQyQofUYJc)JRc&lU(NYz0=3ovR!;r^GaBPM+*Ta%l5XO=dYF4D2S^JiwN zEeSw!rCDNndgfYYn@+5wZG3>nE))ERt{k_yg4|R`mK6$~9A*h#FQ{c$@r}(wQ{IKu zn}bi`?&L}3s8Mq!o4+zYZLBpjQY+%b2+mZv*~#(Gy`xHF4wQ>RNUQV#iJ7!Yy+C^9 zIZRm@C02l>jH|pFPrU%eWt~)*IWd+z_Gp*IlJ-#7%$V^GanqF1PLxqi^%Q~aPIDY$ z_icZ8?*()NBjlA#SRj8{CHocq7`TrO3tM?`p*hz2R^?DY@1v$6AxSquLq0S7RoB%( zLpwhHv&)yyI&Rz#A5udH9LVR4GEpOi#5q279+y-e-GcYw7%h**h)*<4cAj;G9jG4E z_cL7wcS7-wI2pTL{$&%N6plLS9l2~A$TQwj_xiD2h4hL&LPO74M5B5w_O}PWuEPLt zfZ4P9x{CIi=M_}tu*u%9HP$C(zg*ysME|}}W$nI|^yB)4x0Pz(SX=VqU3YpL2HrYE zZS=mp@EKPq!*4=q>`*nBIPSqNmWKFdO9aI7W+5+*xY*Y9q8XtPsP48OwdyrH@$J{H zsK`+!9?g+EGqB9+^!#P$O6)rl?O?gQDH&1>3n8=Dd))FHvB3NA`XjWTsdVcN3RawZht4v zqR;nu`J8LOJyPfunWSqQXR8|DmVQPOrE#J8&C-QC?noi(MAAN$t4 z1>Z|))%ke~`?u#V-bdJyZZVvvtskM)r*z!e#wl#c$jF3R<$cQYjBHPhyy@?X!u?&i z9A9Lr-dXK&T;#wh<@oKupYZe?2u|Imr`1*)UhQ6)3U!84(-mE(s<30cRuyw9Vmo^~ zXuLPn)(?#cU}mY233&RO$ZZGmmOdygSfFywBH0PL+K&RYt>*YzojT3Xh1k{$qHGVo zCWqCF?a+RB&9NERzhwn=lM1CuIGx&E7>!`=dk<)@2%$;u$`t5I0`uNpv`v@xg7z5 z>~<7rkpm?Af607QBph@Zz zW5ngXH;G6)d-h`N%}+O@mG8{eA6r`0&AH!gXWi}2_3O+R&?YB+)A`t3sW0yA$QKZf z*%BS$rJ9S@_ymsCvaRq^Pp#51>^I()_5&9%wK%Lkn>)d?fm@?zc9AET;6cAcMRJH07Zbr z9QB%35p3L?+}f*dX1>}b_L1*fPJf~9uiZ$Q^@0t%oT=u09*4tTu5f}t%4Ghh1mD{4 zGp3dnTFRGTt_aP&Oi-)(feUZLMk9<*S6rm`XpC&1%6H4O=k*cK&l=kb6I&a4C!!AE z;}x$_;P7AP0>TZBF7`TPoB4u<4^VH$A_^}U%bu94C-j0Rn%R#vN59@UgujrWPjJxF z4wMBQ8)8n)k%#7}BQq3H*$8OmO1Xi?)Twuo)?lzv^3rmjND#UyBzq7slhTWZKUp`s z)1w)3L4lBg}t2;=9gZ<)u^NpZ-X{{-e^CwBx>qRfqQ=ui1n)wZS8k1|hSGoOT{X zu3(XAKfv;$XYD)iN0VaVSHt=kG*3R!-xsvfH49Z)e=+xaO4I24;(&Kn_gMqO=KjS_ zAZN%`KdGx<;QTvM$POdw!^CyjXIu93R-J8X(Y{DZ7K=H{mtlr4gXFWx6&HRN#x23@ zwCH+Ati+@eYZzv=sSOhE{c4z-tqcKHcp$SVWYgoY0^`qU1AiOa5^V|hOyskbFO7!B zHAx<%B^1kEP+oidax%Kw5nb(QXKwY|Lz!USxNN3@;Lw@<%&@WRAQM=J*qlOCs23o> z*Bq9AR<8AR9QN@qOPs8Nt*szuZPU}^1>i$2r&Pa3Kuz9M=Q8aHwY^2sMP{7puUjwW zRGJa5SyONmG6COJk*$0&iG2Bzmdt$b=yES4h_Wwd@?=LQAne8}#W|uWcRM8%Q)hZu z{HjTe{@9LAtW+-3wNUyAe7><~)*Ybi`m_yf_j9{XS~@n^QshD42`ZWEX7ycALE_lc}3WMp#Oo1X#H_-5cSFfxAzKf$Goh4 zk4?n3w(1-Cy$I2Gm+fryOwUt*>of6VuAnJMkr;B5SaI~P_)jaLOYj0W61jbnt4QOl zNy-J+JkjP3aLXA8ZA!3OFV(41SB^P_yYf~FX&ZzT2@=43V~G>=jIo zKzs&g=BZpE%}OL$XO;)yh_!*5|2;Jfr_=Mg9A3V|1RrH)=U~#SPTI6fawet@ivuJV zk4vZ$v9w_pZF9Rl_7tWh7i=xz)Sgx6MY$BHf&%gxGlbt78kYt)*aCFMhmXmt@t)?F zpGH%{8#pnkEOGjSnCQ6Gg+vgQN-F6Gm}-#+CB9i#K^VAjW>^6)8p0s#)Hj#0B;SOh z%rmgEsev{*Q9F@n((VE%+6St7(Ueh-2l{sqDmkR4F-YfY4;4-akUHJ7x~M*uSwY6+ z;@UlP{c}*-1T0U{ZjvYG05wWh^IyA+D&|jvpizR zoFvz(4_qQ?*Bw5P)*s^Zt%A-zO*rbCRgSy)_EtvZP4o76(IjHI&P}W(;-}mn?-)V4 zg}-41N4`QnCQnI8*g9cJO&Dr%3a`$sp!;)UWSHon0y^bxqZu}S5n4m2GuSkQk`}w#uGpn8j^KiC6C%ps&#HlE8g^pUNc@8 zzKnO3ewhT!`ejYW6IuDhq&|cRe&ppq9_8u*@&Hoka2veFD}#uie(ns5S}O@U zMz6>N7s?FhIw34FJ8S{srQ7(fEQJ|Vdk zYa4kyAQ$2yX#7xvu2ZF)en%`O!4^oy_H&ExNCMoOEc1taW6d^*-ADtL6NsM8cH-^m zo*`*p5dA$()BT!acTb${2ZHIL!y@Px0{uyQMcAIi%mZTWfrnCa&o4bDX{2c<0e>OP zyKqW;NX9 zb4Q9u|-ou8=Kp~aNp9`?n3vyYtXE* zt6Xl2APLo$h8qzGSS0~Hbj5B9em8d48Nj6K`*9!m;>w~%2ObMJ3q?s3}rSeU!vGspe?_`TEZ;xYT-abZHDEkp=O{oB%=4BH{9ydAa{MGmpQG+N&%8bq0I}w3~o2Dx6%K;h9S}dKV)SBKf00TK$Gl zAk46FhOuV}LK$*KtQNKX`;0E+WX%NmAoA>xB};Bam?wXsGtZ1`rXaJ_6=ViMIo3?+ zi6n=iM7u^*R$h#?7^f?br3%&U5^mYfoXw0Wc=fF$Wq>Ya){VDzcEk3w!O}yZ+-sQ% z{Dd_tWnpM&)>49;X|K>c#Z}^%et%hnReTpzwsb}%-9@`1y$4T#%x>GT+|;-UT5Hg% zF|T*{jFoq3pi)oa2Kh6>h`*hbg9QWg=T1)AW#^8!y}dbld8+r#KOKW{h7xk;rI{2u z2w2V=a2Z6ljC8bG~oysakD+iw$_T1#j`=@HdIUqKMXQ>jq2&fWE4MCf#Ka9;86$_kf z*}9U;agSj6BQ=Ev*#wsq-y6F`Ptqnk8BfY|0o@b4WKTT7&RCgC#s6>qz=%~mM`D}Y z_SCt(QWseg{z#nY^NO{s?B1AF{&;rIECT=U^MG+G92FCuzjb2Z3bY8bLpcN}_n@6t zFG}*^V)BZsV|Qv(9DAtgMVlNIdkwN70wd>6-k=~>HorIAaMQd15J)cGS$Tm~rqa;1 znqlHmv`$`@7O?r{T4?VvPKjSE<(T42hcfGM(1|Tr{FCPqXI{>-xQqRLujeK?`b!ZK z#_Lz3&#((Rha3F!Ym_4Lj@~+|8AYM4)yldADI1dvhn zK64v5GVoMLo!d$JX3$?xpL_#DPWJhz292-^8n_4?F)_ly>RL0X3za_@hsvKKke$#G zZc!aFJWx1eDJvgB(zHuU(U1J0zhzoloJ(>;6Rr7U%NATouI0y>uH~U29Q`?RO~%;{ zXig~Ddt}hZTt=QkoNI~Jz+!?t>6W}0CQ_e|8*Er+!AQO06SoEtE=d<BB5jh%xro^J-=OO@Ap`2JUEo2l9GkHmICmPdfuogJ zBY}o&E%?_^jjw`^CKWEmBt0sLX@^eD@45EG?kD|E(=1n6g+y2={k`(T_IV- z=HnW$uNZ^`wG;%k>IAj!1nFJ(6~A~9?zoWna0X2Jkm5uA_!ycWHII)MUELhkEOa3Oy%%(4VXZ9 z0t3cq*yb+>ikAjVI+5ZTP~#bB;~9A4(e3#l=Vz@wb-@U12294o$D{=b_}vLKxV>ti z;{RPC_57DYmCf%7)0GH(d6X_`N()SrL6mJgXMmJR0LprQt^)Hfqa)$PchJZkQ|3z#Sq-DCjGYz-~Th+pYtAE|_JxLo@d`+ntt`HF8ADPJQ)zk}VukY2I4&dm2UDn1}n_x{~+ zY_b2dJWx>aO(ErLYUsC#JD4Xvz2&|XCz!wJAHs?co%J93I_AliU9Wt%UzS?$Q4iP0{=xXyN~{3;q9Ljw68oC_B)f zd;j*DQcO${q$Pk4=H;p_H<)Ms7UF3B0fH803LR)`j)Jz6bvCKZv(3xA z#fL}7V%c{4(C)^q!E$y{^eO$5%cW~-t-D$}t&2;h5*}FhYioA(HD@H<&F#&bKev~b z{~DlA8GR(nSm~DTgb|%rchQvPtdW~cUeE!8X0bqJUsLVcWQta+-RsRhDx@T(7u?-9 zP$N~Gm6gOZo1~ic-wYsUqL-y2j|Tl9}4s)YO>5Dr&Yq0Sk>bL3ghbtn9&F!dB?mgsrNla>>F>TU+bg zw4oaEFN#&x)Y|3(X194dv1*$7>NWQYuPVW1?5(h7bY3w>K7?92*v4(>P1;dS{nj*E zaYfT$!?4P)^54|5Kc?g-FDp6RitEQT1M`1WSC6Y$rzT}^=IyCd4_2>qm9;jZ%hFYd zZ)OG|Jw(a1)s+gnjoPTUVKtJISCoI=a78yF3{G5>g4b!~kiUhuT&icerDbv~r>4|8 zHc`;j(CQp$sOSy7Wko$bF|-&^ZmntJkiBfDDi6rF=}T*>*{IReR@w!8;aE@R*pdc@ z^1_KWPfqlx!VfNwEOup$YI{5>Q*PNxb4;NXBOa-otEa54CY&UF(pm%Lta_^##XH=b z%O=E=aWvVapF%4}FPMn~NklsnJtm_%ZTV_iW`ctc_rEH}x&8te|P%PavCbmS7TE$yo9XjQVJ1~A-wy9m= zW19e=vAapLGuL5F&ZSBHt89jUTAe~ z9kx2Jd1`H075afNWeM@9jBp=P*sRTM;eKt+sm{ORRN*1{%b(nM-m3(0& zPg)%o6fhs0X)`zO)G^4wLxUfxn3$@RfC~1^0j)G`jZ>QHO4@LF8k@^p#HCmCLF98bvYsB*Q{$I1e*3 z6M$&$j0`MFpy7{Ija9l@;wYRFNM;nx3+rmO&hh0CZ??1b&P@nwX^X$nC zzh17LfP#Y#rU;lpa9}UyUvFNW9{Q=CJPZeuamaJNIYr&7b0&Zf;M?UU*5J zHw5)_l-)dC{PgtW%Z}|cTPA5EZJyrzsk^hQ`XN;<14nPsDv+4z#ZVT;^v0edYZCeG zJ6o5vXBX#pL?6Sp7x%87m%Y6LKg`M^0KInCtW|tFlB~uTTiU$*y#Rjbbo5{wO!yf} z+9C5I^i{G)Or!ZT2)kUn-f`8I9NkHf$u8}lMp=`5+$+>)D|l|&;Lpt7Umk;o{>-F&;4_;iN1G3|$Bp%KOFamR#F`iz8XLU67wDNsb&N}M8P!zX&ijE;{puz7S5>7a=Jyj8Ab>>_-<39M|BiuG>j$4RZwq7126%er(JVfVKb^tsB@Cf+74hAK-uZC@slFJ3 z25wJej!{c_H!iY^I#$(K0!g$M_Zkn*p>N2J;&uhXzqD$w@FkaL_smp9M|o(FoE~iU zN!ZCYJUe$f!nw-{Qx5E&R9ntjmP~hr>bZ%ngd|S)XV2_z?SqR22NRuo#_n2HpXQb+ z&AwC*E-u~o5XI`^7KbGY&-A)F_xu4~FHB_;7oc|(fxsL^eRuQPmh|)WIQ58Nr#%N4qDc6V2M zHs22t7q1%n(zbN$E79klk$}*F`eTEFh~=XvBK-s-XAZTxHWjY7*X3{PV1uDX8Ap;3 zt=#hCoGQ{DdAhxUdKX7q;?ZCBws)7@9H`8-yZYbW!a{|7C7t!6^7->_O*Xr7Mk!}nV+*N9(gj!aa_I3I|9lo>YU=4F)}4gw?CrjP20 z!6qgw_bK;mX}3X%ho|-;?*uQ0Dk3@ENiRKX`+x8211oO?nB3%{%fdz|+qIh69bG)x-Bisk@4f)E;?b;Vrj+p7Lj~*)Dt{amPsXdqmiHjtS_592oR4?l z#}M19t-r+i*)>fm6=Ir8!#Ms2RL-9;d2a8^Pkl#4ZAbjikNJH;62`N;aQ~Fg;r%%k zrdR}Udm6umeMTjx$$3Y)6-L|-3wK6V36=Xfgs*6!M$^28kJ17E5rg3P=gb$ktizYw zwGQMe=k8K|uGh=?l`ayIJGtQgk-f0kx2~-%!?-0;@x0c;`EUB~+~9sNT`)Jc{sI5F z?;od2*XQ?Ml|-^1wB!rB>@WG_iY8Yt!lk#^AB?74_jhoA+~pNmzE}1M@A`#L9Dfd= z%@2HoW^*d2xLxz8;h(e$36E4Plv%K`b`WLXk!Vh4LNpG>OVZD3}@8>_D zV#zzNUEA4jEuYxkQ|fpva~T&MhePJ^lr8xro|jHg=CXmKN`4iaEfQmj*EO9|U0OSY z7bf4vqGm-nL*pZdR&k28IL`OMa~umlN1pLmlC`VFIT?%Phz^U~6}E;kfxEwWQ*x*b zYy=;E*^k6avWPWFG6yFTMy3e6sJFd(GaKOC^G`a+yCZm|{ksh&8#`d?BR6m`zdl)E?f6k5@ej{%( z(3s0p(waGIqUe97E6Xm%u~Bu9KDW(8frPTK&B6f3!220Xa<6{52Qv1CCNif*8mokc zW6T1Pk5!;*mh%hV{bx}ud ztNIB@RGW+)dVnjIMESfo*8V!##nZL5S*o2IM36XJG*jO0q3A_AX`wx*TO*>FVQ!_M zVbIRj!j&)0t#hrTeNN8btJz&P@Ot}ij*c8CyXD^c+ChEcITZS^m#XxpmJTDoR)S$x zyHc-uqCZ>nYFF$-h6YO@1?%g>>n-rwJP=#2$2`^RS7$W)iL!%*LdUu|uK9vlg#Ch% zfHFyRI{tJxsVV~FIqJS&jJDp*6Z_v5twf8>1`e-=DZ4}C@D8dNy`+Viq~Le>##}6% z(3OoIZcl;m4m4752~KYIwI&qACw;4ZR9b}vlr;P`6s%mbuOQ;h&{9Y^e*Er*RA%IT zZBgGue`wMKD3T}nKs|Vus7oUY?#4rjd$aJ4iEn6WdFv6^&6>PZwDtnMx^1~}qh#&y z0Bj^%jy5-Motn(z!okH&8k~1`(QV?_Bx)E)iCt26Y-3J4Mc06h12hk#AW)kAF=U^S zUdJl+I{n36f)+Sv!gkT~8=FIr@Q(cEVIe(npY-xIWTdG2sT@SUi6o{rbr3BMcaMPK zSOwV7fN&I*QS{ww^Uj`ywnc}kJzpr|W7}4EGz4E!TrO~w7pW-F1lAVsO&M?P_cN`U zTF-J%_(e8%`|GQ&3RaystsHz>g2Z_6VPR2S@;VA4D0nAHJV=Ls+97`O-ZJ_WrJ0|i zeAIb^O*YAMHXNC1_Ep}S$a|=Jl>H0s3l{vjSh=VypXtKL$y1MB8KWGJRc;=ymL(=w zk$FpsB_TGXKO_1Hu@A=%DFfB4)Tk4!rJ%`cB9W_teg(`LATx3gM;mdV67ymoazWI5 z{FF5r1yrw7>j$1mN?Se{D5`p;Hm^j`49PGpbFtP40fVsMKH0OAr=Hd?Z>}$aZ{I8pWh*LyqBk1#?3QWe&2DW@r!xG3u4AJRh0>gv=UVs?0Pfb7Z#MZkuGpw6)Qy?M%F^oQ zs#NrJjO#>Sp&5*xFhtmK39fIeeOpnl$S51Fnmd{Ol@%q-w_U_{#JBOM&Un3ct8^gX zYur$Scj!zIJ)aw#Lr^7rWdJ!p`7b#V4@lu~c~*crd+di8vi2E)hRk)C{;{)=B_)7NAfd58LHZ2bEmS5A><~NC~j>mOa@4l!XEtc?4wDm zYepakLlQQ89(~XuRIDu|H;RzV+Gz45rK9^Z)5A#u2MEWQwvBglIqo|#A^(!P5}Y^(6UmbAQ`^r{fb{;%bRe zfk5>D`Yv_oZW!h)(d?hh`w+2M)#!Toq<8v#Y?ksN9nR%^+@v_j;FNF-wW`QLbV1`$c99Pd*x99ih!p?!!6UsgGCnzAPyEwwG|nN(!@$F zJ;FIA$RLfV&AfVcJZ*Rz%mxCoPs&0rz8$`EVPePSxLW?4mQ%%FI&1@CZ(cg?d+lSZvtwFJv}MNaiQ#$k<1E5?#GHyONrs3cp(klvP~g z*&ikk!kT`LD%A!6pMekeW;X+E&qTB;`IqJBl=5zRkRB+2g;@gRq((L+@@XFv)U%lqG+q| zCGqCA9XFfib&U!EJ|u6f<~3qgNtmDa-4NRsTCSMkR-K#OHp@$?S2Qn{h(`VP)^OH@ zojC5uhSGq;2bz)sfMiJVg)z!Yi^qkD^2X#WR|W%aQ}N7mJ`y$;oJYJ+ML1shY@uL` z#+BzQy>LFWV2lO?Su^$X_Vgc;S($O~l9yWm@73TcHHRV+Er&|&ppy0i;zg!0Sh-3oBgx_XK>k4-!2fG8?C0E!UV6Sn8IIjo0gV6P>5K!=r=8bz6jqc5R zCWHRQGOs}eOf9H~t?JhQgA}hkOGG^+N`7qInaZIW#(K0YwY`(gHn%1Z(Ew0|W}@W2Yzf&B!VA47ZN zIwPb3#tVIG7W#v}d4>9c0Ha|)QO@#dfKzu^f+}~u5I{z>H?{eG<9g~3izWl8g?d_G zalxMA*_d#DTV+(qGpJXTa2NQB&d{0CQKB|3f zf;j!nKgF!)PtGEe0q&JC0_^lI}{O z(5b@m5WF|0uriO?^gI|8uS~I1q&q8+)u=$wU{*W=igb|VDJ_^BGl*{Gs3f~4v*@N} z6bKLH5nz^xJXX(Fw3eIh+?3$3OJsdfsF#9cU-rn!9}C304Y3i%L4{>|3_$HOV~Y9H zqZiyvQcaI<72*B}+~0q3{G@!{)TxYgc>B@$erWK+Bs6LF%CcCBpDP(RILp3?wlA^?9@QhOGPbrvnO%f%y#K{&i*siH9@d9H5YP_p{Bz(V+!@8Y}~UQn+B=umM>; zAq=9h(+kZgmJ}KqKfq=7DHCli5l8WXCxU)52)~(==bD5fM^}PEC<93(?dRh2nwj>P zEq*Sy_fS6~*W>NGRrWOI*MoxFyuU&yI-4)|(s8oB>2r`TIWcBChQvD*tycPy;(%py zwMa~X>^`{a`w9L%;XNfI*Kf=wSDaGq+o+L@%1h2a{_QXSfysJ`yeCoyX8QDANnW_g z|Jx@|K5Az!1Hyvfhat2Uk4S3rPT=vGJQ-Ve0@syrkt62SsXh3D5Ayo6G}fbRp)Hm} zyWuiOv%;VxA=?v53`!4H8DP|!i!i(T5-3s0w$}MUH^m4f<|S*+28qr{&aZU%t$_9^ z=0Nm?kBj&qpvui56w@dAQ55{4+_mMP0|>hMA_6|R-900WBw4KU%{I_`g_T<8>SwlT zdSch&cl>{Rodb~V-n#8~+qP}n+->gNSZ&+3ZQHhO+ctOawr#xrpZjp{sX8x}O4X`L z&15B&%*=0&F@DqInI%^Sig&l-Cm-*(d!?QClvO!8Y*O+ur$;)Qf=SbR$6mC?iP;ak zV=Lk(Z%l%$41w(`_wDca}Q4yr$2V=7mzzkB0(UY@=iq7m$xm{ypvDnmP`EX><%2#wC6`p z6Xv>vH8JbpN`rfaD$-*3jLd`^A$F1=Ies!6tDni5Y}yNE*vd=I{P+s%PuB? zUUep-(D2K&M0=}2bwqkcc5MRFGCA|eI&flML;jTiB>FKHr0;oc%EyYc<2Qp3Z`f)o(J-0prfV>gwDL)1aukCHZ;J_?6i(AZ#mkW1!)FulHwv z-#?-NI;O9UxHlA(_S>>9+wL7nR&@3m&u59XMUIbNc6`1$VqEyG5#b5PJBjvYa%Y&x zJxkq7y~m{EJEZjcup_r-r!8zg$-Llt0hXn@ayA4H^2Q$_w+%?Tc2yMww)hifNn@Y# z?GQ@IvxGRcIVd2bcCsg^T@W)Wi5i#V(Z4`dOT-@MafdHxfT~n>zol%3=MQ@C1PL>( zPxb9)n$KQWyO%U9ho`Brzovelz$FfrAtEWo6%t$~%?Uiz7gioS^~C%=ij-HT6R6rz zV?H1B*`v`>o8p>17XRX!JVsF)c759BNt`i8(creqMGM?a&!1Jb%Vmi+^U>4foR-U> zNymE21UzNi*4%qrhr0I4PRp2OG1-si8!MrtwRgne0l11zA4;erGmEVjMEeo zB^gtH0hp0kp(;=pG@7UW`enMsn}TGS9rQ~TsW+pq{#hnDM5)7n#u(=rw;5{%e>UaT zZ9Kng(_cK-Q_wn)M%9m1Pza&A5Gef@t!^|5<|?CHf50g`@<@Ff6K%T0QntcacA}U} zNeUmGi3%ZyXR0DhYmzDTpP}(;#b=i+edH%qJ`+{Gg3)bwP$%t5$LMU=ZQoS=3oQRzaKYfBLF5-`qe)f= z8K3Cb(7u`$h#V`p%R)3FjDFo4^CZ7acJ_rq$NK~XB#~*v$a#Mzb67tljJ9U;#c8HK z+)Ai5F8O_ptQGY(S!k!}))Xwak9%e5l`#+kCd$4dLGymAGkw%V@mq9F$zgq(+Gz0;T#xRXdUk0ECWrUaiCv+Z zR26SSo8#{Wv}8RxnGTUdb45C|+`S+#U2PK1wMw64>`^);*I5Qr3FBg6Q2B#*j^I2VYkY2ganx;KsiNm5flAPuov1e+7LkewuZo8+1k(V;`KFChJF zgw*A?w+euPtM<1c`_|P8;MwS6PKXtZ5Ih6o9x#t(jWx?|#j)DM)$3`bBzqd>G%~5+ z3%*{rD9*nE*lKPzUM=|7G@h_ush83kq)em7^g1s4`H$yF~Fu~ zVgOy=AwX|jFcw1KP1Uj76jIPxNMdv{>5Y;2j6`Ar;YY4GTI=Du?Gze~*+D%Ot)w5! z*qbD~9P^kOYP{I{MAl?)4+Rvb8a`iX<}DXJK$LOV3)J?^HtL2j_acM|KC_OgnqSMn zGD^gHqP84|9w6`oFygy(!!m4saiXt`0aS71 zw*=FBDysW{T<*f6#_ph1b{1CW-w`HzT3tEs(A8S((zk@=smURJtfeq zUB|?)ID}N)5>{>dZhNHnRHyfJ$0SmD;za)-+II;`_W`T+6<0OOumKDqAc=z)kU^~L z#HXjsE>kIjDvdU0nQoiO1gQEx6E)Y$z`i{ZUPKAq1X1EzDfob;!)w(h(cV+?{&M|R z)hJ*}Kcp5e24fjjOoKh8?`|4JE?7WWP}4(us0{&pzdM;= zhoK?gKItl>>2U9j9wI$#nZ|Ni8c&hB*AAqeVkfaVJEKw*o^hk0n{5QBIAvg6(y9FU zB|ZP}3!ISPZ-jnv#LFZVdaX=d>=Z_XYL)6F`?sPla>W4T3aMpWTrjOtb5?`ff67F0 zNbV)DepyP$=?iLMRRQviiY6qtWli06f}2l6-{KGRe19d8dTrt_Wm^ePCm%MM=V_(7 zkZ8A|t&l-4j(DVlT3~=FP8`*Yf~hGM>wa)BpceOc5c*Q3#3FTYxUmZ zhl;O_iq*b0In|04VLw)lIpf)TYr*8KXfoBsF-snQJ^!fPLBOOa$Q8BqHf+%Y0Vvx> zPEFJJ-l--!VMtFiuh_xTt2H3(`<=l=IB_RR zXZ`!NLdI)OqK93mdZg5&+4@!Jl~@cZk4y3GEce@Q)X&6EE9mZP-r%|Q*8|feWfrw5 zlr$Vea=%8(g7*mkHEQz0TCG8_>>-u4R4_3CWh5XRbu->sC%cL8>UUcb;RjWWw`?~e z#t3AktTALm0+!)v9~tT}?eH>4t#ucMqQdL#EsYLT@dco%Kcc<7F=fN%NTVO-q6krU z&ymO0v?rD(1C1{$sbfv$sb^nBeH5m>EG>l;tiSP3`ITL?-GVcx7~*4d5;iFN#5Uj| zEsP-5HmsT2=$l(2b~qClF4Xi!#ZxCTH<3eT-L3%OoFU{vhsQS@xjn9&_aM2QPJ}N>&dkr{9wa@F{z<4ijnrP-NJs-ZwrQJhx=DO+Jwdmr=R(cO)y@GvVEp^On0T z#Duv^(c2s|u%(C@kmLnoN2qtx7p$9Yu=+8B-V^^rF6DB+1jvOMp|i_bs`vg6ursJH zACz1+w?VJB6^L^P*s4Bb?JTIJHll8z%6P{QOVD0Eklk!B+!-Ryk004*t-zc5IITl_ zPEebXy1VFlL7ha~jqkSPu*uszrSS}l&pT~IHXVevjK$w$sd=ZbKGmk2uYT{FW#4Bj zJ0~~3$zIjNKdSsVbO~r zz^3soqc3wprwH`LpXRWxj<1y>acDx-e!XKV;0(&UasyRZERc z51{I$MpG@yVgmRGXjO(2>n6ch4g*!d>Lx)|4u|xe68x!qH36+`MgqJH44EU>ro&bi zfA=2*+4O)Hq}p*XfLkv$fhyXMihM>@FI4=B7^}+VHHa>%GLSu;z!;QXPiEAlwaL6G zJ<0V=#E?$-)*z_8!k};&;RIY;WZb(Kq}E|~koq5r`)QCe>`2c_#IXXocF259xjG92 zq2BZ&48g~DYQ@dI2Nn^ib1;^3FpZQ{?!~AdhJyE=jHq~0_j7Tg3_-_6h+Uo{`8;B@ zug8%29YnA8q20jwD#G`taS@lWWbW>Ub7zF^d?GfOamP#~=zM(s$FhiCa3VS|b1Opk zFkEkwIs7JQS&1Uq$sT2pc`CR6&c|LNcML zRKZV3tg@W&WhcW-GSS7IsmHuXz2#P)-*us?OIx;&O?#mjO^`<;@1-^+`M%f{lEz*{ zwlgIVP$n+~q^6=vX&q~rRz!%VROc(k>X7FFOW;z+3*>KO{dU6Q2%gggAAu+9cavpZ zz4}cUYpxe$?2>O(8Tnn4ho%Asca18kFb8bw3`rplP3-1P>$IdU_hwlzQ21WcEZMRv zhvp_svKb~YGF8*fi9Lz<%!TPQaE-ukqMMS=VLxf=$B}~@!=!v7@{R0fsP8|)b`}Q{ck<9kIQEY<= z>;T7&cNrov4HAN-h2Dy)qrx%Dycl?ZAim4zTvui1E~bWlHc6(1`vZ1afPbaqw~X`J zYm(5Z@N5Db*cWdLdy=l@BbnuwK#~JEI~--^7o8S-j!k zRrTO39F2X0#b z?1|OlVD@Ga%nkB|Lw2~Pwy@eZNy~bEwYs*l=BXmskwXR944BTCMk%*CKDw{kW%5;~ zL&6MKR?|mZ^qQl3Lq37~v%SLx>jNh{y6be&3N}f1?eS!wssV2S;YW_BfmIR)7=Z^HvC_CM+fhOtmgvYGqquU@Xm%8`J!s9ofcGd@cvr{aP z^&;g_t?JTXGaD*g{pDMzR&V-X`E<|1Tk6C{+_}Sw5Og%cat)RWVbc}+R1NB((%&8MlTY^740h>}XXz2} zKU)*N#Ri~LHIRo!LB5R7kW(sxeEgL!hKJ+(uUOqGYtk9!dbGnA~mX(hVR7jEo`|l4z~b!xOJ@s2wi$!lTvL zL$z4r4GPbOeW;wTtrA%G5AW*t_9_0Ugj*ls%e2q(>rt>bC8YCZMW|*xe=XoX`XF5u z!CD%kRSd$_rV^^vF+C_T9}1U2e>Dvm#oC%osoFEb)d$3LaL7j^NM{z%4lw^MXLo-+ z5N_J257qa<@#GzfrO*kxz)BvIX4czcAX6~ z?~M8k(Gqcj(anKfQg~FJa|EuKAJBdW%e~7$;bP4I?IZ!zyd5YBXQ244P=HH==qq2P z+|C5{gNIszH-SdU&J4Zama$h(e4g*`%oFV;RmcyDFHR1MFZMJMlX zwlCJ^mjt7eD$Yi>mF6ejlE|6j+NFCrtFhmwZ~$MHOb?BZR>C z7yn-m)x>52gp9-v=LSkIpU)@En*138nCqRc`b(&3nCqOJSwT~8VrY@X99v)8=P*~q z8}EDsk(``Ro@v-wyOC8_D<8kYs&L>J@xbg&gE=$ffkp#b4R)D34jGcYTIUws`Z9b8 zpNhCqmJc`df*xPPFHy@@(+y3lAdw;IiIoWIiDfx zc^w0nvmRrFo}zO!A47|M@pZm+Z9%SNzVfXIX1xn-WCMM2urRstzgGzn7ZzXtav2Dzskp*_GeD+AiL7KL{I(6%F#YJ-;wKYx z=DTN4407Tz5|Y!dw@W?=ix(O!MxYiAPqD7nw6gB9t~@=Qzg~}KQhr?K68DWTmTfF4 zH5I!>mnBS@8r8QYP3pP-q^U7$H{lUS28Q)|ThB`_HwAD#w6@wDX4Mz(gN^fzhsxRXr*J)t~+0H&;mO1)@NCFG4 zy~Iox?=uQ6Y)_DNjPy`-t73p%-Qsvc&Z^82ir(bCl-8o&k}EFMN|oBjva$5)fz_>%rZ*{_F-T6I7h0#YW*k%ho9@Jl{cl2HaeeS zG^-%{k-LpC+hG%`GLqu|1lCS5J`cm0wJ5l24=a{>J_Gt(p0n%Cn$q=>N+*`!2h~Fh z8^pRu@}2M{J{_{!ucUt9w^iiADsb&L8R{Ra@PzhdEH`eOs<-K`;BBe0yd*67oT#NA z-L%R+Eh2ov^p4~Rs!KOY#TglP#8W`>m4qQMM+wzo335b9E%;d?tT9&SrF6cU;uDWT zYPA9ZJqV9r6f(L_dKu?bMQ&uXCtonc|+gfzYjAFT$V~zlua=TCx1U%*0 zts@z04+L49xQWD3Fk#Rqc^I|Ki(p|iJ_KHQ5yR%zVkxD6D|uNhoXPCaLisc%GV?F~ zRkhdL4~Q?|e>_lf6&A|kpg(?WfBT^RA0Ff1nbOSv!2|WLx6}V-N-N3#{5NP)lB(H1 zUZ_uPW0-+}*j~_hL`bH7Lvq9*>?A>IsC++CS|Lgy=mf)fSUKZiHN?i!rdB13xaDU0 zCUcD<7^^LbU(`;b6;3*K7BtJt^v)k;vONwv8Dt3-I(lqb^VxP*8Avj~h)2MUZcVU1qL0*iGlVnf>42Yvj~B&* z=qnBz>LYAmf7gw!$iU(h02l@NTdB+xH@nLOsxbDe)mx1he{~66id3|iWsv}iRPiP^ zSh315xiQMa7ObZ(Og&RtIPO=yWWd&ja))0`vZ>8198U2`s=q#lRM?zw8xH;?VjMFZ zyUj%~)aklwIpn-vgROLe{yRPFQ5WBK=+8!G9n)L1w)TC82M#jz7Xy0 zsN+}BPOw77N%BMpvBKlUdRi(fENBzZ_pyJ;&;IdM6r(t`#VT;)hGr5HYvSHam9X#B z%E$;pdrIT+@MmI5veoMbuOZtXjTYowq@iTlvo^0-u|t+y{*@+*r-^>TM}Z7;pP7Op z0bipxIoCx)70s}^DMPPVFtlmfYet`${wPI?T4hu0=}=z7fVpDFjh?Uuv*(u@%=~-R zm}vQU7@4)LHc>=1iqpuJ;*BAp}ni|hQTW@k^IwWN*OPdafb$J*Jz*uLUeBDQMF+k%cl~Rdd z;oxXlwvH`o;$99LhHBhKkG!XVAkADkojIcFOdEq!A|AFS#JJZ7r-v#f=^WV$*1EDGfYP4luJKe?^W z#!1tUX3RKntUxcl#o1B`YAkZG;)V^QT8~&QZVgG+xmdr>G!rX@>N^i2=~e@^fFYh* zVmaYDcXzGgFZX$Y00eLtyiq#U0$HS|;>d$=1_@zNraW44q}=UAi(_HYg;)xzL{!_Z zJ}(YNZbrf6#SvjzRo9F7^rmfe;LW-Lk}|R)N?RA1gS0zlBtV^<+`dSvEBRr2)PZcc z)tLcdcuy#dL7hQkAo?6;V)E1lJ77=}joE3BBI!^!c6yUJv19ofm{oL!BQoQZ0ZY_T}A zIpRe>Voa92k3;x9=wEBx!ARlF8og;(438z_f*5t``VgmgWQ2JcLUb6h$R;tgHacbtBUwk33+%OB z%bZgs9LS0DRciD~t%BThapd;+OfhRDAk5!DfiNbH0)XEZka?p^jAjgG3qB(c)(`dD zRdeL3uj2sWxd7%WrhOewi~BPWAu@jh8J-k#Mo~Nox@na%^pm*!lbS9VjF=`?3;4Fx zmv_1!<6@h?9f4ygR3IG}F?lmTnpTL+q-dCYvfolLs@zmlvHU2t+~$xUh?PO7$>vZ<>5Up8e^|v>AhfNUc|^#y z0o>$r7N>Hp{+z%Uygq;mp?%bTTk`wh8LD73S z5jz6(ExS~N=LzPh(@)h{QPq6MDRv|P(jVNQ^6}LyA?0)-F)W=SWOSdX5_Mqk_DzEd|5EWU8zl)QyQ2qJ;7dBF~QU>43t zx1OdU>~Sf{n;~U^Yy_S-_IY#h$9-UdyZ?7^242&30B@f zWvORsq-}&JeUCIRNS%X;8jDu5eXB3TZaa({(K-~2x+a#*^+D<%nL`ViQw`0`6@WcZ zXCD|UXq57B3IHR|2z zvT;$c&9mN?8@zh5=~G_=Q0YI8LIoqaH&5V)BakR#*41sR-1>pE88Gyf@nrBd_(UTG zgNdI9#RW4*GM=0Z&4HTAJE8s1Z$)p0nj{7gBWMuJf3&LKn}T?nk#E=!?GdaV?YkIC zMyFV3RC^zA#=?r_{s{Mpr&h`;&2`MM>eNsZM$}^p#D>un09&eXJN@ikl%z1Cwo3@x zI;qetKN2?z^vLHb%}gtGEO(~})=CyMzx5lW^V_t9D!J;NmQ1`K!-VmQo@{r$mot2AKMx&<7{K`?5REZ7}GpbB(z2-4>7QH=`` zs>!bZ90IC8fM@<7w{YpL+{O>K&XzpuEn@n&?9H%trOdVo{LKL6T>e_Io8>hK#DFmQ z=x66P^4`q#U1YotC7Ff2Uy_Lp7RV~xrpI5--bnDn>PR#-s=ZPAF9D_rn=Cc&1Ubp4 zHgTr1{?Z;7n*^|{--{}xN1FqB{ZJ9)>vO64%>B+Zk{&E&26YVF}h&gugbS95w!Nh4)Y$kA1?^1BF`$10Q%klf;qCVq87VfYOK26>ERp6xXl56{@h#zrR<)*;MrjZuX4iP@pFra@60&w0?pfUQb@eA zJk0<){Z*6`yOW`y7>xG8>k0y(bEq)R5VxpaL!zqL!uPf)Fvo!n6aompx}K}>n8 zpPSyC5f?RvfC@U5i3V=hb(dzkth6Xdg1lx13%Yde|erdQ3LS} zcgi8XwcNj9Pg_{CQ7mODl~5cEPv728-*Sr{g_xJ{O_*|kfVl?yebSP=aRpD`Mc!jP zUy9a0B5S0jtfh4KPv0s(=GEw7X;W;Btj>4($#ssw-_jk zwv5=(ZBN_`Zp+}UNA&z9xRv){_xjpT{}ZO)s)ceN!x&|Wj&|Z6hg$4YhWYjMUmTlv zdNUaY*dITDvH$yUezK~%mC;e=trU;N`K<0-2EGo|YY z0BU(OY?Be?qMhe@u&Te=yrkl1d`&(}&>R+l*EI)Mw98N0U)=np9Bm!{AT+i<9*#B; zeoVL$5e+hy@vv0^jZKJpR7`3qzC(;5HFzv_$BP5+T(|eg_iqNdWtQuP8hVYO z2G-^3<5RaCUSz<<$9>JXnkg~cWX4OhP9a_uYTKkQXaAvIoXrn!td+pT+eMq)s}A>Q zl^5UpCDZoor$-cb#mkgNzf2{erxxl(cdISz$WE>d>Y6| z6fCWS5=)7^JtIa%^A}oa{QmbLpQsoUz5$)4m7Xih1B${ain{@d4wI9Jw4P?klX4D# z+@De`Zx{RnDxPvq<}JwhUFNu@6|}+P{#V>UE&~>I{eFP0xPk-7j4cEuEfQFqT*cX`-_Jz(K@O#fbB?|px zT>Yk~R2alRs*Na!HXxYGA2pl*3M+dVH4@DFrc$ph@v)Q2B<=aLr)QSxp82ZjP#yln0sPbUOdjZQ?oyf!5>;Q<65sl z-YE?p7>U45^cdR9Xg#!+npa{{3$PyMhdUs z5QqPHUB;|LXWNUQ-@$P-BiF_RVtM%Fu5gKp3A8!nnJOpx0u}Ilf zOk(MjoyhAC-x#if>NrV=sBm3HV<#RQevuCYzLq4V3ttEv=*BePGBU7 z7!V6hn7Z)gG|o$OC*aT^Lvny1LrkepgGFNyoq5#0@tG~etvY@Uf5)x5krR1D#vroa zgOutv>n|jFNu4jU$x9gI1f}?|Z9!O0gQ7WOoDhS`Y2@2Y#ZX8K6lEF4HSA>)hfkNu z(`#E}(+WFR*5O0iO4KHt)jkpSAT_2*!;MuvHa(8h?Khx*$}8?W7@_~rN0DtRxEuMGnMZBgj<2Oc+wQU+y+#aCG#6+Y(Y4gLbxdw%8Pc3EPP% zcC?3^V)1D=I)6a~as|p4lJ3{JqO+zG5we%=%$q7ms+N7e?q1;x&iUUeMyF9%n+T&S z?1rP_f!4_Ij9SpSv%X>PVa5)v0EU5h#((kncCLpLZ(>x-E@?Gh*RG=gS#@3ol%3MPi-* zh?8y29#$*AXjvT{VKqW1_P~_fvMUX-jW*Vh3TFN@SI(?}Gk;&oF6&(}r^kU0`5MT0 z@EH4GsyFh?>(+Rdb(9_cZV7Ml@oA6;JVwHBf@DUX(?{bjQs>q#&g?}*!gP%VIDF;5 zXsiG>byw<;@#e{7wc70R_#J~JUH$A{C-F`%<(_JC>%zFYRI6{Zj=&0jdDzNag<<7~ z@-2%n_ZVXqmX-Uv4B<}`4nI@c?c_)ISW#d zw|Eo|>ojB_G&Gt*kl!4ms6!VsWjWztaK88@ZSprUy2q)dNn1C=<_)jW{aI1Uo%6P! zW%DMi*Lk7Y$cj|R-H;&P3IIa+prb)@m{;pnWM6yu6rX}I0b%iXW4Nl0rG#?^G;Wug zAax!41m?K?CPT9(P04#Ih0mg@$#iHF2Xyci4^1OCYPHwyb-L-=kNn zK(~HJzC>av6dq;Tivs;i_DBXXlq^IAlQZ7=uLudu-}1_nb5@&X3(|SH4nLP_hZ>AL zVkjDu<_5Sv6yEy0!dmanq#cvGLl(<+5IMhi*x5e<=H}+Fa6gc&XL~f`v~(YLtmCyD zACX<5HG$;=Ojau!9M0<-R8~71V9xPOF#1&bR(e~8Eb^y>Iu`Bv=K^t$vt^-Ax)?bh_|`1XMLKz!mKJ^eUpnFJi) z`{XVN4B#Vwje28WQ{SjtduO#KXS6&ii@(bb`V3-Ee@@~LuxD-Q%V%2k`QSV~!dzNG zxZ~J4_j&A=)Xvmia-G*aXL~s_uCCY&_GtJheAM>DzuVlHn2h+LY{<|FE8>02|H2h>N>*p(24VUwWUjj z7wh$!jv=w%b05KO4D)tcJbUUeYgU`X_h-uVX4?6cfPfE>YtRQIFf2^_)^rQcrUPu& zA+XK7CO54k2MpSFB;jBzHn^LP17FBlwm)(_kpkbV61^9%kwmuVfmSw0+tOr8*|_;7 zVuNo$ZGO6iH0qznz10z%{t~942CU%0P;d#53BoFz z)p{DRe<^~=GOsLumPQVmAo2E3a!dlu^OcqR<~m=S5|?3ZY$Ah zXKtvD$cBBcr_1SOxmM;>$bA`>1yd;X5V8t5lvsqRiv*i({QP(H9B+D8pDH_6*YL9o zn9O|YFVuQcF)};e+@$4zzeM;{?(Lw$0)SS+Vx|Z;(N6ibA5(uUFTv%(GwqV_NED%l zIF^2H-He$^rXl>Hx_FRT4pYllSkr7|L~0uvXJe*@uW*$e{*7i0n;1VxBp&5h9Oe^* z3Lak8tzTZFnp-0%e}nUqV6rnkCEhbCFlOvS=n%1zBt$J!*5pw}X~b@LsDr~o`aR`8 zsTYAwYDN11`pVvX(o&iJUA$WT{ZwC}`uO>;se_;ZQn9A*ey!kte82pA-$wTTc?y`s zjjZjB9R5$*s+%XS5!OhK3;77Ev5_R%A$Y)0`@8h%?0x!GuNa^o!X8f?eHAlL@l6Wa4_*%Worn^y5gaZ{Y)on{9E_Xmh4eLu3)EPyH{bj0IyNA;#fWn;9e+;JHzm`mG zU%#v`L|0@qZX#gei<0YyS1$@Qb2ZISFPn3G(akMEWm%szUF|P2mgCU~Xv@&hP{8GvYCV(+=3_x;F=NmW)=AIxV zhedIG$tFrs_3LA!nxVVUDFMbQ3w2R1{%fHGcGu$Zfm725SZ+n4s+XJnVHR*=ropBg zw5~L7j~4}yEb401%V47Y3(RG~#yh{O3sJ^7IFX%Dw-O$@RD|@NqjgmrpXvn7eHO|2 zJ%MY1Q(jMJI!olWM~*^XTs;zqz7mfj7m{8pIy`~H)P-zeZnz7zz{KfavMi{Kvd|Cp z(;Oq{-ne1nmIb{L@i#>|26W~UUFk7R*NO7pucF}?E`SIL$FGT)v7@QkqV?-`4>&63 zurafV=}lrqzd)N3*j67%C@F$RNl zhrIwe2l1&@rKjNRZgMYYUU+L*Bm3@70CQNR+yG16G|^;|UJv`~1rn&DMLh#DONWfc z<(UH3c%P1VU5V}F#e-t>WH=2WsF3~|GedPhc*f?ux^zKBz-}FPQC#&9Di%&&s90aWNf^U%|j*fP3vIpd5OHT+N7vx4Wj(*>vrbi4y{9X-5Z|k z5Kn69FFT4z(x(efg?^1!is|1tiwG(G^$DU1SQgYGS4#c7{1MxCO4fiP{D5aiMx#YfT)nl^w%@pUk|*Jg zR|)k`(i$f2ImoP(n;7zghMGpN*>S}!TicUo4Yq1UXmHBd@bi~kWvY`83bXreGSy7+ zUU}q!At#_2UP8qHP&cg7Phzo^l09o^Z4aoKKY?Mp%g07oC`<#AQVyNO@|}SveJnNL zbH;-_vJ9xLq6I7ate61s!!yL}IrO3Ni^n^dG0ssvZ}IQV#OVonKdHMQooXN7FzK``I`9X* zLYt`JHrRFJeRdPgojmgFeP+Z}E9sVxM)nxZUj<)8#3D`7C41zJ$9rnkourHhkDh;m zTduDQ?>1qJLlm!7lP~sWg2OXz%!)Mgg75#y;C~jO-wudJEgu`vh;+^ z&>2dpgSSwzo+rynzmZquw+O4By~_PT*ql!(Nx6gE{=7)286_z;3M z`FNUy8YzzrRlYQSekXhqOh29)FXd+3RM4Mj+(TP&dITsJQ(oH5->Cy6y_)!7=Dgsz zy?=Xo;r(8Ck!W|vb_KJc;rH}y8B=_NctL3Q(g^Qpe;sk{B4$ItAAs#LYJE;B!Z<}`*cjVnQGJOe1rGjVM^19-(Vqv}+OFPkTp z>O@L_lP8(#j1CCSGj?rU4}A6BSs!^flI3AWFZw5VYq|}P#tZwk;V1d(@DA{RC&udZ z4!Hauk3P0{JX<<}AKBwOU_8%yws<}Wnln2P@_z|@OYTs1!9R&w<8r`fb_x8zzcA1D zb9|9LsaA&sKx99;T*<$HBX1e{Fu$N1pI3ItKjBuVdcdqc@i31#ghIZ4w7tuNg5}1CYhw_*hC&%5m+whk1e_k>gRwxUE)-A} z3~h#nHaCXZmF&o!75pnOI9_yMbm$y4Dz}Q0#(9>KJ4b8*NP!;(aeI3#YegYue zdefO*vFLb6)C5O4LaTM}yhz;+@hL;POj|Q3V#;ZeGWxHA0}oqRhh1Jlm+G z)gIQSPId|V4YD;ujY5Yjh)PO}S(GaRMhe1-(hZc;u6C!~Skc3{Ah)bvQes@A5SBbn z5|v{xa~7--yAw4GRX%M2eNnhfk>9iuKv9V+NPpbD9yNfS>h~#N&yYqkoW^UPa$`*S z@t5$Ld`8mGeJXLPGELcTdyt~Uj56`I0QV%1W7-3uQ$_qDy77cYWw+#MfOf9c_=IEh zEw+`)cA-O(i&@Am(1j9zo>sYV#}e;)0drPKzrm?UyC7X&*D3CL34Pv&Ihj@|`#exn z6urXAoKRB&J%D45XsKY}6rDT&vQT=_%dyNom0q!?u;BE;vCSRDsEp&UhEHB(BjGyw z!wL-bPnucdl+ABiJP#_8XZ>Bdu9T3wuPXKU96aL0;O*r879s_h9D|#Gxb!6&O?4iW z`HLO4eM%~aJ3M!Jb?*6G%LTeVt2=)8<(*67hM^sFGA5c*4Gz-62;u+-5q%5^c?{9A zHC!@YGCJL<2;aINEBI19QVvqZb+Wu#jzS)0sb?fAQa;se#|z9qwI^&M{R>%`A3vb} z2NV9^g@^x%3I8u?&%XpcibjtATXv{yp@^f5=`BZZDUlLvy8u8mMRV{Qwzq0)5*#WP zE(=yD`@8y6RhNmhb&at=VCd=;ga0@Z4v**W^Vsxr$ormZj)OB4BJ(Ti|z9UUE z8ROjX^!_on7}<%@6bAoHfSiqqo-E z@9FIBtWptrNN7VdSj>ZH3XHins8hIr(BEN?zg5x)r3zc)w7p4i~6>bQEo-hPHd>`Ee26tFcgTo3Do+u znJkv`Z8<5f0pFpz@o8b?X1)K_{3xQtRn#H4kYiz3d^4&wH>PQVw_s~-c0clgDp?O6 znQS$idIQV3vr_dc2#=O4qvsBf?({WiP6 zaTSHTtVGybDGaJTB9TJ)Y_z3!gxe%2w^D=?%5wICXsdvnsw_a*(l6m#0K~Q+Vg;^y zHK}Z%C1tpZVuG4pOv>ySSLdZ~M8Wg0RJ0Ln{R->6uyx#}REndr7FE2LwbGu?#vY|| zycZB#N)V}rCz)Uq4Ucvgr505>KVCOzrQ6$jLywOE+-kyitD^UqD*nu>aA*G;e`0*8 z7j9y`h#BQK9@@Zco)O+wFd?B#19V9(kQ%9Xc!6s2#2f$uu|!vC@GnyQf&4b^O?D`r zux>A8hQu#~-5LEil)m16B@{}loiR9z_%9%X)qWG$yGJq(H~(;c7>4K0ry2A`w~rSt zo|0akrQ=+r4!9BrJH-ALad{ZUOCl=c1XIHS_9&e_oF3}Dw#g+~gCM*V&J@x|Mj_5{ zl&dZytggNd@+c!|2}Da*0oP9CgX0D_Z0#WZfJvVjeq4iE^yy{i{_Ot+RUc8WLL&Ha z1bD&!r#JS`sRq@5aRnHZj9s1n5haXNl2lw*LFZmhLO|yS4-oCA^o?0b!UCURf`|t7 zhp>^tg~^RP1=L5jvM{n3PradRJI@QhTC=GWGtn4nz$r>^V*Hd&EjreLxOX7MiT1>M zyLz2s-*$PN?(V(vBEtj8X%fQc$?tu@V;d~$T@GO}KEOtL(k z0XAqfFkKq6869golVaB4b9B?$F=$)LEr_SCT0dtP4B*=|+8S-2=Rz74N@kz9Ge+lU z!km$(wIj`Rx$sD=WNvRTszkB!U2>wgL`kYt(5d>Ao}4@!2aHW4m$fuFsz)jA*f(-4 z%!{YhwCOql4~giJBfi(!nmq&s&tQZXz+o0*po9?T$?(i-Y$j1s7e!lLAl~PyhkSJ& z&BMecU2_B4JV7|&HZq=OJCDw^rhH#Sa1=zKRX4L9ZX{=~iOZ2p+}G!zfqdu|6+!n$ zpR+&3i47f_FJ|ggqe_6$8bUc6M{RcLu=aJo6D!Q445g#Nrzl7HaW1(2NRz2qBA}4l zE%wlf0AsRPv08It*~s9dhZYf!mH5&}D8g)u`-NF;2k52L{wt>R}Xftz_4Az2i*)O3!E;xRz=G$0&Q;=%Ck6?^b; zYS7^c=~imTie^QOoKQd9;9sXjPZ{bQ(|zDVU98fEyBaG9u#rBSOH`!&ih>nE&b#6Vxo zKkuy-b=Vij#cIt?k{jZoP!?8jXD2V$+&?I{Q%vs>O5z%{#E+o@UAkt%s$BoMZzkQHPpB6f|gjQ-i}Ga%85cQ2Rh@zyV|_ zSG_x8LFiET)w$^_&xzzI$q=st0NI|Z_4mM3&16Qp-1CnQokGk>3|-qwFG2I-D$T{? zE=J_e0a9>LygISo=h#zKWj0J6BP!P;y!yeouuJIV z*J^vdczAIOyAkQ>aRWvYgIZo>tYZ z>1JMd%Ny^#;u|=XbR?3r2gb)7eBK->CIkoEE6bQ zEd5!tp<#|<=U<-AbdPGC&1UfZH=A|@(5p5%m*O` z>+XCn{(YV-IU<#pu%I&})uZJZN1zwYssM~M8}Fd+1IS=@-)cblat)(bTq{;rg{(pF zYZ+yI-N`UWIu3tbT_=v6MKw;EVH)leC+QEsa!g*jLcg|1LA05a3b*v0qbGlx|H5a0 zN0!KzcW1AwzvF^)kS$}G2<7*`hkhu`ME<2eB@pkwjt6M}TL~1jwYE04`9G?ls-+{+ zGKTk(hPknubp$=UApjus(%_DRCCv&`U2SNnHTa4Q9dbt!swRFVa-~o!NhhL%CH}Kz z@w_>ftmzA%Y1kz>M)RitN9O7EDH`di<5bm>NC*M$1@|%c^`jf@@lE#iR~N7zo_BGs z3_n%kwDU2fNNI}rZToV{uFJ{HR=CI8eQSn!B51hC6qiu~G)$SFEA`VsgEj?bX&mzX z3knk+Cc0DJDQi1_*zzDvOB}2#oo>3<_hQ0;w(e3WL^oGyr9yZ2Bqvy+Wu)V*=7&KR(%^u>@EO zx%~KA2=BL1R6jUsjfAA?WT)y6^o{nW`?HSmTD;qR}zlb->9lYGS{FpEb=qMQ zm}rwB(qe=pX`v}qnec=wGz>L@y=y1=dIO|qx%g#70e{s7otgO1%4u*SXVlrqBt*{o zLgZs0=4K|-%2oOwM9E|yLpy@GimhQhO503uE5k)t;!#)cR|Fecb%&#G8~h^2SDE5f z+&3s@0#SsoqdA5?=948!%L}iR@CaylCr}08U@cC(q@v!&j;Cso?_Vn__sLwd9)C9| zk0kbF<(1~7?E*67rzNP!-N+^g6q8tRron64byiFM2u*Zt-#|Pk7d9!7(y-yzgrk< z01=$WfTemqw-_fw1$x#R6;blIx9UCDptwMP!|OEZ;+rDVhJYs!xT_`tgYYiegPNi& z%wOwIWz1Dncmvi#1x1%n-E1?P#0LLu>TG1E!>`yY#(A)x znyM~SU>50scjgn3R1t-Z?ow`OKSFW%-eDnElbcjUP&7U&#Xnq*pME5^T8Bq!tm58- zAU7nOlsw|xxEC|gsx%NO=QAPZ=u|VR($HS+q&zy_CONx_f!~aobqI}y?}60GtU;v1 zuu7RKfP7j#aciC6dba_$N-4yV$E#<+z|Z7pb_gA8IAH=QM%4&1c5>*eliIqoT zQ?m{=C>8Yu8djt|6~;O2*=S{SSvLB|>8&F*Z&W<@uqevqb{&3eI2e=1)y#?AlY^&k zn2DNh1d}DP(hZzZoC|-Wg?yuBbZ$~M+vg?DnR>3@(_F>mQK(BxD%BsuKHs{;&GHg) zZ>8_)=C&}$0O$kUuGn5R7~h9I_Au>U%^T~mIh3nI_O&^+-M?V@7AvHgR_{@lWE(T2 zR*B5*^T6uRBC|iRQH#H7X`lQIzHLoQ`}rg^d;3#idFp*-p=j%835=VSnd0m5vsp** z$Y@d})X9rz$IlkQea>q_R9nSsLISDxf>UXR0Ms&#{v3^2{&@Pdbz%Q^vkGONhysG? z%+D%L1CqX~cuIs8*(#wEia%p~3D>1_)%@~I7jrXHJ_X@?-a@ULh*BUPMq;$FgiK5$ zF?-tgE6ow|@m!GeiIGfg;vA^5AVaGQQL_uAKLjgtvS#m((Y5!V@G-mXOOF57r_69_lp~G?Y*cdY#%OY5*i;nq(mWW+< z@87e1O53Hxl3eAp?;=4h&8}dBhuB7}Pua?EBVwoa|EWzKR@#v@LzUFk!zG`?8YJD( z9GDPGrj3z9v)6|`EBPbW{C~9nfl&!d~q?_KBu+jqVL4>9Vb`0+##mW&RdJHeu z4Y9Q2w6ZoJ`lw7PxuLI>KX6_Ue9L4hfLuE?XLTHI%vig|-(XP30*ge|Q{ zJnWm+NylwjAggXHnj0Bsc{Vg+CjZWz8?(?rDfg&2pmZRqYXNx!niWv>dV2#aF%`wp zSGfI^DZ!{)tg6{(bZ~eX6;j=b)XARn$OfS{e`Ty^USW+O>-bQk;JjMpTyT5 zOqaTD>p^6gS&t(*NOVl@xJw_!BvA?Jtvw&B)<~oxE$Xef{;zMsV=K}21-;G( zZK^Wgj>Gr2KU+<1K{{sFJJ`7>XI@d$qVMO)^H_^19#$B*o8q=wrH&f-W&Sw3bTt6D_5$d>W;s5l9`ZS#Hi&;A zOF#g_>XdAn*Kn|#CEbxHy;nQrS|aJao8rv8pBi&BO$NSHbgQD-{}Z(9E4*)d z#e8Iivb6)<+WUSdy_INt8|0S0($(*AqkUmaC*Co<)ghi>WAENM-M$Be{u1+fi!gp~ z*cHvIZ|pf1_Z6YRtLyvdTrE;{f8p3y7n%7OSb^{B%y_K8J*-4|t4ZQLa$8u@Ui}64 zFIP&cpg^hTM;n^`hb#5}b!sePZe{!*J315pw zAZOOH@{2j=B#!D-U?p;N=#*_A?^Lv#Ge6ToUgY&8f>*+8$^?P{!uTW3@hRikE9?0# zgY_pM^`8BUbmzAjB6#8D=8BDu3#3Wfc}vzIhv8AgF$i}yD=IYAc zQB&+6;14G^0y~mj9rYrd^*lwZ&|-VvqYQoH!_E|>83*^-)Mmz`By%Iz=bi>BQ-vP1 zs0u{0u_<&4PqXEmJmnlBeT^XjbC>zwROjjJg7_&l^X@jvv?+J%oDZC|6L~#ydw#&^ z(k^WFX?$@(Dl9ami>JxvMAs=z%1SdtGlv@ViK~NSk$&Z-ceL&0C;c!W%d(zR2f7P0 z(Evxu%xWdBKzEOzw@eg9P{5$fS_1WBo6<1NM!p|)-ao4yO;6ixe9vxxX*>pm5)So- zAo~D;ii@BMwQNRNsE2sL8}=H!?0;xFer0qaNLlOC3iK{8dz9bINMAI<=GZ zfUR^3KCkeq?eLr$G)+HFSLj5|lQe7bn6RzW(RGB&uO+~>7!#un$@UbgLPk#=USFaQ zp)2=fa+{iKy0zxt_$w|!j%3B}I47?ix~XiJz00UN{0Q#2e?lCj+FTAkMn>2C1ry5( z9wng!6LP#r$^Oo#x!_2`CFRCsl)PEX?+(N(TpHv}d|x6eHN4Q8Qkw!9dOTD-ABBeu z#=K@@?Zb+YK0PB#L(8@ALol?NqjpO(hoauI5KTC*cc6(c-te9vn6`&{nYuU^1i)8C z#d65wyb^mu7DU4cpc7%7evDvUUQwZm-8>o6{D+<&o~ev5zx>N3W29mJg?UQZt`nJ?Z@qehDc8T7LUo5h+W+K0h7#+RctlxDe||3vYFzw6 zpfX0u-C45aB;*?I0e5c=SKtGeBM^2D#OZOq5{Y}`u??Bq*fd(;D(E%}D>H1}*@)NO zs6Wo?fVKg5SLWs{Q}p_c2v zFUca(kO6%J8dW{6+H%5KVliEBIa3fMLf8C+a0t7kK<&yX61pS_Jk5zP0;zW8W8Kkh za^892R;wZpFalJ=@4+uOD4R_9t=|<-%7YP6s7VrC^yV7K9hKhq!TM z+&Gm;q;2a#d??6E)q5~%1Qx0Um=RqQ447%F++h`XSJ`(h%METbJ8hLZcWuwK?r5NV z1O2OJt*kBJ>;DKkxBn1y|EyX6EyYRyzZ`UHd1+ZddiYGjw!gagIeX9c&xG`@_r!TY z11A8223*vQt5kLC(wZS(%s=Tjp9FgiP`X)Zmg~;b^wWul^Y?wEUsJmS{@DJY$>NNo z0{I3}E09D3HpR^B_xRH}T+n3tj>tvw_xg0m8+5;g`yK-4YNaq1K6Y&MPxTX-+Vtf3 zrt=|RDHXVjoxiJDPZ)pay(^@u89wIe*r}4R5b-OAXgr(I$rQ=w;fiDnmBgH4)K6)~ zQb=js`Cl!_`gUwLs;ZhMMa^gprrIm6B2*j2g)B^!`#?;OJhdaNp@L_vySjf41xn82 zVl#k$tsi$Xb=oJ18xM?cM7MIYt7vTu{Hci3d@I$SfdslhzfkRERSQC?vE4;L%{i$N za!-7~JawMKDqs~)7FQLs_Ma0D;{PVJ|LrsW?})8xxF+@@3UB`v10N{>VkCiIuhL{46an0z7`*f?#7;d8MtTb!2p!8cJpDqQ$RBk#`AC-t+n;(Z~Dj65Y$| zjnqt>q*sge8{?y|tDmC;=Pp;R?_=Fr+yX+y^T!M*;!X<0we9vU3X=tS2pz2D@vgxi z>CaY>MGKp0QZk_we@Z0!9W2&1$|@fJdQ(XiI2ib%9xJ*bFcWW{Gr+(`X6Gqvaa;A0{AmOJN>=hS~~Jw zu*P8m+&vr!VMCKZ+&SKY-}{o(1Fl|rvwU~6qN={OvS#?&AM=Uj6Bo+eK-ahj%jS`cCL}E>cr?^-gqqnVi;YeK z=hI8)#U&I)Jr5bqBes$%hFT#qh*8r@h$7irRSpuBo*Ie#9kb%%#)+0HM7%ZASUgra za1P$vpAAV9FCeC{2_4E$Re|2%^vrD|utHwJnjPRVPi2ufXfl@bjK&O)dao^P#m03e z9%^K8m^p=Hp20w5-*6Tz#2-wB%#<4B;*iX3eBj2lRz5-INE9`tbV}pl5Y2UdE72xs z<~frqk--B&zB|d63G8_LT_DGusSz~m2I)NS9zcR6TNWD*+!=d&Wu|pLdWAc$pzj<( z)Y`#`Aa5vWK{2+H;$%{kXC7+N{_WU`A2?{Z8VV6fl$??xW?7Pmv=Oe@*VaAYLyThTi5TrYX>6l_3;zLv?TLuzkaD^v0S{lLU1P|3F$_` zo>SOG=aB~@;wrmRTC7Nd2@)rel9~9Cg|bG!qei5RkF}t+5}Eh42#(MK9T8Rf>FObQ zeL>$g0v-EG0p6nX935%WMz*Oy(DuUcB528`J5*lzlVT^Jj45>X*b}y9>jTyqW$ci2 zl(s;dz^N4bxg2PFZ%KJz7kvK}8^w6g>qDu&;EZB+D!m{n7YQZPVQL{m{B$W&1q|zr z3Rjt9T9mf%#6%g3RL{6;l@nYUhtfi1?TIQTpU*^r=lkV4PZGO7aK9gZePW`FRS16t znzKJ8LG*<(hAs0H%=9z)ixoJhp;qWvBN;1d zg-5SLw(TyI9RVHsor%@D;n^qF;2r7S zm1)XHsLFt1T!t)Y$uiVCOEXng>%<>;+MH0S^#tp#n%h0+As0dCJg~roTCFCBYv4ec ze(x(_I~(j-aB;)m$i~cb)Y^sJ%V|SdN%V&fn`R#DYTar%8rO%JjH(B!ra%Z3F#dRkU~s$cv&}Wzq+=Pww)wV-aSM0&XLCmzNJH)Yx7t2+oUuckPQgE_0X)I5tOpw^8s zIXv*3KSM;$8)#zvx01&LjMSpC337SF@3ELjy@MVJt@H?28Nk|EX1PoB#AEXepaB!9 zU3O74Wz~d8Tq-#q4vHPb=>?dt}|1Y=#a91YV4RQA;gLi+_L2sP-gdb8oHtCz+U35+ZD>erFXUD~be@05+nF zp_U}dm$o)c{^hvC7$J$-=9BUD19bpjNOaj{f)78zhOdOtHwQEKT#&+95cbB*`_+e7 zfLs#iLTlZY%(5w&4lua*2O;suPR=2RFe(WH6WG6xY-%nm>r_wBF( z?6jc2LH~tLo2BF9j=e3edt#2c-suy2^QEsb&MA+_ao*P!&tw?8uQpLm!igs9cvfA{ z6@8yRWs9f_!Vy|D%q+nMiER6lu(-96fXd?2LrjOgo;&Z%na>0Y^65rFUp z6>)VX=_iYFhKmJ4ly~xQmX-ew-$M=SjeYB2JvskH2G!B}3lJ@@;g80G2Ic#f-x$qa zc{cyUdJHhlEa+5xzgQBQlBZoz26xCF5$r0I-}Uh8YfArNgsj)GFWqygyN6SZ(NIp%*A(=Fbt_< z+kwZ{&jEgZ&kc<)OYA_c(+~e%082do7ehm49h0!fjZ0`?ya!BnhFa|Y0oSIU>#~_p zur&l)(2;_qnbr^sBDY}k8aOKs6?|8p$_tI6Ydn5+Y%&N~7mZJ(v<|WR(nPrOYm&ft zb+fW}N)}_lFmPa~ioN639=C|3kZyLaLNx1gK2Fk=BhjB$h=~piml{o~UTtFrhs2Yn zH;ny)JPEX+>3IY!!*)pS&dsG2G^;?bz&@8X$Zj*r3tHqYQ_2r8&D|z}-FK_NZ!^jb zh2Ne%Dlf84eUpKGaI28tt12yxaxe0lyWK00U{Ha0%_ux+M2!!!`(-cAgK4P8t00x2Xj3Y9Oyva_)&V!+tNgMAG_w1!9^fvE>H|iws*!FDiKccRT;Z4;QgAtt$MRUV z_y@YaN3ZvvmPC25Z-~0=do*u;TTIi>?`E&fzqx{?;sS_&jxIDf%Mpvu0&aZcw7|8z z_^5qrqaW>&mGB3Af+9q@cfiGuyTOY_jN8L^-r&%F@ecI76N;~=;6A?ibiY8WEI^rb z_%!>b|4nzmYyZ{e&;z$K?aT7F3HxU&`Ob|zhtBY$9|YdvlNEr?D76i!+0@UbuO)17 zKwuENBP1`JHrU(+trB#M0bPM%J1}>M;qCF4+dD{a&yFyjM@-D;bNoT97Pjut^+U~; z+m6WeInEZxE=daSQ_&M{r@H6aK_0&5w-}n@=o5)I^x*UDnHk>R!lP@k=i&!&uOOW- z_LB#Yk_R|!T3vy6Rn$3b=IEXLm`~taT|vf}D@L*UxH048I~Zj``9sLB#Bj1DFN(1D zdY^v_0dq5({pO#jlO@Lg3?2Ma2>jR3ft;W5ovUPwxmR;E(()iMNiVL#3m*_Lmg%=z%j9ce;!{E3|RLGdKMN9!_^i^O$ny{Euv?JKmb8|Bs|Lsl$Cd&X8Efgd*?%LVZsm})Dm2VINSsU(dtnMOJ3kQo5 z51ho+`GQ*OU$5qVc~%hOU~qJqC;upg8XE=$IY(`|Y7j6H_j~N^5xCD)y+BV$$ea2n zAtDR{FaKQ@1Z-fyoSTcI;a5%$GoPYwvw>6Ia=MaqiixCh8m3HA9TXQ`J&o77)-^pXPiEFcALvkp}&yboSTOH|nd!`0b0WKLv zMNGHcrlhfI;tvUk=5Dj5=@3|)R< zO)3|dzjsvCc##J&JnNDIj|MGQVW#RL^j<~?fk7{g=)_jbc^Flsc@XHb5yUAy3SJdr zVVIg4~{;R?1K5apuos64!ZdMOg4AuPviv-A)~NwYP3 zqfJHjb5L1q5H8(d-&CnT`WA_oMG-|ihHH*k2saA6fK#fzvv%<#up~OPW~9SV<+TSMfy&IU&3zVJN-yYS z{X{Oa_XrAjyGGADL=S&>1-6Sv0&5+>BwQGt+R46KWrOv(roUy8pbKVX08PbnqNkyI zr;$9vrn#c_LBu8aqxL{a9tpl)PQS2^6Zbu5Bdg_l!xhr~l8LVoWreWY>bT+PGcK_| zfelw@$k3;sczX`KO4Z>{3=)K>^5E;M{BO7$WW{H6wt-A;A@NnK4P->}p{nUs2tvKc zLlRK%i(v8p3=J|29^%?GPYjlVZs@ps1)UUQ)hIe&DB*CD+@s|!ahbrLe4%kej(f78 zO>svh;p%7YxWuMBV;nj}6BYJ`PsoO~z9LH!e556uzbC@;^gF`YC0bn*(tvCvxA^^R zlD78xkoyZ%4rESB-A{aI7Z-nx{Vh%JR{tTSlLwniEcxd^Q8g~PcE86I*vU$+S6lf%d{tl=G`+e;Am4~S91I(F?x`QsygGfm@k!p#jk0Z%G{zvAr&8)I<_%TT}CdbZSl^ zmOWzG(E8vL(jZxl;8`zYB-ZrH`rK`0`p5w&T_|&s(;2QCCas9q&4TG2e!DG&D{&2Z z>kEL{(`EU#dD&%pc$v27YOy#tdlt||HKpE|WfF4yGBODC434g!YVMghn(cVP#Rw?W zfYWydNySzzFpsWe4CxM*g}@%)#FOuF8(?wJ>IyDI+kjP%X{a_ z0gpe!HRa6P>kDVpEhyTj!kDZV6veLh2T*P31q5dN{EPHh+Yo?DX1nuK=+6sAFB#cB zNITA0lxsQ*T?hl|!(FQPAe&E9ZKv5)_QinPKKup4TL#8djkS9xm9_(jzES!eTa^4M zCS;t}_-N}J?_c)k;_f&t@DCpl8|J^gU0MH|%_eK$Xl!NdWGrWH=;Z8R{EruHqLQ^D zk}5iPa=-;*QnQlWK#0a*jF2Ks1B#VZzhop#4v0C#qI-R70QKnAl!-r`qPMuu-|S5C z0CUq9fG^VFQ%4uUv4E9iqqz6F=P!v`Qi?tlS(wdAPJ`LqpF>;PRrn)xud{}ic0n_O{Y)Fsf^;e=TE+TP6rps0 zC$lq=@cn#Sbb}6^8puuA(%* za_HJ9*wpq8gM@=uRIMUA=_0zJ8SM=hkXKGQR_m(k401h}3E5{<8_EyxkgfuW7L_e`>I`bGx77V8{ZyfyKMBcQ zC7Ag3qy62oD9+;xQ~@>3u}@aHeCvR z?2r^mR)*3l6v8`?P$Z_V2Sb5$xMy65j9LUqw)n)iK`EdqGBe&Gm(G$D9~InjH{V z+Jn2DUoV=W(^0@==){PFyAvZwb|204zB@t{myNqH*BS(hFbs^Nk#nH^T}x4Dg0QD5 zl~FpxKOO}%4XnQWOUG^Tgsg-2ypTJJ@Kbiaa8^DqHHT3UoJaoVjvElNXv;7a2B9}e z)%Ryz^iSH4+TsG&%JJBQB zl4~fwvsQySmT5X&qKnS5PHJP2N+{9Ld}Wgi=vYvubkX}IYA5;kSs!XcDcJku0_0Mr z97Uv7)dzc_k7M8cQ(j_gRN_(4zzxl?oj!flUUSqqN;?MMdR5f8bk!Qk#ZFbPVRulO z)@*S*^`jYt@aPnv$051X(0Cs~H<+UXI+603$UZjGU&hh~Vd#jK9KCO8^l_BMHDTr5 z_}{R0S~!tNc78SSkPq&x9bjpae1#<8i^v~T%Ya_yS2Qpr9K(mkmDPj1nW zDYNm@sq%!jlt-F#xfk_~A@1mx5aoUJh!|GMv-)4X3N$`2UU_SXlN~F%domgnMw=4c zBf)56x5zsU-mtCqx+*LA@byBeSY7KT>QUxayqeF6A8UgOx|9nGp5S1lgJ)_9e3BAE zY=4*Dgp^B77qhet9>!U)9QhP*F1k=!LOYdwT=Fb=_La^0;OP=qsE2gZksMnh>5>XX zrLp1@-ReHlaFu5~BNwc~h~a~D^)2<}ByXjUU*+)XP4$1HKSUV7|1QrE{a*|X0L?DH zzdsC(8_@sRRQ!|lMgMm=1D%>BuRD$u3WnDc%%B2?WB?EMlxsPvt4p1&dyV&Ns@4`? zq$K64h65X7yI#79S-s}eB3#QUcV2~xC@?3StwXjg5K1&v+hv!(bQ&FP!j zk3K;Hg7V^BQsVbCz{iLaF88yrEV{g8TAR378ll_-)x;v=oHgr>l$+)G=AW;WZ>i-y zcu!6*$%Gi8u*zO}Xs8SlFTpRyjM7??rqMg})n>W6KA)dxd`1tU!-X*^VFe+cz$-XH zPOn6zbRwl;#WW&=Ry+*EU?>HlS#?Nc4SO|iZ5mew?%HovnW2@mz{5TV7|xWDB03^J zb6YIV3et<9MUU-&6>y7eN{`T=8SU18%xM3~O8IY;2nMGAF{BMt(6&YVp{4XMH?3Ru zLM~WXLwR2cP;0ye-2zy~OP8e0+~CvVBmp$_(ew#CRKH-o<%9+efg$OB$`5glOPE>j zb4_$IdR(y|Z>{QfcYpt?iS_~^2%;XpL~-}Jg0TuWh;1fM0~@^E`r7^b9N-7uf7FPN z*AMSu!rAnkf!L|T5{c>mcIQv>mUYP?2oetcmWVu+;&OQe@caTj1@E@Y5*S9u1oJ~p z*+W@Js21rALdU)rNq$hFtQu@*=BYVkZ;5cl@fe9I{U|O({Mk{WK~1j*zBumWpjnxF zgPt;4Q=}^Mnu6B0VUAWdu-hQ{SSKGJv{aCbth_3Hx{HVHW~M+39U41-yu`VxCd_7C zoxexZglwh5cvEM4yyDz02(vyyS5OSS7#+2UahF7gBim4DC`>!gFdi+_j`_!t zbfCsTK9%cKq>~Ef1QYrIJx-NT)Or49m|!c~HJLOu4R7##sI;ad?p6iXKvfWz6I#F7 z-rXJ%AVRKS45PJiGve82^J90r97mx%pRgQQ$ z$K23dgFCZD>I?7IDR@F|9dARzBWaTupSM9c51$#dB7TdFwH?!0fnKame1u%jICxPJ zYc(SV40l5(w~_z5oBE)O&?8DT+q8rJo9EQgLQ$$`^nelc(H8vj{Mg6OOMuBUX{6o4N$HPZ+|HUV=$m8 z@Ro~57Qub~^;Vkq0`*&p;h{Uem|U~0?0oL|UzndzI7mQf$+SgkCy$Lr=g28U+j;d> z+Q;xgOj}BD`ie+@Pb-e9N#^BX#5n#^JkKf>9vsFAT(3hf9lDlP8l}=PD_eT0EA^s% zhxtm!ek24T48Oq-P(fEsR%e&wKBuB7__g{eA!vSLr2+V8KYfis=)Qs(w5EJb(*A{5 zn=r%bb>u&htS|)3)R9=uHs=huq=Gi0F6c?oU+cuF>0;SQg{~Jn>7?#7=4_C0(C7P* z(UoPz&LwuhDmNhntgs#i96Hset5t08&3d5(+)Ih8$3fmr)7m@&wxtYn%s#B#}qf7@fkQ6L6Q*`^OQ-P(^g>ulr? zR=dzmEVCVUAeTfOcMK;vgq$Ngm0>QfvgD#IT^cD1m>8=?ix%>6?xizPWl5%%dveKG zG7(KF$=BFfF|IK>wn4@OLfUUD3R9-vWu8z}220T`REgnX;v~_w8d%rDSIkV?kuw+Wf`5 z8(j~x)nTZPGOm&%_99>1*h9(MDlF0k7mjl`{)Ht^DQMy55#%fo9771?FP;Ifu|!ti zDrTDN7ePM1@`kTkp=mOI&a7PKqSy$mooi zbquxh_$D=6mS&Z1tkNNMe>fh4GJVSsIfbma@)waV!m`m4`=*%MNFp-H+XMT1-O}3o z#n-FP_a=ZHZ1#Bw_z&>?(5lto&4zyZIHh&y_#v?t%oJ^Nj(M3%Q&nnvAs3<`Jyl2J z(Q|p?eXP)g7QV8L#P=$-{RoIrli{-Qg6s355em>6WPH4RFih9U%GZ!_vQMY+UZ$6V zN)3yL+W<+p{X`deMqyk~(o^e5A6vcwi|ua<-?7welS%oZ^0+pgs$|l{#lhrU+$rjz zM@#AJxv=bx(|p3a7^A)F;uG%LtMhVgcoxPl)N#OL#qn+^58lVzLLm4P=A3-xDjkLy zKlIbWBuB+K)sHigErm8$jyS;5BDPB~lTx)9aLXfm5l#!eU)A8)r9@3MtAWDp21nPI zrBaeVnD@H3ndTA^Vpd^*^6B(Jd&FYr3`BIZApJ7;W7xt!8F8lgfdsxrvova0jxMNF z%~}o8+xFG$RdN0kAWo#2S-5FSv2Oe$+;gJ`M4(gnlHzwVhx#!xIm{t(>0v~X^6KyP z3Z3NQVm6tKH<&tTX1ets9Pq0w59WhdfH5ZfbMcFp($dV7aZ^*X;iS++NQXGl&3`3PnLepA|@$%HFV5MdnJkr*yOpcS7M!z zSXsP;NkmFvvBSBB#Lj_bOzJ$Uz85G8Dk6Es0yUu@4x@}@`EZXk%MI|F?xCKjH|b(T zX#mG^QZMyJ3Jki);F?!tBrpqj;BiPfr z*shWll4P7v27so6?K3EdgEhTKP{Vk``jJ^0`spzGfPS&#c(Ql|0+COlue3@qb+&mN z?4A+}j^m@<*wdlte81F~cQLW$#rPQEG)VtsmVlQF&cqJTI(Hy-Fuwyq#_`>Jdr3%5 z=s7g^xlZ?$&&7dHTf1SMU+pVXuiZv2|XRjRTarqk=rOr3jYQRsRyWCv6|M1q|hkt-q6tl)t~Wp*aMj7 zw3&G24RHUuYvM)x>Ge!~U~OjNsI&#bnp5`nP&(Hl>3ph@37PmiL|H@Vi&fiu$DHI2 zgN*^MEm8rook-yo**)=^eLzo?gY6HM%r(@Gb|3gs)&QWmW};eHdtNJ2Pi8jmY_kuU zo3J5j7qW_Bn0XOxjWHsuiXF#x_~ac{2kwl*sMCmwwKI^{Yny{e{WC;}6muqBeI+0( zR0K^-EE78sPI|p>ay9m3M27Sg7-|%OM1U*)RoNmmtFjv{(vV667Qj8 zFR1J!#zPc(W!?%B1wT% zt=|a|(&ZvD43DQMieLS}Z3 z=xQuK(mG}PyVs-F(wKUx6w4CDaPvCx2Z8OjsH;ET(iWm2a0mJ%AW0)Y)n$9yJUO3X+#0Rm;_E2~C>=;;K@2kk7P*MP?>e*ZS> z9mze=K;++S`U;M^U{oz=%DiuIE@WA^t!9rc)(Y@%#Y{`*sbzNbLn~YT{1dB08PwKr zW0^V~QT1AWi_9Y&Ea6m_=_4+OktTue_YOsx;*{a{gL=_&52rc{=K332PpL5f4xns1 z+L=@u2{i|>C)ooe*uyY3%3tNkB7`9CG?|7{8_W2@+FX!d`q z*?-}D`{aJq?5>J1yb!?k*pMB4T@OxBU`c3D3&1Mgxp-+V^{KEIwJI@<=P$f5wqm9M ze5m%5493@^^wj&u&s&HcY*9>u0Hn>@v?ZaJs!~TQ2><=gdANsJKJ;bVwv3k|LrXDu zit!c6-BEUt5sx|MLD%2f(bsUzs{him?NOJneNVv#*dxRycnAt;Mb>XP0v#Gyh=|(9 z;zbChaPr^+#D>aHlxSqMtQdkjtO$tA^} zGkX>fBTJVkzHvUK5_18)=^y=8gb~T3Ft-iVcBx8}_kDsGsiOwy)w2oTaS7SKirM{k zfmLFU6-_|(fdb{m-bMXj z)DsT-9Y{E{^c_=CM;FZD-ldRW`_B6D{&js*U=E#wex&U5e@NMX_C5bMH6U$gZ2CWh zY@<4ar_$mg?{Vko1hE^$C|{opC~}5Wf|V5r^s1l%3nKvt!hQ_&C?A73BamO19!hdv zi#`hPC-f3#LrD%kq($wO%50l*Im)?$wRV}aIVHvR_tx{#p)vZwadkJG59@P=$5pE- z?{n8}>h&{^l+e6uoj-EXtu^;%>t^Sdm~IV>V{SK)qqc2Me%fn!Qmgyx%Y0e zPtN|HzaNH~fm!cVS654|u6~Pa0=-LKQ(s8QOhPEGsyU~fxq~@sP>Hi~G-z4?*DhIp z$W>q?m>1Rb+^GVVjXXwdG%FRujgQ|fGmdEjdULXn(=<6>%6N*X;+uh-kb+rzoQ9+Z zw|#x57^bAS!-#E8obX2Umzqqj#uI(4cDBsjeZxzMgG0(M>W5fElxIclU1D1)<__FB z9|}kCXD+~q>-*4I74+`Jy^>ngPq4WSw50?cJnYJ-oIPm zb{{y|YbTd<%&O6^%U7f_uPja)Bd0E*y{VTrqxPq*O^FqM%K268_CqY-PGpHw;)Hv0 z8Sony#mUOkXE_}vYCr7~#?#~mwy8zO8t~iAdF13i@E)2JKk?grrmQzPWgz@VsA89x zeV@+*AqTQVh|my(W|CIDKUC%q7}*g!^P4rYnr<5NhN^AR@T>i73mYp)^ZV80HuI5* z6v^hJn5v4+(zQ3seu-_#!jPW$Ej}MP#ot(gTQ|>0#)*kHc&ZW*h zrbwqEv=N_Frlj(s$Wx|?A4KaAj}lkZqg^YFUMkJdd|?nHy+xl*((Sc*&md8jb|~&% zR0l6Fi^B}HAQQAkqKAdPq8pz`G)cxU9ujLHw+GsSmt4fc!px)+&zxq?wf$*Cig*-_ zBZLRU)H!~evc#;s!lXW$nbKHa%*DmQBY|H&FgmqV9lS{gHX=B-JV0;4ls6Zn00BP_k*+oEbE4T2V^lnrx7ex%6n8jOOQ(GRpV3DfMWI2~9VX%f`0t5b+e=>6OquDzT zNEs__8PE)QnhVo~TBi5=mm<+8V!B>VRw~(I1d&=^Zk$-~;;jv|jYCm$smpWw2m$Xj z9k`DdqNgHC^y){%Y?SrXWlmGubwo%VIoyCi1)piWeNI-Tz1V_#Y{x7Pp#y!9h`t^S zTJonPY(PS2GUdk{de9*8w0+8(WCFLWf(v|iP1%wJexLdz(ef@g@22jqMeWgp-v>MF zS5w~xRAz6%=52oHtc8!3uIU253Z2WQCfRI`(sQMbTNCdlYXfPFxQc0A42|^^b8tnY z{qk^6#a86iRbzJsw?_=ok5BWV+#Lo(XE=*RU)5vxT${W2)h9$Yp=dOl%rRjP_V=O9 zu6XSUxtbYf4z1Mj4_XENhc?K2JB|*BZa2M{n^W#LcC7K_F=6fNyR%qiBChoE6`Wbi zenFf{TxEPR^{qy2nAnsDRiqg~xLpcpMAZhJI(%%K%7Sm6o#DHk+7?>dmOm8mK_jmt znD*awGOP1*+!Tf?7tXBT{}F~aJ7b`NU2?#7l)nO5HZy~(h4RJD38Gu~RxZ6-B=2D# zI3~+SRDvnXBJ<0JUZDpTH(9Z?teH?`SZ@&XeTAxImtJ1VneRoga7Wk&WvuXE1B~G) z(<|rrF5^U>Y_5_?1-U@sHj+hA9K`KDdPT)yG z;`4a6{Bo*RW_7Vg(yl>+X4@St>f4Q8hHlmU7FV!NbOuBoMI(q^cbURv13UR03{tq? z$y>r&xDhQ6VTQ0m`=4@zjVHgbxl}{ogNoJp@J#LL--9ya++t>uZ6wD|tvTA&%Af>2 z3g$5j1dPXA$f1R!qf?^XjQ_Ijx-1Yjj)U22zm~qopjjcyTRmSsPX=4_V&V`XOE+K= zG@(rFnBCLx_>9n6?qUT+0TD@JK6|=lomE^h9n)|v!H}+MIpb>ePQQ6o z@t}GWho@0teE%760o<6e1KIslQM~e4`RWfPbHo@qM7}T|w8w|qzwsH$Y7mzgEu~YK z=Z6GWItt6hl0s~Wg2x&`ye!|6M7q~oyBz8>;Qj|(x*P$ z@|LMy|J+Hcb|%&t)vzAtlcm$e-PwlD1#v5e?oM&W1(S);I^in=!qe?L4*HA&!-IXR z0prPV=7Qe(-r01-#Spy}$GHHk$`_$@&~THvQ>JFUzVonnwFlcf>q}RfH>>&?Sf|&Q zE{u1)qrSA@?LEF(z>ktJClISfT}wW+U)OOv{m|Xn&uCy);adBBZ{D4LUDpjy*!&!Z z`J^y)844aT^PPTF=%n(X_{ z37pdp%?v+v`>Eq=qgbeIHQRz%URXq^M{3Y^iBNYJU`~q;S>l~n-1bQDg%k7`#JE6> zw!GPkLz)KG;$o_Vu@+N-2A10MbZ?&=9kG9igGYcE0V-n7IF4q zKxD50$rIJ#MpNW)0xw$o3YJoE)lI?*|vyvqZ$iP z`|juD`c+uA+rxf7a4LjwFLP8q9PbF3{|s6WCD?6`2Z}cOObd!O{!9>Ai)!NunMd$@ zl=uSe1}V`p%|;RNGX91!ajVAnafwFt@3i8LD&MO_*{C+=!Mn9V5s;vHpaOW{15WsT zWCVRMx{d3}P6B3vV>!_br~T`0CW*;TM#&C5zxY&neG!Y}935CD=Z7??-e}Ked0sT? zyYT@on=XS%b?+m2;|TLLIRd-p3pi!eb95epDu_<%sY2T$+>5Kl`xdo(qTx>N_jg(< z2bLUce4n*cYC##=Xo^6uB=5oo;=2YUeYigXJ2!w>lN#pL?@U2!_^&X936RZe<$uYl zqf?mgtgA+*mZ~$?_47ksmM&sMQvVR1=h>0-%q93F@VT@3UY|Y^kbS*9Z522Bd=-@4 z*xAB%?%I<#bCohi%6KDJBVzd6e9sd;BiJz|iiQsExCRo=M)uUDaP`svhUNOhPir>+ z)!R%uWTTRtW4cpSbzXLJ5Ca9LX$ZfmYvfh$!xw@uf89cV-78iF0dR6=_{mmL7TU;X zG;Q)4&)SYs31x)l^i@s!GoJegbVHVGr<{JCZl@O5wE{gw-5GtVPBz>;+&maUUmKdh z>RpEL(f6!+%M?RhX}haZStnP8Xou4&w&F$CealuO4-t139!3mC4fGh;U%SS^d9fd< z?jRJU_Od2q++d%a9=)F}-Vf7z2I5;bT)$7!(Fn0=8zIcKD13IgXEFwT}HqY-5Dl}um3Y5b)M3dFsFa#1t~+a#HiIaRuK zPPFI&F3zN=xA5*g+(wyjo#!=M!;MTtZ4Y`Byfjl>Y8`JxB5|m&U0+!uaF#lI3o~1UHwu3!o^u zUl(kKyiqD2HmG*Q94TeaiFSZK7IBToC8#)uUQoEjv$Ct-G5#bwJr5ar;8MCvwo8y< z)4q#^iLY`_y`Yv+Y2QjIjW8~O;!>Y=j!gYdT1MC?I=Zem+fDq1HmRhnQG+{-a<*Qh zAhUn=AV4F}a$U`VaK0qT#?O_RwRGM(t~tQt0Irqq_$RspC9NWab4+stMw!$3{=tfS zU~`)K?88D8&w#{iP@|?tILN`)at_aM#(`a{hDVA@ah3J>I(5N^@Kt&5x#Wf!WR7dZ z49kWkT)&ri!5N+T7u+U2Dsn;uIsK7B-Js$jo?8S7#K+s12HYx^lSL4}2Ha5w3Jz^6 z=~x;q$T+&%wo0#)LRv>xP3=K)59$yXZyE--74-WMPd=XjukfzZ>%s=fDfXnJ`JcJh z_fR{2xKoP2QNdk|eY!YNHo2_aq?$i7?!WOEqlJA&znP!g?8DeLQN<*IBVON7VoDg# z)zA{0zB5ntv1P;Dk?lDwj+|E@eMxt{eRm*an%;{s`K8@|?!2HblXVKs9n<2cls&CB zf6FaJ{Qm3}o|UkvR@hYQ>IEpf4i7*4z^NE_qiOsBKTbS30mldK4>Gu0^_Qo~^YCk; zCGOL5TAXV*5A~N1`U9M(lvN)uzI_l{b?Q%a!W*NsuflJdgtSgUTH7Q1p})OiUS)P+ zdGE@E6uRKC&lFGH%|`9&Sa`uth|ZC3vYzkgghCAYjSN#5T><8+pxS@`gz+(>@84J z-bwo^v(zzmg)F1P=|R1zHY4l<<~HeH+0rMZ7`%L#tw|)8JkI<0r5i!}sH-wX7lboC zQBwk*;ppcmGea^{DUVDQ>&ANwo{5#aKliXaGryg|*n@P4K0P8^?5LP{YZq8Na(wv- z7uMjEvbq`&1tyVU0Go#Anz)JN6)>;;ywPgtX1>}U(8~Ru*J{z_sP$=!ew(;&$PMCR zl{>U`TYvaLA)RBASN!^I=u z;vRl+i@I};5a0h(F~rSlB9&q~m7>)}ubm}MM*yn``+11j%W_dDD-v87$(dLFta>p7{_oI}?E>gM;5#y3RvDe2WcE(JDIX$ASCX^_b{6P(}mj-6JO>X;| z;&I;vkfTHp zvy4BajJe4WsHi-T9AjifMVJWQIQmwuM@{)lg}PTTHCC!5G>IVr=Yot>KGGI>RLPdQ zhiQo|kgB zxBsRGU^a=;>j%)8ppm@YB?fgulmSGq{9pNRAr1l#Mn;CVidI(U|C0zKLKVh3ein`A zrQPYPISanT!VwL)kNwxQ_e9Z<{&*q5W%OhrpM1ZWJF*T6)MDRsNnls>DVKfIt4GV{ zqe|o{_Wcn}0CwCxW^Z10e8oI1U2(inG%a0rO>c6a@v!#f6i1b}`S{Xy({Yo2>i*Ma ze7FB&I*-Js;r$1rDRO%`BKBoEF66QNO{7-rZV=}N!-og`k`n`4G7AzvfwAL_jE%q? zYrSk;{k31JM0v6*tGNq06 z5n0zd>ZwsnGc1xKP*aVI#8VNtzV48tB9a<^q#_uWRDz~PA3iteh6}NGG$2YD>d9qi zI&>1zBTR8-$cc_|08X|v!!DNib>rtA5RXVASkuF2gosit2XN$iYMh!GHU=Wix(Q>2 z(|*xg3U?cGTo*gUWDu2Mg<;@H7g#J9<@&qn6v*zOU=zb?&SknoTKEZCPfYX z8C)-gWtRRjl&sv)c+pO0DUQ$$wN$n!=aUiEeQB;UzxA;Zi&;j78r1g#n!1WcZ1YJ~ zj<0f{VG(oF;EbB=D>yXf1 zpdSP&!KQ73_ytd;>dl~%I_722d69_SJ;(bit^I z?i$$I*#NW{_2NFvB$hzsG9=O9I%_avW$FuWVEdOmXl zI`qX!bO=mgUcFKbN#K0nV2b@P;|s}DL~^|}s3ljk^OeT9Vb))p;p|9Dy^*_InBh0Z zGd0n{w{iq*EDWfT)*NIuGs)(9phDm|AFy@&jl8g*_4_HV#5fI2Ne@1+6+Ei;MG1T2 zIY|^|Fx(3gMD3PLHUAIQWx0h)aVnYvn%s24@o@fkciN=U*pYW1zfR{-O^^(!am5*W zX=)NV^9~Jx$^WX(h@4>SS7nHS>PN9|FOmfzHBvcBG^auesi-{OF>yNEA~POBfu8ls zKZqVr#^Nw4s+yeNn0F??T57B5a6X4CLEBE#Sd6k8LZ{q?{H7?`W8PpwNYxUpb`YHr zJuLJf%cdDkoQPy$0#`(Me%sfB_+12pUpY}scBN*tah*RA4tI5fetz=b=i;LR%FI>%O|23d$5I zAw8A8yILpoE1@JhQhRcs{mBmkM3{sA4Va9$pJgK*mZNlgBNM<|Cvl?btwVRyQPsuI znL>mp+0X0Bu#3ZodVgq?MhA%uczZ1%ojDIv$8B>=mZT%LOyb631F0qo0;Tw&L7*l< zrvP8$xBx}<42Zz=h_%zALk4q{76!1n)r6871b(8#s)u&}?9UAHs|73)?)_KzvOxVn zd^7>m`ereOFSGG#1@h>;UWvDC`E<+BRU0-83A8-tIJ4$HrS}Tk#!{szu*udxd=*?! zD48tKQoli$M2PSYC`--6eJ`JtYcpW=Ax78rD-~=0v^Do>7jv1Wb4W;5Lo<6J5Rne5 zmqn^ZisIYIwxiz=wQCK+j^m=FWs>9;OHtkXhP^GLkdK`U!A_q$x6UooveC+5Ed`%I zD@MxXLMnDXC>5(!ewa{9FfAQo(i#it;`YSe=l;hCRQ+8zvR3U8?jGoOVQDm2kI8-bPu>turbr*TPxAA_M=0Ml%-U z*I-1{up85mlrJOpa3lNKW`@B$lzw@{bo?2CCd2f$U|cBnPgqr7@5xdkV=N?7E^yLa zyYnpBd^zmC+sP8i@tx9FuiU{x0|8A^kXdw@z)5}yXfo5?hr+4E$;iad-mBbx!NPnpKzkl4b1 zd$k?e~;XbHEm5AFrMV^>l?>H3G&-)#-5}<#}KDf%2 zT~&-mv6L!OKiHNFo#In`M~*2sNkMncT*DRJ(B;*V0w`!FYB||3WX7C!l zb619zC^z_+#luCnR zw%Nj}jxDQd@1$p8|CA^d*M!cUYD{L#CJ7^`MagL{!;8iOlhUZe`ZTE{6Jd&ToP@*t zklqk=qQL&W^UgApH1nBs98KoM2EW}hpshjoQ49zZOr`*B^ zyWN$*uH&xu-x16_T+*at3c{{%Q-|61sWWYzZwZRG38J?f@>iLrRhM(_G3yzuQj&s8 z;xvVPKuO|YXYW37%ena)y!fzw{IKB-0j=kh($h(Z1`_3d!O@2CQ;`W%bW@S$CbP!g z6+up{Q=v*^+*-(^T`eID7h$sr0i7F^8UaJG#I{0;eEuZd*2VaJ=ak3h*t&ZSqIiiy z8{`Ru8d?`MU*{ZKHm(!-3H526y2Q?%+<-t$PCvB!;RF*W(~4GHCj z%hH=g35qX7iO$om9$}uN^lHdwEC-R%q(HPx9NM@J?XK_B&$fY5`cMrei=07>;U>>Z z*1)Z&IY78JP#!1as_0-oO}j&i!t2|Evfi@2@c1T0z8ggW%T%MSn9%jes{Zb+MWJoD z8-4D_sV zRVkh2xIcF#*@avHvm?rdZnFAh5@-LE8?7IgnEzE=S)roYBI=4l!-C$tz_!vWOm_wy z&Le&TG=6JRGW6YNbBqV3`X`<12g6&iI?tab#7{sTy$CSrD|ze>;G>I_p=@qQoNh?v zi&=IoZPZIEJZukqtBaGZU(*iPIX=4YC>#Tp1Rep7_xTyF0WZc@^H5eDs{K|xTI-93 z0+$jK4=B#Riq3|{J0FJ6jwo;8&g^U3!ku953HbDe-yb~8;zFDn`#}S z8hurv#dua~3yr3^`oh-_H_Crs8-5$G(03!lF(9?UcGR^#;iGZt5c=U16z!gbaQT>_ zd7aysTVOe0*SQzeqoC+Sh{?!-%NFx9=t&%X9x~)bV3nmQ!-sTND4fmit?hL`lq<-s zH_gRQOfSnOj;p%kGM76pCZs_G@S*^WK(^C~!3$ z&vn^4)3h00=3WQcjunCOngHh&FY0nb%`?2(w3E$JM+nWMd)IZfa;h;fv3aPkgjq@W zZ4+dGF(TW+wd`08Zx9^2jA7_CH^YU}b$Q~LgpI&sFdQIHkYhU(Vm!Ix83aTeEEkW5 zc%~LLt(_g8RdW7dNjyg)Y(*a=U(CReG z?-uG?p3iXlBGygetLG)GXIuixNx&YqCFM1%dy^#?FlvU+H3Pic4xwlj6>vBUCCCl4 zdaZ{E@?R9wXZ%w;kk{rZD}51vWCO3_0blNgud42%8UI)b02IY`}FBwaR|)mLjkz(KtN?UZ~e``$03jbJWqWq z3t9_nU3*(oeZVuLt})Vp(w%^!YEt;cbw)9Nr9IhU-d1+siaKIO_4yn*A6O$6S6(pEfrc7i2(WOo z@3CY#jK!lsCSy!tQv%zN=^QtLur8p`Q3TDhbU&XZ3=u|3Sln({}BZvhODK0NlSrp}G`;u{;J2RGB`q!DXnyY~(RnwKLR!xr_?v)xFjGbV;wKzhSag|b) z=5B)P{Gbd*i=&S?7w~?W7hur+KK5E42QL?_pPku$;X14z7(6$32ljP&SkjMTpo;D* zT^OBb@+Yq0djM2Q z${18%$&W!&)bMGu>^sCxBPxGy#~CaTXeu50K-0i#@6UuoM8MVG_0ET?Q($R{+kfe4 z&%wzcJ-stVuez;4=2hPOsZ6j<>~=+B6t;t_-=Io!U6(t(GF4E_P6MTCv;+;T{FyS~ z>?XJCJDUyHyqlnbYb&GUXzf1O-JZOcj%M4KD7|+ z6N_+PotHif%84O2Q`5naq`EHVx2RHl<+cerokVbG)UR_ zs}x;R=kTkjVC(eDLa-<5p|C8OYT#^0w9q|A&o$uE`f*ewXOhIf)2bDOM$2+7l}f6& z6aI{$N2g+AhHL5f{OYK8BAW3relQ{?>{~JTh}`sKg|1gw1d3LUC9Spo^yhvWxV8%S z@#cEh`hzeSWPh$Uid&H?2T9#&F!IE$YU%=U9DrH0z? zD^xF;L7WIG2zy=C!9FNHgl4Lgqzq)M2!7W>{1w1Y8hwqhJN-5G(2wLkdbYa$WR9lk zm+xtl^e8myVd_QWaF6c(Bry&6cj~YUG2Mg!TEH&bGIf%qO$~*+u~?&zQVh&ZG8+ZP zrd=k6=v7*3wJFiv-Bn$W*K&_XHtHrb5}A(8yELh<1#@R((UXXA=# zy3rI@9quIH_XAQNm#3)*Wq(>qX9&brSewzaa#a(t0pSiJ zOIRc72oTIQ#0QKpJV_XPw3vui^@9zsrE-HF zCCYCn`I4YV77L zlVl=#z-ah4VRrb#lpzH)UbH{po2kUDU?lngWD9ddctbvULr zO!Pg>nfNvs=+Wf*?pMY|NMDeXfpYDdOW1$3(p4|?KfW{kQoAR*yd=MGHcL_FvC@O> z90w1Izm~13~IfexGR#Jb^k2o=>DgB zVb#*X=S8y>499^QxwC_IYGK?(zslW~dD0kNTEd1)Cjo57Y!I6vER8wN=7R~wlhrp4TA%2C%BpH1A*N6>&9lX$(}Y(v#+2?2b}RXS@A)1S_Rd%@#*hk!zxmCMP%@y4b)!JXUrcj zHG6!W9n2LQVd2u*C)-VRHOx7LUR(L6$O9OuJ*s^>2$oh?nH+c6WX=8<5hu2@MfnXW zksG%2A*ub449KbG91Uv@vCWVc7^re`APc!Zs!AD0R9Q2Z=!2yY-ny} zOk-hC5kqhFoenYJ<}ox*l`j`>Z!W^OxYW_#kqQA8Fou})EVmmJ{w}a0*yw4W) z4d!Kh8BQ42yg%{L3qNot^~V)y1Al#^TsdD{d7u^}n6CR3%K-ie0#-b$-jMn}Uj&w{ zv^OF#@cWMU6J`u^^H8>HDrkYYF<}agy!4p?+)G6H&|!}@NxDr6*UH4Vrm14I@AYzx z!b$h;r#?Tm?3CYvzpfNk-Z@e+#jVbNGEL1#q7T=-&%hz}nWtBT51WpmzUp z=;xr=7WKC42?_!<)bi}vviw2$JR5}z#HSk`SyX;2#_on;Ne-@$4)y|v@j2nwIsF7g zy7{>r`iHhtQVZ4-rbPmFKe0}nSf^b%iL7WR`C~?s>3VYAlIiu$_;QrC5Pwbi?fUeb z{6aArcIVVW-7!(y9==Ue*q%h5$E$&62EA_m1VcG4W=qL>c`>EKwME)K)Z!tk`q&ct zbyI1d<|UfsmgE*ggWR>#^s(sy`nAF)u;JoOfa*{KD*e|9!@pY^fOi_m)=<~L!Vq9) zqiP;jODtF~YgxVyHpLzi+rs;E6=o{=gUv<_8bKtQ^r*cFi6&_gL|+JYdYty0I@T_u zV|N zs30ZcLatd5CkGTZq<3$xF-VZYJy_sSisebL9ZmKjt*LZd(E?G*nQ+)Vf3#S>pyu!_ zuST+nqV{s-N+qV8P!)vGaco-yZBrF(olAXl(9|Vsf6=6n!tV2MZ8&mVP(_cRx6X%S z1G`&8MEIn{+C%Yaq=}K)?~36PiLQ#uyME&7xOd%o+Z#K6Vm6xY0~ZGyo4R+X>D)F- z6@e}1pg3vhN4OyfwlqS8Im2J@NeYn@VoPWWw^j6V84UxdrW_rJY(MYSj^*cNSr+!} z59V0ge(43$z69Zs*0w>_?_jvLNB87?FWk1;B)@5~uA{9v+zJ{&e5!D4biGh!o3Qe$ zdatVLDrm&@mK@K$5XIUA8U{TdrC#ZF;#-2f_8!6Dmqan>GR!dw(veTzEdG)=jG910 z$y9jcN?;W1{`E=z`|=^RQvqgmXrLG+w(`b~2;!6m?WMy%rcSK|Bq`#m_M&ypUiP6U zGNZ=^4TQruMCyD#cF)W(w^G?;!1XN%2&_~o7UmOED$9=G80@^y9jiy>0T7J|Z@y!j zM*ShGR1&I)Ht4$ts(Bg%|MA-ObgiRf?Ca{*PR>VH0j|vNV>_nzg8dsGqf&)9@FMUWcf44(PP7H)%$jtR7Wo7s zUTUZUzZ6a4$fcGLrIcD)XA|I45tkBO?aoqZx3GpJ7n_imE+qBka6mV{9+px0M7)bU zn1o4sk}nIlS(2`ist)wdyN#vcJ4j5UA!q6~^Zh=_ce$l>Hjx|5)@tz`#}pLs9@H4~Bsj9L z)QXE>9cej9^yR_j#_tp(@+Fj8e;zQ`t>G+|aAuL_^Aoj7{7#SnBi=~Yr`ZJt0Y7`F zSze+mLnTRFX`dJ(P;!M7FtwB=^NipARBHHeZ~)ypM5K_OoFQ%m#?`BsL|FRqF-j?K zMguJ+rsO*J6JwIGVE&IJSaHi6WENmcf|xaB`MJ4n-c>Z|1<2B!>Meec_u1Q-}hxKERXm8IWudn&D(5kf{!9ucwwt7 zcu?Gfpl0f71NE*aw+C{HX1H}MijSSPsmZ&apK9WC@NJr#^-qhGnUCgkOVv2x7iBiB zd2t!fJ>S`qYQufM1@}MC5_%84SQg2=4M;eSqg=7JtNeZ;htf+?7r9RytbCC7C*2!Fp$A%Z?ei>u# zTjQ5v#AmxFZ>OGTuvDPuWxmc2{SS{#?c?pUQKxIXs%z)Zc8FEftiOy1q1L=OPFZnN ztOnOs;!%PqO|}U83;DE5Y=nHg$nq;@)~23@{X0h2zvNGj$y;Hi*20ruhfIr^tR06( z+952h+C6>kEv<=@%3appSNg<|GmMcD{SXcv&n?B&m|9tJ9EbQL)tdQ}l>(L-GdCS< zd9G3QCQm92xWCU*7P2NKv$i(VX`h)3t5H%!!|uxM`1Z;zI(e*@H@En75^)M-rq6fC|gX5ezgNRs{+JCW-YSpIUa(aB_(8T zjwMfak0_6u!Y?22i;O;uIYQ*GsN3MAArGaFeLLVaUjcf)pQTOnt|~hMkNybLylEk) zwE&sD6`)|XcE?(-;JUz(V}50z@M-l*SL#j|ZXLc>Jj0NO-`sc)Y+hiFxFg#Jy1-R* zo?(2KVrsyu<^?6~8##PS#5U4TET|vUL)7&3s5`JhG}a`08~P1DRVyftA3ksoJZf*x z>M%W#9u+vHLN_?M!XX?0=yytJtw8HItZp@D4sn<*kUwZnoaPUayB@56<~P(KK5)GC zZgwnPH!k|+&|Z&0=ow&^JQ&r;SL@69Lvs!LYLV@si|vVfvZ@k`Rd?ll>DXJNq9xTp zl*bRPyXq!&54dhVyeV#%uG+499ZHDn%R{05;N)3T2Amqb13H^q=lD*waU5r~i;DNUIDhr~+5at6EW zd5-v5*(T;%%cv5Wqm3~0q=gX zrrjDDSA}nSTtC+^{=;Ut+j&`Z45J|9wgQcX$iTlh}r`a`g@; zO2^OnNd@jtu(Mm9&Q@9P856P7nG2EvV0rgOiaM0MgS!|6SvlUR&Qa<)=Ma+zB(esK{g^-!qgx-2kJO`LId6Eg7~#!Fkon zX;dG8?Ro^F{9KDDrA}1+IiNkIJ}I^^42)FwlnIbko)D104?5WKoO0ZKf2IK9(hG=h zf1)G&Yk)cT81ps~@euXQxro$efaIZZE=<3|&(xoINN6dFclb*~dy@z{?1?}Eey zo0#LkB(XzSr(&k|piLxF$UMD7$k510wtk#jQ_R3*O*to%r(x0(--NX97T9nTtC$vs z7GOBFa80o&z<*fc(w>G&TxDWlVvGq*E^hV@!3*9x8zQ=_5U*!MljNG5p5t!`(@g|R z(4d&5)32H`6NO}PRc)=S}?%pSvAXsmbjU@)!^TpU1PKX!BPFQks)ahQXpCS%M=1+ zhJ$kfJoILDKeEMbdBGr>pz1Z|R3d6+vBlk3Rx3;hpDw?OB zp)sOsd?#PRfI1N^ES_FGOlZY0t6y6W5D2{~(nj)zn<|-*rhb|IFU+Bi4=K_Uze)x) zTb%sr!CvNxH=re(M$91@HhcK))%4uh-ez>N=X*(YRQczr8RP;82n^3_o-MKJEqZya4&g-V{E7 z{500KR$mPD|3gfXVjSH#z-K1_k5~Wyufhrj1f*+i?P%y?W&8K-QRasDQd8Vhy-p6|hV68hiLxDFo>0Pdh_Gmikr(075N5`t5&v*Kg%`&2|))01`+H zsI?uyP6+Z0;bRu*>6zuQdC_H}#|Ch*rW`lhT{;F=>hPe_1fL>|=9gOrhz1#`^8C*cu&hQ^3 ze%&ek#)OZe2r%PaHXtDU-#|6R{|qW+&G?#q@XtMi>H>0T8PGL@0G3Sj8yt|qpWy%s z_$`s)-)qhPS;ZM1UluyBmQO$f9!LwO(k7srX&IwOI88W{%*YS>3_!k zS5pD-gaMXjW$W^v3V7|xk2I!|w1A=E9bh0}_)T1foPU7*pRTMZBl!O?-@5@rz6^lr zHUmWey}i0B{*13|XlrL`W%-}tzBa$>8bDuf5 zgK52vlDEM>K8FD8)eLag?lmXeUnQpYzhJ)(JpU=^t6l^Ah=l6_LgoSLP52iQ;Fa;W ze*k0rWBb2KhlQ_qECrYVpa5O<_i4eR>AwTgix^tk8vaj!`dd?dHK~Eml_>ZC`FH^% z!0#OtuJ^w~GW@H>6%79{*SxmS+a&7058r-+{{Z?rdHsVay{hzW2GZXLtH7~;Kowv)uh|Pk^kkf1DRyd+h&Y9DED*+E#BfWf1*l zPp2#Y9qiw2^`92{iujft{P%{s-Tw!~Kjho^yR2`ye*rV#o1%RF56J&Jga5y0msdM` z%R~A~Bm7sHy8eeR`A<^ex6;2(xNnIs0Sk^drR?s{!2d{U`WF7xir-Qb{%&Y-4}XUL z*Es%`OY`rLZ+YE*A8TZv{{iwZhQqgjueyCpi1WK{jevpwtK~BMCpp|(;8)$gWn%f= z<~$+)4E*2Nb>1Ssiv0F0&+j_Wg8nn|-*{c#0=}+Z-Ue&^-cF7Z?J$-Shmt=1G9fsXr}0|7}ozoM~RYmbZI(fR(|UBFY2+ ze6w--R+QJhzPFoVzx#q+%)oDU{@z~q`i*a0T)^b}rqr?k|FwZ8D**;rV!tl3>42UA N9ukfqU?l+b{{a?~&N=`9 literal 0 HcmV?d00001 diff --git a/External JARs/jlayer-1.0.1.jar b/External JARs/jlayer-1.0.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..b4870bc7efe322ecd75f33400ebe506b122e26cd GIT binary patch literal 143624 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%0DxX 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�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 x3PS!7PjdHl?oVbP(%)?K<1znI@Yk2Sa!C:\Workspaces\java-playlist-editor\Test DataH:\Documents\Other\Eclipse Workspace\PlaylistEditor\Test Data diff --git a/src/com/pe/Playlist.java b/src/com/pe/Playlist.java new file mode 100644 index 0000000..6878dda --- /dev/null +++ b/src/com/pe/Playlist.java @@ -0,0 +1,393 @@ +package com.pe; + +import java.util.ArrayList; +import java.util.Collections; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.StringWriter; +import java.nio.file.Files; +import java.io.PrintWriter; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import org.xml.sax.SAXException; + +/** + * Represents a playlist. + * + * @author olly.rowe + */ +public class Playlist +{ + // The playlist attributes + private String name; + private String author; + private ArrayList songs; + + // The file to where the playlist is stored + private File file; + + // Parser constants + public static final String WPL = "wpl"; + public static final String M3U = "m3u"; + private static final String WPL_FILE_PREFIX = ""; + + /** + * Class Constructor for new playlist. + */ + public Playlist() + { + this.name = new String(); + this.author = new String(); + this.songs = new ArrayList(); + } + + /** + * Alternative Class Constructor for existing files. + * + * @param File - The file containing the playlist data. + */ + public Playlist(File file) throws FileNotFoundException + { + // Set the file + this.file = file; + + // Initialise the songs array + this.songs = new ArrayList(); + + // Check that the correct file type as been passed + if (file.getName().endsWith(".wpl")) + { + // Try to read the data from the file + try + { + DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); + Document doc = docBuilder.parse(file); + Node titleNode = doc.getElementsByTagName("title").item(0); + + this.name = titleNode.getTextContent(); + + Node authorNode = doc.getElementsByTagName("author").item(0); + + this.author = authorNode.getTextContent(); + + NodeList mediaNodes = doc.getElementsByTagName("media"); + + for (int i = 0; i < mediaNodes.getLength(); i++) + { + Song song = new Song(mediaNodes.item(i).getAttributes().getNamedItem("src").getTextContent()); + + this.songs.add(song); + } + } + catch (FileNotFoundException e) + { + throw new FileNotFoundException(); + } + catch (ParserConfigurationException | SAXException | IOException e) + { + e.printStackTrace(); + } + } + else + { + System.err.println("Playlist initialisation error. Unsupportted file format detected."); + } + } + + /** + * Calls the corresponding parser and writes the output to the file + */ + public void save(String fileFormat) + { + // Initialise output string + String output = ""; + + // Choose the correct parser based on the passed file format value + switch(fileFormat) + { + case WPL: + { + output = this.parseToWPL(); + break; + } + case M3U: + { + break; + } + default: + { + System.err.println("Failed attempt to save playist. Unsupported file format: " + fileFormat); + return; + } + } + + // Write the output to the file + try + { + PrintWriter pw = new PrintWriter(this.getFile().getAbsolutePath()); + pw.println(output); + pw.close(); + } + catch (FileNotFoundException e) + { + e.printStackTrace(); + } + } + + /** + * Parser for WPL file format. + */ + public String parseToWPL() + { + // Initialise the output string + String output = WPL_FILE_PREFIX; + + // Attempt to parse playlist + try + { + // Adapted from: https://examples.javacodegeeks.com/core-java/xml/parsers/documentbuilderfactory/create-xml-file-in-java-using-dom-parser-example/ + DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder documentBuilder = documentFactory.newDocumentBuilder(); + Document document = documentBuilder.newDocument(); + + Element smil = document.createElement("smil"); + document.appendChild(smil); + + Element head = document.createElement("head"); + + smil.appendChild(head); + + Element title = document.createElement("title"); + + title.appendChild(document.createTextNode(this.getName())); + + head.appendChild(title); + + Element author = document.createElement("author"); + + author.appendChild(document.createTextNode(this.getAuthor())); + + head.appendChild(author); + + Element body = document.createElement("body"); + + smil.appendChild(body); + + Element seq = document.createElement("seq"); + + body.appendChild(seq); + + for (Song song : this.songs) + { + // Create a new media tag for the song + Element media = document.createElement("media"); + + // Set the src attribute to the absolute path of its corresponding file location + media.setAttribute("src", song.getFile().getAbsolutePath()); + // Set the albumTitle attribute + media.setAttribute("albumTitle", song.getAlbum()); + // Set the albumArtist attribute + media.setAttribute("albumArtist", song.getArtist()); + // Set the trackTitle attribute + media.setAttribute("trackTitle", song.getTitle()); + // Set the trackArtist attribute + media.setAttribute("trackArtist", song.getArtist()); + // Set the duration attribute + media.setAttribute("duration", Long.toString(song.getLength())); + + // Add the media tag to the seq tag + seq.appendChild(media); + } + + // Create new transformation objects + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); + DOMSource domSource = new DOMSource(document); + // Create a new StringWriter object to output the result to + StringWriter outWriter = new StringWriter(); + // The stream result, outputting to the String Writer + StreamResult streamResult = new StreamResult(outWriter); + // Transform the DOM Object to an XML File + transformer.transform(domSource, streamResult); + StringBuffer sb = outWriter.getBuffer(); + // Output result to the output string + output += sb.toString(); + } + catch (ParserConfigurationException | TransformerException e) + { + e.printStackTrace(); + } + return output; + } + + /** + * Identifies whether this playlist is currently saved. + * + * Also returns true in the special case where the playlist details are completely blank. + * + * @return - Whether the playlist is saved. + */ + public boolean isSaved() + { + // Check whether the detials are blank + if (this.file == null && this.author.equals("") && this.name.equals("") && this.songs.size() == 0) + { + // If all details are blank then there is no need to save, therefore return true in this case + return true; + } + + // Check if this playlist has a file associated with it yet + if (this.file == null) + { + // If there is not an associated file then it has not yet been saved + return false; + } + // Parse the current state of this playlist + String parserOutput = this.parseToWPL(); + + // Read the corresponding file + String fileOutput = new String(); + try + { + fileOutput = Files.readAllLines(this.file.toPath()).get(0); + } + catch (IOException e) + { + e.printStackTrace(); + } + + // Compare the file's contents with the parser output and then return whether they match or not + if (parserOutput.equals(fileOutput)) + { + return true; + } + return false; + } + + public String getName() + { + return this.name; + } + + public void setName(String name) + { + this.name = name; + } + + public String getAuthor() + { + return this.author; + } + + public void setAuthor(String author) + { + this.author = author; + } + + public ArrayList getSongs() + { + return this.songs; + } + + public Song getSong(int index) + { + // Check that the index is valid + if (index <= (this.songs.size() - 1) && index >= 0) + { + return this.songs.get(index); + } + return null; + } + + public int getIndexOf(Song song) + { + return this.songs.indexOf(song); + } + + public Song getLastSong() + { + // Check that the songs array isn't empty + if (this.songs.size() != 0) + { + return this.songs.get(this.songs.size() - 1); + } + return null; + } + + public void addSong(Song song) + { + this.songs.add(song); + } + + public void removeSong(int songIndex) + { + this.songs.remove(songIndex); + } + + /** + * Swaps the order of two songs on the playlist. + * + * @param index1 - The index of the first song to be swapped. + * @param index2 - The index of the seconds song to be swapped. + */ + public void swapSongs(int index1, int index2) + { + Collections.swap(this.songs, index1, index2); + } + + public File getFile() + { + return this.file; + } + + public void setFile(File file) + { + this.file = file; + } + + /** + * Returns the size of the songs array. + */ + public int getSize() + { + return this.songs.size(); + } + + /** + * Calculates the total play time of all of the songs on this playlist. + * + * @return - A String value representing the total play time in hours, minutes and seconds. + */ + public String getPlayTime() + { + long playTime = 0; + + for (Song song : this.songs) + { + playTime += song.getLength(); + } + + int hours = (int) playTime / 3600; + int remainder = (int) playTime - hours * 3600; + int mins = remainder / 60; + remainder = remainder - mins * 60; + int secs = remainder; + + return (((hours == 0) ? "" : hours + "h ") + ((hours == 0 && mins == 0) ? "" : mins + "m ") + secs + "s"); + } +} diff --git a/src/com/pe/PlaylistWindow.java b/src/com/pe/PlaylistWindow.java new file mode 100644 index 0000000..aeb6b77 --- /dev/null +++ b/src/com/pe/PlaylistWindow.java @@ -0,0 +1,895 @@ +package com.pe; + +import com.pe.Song; +import com.pe.Playlist; +import com.pe.UserDefaults; +import com.pe.utils.FileTree; +import com.pe.utils.FileNode; +import com.pe.audio.MusicPlayer; +import java.awt.EventQueue; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.border.EmptyBorder; +import javax.swing.border.TitledBorder; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.filechooser.FileNameExtensionFilter; +import javax.swing.table.DefaultTableModel; +import javax.swing.tree.TreePath; +import javax.swing.JTable; +import javax.swing.UIManager; +import javax.swing.UnsupportedLookAndFeelException; +import java.awt.Color; +import java.awt.Dimension; +import javax.swing.JButton; +import javax.swing.JFileChooser; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Arrays; +import java.awt.event.ActionEvent; +import javax.swing.JTextField; +import javax.swing.JTextPane; +import javax.swing.JLabel; +import javax.swing.JScrollPane; +import javax.swing.ScrollPaneConstants; +import java.awt.Toolkit; +import javax.swing.JMenuBar; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.JSeparator; +import java.awt.FlowLayout; +import java.awt.Font; +import java.awt.Image; +import javax.swing.ImageIcon; + +/** + * The main GUI for the playlist editor. + * + * @author olly.rowe + */ +@SuppressWarnings("serial") +public class PlaylistWindow extends JFrame implements ActionListener { + // The current version number + private final String VERSION = "1.0.0"; + + // The user defaults object + private UserDefaults userDefaults; + + // The playlist being edited + private Playlist playlist; + + // The song table and table model + private JTable songTable; + private DefaultTableModel songTableModel; + + // The playlist details text fields + private JTextField playlistNameTextField; + private JTextField playlistAuthorTextField; + private JTextField playlistSizeTextField; + private JTextField playlistPlayTimeTextField; + + // The menu bar components + private JMenuItem mntmNew; + private JMenuItem mntmOpen; + private JMenuItem mntmSave; + private JMenuItem mntmExit; + private JMenuItem mntmSplitTrack; + private JMenuItem mntmReleaseNotes; + + // The button components + private JButton changeDirectoryButton; + private JButton addSongButton; + private JButton removeSongButton; + private JButton saveButton; + private JButton exitButton; + private JButton upArrowButton; + private JButton downArrowButton; + + // The file explorer tree + private FileTree fileTree; + + // The music player component + private MusicPlayer musicPlayer; + private JPanel albumArtPanel; + + /** + * Launch the application. + */ + public static void main(String[] args) { + EventQueue.invokeLater(new Runnable() { + public void run() { + try { + PlaylistWindow frame = new PlaylistWindow(); + frame.setVisible(true); + } catch (Exception e) { + e.printStackTrace(); + } + } + }); + } + + /** + * Class Constructor. Generates the GUI. + */ + public PlaylistWindow() { + // Create the playlist object + this.playlist = new Playlist(); + + // Initialise the user defaults + this.userDefaults = new UserDefaults(); + + // Set the window title + setTitle("Playlist Editor " + VERSION); + // Set the window icon + setIconImage(Toolkit.getDefaultToolkit().getImage(getClass().getResource("/images/icon.png"))); + // Prevent the window from being resized + setResizable(false); + + // Set the GUI appearance to match that of the users operating system + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + UIManager.put("Slider.focus", UIManager.get("Slider.background")); + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException + | UnsupportedLookAndFeelException e) { + System.err.println("An error occured setting the UIManager look and feel."); + } + + // Set the window dimensions + setBounds(100, 100, 800, 540); + + // Set default closing operation to nothing + setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); + // Add custom closing operation + addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent evt) { + exit(); + } + }); + + // Create the menu bar + JMenuBar menuBar = new JMenuBar(); + setJMenuBar(menuBar); + // Add menu components to the menu bar + JMenu mnFile = new JMenu("File"); + menuBar.add(mnFile); + mntmNew = new JMenuItem("Create New Playlist..."); + mntmNew.addActionListener(this); + mnFile.add(mntmNew); + mntmOpen = new JMenuItem("Open Existing Playlist..."); + mntmOpen.addActionListener(this); + mnFile.add(mntmOpen); + mntmSave = new JMenuItem("Save"); + mntmSave.addActionListener(this); + mnFile.add(mntmSave); + JSeparator separator = new JSeparator(); + mnFile.add(separator); + mntmExit = new JMenuItem("Exit"); + mntmExit.addActionListener(this); + mnFile.add(mntmExit); + JMenu mnTools = new JMenu("Tools"); + menuBar.add(mnTools); + mntmSplitTrack = new JMenuItem("Split Track"); + mntmSplitTrack.addActionListener(this); + mnTools.add(mntmSplitTrack); + JMenu mnAbout = new JMenu("About"); + menuBar.add(mnAbout); + mntmReleaseNotes = new JMenuItem("Release Notes"); + mntmReleaseNotes.addActionListener(this); + mnAbout.add(mntmReleaseNotes); + + // Create the main content pane + JPanel contentPane = new JPanel(); + contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); + setContentPane(contentPane); + contentPane.setLayout(null); + + // Create the track list section + JPanel trackListPanel = new JPanel(); + trackListPanel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Track List", + TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0))); + trackListPanel.setBounds(338, 87, 446, 262); + contentPane.add(trackListPanel); + trackListPanel.setLayout(null); + + // Create the song table and table model + songTable = new JTable(); + songTableModel = new DefaultTableModel(new Object[][] {}, new String[] { "Track No.", "Artist", "Title" }) { + // Disable cell-editing + @Override + public boolean isCellEditable(int row, int column) { + return false; + } + }; + // Set the table model + songTable.setModel(songTableModel); + // Set table attributes + songTable.getColumnModel().getColumn(0).setPreferredWidth(56); + songTable.getColumnModel().getColumn(0).setMaxWidth(56); + songTable.setColumnSelectionAllowed(false); + songTable.setFillsViewportHeight(true); + songTable.setRowSelectionAllowed(true); + + // Create a new scroll pane and assign the songs table to it + JScrollPane songTableScrollPane = new JScrollPane(songTable); + songTableScrollPane.setBounds(10, 21, 426, 196); + songTableScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + songTableScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); + trackListPanel.add(songTableScrollPane); + + // Create remove song button + removeSongButton = new JButton("Remove"); + removeSongButton.setBounds(347, 228, 89, 23); + removeSongButton.addActionListener(this); + trackListPanel.add(removeSongButton); + + Image upArrowIcon = (new ImageIcon(getClass().getResource("/images/arrow up.png"))).getImage() + .getScaledInstance(10, 10, Image.SCALE_SMOOTH); + upArrowButton = new JButton(new ImageIcon(upArrowIcon)); + upArrowButton.addActionListener(this); + upArrowButton.setBounds(10, 228, 23, 23); + trackListPanel.add(upArrowButton); + + Image downArrowIcon = (new ImageIcon(getClass().getResource("/images/arrow down.png"))).getImage() + .getScaledInstance(10, 10, Image.SCALE_SMOOTH); + downArrowButton = new JButton(new ImageIcon(downArrowIcon)); + downArrowButton.addActionListener(this); + downArrowButton.setBounds(37, 228, 23, 23); + trackListPanel.add(downArrowButton); + + // Create browse for music panel + JPanel browseForMusicPanel = new JPanel(); + browseForMusicPanel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Browse for Music", + TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0))); + browseForMusicPanel.setBounds(10, 11, 318, 469); + contentPane.add(browseForMusicPanel); + browseForMusicPanel.setLayout(null); + + // Create add song to playlist button + addSongButton = new JButton("Add"); + addSongButton.setBounds(190, 435, 118, 23); + addSongButton.addActionListener(this); + browseForMusicPanel.add(addSongButton); + + // Change the default leaf icon to music note. As the tree will filter mp3 + // files, only mp3 files will display this icon + UIManager.put("Tree.leafIcon", new ImageIcon((new ImageIcon(getClass().getResource("/images/music note.png"))) + .getImage().getScaledInstance(14, 14, Image.SCALE_SMOOTH))); + + // Create the file explorer tree using the default directory if one exists, + // otherwise use the user's C: drive. Filter it to show only mp3 files + fileTree = new FileTree( + (this.userDefaults.getDefaultBrowserDir() == null) ? "C:\\" : this.userDefaults.getDefaultBrowserDir(), + Arrays.asList(".mp3")); + + // Add mouse listener to detect double clicks + fileTree.addMouseListener(new MouseAdapter() { + public void mousePressed(MouseEvent e) { + if (fileTree.getRowForLocation(e.getX(), e.getY()) != -1) { + FileNode selectedNode = (FileNode) fileTree.getPathForLocation(e.getX(), e.getY()) + .getLastPathComponent(); + + // If a double-click is detected, add the song to the current playlist + if (e.getClickCount() == 2) { + addSong(selectedNode); + } + } + } + }); + + // Create a scroll pane and add the file tree to it + JScrollPane fileTreeScrollPane = new JScrollPane(fileTree); + fileTree.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5)); + fileTreeScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); + fileTreeScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); + fileTreeScrollPane.setBounds(10, 22, 298, 402); + browseForMusicPanel.add(fileTreeScrollPane); + + // Create change directory button which changes contents of file tree + changeDirectoryButton = new JButton("..."); + changeDirectoryButton.setBounds(10, 435, 42, 23); + browseForMusicPanel.add(changeDirectoryButton); + changeDirectoryButton.addActionListener(this); + + // Create new playlist details panel + JPanel playlistDetailsPanel = new JPanel(); + playlistDetailsPanel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Details", + TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0))); + playlistDetailsPanel.setBounds(338, 11, 446, 65); + contentPane.add(playlistDetailsPanel); + playlistDetailsPanel.setLayout(null); + + // Create playlist name label and text field + JLabel lblName = new JLabel("Name"); + lblName.setBounds(10, 18, 46, 14); + playlistDetailsPanel.add(lblName); + playlistNameTextField = new JTextField(); + playlistNameTextField.setBounds(54, 14, 241, 20); + playlistDetailsPanel.add(playlistNameTextField); + playlistNameTextField.setColumns(10); + addChangeListener(playlistNameTextField); + + // Create playlist author label and text field + JLabel lblAuthor = new JLabel("Author"); + lblAuthor.setBounds(10, 42, 46, 14); + playlistDetailsPanel.add(lblAuthor); + playlistAuthorTextField = new JTextField(); + playlistAuthorTextField.setBounds(54, 38, 241, 20); + playlistDetailsPanel.add(playlistAuthorTextField); + playlistAuthorTextField.setColumns(10); + addChangeListener(playlistAuthorTextField); + + // Create playlist size label and text field + JLabel lblLength = new JLabel("Size"); + lblLength.setBounds(305, 16, 46, 14); + playlistDetailsPanel.add(lblLength); + playlistSizeTextField = new JTextField(); + playlistSizeTextField.setText("0"); + playlistSizeTextField.setEditable(false); + playlistSizeTextField.setBounds(364, 12, 72, 20); + playlistDetailsPanel.add(playlistSizeTextField); + playlistSizeTextField.setColumns(10); + + // Create playlist play time label and text field + JLabel lblPlayTime = new JLabel("Play Time"); + lblPlayTime.setBounds(305, 40, 46, 14); + playlistDetailsPanel.add(lblPlayTime); + playlistPlayTimeTextField = new JTextField(); + playlistPlayTimeTextField.setText("0s"); + playlistPlayTimeTextField.setEditable(false); + playlistPlayTimeTextField.setColumns(10); + playlistPlayTimeTextField.setBounds(364, 36, 72, 20); + playlistDetailsPanel.add(playlistPlayTimeTextField); + + // Create the save button + saveButton = new JButton("Save"); + saveButton.setBounds(596, 457, 89, 23); + saveButton.addActionListener(this); + contentPane.add(saveButton); + + // Create the exit button + exitButton = new JButton("Exit"); + exitButton.setBounds(695, 457, 89, 23); + exitButton.addActionListener(this); + contentPane.add(exitButton); + + JPanel panel = new JPanel(); + panel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "Music Playback", + TitledBorder.LEADING, TitledBorder.TOP, null, new Color(0, 0, 0))); + panel.setBounds(338, 360, 356, 86); + contentPane.add(panel); + panel.setLayout(null); + + albumArtPanel = new JPanel(); + albumArtPanel.setBorder(new TitledBorder(UIManager.getBorder("TitledBorder.border"), "", TitledBorder.LEADING, + TitledBorder.TOP, null, new Color(0, 0, 0))); + albumArtPanel.setBounds(704, 366, 78, 78); + contentPane.add(albumArtPanel); + albumArtPanel.setLayout(null); + + JLabel lblAlbumArt = new JLabel(); + lblAlbumArt.setBounds(4, 4, 70, 70); + albumArtPanel.add(lblAlbumArt); + + // Create the music player component + musicPlayer = new MusicPlayer(this.playlist, lblAlbumArt); + musicPlayer.setBounds(13, 16, 330, 64); + panel.add(musicPlayer); + } + + /** + * Button Action listener handler. + */ + @Override + public void actionPerformed(ActionEvent e) { + Object source = e.getSource(); + + if (source == changeDirectoryButton) { + browseDirectory(); + } else if (source == addSongButton) { + addSelectedSongs(); + } else if (source == removeSongButton) { + removeSelectedSongs(); + } else if ((source == saveButton) || (source == mntmSave)) { + save(); + } else if ((source == exitButton) || (source == mntmExit)) { + exit(); + } else if (source == mntmOpen) { + open(); + } else if ((source == upArrowButton) || (source == downArrowButton)) { + reorderSongs(source); + } else if (source == mntmNew) { + createNewPlaylist(null); + } else if (source == mntmSplitTrack) { + splitTrack(); + } else if (source == mntmReleaseNotes) { + displayReleaseNotes(); + } + } + + /** + * Allows the user to browse for a directory to populate the tree view. + */ + public void browseDirectory() { + // The file chooser + JFileChooser fileChooser = new JFileChooser(); + // Allow the user to only be able to select directories + fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + + // Show the dialog and if a directory is selected, update the file tree + if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { + // Update the directory within the file tree + fileTree.setDirectory(fileChooser.getSelectedFile().getAbsolutePath()); + // Update the user defaults with the new directory + this.userDefaults.setDefaultBrowserDir(fileChooser.getSelectedFile().getAbsolutePath()); + } + return; + } + + /** + * Allows the user to browse for a playlist file to be opened. + */ + public void open() { + // The file chooser. Setting the current directory from the user defaults + JFileChooser fileChooser = new JFileChooser(new File( + ((this.userDefaults.getDefaultOpenPlaylistDir() != null) ? this.userDefaults.getDefaultOpenPlaylistDir() + : ""))); + // Create new file filter for the playlist file formats + FileNameExtensionFilter filter = new FileNameExtensionFilter(null, "wpl"); + // Set the filter + fileChooser.setFileFilter(filter); + // Allow the user to only be able to select directories + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + + // Show the dialog and if a directory is selected, update the file tree + if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { + // Check that the file is of the correct format + if (fileChooser.getSelectedFile().getName().endsWith(".wpl")) { + this.createNewPlaylist(fileChooser.getSelectedFile()); + // Set the default for the location of the directory that this file is in + this.userDefaults.setDefaultOpenPlaylistDir(fileChooser.getSelectedFile().getParent()); + } + } + } + + /** + * Clears the GUI and creates a new playlist instance. + */ + public void createNewPlaylist(File file) { + // If the current playlist isn't yet saved then ask the user if they would like + // to save it + if (!this.playlist.isSaved()) { + // Ask the user if they want to save the current playlist + int saveDialog = JOptionPane.showConfirmDialog(this, "Would you like to save the current playlist?"); + + // If the user confirmed the dialog + if (saveDialog == JOptionPane.YES_OPTION) { + // Save the current playlist + boolean saveSuccessful = this.save(); + // If the save was unsuccessful then exit this method + if (!saveSuccessful) { + return; + } + } + // If the user cancelled the dialog, then do not create new playlist + else if (saveDialog == JOptionPane.CANCEL_OPTION || saveDialog == JOptionPane.CLOSED_OPTION) { + return; + } + } + + // If a file has been specified then pass it into the playlist constructor when + // creating the new playlist + if (file != null) { + try { + this.playlist = new Playlist(file); + } catch (FileNotFoundException e) { + this.raiseFileNotFoundWarning(file.getAbsolutePath()); + } + } else { + this.playlist = new Playlist(); + } + + // Refresh the GUI + this.refreshPlaylistDetails(); + + // Update the music player with the new playlist + this.musicPlayer.updatePlaylist(this.playlist); + } + + /** + * Updates all components that hold information about the playlist with current + * information. + */ + public void refreshPlaylistDetails() { + // Update the playlist details section + this.playlistNameTextField.setText(this.playlist.getName()); + this.playlistAuthorTextField.setText(this.playlist.getAuthor()); + this.playlistSizeTextField.setText(String.valueOf(this.playlist.getSize())); + this.playlistPlayTimeTextField.setText(this.playlist.getPlayTime()); + + // Remove any songs from the songs table + int numOfRows = this.songTable.getModel().getRowCount(); + // Iterate through songs currently in table + for (int i = 0; i < numOfRows; i++) { + // Remove the song from the table + ((DefaultTableModel) this.songTable.getModel()).removeRow(0); + } + + // Update the songs table + for (Song song : this.playlist.getSongs()) { + songTableModel.addRow( + new Object[] { (this.playlist.getSongs().indexOf(song) + 1), song.getArtist(), song.getTitle() }); + } + } + + public void addSong(FileNode nodeOfFile) { + File file = nodeOfFile.getFile(); + + if (file.getName().endsWith(".mp3")) { + try { + // Create song object + Song song = new Song(file.getAbsolutePath()); + // Add the song to the playlist + this.playlist.addSong(song); + + // If the playlist was empty before adding the song then set this song as the + // current one + if (this.playlist.getSize() == 1) { + this.musicPlayer.setCurrentSong(song); + // Refresh the GUI components + this.musicPlayer.updateGUI(); + } + + // Add the song to the table + songTableModel.addRow(new Object[] { this.playlist.getSize(), song.getArtist(), song.getTitle() }); + + // Refresh the playlist details + refreshPlaylistDetails(); + } catch (FileNotFoundException e) { + this.raiseFileNotFoundWarning(file.getAbsolutePath()); + } + } + } + + /** + * Adds the songs that are currently selected in the file tree to the tracks + * table. + */ + public void addSelectedSongs() { + // Check that something has been selected in the file tree + if (fileTree.getSelectionPath() != null) { + for (TreePath tp : fileTree.getSelectionPaths()) { + addSong((FileNode) tp.getLastPathComponent()); + } + } + } + + /** + * Removes the songs that are currently selected in the songs table from the + * playlist. + */ + public void removeSelectedSongs() { + // Get the number of selected rows + int numOfSelectedRows = this.songTable.getSelectedRowCount(); + + // Iterate through the selected rows + for (int i = 0; i < numOfSelectedRows; i++) { + int index = this.songTable.getSelectedRows()[0]; + // Remove the song from the playlist + this.playlist.removeSong(index); + // Remove the song from the table + ((DefaultTableModel) this.songTable.getModel()).removeRow(index); + } + // Refresh the playlist details + refreshPlaylistDetails(); + } + + /** + * Updates the track numbers in the songs table. + */ + public void updateTrackNumbers() { + // Update the track numbers in the songs table + for (int i = 0; i < this.songTable.getModel().getRowCount(); i++) { + this.songTable.getModel().setValueAt((i + 1), i, 0); + } + } + + /** + * Reorders the songs within the songs table upon clicking up or down arrow + * button. + * + * @param source - The source object that trigger the action event. + */ + public void reorderSongs(Object source) { + // Ensure that only one row has been selected + if (this.songTable.getSelectedRowCount() == 1) { + // Get the index of the selected row + int indexOfSelectedRow = this.songTable.getSelectedRow(); + + // Get the table model + DefaultTableModel tableModel = ((DefaultTableModel) this.songTable.getModel()); + + // If the up arrow button was clicked + if (source == this.upArrowButton) { + // Check that the selected row isn't already at the start + if (indexOfSelectedRow != 0) { + // Unselected the selected row + this.songTable.clearSelection(); + // Move the row up in the table + tableModel.moveRow(indexOfSelectedRow, indexOfSelectedRow, (indexOfSelectedRow - 1)); + // Re-select the moved row + this.songTable.setRowSelectionInterval((indexOfSelectedRow - 1), (indexOfSelectedRow - 1)); + // Swap the two rows that have changed position in the playlist + this.playlist.swapSongs(indexOfSelectedRow, (indexOfSelectedRow - 1)); + } + } + // Otherwise, if the down arrow button was clicked + else if (source == this.downArrowButton) { + // Check that the selected row isn't already at the end + if (indexOfSelectedRow != (this.songTable.getRowCount() - 1)) { + // Unselected the selected row + this.songTable.clearSelection(); + // Move the row down in the table + tableModel.moveRow(indexOfSelectedRow, indexOfSelectedRow, (indexOfSelectedRow + 1)); + // Re-select the moved row + this.songTable.setRowSelectionInterval((indexOfSelectedRow + 1), (indexOfSelectedRow + 1)); + // Swap the two rows that have changed position in the playlist + this.playlist.swapSongs(indexOfSelectedRow, (indexOfSelectedRow + 1)); + } + } + // + this.songTable.scrollRectToVisible(this.songTable.getCellRect(this.songTable.getSelectedRow(), 0, true)); + // Update the track numbers in the songs table + updateTrackNumbers(); + } + } + + /** + * Saves the playlist currently being edited. + * + * @return Boolean value indicating whether the save was successful or not. + */ + public boolean save() { + // Check if the playlist has an associated file, if not prompt the user to + // select one + if (playlist.getFile() == null) { + // Display the file system for the user to pick a location to save the playlist + JFileChooser fileChooser = new JFileChooser(); + // Set the file name within the file chooser + fileChooser.setSelectedFile(new File(playlist.getName() + ".wpl")); + // If the user has selected a file + if (fileChooser.showSaveDialog(this) == JFileChooser.APPROVE_OPTION) { + // Fetch the selected file + File chosenFile = fileChooser.getSelectedFile(); + // Check that the file is of the right type + if (chosenFile.getAbsolutePath().endsWith(Playlist.WPL)) { + // If the file already exists, then as the user to confirm overwritting the + // playlist + if (chosenFile.exists()) { + int confirmReplaceFileResult = JOptionPane.showConfirmDialog(this, + chosenFile.getName() + " already exists. Do you want to replace it?", "Confirm Save As", + JOptionPane.YES_NO_OPTION); + // If the user didn't says yes to the popup then exit the method + if (!(confirmReplaceFileResult == JOptionPane.YES_OPTION)) { + return false; + } + } + // Set the playlist's file + this.playlist.setFile(fileChooser.getSelectedFile().getAbsoluteFile()); + } + } else { + return false; + } + } + // Save the playlist + this.playlist.save(Playlist.WPL); + // Display popup + JOptionPane.showMessageDialog(this, "Your playlist has been saved."); + return true; + } + + /** + * Splits the current track within the music player and allows the user to + * export it to a new file. + */ + public void splitTrack() { + // If their isn't currently a song loaded into the music player then raise an + // error message to the user and exit method + if (this.musicPlayer.getCurrentSong() == null) { + JOptionPane.showMessageDialog(this, "Could not split as there is no current song. Play a song to split it.", + "Split Track Failed", JOptionPane.ERROR_MESSAGE); + return; + } + + // Ask the user whether they want to keep the first or second part of the + // current track + int splitChoice = JOptionPane.showOptionDialog(this, + "Would you like to export the first or second part of the split track?", "Split Track Tool", + JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE, null, + new Object[] { "First Part", "Second Part" }, null); + + // If the user closed the dialog then exit method + if (splitChoice == JOptionPane.CLOSED_OPTION) { + return; + } + + // Ask the user to select a file to write the new split track to + JFileChooser fileChooser = new JFileChooser(new File( + ((this.userDefaults.getDefaultOpenPlaylistDir() != null) ? this.userDefaults.getDefaultOpenPlaylistDir() + : ""))); + // Create new file filter for mp3 file format + FileNameExtensionFilter filter = new FileNameExtensionFilter(null, "mp3"); + // Set the filter + fileChooser.setFileFilter(filter); + // Allow the user to only be able to select files + fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); + + // Show the dialog and if a directory is selected, update the file tree + if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) { + // The file chosen by the user + File selectedFile = fileChooser.getSelectedFile(); + + // Check that the file is of the correct format + if (selectedFile.getName().endsWith(".mp3")) { + // If the file already exists, ask the user if they want to replace it + if (selectedFile.exists()) { + int replaceChoice = JOptionPane.showConfirmDialog(this, + "The file that you have selected already exists, would you like to replace it?", + "Confirm Replace", JOptionPane.YES_NO_CANCEL_OPTION); + // If the users didn't agree to replace the file then exit the method + if (replaceChoice != JOptionPane.YES_OPTION) { + return; + } + } + + // Split the track at the specified points and write the output to the specified + // file + this.musicPlayer.splitCurrentTrackAndWriteToFile(selectedFile, (splitChoice == 0) ? true : false); + } else { + JOptionPane.showMessageDialog(this, "Unable to perform split. Export file must of mp3 format.", + "Incorrect Export Format", JOptionPane.ERROR_MESSAGE); + } + } + } + + /** + * Raises an error dialog informing the user of a resource not being found. + * + * @param The name of the resource that could not be found. + */ + public void raiseFileNotFoundWarning(String fileName) { + // The error message to be displayed to the user + String message; + + if (fileName.endsWith(".wpl")) { + message = "The playlist or a track within the following playlist file could not be found:"; + } else { + message = "The following file could not be found:"; + } + // Display the error message dialog + JOptionPane.showMessageDialog(this, message + "\n" + fileName, "File Not Found", JOptionPane.ERROR_MESSAGE); + } + + /** + * Displays a popup containing the release notes + */ + private void displayReleaseNotes() { + // Fetch the text from the release notes file + String releaseNotes = new String(); + try { + InputStream input = getClass().getResourceAsStream("/resources/release notes.txt"); + + BufferedReader br = new BufferedReader(new InputStreamReader(input)); + + StringBuilder sb = new StringBuilder(); + + String line = br.readLine(); + + while (line != null) { + sb.append(line); + sb.append(System.lineSeparator()); + line = br.readLine(); + } + releaseNotes = sb.toString(); + + br.close(); + } catch (IOException e) { + e.printStackTrace(); + } + // The text pane object containing the release notes + JTextPane releaseNotesTextPane = new JTextPane(); + releaseNotesTextPane.setPreferredSize(new Dimension(350, 600)); + releaseNotesTextPane.setFont(new Font(Font.SANS_SERIF, 0, 12)); + releaseNotesTextPane.setText(releaseNotes); + releaseNotesTextPane.setEditable(false); + releaseNotesTextPane.setCaretPosition(0); + + JScrollPane releaseNotesScrollPane = new JScrollPane(releaseNotesTextPane); + releaseNotesScrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + releaseNotesScrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); + + // Display a popup containing the release notes text pane + JOptionPane.showMessageDialog(this, releaseNotesScrollPane, "Release Notes", JOptionPane.PLAIN_MESSAGE); + } + + /** + * Closes the program. + */ + public void exit() { + // If the current playlist isn't saved then prompt the user to save it. + if (!this.playlist.isSaved()) { + // Ask the user if they want to save the current playlist + int saveDialog = JOptionPane.showConfirmDialog(this, + "Would you like to save the current playlist before exiting?"); + + // If the user confirmed the dialog + if (saveDialog == JOptionPane.YES_OPTION) { + // Save the current playlist + boolean saveSuccessful = this.save(); + // If the save was unsuccessful then exit this method without exiting + if (!saveSuccessful) { + return; + } + } + // If the user cancelled the popup then cancelled the exiting sequence + else if (saveDialog == JOptionPane.CANCEL_OPTION || saveDialog == JOptionPane.CLOSED_OPTION) { + return; + } + } + // Save the user defaults file + this.userDefaults.saveDefaultsToFile(); + // Exit the program + System.exit(0); + } + + /** + * Adds a document listener to the document of a textfield so that a change to + * the contents of the textfield calls the textFieldChanged method. + * + * @param textField - The JTextField to add the listener to. + */ + public void addChangeListener(JTextField textField) { + // Create the document listener + DocumentListener dl = new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + textFieldChange(textField); + } + + @Override + public void removeUpdate(DocumentEvent e) { + textFieldChange(textField); + } + + @Override + public void changedUpdate(DocumentEvent e) { + textFieldChange(textField); + } + }; + // Add the document listener to the text field's document + textField.getDocument().addDocumentListener(dl); + } + + /** + * Called when the author or playlist title text fields are edited. + */ + private void textFieldChange(JTextField source) { + // Update the corresponding playlist value depending up the source of the method + // call + if (source == this.playlistNameTextField) { + this.playlist.setName(this.playlistNameTextField.getText()); + } else if (source == this.playlistAuthorTextField) { + this.playlist.setAuthor(this.playlistAuthorTextField.getText()); + + } + } +} diff --git a/src/com/pe/Song.java b/src/com/pe/Song.java new file mode 100644 index 0000000..8c6cb73 --- /dev/null +++ b/src/com/pe/Song.java @@ -0,0 +1,110 @@ +package com.pe; + +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import javax.imageio.ImageIO; +import com.mpatric.mp3agic.ID3v2; +import com.mpatric.mp3agic.InvalidDataException; +import com.mpatric.mp3agic.Mp3File; +import com.mpatric.mp3agic.UnsupportedTagException; + +/** + * Represents a song. + * + * @author olly.rowe + */ +public class Song +{ + // The file associated with this song + private File file; + // Song title + private String title; + // The artist + private String artist; + // The album + private String album; + // Length in milliseconds + private long length; + // The album art + private BufferedImage albumArt; + + /** + * Class Constructor. + * + * @param path - The string value of the absolute path to the .mp3 file + */ + public Song(String path) throws FileNotFoundException + { + // Set the file + this.file = new File(path); + // Attempt to extract metadata from the file + try + { + // Utilise MP3agic module to read the ID3v2 tag + Mp3File song = new Mp3File(this.getFile().getAbsolutePath()); + + if (song.hasId3v2Tag()) + { + // Fetch the ID3v2 tag + ID3v2 id3v2tag = song.getId3v2Tag(); + // Fetch and assign values from the ID3v2 tag + this.title = id3v2tag.getTitle(); + this.artist = id3v2tag.getArtist(); + this.album = id3v2tag.getAlbum(); + this.length = song.getLengthInSeconds(); + // Fetch the album image data + byte[] imageData = id3v2tag.getAlbumImage(); + // Convert the bytes to an image if the data has been found + if (imageData != null) + { + this.albumArt = ImageIO.read(new ByteArrayInputStream(imageData)); + } + } + } + catch (FileNotFoundException e) + { + throw new FileNotFoundException(); + } + catch (IOException | InvalidDataException | UnsupportedTagException e) + { + e.printStackTrace(); + } + // Assign default values for variables that have not yet been set + this.title = (this.title == null) ? (this.file.getName().substring(0, this.file.getName().length() - 4)) : this.title; + this.artist = (this.artist == null) ? "unknown artist" : this.artist; + this.album = (this.album == null) ? "unknown album" : this.album; + } + + public String getTitle() + { + return this.title; + } + + public String getArtist() + { + return this.artist; + } + + public String getAlbum() + { + return this.album; + } + + public long getLength() + { + return this.length; + } + + public File getFile() + { + return this.file; + } + + public BufferedImage getAlbumArt() + { + return this.albumArt; + } +} diff --git a/src/com/pe/UserDefaults.java b/src/com/pe/UserDefaults.java new file mode 100644 index 0000000..ab6f508 --- /dev/null +++ b/src/com/pe/UserDefaults.java @@ -0,0 +1,179 @@ +package com.pe; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.StringWriter; +import java.io.PrintWriter; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.xml.sax.SAXException; + +/** + * Class that creates and interacts with defaults.conf file that stores useful user default values. + * + * @author olly.rowe + * + */ +public class UserDefaults +{ + // The defaults.conf file name + private static final String FILE_NAME = "defaults.conf"; + + // The defaults file + private File file; + + // The default directory for the 'Browse for Music' section + private String defaultBrowserDir; + + // The default directoy when browsing to open a playlist + private String defaultOpenPlaylistDir; + + /** + * Class Constructor. Will detect existing defaults.conf file and read it. + */ + public UserDefaults() + { + // Initialise the defaults file + this.file = new File(FILE_NAME); + + // If the file exists, then attempt to parse it + if (this.file.exists()) + { + try + { + DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); + Document doc = docBuilder.parse(this.file); + + Node defaultBrowserDirNode = doc.getElementsByTagName("defaultBrowserDir").item(0); + + // Set the default browser dir variable if the text content isn't empty + this.defaultBrowserDir = (defaultBrowserDirNode.getTextContent().equals("")) ? null : defaultBrowserDirNode.getTextContent(); + + Node defaultOpenPlaylistDirNode = doc.getElementsByTagName("defaultOpenPlaylistDir").item(0); + + // Set the default open playlist dir variable if the text content isn't empty + this.defaultOpenPlaylistDir = (defaultOpenPlaylistDirNode.getTextContent().equals("")) ? null : defaultOpenPlaylistDirNode.getTextContent(); + } + catch (NullPointerException e) + { + // If a null pointer error is raised then the file is missing an item of data, ignore this + return; + } + catch (ParserConfigurationException | SAXException | IOException e) + { + e.printStackTrace(); + } + } + } + + /** + * Getter for default browser directory string value. + * + * @return The String value of the default browser directory. + */ + public String getDefaultBrowserDir() + { + return this.defaultBrowserDir; + } + + /** + * Setter for the default browser directory. + * + * @param defaultBrowserDir - The string value of the path of the default browser directory. + */ + public void setDefaultBrowserDir(String path) + { + this.defaultBrowserDir = path; + } + + /** + * Getter for the default open playlist directory string value. + * + * @return The String value of the default directory for opening a playlist. + */ + public String getDefaultOpenPlaylistDir() + { + return this.defaultOpenPlaylistDir; + } + + /** + * Setter for the default open playlist directory. + * + * @param path - The string value of the path of the default browser directory. + */ + public void setDefaultOpenPlaylistDir(String path) + { + this.defaultOpenPlaylistDir = path; + } + + /** + * Saves the current defaults to the defaults.conf file. + */ + public void saveDefaultsToFile() + { + // Attempt to parse defaults.conf file + try + { + // Adapted from: https://examples.javacodegeeks.com/core-java/xml/parsers/documentbuilderfactory/create-xml-file-in-java-using-dom-parser-example/ + DocumentBuilderFactory documentFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder documentBuilder = documentFactory.newDocumentBuilder(); + Document document = documentBuilder.newDocument(); + + Element defaultsElement = document.createElement("Defaults"); + + document.appendChild(defaultsElement); + + Element defaultBrowserDirElement = document.createElement("defaultBrowserDir"); + + if (this.defaultBrowserDir != null) + { + defaultBrowserDirElement.appendChild(document.createTextNode(this.defaultBrowserDir)); + } + + defaultsElement.appendChild(defaultBrowserDirElement); + + Element defaultOpenPlaylistDirElement = document.createElement("defaultOpenPlaylistDir"); + + if (this.defaultOpenPlaylistDir != null) + { + defaultOpenPlaylistDirElement.appendChild(document.createTextNode(this.defaultOpenPlaylistDir)); + } + + defaultsElement.appendChild(defaultOpenPlaylistDirElement); + + // Create new transformation objects + TransformerFactory transformerFactory = TransformerFactory.newInstance(); + Transformer transformer = transformerFactory.newTransformer(); + transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); + DOMSource domSource = new DOMSource(document); + // Create a new StringWriter object to output the result to + StringWriter outWriter = new StringWriter(); + // The stream result, outputting to the String Writer + StreamResult streamResult = new StreamResult(outWriter); + // Transform the DOM Object to an XML File + transformer.transform(domSource, streamResult); + StringBuffer sb = outWriter.getBuffer(); + + // Write the output to the file + PrintWriter pw = new PrintWriter(this.file.getAbsolutePath()); + pw.println(sb.toString()); + pw.close(); + } + catch (ParserConfigurationException | TransformerException | FileNotFoundException e) + { + e.printStackTrace(); + } + } +} diff --git a/src/com/pe/audio/MusicPlayer.java b/src/com/pe/audio/MusicPlayer.java new file mode 100644 index 0000000..e9de94a --- /dev/null +++ b/src/com/pe/audio/MusicPlayer.java @@ -0,0 +1,556 @@ +package com.pe.audio; + +import com.pe.Song; +import com.pe.Playlist; + +import java.awt.Image; +import java.awt.Point; +import java.awt.SystemColor; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Set; + +import javax.swing.BorderFactory; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JSlider; +import javax.swing.JTextField; +import javax.swing.SwingConstants; +import javax.swing.plaf.basic.BasicSliderUI; + +import javazoom.jl.decoder.JavaLayerException; +import javazoom.jl.player.Player; + +/** + * Represent the music player component. + * + * @author olly.rowe + */ +@SuppressWarnings("serial") +public class MusicPlayer extends JPanel implements ActionListener +{ + // The javazoom player object + private Player player; + + // The thread object that the player will run within + private Thread playerThread; + + // The member variables associated with the player + private FileInputStream stream; + private long totalSongLength; + + // Whether the player is currently in a paused state + private volatile boolean isPaused = false; + + // The song that is currently playing + private Song currentSong; + + // The playlist being played + private Playlist playlist; + + // The song title text field + private JTextField txtSongTitle; + + // The button components + private JButton btnSkipBackSong; + private JButton btnPlayPause; + private JButton btnSkipForwardSong; + + // The song progress bar + private JSlider progressBar; + + // Play icon + private final Image PLAY_ICON = (new ImageIcon(getClass().getResource("/images/play.png"))).getImage().getScaledInstance(12, 12, Image.SCALE_SMOOTH); + // Pause icon + private final Image PAUSE_ICON = (new ImageIcon(getClass().getResource("/images/pause.png"))).getImage().getScaledInstance(12, 12, Image.SCALE_SMOOTH); + + // The album art JPanel component + private JLabel albumArtLabel; + + // The default album art cover + private final Image DEFAULT_ALBUM_ART_ICON = (new ImageIcon(getClass().getResource("/images/default album art.png"))).getImage().getScaledInstance(70, 70, Image.SCALE_SMOOTH); + + /** + * Class Constructor. + * + * @param playlist - The playlist of songs to be played. + * @param albumArtPanel - The JLabel where the album art will appear. + */ + public MusicPlayer(Playlist playlist, JLabel albumArtLabel) + { + super(); + + // Set the playlist + this.playlist = playlist; + // Set the album art label + this.albumArtLabel = albumArtLabel; + + // Remove the layout + this.setLayout(null); + + // Set the default album art icon + this.albumArtLabel.setIcon(new ImageIcon(DEFAULT_ALBUM_ART_ICON)); + + // Set up skip backwards button + Image skipBackwardsIcon = (new ImageIcon(getClass().getResource("/images/skip backwards.png"))).getImage().getScaledInstance(15, 15, Image.SCALE_SMOOTH); + btnSkipBackSong = new JButton(new ImageIcon(skipBackwardsIcon)); + btnSkipBackSong.addActionListener(this); + btnSkipBackSong.setBounds(10, 20, 80, 23); + add(btnSkipBackSong); + + // Set up play / pause button + btnPlayPause = new JButton(new ImageIcon(PLAY_ICON)); + btnPlayPause.addActionListener(this); + btnPlayPause.setBounds(136, 20, 58, 23); + add(btnPlayPause); + + // Set up skip backwards button + Image skipForwardsIcon = (new ImageIcon(getClass().getResource("/images/skip forwards.png"))).getImage().getScaledInstance(15, 15, Image.SCALE_SMOOTH); + btnSkipForwardSong = new JButton(new ImageIcon(skipForwardsIcon)); + btnSkipForwardSong.addActionListener(this); + btnSkipForwardSong.setBounds(240, 20, 80, 23); + add(btnSkipForwardSong); + + // Set up the song title and artist text field + txtSongTitle = new JTextField(); + txtSongTitle.setBorder(BorderFactory.createEmptyBorder()); + txtSongTitle.setHorizontalAlignment(SwingConstants.CENTER); + txtSongTitle.setEditable(false); + txtSongTitle.setBackground(SystemColor.menu); + txtSongTitle.setBounds(10, 0, 310, 18); + add(txtSongTitle); + + // Set up the song progress bar. Removes listeners that disallow the user to seek a position on the slider by clicking at a certain point. + progressBar = new JSlider() { + { + MouseListener[] listeners = getMouseListeners(); + for (MouseListener l : listeners) + removeMouseListener(l); // remove UI-installed TrackListener + final BasicSliderUI ui = (BasicSliderUI) getUI(); + BasicSliderUI.TrackListener tl = ui.new TrackListener() + { + @Override + public void mouseReleased(MouseEvent e) + { + Point p = e.getPoint(); + int value = ui.valueForXPosition(p.x); + setValue(value); + if (!isPaused) + { + pause(); + setValue(value); + resume(); + } + } + + @Override public boolean shouldScroll(int dir) { + return false; + } + }; + addMouseListener(tl); + } + }; + + // Set the value to 0 by default + progressBar.setValue(0); + + progressBar.setBounds(10, 43, 310, 24); + add(progressBar); + } + + /** + * Button Action listener handler. + */ + @Override + public void actionPerformed(ActionEvent e) + { + // Ensure that a playlist has been loaded and isn't empty + Object source = e.getSource(); + + if (source == btnSkipBackSong) + { + skipBackSong(); + } + else if (source == btnPlayPause) + { + playPauseSong(); + } + else if (source == btnSkipForwardSong) + { + skipForwardSong(); + } + } + + /** + * Toggles between playing and pausing the current song. + */ + public void playPauseSong() + { + if (this.player != null) + { + if (this.isPaused) + { + this.resume(); + } + else + { + this.pause(); + } + } + else + { + // Check that the playlist isn't empty + if (this.playlist.getSong(0) != null) + { + // If the player is not yet initialised, default the current song to the first one in the playlist + this.currentSong = this.playlist.getSongs().get(0); + // Play the song from the start + this.playSong(0); + } + } + } + + /** + * Plays the current song. + * + * @param startPoint - The point within the song to start playing form. + */ + private void playSong(long startPoint) + { + // Check that there is a current song to play + if (this.currentSong != null) + { + this.isPaused = false; + + if (player != null) + { + player.close(); + player = null; + } + // Attempt to play the audio file + try + { + this.stream = new FileInputStream(this.currentSong.getFile()); + + this.totalSongLength = this.stream.available(); + + this.progressBar.setMaximum((int) this.totalSongLength); + + this.stream.skip(startPoint); + + player = new Player(this.stream); + + this.playerThread = new Thread("Music Player") + { + public void run() + { + try + { + updateGUI(); + + btnPlayPause.setIcon(new ImageIcon(PAUSE_ICON)); + + player.play(); + + // Once the player is complete, skip to the next song in the playlist + if (player != null && player.isComplete()) + { + skipForwardSong(); + } + } + catch (JavaLayerException e) + { + e.printStackTrace(); + } + } + }; + + this.playerThread.start(); + + // Get all currently running threads + Set threadSet = Thread.getAllStackTraces().keySet(); + + // End method if there is currently a progress bar updater thread running + for (Thread thread : threadSet) + { + if (thread.getName().equals("Progress Bar Updater")) + { + return; + } + } + + // Create a new thread to update the progress bar + Thread updateProgressBarThread = new Thread("Progress Bar Updater") { + public void run() + { + // maybe check if one of these threads is already running as they can double up when you navigate through a song using progress bar + while (!this.isInterrupted()) + { + // If player's state changes before song ends then catch the null pointer exception + try + { + if (player.isComplete() || isPaused) + { + break; + } + + // Update the progress bar + updateProgressBar(); + + Thread.sleep(100); + } + catch (NullPointerException | InterruptedException e) + { + break; + } + } + } + }; + + updateProgressBarThread.start(); + } + catch (JavaLayerException | IOException e) + { + e.printStackTrace(); + } + } + } + + /** + * Plays the current song from the beginning. + */ + private void playSong() + { + this.playSong(this.progressBar.getValue()); + } + + /** + * Pauses the song currently being played in the player. + */ + private void pause() + { + this.btnPlayPause.setIcon(new ImageIcon(PLAY_ICON)); + + if (player != null) + { + this.player.close(); + } + this.isPaused = true; + } + + /** + * Resumes a paused song in the player. + */ + private void resume() + { + // Play the song from pause location + playSong(this.progressBar.getValue()); + } + + /** + * Skips the song currently being played back to the previous one in the playlist. + */ + private void skipBackSong() + { + // Check that the first song in the playlist isn't currently being played + if (this.currentSong != this.playlist.getSong(0) && this.playlist.getSize() > 0) + { + // Change the current song to the previous on in the playlist + this.currentSong = this.playlist.getSong(this.playlist.getIndexOf(this.currentSong) - 1); + } + // Play the current song from the start + this.playSong(0); + } + + /** + * Skips the song currently being played forward to the next one in the playlist. + */ + public void skipForwardSong() + { + // Check that the playlist has a final song before doing anything + if (this.playlist.getLastSong() != null) + { + // Check that the final song in the playlist isn't currently being played + if (this.currentSong != this.playlist.getLastSong()) + { + // Update the current song to the previous one in the playlist + this.currentSong = this.playlist.getSong(this.playlist.getIndexOf(this.currentSong) + 1); + // Play the next song + this.playSong(0); + } + // Otherwise, go into a paused state + else + { + // Enter paused state + this.pause(); + // Reset the progress bar + this.progressBar.setValue(0); + } + } + } + + /** + * Splits the current song at the current progress into two. + */ + public void splitCurrentTrackAndWriteToFile(File outputFile, boolean outputPreSplitPoint) + { + // Check that there is a current track + if (this.currentSong != null) + { + try + { + // Create a new temporary input stream for the current song + FileInputStream tempInputStream = new FileInputStream(this.currentSong.getFile()); + + int startPoint, endPoint; + + // Calculate the start and end points based upon argument + if (outputPreSplitPoint) + { + startPoint = 0; + endPoint = this.progressBar.getValue(); + } + else + { + startPoint = this.progressBar.getValue(); + endPoint = (int) this.totalSongLength; + } + + // Skip to the start point + tempInputStream.skip((long) startPoint); + + // Create a new output stream to the output file + FileOutputStream outputStream = new FileOutputStream(outputFile); + + // The number of remaining bytes to be read and outputted + int remainingBytes = endPoint - startPoint; + + // Create the buffer to be written to + byte[] buffer = new byte[remainingBytes]; + + // Populate contents of the buffer from the input stream + tempInputStream.read(buffer); + // Write the contents of the buffer to the output stream + outputStream.write(buffer); + + // Close the opened streams + tempInputStream.close(); + outputStream.close(); + } + catch (IOException e) + { + e.printStackTrace(); + return; + } + } + } + + /** + * Updates the current playlist associated with this music player with a new one. + * + * @param playlist - The new playlist. + */ + public void updatePlaylist(Playlist playlist) + { + // Update the playlist member variable + this.playlist = playlist; + + if (playlist.getSize() > 0) + { + // Get the first song from the playlist + Song firstSong = playlist.getSongs().get(0); + + // Set the current song + this.currentSong = firstSong; + + } + + // Update the GUI components + this.updateGUI(); + } + + /** + * Updates the progress bar with the current song progress. + */ + public void updateProgressBar() + { + int progress; + try + { + // Calculate progress as the total length of the song minus the length of song left + progress = (int) (this.totalSongLength - this.stream.available()); + } + catch (IOException e) + { + return; + } + // Update the progress bar value + this.progressBar.setValue(progress); + } + + /** + * Updates the GUI components with the details of the current song. + */ + public void updateGUI() + { + // Update the album art + try + { + this.albumArtLabel.setIcon(new ImageIcon(new ImageIcon(this.currentSong.getAlbumArt()).getImage().getScaledInstance(70, 70, Image.SCALE_SMOOTH))); + } + catch (NullPointerException e) + { + this.albumArtLabel.setIcon(new ImageIcon(DEFAULT_ALBUM_ART_ICON)); + } + + // Update the song title and artist text field with the details of the current song + this.txtSongTitle.setText(this.currentSong.getTitle() + " - " + this.currentSong.getArtist()); + } + + /** + * Sets the current song. Stops the current song from playing and resets the progress bar. + * + * @param the song to be set as the current song. + */ + public void setCurrentSong(Song song) + { + // The the current song + this.currentSong = song; + // Pause the song that is currently playing + this.pause(); + // Reset the progress bar + this.progressBar.setValue(0); + // Update the max value + try + { + // Open a new temporary stream + FileInputStream tempStream = new FileInputStream(this.currentSong.getFile()); + // Set the max value + this.progressBar.setMaximum((int) tempStream.available()); + // Close the stream + tempStream.close(); + } + catch (IOException e) + { + return; + } + } + + /** + * Gets the current song. + * + * @return the current song. + */ + public Song getCurrentSong() + { + return this.currentSong; + } +} \ No newline at end of file diff --git a/src/com/pe/utils/FileNode.java b/src/com/pe/utils/FileNode.java new file mode 100644 index 0000000..4647a5d --- /dev/null +++ b/src/com/pe/utils/FileNode.java @@ -0,0 +1,84 @@ +package com.pe.utils; + +import java.io.File; +import javax.swing.Icon; +import javax.swing.tree.DefaultMutableTreeNode; + +/** + * Represents a node within the file tree. + */ +@SuppressWarnings("serial") +public class FileNode extends DefaultMutableTreeNode +{ + // The corresponding file + private File file; + + // Boolean value identifying whether this node has yet been mapped + private boolean isMapped = false; + + // The icon associated with this node that is called when rendering + private Icon icon; + + /** + * Class constructor. + * + * @param file - The associated file to this node. + */ + public FileNode(File file) + { + // Call to super constructor. Pass either the name of the file or, for the root, pass the path + super(file.getName().equals("") ? file.getAbsolutePath() : file.getName()); + + this.file = file; + } + + /** + * Gets the file. + * + * @return The corresponding file to this node. + */ + public File getFile() + { + return this.file; + } + + /** + * Sets the state of isMapped. + * + * @param isMapped Whether this node is mapped. + */ + public void setMapped(boolean isMapped) + { + this.isMapped = isMapped; + } + + /** + * Returns whether this node is yet mapped. + * + * @return State of isMapped attribute. + */ + public boolean isMapped() + { + return this.isMapped; + } + + /** + * Gets the associated icon. + * + * @return the associated icon. + */ + public Icon getIcon() + { + return this.icon; + } + + /** + * Sets the associated icon. + * + * @param icon - the icon to be set. + */ + public void setIcon(Icon icon) + { + this.icon = icon; + } +} \ No newline at end of file diff --git a/src/com/pe/utils/FileTree.java b/src/com/pe/utils/FileTree.java new file mode 100644 index 0000000..4734f31 --- /dev/null +++ b/src/com/pe/utils/FileTree.java @@ -0,0 +1,277 @@ +package com.pe.utils; + +import java.awt.Component; +import java.io.File; +import java.util.ArrayList; +import java.util.List; + +import javax.swing.JTree; +import javax.swing.UIManager; +import javax.swing.event.TreeExpansionEvent; +import javax.swing.event.TreeExpansionListener; +import javax.swing.tree.DefaultTreeCellRenderer; +import javax.swing.tree.DefaultTreeModel; + +/** + * FileTree.java + * + * Represents a JTree that displays a given file system. + * + * Threading has been utilised to map the file system using a breadth-first search. + * Nodes can also be mapped on an as-needed bases to avoid long loading times. + */ +@SuppressWarnings("serial") +public class FileTree extends JTree implements TreeExpansionListener +{ + // The array of file types to be displayed in the tree + private ArrayList fileTypesToShow; + + /** + * Class constructor. + * + * @param directory - String value of the path of the directory to be set. + * @param fileTypesToShow - array of strings indicating file types to be included. + */ + public FileTree(String directory, List fileTypesToShow) + { + super(new FileNode(new File(directory))); + + this.fileTypesToShow = new ArrayList(fileTypesToShow); + + // Map the root node + this.mapNodes((FileNode) this.getModel().getRoot()); + + // Add tree expansion listener + this.addTreeExpansionListener(this); + + // Set the cell renderer for assignment of node icons + this.setCellRenderer(new DefaultTreeCellRenderer() + { + @Override + public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) + { + super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus); + + FileNode node = (FileNode) value; + + // If an icon has been set for this node then set it + if (node.getIcon() != null) + { + setIcon(node.getIcon()); + } + return this; + } + }); + } + + /** + * Alternative Class Constructor. By default, will display all file types. + * + * @param directory - String value of the path of the directory to be set. + */ + public FileTree(String directory) + { + this(directory, null); + } + + /** + * Maps a node, discovers and creates child nodes. + * + * @param parent - the node to be mapped. + */ + private void mapNodes(FileNode node) + { + // List all child files / directories within parent node + File[] children = node.getFile().listFiles(); + + if (children != null) + { + // Iterate through each child + for (File child : children) + { + if (child.isFile()) + { + if (!this.isValidType(child)) + { + continue; + } + } + // Create a new node + FileNode childNode = new FileNode(child); + // Add the new node to the parent node + node.add(childNode); + + // If this child node is a directory + if (child.isDirectory()) + { + // Set the icon of the child not to the default folder + childNode.setIcon(UIManager.getIcon("Tree.openIcon")); + } + } + } + } + + /** + * Fired upon expansion of a node. Maps the children of the children of the expanded node. + * + * @param e - The event object + */ + @Override + public void treeExpanded(TreeExpansionEvent e) + { + // Fetch the last selected node + FileNode node = (FileNode) e.getPath().getLastPathComponent(); + + // Check if the node is not yet mapped + if (!node.isMapped()) + { + // Iterate through each child node + for (int i = 0; i < node.getChildCount(); i++) + { + FileNode child = (FileNode) node.getChildAt(i); + // Map the child's children + this.mapNodes(child); + } + } + // Set the node to mapped + node.setMapped(true); + } + + /** + * Fired upon collapsing of a node. + * + * @param e - The event object + */ + @Override + public void treeCollapsed(TreeExpansionEvent e) + { + return; + } + + /** + * Changes the directory. + * + * @param directory - String value of the path of the directory to be set. + */ + public void setDirectory(String directory) + { + // Get the tree model + DefaultTreeModel model = (DefaultTreeModel) this.getModel(); + // Set the new root node + model.setRoot(new FileNode(new File(directory))); + // Refresh the GUI + model.reload(); + // Map the child nodes of the new root + this.mapNodes((FileNode) this.getModel().getRoot()); + } + + /** + * Check that the file's type is allow by the file type filters. If there are not filters then it shall return true. + * + * @return - the Boolean value of whether the file's type is valid or not. + */ + private boolean isValidType(File file) + { + if (this.fileTypesToShow != null) + { + // Iterate through each valid file type + for (String fileType : this.fileTypesToShow) + { + // If the file type is valid + if (file.getName().endsWith(fileType)) + { + return true; + } + } + } + // If the file types to show array was null or the for loop did not return true at any point then return false + return false; + } +} + +/** + * FilteredFileTree. + * + * An extension of the FileTree class that allows the user to pass an array list of String that specify the file types to be displayed in the file tree. + * + * The performance of this current implementation is low and requires threading to be implemented to fix this issue. + */ +@SuppressWarnings("serial") +class FilteredFileTree extends FileTree +{ + // Filters for any specific file types to be displayed + private ArrayList fileTypesFilter; + + /** + * Class Constructor. + * + * @param directory - String value of the path of the directory to be set. + * @param fileTypesFilter - String array containing the types of files to be shown in the file tree. + */ + public FilteredFileTree(String directory, ArrayList fileTypesFilter) + { + super(directory); + + this.fileTypesFilter = fileTypesFilter; + } + + /** + * Maps the child node into this current tree. Filtering out unspecified file types. + * + * @param parent - the parent file node. + */ + @SuppressWarnings("unused") + private void mapNodes(FileNode parent) + { + // List all child files / directories within parent node + File[] children = parent.getFile().listFiles(); + + if (children != null) + { + // Iterate through each child + for (File child : children) + { + // If the child is a file then perform type validation check + if (child.isFile()) + { + // Ensure that the child is of one of the types specified in the type filters. If not then continue for loop. + if (!isValidType(child)) + { + continue; + } + } + // Create a new node + FileNode node = new FileNode(child); + // Add the new node to the parent node + parent.add(node); + } + } + } + + /** + * Check that the file's type is allow by the file type filters. If there are not filters then it shall return true. + * + * @return - the Boolean value of whether the file's type is valid or not. + */ + private boolean isValidType(File file) + { + if (this.fileTypesFilter == null) + { + return true; + } + else + { + // Iterate through each valid file type + for (String fileType : this.fileTypesFilter) + { + // If the file type is valid + if (file.getName().endsWith(fileType)) + { + return true; + } + } + // If the for loop did not return true at any point then the file type is invalid. + return false; + } + } +} diff --git a/src/com/pe/utils/SetupWorker.java b/src/com/pe/utils/SetupWorker.java new file mode 100644 index 0000000..1e18bbd --- /dev/null +++ b/src/com/pe/utils/SetupWorker.java @@ -0,0 +1,31 @@ +package com.pe.utils; + +import javax.swing.SwingWorker; + +/** + * SetupWorker.java + * + * Handles set-up processes in the background. + * + * @author olly.rowe + */ +public class SetupWorker extends SwingWorker +{ + + /** + * Class Constructor. + */ + public SetupWorker() + { + super(); + } + + /** + * Inherited SwingWorker method. Called upon .execute() + */ + @Override + protected Object doInBackground() throws Exception + { + return null; + } +} diff --git a/src/images/arrow down.png b/src/images/arrow down.png new file mode 100644 index 0000000000000000000000000000000000000000..644b44b5e018e31e0162ea2e73fce6adfa07a8e6 GIT binary patch literal 730 zcmeAS@N?(olHy`uVBq!ia0vp^CLqkg3?x4-dwml~eGBjjadj{70WwD#m>%~o9q8x4 zk|4iehEHkfzq1(s{r!{Al(Z_`f~9~t;97}Uyo3K2tGJA55#2e3WwWYd9wn}Plihzk ztSTY3b8_g6%BZ<@i<(oGzv?)hnRm6gA~N|@?!=<<*aeRp8Cz<-}SjV#E7X&OT_gX$})?3+i=*!fF#%;!LPKg}dmCoI}=dyduWuNJq5i#v#xkuUmS^OIBSAAhx z!vE(PdzX5IhVw$>EWL$aETXbj9(T_5e!5n7>h{zBd{Z1{`>UVzZqYx&u=R=7Yk@Ph z4;&dw)uvo!`z-Z`>$~jL;@G4$pIFoE-fW0zjM5L)JCM^R?_DF+$~0rmJLZbE>PEw_ z^P}#0<~2>J6}Pp!R&y%vsHCsIOz&p#`~|$n`g&d{swN)_t}*-fVTx8~Vvf7UznM7! r@?S;cJ+1DozQ6kF7xn3Gdw#I$nNQIVm@?ZAlsr9M{an^LB{Ts5c9q?C literal 0 HcmV?d00001 diff --git a/src/images/arrow up.png b/src/images/arrow up.png new file mode 100644 index 0000000000000000000000000000000000000000..f3b227f9ec64c6b928dd242497221ce2ae127427 GIT binary patch literal 802 zcmeAS@N?(olHy`uVBq!ia0vp^CLqkg3?x4-dwml~F%}28J29*~C-V}>VM%xNb!1@J z*w6hZkrl}Q7T^=&>R#XjWR5g2J?>pP(9eM-L4LsupVHEQXEFZ!`zN0%X;rudO96Ah zwGy*<2mdctaT(Jhx^oK4W>v>LN?iFSyZ?GvRYGd#bHmPM-|tnwxBc_qe)7z_{&x;&Ju!Sg0Ot#{`ju|YZL2g-NNkH`5qd9JrI5>hy>WNXQHDGx-cZ&x zzmnW%{Wx_c;A_j)iEFNjbXy4ciHY;9$vm66bx)J>!+DRrS|r#0T*DQ(?|{P&>m4GG zT(hk#%?=-z;8a)EZ{2ZqmhH^|Q+~%8tM**mvuNQfhOQ2~-mYtF*n0(b@~J%BqIi(m zrkIU=*}|DzbDjuH`q{>P<7m^&R^@FAW|Uj>YOk4LZn2T!;F*JeAF+5pi_?@=z8s+C z!<>C=+A|?x+j)CL*tXcGgmzi`>|0!S#N++f^{02HtUPJDPb1do2SRy=_>?L2%>wq#|EB0)oyZ4@RR&L2KbLh* G2~7a1VeX#* literal 0 HcmV?d00001 diff --git a/src/images/default album art.png b/src/images/default album art.png new file mode 100644 index 0000000000000000000000000000000000000000..95eda7c236e052e0aba1fd6d71ef17d75e17e7d9 GIT binary patch literal 17231 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 literal 0 HcmV?d00001 diff --git a/src/images/icon.png b/src/images/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..469d920f268877e28c8378675390cc47a801d96f GIT binary patch literal 6424 zcmeHLi91za+kW;L9YchF}y^31xI^_#Q21q@i~6R z_e8AUiMS&tCG6{-14>gFZQ{uyJZsVoWgp34E6T^>gyl= z{&V>Iz{rn*k^aHo{j=D>uRk+OI1MrXE7f*5cQZq5ENuZH5J_YT7mb^Tmv0q6T~J6= zOj1f_ot%Qw2357K>Y7?Rb@Z6K^bL0#n^;;|+t}Leb8vET+waag;Nk7-9}pN6a^hq} zTY~3+){3o_Du% z3a5;>5qL-f0z!7RWC2lErsqGdfqsT{C)}+`LVLUR?sYZVEON1KBmK^fOAkuM7Ugx{ zcpOflr)cF4AqkH#z^(4xKSG&vrMY zN4dPaTtd}VF6j!5S(W6s|J#+f!z2EPfGxql?Y{EU{`bLsi93{h=670ZF2>#ZyFIV- zVqU!0{l%We-``(l?1=UMRUT5VB~im2u6Vz{c6r^pbq2Fm=^lMyBk6MrKcD34`|j|2 zmr?uUjbCbd%VKtv1MTf$CA)vvzzO=C9Tq+)tzaY^l(k(<)V2BfP(_JXCpWbB=JLvbUH> za$}&uF3E-STdq<&{)#iw8MiM-V;s(YJkUIqqp}bj7}efS59M(PF}o^HDCUm@egD>~l38#{Vn*b`o~n9fvAU5LgvTF) zgc$;j69rLC}bOZ5BZ#_a3S5G;UtD{L9c@IwN0u#7am5v z4zknPm;6EPDVB3~=;W|Ytd(-=wv~XDbp@MAi@QD()*RY$)}V zF5K(uq3!?0<|6rlx5lSZ6}3X__^BcFiKz$bKSyi04X}@UR@trjtEu)(V4qR;>kbMp zN5?qj<6y-PYTVm}j|VsXQVkAS{&Vw=TC3#oaidS#+ne2gS8S=jyQ~@+KU36D64&%Q zYPV`-iQ;qRoc1W%0B6%XR^sGB&)LqRM!mx49EY3gezv1`Qlh`y_ih|^J>GodZ=?N` z=PBp4!8x_xRZ2aLD@AtR#9S>no#}eUl3LHXpH=&x54g-(E?&#Dn(<^k__G}FvMj(w zz0`D!ql<)i1Q4Wh7gg)Ot9}*S)bT6B-;~gv7h5&}4(Ephvt*W0Dy!c4 zoEARLQJr;RmK49(Gsnr$mCA2PXm-AUy^$9D;%yfy{2CMXU}j&v?%IfLNVK}t(N~v= zIi%}twomXlxSaAh#OIOOrYFL>cg*ikT)uI%2-}x+|DMD7`brLV$zAMHjkRokXWwGf z>G7!7{S1zMBHW6IHzUD?en!o_gaSe6kA&+MF1QJ?U%15V%1(w}Cok3{5%Nu##WyC2 z1CBwQGftr2v-E@;`H-Ho?t5APlISZ~zdF#Mu0CILka3kFGxgs6EYoBObaqSeA0{i%Grhr zuc1;v?;`630-cSp-2`}v;ExI?$R_3fDmSU{l9;d0Oc~v7S-Ghi`|JVNi!sAWRPmWH z@dOWWNub=wGyiJ@F%rrJvDKVIzedg+$rZ{xFuyz&Pqdcl?c~Trn9!7 z1_U@rpf3#17I15M_+#heLBTygr0l^%viyv!ko8aaOEq(-hKeoCAt zY|_@0sSt!B5`AIf=`Cca^x%E#%K+v`gAnUQa$h3?kHnZm?|Rb6ESZ@fwId{OJ>K$>7K@Gxamz?P~gusz>+9@Ec^TnC3?!>duj&oxr??es^3*i6X!@gzMB_iDRIX zn1Z0jfVx2eEuk-Y?^99uO{6b;Z@UHKMp3Eb+Ys1BNL66DeBs&k6=B=Mb=A{*DCms0 zXu=;MV5x#B;e=6Jl#M7DrbR73T|c4PlQEw9EbRv25$<()KKepol~NYRwi00rLHCBe zaEA^oZrCeOC&A>0Ok%#$#8Y&X0F8)DnQ@iq&<31>y*>qtvD{=FF@=n{dPN|U+-vW# zJje}dJZM7_7n=-feC#-rg*<71&p;Y5hThB-lyInTHgA9mlQ8#LLxN0!3V12af9)F? z6bVCF4?AS&&_Jfou$nzVO_2Rl?dcf`!nS}H<7MZh@Xu0&Aeo{t_6blEW=3cQ$B+qt zv%J-RD<7~_(0H|n@oOm%jPQC5X>fDFC&WTmd}xAzzJV&+T+x4w07tc18z6@WB}h(o z6;|s2tZk@6;w3`646u*D!B+*)L_~is+~g3bD+b;q*3!G$KM07z?CTMRE*H20>9giM7YQ`s^)kH(0X=wK z;q{BgMcbj&lbjJa6vDbxhagFsSSZdYmOA^484^68C}Q)HXn0vh*Lts zAILm5Le?X28qACkEd-VzM~vL72jj#*>=~!qz?m@jh9RDo=S^cZ=n`aHylK6kYt-fQ zd}&ON6j)DzWH@IGk}LJ96euTwB;qQLG$VK&a-mCb1E6y7cXUtMJg^0soSm=}P$hKj z7~~M(8dyFjHuHiGqEYizc!-J{mI6+4H3?=B=6-v{_p9$g62c4((+icMkE^##( z#>q0PHxNOK*kE0uzVhw{`$}aGZeT1c8BExoLi%klR>Px>?Hr+x_R!1AQXVBk6U=-P zz#F|>xd`59y0cS33_`%#oDbM*m_%HYydWur4|iH_v>id!(d-b>m4-S06nT6yYMVTx zO_WUxztF*KDv3^c!vi@;=r5dfl<}DGmG1i|5Zr^FI0bhekDxnYiKK?n*yb{m8O%t^ zR*binNuP|C;U%j}bDsu$v`%x_4l(esp!SgPAxDR+A2ex=GUHry+~bhbO*0T+Ubh})<^igs&yr)hH4BMf^n@HLsn6GWk%ZOGqvCm zqhp7(5DjLO3!3jJ)y zaB0R3C#s04{5bvkYlx{7ye@c7WUdV-%zZ43?>7!749%5ARTd~g5qH`445R;Y{6C!c zAc8S;$U&C@u=&}k5hUoQ;$ieBs*RBgIIz4xuqNQ~lzxGbO2%uCBm(n4k=K$d#tZkZ zMUFF{+Ts*S}4oyk8go;(9`6i(*pXOTc41>)Tk~3=xm*#d>_p z!Gpa>iYTLiFD#I3UPJy@VAI&6|196{l;Z{8YY{)GaAie4%o)%-Ou+@E(oGuj#i5s& zKk$lkR|w`{{aPwBoDSu{bvuQK{zszn?g7e!-U~uDQ9%W+r0~d8^Ft^MotGAc76ka= z_>bA*egisa%yY@hW=%V*0%Iw{V8Y-zR9(}=#qf^k%8V(ADh=mtBLWq&l}KtO($Gk4 zW(4bl9X|{Z@8p$7b#mdLU5kdwOGD-=c7_HGcJSk}ti^D`N)fQ2K006niN!10UA$U} z%p6=ngNkE$t$=nws|CXT*+ONjGPcXte4(Oknq;`gK9c{YBwE;Z+G@?Km0hFn!Un{e z2$?+j2ZlMgsy33X=@hj5-+PR!7!2X}WbR(3*0SwkIy92#jl4YIMgeuibyacHMiLH$ z;%TgKQOM-V_Y2Pik7Nn~wY-V;D89%41u|Y3$A=~(Xc#2N^)PS~>H~yHIbezcTLVO8 zf8`xRa8MzDJ#`|dm z#ZL(X&J^^-3i|!{Vbr;2M6e|O>l9b&%>_ARmbZXYmI3r`g0n@Vd8?%m^b+WpJraYT zWQ45^F<~BImIO2ya!RYC%tiqUVaVhO0uQJ-aY^6+U=f`qDo|L@i+<*yPw-U@C#9ysk0Alm_FU zvsQm3AfE@7I7$ZZCUs~gvP-lJzli;PoB$5w8)^>S=MZaOWoPS*Ry&((jVe?58{MuJ>=K#1PSgD5 zV&N>`c2>o%Hp4v2qXjxs^P=|^>}g$foxfv^v$?pZEhIJUVF~&OThVhHESe3nZb{y1 zu+a9&NNGM-6=^6waA-Ck3bM4;*bSo3p=2Ogle~Y`dkJA$hURQO?7>Qsk0BTF1GvA}c>d zZNAKHxy~w_peJWe!M$~pm?p|oUxW%dYoSxjC5yIB>ZwfzpduZoc9KLmjdMiHf zn(S7UHG76MyEHsgqk~3YFR>igbdAcYUz((kTIQbB_Be7_(zwR<=N#`=ZL;d#zaC*u z%y^~eQk$)E7DBc%@GQaiU7bQd`Vkt~(+ZrD||? zb%KLP_pXtipG~p{Gs@lCjX5gSZb7wMg8iDG)AheJDm-**y|9p-A@IXOd8FSh%Bw@; zdv5>6*Jru;>=Xpkoa&!ol@_Jg3D-Muhn6>od7t)pVDeY+=rm))iR-g_6K6xUTgIkq zZ%%Fr3h*1WiCWyYeL*T9hNX0V^5?(uFSNAM!mm>c&t~PX51OXg9GK!nUpprhqSN9Y zJ=&xGgj4wSZw;d;?Bz=r#n!0%YOA{Av%7fWyLAN0Q_tJWy{u#dO;Jqy*U-*eNiUc8I@{LzEgHjXN(tJi)S1W#{?5){(l-C45S7f+~~bxFIx zO>GhiTS-TG20hT8eQP>ev*RhH0t6E{I`rxC-w8_am zK06kyCxXgLC(6D%y<(5Py*1ZsdvzrvCv-|`A#0}iH9>mwe%h7vHnVSs+MQggNsI+& z1w5m7YD0Z8Z#QFaTHN3R&#sQTv#K4TTu$}3Ue$FtelCvqG;uP=w=7imV$J-QEaloaenSZLq0}Fk+%JF zb2iO&IwZCzXobtBO@V82mKO23U$9~<%@_P!bywy$9B(lWE?Oq?z~Bh$q3aVeqo&-LILSdSoU=FK@4aZ(TY0JS z$_p0gZ2R+Xm0a?!lzDyXn(~EbJZqGMru|U+$Qbj^A|z$nhkT%4R7+eVN>UO_QmvAU zQh^kMk%6J5u7Rblp;?Hbft9JTm5G_Qfq|8Qf!*ZyO(+_2^HVa@DsgM@KNoHX)F276 tAviy+q&%@Gm7%=6TrV>(yEr+qAXP8FD1G)j8!4b722WQ%mvv4FO#paIr;h*t literal 0 HcmV?d00001 diff --git a/src/images/pause.png b/src/images/pause.png new file mode 100644 index 0000000000000000000000000000000000000000..361b9318d2fdbfad80bbba50dbbcaaf6f34d878f GIT binary patch literal 2944 zcmeHJYfw{H5I#^4(LsDo9Up+L1GJ?m1bO5E8Co2$4)`p=QHVTZupq=F5ECImWvto( zMq1@z;QE+OJ6=st7)T@tA`~#>rq*UeK|&RCH4q+NW4suW9{kh(>F@qw=A5%-UW?W&0swezO^DkCfGhmEf`x8Sq#apz1PV89Y+@_`H!Bv~)7_!IJ~Lrg zA^?&A07^;$n1QB}mjD!m0AM}<0IeE;RXq9aoeb!3&Da(n2f($m4HT$(@)Gt609evB zcU{g0Em;eV9>T4OTRfgGT)KQMo&NePAAm(kTjOH)9DQOL)S`HSPtSDA!-1#!S}7FD z*Nt|M%KKLe_r_)?6n^rgIeS^`tjo^Je@1-aAJn?EY4PQijf0fPXZ{cN@3|;ExH)*& zpwAyW>ANwqNQRR~iyX&SA^IA;hDy-6{dva>8qsiAKGM?vSn$>yy6K7xJ0s>z)YDBD z)cMwG=e;e2L)^2Ukzd_t`WfxfoG#Z-tGN^MefTP3z#RH*mCj3$Q6KXL7ZH6_ft7>Y z3d463?_Y>SGx{?mra5fo*fdh<=Iy~U`$@V@|2>OMeopo>8tmAT2}XFNoMDvDuC;RDY7VZK#;iq%pmN+Yti}6<&2}n_b+( z%R{cBe$S{rb@U5H-N#r@GP5haz_E_)Pz^@0Q)XA{U;Ut+s;oF*B%J6otcV!xEh@B@&TfC|rJR~|u5K>$W9hXJ{1aOEBBszE zu-08;Tg9P82dpJr72jG?MimXKC7q7(Z@_Syq{F1iNxLQKtiLKCVNF4|+2ws>kc%qU zTB4)o46C3gQisBHav$>S)AL}zO46|)wMo)ZZ*iXLygP`EX)dLDcH|^`4_qSPGg4_8 zI7fec9%x`GuO}G0wGHcQCTN?oS*{J+kQByegW^`pmygR~I;(JL0GL1X9hmRHdlJPz&4!O6@V8>VwKUpUOHYQQ zWgpBom-+_LYxZ1AG(v#pU|S}E!eB1Tb*jsrWi3q<7iHR}?};H)RF`yYW=R)H>|F}SjpR?`l^c89MIcL6ENqPKk6Yr zVZ^v54jP}^S!Ke}K>6r9M)YKAbjAwb8gDEUjbE3<(mlk6njhr))eTn7jrVXk>qA=e zNJ0_g-Jio^b`mt1qscB!MwAL^={-yDkjj3BRnOFSqsWMRDn+(e8Xu(h68vTkjDlN+ zRf~uX>SM!AGc!&!Qs1VXJY*ninGTQVwbW+&O>f5#gR8vru9(V|YV3+74hDq<)yhXY z8{YS#LdwJMsQK3ONTs)KRy#R9g8e9XcuGbQWT(=Mwa>MF&Nqm$zXyM5*2ZwSSfHsz zJ2~+N$s}%w$IM!X(K6G%H;p=36J)w2*2=^1>%PRNGd=QZ4_rZ7hbT6sFCkO$h9j%= z-GaOFf?s3q9my@%MGJ5{U#brBn<>t7E?DnyV-y6e-vO6Rf8mxCVOF}3L(AlIpa7JR zP-<{URB&j-p3n#yC6X3S4GN*qLPAJo+uSPrPr%{)tV0LI{~d7pwfh|yuzIe-?)-y7 nQ97RkL?Y3~LwPxZ%yb@SV?LjIae}c1g22`-NpXs=4xIQKC(L*x literal 0 HcmV?d00001 diff --git a/src/images/play next button.png b/src/images/play next button.png new file mode 100644 index 0000000000000000000000000000000000000000..70e0f23da19d6830af133cf41c91236263d7bc82 GIT binary patch literal 3948 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 e*5zrxNqlbO8*ObST$q- literal 0 HcmV?d00001 diff --git a/src/images/play.png b/src/images/play.png new file mode 100644 index 0000000000000000000000000000000000000000..747e19120dc98d3683fb41e6d40124185669910b GIT binary patch literal 4622 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 literal 0 HcmV?d00001 diff --git a/src/images/skip backwards.png b/src/images/skip backwards.png new file mode 100644 index 0000000000000000000000000000000000000000..fb141ca055e8ee087ae61384906bce188ad9bddc GIT binary patch literal 4571 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 Vx<2`Jl?C1ewAJ<1Ua8nc{uj9W&MW`` literal 0 HcmV?d00001