ELF04 4 (444LLLLLt```((( Qtd/lib/ld-linux.so.2GNU89; ?~!dijBpEFJMNbS03qmst " y{XGILOQTVWg$'[)*-:%cK\#^z6<.Yl245>Ru }7+a@wv/|1o=A_Dr(UP,`Z&C  xH]ehfkna& D` I@@?I@ P !  &()*,/0145789:=?@ABCDFILNPRTUWXY[\_befhjknopqrstuvwxy{}~6hooooE3: : oG3:#:hffd̃@:hg̃@f̃@̃@ĩ@ĩ@k̃@ j̃@G-Gm̃@m̃@õ@ʼnppoppodopCEoppopoopoݣkoo9 l`2b֝pK̃@֝pqX̃@̃@̃@_Y`Ỹ@̃@̃@|!̃@̃@̃@oooooooooŹ@o+|ok C奃Y~̃@k|̃@̃@̃@̃@̃@̃@̃@6h̃@6h̃@6ho6hI6ho o6hon6ho.śo6hV41>  sFtvge>ovwW> @E6:9& \Ik=$oF:-@OOW^T0HLPTC XM- ~E 1u m 1u` 1u7`W 1u 1u B 1uY;! ` 1uK$ BB , 1u 1u  1u}Ȥ!&1uiM1u\a 1u?`81u`-5} d1uXh7"1uA 1ul!` 1upot1ux~Ȥ!| ,Z _l 0 h6 `1u` 1u,e1uv1u 1u `a1u1utK1u%qi  1u`61u1um  |ȤRuKX }Dh= r 1urJC % 1u` 1u1u1u k1u `1uU1u!1udW @1u\4:ɨ  822$<{ <(@\  D,libdl.so.2__gmon_start___Jv_RegisterClasseslibm.so.6libpthread.so.0closeopen64__errno_locationlseek64readwritelibc.so.6_IO_stdin_usedsprintfstrncmpclosedirstrncpy__stack_chk_failunlinkmkdirreallocgetpidstrdupchmodstrtokstrstrrmdirmallocopendir__ctype_b_locstderrgetuidreadlinkexecvpfprintfreaddir64memmoveaccessstrcmp__libc_start_mainfree__environ__xstat64libcrypt.so.1par_current_execpar_basenamesize_load_me_1size_load_me_0_38size_load_me_0_34size_load_me_0_9size_load_me_0_5__libc_csu_finisize_load_me_0_1size_load_me_0_40_fp_hwpar_env_cleanpar_current_exec_procsize_load_me_0_26size_load_me_0_14size_load_me_0_18size_load_me_0_22par_dirnameget_username_from_getpwuidsize_load_me_0_10par_cleanupsize_load_me_0_20size_load_me_0_35size_load_me_0_31size_load_me_0_6name_load_me_0size_load_me_0_39size_load_me_0_2my_file__data_startmy_mkfilesize_load_me_0_19size_load_me_0_27size_load_me_0_11size_load_me_0_15size_load_me_0_23my_sizesize_load_me_0_21size_load_me_0_36size_load_me_0_32__libc_csu_initsize_load_me_0_7name_load_me_1size_load_me_0_3size_load_me_0_30__bss_startsize_load_me_1_2size_load_me_0_16size_load_me_0_28size_load_me_0_24size_load_me_0_12size_load_me_0size_load_me_0_37_endsize_load_me_0_33size_load_me_0_8par_rmtmpdirsize_load_me_0_4par_mktmpdir_edatapar_setup_libpathpar_findprogsize_load_me_1_1size_load_me_0_17size_load_me_0_29size_load_me_0_13par_init_envsize_load_me_0_25GLIBC_2.4GLIBC_2.3GLIBC_2.2GLIBC_2.0zPii ii ii ii 9ii ii PXȤz`dhlptx|     ģȣ̣Уԣأ ܣ!"#$%US[àt^l9X[5X%\%`h%dh%hh%lh%ph %th(%xh0%|h8p%h@`%hHP%hP@%hX0%h` %hh%hp%hx%h%h%h%h%h%h%h%hp%h`%ģhP%ȣh@%̣h0%Уh %ԣh%أh%ܣh%h%h%h%h1^PTRhhQVhJ7U=̤t ҡṳÐU\tt $\ÐU(}t Ȥu EEEEUt M<=uUE)MȤETED$UT$M $u3EE<=u&UȤ)‹E EEEEEE}uEEUED$E$"UWS@U <=uE E EԸ}ЃEED$E$E܃}tTEܹEи}Ѓ;EU M܈}EE uEȤEEEEUut6E¡ȤT$$ȤȤudEIE$E}u EEȤD$T$M $}=ȤȤPEEEEEEUt M<=uE¡ȤU܋E)ljE$/u EyE¡ȤEEEU܈MEu }<=uыE=EU M܈}EE uEE؃@[_]U(.E¡Ȥ‰UEUUtEED$E$uUWV0eE1DžD$ D$D$$vyDžD$D$$y Dž`$u Dž4lj󤋅Ue3tF0^_]UUW촀ExE teE1$D$x$t'xD$$xp>xllЃD$t$u Džt<D$$u D$$5ehhЃ8tɋ=~'xD$$uxpxD$T$ D$D$$D$$/uX%=uFD$$ u,D$$$8pJD$$2xD$$~xpp}e3=t_Ĵ_]UEEEEE8u EEEEu׋EUW$}t Eu$aEEE}ЃEEmE;EvU8tmM;Mv}8uE;Eu6U8u$E}$EkmM;Mv}8tUE)ȃ=v E-UE)ljD$ED$$EE$_]UHeE1EڡEޡE⡬E桰E꡴EEEfE$$$$$$#$t$-h$6\$AEԃ}tEԉD$$$REԃ}tEԉD$$d$oEԃ}tEԉD$$h$cEԃ}tEԉD$$a>EڃED$ D$Eԉ$uEԃ D$$!D$$ Ee3tUuA$E}tEtE<0t EEEUpEEEOEEEM܋EE% ‹E% ‹E% ЉE}~E_M܋E܃E܃1‹E܃1‹E܃1ЉU܋E܋E}O~EEE@EE@EE@ EE@EEEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEUEE@UEPE@UEPE@ UEP E@UEPUE#EgE@E@ܺE@ vT2E@ËE@E@E@\]UWVEPEEE@;EvE@PEPUEBEPE‹EPE@\EP\@)ЉEE;E~EEMUE@\U ljE)EEE E@\UEP\E@\@E$zEU JHJHJ H JHJHJHJHJ H J$H$J(H(J,H,J0H0J4H4J8H8RD$@D$D$J$00$‹~T$$e<<u~<tdD$<$HH;D$ D$D$H$D$XD$H$ XYDžP8PDȋPEЉL$D$V$PP~E8D$ED$T$ DD$D$GD$hSD$$]‹ 8D$T$L$ DD$D$[D$DD$$D$D~~Ue3tlĤ_]UWEE$E}KED$$ED$i$EE}ЍPEE}ЃEE$EED$ ED$D$lE$ED$E$ t*E%=@u} tD$E$ E$E$JEE$xE}E$}t E$Ĕ_]UE$EE$qEtN}tHEt>D$2E$x;Eu&D$E$D$E$ UWE E}ЍPEE}Ѓ$ED$ E D$D$l$FED$$9uEċU;Eu E_D$A$E}u; D$T$ ED$D$ $9EEEEĔ_]ÍL$qUWSQED$$-E|EUBEظ}Ѓ$EED$D$9E$E$EUBD$E$FEEM;v]܋CD$$EE< |}BHSQ; Qws'r6) *cXt8z."#DTozd>'SEoV=fifTR4xr: _b)u0cHW8YYI_>-{6SQYC?5"!qw%B`APN To [ H%WIu[2S ;S [3JO}_0*~+AE.~sNVl:~Rp"2sY bckw Q5!VH4&'oAK+y+jzM )-dFDzvP)Cfq[ka51eolBWpRse_|WP 5' x/UP\\R`f  ;MiQ=6}GtjGdi*/IaI[cma^6}O* &vb(a*v_JI7+ i<VF7J`rhf/ (2-"L? mE7M5br)|v}pnDU&y=xu@H5;%6`Z  :%U8]@y{mgUo<U V@ p:t-{2a,p^ -Y cb*LxZq.\#o/r!my >Y$Nu ,is(PP7BN4m7h 8yW=9m1>Z;c0\lS :?D*(M th2ZT](1/NW62bcOm1L4&i>ne|A] $rh+m$a'OOA@vIPW,Z_+M<DE|tjD~U);Xv$0 K_ Aildlv<FF 0!Z#FNL"t0hT3jrh$K_jX$%sgqeB17*u1P.>CfJN4+dpz;!J1K}9zaXA,l$qJg*"[Fq.^]:9)Y?Nx+4nd^h{Cb#-cT,:V9|C@k7\8rW3!D=8M{C)ERFb',It~'8Fp>UeeDKa PdGZ^R7oE6X}j3k#M-^GSsO9Kw@fe<(95G=Gh|Q3i}Unw~eyR9<J| /~  M!i.H"2:&1^ZMQn^$/yXj{dwf!wJ%nH&k]=]{VGL  g`(n =Bxz1J?c/06gTxb,ogFhk[484(mfR'XBl`dI&p& AQ] /3\la3|{ k&OuvCC! ERs@$g\.?N[9^~V0nQT9{`K>q BkEB.V@t_EqYx<;g.)# ,j}XIz#:u- y`2y@WH?4 @R @#(0A$A2Y"VAĂ"I I 0HHl@2(t""  h!p@@%F@@ 4 A8-3@A:0F  AH1J' `8X#(!@E3 t @b-ب1@  0!A^@0=AD# APQ$D`%D(T$ h@!yfJ $$P 0  Dl(L  B,P@B L2BG2D@8@ TD8@  )(Ġf`JFBD62  h  * `N@Qb6D!5@ A@!4 B8`@0 @@HA D(g""@V0b1H 0<Wb@#@*rD(@Pg @@@%(0 (Xr@"$(! Q2)@P bLH"IXh#I$L!@'0B @@BaF4(T"]`8H%0  @%!(\)@i "0 8 &d&DE % %P BXVL"`EA` @@@@L Bh NB$Pd@" R@(e @!h .`""!@@:EAX  D" @H @ A 0@ 1Lp*0 @E dB& @@ PA@ D@e @11Q 4G@! h( , 'x8g\F # eL 3) Q  F@@e["F"H%h.`@BT  HA", @@D  S2Q$ tB B@!K@s@,"A(1J B6B"(!<QBe@`9A8# #Q(@0$HS` k4P%H1d@Ta  @ DP@$H dQP Hpp  `BBT!RZL9 A@@(@M4EE5( 8 @q(@L1 H-%aC Pb@x@48d '|f`'0D  @  @ ,8P0&((EA(( J0@@@ (T#F@@  !@!,^P@0G 'DP '@r@@  "#()*./468;=?@BDEGHJLNQSVWXZ]_`acdekmpqtuwz|~    !$),037:=?BCDEFGJLMOQTUWX[]`beghkmopsvx}~   "$')+,./12367:=BCFGKNPSTUVXZ[^`dgjnqrstvy|}  !#%'),-/1468<>@BCDEGIKLOXZ[abefhmqtxy{}~   "%&'*,-.34<=@CDFGHIJNPQRTVY[abcefikmquwx   !#&')+-./0289;=?AEGJKLMNORUWZ\^bcdknprswy{~    !"$&'(*,./145689:;=>BEJLMORSUZ\^_cdeghimoqsux{|~   !$&')-19:=>@BEFIJLNQSUW\`acefijknopstvxyz|nƎFPZ@GsxbO῀!e ̿Դ$)ZFm<Y.o,b%ic㍉\P<=͜&j[a.nkت-CjR>Q@au Yg/N$ڰTAA0Z< /c8 ͤvTb>}L=׉\+(PI F#_ˇe΀^lHӀBΉ.U#j_Yvaz?zk7gaQ9s-;q~7)z76'd: (YTu) Pm@ga]#_)b'Ƿwv_J*clQxנYW.IGK CD1-ք-PJEיִSauP6Wx=fUnk o\bmY $y9ުZD"ހL2QnnG@ VnJd er@^>ݔ/8QaY^2whNK7jXHĝ^P\=L8ٙ]]©atoc!$~<n5P۞Q/h+B5A xTY!Jjv2T>]G@YԌOh'֮`GV2D&-eGlb̶c~OnqD 7cv=CE ]nY$9e(9G-;u|'T \ܟVY`Io#_ ttfJFA1 g]DY$f!*#Q8|B}VIYN٩ItYz+(PnBHObzWΎhLYn|msK}fَL80](Qs~:|:&!| 8dk2'+Mr\@(G_n?  0.4w?yw.lE\<=J?yy LO;:j<{Җl .ϥ[%'~2kYj $v94Ayk#}U/J \ldQP\$:g.?&(_^&fxCss2$2?bha bY^+RîT8k0IXq 6mni DI̛Y~>o}MxhwQpaz`ƞ7?)̼'驪q!F}a@[.:{7@8G iĮX=YsJfdҥagP1h=PMCPb *žnY$ T0boQ/AO 8~pMNTganzŸ(T]IEXHC؅kBWD)E0KJs/O}mAEL@/^ sԑۣTs9hao*͗ YY^?zl}~dm:'p #ړrU=.`E>mDxTF_{hp*oyv@b);v, lHڭU_+yx.3ҖjmxP((k\'JgᮼqX% >BDOe DŽZZ55\!1$W*ͽל41=)J-]Sw7q3xuq̠jgV (<;}6ELFPֶQ ?(ԛ])I6~k]x9 |Y-qfnend_3ccaSwODomXFbQE H“ȇղ1MVD op>Y'V 4!} ,ԇێFG<쐑zF>&3Ckq#V S{oD4Rr9\Ae8#什R+ΗLGUIb-49'x=sHPA?x7+Bݜqa~Ou<=#ZOyƌY7i-Mtpݙmc +C[jPC?Y9F%Kr(>HDAJYo)f/i N(`9A?}|hz9l SWYnQpDew'R|Pb=s@<`L7උoH[EL5둛 yR! jhg;[H \=Ej0L'aKy>Icto8Cҫ{ha,H>8ŧE7s%&}B4(h.llA)I.Xs{6hFvKdn2a7]3hkf c_usғOq@o*DR2ivȿ#^XِkjYڅr[FGd/h%4ac1fOd9e1_G=hS<_6}jE]2娵)Z4W1=⿚{ 0q[4Q' ޕq(%Bxj 88~T]WNd SCE힐W=|]xU $_yr7AdUVfP,pRh0# W\P'j}_M^u͋)J{HIipyp0ļL"~N$' 3xvtè\qYpb $׌[0uir pUsx':b\~$Cf4 Vlcso àŋc ~[[뤪~Y$CjR;chiBސY rw{>o8 !;`|-gFn  =i`Tl2Gb'-31ֿhf_0mi0ΧX~e6WqJJe2 /@d|` ŝtmY=7hg2}а̥ L\)ĉk†8[QQ65Paek@}~HDbCvTIW6O8="hAZ~ -0ʪY_*%/:F˂AkT0IF7™)H޿_/=iG~uB.V$f)P5 _V=D|NYCLYd?K ȰpDL& 19DHY O,3@k/kz="~6R` )VJ4[X! -_DX o/s)2 =F_e}Z\u0)? k5Q䝚3Xk)Dv6W-6ڳW%<]A< @H;dǤXlWI }_WYGeZ DJk >;ąSM&WUI٘LUA<Ȟ㤭Yab2D6/Wn|,P3b`W~vUѨ8UV !8;ReG(%|GR$SѻJ%mT$O7&ñq<U)J?$J1iղqLB3iڬi#A8#(O;\JHNJ5BBE60Mb B+V5覱{|Ņo/Wn< ._gUC~,s)R^:|YQkD0lgNP+D.IʘOrKl2d^&&&j r>_'h `K /WnhmMz&laYJA HL % A(уLܓ͖OOkJksK‹(g[,̛  v<=^<1X]DƮhOhQ}_;zԟ8gB˵ha `K6GLfFL0 uwsHd9V)) LY3#AXg[ⲥ` ]،`:==^}ܧ(r/K(Aqתx<H3-wV߾:RK_F9{eR6gq׀+ ''ZH5V_^7ᐛ*R0&xZzch_Fۦk KiI :FƿRHKI)6,Eq:EHӄɮsKQsܪN}@ˊSRCTz7;o`] !:V)-:!ZЂUeCZuTs#"N>zV<"ou{@XJDx=f,U֍`%l5-;뢊 7A13-7e*Ib*7Z;j*Jaos>VHni뽜ژ|*m>mKޟc ov9zcY#w\LV%>cn4m\86mp> -OC%`_g)X,H0d6&Zdx]HhŊdD{L\;85]eWs(W|4Ld.Z{{6z>pnSKC̶Rw(+^DE}_.?1>Ib8æx=S9(mML|?߫ʟ/BD9@^> sO2]dKRrS;1eCZy}`5lں9;#.MԸbI? p!'^:7az?2Dk!$ 7^¹1/?BET$U#$ۿvDT 7= 0l}M1Cq}j{QNhZ8MqTMGg&gbF*dCms@k`T#:Uw4=<\;u= Qu"e'|e1Cmga3Ša+bX4ҟS]wӌ_24ϽK k;{͛Y5S՛ޱ,}_x+Ͻ8XۼKSJIR!FdzF EJ'y<;R4{l'ZM/Z`-[M/S9)zIv,+&8Y'%ϋWxi2]UY٦K:dV]3nJpOZ7Wo3ӣ[Gkru%MɈTGv7B%Oq~`|AILa˱:iziGAg@c"QsY;Wii[?A }O[ 6i Zx3Cىto[V0(,KCWJ}X{{.F~}ؤPx]Q9SnX`Ei+*^P#[>EXjhu⍸2[maTPĤ*,1˼$O|@9-!e0bYל^ D٥i5YkvA1ANJ՜BDHs7P\fA\Tz`^: K L=b MfF,!;8M=6P$.%HhDQ % &s)&4F,\gF"=E:gKFr7& 0FFPPZ#vNrGi=@hM=/ _,EJ> X2LQB {)I>F`}vpH -?H2\">0I<@$9u$Gl1F2II>PgwL>G|Mj, 2#TI@~>f~,J,IMrJ>M@M=$>@;-IV4K2OW<fJ ,W.:"< FI>4P;,5?&HEH:I:҅EqIX Jv?G~~"$K: PKK:M= 6 F 9+, 3J\~J kDYDJhvL6rHMjs#d5'EEWIZ>FGlg,FaI:M?J:5!@-VJlH'rV,J@RH.+<@H[Nr#S;? ,$L&J@FM=MEM>+F4@XJ>}>,,0Q:K:\ M=h &L,I>}t I:A?&L=Nr~T)5"0EP>s, 4Hi  Kn0  cy  gBj c &z  p  Z K`C < 6`  ?Vl M # > : #F y    e f?P + (n  F : ^ L  G` =  C- H XcA  !00` 1P  NJ`s  2 0/ _@v  [s  k  ; j p  ?  O@  > , P# s| 9 XփQR Uh 3P # %0oD JK  D X VP| C  P   / d@z  0`- +З  MP LBh d m0m  Xb+ O  rF9 ^ DP  &} \ Uk C5W  ?  50d [ %`GZ hz   ) _v  0,< b7 I TA 9 x y  PPU `K t <  @FW @2 Ja T d`z  &cy  _u  9( GD # Yq  P . 1Z  p@  p o@  bx  C / N  2p&  ) `W +' #L# ! M=   S  | JPm  2}\ 9B ;]] _"7 KP  * )i~  r-0 t  uC0 c ~x  J@e> `pr?  w3 6 /0u E *pUV  w   /S? / Ep7 # :V _D  ^pu  f (!^u  ж_ ;  M- aw  Lq  > $  - XhP}  E1 D b   6;f  )fn 2u d0z  6 o 0`f  V Y6 ; w@  F: % ~p( GO # 7s Z$PX _0v  g`Qs >0 $ _v  5e R 8- 2 x& ,  ;K  6<V }0 4@$  @0*  9? i S #q 4%lA }  O =cy  .So ; # 7  &@ 1 >k  :L  Xhn)H (T k i~  pnP  ?*  ]hP G pF R` 2p  HQb5 !~ s@  I`n  ^1 6 > #2n $p |p    ?BPh c 9  Sk jDJ @z  AP ! 4t + W t~4 *;0f i jL >  AC@~  M) K W#P@( \ t  =`  Up w&  2=0    pCw  I[r  y  xN ? 5@  sp  `' f`{  M Z r  F1  P "\s  ! B^ Or@  xЖM -xp  A2 Y S0k \s  r  @  m dPz  Nо  d9^ *y0  y> ` @Zq  \ps  K  O  #1PK {b 0Є3 Q 1 g|  1p T  ^ ^ D\ c/Z   Gb  'F J@p d #E <  W70 J qNP Z K b 7@ R +/  m<  `Pl @:  HU  \ |aw  3n 19 ` w   $Y W O4p E Q  8 -  >  2@C h= L0  n$ ]K cy  8P,  n  * f{  S `d ):p_ 0i '0' 1  <p d .8 ;n   ;   #[r  q  q` '9 0  {`l j0  @x  @@ p h}  ;p  ; Y 3 xЉ  Yp .8  p Uk  t` ( # n 8, 9  3d C  Yq  .-0D s%nD 0 R @O 2 x  O Js  ?  D|`c )а<  0  " >A =0 - R- @o %ov ]t  ?y@  GpQ # D #  4v   F (X `L M0 x 6 $ 4P k VR|k >90 K 55p   'LЎ  ?  T` :``  pn  Z3 J6_ "($@N n pF *(>  6 K p -") O00 Dgp|  <0? r  ;@c  `P  z n   ,#p? uP @ Bm [.0F o fA  PhA y `@w  y  g|  3 > AT F: ^ C  [ N $M cGI # `g v  Z\s  7  @4 ,  Rj  /[Z L  k  `lZr  xpwc 3dy  ^u  0 V0 M0  / ck f{  r oP  Pe 0 g|  0Z =p  !P69 2c# ` w N ,HR # h}  .  g^Pu  |p$@d T p]7 3  Sk #Fo `0w   { O  [ s  g|  ?  "=8 Gg  g+ 0pz[  m4(  c2  u  D& { w`p  MP  * Ah F8 h l   z  %@pD RO 2 m K i%pm +S- %@e ac c S-  r ~c ]t  PJ 6 U @[  h w n  c`y  c9 <V ` h i~  X% mP v  aj  f|  `[ #pI~ O"p7 9/ 9 cPy  Pp_ "7 )0 }<V E?0  PP \ q  k E+ 'U Bu  `v  ^u  `EP0 # I c  -h dpz  j@  t18  0 H[ W ~r`  (P s0 1_ } fY ; ( Yq  W`c' 3 K  a 0  XK  C # :|' ZyP  J`w . hY@q  ik  - 0Y aw  ez  H@d p' @*  WC qT0- m  ] T Bt  '`n7 D JNP # 0y Cp  @f YСr ~! . ~6 E ` PM@  2&p* L  p0  N # rdz   tiR (P@`/ @@  SCЁ - .`v  X  SX`4 K# 3 | \s  qS j~  pF4 lЀ  _`v  X s ]t  pU op  $K 0qp  ;_ ts  dh_v p@P% ~ EH l`  ~( 5L V Vaw  A!,g ~A F  0 e3` ` @S0 ax  ,D  0* Ҁ, UW  ziP~  +P >$UW # ~@(  t  )д#  @l> W3 @) z Tk e@{  QE@,  ] "07 ?  cc0y  !@/ {  zWo A~j bx  3D  h}  Bu  cy  ; # z o"7 -`G 9Xx Hdy  Baw  `O   O.)e bu   g Q PC) 4@- c !Mt  Li ~  FP]S ~ v= % h0 /B L  Ap^ ^ v`  =NЊ  EwЈ  -t _`% +<  O  (Q  '  E тCX  y[r  7`p^@4 cQb < 1< !|p 0H 2,G f8p) n I e  e1 qP  p  ( V8) T g}  ',  M  Qc y  6[r  0 0o  mp   :i~  WN  >=  ;? TW *0] z W91  8$ j 9@ F  $  _q  -?P i i}  ]t  @/  N # 42  PD* (П   ip~  !P2 Wg|  < pZV L  4 3= Zr   kP  Zr  {  0mP  >  I >  Y @_Y  7 Z =  `w  s( i; O* s`  Q5`\ Y Kup  pm  OD H Xp^ Q 0I {'P4 7  ? N  = OP  (  om  wPZ `pV  `pBh@}  t]t  H À+ !{@ p| yD  c `n M@ # }"faw  5d } oE0 # P^ W  UP8 uЇ  L  ]) 1 x b0x  r    K| 0  ކ59E+ D QI@`  T@- @`v  R`k r  +Pe I = + =XR u#PAx 7t  k0  l  8f{  cp  ` .-  0Ј O 5 [Ps  0{ 3  o`  |` dN  !P3X 5u =U0 Bv  iW X< {P - T- GQ  sЅ  4 # -N  4q * L [i0~  ?` v =  (^ u  T0k F@ # M : Zq  -+ ~ C  &G ]u  =  fL  D   i 0& dy  @ 5 X6 2 %%P  D : &2PE 2 8. 2 AM + 5Rb + z0:  p7 70BM h#@ JHd  0  f|  m  k  i~  /V p  "$  ( >  ZPr  t   mЁ  0p 3H =  /[| j d p/Z Z>  i`~  1} l `pSSk I  X / &fp{  *aB B}   qi W@ <8 N  \s  yЊ  O& 0  GQ # GPD # `+` ( Af S 4E u h}  P~ g|  r  ]a  +Pz S^@u  s   p |` ~? *P Pn 0Y } W! N / P~P %P {0`@ Cg~ `)P9 mg|  )  6y |AK  "%ps   3O  P @+ VP :Tpk O  o  LT j_ v  ;HS  J 0F 1]`t  1~B J0  VP$+ ?  Bb T m  ^u  } `@@$  4/  wl  cUW i -aw  yp  $`_! 7 ii@~  0   ,.%M H[ #  !2X UW R;i   <  !z 3o g|  96 $ D'? EM m  C W _Pv  s`v  @ /  3>  \t  H_  AK ' e{  )@ TZq  FA8  K # &`1 eP{  q  lez  ?0 i h}  !gP|  d@Y8 pl @8( j ?p  M) J   0- "c 6(U WL  h}  p^Y <B  :K / u L o s  &   D  0x [0s  h}  |` l 8 .P+ P5 `!-G ` -0#  ~L  0IM a`w  PPY q`  p n2G  nX Pjp  rq  h %uP  d z  ## G]pt  !Yq  oЂ  Dp2 g `Pw  N/Y [s  @ 5  c~ F>  /w  pK8 [`s  3 > <  rPlH r   I@g  %{# ] (0 LЙ # T- y4P  t yXaC 5C|  gj c +p?  K  )d { k@  #C{   1 7bPx  p4 +70 @ 9 h ny`  {R? 3  a m@  4D  's   N  a='  wP f :]  0`4+ 0}s \t  1` } A m0  e&P0 [@s  he uQY Z i >^0u  Em`  M0  d6@ [f{  |c@y  R K  `  `w  jXo` ؁9| q cpy  +/UV n  !`n @H {hp}  E7 h au  grP  %X hR@9 != /B0c t N q  u  Zez  $5pe d A_v  a|  Mb`x  HV  ] V 9/ : _s  wH@T  +b  " = 2 7 Iez  Q> c5^ R lD # S- Y1  112 2 =  L H @+  )5 {' :J 5 z d `U} r _0k Ao  K<   t  [q { A0a T dz  =D ` |0b F8 h V  5 i , APZ W uUP8 UP : 2 vp  =  cx  H U  * sp: iI a  Kp  D  : h 0' #| `= r  +Jq  Jn ] ~E0 D 5` \ `M t np  N:@f b b q _Tk uK  1`p ]t  D  ^Py p K   w 3 :K  ?  G  "@  +]m Ɂp7 Ypq  L ; M I3<   E Z; B"@b, a]t  Rеk 1P I`d  @q_ o  # 4 P su  p QPr 8.  G K0  : !dy  {2 >O  fK  c E%lP _4 p 5\s  0Mp  Tx  p.  (j~  Y  7L  ^(p xj   [| B PjA FW L_ Sz  E# * 3 a Al  >&`V L nR G0t R K  l  N{ p  \0t   0\=  =  )2 q  tGI  C  29 Yg c  ) z l `p J \_ 0  Z<X u  5Q  a x  n  K$  I@ K 'D Bo  ~{ $lb m V .pKK ~( {z0  ]@t  7Po { @s  ,\ J x  Ё R`- P"Z o   94 c `a r @ c}  E@7 # .,N jo  h E et   z` a;s H ~0( Bu  4 ::l r  f@A u  @bP u0  v  9'v  83S S  nJ`u  ]Pt  s*мw ez  5s  bx  1 7 $g Rp> j * f91 D J{ \ * aB O  @.  ; z  } pT  $f PO  * 0| Fp@  n7P  (`  M@  y@a ~ R@k X> d-p U Pp#A5  m  b aw  /GD  C{  2ez  Er  %V k[r  qЄ  ߄_ XlE %ph } Xb( s0  3g`|  + _pv  l\s  o@K   C O`  `#p " ._u  ez  U ` Y 'P | |D ,QU0 sIy /bA vd< = , YB0i d +R IY? n' |P 0 Y`q  :7p Q z w tw  bAA  e`i; [r  *` k2 e{  0"X )8, 2 e  5`` } C;h   u@  }  .I `v  5Q U ;  Op vBpn k h }  96p R [[r  H  F@@ # J@ \n@  q}p? 0z` w  N( W ? i (3 # V +l  P 7  = ąP { 5` eSP- rp  Jy  i~  V1  94 K y:I  9G\ { o`s  &k  N&E Zpr  Q  п2 dbpx  4A5 W 8 e0{  -Zq  )  S  +, :I - o0  R- .4  S_v  0 Q `9 -0@h z@ Zq  g@|  7 9 J $]D Q@#  ^u  x  y  :pK N } Tl  @. ) UP8 HW   & X@ q Ep* ) w (W ?/0V l 60 9 A^  f |  @F  Ba c i~  v)9 /0T )&  ~( {P "Z  ! %z D t  t5_  GpO # + x`  @ @04 Q- ăO  R2 5 .%C '` 7Ww   # v ">  |^`u  WPG hHf  &  vP  "8  dhv@  b J ^u  H#W J B p Q!,- W'C - } m> V T0i }u x `T  f b@x  o!P- ;J ?@ ! \ c :F8 h iA 18% n P  5@h U (@ K L  WKp  L@E ИJ f{  ~9@2   M @`,  -` @@ ju ΆR N !0c  PB ix   >  k6v k   KQ tІ  #p> Uг .R D  @ QV W`v  r;u U XVl 7r0  l  YHS  !8@% T 8*P J}  Uo  y` PpO( C4   sP  (O apw  -@  R k  Pl  'U- !? ! yIa  N A04  z -_ !p  ._IE u < ` T 6 , I Q B 9)  .Yq  :| [+v 0+  f{  |V _*Ps 6h 6+pL ' x  ,3 jP  bx  %t Q@- > 4  V J1 łpn k vZ e {  _ &K   p m  +h0}  1e  }YPq  O0 E 02X ]t  P@& #  k 9P4 E &. HT # HRzb lp  g0Z D20  `C `1 GO  1Ќz G hh`}  $^R l  Z@r  cy  Zmp  > 4 n`  @r (6 m /`[i @+ n }4 X c!  u  e{ W n7 J / b u8+ Z A@"  lf{  /"P7 u\ :X? Z0r  N0  &@ Z`r  K7 Q * % !+ I ] , >`    ?`oG HR # TЫk p` T Nн  dP' &|* f0|  0W #)1 _dz  2k : TY0q  PP  ]<p  VF`9 ^ `d Q < KЉ  N  W@ %{ L ; w0  ~k } pt 3  O|b { % t  _u  bp oV`n *b p_ p ^J`t  dC  60  T 5`b Y 3$@Rf N wP  N@  r ~ r  $ [ {bx  D  @] Y %IP^  nO # t  `w  @p  w  +|' SЩ K p 6u`  k  w  0 4  b:r {7 q6 <{` n2  oMp  % UQ f RGpI #  @ c 92 > @H Tp PQ 6n `D 9P3 e Wq ~ 2 Kf{  k  P # I\s  ;`e  pAD T EP1  W@Y E`3 :_  zS i}  y  !E+ D pe ?Y q  %q s G y  ̄ _  Hk N hl  S?  Ib  T-   )  __gmon_start___fini__cxa_finalize_Jv_RegisterClassesPerl_nothreadhookPerl_sv_freePerl_dounwindPerl_pop_scopesiglongjmpPerl_PerlIO_stderrPerlIO_printfPerl_my_exitPerl_my_failure_exit__errno_locationPerl_croakPerl_get_svPerl_gv_fetchpvPerl_get_avPerl_gv_AVaddPerl_init_argv_symbolsPerl_sv_setpvstrchrPerl_sv_setivPerl_av_clearPerl_newSVpvPerl_av_pushPerl_sv_utf8_decodePerl_init_stacksPerl_new_stackinfoPerl_safesysmallocPerl_init_debuggerPerl_gv_HVaddPerl_get_hvPerl_doing_taintgetuidgeteuidgetgidgetegidPerl_my_unexecgetpid__xstat64Perl_newSVPerl_sv_setpvfPerl_sv_setpvnPerl_moreswitchesPerl_newSVpvnPerl_sv_catpvstrlenPerl_PerlIO_stdoutPL_do_undumpPerl_formPerl_parse_unicode_optsPerl_ckwarn_dPerl_savepvPerl_safesysfreePerl_newSVsvPerl_grok_hexPerl_sv_growPerl_uvuni_to_utf8Perl_sv_setsv_flagsPerl_sv_catpvn_flagsPerl_grok_octPerl_my_setenvPerl_warnerPerl_newAVPerl_sv_2pv_flagsPerl_sv_catpvfPerl_savepvnPerl_magicnamePerl_sv_magicPerl_pp_enterevalPerl_pp_entersubPerl_eval_svPerl_save_op__sigsetjmpPerl_taint_properPerl_stack_growPerl_push_scopePerl_save_intPerl_free_tmpsPerl_require_pvPerl_newSVpvfPerl_sv_2mortalPerl_eval_pvPerl_sv_2boolPerl_call_svPerl_block_gimmePerl_push_returnPerl_cxincPL_ppaddrPerl_pop_returnPerl_call_listPerl_av_lenPerl_av_shiftPerl_save_freesvPerl_markstack_growperl_runPerl_call_methodPerl_get_cvPerl_newSVOPPerl_start_subparsePerl_newSUBPerl_call_pvPerl_call_argvPerl_sv_upgradePerl_hv_magicPL_curinterpPerl_hv_storePerl_mg_setperl_freePerl_PerlIO_fileno__fxstat64Perl_sv_getsstrncmpsetegidseteuidPerl_candoPerlIO_rewindlseek64PL_sigfpe_savedPerl_rsignal_saveexecvPerl_rsignal_restorePerl_PerlIO_stdinPerl_setdefoutPerl_newHVPerl_savesharedpvstrrchr__ctype_b_locstrcpyPerlIO_fdopenPerl_rsignal_statePerl_instrPerlIO_ungetcPerl_sv_insertgetenvPerl_pad_newPerl_boot_core_PerlIOPerl_boot_core_UNIVERSALPerl_boot_core_xsutilsPerl_lex_startPerl_yyparsestrerror_rPerl_find_script__strtol_internalPerlIO_openPerl_my_popenPerl_filter_addPerl_ckwarnPerl_rsignalPerl_save_pptrPerl_save_I32Perl_gv_checkPerlIO_binmodeperl_parsePerl_op_freePerl_get_hash_seedPerl_sv_chopPerl_filter_delPerl_call_atexitPerl_safesysreallocPL_memory_wrapPerl_croak_nocontextPL_thr_keypthread_key_deleteperl_destructPerl_my_fflush_allPerlIO_destructPL_use_safe_putenvPerl_PerlIO_closePerl_sv_clean_allPerlIO_cleanupPerl_ptr_table_freePerl_sv_clearPerl_free_tied_hv_poolPerl_reentrant_freePerl_sv_free_arenasPerl_sv_clean_objsperl_constructPerl_runops_standardPerl_sv_nosharingPerl_sv_nolockingPerl_sv_nounlockingPerl_runops_debugPerl_peepPerl_pregcompPerl_regexec_flagsPerl_re_intuit_startPerl_re_intuit_stringPerl_pregfreememsetPerl_init_i18nl10nPerl_set_numeric_standardPerlIO_initPerl_reentrant_initPerl_hv_ksplitsysconfPerl_sighandlerPL_NoPL_YesPL_sv_placeholderPerl_sv_2ivPerl_sv_2nvperl_allocpthread_setspecificpthread_key_createPL_op_mutexpthread_mutex_initPL_dollarzero_mutexPerl_is_gv_magicalPerl_magic_freeovrldPerl_gp_refPerl_amagic_callPerl_pp_pushmarkPerl_mg_findPL_AMG_namesPerl_newSVivPerl_gp_freePerl_hv_deletePerl_gv_fullname4Perl_sv_backoffPerl_gv_fullnamePerl_gv_efullname4Perl_gv_efullnamePerl_gv_efullname3Perl_gv_fullname3Perl_gv_initPerl_gv_IOaddPerl_gv_stashpvPerl_messPerl_qerrorPerl_is_utf8_idcontPerl_is_utf8_digitmemcpyPerl_hv_fetchPerl_warnPL_sig_namePerl_gv_stashpvnPerl_newGVgenPerl_newIOPerl_hv_clearPerl_gv_stashsvPerl_gv_fetchmethPerl_gv_autoload4S_autoloadPerl_sv_untaintPerl_gv_fetchmethod_autoloadPerl_gv_fetchmethodPerl_save_scalarPerl_load_modulePerl_gv_fetchmeth_autoloadPerl_Gv_AMupdatePerl_sv_unmagicPerl_gv_handlerPerl_gv_fetchfileS_autolenPerl_lex_endPerl_pmflagPerl_keywordPerl_scan_vstringPerl_yyerrorPerl_yywarnPerl_save_itemPerl_save_sptrPerl_deprecate_oldPerl_deprecatePerl_scan_numPerl_my_atofPerl_sv_setnvPerl_grok_numberPerl_sv_setuvPerl_PerlIO_clearerrPerl_is_utf8_alnumPerl_sv_pvn_force_flagsPerl_str_to_versionPerl_utf8n_to_uvuniPL_utf8skipPerl_is_utf8_markPerl_filter_readPerl_PerlIO_readPerl_PerlIO_errorPerl_utf16_to_utf8Perl_sv_usepvnPerl_av_storePerl_my_pclosePerl_utf8_to_uvchrPerl_sv_cat_decodePerl_newPVOPPerl_newPMOPPerl_is_utf8_stringPerl_diePerl_av_popPerl_av_unshiftPerl_yylexPL_no_myglobPerl_newOPPerl_allocmyPerl_sv_recode_to_utf8Perl_save_vptrPerl_save_generic_pvrefPerlIO_apply_layersPerl_sv_catsv_flagsPerl_PerlIO_tellPerl_delimcpyPerl_append_elemPL_warn_nosemiPerl_cv_const_svPerl_utf8_hopPerl_pad_findmyPerl_av_fetchPerl_ninstrPerl_newGVOPPerl_newCVREFPerl_newUNOPPL_opargsPL_warn_reservedPerl_sv_utf8_upgrade_flagsPerl_utf16_to_utf8_reversedPerl_save_destructor_xPerl_scalarPerl_prepend_elemPerl_block_startPerl_append_listPerl_newSTATEOPPerl_newLOGOPPerl_newLOOPOPPerl_newFOROPPerl_scopePerl_newCONDOPPerl_block_endPerl_newWHILEOPPerl_modPerl_invertPerl_intro_myPerl_newFORMPerl_newMYSUBPerl_newATTRSUBPerl_dofilePerl_newANONLISTPerl_newANONHASHPerl_newANONATTRSUBPerl_newBINOPPerl_newRANGEPerl_bind_matchPerl_myPerl_newGVREFPerl_utilizePerl_convertPerl_oopsAVPerl_newAVREFPerl_refPerl_jmaybePerl_oopsHVPerl_newHVREFPerl_newASSIGNOPPerl_packagePerl_localizePerl_sawparensPerl_newNULLLISTPerl_newSLICEOPPerl_listPerl_newLISTOPPerl_newLOOPEXPerl_newPROGPerl_pmruntimePerl_my_attrsPerl_newSVREFPerl_linklistPerl_ck_concatPerl_ck_matchPerl_ck_nullPerl_ck_svconstPerl_custom_op_descPerl_hv_fetch_entPL_op_descPerl_custom_op_namePL_op_namePerl_sv_newmortalPerl_ck_bitopPerl_oopsCVPerl_save_hintsPerl_ck_rvconstPerl_pad_allocPerl_ck_anoncodePerl_pad_add_anonPerl_save_freeopPerl_op_const_svPerl_cv_ckprotostrcmpPerl_pad_block_startPerl_newHVhvPerl_savestack_growPerl_op_refcnt_unlockpthread_mutex_unlockPerl_op_refcnt_lockpthread_mutex_lockPerl_op_clearPL_checkPerl_ck_ftstPerl_pad_freePerl_pad_swipePerl_op_nullPerl_newSVpvn_sharePerl_scalarvoidPerl_scalarkidspthread_getspecificPerl_refkidsPerl_ck_returnPerl_ck_sassignPerl_cv_undefPerl_pad_undefPerl_newXSPerl_newCONSTSUBPerl_save_hptrPerl_newPADOPPerl_ck_methodPerl_pmtransqsortPerl_uvuni_to_utf8_flagsPerl_swash_initPerl_bytes_to_utf8Perl_newSVuvPerl_scalarseqPerl_pad_leavemyPerl_leave_scopePerl_force_listPerl_ck_repeatPerl_gen_constant_listPerl_pp_anonlistPerl_listkidsPerl_ck_sortPerl_fold_constantsPerl_ck_subrPerl_ck_listiobPerl_ck_evalPerl_ck_funPerl_ck_substrPerl_ck_truncPerl_ck_joinPerl_ck_shiftPerl_ck_selectPerl_ck_requirememmovePerl_sv_force_normal_flagsPerl_ck_openPerl_mode_from_disciplinePerl_ck_rfunPerl_ck_definedPerl_ck_lfunPerl_ck_lengthconstPerl_ck_indexPerl_fbm_compilePerl_ck_grepPerl_ck_existsPerl_ck_execPerl_ck_exitPerl_ck_eofPerl_ck_diePerl_ck_deletePerl_ck_spairPerl_pad_tidyPerl_ck_splitPerl_vload_modulePerl_load_module_nocontextPerl_ck_globPerl_apply_attrs_stringPerl_newRVPerl_sv_cmpPerl_pad_fixup_inner_anonsPerl_hv_existsPerl_newANONSUBPerl_pad_compname_typePerl_pad_check_dupPerl_pad_add_name__rawmemchrPerl_pad_resetPerl_pad_pushPerl_av_extendPerl_pad_svPerl_do_dump_padPerl_dump_indentPerl_cast_ulongPerl_av_fillPerl_cv_clonePerl_regdumpPerl_regpropPerl_regnextPerl_save_re_contextPerl_save_boolPerl_vmessPerl_sv_len_utf8PL_regkindPL_variesPL_foldPL_simplePerl_utf8_lengthPerl_repeatcpyPerl_newRV_noincPerl_to_uni_foldPerl_sv_compile_2opPerl_sv_utf8_downgradePerl_save_freepvPerl_reginitcolorsPerl_debprofdumpPerl_watchPerl_pv_displayPerl_sv_peekPerl_set_numeric_localPerl_sv_uni_displayPerl_debopPerl_stashpv_hvname_matchPerl_debPerl_deb_stack_allPerl_despatch_signalsPerl_debstackPerl_dump_vindentPerlIO_vprintfPerl_do_gvgv_dumpPerlIO_putcPerl_do_gv_dumpPerl_do_hv_dumpPerl_gv_dumpPerl_do_pmop_dumpPerl_op_dumpPerl_do_op_dumpPerl_do_sv_dumpPerl_do_magic_dumpPerl_hv_iterinitPerl_hv_itervalPerl_hv_iternext_flagsPerl_hv_iterkeysvPerl_sv_dumpPL_vtbl_svPL_vtbl_envPL_vtbl_envelemPL_vtbl_sigPL_vtbl_sigelemPL_vtbl_packPL_vtbl_packelemPL_vtbl_dblinePL_vtbl_isaPL_vtbl_arylenPL_vtbl_globPL_vtbl_mglobPL_vtbl_nkeysPL_vtbl_taintPL_vtbl_substrPL_vtbl_vecPL_vtbl_posPL_vtbl_bmPL_vtbl_fmPL_vtbl_uvarPL_vtbl_defelemPL_vtbl_collxfrmPL_vtbl_amagicPL_vtbl_amagicelemPL_vtbl_backrefPL_vtbl_utf8PerlIO_putsPerl_magic_dumpPerl_dump_evalPerl_pmop_dumpPerl_dump_formPerl_dump_subPerl_dump_packsubsPerl_dump_allPerl_PerlIO_setlinebufPerl_rninstrPerl_ibcmpPerl_ibcmp_localePL_fold_localePerl_my_swabnPerl_get_op_namesPerl_get_op_descsPerl_get_no_modifyPL_no_modifyPerl_get_opargsPerl_get_ppaddrPerl_get_vtblPL_vtbl_isaelemPL_vtbl_regexpPL_vtbl_regdataPL_vtbl_regdatumPerl_mini_mktimePerl_seedgettimeofdayPerl_my_socketpairPerl_getenv_lenPerl_getcwd_svgetcwdPerl_sv_taintPerl_init_tmlocaltime_rPerl_PerlIO_flushPerl_get_contextPerl_pidgonePerl_wait4pidsigactionsigemptysetPerl_my_forkPerl_setenv_getixS_vdie_commonPerl_sv_2cvPerl_write_to_stderrPerl_PerlIO_writePerl_mallocPL_no_memPerl_safesyscallocPerl_sv_vsetpvfnPerl_vwarnPerl_vwarnerPerl_die_wherePerl_report_evil_fhPerl_warner_nocontextPerl_warn_nocontextS_vdie_croak_commonPerl_vcroaksrand48_rdrand48_r__strtoul_internaldup2Perl_taint_envPerl_do_execfreePerl_do_exec3Perl_my_popen_listPerl_do_aexec5Perl_set_contextPerl_atfork_unlockPerl_atfork_lockPerl_vdiePerl_die_nocontextPerl_mess_nocontextPerl_vformPerl_form_nocontextPerl_savesvpvPerl_screaminstrPerl_fbm_instrPL_freqPerl_mfreePerl_my_clearenvPerl_reallocPerl_my_strftimeunsetenvPerl_callocPerl_mg_magicalPerl_magic_regdata_cntPerl_magic_getuvarPerl_magic_setisaPerl_magic_setamagicPerl_magic_gettaintPerl_magic_settaintPerl_magic_setmglobPerl_magic_setuvarPerl_magic_freeregexpPerl_csighandlersigaddsetsigprocmaskPerl_whichsigPL_sig_numPerl_magic_setutf8Perl_magic_setcollxfrmPerl_mg_freePerl_magic_setregexpPerl_magic_setfmPerl_magic_setbmPerl_magic_regdatum_setPerl_magic_killbackrefsPerl_magic_setdblinePerl_magic_setvecPerl_do_vecsetPerl_magic_getvecPerl_do_vecgetPerl_magic_getsubstrPerl_sv_pos_u2bPerl_magic_setsubstrPerl_magic_setglobPerl_magic_getglobPerl_magic_setposPerl_sv_lenPerl_magic_getposPerl_sv_pos_b2uPerl_magic_setarylenPerl_mg_copyPerl_magic_wipepackPerl_magic_nextpackPerl_magic_scalarpackPerl_magic_sizepackPerl_magic_setpackPerl_magic_existspackPerl_magic_clearpackPerl_magic_getpackPerl_magic_setnkeysPerl_magic_getnkeysPerl_hv_iternextPerl_magic_clearsigPerl_magic_setsigPL_csighandlerpPerl_magic_getsigPerl_magic_clear_all_envPerl_magic_set_all_envPerl_hv_iterkeyPerl_magic_clearenvPerl_magic_setenvPerl_magic_regdatum_getPerl_mg_clearPerl_save_allocPerl_mg_sizePerl_vivify_defelemPerl_avhv_fetch_entPL_no_helem_svPL_no_aelemPerl_magic_getdefelemPerl_magic_getarylenPerl_mg_lengthPerl_magic_setdefelemPerl_mg_getPerl_magic_setsetgroupssetregidsetreuidPerl_magic_getgetgroupsPerl_sv_copypvPerl_magic_lenPerl_report_uninitPerl_is_utf8_string_loclenPerl_reentrant_sizePerl_reentrant_retrygethostbyname_rgetgrnam_rgetpwnam_rgetservbyname_rgetprotobyname_rgetnetent_rgetpwent_rgetprotoent_rgetservent_rgethostent_rgetgrent_rgetprotobynumber_rgetnetbyaddr_rgetservbyport_rgetpwuid_rgethostbyaddr_rgetgrgid_rgetnetbyname_rPerl_offer_nice_chunkPerl_bytes_from_utf8Perl_unshare_hekPerl_unsharepvnPerl_newSVhekPerl_hv_free_entPerl_hv_clear_placeholdersPerl_share_hekPerl_hv_delayfree_entPerl_hv_iternextsvPerl_sv_taintedPerl_hv_delete_entPerl_hv_undefPerl_hv_exists_entPerl_hv_store_entPerl_hv_store_flagsPerl_hv_scalarPerl_he_dupPerl_ptr_table_fetchPerl_ptr_table_storePerl_sv_dupPerl_av_reifyPerl_av_existsPerl_av_fakePerl_av_makePerl_av_undefPerl_avhv_keysPerl_sv_isaPerl_avhv_itervalPerl_avhv_iternextPerl_avhv_exists_entPerl_avhv_store_entPerl_av_deletePerl_avhv_delete_entPerl_pp_nullPerl_pp_setstatePerl_pp_pushrePerl_pp_gvPerl_pp_constPerl_pp_method_namedPerl_pp_methodPerl_vivify_refPerl_pp_aelemPerl_is_lvalue_subPerl_sv_mortalcopyPerl_sv_2uvPerl_save_aelemPerl_pp_aelemfastPerl_sub_crush_depthPerl_pp_eqPerl_pp_leavePerl_pp_enterPL_no_symrefPL_no_usymPerl_pp_nextstatePerl_pp_leavesublvPerl_tmps_growPerl_pp_leavesubPerl_pp_orPerl_pp_cond_exprPerl_pp_andPerl_pp_grepwhilePerl_pp_unstackPerl_pp_substPerl_sv_force_normalPerl_rxres_savePerl_pp_concatPerl_pp_preincPerl_sv_incPerl_pp_iterPerl_pp_helemPerl_save_deletePerl_save_helemPerl_save_gpPerl_do_readline__lxstat64Perl_nextargvPerl_do_closePerl_is_utf8_string_locPerl_do_openPerl_sv_unrefPerl_start_globPerl_pp_matchPerl_dowantarrayPerl_pp_qrPerl_newSVrvPerl_pp_aassignsetresgidsetresuidPerl_pp_rv2hvPL_no_localize_refPerl_do_kvPerl_save_hashPerl_pp_rv2avPerl_save_aryPerl_pp_printPerl_do_printPerl_pp_joinPerl_do_joinPerl_pp_addPerl_pp_readlinePerl_pp_rv2gvPerl_pp_padsvPerl_save_clearsvPerl_pp_sassignPerl_pp_stringifyPerl_pp_gvsvPerl_sv_add_arenaPerl_sv_report_usedPerl_sv_newrefPerl_sv_reftypePerl_dirp_dupPerl_ptr_table_clearPerl_any_dupPerl_ptr_table_newPerl_ptr_table_splitPerl_fp_dupPerlIO_fdupopenPerl_rvpv_dupPerl_mg_dupPerl_gp_dupPerl_cx_dupPerl_si_dupPerl_ss_dupPerl_re_dupPerl_sv_isobjectPerl_sv_truePerl_sv_unref_flagsPerl_io_closePerl_sv_blessPerl_sv_replacePerl_sv_magicextPerl_sv_rvweakenPL_vtbl_ovrldPerl_sv_resetPerl_sv_usepvn_mgPerl_sv_setpv_mgPerl_sv_setpviv_mgPerl_sv_setpvivPerl_sv_setref_pvnPerl_sv_setpvn_mgPerl_sv_setref_nvPerl_newSVnvPerl_sv_setnv_mgPerl_sv_setref_ivperl_clonePerlIO_clonePerl_sv_setref_uvPerl_sv_setuv_mgPerl_sv_setiv_mgPL_warn_uninitPerl_sv_nvPerl_cast_ivPerl_cast_uvPerl_sv_uvPerl_sv_vcatpvfnfrexpgcvtPerl_sv_vsetpvf_mgPerl_sv_setpvf_mgPerl_sv_setpvf_mg_nocontextPerl_sv_vsetpvfPerl_sv_pvn_forcePerl_sv_catpv_mgPerl_sv_catpvn_mgPerl_sv_catpvnPerl_sv_pvn_nomgPerl_sv_pvnPerl_sv_pvPerl_sv_2ioPerl_sv_collxfrmPerl_mem_collxfrmPerl_sv_cmp_localePerl_save_generic_svrefPerl_sv_setref_pvPerl_sv_setsv_mgPerl_sv_setsvPerl_sv_eqPerl_utf8_to_bytesPerl_sv_pvbyten_forcePerl_sv_pvbytenPerl_sv_pvbytePerl_sv_pvutf8n_forcePerl_sv_pvutf8nPerl_sv_pvutf8Perl_sv_catsv_mgPerl_sv_catsvPerl_sv_utf8_encodePerl_sv_utf8_upgradePerl_sv_2pvutf8Perl_sv_2pvutf8_nolenPerl_sv_2pvbytePerl_sv_2pvbyte_nolenPerl_sv_2pvPerl_sv_2pv_nolenPerl_looks_like_numberPerl_sv_setpvf_nocontextPerl_vnewSVpvfPerl_newSVpvf_nocontextPerl_sv_vcatpvf_mgPerl_sv_catpvf_mgPerl_sv_catpvf_mg_nocontextPerl_sv_vcatpvfPerl_sv_catpvf_nocontextPerl_sv_ivPerl_sv_decPerlIO_isutf8Perl_PerlIO_eofPerlIO_getcPerlIO_fast_getsPerl_PerlIO_get_cntPerl_PerlIO_get_ptrPerl_PerlIO_set_ptrcntPerl_pp_scalarPerl_pp_threadsvPerl_pp_padanyPerl_pp_lockPerl_pp_srefgenPerl_pp_stubPerl_pp_splitPerl_pp_lslicePerl_pp_listPerl_pp_reversePerl_pp_unshiftPerl_pp_shiftPerl_pp_popPerl_pp_pushPerl_pp_refgenPerl_pp_splicePerl_pp_anonhashPerl_pp_hslicePerl_pp_existsPerl_pp_deletePerl_pp_keysPerl_pp_valuesPerl_pp_eachPerl_pp_aslicePerl_pp_quotemetaPerl_pp_definedPerl_pp_lcPerl_to_utf8_lower__ctype_tolower_locPerl_pp_ucPerl_to_utf8_upper__ctype_toupper_locPerl_pp_lcfirstPerl_pp_ucfirstPerl_to_utf8_titlePerl_pp_cryptcrypt_rPerl_pp_chrPerl_uvchr_to_utf8_flagsPerl_pp_ordPerl_pp_sprintfPerl_do_sprintfPerl_pp_rindexPerl_pp_indexPerl_pp_posPerl_pp_av2arylenPerl_pp_vecPerl_pp_substrPerl_pp_lengthPerl_pp_octPerl_grok_binPerl_pp_hexPerl_pp_i_negatePerl_pp_i_ncmpPerl_pp_i_nePerl_pp_i_eqPerl_pp_i_gePerl_pp_i_lePerl_pp_i_gtPerl_pp_i_ltPerl_pp_i_subtractPerl_pp_i_addPerl_pp_i_moduloPerl_pp_i_dividePerl_pp_i_multiplyPerl_pp_right_shiftPerl_pp_left_shiftPerl_pp_absPerl_pp_nePerl_pp_gePerl_pp_lePerl_pp_gtPerl_pp_ltPerl_pp_subtractPerl_pp_dividePerl_pp_multiplyPerl_pp_intPerl_pp_sqrtPerl_pp_logPerl_pp_expPerl_pp_srandPerl_pp_randPerl_pp_cosPerl_pp_sinPerl_pp_atan2Perl_pp_complementPerl_pp_notPerl_pp_negatePerl_pp_bit_orPerl_do_vopPerl_pp_bit_xorPerl_pp_bit_andPerl_pp_scmpPerl_pp_sgePerl_pp_slePerl_pp_sgtPerl_pp_sltPerl_pp_snePerl_pp_seqPerl_pp_ncmp__isnanPerl_pp_repeatPerl_pp_powPerl_pp_postdecPerl_pp_predecPerl_pp_postincPerl_pp_undefPerl_pp_chompPerl_do_chompPerl_pp_schompPerl_pp_chopPerl_do_chopPerl_pp_schopPerl_pp_transPerl_do_transPerl_pp_studyPerl_pp_gelemPerl_pp_blessPerl_pp_refPerl_pp_anoncodePerl_pp_prototypePerl_pp_rv2cvPerl_pp_rv2svPerl_pp_padavPerl_pp_padhvPerl_pp_modulofmod_LIB_VERSIONPerl_cx_dumpPerl_save_threadsvPerl_savestack_grow_cntPerl_save_destructorPerl_save_listPerl_save_mortalizesvPerl_save_aptrPerl_save_nogvPerl_save_padsvPerl_save_ivPerl_save_I8Perl_save_I16Perl_save_longPerl_save_shared_pvrefPerl_save_svrefPerl_pp_regcmaybePerl_pp_regcresetPerl_pp_lineseqPerl_pp_scopePerl_find_runcvPerl_pp_wantarrayPerl_pp_leavetryPerl_pp_orassignPerl_pp_andassignPerl_pp_xorPerl_pp_leaveevalPerl_pp_mapstartPerl_pp_entertryPerl_pp_enterloopPerl_pp_rangePerl_pp_leaveloopPerl_pp_requirePerl_pp_dofilePerl_pp_dbstatePerl_pp_exitPerl_pp_enteriterPerl_pp_resetPerl_pp_callerPerl_pp_flopPerl_pp_flipPerl_pp_mapwhilePerl_pp_grepstartPerl_rxres_freePerl_pp_gotoPerl_pp_dumpPerl_pp_redoPerl_pp_nextPerl_pp_lastPerl_pp_returnPerl_rxres_restorePerl_pp_formlinePerl_pp_substcontPerl_pp_regcompPerl_pp_syscallPerl_pp_getlogingetlogin_rPerl_pp_egrentendgrentPerl_pp_sgrentsetgrentPerl_pp_ggrentPerl_pp_ggrgidPerl_pp_ggrnamPerl_pp_epwentendpwentPerl_pp_spwentsetpwentPerl_pp_gpwentgetspnam_rPerl_pp_gpwuidPerl_pp_gpwnamPerl_pp_eserventendserventPerl_pp_eprotoentendprotoentPerl_pp_enetentendnetentPerl_pp_ehostentendhostentPerl_pp_sserventsetserventPerl_pp_sprotoentsetprotoentPerl_pp_snetentsetnetentPerl_pp_shostentsethostentPerl_pp_gserventPerl_pp_gsbyportPerl_pp_gsbynamePerl_pp_gprotoentPerl_pp_gpbynumberPerl_pp_gpbynamePerl_pp_gnetent__h_errno_locationPerl_pp_gnbyaddrPerl_pp_gnbynamePerl_pp_ghostentPerl_pp_ghbyaddrPerl_pp_ghbynamePerl_pp_semopPerl_do_semopPerl_pp_semctlPerl_do_ipcctlPerl_pp_msgctlPerl_pp_shmctlPerl_pp_semgetPerl_do_ipcgetPerl_pp_msggetPerl_pp_shmgetPerl_pp_msgrcvPerl_do_msgrcvPerl_pp_msgsndPerl_do_msgsndPerl_pp_shmwritePerl_do_shmioPerl_pp_shmreadPerl_pp_timePerl_pp_sleeppausePerl_pp_alarmPerl_pp_gmtimegmtime_rPerl_pp_localtimePerl_pp_tmstimesPerl_pp_setpriorityPerl_pp_getpriorityPerl_pp_setpgrpsetpgidPerl_pp_getpgrpgetpgidPerl_pp_getppidPerl_pp_killPerl_applyPerl_pp_utimePerl_pp_chmodPerl_pp_unlinkPerl_pp_chownPerl_pp_execPerl_do_aexecPerl_do_execPerl_pp_systemPerl_pp_waitpidPerl_pp_waitPerl_pp_forkPerl_pp_closedirPerl_pp_rewinddirPerl_pp_seekdirPerl_pp_telldirPerl_pp_readdirreaddir64_rPerl_pp_open_diropendirPerl_pp_rmdirPerl_pp_mkdirPerl_pp_readlinkPerl_pp_symlinkPerl_pp_linkPerl_pp_renamePerl_pp_chrootPerl_pp_chdirfchdirdirfdPerl_pp_ftttyisattyPerl_pp_ftsvtxPerl_my_statPerl_pp_ftsgidPerl_pp_ftsuidPerl_pp_ftpipePerl_pp_ftdirPerl_pp_ftfilePerl_pp_ftblkPerl_pp_ftchrPerl_pp_ftsockPerl_pp_ftzeroPerl_pp_ftrownedPerl_pp_fteownedPerl_pp_ftisPerl_pp_ftlinkPerl_my_lstatPerl_pp_ftctimePerl_pp_ftatimePerl_pp_ftmtimePerl_pp_ftsizePerl_pp_fteexeceaccessPerl_pp_ftewritePerl_pp_ftereadPerl_pp_ftrexecPerl_pp_ftrwritePerl_pp_ftrreadPerl_pp_getpeernamePerl_pp_getsocknamePerl_pp_ssockoptgetsockoptsetsockoptPerl_pp_gsockoptPerl_pp_shutdownPerl_pp_acceptPerl_pp_pipe_opPerl_pp_listenPerl_pp_connectPerl_pp_bindPerl_pp_sockpairPerl_pp_socketPerl_pp_flockPerl_pp_ioctlPerl_pp_fcntlPerl_pp_truncateftruncate64Perl_pp_tiedPerl_pp_filenoPerl_pp_closePerl_pp_sysseekPerl_do_sysseekPerl_do_seekPerl_pp_seekPerl_pp_tellPerl_do_tellPerl_pp_sysopenPerl_pp_eofPerl_do_eofPerl_pp_sendsendtoPerl_pp_syswritePerl_pp_sysreadrecvfromPerl_pp_recvPerl_pp_readPerl_pp_prtfPerl_pp_selectPerl_pp_leavewritePerl_pp_enterwritePerl_pp_getcPerl_pp_sselectPerl_pp_dbmopenPerl_pp_untiePerl_pp_dbmclosePerl_pp_tiePerl_pp_binmodePerl_pp_umaskPerl_pp_openPerl_do_opennPerl_pp_diePerl_pp_warnPerl_pp_rcatlinePerl_pp_globPL_no_securityPerl_pp_backtickPerl_pp_statPL_warn_nlPerl_pp_lstatPerl_pp_fttextPerlIO_has_basePerl_PerlIO_get_bufsizPerl_PerlIO_get_basePerl_pp_ftbinaryPerl_swash_fetchPerl_utf8_to_uvunishmatshmdtPerl_ingroupfchmodfchownkillpgexecvpPL_sh_pathexeclPerl_do_binmodePerl_PerlIO_seekPerl_do_pipePerlIO_intmode2strPerlIO_opennPerl_do_open9PerlIO_has_cntptrPerlIO_canset_cntPerl_PerlIO_set_cntPerl_regclass_swashPerl_to_utf8_foldPerl_is_uni_space_lcPerl_is_uni_alnum_lcPerl_is_utf8_spacePerl_ibcmp_utf8Perl_is_uni_alnumPerl_is_uni_digit_lcPerl_utf8_distancePerl_pregexecPerl_is_utf8_charPerl_uvchr_to_utf8Perl_utf8n_to_uvchrPerl_is_utf8_xdigitPerl_is_uni_xdigitPerl_is_uni_xdigit_lcPerl_is_utf8_punctPerl_is_uni_punctPerl_is_uni_punct_lcPerl_is_utf8_printPerl_is_uni_printPerl_is_uni_print_lcPerl_is_utf8_graphPerl_is_uni_graphPerl_is_uni_graph_lcPerl_is_utf8_cntrlPerl_is_uni_cntrlPerl_is_uni_cntrl_lcPerl_is_utf8_lowerPerl_is_uni_lowerPerl_is_uni_lower_lcPerl_is_utf8_upperPerl_is_uni_upperPerl_is_uni_upper_lcPerl_is_uni_digitPerl_is_uni_spacePerl_is_utf8_asciiPerl_is_uni_asciiPerl_is_uni_ascii_lcPerl_is_utf8_alphaPerl_is_uni_alphaPerl_is_uni_alpha_lcPerl_is_utf8_idfirstPerl_is_uni_idfirstPerl_is_uni_idfirst_lcPerl_is_utf8_alnumcPerl_is_uni_alnumcPerl_is_uni_alnumc_lcPerl_pv_uni_displayPerl_to_utf8_casePerl_to_uni_lowerPerl_to_uni_lower_lcPerl_to_uni_titlePerl_to_uni_title_lcPerl_to_uni_upperPerl_to_uni_upper_lcPerl_deb_nocontextPerl_vdebPerl_debstackptrsXS_Regexp_DESTROYXS_Internals_HvREHASHXS_utf8_is_utf8XS_Internals_rehash_seedXS_Internals_hash_seedXS_Internals_SvREADONLYXS_PerlIO_get_layersXS_Internals_hv_clear_placeholdXS_Internals_SvREFCNTXS_utf8_unicode_to_nativeXS_utf8_native_to_unicodeXS_utf8_downgradeXS_utf8_upgradeXS_utf8_decodeXS_utf8_encodeXS_utf8_validXS_UNIVERSAL_VERSIONXS_UNIVERSAL_canXS_UNIVERSAL_isaPerl_sv_derived_fromXS_attributes__warn_reservedXS_attributes_reftypeXS_attributes__guess_stashXS_attributes__fetch_attrsXS_attributes__modify_attrsXS_attributes_bootstrapPerl_printf_nocontextPerl_fprintf_nocontextPL_no_wrongrefPL_no_helemPL_no_sock_funcPL_no_dir_funcPL_no_funcPL_uuemapPerl_pp_unpackPerl_pp_packPerl_pp_sortPL_hexdigitPL_patleavePL_force_link_funcsPerl_Tstack_sp_ptrPerl_Top_ptrPerl_Tcurpad_ptrPerl_Tstack_base_ptrPerl_Tstack_max_ptrPerl_Tscopestack_ptrPerl_Tscopestack_ix_ptrPerl_Tscopestack_max_ptrPerl_Tsavestack_ptrPerl_Tsavestack_ix_ptrPerl_Tsavestack_max_ptrPerl_Ttmps_stack_ptrPerl_Ttmps_ix_ptrPerl_Ttmps_floor_ptrPerl_Ttmps_max_ptrPerl_Tmarkstack_ptrPerl_Tmarkstack_ptr_ptrPerl_Tmarkstack_max_ptrPerl_Tretstack_ptrPerl_Tretstack_ix_ptrPerl_Tretstack_max_ptrPerl_TSv_ptrPerl_TXpv_ptrPerl_Tna_ptrPerl_Tstatbuf_ptrPerl_Tstatcache_ptrPerl_Tstatgv_ptrPerl_Tstatname_ptrPerl_Ttimesbuf_ptrPerl_Ttainted_ptrPerl_Tcurpm_ptrPerl_Tnrs_ptrPerl_Trs_ptrPerl_Tlast_in_gv_ptrPerl_Tofs_sv_ptrPerl_Tdefoutgv_ptrPerl_Tchopset_ptrPerl_Tformtarget_ptrPerl_Tbodytarget_ptrPerl_Ttoptarget_ptrPerl_Tdefstash_ptrPerl_Tcurstash_ptrPerl_Trestartop_ptrPerl_Tcurcop_ptrPerl_Tin_eval_ptrPerl_Tdelaymagic_ptrPerl_Tdirty_ptrPerl_Tlocalizing_ptrPerl_Tcurstack_ptrPerl_Tcurstackinfo_ptrPerl_Tmainstack_ptrPerl_Ttop_env_ptrPerl_Tstart_env_ptrPerl_Terrors_ptrPerl_Tav_fetch_sv_ptrPerl_Thv_fetch_sv_ptrPerl_Thv_fetch_ent_mh_ptrPerl_Tmodcount_ptrPerl_Tlastgotoprobe_ptrPerl_Tdumpindent_ptrPerl_Tsortcop_ptrPerl_Tsortstash_ptrPerl_Tfirstgv_ptrPerl_Tsecondgv_ptrPerl_Tsortcxix_ptrPerl_Tefloatbuf_ptrPerl_Tefloatsize_ptrPerl_Tscreamfirst_ptrPerl_Tscreamnext_ptrPerl_Tmaxscream_ptrPerl_Tlastscream_ptrPerl_Tregdummy_ptrPerl_Tregcomp_parse_ptrPerl_Tregxend_ptrPerl_Tregcode_ptrPerl_Tregnaughty_ptrPerl_Tregsawback_ptrPerl_Tregprecomp_ptrPerl_Tregnpar_ptrPerl_Tregsize_ptrPerl_Tregflags_ptrPerl_Tregseen_ptrPerl_Tseen_zerolen_ptrPerl_Tseen_evals_ptrPerl_Tregcomp_rx_ptrPerl_Textralen_ptrPerl_Tcolorset_ptrPerl_Tcolors_ptrPerl_Treg_whilem_seen_ptrPerl_Treginput_ptrPerl_Tregbol_ptrPerl_Tregeol_ptrPerl_Tregstartp_ptrPerl_Tregendp_ptrPerl_Treglastparen_ptrPerl_Treglastcloseparen_ptrPerl_Tregtill_ptrPerl_Tregcompat1_ptrPerl_Treg_start_tmp_ptrPerl_Treg_start_tmpl_ptrPerl_Tregdata_ptrPerl_Tbostr_ptrPerl_Treg_flags_ptrPerl_Treg_eval_set_ptrPerl_Tregnarrate_ptrPerl_Tregprogram_ptrPerl_Tregindent_ptrPerl_Tregcc_ptrPerl_Treg_call_cc_ptrPerl_Treg_re_ptrPerl_Treg_ganch_ptrPerl_Treg_sv_ptrPerl_Treg_magic_ptrPerl_Treg_oldpos_ptrPerl_Treg_oldcurpm_ptrPerl_Treg_curpm_ptrPerl_Treg_oldsaved_ptrPerl_Treg_oldsavedlen_ptrPerl_Treg_maxiter_ptrPerl_Treg_leftiter_ptrPerl_Treg_poscache_ptrPerl_Treg_poscache_size_ptrPerl_Tpeepp_ptrPerl_Tregcompp_ptrPerl_Tregexecp_ptrPerl_Tregint_start_ptrPerl_Tregint_string_ptrPerl_Tregfree_ptrPerl_Treginterp_cnt_ptrPerl_Treg_starttry_ptrPerl_Twatchaddr_ptrPerl_Twatchok_ptrPerl_Treg_match_utf8_ptrPerl_Tcomppad_ptrPerl_Iorigargc_ptrPerl_Iorigargv_ptrPerl_Ienvgv_ptrPerl_Iincgv_ptrPerl_Ihintgv_ptrPerl_Iorigfilename_ptrPerl_Idiehook_ptrPerl_Iwarnhook_ptrPerl_Iminus_c_ptrPerl_Ipatchlevel_ptrPerl_Ilocalpatches_ptrPerl_Isplitstr_ptrPerl_Ipreprocess_ptrPerl_Iminus_n_ptrPerl_Iminus_p_ptrPerl_Iminus_l_ptrPerl_Iminus_a_ptrPerl_Iminus_F_ptrPerl_Idoswitches_ptrPerl_Idowarn_ptrPerl_Iwidesyscalls_ptrPerl_Idoextract_ptrPerl_Isawampersand_ptrPerl_Iunsafe_ptrPerl_Iinplace_ptrPerl_Ie_script_ptrPerl_Iperldb_ptrPerl_Iperl_destruct_level_ptrPerl_Ibasetime_ptrPerl_Iformfeed_ptrPerl_Imaxsysfd_ptrPerl_Imultiline_ptrPerl_Istatusvalue_ptrPerl_Iexit_flags_ptrPerl_Istdingv_ptrPerl_Istderrgv_ptrPerl_Idefgv_ptrPerl_Iargvgv_ptrPerl_Iargvoutgv_ptrPerl_Iargvout_stack_ptrPerl_Ireplgv_ptrPerl_Ierrgv_ptrPerl_IDBgv_ptrPerl_IDBline_ptrPerl_IDBsub_ptrPerl_IDBsingle_ptrPerl_IDBtrace_ptrPerl_IDBsignal_ptrPerl_Ilineary_ptrPerl_Idbargs_ptrPerl_Idebstash_ptrPerl_Iglobalstash_ptrPerl_Icurstname_ptrPerl_Ibeginav_ptrPerl_Iendav_ptrPerl_Icheckav_ptrPerl_Iinitav_ptrPerl_Istrtab_ptrPerl_Isub_generation_ptrPerl_Isv_count_ptrPerl_Isv_objcount_ptrPerl_Isv_root_ptrPerl_Isv_arenaroot_ptrPerl_Iforkprocess_ptrPerl_Ifdpid_ptrPerl_Itainting_ptrPerl_Iop_mask_ptrPerl_Imain_cv_ptrPerl_Imain_root_ptrPerl_Imain_start_ptrPerl_Ieval_root_ptrPerl_Ieval_start_ptrPerl_Icurcopdb_ptrPerl_Icopline_ptrPerl_Ifilemode_ptrPerl_Ilastfd_ptrPerl_Ioldname_ptrPerl_IArgv_ptrPerl_ICmd_ptrPerl_Igensym_ptrPerl_Ipreambled_ptrPerl_Ipreambleav_ptrPerl_Ilaststatval_ptrPerl_Ilaststype_ptrPerl_Imess_sv_ptrPerl_Iors_sv_ptrPerl_Iofmt_ptrPerl_Iexitlist_ptrPerl_Iexitlistlen_ptrPerl_Imodglobal_ptrPerl_Iprofiledata_ptrPerl_Irsfp_ptrPerl_Irsfp_filters_ptrPerl_Icompiling_ptrPerl_Icompcv_ptrPerl_IBINCOMPAT0_ptrPerl_Icomppad_name_ptrPerl_Icomppad_name_fill_ptrPerl_Icomppad_name_floor_ptrPerl_Igeneration_ptrPerl_IDBcv_ptrPerl_Iin_clean_objs_ptrPerl_Iin_clean_all_ptrPerl_Ilinestart_ptrPerl_Ipending_ident_ptrPerl_Isublex_info_ptrPerl_Iuid_ptrPerl_Ieuid_ptrPerl_Igid_ptrPerl_Iegid_ptrPerl_Inomemok_ptrPerl_Ian_ptrPerl_Icop_seqmax_ptrPerl_Iop_seqmax_ptrPerl_Ievalseq_ptrPerl_Iorigenviron_ptrPerl_Iorigalen_ptrPerl_Ipidstatus_ptrPerl_Imaxo_ptrPerl_Iosname_ptrPerl_Ish_path_compat_ptrPerl_Isighandlerp_ptrPerl_Ixiv_arenaroot_ptrPerl_Ixiv_root_ptrPerl_Ixnv_root_ptrPerl_Ixrv_root_ptrPerl_Ixpv_root_ptrPerl_Ixpviv_root_ptrPerl_Ixpvnv_root_ptrPerl_Ixpvcv_root_ptrPerl_Ixpvav_root_ptrPerl_Ixpvhv_root_ptrPerl_Ixpvmg_root_ptrPerl_Ixpvlv_root_ptrPerl_Ixpvbm_root_ptrPerl_Ihe_root_ptrPerl_Inice_chunk_ptrPerl_Inice_chunk_size_ptrPerl_Irunops_ptrPerl_Itokenbuf_ptrPerl_Isv_undef_ptrPerl_Isv_no_ptrPerl_Isv_yes_ptrPerl_Ilex_state_ptrPerl_Ilex_defer_ptrPerl_Ilex_expect_ptrPerl_Ilex_brackets_ptrPerl_Ilex_formbrack_ptrPerl_Ilex_casemods_ptrPerl_Ilex_dojoin_ptrPerl_Ilex_starts_ptrPerl_Ilex_stuff_ptrPerl_Ilex_repl_ptrPerl_Ilex_op_ptrPerl_Ilex_inpat_ptrPerl_Ilex_inwhat_ptrPerl_Ilex_brackstack_ptrPerl_Ilex_casestack_ptrPerl_Inextval_ptrPerl_Inexttype_ptrPerl_Inexttoke_ptrPerl_Ilinestr_ptrPerl_Ibufptr_ptrPerl_Ioldbufptr_ptrPerl_Ioldoldbufptr_ptrPerl_Ibufend_ptrPerl_Iexpect_ptrPerl_Imulti_start_ptrPerl_Imulti_end_ptrPerl_Imulti_open_ptrPerl_Imulti_close_ptrPerl_Ierror_count_ptrPerl_Isubline_ptrPerl_Isubname_ptrPerl_Imin_intro_pending_ptrPerl_Imax_intro_pending_ptrPerl_Ipadix_ptrPerl_Ipadix_floor_ptrPerl_Ipad_reset_pending_ptrPerl_Ilast_uni_ptrPerl_Ilast_lop_ptrPerl_Ilast_lop_op_ptrPerl_Iin_my_ptrPerl_Iin_my_stash_ptrPerl_Ihints_ptrPerl_Idebug_ptrPerl_Iamagic_generation_ptrPerl_Icollation_ix_ptrPerl_Icollation_name_ptrPerl_Icollation_standard_ptrPerl_Icollxfrm_base_ptrPerl_Icollxfrm_mult_ptrPerl_Inumeric_name_ptrPerl_Inumeric_standard_ptrPerl_Inumeric_local_ptrPerl_Inumeric_compat1_ptrPerl_Iutf8_alnum_ptrPerl_Iutf8_alnumc_ptrPerl_Iutf8_ascii_ptrPerl_Iutf8_alpha_ptrPerl_Iutf8_space_ptrPerl_Iutf8_cntrl_ptrPerl_Iutf8_graph_ptrPerl_Iutf8_digit_ptrPerl_Iutf8_upper_ptrPerl_Iutf8_lower_ptrPerl_Iutf8_print_ptrPerl_Iutf8_punct_ptrPerl_Iutf8_xdigit_ptrPerl_Iutf8_mark_ptrPerl_Iutf8_toupper_ptrPerl_Iutf8_totitle_ptrPerl_Iutf8_tolower_ptrPerl_Iutf8_tofold_ptrPerl_Ilast_swash_hv_ptrPerl_Ilast_swash_klen_ptrPerl_Ilast_swash_key_ptrPerl_Ilast_swash_tmps_ptrPerl_Ilast_swash_slen_ptrPerl_Iyydebug_ptrPerl_Iyynerrs_ptrPerl_Iyyerrflag_ptrPerl_Iyychar_ptrPerl_Iyyval_ptrPerl_Iyylval_ptrPerl_Iglob_index_ptrPerl_Isrand_called_ptrPerl_Iuudmap_ptrPerl_Ibitcount_ptrPerl_Ipsig_ptr_ptrPerl_Ipsig_name_ptrPerl_Iptr_table_ptrPerl_Ibeginav_save_ptrPerl_Inullstash_ptrPerl_Ixnv_arenaroot_ptrPerl_Ixrv_arenaroot_ptrPerl_Ixpv_arenaroot_ptrPerl_Ixpviv_arenaroot_ptrPerl_Ixpvnv_arenaroot_ptrPerl_Ixpvcv_arenaroot_ptrPerl_Ixpvav_arenaroot_ptrPerl_Ixpvhv_arenaroot_ptrPerl_Ixpvmg_arenaroot_ptrPerl_Ixpvlv_arenaroot_ptrPerl_Ixpvbm_arenaroot_ptrPerl_Ihe_arenaroot_ptrPerl_Ipsig_pend_ptrPerl_Isig_pending_ptrPerl_Inumeric_radix_sv_ptrPerl_Iregex_pad_ptrPerl_Iregex_padav_ptrPerl_Ireentrant_buffer_ptrPerl_Isavebegin_ptrPerl_Icustom_op_names_ptrPerl_Icustom_op_descs_ptrPerl_Iperlio_ptrPerl_Iknown_layers_ptrPerl_Idef_layerlist_ptrPerl_Iencoding_ptrPerl_Idebug_pad_ptrPerl_Itaint_warn_ptrPerl_Iutf8locale_ptrPerl_Iutf8_idstart_ptrPerl_Iutf8_idcont_ptrPerl_Isort_RealCmp_ptrPerl_Icheckav_save_ptrPerl_Iclocktick_ptrPerl_Iin_load_module_ptrPerl_Iunicode_ptrPerl_Isignals_ptrPerl_Istashcache_ptrPerl_Ireentrant_retint_ptrPerl_Isharehook_ptrPerl_Ilockhook_ptrPerl_Iunlockhook_ptrPerl_Ithreadhook_ptrPerl_Irunops_std_ptrPerl_Irunops_dbg_ptrPerl_Ippid_ptrPerl_Ihash_seed_ptrPerl_Ihash_seed_set_ptrPerl_Irehash_seed_ptrPerl_Irehash_seed_set_ptrPerl_Ifdscript_ptrPerl_Isuidscript_ptrPerl_Ipte_root_ptrPerl_Ipte_arenaroot_ptrPerl_Gcurinterp_ptrPerl_Gthr_key_ptrPerl_GYes_ptrPerl_GNo_ptrPerl_Ghexdigit_ptrPerl_Gpatleave_ptrPerl_Gdo_undump_ptrPerl_Gop_mutex_ptrPerl_Gdollarzero_mutex_ptrPerl_Gsh_path_ptrPerl_Gsigfpe_saved_ptrPerl_Gsv_placeholder_ptrPerl_Gcsighandlerp_ptrPerl_Guse_safe_putenv_ptrperlsio_binmodePerlIO_arg_fetchPerlIOUtf8_pushedPerlIO_modestrPerlIOBase_poppedPerlIOBase_noop_okPerlIOBase_noop_failPerlIOBase_eofPerlIOBase_errorPerlIOBase_setlinebufPerlIOUnix_filenoPerlIOStdio_modePerlIOUnix_oflagsPerlIOBase_pushedPerlIOPending_pushedPerlIOCrlf_set_ptrcntPerlIOBuf_set_ptrcntPerlIOBuf_bufsizPerlIOBuf_get_cntPerlIOBuf_get_ptrPerlIOBase_clearerrPerl_PerlIO_fillPerlIOCrlf_get_cntPerlIO_getposPerlIO_setposPerlIOBase_filenoPerlIO_getnamePerlIOMmap_unmapmunmapPerlIOMmap_mapmmap64abortPerlIOBuf_poppedPerlIO_list_freePerlIOBuf_get_basePerlIOMmap_get_basePerlIO_list_allocPerlIO_allocatePerlIOBase_readPerlIOBuf_readPerlIOPending_readPerlIOBuf_pushedPerlIOStdio_flushfflushPerlIOStdio_fillfgetcPerlIOStdio_setlinebufPerlIOStdio_clearerrPerlIOStdio_errorferrorPerlIOStdio_eoffeofPerlIOStdio_tellftello64PerlIOStdio_seekfseeko64PerlIOStdio_writefwritePerlIOStdio_readfreadPerlIOStdio_filenoPerlIOUnix_tellPerlIOUnix_seekPerlIOUnix_writePerlIOUnix_readPerlIO_sv_dupXS_PerlIO__Layer__findXS_PerlIO__Layer__NoWarningsPerlIO_tab_svPerlIO_list_pushPerlIO_clone_listPerlIO_debugPerlIOUnix_refcnt_decPerlIO_fd_refcntPerlIOUnix_closePerlIOUnix_refcnt_incPerlIOPending_set_ptrcntPerlIOPending_seekPerlIOPending_fillPerlIOBuf_tellPerlIOBuf_seekPerlIOBuf_writePerlIOMmap_writePerlIOCrlf_writePerlIOBuf_flushPerlIOMmap_flushPerlIOCrlf_flushPerlIOStdio_closefclosePerlIOUnix_pushedPerlIOBase_closePerlIOBuf_closePerlIOMmap_closePerlIO__closePerlIOBase_flush_linebufPerlIOBuf_fillPerlIOMmap_fillPerlIO_layer_fetchPerlIO_define_layerPerlIO_find_layerPerlIO_default_bufferPerlIO_stdioPerlIO_perlioPerlIO_parse_layersPerlIO_default_layersPerlIO_unixPerlIO_rawPerlIO_crlfPerlIO_mmapPerlIO_utf8PerlIO_removePerlIO_bytePerlIO_default_layerPerlIORaw_openPerlIO_popPerlIOCrlf_binmodePerlIOCrlf_pushedPerlIOPending_flushPerlIO_releaseFILEPerlIOStdio_pushedPerlIOPending_closePerlIO_cleantablePerlIORaw_pushedPerlIOBase_binmodePerlIO_pushPerlIOBuf_openPerlIO_exportFILEPerlIO_findFILEPerlIOStdio_openfreopen64fopen64PerlIO_importFILEPerlIOUnix_openPerlIOBase_dupPerlIOMmap_dupPerlIOBuf_dupPerlIOStdio_dupPerlIOUnix_dupPerlIOBase_unreadPerlIO_pendingPerlIOBuf_unreadPerlIOMmap_unreadPerlIOCrlf_unreadPerlIOStdio_unreadPerl_PerlIO_unreadPerlIO_apply_layeraPerlIO_resolve_layersPerlIO_tmpfilePerlIO_reopenmkstemp64PerlIO_stdstreamsPerlIO_vsprintfPerlIO_sprintfPerlIO_stdoutfPerlIOPop_pushedPerl_cast_i32Perl_hugePerl_grok_numeric_radixPerl_my_atof2__strtod_internalPerl_scan_octPerl_scan_binPerl_scan_hexstrxfrmPerl_new_collatePerl_new_ctypePerl_set_numeric_radixlocaleconvsetlocalePerl_new_numericnl_langinfoPerl_init_i18nl14npacksizePerl_packlistPerl_pack_catmodfPerl_unpackstringPerl_unpack_strsize_normalsize_shriekingPerl_sortsvlibdl.so.2libm.so.6libpthread.so.0libc.so.6__environ__stack_chk_faillibcrypt.so.1_edata__bss_startlibperl.so.5.8GLIBC_2.0GLIBC_2.2GLIBC_2.1.3GLIBC_2.4GLIBC_2.3GLIBC_2.1GLIBC_2.1.2       O ii 0ii ii  ii *si ii ii ii ii ri ii \ĢȢ̢ТԢآܢ  $(,0DLT\dlt|ģ̣ԣܣ $,4<DLT\dltĤȤ̤ФԤؤܤ`d@DHLPTX\`dhlptx|Ŀȿ̿пԿؿܿ  $(,048<@DHLP`dhlptx|  $(,048<@DHLPTX\`dhlptx|  $(,048<@DHLPTX\`dhlptx|  $(,048<@DHLPTX\`dhlptx|  $(,048<@DHLPTX\`dhlptx|  $(,048<@DHLPTX\`dhlptx|  $(,048<@DHLPTX\`dhlptx|  $(,048<@DHLPTX\`dhlptx|  $(,048<@DHLPTX\`dhlptx|  $(,048<@DHLPTX\`dhlptx|  $(,048<@DHLPTX\`dhlptx|  $(,048<@DHLPTX\`dhlp  $(,048<@DHLPTX\`dhlptx|ddddddJby ^0 $(,W0{48<@DHLhP~TXO\`dh3l@put5x]|Qt{hRZkĦrȦ ̦ЦOԦ&ئLܦs<J+ g A$(,048<@DPPPPPPPPPPPPPPPPPP PPPPP P$P(P,P0P4P8PHL6PTX\`Td)hlptx|h'2E/dħ(ȧ ̧ZЧԧاpܧlu>}% l~,1o*ii2|iY '#X $(L,0_48<@eDjHLPP|TX\`dhlptx|RW @ r#nsJe 1e*I E? m^ $|(,048p<@DH"LPTdXM\`dQhl6pTtx%|(oR3 {,kF3 mNnKyhwg9 \ N$4(&,;048T<@D%HLP TX\`d!hlypGtRxZ|@>i.GoBE2 8J& ]Du \$(U,0W48< @/D HLPT0Xu\` dKhlptUx|!d7va}f[0 P+ $!(A,048< @|DHLPTX \W`dh7lptFx|1E X>rC$omgCjvmq  q $,08<@DHLPT`lt  $8<@DHLPTX\`dhlptx| <@TX \ ,8LPTXdhlx|(x|, $(,DH\`dht| $(,048<@DTXhlptx|<@DHLPTX\`dhlptx| $(04<@DH\`pt4X2\2d2282hpcccHvvvvvvvvvvS(04]n04LtPlpxxxGHLP`qdqfH6F]g 0L4<9Plt.g.8H,=0H Ldh,*U (,#HbdpNI7 s $ (A,?0E48<@DHLPTXi\`dhl*ptx| V(&g@Q5\GUI AZS j$m(],048*<<@DyHLPTX\E`dh/lpt:x|c  U q[1&j={=`Ev; q_ g$(,0z4O8<@DH3LP|TX\:`dh^lptxw|lz"d^y`5t u l$2(,04x8<@oDWHLP>TXa\s`dhl8ptcxB|/&b:eL :R{D! TF[ $(,}048k<!@iDiHL'PTX\`dh'lzptx|E=D+Ie(%c1BKr +uv *o $Q(:,0488<_@HDHMLPTX\`dChlptHx|f)YCjUK$ vSXVY[W$$DMF d!7G $0(,0[486<9@FDHwLPTVX\B`dphlpt3x|-4Jy|S.9pQQpt>>t>xH|||z }  $(,G,GG,GG0004S4SS4SS888px/\kx{Ml"=3S"p"ftfftfx u uu^^^ / //$<((<ll<l@@D--D--HLpK,Z7-$H|L'feP\,0x48<B@DHL_PTXt\`dhlpt{x|2"8#; eU ?ĨȨB̨ Ш:Ԩبܨ  $    m$C(,048S<@pD0HBLIPZTVXz\`dXhJlptxY|JNQO~#Mĩȩ̩Щԩةܩ$Z? p $7(,90-4\8<@DHgLPPTwX\f`dhlpwtxR|x5 !&">xnĪJȪ#̪ЪNԪتܪ$%&r'() *+<, $(,-0`48<.@/D0HL%PKTsX\G`dTh!l"p1tx2|3'j4/56;7ī8ȫ̫9Ыԫثsܫ:f 04W~8c 8c 2$(,40d4;86<<@DH=LP=T[X>\?`,d?hllzptx]|@A[5~BRCĬȬ̬wЬ)ԬجܬXDE@F), G-H I$I(,0J4i8K<L@MDHNL0P4TX"\`dOhlQp tPxQ|\RS>FTUVWXĭȭ̭YЭZԭح`ܭ[\])^P_X `a}b c$d(H,e0f48<@gD`HhLPiTXr\t`djhlpTtkx|vl6m@noxTpĮ^Ȯ̮ЮqԮ#خܮryOq L t $}(,t0u48<v@aDH LPTwXx\`dhlnpytaxp|9z\s{|"}Mx~`į^ȯt̯ЯԯPدܯh%kk ( * $(,04n8<9@SDHLTPTX\ `d_hlptix|k]z5b İȰD̰а!԰ذoܰ1DGb k  $(;,0w48<@FDH<LPTX\`dhlptxN|YzL7ıȱ̱<бKԱرܱ%) L $)(,04^8<@D-HL1PtTX\`d?halptx|NJ:b:p(IJȲU̲в.ԲزܲOH( h  .$(S,0 48<@=DHLPTX#\/`dhlptnx| ;9jhmijȳ̳гԳ#سܳ$A- *O> 1$(,%064l8<I@DrHLPTXZ\`+dhlptxn|`f OXnV2PĴȴ̴дԴشMܴ_uC + $<(m,048<@DHOLPTX\Q`Ddhl_ptx(|bR+ĵȵ̵cеAԵصܵjYF4 > Y  $(,04A8<<@DH{LPTX\`d)hrlp6txV|aI~ |}Dlv7 Ķ8ȶ̶жԶضܶ  u;j  wr  $L(,0m48<@.DUS[Àt<7X[ hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhh h h h h h( h0 h8 ph@ `hH PhP @hX 0h` hh hp hx h h h h h h h h ph `h Ph @h 0h h h h h h h h h h( $h0 (h8 p,h@ `0hH P4hP @8hX 0<h` @hh Dhp Hhx Lh Ph Th Xh \h `h dh hh plh `ph Pth @xh 0|h h h h h h h h h h( h0 h8 ph@ `hH PhP @hX 0h` hh hp hx h h h h h h h h ph `h Ph @h 0h h h h h h h h h h( $h0 (h8 p,h@ `0hH P4hP @8hX 0<h` @hh Dhp Hhx Lh Ph Th Xh \h `h dh hh plh `ph Pth @xh 0|h h h h h h h h h h( h0 h8 ph@ `hH PhP @hX 0h` hh hp hx h h h h h h h h ph `h Ph @h 0h h h h hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h h h h h h h h h  h($ h0( h8p, h@`0 hHP4 hP@8 hX0< h` @ hhD hpH hxL hP hT hX h\ h` hd hh hpl h`p hPt h@x h0| h h h h h h h h h  h( h0 h8p h@` hHP hP@ hX0 h` hh hp hx h h h h h h h hp h` hP h@ h0 h h h h h h h h h  h($ h0( h8p, h@`0 hHP4 hP@8 hX0< h` @ hhD hpH hxL hP hT hX h\ h` hd hh hpl h`p hPt h@x h0| h h h h h h h h h  h( h0 h8p h@` hHP hP@ hX0 h` hh hp hx h h h h h h h hp h` hP h@ h0 h h h h h h h h h  h($ h0( h8p, h@`0 hHP4 hP@8 hX0< h` @ hhD hpH hxL hP hT hX h\ h` hd hh hpl h`p hPt h@x h0| h h h h h h h h h  h( h0 h8p h@` hHP hP@ hX0 h` hh hp hx h h h h h h h hp h` hP h@ h0 h h h h h h h h h  h($ h0( h8p, h@`0 hHP4 hP@8 hX0< h` @ hhD hpH hxL hP hT hX h\ h` hd hh hpl h`p hPt h@x h0| h h h h h h h h h  h( h0 h8p h@` hHP hP@ hX0 h` hh hp hx h h h h h h h hp h` hP h@ h0 h h h h h h h h h  h($ h0( h8p, h@`0 hHP4 hP@8 hX0< h` @ hhD hpH hxL hP hT hX h\ h` hd hh hpl h`p hPt h@x h0| h h h h h h h h h  h( h0 h8p h@` hHP hP@ hX0 h` hh hp hx h h h h h h h hp h` hP h@ h0 h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh hhhhh  h($h0USe`?u8t@$Q DҋDuƃ`?[]Í&US.geDt t D$҃[]Ë$ÐU1]É'UVS etD$4$9dž;tnD$4$H+V PV @F@Љ;uy|FucAQABpBFD$4$@ @tȋP$u뽋$yt&U$9rct$uu tt %džt&UE Ut t,t% vǂǂvUSl üby[]ÍT$D$ $USEHÁbD$ D$E D$E$a1҅t@ []Ð&U(]E /buu}}D$ D$t$<$ t5@ @t]u}]ÍT$<$@ @1tы@ @Ǎv'UWVSU EcÜaUUxUP:-tft&UD$ D$$D$:VT$@ D$E$-m:-BEBtv<-u zD$=$nUED$ D$T$$UD$@ $D$mrD$ED$ D$$_UH0$D$6E@ @D$E$^EmUD$$D$ƋE@ @tYD$Et$$U, @t  t tN yEt$$nmut&[^_]ÉT$U$]@ @뎉T$U$D@ @m&UVS_uD$eD$4$@F @F F$xF4F0F8F,$TFVˆUE?UD$$w}E)EЋUĉ|$1D$$B}9Eԍ?E؍EE܍KEQ}E䍃WE荃]EE}tOEԅtHuԉUUD$EЉT$UĉD$ Ẻ$D$ŰEE̋FuċEċ@ @`UЉD$EĉT$$tM̅tŰEĉT$$s\[^_]Í&?:tD$:<$U)D$ EЉ|$~$D$UЍcED$D$ẺT$ UD$D$D$$D$ŰEUD$D$D$$ƋEЉt$D$ D$EĉUЉT$ UĉƋEt$$D$D$|EĉE2T$Uĉ$@ @ED$$E^ UWVS,M vïV9ww$lU0L$D$E$kEE{E HM P - \ L$D$E$M Ή&AE B<vB<vB< v_tۀ:tր=vt$|$U$+~m u 4$ƋEu G |$U$D$M ,[^_]1EU BE ztH E <:<=Uuǂ?$p뗋U`0$T$t$$YܖEU$Ŷt$UT$$2wuD$E$M ,[^_]ÍcD$ U$D$lD$ƋE$Ft$$躷U$/T$$蝷E$T$$耷D$U$-AE E D$U$U, M PD$E$AE AE M B<vB<vB< v߀_tEƀUAE ƉAt=< t9< t5< t1< vt*< t&u t t t t t uU$D$@UM {E } } < t< t< t< t< tۉ < < <  <  <  t!   t t uՉfUy-EX;UƂM Eta.D$ D$t(D$U$UƂM :EƀM %U$E D$E$‹EU < t-< t)< t%< t!< t&tU < t< u׍BE z-BE UƂE tD$$'EǀE 0< XEDB t xzT$E$UEt.D$ D$Tt&EƀEƀUt tt D$$hEǀ UƂt tt D$$,EǀM NEƀM NUƂM 9UED$D$ѰM yxlyA_E 1҉ƀyt >u)EUED$ ED$D$E D$E$ NjEE 9.1Em D$D$U$‹EDH9vOv2v(vvv ЃD$T$U$z|$UD$D$mUDv2v(vvv ҃PUDH ED+D$D$U$MD$ t$D$E$MM S9Q)L$ t$hD$|$U$H3D$|$E$D$D$ t$|$U$ E E D$|$E$D$D$ t$|$U$͸gEED$ ED$D$L$E$lt@ `aD$@ $D$@ HAT tD$D$$貱D$D$ $蒱D$D$$rUe3L[^_]Å~L$D$$ٕ T$ $謟@ @)0 US.g(E$[]Í'UWVST`PT(L\$D$蚫\$L$D$pTQp %=TpƂ@,D$ D$h$D$萴`Th@ tB<<8txuWAD$T$#[^_]Ít&TD$ "D$D$ $<랍Lu<<`yt$ `X=vTOD$ $肸XX< U܉E$UB B$U܋E$D$D$ED$ D$$襊J0U@ BP D$ED$ D$$kU܉H0@ p@V>$E+UB B$D$ED$ D$$ J0@ FpUD$$U܉$$D$E܉$U܉,[^_]Í&UWVSeE1'` .ELJh LJl D$ D$h<$D$褙D$<$T$誴<$D$ȗ<$!dhL$D$<$d@&D$ D$D$<$|Ƌ@ @<$D$}P dt@BNd0D$<$D$qF,ėD$ D$D$<$<$D$<$D$H0-D$ D$D$<$趇H0D$ D$D$<$與D$ D$D$<$`<$D$tH0cBD$ D$D$<$&H0/D$<$T$ND$@ <$D$ͦD$ L$@ <$D$Rd1҅htP,T$<$Yy5<$D$ D$D$a@ @8:<$D$ D$D$1@ @<I<$D$ D$D$@ @ +<$D$D$9}TC<$D$ T$D$U ɉQ:-hBzDžDž9tMs:xwtD$D$$뷋kƂ됋h޵y D$ $D$ŽD$$D$虎~ :-uBzt  > ts 1ɍQD$$薽1ɍ[D$$t1ɍuD$$R1ɍ.D$$01ɍD$$1ɍD$$1ɍ.D$$ʼ1ɍD$$証1ɍÚD$$膼ךD$$a[UƉEƋ_EʋcE΋gEҋkE֋oEsEEEfEދuEEyE}EEEEEE9Ex?|EEKEQEWE]$EEEED$/HMD$/ $)t,؊DPKDžt訊DP31xxtLD$<$$D$T$q{x(%=@ tN4$D$译$|$D${x(%=@P B>t ELJh LJl XhD$<$蚧p@ $p@ p $D$qF 8-H h UD$$(ut*<$D$@D$D$$舡 D$$7 SL D$ D$h$D$8#ux!uD$V|$$|oD$ $rƇ< tD< t@< < < <#< t< u< < -QqB< v-t.t _Ot&׋GM< E< =< 5< v*< "! &qD$D$$D$$D$)9:}D$D$<$蓞<$D$D$!@T$<$D$L;B;&t9LD9D$ $l}+D$D$D$ |$L$$nL9BG KD$ D$D$$7 ƂtƂ n~E]yu'72>)4$Mt$D$$!D$$Ɖ‹D$D$ $T$D$ ,yD$|$ D$$t$xD$D$ D$L$<$x4$TL$<$tƀ ƀtƀzodLD$ D$ $& ? N$脘{D$<$D$WD$D$D$t$ $譢4$ƉT$ $D$菛1`.$3tƉuT< t< ft< t< t< t&t<- Dž>u f< t< t< t< t< t<-t&D$7$ks  < t< t < t< t< u͋ 8ttuƀ ƀt6 @$r ‹D$$Q1ɍD$$xqTD$$yu0 t .D$ $T$~D$ D$|$$s˙D$ԙD$ D$|$$sD$|$ $С|$D$<$~1ɋD$$菮1ɋD$$hD$$1| $D$ D$fHH0D$<$iF@<$ek<$k<$t <$c8, @t  txtt x  , tPt x > , tt x { , x$ot/DžƉ׹;0 hLJ<$D$0D$<$D$dLJ<$p@,dƇhtD$<$gLJ88 $B0;B4~$t $1LJlUe3* Ĭ[^_]ËD$$\ $D$D$FF< < < < < t& b4T$0T$$Lv $D$9D$p% $.[D$|$$D$D$ T$ $D$bƉ׉sB0< UD$ D$ D$4$oh WB< w B< vǀl >/Z~F5D$<$S$?Q@$)g7Dž20 UD$ $~MDžDžDžDžDžDžD$$T$LD$ $蔆7D$t$$wD$D$T$ $D$ lÚD$|$$awuXD$,T$ L$|$D$(D$$OD$D$D$$t$ D$ĄUƁD$ $D$k|$$_at$ $MaD$ $|$讗 D$D$$h% $諊eD$|$)$H$D$k)~T7ƇtƇ ]sD$ D$D$$k@ 0, ƒWYD$ D$t$ $R{F @t$$BD$$脕)D$D$<$讗 I$+g1D$$‹YD$ $VD$t$$[8p $ D$\p<$,D$qd<$D$ϕ$\x@ x@mQ$`mD$D$ AVT$<$D$x5@ @J mD$D$ BVL$<$D$Lx@ @J$mD$D$ BVL$D$ $wllD$D$ t$$x?أD$D$ $wLD$T$ $eD$ D$t$<$xx!D$$軍Z 4T$0T$$LmpD$ B <$D$D$iRD$<$Q $D$(D$/ D$<$D$T$ $D$ $،lt$D$$輌&UWVSEcÜd Û$oct)D$ D$ D$$fUEM}Ѓ91@~]҉uUv>ut&~@EF9t@t$9v F9w:t>u9uŋU|tF9@oM+0>UtD$$xMǁEǀU|$D$rZMǁ|$}EU@<ƂLPD$$NMLEƉEt0LU[^_]ËE$rU<;J|UB0;B4MdhLtD$< $D$VcU9F9{:t>uD$D$M $eU|P;F9t$@$9F9:t>uQu$U` U $D$裋M1@ E$EMU[^_]ËEǀ]UM ETUL>D$<$L$a#$eZM` $螉؛T$t$$ZAMtx t)E$eD$$Y@ @tˋP$uU(U]u}ڐ87D$ 4$^tux9tQ)D$ ED$t$D$E$|aU|$$D$sS]u}]ËU D$$\Y1ڍt&G<놐&Uuu]#\B=wCD$${U ȋUT]u]Ë$詀t&US讏t$_[]ÍUWVSUcÜEE$nUB0;B4M $uu4$H  EUptE|@@t@BM $D$rudžEǀU|$D$ UMǁ|Ɓ| $MSu`/U$D$TMǁ $D$Tudž't&UPT$M $uPˋU$NMǁǁE> E9|t0D$U$jM P׃tG4Pt,P@u PuԋU $D$SM4 ǁ ǁ $D$ZSudž4 t4$D$QkdžU$D$SMǁƁƁƁƁƁƁƁƁƁƁƁ$誄udž4$D$RtD$4$uRdžEǀUL$D$IRMǁL $D$*RuDdž4$D$ RdžDdž$$dž4$D$Qdž$dž 4$D$Qtdž$菃xdžt$wldžx$_Ddžldžp4$D$9Q 4$D$'QH4$D$QL4$D$Q 4$D$PP4$D$P džDdž džHdžLdž džPdždždždždždždždždžHdždždždž dž$dž(dž,dž4dž4dž8D$4$Odž 4$D$Odž4$D$Odž4$D$Ohdž4$D$cOdžh4$D$GO`dž4$D$+O\dž`4$D$Odž\džX$dž$Հ dž4$D$Ndž 4$D$N4$D$N4$D$yN4$D$gN4$D$UN4$D$CN4$D$1N4$D$N 4$D$ N4$D$M4$D$M4$D$M4$D$M 4$D$M$4$D$M(4$D$M,4$D$}M04$D$kM 4$D$YM 4$D$GMdždždždždždždždždž dždždždždž dž$dž(dž,dž0dž dž EǀUt D$$KLMǁ$]udž$e]ddžd4$D$K@4$D$K<dž@4$D$KF0;F4dž<ED$E$jtzUB(MA$uF4t!D$ D$D$4$eU@t!D$ D$D$$eMpHTH&u\~ 4$pOuU1p`pH T`TH p`(p$D$JMTǁpp8<0t[D$E$itFD$FD$iD$ D$U$dF6u98|M<4닉 $Xu[^_]Á@ D$E$xuT4$ D$I| 4$D$fdž| džD$4$VZdždždžD$4$%ZdždžDž@vw Gt$E$YG G@@uNjU\udž\4$Wdž$zdž$kzHdždž$Iz\$;z4$CLx$%zt $zx džt $yp džx $y džp $ydž dž$ydž@tfU@uMt&p@$dyU$SyMuҋuF,$8yF<$-yF$"yF $yFH$ yƆtƆ dždž4$V4$Ltypt/vF>t~ gtVx$x4$xuԋUJ_u$ox$axdžU[^_]ËHLD$$Q{ME荅HEHt Hu$S) YvMD$4$E<4$hPdž`xdžPu;0Ytω$Mwu$9wE|@ +B $ wM`uD$A $D$ND$$d M\D$ $D$ D$_4$R$vD$ D$D$ $^D$ \D$D$$^t&UWVS}}LJLJ| LJXLJxLJLJLJLJLJLJLJLJLJLJLJ0dƇ8Ƈ9LJlLJpfLJtLJxLJ`LJ|LJ$L LJƇ< <LJƇƇ@ LJhLJ LJ D Ƈ LJ LJ H LJ LJ LJ P LJ$ LJ( LJT LJX Ƈ\ LJ` Ƈd LJh LJl TG0G4LJ$dpƇ|LJ<h LJTLJ|LJ$lLJDLJHLJ\pTLJ|LJLJtTLJxhTCD$D$<$_wD<$QaVLJ D$D$4$xKLJ4Ƈ8LJD$<$j<$hD$<$?dx.D$<$D$iD$<$D$iD$<$D$i+BH@l?@3@HH Hd?<$H<$=ip<$_sD$t$<$u< D$D$ t$<$Z D$D$ t$<$Z D$D$ t$<$eZ<$h <$hD$ <$D$m <$j<$rT`߉D$D$<$?|$?$  LJ$ d<$Br4 <$p[^_]D$D$<$WpD$O<$ahD$D$<$Wt<$q LJt$<$D$tIt~<LJt$<$D$,ItWt>LJH@'t$<$QSqt$<$q벉t$<$0S뛉t$<$qM&U(]IvÂu}$ ^`ƋtCt$$]4$D$ D$:G]u}]Ë0D$<$tt$$/]u`D$$[u D$$g[kD$D$ T$$9fD$tD$ T$$fPD$!D$$7D$+qUU]M tu}v-AEE(t&}8=F 1ҋ%@EE̋U :7~OD$ D$ 8ET$D$M $at$}<$N4t&h;8Jt&`t&t E}UB L}E.M z.A t@@,uT$}D$t$L$ |$UUD$,D$E$iD$U$I>utM^D$D$}<$ct&M̉|$|$$L$ OfD$MЋD$E$K`D$U$=}}̋M},}-IU WMOu ESE6}}4tw}5tq}[}!E"~E$:E#8EEZM1ҋ}uEEMf1B11EEEE}@P,MF @ 'UF @ F @ F Y@ F  x 뉅tF;uPa80IvF @ *;u D$ t$E D$U$1KU EMUE1҉EEEEEt&$D$D$ fUAHEE..UE1EE}@كX UMЃEaEMЉEi}t x E$`$D$N1D$U$Dt$M $,Eqt$}<$EUt$E$D<]u]Ë@ @uT$4$?랋@ tNj@u뾍t&UWVS\U Ee M1$X]։:*jDžDžDž&'Fthtjƀ:u~:Fu鋅B+@1>:ƀ~VLF똀~uF+Gp@mB<BT$ $5t6t$$E\B<O_FdG=I|$T$ $38:D:8UD$|$ T$L$$7DžtctW;tDz ET$|$D$L$ $D$9t$LY98x Oɉ:G,l+D$L$$N.G,@dvRB<~B<s*z!|} reOD$4$3D$4$D$ D$.} "} @0@%Ha<>~_ek@ HD$ D$L$T$@ 4$D$K^CD$ D$@ $D$.@ @0 @1o;qH0`\DB @ut$$O(@ @J0D$ AD$D$$/2::A:At u~$i>t D$D$$$?>x D$D$$q$> D$D$$GH0@ @u T$ $''@ @D$ SD$t$$0x4D$4$*t$L$4$D$ c-t D$ T$4$D$o+t 8x 8 g0< ;w::B:B:By @ @HW{(<:U=:BE>:B5B @u(L$4$0@ @J0D$D$D$ IT$L$4$GE.x?t$D$ $0E$D$D$t=t$ID$ D$ $>t$D$$DT$ $D$=t$D$ D$4$Q=t$D$ $tDT$ $D$O,Ue3,[^_]Ë|$4$T$Ƅ=:Ƅ/:Ƅ=ED$ t$D$$Ut&1t"D$T$$G,D$`9F7 'U(U ]uu> B t.BEE4$T$D$ ED$4]u]ÍET$D$ "D$4$h=U]i>âuu 4$Ut$T$ D$E$h4]u]Ív'UWVSOU @,EBEd=ED$ED$ UT$M L$E$ EEx t/D$UT$ML$ E D$UT$M $U@ P'@ M;XT$ $U@ @@ @ ;D$D$ E܉D$U T$M $ZPE9@@ @E4P'1M@E5UT$ML$ UD$T$M $ t9}GE4D$t$U$juyU땍ٱD$ D$ D$E$.2MjT$UT$ MD$L$E$hMt%UP zMXB EE<[^_]EM $E}tRUD$ M $7Et$ D$ D$(D$U$uEE<[^_]ËEtUH y:uE<[^_]ËU썻tBD$ E؃D$ED$U$0D$D$ u܉D$t$M $qE9@ @E$D$D$ t$E D$U$k0a~ t-D$D$U܉T$ M t$L$E$9@ @D$U$2M@ AH@ Px(thAtFD$M $UH @ @t@AMMP XB uًM@ ;Xx,u9ٱD$ D$ D$E$/E EED$ UػD$T$M $/D$M $/M썃D$L$E$/UUWVS,u f8ß}.Et"~ F 1Et&UD$D$ D$t$$Et`Q zx( }u)R u;q,tED$$ 4P,p UUPE,[^_]Ðt&@,ESvUD$D$$-EfUt$1D$ "D$$6E&EUD$D$PT$UD$ET$ $*@4Ux,$D$D$ D$|$0E$M/~ t-ED$D$T$ |$t$$U$U@ 0E$t$D$OD$ED$D$ t$$ UED$t$T$ UD$$EtPt$$?x,t&pt&'UWVSLU 5ߚ+Ez MMEu"&<:Eut<'uuĉu}ċuuE EUE1::)‰U+UUE܋UMD$ D$T$ $+Ecu+uEuu}EUD$t$ |$D$$?EQEtEA Px(EL[^_]ÉUEċMăy:tEEEu'Up@$D$D$D0M $D$uuD$ BD$4$D$*}+}}EEp,?@HD$F(UD$ F$D$F,$D$0E}v}+}E}MUE|u썓usEE}+uUu}C@40F ;POLEE׃EtlE+EEEu썓 uE#UMu}D$T$ L$t$<$/Et&E܋UMD$ D$T$ $p(t5}܋EUD$ |$D$$K(M+MMEE@u+uEu+&'USE1D$ D$E D$E$-[]Í&U(]1Җ}uƉUD$ D$ |$$'t)D$T$4$t]u}]f4$)E4$D$D$|$4$ .D$ D$4$D$4$ED$ D$|$4$&tD$T$4$bD$4$' U(E]v0ïuuD$ E}t$D$E D$E$t]u}]ËM t}t}D$D$ D$E D$E$t@ @P(tfxoEt$D$ ED$E D$E$n8gD$D$E$7%^=@,u0ED$D$ ED$E D$E$dUWVSlD$cE /TD$U$3tPMB; D$c} |$E$$D$D$MXEDžD$D$ D$E $D$@ 0FlPxEDžDžDž4$ D$t$D$ E D$U$1҅tr y G@4z(@ Dž1Džt@DžT B@4V4$ D$t$D$ M L$}<$o E@كX „tFnEbr$::F:F:FB, ׋@,Dž 0F D$ D$U T$M $'k@ @6&MtjЃt D$D$ cD$D$U T$M $7*l[^_]ÃD$ D$ cD$|$E D$U$)l1[^_]Ë;XB떋@ „F! 801D@uDžA`t$U$*$F uaA '@ uB|$T$ L$D$ļD$U$,!?럍t&U}} ])uu1]u}]Ë@,tED$c|$$u&U|$$/(MD$c|$ $PMB;uɋ;XuBtEt w~ mU|$ $D$RI@ @92 UWVS<}E eU1Dž(d$%p_@z yu8z nt&u.z uu(z mt&uz buzet&uzrtv1]u]m< wd<wE<3wC<4wa<wD<3nA<3RfzezxfznztfzozgfzavzpyibfzoVzt}GDfBzsft&zpzrztfzsze,f{zeqzrgznvZzaPz mFz e74fzs!zozsztvzeznz tLfzrzvfzeznz tFfzt}BUE+ET$UD$ E$D$EĉEU2 &UWVS,u?O\;ttl9Efptl9ʉMs)=U?D$ D$4$j4$D$޺E\BG,G@D$ JUD$4$T$mMEp< t< t< t< t< tEU)ЉEU D$4$T$4$D$@Njpp@,D$B |$4$D$ jD$޸EM|$4$D$ L$D$躸)=p99Uuzt< t< t< t< t< tߋUM)ʉU+TEM D$4$L$4$D$TNjpp@,D$B |$4$D$ jD$E|$4$D$ jD$շ9}p@,)ЃttD$4$|$4$ ~Ftt@ @Gp@ 4$D$~D$'vdž1dž,[^_]Ë t u u[U"M䋖,1E&|$ D$D$4$FL$D$|$4$D$ pD$sdž@EыDP@t"¿D$E|$ 4$D$*%D$ Np@ T$4$D$ |D$&Uuu]üJttE 4$D$.._F0< cfD$E$QD$U ljT$M $詧ƅM|[^_]ÍED$ E+ED$ED$U$9 MENMFD$Ӿ$bEeE~_u<+<->_B< v'_D$E$^EoM9M4MV։M뱐E9EdD$U$MMXUUbɋuY ED$|$M $"U ׃EED$M $vHD$D$E$~_`D$M $?}S݃0EE\$|$E$9}tE>U@|l+M D$ D$|$$U EH}u(wT$D$M $D$E$>uԃ}LMU9EtE@ ׉}Eu}u^T$D$E$ID$U$芵뇋}tE9NMԉu먃}z uXt G9N~A< v_tD$E$u HD$D$U$D$U$<$HD$D$M $跶D$E$HD$D$U$zD$M $[w]&B<vB<vB< v _t>:vuNtDp@uȋht@ ut>vt$<$袘tu9lv< tx< tt< tp< tl< vteEl,[^_]B<B<_tED$<$)ƉD$t$ D$O뛋tD$<$)ƉD$t$ D$#lu`D$D$<$E'UWVS2U: xU9s$< t< t< t< t < u 9u1:(9։Uv1M< t< t< t< t < uE;Uu׋p@u1ht@ t p@t t E8MB<u7p@uF>wQB<vB<vB< v _tDp@uϋht@ ut>fvt$<$Fux9s( t t t t t&u9u؀>,[^_]ÍB<2_)fz(XD$$h@MUAtL<(<))t+u< t< t< t< t < t&Buٍt$ D$D$<$腫+ED$E<$D$ut>,[^_]ËE<$D$gM<$L$+D$M<$L$u,E<$D$D$< D$$ߗ&'UWVS,EE.BG%=ED$ D$|$E؉$€v x M 9‰E?:\6>\t9u;uܐt^U؉}f;u܉sv>\r9uw+HUfx,[^_]Ít&U؉}fy⍃1ɉD$ U|$$T$E1L,[^lj_]ËBEV9Uv~\i\փQ+H_L$$D$*D$E؉$蛙EG H &U8]uƉ}d-u*(dž(d]u}]ft[tV(Hdž҉DLdž|tddž(똍& sE܉‹@<t5ED$|$4$D$ 蠞dž dCtK@EET$4$D$U܉EB uE܉4$D$5UU낁H ED$ED$ "4$D$v럍&'UWVS\E fß+@ BE2U }B% 9EsqكXك(],E1RP,$uu9vME؋,]ЋE̅t͍ED$ E]D$t$D$E$&EكX&\[^_]ÍEU D$ED$ "T$${;UWVS,Eppé*@,:#t ,[^_]fruB< < uܹ\uɋUB< t< uM܋u܃MF< < 0< w}B< v  "R  } tx ts }tkEM< t< t< t < t< fuUPEU< )EU< ڃEU< EV}< t< t< t< t< t&tEUE)~?Mp@ $诛up@ p|$4$EʇUB MuEUpD$ D$ D$$/G,wD$"4$aEt U UWVS,EE/h(U9M܉EMB<B<B<  _E ':`M䋁ht@ t p@tEB@<=UMT$ $*U4>x+t&ƀ>yMt$ $uى+E89UUID$E<$D$}u9}D$E$"Eׄ M䋁p@u$ht @ EEuHA<vA<v _:G:ufEx:x$:UBGU*p@nMyqUMUT$ $u6ME+}܉8E,[^_]ËM䍃D$ $EUD$$Yuu%Evt&'U8]yò%҉u։}tPD$ $ғtD$"4$;t$ <$'D$D$D$R~tuUEfBE^wB@uEEfЃ@'UWVSU趿$M 'x9%49t |P9up9~EMMp9PMML$ T$D$E$脕~nMBM@[^_]É֋UT$ UL$T$M $P([^_]ËEM@T$L$D$ E$uU$D$荨u$1눉T$ED$U$误M)^&U8U]u}NÇ#xET$D$ E D$E$蒟Et}U@@$UƋ|$4$D$ڜEED$B)D$ >D$UD$$;EU}t$D$|$ $辅E]u}]Ív'U8U]u}nç"xET$D$ E D$E$貞t}U@@$&UƋ|$4$D$EED$B)D$ >D$UD$$^EU}t$D$|$ $U]u}@]Ð&U(uƋE}׋]膼ÿ!tEt5D$ |$D$4$ɝ1҅~]Ћu}]Ë@D$ L$|$4$耮͐&UWVSEMu؉M̉uMЋű}+E܉T$ UM؋Mt$|$D$ L$$D$'u}M؈Eˋh9MЋ8@EsD+M1&9t'EЀ< uuu㋆p@,9uًE‰UЀ}PU}HM7~vPUx\};EąM9Mw!g};[9Mv,\uً}D\9Mw9vEM+BmMUuċuhtmu^UME+Bu};x%U+7uMF< < >E8 '}8h$%EЉ<ptup@,h;84$D$Ǜ}D$<$ƉD$莑D$ ht$<$D$pF N@ Upx,p1ҋH t Mp@ $D$賓@ Pt$ u|$T$4$D}hBLJLJxE&EU;}ht@ t p@tE[EREu}h@E ‹ht @ M}uN }p@,EJA;B>M \u$Ue3EČ[^_]Ëp@nE5UUЀ}mzMuD$L$4$L}EU0u;xrQ}\vE8E}u }UEMEuЉU9xSU UuMup@,EE}\uEЋU;xu}\kUuuM:N_U\UEMWU܃EЋM;x7u9҉uuЉы}fUht@ uiMEM p@ UMEEM1p@uEP9wx\t:\u 9эt&vE)ШEI}h~  M+Pu~ F } W뷋E܋MD$T$D$ L$4$}t$$yz`@EEKABU2FD$$M E} 6uE܋uЋ}D$D$ Et$|$$|UUEEMu}UhMhEUD$$rMpB,Et$<$Da U1ɉWVSXÑ,ǀd$"F@;$1)‰,EEEpdž D$4$&'UWVS芩,M1ɉE$V\UED$T$$pUE胺?} AUu(x'ƀ>yM؉t$ $蠖uى+E9U܉U*D$E<$D$Մ}u9}v%MB<E9}wፃD$E؉$Eg&U؋p@u$ht @ MMuQB<vB<v_':G:u7Uz:k:BGUE8$E8{EE!M9MsUMUEUE:^BEUB< < < < t&< M؋p@u$ht @ EMB<B<_EB<vJB<vCB< v<_t7B<^v0MB<B<B< _xUU|p@+Ex.uE؃t$$zMƒEUp@U:EU؉D$$)ME؉L$$诒U؋ht@ t p@tE؋M};}s]U؋p@u1h@ p@?YB<vB<vB< v_t ?:9}v?xE؉|$$軒a9}wHEEB<vB<vB< v_t :%E9ErċM؍D$ $E9EWUу< < MU-MMU+u $t$T$CuE;Ms < t9< t5M[a{"M9}EUUMMԃE9MQE t uMEQM؋p@u5h@ p@MyB<{B<pB< e_\M<$N<{FuйOI*t&E؉|$$jʋE+ED9;< t< RڋM1;F<?F<F@MEEEM؃  uUcEǀQE9EvEEMEB<v؍B<vэB< vʀ_tŋU9U;EU:u(:Bu:Bu:BMD$ $KU؋ ы4 E؃M }#U؃ [D$$蚚CM)MEU؉L$D$$&u"MED$L$$EUMD$D$D$ 0T$T$D$ $~U؉t$$hE@E‰D$I$okE)EUM؉D$T$ $FEP8[tEMT$ T$D$D$ D$E؉L$L$D$$}F<[<{ B< v,<}&<@tJ<\kr|d\v5)p@u'ht @  PB<vB<vB< &$D$D$! t€u҃+D$ D$T$$ghtodp@zT$$za ie2$i>BDž<]0< Džz]_M:$h|$$cgu qF< ʍvrF< vx pD$V$VcSBD$b$2ct8 'm|$$ct"(Fп< 0< vك(UWVS,eE1aÚ  t? c@ P G@<t1:;<*1҉$D$‹D$$>$D$$t$}v F:u5:*t&D$ D$$D$dt@ H t@t z D$ D$$D$*x+~8=dD$$D$荏D$D$$D$ i<d<@@ǂ|kl:(tI1Ue3,[^_]1t&P Ru&ftA<vlǂ|8(]`&@Lt&Ƅ@  p2x>` UWVS1 EU8v0< wJ A< v_t.t;t\ tW t&tN tI tD t>}t9t5vu#EdU쉔< jE[^_]ÍdD$E4$D$cdUEzG%=uv#|$4$EƋUZOyD$|$4$ pǍv'UWVSʏ ,MƋp@u4hz@ pp@`>vB<E؍EM؉D$E $D$MɉE.}ME؋dD$<$D$D$D$<$D$ xf<d<H@ht@ uQuUU܉Yhu,[^_]ÍB</_&E EtЀ>'uː p@up@uE<$D$E؉D$PTtd<@H iB<`E<$D$E؉D$w8}UE8(|>:)?t$<$mt$<$5}t&UWVƋpd9P,s pP,|Eflpdu%E8(t‰8(u^_]Í^_]Í&Uuu]ӌ t*Px! E 9B(t\D$4$VV]u]ÀbW@(4$D$ 4$D$R]u]ÍvU(E ]F uu}}~vYU P(HW@D$<$D$t$ D$<$D$Gm]u}]Ít&D$t$<$k1Ӊ<$v{iD$<$uZ'UWVS<EeU1GÀ l@Ƃ@=^{D$:<$Xt.|$D$$I^ $D$iD$D$ 4$pƋd|$$RF Ue3Sw<[^_]ËptpDž Dž$Dž(~p@h^@ Tp@D9Ht$$i"1҉6t&8‹\DžXD$: $W<@yEpD$|$$|D$D$ $D$ L`d@<$t 1<@ƒ tT$ |$ $ D$YB<v B<~PlL$D$$$er$o>:1ɋx9s"< t< t< t < t< t&u9uޅu|q$D$T$ $2q>=_moDž Dž$Dž(wSX~:+Dž Dž$Dž(1l;ttx<'Rq<:@qDž<|u+‹l;<s蜶v0:uo0:ueD$4$;ƄDž D$T$ $y` Dž s$t:D$D$$TL$ƉD$$`pы9P,Qt$ D$D$$\d@@ht@ uGuDy<*tl<%th<&tdl#p@up@uBD$ $D$_JtN 뀋D$$itt$ D$D$ D$$d8t$t$ D$D$ $d"pP,1_zM)ǂǂ@ @[l;x1ǀ$x9|hx 'p+$D$Om|ht@ tp@tH,v0#SspDžtƅzƅ{9{gg|)||pB;BnI ntuD$L$4$R@ t J 0#{JA;Br;lr,%tl0O#t!#)ҍt$+T$t$ D$蕝D$D$4$L$ ;Xd19\D;lsddǁ|<ȺY;p"dždBdž|l@Yx9kIEkz\uyEqrBJt$J9WtD$ 4$9s|$ D$D$>t$|$T$ $:9ڻ$ҋuV|t&p@uc>jB<v"B<vB< v_t<'t<:C|5|p@uht@ ut댋1ɋ$ֲƋ|ba; aǀ|˅,.t9ij;]jǁ|9l(ǂd\ǂ|l2JBѬ8{pp֋9P,s pP,ǀ|l)+|mz*~!lǁd7ǁ|AB<+%m|w< t3< t/< t+< vt$< t l< t< t< t< vt< t +ǁ|l<1N^A<v A<ePB<dB<dB< d_dl@x;vF< A< 93D$D$$ǂ|l- ~|ml2ǀd]ǀ|n?|iƁ@x$D$D$8d 6|k‹t;kpƆ@@9P,s pP,ǀ|l@A0< |qσF< <_<.F<F<BD$ D$T$ $5ddD$L$4$H7p9P,s pP,ǀ|lfA0< |lȺ!ǁd=ǁ|=Z1ɋ$蓬|ƅf pǁd9P,s pP,lǀ|D~:e|izXut  :ǁ|lZpы9P,s pP,dž|lt ; |tF0< ix.`z.xdždlǂ|fB<>e<=udždHdž|l|]^t;觷։p9P,s pP,lǀ|0tA0< |bc7ǂ|l" S  cp9P,s pP,ǀ|l]B׃<=|<><~Nt0B< e_< ]_< U_< t&I_< A_|uFFWF:W ;|Mdžddž|l/7F< v_" t t t t#uǁ|It;G ы4 p}{'q"q`qq!p@u:ht@ t p@tt:1A<7A<,A< !1_9xwV]p@ug>fB<vB<vB< v _Ƌ9x\p@uht@ ut눋x9v< 2< *Ɔ;x58-p@u:ht@ t p@tt >B<ŗB<1_D$D$$٘x9v  8}uX-D$D$‰$ɉt-F5 4 dž|p@,d< U< U< U< t&U< U<#Ul{ ы4 ǁ|aj‹t;J 4 ǀ|l%|l!Njp@u4ht@ t p@tt ?TB< B<~_~'~: ǂ|D$ D$$D$X;DžLDžPƅVAa?=V_ǀ|l džddž|l,u։p9P,s pP,lǀ|蚐"pD$@ $D$fLD$D$ $D$ /dp9P,s pP,ǀ|lp@, $D$xD$ TD$D$4$D$ ;/dp9P,s pP,ǀ|lp4$ǂdǂ|l4$zǀdǀ|lR$#p@,ǂ|dl^CD$ D$D$ $m'džddž|fdžlp:(t̙8(ef|Հބo4$#e{'t)‹D$D$$kl$dž|D$D$$džddž|laǁdpǁ|fǁl>(g8(ǀ|lp@,ǁ|dldždXdž|lvǂdKǂ|lFdždLdž|ldždMdž|lǂdSǂ|lǂdNǂ|lǀdǀ|lpfǁ:(肖8(ǀdXǀ|l 31:{džd7l|p:('$ltǁdpǁ|fǁl>(ǀdǀ|lpfǁ:(ldždgdž|fdžglp:($bjǂdpǂ|fǂl9(l8(4$p@,d|dž|lǁdǁ|lShD$@, $D$CD$ D$D$4$&dp9P,s pP,ǀ|l8:xx:n‹D$$L$蓋t$D$$81)‰ǁdmpǁ|fǁml>(s4$ǀd(ǀ|lpfǁ(:(4ǀ|l-Eb $"4$$Կ$豿ǂdpǂ|fǂl9(OvD$ D$D$ $džddž|fdžlp:({ $˾ǂd(pǂ|fǂ(l9(iǁd&pǁ|fǁ&l>()t&$dždvdž|fdžvlp:(P[ǀd ǀ|lpfǁ :(E ǁdpǁ|fǁl>(ǀdǀ|lpfǁ:(ndždZdž|l 魿 $肼銿ǀ|ldǁddpǁ|fǁdl>(w4$ǂdpǂ|fǂl9(?f.D$ D$D$4$,$^fǁd*pǁ|fǁ*l>(ǀdǀ|lpfǁ:(^$蒺隽4$ow$LT $)13$$24 $ȼ4$蝹饼ǁdWǁ|luǁdGpǁ|fǁGl>(ǀdHǀ|lpfǁH:(m!$貸麻$#菸闻ǁdIpǁ|fǁIl>(6ǀdRǀ|ldždJdž|fdžJlp:(S^$袷骺ǁdpǁ|fǁl>(It&+$2:$*, $-4$ɶѹ$覶鮹ǂdcpǂ|fǂcl9(Ddžd)dž|fdž)lp:( $4$ȵи$#v;l)lǂ|‹D$D$$$,4$  $s4$ô˷ǂdipǂ|fǂil9(at&dždfdž|fdžflp:(ǀd%ǀ|l։p9P,s pP,lǀ|y霶 $qydždzdž|fdžzlp:(ǁdxpǁ|fǁxl>(qt&ǂdpǂ|fǂl9(s$&ǀd+ǀ|lpfǁ+:(p@,ǂ|dl 4$ݱ4$躱´4$藱韴ǀdǀ|lpfǁ:(vp@,dž|dl|tD$$83A< vvgB0< g8;‹<;h(Yt&ǀd,ǀ|lpfǁ,:(D$D$$胪ǂdǂ|lƯǁd{pǁ|fǁ{l>(e ǀdyǀ|lpfǁy:(ǂdVǂ|lǂdnpǂ|fǂnl9(D&$肫銮$_gdžddž|l'7džd&dž|fdž&lp:(mxǁd[pǁ|fǁ[l>(/fǁdhpǁ|fǁhl>(<&ǀdǀ|lpfǁ:(dždTdž|lͬ芍p9P,s pP,lǀ|ni$>F $#/4$.$ըݫ$1貨麫0 $菨闫 ǁdYǁ|lgD$D$$ͥǂdǂ|l|tdD$$0D$D$$O1ɉ‹ǁdǁ|l郪>(ǀd`ǀ|lDǁdlpǁ|fǁll>(dždudž|fdžulp:(1<wp@u7h+_@ !_p@_9.B<_B<_1_ džddž|l($躥¨D$D$$(ǂ|lu$JR,ǂdǂ|l"dvp@u7h]@ ]p@]>іB<]B<]1_uD$fnB<vgB< v`1_cp@u1hoG@ eGp@UG>]B<w롋ǁdYǁ|lɦ?$螣馦ǁd>pǁ|fǁ>l>(Eǂd@ǂ|l-ǁdpǁ|fǁl>(t&ǂd pǂ|fǂ l9(s$&džddž|l]"4$2:ǀdAǀ|lpfǁA:({B4$ȤǀdCǀ|l阤ǁdQǁ|lhǀdOǀ|lpfǁO:(dždPdž|fdžPlp:(OZD4$蟠駣E$|鄣ǂdFǂ|lTdžddž|fdžlp:( $ڟ$跟鿢ǁd'pǁ|fǁ'l>(^D$D$$ܜǂdǂ|l$ǀdUǀ|l̡ǂdkpǂ|fǂkl9(bp@,dž|dlH$q%ǁdjpǁ|fǁjl>(l$豝鹠$莝閠ǁdpǁ|fǁl>(5$"*ǁdWǁ|lǀdǀ|lpfǁ:(t;dždVdž|l{dždUdž|fdžUlp:(ǂdTpǂ|fǂTl9(s<4$貛麞ǀd;ǀ|lpfǁ;:(4ǀd=ǀ|l;$t $džddž|fdžlp:(+6ǁd-pǁ|fǁ-l>(Eα$Z$α$mZ $ϙלdžddž|fdžlp:(  $]e1ɋ$o*pdžd9P,s pP,lǀ|c^1ɋ$$o ǂdCx 'up9P,s pP,lǀ|]Y |։p9P,s pP,lǀ|k]ǂd|pǂ|fǂ|l9(:1ɋ$mo)dž|} HQRB%=it0Dž@DžDuQt< t< t< t< vt< tЋtDHr< tC< t?< ft9< t5< t1t'< t< t< t < t< tuىH+HD$L$$ ‹ @ tp@uJ YD$D$D$ $@D$T$ $D$ M@1ɋ$lǂdp9P,s pP,lǀ|Z[ǀdeǀ|lpfǁe:(4$ǀdǀ|lpfǁ:(c*džddž|fdžlp:(ǂdpǂ|fǂl9(t&ǁdpǁ|fǁl>(D&4$肓銖D$D$$ǁdǁ|l3džddž|fdžlp:(it& 4$貒麕cƍB< mvuF0< mƀD$D$$Ƌp@u>ht@ t p@ttZB<ZB<Z1_Z><Zpǁd5ǁ|lfǁ5>(fdžddž|fdžlp:($ ǀdǀ|lpfǁ:(Kr $萐阓džddž|fdžlp:(ǁd1ɋ$rfe@;$1)‹6fneD$D$!$Džt#\ t pt: ||{~>p9P,s pP,D$$T$t D$D$ $D$ d@@ht@ t p@ttp@ppы9P,s pP,dž|lL  D$ D$|$$t#@@ PWD$4$9D$4$D$ D$t&ftrt.q2D$$ƒf< t< t< t< t;xTƅt&|9:u y:D$ D$t$$c g1B x u'@Nz0) @H@2D$D$ L$<$D$$ 9tB H u@t z03* :*D$ $l@ P *D$@$D$4$D$ D$Dž Dž$Dž(鷎19K>:B~:~$D$T$ $g9D$$=p|E~:D$D$)ы$QhGDž<\1FCt:G79{|)7FN9b1ЈD2:9~T2|ƅzƅ{ۑǀ,(飉88QDl;xtLUQ)D,~?F<#0<{t!- ƅzƅ{+ $ɅD$$tdžlLl4$7kxD$ +D$$:阒D$:${t4D$L$$$D$#L$$X΋L$ЃpA!pƒtAB2D$$KD$$'P~p@u8hM @ C p@3 y?B< B<B< _D$$ɋF9:t Fc20!!#t.‰D$ſ$iB|L܄$ЃBƄ@ HI}-|{!|{  @ x ukHtd@ PMD$D$ D$T$ $DžDž(~Džt!džEAt$$Nn0t$D$ $B4$D$Ƌ8مdDŽ<yW!džd;dž|l<-5><[<{vǀ鋌9 9r z`tƅ{||ƅ{À/Y,lǁ|ux D$D$ D$$CPOMFƋp@u4ht@ t p@tt >NB<.B<.1_ceD$D$$ql=wl@ǁ|vƆ$xD$D$4$KY|#Y;xE5dž|l$Svǂl$]pt&|p9p,s pp,ǀ|l;6pxD$D$4$R*ǂ|Nj(N p9P,s pP,*dž|loҍx#xV]&B<v0B<v)B< v"_tD$U$-QFVp@uht@ ut{ƅzƅ{ǂ|l0;n D$4$W4D$ D$T$ $)ЉD$l)ǂ|mǀ|l%mЃldž4$Bvmx><pы9P,s pP,D$d@4$D$ht@ t p@ttp@)Op9P,s pP,dž|ll &y<TCfX0Dž _ NNN`-N' N"\ƅN"cp@u1h@ p@~?]B<B<B< 1_t7]B<vkB< vd1_;sp@u%ht,@ t&p@u?B<w띋tՍPD$ND$xT$ t$ $D$D$;xs;X FF+D$ <$tO;xs+  ;xrhx+HA YD$XT$ x|$$D$> )D$|$$xD$O4$8D$4$D$N'm N`Džu@ \Džp9P,s pP,p@,ǂ<ǂ<O0!q(80t '(00;x8O.t. uNjp@,뵋9uҋ0+8D$ 8t$D$$0p@,D$x $T$t$)ЉD$ D$ t$h$D$h8<lptBǁǁx<xD$ 8h4$D$D$8;xx(֋h$H4<<ptTp@,hPdždž+<xBJ< < z h;84$D$D$ƉD$$ID$ ht$$D$%F LN@ px,p1ҋ@ t#p@ $D$b@ Pt$ |$T$4$<O:֋9hx)0 D$ D$h $D$hBx08 8 8[z C xxh+Bx  B t&z &댋dHfi+;d ǁd1ɋ$6>p9P,s pP,dž|ly%cDž$Dž(LfdDŽ<{nxD$D$4$E'ǀ|l&Ob|udždLdž|lbx;s 8t\u\t8u݃؍p9< t< t< t< ft< 9u\,v$5B<vB<v B< _D$ $D$ D$ D$$Z\T$ $]t$$| Vl` 6pfdždž|lQ`pы9P,s pP, )dd<Ⱥǁ|dždl&_铸r#(#t&1zx!zyfz~z~yPyfAkdDŽ<zj8ǁd6ǁ|l^$D$tЃǁd%D$D$ T$$x)|$t$$dž|m,Dž4p@u7h@ p@s8eB<FB<;1_]D$D$$}$a<>(O $L$D$hD$ Ƌ $t$D$t$ D$D$ $谾4D$t$D$ $4 $D$^ǁ *8:@9+|Ƀƒ{;}9=K'=T"XKlY$D$ $4t4L$4$ǀ|l:g[u(u ((T$ $D$XD$D$4$D$ ƼD$4$D$ 4D$4?t$D$ $@1)t>tdt 4t%4d<6l*Zƒx:@($-l$D$41{Y4$t$1\Yt$$u 1҉t$$<u܉{#ǂ|lX| Uǀ|l%X;<utuuph,TuDž([9P)||9wLƍr.D$ D$h$D$ h<ptBǁǁxƁBrD$ D$4$D$[D$D$4$T$ w[g4$D$mT$D$$cg[at&FN(dPA@ H$pB, uARGV@D$ D$t$$莱tB H u@t z0?1D$D$ t$< $D$ t)9tB H u@t z00ƅ>$D$ D$D$$а(D$D$L$ 4$ɲ4$D$D$e|$ D$D$Ƌ$葲t$ D$$D$D$@D$ $D$ 葾(ǂdh;$9[lT[ƃƀ Dž>su)"W |t$$Ĩx9ǁ|lmS8)t9+1|;u拕|F48D|W 4 ~|t 2 p@u:ht@ t p@tt: B< B<_ :$ (ft= t @ H u @ff;t|-[WD$%4$;/WA<wJA<vWD$D$$VD$%L$ D$4$WVD$$S|\FA|X9tldž4$OP|$4$W&ǀ|pD$ L$$HD$:4$v/t$4$D$袬+ L!DžPƅVMD$ $b Nt 䋕*ǂ|laO|p9p,s pp,ǀ|l< O1ldž|蛲NlȺ4ǁdEǁ|jND$$xD$$B-xBD$ $D$D$ :Et9#y!u q< t< t< t< t< t܄f?< ?< ?< ?< ?< ?t< t< t < t< t< u⍃D$$D$&'A,3t- N? E? t t ft uӉ7?!ldžd9dž| L!Dd`D`D$$zD$D$$?F1ɉ‹EZD$h $D$葱DcDwD>\uËD$D$ t$h$D$ۥ땐t&ǂd=ǂ|l!BJנUAmt$$ 锢 @ x @Q E vE)D$4$lFx9[9[< u؋ uD$ $Et  9[fA@ Dž:ǁ|leHt$$jk@t%@d<) tT$4$ۘdž ǀ|l(Gt$$&t$ $l4ǀdDǀ| SGs"ǁdBǁ|lȪG‰ZkG0< pldT$ $D$p9P,s pP,ǀ|lFt&΁uf<~"!dž|l6Fx|eDfHHD$ D$D$4$解D$D$4$D$ ˯5t$$脛d7D$ D$$$D$@5D$D$ $躵p ǀD$D$t$ $D$$D$v|$D$ $D$ 8D$@D$4$D$ Ʈ(u(Hdžd&D$$Ԯ'L$$T :Dt&t$$G-Lǁ|l$Cu%G< t< t< t< t< tD$]$D$!$藳Ǜ?=u >f+D$!L$D$D$ L$D$4$`s&O:'tOD$ D$L$4$gx9ƉfQB<vB<v B< qbxuHWB<vB<vB< v _)9xp@uht@ t p@tt>wt$$ut&<,b<=pz>fǀ|l%wAԖ$XSXxfD$$iD$&$ ^p@u4ht@ t p@tt >:'B<v B<D']ph,D$&$D$ʫp@,d]9m< t< m֍.D$D$ t$$P7tsPT@@D$ 4$HD\@49w7A4/ up@,4948O/u49uD+8D$ +HT$ $D$$4+DD$ Dt$D$$4D$)@@D$L$4$T$ 輙P $T$D$薧 p@,JA;BT4$L$׎p@ught@ t p@tBD$4$D$ dH  d fuD$D$ $螭dXP =B< 0A0< D$4$}t+D$4$D$D$ D$$Dt&ZxWǃxVxVD$$ҽxVP;PV@D$D$$͓x+P@$$PƍD$x+PL$$D$ t$lt$D$ h$D$覧4$>hH hPxU,D$$謼~>ǁ_N|lǀ$膣:ǁ|&Qpdžd9P,spP,&ǁ|lH:lDhD$$蓤u&1҉=hD$$>1L$$t뷋$ȣD$ L$D$$4פ9g t g⋕Ƃ-9+hA< t< f9h< t< ft$$荣!1҉gD$ DžDžD$D$T$ $llBtl979||1Džh)<0h9uhGhT9s&T$D$$萳8)||ph|97w(h B90vွl|L$t$$|0#Džtl?||N?||8{tA D$$9 ?t$$D$}$ dn9dv~Uyd+ȃD$4$D$軽1ɉT$ 1D$D$ս$MƋttD$t$$F @`tu F 9st8\dG)ȍT9Ws*T$L$$:\)||L$|`$L$腞|t$ $d=D$ "D$t$$/`|+BI|L$D$$臆9;GvL$D$$9G|DžtЉ|lD$$ld~+}dT$Dž)ЉD$ D$D$$Cdlt|l|;Ѓ?ȀQ|l|];ыL$ЃBDžt-;9ɼB<B<B< _ut&9v t t t tހ tٍ~9v >=҈;;D$$ϊp8;9WvIW<\88;9w%xyLD$$x~kL~\L`D$D$ $yx)@$ԮƍD$x$t$D$ |$複t$D$ h $D$^4$hH hPxK^p@u7ht@ t p@tt zw9QB<B<B< _^YtD$4$?6YLx6ƅ;=~>rdž|l%/9WW<\t@8;9w9Rm9v;\t붋džPxT.J04$D$D$v|td|$D$$ޔۋD$$fF D$D$ $ޙ!D$|$$}D$D$D$  $|$葉D$ $|$4$D$MD$D$D$ |$4$GO@$4$D$~$y$D$4$[AB2D$$ϣlaL$$;@ P tD$4$2~dž B<vB<wet;x$D$D$g‹ƀ>$f D$ $K1_떋t$$uc1҉wA< < < < < t$$&t}kF< c< [< S< J< /f;t$$u1҉1_t$${t͉D$ D$D$$N|$4$藔Zl$dž|) @ H N@>D$ $u? 骩pA<9YD$D$t$$t$ 蚔 =fdǁ|l(Ƹ뿸븸뱸몸룸f뚸듸f늸냋tLdždJdž|ld'L$$c|Sl ǂdRǂ|'D$ ‰D$D$ $藨~>APD$$ $肭< 6< .< %< < <,tm<#u'D$D$$$踑D< < < < < ut&閌D$D$$$OD@ 6T$D$ D$$讑vǂd@ǂ|l"-u%:0&t& fffft$$ͭ/D$4$@D$4$(ƅD$$D$4$5džd`dž|l$9vKB<w:B@||+||Ѓ@ō D$$+| |K| |4| || |x{4D$ t$DžDžD$D$$nl%$~a<l_tBtx97> .729: u4$D$}LzDž+D$D$ D$L$$lD$t$$<̿D$$rD) D$$L$c|zD$ @D$$D$tOD$D$ D$ $D${t$D$D$ 4$D${}d$D$觎 D$D$4$L$ }D$4$D$蛝dHpfdžG dd<Ⱥǁ|σl& ǂǂt DD$$詈l1I@ҋuFp9P,s pP,ǀ|l$;u&PXD$ $Q&8{huD$ $D${dž|l =xHǁ|l #b|-|&$D$L$An(d@H $D$t$nd@H 阰%=[  uv|(t; ǀ|Ɔ@$l$ $D$譓D$D$ $D$ {~d@ p9P,s pP,ǀ|l.< t< t< t < t< 4;tǁ| <[<{ƀ%::F:Fr:FbD$$JD$} $s,D$=${sp t t t t fًƆ@D$4$|"B<vB<vB< v _t$u t t t t tውp@uht@ t p@tt?v|$$7ou|,t&wlDlx9v]t 9v>]u)ƉD$FD$ D$D$4$!t$$u1҉1_t$ $^tf60C$t$yqTǂ|p@u4ht@ t p@tt >B<v B<D$D$$ t t t t fك;;< t< ;֋D$$蠙 ы4 Gt$$>1҉Jt$$ ptvp@u;ht@ t p@ttxQB<B<_p@u:ht@ t p@tt:B<v B<B< 5dž|1_t$$܀3t$$bǁ|St$$荀u1҉K1_>t$$t͋t$ $;D$|$4$,|$ D$D$4$ɀu.r?t&-+t$t$D$ $t$D$$D$D$$hdDŽ<vx^>$tFp9P,s pP,ǀ|l=ǀ|l=D$$pLLD$D$$ ]B 6BD$$u{u.1҉gT$ $P{u,1҉1iL$4$ˊt믋t$$訊t뱋4l7)m8(e.ǁ|l1 ǁdNǁ|lt$D$ $ $D$cD$@,@,4$D$4$D$qkD$D$ ƍOD$t$$jt$D$$TutD$ T$ $ D$jD$D$t$ $lD$$D$@|$ D$D$ $llD$D$D$ $xt$ D$$D$較D$@D$ $D$ JxD$ D$D$4$kD$D$4$D$ wD$D$4$D$ w|$$b^D$ $脆|$耉9t0@ @@V<"p $FqF"@ @@V-r"F A 8-v#MmD$$臃uՋ΀t;t7t 9-uyuD$T$$tt ,t$[ 3M.D$ D$h$D$Dxh<ptBǁǁxƁ)! $D$x V|$L$$X9vcD$$L$X?|$$D$lXx9v'< t< t< t< t < t&9wًXt$ D$ $D$|$$st$D$$kD$L$4$ɋ҉t/ t* t% ft t tt t u)ȉL$ D$D$ $r t ꋅB=? $NjD$<$ D$ewx9v+< t$< t < t< ft< t9t < t< uB=?GT$$L$6r6ыt 9-uyu답D$T$4$ 髗$ȃx:ܺѺD$U4$`nƅN'q"lǀd>ǀ|kh0<ptǀǀ.T$D$D$ $s;l|$T$Qdp9P,s pP, l(ǀdǀ|l5,dž|lD$F$3_tt$ D$h$D$Ua<D$h$D$lmD$h4$D$mlAD$D$ D$h4$D$faD$D$$B ~|:D$ D$T$ $at6@ @t*D$4$NJt@ D$T$ $[lGD$4$T$St$ $ n[D$D$ "D$$Z:_t: 4 ֍;uh t v|:uD$ D$t$$_K@ @ dž|l@D$4$l2:?4t&1Ҁ?(f<: <{ttU dD$D$D$ $#e<ǂ gVuHhuD$4$D${_ lpLLD$D$$ lR:P|҉D$ dD$T$T$$_$D$< t:< t6< t2D$$XuƅWGu>WtOD$ $t5t$D$4$D$ dD$pk1 xCgl)D$$]D$$EUVS+ uw.D$D$4$‹h@ u?dž|T$ D$D$4$ad[^]Í&J 븍&uM$uZ4$hhxBdž|džHx)[^]dž4$[gt0!t#uhdž,x<tplBdždžxL$4$h8dždž dž$dž@ @t,dž dž,dždž$UWVS,E/ D$E$)aEU $D$aEM $D$`ED$E$`EU$D$`EM,D$ $hE0D$E$`UumdMxH0PED$E$[`UG D$$gm}uʋEMdD$ $%`Up$,D$ `EMl $D${ExD$E$o{EUp$D$X{EMt $D$A{ED$E$*{EU$D${EM< $D$zEhD$E$MEU4$D$QEM8 $D$QU$D$D$蘄EM  $D$LED$E$^EUH$D$^EM$ $D$\LE|D$E$QEU$D$nQMǁ ǁǁ|ǁ $xwU4$ wMǁ8ǁǁǁ ǁ$ǁ,ǁdǁ0ǁHU hB EhB @EMt|;tD$$jMD$ $HjU`fMǁ`TUċMB`@UċMD$ B $D$D$FUǂ`MċA9UċMD$ BD$ $D$cU`Mċq!*ED$D$$`UċMD$ BD$ $D$lcU`Eǀ|MUċMBD$ BD$ $D$-cUǂ|`Mǁ`UċM`UċMBD$D$D$ $D$ MU`MċAD$D$D$D$ E$LU`zMċqD$E$WtUt$D$D$$D$ $FM`2UċMBD$D$D$ $D$ EU`MD$AD$D$D$AD$D$D$ E$`U`Mǁ`UċHMD$ $VU`oMċUA쉂A1$D$VMĉt$D$ AD$D$E$@U`MċUA艂A1$D$fVMĉt$D$ AD$D$E$1@UċMD$B $D$xnU`MċUA艂A1$D$UMĉt$D$ AD$D$E$?UċMD$B $D$ nU`:Mǁ`(UċM $D$UU`MċUA艂D$AD$AD$A$D$ D$D$D$`:MĉD$ AD$D$E$_UċMD$B $D$FmU`tMċUA艂D$AD$AD$A$D$ D$D$D$9MĉD$ AD$D$E$ _UċMD$B $D$lU`MċD$AD$AD$AD$AD$ AD$D$E$w]UċMD$B $D$NlU`|MċUA1yD$E܋A$D$mUċM܉t$|$L$MD$BD$ B $D$D$\UċMD$B $D$kU`MċD$AD$AD$D$AD$ AD$D$E$\UċMD$B $D$akU`MċUA܉Aq9$D$`oMĉt$|$D$AD$ D$D$D$E$7UċMD$ BD$ $D$]ƋEċxtPP1tT$U$bmM|$ D$D$ $\t$ D$D$E$^ƋUĉt$MB $D$ajU`MċD$AD$D$D$ D$ED$D$$6UċMD$ BD$ $D$/\U`Mǁ` EdD$[D$E$EUd`MċD$E$mU$D$:M`UċM` $KUċM` $JoUċM` $JTUċM` $J9Eǀ`'Uǂ`Mǁ`Eǀ`Uǂ`Mǁ`UċMD$ BD$B $D$_`UċM`Eǀ`UċMD$BD$BD$ BD$B $D$5OUċMD$BD$BD$ BD$B $D$MED$D$$mU`MD$D$ $|mU`MD$D$ $SmU`Mǁ`Eǀ`}UċM`jEǀ`XUċM`EEǀ`3Mǁ|D$ $^U`MċUA9vMċAD$AD$E$fU`MċD$E$QU`MċD$E$NUD$D$$D$ OM`dMD$ $%^U`CUċMB $D$"jD$4D$E$kgUD$D$4$D$ NM`UċM $D$iD$.D$E$gUD$D$.$D$ DNM`UċM $D$riD$0D$E$fUD$D$0$D$ MM`:UċMB $D$ SU`MD$ $RU`MċAD$E$JU`MD$ $JU`MċD$AD$ AD$AD$E$5U`{}ċMăy=*΃UċM $D$ChD$D$D$ D$E$SU`MċD$E$gUċMƋB $D$gUĉt$MD$D$ B $D$rSU`MċD$E$gUċMƋB $D$gUĉt$MD$D$ B $D$SU`bMċD$E$BgUċMƋB $D$+gUĉt$MD$D$ B $D$RU`MċD$E$fUċMƋB $D$fUĉt$MD$D$ B $D$XRU`MċD$E$fUċMƋB $D$ofUĉt$MD$D$ B $D$QU`HMċD$E$(fUċMƋB $D$fUĉt$MD$D$ B $D$QU`MċD$E$eUċMƋB $D$eUĉt$ MD$B $D$&9U`MċD$AD$D$D$ E$=U`[MċD$AD$D$D$ E$=U`"MċD$ AD$AD$E$t[U`MċD$E$dUD$D$^$D$ cIM`UċM`UċM $D$~dD$D$`D$ E$IU`]MċD$E$=dUD$D$a$D$ HM`UċMB $D$cD$2D$E$DaUD$D$2$D$ uHM`EǀUċM $D$\U`MċD$E$tcU`rMċD$E$RcU`PMċD$D$E$8/U`&MċAD$AD$AD$ AD$AD$E$eUċMD$BD$D$ $D$ ;U`MċD$AD$D$ AD$E$:U`MċUA`kMċD$ AD$D$E$U`HMċAD$E$'ZUD$$D$0RMĉD$ AD$D$E$IUD$@D$$D$ >M`UċMB $D$YD$D$E$QUD$@D$$D$ '>M`uUċMD$BD$ BD$@ $D$TU`=MċD$E$YUċMƋB $D$YUĉt$MD$D$ B $D$DU`UċM`Eǀ`ǀ|UċMB $D$LED$$L~UfHHH\UċMD$BD$ BD$ $D$%U`$MD$D$E$\UUD$D$$D$ U`eMċD$AD$E$:U`D$$BMċAD$E$NUD$$D$GM $D$ND$ D$D$E$t=UD$D$$D$ E3M`>D$ $ BUċMB $D$`ND$D$E$iFU$D$:NMĉD$ AD$D$E$D$ $oAMċD$AD$E$EU`MċD$E$,U`MċD$E$>U`yMċD$E$IU`WMċD$E$>U`5MD$AD$E$8U` MċD$E$LUD$@D$$D$ {1M`UċB`D$ED$$7U`MċD$E$/U`sUċM``UċMB`L$"BUċuċMB $D$LuMD$ $=D$D$D$ E$S(UD$MD$ B $D$R0ED$ED$ T$$oOEMǁ`ǁ&Uuu ]}}=Pv t$HFt$HFPF TFXF\F`Fd4$YH]u}]ÐU}} ]uO t ]u}]ËWtCtC҉tRtt҉uf>ۋET$$%Vډ?룋ET$$u%W멍UE D|C]Á~ttt1]Áf}ˍAv1f$t !t#t11fz]ÍA҃v1볍'UE tH]UE U9r v]]fÃ9Br] UE u]1f@It@0]ÍvUU BfxBt]@u@@ uJ@]Ðt&UE H@]Ít&UE ]Ð&UE PJ]Í&'UVS uE Mݲ @tZD$4$":4$D$D$D$ D$ 4$D$9t@@ t" [^]Ít&p| [^]É4$D$ D$D$K [^]Ív'UVS uE L @tZD$4$b94$D$6D$D$ D$ 4$D$8t@@ t" [^]Ít&| [^]É4$D$ D$D$5K [^]Ív'U(])Lb u։}E$ 1D$D$ t$ljD$E$8)G t]u}]ËED$ "D$|$$JҍU(}}uu ]Kư F@FuFf]tf[tf\t]u}]ËVBJFf wBtAFf wAuD$!<$dGtV|f]t1f[ȃ^D$ 6D$D$!<$+m&USJ D$>D$E$AUSJǯ 6D$E$A'U]uƋBQJÊ t0D$$74$D$54$D$&]u]Ít&R FŐt&U]I2 ҉u։}t^Bftgf=ttf=t:Ft&u>f}t8f=t&t.f=t(f=t&t fFtrv]u}]BtrFf=uFPNEF@P;utu1 Ut\7D$<$'1FfU(UU ]uƉ}BH f=_tRЋpD$E|$4$D$ ED$7D$24$D$v']u}]Ðt&T$4$,fU]iHâ uƉ}׉L$4$>D$4$D$']u}]ÐU]HR uƉ}׉L$4$>D$4$D$&]u}]ÐU]uƉ}BG f=_t=ЋpD$74$D$4$D$^&]u}]ÉT$4$+'UWVS,E UM @Gy @EAuf~t E ,[^_]ËVB%=B @EEMM Qf tE1ft81f} t+f t" E@k ^fU܉D$ uMB4$L$ D$tUfBBMD$ $ ED$D$$L5U܉BMQ $D$q H0U܋MBAF0B@BuF@E Pf}ff ?D$ EUD$7D$$<u VHfvbf}f  &?NT$UED$ D$$CEu V"fv ?uD$-?D$4$;&?# ?u? ?ufD$ED$ D$$)4@ (x  Uuu ]#D\ FD$FD$E$AFF ]u]ÍU(uu]}C F@8F@F)ЃD$ T$T$4$&E N @0V ]u}]Í'UE]VCÏ uu}}t D$4$1t |$4$1EtE4$D${1}tU4$T$e1J?D$4$#: UWVS u B f~t1&Fth96tUf=t>ft9ft&t.f=t(f=t&t$f=tuUfu[FtZǐt&6utO [^_]Ðt&96u벋Ft&qpf1 [^_]f uEtEA@@tV tAIu@ nxcvt&D$E$e U(EM ]u}}Aö A58u(t ]u}]ËD$E$g $tu[]Í?D$$8D$ 1T$$.US= $(u[]Í?D$H8D$ +T$$.UWVS } =ÿ wf!v`ff7f^fvzGtD΋$9"G e [^_]ff ^t&rfr&G D$E$ GG$'3G{G D$D$M $IGD$M $G6G(B(Gt&D$4$UMA Bx,tgBE|$D$ U"UB ENȉEUfB}BfGGdJED$ D$E4$D$3&냋UЀzfxfz%BBfx|@qfxf;x]f}fJ EUЋM܋B 9A 3UЋMBAdHLUԉT$4$=Mԋ MfyuL$4$"EEU4$T$ ME؉D$4$U؋dfJ}M܋Iɉ`fy|MЋVAH`@D9UMЋEЉхEHD$4$NHVxLMy?@I@2t&U8U ]u}B<%u f=t+f=]t%f=tfu&B =t=]t =fu } MpE Hȃt<tE ]u}]ËUu} wftGt$DtE|$$E 뫉ʋM fYQvzt@uE @uf_-pƅW}D$-<$x ¨@U rMt$ $QvuM fA.AE f@/U B} fG0GgM fA1AJ} }} GE1E UD$$} rt&M AAt fx?jU Bfx @ M?D$ $v} GpoEt$$vuT} E|$$=UD$$ED$-$JU BuwMAt5 AكXztIAك(zt5U?B ?׋EEu1gu?Etދu oE󦍳?81E MP AUUMT$ $SكXzlUB t UMT$ $vUE ] ߅ }}uU BfzBBf=v_f=Kf=f=JE put$<$vNut$<$f=sgf=vS,f=tf=D$-<$t x9D$D$-<$E ]u}]ËU Bptvt$<$hvuˋU r<$t$MvtfFt:t$<$vu拃$ppot$<$f=f=:vtE @Ap6t$<$vuf=t&uU B<$D$U Btfx u@ u?D$<$ z&U}} ]C| uEGft5f ff}ffuDt&D$GD$E$6}}}}E|$$lj]u}]f=tf=tf=Of=uO}*GD$GD$E$ 딍t&f fftf RfjG`E믋GpMEt$D$E$K vu+}} Wt}` ЈGO f=wof=s{f=}t}*t }[G@fG@DGG@D$E$ OOf=\vzpGjED$GD$E$e LW@4}*tGOvOf捴&'Uuu ]}}ր FftyvDf}tqD$<$Bt?D$D$<$D]u}]Ð fwfF @,Ft$D$<$ 뽋fFFD$t$<$X fUuu ]}} Ff tFftpD$<$tu]u}]Í?D$D$<$gՐfF @(Ft$D$}<$ 몍fF}FD$}t$<$ vfUWVS } ? t*Gt$wtEt$D$E$F vu [^_]ÐU(E ]~ u}EU J} Gf=}}}t&|M @t pU4M Qfty@x pҋUD$4@t$ D$$pM $D$E ]u}]RDuߋ} Gf=8HU Bt*z M}L$B<$D$t&}}lE M PЃ AE$Et6}7}*}U Jv} OgE} D$O9if@f_|} E|$$qʰQU |$MB $D$}g}uE HULMU EM |$}A<$D$_}uE HUǂL?yM D$}A<$D$ Eq.}M }A <$D$U D$B<$D$M AA }|$A@D$E$MLU} D$ G D$$ $D$.@ 9D$ UG D$$$D$D$\:D$E$ E p=UMt$T$ $ vu Ut fxu}wM?D$ $d }A}E @UǂL?}$xRMǁL?}u } GMU E=}pE HULEL}}+tt U B@@z} ɀOUǂL?}F}91} wVffu ~ F D$ ‰D$9D$E$ M Ac}|$AD$E$ EU Bp4M}t$L$<$ vu} Gt&} G@ELƋFuVf~ F D$ ‹UD$9D$$0 U JZM I} GGfB@DBBM@ $D$e<@@ tF@ } LJE D$E$Uǂ MD$ $뮋vf^tftffN$@@@@@ @f@RDPFH_M }D$ A D$$<$D$D$ D$<$D$TNAfu6y u IAfu$A MD$D$ :D$ $]ft,tO9tK1fFF @DF}QG@ @t@I}u뱍UWVS }u @It(U Bptt$D$<$vuE [^_]Ð&UWVSGÀu ҉EMt-Bt'rt vEt$D$E$nvu[^_]É'U(]uƉ}u fz$t|$4$ ]u}]fBfxuD$4$ tNjp@,Et pP,:D$D$4$LpUP,|&UWVS } 6ot t#GtwtEt$$ vu [^_]Ð&UWVS} t ~ftwG@uyGt&Gt&pD$E$uGff=f=]f=vE|$$<$[^_]Gf=f=t f=8vf$pw w $_uGKvG f=vIG$CG $GG $vG0- $D$E$f==f-f*?D$H8D$ `T$$$?D$$8D$ bT$$UM ] /r u}qVDtF@uFu~t f tt&Ή]u}]ÀxG F AG FAEL$$dE|$$UN뭍t&'UWVS u F q }P8t H,E@8H,f@4t$<$hNu@PDt@I@D@Iu&P,t @,f`H [^_]Ë@Itڋ@0<$D$f`H뿋P(q@<<$ G$;G(cW$O G D!W$LJG@(<$D$@(@$<$i<$ 듍t&T$<$h$YJ@D$<$UWVS,E o aD$ D$M L$E$EB HɉMp MH(4D$E$UUB4@,th@@,EueMpp,tpP,EEU䍃:BIMD$D$L$ E$Upp,ML$E$D$E$ED$ D$U$MU@ P@ @ MXUP4ML$E$UMH8UP,D$:U $iM MtEUELVMtD$- $D$UL$D$xMD$L$ ULD$$M@ @E,[^_]ÍUhkD$ D$D$M $>D$ƋE$IED$ D$U$Mp4ED$U$MUP8MH,UfHHE,[^_]ËuEP7MtD$- $UT$MP $D$U@ @@,B0ML$E$UMH4ED$U$MUP8MH,p@@D$D$-E$o$UD$UL@D$D$-E$!$TUP $>UHUWVS%j }<$p<$,D$pB,G$;G(!W$O G DW$E ,hD$<$Np<$D$E phU @,<$D$&Fp@ <$D$~<$D$ VD$ED$UƋP0fHH.D$D$ t$<$p@$p<$[^_]É<$t&W$O @ @W$p F<$D$Fp@ <$D$<$D$ VD$ED$"UƋP0fHH.D$ D$t$<$-'UWVSg ,uhD$4$ @4$D$E E PB @E8ED$ |$4$D$whE|$D$ @4$D$E 4$D$dždž|,[^_]ÍED$ "D$T$4$k@D$4$@D$@4$D$džh{UWVS|õf } $a@@@@ @@fx6FEFEFuAuUUxt<8u^UDt$$ [^_]Í&Ut$$tt&UD$|$$F 돉t$$lpD$:D$E$UWVSLÅe }$1@@@ @@@E U MfFT$ $D$FMFQ $D$9MVAluX,D>Bf8EE9E~T9M~uXT>,4Gf>ū\Ȁ8I ffEE9EEt PH@LTT$ $HTt$<$Pue35 [^_]D$D$$u܅~&X,D fFЃ9E11E&&lfWtA,fu9~ƅEpu|$ D$7D$ AD$TL$$U`ug;}sbv2v(vvv уvA9`9UsUUxu+XXD$D$T@|$t$ $UXX9xv 99}EEԋTu1uXEAUD$pT|$ T$L$$uiMMMx֋Tt$D$) $|$ D$UDDuԉXXTEЍEЉD$T$ $葾}ЉXEx@TD$p|$ $D$2MEM9)ǁD$,$oP,BE؉ЃPN1spiDž`EEM@΋Tt$D$D$ x$)D$9uԉXE)EW}T|$$nPD$TD$ D$-AD$B $D$n@LD$ DD$D$$TUЍME847<Tt$D$D$ |$)D$Suԉ\E+E^ EЍUE84$v'U]N uu}${@@@ @@E U fG?GGE WuGE uVUxt U <u\UD|$$U ]u}]Ðt&U|$$E tUD$D$$G 뎋E|$$pU D$:D$E$&US^×M ED$D$$G[]Í'U}} ]LM u}Gf=tf=t f=tf=:u5wtFtEt$$evuEUpGGUtG]u}]ËED$D$$w Uuu]}@yL 4$EED$NjTu%E 9F$8Eu4$]u}]Á݉D$4$G뺐UWVSK $ 1E U fFFE EtMUMVUtj}truTEEU} FVtbUxt U <UDt$$U  [^_]ËUEP먄tEE뜍vMtUU느ED$D$$UPUNFkFcEt$$zpU D$:D$E$U(uu ]SÌJ }}tf~t&t$ D$D$D$<$TƉt$<$ֵ]u}]ÍvUuu ]UJ F@tN@D$$F]u]Ét$$]u]ÍvU(M]UüI uu t1B9t-T$L$ D$t$E$聯‹]Ћu]Át(BtBAJJЋ]u]ÀJJދBA@ABHuҀb̉UWVSI E$U$8E1Ut5fFFE UF6FEtEFUV$Up@(F(p@0tkpx0 t_px0tSUp@0$D$軹UF0p@4uGpU@4F4uVp@,F,XUpU@0F0p@4tUp@4$D$IUF4tF,EǀUp@ $D$`UF h1҅tP,ET$$:UFh;8t|p1ҋ~,@ t Up@ $D$@ PE|$D$ T$$t)E9tB uxJp &Et$D$D$ E$&[^_]Ëp@,h;8fFFT$U$r&U(M]U,F uu t-tQA9t0T$L$ D$t$E$‹]Ћu]Ívt*AtAPQ]ʋu]ÃAQAt떍U(uuM]U MÆE }ȋ}t"ɉtF9t&L$ t$T$<$]u}]Ðt&A9tL$ t$T$<$ЋVABAFAF $E뫍'UWVSD Efzt|r1ug&vtYf~t&uFt@D$ FD$D$E$ض|$D$D$ E$-vu[^_]ËBt@D$ BD$D$E$耶[^lj_]U(uu ] D }}tLFuZuLtuGf~t$ D$D$D$<$跩Ɛ]u}]ÐtD$D$<$Xt$ D$<$D$f@F룍vfFFFE@f-fqT$<$詮EPWBf-fET$<$}4t&UWVSEB u U@4t$$EM>Ex|$$dU$M $Ex$ UMJ4~fF}fFFFFMtBET$ D$D$$EFU|$$Mt$ $ԲEt$$ƃ[^_]Ét$ $譲 fU}} ]SÌA uWEOfGЃfGw3ft&f=yft&u4Bf&"fft&t7fpE|$$]u}]ËuDuމЃfGEfwGptvEt$$蕰vuf5vf:t&`wEt$$\vt"NEt$$Zvuߋ$sppwuЋEt$$vtVuEt$$ׯGD$E$ïEt$$误NGu|$4$GfxuD$4$p|$4$Dn'U8}} ]u> ftRGG@pt/VURNfftAf t;vt&ft]u}]G@u+GpUt$$®ԋEt$$v븋GpD$ED$ D$$AH0UgD$ D$D$$H0FfxPJRfBfx@fxM@qE@,E;hMA$abxBfxu@fxg@u;p,Sɋ@$<8a?x0g?tOfzRuOfzSuOGHQPEL$$蒻EL$$έUBf=t6f=Et6MEL$$dft4MO Mft$UJM뱋Ut$$뾋EUD$$ЧM EHufttU;tPfu@(EH둀8b1ɀxvlt&UWVS } ÿ; t#GtwtEt$$ݫvu [^_]Ð&UWVSD$ED$ U؉T$ML$E$UD$D$T$ M $蔢NjExU܉W El[^_]Gf=f ETUȋE~L~|$$UЋE蜁w&fEUȋE>~MA|$$UЋEV1fZUUȋE}|$$UЋEfGf} f EUȋE}|$$UЋEʀt&Gff f=ff=\EUȋED}^A|$$UЋE\7&EUD$]M $6EE09E"MEUEUmM9[uUȋE|EED$CAD$U$S|$E$UЋEUMzEEOMG|$ D$D$E$UPMljA}tEԅtEԃEE gAI EEENMMhUU\EEPD$ D$MĉL$E$Et&UU ]uu, Bf tYf=\t6T$4${4$D$D$D$ ]u]‰B@uƒ@B]Ћu]ÍvfB @$B]Ћu]fU] B, uƋ4$D$D$D$ I4$D$͠]u] U(uu ]}}+ FfxzV@t!@tzt$<$肰]u}]ÐHufxu@@t҃@VD$<$.D$D$<$D$ ¥VBF뒍v@{t&t$D$ F<$D$հbt$<$ĽƋ@1U8}} ]u* Gwu;֨Ut@Gfxt6fxU@tfwO]u}]ËE|$$"ft*EUD$$D$ ED$赤뱋UD$D$$D$ L@@bPB vta@EUD$ D$D$$וUD$$D$ ED$|$ƋE$VED$ED$ T$$3닍'U(E}} ]uGH) W҉UUBf=t3ft-EUD$$˾UG ]u}]G|$}<$芧$ 莶1fF9}F6FE|$ t$D$$f@:G~it&|$}<$<$D$D$7D$ 袢 GE|$$覓'U]E' uuD$4$蛽4$D$D$ E D$0]u]fU(uu ]}}]Ö' Ff tvf=t@f t:t$<$2D$D$<$D$ ơƉ]u}]ÐD$<$Dt ;D$D$<$Ƣ떋fF @,F묍U(uu ]E& }}tEt=t5D$ D$D$<$ t$<$D$轱#&D$ D$D$<$ؠ]u}]Í&U(uu ]}}6& Ff tvf}t@f t:t$<$һD$D$}<$D$ fƉ]u}]ÐD$<$t8;D$D$<$f떋fF @(F묍Uuu ]@y% }FEU V @t3t uE$xƉ]u}]èuuW6tt&t uttFf=_-Ћp Edw뎍FEVUBffEEu:UVFf=_Ћp Evt‹EE@EEMEME넃z sEUER҉UYQEMEEx}0pU En)Mt$ $耛YED$ED$ T$$ݵUBfx7MPAP$UЋ@(EEЅUD$D$$ץME̋AŰE܀xMЀ9$t$1UD$ED$ $D$/EMЋUD$D$ E܉L$$D$EE`uMIɉMtAeA҉Eu @AUMAf}Xf=NUB fvcrAE EЋUMET$L$$f=f=vD$D$ $諕D$ MB D$$ $D$肚@  UD$ MB D$$ $D$O8MAD$D$ BD$hAD$E$E؋E؅UB t}@EEЋU؋MT$ $EЅEԋ@EfxMPAMAD$D$ @$SEM؉D$ED$ "L$$EiUԋMD$ B D$$ $D$/D$ D$D$E$農UĉVMD$ UA D$$$D$՘@ tHMD$ UA D$$$D$覘E$EMD$ UA D$$$D$^MD$ D$ $D$뛍&USE ! D$E$@txt[]ËPfzftJ []Ít&RtـJ vUSM 舲 QtAfxtfxt$EL$$e[]Ë@tfxu@@t׃ʀQ`ˍt&'U(U ]}}uB C ptf~tE <$D$]u}]ÍvD$<$t͋V, P }AtBD$D$ ;D$D$<$p닍v'U(E ]uu}]Ö x@D$4$*@HD$ D$D$4$v4$D$D$D$}4$D$ 莐4$D$ҫD$|$4$D$ j't&D$4$踅‰I4$D$葫]u}]ËWt&UVSU gà uBtIB@t?@t8fB(BT$4$34$D$'ƒ[^]ÉT$4$‹@@tfxu؀`[^]ÍUWVS,E Ư u@t@fxRD$ D$D$4$Āt B H tNAD$ D$D$4$萀t B H t,E 4$D$?,[^_]Ív@tz0yvHt̀z0vyċU E RU@D$4$Ӓ|$ D$D$4$7D$D$4$D$ [4$D$蟩UD$4$T$D$ 脙D$@D$4$D$ 4$D$ (v@@@E@UUu LtE:xux:xu/E$蕍<$D$ED$ϝUh봍D$ED$D$ 4$D$~UE BuU%BVED$4$D$qE3 U(U]}} u7p @ pAD$D$ D$t$$ttD$E$/UAD$D$ D$t$$ƏttD$E$ftWOfzt%U|$$芁lj]u}]Ðt&rHHu͋AtƋHtfyuA@ tt8>ux&u;QuBfU]E ? }}upD$<$t$<$D$t]u}]ÍvUuu ]}}譫 Fut$<$u]u}]ÐD$<$ħtҋF@f%twf tf vuA AD$D$<$tuEUD$$tE,[^_]ËEL$$sEqMT$ $sj&UWVS|$D$ D$D$E$oD$ UD$D$*$kEt&O1tAffx@@t&AE|$ D$D$*$OkEuvUUED$D$$~qE E$iEmf$(Af=tftfvy |$ &F$EJfx@t5Pt Pt80„EUD$$nEt$$n1'D$E$`EE$UD$$`E}ET$$`Utx tf= t @كX ƒ=D$E$Ã$t&UWVS,}։ t QEut0}VBfCf0Ff(ED$D$$qo|$D$D$ E$Ft1ɺEED$E$EƋEtx}u*;ut7E FEt$$ogHǃ,[^_];ut F@;uuɋEt$ D$D$$^h릍f~FtPQ_@ „Ew~ E:t$D$ D$D$E$k~D$ ED$D$*$gEN1tAfu5gfxfZ@@PA@t$ f$0Af=tfftfy  Et$ ^Et$$]]Gf=EfEED$D$$Im?Pv?untD@كX ƒf=bS80_D$E$荀F UWVS蜆 u} D$ D$4$MBD$Wt Q z te?BD$ D$D$4$wWt Q z tF|$4$D$D$64$D$ e[^_]Ít&Rty0yvRty0vyD$ D$D$4$&YD$D$4$D$ Je4$D$莀|$D$4$D$ vpD$@D$4$D$ e4$D$xIt&UWVS,E 6o fx#UMfyLU z0 MD$T$L$ u4$wdE$ w1󫋃fF@xFED$U$FMF |FE Fx0xU:EUB0t$M $%u t$ D$FD$E$mMU B1Mp9P, $ v1󫋃fF"FUT$M $~NFFE FUE0t$U$b~M A U B$E ,[^_]é lAuf~6;uEEcff f}t&ft&fBfvtf v6tn9u}tV@tfuMVA@ @@$D$TB$?P`E6u|$U$[X}܉9uuEM Q,M @ oE H0H4vU܅+EfxqF @EU zF tUp@uu N8E uP, 4E D$ EL$D$U$ht$D$M $Fu MV, @ P:PBu(B:QBuB:RBuB:SBuN0 ut$E$dpP,MqU2pED$ "D$t$E$v@=E H0@H4@t$U$T{M L$ D$AD$u4$iUT$ MD$L$u4$T,[^_]À9 syiFǁt%FPBD$ D$t$E$a FFt~@EE H0t$E$U+T$M $UT$M $UD$U$U3L$E$pU{ED$ "D$t$U$}iD$1t$M $-Ct&UWVSE} ~ EG@yGfxdpD$E$bwf~FEFD$D$E$/Et$D$ D$E$KƋG;GwEFfF @4Ft$E$ yF1F2vt$E$xF=vt$E$xFGf=_Ћp E[^_]5F@[D$E$yf =D$D$E$;^Df[^_]b5w|$E$au[^_]ÍD$D$E$yD$D$D$ E$bTƉGG3E詵|$D$D$ E$gD$E$*iD$D$D$ E$S|$D$D$ E$PgqeBD$E$vsfU(uu]U }|V ttH]u}]fzT$4$xK4$D$p4$D$@Z‰pH@@ 4$D$ddžRJuBD$D$4$,jE%V@>;VDV@-+F F)1t T$4$]>ED$4$D$[tT$ D$84$%D$7ZD$4$PH@@ 4$D$d8dž$dž$rT$4$GPv]|$|$D$ 4$7]4$HwV@t&'UE ]y uut(D$4$tD$D$`4$D$ +Y]u]Í'UWVS}VyÏ uGf}f=f f f~t& V@vu$Fff!f#fD$D$E$?t$D$ D$E$8FGf}\t&D$ E$t[Ff!f#p Gf}f BL=T$T$L$ D$D$ E$Xf~FHHE-@fVt%f#tt|$D$E$pf~#t[|$E$rt$ D$FD$E$Ga} `tc[^_]Ðt&B4t&Ft|$E$Grt$D$@D$D$ E$]} `uD$E$rD$D$`D$ E$V[^_]Ít&U(uu]v }} t f~Et$ D$D$D$$AƋt[f~FEFUxt<8ueUDt$$@9t5]Ћu}]ÍFUD$$F둀f|vET$$Q븉t$$YpD$:D$E$m UVSu uE D$D$4$D$ T4$D$J4$D$D$m4$D$D$D$ T[^]Ð&UVS-uf uE D$D$4$D$ S4$D$sJ4$D$D$?m4$D$D$D$ sT[^]Ð&UWVS<}t Gff f=\G EG U|$1$EXEEMAf}Ef ;fu MAUMT$ $ lD$D$E$TlƋU|$$nMt$D$ $D$ ^UD$$D$ ED$:RM $D$IUPD$,$T_MƉH ED$D$$qYU$Mt$ D$T$U $D$E T$UD$T$6UMD$ ED$$D$\<[^_]Í&UED$$D$JcM $D$mD$E$jUD$$D$kM@GfGR8WEEEAfx8@pFEPUfFMT$D$ D$ $D$U=HVƋME0FUMT$ $UEt$$BM@G wEG U|$1$UMEMUD$D$$D$ DEEEЋpM $D$x=D$thUWVSUUUT$UT$ U $T$UT$<$[]Í&'UES$EED$Ei D$ ED$E D$E$E<$[]Ít&'UWVSi ,}E <$D$>E@t@pABD$ D$D$<$:tB H BD$ D$UT$<$J:tB H <$aBD$ D$<$eD$D$D$ D$<$D$vPUD$ D$<$T$9D$ D$<$ƍBD$9R @ @BB @t@J0<$GB H tu!D$<$wX<$ƉD$Kt$ D$D$<$];UD$<$T$D$ RE<$D$.E,[^_]Ít&@tz0zhBhT$<$(TD$D$<$D$ >D$<$D$ ED$QRUfB4BBf@EPA BUB@ t$ D$D$<$k:D$D$<$D$ F<$D$aD$<$D$ ED$QD$@D$<$D$ LF<$D$@ZD$D$<$D$ $FE@ @*z0 @t&Jz0BE2 D$<$D$ ED$Qt&'UWVSue }'E t&< t< t< t< t < t&u֋ED$E$cUD$D$$D$ Ft9t<$vB,[^_]ÍB<$D$ D$_<$D$ D$D$J<$0B,[^_]Ít&}EGUƋE<$D$`<$D$D$D$ :t$ <$D$D$"LƋE<$D$D$D$ 9t$ <$D$D$K<$D$ ƍBD$ _t$<$D$ D$D$I<$EA,[^_]ÉL$<$1>@ PpUWVSEuUM}a \eE1xtpEtF@ ExEt"xQB @EEEEp t|E\D$ T$D$<$2Et t$<$.Oxtx\D$$ Ottt\L$4$N}G Mtu@ P qEpE}u}t M9p1M_UP(M@ t @$EUM\D$ T$L$<$~<|\xp\D$$[u>M@It+\L$<$mZt$<$D$7tut&\pы@,Et pP,}:@IET$\D$D$ $?\}px,E\D$$?%EFE%M.\D$D$ L$<$Z@Up0MVB,fHH\p4$L$4B4$D$$Xdž\dž} 9~$~ |$4$}.Ue3Ek ļ[^_]Ëx}@$~G tE\D$=D$$T\D$ "D$D$$l\E\ED$ "D$T$<$C\EE'\ p@,$B\\EphP,p@  D$BT$\D$EL$ $D$NFMEt{GuMtx t>\D$#$D$ Rt}tPEtI\M@Hf%f BHE0F4t P,u4V u-\hE\tߋUP,tӋt\D$<$QE}\$D$(:x,E@ |U@0v\HHftuff HH\\T$$9[}@ @E\t$ D$D$$BE\M4$L$}@HfBH7FI\@DFD\M@LBL@D@@B@@@L$ D$@@4$D$$P4$D$t tXu}x4\E0p@ $D$QF8M\hB }tE}L$4$D$ |$9\}}7FIcpfx\p$D$\D$D$ $D$ B7F(u@(H@@(@ }7V(F$U@(\@$ $D$du\@H<$D$!@HtEt E8MɉMuuu\ h;8D$<$ A<$;D$ D$<$EuBD$'Epp@,D$D$B t$<$D$ CD$?EUD$D$ D$T$<$k3Mt$D$BD$ D$ @ @<$D$c*u@ H@ uD$:4$0)`t ``\E@>EËD>ENjH>EˋL>EϋP>EӋT>E׋X>Eۋ\>Eߋ`>E㋃d>E狃h>El>EtED$$iJ`Džh\L \tD$- $O\D$L<$D$HED$D$ LvK \p$D$2\D$ $D$J\D$D$<$D$ 1F(`Džd\P0\t4D$- $Nt \@D$D$-4$2\}|$P$D$FM@ @>UM\D$T$ L$<$-_u=\D$t$<$[H\p$I\\D$$E\\D$ $ *\D\ED$D$D$EM@ @\Dt$<$D$ p<$/+pt$<$T$N+fHH\D$$3\D$ D$D$ $8}p7 \T$$%R}BD$ L$D$\$U@ @E\Q@1;QDQ@U\+A A)}F~\MD$$L$0M\@D$D$-4$/2<$?D$?\Lt$<$+@ H$>\P\ED$@ $D$*\@ 4$D$D$~E $f>\H4t$t$D$  $]1 $nK\W@UVS EM uD$D$E4$D$ED$ E D$)4$D$D$D$ %4$D$D$D$ - [^] USEHMÁ D$ D$ED$E D$E$Z[]US$EMA D$D$ED$ ED$E D$E$($[]É'U(uu ]}}L f~t]u}]ÍD$ D$D$<$D$D$<$D$ <$D$C&t$ D$<$D$5D$D$<$D$ *lt&UWVSLK0 ҉UȉM rff+փ}Eτ}fBEąLJLJUȋB <$D$>pEȋP G D$Uĉ$@BD$ D$<$GD$D$<$D$ n"ED$@,<$D$>ED$D$ <$0UȉƋB F UĉjEt$D$<$BD$D$<$D$ *uD$<$t$ D$3ƋED$D$<$D$ !t$ D$<$D$3ED$D$<$FExUB uNEU؋puX t$1fu1 Љ1;Mu҉ 1ЉЋUB uD$D$^<$t$ ƋE<$D$D$ UD$<$T$2t$ D$<$D$ 4D$D$<$D$ ~'H@D$ uD$<$D$3EȀH HEȃL[^_]ÐEȋ@EfxEЁt Ef_GpuЉD$!CD$<$t$ <$D$%'EȀHEȃL[^_]Ër]t&E$MĉvuEȀH H;EątEɋPGLJLJu}B HB R,D$uĉ4$SEԁt Ef_puԉD$8CD$<$t$ <$D$&pUȉ<$T$+ftAWuGT$<$E!D$D$<$'B HhUȉ<$T$+Jt&U8uu]F̫ }}Et t$<$4U E$WUtfx t9T$ D$D$<$5LJLJ]u}]ÉT$D$ D$<$<$D$@H뵍USE E D$D$E$&[]Í&'UWVSE EϪ }@ul;pwMfUt+E <$D$8LJLJ[^_]ËE D$<$D$=ˀx,uD$ <$cAtlQCEu&vt‰D$E$uQCEE‰D$VC$B<vB<vB< v _tҐybtOB<vB<vB< v_t܀|אt&u'ҍt&t‰D$E$ uEL}<;t<=M @ttD$ p>D$D$ <$$;t&'UWVS}CϨ tE U ErF<hD$ 1<$D$E D$2tIU :$tAtD$ E <$D$>D${<$D$!1D$U D$ <$T$D$[^_]ÍF</t F@<=<_F<^w‰D$[C$YteE D$$3+E =B~+M BrEB<wiB@U BE^U `CD$<$T$g<$D$ hedZhdЃ@떋U ǂ...U +E DU $!UWVEup^_]ËU$;\4Ut9;Et4@ u.J u%B ɚ;1ɉEEpQRU,$ZM9}EǀU(MpBp^_]Ít&UEǀ]Í&'UWVE B9Iɋ0~TƋEEt&t,t;Et8&u}ExDuԃ^_]fUSUE ? D$ D$$$D$$1ҋ@ @tP[]ÍvUWVS,U M?ü 9H|,[^_]Í&0E$/UE܋DEFxHMkMUEMEE9t}B <&<@<%ND$U$ )D$ Ɖ|$M܉L$E$$ Nmmm9}rMEt4J t BT$ |$U܉T$M $D$E$(|$D$ U܉ƉT$M $NfUt@D$ |$M܉L$E$\:v@0jt&YuuCU܉T$ ML$E D$U$M UP,[^_]ËU$7E$-D$D$UƉ$t$ D$M܉L$E$@(pU$M-Xt&UVSM=@ u QtI;uNt\t!9tbABt;} F[^]%BލpMD$ $3MD$ $3fUSU h<á Mt A[]ÍMD$ $z3UWVSEU#<\ ;BMM&EM$U@EEQщ9U|E4t E9u׉T$UD$ |$$ Qu tU됋UD$ M@ $|$D$q A űUPE AMA[^_]Ë@0uME뵉 $EMD$$1t&UWVS,E:ϟ } $P9P1t$UUB,[^_]ËU$b*MD$ $ƉD$Ut$ D$$D$x@(E@tMƍ<M$t&u uJAUB8;UtE9tڋE9t;tƅJ u@0u뙉T$UD$ t$$t&M$x4UEU+U MMA;Utm9tb 9t[;tStJ tgu>t9Et@ u-8&t$ET$$ UMBt&E9}fEf@0u돋U@Ɖ׍ EUEUBPu9t;Et;Et;tPuˋE} 'Uuu]M}} 7Ҝ Vt?;uTtbt `Vu';} G]u}]Ë4$D$VōMD$4$W.MD$4$E.UWVS65 E}D$$9!UD$$ƉD$D$ED$ t$$@ @@?U|$D$$%Ut$ ljD$$$D$UE |$D$ $D$E HU HDtfHH@DD$E$[^_]fUWVS,U 5 P@҉URU|EԋyxW4+U;D$E$t(Uԋ 0tU;$uǂ$U @@D$E$U @@,[^_]ËPDU؋@LE܋Eԋ0ERU~Fu‰UƋtE9t 8&t,muًUԋ ǂB EE@ET$U$ExvMEtUU ;PDuM؅tSU؋RtIf`HUU؉PDUU܉PLE؃@[UEUD$$m@D.UWVS,EU3 Eꋂ$HZD$ $0BU$UU@,9‰UUǍ4t& 9}tE9tߋJuԋP ɚ;E}uu}uD$E $.u}Mu}uD$ hNT$U D$ED$ T$$}tJU4t3E9t'JuP ɚ;tu x,&u,[^_]ËU;P,.U9P,uӋD$E $-uE UD$ D$ MD$$ND$ED$ $농t&'UWVSLu1 } ED$ D$t$$U$D$ D$Et$MET$UL$M|$ED$E $T$D$ND$ EA}WM1ɋtJD$ NL$MT$UD$ Et$ $T$D$6E9qEE9B uMUx @\$ $'1ɉE܋EtJEL$MT$Ut$D$$E܉L$T$|$ D$ND$ E$U 9q\L[^_]Ðt&}8M1ҋtPD$&NMT$UD$ Et$ $T$D$+E'UWVS,}/ߔ $E苇LJt;(hH;(~AEEt&t;Et@ u0~ ɚ;t!t&9(|҃p,[^_]ËpF ؋9ȉMEEmmM9MU2t䍇9tF uD$<$t7Nt$ D$D$<$렋$t&UVS}.ö u,D$4$$@,U t(,y dž,D$4$hD$4$V(džD$4$:D$4$(dž[^]Í&UWVS- E}ED$D$ <$ED$<$ƋED$ t$<$ U t$<$T$EtN@UBPNUBP,t$ ED$$<$D$m}tNE[^_]Ð@@dA@ t=EU <@|<%GUHE[^_]ÍvU븐t&EtiD$t$<$ E t$<$D$N@UBP<$FD$ ED$<$D$y bD$t$<$ E t$<$D$<$ &D$ UT$<$D$# v'UWVS\EċEUM}+ö PLUԋ@DEMĉEȁMEȋJ@ɉM]D$ D$L$Eĉ$]g;E&MȋUJ&UWVSLMEĉU" p@ED$ D$t$$Uċ8t$$D$ D$ MȋMԋRU؋@E܋Eĉ$EċU$D$TMD$ $ UĉEMA$D$ED$[MM@Hf%fBHUfHH2P,e@8F8EM@4B4E@ B 4$ eU U1ҋ@(t @ UP(Q(4$ MMR$P$EtUMAHDEM@LBLE@ UMċ2D$ $RF@E؅x=E؋Uȉƍ<t@Măt$D$ $ $D$`u΋E܋UĉD$$D$/MċA}܅Iu܋EԋUȋ}EUfEE9ttEA M<&<@<%UD$$ ‹BuBMċAmmtM9}sEԋ0J !MĉABmmu}EE9}|6UEUŰt#E9tB u8&Jt&muUĉ$M@ItPL$@$D$Eĉ$UMĉT$ $Ut$ MD$@ $D$xEEL[^_]ÍED$$1 HMċQ2@0U$‹Eu/MċQMtƒ@뼋U1҅J@?9NEUĉD$QND$$Eĉ$ Mĉ $UEEEEЋ@HMEUЋMĉƋ $D$cfHHNUċM̋B4fHHE$D$2IMPT$ L$D$Eĉ$lM@8MĉD$ $KND$$8D$ UT$$<KND$H8D$ ST$$t&UU E] IDUWVփ9u Et7u&@t $ tZDu&du&߃^_]É9uuEut+D  D2!u닃⿃ AFD  D2!uet&U9ʉs9& t, t' t" t t#t8 t׃9fw]Ã9w]t& UV:{t^1]fBJ0< wfB< v,t <}^]qF< wfrF< vU]Ít&'U]Ít&'UE P B(t]ËB,]É'USEM 8q 9u[1]AbtQҍt[]fQv'UWVS  9B t3Ɖt$<$auFbu)u}EfF [^_])u}EF [^_] UUE $D$xÐt&UWVSLÅ ,ueE1D$4$pD$4$D$4$D$4$D$4$D$4$fD$4$TD$4$BD$4$0D$4$^D$4$,džD$4$ džD$4$D$4$rD$4$` D$4$$D$4$,(D$4$zpD$4$h,D$4$V0D$4$D4D$4$r 8D$4$D$4$n<D$4$@D$4$DD$4$HD$4$LD$4$ PdžLD$4$HTdžPD$4$,XdžTD$4$\džXD$4$d`dž\D$4$dž`D$4$L D$4$D$4$<@, @ Etl@0te#jE܍EEؐE܉|$D$E؉$ED$ D$4$D$t D$4$oE9x0sEe3u,[^_] &U(]u։}ωER qê{ 9tPދEfBBBFxtF 9t+N|'F+F DOBF ]Ћu}]fF0鍃QD$EL$$2 &'U(EȉuuMJ ]{ Ƅ9}tOވAfABxt$B 9t+r|.1}B+B DwAB ]ȋu}]ÃB0덃QD$Et$$ 'U(uu ]#\z }t F$F$~]u}]Ðt&F$i F$^ F>F tlPtET$$7F P tT$U$F PtET$$F PtT$U$F $ Vj:EBB8ȃf< wWUOL$D$$K F$ 'D$o V띋MBEU苀Ez Eǀ1UB$5FDP UP $UUE1tUBE$D$EVDEDD$E$VB$w F$l $b F$W 4$O FUD$D$LEU_OD$$ wOD$$8D$ iT$$TwOD$H8D$ gT$$0UWVS'`w EzWV<(tEf>yi< t]< tY< t&tP< tL< tH<#t&uH;VsV< u<(uvz?uz#ut&;NtNʀ9)uV눃[^_]ËE+~9F tFD$PD$E$B..D$F|$ D$RD$OD$E$iOuŐ&UWVS Ev ,EU܈McEEr 9ƉEGUM|Uy ;uvVFWfGU܋B@t_M;J tWR)уEԉ)Љ‹EԋPHU܋M;J t'B)EU܋BP+EBJ9uqM܋AHtNu܋E;F tCU+Vu܋F+F DQE;F tU+VM܋A@PEۋUBfB}?wqEMD$L$$,[^_]ËB0EB0,[^_]QL$D$u4$L$ RD$U$$"QT$D$U$VT$븉'AUA(A@@@ @@@@PBtQ]Í'UWV΃}EUtOʃE9UEbt t ua@t @߈^_]ʃE9uuwD:D2!ut0D:(D2(u늋F;Gt@߈덃bEXfD:D2!uFE/z'Uu }ωE1ME@Eu}]VUWVS,EU @ yr EeU1҉$$v Dž=v)׋T$4$D$|$T$$}t$Ƅ ƄED$$@ te@v DžT$4$D$t$ƄߖD$$#T$D$ "D$$ 낍&UWV1S p D(tNȃD(u0"u1@u[^_]DR r[^_][^_]fU]uƉ}} Qp 9B t&L$|$4$:)E ]u}]ÃvvځvЁvƁv҃fU(]uΉ}׉EBD o I@EF @;Ew|F 9t-ET$D$ L$$tF B @N;F$EFF0FF4F8ƒ ЉF8@VB tfuXF]f8}u]F8tKAD$E$EGDunNFF0F FkED$wT$$tx~@yET$$NF ωF87F D$E$uNEt)FV8F(Ѓt ‰V8F4FՃV8'UWVSTM\TXEU e5u1HPLeÞm EDžhtA8@ЃDžz-DžtDžxDžDžB{9Lo<!<hG<+bSDž7u[FtT9~GNj\t$ $t-H<$uFft9vhBb9zhG<t<8t<5t<4~ &\|$ $hJ5c|@9vci4`8BhvhtBhT8t DžP Et ujxuAEtHMċ\VDMe3 t[^_]ËHtHB8 B8fxuHtHG8$G8w&H+FF :J5Dž} E%dXDžDžDžE t D$ XD$d$\h|$9~d9}oLh%Hxt!t HN8PHGH\XHH,A "Uut HAt|$\<$hDžDžDžDžƅƅƅ1`lx=HwHDžDžv|$\<$xƋ|$$+ <8! +„Mk8E +,Hp<p<BJy$XG t&\|$$DžDžhlX\HHH,B DžDž*HBD(zD1BD GGuG GHBzHX\ND+X\HHH,B HFD@Zh\lXHyDqDE^Ow|$\<$h+GMhx99uK1#uMHlXOD$\s4$D$wT$.xhPT$D$\$FhE1H A8AXH\HBxHX\3H?uu E2< Dž`DžLHFF\t$$x.*@A)F$ \X9B tB\D$PD$ $X\FVD$ <$D$R)щD$4ST$L$D$P\X9B tB\D$PD$ $OX\FV<$D$R)щD$RT$L$ D$qH1BDt6H(u0Fv$FЃ v_tFwԋHQDLċH1pDt#N( uGЃ v!HrDT~H1BDtLH(ubHqDD t t t t݃ uf ҋHFD1# t% t t tk fu֋HWDLŋHBDBD&HBDtH(uuGЃ w!HqDDu&UWVSUr:@ Vt}$D$FUBpD$F$FUB@8UBPBU|$)$T$zUB@[^)_]Ð$eFUBp<$QFUB@8딍'UWVS'`? $UErUEE9B EtMuF8^UB 9Eu$F@F E@}1󫍃@D$ D$M $Eċu1}vu;wsUM;J t:=.f~U:]ENaEEEEEE};x'?]Eu~D8UEMUAu1}vuW9o}[9u\EEOuuvu>-u};~ tp}<:t <=t<.jMQ[΃B<vB<vB< v _fVuՋU:]+EEENaEEEECMM8U l}E@YU MA 9E<uF }ЃF$F;~ tEUB 9EMEA0 ,1MDt9tʸMDuu&}E;G 9u}GWƉD$ E)щT$U+uL$D$RD$Pt$t$ D$$MID5MEu MFuFЃHJTXE}D$D$ F+E|$D$E$ڽEEF:t=t.[EE9‰EM9<:t<=t<.uuM9qM9M9tEME9ʉHw;UEUMBy]E[UBA0[uE}+UD$D$ T$t$<$׼UEEBEU;P EAvEaMD$ $z}GWD$D$E)щT$UL$D$ TD$$ճG}W:{ uED$ EEE4$D$D$T$}EEGuuEEEVV}D$ ED$D$T$<$ EEFuEMu;q t}u }G(EEU;P dMD$ $;tJu}FV|$D$ƉD$ tT)щD$E+uT$L$t$t$ $荲}MEMTI Mu;q } "UxYE E }E};xG }?{ EU;P t=}?^ }p }dPL$ |$D$UEĉ$D$ FMuA E m E EP E E3UMBAB @։UEE E qEEubEJEvAuD$}ċEL$t$ |$$UERU};G~] G}EEXED$$tGGWD$)щT$UL$M+uD$ tTT$t$t$ D$ $u};~ UJ MEIM8~]UD$$ <=t(<.ft"E@EVuȃ]F URUuڋUuBʋU)‹}D$RD$St$T$L$L$ D$<$t&M&AuċE|$L$ t$$QUB@EMD$ Eut$L$$贽9Etv.=v%=v=v=v ҃;UE̅{EUt$D$$mH M̋uD$L$4$}}?EċUD$ |$D$$hMEIMJuM܀>:UM;J 6uF<]ttEU܋EPt<]uMu܋AʋU)E}1GEPH+ !D$ P}ĉD$ET$|$$諜E@EEEPU&u}F<$D$PD$FV<$D$P)щD$RT$L$ D$#}[Ex7uqP }D$UED$-|$ $D$+MEM@։UuuEFES}E}؀?^'E+E؃}U܋M܋uG})})‰D$EL$T$t$D$ RD$PD$E$膽}E}GM uEEEvuuغe1}E}O@ruغ P+}uuFa<YEE^uغO} uuغOuEE|uغOl}uRuغOB} u(uغO}uuغO} uuغO}uuغэOE8u }uuغO}uPuغэOE8u }uuغPu }uuغP}uE$-ErUċMD$ |$T$ $+f t tMTvЍP!EċU|$D$ D$$ƗMċu|$D$ L$4$託}E}5EU}BMD$} $ uot&EUBMIM< t< t< t< t< t9f}+MT< t< t< t< t&t< tuE;F tFUD$PD$$bMAQ)щT$L$MD$‰D$ RD$:PD$ $}WPL$ |$ZUB1}ppEfE}GE@E< t< t< t< t< vtU;P vt%@uD$PD$4$}}UMuBUL$4$D$)ET$D$ RD$.PD$uE;F t"FUD$PD$$NMuUMFL$M)‰T$D$‰D$ RD$.PD$ $虷EzExD$}$͒tFU)EED$ ED$D$|$$轻MEFAuEUM;J tBuD$PD$4$:}GWD$̿)щD$RD$ET$L$ $bM1ҾAt>u+N(|&Bv BЃ v_ttlBw؉щ}LыMFQt$t$ u)щD$`ST$L$D$D$4$]+E1@t)U!J+fFЃ v+Fv#FvMTv!g}1ҾGtCEPH++@ t, t' t" t t&t uωщ}LЋE1@t!U!J+P t9 t4 t/ t* t&t tMTvP!xE@t'U+J+PS tt2 uMTӍP+P+}1GtE5H*!FvMTvҍ5!}GtEH*+|&F^wMTuҍ+7}1GtEH*!F^vMTvҍ!}1ҾGtEH*+B߃vBƃvBvBwщ}Lu+[E1@t+U!J* 9t&F߃v3Fƃv+Fv#FvMTv!}GtEiH*@+t&FwMTuҍi+w}1GtEiH*!UFvMTvҍi!}1ҾGtEH++BЃ vBvBwщ}LuÍ+E1@t'U!J(Fv0Fv(FЃ v _tMTv!.}1ҾGt?EȭH(+f t& t! vt tX uՉщ}LЋ}1Gt.EܭH)!&Fv#FvMTvʍܭ!O}1ҾGtEPH)+(vщ}LuۍP+E@tU!J)Pщ}LuۍP!}1GtEH)+nMTw vՃu΍+,}GtEH) !fv tMTuЍ!E1@tU+J)@Fv5Fv-FЃ v%_t F߃vFƃvFvFwMTu+0}1Gt'EH)!FvPFvHFЃ v@_t;F߃v3Fƃv+Fv#FvMTv!}GtE5H*+vFwMTuҍ5+7E1Ҿ@tU!J( щ}L0u޲:щ}Luۍ!}1ҾGtE~PH(@+BvBvBЃ wщ}LuÍ~P+8E1@t(U!J(~PFv+Fv#FЃ vMTv~P!}GtEܭH)+FvFwMTuʍܭ+\E1@tPU!J(ȭ:t&MT t t t t&tك uf t&ɋ}0GtEH(+щ}L:uލ+ȭ+wȭ!gfUWVSMMEUȶ ERUEuvu>?MuI4ȃMF4 $E-ٟEE|9F ^U+VMA@P|;q 0EM+HuFPF+F DJEUы@UE$UE3MA8|}:E}?tuEU MEA8|uƄ|gt&UE%$MUE3$UE6EtU EM UB8|_E|9P tCP8t¹7$ECOE$UEϙM|;q ME@8AUEEBFu<{MVwLZBUMuMBExfURU2A|$$.oU$UE脗ttEtmEu|<8vt$M $ۮt7U|9J tF<uɋEN$E뾃}:iEt&3MAQ9,8) UBE9B tBD$PD$M $肰uFV)щD$QT$L$ D$RD$E$誨uE U!‰E8:tCU:)r UEUEEļ[^_]ËU<\1FEE:E1EE4$MUEҕ$E|9A t I8)4$UE|U|;J tz+Jh UBP1}JM|;A tIU+J% UB@pE+B pDJM|E;A ZUB8EGEM E&UN$UE̔qut$c4$})4ƃ13}>t E$UEQuUƄ9r t`M+J UB@pBp+EЉJM;q t+uM+N UuBPEЃ+F DJU%UE$MUEؓuEF;FsUE}8)EuFE9F tFD$PD$U$VMAQD$P)щD$RT$L$ D$u4$~D$E${?E5VENPP);Et .MD$lVL$T$t$|$ D$D$U$覎E UE跗EU1ɋE袗EM $U.EԖUEE|9B M+J! UB@pB+B pDJM|;A }U+QXMA@PYU%EEAEU9B uWD$M $t@uFVD$D$T)щD$ RT$L$D$E$UURU:{MЃAEuEvu@<H,)<{<})‹Eu҉FEu<\uŋEu~tȋuFE뽋EPH,U^<Dž\1ɃXDžT0($,Dž@DžPDžLDž4DžMe3  <[^_]ËL=DžT4~ Dž4D$qq@$)B,D$ $D$XBBA0%B`Dž.E@ uE t sUB A P A @P EE t)1D$E$D$'CBt@<q Ftt U 9FF(Q B B,A P$P A< t@A$er|$ t$T$$6]u}]ÍvUWVS,}6mo u9}Ev<>E󍃤dU ED$ED$ T$$NUtU U;P > t&J &B<^kFEF0< ‰D$ cD$U ET$$E싗9ЉUt,<$WUt$T$U$T$ rT$'t3<$KWTCT$$'<$N@tU8wt(pT$<$D$V$3QD$D$$e/fD$<$CtdD$D$<$>d'U]U ] uu.D$ ETd4$D$T$M&E4$D$ED$S]u]Í&UES$EED$EK]Ä D$ ED$E D$E$ED$[]Ít&'U(]E]? uu}}D$t$dD$ E |$D$E$)#tq@$thdD$<$j%B,t!@,tD$dD$<$B%B$<$D$dD$'%]u}]ÍD$ <$$(ۍ&'U(]E&\_ uu}}D$t$dD$ E |$D$E$I"t1@$t(D$dD$<$$]u}]Ðt&D$ <$'܍&'U(]E[ÿ uu}}D$t$dD$ E |$D$E$!t1@,t(D$dD$<$#]u}]Ðt&D$ <$&܍&'UWVSE Z }%<$?E<$RdT$$m#D$D$ E D$U<$T$GUU0<$RdT$ t$D$<$D$ U @ @9tTD$D$ D$E<$D$t7U0<$ERdT$ t$D$<$D$S <$RD$ $%<$Rd<$T$ D$D$ [^_]É<$QdT$$S"[^_]Í&UWVS,}vYï u dD$ Et$D$M $uG0uW, Ƀ?P  G@dD$t$RD$dD$ T$ED$ML$u4$&f t9G t2eD$ ED$ML$u4$G 4$D$&#G0u*MW, @ @ @(.D$ut$E$5UG8G8G0aMW, @ t ‹@ @(tB<@B=G0t&JG0@ 0G1fZG1sG0G1fUHtjeT$D$ ED$ML$E$t$M $dD$ ut$ED$E$,[^_]Ðt&. t&dD$ ED$ML$u4$AdD$ Et$D$M $,[^_]ÍeD$t$M $K2feD$t$E$+2Wf eD$t$M $ 2-fIeD$t$E$1G1QeD$t$M $1G0t[eD$t$E$1G1]&deD$t$M ${18fCeD$t$M $[1ftf=f=&sf=f=8G@G D$ hUD$ ET$UD$$zf-fUgD$ ET$UD$$DG@D$D$E$|UED$T$$NOщƋD[G(fG t  PUt$$UED$T$$(NGAYeD$Et$$,G GG@Gt&G f UHtT$UOkD$ ET$UD$$Et$$f=f= gUD$ ET$D$E${G @UD$D$$UgD$ ET$UD$$0G$X@D$D$E$hgUD$ ET$D$E$G(@UD$D$$$t&eD$ ET$UD$ET$$tfoft&`ft&Pft&@f%f$f#ff=Qffff}fffffEf#f? f f fft&ft&ft&/f\t&ft&fzf;fsf;G1gD$Et$$;)fs"fBf f t&*EU|$ D$ET$$:G,Gt'D$eUD$ ET$D$E$cGDUD$eD$ ET$UD$$1eUD$t$$c(G@3f+UeD$$DzUD$gD$ ET$D$E$UfD$t$$'|fD$Et$$'TU fD$t$$''fD$Et$$'UeD$t$$m'f=8`f=]jG,Gt'D$eUD$ ET$D$E$G&D$eeBf-f뒋UeD$$f=&UD$eD$ ET$UD$$8@G@VMfUD$t$$`&8efD$Et$$7&UD$eD$ ET$UD$$%U)gD$t$$%G@G Gf{GtXfD$Et$$%GtU`fD$t$$%G thfD$Et$$k%GtUtfD$t$$L%G@feD$E$29UeD$$eD$E$FGNG&G GfYG@fujGft%f=tGGfU%Gf@G`@t}`t] +GtfUD$t$$%$G@fU?fD$t$$#fD$Et$$#둍f㍃fD$Et$$#UfD$t$$#fD$Et$$x#UfD$t$$Z#fD$Et$$<#UfD$t$$#_UfD$t$$#G@gsG@ gfG@tUfD$t$$"GtfD$Et$$"G tUgD$t$$r"ygD$Et$$S"Gg yUgD$t$$"G@gGftUxgD$t$$!G tgD$Et$$!G@tUgD$t$$!gxHG@qgcf1GtUVgD$t$$`!Gt_gD$Et$$A!GhgG@JgG@CgvG@:gG 0gb)gqG@ g7UWVSUE D ҈s EMp.|U TdD$ T$MAD$dT$L$ D$D$rD$U$@vJ t&@t&fiv:t ~R| zz{tthD$|$U$|$uF @UBzJ|, QD$|$M $o0iD$ ED$U T$M $|v=t$ | jD$t$E$, |$U$[^_]Ë|tsE@ JiD$|$U$J|,1t&AB@szZyhD$|$E$mAhD$|$U$H(hD$|$M $#vhD$|$E$fohD$|$M $fihD$|$U$dfdhD$|$E$8fVhD$|$M ${UB%=[hD$|$M $LvhD$|$E$+fhD$|$M $ yfhD$|$U$MfQhD$|$E$!fLhD$|$M $fGhD$|$U$f?hD$|$E$kf9hD$|$M $Klf2hD$|$U$+@f*hD$|$E$ f!hD$|$M $fpiD$|$E$UBtxiD$|$M $@iD$|$u4$luF @UBi뛋E@ MA @E@MA g{[ iD$|$E$=MB0B0B t @$B0fB0&M@0PiD$|$u4$tU@0%=lkD$|$M $BuB0aB0 B0@mz0*liD$|$M $5MBHBHBHZBHBIfBH MAEBIZBH@-zHBIhhD$ UT$M L$u4$[^_]Íit$D$U$7vMA-M@ D$'jD$ ut$E D$U$MA D$ E$|F|9MA |v| U>D$XjD$ ML$u t$E$UB Mu$t$BD$BD$ |$D$E$#D$ߖD$U$ MA TCD$M $u@D$pjD$ ED$U T$M $Z@D$}jD$ ut$E D$U$.|}MJtBu$t$sD$ED$UL$ T$ML$u t$E$8'MBt(D$jD$ ut$E D$U$e| sit$D$E$it$D$M $wit$D$u4$Yi8i뙍it$D$u4$ait$D$M $CgiiGixiOit$D$U$ijit$D$M $|$u4$vhD$|$U$MCiD$|$E$ehD$|$u4$GEhD$|$U$$MhD$|$U$HhD$|$u4$EhD$|$U$MhD$|$U$a~iD$|$E$ hD$|$u4$aEhD$|$U$>MVhD$|$u4$E)+iD$|$E$M9iD$|$E$M2iD$|$E$MiD$|$u4${iD$|$u4$qBUB t+D$ lD$ ML$u t$E$U@ D$lD$ ML$u t$E$yMJ$t4AL$D$+lD$ ut$E D$U$~MB(D$ElD$ ut$E D$U$OMB(t+st"D$ t$E D$u4$M2EB,D$UlD$ UT$M L$u4$U@0D$elD$ ML$u t$E$U@4D$vlD$ Mt$L$u4$cU@8D$mD$ ML$u t$E$dU@kD$|$M $8kD$|$U$\iD$|$E$diD$|$u4$Ep`iD$|$U$vMCD$ E$kD$U$Ot$U$t$D$|$D$ M $ID$kD$u4$-hiD$|$U$ut$E$rكsݝU(]" uu4$U 4$D$D$D$D$T$ D$D$]u]É'UWVS<}E rë EnU萋EU|$D$ E T$UD$$GJ;tÿ;0n;o; ot;D ob;mP; o>; ,;LȰ;dɿ;HB;o;$o;*o;0o;;7o;;ot|;>otn;xAot`;FotR;NotD;lWot6;^ot(;_t;t D$pnT$ioD$ EU D$ET$$Gf$t3w u}fAE8ElQ uG D$pUD$ E T$UD$$-G G t1UD$%pD$ E T$UD$$G CG)GUD$KpD$ E T$UD$$GC wts.D$ED$$U$D$T$ƋGD$ Gt$D$E$`U$D$ޖD$Et$$HUD$ $ w ?M<[^_]Ë$oT$U D$oD$ ET$D$E$ D$9pU D$ ET$D$E$U D$oD$ ET$D$E$_ eG `G v+ gG  pU D$ ET$D$E$GEp1UUDD$Ut$D$ET$UD$ E $D$uE$UD$ET$UD$ED$G $D$ ED$E D$#umpD$E$UoD$ E T$UD$$qUpD$ E T$UD$$oU D$ ET$D$E$xG dUoD$ E T$UD$$E uVU ttp ʃ^@0]Ëp ʃ@0u랍t&p ʃ@0_^1]ÍvUU WV<~uLvu^_]Í&UWVM}} u ?E^_]ËMu}MMmMuEȋE~19u^_]Ív'@O q U]Ív' Op U]pÍv'Op U]Ív'Np U]Ív'Np U]Ív'U1U Ncp ws&]Ët]Ë0]Ë]Ë]ËD]Ë]Ë ]Ë]ËL]Ë]Ëd]ËH]Ë]Ë]Ë]Ë]Ë]Ë]Ë]Ë]Ëx]Ë]Ë]Ë]Ël]Ë]Ë]Ë]Ë]ÍUWV,E PlUq @u܋QxOgfffișE)ϋuQiMmEE))E)EыU M؋ <1ɋU kBw9 $$U UUT$U$T$$[]ÍUES$EED$E 9 D$E$胫$[]É'US8 $$bU UUT$U$T$6$[]ÍU8]EVÏ8 uu }4$ղUt$|$D$D$D$D$ ET$$Ϥ]u}]Ív'UES$EED$E 8 D$E$胢$[]É'US7 $$RU UUT$U$T$6$[]ÍUVS U GÀ7 B t5BE2EE$Ut$T$$ [^]ÍED$ED$ "T$$볍'U]7 uu}~<$U t$0U t$$T$~]u}]É|$D$$轢ݍ&U1}} ]QÊ6 ut#<$ٰp4$.t$|$$]u}]Í'UWV4E}ыx U2u`>}FEUϋU ~$}ċU+Uȋ8}@+EDUUE9|+9}O}xf9~> u&~& )14^_]ËUM2tV& jEEȋ}UωE܋E+Eă9MUԉ}؉EEUx td9M~_UʉU9Eu݋u9uv)}؃:Bu9uvG8t;uuEE E뎋} tuuv}G @M U M܋P+M؉)ʉU9EuEENV$A9 ME؉M늋MEE}؃9t'UWVS\u4 } F BEU؋UUU)9UE}Ev^VEu+u9uw } MЋuA:EE\[^_]Ã}5E}tFƒUt EfU؋MUqO}8‰}9UȃU:uU:6;E:PHu߉EE\[^_]ÀEED$E؉D$ U|$T$M $谣EU+Uu؍JMB:Mr}9}̉}&ED$ "D$t$E$UUUE)9U0F @E9s}}mM:X9҉ωNBfUE؋M؍Dэ49uEĉUMv!t&}9uw;uE@U)U+u}u9MM8FƒtEtq9}v&M؉:*:9Efu}}eYMQ uuA:}:3Eu1~ )ƉuMU܃:t9uE:A9M6}UMU: ;Mv ҃9MԍvrE:u:Ata;Mt:Atbt&؋U:NMu92F}>Ht&[M'MM΋M}؃9}Ѓ}vUWVSLEO/ EtCU B t fTCUD$E D$D$ $D$貚M A%=Eu D$ED$ Bt$$U zEu ED$D$D$ B$D$t$81NMUЋ:1҅ɉMt21ҹE:9sUԉ;UuEԉ8MЈA&u fP$@ dE̅tN@L[^_]=EEEUD$E $D$谹M ED$xpE܉<$D$詙UW+E9ƉE1&9uMۍ:uߋU @EzMD$T$ $'dEۉu܉u6MT$D$w $UD$D$ $ƍTCD$E D$|FFv'US^×, E$[]Í'USE(a, t$[]É'U]2, u};Ut ]u}]Ëu69|t6t!t&$u$rv'USE XÑ+ D$E$P[]ÍU(])b+ uu }}$ԙEt+tt$<$t']u}]É4$Ը<$J1t&ًUhu͋<$HUƋtx t=E$踽UD$$Yt$|$$虔ED$$֡@ @t@$u묍t&'UWVS,e* uEȉED$4$E4$EȋEE̋EEЋEEԋE E؋E$E܋E(EE,EE0EED$#EȉEẺEEЉEEԉEE؉EE܉EEEEEEEEEEEčE$&E$@EEĉE^D$@ƋE4$D$ E D$~?Č[^_]Ít&uE 8tE $譣ǃ@E<$tkEdE?EE|$4$D$ E D$谻~9;}E4$D$胯us4$1dt&U8]( u}0;ut ]u}]Ët|ulM $ޢƋE$ѢEԍD$"U t$T$lj$D77=MU$L$T$ݡMD<$kE 4$D$)E䋆|;MMuu2$M $ƋE$}E؍D:$NUM t$L$$M0=U؋MT$L$$M4EDpU $B`uUuUu0t0EBuuuU$舴}E~^Evu0$x<$PUM܉2|$$T$Eu9uuU܋E]M$D$UDXU$BM Cu uD0M:u'USE há% D$E$谎[]ÍUWVSLEU 0i% e M1ɀ}DžƅtD$/$t?1tT$ $@Ue3\L[^_]Í&v$Ǎt$)x`Džƅx9JD$ET$D$|$ D$:$D$;xNj$肞D0=wt FƄ5/$T$苡$L$D$Qp@ D$$覷.[ƅIu1E$ED$D$ $D$ xDD$D$@T$ $H녍t&Kȃ`D$$D$谉xBp%=@4ƅ(„uUvuFN3vL$D$t@tU t$T$U$ЋFtV gtN~D$F tF UD$$u4$辧uU @ 1[^_]ÀwtuD$E$u멐t&USE 1 @ t%D$D$$=[]ÍvD$ED$ "D$$蕭 USE 舮 D$rD$E$y1[]ÍU]EF uu D$f$t$Cy1f]u]ÍU]E/ uu D$B$t$x1f]u]ÍUS训 D$E$ͤ'UWVSEvï @ Exxc4v`tCtJ%=uH`H@ tUD$$譫륋EUD$$gs1[^_]ÍwD$EL$$UW1VSUE 豬 uUt(P@ ~FD$ D$ D$$}D$ D$U@ @D$E$]t@ t@ ttpH1[^_]ftlPv[σ~oF@ tg`t?@كX +&`[1^_]ÅuA1ɉ띉D$E$=D$ "D$D$U$61ɀ80USE Q D$E$耖1[]Ít&U(uu ]}}ݪ J(t9B$D$ B L$<$D$Qt$<$D$豁]1u}]ËV%H Ft܉t$<$!΍t&'UWVS,} VÏ r(F ts@EEB EB$EF u}U;U}UME9})ʉUE|$D$ EȉD$E$ƋF tO ,1[^_]ÍED$ED$ "t$$表EtvED$ ED$Et$$跦a&'U8uu ]}`Ù F tsBEEJ z(MR$UF tup@tG u^EuT$ L$D$Et$|$$]m]1u}]ÍED$ED$ "t$$谧ErfuED$ ED$|$4$ǥED$E4$D$z|$ƋEt$D$ED$ ED$E$l4$Ϡ]D$|$4$oED$ ED$|$4$FE|$4$D$ED$ED$ ED$^lO &'U8}} ]u Gtx~BE8*UD$ D$D$$x9ljEt47F tE|$$x7U@ D$E$hF ]1u}]fED$ED$ |$$8*nxPaZt&U(uu ]UЦ Ft=%FYCD$ t$t$D$$1N]u]ÍYCD$ t$t$D$$讃]1u]Í&'UH}} ]u0i p(~vI@t@ED$gt$$,Et"GukE@]1u}]GtUD$D$D$ g$D$t$蛤MD$gt$ $贔EF @EG P M׋p+x(F t p@tQ1Ʌ;}uM܀a Q:ɋUtED$EUD$ t$$$Uĉ $t$SktE뚍t&M|$ $腁^Ut$$E8E!eU(}} ]u耤ù p(~vh@t_ED$gt$$|tD@x=EF uZEpEB(U|$D$$if]1u}]ÐW%H GtۋE|$$萢ʋUp@uED$t$$l낍UE]U }}up 藣 tFB t0P p+P(t$<$T$ֈ]1u}]ÍvT$<$D$ <$脟tʍwD$D$ <$UWVSU ? pEuAt&@t:MUt$L$MT$U L$ MT$ $E6t^F Fu~ G<w2zP$}[^_]D$ t$t$ $;~|$$D$M $IlE$D$D$ 蹗UAH $EP@{E$oD$ UƉ|$T$M $u@$F'}Utx t2M $AD$$bD$E$jv@ @t‹P$u UWVSUMP@讙 8;PDP@'+F F);EMWUA G}~:MQAxZOMT$D$4$14$D$jG}~ EEUE M4$D$ED$Ł[^_]ÃuƍGEW뻋E|$|$4$D$ |FUz puOMB4$D$A4$D$jGkE4$D$螖4$D$i$ՕV@'UWVSLÅ u>4$F4D$4$ddF0F4H?AA@+~ xV @F@ЉM-xU $D$ D$D$u{1H+V PV @F@ЉF0;F4~4$k4$ov[^_]Ð@ tx mt&D$4$sxSD$D$ 4$ƓAHtx t,4$赎D$$1_D$4$r@ @tȋP$u뽍UWVS4$ӎHAA@+~ xV @F@ЉE MU D$D$ 7x$D$H+V PV @F@Љ4$t1[^_]D$D$ 4$AHtx t,4$D$$]D$4$4q@ @tȋP$u뽉'UWVS芔 MU8$F4D$4$`F0F4H-AA@+~ xV @F@ЋUMD$ D$ED$$uyH+V PV @F@ЉF0;F4~4$g4$r1[^_]ÐED$ 4$T$D$`t^D$D$ 4$AHtx t,4$D$$~[D$4$.o@ @tȋP$u뽍vU$艒 t$EU M=xu$t$]&U$I t$EU Mafu$t$]&USMA AtI DxU $EL1[]Ít&Uuu ]}}轑 B(tF t%B D$B(<$D$Y]1u}]Ét$<$4n΍U(U ]}1uLÅ p(t9Et$$Uf~xHB}E fEm]mEz )NjEU |$$T$V]1u}]ËUD$Pt$$u뛃Et$$Uu릐t&UWVSE蓐 x@:_TD$U$X!t4$aT4$L$/t$|$${zE$谈D$|$U$D$MƉ $pt$D$E$蟎U D$L$E$1Ux 0t"D$$UMx Mt 0 $nt$E$U1[^_]ÍvJxEtȋtT$M $QU1[^_]Ë@@ t45$TaU$m1[^_]D$ "D$D$E$X Rxu EHD$[xD$U$Yt&UWVS<U< BEWR:_oUD$$U p4$Q4$T$|t$|$$wE$UD$|$$TƉD$E$smUD$t$$ E Ux 0$D$xSU} t tU BU bEx ET$D$E$覉Ux HDžU B< %=EU D$ED$ T$$mxtGED$T$$萊E$EkU BtET$$'R<1[^_]ÍRB @E:_f֍JxEDžDž$]vU$D$D$sE$(jE BEz&ED$$lxD$ED$T$ $RkxtK:t@D$:$&XE @6(D$UD$$q RxU°^ED$ED$ "T$$pD$끋D$'$QW+&UD$E D$D$ D$D$$MUD$[xD$$1'U(E]uu}} ʈ xtW@D$4$P~2Et Mt8D$ D$|$4$i]1u}]Ð@@ tS띐T$4$x`t\D$ D$|$4$eit tGU<gD$ "D$D$4$܆/xD$|$4$!Z몍t&'US辇 E$w1[]Ít&'UWVS,E膇ÿ u ,1[^_]É$vE D$E$LCE t$D$E$t8ED$Et$$ |$D$E$YE D$E$(L{E t$D$E$t@ uE t$D$E$ltD$ "D$D$E$荅cfUE]uu耆ù xt#@D$4$D$JY]1u]Ë@@ tD$ "D$D$4$볍'UWVSEU 9 xEteE1B BtBt@||T$xD$$gXxtttb t tw1Ue3Ĭ[^_]ÉT$xD$ "D$$?RB !@|?t&|&vo9WhEplK/D$p$D$Pu ue9hD$:t$T$lD$ pT$xD$$SatJ T$xD$ "D$$蝂| |'Uuu]}考ù <t|P, H tgEPx];Q0X~y< t< t< t< t&t< t{E܅U܉|$$dED$ D$ D$4$vJMU܉EM9M܋uL$4$e>E܅t }܉<$qUx xt&]1u}]ËE UD$ D$\$D$qYˋM A  @ U뭋M A  @ U닀~VM A Np [;0`} G  @ M@u F O @ U M$ou 1F0 U~M$oudž} Gt* E UD$$AMu F  @ Ug$Y$UDLM A  @ U,u F  @ UUt$nuM 4$L$!AUM PA @ @0 @ F4E @  @ }x\xnu F ~ @ UJ%:} G @ M ~VMu F U P M ЈMD $D$;}u <$t$KD<$>_ M A%=BE2UU9UL$t$$SMD<$O xD$$8D$ T$$9et&} G H@ Mx`xM} PG @ @0@ F0|Ut D$$G:M A M}LJAM A1u }t$<$5PUM PA @ @0@ F8UP@ @P8@8UHD$$9U B BE2< t< t< t< t< t&tD$ D$ D$4$BDUdEME<}<< .< ,< $< t&< M<}붋MP@ p} G @ w`W}UP@ @@D$CjMu P@ @8 $t$K}XtƉd1;\;`E&UHE]u}H]hÖ AEQ9~={U<MP, @ E@4};W0 GW)ωUE8ƀ8UM $|$ T$L$fIU8MA? E `ߋUttTMA> u pƂ8} BEtt 8u U @t pf]1u}]ËUD$ \M D$$L$Hˋu} D$4$|$r,묋U%M D$$L$O,뉄*U8ƋE W$D$\$$K.8 D$M EL$$8>U B :1W҉Mt*uL< t< t < t< t< u u1W}>u UM `L$$D$v+u`} D$ #jD$4$|$0OD$$|Z=? $`X4$E܉D$QZEx?E"j1U܉M؍tU MD$ E؉T$ $D$_59}u֋u܉4$]} G U JUM dL$$D$*ud UP@ @@8UHx w@ j@_@,U<tuP, @ ED$ D$} E|$$JEUXUuP@ @@4u\u$x7pR($T$U T$L)}rD$E <$D$VZEPP BB@<5U MD$T$ $r5U<t2MP, @ tEput 8%EUD$ D$E $D$CMP@ @u @Wt$ $D$;(rEPP Bt @DB@$3u } W%H G|$4$`u } D$4$|$&4\%U8ƋE W$D$\$$;G.D$M EL$$3>U B tJ:1W҉Mt0uL< t< t< t< t < uu1W}7E HUM L$$D$U3UPRUt:u:Bv:Bw:BM;D$ jUuԍ6U, M D$$L$Q78u]U<MP, @ E@8uP@ @@0M<tJP, P t5UJt+Bt!Mz )uuUEu }D$ D$t$<$@7E|$$]5uԍd  U uԍ_eU1tt u tM uD$L$4$i$uԍoUD$  uԍn XU M uD$ D$L$4$[?} G%H GBUu }@$t$<$D$-0D$t$<$w9U 4T$0 $D$4Mu t$ $D$/}tht$<$p,WED$ D$ D$ $.;UttbttU 4T$0 $D$3u|$$t$"c} O ^u }D$t$<$h"M uL$4$+5uxuxD$} ED$ |$$(>(UxD$D$$#M0@D$D$ D$T$ $?t\D$ u }t$D$<$=M xD$ D$$L$=|$$zxUD$E D$ $D$O=O$LLu D$ D$t$ $z<1U8U]uu }J[S <+P<&<''<uLu<t P, @ t Ƌ@8u{1=t&<1|<94<`f"ET$t$$6Ft@]u}]ËM<tP, @ tƋ@4t;V0  F)υsF?:놩:UD$ D$t$$XF M1Ku<P, P B֋B )υn1vU<tuP, @ uZED$)$UwU$ K1MD$) $_UJu4$J1yD$ D$ D$ $*ǍE)ωD$ED$ E|$N$L$tEt}Ux|$D$$OU<MP, @ Ƌ1Ʌ$1UU @ ǀ ǀ ǀ ǀ ǀ( ǀD ǀl ǀ ǀ ǀ ǀ( ǀ4 ǀ<]Ít&'UX])Wb }u$*ǍE EG@f-;fw}1]u}]Ë Ѡ D$$zBG@f=<f==5f=;UBE 2T$T$T$ D$4$T$UH8  5 Ѡ D$$AG@f=Uf=Vf=TMAE 1D$D$ T$4$D$8   Ѡl lD$h$AhG@f=Pf=Qf=O.MAE 1pD$lD$ hLT$4$D$48 d p Ѡ D$$R@G@f=Ef=Ff=DyMAEE܍AE qD$D$tT$t$D$ E܉$8 5  ѠD DD$@$?@G@f=Bf=Cf=AMAE 1HD$DD$ @4T$4$D$B8  HN Ѡ( (D$$$>$G@f=?f=@tf=>ji"1 0T$,T$ (T$$$T$>8  , pD$ lD$hL$D$P8 u"Ft}${45f HD$ DD$@4$D$",8 "}$4t& D$ D$t$D$8 "}$3wt& T$T$ T$$T$!8 "}$T3 D$ D$$D$G8 ="5}$2UBE2 HD$DD$ @4T$4$D$F8 "X}t$$2CUBEE؍BE r0T$,T$(T$$D$E؉t$T$ $7)8 6"E؉t$D$>}$1MAEEԍAE qD$D$tT$t$D$ Eԉ$~,8 ;"DEԉt$D$}$n1(t&UBE2 pD$lD$ hLT$4$D$G8 "k}t$$0UBEEBEBEЍB E rT$T$T$D$ EЉt$T$D$E$(8 "*EЉt$ D$ED$|$M0t&UBE2 D$D$ T$4$D$48 #",}t$$/UBE 20T$,T$(T$ $D$4$T$Z#8 "0K}t$$a/"X}$E/"#}t$$%/"E܉t$D$}$." }t$$."}}t$$.x"mb}t$$.Xt&UVSu'L` $D @$zD $fD $RD $>D $*D $$D @$D h$C $C $C $C $$C 0$C 8$vC $hC[^]Í'UWVSJ u$= 4$CE G$= ǀ@ $l= $R= $8= $=  ($=$ D$<@ l$EduEǀH [^_]Ít&'UVSRHË t[^]$$;  9‰v 9‰@w묍'U(]A G uΉ}U$:Ut$T$Ǎ@$&EE wD7E D7 t U$?]u}]ÍUWVS,E USGÌ E@E؃9ЉEZ!9!lj!9u9~ 9.UDMƁh$9UMEU܋T$4$D$%}?U܋MT$D$E$/>MƁhM+ED$D$$E}pxUttM~mE׍&t:AU#;U+Ut: uՋUMtwU9UtU뭋Eƀh,[^_]ËE@뽋U$9>%44$8t$D$E$&t&vEhf{ct&UWVS\YEÒ ҉ẺUȉMEEE Ű}ȋTEЋMЋE #AEԋ1E8}t1E;GuUM;Juu>}uED$$*uEt }ĉ<$=\[^_]E@~MȋEątEȃủD$ \~T$D$t$D$4$:%뙋EԉEUB BuUMuԋ6#UB$}u} vu;>u݋E;FuՉ9EtUƋ}9҉uUMD 9Eu(EE#]MčEUủD$ EL$UED$4$U}}1}9MĉE E؉M}Ѓo&U1ɉEU EE ]aUUM EU UU1]CvUS$EBѧ D$D$D$ ED$E D$E$bA$[]Ð&U(}} ]u@By fxEp]u}]Í&ED$P|$$-1tɋU$&UƋBPt T$UD$ t$|$$D$@t$|$D$ E$lmvUE ]Aÿ uu@4$D$X4$D$]u]Í&'U(E ]uu0Ai HQtP]u]Ít&QB t @EAE]Ћu]ÍET$D$ D$E$?͐t&UuuE ]@٥ }}EVtz tUT$<$FxthUB t'D$<$O:]u}]$8ۍ@ H u@tM@,tX냋@<$D$mF$b8둋]u}] U}} ]M? utM7V$t G@u F F$]u}@ ]%GT$|$ $%ƍH~D$ $6'UWVSEU!?Z ҉Ut|P1UU@@ Ut"0UD$E$D$tuރ9}| E4UUEUD$$c[^_]Í&UWVS,E t>í A}E fEm]m}AEE萍t&u1EE9Ju}tE 9Q$M ET$L$$uM B}E fEm]mE)B E Am]mE9A tAAA,[^_]ÃmmxE ,H@뉋M hWE `볉'UWVS\EU!=Z EPكXU҉U@zt UB }ƇhE$/VU}ċ|$4$D$}?|$MD$E$'4UƂhEȍ7+ED$$D$ Mȋ}MOu7EEMEE}t`1E&A#E;E uҋMM9M}M9}}}ЃE}9}E{U$4M>ƁhE+Eĉ$D$D$ }ȋE}xu0EċUU \[^_]fE΋ MNEhBE@}~E@ uU;Tt}44$-Et$D$$ MUA% EBA% A M=E}E<}t&EUE܋REU}U䋐` Ot$1t&}>Љ Љ19uҋ}ԉ 1‰…UuUEUMA@H }M!}E2tgM }܅}SE9Et`E)UD D$}<$UEUƋBD$M $3}wt}GƇh\[^_]ËUUM $1}E\[^_]ÉT$M $m Bt&UWVS,EE UUM 9B ETEME#AE1E8} uԋ6utdEԋU@E;uM;Hu܃9Et }9ɉuɋUЋMD 9EuEԃ@ E t U$0}ԋG,[^_]ËEMuUL$M܉4$EԋER}GGU:MA ;AA ~}䋗TuEu}M܋Ut$<$EԋEUBBMuF F)v'U1VS M7Μ u ExD$E$EI [^]fEىD$ ED$EMEt$$nM1}9t  Uuu]7< }}t3Ft@D$<$YFxt E t$<$D$]u}]Ë@t@D$<$ǍvUWVSE 6ÿ U :G$Efz7MtKEE0u;VDV@M+A A)#uF GEwD$E$D$U$GM1 $D$D$uHu+V PV @F@ЉF0;F4E$,[^_]ËB $tfgfff)+F EU @ F Fu |$|$D$  $N4$_s}}G=?$F U U@ HMu 0E D$U$D$M $G4$V@v $D$D$ WUAH_$ $tx t2E$$$D$D$U$M@ @t‹P$ufUWVSu h E @ kM fyUE B(+B r!}E>D$U T$M $U xEF=?D$M4L$$UMD&uu U)P)PE[^_]ËM9JU Hu ))MtϋD$PL$u4$EE0‹HAA@U+r puV @F@<׋V@>;VDV@M+A AU)9UwB GM~M1T;EuE4U2$D$D$M $u4$Hu+V PV @F@Љ[^_]É1|$|$T$ $U T$M $Qu -M L$E$D$U$$D$D$ YUAH4$V@gD$U$H$tx t2E$$D$D$U$8@ @t‹P$u뷍'UWVS,E ÿd }FE[U fz]oM A tfyAU @9E B(F;z;z2EB( EMU B @t_E9Et@@P B<|$D$L$ M L$ED$U$M L$E$$E,[^_]Ðt&B(u7MEMM ; BBUM ;z4zu5t&|$U T$M $~E ;z2D$PT$M $P  D$D$ D$@D$E$t:@ t-PtPw-t 80„uM fySU @xE9EEE,[^_]ÍI MEEL$E$ D$U$WU T$M $E uZ @كX '|$D$ ML$E D$U$0E@ D$M $p@ ME+E9UMM EL$E$ M fyxYU @tE D$U$D$M $D$U$Y!L$E$랍&UWVSE VÏ` VEU  EfzU M;Hk@(x0u^9}~0M1ҋE)MEvM:L9Uuu UPM A @tL$u4$_[^_]ÍvU49U}ċD$M $ E9}|ߋU 뜐t&D$PT$M $E$E0$E4D$U$pMA0A4HAA@U+r puV @F@<׋V@>;VDV@M+A A)uF PGEwD$E$D$U$GM1 $D$D$uH9u+V PV @F@ЉF0;F4_E$[^_]ËED$ ED$U T$M $ [^_]É|$|$D$  $4$D$D$ E$QUAHE D$U$3D$M $4$gV@QD$E$tx t2E$$D$kD$U$@ @t‹P$u뷍'UWVS E fß\ E fxU @(t@P׃t64 t&U 0D$E$腽u݋U @ $qU @ @@@$tf@u [^_]D$#D$E$t@ U @$D$E$U @$ [^_]D$PD$U$D$E D$U$t&U(E ]O[ }}ut9E @ U fzx5EU D$ @T$<$D$G]u}]ÍD$PT$<$Et7HzAA@+w pW @G@4֋W@7;WDW@+G G)UB FUFV<$D$D$<$<$H+W PW @G@Љt$t$D$ <$@<$W@E <$D$=<$D$D$D$ <$AHU<$D$ tx t,<$D$$]D$<$ @ @tȋP$ufU(E ]fßX }}utiE fxxcyE ;zu9t&B(ttytt&]u}]Ív0U%1ߋUD$PD$$P ҍv D$D$ D$U@$D$t:@ t-P tPw1t 80„u!U fzU @6E$UD$ $ƉD$9E U|$D$ t$D$$@,tp((ED$$U |$T$D$ E$MUD$$U|$$D$ E D$Ot\p ET$$ME UD$DD$$;&t&ti@كX E fxx[U @j1UE $D$D$E$D$E$:UD$$q뜐&U(]E 6oU }}uD$ D$D$<$Ht0F uF u$D$<$$t$<$(F tD$<$ux u]u}]ÍD$t$<$QuύD$D$<$c볍'U(]YÒT uu}} 4$|$U4$T$D$‰x|$4$D$ D$D]u}]ÐU]E T uuD$4${4$D$]u]ÐU(]S uu}} 4$|$8UD$ 4$T$UD$T$t PBu1]u}]Ív|$4$D$ԍt&U8]RS uƉ}ωT$$UD$ |$4$T$D$tP)]u}]G t BED$`D$4$ED$ D$|$4$o͉'U(]EfßR Muu }}$Ut$<$T$ D$k]u}]Ív'U(]E?R Muu }}$Ut$<$T$ D$K]u}]Ív'UWVSE Q uU Bf|E ;rB(. ;r9EU B @CERU @(t|$E$聽ǃ[^_]ÐU fzU @c1[^_]ÍvD$PU T$E$D$ t$E D$U$8|$E$D$p|$U$zoD$p|$E$K'fUUHE jE 9EtU B @T$E$sW kD$D$ D$@D$E$t>@ t1Pt|t Pt80„E fxx`U @RU T$E$E T$E$t]@ 뎉D$U$뗉|$U1$8D$DU T$E$ftZ@كX D$E$U T$E$^D$U$诺mD$U$t&'U(]2N uu}} 4$|$UD$ 4$T$UD$T$u1]u}]ËPBtU|$4$T$ D$ɳǐUVSmæM uF4$PFt" t4$F4$PFuƆ8[^]ÐUE]@ÍvUEPp]Í'Uuu] M F)ȃL$L$D$ 4$FQAF]u]ÍU(}}]upéL 7G)t$t$D$ <$ƋGNPGFG]u}]Í&U(uu]}9L F)ȃ~7VyBtAF>]u}]ÍvR Fېt&L$L$D$ 4$뭍t&UWVSLK EЉỦMB BEU؋UЋMЋB@A tF Ft?8EtG< U؍MЉD$T$ $3@EEԋ}ԅUD$D$ t$4 $D$ @@ @ M1DžU؋MЉD$T$ $衮x YL[^_]ËEԉ $D$4tUԋMЉT$ $fFtD$ E؋UЉD$RD$$U̍EMD$ "D$T$ $EHt&UЉt$$T@ t@i@ ]1xMȅUȋM̋D$ L$|$D$EЉ$s@x @ P@ M;X<@ PMЍED$ "D$t$ $EE‰EE:t#t5'uJUʉM<:u׍FE܉u҉U~U+U؃Ut_MċE؉MEԋEUԋMD$ D$T$ $8EԋU܋MЉD$ET$ $D$ ̀D$u؍uUЋp@EԋEԅUԉ$AEpMЉD$ $JFMB@<=wF tMЋp@B<vB<v _7EMD$ D$EЉL$$JU1D$$UЋMD$L$D$ED$ 4 $D$PfM؉M܅@,EE؉ $D$DD$UЋED$ D$$D$赲x @ @MЉNjA@0q T$ $MD$EЉ$螲FEUԋM܉D$D$ D$EЉT$T$L$$$D$EЉ$t&'U8E]u}8@E HɉMtdUM@ EA)|$|$D$  $NjUMEwGE0U]u}B]Ít&MP AU U|$}4$7B t x t 1ɉSG74$|$] U}} ]uuD G GuqЃ{ftJB@@tn` G @GtE|$$]u}]ËE|$$SdED$|$$'@uE7$5듩 tK+B $=gJE7D$$UE7$A$ D$E$t&UWVS @Ht+D$ED$$r]u}]ÐE$iD$D$ Ƌ@4t$D$E$菶D$Et$ D$$뚐&UH}}]u9> 7tNFEF@ uA t?L$D$D$ D$<$tPHGdVUAt_A uwA 8@]U@ @EUG]u}]étuL$<$Ҵ냋EU܋BuuqU܋B^%=ƋA%=E:EtWMuUԉM܋UԋP xrM܋;P HCt&uT$<$1Eq@ ;B u D$<$L$<$]M썗Gt&UWVS}?< EGxJAQAB4Bw pBGMԉt$L$E$ t@ 9tω΋9uϋEx efr,UMB@E }u_@ xptGB)9?>Ut$$D$REu0Ut,pD$$԰MǁpU@,T$M $ЋUu5EU0H )9t-EMQ E$ UBČ[^_]É}T@ P ED$ ED$D$|$E$ EU$ E4D$M $腛UB0B4EP(H$@,D$T$ L$D$U$O@ @0B,BHB4E@ @9EtEEDD$ T$ $D$G!@E#@ŰBЃ%t D$M̉L$E$zŰB M AUP 0|$M $RGbD$HD$U$芗dMA@UI ʉUUB@Mx@B$D$}EF;F FMB4rE+A FpFA@+A<FAFALF <FEFUV @G7ځt@كX 멉D$<$떅t80눍Uuu]}9 xt"Bu.t?@ u$F>]u}]ftPv?F>@٩t@كX 몉T$4$<뙅t80fU}}]u@y 7t!Pu0tH@ „t(G7]u}]ÍtPvJFG@Ґt&t@كX ƒ띉D$<$s늅t80y&UWVS}vï Et.B@ G@<$胗G@G 9EG@Et%EtEt <$9Ef<$,G@PW@HHW@B+JG@BW@4Ew tR}VG7[^_]Í&9P2O@w AAGP GUL$T$<$|E@ @G)Eq&<$蜯<D$<$zG@G b@ EG@[^_]Ít&tP@كX Dt$t$D$ <$赙VD$<$7T$<$t&480UVSu@ Ɔ8BRDF F0;F4-VFD;F$} D$4$6F[^]Í4$ ɍUWVSE胵ü PNj0щUR, @ TG$DžhEA0@t hMA@w>``A%=]`B< }7`@ `‹@El`BEt < EMA8L}E8RETƀ8`B tMp@6T`t,O9Mt$Eĉ+UMUċp)‰EĉpM}Mt E@ D$E+EĉD$ EĉD$UԉT$M $ED$ D$`D$U$olD$lT$M $ۚED$UT$pL$lD$ `|$T$M $pEMB}r;y$E0UB[^_]ËED$U$VzdUA0%#ED$ "D$hD$U$ts$轒9hEt!D$ hD$L$E$юU ;D$M$L$m~MA @EEtU8ɃMA0EMO<ƁD$D$ tL$EԉD$U$}ED$ "D$ED$U$觫Et~L$}<$)D$}<$?v[^_]ÍED$ BD$`L$}<$@lD$ED$U$s} `G UM)ppL$|$ ED$U$踍MaD$L$}<$GsD$ ED$Uԉ<$T$i`Bt&A +B $`gMԋ`@B@BEA tUp@ЃEMԋL$}<$qEtƇ8|E0T$$聗~D$M $O|F``PH AE Et $Q}t UƂ8`A @Utt 8EU;P$MA9|$ $zEԁH iUp@D$M)ppL$|$ EԉD$U$zB+EĉD$UĉT$M $D$E$1{EZT$$zEL$E$) EG$\B;B rBMPPBEBMJ EJBEBlJEԉB`J EĉB$lJ(pz4B0B,0|$T$U$m{M}A9@ D$U$er$`%`$L$kdM<`bMExllp0G+l)9ωUXEtD$t4$|$نu䋅X~XD$U4$T$賗X`+lpEt }Ƈ8EzB`B%h B}t MƁ8`@ @Ett8t`$T$j}`I D$tD$x$MxEGl1U9D$ D$`D$L$lD$pT$ Mĉ|$L$E$lU9Ul0+MĉMt'x9EtL$Uĉ$T$3MxEDM)ppL$|$E$D$U$ywEM $f\B{M9xt:p`x)ȋ+QD$EĉD$x$胕Et MƁ8}E̋7D$U~$ D$M $vFU:D$$M9u~EtVu)Ɖt$`T$M $hED$t4$|$GD$E$nED$`T$M $g E1+EE)D$`T$M $glU9uED$t|$E$>t&UWVSU܋VB ЃT$D$D$ 6|$M $ԗM}A7@@~u E@ \D$ T$UЉT$M $軄E@ @MЉNuF><[^_]f}R GEUЋ2~}܋>E܉}G 0I@EEEG tUp@E9}O19uF @EF tMp@6ET$D$ uЉt$E$kf:MtEcTD$}ԉ|$E$iG @EED$ED$ u؉t$}Љ|$E$rG @ucuЋM܉1}G<[^_]G E܉}G 0ED$ "D$MԉL$E$蠠Et&|$U$59uED$M؉L$}<$q<$D$rE@ ‹@EE]VED$ "D$t$E$ND$UЉT$M $hUB uFDUB @EEйP tMp@up@EЁ߉PET$D$ EЉD$U$5MЁI 1ED$ "D$UԉT$M $E&ED$U؉T$M $D$u4$lqE|>D$U$n[T$M $ eED$ D$MЉL$u4$脞.D$ D$t$E$NED$ "D$MԉL$}<$3E[&U}}]u Y 7z wjB%=t*T$<$"@ @u9G]u}]Ít& A =tʃA `@ @tljD$<$E빋<$D$Qh몍t&'UWVSu;D$ L$}H<$D$贇}Q GUmEЅ}G Uz}@Eu G f}}EEE܋MU؉T$ Mȉ|$L$E$KŰ@WuMtƁ8M̋@,ŰHW G @QE@)Ѓ~`BE܉zf}tzG } JB)ȃD$PM $|D$}<$c$T$T$D$  $luBE܉zf}uqt"UDPt1F: MU&V;B<vB<vB< v‰D$6$_tËE`D$M$L$imIt&|$M ${AB7D$$|f}t4EЅvu*pu!Ű@W uMD@UȉT$M $膇Ű@WMH $D$2cED$UH$D$jVMЅuQf}t,E@MQ%H AQMUA @2UFE܉VM̋@WuEtƀ8UM܋B \[^_]Í&UpD$,M $'UED$ +uĉt$EEĉD$E$nH@ @ @Ű@ ED$P|$E$P}D$ E܉ $D$D$PoEeMH $D$c^EnD$}H<$D$QŰD$PE$uD$U$]EEEcD$T$M $k|$E$xUBu+%=tD$ D$T$M $l}@EĉEf}XD$MH $D$P3D$E$U(x.D$ L}utbEx3‹H$D$gT$<$LtU8tBAuV;a E;G$Eԍ$<$蕃EOWEuG+EԃEUԍM;O$} L$<$UuԋG7Ĝ[^_]ËEx‹HD$gT$<$dsHUB<iЋRE Ev EuzEt>uF1u5Exv,‹@t!D$gT$<$rt @fM;O$L$<$ TvEEEMA u MJD$<$LD$<$gOUB0%Ƈ8UJ<H8yD$<$aSED$UT$ML$ut$ ED$U<$T$pEMA<@utEt&uF vz}t u FtƇ8U<MA0tI8uF>HE`<@UUPMU+UA?lMAQ(Eu+EF AuEv01!ЉuEȋuȉEԋG+E9G0;G81}9EEEАE<$HfuԉUuЋ0tpuFuЋ0t_Y)օMEEU)9ƉU2t$ EL$<$D$bUB tp@|EE؃E9EYEUB1t`My@L$D$g<$oU8t9BAuV;aa UtMA;t1ɋuԉʉ7MD$D$D$ gD$M<$L$~D$gu<$t$nD$<$mI EEPE E t$<$Ut$ Uԉ<$T$T$bEI [t$M<$L$BEiuԋH XuE+EVF(E@8@4@0U;W$T$<$GOF$7wvD$D$D$ gD$u<$t$}D$gt$<$mA(qD$E<$D$ &UWVSA1{M܋U؉ uF<[^_]ËuF@u @&?D$HD$E$M4'|$M $/G wG1@ @EMQzBuUBu4$gIF@<{u܋M؉1EUBE؋U܉MAoE$haUfzu܋@EU}؋B)9Euf~E1t&D9uD$ t$E܉D$U$vN@ t‰D$M $LBgE$?HUB@&E؉8UBaD$ D$|$E$97}?u܍OUT$ $D$_GEM<}؋QIuVD$U$a]EE$aGrUB@D$u4$#_E|$D$ D$u4$fT$M $\EM|$|$$L$ JD$)U$csuVB4EEUMA +D$ D$|$U$L8D$ E|$D$M $TtD$ D$|$u4$8RcEPuVt$ $P*uE܋V@t$U$QQ́D$M $]t$U$M@ @EuVMQE$dMQE؋uM $W}M $dE$dM $dLD$E$\$vVD$U$\'UWVS,EUMPeÉE܋B@<y PQ@+q u؋A@@7~ B @t x EUD$ $aQ( uM؋FN )ȃ~AUAQUB,[^_]ËEPklt&L$L$D$ 4$G룍t&B fHɉMNfy@EU@$EUwL@9ur/wML$FD$E$99uHMt @U@WEM؉H @)ȃUAQMAMA@t$ $D$ ED$SWX@ )@E"fxD$ED$q$REUM؋r M9MQ@;QDQ@6MG+A uF Mu܉1 $)[NuD$ED$$,KU$AuMUQ JBFEUD$$D$7T9us؍vWED$qL$$QE~ B fMuL$4$5%uD$ $t$l7L$L$D$ $DMUT$L $D$!7eG9Ert&MD$ $a]CU@ MD$ T$t$ $UB+E܃~pU܃)=?BD$G|$$PEE $D$^U$D$1 $]uV@E)$D$ D$D$CUEz bED$ $m\OUMB@L$t$$D$ $T)$P'U(E]}u‹@@_0B@B}r P G~|$ L$UFT$D$E$*UVE8U]u}B]Ít&'UWVSLE6_oP8B@WEUԋW7UWB *ЃT$D$D$ t$M $RE0@~@@u E@ D$ T$UԉT$M $?E@ @^MԉNuF>L[^_]Ðt&uR FEUԋ2GE7UE@ Ft&F \}EEtEUPP(E߀}@ E؋F%=„ZH 8U9ME)9E}=S؉D$uԉt$E$"F @iuԋM1MuA1L[^_]ËMA@EFt$u4$97F t&E9E؍v7F }@U@ 2@\$uԉt$E$AF @uԋM1EUBL[^_]Ë@ t&Vf)t&(D$M $8U7t$E$$W}5\$UԉT$M $.AuF @%MԋU uFL[^_]Ív+E9ut$U$ED$M $]VE@ x}EEoD$U$E1RP,$\$EԉD$U$m@MA @u!UԋEt$U$XEL$u4$DE؉ED$MԉL$u4$1E@ @u*MԋU Dt$E$DD$4$Dȍ'U(uu]} ZYF@@tzyt B HP t7uRF)ȃ~ZHA4$6>H4$']u}]ËP F<{x uHˉL$L$D$ 4$Mt4D$ D$|$U4$M:G @uE8FW|$4$Cڍ'U(uu]}XFP FUF)ȃ~XEyAVB t BxZ`u>]u}]É>B`D$R F4$D${">VƉL$L$D$ 4$|;댋B F4$D$QV됍v'U(U]u}W'P0UUxB@@tƋEtt 8uR9t!ED$ |$t$$8F @uE0UB]u}]ËUt$$BfGu UƂ8뚉|$$QQu⍴&U(}}]u WYEGP G4Ut$<$D$1JF @t t$<$AE0G]u}]fU(}}]uV7G)~9GxxSVUPG@ FEG]u}]Ét$t$D$ <$9ƋGxyVUPG<$D$F릐UVuM heQEQ AhdA@D9s 9ЉRBwB^]ÍUWV EUM䋀hEEtQUB֍@< 9v.F׍&̍Uuu ]cOÜP t/PP )@ BL$D$$?f1]u]Ít&'U]N2u$ A@@$AVD$T$$]u] UVSrNët[^]$DA  (9‰v (9‰@w묍'UVSM+t[^]$@  09‰v 09‰@w묍'UVSrMët[^]$D@  9‰v 9‰@w묍'UVSL+t[^]$?  09‰v 09‰@w묍'UVSrLët[^]$D?  ,9‰v ,9‰@w묍'UVSK+t[^]$>  P9‰v P9‰@w묍'UVSrKët[^]$D>  9‰v 9‰@w묍'UVSJ+t[^]$=  9‰v 9‰@w묍'UVSrJët[^]$D=  9‰v 9‰@w묍'UVSI+t[^]$<  9‰v 9‰@w멍v'UVSrIët [^]$A< 9‰v 9‰@w멍v'UVSH+t[^]$;  9‰v 9‰@w묍'U]unHçtQD$ T$4$D$Sdždžd]\du]$;D$ D$4$D$fUuu ]G }}tMF t&9t=9t39t);t!G0;G8}%G0W,G04N]u}]D$<$tɍ&'U}}]u0Gidt\\dFFG0;G8|D$<$G0W,G04]u}]É6fUuu ]Fܫt!Et$$$>4$>]u]Í&UWVS }VFÏht+0u&6tF u@ uՋt0$>u LJLJt0$V>u LJ LJt0$(>u LJ LJt0$=u LJ LJtf0$=u LJ LJtf0$=u LJ LJtf0$j=u LJ LJtf0$:=u LJ LJtf0$ =u LJ LJtf0$RP@B@ B 끋ERP@B@ B @Z뇋EdRP@B@ B @ZUMET$@ $D$UBEUMD$@$D$ t@MAERP@B@ B @ZEUMD$@$D$MAUMET$@ $D$ t@UBEMt$|$$L$ @&B&@ B @$fB$ERP@B@ B @ZMUL$@D$E$CUBEUMD$@$D$= t@MAEUt$|$D$ $ @ B @$B$B,BUE UE7!m}Ju}WFUE>FGFGF G FGFGFGFG|vuEUD$F $D$G EUD$F$$D$G$EUD$F($D$t@G(F8G8$t&F G F$G$EUD$F($D$_t@G(F,G,EUD$F0$D$5G0F G F$G$F(G(F,G,F0G0%=zEUD$F4$D$G4F8UD$| $D$G8EUD$F<$D$t@GP =E H1tT$L$U$MAUT$ M L$U| $D$E,[^_]$,LDM QLQPQPQ P QPQPQPQPQ P Q$P$Q(P(UBU BDx $&U B1ҋDt@ M ATT$.D$$8D$ %T$$^ E@E@$2 D$H8D$ %T$$ v'UWVSM ?Et#E UD$| $D$Et E[^_]1EfML$B D$E$t@G U BщGBGRt7y gt1AD$ET$$U Ez cGU B t%BtPtMUG|$L$$PM ɉM 2$ @@@ @@M AGAfGA G A G A 0 B+uI1:]u}]f1Et$$a뎩@ ED$ D$ t$D$E$txubtitJfm80NR@كX #;u t@ t뭅10EL$$ USE !xPttrPvo[]t1Ƀx []ft#@كX Ѓ[]ÉD$E$* 뜐1[]Åt1ɀ80끍U(}} ]u YwOt(Ep9LG%= t ]u}]ËOP tU|$$@,tD$E$@,UD$*|$$@$$ `0EƋBFBFB F BFBFBFBF$ 7G8oUpP UVO9PrsUt$T$$@G uGUD$ET$ UD$$ OE|$D$E$&뵋ET$|$$sUD$$~v'USE (auD$D$E$H[]Í&'UHuu]u}} tG%=W9GUD$$EEEGE^UЉUԉPU؉PU܉P Gt ]Og]u}]Ë RU|$$ GCEEEكXE]EEG0 GsB E܋EDكX]EEEEE뒋EЋBEԋBE؋B E܋ECEEكX]UEЋBEԋBE؋B E܋EB] EEEЋBEԋBE؋B EB]BEBEEEЋE&EЋBEԋBE؋EfE}كX]GEUЉUԉPU؉PU܉P EXEB]ܸvCEEEEEEE|$$=EEEEOEEE,gD$E$$TLD$TD$$UЉUԉPU؉PU܉P EXUPUP$XD$XD$$ UЉUԉPU؉PU܉P EXUPUP@4<kEuЅt EЉ$@@@ @@UPUP@ @$@(EMЅt EЉ$s@@@ @@UPUP@ @$@(@,gE{D$PD$$.$4RUЉUԉPU؉PU܉P EXUPU@ @$@(P@,@0EvU܉P EEXEUЉE8UЉUԉPU؉PEUЉUԉPU؉PU܉P EXUPUP@&@ f@$%E9UЉUԉPU؉PU܉P EXUPUP@ @$@(@,ETE|$$r'U}}]umdt^\dFFt$<$D$E `U N]u}]É褿USE Qmt@D$E$[]Í&'UWVS,E m@ 5Ud2t&}W@;WDW@bM+A }F~E $D$D$`U pU+J HMQ @A@ЉƉ $W}UMT$ $X} WM;H@}D$AED$<$EtE <$D$EH<$#xEGG@U+r pJ PMQ@4q 1)Lt$t$D$  $(-} Gt1} @D$E$(WЀGtU`M yv1} @tE|$$U B%@=@} GE v:M Av} G%@ G,[^_]Ít&$t&E hgE8tUM@, $D$D$M@ $D$?EE @ tP )M Q} D$E$M A<$W@UD$D$ $MNjGx} 1AR} G%=x y A؉D$E|$ t$$U b>EU p t_M $ 9D} p E$~93Up $V9gMD$|$ $P(t @W@@(U @<$]M @D$M} @L$=E%E UD$$OEE UD$$M @$$} @,EM }L$<$EE UD$$EM B,A t.%=t0VEL$$6f]u}]ÍvE&fՐt&UWVS,}vï\EMuIuX t(1ɍ&u 1 Љ19u҉ 1‰‰UEdU\dFFED$t$$}Ut؋UD$E T$ UD$$UxUP @V F}t $V,[^_]ÍEU߉D$ ED$E }E$D$Z}E E蓭"UWVSu /[}FEFtED$$fFtDfGt&E|$$?@BF% Gf@FEt$$GFGFUOVGUdG\d[^_]Ðt&UD$|$$-Yt&Ut$$eUHD$D$$v'UE ]uu}}Y@ U B< uQE :B9v4t]tY<$t$NjE :U p]u}]ËU <$T$E ;r:v։+B4F뎐t&U B%=t~4$NjE  tBt9ƉwhT$L$<$E lfD$<$U B<T$<$D$E :bov딋$&fU}}]u YXdtl\dFFE u]u}]D$t$<$U 9PsЉT$t$<$뾉ƍt&딍&'U(M]vïWuu ɉ}tGVt<+M~vzF t*f|U)P)PP ]u}]ËPu1UxupU|$T$$@@ N 댋UD$t$$F k듋Et$$ ~J‹ET$t$$vUWVS } VÏVo$7@@@ @@BrE;}}#}rUz t]UBN }qV uuuoEthE@ t_t x 19uGEUD$$m3&@ ;8t9xt9xt 9xt&E}qF tMEU ɈF Vt~LT$EUD$$FE|$FE$G t%G [^_]Ít&} t&UVfED$|$$uE@F9xO;x ;@ @U8]uu}ωEBXÑTftEu>tG@t~UEU EM+ut1]u}]ËD$D$D$ wD$ED$T$$y$M@@@ BQt&'U(}} ]uu]ÖSOt;Ep9tgtBtftt <ft&t>@t:Et$|$$t#tt&]u}]Ívtt=~vUlt$D$$XfNfu뾀wEUt$ |$D$T$UD$E$D$7@g&HWUD$Et$ |$T$UD$T$U$Nj뿋뷋믋맋x럋뗋돋L뇋0|qfl[PEH:D/$ UD$Et$ |$T$UD$T$U$t~t L*Ov1odwtlaVUD$$US$E XÑPD$D$D$ED$ tD$$ $[]ÍUWVS<EMU 6PeE1ɉ: $D$D$:t~‹ƃz-1ɐt&ȃ‹9}ًByp:uEe3<[^_]Ë@(t܀`8@(ur9bBxDž<$ $EЋEEЉD$$ ,UD$ D$$蛪EЋuM uMǀǀǀ ǀǀ ǀǀ ǀǀ ǀǀ ǀǀ ǀǀ ǀǀ ǀǀ ǀǀ ǀǀ ǀǀ ǀǀt ǀp ǀǀǀ\ǀ`ǀdǀhUЉX X ` ` $ MЉ $uЉ| dždždžT$ UD$4$T$׋1҉ƋEЉǀǀtUD$D$$觱‰MЋ@@@ @@D$ ED$| $D$E 1҉ƋEЉǀǀ<tUD$D$$‰MЋ@@@ @@?D$ ED$| $D$5uЉ4$JT`ߋMTR D$4$T$?TuUЉD$ TD$| $D$ӿMЉ   $T$uЉUD$ D$| 4$D$4$D$讘MD$ D$| 4$D$赾D$ ED$| 4$D$茾uu̅e$MЋt$ủD$ $t$(t@UЉMuЋpL$4$D$pU4$uM̉t$L$EEЉ$vŰMЉT$ $D$蚣uЉUẺD$4$D$uuM̉L$D$EЉ$PUЉ1tMЉT$ $uЉE̋UD$4$D$t@MЉűUt$ $D$ڢt@MЉuẺD$ $D$蠢t@UЉM1tuЉT$4$:UЉM̋uL$$D$襡t@UЉMủt$$D$GUЉMt$ $D$uЍ.  UȉT$D$4$D$ 蠲Mȉ D$4$L$D$ ~EЋuD$  D$EЉt$$XUЉ$MЉ u $D$蟗UЉEԋ 8ẺD$$D$:t@MЉD$ $D$iMԅ1EŰMЉD$T$ $t@UЃD$ $D$9ut]D@ uM̉L$@ D$EЉ$谸UЉ$D$!t@MЃD$ $D$9uuuЋ UẺD$4$D$9uM̉L$D$EЉ$UЉM̉L$$D$uЉUẺD$4$D$͞M̋uL$D$EЉ$訞UЉM̉L$ $D$膞t@uЉ UẺD$4$D$YuM̉L$D$EЉ$4UЉM̉L$$D$uЉUẺD$4$D$uM̉L$ D$EЉ$ȝUЉ M̉L$$$D$覝uЉ$UẺD$(4$D$聝(uM̉L$,D$EЉ$\UЉ,M̉L$0$D$:uЉ0E̋UD$44$D$4M̋uL$dD$EЉ$t@UЉduM̉L$h$D$ÜUЉhM̉L$ $D$衜uЉ UẺD$84$D$|8M̋uL$<D$EЉ$WUЉ<M̉L$@$D$5t@uЉ@E̋UD$D4$D$t@MЉDűUt$ $D$ۛt@MЉ űUt$ $D$讛t@MЉ űUt$H $D$聛t@MЉHűUt$L $D$Tt@MЉLűUt$P $D$'t@MЉPuXXllẺD$p $D$t@UЉpMtt  xuЅrT$D$4$xŰMuЉT$|4$D$bt@UЉ|M1ҋt @ uЉUT$4$D$Mdždžủt$D$EЉ$pt@UЉMǂủt$$D$!t@UЉM1tuЉT$4$bUЉM=L$謻uЉ=%uD$ $T$dŰMuЉT$4$D$et@UЉM̋uL$ $D$8t@UЉ M̋uL$ $D$ t@UЉ ǂMű$t$ D$<D$,UЉMt$$D$誗t@uЉUẺD$4$D$}MD$| 4$D$x1҅tuЉVUẺD$$4$D$&$M((,,pp00ủt$4D$EЉ$蕖UЉ4M8899XX\\``ddhhlltftxx||$UЋM̋x UL$MЋx  $D$蠊t@>uE  UMЋB0A0uV8F4?Q8A4 $:UЉB,MЋQ8D$$T$guЋF0xQ1&EЍ4ŰM@,T$EA,0D$EЉ$t@U2M9y0}uFD+F<=?: 44$薬UЉBD$ 4$ݠu$D$ BD$4$D$u։U4$D$\EXE1RP,$'USE 1 @ t @[]ÉD$E$/[]Ðt&U8}} ]賣uG Gv<G ~O7F݃P+U\$$F 7F FuzG O&F D G%=G%=GD@ ]u}]ËE|$$gGuթte7Vt\ED$ FD$D$E$ƒD$E$QU$\$bu,EuD$)$@t U$1uU7 t ruUuUD$|$$迁1ED$ D$ |$D$E$]vHt7;_@ YE\$$ř1҉F 7F RP,$FuzG OOED$ BD$D$E$KEoM7D$E$蟖^uG W7WF݃P݃0ٞ1؁WF 7AD$)$W(G]U@\$$裘#E|$$nE|$$KuUD$)$E$p1UD$|$$T$U$mU|$$71U|$$7PG G  GG GE?UP 7E$謐G*oEt&U\$$0F 7F FeE|$$$UD$ $謚EUD$|$$n~UD$ $fEU\$$谖1҉F 7F RP,$FG OvUfwRډP 7E|$$5gE|$$!iUD$|$$}-<W%~ GuTO1ҋERP,$Y@ 7P 7OU|$$萛7E|$$z뛋UD$|$$|d&UWVS,U 薜}@,EۆD$ D$T$<$,EE HEU@ p<$EԔG4D$<$UhW@G0;WDG4W@E+G G+EEuD$<$D$ɏ<$D$:mUB7UD$@ @<$D$|7@ t6@ EFG0;G4@<$zMt E `,[^_]ÉD$<$iEFG0;G4~Ív<$o붍UD$ <$T$T$Y~E<$iW@ft&'USE ؚPt@ []Ðt&D$E$h[]Ít&'U8}} ]胚üuG Gv<G ~O7F݃P+U\$$~F 7F FuzG O&F D G%=G%=GD@ ]u}]ËE|$$^Guթte7Vt\ED$ FD$D$E$ʏƒ#D$E$!U$\$}bu,EuD$)$t U$葊1uU7 t rUu uUD$|$$x1ED$ D$ |$D$E$-vHt7;_@ YE\$$蕐1҉F 7F RP,$FuzG OOED$ BD$D$E$EoU7D$E$o^E G W7WF݃P݃0ٞ9؁WF 7AD$)$'(G]U@\$$C{#E|$$OnE|$$lUD$)$ÒE$@1UD$|$$vT$U$rU|$$ʔ71U|$$贔7PG G  GG GEDUP 7E$|G**EfbU\$$yF 7F F|]E|$$UD$ $tEUD$|$$6uUD$ $.EHU\$$x1҉F 7F RP,$FG OUweډP 7E=2E|$$QUD$|$$ct+E|$$迒7<W%~ GuTO1ҋERP,$Y@ 7P 7OU|$$J7 E|$$4뛋UD$|$$sdfU(E]}}uMÆ@ U B E@ u7<$軋G4D$<$<_G0G4<$>W@;WDW@+G W))UNVG)ȃE QAG)ЃjErBG)4VUU<$D$~<$D$cEFG+EE u<$D$ED$<$D$cUB71D$D$<$zEt-PHPE@  @ UEG0;G4~<$e<$p]u}]Í0D$<$衈ED$ <$D$D$tEt$t$D$ <$vtT$T$D$ <$WtwL$L$D$ <$8tAt$t$D$ <$t t$t$D$ <$sWE<$D$Qmu(tZ@كX H <$貍W@^1zt80iD$<$Xv'UWVS\EU Mu}eE1RƅG tp@ЃGtD$ D$L$4$pE }q w M ~ tGU<9 Dž@DžDžf<9DžhDždƅpDž\x9%8%t 9‰xu9<G:+gt4$|$D$ R4$|$D$RAqx@ zpƅ@jX@tD$"<$|hD$ D$$uG.@f=tfsT$ xD$D$"$`bD$$D$pD$4$D$k^hD$$D$pT$|$$+|$D$PD$ $ƉD$F0@hZD$T$ $SF3\,4$D$T$]\pAxƅ0,} 9 T1ҍl 2; u 40,pƅ @<+<<$D$t$z<$D$DOl> dDžXX)dDž tDž lDžDžH ƅpf>uׁ}ZE%XUH E؉T$1$ƋXU9)9G)T$t$$VXE)Bp0`,A ,XHEt XHX8T+tTX9GXOE 2E@XX@ D$xD$EP$)XOP\D$T$ $XƋ\t$<$]6Tt T@ XfMe3 [^_]Ívt&u\T.tT댋XMP E؉L$1$X\D$D$$6Dɍ./$t&\D$$)+XB XO\D$L$<$TXU8P\u!uD$)<$_t<$$UTt TX.yd\D$L$<$>C.?p\|$t$D$ PD$$^LX\D$T$ $B\D$#D$$SX9\D$)$^T.TKG fu?pPuՋ\D$r|$$QtH tPt\BB|B>XO Tt FTV!?p`pO<:1?p((?pfP,tT fP! t€u҃+PTtT0XN:h9OwXIPh$T$|$K?\XD$ D$ D$\|$$-TPtX9;TTt @TF XO \L$<$Q^\T$ $:^XUPT$ D$@$)2XM@ P $D$#jD$#T@aT@JX`8X\D$L$<$ ?\T$L$<$OX:WTE\t$T$D$ $a]X9$D$)<$Z<$P\$ PX`qHA<Džxt]% If8T t(fѭ88tߋxTxыxtxD-tA,EFfy<y(AQ,9v#9fr uƅF$2PFf(?VE|$D$$<F@:VtOG,$L$D$;t VFD VFD)VFEFƅ]U8U ]uu}Bz\ó% =u p@tM 1A t]u}]ËMA tۋ>4$TF4D$4$[(F0F44$]LV@;VDV@+F V) )&EWGF)ЃM BJD$D$4$jDB @E8E ;:t2E9BE|$D$$;KE EBF0;F4=4$:U J |$|$D$ 4$U>V4$c/빍ED$ "D$T$4$YTT$T$D$ 4$>|$|$D$ 4$=U D$4$T$KM 4$WV@iU8uu ]}}MZÆFt t$ft@]u}]Íuk% EPBf=_Ћ]vU]ERϷuu }}D$t$<$!.F @t t$<$<]u}]Í&'UWVS,u 6Ro}F%=Et$D$ ED$U$3EEE9B9}E|$D$E$AUP@F%h FEtt 8u,[^_]Ét$$,[^_]ËBEEEE9BlD$t$E$lB9}W:PU(E]QOuu }}D$ ED$t$<$D$!F @t t$<$p;]u}] USEPD$D$ ED$E D$E$j![]USU hPáMB t@[]ÐD$ L$T$E$O[] USU PAMB t@[]ÐD$ L$T$E$N[] USE O@ t []D$ D$D$E$`N[]ÍUWVS,} VOÏWƒ "  }t&UtWF tOD$ D$ >Et$D$M $Bt@ 9tω΋9uϋ8G  }3M9M@ @U@,uMP J r@ P,[^_]à E1,[^_]ËU@ M,[^_]Ð }[@ED$ MD$L$E$UE1럋MM@ 눍vE$)FD$U$7D$D$ MƉL$D$E$*t$ D$D$U$$D$D$MƉ $ID$D$ t$D$E$FU$4,MP J u Rx<|$D$E$C|$E$WlU}:@ @tFM@,kD$E$CU@ p 1+붍ED$ D$|$U$J3́D$E$.Cv'U8uu ]}}KNу tzuVBED$ D$D$<$t x t$D$<$B<$D$6]u}]Ív~ uB t@uڋB$<$D$D$5BED$ D$t$<$IP@ m@uaαD$H<$D$A덍&U8E ]}1u~J÷f@E @ BEED$ ET$D$E$53U B wEGGGUG]u}]ÍvUD$oD$$8ZPt M;t$'BE @ >U EMD$ "D$T$ $cHMD$ $}+EUFYtGGG.M1,M ED$D$L$$D$ oD$GU MD$oT$ $8'UWVSUD$$ v Et&uD$U MT$ $(u V%H Ff U JMR P Au N}D$U MT$ $E@ Q}' Ewu ED$t$$vuM @ZQ%H A U JMfApuL$4$6YtL8?E 4$D$$+uED$t$$UƋB Pf_L ҋt$uD$ D$4$3}D$} N} t&Uu H$Mx(ED$ t$$6UD$D$D$ *$t$t$:M@,t@B,E UM0|$T$ $+F$u x(N}U @ t @$ u V%H FU `0MT$ $ E U0@ $D$S0F fGM B0%=t6J,t&upL$4$D$oSE J0M J0<}u ED$t$$}} t&u~89 9tGE J B0t A$z Mt*B0U upP A,B(M @ HJ0G ,} M Q%H AuL$4$b8QcM Q%H AU JQ+B $1u f} hEM B EB 8u B0u*J,tUpL$$D$uJ0uMuL$4$JEM B @EB x뽋uM B H t=@9t6uD$4$U @ @@ @ XM B uD$4$84E EB @9E,u H Q EB(suxuX;B$UD$$4MBIt]@I:u A @ BIp$A,H,\u؇D$Et$L$ D$$?E1G tU MuD$ T$L$4$E B xu @ @ H0EXz0J,t&UpL$$D$UM J0EM B @EB xu B0 J,t#UpL$$D$rJ0 gEM B @EB xu B0@9J,t#UpL$$D$J0@EmM B @ EB x t&Et$$e4Ku NEt$$;4.E f AXuFt fx%CE t0rt)M A Q+B $-u fEu F%H FM@B@BfQ%H AU@@bu NM Q%H AE HM Idu N}Uxu A @uX;B$A$4$D$>D$,+uL$4$2E @ MD$4$t2D$E$,'&U(uu]/ }}tE`$E@@@ UԉB9U؋MPUԑD$$'U8}} ]u1%NJtaO BE2ftGED$w|$$qE@Ɖ]u}]ËUEt$D$$G uыED$D$D$ w$D$|$#UD$w|$$EtEpyt&E|$$^UED$ "D$|$$P#OU)UEt$D$$S닉Et$D$E$7U(]uΉ}׉EB#"f qpU2M M;E}+MU 9rET 9t19uMuM uM+UTM u@@ t&MuUD0ME;E sT9Ev!EuU u tD1ҋ]Ћu}]à 9UED$wT$$in]UWVSLE "Ot6E @ t<BEEUuXu}t EL[^_]Í&ED$ "D$U T$u4$ E܋Ett&U܋uEU׋6ǍEE؍EEủT$U|$UԉT$t$ uD$t$EЉ$M؋U E.u}E̅~vU9v"19Mt9׉Uw}E܉D$ED$ UD$D$uЉ4$M1U ER1EU+E܉1EEE|$D$UԉT$UT$D$D$ EЉ$M؋U Eburu6u~kU9v)1&9Mt9׉Uw}ED$ED$ UD$T$uЉ4$M؋U E~0U)2EU+EL[^_]ËEp'U1S$U MtB ut$@EE$[]fT$ $EED$ "D$T$ $HfU8uEu ]}}EV3l%$=$tf߸]u}]Ë@tށF t1BEUU܋U܉D$<$T$t*EB땍ED$ E܉D$t$<$뿀}wGtNPf_t3pҋD$D$<$t$<$ZD$<$fɍ D$<$`U(]E?uu }}D$ D$t$<$it$<$D$ U@]u}]ÍU]҂uu }}D$t$<$ Et$<$D$]u}]ÍU(]9ruu }}D$t$<$ F t]u}]Ðt&D$ D$t$<$fUuu ]}F u]u}]ËED$t$$ u1ԋ8@|$D$E$stۋH9s?xA9tByN 끉'U1҉WVS,E} Ju9G uNEGt $%=ED$ D$|$U$8t&G G%=U t 2J9ƉMsY>Nyf9vF9yEEEt$D$E$ƋBuN2EBEBO R,[^_]ËP,[^_]Ë@EG 8G tl+B $=g딍Et$ D$|$E$G U댉$D$|$yr|$M $$/'U(]E6ouu }}D$ D$t$<$t$<$D$U@]u}]ÍU]uu }}D$t$<$0Et$<$D$]u}]ÍU(]iâ~uu }}D$t$<$F t]u}]Ðt&D$ D$t$<$fUWVS,}/~G WBEUEtn1G E @ u~U 1B uV9t"U ED$T$$EUD$D$ E T$UD$$I,[^_]ËUp@Ѓ듍ExUD$$kU 1B e빍UppE փ@ 0묋EUD$E$D$D$E$8UD$$ƉD$/F t;@EEED$ED$ "|$$VEED$ED$ "t$$0Et&U(]E&_|uu }}D$ D$t$<$F @t t$<$]u}]ÍUSE|D$ D$E D$E$q[]Í&U]{uu }}D$t$<$F%=tFu+%߉F]u}]D$t$<$^ˋ<$D$J USE 1{D$D$E$h[]Í&'U(]Ezuu }}D$$t$tEF t@]u}]Í&ED$ |$t$$9ύvF tED$ D$t$$ 럍vUSE AzD$D$E$[]Í&'U(]Eyuu }}D$$t$tEF t@]u}]Í&ED$ |$t$$IύvF tED$ D$t$$럍vUSE QyD$D$E$[]Í&'U8uu]}} yF tJBEET$|$D$ E$zF tO ]u}]ÁgvED$ED$ "t$$F랍&'USE8qxD$ D$E D$E$[]Í&USE 1xD$ D$D$E$[]ÍU(U ]uuwBt/@ED$ E4$T$D$ ]u]éu]%u]Ít&ET$D$ "D$4$)뢐US.gw$$UUUT$ U T$U$T$?$[]Ðt&U8}}]u wdts\dFFE $/Ut$<$D$D$D$D$ E T$D$)]u}]É둍t&'UES$EED$E TvD$E$$[]É'US'v$$U UUT$U$T$f$[]ÍU8]uuu}} 4$UD$D$D$T$t$D$ E|$$VG @tE|$$]u}]UES$EED$ E DuD$E D$E$$[]fUSu$$UUUT$ U T$U$T$?$[]Ðt&U(]tuu4$Ut$D$D$D$T$D$ E D$E$I]u]Ít&'UES$EED$ E DtD$E D$E$$[]fUSt$$UUUT$ U T$U$T$$[]Ðt&USE sPt@ []Ðt&D$E$[]Ít&'U(}} ]3lsuG gGtnG%=.OtEp9t50E|$$Et$|$$^O%=#D$E|$$z@ W%H GO]u}]ËE|$$G Ot&xz %H GOj 띋E|$$ك(hXW%H GOOPr ua%H GOB ED$ D$ -|$D$E$3%ȁ G&E|$$ E|$$LED$ D$ |$$(E|$$4 ;D$ PT$D$E$tKD$E$\E|$$أ(\$ E|$$ E|$$ D$E$!'U(}} ] oucG fGtnG%=bOtEp9t50E|$$Et$|$$O%=%=t{7EwB<vBM<MB<vB<vE|$$UG Ot&7~ Z%H GOF ]u}]ËE|$$&E|$$O%H G8Oك(@X눋ED$ D$ ,|$D$E$UH7~ fL%ȁ G!t&E|$$7%H GO@ E|$$ED$|$$ vB< v;-B< w^B<9q07׋E|$$TE|$$@OED$|$$OBB<B<B7fED$D$ A|$$7D$ FD$ED$E$tKD$E$E|$$ك(\$QpD$E$F9FrCFH9ʉrvAq;0wVB< w1 D$E|$$v7릍&'UWVS U EMe5u1JkD@t$NjD$JTh@t+0p D79AVTtt8_tTT$`$ht|$D$$dthDž$T$`v@t+9tыX)9ul$hDžxD$<$aUE]@ÍvUS7^D$E$[]ÍvUS^D$>D$E$e[]Ít&'U(]}׉EuR{ô]ƒ tn uHWGE$GD$ƉD$E$n8N]u}]à t[E|$$몋y,yuA$uXy(u}뉍&@(t gGdf@0L뗋E|$$WϋE|$$땍&'UEu}87$t$@ F w E‰UB:u}]fU|$}4$7uG74$|$]ÐU(}}]u\G7Pt3tt)<$t&uWG)~G7]u}]Ét$t$D$ <$ƃGōt&G뼍t&'UWVSU3l[pB <@ |E@ ‹@EEUB tMp@z EEEE+EEMA@Et#EtEt $EE@$E҉UD}9EMP, U@ EB0%}MI<EƀuȋuV MA@ @xN }u E@0c UMȉ D$x$t$ t$E$1Uf~:z xB(?UB$;B(M΋Q$I xF LF D(V$+~ xV @FU@Eȋv EȉEEEMȋuEMċv tx0ut#DB u0|MEԃ Mu U UԋMA0 zUB8^ Uz<U9~ MEA0E;uUԃU}EȋMD$ D$UD$|$T$Mt$L$ ED$U$lM M-E@>t UƂ8MA>tI9t)ύ4U)EMt$)D$M $[ƋE}tN UB+EȃEEȉ0Uz0]WEa9׍t&ws)ЉD$T$u4$Mɉue}tN UB+EȃEEȉ0MEU9Q0MuA 9vuMtt$E$늋UbMA Em;uM1:t5E&M:t9uy$)D$t$u4$ƋEtt$E$B}tN UB+EȃD$ Mȉ$L$L$EȃEEȉ0}u1u/D$ "D$ED$U$>E|$D$U$#&UWVS,EMLJEQ@<BA@By A EGQ@E苁p@(EAp)}}!tR@ 1@ ;+Ex ;EEUEMA,[^_]Í&M ;}UrWEuEUE9r)@ tZ@ xi+Ex;E|ŋM܉9s׋UUB,[^_]fEMA,[^_]ÉD$U$]yt&E땋U$TMUD$M $EEUBgM܉EUuu]}IHF >EF@UF@F@tBtMEJ9sωBF>]u}]ËωB4$k UWVSP@8EI ȉEBF@F UuERUfzF9lj}EUȋ qEuЋA9EaQEEЃ)‰Uzu+uuE+uЅut;Uȋ@(suċ}t&D$E$u}E+})EEt>}?u4$ EEȋEt$D$U$ٶE؅t^M9MuȋEA;AEAEԅt1UȋP4U0E؉)vuEt3}?MȋŰED$uĉ$t$:Ex WU@@uЃAMEMȋ@(U$nEuFL[^_]Ðt&F@ p Up+H(M̋U̅xEE9E+‹U@ I@ EЋEЅ_EȋA9ED$ U$uȋAEqD$PT$M $>@ yMAuF@;FDF@NUR )U}Mu>4$qFPt0tt4$D$D$E$NU$ӴMAL[^_]ËuȋAEuȋ+A 9EgE̅}?u؋ẺT$)D$$Eȋ)1UȋM؋HHbT$E$W}ЋUЋMtD$E$(u0D$D$ M $qDu4$AFuЅtC}?ED$ED$U$(Mȋ@(M $EuЍDEEEt1}?u4$E܉t$Uĉ$T$轲MA EA@MȋUUЋuDUȋ A(EAU9U}̅Eȋ}؋űU̍t)uuȋUEA qD$UȉT$M $dEKD$U$虯EMEȋAEUԅMȋ@4UtDu&uEq}?UȋUED$M܉$L$u܉4$.D$EȉD$U$vuȋ:T$M $譭yu4$3UB+E9EF}?VuȋE̋MЋL$D$E$|A(tAUEB0;B8$EЅ-}uЋD$E$͢uUȋ UEЍTUD$M $EuEF0;F81fDD$U$n;uuuȁ}?tEE̍UԉD$T$U؍$uȉ1)UȋM؋Hu|MЋu+r L$ ED$UT$M $蝳Eu@ Ɖu{EЉ4$D$Kt$D$u4$͙'uȋUЋA+E̍DE(ED$M $Puȋ}Ћ?U̍4D$M $!uuȋ4$F@uȉt$E$D$U$a$>MЉ$L$_uȋUWVS,}O4EG@UO ʉUG@G <$EA<$D$UU9UEJD$ <$D$ED$UMED$T$ L$D$<$M;usTD$<$M9uEwD$ <$tTD$D$ <$농t&U+UGW )ЃT$T$D$ <$F‹M܍BJG,[^_]Ð&U(}}]u2W@W@G )ƍP+w T$L$<$T<$D$EGW )ЃT$T$D$ <$虰‹MBJG]u}]ÍUWVS\EO2P 0U@@8A@EċQB u)Bu E! $t&5MQEEH1 EȀzxEEEuU܋NVUMQ  t,aD$E$&]u}]ÍvxL$MD$ |$ $蟍EFEU܉MA릍ED$ ED$~D$$D$}EMA1XG @ D$UE$D$GtGEUMQUB L$MD$ |$ $%EU뷋Et5x u/@ Pt#@ uEE0UBUGWMA}E|$$肣 'UWVS,E+H0AEE܀t9Et& U$辩E܃ UJEA@taU~B@UUR UUB@B EUB @ aD$U$規,[^_]ÍVUvV  uƀyAD$UD$t$T$ E$蕚}Mu }&E8UB,[^_]EEy|u9v Gf9rw(E$[]Í'USG(E$ם[]Í'UWVS,}(7EG@Et#EtEt <$EEx EFEtNE<$D$蒇E7G)~NEthE<$D$芫}tpG7,[^_]ËE<$D$$E7G)t$t$D$ <$=ƋEuMuFVG,[^_]É7ut%ED$E<$D$S‹pPbED$E<$D$NٍUWVSE $D$)w;EL$t$$ѤM-UD$D$$rfUWVSLEfßE̋8G W tMp@G%=t5MAP A4f߉|$D$ t$ $/Ẻ0G%=UED$ D$|$$ItG UEB @t T$<$R+uEMHPG,[^_]ËMI 붉D$<$臟tƇ8농UWVSLEVÏ HNj0@Q Up@(EA~@ "@ EV>UЋvEuF tUp@ЃE1G tUppփ9uEtsUB @EET$UD$$xUEċ D$Eĉ$D$QuUEUG @E8E@ ‹@E0UB@EEEU9E|$ }t$D$E<$D$f)E~M̅t&Uąt}ċE|$$iUUȋ}ȋEU|$D$$i}G @tE|$$}UЉ:EUBL[^_]ÍvE~ E̅E+EEEEEUvB >t&EUD$E$D$i ED$ET$D$ "$膡}G P|$}ED$ "D$<$TNjE@ 2E̅t#}QG tUpE@tEG j@EEG tUp@EE9E"U+E)ƒ}EU[5EUE܉ƋEUUB%t Ut&EUMD$ EĉT$ $D$yEUD$oD$$cEuЅ1}2EMЉ|$D$EL$D$ ED$E$\}mtUt$$^}MPHG\[^_]ËU} M]UU!E+E҉EEw}D$<$^} E@ ‹@EEЋE@ E@ @ E@ D$E$ksfG tp@MD$|$ $^EG t&MED$ "D$|$ $6EMI uЅGUG uhtI%=tMD$ D$|$ $twED$$!Gs%h GEP M%H AU@,xMB(9t$tD$E$[MGz(}E܉B UMH$vO M9UMMEE9ЉEM$L$cyMED$ ED$|$ $uNt&UẺ$D$RkMD$ $ƉD$ \F BEUF tUp@EjUp@FM̋@E7|$$xZ;EEVEUEEE@ }D$<$pEEЅ~ED$$tUFVMAt&E$ixE-U9щUMEЅEEEtMyt&M̍E}D$ "D$L$<$EEHBED$ED$ "t$$貑EXHEEL$$KUD$ D$$rMED$D$D$ xD$L$$MM.D$ D$|$ $ttUD$D$$rjUD$D$$rG&U(}}]uEGP G4EB t p@t>T$<$xD$t$<$3WF @u*E0EG]u}]ÉT$<$Wt$<${vō&'UWVS<}OGP GEU܋1MF @EEEF tp@tPEut& t&t t t t t&Eub*ED$ED$ EԉL$<$D$EUE\$<$T$uMA @G+E؃E؋M܋U؃JG<[^_]À0xjED$ED$ EԉL$<$D$͆nD$E܉<$D$fUB @G+E؃{MD$ <$L$L$rEXUD$ "UԉT$t$<$(`UԍED$ED$ L$T$<$`cEx#T$<$yG+E؃Xt$<$e<$D$9`H D$D$<$|F tO@EL$<$yG+E؃lED$ <$D$D$qEIMD$ "t$<$L$jUWVS<}OGP GEU܋1MF @EEEF tp@ED$ED$ EԉT$<$D$躄EtPUE\$<$T$sMA @G+E؃E؋M܋U؃JG<[^_]ÉD$E܉<$D$AdUB @G+E؃MD$ <$L$L$NpE뗐t&UUԉT$D$ "t$<$Ƌt$<$c<$D$7^H D$D$<$zF ts@EL$<$wG+E؃t&ED$ <$D$D$oET$<$vG+E؃MD$ "t$<$L$Dt&'U(uu]}EFP F<tHEB umB tB@ ؉D$|$4$TQG @u:U:F]u}]ÐEB uT$4$h뵐t&|$4$ufD$ D$ 9D$T$4$.tUG uUEFyD$ D$|$4$#lG @uE8̉|$4$jut&UWVS,}越G7P GU苇t~VUVB u@ toT$D$D$ "D$<$k~7FEG@@E@ VEG,[^_]ÍVU@ ~p U@ t^P 9ָ}3D$E<$D$OUB @u$EUG,[^_]fT$<$8tfD$<$Hf뗉D$<$8ftD$ T$U<$T$jE@ @uUV/D$<$s'U(}}]uI7tWVUVB u@ tHD$D$ !D$T$<$|PHG>t&FE@ tRp U@ t(@ 9t/UG]u}]ÉD$<$e9uэfD$<$d룋딍U(}}]uI7tWVUVB u@ tHD$D$ D$T$<${PHG>t&FE@ tRp U@ t(@ 9t/UG]u}]ÉD$<$d9uэfD$<$c룋딍U(}}]uI7tWVUVB u@ tHD$D$ D$T$<$zPHG>t&FE@ tRp U@ t2@ 9UG]u}]ÍfD$<$cfD$<$b룋딍U(}}]uI7tWVUVB u@ tHD$D$ D$T$<$yPHG>t&FE@ tRp U@ t2@ 9UG]u}]ÍfD$<$bfD$<$a룋딍U(}}]uI7tWVUVB u@ tHD$D$ D$T$<$xPHG>t&FE@ tRp U@ t2@ 9}UG]u}]ÍfD$<$afD$<$`룋딍U(}}]uI7tWVUVB u@ tHD$D$ D$T$<$wPHG>t&FE@ tRp U@ t2@ 9~UG]u}]ÍfD$<$`fD$<$_룋딍UWVS,}OW7B@EFE苇FENA }T$D$ ЃD$L$<$vE7FEG@@u E@  D$ T$U<$T$cE@ @UVEG,[^_]ËGR U苇BVUB tip EB urG1@@tg)L$U<$T$GE@ @uREUG,[^_]B B uT$<$c^ƋEB tB t!H fD$<$lfVT$<$ ^e4D$<$k'UWVS,}&_W7B@EFE苇FENA }T$D$ ЃD$L$<$tE7FEG@@u E@  D$ T$U<$T$aE@ @UVEG,[^_]ËGR U苇BVUB tjp EB usG1@@thD$U<$T$EE@ @uQEUG,[^_]B B uT$<$r\ƋEB tB t H 두D$<$(jfVT$<$0\e4D$<$i'UWVSE6oP0Bǃ@VEU싀NMNA ЃT$D$D$ L$E$rMA1@@~u E@ JD$ T$UT$M $_E@ @EMNE8UB[^_]fMR AEU싀2NMB tFUx @ tRp u^D$E$G[^_]B B uT$E$ZUNj@ uD$M $uZtUJQT$ML$E$5CUB @u(EUMA[^_]ÉVT$M $gNjD$U$gt&UWVS,}}?W7B@EFE苇FENA }T$D$ ЃD$L$<$pP7FEG@@u E@ D$ T$U<$T$]E@ @UVEG,[^_]ËGR U苇BVUB tFUp @ tTP u]<$D$E,[^_]ÐB  B fuT$<$vXUƋ@ ut&D$<$XXtT$E<$D$8AUB @u#EUG,[^_]Ít&V T$<$eϋ)D$<$efUWVS,}{OW7B@EFE苗FENA }T$D$ ЃD$L$<$nC7FEG@@u E@ D$ T$U<$T$[E@ @UVEG,[^_]ËR GU苗BVUB tgp tpU@ P D$E<$D$?UB @u\EUG,[^_]B B uT$<$eVƅuÓ<$D$MC,[^_]ÐV*T$<$d떉D$<$"V`6D$<$c UWVS,}&y_W7B@EFE苏FENA }T$D$ ЃD$L$<$l"7FEG@@u E@ D$ T$U<$T$YE@ @UVEG,[^_]ËR GU苏BVUB t[Up @ td@ t$E<$D$=UB @uPEUG,[^_]B B uT$<$TUƋ@ uD$<$hTfT$<$8bfV*QD$<$bv'UWVS,}VwÏW7B@EFE苇NMNA }T$D$ ЃD$L$<$jx7FEG@@u MA ,T$D$ E<$D$WUB @9MNEG,[^_]ËGR U苇BVUB tlp G@tvM@ @ D$E<$D$;UB @urEMUG,[^_]B B uT$<$RƋG@uU@ tU@ D$E<$D$LUB @tT$<$8`fVD$<$@RE&D$<$C뢋T$<$_v'UWVS,}6uoW7B@EFE苇NMNA }T$D$ ЃD$L$<$hx7FEG@@u MA ,T$D$ E<$D$UUB @9MNEG,[^_]ËGR U苇BVUB tlp G@tvM@ @ D$E<$D$9UB @urEMUG,[^_]B B uT$<$PƋG@uU@ tU@ D$E<$D$JUB @tT$<$^fVD$<$ PE&D$<$A뢋T$<$]v'U(}}]usIEGP G4txU A A tnQ@ tz<@كX7\$t$<$XF @tPt$<$]BU A uL$<$OU QuD$t$<$IIF @uE0UG]u}]ÍvxhD$t$<$7F @tjD$ D$ D$L$<$eUF uxUEG|=؉D$t$<$C7F @u3U2EL$<$l\$t$<$VF @t͉t$<$[D$ D$t$<$dRF @uBE0e@ t$<$D$HF @xD$Et$<$p[밍v'U8E]u}0pt[F~@ uA tLUL$D$D$ !D$$tdUPHEUBc~AtaA uA U@]@ -@EEE8UB]u}]étuEL$$sL{Bu uut&B[%=ƋA%=E:EtZH @ 9G&E;vuT$U$Kq@ ;B taEUB:UD$$1jEL$$j]H x8G@ \]E띋UUB:UzUH}}]uPnÉ7tNFEF@ uB t?D$D$ T$D$<$btPHG`VUBt[B usB =@]U@ @EUG]u}]étuT$<$&J뇋EAut&Aa%=ƋB%=E Et;}P 9P D?t&@ ;B %ߩL$<$kIE[D$<$gT$<$g]H x"9H 끋@ ;B lEG獶UH}}]ulI7tNFEF@ uB t?D$D$ T$D$<$_tPHG^VUBtYB uqB +@]U@ @EUG]u}]étuT$<$G뉋EAuu~Ak%=ƋB%=E Et7}P 9P LG@ ;B 1uL$<$=GEcD$<$eT$<$e]H x$9H 뉋@ ;B frEG獶UH}}]ui7tNFEF@ uB t?D$D$ T$D$<$]tPHG`VUBt[B usB =@]U@ @EUG]u}]étuT$<$E뇋EAut&Aa%=ƋB%=E Et;}P 9P D?t&@ ;B %ߩL$<$DE[D$<$cT$<$rc]H x"9H 끋@ ;B lEG獶UH}}]ug7tNFEF@ uB t?D$D$ T$D$<$d[tPHG^VUBtYB uqB +@]U@ @EUG]u}]étuT$<$xC뉋EAuu~Ak%=ƋB%=E Et7}P 9P LG@ ;B 1uL$<$BEcD$<$UaT$<$Da]H x$9H 뉋@ ;B frEG獶UWVS\}veïW7B@EFEЋVU܋U܋E@ bAut&A U܋@ uG@A @U܋@ @\$EЉ<$D$3JUB @E܋UЉG\[^_]ËGR UЋ!VU܋VB }T$D$ ЃD$L$<$9X7FEG@@u E@ t+D$ T$UЉ<$T$*EE@ @3UЉVEG\[^_]ÐG@EAu"L$<$E@jA 8}EEtJU܋PP6Eۀ}b@ EԐt&A%=„td@ 8UU9U}5ډT$EЉ<$D$y(UB @AE܋UЉE@ 덍t&.1D$<$ ?U܋ L$<$]r\$UЉ<$T$GE@ @EЋU܉G\[^_]ÐT$<$L]D$<$]D]E"9Es{+U9u@ xoEED$<$>L1RP,$\$EЉ<$D$GUB @T$<$KU)9Uh=؉E)T$EЉ<$D$:8UB @q밉D$<$K UWVS<}`W7B@EtxFE܋u~VUB &U@]@ /@كXE'!؍Ó<$D$ *<[^_]Ít&GR U܋tFENA }T$D$ ЃD$L$<$TB7FEG@@u E@ t+D$ T$U܉<$T$AE@ @U܉VEG<[^_]B kB T$<$ZU]@ fD$<$Zu\$E܉<$D$DUB @uEU܉G<[^_]ÉT$<$IۉD$<$IHv'UWVSl}^W7B@EFE̋FE؋AJA t(E؋Bu oBrA u@@ @\$Ẻ<$D$CUB @7E̋u؉G7l[^_]ËGR ŰFVU؋VB }T$D$ ЃD$L$<$Q7FE܋G@@u E@ t+D$ T$Ủ<$T$>E@ @ỦVu܋G7l[^_]ÍL$<$9&A n*%=EҋA%=EӀ}@ EԀ}@ EUuE˅t }+EԉEEE EUE8Ui=؉D$t&L$<$Wu؋@ t&D$<$]WE&@ EE.&T$<$F@ EE}uEƩCuu09.E8EډT$ủ<$t$0!F @u}E؋ỦG:D$<$EE֋UEUnT$<$7u؋؉EU؉E9D$ủ<$t$2F @tt$<$ErT$Ủ<$T$1uF @R͍UH}}]uZٿEЋGP G4UЋ A 5A Q@ @كXٞ݃%\$<$RD$t$<$0F @UЉ2\&UЋ A fL$<$y6UЋ QZD$t$<$0F @uDEЉ0UЋG]u}]Ít&D$t$<$ F @t‰t$<$C봍t&D$ D$ @D$L$<$MUF UԉEԉGn}E% fEmm\$t$<$F>F @(aL$<$Sh݃ٞvA\$<$ =t$<$D$)F @}t$<$Bl@ H}E% fEmmvYD$ D$t$<$G9F @uEԉ0EЋt$<$Bލt&'UXuu]}WEFP F<EB B tz@كXztl$f1\$|$4$t&U(}}]u@TyG7P GUthB B t^@$z*E<$D$\$w9UB @ujG)~@UFVG]u}]ÍvB uT$<$N뙍&t$t$D$ <$6뤍t&T$<$>fD$ D$ 1D$T$<$NGtU7B uG7]D$D$ T$<$I4E@ @uỦD$<$=덴&U(}}]uR G7@@ tiP $D$)GƇl)t$t$D$ <$5ƍFGV]u}]fD$<$ 댉<$ F뀍t&UWVS,}ROEOGQ UAUU@ (@]كXEl T$$كXME<$\$D$7UB @G+EMD$ <$L$L$4EEMUJG,[^_]Xك(]耿lO <$DƬt$$@(Ƈl# ݀=T$<$W;OD$<$L]v'U(}}]uPùG7P GUthB B t^@$0E<$D$\$5UB @ujG)~@UFVG]u}]ÍvB uT$<$=K뙍&t$t$D$ <$ 3뤍t&T$<$H:fD$ D$ /D$T$<$CtU7B uG7]D$D$ T$<$0E@ @uỦD$<$9덴&U(}}]uOIG7P GUthB B t^@$HE<$D$\$G4UB @ujG)~@UFVG]u}]ÍvB uT$<$I뙍&t$t$D$ <$1뤍t&T$<$8fD$ D$ 0D$T$<$BtU7B uG7]D$D$ T$<$/E@ @uỦD$<$]8덴&UWVS<}M߲G7P GU܋ttVUVB u@ teT$D$D$ .D$<$[At=7FEG@@E@ VEG<[^_]ÍVU@ t|@]U@ tY@E\$$9\$E܉<$D$V2UB @uEU܉G<[^_]fT$<$87fD$<$GfD$<$G]xD$ T$U܉<$T$-E@ @u U܉V!D$<$6 UWVSLEUMLIEċBP AUȋEċ0F uV@E9utD$ t$EȉD$U$,MȋA%=@EMȋ0A E uft6uvt&wʅ~ uvEȋMĉUMċB L[^_]ÍvMċ1VMA@,@ ЉD$UȉT$M $gE@ @tD$U$/5vED$ D$EȉD$U$+MA ƋE9։UHMEEEMt&D$iED$ EЉt$)D$U$]3ƉЃv.=v%=v=v=v ҃ŨE]9urE؉+}ũ4$xtGB BtAt1PF]u}]Ë>vufu)@كX ƒ @ „t둍T$D$ D$ *D$4$9uFXh80뢉T$4$@?돐t&UWVS,EUMPEÉE܋BP AUE܋8G w xvGdY]@E0B<OB<D_;+}-t&pW Mp@u tuE|$ $ Wu.@\$ED$U$)O&@ =؉D$ML$E$ UB @E܋UMA,[^_]ËM܋9w |$U$w&@\$ED$U$(MA @MU܉ EU܉MwvD$ D$ 9D$|$ $ 7MUA 2IE0UB,[^_]ËB =R ؉D$ED$U$YMA @U܋M EUB,[^_]É|$M $=D$D$ UT$M $$D$ |$ED$U$(UB @UE܉D$ED$U$MA @JL$E$g,6T$M $S,L$E$?,[D$D$ L$$"E@ @uZME܋8OED$ "D$|$E$7@T$M $+"D$CD$U$+D$ |$ML$E$0"UB%=@E>-D+u)Gt f|$E$OWtJ@\$ML$E$%?ED$ D$ML$E$!`|$U$;몍D$ D$ML$E$!D$ |$UT$M $&UWVS,E?H0A@EVEU싸V>UVB }T$D$ ЃD$|$M $b3`M}A7@@~u E@ D$ T$UT$M $I E@ @!MNE8UB,[^_]Ë}Q GEU싸0~}>UPt|A@ #Jp G {@ Ɖt$ED$U$jMA @UEEUMA,[^_]Gw|$D$ }|$AD$E$%G @-}M9륍@ p G @ Ɖt$ED$U$_MA @EL$}<$#(1G 1A@t&t&1A@upvVFD$M $} D$M $J|$}<$E|$}<$= vE>H"D$U$l'|$U$X' UWVS,E<ϡH0A@EVEU싀V>UVB }T$D$ ЃD$|$M $20`M}A7@@~u E@ D$ T$UT$M $E@ @!MNE8UB,[^_]Ë}Q GEU싀0~}>UPt|A@ #Jp G {@ 1Ɖt$ED$U$:MA @UEEUMA,[^_]Gw|$D$ }|$AD$E$"G @-}M9륍@ p G @ 1Ɖt$ED$U$/MA @EL$}<$$1G 1A@t&t&1A@upvVFD$M $MD$M $J|$}<$E|$}<$ vE>H"D$U$<$|$U$($ UWVS,Ef9ßH0A@EVEU싀V>UVB }T$D$ ЃD$|$M $-%M}A7@@~u E@ D$ T$UT$M $E@ @MNE8UB,[^_]Ë}Q GEU싀0~}>UPtuA0p G  @ !Ɖt$ED$U$MA @UEEUMA,[^_]ÍGu|$D$ }|$AD$E$G @}M9룐p G @ !Ɖt$ED$U$lMA @UL$}<$!A&G V|$}<$D$M $D$M $.T|$}<$OE>H]D$U$G!|$U$3!v'U8}}]up6éG7P GU苇txFEF@ uB tiT$D$D$ #D$<$%*7FEG@@E@ VEGZVUEp@tHT$L$<$$UD$<$T$XE@ @u.EUG]u}]ÉT$L$<$ 붉D$<$ÉT$UD$ <$T$wE@ @uUV=PD$<$v'U(}}]u4)7tNFEF@ uB t?D$D$ 'T$D$<$(tyPHG?VUEp@t3T$L$<$T#x3UG]u}]ÉT$L$<$ y͍ˋ뜍'U(}}]u497tNFEF@ uB t?D$D$ %T$D$<$'tyPHG?VUEp@t3T$L$<$d"~3UG]u}]ÉT$L$<$ ͍ˋ뜍'U(}}]u3I7tNFEF@ uB t?D$D$ &T$D$<$&tyPHG?VUEp@t3T$L$<$t!~3UG]u}]ÉT$L$<$ ͍ˋ뜍'U(}}]u 2Y7tNFEF@ uB t?D$D$ $T$D$<$%tyPHG?VUEp@t3T$L$<$ x3UG]u}]ÉT$L$<$ y͍ˋ뜍'U(}}]u01i7VUVB u@ tDD$D$ )D$T$<$$tPHG]u}]ËUD$<$D$7uUGčvFE뾍U(}}]u`0Ù7VUVB u@ tDD$D$ (D$T$<$ $tPHG]u}]ËUD$<$D$gtUGčvFE뾍UWVSL}/ϔG7P GUԋttFEF@ uB teT$D$D$ "D$<$K#t=7FEG@@E@ VEGL[^_]ÍVUBt\B utB <@]؋U@ @]E$E荏GL[^_]étuT$<$6 놋EAut&A`%=ƋB%=E Et2}P x9P vR 9P fD$Uԉ<$T$E@ @(EԋUGL[^_]éLL$<$F E&D$ T$Uԉ<$T$E@ @UԉV1R 9P =P1PE$IgE1EEž)‰T$Eԉ<$D$UB @EUԉG"D$<$(]T$<$']D$<$ H 9H o1D$<$T$<$fUWVSLE&,_P0B@VEUԋV>UЋVB ЃT$D$D$ 4|$M $M}A7@@~u E@ JD$ T$UԉT$M $ E@ @MԉNE8UBL[^_]Ë}R GEUԋ1NMЋ>G Wt2%=P@ yP1Lt&@كXc}E fEm]m}܋MQBMЋ9EtD$ D$EԉD$U$ MԋA%=HMM1A tUp@Ѓƃtv1ҸM9EȋEԋE9BMGD$L$ T$ʉT$U$MԋBljB}ԋ@UԋB%h B}G@@duЋ}ԃG @wMԍVUЉN}EЉGL[^_]G FG t&|$E$UW"+MQx BSE$'HMQB@8UMB@A@EQ )E=?EeE̅<E؅1M9MD$}<$V|$M $@ED$ D$EԉD$U$ EMP@Q@}A G @|$E$huMԋA%H A:&^@ D$UԉT$M $EԋMMԋ@D$U$9MA)9E9UvMЋt`m;UrBWT$ỦD$ЉT$ D$}<$UЋE؍Ux|$U$k|$}<$!E؉+q T$D$ U $T$ MEQ >E)E1|$U${@D$}<$Q$ UWVSLE%P0B@VEUԋ~}UЋVB lЃD$D$ MЉT$L$}<$~M7A~@@u E@ bD$ T$UԉT$M $hE@ @MԉNuF>L[^_]Ë}R GEUԋ1~}EЋMЋAUB 1E@ ;@]M@ @E\$$\$EԉD$U$ MA @UԉEɉtB%E}GL[^_]éZuL$}<$E:}Qu  QuЋF%= }Ћ@ ƁEۀ}=@ E܋E܃E?}pE1RP,$uك(uE@ Ivt&T$u4$VfL$E$6uЋp t&JL$u4$. ,t&D$u4$EЉD$U$]@ EE 1E+}̋E܉t}̃m̃uǿ HU܋Ettu}Ґ)ډT$MԉL$u4$f}G @=EUԉMuA1KUD$U$ F\$EԉD$U$MA @Eԋ}UԋButuT$M $}E1RP,$T$uԉt$}<$F @+t$<$X L$u4$D c؉E tB1RP,$\$MԉL$u4$}G @|$4$ D$v'U(uu]} YF>P FUx v4$D$]u}]ÉD$ED$ 4$D$B%=t T$4$@ @u/EF맋 A =tԃA `@ @tщD$4$ Í&'U}}]u@y7z wjB%=t*T$<$@ @u9G]u}]Ít& A =tʃA `@ @tljD$<$e 빋<$D$q몍t&'U(uu]}ɃF>P FUx v4$D$]u}]ÉD$ED$ 4$D$tB%=t/T$4$G@ @u>E@tOEF뛍v A =tŃA `@ @t‰D$4$eE@ut&D$D$4$`뛍v'UHuu]}ùFxu.F)ȃAQF]u}]ËQUEMA}؋Oуw vJU؋t?xt8 +P $TM؁a}؋@OU؉%H Buw}؍MG @uNE}܋MyF&L$L$D$ 4$F|$4$E뛉T$4$xE؉4$D$t[D$ 4$CtGU؋@HuP4@ @P$T$ D$D$ 4$M؋@4L$4$EA}؍UP4Mt&L$4$HM9}؉}ED$ |$4$D$gUB @T$4$}M؍4$L$}`E؉4$D$UCU5$9M؉4$L$$0 ‰NjEE؋T$4$EUB M؋@ D$4$E}U؍pP A,B(M؋@ HH0}KfUWVSEM<0@@A@A<P Ay 9EUv t&D$E$0E9rUMET$L$$PUB @uBUB)t$t$D$ $ƋMFNUB[^_]ËMT$ $U(}}]u Y~EGP G4U<$D$ut$<$D$F @t t$<$sE0G]u}]ÍUWVSEUM}EB@UI ʉUUB@BMP A@tB% =B t_@EMɉEtnED$ 4$D$ED$‰T$4$D$F>]u}]ÍED$ "D$T$4$9MɉEuD$ 4$ zD$D$ 4$[t&p1ҋ@gpD$@4$D$TCԒD$4$&U(}}]usGP GU1Mt F u0F u}G7}?}NUT$ $D$E}4G7cD$ $}GT$M $EMt$t$$L$ L$E$+M $.<D$}<$$!'U(uu]}IcFP FUF)ȃ~hEyAFx@t>]u}]@uU@tto4$tbtmF>빐L$L$D$ 4$y4$tqF@tmtHD$4$p>4$UE4$D$F>8@ F4$D$FF&4$늍UWVSlEaP0Bǃ@VEUNM̋NA iЃT$D$D$ L$E$TMA1@@~u E@ D$ T$UT$M $>E@ @MNE8UBl[^_]fMR AEU2NM̋BB<%=ɉ@ EEEčvM̋Put&}FP7؁ɉ Ű@ UUą/1҉uĉ8t tM)щʉx/ډT$UT$M $qUB @UMEJUBl[^_]éT$E$vv@Eك^EEEt&B NŨU@ @Et}uqكsكL}E% fEmm}]Er}E% fEmm]EڞztvT$$]8Etڞ؉t\$UT$M $}UB @F$;F(~4$V$N F |F DV$]u}]ÍUuu]}} -f>F$;F(~4$!V$N F |F DV$]u}]Í'Uuu]}} =F$;F(~4$V$N F |F D&V$]u}]ÍUuu]}} MÆ=F$;F(~4$AV$N F |F DV$]u}]Í'Uuu]}} =F$;F(~4$V$N F |F DV$]u}]Í'U]E vï<uu}D$4$NjF$;F(~4$SV$F M F |F DV$]u}]Í&'UWVSU/<B$;B(EU p$@ UFEB$B U E@ xUEG7ׁt@كX 멉D$<$떅t80눍U}}]u9,7t!Pu0t@@ „t(G7]u}]ÍtPvBG7@Ձt@كX ƒ륉D$<$;뒅t80fU(}}]u@y+P0U@Et+P@ E1t"Fu@@ 9EtJUG]u}]Ít&tJwŅt&19Eu봐tPEgESvtb@كX Qt#@كX ED$<$趾Et$<$蟾8080EUWVSw"E$臠1[]!Ít&'UVSu0"NAt5t@Q Ft3Pt1t"PvnA[^]É4$uuEMBGJ,[^_]fhD$<$Bp1ҋ@tpD$@<$D$薯‰h3t&LJU؅GU؉fz8}ET$<$$ttMfy5v@<G@G@M䋇LJ W O,[^_]D$ "D$D$<$}5t&@ @ tf8uD$<$D$蜁,[^_]Ët)D$@ <$D$!D$ "D$D$<$o뀋tt=t&AQABpBGu4t$D$<$诬t$t$D$ <$觘<$踲W@t&'UWVS|}eE1T0EG@Et#EtEt <$2EXUF @Eԋt3EMQGЋUe3|[^_]Àt<$t$<$SG4D$<$脀G0G4t [xuڃxD$PD$4$xD$<$衠FD$<$wD$<$LJt$<$4E$ID$ ED$d<$D$|G$;G(PW$O G DGW$@ D$<$2zp@0=px0 -px0p@0<$D$謉D$<$ D$<$ypp4sp@4<$D$bD$<$EЉD$<$衚EG<$D$]}F;F +FPPE+G BpBG@+G<BGBGLB <BMJtB G@B(B$B,hB4B0;3h;8!hEtD$<$R@ @E0@9ƉEED$<$褛D$<$ED$mD$ 4$tVE)D$ Et$<$D$ڒMUE<$L$T$ D$]MtRU9UvJEo)uUMt$<$T$ L$膒EUM<$D$ T$L$ t&ME1ɋUD$E$B‹t,t(M;XtG;tE_<(e@val f@)ED$ "D$t$<$=t&p@0p@,<$跔ƋpH,pP xxD$ ;D$t$L$T$<$0ft&XD$D$<$p@4<$訩FW$O @ @W$p F<$D$uFq<$W˧t&'UWVSEM賮E苑B<}Jω}BE}H‹@w pBG4$Z@ 4$D$WF4D$4$\F0F4F)lU@ V@;VDV@+F UGE4$T$|4$D$aGEt UGEWED$U4$T$p>~'Pt@ EvF0;F4>4$oEU܋@,EtE4$D$VU܋@HEtE4$D$UU܋@@}uy D$4$KXE,[^_]ËED$ UAD$4$T$pE%|$|$D$ 4$tmP}OE[^_]EaT$U$QUWVS,EU苀]ÖpU;tG tUD$$ămPU싂}xwٸWtED$$'tKEPBf=_tSЋD$D$`D$ iD$E$xh?c,[^_]ÉT$U$P먍t&'UWVS.U@t@ thEp1ҋ@tpD$@4$D$uw‹ET$4$D$kGFW]u}]D$ "D$D$4$E{&UW1VSUMBP A4|$ $t$nQUEpMA<[^_]ËUB+E'(MMD$|$E$rD$U$7PMAD$UЋB@ D$M $rD$E$PUփBMЋA@,D$E$jD$U$OMAUB@MD$D$E${D$U$vOMσA D$E$xjD$U$IOMAUB<&EwGUЀ:E~FFMЀ9y8E8pT$ $D$ZEЋ@0E܋ M̋B )M̋M4EMJ49HBũƁ?#MR 4T$D$ $[U4E܋EBAMЍWUA@D$E$&iD$U$MGMЋA@0\T [D$E$SuD$U$MMAE0UB<[^_]ËUԍNEM‹ k@ H[SEԉE;H >?E$zKUB@tiUB+EUMEQUB<[^_]É2<[^_]ÉD$E$W M $y늋EUEEBQUEMAD$ M$L$L$^E~D$ M$L$L$]EEMA<[^_]ÃD$Mw $gD$E$KGUB x4 {D$ D$M $0wD$E$KU׃B MA8D$#ExD$D$M $IA0@D$D$ D$T$E$\taD$U$QPJz$7tdMЋA(D$E~$#PD$U$JFEFxD$ D$M $$vB0~FEF}͜D$ D$U$uD$ M$L$L$\EGD$M $c|$D$D$ ƉD$E$Ut$U$IMσA UB8D$M $dD$E$IUB|L$t$U$VM܋& $D$ D$D$@IƉD$E$/_U@ @4H04`(M܋$hUuu]U wtu9<tVD$ T$D$4$;^]u]ÍD$ T$@ 4$D$]T$D$4$?몐UWVSLEMw<E̋QBalE̋M8BP AU؉T$ $[UB@@Ht z UD$ D$D$U$GB G x B @ @ 9tUD$MA@@P A $D$;D$D$ D$E؉D$U$FE؋M̉UM̋B L[^_]ft݋GP YE$ItŰz2UG F GUtAu:K@كvvD$U$>L[^_]ËVuCсM|EąE܅t$U$QKGfmFG @ EF @ 9E+EЋUƃEȉB0;B8MA+E9Q~ũu VEEЋMЃEЃMD$U$`D$M $nEFu‹M̋UȍLMMQfP80jf@݃]t$E$8 t&|$M $8@ pG H @ @;H,@كX |$U$'nكD$E$bOi|$M $NO=t$E$6O|$M $"OEs|$U$ l|$E$NEH|$E$HOt$E$mU@ ]BEUԉ|$M $EUƋ@%=ttD$ D$t$E$%SSEẺ0UԋT$$mt$M $ HD$E$BD$UƉ$pVFh@;EZUB+ẼD$ M̉$L$L$LTEat$U$El\t$ ẺD$D$U$TEt$$FhG 80FED$ "D$T$U$VoEv'U(E]Uu};ptEJAKXE}Q 0GUA@Ht z D$ED$ D$$@B F p B @ @ 9UD$MB@P A $D$ 5}GxE}D$$|$4EUB@@Zt]F@ ZM $muV}OEUA@]u}]Ë}.MD$D$ <$L$_PEUG뾋}OMtPt80@ L@AF H @ @;H,tL@كX \MD$ $J@Ut$$tJ}t$<$lgEt$$EJ}H_ED$<$D$3MU GUWVS,EU3mlEB1@Et1Et EtM $EPE‹u}F@+~ +8@t&u4$ LV@B;~kBF@4$KF@PV@HHV@B+JF@B}4W@Ew :}}G7,[^_]fE$dE<D$U$LMA@PA b@ uA1@,[^_]ËF@P+H9~kE+F )EB)E;u}uUB+EU9< MMA@0A@0MtыU19uuuV@F  t}tjM19u)EdGP GEUE9}U@ u݃mD$M $N΍4D|$U$U눉t$t$D$  $MvT$T$t$ E$Mv'UWVSu&j_V@>F 94$KR4$CR4$bF4D$4$6F0F4@ 4$D$04$gb<D$4$EJF@F b@ F>fxtt@[^_]ÍBF@FPtDtt:4$LuLF)~GD$4$U4$D$:F>[^_]É4$MQF|F݉|$|$D$ 4$(LUWVS E h}W09Qqs&D=?D$ $UTU p1G>uKG01Ɂg<GFG Ft&D GD9O0sރ [^_]ËW밋G0D=?w $ [녋$X&U}} ]ug7t$G`4$?`]u}]Ð&UWVSg EQ;U v<ywFܜ8XO tW4҉P<'UL$$-Efi뎋G UtG,G(tމD$$v8EiTBAG0D$E$d7G(UD$$%DG(D$E$#-UiG@UD$$,O4t-%=p D$E$7G<GDU;tD$$,EiUiu [^_]ËU@ @$D$`,UP G,BG0B(uA+B BG0B G0@FG82$5rD$E$+U$UG0D$Et$$CG0@(G<G0 UWVS\EUeIBfxP@thJu<8uN|UD$$I.=z@@>1EǀPDžz ƅƅDžJƒ.ƅt&Apt4MEL$$蠶cEPPuXuD$4$-\[^_]ÅM\A Pt$uD$4$*BMA0;A4uPɒM;BfB<zG EH GUBƅ?aEP@D;A$8Eu4D$4$+F0F44$D$e?P,wt1~'1MD$ $p09uuV@;VDV@E@ ) uT$4$P,AQABpBF?p@G @}5UEMƁ8U9Um}G x<M؋1F \EEFUrMA0;A4)UBD$M $#UE$+@T$ $$MƁ8E,tMU $+}t.Uh8O tW4҉P<EM<}uDE$/<[^_]ËG(D$M $\)G(D$E$ZEE.D$ D$M@ $D$-댃EEM @EEFTD$E$4@ @$D$MP G,BG0B(+B BG0B G0@u܃9us9|@ uT$U$J.MEƀ89uHE}u‹ȋUE<L$$ mr $D$E$:G0D$t$U$(G0@(G<G0EU؃E@ qUBtM؋uD$E$}-UBM1 $J)UE<U9UDU؋P(PNUƂ8EhFUB0;B4MMt$E$,UBt$M $@كXzuw(HMԋ8E@ @D$Mԉ|$D$L$ E$t$D$U$vD$M $",{$$ $v:H OfT$U$$@ @R$80D$U$At&'UWVS,UG/tE t@ 0F MzA9BE9BĝD$D$D$ t$U$QD$ED$ M t$L$}<$,D$ <$|CEOx$Gt&8PuGD$M $uHu+V PV @F@ЉM9#G4GUw} }FEFpFB F UtN$MF,F(t D$$`EMt5M $$%Fup}5t"U$),[^_]ËE뼋@ @ "8uD$D$E$,[^_]ÉT$U$7MED$ E D$U@ $D$&)ω}  :J|$ $z@/&.D$$D$ t$&BE9BD$t$E$5B+ED$ <$D$I%0D$ "D$D$}<$%Cu ED$} |$E$ U$'} ut x }<$<dT$D$ D$E$5Uutx tcM $;t$ u D$t$}<$4D$<$M@ B @EE @ @t@$u놋@ @2P$2 @ B ty@EE tx tx}<$:D$$i D$E$ED$ "D$T$u4$hA3ED$ "D$T$M $EAp@ @xP$xfv'UWVS E BO8E@>umt[EH<G1UB0GBG B E D EPD U9r0sՃ [^_]ËUb<룋@$ :농t&UWVSEUBmAæ%=ED$ D$UT$E$"ƋEE0;uwG <@t<^vt9Ur< u 9Us?$3;uEO1M1E1EEEEv<@X,< t&.u< (19usUq+u:GEƒ)UUUDE9G7?GUET$U$T$E$\8D$D$D$ fD$UT$E$>UJ}}xD$E$7 Ĝ[^_]ËEE<^t"<~>~F E~^E}t )tAy<*V<#U<.[<0<>tu<|v<<E1E+EW}ɉGGtJG H}t @H1҉} >>tEE>.uVE:.u~.xElt&>|tE뾃>#t+EE  EFEEƉ¸ BEz#uDU:#tЉ+EE -$,pD$U$U2‰ UWVSEUM:&EB@A@Q +q BEuREUD$ T$UEJEt'up@BEftxFt/E‰HEUJtĬ[^_]ËUEuMXF%= ED$ D$t$u4$`EXEF xEE9BE:u@ ‹@EEEEEE}EBEEE)EEEEEEEfuuwt&mE9EsU: tMEA M붋u}u[ MmM땋MM} u t&< t< t< t < ft< u9Ru9@M+Mt!)M~E1҃ 9uEMUttuTuX9tw=tttQ t t t t u 9rɉtt.F.F.EEE@ v‹@EEEEE@ tUp@ E}2Euu9uEU t&9{< u}u 9E֋E0uEMAuE1 ;UuuEƉu}EUX)Mup}t XH UMԋXHPEB UHPuFĬ[^_]ËuF  @EEEMEA tup@ U;U}UM1M9MMs"Ut&9Eu+EEEuF  @EEEMEA tup@ E9EU}uU9}sN< tw< ts< to< tk< t&tbtET$MT$tKFEf9ru< t'< t"< t< t< t&tE+EEE}tu< tF븋M+M)ME1҃ 9uu MaU+UU)EAU1Ƀ 9uUE!EEEEM}M} }m}x/uuuF m}yы‹\}u< t< t< t&t< t < uu׉T$ED$U$TMA @#L$u4$EE@ ED$ "D$ML$u4$1ErU2EE@ @كXUE)‰Љ)ك(1ك9u؅<كL1ك9uڞ'ٞ)؋M1U_#;EuuME41uM MEEU0u9UEEM uMU:}UMA tup@iSM1U9uuGUtDuEUp@EˋEE9Bot$D$M $1"uNjE@ \ED$ "D$ML$E$/ME?< 9|$t$E$ utU UuuEEU UuuEEU UٞUEp9Mp@E$ݝxq %݅x\$D$ U|$T$M $Fu4$EEEHGEUX)MUP}tMXH }D$ UT$MX $D$tUXhMXBE9BPUʀ}Ut EEEUv5U+EE+EBD$ UT$MX $D$5EEBN}MUuuA uMMMA uXE+BEE̅o|$ ML$ủt$E$Úb߉T$D$M $;D$ ủt$UX$D$WMXpu։uF>EUXE+BM}ԋXxP"}tN EXxPUEB B@t&@E U%\$D$ E|$D$U$r2ML$E$'E9EEE1 t+EvtE;E u+MMEt$D$ $dEXQED$ "D$ED$U$*EED$ "D$ED$U$*ECEED$U$(uD$D$M $~ ubM$L$EE UXE+BM}̅ut$ ED$ỦT$M $ úf߉t$D$E$t$D$ UX$D$MXB9EEu UXEB;EwU5ك($uXE+BED$X4$D$UXBE9BPUEʉU كLL$4$zU9ЉE9EU܋M1M9MMs U E9t u< u+EEED$ut$E$TEwL$4$;EE9EcE9EEsˋE1 E  tE;Eu듉t$D$M $TEXXE+BED$X4$D$vUXBE9BPUEʉU21Iut$ED$U$%D$M $ES|$U4$T$g%4$D$E+MMEEEE܍ED$ D$U4$T$L%'UE܉UUD$ D$ML$u4$%}u}9}sT< < < ~< tz< tvАtET$UT$tcFE9ru< t<< t8< t4< ft.< tE+EEED$ML$u4$v}tu< t&tčF랉t$D$M $HEXAE+ED$U)‰T$M $D$U$UWVSlEM&EBt#H9MtO+E̍4G,)ЍG,M̋UЋM̋9ΉM܉O(sLE@ tUp@u G @ D$E܉t$)D$ EĉD$U$xMЋw AẺG$~=D$gt$U$U)U܋M܉MF tUp@EGM9MtEЃ@$UЉT$ML$E$UM UB$l[^_]ËMЁI<ƂD$E$xl[^_]ËW U؋W,9sIMA tMp@u E@ )D$T$ t$MĉL$E$JM؋Bt*A A+B $E؁`&MċE؋@BM؋Mċ@BA tUp@u M؁I UċT$M $EGGEuD$U$@D$M $UBM؋A%h AUB @EtMG9A$.EЉD$U$xEQAQ0D$U$M1Ul[^_]ËMBfD$ $xE t&8fU؉$T$REƀ8UB @+T$M $ t&Eƀ8D$M $fucUED$t$$ D$t$E$YD$ $$yM؋OU=) $T$t$D$U$@`߉D$D$M $0D$ t$EĉD$U$R#D$D$D$ gD$t$M $ND$gt$E$g)$t$D$D$M $`߉D$D$E$}D$ t$UĉT$M $BUWVSLUJqu8E}Ԁ~0y-V,u x t}>L[^_]ÍE@ MA I@EE؋EU@,Eȋ Mȋ@ EtNƋ@t M9N,EĉD$U$xD$MuA, 4$D$}GxUB4B0MA tup@0}G8G8+MuQ, U܉L$ EED$}؉4$|$hD$E܉4$D$UB Xp@H}LJ|E@,EȋUtt8yuf8f}Uȋ @ P,<U}0ygEUMAL[^_]Ëf@(D$rD$M $  }Mp W, @ $D$xW,} tF$t$D$E$UR,UED$ "D$uԉt$}<$Et&MA8u؉4$<vP:PBu$B:QBuB:RBu B:SBt^uf0fMI8t&J8&ED$E؉D$U$ELJ|kMI0 d}9ɉUWVSEUMEB@A@4q u+A EAP AUtu1GFW]u}]ÍUuu]|}>PGFW]u}]ÍUWVSEU{EBxfTfUM D$ D$$D$ U8 $ EMA+E@UB@Uut$M $=UBMD$T$E$t$U$MAMQD$T$E$t$U$MA MQD$T$E$Et$U$MljEp tQtKD$|$U$tލD$D$D$ |$M $uEUMA[^_]ËMM@ p M D$D$ T$4$D$U8 0"P,}t$$EEu$!UBEt#fTUL$D$M $`GFW]u}]ÍUuu] w}>@GFW]u}]ÍUWVS,Eÿv8@@f=PfEBf=Qf=O`EMA)'UB@jEMMML$E$sGMD$T$E$(MWUL$E$@GƁ`?MljU싑 D$D$ T$D$U$*M8  Mt@tD$t$E$zF Et UT$M $~UBMQD$T$E$UT$M $MUBMQ D$T$E$UT$M $UB ML$E$UBML$E$UBMƋAt$D$E$Ut'ML$E$UBMQD$T$E$ZU}T$M $rƋEpUBt$D$M $!Et]UB:,[^_]ËEw$GEt$f}OUUL$D$M $E0UB,[^_]ËM $! %f|$|$D$ $|@ p E pD$lD$ hLT$4$D$'U8 tl"ok}t$$E\vM pD$ lD$hL$D$/ U8   pE"lMF  UBt$D$M $cEtt$$gB% =0E pD$lD$ hLT$4$D$U8 ."1b}t$$Et&t$$"t}$EUBL$D$M $+ft$$xD$M $D$T$M $UD$*$f US pE$ []Í'USn çpE$ []Í'U(]9 rp}}u7 G)t$t$D$ <$NƍFGV]u}]Ð&U(] p}}u7G)t$t$D$ <$ƍFGV]u}]Ð&U(]Y Òo}}u7G)t$t$D$ <$nƍFGV]u}]Ð&U(] "o}}u7G)t$t$D$ <$ƍFGV]u}]Ð&U}}]up én7@ t)@ $G7]u}]ÉD$<$fU}}]u In7@ t)@ $G7]u}]ÉD$<$fU}}]um7@ t)@ $G7]u}]ÉD$<$(fU}}]uPÉm7@ t)@ $ G7]u}]ÉD$<$fUWVS,EU,mEB@f=DfEQf}EM D$ D$t$D$U8  EMA+EUB@+E3MML$E$UBMD$T$E$HUMUL$E$]UBMNjqvtKD$|$E$XtލD$D$D$ |$U$iuEuD$U$MAMAfT$D$E$MVUL$E$FMQ D$T$E$NUMB ,[^_]ËMσB% =5D$T$E$Ƌ}@  @ t >!ƋEf D$D$tT$t$<$D$ U8 "}t$|$$yEEu$UBEt$f}DUL$D$M $E0UB,[^_]ËM $}^D$ E $D$D$E"MσB% =D$T$E$[Ƌ}B% =8t >!ƋM D$D$tT$t$<$D$ pU8 Q"u'}t$|$$E="E(0}@ D$U$0UBfD$L$M $rD$T$U$8MuL$E $MA MA}$GEpt&'UShE$[]Í'USgE$[]Í'UWVS,Efßg0@@f=AfEf}BM HD$ DD$@4$D$EU8  HEMA) UB@MMML$E$ FMD$T$E$MVUL$E$FUNjrtX&tKD$|$M $tލD$D$ D$|$E$uUuT$M $[UBMQD$T$E$|UB2,[^_]Ë@ x E HD$DD$ @4T$<$D$U8 X"F}|$$EDt&E~$Fut$f}AUL$D$M $6E8UB,[^_]ËM $t$t$D$  $B% =D$T$M $}NjE HD$DD$ @4T$<$D$U8 -"u}}|$$jE"tKEf 8{UBL$D$M $D$M $y}$E&UScE$W[]Í'US^×cE$'[]Í'UWVSfEff}?U 0T$,T$ (T$$$T$M8 - ,EE#MA)GUB@alEMML$E$FMD$T$E$nMVUL$E$FUNjrtTvtKD$|$M $tލD$D$ D$|$E$uUT$M $UBMQD$T$E$2UuT$M $UBMQ D$T$E$UB2<[^_]Ë@ r@ E@ Ex M 0T$,T$(T$$D$T$ E<$D$%U8 "u*M䍃>}|$$L$E"EU%MA)t$t$D$  $qUƋB@M $E~$FEt$f}>UL$D$M $E8UB<[^_]ËB% =D$T$M $NjU 0T$,T$(T$ $D$<$T$]M8 q"K}|$$aE] ,EI8mUB L$D$M $胿 D$U$D$E$YEX}$E&USnç^E$w[]Í'US>w^E$G[]Í'UWVSLEU<^E؋BxB+E؃';f;Yf<BU T$T$ T$$T$;M8  E܍&E܅MA@U܅;EEԉD$U$M؉A}܋D$T$E$EU؋MԃUL$}<$ZNjE؉xU܋rtUt&tKD$|$M $XtލD$D$ D$|$E$iuUԉT$M $}GM܋QD$T$}<$EUԃE؉T$<$MAU܋z D$|$M $˼E܋puB EԃED$U$fM؉|$ D$T$E$UB+E؃D$ M؉$L$L$E닋M؋΃@ @ EЋu؋B% =DED$T$U$JƋM T$T$T$D$ T$EЉD$E4$D$hU8 "MЉL$ Et$D$|$EBfD$ M؉$L$L$f;EE؋E؋B% =bD$T$U$VƋM T$T$T$ D$4$T$"U8 "u# }t$$:En"1EmUP%MA@EE$P:Uu؉$dE؉HE܅t4f;~U܋Bt}܋G T$L$D$ E$}G7L[^_]Ë@E00UM؋B L[^_]Ë EeU܋L$D$M $둉D$E$`E-}$E&'USnçXE$[]Í'US>wXE$[]Í'U(uu]}9XF@UV UF@FP F먍G7맍&D$<$fUSnçVE$G[]Í'US>wVE$[]Í'U(uu]}9VF@NF@F<Q ~ U|$D$ A4$D$Yt@UD$4$T$aE@ @u9UGWF]u}]Í&GWF׉D$4$빍'US>wUE$g[]Í'USGUE$7[]Í'U(uu]} UF@UV UF@FP FP F$U4$D$ED$7UB @uAF)|$|$D$ 4$NjUGWF]u}]ÉT$4$뱍t&'UWVS,}?RG7P GE$UG@@ @ $E$E+E<$D$ED$TUB @uB~@ @ EEEfz&W D$U܉$[ EF@F)eF0;F8E/UBlD$ D$BD$BD$B D$BD$ B4$D$3D$44$D$hF><[^_]ÍvEtF)#0F0 ;F8 U4$D$?4$D$GUB4$D$4$D$GUB4$D$4$D$ѺG UB 4$D$4$D$谺GUB4$D$4$D$菺GUB4$D$4$D$nGUB4$D$y4$D$MGUB4$D$X4$D$,G U$B 4$D$44$D$4$I D$U܉$ Et&D$4$VCGWF<[^_]Ð|$|$D$ 4$<NjF0;F8&D$4$Ej뗍vEt&D$ 4$贽|$|$D$ 4$EE܉$VUSNÇLE$[]Í'UWVSuOL>F) ($?GEۆ(ۆ$ 4$\$4$D$CGVBtt E[^_]É4$hۆ,ۆ$ 4$\$4$D$UBۆ0ۆ$ 4$\$Y4$D$轷UB Uۆ4ۆ$ 4$\$'4$D$苷UEV[^_]É|$|$D$ 4$,V'UWVS}JGP GqU@ @ E@ @ E@ @ Etu]ED$ED$E$<$D$ED$E@ @t D$<$EG7[^_]ÍvOD$D$<$誺뇍t&D$<$EfD$<$tE>D$<$`Et&U(uu]}ùIFP F<M@ tw@ EU@ tT@ U$T$贿|$4$D$G @t |$4$E8F]u}]Ðt&D$4$fD$4$E UW1VSuHENFQ UAE~1UU@ x U@ @ EtuVE|$$ۻU4$T$D$E@ @t D$4$EUF[^_]Ív[D$D$4$誸뎍t&D$4$舿EmD$4$tC'U(}}]uGOG7Q 1UAt@ t@ $6<$D$ED$UB @uFG)t$t$D$ <$hƋUFVG]u}]Ðt&T$<$fD$<$蘾u U(uu]}FF>P FUT t tqT 4$D$ED$*UB @uAF)|$|$D$ 4$NjUGWF]u}]ÉT$4$džT fU(}}]u)FG@UW UOG@GQ 4UD$ T$A<$D$7t$<$D$WF @t t$<$%EUrG]u}]ÐU(}}]uPÉEG@UW UOG@GQ 4UD$ T$A<$D$藴t$<$D$跥F @t t$<$EUrG]u}]ÐU(}}]uDG@UW UOG@GQ 4UD$ T$A<$D$t$<$D$F @t t$<$EUrG]u}]ÐU(}}]uIDG@UW UOG@GQ 4UD$ T$A<$D$Wt$<$D$wF @t t$<$EEUrG]u}]ÐUWVSuvïCF@NF@F<Q ~ U|$D$ A4$D$迲M4$L$D$ܣE@ @u?F)D$ |$|$4$?‹MBJF[^_]ÐD$4$hfUWVS,}BEG@G@4w +W UGP GU耿tEED$<$cG@@E)v|Et$D$<$D$ uw D$E<$D$¢UB @uuG)t$t$D$ <$'ƋUFVG,[^_]ËU<$D$,@ D$<$oT$<$zUFD$T$ F<$D$3<$f 8u59ur-@ uD$ "D$D$<$8tˋUUw tD$D$<$蟱gD$ D$D$<$ t&UWVSEUM@B@A@<y +A AP AtD$M $7E؉$f菞8 $tڅL}L$ D$D$E$T$ D$D$M $D$ |$t$E$uzם8tҋD$D$U$D$L$E$UǂE$UR tVM11ҿt&)ЉD$ЉD$E؉$e~ ƃvԋE؉$zMD$ $D$&B @PMA)ЃBJUBĜ[^_]ËUr D$$L$謞@ @MA)s~F?UB:Ĝ[^_]É $e M8u>9r3@ uD$ "D$D$U$EM8t‹Ex tcD$D$U$uD$E$譡Ĝ[^_]ËE܉$ D$T$M $襮D$D$U$舮EM%xE؉$訿E܉$蝿t$t$D$  $萺nD$U$IT$T$D$  $]T$M $}UUǂQMA@@)v>T$E܉D$|$D$L$ E$跹$蛩u܋D$M $ѹ@ t$D$T$ M $膝뭋GT$U܉T$D$L$ GD$E$0tE؉$ D$D$E܉$D$ D$D$E$Y&UWVS<}ÿ:GP GU܋M@ U@ E؋@ p EE0 &E؋Uԉt$<$D$ T$*u萘8uv t͉<$虧ɅEt %E܉T$<$D$qUB @t T$<$…7LJAUWVS,u/9}E܋FP FU0 t&D$ |$D$4$u".8 tlj4$3뽉…Et %T$U4$T$ MA @uXF+E܃ED$ 4$D$D$lE܋E܋MU܃JF,[^_]údž댉L$4$~D$ |$D$4$…?džIvU(uu]}7F>P FUF)~_D$4$lwEtfEU4$D$T$E@ @u9UGWF]u}]É|$|$D$ 4$E녉D$4$腼빍1D$ D$D$4$Et>@ `藗UD$@ 4$D$MU@ HwT 4$D$迕F>&U}}]u Y6Et y L$<$賴@ ptC@(t:$ָx$@(MUAG.@(/t&EMQG]u}] ҍ&@ XpeHvUuu]}0i5xtz trT$4$ʳ@ @t1@(t($}GWF]u}]Xu GWF͍v@ t@uyt&'U}}]upé4pB @ Et z T$<$@ @t?@(t6U$T$[FVG]u}]Í&ou FVGƉT$<$rE\@ \@iLvU(uu]}pé3FP F<Mt z T$4$@ @tG@(t>$|$4$D$ʓG @upEUzF]u}]o8u EMQFǍt&@ d@qTv|$4$(fUWVS}vï2G7@Et z wT$<$@ @EUH(u#U<$T$z}  D$D$U@($Դu} tmD$D$<$UE@Wu tu.G)ht$t$D$ <$謯IE<$D$赏}tY'迏t0WBtxFVG[^_] WBu@G7[^_]É<$Ev@ |@Ei<$muW7[^_]Ðt&UWVSUvï0pB Eut z ET$$@ xtP7F(t $7U$vF(t+EUMQUB[^_]Ít&_0tYEUȍt&MD$ "D$T$ $E8@ AxQ1 EUffUWVS,}F/E؋GP GE؉U܋B U؋@E0Ev |/VtfEt4$讷<$D$E܉D$膏UB @U܋E؉}t4$#E؉G,[^_]ËEEv</tt$D$<$EttjD$D$<$ OT$<$ȳjED$ "D$T$<$'UWVS,E.H8@Q UAE~@ F@ E܋B @E0Ev |/VtrEEtE܉4$D$裎U؉T$D$E$UB @U؉}t4$uF>,[^_]fEEv</tt$uD$4$mEƋEtevUpD$D$$w@ET$$3cT$UED$ "D$$`t&D$E$E'UWVS,ueE1(a,FP FyƆ8@ D$T$$QF)x`4$D$ T$D$mB @GWFUe3uq,[^_]ÍGWFԉ|$|$D$ 4$vbD$ "D$D$4$ T$4$蒰pt&UWVSu+FP F<M@ EU@ tyE쀾tuMUE$D$9|$4$D$$G @t |$4$E8F[^_]ÍvD$D$4$D$ "D$D$4$EjD$ "D$D$4$E4UWVSu)FP F<M@ EU@ tyE쀾tuMUE$D$y|$4$D$G @t |$4$E8F[^_]ÍwD$D$4$D$ "D$D$4$EjD$ "D$D$4$E4UWVSu(FP F<M@ EU@ tyE쀾tuMUE$D$y|$4$D$G @t |$4$ҭE8F[^_]Í~D$D$4$ԘD$ "D$D$4$EjD$ "D$D$4$E4U(uu]}'EFP F@t@ up4$z>xFD$ D$D$@4$tlGWF]u}]ÍGWFލ&D$$`t,|;F>뫍t&GWF뒍F>끍F>mU(uu]}@yF>@t@ up4$y>xFD$ D$D$4$ԍtlGWF]u}]ÍGWFލ&D$$Pt,|;F>뫍t&GWF뒍F>끍F>mU(uu]}0iF>@t@ up4$x>xFD$ D$D$4$ČtlGWF]u}]ÍGWFލ&D$$@t,|;F>뫍t&GWF뒍F>끍F>mU(uu]} YF>@t@ up4$w>xFD$ D$D$@4$贋tlGWF]u}]ÍGWFލ&D$$pt,|;F>뫍t&GWF뒍F>끍F>mU(uu]}IF>@t@ up4$v>xFD$ D$D$4$褊tlGWF]u}]ÍGWFލ&D$$`t,|;F>뫍t&GWF뒍F>끍F>mU(uu]}9F>@t@ up4$u>xFD$ D$D$4$蔉tlGWF]u}]ÍGWFލ&D$$Pt,|;F>뫍t&GWF뒍F>끍F>mUWVS,E/@@fEދ2Ut ~ &t$E${@ x@ D$U$D$M ${Ƌ@%H FE@@@ D$E$f}f}EB@UErMA,[^_]D$E$-uvdm UMEQUB,[^_]Ív@ xvED$ $T$MpDEމ|$t$D$ U$xjED$ $T$|Qt&'USGE$g[]Í'UWVSut  |$E$@ ptI@ t@D$U$f}f}EMA<[^_]fD$U$A<tk UMEQUB<[^_]ÍvD$M $eED$U$NEf@ pvM܋zM܋A%H AB@@EED$D$ EԉD$U؉4$T$pM܋EB@EE$D$$D$M $5xEE҉t$|$D$ M $šU܋Bt@EEEtTU܋@ EUEET$ D$UԉT$M؉4$L$蔙>EEUM܉L$E$贂렍ED$ "D$M܉L$E$aL$D$E$M܋Wt&US螥 E$[]Í'UWVSEucÜ @P FqU@ @ E>ut  |$U$͈@ ptp@ tgD$M $ɍut$$znD$ED$U$jMA @MUEJuF[^_]D$E$Πu~h EMUAuF[^_]Ðt&D$E$E@ pL$u4$衎JUB@t$|$$D$ _t&UWVS<}eE1踣GH G DžJ2ɉt-t ~ D$<$諟uEf QGUe3o<[^_]ËGHt ~ 1D$ T$t$<$닋@ j@YB Ly u@ t @u(<$D$I@ @B <$D$8T$T$$|1N t"D$<$D$g2UD$ $iF 0XD$$biF$@Vs1F V$;D$$D$试<$D$ L$D$)B @u)@ PT$<$訋ɉD$<$0F$tD$<$2F F$u $b襙t&U8U]u}莠p8E~ t0αMD$H $D$j]u}]Ít& uʋ@ @E U|$$躃@ @E܋M؋@ tED$t$$eU܋@ tMD$|$ $eE$螖E؋0UD$E$gF U܍X2D$E$fF$M؋B B$E܋B$B @VP M܋@$tqEU;$D$D$8M1U;$D$D$EMUAEUBhET$$>}U܋@$MD$ $}UMEQUB@ E@EQ2Et$$@ @E E$QnE$A}&UWVSUpB @ E>u tj|$E$_@ pu_D$M $Йa EMUAEUB[^_]Ë@ tpt@ tD$U$ML$$-mxxEUMQUB[^_]ÉT$M $yE>u 1&t&UB@t$|$$D$ ƐEU농UWVS,UfßM؋pEt ~ Kt$E$@ x@ UB tx@EUE܀tu@ D$M $贄t$U܉T$$1aEUMQUB,[^_]ÍED$ "D$M؉L$E$aUE܀tsD$D$$qTD$M $|uh^ EMUAEUB,[^_]Ë@ xvEUUB@|$t$$D$ Ҏu'UWVS,U膚ÿM؋pEt ~ Kt$E$~@ x@ UB tx@EUE܀tu@ D$M $Ԃt$U܉T$$1~EUMQUB,[^_]ÍED$ "D$M؉L$E$聘UE܀tsD$D$$4oTD$M $蜕uh\ EMUAEUB,[^_]Ë@ xvEUUB@|$t$$D$ u'UWVSLU覘pB @ Eċ@ @ Eȋ@ @ E̋Mԋ~uEt$ %E|$${@ @E؋uEt*UԀz MԋEL$${@ @E܋Mԅ‰օEӄ}U؅E܅M؋@ tED$|$$f]U܋x tMԋED$L$$@]UtnEMĉD$ ŰEȉL$$D$eM؍UX1ED$E$^F U؋E2|$$^F$M؋@VsE܋U0ET$$k^F M܋E1|$$T^F$U܋@VsM؋P /p$M܋H @$M1U;$D$D$荊EU;$D$D$gEMUAEUBMD$  $AupU؋@ tMD$|$ $[U܋@ tMԋED$L$$[UMEQUBL[^_]ÉE؅t~}uE܅n&UM܋B@L$|$$D$ cA@ #@E2@ @EUM؋B@L$|$$D$ \t&UD$$uqEWD$E$^qE)fMT$ $EqEET$$sU؋P$tMT$ $rU؋x M܋P tET$$rU܋P$tMT$ $rU܋H YP$NE$'|>D$D$$isp$uE${et&UWVS,U薓pB _@ E@ 1@ E~@ @ E7}1t!~ ttt$M $v@ xumD$ E$T@ tD$t$M $XgV UE@ txx@ tD$t$M $jXEtvML$ED$U$QmEU7D$M $YF X7D$E$YF$@VsP tkH$tSME;D$D$U$#UEMAEUB,[^_]ÉT$U$JpP$tT$M $2pP ux$uE$yvUMEQUB,[^_]ÉD$U$mEfD$E$mET$M $mEfxuD$D$U$fhUB@|$t$$D$ t&'UWVS,}覐wGV UM@ @ EFHt ~ ED$ <$荌S 1D$E<$D$UUB @t T$<$zEUMQG,[^_]ËE0EpD$<$lEwI&GM@L$t$<$D$ ƃ\@ 0@E)@ ED$<$jcM<$L$+xUT$$謃 &'UWVSv}@ tfD$ED$ D$$cZtx t]Uȋu E̋UfMT$ $EYMD$ D$D$ $豇z@ t@E늋UžD$D$$V^lMt$D$ "D$ $R6žD$D$$^&U(E]u}8W7WUVBɃ߃q t3f~x[EUMQUB]u}]Ë@ @uEMAE8UBȍt&MD$t$ $vtP tMT$ $j‹EuEt$$fU$D$X9G u뽍v'U(E]}uHNj0@?Q UAt:>t tBUFVUB]u}]Ðt&FVG׋B tpP҉UtZfzx|@t@ tMD$ $Do}|$D$E$LG @u0MFN}Gj GB u9U|$$p뿋MD$qT$ $ uEt}W@;WDW@M+A A)~LU~B t[FM9 $P~}˞D$D$<$Sn<$dGt$t$D$  $h똋MEL$$cU$D$V낉<$蚂W@vKt&'U(E]u}‹0@2@ufPt  UB)~VMD$|$ $Jt.EE0UB]u}]Ív>뙋EЉt$t$D$ $g뎍v@ q@EcfxXMD$qD$ $GsE6EP@;PDP@M+A A)~RU~B ttFM9 $s|ҞD$ED$$vlU$bMAt$t$D$  $f뒉$ڀMQ@hMEL$$mU$D$Tft&UWVSLU&_pB  @ Eȋ~@ @}E fEEm}m7H}t ~ MAfxMԋEȋUЉt$L$ MD$T$ $uo, tDRPE,$\$$poM}̉D$ $SŨBMA9L[^_]ËUD$ D$$봉D$E$e}MT$ $^Et&MԋEȋUЋ}̉L$ MD$T$t$ $JFRE^@ xfUD$q|$$pEMQ@;QDQ@rME+A A+ẼU܋űB TỦBMA) E~m\$$mU$D$]RFMA)UwEȉ$D$TmM $D$%RGE0$EyU؞D$D$$HiM $_UB%E }̋EŨBED$  $D$D$mcE|$|$D$  $Mc-t$t$D$  $.c $?}EP@{M|$ $}D$E$&Q'USE$7v[]Í'U8}}]uPÉEOGQ UAuiHt~ tzt$<$QqMRP,$\$L$<$dE@ @ue:L$u4$J4$D$EE̍ED$}̉4$|$[EED$ "D$ẺD$U$rEWED$ D$T$u4$rEkU11EЉD$UЉ<$T$_ED$ "D$ủt$}<$PrEM̉$L$ JD$u4$DED$D$4$3aD$E$Ot$ $l9EL$MЉ$L$JEЉt$D$u4$J+u U9WщD$M $X9HY0~9<Bfx&|$L$ @ $D$mDVm+B@F%H Fp@ 796u%)‰9rD9Dž1)‰9sȋ))Ƌ+ ƅCF@T$4$D$ D$`Qt&Ey @ @fxzD$D$q$[RQ@;QDQ@+A G F $dD$D$4$T4$CKF HPFwD$<$oH.D$ D$T$ $ZMB%=D$ D$t$<$LƋp@uDžA DžzD$$G(@2떋Dž9P0@ $D$PST$|$t$L$T$ $eP@QH At $QF @2@Wutp |$T$ $D$ sKF~B+p<$VNx9H8L$T$$IZ@ $D$Q|$T$$>D$)ЍD$$ :L@ $D$|RxV>D$<$dD$ t$<$D$f\9D$4$1`L$<$R.T$<$L$X't$$HRL$t$$X9D$D$<$G#ƅDž9v9I @ @I@Wutp T$L$$,G @ HPFLVGt$|$$:>)RD$$/ $t$v)6t$D$ <$t$LD$$XP|$$AP $D$c$D$6W $bW@ 4$|$(T)׉+ q USeGE$Gb[]Í'USdE$b[]Í'UWVS<}dEЋG@4w PW@+W ŰG@@EԋEԅ<EԀx D$<$NEEԀx =D$ <$k`' E<$D$y*E̍G HPG<[^_]ÐPUcf@ l@E^fxSD$qD$<$RE4ŰG E9ƉUW@;WDW@F+G UB UЉ<$[D$D$<$K<$jBUW JBG@ @EU؋@$E)u}FUЉD$ E<$T$D$_U܋E<$T$D$f8vU؋@WuoU<$T$(E̍G HPGfG@D$<$D$ EԉD$QV D$<$lLEE܉<$D$6yD$<$'^U؋@ D$ EԉT$<$D$UG+EЃUЃ)=?BD$Ft$$OQEE<$D$g_<$D$2<$^W@D$<$f]GU@D$ DED$ <$D$D$0D+uEw ?$Q'Uuu ]`}}tFPt D$<$&P]u}] UWVS,EF`H0@Q EUytEUPB @tNjJ,D$B(D$ B$UL$D$$Bt;8UB)UF|$E$]}<$D$ 1FEt-Ex t<}E|$$(CU}T$<$^w@Et!EtEt4$kAEt&4$VF4D$4$-*F04$F4ED$(G;G GPP+F BpBF@+F<BFBFLB <BEBEB EB8B$PB(t@F$;F(~4$HRV$N F D!V$U@@@4$FED$]:U@$[^_]É4$UWG 'UWVS\}\EAQD$EUB @Eċ0F$EtXUF8;BPA4qAFpFGD$D$<$G:D$<$UUċH D$ T$M<$L$?MUT$<$U<$D$r*E Vx1L$u4$/<뿉D$UT$M $BXD$ E $D$D$4ET$M $;$NMQ@t$M $9OD$u4$"UWVSlEUMP$EBP AEEUEċUtVtH%=H@;E~ EuEUƒ)¸)ЋUEEBPEM1Mt&EtFPM;HHUQ9U|E9U}MDt&uE1D$ED$ ED$E܉D$E$6NjUDtMD@ @u܋UM|$T$ $E@ @EMċuĉAMQB3>E0l[^_]ËUD9MD$t$ $V9vF >D$E$D9=}@كX}Eδ fEmUm΋EP$كm]m΋UȉUUEUUD$ $sJF%=NED$ D$t$$y/mE$LEE]EEسD$E$E]1D$EE\$$ 3MQeUD$$8&EL$t$$z>\EP,MD$D$ $ .MD$ $gHtMQ11D$E$&'UWVSHAA@+w pW @G@4֋W@7;WDW@+G G);EEЅt"1ҍ&M؋DD9UuEЍ47D$U<$T$r-H2+W PW @G@Љt$<$4tOML$E܉<$D$DM;OD$D$ET$D$ U܉<$T$B<$C#E+EG pPG<[^_]D$MA<$D$!-UD$<$T$ E<$*<HFAA@+w pW @G@4֋W@7;WDW@+G G);EEЅt1ҋM؋DD;UuEЍ47D$U@ @<$D$#U܍@$MEPMAD$ E<$D$ġD$ <[^_]ËU܋@ t @$M܋P UԋRt~@ @MEqESUЉt$t$<$T$ ;%MЉt$t$<$L$ %A1҃ D$<$8<$:MԉAU܋jD$<$8t&D$D$ <$l>AH<$>W@4<$>W@,D$D$ <$>AHtx t,<$ 9D$$ D$<$6@ @tȋP$u뽍t&'UWVS,E@ÿ‹@@EtE1yt ~ MA)~at ~ ED$ M $]Ћǂ ǂ@ bD$$4$D$2UD$$$M$D$ $T$D$PD$D$ $D$<D$D$ |$L$4$r$ƋD$7DžtxDžDž</< t+ t$t< t tt f97u@9Qfz8ʋVA $t&p@F@<=wc +9}F~*Gwy9<v.:y&it$1D$PE$u vED$U$u fUWV1SlED}}@ tUp@ЃƋMA tUp@&1bU9U.MD$ED$ L$$UB MBEUA BEUMUM9щMvUȈEtu9uI9u@MA<M} [Mt u9։usUċuă4$ t$D$lj$YEċUM|$D$ T$ $ uUMMHuF%H F}4E} \}Et&} ]|} [MI utt8tE4$D$l[^_]Í%=MuD$ D$L$4$UEU9P} [E}LUU9PEUUPMA%H AE} \}EtEuEEȉu܅&1E9Ek9EbMpuȅt"U@uUU9PMuT$L$4$@UEPED$)UD$$6MMED$L$$>t&MMHuF%H Fuuv EuM} \} ]} [E1Ut#";}uMuMu} [DB UB f5EUD$ED$ "$D$MEA EUD$ED$ "$D$EEUD$D$$ EEvM}} \EE;} ]} [eΉEE} [EtUUċuă4$t$D$E$8U uET$t$$EEEȅMuE|$L$ t$D$i$UMD$iT$ UL$ƋEE$)NjED$M܋UU)UȉL$1Ɖt$u4$tEru+uEȍMUMU{UME|$T$ $D$iD$ :UȋMD$iT$L$ƋEE)NjED$ E$UU)UȋMU Ɖt$T$ $Et Eȅvu+uE1t%&U29}UuE;EE;EM@UċMET$ UL$D$$ yuȋEUD$t$ D$L$$,1U9Uy9UpUpE1MU 9}Uu*+EMuD$ EED$L$D$4$%MuED$|$ L$t$$vUMMU>uUE|$t$ $D$iD$-MUD$iL$ MT$ƋEE $)NjEȉD$UU)U!ƋEt$u$t$Et Eȅvu+u+EUD$D$ EE$D$ED$"MċEUL$ MD$T$ $-ku}uME3A3FGA3FGA 3F G EE9EuEUu|ULDeUZ}uME A FGA FGA  F G EE9EueE뉋U}uME#A#FGA#FGA #F G EU9UueEMuU|LDUWVS fZ~ WE +EЀ8 u E;}ЉUuEEU B%=tD$ D$T$M $8E EBU @M Q%|@AL$E$U T$M $pEL$D$ "D$U$EEDL$U${E܋ED}UE:0EED$ ED$ED$U$}EԉEE})уA)E9M܉M8ED$ "D$U؉T$M $?E\ED$ML$E$wE6'UWVS,E?mPƒ  sU t UB 5UB BE:utUB!UB tUp@$t EQ.D$ D$E D$U$!E@ @tD$U$,[^_]Át'D$ED$U$?E@ D$U$fUxx1fD$ t$ED$U$t$E9tT$E D$U$9},[^_]%=BE:Er9s!Bxt&9s yD>L>D>f}ȃ!BMD$|$ $9A9wI}9uu>U:T:A9wEDUu T T&'UWVSt&<Bx_M|$(D$ $u98s8MD$)T$ D$t$ $=vEt$<$D$TE뤋@$I M8D$D$ D$|$ $&DžEt@ @ EE @ BE0u F  0U90 0 9 0ɉtEUD$0$D$00-A|$}uD$D$ ,D$<$2Džt@  @ $+ 00}MM,90Dž(V0ErH;EmU‰U9}v:$ELu)|8 G D$4$1EE})EE,9EU uD$ T$L$4$-9\MT$U($EMD$EF@hdI`8D$ED$D$ |$$Dž\Et@  @ \EM A oBEU؋U B WUU9UHM1u ȃ9%0ɉtEUD$E؉$D$?ZE؋u؍-A|$}uD$D$ pD$<$DžTƅ[t@ + @ ƅ[Td_ M؋}}艍lMp9uDUDž(EUZvu(Ɖuu9t%lUL$D$$MMĉlp9uM`ED$ L$t$$9lEv@dE u)|8 G D$4$%Eԋl})EԉlM9\+pU9U&U(‰U@U9ɈMu9M HɈMtt$uED$4$ƉE&93 EDž(E)(E9UnU4:‹UBЅyf-f(뷍D$ED$ERU EMD$ D$T$ $0 Eu D$ED$ t$$EuUD$$f{ f(&}EML$M4 $t$2uuu(L$ƋEuu$t$?Ehh([ME9TMt%TlEL$t$$lTUU+UMMu P} O E @ @2UD$$+U4M Pu F @F}t$<$)M PDž(d€Z҉lu }ԋ)HU B @BbMT$ $ N$€҉Mu })HE @ @M I Džx:Qt&E|$D$E$UUZEUD$E D$ $D$UEUD$E D$ $D$uE)EM UD$EL$T$ $;U$0$E)lM lD$EL$T$ $Uԉ$uXNU؉$V>ƅZƅ_uML$4lt$$luEu E}D$ "D$t$<$J;}xUMDž(BEMZ|(}t39xnMDQUD$E$D$E}9}CM|$T$ $=wMAЅx"T$EUD$$(Eff(놋E|$D$E$1UUep9EKEDž(EA6u9PM܃(M܋p9EU܋`uD$ T$L$4$9lPv@dEu)|8 G D$4$IEԋl})EԉlP9\U$T$m*ED$ "D$ED$U$E)|$D$$.D$ D$UT$E$lD$U$WT$ED$U$fUWVS@ EUuB@ @ EF@ @ EG%=tD$ D$|$E$U9Prx0ED$UT$ Et$D$U$ x@B@Etu ,[^_]É|$$耠,[^_]fT$|$U$!pD$U$蕹ED$E$~EfD$U$eE.D$ D$|$U$\rvD$E$%EH'U8E ]}ux@:sA@ tw@ EGw@ @ EF @E8utE܉t$|$D$ E$贱]u}]ÍvD$E$eEGw@ D$E$CEF ufED$ED$ "t$$FZD$E$zUWVSE#\@p@@ F} 3@ EEPF~@ @ E1}} /E8} 3} +E:G 3@ EE } /$} 3t"} +EEČ[^_]ËUEt$ T$UD$$0Eftŀ}tUP@G @tE|$$땉D$E$葶Et&D$E$u} 3EE@ p@ EEEXEG U|$$ vUEt$T$$E E\} t}uUED$ D$D$$E1} EEEt&UG%=tED$ D$|$$ U9P0EEET듍vUEt$$D$NE UD$$дEG tx@E0E9EEfUD$ pT$U D$̤D$E$fE@T$U|$$E ED$ED$ |$$\oUWVSEVÏ<} p@@ @}.EE fEm]mt@ tQ@ EF@ t`p z.to2|*[^_]ÍvD$E$eEF@ ut&D$E$E뒉D$E$8t$E$[^_]ft$ED$E$[^_]ft$ED$E$N[^_]fUWVS M?;Etxd;E t^D$$=?wW$4$ljD$Lfx)9E u<$ [^_]Ë`1⋃$TUM]VÏ:uu ɉ}}t)\t)@tm]u}]ÍvXu׋EɋPt7\9tUL$B<$D$軫u:U1r룍vXNjUBIu%=@yEpet&UWVSMt$  $D$D$腸UD$$t$D$M $7҉8D$U$tEU$&<1[^_]ËU B< t< t< t < t< ;dt$ D$D$M $D$E D$ D$D$$莘t$D$U$W<1[^_]ËEED$D$M $kE$pM 4D$0D$$D$UD$$D$ D$ǥ. M A< < < < < fE$t&蟖< >&1vtE 9f2\Gw< t< t< t < t< =G< t< t< t< t < t&B< t< t< t< vt< tt&=R&11n$f t t t&t t u0D$$9Vd t% t t ft tu:$USE (D$ D$D$E$[]ÍvUWVS}ü'9}eU)=?B$NƋE 9}r5t'@ uUD$ "D$D$$ƍ.M M A ^8?/Et/dUt$ $D$D$觳U t ?1UD$$Mt$D$ $IED$$薽uNEt/ƄUD$$EED$GM $LM $!Ĭ1[^_]ËU v4T$0T$$ȗ‹E D$ET$|$ D$$膡O$Yt&E UD$ "D$D$$M}M<$D$џM8/tE1Udt$ D$D$E$ gM8,d1t$ UD$$D$̱0$虰t&US$E蘿$D$D$D$ ED$E D$E$袢$[]Ðt&U8E]u}P=v$BtNƋ@)ȃMRA4t ~ 1E;]u}]Ë9AUW tu@Eudž ET$D$ $4$D$\$0EǀEt$$D$ɊUu?x V@ x@ E U.D$ D$$$D$蚟Mǁ@ $D$|U$T$D$OuL$L$4$D$ 詠VMRA46;MED$ "D$|$ $rMD$  $UM.ǁ D$ D$$ $D$謞udžD$ $eD$ 4$荊MBMD$ ,D$ $D$N!UB@|$t$$D$ k9fU8uu ]#\!}}t~tOF XVustBكXt$<$_FuFD$)<$]Ћu}]Ë@ tP$t&WE$0F F l@EUtaD$ET$ <$D$j1҅uDrt$<$SكXz'B\$D$E$考E<$D$衤1҅t$<$<$kfF 7p@'t$<$ٝD$<$ƉD$SD$,<$ D$D$,<$ fuqFxy@ D$xD$E$荂ED$ "D$t$<$蝸t$<$D$ <$ƉD$Ct$<$~뀋@ D$#jD$E$t&'US>w!D$ED$ ED$E D$E$踙[]Í&'U(}} EU]ݸuEUt t=1MD$  $uk3| ]u}]f@ tpt@ tUD$$&Ev'UWVS,u/aMV~ Et$$聗@ @EUz UEUD$$W@ xUP tED$t$$Ly@ tUED$T$$)yE$>UU2D$E$zF X7D$E$zF$EB B$B$B U@V<@V>P @$tED$ AET$$F@$UD$$*ED$ D$UE $D$螓,[^_]f@ xv@ W@EcDE$I^E$9pUWVSEP0BtC@)dMBQ;*MD$ $MFǁǁ >G uoG UD$$$D$蔃G tmET$$D$^UU[^_]Ëx uD$ $2oMD$ "D$|$ $袯q&MD$ "D$|$ $u#c`D$ $螧t$t$D$  $薓ƋEPwD$ $yG D$ $~AD$ ,D$ D$E$ĐUMBPA@ @ta@$D$D$ &D$E${UǂpMD$ "D$|$ $E=뛐&UWVSEU M-fE$U(e M1ɉtx kL$$肒@ @DžEEBǂlt fx-ƅƅƅƅ@ D$ $NjHV-x;$|pP @$9D$$pƋ@ $D$QDžDžDžƅ DžDžDžƅ }u,ECttl}E#1D$EED$<$FV$qL$D$$赩$D$#~t$ D$D$|$D$ E L$D$D$$6ƅDž-D$$YtxV< xV> D$$豔@Vt^<|tZ<-tVxL$`D$D$V:Ap%=  Rt8L$$=9tT$ $證9$T$D$ L$p$D$0~x @ D$ D$p$D$赏0~x D$$߈L$$נT$ $x6~m81;D$ $D$>H `WߋBVt)J$Ue3Ĝ[^_]Ëx͋Ap%= uEP<U,t9f|vtEDž.L$$~;@ @p$t x  $謜$t$D$$mDžDžDžƅ >.D$D$$~u, < t< t< t< ft< tڋM,u )׉} <- E, t E,uU||MEwDž u},bM,t$T$ L$$28 ƅE9sG|uAWG;< t< t< t < t< ;w@V<&< t< t< t< ft< tڀEr| 9-u y $见$D$D$ $D$Yst$ D$D$D$D$ED$D$ D$$jƅDž;ty>WEwDžg >&u< t< t< t< t< t<-t&E, ljEM,D$D$T$ L$D$D$D$ D$$Vƅ-%: B<B<_~t& $Ag;$;@V<>]<<UD$DžT$$ffy c8X@Vs $;`@ @ @$D$ $D$ D$T$$};8-;< t< t< t< t< t܉T$ $*}@ D$D$$$t@ @ p$ $fe;t̥D$t$T$ D$$~΃@VaEax| <- t Er? u }, U,t$T$D$ $Z@V| f< t< t< t< ft< tڄL$ t$D$$bu! t€u҃fbX@ D$ $< t< t< t< t< t&tွEr9 <&<-uE,K U,D$D$ ET$D$D$D$ D$t$ $藑:|B<qB<f_XNDž~=LE,8u$ƅ҉< t< t< t< ft< tڋE,t#P 0< E,D$$Džz@ D$ $Wn$D$ $_a9$59 $蛋9 xVsZ },!D$T$ $D$ }ƅ‰D$ $裕^T$$wt}! t€u҃fb$贑tL}D$D$ $n-D$ $7\ },u@VD$TD$$芏T$ $v?NFt < t< t< t< t< t <:t&$ _@V-},\ƅS}! t€u҃ft`u! t€u҃ft 4$1vt$$D$ $D$hE,Dž@ @GP$J5p DžE,ƅt4$tƅƋE,D$L$ D$ED$D$t$ D$T$ $4$O~‰}! t€u҃fbx衎u! t€u҃fb-D$ t$T$ $ZBD$D$$j$蹆@V-ƅDžt$T$ $eE,0D$$ɋ! t€u҃ftD$ $=bgD$ ,D$ $D$tNWD$ D$T$ $dtx u@ tx#VFt!< t< t< t< t< t&t<:Y $ @V-},D$-D$ $`}! t€u҃ftD$ D$ D$$wdDž4$1Lrt$1D$$蔏$D$dE,c$jD$D$ $-su! t€u҃fb$NJt\}D$D$ $g=xU,tt$L$$mb@V|E,Sn! t€u҃ft@V>JDD$ $RD$D$ $qkD$$cg@ D$ $^Ǹ@Vs|D$-D$ $與@VD$*4$YE.D$ D$UЉT$M $mD$E|$)D$ EЉD$U$z\D$ED$ MD$EЉ $D$O\uD$*4$GYEu>MЋD$U$;\1ED$ #D$UЉT$M $lD$ED$ UD$MЉ$L$[BNƋEЋ1D$D$D$MD$BD$ D$ $D$kWD$E$pM 4D$0D$$aD$UD$$D$ ЦD$jD$M $oE 8ET$D$ D$E$莈vD$E$%tM |&D$D$$*_}M8-D$ D$D$E$YZD$U$zfM @ @@ LU$iD$M $nE BL4T$0T$$_D$UD$$D$ D$Yi:UD$$D$ PD$-iK0E`D$U$D$Tx@MAp%=t.D$ $D$ PD$hE FM 4D$04$D$^D$U$D$D$ D$jhM t$UЉT$M $ ct$EЉD$U$bM܅tM܋BWED$$D$LE܅tM܋@WD$ D$D$U$WD$M $d1L[^_]ËU$D$cM@ @@ $D$JoUUD$$`T$yMD$$ EU;PxuM;H|tE؉D$UԉT$M$TU @ @@ L[^_]D$M $kD$E D$U$KM QWUi HUPt@D$M  $D$z,BW"E T@GT$U$wD$MƉ $vbt$E$wK1GE rH4T$0T$$[D$UЉT$MD$ $D$ D$eL1[^_]Ë@ v@fD$ D$D$ $UU$^tM UWVSE ?t E x t [^_]Ë@ txtxV>v@ t͉$RtU@ $D$] GƋE@ $,eE@ $Ru:UBx]E ;ND$$U:_@ $XtU@ $D$]}D$@ D$E$m{ED$$tEU D$ |$$T$vD$@ $|U1UWVƃ@$V x~$<}x~$<}x~$~$F ~$~$F ME~$ɉM􉆤 F ~$EU~$<}xE~$<9~$F ~$F$V MF$U;w mEH9|7;~ ;~ЋE^_]ÍJU]J0J0 Ív'UW}VS"xKt%9s!t&9vƒu[^_]9r 9s }v7}v,}v!}v}v EЃUDU}}EċMDEG&UD$,$!wUD$ $<iD$ED$ ED$d}E7u,D$4$qUEu}D$ |$T$4$OEỦ|$4$D$ T$TL<}1&E@P} >t&EtJE.EUċ9MtUDEluEx( / >@t&KUz)CWt }t&t }> fe@|Ru~*zt& t&@uV+t-Eă0 .EăaEăAt%Eă0 vEăavEăAt?} } } } } f} t1} t+} t$} t} t&t} t} t&lt} \} R t} t } <1:v}E}E}E}E}EU҃Uwu0QUċP}_QUċP}_bQUċDP GQUċDP ,dQUċDPIQUċDP.QUċPt&QUċDPPUċDPPUċPPUċPl5t&PUċPL{t&PUċf}EU닉ME+E9E܋}|wF<wL}IU9v-< t< t< t< t < u 9u܉U䍶ME+MU,[^_]Ë}}끉Es}ŀ}tE9EvE܅~1M9M؉Mv9}tt&늀} E9EhU܅]8 T1M9M؉Mv9}~9 u란}t& E܅t& U1M9M؉UEM$D$EGUE9}(M9M밐t&} M9ϐB<vB<v B< v_u9u܉Mv[E};}>LU f9DA u M};}LU0 Fu _9uv};}EB<B<B< _M9B<B<B< _uM};}-KM0_9Ft}Q;}Mʉ0< wf0< 9uM}AU9FKU 9wDA th}";}t&ZU0< vF0< )9u;}vM䍶9t:09u};}U< < < < < 9< < < y< q< u΍b;}Ft&ZU:2L 949u(U;}vM䍴&9t:09uEE܅U9U1E8 t,EMUD$ T$ $D$@M9}܉M9M릋}܅1E9E8 EUD$D$$:=HM0ED$L$$:DF [UE9}}M9}܉Mt 9Mv9 uUMM!M܅)E9Eu1EUt$ D$$D${=dU9}܉UC9U:묋E܅U19UE8 tQUD$D$$?8=/FM0ED$L$$8DF M9}܉M9MxUu܅M9Mu1EUt$ D$$D$X<AU9}܉U 9U묋EE܅U9Uxu1UMt$ L$$D$;M9}܉M9M묋E܅E19EEUD$D$$6=DM0ED$L$$s6FUE9}M9M;}fzE8 fu i8 t9uEUE9ljEw0FU ȃDt.E;}t%>t֋MED$$uҋE딋MuE܅E9Eu1EUt$ D$$D$':U9}܉U9U1 UMD$T$ $5D$E$/QfUED$$D$4M $D$EoUED$$D$4M $D$UE9t&UMD$T$ $Z4D$E$.>$&_M $4WD$E$1U$$F:$g_U$VMD$ $aE$E9 $/_E$VUaD$$VM $E$^U$VMaD$ $UE$|E $^E$TVUD$$?aM $DE $^E$VUD$$g0M $ ESUMD$T$ $2<__9}U(]}׉uEr [eÔFtVtrFtN t]u}]Ðt&D$E$;EF D$ED$$,w F@ @t EH@F;F(uEF,뜉D$E$;EFD$ED$$6,w F@ @uF;F(JEF,w L(LxY$x;(j6LxD$L$4$'=5s5L0xD$|$$Q'FxD$|$$*'<_xP TxBr 9A$x9}*x9|㋇THt01Q89TR҉G1P xuxL;x8(%.LxD$L$4$%=D,3L0xD$|$$%FsxD$|$${%<_Lx1,"=5(y# 3ыP Lx((?xx(Q9ty"4:8]x+L9x?x~C(y"O9xLt$xT$ L$4$"VxLxuF1xL;x+LxL;fiqxL;;T((x06x9%񀽷#90;L90Mljl4x94l0xT$L$ D$ |$$>9Z4}94uL(6Dž(((x;~x;8~8((x@x(R $px0( NxDFxDx1҅txQxL+<PPx$x9#x8xA1txBp&G .PDž.Dž(Lx(x%Lx);  x1LxxL;u ;Lx xL;twxL;WZx,,(01x,y$A$jxx$Lx,Pxx,B (B,V0x;z$ xx,ȉ(0O(Dž<DžxDž$xL;4Rf#(>L(ȃDF(y#""Lx9mLB<.SPB<#/S9LxL;8LxL; (xL;u ;L~ twxL;Wh v*LxD$t$ $D$9LxL9w+SLxL9v*xLt$ T$  $D$~uxL;p"(G(((vx$Dž'vt6:t1€<(fy:QB<w4t틳€<(tހ't2tA 농x9tA hT$$@Txl/xyI"h0<#th<1UohEW9}M쉍lu9glxD$ D$T$ t$ $8*;EuY9 9Eu t&9h9sxMD$ D$L$}싽L|$D$t$$D$xD$ (2WA(QB<HS#xVB<*!SL>})~L($VATTLR%x9<}<ZRtlx xxTxxT++xtxtx8x;A$D x$x]xxx9<}Q(y AHa60 ƒ_!(yk(y 0 xs'vt6:t1€<(IfyQB<w4t틳€<(tހ't2tA 놃v{9tA kP P ixMUtL$T$ |$4$UȍE쉕pT$|$4$D$ xtD$ L$D$ t$<$pD$ D$ <$T$hD$E P_phEp/*y<"e<0]#t1| 8|xL990xE싽Ll9wt&x97l0D$xD$ T$ L$$9aU009w,9t/(G1ЉǃtxxǂTxVDt$x4$x;F$xȤEЋx,Eԉ(xU؉ȉ0t xxLJTDž;GG (t @xWx x(t xpx(|$$ρlH;G }xxEHWLƉOx@$xWt* x;P$ x|LxxD$$"tQH~Exu5pD$ D$D$D$$cG x(t @xWx x(t xHx(HGG\5DžxmsLxD$L$4$4$D$9LxD$T$ $x4$D$pxF  xȋLxjxD$ LD$D$$y8|xD$ LD$벃(ȋLxңL x0DžxDž/DžDž(MЋIix (!LxD$L$4$= L0xD$|$$F LxHWOxxWp$G x;p$xUHGWx\O!a)@كX(Dž R!/QB<vG9tB4t/2t='t8:ft1€<(fyQB<w4t틳€<(tހ't2tA 뇃낀9vtA o/;y<"<0#t18 $x$axD$ $Ix4$K$x$ xD$ $hx4$ %$<x$xaD$ $x4$(Lx+ȍT ‰у)\X f\t&sf 2}4$+4$D$4$4$D$4$xMD$ "L$|$4$xD$r|$$1 p F$Mdx[uT$$>Lxt$$D$|$ i4$74$ aD$4$ 4$饿LxD$T$ $x4$D$ۿxT 4\;`~t$$x`\t$D$$T9,L9Muȍ}ElphtYt&p9҉ыti,,9Lx9-xlp,$t$ |$D$htxL$ t$|$$WU;UA4$=4$ D$4$#4$DžҐt80Q 25vt$$/xxL,L$ $t$|$h!BL $Px<$ D$<$ <$UxD$ LD$uX ˆ xD$rD$4$4 Vx 28|$x<$lDž(骺T$$lEЋx,Eԉ(U؉ȉ0t xxǀTt$$xx;J$3L$$p"x;r$} t$$Ox\$?x $xD$4$4$fvD>x;w$} t$<$[x\c7 2x;J$} L$$Bx\뎋,9ɋLs>x`4$\ x\xf2pD$ D$D$D$ $st&x,;G$ D$<$Hv'UWVSUM܋{ɉEu䀿1EEE9E9uU蔴EE}uċ9UU1ҋMEE9ErM҉uE܃[^_]1EE&9uv^U EtkE}u؋M+U}tM܋E)9} Mu낋UU܋E܃[^_]ËUu艇EE܋E܃[^_]ÉMAt&UWVS,RzEUMB=tSu}E+E艇F4F4F8LJF09wE@w=?$D$)U䉂MA0UMUQt8}Ƌ;0~)ыUBA}90|܋UEDp$Ku'}1;w$}9t$<$U,1[^_]Í&uM싆Q+,[^_]ËǀBBD$E$Uu䋂PH+F D 4D$4$}8F0҉F4@ ;t%D$4$P 88zpD$gT$}<$M䉁<@@pD$D$ $su䋎H ut$}䋇HP, <$D$<DH<F>FLF PfD$ D$ 4$D$T$_Ƌx "ѹPu 1<_M "9Ex  D$|$ $=<0 D$|$$oFt919UrE }I D$|$$<_u뢋 ,0X0R48 )ȋ}<''t9v t uEU +Ep9B(~(1Ĭ[^_]ÍvM I<uƆ뱋Et MA EEMUEGu ~ G,G,E܋E9E܉tyU B<' tMDžxU E ҉}p( U܋@M+uI)ƉExl! x}EuMMEvE E?U RUu܋q&ЋEth?EUu+}D$MD$t$uD$ EL$t$$EtU B>tM+EE̋} t u Űu̅\ ME x WG EEG;E) EE+EE؋EM u+q(wEˉ+E؋Ou9}M؉MMOMM'O;ttREL$ ҋUD$PA)‹E;ET$sEUD$$ ;ur M}؃EuuM A=MuMĀu+uE1M܃}t$uT$D$L$ 4$EME%U z G(w(uE  }p(EU܋@M+u)ƋA}EEEu+pu*G(GE~~ 5G,qEM y ^EU؉$EbU Ez t&M EOU؉$EbU Ez U z GtoGRt&GgOUM$UmbME؀u ~ PuU؋E4$9bO$E+E9EE̋U)ȉE؉UEM؀y M E+A(;Ev$U؀: IU : :9fuG(MtG,@ L AQ$9MA @E x 뮋u1U4$D$E܉D$ E+ED$D$EMMỦUuMMA uyu9utqEx thU B< u_E؋z E܋uԋ M:MB~}ԉ9uEEEuEE @>u(UT@ @,tP ҉P UUЋu NuЅQ<!M A PGEFU z(U!u4$_NjU E_u EЋN$ED$|$_9}VU B<t }BM y GUtG ;E EE9EE܋uuEu+uuO$E+E9E}E)ȋUM9MsEU M+J(MuEu9vEudw ;tUM|}F%@EA1M|t$ uT$D$4$L$eE[M y +E؃uM9Mu ~ &EMU$]UME $M]EE(fuUtuF u U9UPO ;O$ODžxU uB H+J(EU4$j]ƋEEU z bu؉uЋEG,@ E x E$U܋pMpll>+l)9Up}EEE UЃx(!<U܋MT$ $U܋MT$ $G(;uًŰE4$]19E&E̋U Ez 0EQO1U B @(P ҉P M A P(;PuT$4$LE x w,t#MG(UD$$M y G,G(u F @@fEE}UM 8EEELJ,U z<MME(u]} G x(EUEEMEE} D$E(T$UL$ |$D$E $D$aEM A<}9}SEu U B<"M}}!E)ȃEU B P( M9MMU E踿pM} O<Ut@@ 9EtMD$ D$$L$}D$<$UE(E @>E(}M yU)A f} O<ƂEHUD$$/E(5M4M ǂ}U J Ql}vA }EU mE H y } MME9EEU}rM@}U)ƋE+u<$ RE}E;v uUEM9M6}(}̋}̅UUU+UE}D$E T$ UD$|$D$D$$足E @>tU +8}NjM+E9E+u+}}}O9uv't&}9}MU E蕼t} t&vU@tLED$g|$$t1@x*UEE4M A<9EE}4UUmE `U M+EEA1҅ EU}E)‰UăU9ɉu1EЉE|}ED$ "D$t$<$TEUMuċ}91U Ec} O MM 'U1S$2-}$D$D$ E D$ED$ED$ED$ ED$E D$E$蘰$[]ÐUWVփ MxEE ^_]ÍB@<=}FE؃<vwFtfBtdA< t&v~Fyր~FYb~Fw~FGt&UWVSu"*U |1t19u[^_]ÍvD$lD$E$"(w+V$= :$w- ?ȀAЃ?ȀAf ?ȀA?ȀAЃ?ȀAEUE[^_]ÍD$U$L&UWVS} E,(49sAQ9wE|$D$ED$ ED$E$*[^_]Í&'UWVS Eÿ'u MEt E;usaUυtE9}vI7yލF@<=w4ȃw;<t<t\<t&tg<EtU:19} [^_]ËE:sΉ4$Z=F><wGy81G%<wFyA< vw ~FxtA<w~Fy8}FqBA<wI~Fy@8MFA<9F-<;t& ~F19 [^_]À~FW~Fut&UWVS茾#U  ?ȀB?ȀB?ȀBЃvbU ?ȀB?ȀB ?ȀB?ȀB?ȀBЃU ?ȀB ?ȀB?ȀB?ȀBЃfE U ȀB?ȀB?ȀB ?ȀB?ȀB?ȀBЃUSEدD$ ED$E D$E$R[]Ð&USE蘯D$ D$E D$E$[]Í&USEXÑD$ D$E D$E$щ[]Í&UWVSLE O0D$,U$ǔM E MMuREuL} EEEEEESU1L[^_]Ãw Ut EU 2L[^_]ÉBnfU8]IÂeE1E }}uut$D$<$Vt$<$zxUe3u ]u}]t&USE ؛D$E$z[]ÍvU(]詛uu}} 4$|$j1҅t/t4D$ |$4$D$jm1҅‹]Ћu}]ÍD$ D$nD$D$D$4$lfU8]2eE1E }}uut$D$<$t$<$ZUe3u ]u}]蕓t&USE 舚D$E$v[]ÍvU(]YÒuu}} 4$|$8i1҅t/t4D$ |$4$D$l1҅‹]Ћu}]ÍD$ D$nD$D$D$4$kfU8]詙eE1E }}uut$D$<$趉t$<$zUe3u ]u}]Et&USE 8qD$E$0[]ÍvU(] Buu}} 4$|$g1҅t/t4D$ |$4$D$j1҅‹]Ћu}]ÍD$ D$nD$D$D$4$NjfU8]YÒeE1E }}uut$D$<$ft$<$ Ue3u ]u}]t&USE !D$E$0[]ÍvU(]蹗uu}} 4$|$f1҅t/ t4D$ |$ 4$D$zi1҅‹]Ћu}]ÍD$ D$nD$D$D$4$h fU8] BeE1E }}uut$D$<$t$<$ZrUe3u ]u}]襏t&USE 蘖D$E$0[]ÍvU(]iâuu}} 4$|$He1҅t/t4D$ |$4$D$*h1҅‹]Ћu}]ÍD$ D$nD$D$D$4$gfU8]蹕eE1E }}uut$D$<$ƅt$<$*Ue3u ]u}]Ut&USE HÁD$E$Pz[]ÍvU(]Ruu}} 4$|$c1҅t/t4D$ |$4$D$f1҅‹]Ћu}]ÍD$ ƭD$nD$D$D$4$^ffU8]iâeE1E }}uut$D$<$vt$<$zUe3u ]u}]t&USE 1D$E$p[]ÍvU(]ɓuu}} 4$|$b1҅t/t4D$ |$4$D$e1҅‹]Ћu}]ÍD$ ҭD$nD$D$D$4$efU8]ReE1E }}uut$D$<$&t$<$J\Ue3u ]u}]赋t&USE 訒D$E$0[]ÍvU(]yòuu}} 4$|$Xa1҅t/t4D$ |$4$D$:d1҅‹]Ћu}]ÍD$ ڭD$nD$D$D$4$cfU8]ɑeE1E }}uut$D$<$ցt$<$ Ue3u ]u}]et&USE XÑD$E$u[]ÍvU(}} ]uuQ?_tA|$4$_1҅t/ t4D$ |$ 4$D$b1҅‹]Ћu}]ÍD$ D$nD$D$D$4$db 뎐&U(}} ]uuXÑ?_tA|$4$>_1҅t/ t4D$ |$ 4$D$ b1҅‹]Ћu}]ÍD$ D$nD$D$D$4$a 뎐&U8]詏eE1E }}uut$D$<$t$<$cUe3u ]u}]Et&USE 8qD$E$T[]ÍvU(] Buu}} 4$|$]1҅t/t4D$ |$4$D$`1҅‹]Ћu}]ÍD$ D$nD$D$D$4$N`fU8]YÒeE1E }}uut$D$<$f~t$<$}Ue3u ]u}]t&USE !D$E$ p[]ÍvU(]蹍uu}} 4$|$\1҅t/t4D$ |$4$D$z_1҅‹]Ћu}]ÍD$ D$nD$D$D$4$^fU8] BeE1E }}uut$D$<$}t$<$zWUe3u ]u}]襅t&USE 蘌D$E$r[]ÍvU(]iâuuD$,4$蚈4$D$ <%D$ED$ E D$u]u]ÐU(] BuuD$,4$:4$D$ <%D$ED$ E D$u]u]ÐUWVS謋} D$ |$.D$E$\muU9։Uret&<+< 3Et A<^T$ D$E|$$p[9uEt U;PvlED$t$$ X=wEt< t,a< <\&< XfnD$ XUOD$D$ D$|$$R[[^_]ËUD$ ¿D$|$$Za됸r눸\끸tfut&'US$E1ED$ED$BD$ D$E D$E$[$[]ÍUWVS謉,}E ED$<$D$V<$D$ƍEED$yUE tw{Eu;U UD$ D$<$T$ [aEMtEUU1tED$<$D$V,[^_]fE D$<$D$PfvT$ UD$D$<$T$~k%B @EUT$UD$$gUt$<$T$Kx+EEeWI҃:ED$ "D$T$<$蜆eD$E<$D$w+EED$ ED$D$<$D$nD$6YU<$D$ED$vw+EE&USW$U$D$"D$0D$ED$ ED$E D$4d$[]Ív'UWVSlEM u识UEE(}$MuEEEEtZEEtNu;U EEEEuD}utZ}tTl[^_])9sEt&ыU E҉MEtU ҉UtE}uEEEE}M Mt}E}EEEE}}E9EE9Et }0}cMt}M9U 1E Ul1[^_]Ít&}U)9E}H?}t&u U9Ud}u M9MR}Eȅu3}EuD$ t$ED$U$IYMuMȋE̅}E}ډD$ |$UT$M $ YE}ąEu_}ȅu̅}t}E}}9}>U9UvEȅtXU2E:uҋ}9҉bU)UU)U}E6}}ډD$ED$U$sED$ |$ML$E$WMuD$}|$E$YsED$ t$|$U$WaU d8#fE̅t&qt&'U(]E 覂uu}}D$t$<$rEt$t$<$D$ W]u}]É'USNÇ$U$)D$;D$,D$ED$ ED$E D$d_$[]Ív'U(]E uu}}D$t$<$rEt$t$<$D$ J_]u}]É'US$ED$ ED$E zóD$E$"Z$[]Ð&USNÇ$U$CD$UD$(D$ED$ ED$E D$d^$[]Ív'U(]E uu}}D$t$<$qEt$t$<$D$ z]u}]É'US$ED$ ED$E zóD$E$"R$[]Ð&USNÇ$U$]D$oD$$D$ED$ ED$E D$d]$[]Ív'U(]E uu}}D$t$<$pEt$t$<$D$ jG]u}]É'US$ED$ ED$E zóD$E$2u$[]Ð&UWVS,EU } @y19׉UsPxV9Uwu UU܉E܉t$D$U$.Lu9uw݉+E UE ,[^_]Ðt&%=tE,1[^_]9UvtB<v5B<v.B< v'_t"‰D$ͯ$Gt&E܃)9uD$E$s*UƂ8D$uD$$VOUƂ8D$D$$+O1T$U$U@ @EL$$U@ PTB<vB<vB< v _T$UED$ "D$$wUƂ8Eԉ$D$үD$vNU]Ít&'U]Ít&'U]Ít&'U1]É'U]Ít&'Uuu]3xl8tpT$4$D$Uu&4$.pT$$@]1u]Ëu͋]1u]ÐU]Ít&'U(uu]}wF@MN F@}<}ω}@ t}E)tD$4$nUB< ut#M荆~ }E]u}]ËU荆N M}>ېUuu]}vV@N :V@)u:ы@ tV ]u}]ÍV 䍃 D$4$mv'Uuu]}PvÉF@8F@F <E` 4$D$o4$D$GU~ >]u}]Ít&Uuu]}uF@8F@F <EX 4$D$ko4$D$GU~ >]u}]Ít&UE]uu}@@huáF@E<p >)Et$t9EEx 8]u}]@ uZEu~ >ًD>tkPtJtZPUJuV ~ >듋EUz :|t2@ „uE`uV ~ >Bt(@كX 붅t80먉D$E$mfUWVS\EUt<EB@MB@ȋuB )u~|tw}EE9EEMB t`@EEU|$|$D$  $N|$|$D$ 4$mN|$|$D$  $NNvUE]uu}@@jF@E<p >)u$uD$4$<~ G]u}]ËUxD$$a'U(E]uu}@@HjÁF@E<p >)UEtt%EuEx 8]u}]ÍvD>@ t:@ uFUr $D$[VD$E$,;Uz :묋UD$$QF뺋@D$E$VU$D$:efU(E]}u‹0@@IiÂM<B@B E8@ t[@ EUM)TUMr $L$UD$E$^:Uz :]u}]ÍvMD$ $7E뙍D$E$_&U(E]}u‹0@@yhòM<B@B E8@ t[@ EUM)TUMr $L$TD$E$9Uz :]u}]ÍvMD$ $56E뙍ȲD$E$ _&UWVS}gG@O 0G@)B41E1~D1@ tW@ D$E<$D$bUW t(G <$D$8w 7[^_]Í֍&D$<$C랍D$<$1^'U(}}]uf W@O 2W@)4u 1MG@ tiP G4ED$<$D$-W t$<$UD$,F @t t$<$PEU4W Љ]u}]Ít&<$K딍UD$<$F]fU}}]ue)W@O 2W@)uR41<$D$dW t-G <$D$7w 7]u}]ÍэnD$<$\fU}}]uPeÉW@O 2W@)u+41<$D$$]w 7]u}]ÍD$<$-\'U8U]u}ыR@d2Q@UJ )<49F t4@EF uKMQ y 9]u}]ÍED$ED$ "t$$/cF tvET$UD$$.*uEP Uz :똋MD$ $-['UWVS\Ec8‹@@Mr B@E܉u@ @ R@EċMątP @ P҉t7@,t*@,u@,cfQʼnt&͍&'U(}}]uNùEG@W G@u)ƉuEDPt6t.uE@ t*  7]u}]Í4D$<$;EU@HEy9G)qD$D$<$J<$D$4Et9G)D$D$<$~J<$D$E@ujU@4@ 9@$/G)~{D$D$<$$J<$D$U@ uG)~OD$D$<$I<$D$M\t$t$D$ <$/ft$t$D$ <$/땉t$t$D$ <$/t$t$D$ <$/p'UWVSlEUM0LiEċB@A@}O )E}uąUʉU؋P}EULMԋ ɉM~EE{t&@E0>-Eπ}tmMI M}}؋EE}؋Eă9EU܋MԋTE҉U}G uED$ "D$ED$U$Id`D$E$BE؋Ml[^_]Ã}cFg@&US^G×$eE1hElEpfEED$ D$rD$E$$@Ee3u$[]?U(]Fuu $u$ Ut$T$$ =]u]Í&'US$EED$E nFçD$E$<$[]ÐU]ÍUWVutC1҃ƒ>Et }1u&E r} ^_]ú<Ǎt&t(} atG+} ^_]ftM rA+} ^_]ËE w UEP E ]DÍ&'UE u]ËtEfx y J1]Áb1]É'UUE tCt=R taHt@+H]t rHuu&]ÍHw]Í&'U1]É'U1]É'U]ÍUE tt@]Ðt&]É'UE tt@] Ðt&]É'UE t tH]Í&U]Ít&'UE ]@ ÍvUVUu t!tBu^]É^]Í&UVSUzCó []Í&'USM @tHtB@t*Plt#ED$L$D$ E$҃[]f[] []Í&'USM @At=t7@tPhtL$E$҃[]Ð_[]I []Ít&USM ?Ѥt:t4@tPdtL$E$҃[]Ð1[] 1[]Ív'USM (?at=t7@tP`tL$E$҃[]Ð[]i []Ít&USM >t:t4@tP\tL$E$҃[]Ð1[] 1[]Ív'UE ]uu}8;>tW tNt4G(t9v G(wU H]u}]ËG(t P;Wt+u빉D$E$n3롋W8 uމڍv'U}} ]u=٢7N t+EFE|$$H]u}]ËE|$$2č&'UE ]u3=l0V tF+F ]u]ÉD$E$2ߍU}} ]u<7N t1B tF+F]u}]ËE|$$B2ҍv'UE ]u<ü0V t F]u]ÉD$E$1 USE81wD$E$'$[]ÍUS1G$8T$$ (U1҉(E ]u}80G,tuO tYD$G($&G G,G(D$WƋGT$ U D$D$E$ G GGM `]Ћu}]Ít&UE ]uu}0A|Px@,1xu]Ћu}]Ít&M 4$L$$EED$ED$h"uE%=u|E+B?|y?1||$ t$AQ$T$D(D$ D$$uD$)ƉNjET$t$D$((|B(wHM xxxP|1ҋA(q,AA)A(A A|1@ $?|JD$D$4$w%vU 4$D$|AQm@ 8v(G t8@ED$ D$4$%D$|$4$ ED$ D$|$4$,뷋U xxH|@ @BXD$4$$&U]E6-o}} u$|$E7V tF$9t$}%F FF`E]u}]Ít&'UWVS } ,tWuLG t=G~FW 1&DtD$E$W 9wމ$$<$$ [^_]ËW UE ]u3,l0N t F ]u]ËV t?F $V F T$D$$8F tF FF]u]F 븍F$F F fU}} ]u+ِ7F tF u-F0F E|$$/ F tF FFt']u}]ËF0F F FFu&E|$$ US+G$@@@ []ÐUWVS*} 7t. t&@tuƃ[^_]É$wD$D$E$EtċEƃ븐t&U1WVSU 4*mE BEEEE D$E$~a;E~u~}E )D$E$Et$D$E$|$ ED$E D$E$)uutEt~MkE+E[^_]ËuƉI܍t&B 1[^_]ËE D$E$ut&떍&'U(uu ](}}t4t.Ht+Et$<$D$ ED$]u}]1t$<$,ǍU(U ]Ms(ìuu҉}}tLtF@t)@,t"L$ t$T$<$Ћ]u}]Ít&L$ t$T$<$ ǐ&US''$$UT$UD$ T$$uU$[]Ív'U(E ]'ÿuuD$E}$9~1~&D$ ED$E D$E$'%Љ9}uf]u}]ÐE)t$ D$E D$E$SxDžt&uU(uu ]&}}t$<$Ex $guVt D$<$.щ!ȃt EPHEt$<$D$ED$ ED$)]u}]ËH럍'U1ɉSE &O@ P t $[]ÍUE ]u}%@ x t <$u0<$ht!|$$e19u]Ћu}]úꐍt&USE h%á@ $[]Ð&USE 8%q@ $[]Ð&USE %A@ $[]Ð&USE $@ $[]Ð&USE $@ $"[]Ð&USEUu$îD$ ET$D$E @ $}[]ÍvUWVS<$uU U@ D$$D$ ED$b y#8uE t$뫃[^_]Ít&'UWVSE #x E%}o(8ucE }tQ|$ ED$D$U$E}u<$5tE8tE[^_]É<$tËUEE[^_]É$r&'USE "tt@ t$[]; []ÍUSE D$ D$D$n"ç@ $[]U(}} ]UuM:"s@ p t"]Ћu}]ÍvET$L$4$D$ ]!кtˋ1ҁ`UWVS U !x t&EU<$D$T$y4#uE tˉ$' t U H [^_]ÍUWV1S U D!}x @% =t [^_]É$ED$U<$T$}u2E tu}tU HQ뒃 tU H [^_]Ív'U1U ]M úuuttL$T$4$j]u]É4$T$]u]ÍU8]}׉up Ru1]u}]Í&pP4tB t7@E0tǀ?rtD$4$,t);Esr렍ED$ "D$T$ $붍&U(]yò}}u<$6t$ D$?D$at$ <$D$SD$A]u}]U] Buu}D$4$mD$]4$NjE D$l 4$D$|$4$D$]u}] UWVSŃ,}u <$Et&D$D$<$@EE@P ED$ D$D$<$҉ƋE<$D$E܉D$PE܉t$<$D$=E@<$D$k <$D$E܉D$Et;E@t @FEE@Trt&E܃,[^_]Ðt&Uuu ]}}MÆF9F|&V FtI=wYD$$F FFEV ztG]u}]=w$F 빋$ 'UWVSE ߁EtyE$wM EA~a1t&E 4P 1L2tEL$MD$ $gM Q D$ 2MD$E $D$AE 9xE[^_]Ív'U8]/u}}eE1$E ?uPtvEe3C]u}]D$D$A$/?t&?~$ pP p@,T$4$D$ D$|$T$$! t€tv?҃)L$t$$t&X;\`;d{$t 8ǃ?f낍H&UU]u11jw%44t$T$$]u]Ít&'U}} ]u @ p tX4$~ `1]u}]É$@4$t8uE tӸ 뭍&'USM8q~w%T$L$$[]Ð&US"~J EB $ []Ðt&UWVSU }t<@t@DtT$U$Љǃ[^_]1[^_]ËE1 Et׋uEEvtt$U$< 9uuڋE붍T$$ o&'USE}MU ~!D$ ET$ $D$[]Ít&T$ $[]Í&'U(E ]vï|uuD$E}}$bEt$|$ D$E D$E$]u}]USE Q|D$E$1[]Ít&UE ]u}|Epx@% = t)MQ tA)Љ׉]u}]ËM EL$$U M $D$ƋE׉pP뢍t&'U(]E F{Uuu}}D$$2t ]u}]ËU `Et$|$ D$D$E$uËU E2$t$}F1V UWVSE zuJ ׅBh0uuB E1EG G 9GuE Gw +G );u~uM9MsM;Eru)΁JtGt$U$T$M)uuuw9MuE D$U$G G 9GoM L$E$u]M uB ux[^_]ÉE9ƉErt&E;uEMy uE D$U$BuM uuB 1[^_]ËE D$U$ [^_]ÉD$U$ M KfU(}} ]ux7F t:F t4E|$D$ ED$E$k‹]Ћu}]ÍF,uF uF0t)F 벍E|$$e1҅uF uЋE|$$F F0t&UWVSE ?xB @B 1B uE9ƉEsxt&O O JG;Ovf;us=G9v6 u܍P9rK @ WE B tȉD$E$r9uvE 뒋E B uI+E[^_]ËE D$E$<ȋED$ ED$E D$E$[^_]ËE D$E$룋E D$E$|E &'UWVS,E v8}GtyW UfG9s'M)D$ t$|$ $~ ƋG9rE+uwW8uE|$$.tU HEƩuNEUB BBM `ttE|$$uU,[^_]ËM EL$$^OƉ)GW;OGWst+?t&T$ UD$D$|$$7tO))OW1녋M E9$|$MAQEfU]E&_u}} u7|$$EF t V,uF0E]u}]ËE|$$tEfUSM tB(t B(EL$$-[]ÍvU}} ]upétp 4$r$~yd;0tk;0tN;0tDE|$$)NjEF84$>1҅tE]Ћu}]ËE|$$1ډ4$L 뼍t&'U(E]suuD$E}} t$D$ E|$$CEtJD$E$YEt 4$ED$E$E$EH E]u}]ÍvUWVS } stStM|$ƋE$E`PtR@u:`6tuߋU [^_] [^_]Ét$E$ҺtŐU]EF r}} u$|$E7V tF$9t$F FF`E]u}]Ít&'U]E q}} u7|$$EF0tF F0FFE|$$ ]u} E]fUSU X ÑqMt6t0@t@@tT$ $Ѓ[]ÐT$ $[] []Ð&UWVS E q EtLuE9t+t@%=uEt$$9uՋEEu [^_]Í&U(]E f ßpUu}0$D$VU @ F F FF>4$Et$$Ut$$ EF }9UF T$U$T$EE+}t$D$E|$ $}~ ~U 1ҁH]Ћu}]ËUt$$5Et$$N{fU H뮋E$F UD$ Ft$$D$D^EUt$$fhEt$$DžwU H"U ET$$Ov'U]EV Ïnuu }>t$$Fu"G t*1@ uEt$$‹]Ћu}]ËEt$$tڍt&Uuu]E n}} x;w|t7]u}]ÍvG @t$D$$%G ɍ|D$E$t&U(uu]}} MÆm tF|$D$ 4$D$<|$GD$$]u}]f4$ U(}}]u mW@ W@W q )tU2@ t+D$$&w F]u}]D$ "D$D$<$Eȍv'UWVSuED$<$wƋU܉|$$6t$$ztEEU܉D$ 4D$|$$D$atp UJE;&USMWt49Pu!9PtuD$ $![]Ë@ []Í&'UWVSLU E}(péVuŰUEЋEUeU1҅EȋE0tueM,~:@ EĀ8#EċE$$D$E D$ƅN1Ue3QL[^_]Ë@ XEԋB U؉$ѳ$E؋Uċp E$D$1t$D$Eԉ$U؋r tB $艳$1nD$ED$ "D$$-‹EĀ8#Eĉ$D$E%^ED$Eĉ$UT$ƋEȉ$Ủ|$t$ T$D$EЉ$U܋P $ϲ$wEĀ8IuQEd0JD$ED$ "D$$AEUčED$$4$ED$Xƅ.t}UEȉT$$訿U|$T$ UЉD$Ẻ$D$7p 4$$0듋0뉋UЉ$EЉ$qfU(]yòSuu }$'M1҅ɉEtGtS>tNM $w4D$t$ T$D$E$btMH ]Ћu}]ÐE$$[t$lj$t $zXt$<$uݍUt$<$ulj<$1f{t&'UWVSu(fßR}tt @ E,~M?#<$E$E } t,E0@ U$T$U $T$EE1?IDžE $EMH ?at[^_]Ãtt&t$D$D$D$ U$[^_]Ë@t$U$P@E$dt&ED$E$¼|$ D$E t$D$U$T/KD$ "D$D$E$1[^_]UWVSG(t G(>G@W @ MWw 9EEEE"BGJEmUtFWw 9vD$E D$E$ϸ$[]Ðt&Uuu]3l> t ]u]É4$5 U(]">uu $蚬u$Ut$T$$]u]Í&'Uuu]ü= t ]u]É4$腵 UWVSt8GEEtPBu"ƋuE}?~E>uȃ[^_]ËBD$$藘Et$$Et$$I뚃Eu둍v'UWVSEu 8ǀ U T$ D$E$访U ED$ $D$茿U $Et$D$$җ?}tLuUt&tEUD$t$D$ $]9uՋ}?}u[^_]ÐU(}} ]7upE|$D$$)tAv(t:U$U|$T$UD$ET$ $֋]u}]Ít&U$yU|$T$UD$ET$ $f蟕 1v뭐UE]Ð&UE]Ðt&UE]Ðt&UE] Ðt&UE]Ðt&UE]Ðt&UE]Ðt&UE]Ðt&UE] Ðt&UE]$Ðt&UE](Ðt&UE],Ðt&UE]0Ðt&UE]4Ðt&UE]8Ðt&UE]<Ðt&UE]@Ðt&UE]DÐt&UE]HÐt&UE]LÐt&UE]PÐt&UE]TÐt&UE]XÐt&UE]\Ðt&UE]`Ðt&UE]ÍvUE] ÍvUE]$ÍvUE](ÍvUE]8ÍvUE]<ÍvUE]@ÍvUE]DÍvUE]HÍvUE]LÍvUE]PÍvUE]TÍvUE]XÍvUE]\ÍvUE]`ÍvUE]dÍvUE]hÍvUE]lÍvUE]pÍvUE]tÍvUE]xÍvUE]|ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]<ÍvUE]@ÍvUE]DÍvUE]HÍvUE]LÍvUE]PÍvUE]TÍvUE]XÍvUE]\ÍvUE]`ÍvUE]dÍvUE]hÍvUE]lÍvUE]pÍvUE]tÍvUE]xÍvUE]|ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE] ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE] ÍvUE]$ÍvUE](ÍvUE],ÍvUE]0ÍvUE]4ÍvUE]8ÍvUE]<ÍvUE]@ÍvUE]DÍvUE]HÍvUE]LÍvUE]PÍvUE]TÍvUE]XÍvUE]\ÍvUE]`ÍvUE]dÍvUE]hÍvUE]lÍvUE]pÍvUE]tÍvUE]xÍvUE]|ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE] ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE] ÍvUE]$ÍvUE](ÍvUE],ÍvUE]0ÍvUE]4ÍvUE]8ÍvUE]<ÍvUE]@ÍvUE]DÍvUE]HÍvUE]LÍvUE]PÍvUE]TÍvUE]XÍvUE]\ÍvUE]`ÍvUE]dÍvUE]hÍvUE]lÍvUE]pÍvUE]tÍvUE]xÍvUE]|ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE] ÍvUE]$ÍvUE](ÍvUE],ÍvUE]0ÍvUE]4ÍvUE]8ÍvUE]9ÍvUE]<ÍvUE]@ÍvUE]DÍvUE]XÍvUE]\ÍvUE]`ÍvUE]dÍvUE]hÍvUE]lÍvUE]pÍvUE]tÍvUE]xÍvUE]|ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE] ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE] ÍvUE]$ÍvUE](ÍvUE],ÍvUE]0ÍvUE]4ÍvUE]8ÍvUE]<ÍvUE]PÍvUE]dÍvUE]hÍvUE]lÍvUE]pÍvUE]tÍvUE]xÍvUE]|ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE] ÍvUE]ÍvUE]ÍvUE]ÍvUE]ÍvUE] ÍvUE]$ÍvUE](ÍvUE],ÍvUE]0ÍvUE]4ÍvUE]8ÍvUE]<ÍvUE]HÍvUE]LÍvUE]PÍvUE]TÍvUE]XÍvUE]\ÍvUE]`ÍvUE]dÍvUE]hÍvUE]lÍvUE]mÍvUE]p ÍvUE]t ÍvUE]x ÍvUE]| ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE] ÍvUE]$ ÍvUE]( ÍvUE], ÍvUE]0 ÍvUE]4 ÍvUE]8 ÍvUE]< ÍvUE]@ ÍvUE]D ÍvUE]H ÍvUE]L ÍvUE]P ÍvUE]T ÍvUE]X ÍvUE]\ ÍvUE]` ÍvUE]d ÍvUE]h ÍvUE]l ÍvUE]p ÍvUE]t ÍvU]Ív'U]Ív'U]<Ív'{U]Ív'[U]tÍv'p;U]Ív'PU]Ív'0U]Ív'U]Ív'U]Ív'U]Ív'{U]Ív'[U]Ív'p;U]ÐPUE فXv?فw }E fEm]mEÐt&ɸÍ&فv}E fEm}mEvɸ1f{UE ف\wBفwفXw1}E fEm}mEɸفw}E fEm]mEɸÍUE ف\wBفwفXw1}E fEm}mEɸفw}E fEm]mEɸÍp;UE فXv?فw }E fEm]mEÐt&ɸÍ&فv}E fEm}mEvɸ1fU]ف`Ív'UVS;tEtHكXt=1ɅxIكك( t҅t1uلu[^]z[^]ك([^]t묍U8uu]}蠲 p9p@tMA @EU MU9UUscfU9Usu؀>.t 1]u}]ÐE E֍U ыu 6u뵐t&nu9ɉuE U떍t&ED$ D$L$4$艰IUWVSlu U聱úEUȉu]E4$EDE t&uu< t< t< t< t< ft<+<-EEED$ED$ ED$E D$E$ܖ‹EEu1RP,$0[^]E0[^]Í&'UWVS,EMӣ } MuS1EuM1EE؃,[^_]4D$D$U$D$M $LD$D$ D$E$辂+u fE؅xeƒ0 E;;D$M $\u*E1RP,$]E+u ED$D$E$1뷍t&'U1VS0u%^>EED$ED$ ED$E D$E$EED$ED$ ED$E D$E$|‹EEu1RP,$0[^]E0[^]ÐUWVS,uOU‰U$Nj1҉MEEEE EU+UEUT$UD$$jt!9Ew9E<$DED$>u<$1ޔU,[^_]ËU${UuT9UUoEP8E1뭐U(] Bu։}ED$=$itjD$.$itD$ $itxtD$Et$$ؒt&)ED$GD$4$lE]u}]fUWVSEU PÉEeE1҉|'Et|4$T$謖E4$r|ET$$]‹EU|8C|*UuD$dD$4$nhD$d4$Ǎ0D$Rh))9!ЋUEe3uČ[^_]f|zkOUt"$bEǀUƂǂǂu詒3D$E$ؐt&UW1VS芙 tE싃E"&uOUEt1Upt豉UEuσ [^_]KpU맍t&'U]"uu^t/t)8.t8 tXD$T$4$j]u]dž ]u]Àxu‹ 4$D$^dž 뾍4$D$D$P ]u]ÍUuu]#\u,$D$+zƆƆ4$5s]u]Í&Uuu]×u,D$$yƆƆ4$r]u]Í&U}} ]cÜuUtE 4$D$Ӓta4$觏U ET$$蕐‹EUE 8Ct9u *UƂ$r]u}]ËU zt뷋U$ Eǀƀƀ UWVSlå\I$.|dEЍR$kdEԍa$Zdt$$EGxt$$/xEtD$E$fEljt$$xEOUȋET$$3Eȉt$$wtUD$$ }E} uUt x >E$脍$D$^Ut x E$N@"D$"$]EЅUt x E$‹EЉt$|$$D$ lD$p]EԅwuԿ"E"Ut x E$褌‹E$|$t$ D$D$]҉UEEURE҉Uu}uۋutɋUD$=$atUt x E$FD$E$)ƉD$ t$D$T\aE؅)uؿ"E"Ut x E$胋‹E$|$t$ D$D$[Ut x ^E$>xD$$[D$$u)Et=Ut x E$؊D$$T[ED$$tU$D$D$$tD$E$ŋD$$E^tU$D$蟋E${UD$ D$t$$赉EUƂ $_1҅EtED$E$u‹E, <$Uȉ$ Ẻ$Eă\[^_]EE1҅t1U؉D$ED$ T$$t.UD$ D$|$$ވEԅtUUԉD$ED$ T$$覈iUԉD$ED$ T$$z„iD$ED$ t$$G„@ @,P$,@ @UP$UC@ @P$@ @pP$p^@ @oP$o]@ @P$E|$$jUȋET$$\ŰET$$薈E>iD$ED$ |$$ .iU؉D$ED$ T$$ۆE u1Y$]gD$ D$ D$$m`?1EUt x E$諆D$$'WE)fE(ff(f)U9)fE(@ @@P$@.@ @2P$2 @ @=P$=+'USE 蘍D$E$ ~[]ÐUWVS,gàUMB tcBE:E1t.vҍDBЉtU0uEA)B,[^_]ËUED$ D$4$T$녉'UWVS rER誌HЍB< w"v #҃LBB< v [^_]ÍD$E$蔃UWVS}C|9ʉErY<(ts<[&t~9vF< t< t< t< t< ft8tq<#u9fv: tω t&: t9uM‰D$D$ $E$)UP낋E$]?Pi[^_]BÍUWVS\EĉU2z^×b 9r>J&< t8< t4< t0< ft*<#tA,EE@ t19v< uă9wM11\[^_]À> t9wfUD$*$tMmA A t&D$EĉT$ D$*$k|҃}(9uM!BЉ< *[PMAA;}vLU< tp< tl< th< td< ft^<#E;}vM9 u CvE8 t8E;}wEMHUUEB뇍ExE荓U$EȉD$WED$*$ątPEtGUmB uMȋUD$L$MD$* $D$ D$jEM9}MAAB< v;*t6[t1EpE$)uUzcB p4UmB uMĉD$,D$ $MUEăEE@-Dd؁^@  D! $ nƅJ ,J & DZȀJt܋, ,@D t$T$)D$ $D$hK,4$r|$D<$@q@ @ =88@DD$PPD$ D$L$<$Jٽ  % fJ٭J٭ ݝuكQ&݅ٽJJ% f ٭ ٭J9ݝ݅؋ٽ܅ f٭ߝ٭Ȁݕb)֋DT$@eD$t$ T$ $I@1ҋ@҉8)փ ?~=&@ DD$D$ |$D$$UI ̉|$@DD$D$ L$<$&IDrD$4$So<<<48D$D$@h8u94u땍N<1J@ ȋ<@DD$D$ T$L$$@9 P* @ uD$D$>DžF1@ @4P9P DD$,$k@<D$ 4D$BD$D$H@+9BP$ @ dD$D$A=RV7<1H@ <@DD$D$ T$L$${?9OP& @ uD$D$<땉@>V<1H@ <@DD$D$ T$L$$>9PM @ uD$D$ <땍~L1J@ fL@DD$D$ T$L$$D>9P @ uD$D$v;딅t@1ҋ8GZFJ81H@ 8@DD$D$ T$L$$=9bP @ uD$D$0I땍N@1H@ @@DD$D$ T$L$$<9P @ uD$D$H땍~(,1H@@ٝ,DD$D$ T$L$$l<9@P@ uD$D$f땋PQB @D\@ VA8A@9G9GID89։0~11҃TH8u:&B<vL\ ;8r \B<w \ 믍B<vI\ ;8z\B<w\  벍F'N1J@ fN@DD$D$ T$L$$i:9=PF@ uD$D$ F딋PB  @DX @NB8B@8G9G D89։0~11҃TB8u rv010;8JnXD t΀t뿋010;8BXT9 t4ōVKN1J@ fN@DD$D$ T$L$$89aP@ uD$D$/D딍~41H@ 4@DD$D$ T$L$$79P?@ uD$D$.5땍N'1D@@ݝDD$D$ T$L$$k79tCP@ uD$D$a뙋DD$<$Bt&)81801Ɉ0bF%= D$DD$ t$$7G@DT$L$$V@ @ 8=8@D$D$ PPD$D|$$68888Zl8888288A888888H8888|883888888n88'88x880D\D$D$ $B01Ɉ0cD D$ D$t$<$G`8t00@P09w9‰0sb8t'TBщ00@P099‰0sD)t$D D$ D$4$N_DD$$\DD$D$$ ADž811?Dt$D D$ "D$4$^D@D$4$VDD$$['DD$D$ $U@D$D$t9dsOẼЉ)09drMM9M 0uF >v80tU0D$T$ $Cu04t$<$ 41ɉmS0D$<$<2UDž@U0D$ D$$7M0D$ L$<$ƉD$t!E<$D$F BEudkE}D$0D$ |$$?9d"M1ҋE8Dѽ8;UufuEu7UEUW}}4D$ $L$L$4ɉMKuu1"ѽ8809uFu֋EE8ʋ4D$ $L$L$4 u}D99w*t t t vt t u9v@PE0$+0p D$D$$ Dž88t08p 8t08p 8t08p 8t08p 8t08p 8 t08p 8@t08p 8y08p 88{Dž\!0ED$ D$t$$j6uddUUyM1M)ȃE0D$ $o.}0D$ "D$|$$50D$<$-.0@D$ $.D$0$-'U 1WV}ԃ@uE UD$EԋE4$E؋EEED$E@^_]Í&'UWVSL}F6UԍPUpG@E؀t#EtEt <$WEF @EE܋E@ ‹@EEUEЋEŨEԃ}҃@ tfp@uUt& T$ỦL$ <$D$EEЉD$E܉D$ Eu GL[^_]f1묍ED$ED$ "<$D$4K&ED$ "D$t$<$3E'U 1WV}ԃ@uE UD$EԋE4$E؋E(EED$E%@^_]ÐUEUD$E $D$ ÍUuu}} ET$$T$ u9wu}]Uuu}} ET$$T$ t؋u}]Í9wu}]Ít&'UE ]uu}3Ƙ@ t.F x t?@ 9Ǻ|Ћ]Ћu}]ÉD$E$F uƐt&Et$$ U8E ]uu}}P20t2@FuG%=tg]؉t$<$.E*tID$<$-Ft@w1]u}]Í@ ҋ@ rظэt&UVS=2v uD$ D$4$$D$L@ @ t;`@ t-E4$D$D$ ED$E D$҃ [^]Ít&p~ː&UVS1 uD$ D$4$$D$@ @ t;`@ t-E4$D$D$ ED$E D$҃ [^]Ít&p~ː&UWVSEUM 1FEЋB@A@A 4q )ǃD8}EQBtW:}zRUthUB)~=UAQMAEEļ[^_]ËE$8/MQD$ t$t$$맋E$(EXD$U$E@} ED$ ED$D$D$E$'Eg @ t/t'0:u1:BuE2:BtEMH( @$UXM@($D$ UP(BMA$;A( EP$H MA D!Q$U@@@AEPMǁXp1ҋ@tpD$@ $D$D%‰UEEE}Uj@MЋ Mfy}@EEf@/UB+E9E7 E}E~f1D$ t$ED$U$_1҅tMЉ9uűEE MMЍ~EE)MEhEu UċEEE~@u$v`EXHEtMuуmuMtMEB}}XEω4D$<$[G0G4<$ƀH5AA@Uz )}}UЉP}W @G@ЉE}U\;EE`D$M $AEdD$E$*D$ D$D$U$EM`gD$ D$D$ $UdE䉂\M`@ $D$Ud@ $D$MF;F FMB4rFpFA@+A<FAFALF <FF}x?FEF U@t&  )9u݋u9t$GE L[^_]Åt::No code specified for -e-P-Suse Config;print Config::myconfig(),\n \n"," Built under %s\n"09:08:37Dec 4 2007," Compiled at %s %s\n"Config::config_vars(qw%c%s%c)/dev/nullversionhelpPERL5OPTDIMUdmtwPERL5LIBPERLLIB/etc/perl/usr/local/lib/perl/5.8.8/usr/local/share/perl/5.8.8/usr/lib/perl5/usr/share/perl5/usr/lib/perl/5.8/usr/share/perl/5.8/usr/local/lib/site_perl/dev/fd/cc -E-C%s -ne%s%s%s %s | %_ %s %_ %sprogram input from stdinCan't open /dev/null: %s -xPERLCan't chdir to %s:utf8PENPERL_SIGNALSunsafePERL_SIGNALS illegal: "%s"%s had compilation errors. PERL_HASH_SEED_DEBUGHASH_SEED = %lu NoNe SuChScalars leaked: %ld /bin/sh -perl.cNo %s allowed with (suid) fdscriptRecompile perl with -DDEBUGGING to use -D switch (did you mean -d ?) Usage: %s [switches] [--] [programfile] [arguments]-0[octal] specify record separator (\0, if no argument)Module name required with -%c option"-%c" is on the #! line, it must also be used on the command line%s This is perl, v%vd built for %s Copyright 1987-2006, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using "man perl" or "perldoc perl". If you have access to the Internet, point your browser at http://www.perl.org/, the Perl Home Page. Can't emulate -%.1s on #! lineBEGIN failed--compilation abortedSetuid/gid script is writable by worldYOU HAVEN'T DISABLED SET-ID SCRIPTS IN THE KERNEL YET! FIX YOUR KERNEL, OR PUT A C WRAPPER AROUND THIS SCRIPT! Setuid script name may not begin with dash Can't change argv to have fd script Can't do setuid (cannot exec sperl) Effective UID cannot exec script "\nCharacteristics of this binary (from libperl): \n"," Compile-time options: MULTIPLICITY PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP THREADS_HAVE_PIDS USE_ITHREADS USE_LARGE_FILES USE_PERLIO USE_REENTRANT_API; $"="\n "; @env = map { "$_=\"$ENV{$_}\"" } sort grep {/^PERL/} keys %ENV; print " \%ENV:\n @env\n" if @env;print " \@INC:\n @INC\n";Unrecognized switch: -%s (-h will show valid options)Illegal switch in PERL5OPT: -%cWrong syntax (suid) fd script name "%s" Missing (suid) fd script name Can't run with cpp -P with CPPSTDIN undefined(1../^#!.*perl/i)|/^\s*#(?!\s*((ifn?|un)def|(el|end)?if|define|include|else|error|pragma)\b)/||!($|=1)||print/^\s*#(?!\s*((ifn?|un)def|(el|end)?if|define|include|else|error|pragma)\b)/||!($|=1)||printCan't open perl script "%s": %s Can't ignore signal CHLD, forcing to defaultNo Perl script found in input Execution of %s aborted due to compilation errors. Unbalanced scopes: %ld more ENTERs than LEAVEs Unbalanced saves: %ld more saves than restores Unbalanced tmps: %ld more allocs than frees Unbalanced context: %ld more PUSHes than POPs Unbalanced string table refcount: (%ld) for "%s"panic: pthread_key_create failed panic: pthread_setspecific (%d) [%s:%d]panic: MUTEX_INIT (%d) [%s:%d]-a autosplit mode with -n or -p (splits $_ into @F)-C[number/list] enables the listed Unicode features-c check syntax only (runs BEGIN and CHECK blocks)-d[:debugger] run program under debugger-D[number/list] set debugging flags (argument is a bit mask or alphabets)-e program one line of program (several -e's allowed, omit programfile)-f don't do $sitelib/sitecustomize.pl at startup-F/pattern/ split() pattern for -a switch (//'s are optional)-i[extension] edit <> files in place (makes backup if extension supplied)-Idirectory specify @INC/#include directory (several -I's allowed)-l[octal] enable line ending processing, specifies line terminator-[mM][-]module execute "use/no module..." before executing program-n assume "while (<>) { ... }" loop around program-p assume loop like -n but print line also, like sed-P run program through C preprocessor before compilation-s enable rudimentary parsing for switches after programfile-S look for programfile using PATH environment variable-t enable tainting warnings-T enable tainting checks-u dump core after parsing program-U allow unsafe operations-v print version, subversion (includes VERY IMPORTANT perl info)-V[:variable] print configuration summary (or a single Config.pm variable)-w enable many useful warnings (RECOMMENDED)-W enable all warnings-x[directory] strip off text before #!perl line and perhaps cd to directory-X disable all warnings)խխW@jt-BkAV o@:utf8:utf8:utf8:utf82A8 FVERLOADTF8LOCALEARNING_BITShas no overloaded magicin overloaded package left /lib/Bad symbol for hashBad symbol for arraySIGARGVOUT (Did you mean &%s instead?) Had to create %s unexpectedlyXPORTAnyDBM_File::ISANDBM_FileDB_FileGDBM_FileSDBM_FileODBM_FileNCODINGUse of $%s is deprecated%8.6f%s::_GEN_%ldFileHandle::IO::Handle::Bad symbol for filehandleUNIVERSALCannot create %s::ISA%s::SUPERunimportErrnoTIEHASHniloverloadStub found while resolvingCan't resolve<&&&&&/''&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&t&&5&&5&5&5&5&&5&5&&&5&&5&5&5&&&5&5&&5&5&&&&&&&&&&5&&5&&5&5&5&5&5&5&5&5&5&5&5&&5&5&5&5&5&5&5&5&5&5&5&5&5&5&5&&&&&&&&&&&&&&&&&&&&&&&&&&&&5&5&5&5&&5&&&&&&&&&&&&&&&&&&&&&&&&&&&&5&&5&//00400++//00400M0+00e3~3j4e36C6e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e3e6e34;5e3e3e3e3e3e3e3e3e3e345+++++p/p/GNDDDDDDDDDtTDDDDnMTDTDDDDDDDDDDDDDDDDDDDDDDDDDPPPPPPPPPDDDDDDDQDDDzQDDDQDDDDDNDDD ODDhNDMDMMMMDMMDDMDMMMDDMMDUMDDDDDDDDDVD^VDMWWMM^VVMTMMDMMMMMMMMMeUUMMM!WDDDDDDDDDDDDDDDDDDDDDDDDDDDMMWWMDWDDDDDDDDDDDDDDDDDDDDDDDDDDDXDMAUTOLOAD, right argument in overloaded package Operation "%s": no method found,%sargument %s%s%s%sCopy method did not return a reference, right argument has no overloaded magicAttempt to free unreferenced glob pointers, Perl interpreter: 0x%pName "%s::%s" used only once: possible typoVariable "%c%s" is not importedGlobal symbol "%s%s" requires explicit package nameBad symbol for filehandle (GV is unique)Can't use anonymous symbol table for method lookupRecursive inheritance detected while looking for method '%s' in package '%s'Can't locate package %_ for @%s::ISAUse of inherited AUTOLOAD for non-method %s::%.*s() is deprecatedCan't use %%! because Errno.pm is not available%s method "%.256s" overloading "%s" in package "%.256s"elseif should be elsifnext token ???within patternwithin stringnext char ^%c\%03oat EOFat end of line at %s line %ld, %_%s has too many errors. near "%.*s" Use of %s is deprecatedcomma-less variable listcharnamesConstant(%s) unknown: %s} is not definedConstant(%s): %s%s%sPropagatedCall to &{$^H{panic: scan_numMisplaced _ in numberIllegal octal digit '%c'Illegal binary digit '%c'Integer overflow in %s number%s number > %s non-portableinteger+-0123456789_float;|})]oaiuw!=No comma allowed after %s([{< )]}> )]}>Search pattern not terminatediomsxiogcmsx[\]^_?[...][#!%*<>()-=])} =wds]rnftbxcavaA01! zZ79~L\uU\lpanic: yylexqr:'{$+-()| \%c better written as $%clLuUEQMissing right brace on \x{}Missing right brace on \N{}\N{...}Missing braces on \N{}qqUnrecognized character \x%02XFormat not terminatedLINE: while (<>) {chomp;our @F=split(%s);our @F=split(qour @F=split(' ');;}continue{print;}=cutperl -indirCan't exec %sToo late for "-%.*s" optionpanic: input overflowuniquelvaluelockedUnterminated attribute listsyntax errorUnmatched right curly bracket+-*/%.^&|<Reversed %c= operatorbare << to mean <<""Excessively long <> operatorUnterminated <> operatorGlob not terminatedreadline{$:+-Array lengthScalarFinal $ should be \$ or $nameYou need to quote "%s"$@"'`q&*<%Array $#+-'"studyNumberStringBackticksBackslashmsyqqwxrCOREThread.pmqualify as such or use &Bad name after %s%sBareword__ANON__::__ANON__%s::DATA:encoding(%_)CORE::%s is not a keywordmyourMissing $ on loop variable__PACKAGE__No such class %.1000s|&*+-=!?:.<> should be quoteseval { };subroutine namesort is now a reserved wordMissing name in "my sub"Prototype not terminated$@%*;[]&\do ;0377777777770xffffffffBinaryOctalHexadecimaloctalhexadecimalv v$vnannno8oooop@```0a`aaaa&bubbc`cccd:d]dddfddMeef;hg hbffxggErhrrsCssssrtujuuwxQxtxxy`yyy*zzz{~0|S|||}t~RR S,SOSrSSSS1TTTTU@UUUV#VFViVVVVGWjWW)XLXoXXX__~@E_:_]__t]]]]&^u^^^0Y`YYY3ZZZ [U[x[[[\E\]+]eCCCC D:DoDDAA=?;;*?*???PXXXXXXXXA-B'7777777777t77{77777777777777)577?I7U_iu77?@@ @0@Number too longIdentifier too longUse of /c modifier is meaningless without /gUse of /c modifier is meaningless in s///Integer overflow in decimal number (Might be a runaway multi-line %c%c string starting on line %ld) (possibly a missing "use charnames ...")}} did not return a defined valueWarning: Use of "%s" without parentheses is ambiguous%s found where operator expected (Missing semicolon on previous line?) (Do you need to predeclare %.*s?) (Missing operator before %.*s?) %s (...) interpreted as functionCan't find string terminator %c%s%c anywhere before EOF;}continue{print or die qq(-p destination: $!\n);}Transliteration pattern not terminatedTransliteration replacement not terminatedSearch pattern not terminated or ternary operator parsed as search patternAmbiguous use of %c{%s%s} resolved to %c%s%sAmbiguous use of %c{%s} resolved to %c%sfilter_del can only delete in reverse order (currently)No package name allowed for variable %s in "our"Can't use "my %s" in sort comparisonPossible unintended interpolation of %s in stringBad evalled substitution pattern\.^$@AGZdDwWsSbBpPXC+*?|()-nrtfeaxz0123456789[{]} #Invalid range "%c-%c" in transliteration operatorAmbiguous range in transliteration operatorUnrecognized escape \%c passed throughMissing control char name in \cpanic: constant overflowed allocated spaceMissing right curly or square bracketBEGIN { require 'perl5db.pl' }Unsupported script encoding UTF32-LEUnsupported script encoding UTF32-BEUnterminated attribute parameter in attribute listThe 'unique' attribute may only be applied to 'our' variablesInvalid separator character %c%c%c in attribute listUnmatched right square bracketDelimiter for here document is too longMultidimensional syntax %.*s not supportedScalar value %.*s better written as $%.*sCan't use \%c to mean $%c in expressiondump() better written as CORE::dump()Ambiguous call resolved as CORE::%s(), %sBareword "%s" refers to nonexistent packageAmbiguous use of -%s resolved as -&%s()Operator or semicolon missing before %c%sAmbiguous use of %c resolved as operator %c"no" not allowed in expressionPrecedence problem: open %.*s should be open(%.*s)Possible attempt to separate words with commasPossible attempt to put comments in qw() listSubstitution pattern not terminatedSubstitution replacement not terminatedIllegal character in prototype for %_ : %sIllegal declaration of anonymous subroutineIllegal declaration of subroutine %_"use" not allowed in expression0b11111111111111111111111111111111?zDABEGIN"do" to call subroutinesOut of memory for yacc stackD8Dl+**Ij| !V!!!'"9"a""*####\$$T%%A&A''''+(F(a(|((((((()*)=)O))))*/*A*S*f*x**<= =:=R=223Q3e333g4 556667I77 8j88R997::;;<[<,,,,,- +++FFOGt===>1>T>|>>>>>?$?V??&@@@0ArAA7BkBBBB0CaCCHHIyDDDE7E`EEEEEEE F]IpI 2GH5HWHyH2<2^2;IC-:888. 0/12FG99 4;EU|"wx 3=SW~{IYZe*+$)V}Abd^\?DC76TXPc]a_[H`Q !|))  .1HL9DzUljQQa\t44QtStkkk{kk4#>:tzoRQikkI=jAlDQ4Q!$}G2b-r ?jjBj4N>jjTc_$.)$(;;d6);)()]{,$];((;;([1):;)j?[)<=./;^(;5)(d),-i;);{ABCD](;){))[[{)-[,0(]({){{;{)':;st,?jklmno{{({;{(t;$%;(Y;:;{)]   (Rh@;;!$%&)(,*+-){;);)@(();*(;]] }*[!=[$%&](]*+$-,-),-*};{@}~,-,-[(]-(,-*[,-,-r),-!/0$%&((*+)-4,-),-:)){)}~;}}@,-;,-}T} !";),-,,-[{,-)/012345,-8}?;<=,-),-){,-;,-{,-~()     )){),-,-#$%&'()?{8).;<=,-,-;7)9:;)     ;)!#4,-4#$%&'()58.{;<=T79:5)8,;<= :; ?!"}#$%&'(58].;<=7!9:$%&()*+,-} !":;?@/0123458;<=[]!$%&()*+,-,- !":;?@~/0123458;<=   ]!!"$%&(*+-ghl458);;<=~@   |[ !"),-/0123458;<={~   !"#$%&'(,-./012345789:;<=   !"#$%&'(,-./012345789:;<=?  #$%&'(!.$%&(*+7-9:OPQS;@),n:;u[!y$%&(*+-]({@~./0!45$%&(*+-ABCD[ !"@)45,8;<={~:;[?!t$%&(*+- !"{]~@/0123458;<=[  {~#$%&'(.79: ,- #$%&'(.  79::?#$%&'(.79:  ,- /01234#$%&'(!.$%&(*+7-9:;@ !"!$%&()*+-12345[8;<=@ !"!$%&(*+-~2345[8;<=@!$%&()*+-~[] !"@/0123458;<=~ !"[!$%&()*+-3458;<=@~!" 45 8[;<=#$%&'(. ~ 79:#$%&'(.  79:#$%&'(.  79:#$%&'(!.$%&()*+7-9:  @#$%&'([!.$%&()*+7-9:@~),:;[!?$%&(*+- !"@]~0123458;<=[!$%&()*+-@~  [#$%&'(),.~79:; ! $%&()*+-]#$%&'(@.79: [ ,-/0123#$%&'(!~.$%&()*+7-9:  @#$%&'([!.$%&(*+7-9:@~[,  ~)#$%&'(.:;?79:]  ),#$%&'(.:;?79:  ]#$%&'(!?.)-709:3789:;?@),:;?f),] !":;,-?/0123458;<=]), !":;?,-/0123458;<=)], !":;?0123458;<=]),5 !":;,-?/0123458;<=),] !":;,-?/0123458;<=),]:;? !"]),,-/0123458:;;<=? !")],,-/0123458:;;<=? !"],-/0123458;<=), !":;?,-/0123458;<=] !"),,-/0123458:;;<=? !"]),,-/0123458:;;<=? !")],,-/0123458:;;<=?]),):; !":;?,-/0123458;<=]]),):; !":;?,-/0123458;<=]]), !":;,-?/0123458;<=),] !":;?,-/0123458;<=]), !",-:;?,-/0123458;<=]), !",-:;?,-/0123458;<=]), !":;?,-/0123458),] !":;?,-/0123458),]:;? !"),-,/012345]:;?),] !":;?,-/012345),]:;? !",-/012345]), !":;?,-/012345),] !":;,-?/012345), !"]:;?,-/012345),] !":;?,-/012345),] !":;?,-/01234),),]:;:;? ",-]/01234]),),:; ?:;?,-/0123),] ]:;?,-/0123),] :;?,-/0123),:;] ,-/0123] ,-/,-/0123,-/0123,-/012,-/01,-/,-GAyAo%(;1fXq<qA=<Ee>Kqq<xqZ{|@jEKkyCV\qlW'Xu~mKyr<]'>U)s@t>AC@B_\kBuv    &(HL"&<?+A-/'3Y^A`y*ay06892qqqq4q:qon<KKKKK}Jqq,qq,,,D,R,,N,ZKKOPQS,`FaF,MTbcd,fnpqyG{,,e5>%#(%#iPm^I,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,7AC5<D@?stz >B= 8 !"#$%&'()*+,-./01234,6,,,,,,9,:;hijl,,NN|NN~,7AC5<D@?ccNp,B,xc7cAC5<D@?cccc=Bjj8jj=j7xAC5<D@?j8B=,,,,,,,,,,,,,,,,,,,,, 8,,,,,,NNNN,N,,,wa !"NN#)*+,-./012346 !"#9:;5)*+,-./012346jjjjj9j:;jj} !"jj#jjjjjj)*+,-./0123476AC5<D@9?:;B7AC5<D@?=B7AC5<D@?8=B7AC5<D@?8=B8=7AC5<D@?B8 !"#=)*+,-./012346 !"8#9:;)*+,-./012346 !"#9:;)*+,-./012346 !"#9:;)*+,-./0123476AC5<D@9?:; !"#B)*+,-./01234=76AC5< D@9?:;B8llll=7lAC5<D@?Bl8=7AC5<,D@?B8 !"#=)*+,-./01234JJ689:;J !"7#AC5<.D@?)*+,-.J/01234B6lllll9l:; !"=#lllllll)*+,-./01234786AC5<7D@9?:; !"#B)*+,-./01234=76AC5<D@9?:;B8JJJJJ=J !"#8)*+,-./0123469:; !"#)*+,-./0123469:; !"#)*+,-./01234g6qv9:; K[LLLLLLBBBBBBRRRRRRLLLLLLLLLLLLLLLLLLLLLLLffBBBBOBBffBBBBOOOBBBBBBBBBBBBBfOyyyyyRRRRzRzRyRRRRzzzRRRRRRRRRRRRRzuuuuuufffffOOOOvOvOOOOOffvvvOOOOOOOOOOOOOvyyyyyyyyyyyyyyyyyyyyzzzzszszzzzzssszzzzzzzzzzttsuuuuttuutuuuuruuruuuuuuutrrrvvvvgvgvrvvvvgggvvvvvvvvvhhghhhhssssisisssssiiisssssssssttttttitttttttttttttrrrrrrrrrrrrrrrrrrrggggggggggggggggggghhhhhhhhhhhhhhhhhhkkiiiikkiikiiiiiiiiiiikmmnnmmmnnnppmnpppoopoooMMMMoMkkkkkkkkkkkkkkmmmmmmnnnnnnmmmmmmmnnnnnnpppppppppppooooooooMMMMMMM(? w + ] O gsK + *  G \ 3` g'{r ) #7[u" _;1[ w gwwwww     ++  !66''/7())---..**88:9%%%%%%%%;%&&222222222222233333333444445555550011111""###,$$$$%z A:gGRM h_rbg FwHIJKLMNO#Q$&zdRY[G!STUVW]Possible precedence problem on bitwise %c operatorinternal error: obsolete function save_hints() calledBareword "%_" not allowed while "strict subs" in useAssignment to both a list and a scalarType of arg %d to %s must be %s (not %s)Missing comma after first argument to %s functionCan't use bareword ("%s") as %s ref while "strict refs" in usepanic: MUTEX_UNLOCK (%d) [%s:%d]panic: MUTEX_LOCK (%d) [%s:%d]%_() called too early to check prototypeStatement unlikely to be reached (Maybe you meant system() when you said exec()?) No such pseudo-hash field "%s" in variable %s of type %sBad index while coercing array into hashUseless use of %s in void contextUseless use of sort in scalar contextpanic: unexpected lvalue entersub args: type/targ %ld:%lupanic: unexpected lvalue entersub entry via type/targ %ld:%luUnexpected constant lvalue entersub entry via type/targ %ld:%luCan't localize lexical variable %sFound = in conditional, should be ==Constant subroutine %s redefined'%s' trapped by operation maskMalformed prototype for %s: %_Using a hash as a reference is deprecatedUsing an array as a reference is deprecatedUseless use of %s with no valuesArray @%s missing the @ in argument %ld of %s()Hash %%%s missing the %% in argument %ld of %s()/%s/ should probably be written as "%s" (Maybe you should just omit the defined()?) %s argument is not a subroutine name%s argument is not a HASH or ARRAY element%s argument is not a HASH or ARRAY element or sliceBad symbol for form (GV is unique)Value of %s%s can be "0"; test with defined()Use of /g modifier is meaningless in splitApplying %s to %s will act on scalar(%s)Can't use %s for loop variableVersion number must be constant numberCan't define subroutine %s (GV is unique)Can't redefine unique subroutine %sCan't redefine active sort subroutine %sBEGIN not safe after errors--compilation abortedParentheses missing around "%s" listCan't declare class for non-scalar %s in "%s"NOT IMPL LINE %dToo many arguments for %sNot enough arguments for %sa SCALARan ARRAYa CODEa HASHConstant is not %s reference"my sub" not yet implementedPrototype mismatch: sub %_ (%_): none vs op.cFIELDSa constantdidsimplicit split to @_a variableoops: oopsHVoops: oopsAVThat use of $[ is unsupportedlocaldo blocknon-lvalue subroutine callCan't modify %s in %sCan't undef active subroutineautouseSubroutine %s redefinedToo late to run CHECK blockToo late to run INIT block"package" with no arguments# comment %04lx %04lx XXXX %04lx XXXX %04lx %04lx %04lx %04lx %04lx FINALblock or sub {}one of %ssubroutine entryscalar[]%s%c...%c__ANONIO__STRINGCORE::GLOBAL::requireopen_INopen_OUTdefined(@array) is deprecateddefined(%%hash) is deprecatedpanic: ck_grepFormat %s redefinedBareword found in conditional() operator constructCORE::GLOBAL::do\s+&`'123456789+-panic: ck_splitDB::postponed@array%hashModule name must be constantCORE::GLOBAL::globFile::GlobFile::Glob::csh_globattributesattributes.pm%s[%s:%ld]Runaway prototype%s:%ld-%ldCan't declare %s in %sCan't declare %s in "%s", @$%* Can't use global %s in "my"vMvvMv^vw^v^vMv^v^v^v^vMvww^vMvMv^v^v^v^vMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMvMv^vMvMvMvMvMvMvMvw FAKE "%s" %2d. 0x%lx<%lu> %_ never introducedpad.cpanic: cv_clone: %s"%s" variable %s masks earlier declaration in same %s (Did you mean "local" instead of "our"?) PADNAME = 0x%lx(0x%lx) PAD = 0x%lx(0x%lx) %2d. 0x%lx<%lu> (%lu,%lu) "%s" Variable "%s" may be unavailableVariable "%s" will not stay sharedpanic: pregfree comppadregcomp.cpanic: regfree data code '%c'...%s in regex m/%.*s%s/̈́Panic opt closealphspacgrapasciblancntralnuloweuppedigiprinpuncxdigitPOSIX class [:%.*s:] unknownEmpty \%c{}Missing right brace on \%c{}+utf8::%.*s !utf8::%.*s %04lx %04lx AlnumASCIIBlankSpaceInvalid [::] classInvalid [] range "%*.*s"%cutf8::Is%s nopSequence (? incomplete?-don't Unmatched (Unmatched )Junk on end of regexpUnmatched [Internal urpQuantifier follows nothingTrailing \Internal disasterCan't do {n,m} with n > mNested quantifiersNULL regexp argumentRegexp out of spacePERL_RE_COLORSvalue of node is %d in Offset macroSequence (?#... not terminatedvalue of node is %d in Length macroQuantifier unexpected on zero-length expression%s in regex; marked by <-- HERE in m/%.*s <-- HERE %s/Variable length lookbehind not implemented in regex; marked by <-- HERE in m/%.*s <-- HERE %s/Lookbehind longer than %lu not implementedPOSIX syntax [%c %c] belongs inside character classes in regex; marked by <-- HERE in m/%.*s <-- HERE %s/POSIX syntax [%c %c] is reserved for future extensionsUnrecognized escape \%c in character class passed through in regex; marked by <-- HERE in m/%.*s <-- HERE %s/False [] range "%*.*s" in regex; marked by <-- HERE in m/%.*s <-- HERE %s/Sequence (?%c...) not implemented(?p{}) is deprecated - use (??{})Sequence (?{...}) not terminated or not {}-balancedEval-group not allowed at runtime, use re 'eval'Eval-group in insecure regular expressionSwitch condition not recognizedSwitch (?(condition)... contains too many branchesUnknown switch condition (?(%.2sUseless (%s%c) - %suse /%c modifier in regex; marked by <-- HERE in m/%.*s <-- HERE %s/Useless (%sc) - %suse /gc modifier in regex; marked by <-- HERE in m/%.*s <-- HERE %s/Sequence (%.*s...) not recognizedReference to nonexistent groupUnrecognized escape \%c passed through in regex; marked by <-- HERE in m/%.*s <-- HERE %s/Quantifier in {,} bigger than %d%.*s matches null string many times in regex; marked by <-- HERE in m/%.*s <-- HERE %s/Ɇwچvvås""v::::::::::^^^^^^^^^^^^^^^^^^^^^^^|^^^^^^^^^^^^^^^^^^^^^^$5A^^Rb ~UDnf.lR$i?iA________________________________!_=N_____________________!_N_________________________________________________________B1F9999999999999999999999999999999999999999999999999999999r&&4 &Zy                                               % XXXXXXXXX       #  @               s      % e % % %        %   % %   , %   < < < < < < < < < < < <  < < < E <   !!!$$&'((((,-.///88886789:;8$ &'(+/01,*)854=!<,>%5lu %s \t\n\r\f\"\\\%o\0WILDSV_UNDEFSV_YESSV_PLACEHOLDER<%lu%s>FREEDRVPVPVIVPVNVPVMGPVLVCV(%s)CV()BMFM(null)[%s] [UTF8 "%s"](%g)(%lu)(%ld)SV_NO(NULL)[%lu]NULL OP IN RUN%*s%s = 0x%lx "%s" :: " "%s" {} { GV_NAME = %s-> %s (RUNTIME)PMf_PRE %c%s%c%s PMf_PRE (RUNTIME) PMf_REPL = ,USED,TAINTED,ONCE,SCANFIRST,ALL,SKIPWHITE,CONST,KEEP,GLOBAL,CONTINUE,RETAINT,EVALPMFLAGS = (%s) %-4d%*sTYPE = %s ===> (%d) DONE (was %s) LINE = %lu PACKAGE = "%s" LABEL = "%s" TARG = %ld ,VOID,SCALAR,LIST,UNKNOWN,KIDS,PARENS,STACKED,REF,MOD,SPECIAL,TARGET_MY,REFCOUNTED,COMMON,HASH,BACKWARDS,SQUASH,DELETE,COMPLEMENT,IDENTICAL,GROWS,DOLIST,AMPER,DB,HASTARG,NOPAREN,INARGS,NOMOD,SV,AV,HV,MAYBE_LVSUB,LVAL_DEFER,STRICT_REFS,OUR_INTRO,BARE,STRICT,ARYBASE,WARNING,ENTERED,LINENUM,INTRO,EARLY_CV,GUESSED,SLICE,EXISTS_SUB,NUMERIC,INTEGER,REVERSE,SVREF,IN_RAW,IN_CRLF,OUT_RAW,OUT_CRLF,EXIT_VMSISH,HUSH_VMSISH,FT_ACCESSPRIVATE = (%s) PADIX = %ld REDO ===> NEXT ===> LAST ===> OTHER ===> REFCNT = %lu SV = 0 PADBUSY,PADTMP,PADMY,TEMP,OBJECT,GMG,SMG,RMG,ROK,WEAKREF,OOK,FAKE,READONLY,OVERLOAD,pIOK,pNOK,pPOK,SCREAM,ANON,UNIQUE,CLONE,CLONED,CONST,NODEBUG,COMPILED,LVALUE,METHOD,LOCKED,WEAKOUTSIDE,SHAREKEYS,LAZYDEL,HASKFLAGS,REHASH,CLONEABLE,INTRO,MULTI,ASSUMECV,IN_PAD,OUR,IMPORTALL, SV AV HV CV ),EVALED,IsUV,TAIL,VALID,TYPED,UTF8SV = NULL%s RV%s PV%s PVIV%s PVNV%s PVBM%s PVMG%s PVLV%s PVAV%s PVHV%s PVCV%s PVGV%s PVFM%s PVIO%s UNKNOWN(0x%lx) %s UV = %lu IV = %ld (OFFSET) NV = %.*g RV = 0x%lx PV = 0x%lx ( %s . ) CUR = %ld LEN = %ld PV = 0 STASH TYPE = %c TARGOFF = %ld TARGLEN = %ld TARG = 0x%lx ARRAY = 0x%lx (offset=%ld) ALLOC = 0x%lx FILL = %ld MAX = %ld ARYLEN = 0x%lx ,REAL,REIFY,REUSED FLAGS = (%s) Elt No. %ld (%d%s:%d hash quality = %.1f%% KEYS = %ld RITER = %ld EITER = 0x%lx PMROOT = 0x%lx NAME = "%s" Elt %s [UTF8 "%s"] [REHASH] HASH = 0x%lx PROTOTYPE = "%s" COMP_STASH START = 0x%lx ===> %ld ROOT = 0x%lx XSUB = 0x%lx XSUBANY = %ld GVGV::GV DEPTH = %ld OUTSIDE_SEQ = %lu LINES = %ld PADLIST = 0x%lx ANONMAINUNIQUEUNDEFINED OUTSIDE = 0x%lx (%s) NAMELEN = %ld GvSTASH GP = 0x%lx SV = 0x%lx REFCNT = %ld IO = 0x%lx FORM = 0x%lx AV = 0x%lx HV = 0x%lx CV = 0x%lx CVGEN = 0x%lx GPFLAGS = 0x%lx LINE = %ld FILE = "%s" FLAGS = 0x%lx EGV IFP = 0x%lx OFP = 0x%lx DIRP = 0x%lx PAGE = %ld PAGE_LEN = %ld LINES_LEFT = %ld TOP_NAME = "%s" TOP_GV FMT_NAME = "%s" FMT_GV BOTTOM_NAME = "%s" BOTTOM_GV SUBPROCESS = %ld TYPE = '%c' TYPE = '\%o' MAGIC = 0x%lx envenvelemsigsigelempackelemmglobnkeystaintsubstrposbmfmuvardefelemcollxfrmamagicamagicelem MG_VIRTUAL = &PL_vtbl_%s MG_VIRTUAL = 0 MG_PRIVATE = %d MG_TYPE = PERL_MAGIC_%s MG_FLAGS = 0x%02X TAINTEDDIR REFCOUNTED GSKIP MINMATCH MG_OBJ = 0x%lx MG_LEN = %ld MG_PTR = 0x%lx => HEf_SVKEY ???? - please notify IZ %2ld: %lu -> %lu MG_VIRTUAL = 0x%lx MG_TYPE = UNKNOWN(\%o) FORMAT %s = SUB %s = (xsub 0x%lx %d) sv(\0)arylen(#)glob(*)pos(.)backref(<)overload(A)bm(B)regdata(D)env(E)isa(I)dbfile(L)shared(N)tied(P)sig(S)uvar(U)overload_elem(a)overload_table(c)regdatum(d)envelem(e)fm(f)regex_global(g)isaelem(i)nkeys(k)dbline(l)mutex(m)shared_scalar(n)collxfrm(o)tiedelem(p)tiedscalar(q)qr(r)sigelem(s)taint(t)uvar_elem(v)vec(v)v-string(V)utf8(w)substr(x)defelem(y)ext(~)WATCHING, %lx is currently %lx WARNING: %lx changed from %lx to %lx (0x%lx) at 0x%lx %*s REFCNT = %ld %*s FLAGS = (@B44555M6X6c6n65555,6B676(9d9d98999aara(a aa````4^ga\aQaFaa[ \WW0\}]\}]|m7pndJg %s %ldsocketclosedunopened%s%s on %s %s %s%s%s on %s %sPERL_HASH_SEEDEXECInsecure %s%sCan't forkpanic: kid popen errno readpanic: pthread_setspecificutil.c, '.' not in PATHexecute on PATHCan't %s %s%s%sFilehandle %s opened only for %sputFilehandle opened only for %sput (Are you trying to call %s%s on dirhandle %s?) (Are you trying to call %s%s on dirhandle?) Your random numbers are not that randomUnknown Unicode option letter '%c'Unknown Unicode option value %luSignal SIG%s received, but no signal handler set. SIG%s handler "%s" not defined. panic: magic_killbackrefs (flags=%lx)Attempt to set length of freed arrayCHLDCLDCLEARNEXTKEYFIRSTKEYFETCHSIZESTOREEXISTSFETCH__DIE____WARN__No such hook: %sNo such signal: SIG%sIGNOREDEFAULTSize magic not implementedassigning to $^Omg.cUUUUUUUUUUUUwarnings::Bitspanic: magic_len: %ld`"o"`""""#`" #@#`"`"`"`"`"q##`"`"`"$`"`"F%`"`"`"`"`"`"`"`"`"'`"\$`"&`"`"&'4$`"B*V''%%`"`"`"`"`"`"`"`"`"`)`")$$$`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"&%&`")`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"`"(`"(333347443983333:9@:338L;N:3:3333333338393:k6;45323 6.633k6k6k6k6k6k6k6k6k6336666333333333333333333333333333 7=73f73733333333333333333333333333383N8gethostbyaddrgethostbynamegethostentgetgrnamgetgrgidgetgrentgetnetbyaddrgetnetbynamegetnetentgetpwnamgetpwuidgetpwentgetprotobynamegetprotobynumbergetprotoentgetservbynamegetservbyportgetserventCCCGGGFFFFFFCCCCCCCCcEcEcECCDDD (utf8)Bad hash%ld/%ldAttempt to free non-existent shared string '%s'%s, Perl interpreter: 0x%pAttempt to delete readonly key '%_' from a restricted hashAttempt to access disallowed key '%_' in a restricted hashAttempt to delete disallowed key '%_' from a restricted hashNo such pseudo-hash field "%s"NEGATIVE_INDICESPOPEXTENDUNSHIFTpanic: null arraySTORESIZEPUSHpseudohashPseudo-hashes are deprecatedCan't coerce array into hashOut of memory during array extendCan't call method "%s" on an undefined valuewithout a package or object referenceCan't call method "%s" on unblessed referenceCan't locate object method "%s" via package "%.*s"Can't locate object method "%s" via package "%.*s" (perhaps you forgot to load "%.*s"?)Use of reference "%_" as array indexDeep recursion on anonymous subroutineDeep recursion on subroutine "%_"Overloaded dereference did not return a referenceUndefined subroutine &%_ calledCan't modify non-lvalue subroutine callCan't return %s from lvalue subroutine%s returned from lvalue subroutine in scalar contextCan't return a %s from lvalue subroutineUse of freed value in iterationCan't localize pseudo-hash elementglob failed (can't start child: %s)glob failed (child exited with status %d%s)utf8 "\x%02X" does not map to Unicodepanic: pp_match start/end pointersReference found where even-sized list expectedOdd number of elements in hash assignmentCan't return array to lvalue scalar contexton an undefined valueCan't call method "%s" %sNot a CODE referencea subroutineUndefined subroutine calledNo DB::sub routine defineda temporarya readonly valueEmpty arraypanic: pp_substSubstitution looppanic: pp_iterREADLINE, core dumped$&*(){}[]'";\|?<>~`panic: pp_matchRegexpNot a HASH referenceNot an ARRAY referenceOut of memory during array extendCan't return hash to lvalue scalar contextLVALUEGLOBFORMATsv.cBizarre SvTYPE [%ld]panic: ss_dup inconsistencypanic: del_backrefCan't upgrade to undefCan't weaken a nonreferenceReference is already weakCLONE in Argument "%s" isn't numericCLONE_SKIPcat_decode0123456789ABCDEF0123456789abcdefpanic: frexp"%%%c""%%\%03lo"end of stringNULLREFmsix%s=%s(0x%lx)panic: sv_insertNot a subroutine referenceBad filehandle: %sBad filehandle: %_Bizarre copy of %s in %sBizarre copy of %sSubroutine %s::%s redefinedWide character in %sWide characterWide character in $/FHFHFHFHFHFHFHFHFHHH|HtHlHdH\H[[\\?\z\\\]]!^%_Yad>cifEyL{+v+v"xuuuwXvXvwx|w{yv3zzzz9{]wuu_{xuu]w|wuuu5xKx~xvvwl`~`~`~`~`~`~`~0~`~`~0~<č;OɌWאZ$9=flΎ~l)ƙQ6֘HH1111c1T)  [ P E :/ $   ٭ѭ ծ||qfK ?4    0 E SSSSSSSSSSSSSSSSSSSSV SSG SSSSS @SSSSS8888888889w99?9P9a9l9[\R]-`w^`)]VVV^^^^w^^dvd bada(null)?ACloning substitution context is unimplementedCan't upgrade that kind of scalarDESTROY created new reference to dead object '%s'Attempt to free unreferenced scalar: SV 0x%lx, Perl interpreter: 0x%pCan't bless non-reference valueReference miscount in sv_replace()Don't know how to handle magic of type \%opanic: sv_setpvn called with negative strlenCan't coerce %s to number in %sCan't coerce %s to integer in %sArgument "%s" isn't numeric in %sInvalid argument to sv_cat_decodeInvalid conversion in %sprintf: Newline in left-justified string for %sprintfCan't coerce readonly %s to string in %sCan't coerce readonly %s to stringCan't coerce %s to string in %sCan't modify non-existent substringUnable to create sub named "%_"Constant subroutine %s::%s redefinedUndefined value assigned to typeglobsemi-panic: attempt to dup freed stringpanic: sv_pos_b2u: bad byte offsettried to access per-thread data in non-threaded perlsplice() offset past end of arrayOdd number of elements in anonymous hashAttempt to use reference as lvalue in substrConstant subroutine %s undefinedAttempt to bless into a referenceExplicit blessing to '' (assuming package main)Can't find an opnumber for "%s"Can't return hash to lvalue scalar contextpanic: pp_splitSplit loopSPLICEsubstr outside of stringIllegal modulus zeroIllegal division by zeroCan't take sqrt of %gCan't take log of %g(anonymous)do_study: out of memoryILEHANDLE*glob{FILEHANDLE}AMEACKAGECORE::?$@@%&*$Not a SCALAR referenceNot a GLOB referencea symbol�}}}}}}}}}~aևAAAЉ-AAAAATAA/Out of memory during string extendOut of memory during list extendOApanic: save_threadsv called in non-threaded perlpanic: corrupt saved stack indexpanic: leave_scope inconsistencypanic: leave_scope pad code6|ʪդդդդդդդդeЫfѬ3RǨ դթJKnpanic: mapstartpanic: bad gimme: %d Unknown error Compilation error_<(eval %lu)[%s:%ld]_<(eval %lu)DirectoryBlock device%s %s not allowed in requireNull filename used/loader/0x%lx/%s%s/%s: in @INC.h (change .h to .ph maybe?).ph (did you run h2ph?) (@INC contains:Can't locate %sNo DB::DB routine defined_<(%.10seval %lu)[%s:%ld]_<(%.10s_eval %lu)Exiting %s via %s(unknown)(eval)E0Goto undefined subroutine &%_Goto undefined subroutineDB::gotopanic: gotoCan't find label %sLabel not found for "redo %s"Label not found for "next %s"Label not found for "last %s"panic: lastpanic: returnpanic: die Null picture in formlineNot enough format arguments%#0*.*f%0*.*f%#*.*f%*.*fRunaway formatpseudo-blocksubstitution A%_ did not return a true value%sCompilation failed in require%sCompilation failed in regexpPerl v%lu.%lu.%lu required--this is only v%d.%d.%d, stoppedPerl v%lu.%lu.%lu required (did you mean v%lu.%03lu?)--this is only v%d.%d.%d, stoppedRange iterator outside integer rangeCan't goto subroutine outside a subroutineCan't goto subroutine from an eval-stringCan't goto subroutine from an eval-blockCan't "goto" out of a pseudo blockCan't "goto" into the middle of a foreach loopCan't "redo" outside a loop blockCan't "next" outside a loop blockCan't "last" outside a loop blockCan't return outside a subroutineRepeated format line will never terminate (~~ and @#)@3e3334333h7767G77h7#dfihhdef?ffgggaa bccjjjjnj]jLj;jgoto must have labelTarget of goto is too deeply nested (in cleanup) ~83@H}M?AToo many args to syscallToo few args to syscallgetlogingetspnam%s %s %2d %02d:%02d:%02d %dsetprioritysetpgrpsystemrmdirmkdirsymlinkrenamechrootHOMELOGDIRchdirconnectbindsocketpairioctlfcntltruncateFILENOCLOSESEEKTELLWRITENegative lengthOffset outside stringREADPRINTF%s_TOPtopbad top format referencepage overflowUndefined format "%s" calledNot a format referenceGETCNon-string passed as bitmaskAnyDBM_FileAnyDBM_File.pmNo dbm on this machineUNTIETIEARRAYTIESCALARAttempt to tie unique GVTIEHANDLEBINMODEumaskOPENPROPAGATE ...propagatedDied ...caughtWarning: something's wrong``rblstat() on filehandle %sJanFebMarAprMayJunJulAugSepOctNovDecSunMonTueWedThuFriSatځA _0 but truechdir('') or chdir(undef) as chdir()Possible memory corruption: %s overflowed 3rd argumentUndefined top format "%s" calleduntie attempted while %lu inner references still existCan't locate object method "%s" via package "%_"Self-ties of arrays and hashes are not supportedThe stat preceding lstat() wasn't an lstat-T and -B not implemented on filehandlesG$tIIllegal number of bits in vecNONEpanic: do_trans_count line %dNegative offset to vec in lvalue contextpanic: do_trans_simple_utf8 line %dpanic: do_trans_simple line %dpanic: do_trans_complex_utf8 line %dpanic: do_trans_complex line %dArg too short for msgsndchmodchownkillUnrecognized signal name "%s"unlinkutime$&*(){}[]'";\|?<>~` -cCan't exec "%s": %sWide character in print:rawUse of -l on filehandle %slstatsysopenUnknown open() mode '%.*s'Missing command in piped openCan't open bidirectional pipeecho inplace openCan't open %s: %sBad arg length for %s, is %lu, should be %ldWarning: unable to close filehandle %s properly. panic: sysopen with multiple argsMore than one argument to '%c&' openMore than one argument to '>%c' openMore than one argument to '<%c' openFilehandle STD%s reopened as %s only for inputFilehandle STDIN reopened as %s only for output|tr -s ' ' '\012\012\012\012'|Can't do inplace edit: %s is not a regular fileCan't rename %s to %_: %s, skipping fileCan't remove %s: %s, skipping fileCan't do inplace edit on %s: %s!The stat preceding -l _ wasn't an lstat͆%s limit (%d) exceeded%lx %d regexp memory corruptioncorrupted regexp pointerspanic: unknown regstclass %dNULL regexp parametercorrupted regexp programMalformed UTF-8 character (fatal)panic: paren_elems_to_push < 0Complex regular subexpression recursionregexp unwind memory corruption''''((:))*'(e+**P'U*P'P'P'P'+*+,RQR0UVRsRDVDD::::STVDS"@@AABB>}><<==sUwV;DC C;;@WSVEI-KLyL LN?N?A? Internals::HvREHASH $hashrefUsage: utf8::is_utf8(sv)inputoutputdetails%_(%_)Usage: utf8::upgrade(sv)Usage: utf8::decode(sv)Usage: utf8::encode(sv)Usage: utf8::valid(sv)(undef)UNIVERSAL::isaUNIVERSAL::canUNIVERSAL::VERSIONutf8::is_utf8utf8::validutf8::encodeutf8::decodeutf8::upgradeutf8::downgradeutf8::native_to_unicodeutf8::unicode_to_nativeInternals::SvREADONLY\[$%@];$Internals::SvREFCNT\%PerlIO::get_layers*;@Regexp::DESTROYInternals::hash_seedInternals::rehash_seedInternals::HvREHASHuniversal.c::ISA::CACHE::Usage: PerlIO_get_layers(filehandle[,args])get_layers: unknown argument '%s'Usage: UNIVERSAL::hv_clear_placeholders(hv)Usage: utf8::unicode_to_native(sv)Usage: utf8::native_to_unicode(sv)Usage: utf8::downgrade(sv, failok=0)Cannot find version of an unblessed reference%s does not define $%s::VERSION--version check failed%s defines neither package nor VERSION--version check failed%s v%vd required--this is only v%vd%s version %s required--this is only version %sUsage: UNIVERSAL::can(object-ref, method)Internals::hv_clear_placeholdersRecursive inheritance detected in package '%s'Usage: UNIVERSAL::isa(reference, kind)Usage: attributes::_warn_reserved ()Usage: attributes::reftype $referenceUsage: attributes::_guess_stash $referenceUsage: attributes::_fetch_attrs $referenceUsage: attributes::_modify_attrs $reference, @attributesA variable may not be unsharedUsage: attributes::bootstrap $moduleshareuniquattributes::_warn_reservedattributes::_modify_attrsattributes::_guess_stashattributes::_fetch_attrsattributes::reftypexsutils.cattributes::bootstrap Use of uninitialized value%s%sSemicolon seems to be missingUnquoted string "%s" may clash with future reserved wordUnsuccessful %s on filename containing newlineCan't use %s ref as %s refCan't use string ("%.32s") as %s ref while "strict refs" in useCan't use an undefined value as %s referenceModification of non-creatable array value attempted, subscript %dModification of non-creatable hash value attempted, subscript "%s"Modification of non-creatable hash value attempted, subscript "_"Modification of a read-only value attemptedOut of memory! Insecure dependency in %s%sUnsupported socket function "%s" calledUnsupported directory function "%s" calledThe %s function is unimplemented"my" variable %s can't be in a packageCan't localize through a referencepanic: memory wrap`!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~T(3>IU`kvͮü¢кƳ֦̠󬡾˽ūğ  !"#$%&')*+,-./012456789:;<=?@ABCDEFGHJKLMNOPQRSVWXYZ[\]^_abcdefghijlmnopqrstuwxyz{|}~ZEROHUPQUITTRAPABRTBUSFPEKILLUSR1SEGVUSR2PIPESTKFLTCONTSTOPTSTPTTINTTOUURGXCPUXFSZVTALRMPROFWINCHPWRSYSNUM32NUM33RTMINNUM35NUM36NUM37NUM38NUM39NUM40NUM41NUM42NUM43NUM44NUM45NUM46NUM47NUM48NUM49NUM50NUM51NUM52NUM53NUM54NUM55NUM56NUM57NUM58NUM59NUM60NUM61NUM62NUM63RTMAXIOTPOLLUNUSEDstubpushmarkwantarrayconstgvsvpadsvpadavpadhvpadanypushrerv2gvrv2svav2arylenrv2cvanoncodesrefgenblessbacktickrcatlineregcmayberegcresetregcompsubstconttranssassignaassignschopschompi_preinci_predeci_postinci_postdecpowi_multiplyi_dividei_modulorepeati_addi_subtractconcatstringifyleft_shiftright_shifti_lti_gti_lei_gei_eqi_nei_ncmpsltsgtslesgesnescmpbit_andbit_xorbit_ori_negatenotcomplementsrandhexoctrindexsprintfcryptucfirstlcfirstuclcquotemetarv2avaelemfastaelemasliceeachvaluesdeleteexistsrv2hvhelemhslicejoinlsliceanonlistanonhashsplicepushpopunshiftreversegrepstartgrepwhilemapwhilerangeflipcond_exprandassignorassignentersubleavesubleavesublvcallerwarndielineseqnextstatedbstateunstackenterleaveenteriterenterloopleaveloopnextredodumppipe_opfilenobinmodeuntietieddbmopendbmclosesselectgetcenterwriteleavewriteprtfsysseeksysreadsyswritesendrecveoftellflocksockpairlistenacceptshutdowngsockoptssockoptgetsocknamegetpeernameftrreadftrwriteftrexecftereadftewritefteexecftisfteownedftrownedftzeroftsizeftmtimeftatimeftctimeftsockftchrftblkftfileftdirftpipeftlinkftsuidftsgidftsvtxftttyfttextftbinaryreadlinkopen_dirreaddirtelldirseekdirrewinddirclosedirwaitwaitpidgetppidgetpgrpgetprioritytmslocaltimegmtimealarmsleepshmgetshmctlshmreadshmwritemsggetmsgctlmsgrcvsemgetsemctlsemopdofileenterevalleaveevalentertryleavetryghbynameghbyaddrghostentgnbynamegnbyaddrgnetentgpbynamegpbynumbergprotoentgsbynamegsbyportgserventshostentsnetentsprotoentsserventehostentenetenteprotoenteserventgpwnamgpwuidgpwentspwentepwentggrnamggrgidggrentsgrentegrentthreadsvsetstatemethod_namedcustomnull operationconstant itemscalar variableglob valueglob elemprivate variableprivate arrayprivate hashprivate valuepush regexpref-to-glob castscalar dereferencearray lengthsubroutine dereferenceanonymous subroutinesubroutine prototypereference constructorsingle ref constructorreference-type operatorquoted execution (``, qx)append I/O operatorregexp internal guardregexp internal resetregexp compilationpattern match (m//)pattern quote (qr//)substitution (s///)substitution iteratortransliteration (tr///)scalar assignmentlist assignmentscalar chopscalar chompdefined operatorundef operatormatch positioninteger preincrement (++)integer predecrement (--)integer postincrement (++)integer postdecrement (--)exponentiation (**)integer multiplication (*)integer division (/)integer modulus (%)repeat (x)integer addition (+)integer subtraction (-)concatenation (.) or stringleft bitshift (<<)right bitshift (>>)numeric lt (<)integer lt (<)numeric gt (>)integer gt (>)numeric le (<=)integer le (<=)numeric ge (>=)integer ge (>=)numeric eq (==)integer eq (==)numeric ne (!=)integer ne (!=)numeric comparison (<=>)integer comparison (<=>)string ltstring gtstring lestring gestring eqstring nestring comparison (cmp)bitwise and (&)bitwise xor (^)bitwise or (|)integer negation (-)1's complement (~)array dereferenceconstant array elementarray slicehash dereferencehash elementhash slicejoin or stringlist sliceanonymous list ([])anonymous hash ({})grep iteratormap iteratorflipfloprange (or flip)range (or flop)logical and (&&)logical or (||)logical xorconditional expressionlogical and assignment (&&=)logical or assignment (||=)method lookupsubroutine exitlvalue subroutine returnsymbol resetline sequencedebug next statementiteration finalizerblock entryblock exitforeach loop entryforeach loop iteratorloop exitselect system callwrite exitgetsockoptsetsockopt-R-W-X-r-w-o-O-z-A-b-f-p-l-u-g-k-t-T-Bopendirtimesdo "file"eval "string"eval "string" exiteval {block}eval {block} exitsethostentsetnetentsetprotoentsetserventendhostentendnetentendprotoentendserventsetpwentendpwentsetgrentendgrentper-thread valueset statement infomethod with known nameunknown custom operator(abs(bool(nomethod(""(0+(+(+=(-(-=(*(*=(/(/=(%(%=(**(**=(<<(<<=(>>(>>=(&(&=(|(|=(^(^=(<(<=(>(>=(==(!=(<=>(cmp(lt(le(gt(ge(eq(ne(!(~(++(--(atan2(cos(sin(exp(log(sqrt(x(x=(.(.=(=(neg(${}(@{}(%{}(*{}(&{}(<>(int0123456789abcdef0123456789ABCDEF\.^$@dDwWsSbB+*?|()-nrtfeaxc0123456789[{]}panic: sysconf: %spanic: bad pagesize %ldperlio.cPerlIO::Layer::findPerlIO::Layer::NoWarningsPerlIO::LayerPERLIO_DEBUG(none)%.40s:%ld fd %d refcnt=%d Cannot flush f=%p Layer %ld is %s define %s %p warning:%s %.*s => %p PerlIOCannot find %.*s Pushing %s Unknown PerlIO layer "%.*s"PERLIOPerlIO_pop f=%p %s Cleanup layers for %p :raw f=%p :%s (Null)PerlIO_push f=%p %s %s %p r+/tmp/PerlIO_XXXXXXw+IrIwHashCodeDestruct %p Destruct popping %s Clone %p from %p fdupopen f=%p param=%p bytesunixstdioperliopendingcrlfmmapDon't know how to get file namepanic: sysconf: pagesize unknownpanic: PerlIO layer array corruptRecursive call to Perl_load_module in PerlIO_find_layerInvalid separator character %c%c%c in PerlIO layer specification %sArgument list not closed for PerlIO layer "%.*s"Usage class->find(name[,load])Layer does not match this perlPerlIOBase_dup %s f=%p o=%p param=%p More than one argument to open(,':%s')openn(%s,'%s','%s',%d,%x,%o,%p,%d,%p) panic: sprintf overflow - memory corrupted! PerlIO_binmode f=%p %s %c %x %s OAA0 but trueInteger overflow in octal numberIllegal octal digit '%c' ignoredOctal number > 037777777777 non-portableInteger overflow in binary numberIllegal binary digit '%c' ignoredBinary number > 0b11111111111111111111111111111111 non-portableInteger overflow in hexadecimal numberIllegal hexadecimal digit '%c' ignoredHexadecimal number > 0xffffffff non-portableCan't fix broken locale name "%s"perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). perl: warning: Failed to fall back to the standard locale ("C"). POSIXabstrxfrm() gets absurdLANGUAGELC_ALLPERL_BADLANGunset LANGUAGE = %c%s%c, LC_ALL = %c%s%c, LC_LC_ALL= %.*s = "%s", LANG = %c%s%c UTF-8PERL_UNICODEpack/unpack repeat count overflowNo group ending character '%c' found in template()-group starts with a count in %sToo deeply nested ()-groups in %s'%c' allowed only after types %s in %sDuplicate modifier '%c' after '%c' in %s'/' does not take a repeat count in %sWithin []-length '*' not allowed in %sWithin []-length '%c' not allowed in %s'/' must be followed by 'a*', 'A*' or 'Z*' in packCode missing after '/' in packCharacter in 'C' format wrapped in packCharacter in 'c' format wrapped in packCannot compress negative numbers in packCan only compress unsigned integers in packCannot compress integer in packAttempt to pack pointer to temporary value'@' outside of string in unpack'X' outside of string in unpack'x' outside of string in unpack'/' must follow a numeric type in unpackUnterminated compressed integer in unpack'P' must have an explicit size in unpackCount after length/code in unpacklength/code after end of string in unpackCode missing after '/' in unpackInvalid type ',' in %ssSiIlLxXMalformed integer in [] in %sInvalid type '%c' in %s'X' outside of string in %s@XxuaAZInvalid type '%c' in pack'%%' may not be used in pack'X' outside of string in packInvalid type '%c' in unpack%.*lu0000000000fFdDcCsSiIlLnNUvVqQjJNegative '/' count in unpack"PP"PPPPPPPPPPPPPPPPPPPPPPP#{1PPM$Px/W3)P|,Pk*P*PP -P ++Pi,PPPPPPP{13P.Px/-$PV.P%P&PP0P!'2"PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPW3PP|,PPPPPP -PPPP-PPPPPPPPPPPPPPPP-PPV.PPPPPP0PPPP!RfEfE@QfEfEfEfEfEfEcNfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfE@NRUONfEfEMfE+LP=MfE}PfE}PfETfEfESfEaU}PfEHfERfEfEfEfEfEfERUON{NfETfE+L,SKfE*PfESfE TfEfELfEISHFfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEPfEfE}PfEfEfEfEfEfESfEfEfEfESfEfEfEfEfEfEfEfEfEfEfEfEfEfEfEfE,SfEfE*PfEfEfEfEfEfELfEfEfEfEE<Gsort::hints$$Undefined subroutine in sortUndefined sort subroutine "%_" calledSort subroutine didn't return single valueSort subroutine didn't return a numeric value; ,zR| (ة 0DM NTNNN O\OOO,PtPPQDQQQRdRRRRS`SSST`TtNA$NAl%lNA0lNA7l=lNAlNAIlOl%#,*6.><EAPB\DbEmItL{NPSUacdefgikl mno.p:qFrTsZteunv{Vwxy~A,xm+-AAHHHHHHHHHHHHHHHHHHHX XXXA*Op  =oBxxy ɇ  8\4(LoDooBo *:JZjz *:JZjz *:JZjz  * : J Z j z           * : J Z j z           * : J Z j z           * : J Z j z           * : J Z j z          *:JZjz *:JZjz *:JZjz *:JZjz *:JZjz *:JZjz *:JZjz *:JZjz *:JZjz *:JZjz *:JZjz *:JZjz *:JZjz *:JZjz *:JZjz *:JZjz *:JZjz *:JZjz  * : J Z j z          !!*!:!J!Z!j!z!!!!!!!!! ""*":"J"Z"j"z""""""""" ##*#:#J#Z#j#z######### $$*$:$J$Z$j$z$$$$$$$$$ %%*%:%J%Z%j%z%%%%%%%%% &&*&:&J&Z&j&z&&&&&&&&& ''*':'J'Z'j'z''''''''' ((*(:(J(Z(j(z((((((((( ))*):)J)Z)j)z))))))))) ****:*J*Z*j*z********* ++*+:+J+Z+j+z+++++++++ ,,*,:,J,Z,j,z,,,,,,,,, --*-:-J-Z-j-z--------- ..*.:.J.Z.j.z......... //*/:/J/Z/j/z///////// 00*0:0J0Z0j0z000000000 11*1:1J1Z1j1z111111111 22*2:2J2Z2j2z222222222 33*3:3J3Z3j3z333333333 44*4:4J4Z4j4z444444444 55*5:5J5Z5j5z555555555 66*6:6J6Z6j6z666666666 77*7:7J7Z7j7z777777777 88*8:8J8Z8j8z888888888 99*9:9J9Z9j9z999999999 ::*:::J:Z:j:z::::::::: ;;*;:;J;Z;j;z;;;;;;;;; <<*<:<J<Z<j<z<<<<<<<<< ==*=:=J=Z=j=z========= >>*>:>J>Z>j>z>>>>>>>>> ??*?:?J?Z?j?z????????? @@*@:@J@Z@j@z@@@@@@@@@ AA*A:AJAZAjAzAAAAAAAAA BB*B:B`\  !"#$%&'()*+,-./0123456789:;<=>?@  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~6 D D @$D@@@@ DD@ 6B"6(( ""&@  T*T0D V6 W76666d"T"d"T"l"\#l"\#%.%%.%%>%% D.%%.%%%)%%6$$6$$6$$6$$6$$6$$>$$$$$$$$$$$$."#"")77 7677777777 ("(")")" ((77)66666Hldh66H( ((" (HDHHh2ivvi HAHAH&"$@@IB6H]H6@@AHDDDDDD6R 6UB"("  .T""."". "( " ""," ""7I7III)))6)7 ))])]I7)))"6667("("("("(("("(""("("(6@"@6"6(6(6(((66666666 (D@ @fEf IfafNfSfXf\f`fefjfoftffWyf- fffffffffffZzfffffffffffffg gggg!g'g-g3g9g?gEgKgQgWg]gcgigogug{ggg2 ggvvvvvvvvFKFKKKFlFlFFvlllllllFkKll{FloF-lvlmmmm!m(m0m9m@mKGmNmUm\m?vvvvv*%%8%k%^%x%%%%%%%vwww(w3w=wIw%%%Tw]wC%L%U%fwowAF9Fxwwww{>NAxy)DP?wwwwwwwwwwwwxxx xxxxx!x&x)x-x0x4x7x;x>xBxExIxMxQxVx[x_xcxgxkxoxsxvxyx}xxxxxxxxxxxxxxxxxxxxYpjpCp.{pBLp4{p9{p?{(pF{(pN{,pS{4C5I..shstrtab.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame_hdr.eh_frame.ctors.dtors.jcr.data.rel.ro.dynamic.got.got.plt.data.bssB oBB6 xyxyxxɇ%oBB2oDDA 44(LJ \\8 S0N<YPBPB _==e>>S m{HPPXX dd ,  (``0 h hparELF4 4 (44444PP0PP((( Qtd/lib/ld-linux.so.2GNUYeFkNMH!L%?OnZ'+70Kp PGsj I\S)8:9lTU$D.}X=vV3*t`B>Q]<2dr-(c,C AWJx_1y b~quf|&a{z5@w; RE"/[^6i#4h mog%`%@ADK(D)82G `befhijklnopqtuxy|ղqY0G-I}Lݣk/ś㞇k C : ɢʼn !oĹ@k|nqX{u|d|K|$2b ff`Y{JkGCEG3:}A?,xdl`  4`Su1`>#H tA  fs{ &F89  B<L$J V7{v;Yf`q0F >@3.Y#Y:)Q? Df{d (T 0\ko4HFF :7@>t  (nn(1|W2f T D R~2{^$ lP@@[( T& gpC R!a  Z PJRLR  R! G  X R S e{ PR ] \0cH D P e! -& E RW rB IRR\ dF  m S aR5l  libperl.so.5.8__gmon_start___Jv_RegisterClassesPerl_sv_2ivPerl_reentrant_retryPerl_Ttainted_ptrPerl_Iexit_flags_ptrPerl_save_destructor_xPerl_Icompcv_ptrPerl_Tin_eval_ptrPerl_atfork_lockperl_constructPerl_get_svPerl_croak_nocontextPerl_av_shiftPerl_sv_2pv_flagsPerl_Gop_mutex_ptrPerl_sv_setpvnPerl_sv_2uvPerl_Ilinestr_ptrPerl_formPerl_sv_setivPerl_newSVpvPerl_Ieval_root_ptrperl_freePerl_Top_ptrPerl_mg_setPerl_Tcurstackinfo_ptrPerl_sv_2mortalPerl_newRVPerl_vmessPerl_newSVPerl_atfork_unlockPerl_Gsigfpe_saved_ptrPerl_sv_setpvPerl_Gthr_key_ptrPerl_hv_fetchPerl_newSVpvnPerl_Gdo_undump_ptrPerl_Iperl_destruct_level_ptrPerl_gv_fetchpvperl_runPerl_Tstatbuf_ptrPerl_sv_newmortalPerl_dounwindPerl_newXSperl_destructPerl_sv_setuvPerl_av_fetchPerl_croakperl_parsePerl_safesysmallocperl_allocPerl_Ireentrant_buffer_ptrPL_memory_wraplibdl.so.2dlopendlsymdlclosedlerrorlibm.so.6libpthread.so.0pthread_getspecificopen64lseek64pthread_mutex_destroyreadlibc.so.6_IO_stdin_used__register_atforkexitsprintfstrncmpclosedirstrncpysignal__stack_chk_failunlinkmkdirreallocmemchrgetpidstrdupstrtokstrstrrmdirgetpwuid_r__strtol_internalopendirgetenv__ctype_b_locgetuidreadlinkexecvpreaddir64_rmemmoveaccessstrcmp__libc_start_main__environ__xstat64__lxstat64libcrypt.so.1_edata__bss_start_endpar_current_execpar_basename__libc_csu_fini_fp_hwXS_Internals_PAR_BOOTpar_env_cleanpar_current_exec_procpar_dirnameget_username_from_getpwuidpar_cleanupXS_DynaLoader_dl_load_filesize_load_me_2XS_DynaLoader_dl_unload_file__data_startboot_DynaLoaderXS_DynaLoader_dl_find_symbolXS_DynaLoader_dl_errorxs_init__libc_csu_initXS_DynaLoader_dl_install_xsubXS_Internals_PAR_CLEARSTACKpar_rmtmpdirname_load_me_2XS_DynaLoader_dl_undef_symbolspar_mktmpdirpar_setup_libpathpar_findprogpar_init_envGLIBC_2.1GLIBC_2.0GLIBC_2.2GLIBC_2.1.2GLIBC_2.4GLIBC_2.3GLIBC_2.3.2   p0ii aii k0ii kii uri ii ii ri ii uii k Q QmQ~QeQ{ Q$QwRrR4Q8Q0R?4R@8RAEڃED$ D$MEԉ$&uEԃ D$$D$X$Ee3tURuA$E}tEtE<0t EEERRUpEEEOEEEM܋EE% ‹E% ‹E% ЉE}~E_M܋E܃E܃1‹E܃1‹E܃1ЉU܋E܋E}O~EEE@EE@EE@ EE@EEEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEEU!‹E#E ЍUEyZEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE3E3EUEnEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE E#UE#E ЍUE-$CpEEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEE3E3EUE-*>5EEMEUEE@UEPE@UEPE@ UEP E@UEPUE#EgE@E@ܺE@ vT2E@ËE@E@E@\]UWVEPEEE@;EvE@PEPUEBEPE‹EPE@\EP\@)ЉEE;E~EEMUE@\U ljE)EEE E@\UEP\E@\@E$zEU JHJHJ H JHJHJHJHJ H J$H$J(H(J,H,J0H0J4H4J8H8RSD$X$C‹ R8D$T$L$ DD$D$ D$DD$$D$D~~Ue3tD_]UWSEE$ E}ED$$ED$.$EE}ЍPE||ЃEE$EED$ ED$D$1E$ED$E$"t*E%=@u} tD$E$ E$dE$E$$ $T $p$$.\$D$E$u+$3$$ EEEE}CE$2}t E$Đ[_]UE$kEE$EktN}tHEt>D$E$ ;Eu&D$E$D$E$uUS$I$$GX$&$$tC $$y$X$$V$n@C$$$,$X$$ D$D$$C($b$$`X$?$$C,$$$X$$o$7C0$$L$@@4[]U$$D$$v$z$D$D$$UVS@E$;$$Y$E}tE<1u Et$$_D$ D$D$7$E؃}BE؋@ @EE]$$D$ \$E܉D$$E}E@%tEE:E$"$D$ D$\$$EȋE¡,cUȉT$$uEE(c9E&(c;EuAE.$$‹E܉D$$EE(c9E|$d$D$ D$D$<$ZE؃}tvE؋@ $$D$>\$$ME؋@ @%@t,E؋@ $$G\$$k$$%D$ D$D$C$E؃}E$E}t7E؋@ $F$‹ED$\$$w7,c0E؋@ $$~t$\$$\$$X$$$7$$$c$c$,c$$c,cE̋E؋@ @%tE؋@ E?E؋@ $2$D$ D$\$$EЋỦT$EЉ$EE؋@ @%tE؋@ E?E؋@ $$+D$ D$\$$Eԡ,cED$ EԉD$T$$H$cD$$2E}t4}t.}t($c,cED$ T$L$$xU@[^]US$$q$$$SD$ D$D$$$$D$\$$[]ÍL$qUSQ0M$0D$$D$lD$l$$uP c cu $: c$m$$W$$$3$$$ $U=?v $RM$,c,cMA,c,c@(c(c¡,c(c(cE),cP(cE‹EMAEEU;|͡,cP(cM ,c(cU cD$L$ D$D$.$xE}u c$BE c$$u0$cu$u$c$ct $c$ c$ս$ $qE}t#D$ D$ED$$E0Y[]aÐUuu]} aqV@N :V@)u]u}]ÍD$4$vUWVS 'tmpXXXXX', DIR => File::Basename::dirname($topdir), SUFFIX => '.cmd', UNLINK => 0, ); # Because the par_temp directory is going to be deleted in a # background process, the parent process id may be reused before the # background process completes. To ensure that the temporary # directory does not get reused while it is being deleted, try to # rename it to a name that is related to the temporary script file. # FIXME: This breaks threaded applications. A fix is in the works, but may # still take a while. The fix would be to make sure that this is only # run in the LAST REMAINING thread. # my $tmpname = (File::Spec->splitpath($tmp->filename))[2]; # filename # $tmpname =~ s/\.[^.]*$/.dir/; # my $newDir = File::Spec->catpath( # (File::Spec->splitpath($par_temp))[0..1], $tmpname); # if (rename $par_temp, $newDir) { # outs("Renamed $par_temp to $newDir"); # $par_temp = $newDir; # } if ($^O =~ m/win32/i) { print $tmp " :loop rmdir /q /s \"$par_temp\" if exist \"$par_temp\" goto loop rmdir \"$topdir\" rm \"" . $tmp->filename . "\" "; close $tmp; my $proc; Win32::Process::Create( $proc, $ENV{COMSPEC}, "$ENV{COMSPEC} /c \"" . $tmp->filename . "\" >nul 2>nul ", 1, NORMAL_PRIORITY_CLASS, "." ); } else { print $tmp "#!/bin/sh while [ -d '$par_temp' ]; do rm -rf '$par_temp' done rmdir '$topdir' rm '" . $tmp->filename . "' "; chmod 0700,$tmp->filename; my $cmd = $tmp->filename . ' >/dev/null 2>&1 &'; close $tmp; system($cmd); } outs(qq(Spawned background process to perform cleanup)); } } } BEGIN { Internals::PAR::BOOT() if defined &Internals::PAR::BOOT; eval { _par_init_env(); if (exists $ENV{PAR_ARGV_0} and $ENV{PAR_ARGV_0} ) { @ARGV = map $ENV{"PAR_ARGV_$_"}, (1 .. $ENV{PAR_ARGC} - 1); $0 = $ENV{PAR_ARGV_0}; } else { for (keys %ENV) { delete $ENV{$_} if /^PAR_ARGV_/; } } my $quiet = !$ENV{PAR_DEBUG}; # fix $progname if invoked from PATH my %Config = ( path_sep => ($^O =~ /^MSWin/ ? ';' : ':'), _exe => ($^O =~ /^(?:MSWin|OS2|cygwin)/ ? '.exe' : ''), _delim => ($^O =~ /^MSWin|OS2/ ? '\\' : '/'), ); _set_progname(); _set_par_temp(); # Magic string checking and extracting bundled modules {{{ my ($start_pos, $data_pos); { local $SIG{__WARN__} = sub {}; # Check file type, get start of data section {{{ open _FH, '<', $progname or last; binmode(_FH); my $buf; seek _FH, -8, 2; read _FH, $buf, 8; last unless $buf eq "\nPAR.pm\n"; seek _FH, -12, 2; read _FH, $buf, 4; seek _FH, -12 - unpack("N", $buf), 2; read _FH, $buf, 4; $data_pos = (tell _FH) - 4; # }}} # Extracting each file into memory {{{ my %require_list; while ($buf eq "FILE") { read _FH, $buf, 4; read _FH, $buf, unpack("N", $buf); my $fullname = $buf; outs(qq(Unpacking file "$fullname"...)); my $crc = ( $fullname =~ s|^([a-f\d]{8})/|| ) ? $1 : undef; my ($basename, $ext) = ($buf =~ m|(?:.*/)?(.*)(\..*)|); read _FH, $buf, 4; read _FH, $buf, unpack("N", $buf); if (defined($ext) and $ext !~ /\.(?:pm|pl|ix|al)$/i) { my ($out, $filename) = _tempfile($ext, $crc); if ($out) { binmode($out); print $out $buf; close $out; chmod 0755, $filename; } $PAR::Heavy::FullCache{$fullname} = $filename; $PAR::Heavy::FullCache{$filename} = $fullname; } elsif ( $fullname =~ m|^/?shlib/| and defined $ENV{PAR_TEMP} ) { # should be moved to _tempfile() my $filename = "$ENV{PAR_TEMP}/$basename$ext"; outs("SHLIB: $filename\n"); open my $out, '>', $filename or die $!; binmode($out); print $out $buf; close $out; } else { $require_list{$fullname} = $PAR::Heavy::ModuleCache{$fullname} = { buf => $buf, crc => $crc, name => $fullname, }; } read _FH, $buf, 4; } # }}} local @INC = (sub { my ($self, $module) = @_; return if ref $module or !$module; my $filename = delete $require_list{$module} || do { my $key; foreach (keys %require_list) { next unless /\Q$module\E$/; $key = $_; last; } delete $require_list{$key} if defined($key); } or return; $INC{$module} = "/loader/$filename/$module"; if ($ENV{PAR_CLEAN} and defined(&IO::File::new)) { my $fh = IO::File->new_tmpfile or die $!; binmode($fh); print $fh $filename->{buf}; seek($fh, 0, 0); return $fh; } else { my ($out, $name) = _tempfile('.pm', $filename->{crc}); if ($out) { binmode($out); print $out $filename->{buf}; close $out; } open my $fh, '<', $name or die $!; binmode($fh); return $fh; } die "Bootstrapping failed: cannot find $module!\n"; }, @INC); # Now load all bundled files {{{ # initialize shared object processing require XSLoader; require PAR::Heavy; require Carp::Heavy; require Exporter::Heavy; PAR::Heavy::_init_dynaloader(); # now let's try getting helper modules from within require IO::File; # load rest of the group in while (my $filename = (sort keys %require_list)[0]) { #local $INC{'Cwd.pm'} = __FILE__ if $^O ne 'MSWin32'; unless ($INC{$filename} or $filename =~ /BSDPAN/) { # require modules, do other executable files if ($filename =~ /\.pmc?$/i) { require $filename; } else { # Skip ActiveState's sitecustomize.pl file: do $filename unless $filename =~ /sitecustomize\.pl$/; } } delete $require_list{$filename}; } # }}} last unless $buf eq "PK\003\004"; $start_pos = (tell _FH) - 4; } # }}} # Argument processing {{{ my @par_args; my ($out, $bundle, $logfh, $cache_name); $quiet = 0 unless $ENV{PAR_DEBUG}; # Don't swallow arguments for compiled executables without --par-options if (!$start_pos or ($ARGV[0] eq '--par-options' && shift)) { my %dist_cmd = qw( p blib_to_par i install_par u uninstall_par s sign_par v verify_par ); my @add_to_inc; while (@ARGV) { $ARGV[0] =~ /^-([AIMOBLbqpiusTv])(.*)/ or last; if ($1 eq 'I') { push @add_to_inc, $2; } elsif ($1 eq 'M') { eval "use $2"; } elsif ($1 eq 'A') { unshift @par_args, $2; } elsif ($1 eq 'O') { $out = $2; } elsif ($1 eq 'b') { $bundle = 'site'; } elsif ($1 eq 'B') { $bundle = 'all'; } elsif ($1 eq 'q') { $quiet = 1; } elsif ($1 eq 'L') { open $logfh, ">>", $2 or die "XXX: Cannot open log: $!"; } elsif ($1 eq 'T') { $cache_name = $2; } shift(@ARGV); if (my $cmd = $dist_cmd{$1}) { delete $ENV{'PAR_TEMP'}; init_inc(); require PAR::Dist; &{"PAR::Dist::$cmd"}() unless @ARGV; &{"PAR::Dist::$cmd"}($_) for @ARGV; exit; } } unshift @INC, @add_to_inc; } # XXX -- add --par-debug support! # }}} # Output mode (-O) handling {{{ if ($out) { { #local $INC{'Cwd.pm'} = __FILE__ if $^O ne 'MSWin32'; require IO::File; require Archive::Zip; } my $par = shift(@ARGV); my $zip; if (defined $par) { open my $fh, '<', $par or die "Cannot find '$par': $!"; binmode($fh); bless($fh, 'IO::File'); $zip = Archive::Zip->new; ( $zip->readFromFileHandle($fh, $par) == Archive::Zip::AZ_OK() ) or die "Read '$par' error: $!"; } my %env = do { if ($zip and my $meta = $zip->contents('META.yml')) { $meta =~ s/.*^par:$//ms; $meta =~ s/^\S.*//ms; $meta =~ /^ ([^:]+): (.+)$/mg; } }; # Open input and output files {{{ local $/ = \4; if (defined $par) { open PAR, '<', $par or die "$!: $par"; binmode(PAR); die "$par is not a PAR file" unless eq "PK\003\004"; } CreatePath($out) ; my $fh = IO::File->new( $out, IO::File::O_CREAT() | IO::File::O_WRONLY() | IO::File::O_TRUNC(), 0777, ) or die $!; binmode($fh); $/ = (defined $data_pos) ? \$data_pos : undef; seek _FH, 0, 0; my $loader = scalar <_FH>; if (!$ENV{PAR_VERBATIM} and $loader =~ /^(?:#!|\@rem)/) { require PAR::Filter::PodStrip; PAR::Filter::PodStrip->new->apply(\$loader, $0) } foreach my $key (sort keys %env) { my $val = $env{$key} or next; $val = eval $val if $val =~ /^['"]/; my $magic = "__ENV_PAR_" . uc($key) . "__"; my $set = "PAR_" . uc($key) . "=$val"; $loader =~ s{$magic( +)}{ $magic . $set . (' ' x (length($1) - length($set))) }eg; } $fh->print($loader); $/ = undef; # }}} # Write bundled modules {{{ if ($bundle) { require PAR::Heavy; PAR::Heavy::_init_dynaloader(); init_inc(); require_modules(); my @inc = sort { length($b) <=> length($a) } grep { !/BSDPAN/ } grep { ($bundle ne 'site') or ($_ ne $Config::Config{archlibexp} and $_ ne $Config::Config{privlibexp}); } @INC; if ($Config{_delim} eq '\\') { s{\\}{/}g for @inc } my %files; /^_<(.+)$/ and $files{$1}++ for keys %::; $files{$_}++ for values %INC; my $lib_ext = $Config::Config{lib_ext}; my %written; foreach (sort keys %files) { my ($name, $file); foreach my $dir (@inc) { if ($name = $PAR::Heavy::FullCache{$_}) { $file = $_; last; } elsif (/^(\Q$dir\E\/(.*[^Cc]))\Z/i) { ($file, $name) = ($1, $2); last; } elsif (m!^/loader/[^/]+/(.*[^Cc])\Z!) { if (my $ref = $PAR::Heavy::ModuleCache{$1}) { ($file, $name) = ($ref, $1); last; } elsif (-f "$dir/$1") { ($file, $name) = ("$dir/$1", $1); last; } } } next unless defined $name and not $written{$name}++; next if !ref($file) and $file =~ /\.\Q$lib_ext\E$/; outs( join "", qq(Packing "), ref $file ? $file->{name} : $file, qq("...) ); my $content; if (ref($file)) { $content = $file->{buf}; } else { open FILE, '<', $file or die "Can't open $file: $!"; binmode(FILE); $content = ; close FILE; PAR::Filter::PodStrip->new->apply(\$content, $file) if !$ENV{PAR_VERBATIM} and $name =~ /\.(?:pm|ix|al)$/i; # Do not let XSLoader pick up auto/* from environment $content =~ s/goto +retry +unless +.*/goto retry;/ if lc($name) eq lc("XSLoader.pm"); } outs(qq(Written as "$name")); $fh->print("FILE"); $fh->print(pack('N', length($name) + 9)); $fh->print(sprintf( "%08x/%s", Archive::Zip::computeCRC32($content), $name )); $fh->print(pack('N', length($content))); $fh->print($content); } } # }}} # Now write out the PAR and magic strings {{{ $zip->writeToFileHandle($fh) if $zip; $cache_name = substr $cache_name, 0, 40; if (!$cache_name and my $mtime = (stat($out))[9]) { my $ctx = eval { require Digest::SHA; Digest::SHA->new(1) } || eval { require Digest::SHA1; Digest::SHA1->new } || eval { require Digest::MD5; Digest::MD5->new }; # Workaround for bug in Digest::SHA 5.38 and 5.39 my $sha_version = eval { $Digest::SHA::VERSION } || 0; if ($sha_version eq '5.38' or $sha_version eq '5.39') { $ctx->addfile($out, "b") if ($ctx); } else { if ($ctx and open(my $fh, "<$out")) { binmode($fh); $ctx->addfile($fh); close($fh); } } $cache_name = $ctx ? $ctx->hexdigest : $mtime; } $cache_name .= "\0" x (41 - length $cache_name); $cache_name .= "CACHE"; $fh->print($cache_name); $fh->print(pack('N', $fh->tell - length($loader))); $fh->print("\nPAR.pm\n"); $fh->close; chmod 0755, $out; # }}} exit; } # }}} # Prepare $progname into PAR file cache {{{ { last unless defined $start_pos; _fix_progname(); # Now load the PAR file and put it into PAR::LibCache {{{ require PAR; PAR::Heavy::_init_dynaloader(); { #local $INC{'Cwd.pm'} = __FILE__ if $^O ne 'MSWin32'; require File::Find; require Archive::Zip; } my $zip = Archive::Zip->new; my $fh = IO::File->new; $fh->fdopen(fileno(_FH), 'r') or die "$!: $@"; $zip->readFromFileHandle($fh, $progname) == Archive::Zip::AZ_OK() or die "$!: $@"; push @PAR::LibCache, $zip; $PAR::LibCache{$progname} = $zip; $quiet = !$ENV{PAR_DEBUG}; outs(qq(\$ENV{PAR_TEMP} = "$ENV{PAR_TEMP}")); if (defined $ENV{PAR_TEMP}) { # should be set at this point! foreach my $member ( $zip->members ) { next if $member->isDirectory; my $member_name = $member->fileName; next unless $member_name =~ m{ ^ /?shlib/ (?:$Config::Config{version}/)? (?:$Config::Config{archname}/)? ([^/]+) $ }x; my $extract_name = $1; my $dest_name = File::Spec->catfile($ENV{PAR_TEMP}, $extract_name); if (-f $dest_name && -s _ == $member->uncompressedSize()) { outs(qq(Skipping "$member_name" since it already exists at "$dest_name")); } else { $member->extractToFileNamed($dest_name); outs(qq(Extracting "$member_name" to "$dest_name")); } } } # }}} } # }}} # If there's no main.pl to run, show usage {{{ unless ($PAR::LibCache{$progname}) { die << "." unless @ARGV; Usage: $0 [ -Alib.par ] [ -Idir ] [ -Mmodule ] [ src.par ] [ program.pl ] $0 [ -B|-b ] [-Ooutfile] src.par . $ENV{PAR_PROGNAME} = $progname = $0 = shift(@ARGV); } # }}} sub CreatePath { my ($name) = @_; require File::Basename; my ($basename, $path, $ext) = File::Basename::fileparse($name, ('\..*')); require File::Path; File::Path::mkpath($path) unless(-e $path); # mkpath dies with error } sub require_modules { #local $INC{'Cwd.pm'} = __FILE__ if $^O ne 'MSWin32'; require lib; require DynaLoader; require integer; require strict; require warnings; require vars; require Carp; require Carp::Heavy; require Exporter::Heavy; require Exporter; require Fcntl; require File::Temp; require File::Spec; require XSLoader; require Config; require IO::Handle; require IO::File; require Compress::Zlib; require Archive::Zip; require PAR; require PAR::Heavy; require PAR::Dist; require PAR::Filter::PodStrip; eval { require Cwd }; eval { require Win32 }; eval { require Win32::Process }; eval { require Scalar::Util }; eval { require Archive::Unzip::Burst }; } # The C version of this code appears in myldr/mktmpdir.c sub _set_par_temp { if ($ENV{PAR_TEMP} and $ENV{PAR_TEMP} =~ /(.+)/) { $par_temp = $1; return; } foreach my $path ( (map $ENV{$_}, qw( PAR_TMPDIR TMPDIR TEMPDIR TEMP TMP )), qw( C:\\TEMP /tmp . ) ) { next unless $path and -d $path and -w $path; my $username; my $pwuid; # does not work everywhere: eval {($pwuid) = getpwuid($>) if defined $>;}; if ( defined(&Win32::LoginName) ) { $username = &Win32::LoginName; } elsif (defined $pwuid) { $username = $pwuid; } else { $username = $ENV{USERNAME} || $ENV{USER} || 'SYSTEM'; } $username =~ s/\W/_/g; my $stmpdir = "$path$Config{_delim}par-$username"; mkdir $stmpdir, 0755; if (!$ENV{PAR_CLEAN} and my $mtime = (stat($progname))[9]) { open (my $fh, "<". $progname); seek $fh, -18, 2; sysread $fh, my $buf, 6; if ($buf eq "\0CACHE") { seek $fh, -58, 2; sysread $fh, $buf, 41; $buf =~ s/\0//g; $stmpdir .= "$Config{_delim}cache-" . $buf; } else { my $ctx = eval { require Digest::SHA; Digest::SHA->new(1) } || eval { require Digest::SHA1; Digest::SHA1->new } || eval { require Digest::MD5; Digest::MD5->new }; # Workaround for bug in Digest::SHA 5.38 and 5.39 my $sha_version = eval { $Digest::SHA::VERSION } || 0; if ($sha_version eq '5.38' or $sha_version eq '5.39') { $ctx->addfile($progname, "b") if ($ctx); } else { if ($ctx and open(my $fh, "<$progname")) { binmode($fh); $ctx->addfile($fh); close($fh); } } $stmpdir .= "$Config{_delim}cache-" . ( $ctx ? $ctx->hexdigest : $mtime ); } close($fh); } else { $ENV{PAR_CLEAN} = 1; $stmpdir .= "$Config{_delim}temp-$$"; } $ENV{PAR_TEMP} = $stmpdir; mkdir $stmpdir, 0755; last; } $par_temp = $1 if $ENV{PAR_TEMP} and $ENV{PAR_TEMP} =~ /(.+)/; } sub _tempfile { my ($ext, $crc) = @_; my ($fh, $filename); $filename = "$par_temp/$crc$ext"; if ($ENV{PAR_CLEAN}) { unlink $filename if -e $filename; push @tmpfile, $filename; } else { return (undef, $filename) if (-r $filename); } open $fh, '>', $filename or die $!; binmode($fh); return($fh, $filename); } sub _set_progname { if ($ENV{PAR_PROGNAME} and $ENV{PAR_PROGNAME} =~ /(.+)/) { $progname = $1; } $progname ||= $0; if ($ENV{PAR_TEMP} and index($progname, $ENV{PAR_TEMP}) >= 0) { $progname = substr($progname, rindex($progname, $Config{_delim}) + 1); } if (!$ENV{PAR_PROGNAME} or index($progname, $Config{_delim}) >= 0) { if (open my $fh, '<', $progname) { return if -s $fh; } if (-s "$progname$Config{_exe}") { $progname .= $Config{_exe}; return; } } foreach my $dir (split /\Q$Config{path_sep}\E/, $ENV{PATH}) { next if exists $ENV{PAR_TEMP} and $dir eq $ENV{PAR_TEMP}; $dir =~ s/\Q$Config{_delim}\E$//; (($progname = "$dir$Config{_delim}$progname$Config{_exe}"), last) if -s "$dir$Config{_delim}$progname$Config{_exe}"; (($progname = "$dir$Config{_delim}$progname"), last) if -s "$dir$Config{_delim}$progname"; } } sub _fix_progname { $0 = $progname ||= $ENV{PAR_PROGNAME}; if (index($progname, $Config{_delim}) < 0) { $progname = ".$Config{_delim}$progname"; } # XXX - hack to make PWD work my $pwd = (defined &Cwd::getcwd) ? Cwd::getcwd() : ((defined &Win32::GetCwd) ? Win32::GetCwd() : `pwd`); chomp($pwd); $progname =~ s/^(?=\.\.?\Q$Config{_delim}\E)/$pwd$Config{_delim}/; $ENV{PAR_PROGNAME} = $progname; } sub _par_init_env { if ( $ENV{PAR_INITIALIZED}++ == 1 ) { return; } else { $ENV{PAR_INITIALIZED} = 2; } for (qw( SPAWNED TEMP CLEAN DEBUG CACHE PROGNAME ARGC ARGV_0 ) ) { delete $ENV{'PAR_'.$_}; } for (qw/ TMPDIR TEMP CLEAN DEBUG /) { $ENV{'PAR_'.$_} = $ENV{'PAR_GLOBAL_'.$_} if exists $ENV{'PAR_GLOBAL_'.$_}; } my $par_clean = "__ENV_PAR_CLEAN__ "; if ($ENV{PAR_TEMP}) { delete $ENV{PAR_CLEAN}; } elsif (!exists $ENV{PAR_GLOBAL_CLEAN}) { my $value = substr($par_clean, 12 + length("CLEAN")); $ENV{PAR_CLEAN} = $1 if $value =~ /^PAR_CLEAN=(\S+)/; } } sub outs { return if $quiet; if ($logfh) { print $logfh "@_\n"; } else { print "@_\n"; } } sub init_inc { require Config; push @INC, grep defined, map $Config::Config{$_}, qw( archlibexp privlibexp sitearchexp sitelibexp vendorarchexp vendorlibexp ); } ######################################################################## # The main package for script execution package main; require PAR; unshift @INC, \&PAR::find_par; PAR->import(@par_args); die qq(par.pl: Can't open perl script "$progname": No such file or directory\n) unless -e $progname; do $progname; CORE::exit($1) if ($@ =~/^_TK_EXIT_\((\d+)\)/); die $@ if $@; }; $::__ERROR = $@ if $@; } CORE::exit($1) if ($::__ERROR =~/^_TK_EXIT_\((\d+)\)/); die $::__ERROR if $::__ERROR; 1; #line 1021 __END__ Usage: DynaLoader::dl_undef_symbols()%s object version %s does not match %s%s%s%s %_Usage: DynaLoader::dl_install_xsub(perl_name, symref, filename="$Package")Usage: DynaLoader::dl_find_symbol(libhandle, symbolname)Usage: DynaLoader::dl_unload_file(libref)Usage: DynaLoader::dl_load_file(filename, flags=0)XS_VERSION%s::%s$::bootstrap parameterDynaLoader.cDynaLoader::dl_load_fileDynaLoader::dl_unload_fileDynaLoader::dl_find_symbolDynaLoader::dl_undef_symbolsDynaLoader::dl_install_xsubDynaLoader::dl_errorDynaLoader::_guts1.04PERL_DL_NONLAZYUsage: DynaLoader::dl_error()DynaLoaderp;  Ho  (QTHooolP"2BRbrҝ"2BRbržҞ"2BRbrŸҟ"2BRbr Ҡ"2BRbr¡ҡ"2BRbr¢Ң P} [GCC: (GNU) 4.2.1 (Ubuntu 4.2.1-5ubuntu4)GCC: (GNU) 4.2.1 (Ubuntu 4.2.1-5ubuntu4)GCC: (GNU) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)GCC: (GNU) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)GCC: (GNU) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)GCC: (GNU) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)GCC: (GNU) 4.2.1 (Ubuntu 4.2.1-5ubuntu4)GCC: (GNU) 4.2.1 (Ubuntu 4.2.1-5ubuntu4)GCC: (GNU) 4.2.1 (Ubuntu 4.2.1-5ubuntu4)GCC: (GNU) 4.2.1 (Ubuntu 4.2.1-5ubuntu4)GCC: (GNU) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)GCC: (GNU) 4.2.1 (Ubuntu 4.2.1-5ubuntu4).shstrtab.interp.note.ABI-tag.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment (( %HHD!ot+ 3;ollHoW TTH`  i0d̜o"8Jum{@@m` 0N0PPPP Q (Q(R RP k?%s: creation of %s failed - aborting with %i. %s: creation of private temporary subdirectory %s failed - aborting with %i. %iPAR_ARGV_%i/9z  hHoԅȉ  T pooo`.>N^n~Νޝ.>N^n~ΞޞXr@0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0uQD0ueGCC: (GNU) 4.2.1 (Ubuntu 4.2.1-5ubuntu4)GCC: (GNU) 4.2.1 (Ubuntu 4.2.1-5ubuntu4)GCC: (GNU) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)GCC: (GNU) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)GCC: (GNU) 4.2.1 (Ubuntu 4.2.1-5ubuntu4)GCC: (GNU) 4.2.1 (Ubuntu 4.2.1-5ubuntu4)GCC: (GNU) 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)GCC: (GNU) 4.2.1 (Ubuntu 4.2.1-5ubuntu4).shstrtab.interp.note.ABI-tag.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment (( %HH!oԅ+ ȉ 3 ;o<HoW pp`   i0d؜Po0087uhhV{V HHLLTT\\``PPTT@ U7`FILE4c6a3a38/Config_heavy.pl~U# This file was created by configpm when Perl was built. Any changes # made to this file will be lost the next time perl is built. package Config; use strict; # use warnings; Pulls in Carp # use vars pulls in Carp ## ## This file was produced by running the Configure script. It holds all the ## definitions figured out by Configure. Should you modify one of these values, ## do not forget to propagate your changes by running "Configure -der". You may ## instead choose to run each of the .SH files by yourself, or "Configure -S". ## # ## Package name : perl5 ## Source directory : . ## Configuration time: Wed Jan 14 22:46:08 UTC 2009 ## Configured by : Debian Project ## Target system : linux palmer 2.6.24-19-server #1 smp sat jul 12 00:40:01 utc 2008 i686 gnulinux # ## Configure command line arguments. #PERL_PATCHLEVEL= our $summary = <<'!END!'; Summary of my $package (revision $revision $version_patchlevel_string) configuration: Platform: osname=$osname, osvers=$osvers, archname=$archname uname='$myuname' config_args='$config_args' hint=$hint, useposix=$useposix, d_sigaction=$d_sigaction usethreads=$usethreads use5005threads=$use5005threads useithreads=$useithreads usemultiplicity=$usemultiplicity useperlio=$useperlio d_sfio=$d_sfio uselargefiles=$uselargefiles usesocks=$usesocks use64bitint=$use64bitint use64bitall=$use64bitall uselongdouble=$uselongdouble usemymalloc=$usemymalloc, bincompat5005=undef Compiler: cc='$cc', ccflags ='$ccflags', optimize='$optimize', cppflags='$cppflags' ccversion='$ccversion', gccversion='$gccversion', gccosandvers='$gccosandvers' intsize=$intsize, longsize=$longsize, ptrsize=$ptrsize, doublesize=$doublesize, byteorder=$byteorder d_longlong=$d_longlong, longlongsize=$longlongsize, d_longdbl=$d_longdbl, longdblsize=$longdblsize ivtype='$ivtype', ivsize=$ivsize, nvtype='$nvtype', nvsize=$nvsize, Off_t='$lseektype', lseeksize=$lseeksize alignbytes=$alignbytes, prototype=$prototype Linker and Libraries: ld='$ld', ldflags ='$ldflags' libpth=$libpth libs=$libs perllibs=$perllibs libc=$libc, so=$so, useshrplib=$useshrplib, libperl=$libperl gnulibc_version='$gnulibc_version' Dynamic Linking: dlsrc=$dlsrc, dlext=$dlext, d_dlsymun=$d_dlsymun, ccdlflags='$ccdlflags' cccdlflags='$cccdlflags', lddlflags='$lddlflags' !END! my $summary_expanded; sub myconfig { return $summary_expanded if $summary_expanded; ($summary_expanded = $summary) =~ s{\$(\w+)} { my $c = $Config::Config{$1}; defined($c) ? $c : 'undef' }ge; $summary_expanded; } local *_ = \my $a; $_ = <<'!END!'; Author='' CONFIG='true' Date='$Date' Header='' Id='$Id' Locker='' Log='$Log' Mcc='Mcc' PATCHLEVEL='8' PERL_API_REVISION='5' PERL_API_SUBVERSION='0' PERL_API_VERSION='8' PERL_CONFIG_SH='true' PERL_REVISION='5' PERL_SUBVERSION='8' PERL_VERSION='8' RCSfile='$RCSfile' Revision='$Revision' SUBVERSION='8' Source='' State='' _a='.a' _exe='' _o='.o' afs='false' afsroot='/afs' alignbytes='4' ansi2knr='' aphostname='/bin/hostname' api_revision='5' api_subversion='0' api_version='8' api_versionstring='5.8.0' ar='ar' archlib='/usr/lib/perl/5.8' archlibexp='/usr/lib/perl/5.8' archname64='' archname='i486-linux-gnu-thread-multi' archobjs='' asctime_r_proto='REENTRANT_PROTO_B_SB' awk='awk' baserev='5.0' bash='' bin='/usr/bin' binexp='/usr/bin' bison='bison' byacc='byacc' byteorder='1234' c='' castflags='0' cat='cat' cc='cc' cccdlflags='-fPIC' ccdlflags='-Wl,-E' ccflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' ccflags_uselargefiles='-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' ccname='gcc' ccsymbols='' ccversion='' cf_by='Debian Project' cf_email='perl@packages.debian.org' cf_time='Wed Jan 14 22:46:08 UTC 2009' charsize='1' chgrp='' chmod='chmod' chown='' clocktype='clock_t' comm='comm' compress='' config_arg0='Configure' config_arg10='-Dvendorlib=/usr/share/perl5' config_arg11='-Dvendorarch=/usr/lib/perl5' config_arg12='-Dsiteprefix=/usr/local' config_arg13='-Dsitelib=/usr/local/share/perl/5.8.8' config_arg14='-Dsitearch=/usr/local/lib/perl/5.8.8' config_arg15='-Dman1dir=/usr/share/man/man1' config_arg16='-Dman3dir=/usr/share/man/man3' config_arg17='-Dsiteman1dir=/usr/local/man/man1' config_arg18='-Dsiteman3dir=/usr/local/man/man3' config_arg19='-Dman1ext=1' config_arg1='-Dusethreads' config_arg20='-Dman3ext=3perl' config_arg21='-Dpager=/usr/bin/sensible-pager' config_arg22='-Uafs' config_arg23='-Ud_csh' config_arg24='-Ud_ualarm' config_arg25='-Uusesfio' config_arg26='-Uusenm' config_arg27='-Duseshrplib' config_arg28='-Dlibperl=libperl.so.5.8.8' config_arg29='-Dd_dosuid' config_arg2='-Duselargefiles' config_arg30='-des' config_arg3='-Dccflags=-DDEBIAN' config_arg4='-Dcccdlflags=-fPIC' config_arg5='-Darchname=i486-linux-gnu' config_arg6='-Dprefix=/usr' config_arg7='-Dprivlib=/usr/share/perl/5.8' config_arg8='-Darchlib=/usr/lib/perl/5.8' config_arg9='-Dvendorprefix=/usr' config_argc='30' config_args='-Dusethreads -Duselargefiles -Dccflags=-DDEBIAN -Dcccdlflags=-fPIC -Darchname=i486-linux-gnu -Dprefix=/usr -Dprivlib=/usr/share/perl/5.8 -Darchlib=/usr/lib/perl/5.8 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.8.8 -Dsitearch=/usr/local/lib/perl/5.8.8 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -Duseshrplib -Dlibperl=libperl.so.5.8.8 -Dd_dosuid -des' contains='grep' cp='cp' cpio='' cpp='cpp' cpp_stuff='42' cppccsymbols='' cppflags='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include' cpplast='-' cppminus='-' cpprun='cc -E' cppstdin='cc -E' cppsymbols='__ELF__=1 _FILE_OFFSET_BITS=64 __GLIBC__=2 __GLIBC_MINOR__=7 __GNUC__=4 __GNUC_MINOR__=2 __GNU_LIBRARY__=6 _GNU_SOURCE=1 _LARGEFILE64_SOURCE=1 _LARGEFILE_SOURCE=1 _POSIX_C_SOURCE=200112L _POSIX_SOURCE=1 _REENTRANT=1 __STDC__=1 __USE_BSD=1 __USE_FILE_OFFSET64=1 __USE_GNU=1 __USE_LARGEFILE=1 __USE_LARGEFILE64=1 __USE_MISC=1 __USE_POSIX=1 __USE_POSIX199309=1 __USE_POSIX199506=1 __USE_POSIX2=1 __USE_REENTRANT=1 __USE_SVID=1 __USE_UNIX98=1 __USE_XOPEN=1 __USE_XOPEN_EXTENDED=1 _XOPEN_SOURCE=600 _XOPEN_SOURCE_EXTENDED=1 i386=1 __i386=1 __i386__=1 __i486=1 __i486__=1 linux=1 __linux=1 __linux__=1 unix=1 __unix=1 __unix__=1' crypt_r_proto='REENTRANT_PROTO_B_CCS' cryptlib='' csh='csh' ctermid_r_proto='0' ctime_r_proto='REENTRANT_PROTO_B_SB' d_Gconvert='gcvt((x),(n),(b))' d_PRIEUldbl='define' d_PRIFUldbl='define' d_PRIGUldbl='define' d_PRIXU64='define' d_PRId64='define' d_PRIeldbl='define' d_PRIfldbl='define' d_PRIgldbl='define' d_PRIi64='define' d_PRIo64='define' d_PRIu64='define' d_PRIx64='define' d_SCNfldbl='define' d__fwalk='undef' d_access='define' d_accessx='undef' d_aintl='undef' d_alarm='define' d_archlib='define' d_asctime_r='define' d_atolf='undef' d_atoll='define' d_attribute_format='define' d_attribute_malloc='define' d_attribute_nonnull='define' d_attribute_noreturn='define' d_attribute_pure='define' d_attribute_unused='define' d_attribute_warn_unused_result='define' d_bcmp='define' d_bcopy='define' d_bsd='undef' d_bsdgetpgrp='undef' d_bsdsetpgrp='undef' d_bzero='define' d_casti32='undef' d_castneg='define' d_charvspr='define' d_chown='define' d_chroot='define' d_chsize='undef' d_class='undef' d_clearenv='define' d_closedir='define' d_cmsghdr_s='define' d_const='define' d_copysignl='define' d_crypt='define' d_crypt_r='define' d_csh='undef' d_ctermid_r='undef' d_ctime_r='define' d_cuserid='define' d_dbl_dig='define' d_dbminitproto='define' d_difftime='define' d_dirfd='define' d_dirnamlen='undef' d_dlerror='define' d_dlopen='define' d_dlsymun='undef' d_dosuid='define' d_drand48_r='define' d_drand48proto='define' d_dup2='define' d_eaccess='define' d_endgrent='define' d_endgrent_r='undef' d_endhent='define' d_endhostent_r='undef' d_endnent='define' d_endnetent_r='undef' d_endpent='define' d_endprotoent_r='undef' d_endpwent='define' d_endpwent_r='undef' d_endsent='define' d_endservent_r='undef' d_eofnblk='define' d_eunice='undef' d_faststdio='undef' d_fchdir='define' d_fchmod='define' d_fchown='define' d_fcntl='define' d_fcntl_can_lock='define' d_fd_macros='define' d_fd_set='define' d_fds_bits='define' d_fgetpos='define' d_finite='define' d_finitel='define' d_flexfnam='define' d_flock='define' d_flockproto='define' d_fork='define' d_fp_class='undef' d_fpathconf='define' d_fpclass='undef' d_fpclassify='undef' d_fpclassl='undef' d_fpos64_t='undef' d_frexpl='define' d_fs_data_s='undef' d_fseeko='define' d_fsetpos='define' d_fstatfs='define' d_fstatvfs='define' d_fsync='define' d_ftello='define' d_ftime='undef' d_futimes='define' d_getcwd='define' d_getespwnam='undef' d_getfsstat='undef' d_getgrent='define' d_getgrent_r='define' d_getgrgid_r='define' d_getgrnam_r='define' d_getgrps='define' d_gethbyaddr='define' d_gethbyname='define' d_gethent='define' d_gethname='define' d_gethostbyaddr_r='define' d_gethostbyname_r='define' d_gethostent_r='define' d_gethostprotos='define' d_getitimer='define' d_getlogin='define' d_getlogin_r='define' d_getmnt='undef' d_getmntent='define' d_getnbyaddr='define' d_getnbyname='define' d_getnent='define' d_getnetbyaddr_r='define' d_getnetbyname_r='define' d_getnetent_r='define' d_getnetprotos='define' d_getpagsz='define' d_getpbyname='define' d_getpbynumber='define' d_getpent='define' d_getpgid='define' d_getpgrp2='undef' d_getpgrp='define' d_getppid='define' d_getprior='define' d_getprotobyname_r='define' d_getprotobynumber_r='define' d_getprotoent_r='define' d_getprotoprotos='define' d_getprpwnam='undef' d_getpwent='define' d_getpwent_r='define' d_getpwnam_r='define' d_getpwuid_r='define' d_getsbyname='define' d_getsbyport='define' d_getsent='define' d_getservbyname_r='define' d_getservbyport_r='define' d_getservent_r='define' d_getservprotos='define' d_getspnam='define' d_getspnam_r='define' d_gettimeod='define' d_gmtime_r='define' d_gnulibc='define' d_grpasswd='define' d_hasmntopt='define' d_htonl='define' d_ilogbl='define' d_index='undef' d_inetaton='define' d_int64_t='define' d_isascii='define' d_isfinite='undef' d_isinf='define' d_isnan='define' d_isnanl='define' d_killpg='define' d_lchown='define' d_ldbl_dig='define' d_libm_lib_version='define' d_link='define' d_localtime_r='define' d_locconv='define' d_lockf='define' d_longdbl='define' d_longlong='define' d_lseekproto='define' d_lstat='define' d_madvise='define' d_malloc_good_size='undef' d_malloc_size='undef' d_mblen='define' d_mbstowcs='define' d_mbtowc='define' d_memchr='define' d_memcmp='define' d_memcpy='define' d_memmove='define' d_memset='define' d_mkdir='define' d_mkdtemp='define' d_mkfifo='define' d_mkstemp='define' d_mkstemps='undef' d_mktime='define' d_mmap='define' d_modfl='define' d_modfl_pow32_bug='undef' d_modflproto='define' d_mprotect='define' d_msg='define' d_msg_ctrunc='define' d_msg_dontroute='define' d_msg_oob='define' d_msg_peek='define' d_msg_proxy='define' d_msgctl='define' d_msgget='define' d_msghdr_s='define' d_msgrcv='define' d_msgsnd='define' d_msync='define' d_munmap='define' d_mymalloc='undef' d_nice='define' d_nl_langinfo='define' d_nv_preserves_uv='define' d_nv_zero_is_allbits_zero='define' d_off64_t='define' d_old_pthread_create_joinable='undef' d_oldpthreads='undef' d_oldsock='undef' d_open3='define' d_pathconf='define' d_pause='define' d_perl_otherlibdirs='undef' d_phostname='undef' d_pipe='define' d_poll='define' d_portable='define' d_procselfexe='define' d_pthread_atfork='define' d_pthread_attr_setscope='define' d_pthread_yield='define' d_pwage='undef' d_pwchange='undef' d_pwclass='undef' d_pwcomment='undef' d_pwexpire='undef' d_pwgecos='define' d_pwpasswd='define' d_pwquota='undef' d_qgcvt='define' d_quad='define' d_random_r='define' d_readdir64_r='define' d_readdir='define' d_readdir_r='define' d_readlink='define' d_readv='define' d_recvmsg='define' d_rename='define' d_rewinddir='define' d_rmdir='define' d_safebcpy='undef' d_safemcpy='undef' d_sanemcmp='define' d_sbrkproto='define' d_scalbnl='define' d_sched_yield='define' d_scm_rights='define' d_seekdir='define' d_select='define' d_sem='define' d_semctl='define' d_semctl_semid_ds='define' d_semctl_semun='define' d_semget='define' d_semop='define' d_sendmsg='define' d_setegid='define' d_seteuid='define' d_setgrent='define' d_setgrent_r='undef' d_setgrps='define' d_sethent='define' d_sethostent_r='undef' d_setitimer='define' d_setlinebuf='define' d_setlocale='define' d_setlocale_r='undef' d_setnent='define' d_setnetent_r='undef' d_setpent='define' d_setpgid='define' d_setpgrp2='undef' d_setpgrp='define' d_setprior='define' d_setproctitle='undef' d_setprotoent_r='undef' d_setpwent='define' d_setpwent_r='undef' d_setregid='define' d_setresgid='define' d_setresuid='define' d_setreuid='define' d_setrgid='undef' d_setruid='undef' d_setsent='define' d_setservent_r='undef' d_setsid='define' d_setvbuf='define' d_sfio='undef' d_shm='define' d_shmat='define' d_shmatprototype='define' d_shmctl='define' d_shmdt='define' d_shmget='define' d_sigaction='define' d_sigprocmask='define' d_sigsetjmp='define' d_sockatmark='define' d_sockatmarkproto='define' d_socket='define' d_socklen_t='define' d_sockpair='define' d_socks5_init='undef' d_sprintf_returns_strlen='define' d_sqrtl='define' d_srand48_r='define' d_srandom_r='define' d_sresgproto='define' d_sresuproto='define' d_statblks='define' d_statfs_f_flags='undef' d_statfs_s='define' d_statvfs='define' d_stdio_cnt_lval='undef' d_stdio_ptr_lval='undef' d_stdio_ptr_lval_nochange_cnt='undef' d_stdio_ptr_lval_sets_cnt='undef' d_stdio_stream_array='undef' d_stdiobase='undef' d_stdstdio='undef' d_strchr='define' d_strcoll='define' d_strctcpy='define' d_strerrm='strerror(e)' d_strerror='define' d_strerror_r='define' d_strftime='define' d_strlcat='undef' d_strlcpy='undef' d_strtod='define' d_strtol='define' d_strtold='define' d_strtoll='define' d_strtoq='define' d_strtoul='define' d_strtoull='define' d_strtouq='define' d_strxfrm='define' d_suidsafe='undef' d_symlink='define' d_syscall='define' d_syscallproto='define' d_sysconf='define' d_sysernlst='' d_syserrlst='define' d_system='define' d_tcgetpgrp='define' d_tcsetpgrp='define' d_telldir='define' d_telldirproto='define' d_time='define' d_times='define' d_tm_tm_gmtoff='define' d_tm_tm_zone='define' d_tmpnam_r='define' d_truncate='define' d_ttyname_r='define' d_tzname='define' d_u32align='undef' d_ualarm='undef' d_umask='define' d_uname='define' d_union_semun='undef' d_unordered='undef' d_unsetenv='define' d_usleep='define' d_usleepproto='define' d_ustat='define' d_vendorarch='define' d_vendorbin='define' d_vendorlib='define' d_vendorscript='define' d_vfork='undef' d_void_closedir='undef' d_voidsig='define' d_voidtty='' d_volatile='define' d_vprintf='define' d_wait4='define' d_waitpid='define' d_wcstombs='define' d_wctomb='define' d_writev='define' d_xenix='undef' date='date' db_hashtype='u_int32_t' db_prefixtype='size_t' db_version_major='4' db_version_minor='6' db_version_patch='21' defvoidused='15' direntrytype='struct dirent' dlext='so' dlsrc='dl_dlopen.xs' doublesize='8' drand01='drand48()' drand48_r_proto='REENTRANT_PROTO_I_ST' dynamic_ext='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared' eagain='EAGAIN' ebcdic='undef' echo='echo' egrep='egrep' emacs='' endgrent_r_proto='0' endhostent_r_proto='0' endnetent_r_proto='0' endprotoent_r_proto='0' endpwent_r_proto='0' endservent_r_proto='0' eunicefix=':' exe_ext='' expr='expr' extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared Errno' extras='' fflushNULL='define' fflushall='undef' find='' firstmakefile='makefile' flex='' fpossize='16' fpostype='fpos_t' freetype='void' from=':' full_ar='/usr/bin/ar' full_csh='csh' full_sed='/bin/sed' gccansipedantic='' gccosandvers='' gccversion='4.2.3 (Ubuntu 4.2.3-2ubuntu7)' getgrent_r_proto='REENTRANT_PROTO_I_SBWR' getgrgid_r_proto='REENTRANT_PROTO_I_TSBWR' getgrnam_r_proto='REENTRANT_PROTO_I_CSBWR' gethostbyaddr_r_proto='REENTRANT_PROTO_I_TsISBWRE' gethostbyname_r_proto='REENTRANT_PROTO_I_CSBWRE' gethostent_r_proto='REENTRANT_PROTO_I_SBWRE' getlogin_r_proto='REENTRANT_PROTO_I_BW' getnetbyaddr_r_proto='REENTRANT_PROTO_I_uISBWRE' getnetbyname_r_proto='REENTRANT_PROTO_I_CSBWRE' getnetent_r_proto='REENTRANT_PROTO_I_SBWRE' getprotobyname_r_proto='REENTRANT_PROTO_I_CSBWR' getprotobynumber_r_proto='REENTRANT_PROTO_I_ISBWR' getprotoent_r_proto='REENTRANT_PROTO_I_SBWR' getpwent_r_proto='REENTRANT_PROTO_I_SBWR' getpwnam_r_proto='REENTRANT_PROTO_I_CSBWR' getpwuid_r_proto='REENTRANT_PROTO_I_TSBWR' getservbyname_r_proto='REENTRANT_PROTO_I_CCSBWR' getservbyport_r_proto='REENTRANT_PROTO_I_ICSBWR' getservent_r_proto='REENTRANT_PROTO_I_SBWR' getspnam_r_proto='REENTRANT_PROTO_I_CSBWR' gidformat='"lu"' gidsign='1' gidsize='4' gidtype='gid_t' glibpth='/usr/shlib /lib /usr/lib /usr/lib/386 /lib/386 /usr/ccs/lib /usr/ucblib /usr/local/lib ' gmake='gmake' gmtime_r_proto='REENTRANT_PROTO_S_TS' gnulibc_version='2.7' grep='grep' groupcat='cat /etc/group' groupstype='gid_t' gzip='gzip' h_fcntl='false' h_sysfile='true' hint='recommended' hostcat='cat /etc/hosts' html1dir=' ' html1direxp='' html3dir=' ' html3direxp='' i16size='2' i16type='short' i32size='4' i32type='long' i64size='8' i64type='long long' i8size='1' i8type='char' i_arpainet='define' i_bsdioctl='' i_crypt='define' i_db='define' i_dbm='define' i_dirent='define' i_dld='undef' i_dlfcn='define' i_fcntl='undef' i_float='define' i_fp='undef' i_fp_class='undef' i_gdbm='define' i_grp='define' i_ieeefp='undef' i_inttypes='define' i_langinfo='define' i_libutil='undef' i_limits='define' i_locale='define' i_machcthr='undef' i_malloc='define' i_math='define' i_memory='undef' i_mntent='define' i_ndbm='define' i_netdb='define' i_neterrno='undef' i_netinettcp='define' i_niin='define' i_poll='define' i_prot='undef' i_pthread='define' i_pwd='define' i_rpcsvcdbm='undef' i_sfio='undef' i_sgtty='undef' i_shadow='define' i_socks='undef' i_stdarg='define' i_stddef='define' i_stdlib='define' i_string='define' i_sunmath='undef' i_sysaccess='undef' i_sysdir='define' i_sysfile='define' i_sysfilio='undef' i_sysin='undef' i_sysioctl='define' i_syslog='define' i_sysmman='define' i_sysmode='undef' i_sysmount='define' i_sysndir='undef' i_sysparam='define' i_sysresrc='define' i_syssecrt='undef' i_sysselct='define' i_syssockio='undef' i_sysstat='define' i_sysstatfs='define' i_sysstatvfs='define' i_systime='define' i_systimek='undef' i_systimes='define' i_systypes='define' i_sysuio='define' i_sysun='define' i_sysutsname='define' i_sysvfs='define' i_syswait='define' i_termio='undef' i_termios='define' i_time='define' i_unistd='define' i_ustat='define' i_utime='define' i_values='define' i_varargs='undef' i_varhdr='stdarg.h' i_vfork='undef' ignore_versioned_solibs='y' inc_version_list='5.8.7 5.8.6 5.8.4 5.8.3 5.8.2 5.8.1 5.8.0' inc_version_list_init='"5.8.7","5.8.6","5.8.4","5.8.3","5.8.2","5.8.1","5.8.0",0' incpath='' inews='' installarchlib='/usr/lib/perl/5.8' installbin='/usr/bin' installhtml1dir='' installhtml3dir='' installman1dir='/usr/share/man/man1' installman3dir='/usr/share/man/man3' installprefix='/usr' installprefixexp='/usr' installprivlib='/usr/share/perl/5.8' installscript='/usr/bin' installsitearch='/usr/local/lib/perl/5.8.8' installsitebin='/usr/local/bin' installsitehtml1dir='' installsitehtml3dir='' installsitelib='/usr/local/share/perl/5.8.8' installsiteman1dir='/usr/local/man/man1' installsiteman3dir='/usr/local/man/man3' installsitescript='/usr/local/bin' installstyle='lib/perl5' installusrbinperl='undef' installvendorarch='/usr/lib/perl5' installvendorbin='/usr/bin' installvendorhtml1dir='' installvendorhtml3dir='' installvendorlib='/usr/share/perl5' installvendorman1dir='/usr/share/man/man1' installvendorman3dir='/usr/share/man/man3' installvendorscript='/usr/bin' intsize='4' issymlink='/usr/bin/test -h' ivdformat='"ld"' ivsize='4' ivtype='long' known_extensions='B ByteLoader Cwd DB_File Data/Dumper Devel/DProf Devel/PPPort Devel/Peek Digest/MD5 Encode Fcntl File/Glob Filter/Util/Call GDBM_File I18N/Langinfo IO IPC/SysV List/Util MIME/Base64 NDBM_File ODBM_File Opcode POSIX PerlIO/encoding PerlIO/scalar PerlIO/via SDBM_File Socket Storable Sys/Hostname Sys/Syslog Thread Time/HiRes Unicode/Normalize XS/APItest XS/Typemap attrs re threads threads/shared' ksh='' ld='cc' lddlflags='-shared -L/usr/local/lib' ldflags=' -L/usr/local/lib' ldflags_uselargefiles='' ldlibpthname='LD_LIBRARY_PATH' less='less' lib_ext='.a' libc='/lib/libc-2.7.so' libperl='libperl.so.5.8.8' libpth='/usr/local/lib /lib /usr/lib' libs='-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt' libsdirs=' /usr/lib' libsfiles=' libgdbm.so libgdbm_compat.so libdb.so libdl.so libm.so libpthread.so libc.so libcrypt.so' libsfound=' /usr/lib/libgdbm.so /usr/lib/libgdbm_compat.so /usr/lib/libdb.so /usr/lib/libdl.so /usr/lib/libm.so /usr/lib/libpthread.so /usr/lib/libc.so /usr/lib/libcrypt.so' libspath=' /usr/local/lib /lib /usr/lib' libswanted='gdbm gdbm_compat db dl m pthread c crypt' libswanted_uselargefiles='' line='' lint='' lkflags='' ln='ln' lns='/bin/ln -s' localtime_r_proto='REENTRANT_PROTO_S_TS' locincpth='/usr/local/include /opt/local/include /usr/gnu/include /opt/gnu/include /usr/GNU/include /opt/GNU/include' loclibpth='/usr/local/lib /opt/local/lib /usr/gnu/lib /opt/gnu/lib /usr/GNU/lib /opt/GNU/lib' longdblsize='12' longlongsize='8' longsize='4' lp='' lpr='' ls='ls' lseeksize='8' lseektype='off_t' mail='' mailx='' make='make' make_set_make='#' mallocobj='' mallocsrc='' malloctype='void *' man1dir='/usr/share/man/man1' man1direxp='/usr/share/man/man1' man1ext='1p' man3dir='/usr/share/man/man3' man3direxp='/usr/share/man/man3' man3ext='3pm' mips_type='' mistrustnm='' mkdir='mkdir' mmaptype='void *' modetype='mode_t' more='more' multiarch='undef' mv='' myarchname='i686-linux' mydomain='' myhostname='localhost' myuname='linux palmer 2.6.24-19-server #1 smp sat jul 12 00:40:01 utc 2008 i686 gnulinux ' n='-n' need_va_copy='undef' netdb_hlen_type='size_t' netdb_host_type='const void *' netdb_name_type='const char *' netdb_net_type='in_addr_t' nm='nm' nm_opt='' nm_so_opt='--dynamic' nonxs_ext='Errno' nroff='nroff' nvEUformat='"E"' nvFUformat='"F"' nvGUformat='"G"' nv_preserves_uv_bits='32' nveformat='"e"' nvfformat='"f"' nvgformat='"g"' nvsize='8' nvtype='double' o_nonblock='O_NONBLOCK' obj_ext='.o' old_pthread_create_joinable='' optimize='-O2' orderlib='false' osname='linux' osvers='2.6.24-19-server' otherlibdirs=' ' package='perl5' pager='/usr/bin/sensible-pager' passcat='cat /etc/passwd' patchlevel='8' path_sep=':' perl5='/usr/bin/perl' perl='' perl_patchlevel='' perladmin='root@localhost' perllibs='-ldl -lm -lpthread -lc -lcrypt' perlpath='/usr/bin/perl' pg='pg' phostname='hostname' pidtype='pid_t' plibpth='' pmake='' pr='' prefix='/usr' prefixexp='/usr' privlib='/usr/share/perl/5.8' privlibexp='/usr/share/perl/5.8' procselfexe='"/proc/self/exe"' prototype='define' ptrsize='4' quadkind='3' quadtype='long long' randbits='48' randfunc='drand48' random_r_proto='REENTRANT_PROTO_I_St' randseedtype='long' ranlib=':' rd_nodata='-1' readdir64_r_proto='REENTRANT_PROTO_I_TSR' readdir_r_proto='REENTRANT_PROTO_I_TSR' revision='5' rm='rm' rmail='' run='' runnm='false' sPRIEUldbl='"LE"' sPRIFUldbl='"LF"' sPRIGUldbl='"LG"' sPRIXU64='"LX"' sPRId64='"Ld"' sPRIeldbl='"Le"' sPRIfldbl='"Lf"' sPRIgldbl='"Lg"' sPRIi64='"Li"' sPRIo64='"Lo"' sPRIu64='"Lu"' sPRIx64='"Lx"' sSCNfldbl='"Lf"' sched_yield='sched_yield()' scriptdir='/usr/bin' scriptdirexp='/usr/bin' sed='sed' seedfunc='srand48' selectminbits='32' selecttype='fd_set *' sendmail='' setgrent_r_proto='0' sethostent_r_proto='0' setlocale_r_proto='0' setnetent_r_proto='0' setprotoent_r_proto='0' setpwent_r_proto='0' setservent_r_proto='0' sh='/bin/sh' shar='' sharpbang='#!' shmattype='void *' shortsize='2' shrpenv='' shsharp='true' sig_count='65' sig_name='ZERO HUP INT QUIT ILL TRAP ABRT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS NUM32 NUM33 RTMIN NUM35 NUM36 NUM37 NUM38 NUM39 NUM40 NUM41 NUM42 NUM43 NUM44 NUM45 NUM46 NUM47 NUM48 NUM49 NUM50 NUM51 NUM52 NUM53 NUM54 NUM55 NUM56 NUM57 NUM58 NUM59 NUM60 NUM61 NUM62 NUM63 RTMAX IOT CLD POLL UNUSED ' sig_name_init='"ZERO", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV", "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU", "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "IO", "PWR", "SYS", "NUM32", "NUM33", "RTMIN", "NUM35", "NUM36", "NUM37", "NUM38", "NUM39", "NUM40", "NUM41", "NUM42", "NUM43", "NUM44", "NUM45", "NUM46", "NUM47", "NUM48", "NUM49", "NUM50", "NUM51", "NUM52", "NUM53", "NUM54", "NUM55", "NUM56", "NUM57", "NUM58", "NUM59", "NUM60", "NUM61", "NUM62", "NUM63", "RTMAX", "IOT", "CLD", "POLL", "UNUSED", 0' sig_num='0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6 17 29 31 ' sig_num_init='0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 6, 17, 29, 31, 0' sig_size='69' signal_t='void' sitearch='/usr/local/lib/perl/5.8.8' sitearchexp='/usr/local/lib/perl/5.8.8' sitebin='/usr/local/bin' sitebinexp='/usr/local/bin' sitehtml1dir='' sitehtml1direxp='' sitehtml3dir='' sitehtml3direxp='' sitelib='/usr/local/share/perl/5.8.8' sitelib_stem='' sitelibexp='/usr/local/share/perl/5.8.8' siteman1dir='/usr/local/man/man1' siteman1direxp='/usr/local/man/man1' siteman3dir='/usr/local/man/man3' siteman3direxp='/usr/local/man/man3' siteprefix='/usr/local' siteprefixexp='/usr/local' sitescript='/usr/local/bin' sitescriptexp='/usr/local/bin' sizesize='4' sizetype='size_t' sleep='' smail='' so='so' sockethdr='' socketlib='' socksizetype='socklen_t' sort='sort' spackage='Perl5' spitshell='cat' srand48_r_proto='REENTRANT_PROTO_I_LS' srandom_r_proto='REENTRANT_PROTO_I_TS' src='.' ssizetype='ssize_t' startperl='#!/usr/bin/perl' startsh='#!/bin/sh' static_ext=' ' stdchar='char' stdio_base='((fp)->_IO_read_base)' stdio_bufsiz='((fp)->_IO_read_end - (fp)->_IO_read_base)' stdio_cnt='((fp)->_IO_read_end - (fp)->_IO_read_ptr)' stdio_filbuf='' stdio_ptr='((fp)->_IO_read_ptr)' stdio_stream_array='' strerror_r_proto='REENTRANT_PROTO_B_IBW' strings='/usr/include/string.h' submit='' subversion='8' sysman='/usr/share/man/man1' tail='' tar='' targetarch='' tbl='' tee='' test='test' timeincl='/usr/include/sys/time.h /usr/include/time.h ' timetype='time_t' tmpnam_r_proto='REENTRANT_PROTO_B_B' to=':' touch='touch' tr='tr' trnl='\n' troff='' ttyname_r_proto='REENTRANT_PROTO_I_IBW' u16size='2' u16type='unsigned short' u32size='4' u32type='unsigned long' u64size='8' u64type='unsigned long long' u8size='1' u8type='unsigned char' uidformat='"lu"' uidsign='1' uidsize='4' uidtype='uid_t' uname='uname' uniq='uniq' uquadtype='unsigned long long' use5005threads='undef' use64bitall='undef' use64bitint='undef' usecrosscompile='undef' usedl='define' usefaststdio='define' useithreads='define' uselargefiles='define' uselongdouble='undef' usemallocwrap='define' usemorebits='undef' usemultiplicity='define' usemymalloc='n' usenm='false' useopcode='true' useperlio='define' useposix='true' usereentrant='undef' usesfio='false' useshrplib='true' usesitecustomize='undef' usesocks='undef' usethreads='define' usevendorprefix='define' usevfork='false' usrinc='/usr/include' uuname='' uvXUformat='"lX"' uvoformat='"lo"' uvsize='4' uvtype='unsigned long' uvuformat='"lu"' uvxformat='"lx"' vendorarch='/usr/lib/perl5' vendorarchexp='/usr/lib/perl5' vendorbin='/usr/bin' vendorbinexp='/usr/bin' vendorhtml1dir=' ' vendorhtml1direxp='' vendorhtml3dir=' ' vendorhtml3direxp='' vendorlib='/usr/share/perl5' vendorlib_stem='' vendorlibexp='/usr/share/perl5' vendorman1dir='/usr/share/man/man1' vendorman1direxp='/usr/share/man/man1' vendorman3dir='/usr/share/man/man3' vendorman3direxp='/usr/share/man/man3' vendorprefix='/usr' vendorprefixexp='/usr' vendorscript='/usr/bin' vendorscriptexp='/usr/bin' version='5.8.8' version_patchlevel_string='version 8 subversion 8' versiononly='undef' vi='' voidflags='15' xlibpth='/usr/lib/386 /lib/386' yacc='yacc' yaccflags='' zcat='' zip='zip' !END! my $i = 0; foreach my $c (4,3,2) { $i |= ord($c); $i <<= 8 } $i |= ord(1); our $byteorder = join('', unpack('aaaa', pack('L!', $i))); s/(byteorder=)(['"]).*?\2/$1$2$Config::byteorder$2/m; my $config_sh_len = length $_; our $Config_SH_expanded = "\n$_" . << 'EOVIRTUAL'; ccflags_nolargefiles='-D_REENTRANT -D_GNU_SOURCE -DTHREADS_HAVE_PIDS -DDEBIAN -fno-strict-aliasing -pipe -I/usr/local/include ' ldflags_nolargefiles=' -L/usr/local/lib' libs_nolargefiles='-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt' libswanted_nolargefiles='gdbm gdbm_compat db dl m pthread c crypt' EOVIRTUAL # Search for it in the big string sub fetch_string { my($self, $key) = @_; # We only have ' delimted. my $start = index($Config_SH_expanded, "\n$key=\'"); # Start can never be -1 now, as we've rigged the long string we're # searching with an initial dummy newline. return undef if $start == -1; $start += length($key) + 3; my $value = substr($Config_SH_expanded, $start, index($Config_SH_expanded, "'\n", $start) - $start); # So we can say "if $Config{'foo'}". $value = undef if $value eq 'undef'; $self->{$key} = $value; # cache it } my $prevpos = 0; sub FIRSTKEY { $prevpos = 0; substr($Config_SH_expanded, 1, index($Config_SH_expanded, '=') - 1 ); } sub NEXTKEY { my $pos = index($Config_SH_expanded, qq('\n), $prevpos) + 2; my $len = index($Config_SH_expanded, "=", $pos) - $pos; $prevpos = $pos; $len > 0 ? substr($Config_SH_expanded, $pos, $len) : undef; } sub EXISTS { return 1 if exists($_[0]->{$_[1]}); return(index($Config_SH_expanded, "\n$_[1]='") != -1 ); } sub STORE { die "\%Config::Config is read-only\n" } *DELETE = \&STORE; *CLEAR = \&STORE; sub config_sh { substr $Config_SH_expanded, 1, $config_sh_len; } sub config_re { my $re = shift; return map { chomp; $_ } grep eval{ /^(?:$re)=/ }, split /^/, $Config_SH_expanded; } sub config_vars { # implements -V:cfgvar option (see perlrun -V:) foreach (@_) { # find optional leading, trailing colons; and query-spec my ($notag,$qry,$lncont) = m/^(:)?(.*?)(:)?$/; # flags fore and aft, # map colon-flags to print decorations my $prfx = $notag ? '': "$qry="; # tag-prefix for print my $lnend = $lncont ? ' ' : ";\n"; # line ending for print # all config-vars are by definition \w only, any \W means regex if ($qry =~ /\W/) { my @matches = config_re($qry); print map "$_$lnend", @matches ? @matches : "$qry: not found" if !$notag; print map { s/\w+=//; "$_$lnend" } @matches ? @matches : "$qry: not found" if $notag; } else { my $v = (exists $Config::Config{$qry}) ? $Config::Config{$qry} : 'UNKNOWN'; $v = 'undef' unless defined $v; print "${prfx}'${v}'$lnend"; } } } # Called by the real AUTOLOAD sub launcher { undef &AUTOLOAD; goto \&$Config::AUTOLOAD; } 1; FILEcbad24c6/Config.pm 8#line 1 "/usr/lib/perl/5.8/Config.pm" # This file was created by configpm when Perl was built. Any changes # made to this file will be lost the next time perl is built. package Config; use strict; # use warnings; Pulls in Carp # use vars pulls in Carp @Config::EXPORT = qw(%Config); @Config::EXPORT_OK = qw(myconfig config_sh config_vars config_re); # Need to stub all the functions to make code such as print Config::config_sh # keep working sub myconfig; sub config_sh; sub config_vars; sub config_re; my %Export_Cache = map {($_ => 1)} (@Config::EXPORT, @Config::EXPORT_OK); our %Config; # Define our own import method to avoid pulling in the full Exporter: sub import { my $pkg = shift; @_ = @Config::EXPORT unless @_; my @funcs = grep $_ ne '%Config', @_; my $export_Config = @funcs < @_ ? 1 : 0; no strict 'refs'; my $callpkg = caller(0); foreach my $func (@funcs) { die sprintf qq{"%s" is not exported by the %s module\n}, $func, __PACKAGE__ unless $Export_Cache{$func}; *{$callpkg.'::'.$func} = \&{$func}; } *{"$callpkg\::Config"} = \%Config if $export_Config; return; } die "Perl lib version (v5.8.8) doesn't match executable version ($])" unless $^V; $^V eq v5.8.8 or die "Perl lib version (v5.8.8) doesn't match executable version (" . sprintf("v%vd",$^V) . ")"; sub FETCH { my($self, $key) = @_; # check for cached value (which may be undef so we use exists not defined) return $self->{$key} if exists $self->{$key}; return $self->fetch_string($key); } sub TIEHASH { bless $_[1], $_[0]; } sub DESTROY { } sub AUTOLOAD { require 'Config_heavy.pl'; goto \&launcher unless $Config::AUTOLOAD =~ /launcher$/; die "&Config::AUTOLOAD failed on $Config::AUTOLOAD"; } # tie returns the object, so the value returned to require will be true. tie %Config, 'Config', { archlibexp => '/usr/lib/perl/5.8', archname => 'i486-linux-gnu-thread-multi', cc => 'cc', d_readlink => 'define', d_symlink => 'define', dlsrc => 'dl_dlopen.xs', dont_use_nlink => undef, exe_ext => '', inc_version_list => '5.8.7 5.8.6 5.8.4 5.8.3 5.8.2 5.8.1 5.8.0', intsize => '4', ldlibpthname => 'LD_LIBRARY_PATH', libpth => '/usr/local/lib /lib /usr/lib', osname => 'linux', osvers => '2.6.24-19-server', path_sep => ':', privlibexp => '/usr/share/perl/5.8', scriptdir => '/usr/bin', sitearchexp => '/usr/local/lib/perl/5.8.8', sitelibexp => '/usr/local/share/perl/5.8.8', useithreads => 'define', usevendorprefix => 'define', version => '5.8.8', }; FILE%7472c359/Archive/Zip/NewFileMember.pm#line 1 "/usr/local/share/perl/5.8.8/Archive/Zip/NewFileMember.pm" package Archive::Zip::NewFileMember; use strict; use vars qw( $VERSION @ISA ); BEGIN { $VERSION = '1.30'; @ISA = qw ( Archive::Zip::FileMember ); } use Archive::Zip qw( :CONSTANTS :ERROR_CODES :UTILITY_METHODS ); # Given a file name, set up for eventual writing. sub _newFromFileNamed { my $class = shift; my $fileName = shift; # local FS format my $newName = shift; $newName = _asZipDirName($fileName) unless defined($newName); return undef unless ( stat($fileName) && -r _ && !-d _ ); my $self = $class->new(@_); $self->{'fileName'} = $newName; $self->{'externalFileName'} = $fileName; $self->{'compressionMethod'} = COMPRESSION_STORED; my @stat = stat(_); $self->{'compressedSize'} = $self->{'uncompressedSize'} = $stat[7]; $self->desiredCompressionMethod( ( $self->compressedSize() > 0 ) ? COMPRESSION_DEFLATED : COMPRESSION_STORED ); $self->unixFileAttributes( $stat[2] ); $self->setLastModFileDateTimeFromUnix( $stat[9] ); $self->isTextFile( -T _ ); return $self; } sub rewindData { my $self = shift; my $status = $self->SUPER::rewindData(@_); return $status unless $status == AZ_OK; return AZ_IO_ERROR unless $self->fh(); $self->fh()->clearerr(); $self->fh()->seek( 0, IO::Seekable::SEEK_SET ) or return _ioError( "rewinding", $self->externalFileName() ); return AZ_OK; } # Return bytes read. Note that first parameter is a ref to a buffer. # my $data; # my ( $bytesRead, $status) = $self->readRawChunk( \$data, $chunkSize ); sub _readRawChunk { my ( $self, $dataRef, $chunkSize ) = @_; return ( 0, AZ_OK ) unless $chunkSize; my $bytesRead = $self->fh()->read( $$dataRef, $chunkSize ) or return ( 0, _ioError("reading data") ); return ( $bytesRead, AZ_OK ); } # If I already exist, extraction is a no-op. sub extractToFileNamed { my $self = shift; my $name = shift; # local FS name if ( File::Spec->rel2abs($name) eq File::Spec->rel2abs( $self->externalFileName() ) and -r $name ) { return AZ_OK; } else { return $self->SUPER::extractToFileNamed( $name, @_ ); } } 1; FILE$b90ea0c6/Archive/Zip/StringMember.pm #line 1 "/usr/local/share/perl/5.8.8/Archive/Zip/StringMember.pm" package Archive::Zip::StringMember; use strict; use vars qw( $VERSION @ISA ); BEGIN { $VERSION = '1.30'; @ISA = qw( Archive::Zip::Member ); } use Archive::Zip qw( :CONSTANTS :ERROR_CODES ); # Create a new string member. Default is COMPRESSION_STORED. # Can take a ref to a string as well. sub _newFromString { my $class = shift; my $string = shift; my $name = shift; my $self = $class->new(@_); $self->contents($string); $self->fileName($name) if defined($name); # Set the file date to now $self->setLastModFileDateTimeFromUnix( time() ); $self->unixFileAttributes( $self->DEFAULT_FILE_PERMISSIONS ); return $self; } sub _become { my $self = shift; my $newClass = shift; return $self if ref($self) eq $newClass; delete( $self->{'contents'} ); return $self->SUPER::_become($newClass); } # Get or set my contents. Note that we do not call the superclass # version of this, because it calls us. sub contents { my $self = shift; my $string = shift; if ( defined($string) ) { $self->{'contents'} = pack( 'C0a*', ( ref($string) eq 'SCALAR' ) ? $$string : $string ); $self->{'uncompressedSize'} = $self->{'compressedSize'} = length( $self->{'contents'} ); $self->{'compressionMethod'} = COMPRESSION_STORED; } return $self->{'contents'}; } # Return bytes read. Note that first parameter is a ref to a buffer. # my $data; # my ( $bytesRead, $status) = $self->readRawChunk( \$data, $chunkSize ); sub _readRawChunk { my ( $self, $dataRef, $chunkSize ) = @_; $$dataRef = substr( $self->contents(), $self->_readOffset(), $chunkSize ); return ( length($$dataRef), AZ_OK ); } 1; FILE%ef3eadff/Archive/Zip/ZipFileMember.pm5#line 1 "/usr/local/share/perl/5.8.8/Archive/Zip/ZipFileMember.pm" package Archive::Zip::ZipFileMember; use strict; use vars qw( $VERSION @ISA ); BEGIN { $VERSION = '1.30'; @ISA = qw ( Archive::Zip::FileMember ); } use Archive::Zip qw( :CONSTANTS :ERROR_CODES :PKZIP_CONSTANTS :UTILITY_METHODS ); # Create a new Archive::Zip::ZipFileMember # given a filename and optional open file handle # sub _newFromZipFile { my $class = shift; my $fh = shift; my $externalFileName = shift; my $possibleEocdOffset = shift; # normally 0 my $self = $class->new( 'crc32' => 0, 'diskNumberStart' => 0, 'localHeaderRelativeOffset' => 0, 'dataOffset' => 0, # localHeaderRelativeOffset + header length @_ ); $self->{'externalFileName'} = $externalFileName; $self->{'fh'} = $fh; $self->{'possibleEocdOffset'} = $possibleEocdOffset; return $self; } sub isDirectory { my $self = shift; return ( substr( $self->fileName, -1, 1 ) eq '/' and $self->uncompressedSize == 0 ); } # Seek to the beginning of the local header, just past the signature. # Verify that the local header signature is in fact correct. # Update the localHeaderRelativeOffset if necessary by adding the possibleEocdOffset. # Returns status. sub _seekToLocalHeader { my $self = shift; my $where = shift; # optional my $previousWhere = shift; # optional $where = $self->localHeaderRelativeOffset() unless defined($where); # avoid loop on certain corrupt files (from Julian Field) return _formatError("corrupt zip file") if defined($previousWhere) && $where == $previousWhere; my $status; my $signature; $status = $self->fh()->seek( $where, IO::Seekable::SEEK_SET ); return _ioError("seeking to local header") unless $status; ( $status, $signature ) = _readSignature( $self->fh(), $self->externalFileName(), LOCAL_FILE_HEADER_SIGNATURE ); return $status if $status == AZ_IO_ERROR; # retry with EOCD offset if any was given. if ( $status == AZ_FORMAT_ERROR && $self->{'possibleEocdOffset'} ) { $status = $self->_seekToLocalHeader( $self->localHeaderRelativeOffset() + $self->{'possibleEocdOffset'}, $where ); if ( $status == AZ_OK ) { $self->{'localHeaderRelativeOffset'} += $self->{'possibleEocdOffset'}; $self->{'possibleEocdOffset'} = 0; } } return $status; } # Because I'm going to delete the file handle, read the local file # header if the file handle is seekable. If it isn't, I assume that # I've already read the local header. # Return ( $status, $self ) sub _become { my $self = shift; my $newClass = shift; return $self if ref($self) eq $newClass; my $status = AZ_OK; if ( _isSeekable( $self->fh() ) ) { my $here = $self->fh()->tell(); $status = $self->_seekToLocalHeader(); $status = $self->_readLocalFileHeader() if $status == AZ_OK; $self->fh()->seek( $here, IO::Seekable::SEEK_SET ); return $status unless $status == AZ_OK; } delete( $self->{'eocdCrc32'} ); delete( $self->{'diskNumberStart'} ); delete( $self->{'localHeaderRelativeOffset'} ); delete( $self->{'dataOffset'} ); return $self->SUPER::_become($newClass); } sub diskNumberStart { shift->{'diskNumberStart'}; } sub localHeaderRelativeOffset { shift->{'localHeaderRelativeOffset'}; } sub dataOffset { shift->{'dataOffset'}; } # Skip local file header, updating only extra field stuff. # Assumes that fh is positioned before signature. sub _skipLocalFileHeader { my $self = shift; my $header; my $bytesRead = $self->fh()->read( $header, LOCAL_FILE_HEADER_LENGTH ); if ( $bytesRead != LOCAL_FILE_HEADER_LENGTH ) { return _ioError("reading local file header"); } my $fileNameLength; my $extraFieldLength; my $bitFlag; ( undef, # $self->{'versionNeededToExtract'}, $bitFlag, undef, # $self->{'compressionMethod'}, undef, # $self->{'lastModFileDateTime'}, undef, # $crc32, undef, # $compressedSize, undef, # $uncompressedSize, $fileNameLength, $extraFieldLength ) = unpack( LOCAL_FILE_HEADER_FORMAT, $header ); if ($fileNameLength) { $self->fh()->seek( $fileNameLength, IO::Seekable::SEEK_CUR ) or return _ioError("skipping local file name"); } if ($extraFieldLength) { $bytesRead = $self->fh()->read( $self->{'localExtraField'}, $extraFieldLength ); if ( $bytesRead != $extraFieldLength ) { return _ioError("reading local extra field"); } } $self->{'dataOffset'} = $self->fh()->tell(); if ( $bitFlag & GPBF_HAS_DATA_DESCRIPTOR_MASK ) { # Read the crc32, compressedSize, and uncompressedSize from the # extended data descriptor, which directly follows the compressed data. # # Skip over the compressed file data (assumes that EOCD compressedSize # was correct) $self->fh()->seek( $self->{'compressedSize'}, IO::Seekable::SEEK_CUR ) or return _ioError("seeking to extended local header"); # these values should be set correctly from before. my $oldCrc32 = $self->{'eocdCrc32'}; my $oldCompressedSize = $self->{'compressedSize'}; my $oldUncompressedSize = $self->{'uncompressedSize'}; my $status = $self->_readDataDescriptor(); return $status unless $status == AZ_OK; return _formatError( "CRC or size mismatch while skipping data descriptor") if ( $oldCrc32 != $self->{'crc32'} || $oldUncompressedSize != $self->{'uncompressedSize'} ); } return AZ_OK; } # Read from a local file header into myself. Returns AZ_OK if successful. # Assumes that fh is positioned after signature. # Note that crc32, compressedSize, and uncompressedSize will be 0 if # GPBF_HAS_DATA_DESCRIPTOR_MASK is set in the bitFlag. sub _readLocalFileHeader { my $self = shift; my $header; my $bytesRead = $self->fh()->read( $header, LOCAL_FILE_HEADER_LENGTH ); if ( $bytesRead != LOCAL_FILE_HEADER_LENGTH ) { return _ioError("reading local file header"); } my $fileNameLength; my $crc32; my $compressedSize; my $uncompressedSize; my $extraFieldLength; ( $self->{'versionNeededToExtract'}, $self->{'bitFlag'}, $self->{'compressionMethod'}, $self->{'lastModFileDateTime'}, $crc32, $compressedSize, $uncompressedSize, $fileNameLength, $extraFieldLength ) = unpack( LOCAL_FILE_HEADER_FORMAT, $header ); if ($fileNameLength) { my $fileName; $bytesRead = $self->fh()->read( $fileName, $fileNameLength ); if ( $bytesRead != $fileNameLength ) { return _ioError("reading local file name"); } $self->fileName($fileName); } if ($extraFieldLength) { $bytesRead = $self->fh()->read( $self->{'localExtraField'}, $extraFieldLength ); if ( $bytesRead != $extraFieldLength ) { return _ioError("reading local extra field"); } } $self->{'dataOffset'} = $self->fh()->tell(); if ( $self->hasDataDescriptor() ) { # Read the crc32, compressedSize, and uncompressedSize from the # extended data descriptor. # Skip over the compressed file data (assumes that EOCD compressedSize # was correct) $self->fh()->seek( $self->{'compressedSize'}, IO::Seekable::SEEK_CUR ) or return _ioError("seeking to extended local header"); my $status = $self->_readDataDescriptor(); return $status unless $status == AZ_OK; } else { return _formatError( "CRC or size mismatch after reading data descriptor") if ( $self->{'crc32'} != $crc32 || $self->{'uncompressedSize'} != $uncompressedSize ); } return AZ_OK; } # This will read the data descriptor, which is after the end of compressed file # data in members that that have GPBF_HAS_DATA_DESCRIPTOR_MASK set in their # bitFlag. # The only reliable way to find these is to rely on the EOCD compressedSize. # Assumes that file is positioned immediately after the compressed data. # Returns status; sets crc32, compressedSize, and uncompressedSize. sub _readDataDescriptor { my $self = shift; my $signatureData; my $header; my $crc32; my $compressedSize; my $uncompressedSize; my $bytesRead = $self->fh()->read( $signatureData, SIGNATURE_LENGTH ); return _ioError("reading header signature") if $bytesRead != SIGNATURE_LENGTH; my $signature = unpack( SIGNATURE_FORMAT, $signatureData ); # unfortunately, the signature appears to be optional. if ( $signature == DATA_DESCRIPTOR_SIGNATURE && ( $signature != $self->{'crc32'} ) ) { $bytesRead = $self->fh()->read( $header, DATA_DESCRIPTOR_LENGTH ); return _ioError("reading data descriptor") if $bytesRead != DATA_DESCRIPTOR_LENGTH; ( $crc32, $compressedSize, $uncompressedSize ) = unpack( DATA_DESCRIPTOR_FORMAT, $header ); } else { $bytesRead = $self->fh()->read( $header, DATA_DESCRIPTOR_LENGTH_NO_SIG ); return _ioError("reading data descriptor") if $bytesRead != DATA_DESCRIPTOR_LENGTH_NO_SIG; $crc32 = $signature; ( $compressedSize, $uncompressedSize ) = unpack( DATA_DESCRIPTOR_FORMAT_NO_SIG, $header ); } $self->{'eocdCrc32'} = $self->{'crc32'} unless defined( $self->{'eocdCrc32'} ); $self->{'crc32'} = $crc32; $self->{'compressedSize'} = $compressedSize; $self->{'uncompressedSize'} = $uncompressedSize; return AZ_OK; } # Read a Central Directory header. Return AZ_OK on success. # Assumes that fh is positioned right after the signature. sub _readCentralDirectoryFileHeader { my $self = shift; my $fh = $self->fh(); my $header = ''; my $bytesRead = $fh->read( $header, CENTRAL_DIRECTORY_FILE_HEADER_LENGTH ); if ( $bytesRead != CENTRAL_DIRECTORY_FILE_HEADER_LENGTH ) { return _ioError("reading central dir header"); } my ( $fileNameLength, $extraFieldLength, $fileCommentLength ); ( $self->{'versionMadeBy'}, $self->{'fileAttributeFormat'}, $self->{'versionNeededToExtract'}, $self->{'bitFlag'}, $self->{'compressionMethod'}, $self->{'lastModFileDateTime'}, $self->{'crc32'}, $self->{'compressedSize'}, $self->{'uncompressedSize'}, $fileNameLength, $extraFieldLength, $fileCommentLength, $self->{'diskNumberStart'}, $self->{'internalFileAttributes'}, $self->{'externalFileAttributes'}, $self->{'localHeaderRelativeOffset'} ) = unpack( CENTRAL_DIRECTORY_FILE_HEADER_FORMAT, $header ); $self->{'eocdCrc32'} = $self->{'crc32'}; if ($fileNameLength) { $bytesRead = $fh->read( $self->{'fileName'}, $fileNameLength ); if ( $bytesRead != $fileNameLength ) { _ioError("reading central dir filename"); } } if ($extraFieldLength) { $bytesRead = $fh->read( $self->{'cdExtraField'}, $extraFieldLength ); if ( $bytesRead != $extraFieldLength ) { return _ioError("reading central dir extra field"); } } if ($fileCommentLength) { $bytesRead = $fh->read( $self->{'fileComment'}, $fileCommentLength ); if ( $bytesRead != $fileCommentLength ) { return _ioError("reading central dir file comment"); } } # NK 10/21/04: added to avoid problems with manipulated headers if ( $self->{'uncompressedSize'} != $self->{'compressedSize'} and $self->{'compressionMethod'} == COMPRESSION_STORED ) { $self->{'uncompressedSize'} = $self->{'compressedSize'}; } $self->desiredCompressionMethod( $self->compressionMethod() ); return AZ_OK; } sub rewindData { my $self = shift; my $status = $self->SUPER::rewindData(@_); return $status unless $status == AZ_OK; return AZ_IO_ERROR unless $self->fh(); $self->fh()->clearerr(); # Seek to local file header. # The only reason that I'm doing this this way is that the extraField # length seems to be different between the CD header and the LF header. $status = $self->_seekToLocalHeader(); return $status unless $status == AZ_OK; # skip local file header $status = $self->_skipLocalFileHeader(); return $status unless $status == AZ_OK; # Seek to beginning of file data $self->fh()->seek( $self->dataOffset(), IO::Seekable::SEEK_SET ) or return _ioError("seeking to beginning of file data"); return AZ_OK; } # Return bytes read. Note that first parameter is a ref to a buffer. # my $data; # my ( $bytesRead, $status) = $self->readRawChunk( \$data, $chunkSize ); sub _readRawChunk { my ( $self, $dataRef, $chunkSize ) = @_; return ( 0, AZ_OK ) unless $chunkSize; my $bytesRead = $self->fh()->read( $$dataRef, $chunkSize ) or return ( 0, _ioError("reading data") ); return ( $bytesRead, AZ_OK ); } 1; FILE8230d1fa/AutoLoader.pm#line 1 "/usr/local/share/perl/5.8.8/AutoLoader.pm" package AutoLoader; use strict; use 5.006_001; our($VERSION, $AUTOLOAD); my $is_dosish; my $is_epoc; my $is_vms; my $is_macos; BEGIN { $is_dosish = $^O eq 'dos' || $^O eq 'os2' || $^O eq 'MSWin32' || $^O eq 'NetWare'; $is_epoc = $^O eq 'epoc'; $is_vms = $^O eq 'VMS'; $is_macos = $^O eq 'MacOS'; $VERSION = '5.66'; } AUTOLOAD { my $sub = $AUTOLOAD; my $filename = AutoLoader::find_filename( $sub ); my $save = $@; local $!; # Do not munge the value. eval { local $SIG{__DIE__}; require $filename }; if ($@) { if (substr($sub,-9) eq '::DESTROY') { no strict 'refs'; *$sub = sub {}; $@ = undef; } elsif ($@ =~ /^Can't locate/) { # The load might just have failed because the filename was too # long for some old SVR3 systems which treat long names as errors. # If we can successfully truncate a long name then it's worth a go. # There is a slight risk that we could pick up the wrong file here # but autosplit should have warned about that when splitting. if ($filename =~ s/(\w{12,})\.al$/substr($1,0,11).".al"/e){ eval { local $SIG{__DIE__}; require $filename }; } } if ($@){ $@ =~ s/ at .*\n//; my $error = $@; require Carp; Carp::croak($error); } } $@ = $save; goto &$sub; } sub find_filename { my $sub = shift; my $filename; # Braces used to preserve $1 et al. { # Try to find the autoloaded file from the package-qualified # name of the sub. e.g., if the sub needed is # Getopt::Long::GetOptions(), then $INC{Getopt/Long.pm} is # something like '/usr/lib/perl5/Getopt/Long.pm', and the # autoload file is '/usr/lib/perl5/auto/Getopt/Long/GetOptions.al'. # # However, if @INC is a relative path, this might not work. If, # for example, @INC = ('lib'), then $INC{Getopt/Long.pm} is # 'lib/Getopt/Long.pm', and we want to require # 'auto/Getopt/Long/GetOptions.al' (without the leading 'lib'). # In this case, we simple prepend the 'auto/' and let the # C take care of the searching for us. my ($pkg,$func) = ($sub =~ /(.*)::([^:]+)$/); $pkg =~ s#::#/#g; if (defined($filename = $INC{"$pkg.pm"})) { if ($is_macos) { $pkg =~ tr#/#:#; $filename = undef unless $filename =~ s#^(.*)$pkg\.pm\z#$1auto:$pkg:$func.al#s; } else { $filename = undef unless $filename =~ s#^(.*)$pkg\.pm\z#$1auto/$pkg/$func.al#s; } # if the file exists, then make sure that it is a # a fully anchored path (i.e either '/usr/lib/auto/foo/bar.al', # or './lib/auto/foo/bar.al'. This avoids C searching # (and failing) to find the 'lib/auto/foo/bar.al' because it # looked for 'lib/lib/auto/foo/bar.al', given @INC = ('lib'). if (defined $filename and -r $filename) { unless ($filename =~ m|^/|s) { if ($is_dosish) { unless ($filename =~ m{^([a-z]:)?[\\/]}is) { if ($^O ne 'NetWare') { $filename = "./$filename"; } else { $filename = "$filename"; } } } elsif ($is_epoc) { unless ($filename =~ m{^([a-z?]:)?[\\/]}is) { $filename = "./$filename"; } } elsif ($is_vms) { # XXX todo by VMSmiths $filename = "./$filename"; } elsif (!$is_macos) { $filename = "./$filename"; } } } else { $filename = undef; } } unless (defined $filename) { # let C do the searching $filename = "auto/$sub.al"; $filename =~ s#::#/#g; } } return $filename; } sub import { my $pkg = shift; my $callpkg = caller; # # Export symbols, but not by accident of inheritance. # if ($pkg eq 'AutoLoader') { if ( @_ and $_[0] =~ /^&?AUTOLOAD$/ ) { no strict 'refs'; *{ $callpkg . '::AUTOLOAD' } = \&AUTOLOAD; } } # # Try to find the autosplit index file. Eg., if the call package # is POSIX, then $INC{POSIX.pm} is something like # '/usr/local/lib/perl5/POSIX.pm', and the autosplit index file is in # '/usr/local/lib/perl5/auto/POSIX/autosplit.ix', so we require that. # # However, if @INC is a relative path, this might not work. If, # for example, @INC = ('lib'), then # $INC{POSIX.pm} is 'lib/POSIX.pm', and we want to require # 'auto/POSIX/autosplit.ix' (without the leading 'lib'). # (my $calldir = $callpkg) =~ s#::#/#g; my $path = $INC{$calldir . '.pm'}; if (defined($path)) { # Try absolute path name. if ($is_macos) { (my $malldir = $calldir) =~ tr#/#:#; $path =~ s#^(.*)$malldir\.pm\z#$1auto:$malldir:autosplit.ix#s; } else { $path =~ s#^(.*)$calldir\.pm\z#$1auto/$calldir/autosplit.ix#; } eval { require $path; }; # If that failed, try relative path with normal @INC searching. if ($@) { $path ="auto/$calldir/autosplit.ix"; eval { require $path; }; } if ($@) { my $error = $@; require Carp; Carp::carp($error); } } } sub unimport { my $callpkg = caller; no strict 'refs'; for my $exported (qw( AUTOLOAD )) { my $symname = $callpkg . '::' . $exported; undef *{ $symname } if \&{ $symname } == \&{ $exported }; *{ $symname } = \&{ $symname }; } } 1; __END__ #line 427 FILEca43a2fe/Compress/Zlib.pm7~#line 1 "/usr/local/share/perl/5.8.8/Compress/Zlib.pm" package Compress::Zlib; require 5.004 ; require Exporter; use AutoLoader; use Carp ; use IO::Handle ; use Scalar::Util qw(dualvar); use IO::Compress::Base::Common 2.020 ; use Compress::Raw::Zlib 2.020 ; use IO::Compress::Gzip 2.020 ; use IO::Uncompress::Gunzip 2.020 ; use strict ; use warnings ; use bytes ; our ($VERSION, $XS_VERSION, @ISA, @EXPORT, $AUTOLOAD); $VERSION = '2.020'; $XS_VERSION = $VERSION; $VERSION = eval $VERSION; @ISA = qw(Exporter); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. @EXPORT = qw( deflateInit inflateInit compress uncompress gzopen $gzerrno ); push @EXPORT, @Compress::Raw::Zlib::EXPORT ; BEGIN { *zlib_version = \&Compress::Raw::Zlib::zlib_version; } sub AUTOLOAD { my($constname); ($constname = $AUTOLOAD) =~ s/.*:://; my ($error, $val) = Compress::Raw::Zlib::constant($constname); Carp::croak $error if $error; no strict 'refs'; *{$AUTOLOAD} = sub { $val }; goto &{$AUTOLOAD}; } use constant FLAG_APPEND => 1 ; use constant FLAG_CRC => 2 ; use constant FLAG_ADLER => 4 ; use constant FLAG_CONSUME_INPUT => 8 ; our (@my_z_errmsg); @my_z_errmsg = ( "need dictionary", # Z_NEED_DICT 2 "stream end", # Z_STREAM_END 1 "", # Z_OK 0 "file error", # Z_ERRNO (-1) "stream error", # Z_STREAM_ERROR (-2) "data error", # Z_DATA_ERROR (-3) "insufficient memory", # Z_MEM_ERROR (-4) "buffer error", # Z_BUF_ERROR (-5) "incompatible version",# Z_VERSION_ERROR(-6) ); sub _set_gzerr { my $value = shift ; if ($value == 0) { $Compress::Zlib::gzerrno = 0 ; } elsif ($value == Z_ERRNO() || $value > 2) { $Compress::Zlib::gzerrno = $! ; } else { $Compress::Zlib::gzerrno = dualvar($value+0, $my_z_errmsg[2 - $value]); } return $value ; } sub _save_gzerr { my $gz = shift ; my $test_eof = shift ; my $value = $gz->errorNo() || 0 ; if ($test_eof) { #my $gz = $self->[0] ; # gzread uses Z_STREAM_END to denote a successful end $value = Z_STREAM_END() if $gz->eof() && $value == 0 ; } _set_gzerr($value) ; } sub gzopen($$) { my ($file, $mode) = @_ ; my $gz ; my %defOpts = (Level => Z_DEFAULT_COMPRESSION(), Strategy => Z_DEFAULT_STRATEGY(), ); my $writing ; $writing = ! ($mode =~ /r/i) ; $writing = ($mode =~ /[wa]/i) ; $defOpts{Level} = $1 if $mode =~ /(\d)/; $defOpts{Strategy} = Z_FILTERED() if $mode =~ /f/i; $defOpts{Strategy} = Z_HUFFMAN_ONLY() if $mode =~ /h/i; $defOpts{Append} = 1 if $mode =~ /a/i; my $infDef = $writing ? 'deflate' : 'inflate'; my @params = () ; croak "gzopen: file parameter is not a filehandle or filename" unless isaFilehandle $file || isaFilename $file || (ref $file && ref $file eq 'SCALAR'); return undef unless $mode =~ /[rwa]/i ; _set_gzerr(0) ; if ($writing) { $gz = new IO::Compress::Gzip($file, Minimal => 1, AutoClose => 1, %defOpts) or $Compress::Zlib::gzerrno = $IO::Compress::Gzip::GzipError; } else { $gz = new IO::Uncompress::Gunzip($file, Transparent => 1, Append => 0, AutoClose => 1, MultiStream => 1, Strict => 0) or $Compress::Zlib::gzerrno = $IO::Uncompress::Gunzip::GunzipError; } return undef if ! defined $gz ; bless [$gz, $infDef], 'Compress::Zlib::gzFile'; } sub Compress::Zlib::gzFile::gzread { my $self = shift ; return _set_gzerr(Z_STREAM_ERROR()) if $self->[1] ne 'inflate'; my $len = defined $_[1] ? $_[1] : 4096 ; if ($self->gzeof() || $len == 0) { # Zap the output buffer to match ver 1 behaviour. $_[0] = "" ; return 0 ; } my $gz = $self->[0] ; my $status = $gz->read($_[0], $len) ; _save_gzerr($gz, 1); return $status ; } sub Compress::Zlib::gzFile::gzreadline { my $self = shift ; my $gz = $self->[0] ; { # Maintain backward compatibility with 1.x behaviour # It didn't support $/, so this can't either. local $/ = "\n" ; $_[0] = $gz->getline() ; } _save_gzerr($gz, 1); return defined $_[0] ? length $_[0] : 0 ; } sub Compress::Zlib::gzFile::gzwrite { my $self = shift ; my $gz = $self->[0] ; return _set_gzerr(Z_STREAM_ERROR()) if $self->[1] ne 'deflate'; $] >= 5.008 and (utf8::downgrade($_[0], 1) or croak "Wide character in gzwrite"); my $status = $gz->write($_[0]) ; _save_gzerr($gz); return $status ; } sub Compress::Zlib::gzFile::gztell { my $self = shift ; my $gz = $self->[0] ; my $status = $gz->tell() ; _save_gzerr($gz); return $status ; } sub Compress::Zlib::gzFile::gzseek { my $self = shift ; my $offset = shift ; my $whence = shift ; my $gz = $self->[0] ; my $status ; eval { $status = $gz->seek($offset, $whence) ; }; if ($@) { my $error = $@; $error =~ s/^.*: /gzseek: /; $error =~ s/ at .* line \d+\s*$//; croak $error; } _save_gzerr($gz); return $status ; } sub Compress::Zlib::gzFile::gzflush { my $self = shift ; my $f = shift ; my $gz = $self->[0] ; my $status = $gz->flush($f) ; my $err = _save_gzerr($gz); return $status ? 0 : $err; } sub Compress::Zlib::gzFile::gzclose { my $self = shift ; my $gz = $self->[0] ; my $status = $gz->close() ; my $err = _save_gzerr($gz); return $status ? 0 : $err; } sub Compress::Zlib::gzFile::gzeof { my $self = shift ; my $gz = $self->[0] ; return 0 if $self->[1] ne 'inflate'; my $status = $gz->eof() ; _save_gzerr($gz); return $status ; } sub Compress::Zlib::gzFile::gzsetparams { my $self = shift ; croak "Usage: Compress::Zlib::gzFile::gzsetparams(file, level, strategy)" unless @_ eq 2 ; my $gz = $self->[0] ; my $level = shift ; my $strategy = shift; return _set_gzerr(Z_STREAM_ERROR()) if $self->[1] ne 'deflate'; my $status = *$gz->{Compress}->deflateParams(-Level => $level, -Strategy => $strategy); _save_gzerr($gz); return $status ; } sub Compress::Zlib::gzFile::gzerror { my $self = shift ; my $gz = $self->[0] ; return $Compress::Zlib::gzerrno ; } sub compress($;$) { my ($x, $output, $err, $in) =('', '', '', '') ; if (ref $_[0] ) { $in = $_[0] ; croak "not a scalar reference" unless ref $in eq 'SCALAR' ; } else { $in = \$_[0] ; } $] >= 5.008 and (utf8::downgrade($$in, 1) or croak "Wide character in compress"); my $level = (@_ == 2 ? $_[1] : Z_DEFAULT_COMPRESSION() ); $x = new Compress::Raw::Zlib::Deflate -AppendOutput => 1, -Level => $level or return undef ; $err = $x->deflate($in, $output) ; return undef unless $err == Z_OK() ; $err = $x->flush($output) ; return undef unless $err == Z_OK() ; return $output ; } sub uncompress($) { my ($x, $output, $err, $in) =('', '', '', '') ; if (ref $_[0] ) { $in = $_[0] ; croak "not a scalar reference" unless ref $in eq 'SCALAR' ; } else { $in = \$_[0] ; } $] >= 5.008 and (utf8::downgrade($$in, 1) or croak "Wide character in uncompress"); $x = new Compress::Raw::Zlib::Inflate -ConsumeInput => 0 or return undef ; $err = $x->inflate($in, $output) ; return undef unless $err == Z_STREAM_END() ; return $output ; } sub deflateInit(@) { my ($got) = ParseParameters(0, { 'Bufsize' => [1, 1, Parse_unsigned, 4096], 'Level' => [1, 1, Parse_signed, Z_DEFAULT_COMPRESSION()], 'Method' => [1, 1, Parse_unsigned, Z_DEFLATED()], 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()], 'MemLevel' => [1, 1, Parse_unsigned, MAX_MEM_LEVEL()], 'Strategy' => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()], 'Dictionary' => [1, 1, Parse_any, ""], }, @_ ) ; croak "Compress::Zlib::deflateInit: Bufsize must be >= 1, you specified " . $got->value('Bufsize') unless $got->value('Bufsize') >= 1; my $obj ; my $status = 0 ; ($obj, $status) = Compress::Raw::Zlib::_deflateInit(0, $got->value('Level'), $got->value('Method'), $got->value('WindowBits'), $got->value('MemLevel'), $got->value('Strategy'), $got->value('Bufsize'), $got->value('Dictionary')) ; my $x = ($status == Z_OK() ? bless $obj, "Zlib::OldDeflate" : undef) ; return wantarray ? ($x, $status) : $x ; } sub inflateInit(@) { my ($got) = ParseParameters(0, { 'Bufsize' => [1, 1, Parse_unsigned, 4096], 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()], 'Dictionary' => [1, 1, Parse_any, ""], }, @_) ; croak "Compress::Zlib::inflateInit: Bufsize must be >= 1, you specified " . $got->value('Bufsize') unless $got->value('Bufsize') >= 1; my $status = 0 ; my $obj ; ($obj, $status) = Compress::Raw::Zlib::_inflateInit(FLAG_CONSUME_INPUT, $got->value('WindowBits'), $got->value('Bufsize'), $got->value('Dictionary')) ; my $x = ($status == Z_OK() ? bless $obj, "Zlib::OldInflate" : undef) ; wantarray ? ($x, $status) : $x ; } package Zlib::OldDeflate ; our (@ISA); @ISA = qw(Compress::Raw::Zlib::deflateStream); sub deflate { my $self = shift ; my $output ; my $status = $self->SUPER::deflate($_[0], $output) ; wantarray ? ($output, $status) : $output ; } sub flush { my $self = shift ; my $output ; my $flag = shift || Compress::Zlib::Z_FINISH(); my $status = $self->SUPER::flush($output, $flag) ; wantarray ? ($output, $status) : $output ; } package Zlib::OldInflate ; our (@ISA); @ISA = qw(Compress::Raw::Zlib::inflateStream); sub inflate { my $self = shift ; my $output ; my $status = $self->SUPER::inflate($_[0], $output) ; wantarray ? ($output, $status) : $output ; } package Compress::Zlib ; use IO::Compress::Gzip::Constants 2.020 ; sub memGzip($) { my $out; # if the deflation buffer isn't a reference, make it one my $string = (ref $_[0] ? $_[0] : \$_[0]) ; $] >= 5.008 and (utf8::downgrade($$string, 1) or croak "Wide character in memGzip"); IO::Compress::Gzip::gzip($string, \$out, Minimal => 1) or return undef ; return $out; } sub _removeGzipHeader($) { my $string = shift ; return Z_DATA_ERROR() if length($$string) < GZIP_MIN_HEADER_SIZE ; my ($magic1, $magic2, $method, $flags, $time, $xflags, $oscode) = unpack ('CCCCVCC', $$string); return Z_DATA_ERROR() unless $magic1 == GZIP_ID1 and $magic2 == GZIP_ID2 and $method == Z_DEFLATED() and !($flags & GZIP_FLG_RESERVED) ; substr($$string, 0, GZIP_MIN_HEADER_SIZE) = '' ; # skip extra field if ($flags & GZIP_FLG_FEXTRA) { return Z_DATA_ERROR() if length($$string) < GZIP_FEXTRA_HEADER_SIZE ; my ($extra_len) = unpack ('v', $$string); $extra_len += GZIP_FEXTRA_HEADER_SIZE; return Z_DATA_ERROR() if length($$string) < $extra_len ; substr($$string, 0, $extra_len) = ''; } # skip orig name if ($flags & GZIP_FLG_FNAME) { my $name_end = index ($$string, GZIP_NULL_BYTE); return Z_DATA_ERROR() if $name_end == -1 ; substr($$string, 0, $name_end + 1) = ''; } # skip comment if ($flags & GZIP_FLG_FCOMMENT) { my $comment_end = index ($$string, GZIP_NULL_BYTE); return Z_DATA_ERROR() if $comment_end == -1 ; substr($$string, 0, $comment_end + 1) = ''; } # skip header crc if ($flags & GZIP_FLG_FHCRC) { return Z_DATA_ERROR() if length ($$string) < GZIP_FHCRC_SIZE ; substr($$string, 0, GZIP_FHCRC_SIZE) = ''; } return Z_OK(); } sub memGunzip($) { # if the buffer isn't a reference, make it one my $string = (ref $_[0] ? $_[0] : \$_[0]); $] >= 5.008 and (utf8::downgrade($$string, 1) or croak "Wide character in memGunzip"); _removeGzipHeader($string) == Z_OK() or return undef; my $bufsize = length $$string > 4096 ? length $$string : 4096 ; my $x = new Compress::Raw::Zlib::Inflate({-WindowBits => - MAX_WBITS(), -Bufsize => $bufsize}) or return undef; my $output = "" ; my $status = $x->inflate($string, $output); return undef unless $status == Z_STREAM_END(); if (length $$string >= 8) { my ($crc, $len) = unpack ("VV", substr($$string, 0, 8)); substr($$string, 0, 8) = ''; return undef unless $len == length($output) and $crc == crc32($output); } else { $$string = ''; } return $output; } # Autoload methods go after __END__, and are processed by the autosplit program. 1; __END__ #line 1457 FILE977c405f/File/GlobMapper.pm#line 1 "/usr/local/share/perl/5.8.8/File/GlobMapper.pm" package File::GlobMapper; use strict; use warnings; use Carp; our ($CSH_GLOB); BEGIN { if ($] < 5.006) { require File::BSDGlob; import File::BSDGlob qw(:glob) ; $CSH_GLOB = File::BSDGlob::GLOB_CSH() ; *globber = \&File::BSDGlob::csh_glob; } else { require File::Glob; import File::Glob qw(:glob) ; $CSH_GLOB = File::Glob::GLOB_CSH() ; #*globber = \&File::Glob::bsd_glob; *globber = \&File::Glob::csh_glob; } } our ($Error); our ($VERSION, @EXPORT_OK); $VERSION = '1.000'; @EXPORT_OK = qw( globmap ); our ($noPreBS, $metachars, $matchMetaRE, %mapping, %wildCount); $noPreBS = '(? '([^/]*)', '?' => '([^/])', '.' => '\.', '[' => '([', '(' => '(', ')' => ')', ); %wildCount = map { $_ => 1 } qw/ * ? . { ( [ /; sub globmap ($$;) { my $inputGlob = shift ; my $outputGlob = shift ; my $obj = new File::GlobMapper($inputGlob, $outputGlob, @_) or croak "globmap: $Error" ; return $obj->getFileMap(); } sub new { my $class = shift ; my $inputGlob = shift ; my $outputGlob = shift ; # TODO -- flags needs to default to whatever File::Glob does my $flags = shift || $CSH_GLOB ; #my $flags = shift ; $inputGlob =~ s/^\s*\<\s*//; $inputGlob =~ s/\s*\>\s*$//; $outputGlob =~ s/^\s*\<\s*//; $outputGlob =~ s/\s*\>\s*$//; my %object = ( InputGlob => $inputGlob, OutputGlob => $outputGlob, GlobFlags => $flags, Braces => 0, WildCount => 0, Pairs => [], Sigil => '#', ); my $self = bless \%object, ref($class) || $class ; $self->_parseInputGlob() or return undef ; $self->_parseOutputGlob() or return undef ; my @inputFiles = globber($self->{InputGlob}, $flags) ; if (GLOB_ERROR) { $Error = $!; return undef ; } #if (whatever) { my $missing = grep { ! -e $_ } @inputFiles ; if ($missing) { $Error = "$missing input files do not exist"; return undef ; } } $self->{InputFiles} = \@inputFiles ; $self->_getFiles() or return undef ; return $self; } sub _retError { my $string = shift ; $Error = "$string in input fileglob" ; return undef ; } sub _unmatched { my $delimeter = shift ; _retError("Unmatched $delimeter"); return undef ; } sub _parseBit { my $self = shift ; my $string = shift ; my $out = ''; my $depth = 0 ; while ($string =~ s/(.*?)$noPreBS(,|$matchMetaRE)//) { $out .= quotemeta($1) ; $out .= $mapping{$2} if defined $mapping{$2}; ++ $self->{WildCount} if $wildCount{$2} ; if ($2 eq ',') { return _unmatched "(" if $depth ; $out .= '|'; } elsif ($2 eq '(') { ++ $depth ; } elsif ($2 eq ')') { return _unmatched ")" if ! $depth ; -- $depth ; } elsif ($2 eq '[') { # TODO -- quotemeta & check no '/' # TODO -- check for \] & other \ within the [] $string =~ s#(.*?\])## or return _unmatched "[" ; $out .= "$1)" ; } elsif ($2 eq ']') { return _unmatched "]" ; } elsif ($2 eq '{' || $2 eq '}') { return _retError "Nested {} not allowed" ; } } $out .= quotemeta $string; return _unmatched "(" if $depth ; return $out ; } sub _parseInputGlob { my $self = shift ; my $string = $self->{InputGlob} ; my $inGlob = ''; # Multiple concatenated *'s don't make sense #$string =~ s#\*\*+#*# ; # TODO -- Allow space to delimit patterns? #my @strings = split /\s+/, $string ; #for my $str (@strings) my $out = ''; my $depth = 0 ; while ($string =~ s/(.*?)$noPreBS($matchMetaRE)//) { $out .= quotemeta($1) ; $out .= $mapping{$2} if defined $mapping{$2}; ++ $self->{WildCount} if $wildCount{$2} ; if ($2 eq '(') { ++ $depth ; } elsif ($2 eq ')') { return _unmatched ")" if ! $depth ; -- $depth ; } elsif ($2 eq '[') { # TODO -- quotemeta & check no '/' or '(' or ')' # TODO -- check for \] & other \ within the [] $string =~ s#(.*?\])## or return _unmatched "["; $out .= "$1)" ; } elsif ($2 eq ']') { return _unmatched "]" ; } elsif ($2 eq '}') { return _unmatched "}" ; } elsif ($2 eq '{') { # TODO -- check no '/' within the {} # TODO -- check for \} & other \ within the {} my $tmp ; unless ( $string =~ s/(.*?)$noPreBS\}//) { return _unmatched "{"; } #$string =~ s#(.*?)\}##; #my $alt = join '|', # map { quotemeta $_ } # split "$noPreBS,", $1 ; my $alt = $self->_parseBit($1); defined $alt or return 0 ; $out .= "($alt)" ; ++ $self->{Braces} ; } } return _unmatched "(" if $depth ; $out .= quotemeta $string ; $self->{InputGlob} =~ s/$noPreBS[\(\)]//g; $self->{InputPattern} = $out ; #print "# INPUT '$self->{InputGlob}' => '$out'\n"; return 1 ; } sub _parseOutputGlob { my $self = shift ; my $string = $self->{OutputGlob} ; my $maxwild = $self->{WildCount}; if ($self->{GlobFlags} & GLOB_TILDE) #if (1) { $string =~ s{ ^ ~ # find a leading tilde ( # save this in $1 [^/] # a non-slash character * # repeated 0 or more times (0 means me) ) }{ $1 ? (getpwnam($1))[7] : ( $ENV{HOME} || $ENV{LOGDIR} ) }ex; } # max #1 must be == to max no of '*' in input while ( $string =~ m/#(\d)/g ) { croak "Max wild is #$maxwild, you tried #$1" if $1 > $maxwild ; } my $noPreBS = '(?{OutputGlob}' => '$string'\n"; $self->{OutputPattern} = $string ; return 1 ; } sub _getFiles { my $self = shift ; my %outInMapping = (); my %inFiles = () ; foreach my $inFile (@{ $self->{InputFiles} }) { next if $inFiles{$inFile} ++ ; my $outFile = $inFile ; if ( $inFile =~ m/$self->{InputPattern}/ ) { no warnings 'uninitialized'; eval "\$outFile = $self->{OutputPattern};" ; if (defined $outInMapping{$outFile}) { $Error = "multiple input files map to one output file"; return undef ; } $outInMapping{$outFile} = $inFile; push @{ $self->{Pairs} }, [$inFile, $outFile]; } } return 1 ; } sub getFileMap { my $self = shift ; return $self->{Pairs} ; } sub getHash { my $self = shift ; return { map { $_->[0] => $_->[1] } @{ $self->{Pairs} } } ; } 1; __END__ #line 680FILEdf92e722/File/Temp.pm@#line 1 "/usr/local/share/perl/5.8.8/File/Temp.pm" package File::Temp; #line 138 # 5.6.0 gives us S_IWOTH, S_IWGRP, our and auto-vivifying filehandls # People would like a version on 5.004 so give them what they want :-) use 5.004; use strict; use Carp; use File::Spec 0.8; use File::Path qw/ rmtree /; use Fcntl 1.03; use IO::Seekable; # For SEEK_* use Errno; require VMS::Stdio if $^O eq 'VMS'; # pre-emptively load Carp::Heavy. If we don't when we run out of file # handles and attempt to call croak() we get an error message telling # us that Carp::Heavy won't load rather than an error telling us we # have run out of file handles. We either preload croak() or we # switch the calls to croak from _gettemp() to use die. eval { require Carp::Heavy; }; # Need the Symbol package if we are running older perl require Symbol if $] < 5.006; ### For the OO interface use base qw/ IO::Handle IO::Seekable /; use overload '""' => "STRINGIFY", fallback => 1; # use 'our' on v5.6.0 use vars qw($VERSION @EXPORT_OK %EXPORT_TAGS $DEBUG $KEEP_ALL); $DEBUG = 0; $KEEP_ALL = 0; # We are exporting functions use base qw/Exporter/; # Export list - to allow fine tuning of export table @EXPORT_OK = qw{ tempfile tempdir tmpnam tmpfile mktemp mkstemp mkstemps mkdtemp unlink0 cleanup SEEK_SET SEEK_CUR SEEK_END }; # Groups of functions for export %EXPORT_TAGS = ( 'POSIX' => [qw/ tmpnam tmpfile /], 'mktemp' => [qw/ mktemp mkstemp mkstemps mkdtemp/], 'seekable' => [qw/ SEEK_SET SEEK_CUR SEEK_END /], ); # add contents of these tags to @EXPORT Exporter::export_tags('POSIX','mktemp','seekable'); # Version number $VERSION = '0.22'; # This is a list of characters that can be used in random filenames my @CHARS = (qw/ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 _ /); # Maximum number of tries to make a temp file before failing use constant MAX_TRIES => 1000; # Minimum number of X characters that should be in a template use constant MINX => 4; # Default template when no template supplied use constant TEMPXXX => 'X' x 10; # Constants for the security level use constant STANDARD => 0; use constant MEDIUM => 1; use constant HIGH => 2; # OPENFLAGS. If we defined the flag to use with Sysopen here this gives # us an optimisation when many temporary files are requested my $OPENFLAGS = O_CREAT | O_EXCL | O_RDWR; my $LOCKFLAG; unless ($^O eq 'MacOS') { for my $oflag (qw/ NOFOLLOW BINARY LARGEFILE NOINHERIT /) { my ($bit, $func) = (0, "Fcntl::O_" . $oflag); no strict 'refs'; $OPENFLAGS |= $bit if eval { # Make sure that redefined die handlers do not cause problems # e.g. CGI::Carp local $SIG{__DIE__} = sub {}; local $SIG{__WARN__} = sub {}; $bit = &$func(); 1; }; } # Special case O_EXLOCK $LOCKFLAG = eval { local $SIG{__DIE__} = sub {}; local $SIG{__WARN__} = sub {}; &Fcntl::O_EXLOCK(); }; } # On some systems the O_TEMPORARY flag can be used to tell the OS # to automatically remove the file when it is closed. This is fine # in most cases but not if tempfile is called with UNLINK=>0 and # the filename is requested -- in the case where the filename is to # be passed to another routine. This happens on windows. We overcome # this by using a second open flags variable my $OPENTEMPFLAGS = $OPENFLAGS; unless ($^O eq 'MacOS') { for my $oflag (qw/ TEMPORARY /) { my ($bit, $func) = (0, "Fcntl::O_" . $oflag); local($@); no strict 'refs'; $OPENTEMPFLAGS |= $bit if eval { # Make sure that redefined die handlers do not cause problems # e.g. CGI::Carp local $SIG{__DIE__} = sub {}; local $SIG{__WARN__} = sub {}; $bit = &$func(); 1; }; } } # Private hash tracking which files have been created by each process id via the OO interface my %FILES_CREATED_BY_OBJECT; # INTERNAL ROUTINES - not to be used outside of package # Generic routine for getting a temporary filename # modelled on OpenBSD _gettemp() in mktemp.c # The template must contain X's that are to be replaced # with the random values # Arguments: # TEMPLATE - string containing the XXXXX's that is converted # to a random filename and opened if required # Optionally, a hash can also be supplied containing specific options # "open" => if true open the temp file, else just return the name # default is 0 # "mkdir"=> if true, we are creating a temp directory rather than tempfile # default is 0 # "suffixlen" => number of characters at end of PATH to be ignored. # default is 0. # "unlink_on_close" => indicates that, if possible, the OS should remove # the file as soon as it is closed. Usually indicates # use of the O_TEMPORARY flag to sysopen. # Usually irrelevant on unix # "use_exlock" => Indicates that O_EXLOCK should be used. Default is true. # Optionally a reference to a scalar can be passed into the function # On error this will be used to store the reason for the error # "ErrStr" => \$errstr # "open" and "mkdir" can not both be true # "unlink_on_close" is not used when "mkdir" is true. # The default options are equivalent to mktemp(). # Returns: # filehandle - open file handle (if called with doopen=1, else undef) # temp name - name of the temp file or directory # For example: # ($fh, $name) = _gettemp($template, "open" => 1); # for the current version, failures are associated with # stored in an error string and returned to give the reason whilst debugging # This routine is not called by any external function sub _gettemp { croak 'Usage: ($fh, $name) = _gettemp($template, OPTIONS);' unless scalar(@_) >= 1; # the internal error string - expect it to be overridden # Need this in case the caller decides not to supply us a value # need an anonymous scalar my $tempErrStr; # Default options my %options = ( "open" => 0, "mkdir" => 0, "suffixlen" => 0, "unlink_on_close" => 0, "use_exlock" => 1, "ErrStr" => \$tempErrStr, ); # Read the template my $template = shift; if (ref($template)) { # Use a warning here since we have not yet merged ErrStr carp "File::Temp::_gettemp: template must not be a reference"; return (); } # Check that the number of entries on stack are even if (scalar(@_) % 2 != 0) { # Use a warning here since we have not yet merged ErrStr carp "File::Temp::_gettemp: Must have even number of options"; return (); } # Read the options and merge with defaults %options = (%options, @_) if @_; # Make sure the error string is set to undef ${$options{ErrStr}} = undef; # Can not open the file and make a directory in a single call if ($options{"open"} && $options{"mkdir"}) { ${$options{ErrStr}} = "doopen and domkdir can not both be true\n"; return (); } # Find the start of the end of the Xs (position of last X) # Substr starts from 0 my $start = length($template) - 1 - $options{"suffixlen"}; # Check that we have at least MINX x X (e.g. 'XXXX") at the end of the string # (taking suffixlen into account). Any fewer is insecure. # Do it using substr - no reason to use a pattern match since # we know where we are looking and what we are looking for if (substr($template, $start - MINX + 1, MINX) ne 'X' x MINX) { ${$options{ErrStr}} = "The template must end with at least ". MINX . " 'X' characters\n"; return (); } # Replace all the X at the end of the substring with a # random character or just all the XX at the end of a full string. # Do it as an if, since the suffix adjusts which section to replace # and suffixlen=0 returns nothing if used in the substr directly # and generate a full path from the template my $path = _replace_XX($template, $options{"suffixlen"}); # Split the path into constituent parts - eventually we need to check # whether the directory exists # We need to know whether we are making a temp directory # or a tempfile my ($volume, $directories, $file); my $parent; # parent directory if ($options{"mkdir"}) { # There is no filename at the end ($volume, $directories, $file) = File::Spec->splitpath( $path, 1); # The parent is then $directories without the last directory # Split the directory and put it back together again my @dirs = File::Spec->splitdir($directories); # If @dirs only has one entry (i.e. the directory template) that means # we are in the current directory if ($#dirs == 0) { $parent = File::Spec->curdir; } else { if ($^O eq 'VMS') { # need volume to avoid relative dir spec $parent = File::Spec->catdir($volume, @dirs[0..$#dirs-1]); $parent = 'sys$disk:[]' if $parent eq ''; } else { # Put it back together without the last one $parent = File::Spec->catdir(@dirs[0..$#dirs-1]); # ...and attach the volume (no filename) $parent = File::Spec->catpath($volume, $parent, ''); } } } else { # Get rid of the last filename (use File::Basename for this?) ($volume, $directories, $file) = File::Spec->splitpath( $path ); # Join up without the file part $parent = File::Spec->catpath($volume,$directories,''); # If $parent is empty replace with curdir $parent = File::Spec->curdir unless $directories ne ''; } # Check that the parent directories exist # Do this even for the case where we are simply returning a name # not a file -- no point returning a name that includes a directory # that does not exist or is not writable unless (-e $parent) { ${$options{ErrStr}} = "Parent directory ($parent) does not exist"; return (); } unless (-d $parent) { ${$options{ErrStr}} = "Parent directory ($parent) is not a directory"; return (); } # Check the stickiness of the directory and chown giveaway if required # If the directory is world writable the sticky bit # must be set if (File::Temp->safe_level == MEDIUM) { my $safeerr; unless (_is_safe($parent,\$safeerr)) { ${$options{ErrStr}} = "Parent directory ($parent) is not safe ($safeerr)"; return (); } } elsif (File::Temp->safe_level == HIGH) { my $safeerr; unless (_is_verysafe($parent, \$safeerr)) { ${$options{ErrStr}} = "Parent directory ($parent) is not safe ($safeerr)"; return (); } } # Now try MAX_TRIES time to open the file for (my $i = 0; $i < MAX_TRIES; $i++) { # Try to open the file if requested if ($options{"open"}) { my $fh; # If we are running before perl5.6.0 we can not auto-vivify if ($] < 5.006) { $fh = &Symbol::gensym; } # Try to make sure this will be marked close-on-exec # XXX: Win32 doesn't respect this, nor the proper fcntl, # but may have O_NOINHERIT. This may or may not be in Fcntl. local $^F = 2; # Attempt to open the file my $open_success = undef; if ( $^O eq 'VMS' and $options{"unlink_on_close"} && !$KEEP_ALL) { # make it auto delete on close by setting FAB$V_DLT bit $fh = VMS::Stdio::vmssysopen($path, $OPENFLAGS, 0600, 'fop=dlt'); $open_success = $fh; } else { my $flags = ( ($options{"unlink_on_close"} && !$KEEP_ALL) ? $OPENTEMPFLAGS : $OPENFLAGS ); $flags |= $LOCKFLAG if (defined $LOCKFLAG && $options{use_exlock}); $open_success = sysopen($fh, $path, $flags, 0600); } if ( $open_success ) { # in case of odd umask force rw chmod(0600, $path); # Opened successfully - return file handle and name return ($fh, $path); } else { # Error opening file - abort with error # if the reason was anything but EEXIST unless ($!{EEXIST}) { ${$options{ErrStr}} = "Could not create temp file $path: $!"; return (); } # Loop round for another try } } elsif ($options{"mkdir"}) { # Open the temp directory if (mkdir( $path, 0700)) { # in case of odd umask chmod(0700, $path); return undef, $path; } else { # Abort with error if the reason for failure was anything # except EEXIST unless ($!{EEXIST}) { ${$options{ErrStr}} = "Could not create directory $path: $!"; return (); } # Loop round for another try } } else { # Return true if the file can not be found # Directory has been checked previously return (undef, $path) unless -e $path; # Try again until MAX_TRIES } # Did not successfully open the tempfile/dir # so try again with a different set of random letters # No point in trying to increment unless we have only # 1 X say and the randomness could come up with the same # file MAX_TRIES in a row. # Store current attempt - in principal this implies that the # 3rd time around the open attempt that the first temp file # name could be generated again. Probably should store each # attempt and make sure that none are repeated my $original = $path; my $counter = 0; # Stop infinite loop my $MAX_GUESS = 50; do { # Generate new name from original template $path = _replace_XX($template, $options{"suffixlen"}); $counter++; } until ($path ne $original || $counter > $MAX_GUESS); # Check for out of control looping if ($counter > $MAX_GUESS) { ${$options{ErrStr}} = "Tried to get a new temp name different to the previous value $MAX_GUESS times.\nSomething wrong with template?? ($template)"; return (); } } # If we get here, we have run out of tries ${ $options{ErrStr} } = "Have exceeded the maximum number of attempts (" . MAX_TRIES . ") to open temp file/dir"; return (); } # Internal routine to replace the XXXX... with random characters # This has to be done by _gettemp() every time it fails to # open a temp file/dir # Arguments: $template (the template with XXX), # $ignore (number of characters at end to ignore) # Returns: modified template sub _replace_XX { croak 'Usage: _replace_XX($template, $ignore)' unless scalar(@_) == 2; my ($path, $ignore) = @_; # Do it as an if, since the suffix adjusts which section to replace # and suffixlen=0 returns nothing if used in the substr directly # Alternatively, could simply set $ignore to length($path)-1 # Don't want to always use substr when not required though. my $end = ( $] >= 5.006 ? "\\z" : "\\Z" ); if ($ignore) { substr($path, 0, - $ignore) =~ s/X(?=X*$end)/$CHARS[ int( rand( @CHARS ) ) ]/ge; } else { $path =~ s/X(?=X*$end)/$CHARS[ int( rand( @CHARS ) ) ]/ge; } return $path; } # Internal routine to force a temp file to be writable after # it is created so that we can unlink it. Windows seems to occassionally # force a file to be readonly when written to certain temp locations sub _force_writable { my $file = shift; chmod 0600, $file; } # internal routine to check to see if the directory is safe # First checks to see if the directory is not owned by the # current user or root. Then checks to see if anyone else # can write to the directory and if so, checks to see if # it has the sticky bit set # Will not work on systems that do not support sticky bit #Args: directory path to check # Optionally: reference to scalar to contain error message # Returns true if the path is safe and false otherwise. # Returns undef if can not even run stat() on the path # This routine based on version written by Tom Christiansen # Presumably, by the time we actually attempt to create the # file or directory in this directory, it may not be safe # anymore... Have to run _is_safe directly after the open. sub _is_safe { my $path = shift; my $err_ref = shift; # Stat path my @info = stat($path); unless (scalar(@info)) { $$err_ref = "stat(path) returned no values"; return 0; } ; return 1 if $^O eq 'VMS'; # owner delete control at file level # Check to see whether owner is neither superuser (or a system uid) nor me # Use the effective uid from the $> variable # UID is in [4] if ($info[4] > File::Temp->top_system_uid() && $info[4] != $>) { Carp::cluck(sprintf "uid=$info[4] topuid=%s euid=$> path='$path'", File::Temp->top_system_uid()); $$err_ref = "Directory owned neither by root nor the current user" if ref($err_ref); return 0; } # check whether group or other can write file # use 066 to detect either reading or writing # use 022 to check writability # Do it with S_IWOTH and S_IWGRP for portability (maybe) # mode is in info[2] if (($info[2] & &Fcntl::S_IWGRP) || # Is group writable? ($info[2] & &Fcntl::S_IWOTH) ) { # Is world writable? # Must be a directory unless (-d $path) { $$err_ref = "Path ($path) is not a directory" if ref($err_ref); return 0; } # Must have sticky bit set unless (-k $path) { $$err_ref = "Sticky bit not set on $path when dir is group|world writable" if ref($err_ref); return 0; } } return 1; } # Internal routine to check whether a directory is safe # for temp files. Safer than _is_safe since it checks for # the possibility of chown giveaway and if that is a possibility # checks each directory in the path to see if it is safe (with _is_safe) # If _PC_CHOWN_RESTRICTED is not set, does the full test of each # directory anyway. # Takes optional second arg as scalar ref to error reason sub _is_verysafe { # Need POSIX - but only want to bother if really necessary due to overhead require POSIX; my $path = shift; print "_is_verysafe testing $path\n" if $DEBUG; return 1 if $^O eq 'VMS'; # owner delete control at file level my $err_ref = shift; # Should Get the value of _PC_CHOWN_RESTRICTED if it is defined # and If it is not there do the extensive test local($@); my $chown_restricted; $chown_restricted = &POSIX::_PC_CHOWN_RESTRICTED() if eval { &POSIX::_PC_CHOWN_RESTRICTED(); 1}; # If chown_resticted is set to some value we should test it if (defined $chown_restricted) { # Return if the current directory is safe return _is_safe($path,$err_ref) if POSIX::sysconf( $chown_restricted ); } # To reach this point either, the _PC_CHOWN_RESTRICTED symbol # was not avialable or the symbol was there but chown giveaway # is allowed. Either way, we now have to test the entire tree for # safety. # Convert path to an absolute directory if required unless (File::Spec->file_name_is_absolute($path)) { $path = File::Spec->rel2abs($path); } # Split directory into components - assume no file my ($volume, $directories, undef) = File::Spec->splitpath( $path, 1); # Slightly less efficient than having a function in File::Spec # to chop off the end of a directory or even a function that # can handle ../ in a directory tree # Sometimes splitdir() returns a blank at the end # so we will probably check the bottom directory twice in some cases my @dirs = File::Spec->splitdir($directories); # Concatenate one less directory each time around foreach my $pos (0.. $#dirs) { # Get a directory name my $dir = File::Spec->catpath($volume, File::Spec->catdir(@dirs[0.. $#dirs - $pos]), '' ); print "TESTING DIR $dir\n" if $DEBUG; # Check the directory return 0 unless _is_safe($dir,$err_ref); } return 1; } # internal routine to determine whether unlink works on this # platform for files that are currently open. # Returns true if we can, false otherwise. # Currently WinNT, OS/2 and VMS can not unlink an opened file # On VMS this is because the O_EXCL flag is used to open the # temporary file. Currently I do not know enough about the issues # on VMS to decide whether O_EXCL is a requirement. sub _can_unlink_opened_file { if ($^O eq 'MSWin32' || $^O eq 'os2' || $^O eq 'VMS' || $^O eq 'dos' || $^O eq 'MacOS') { return 0; } else { return 1; } } # internal routine to decide which security levels are allowed # see safe_level() for more information on this # Controls whether the supplied security level is allowed # $cando = _can_do_level( $level ) sub _can_do_level { # Get security level my $level = shift; # Always have to be able to do STANDARD return 1 if $level == STANDARD; # Currently, the systems that can do HIGH or MEDIUM are identical if ( $^O eq 'MSWin32' || $^O eq 'os2' || $^O eq 'cygwin' || $^O eq 'dos' || $^O eq 'MacOS' || $^O eq 'mpeix') { return 0; } else { return 1; } } # This routine sets up a deferred unlinking of a specified # filename and filehandle. It is used in the following cases: # - Called by unlink0 if an opened file can not be unlinked # - Called by tempfile() if files are to be removed on shutdown # - Called by tempdir() if directories are to be removed on shutdown # Arguments: # _deferred_unlink( $fh, $fname, $isdir ); # # - filehandle (so that it can be expclicitly closed if open # - filename (the thing we want to remove) # - isdir (flag to indicate that we are being given a directory) # [and hence no filehandle] # Status is not referred to since all the magic is done with an END block { # Will set up two lexical variables to contain all the files to be # removed. One array for files, another for directories They will # only exist in this block. # This means we only have to set up a single END block to remove # all files. # in order to prevent child processes inadvertently deleting the parent # temp files we use a hash to store the temp files and directories # created by a particular process id. # %files_to_unlink contains values that are references to an array of # array references containing the filehandle and filename associated with # the temp file. my (%files_to_unlink, %dirs_to_unlink); # Set up an end block to use these arrays END { local($., $@, $!, $^E, $?); cleanup(); } # Cleanup function. Always triggered on END but can be invoked # manually. sub cleanup { if (!$KEEP_ALL) { # Files my @files = (exists $files_to_unlink{$$} ? @{ $files_to_unlink{$$} } : () ); foreach my $file (@files) { # close the filehandle without checking its state # in order to make real sure that this is closed # if its already closed then I dont care about the answer # probably a better way to do this close($file->[0]); # file handle is [0] if (-f $file->[1]) { # file name is [1] _force_writable( $file->[1] ); # for windows unlink $file->[1] or warn "Error removing ".$file->[1]; } } # Dirs my @dirs = (exists $dirs_to_unlink{$$} ? @{ $dirs_to_unlink{$$} } : () ); foreach my $dir (@dirs) { if (-d $dir) { # Some versions of rmtree will abort if you attempt to remove # the directory you are sitting in. We protect that and turn it # into a warning. We do this because this occurs during # cleanup and so can not be caught by the user. eval { rmtree($dir, $DEBUG, 0); }; warn $@ if ($@ && $^W); } } # clear the arrays @{ $files_to_unlink{$$} } = () if exists $files_to_unlink{$$}; @{ $dirs_to_unlink{$$} } = () if exists $dirs_to_unlink{$$}; } } # This is the sub called to register a file for deferred unlinking # This could simply store the input parameters and defer everything # until the END block. For now we do a bit of checking at this # point in order to make sure that (1) we have a file/dir to delete # and (2) we have been called with the correct arguments. sub _deferred_unlink { croak 'Usage: _deferred_unlink($fh, $fname, $isdir)' unless scalar(@_) == 3; my ($fh, $fname, $isdir) = @_; warn "Setting up deferred removal of $fname\n" if $DEBUG; # If we have a directory, check that it is a directory if ($isdir) { if (-d $fname) { # Directory exists so store it # first on VMS turn []foo into [.foo] for rmtree $fname = VMS::Filespec::vmspath($fname) if $^O eq 'VMS'; $dirs_to_unlink{$$} = [] unless exists $dirs_to_unlink{$$}; push (@{ $dirs_to_unlink{$$} }, $fname); } else { carp "Request to remove directory $fname could not be completed since it does not exist!\n" if $^W; } } else { if (-f $fname) { # file exists so store handle and name for later removal $files_to_unlink{$$} = [] unless exists $files_to_unlink{$$}; push(@{ $files_to_unlink{$$} }, [$fh, $fname]); } else { carp "Request to remove file $fname could not be completed since it is not there!\n" if $^W; } } } } #line 1008 sub new { my $proto = shift; my $class = ref($proto) || $proto; # read arguments and convert keys to upper case my %args = @_; %args = map { uc($_), $args{$_} } keys %args; # see if they are unlinking (defaulting to yes) my $unlink = (exists $args{UNLINK} ? $args{UNLINK} : 1 ); delete $args{UNLINK}; # template (store it in an array so that it will # disappear from the arg list of tempfile) my @template = ( exists $args{TEMPLATE} ? $args{TEMPLATE} : () ); delete $args{TEMPLATE}; # Protect OPEN delete $args{OPEN}; # Open the file and retain file handle and file name my ($fh, $path) = tempfile( @template, %args ); print "Tmp: $fh - $path\n" if $DEBUG; # Store the filename in the scalar slot ${*$fh} = $path; # Cache the filename by pid so that the destructor can decide whether to remove it $FILES_CREATED_BY_OBJECT{$$}{$path} = 1; # Store unlink information in hash slot (plus other constructor info) %{*$fh} = %args; # create the object bless $fh, $class; # final method-based configuration $fh->unlink_on_destroy( $unlink ); return $fh; } #line 1066 sub newdir { my $self = shift; # need to handle args as in tempdir because we have to force CLEANUP # default without passing CLEANUP to tempdir my $template = (scalar(@_) % 2 == 1 ? shift(@_) : undef ); my %options = @_; my $cleanup = (exists $options{CLEANUP} ? $options{CLEANUP} : 1 ); delete $options{CLEANUP}; my $tempdir; if (defined $template) { $tempdir = tempdir( $template, %options ); } else { $tempdir = tempdir( %options ); } return bless { DIRNAME => $tempdir, CLEANUP => $cleanup, LAUNCHPID => $$, }, "File::Temp::Dir"; } #line 1101 sub filename { my $self = shift; return ${*$self}; } sub STRINGIFY { my $self = shift; return $self->filename; } #line 1131 sub unlink_on_destroy { my $self = shift; if (@_) { ${*$self}{UNLINK} = shift; } return ${*$self}{UNLINK}; } #line 1160 sub DESTROY { local($., $@, $!, $^E, $?); my $self = shift; # Make sure we always remove the file from the global hash # on destruction. This prevents the hash from growing uncontrollably # and post-destruction there is no reason to know about the file. my $file = $self->filename; my $was_created_by_proc; if (exists $FILES_CREATED_BY_OBJECT{$$}{$file}) { $was_created_by_proc = 1; delete $FILES_CREATED_BY_OBJECT{$$}{$file}; } if (${*$self}{UNLINK} && !$KEEP_ALL) { print "# ---------> Unlinking $self\n" if $DEBUG; # only delete if this process created it return unless $was_created_by_proc; # The unlink1 may fail if the file has been closed # by the caller. This leaves us with the decision # of whether to refuse to remove the file or simply # do an unlink without test. Seems to be silly # to do this when we are trying to be careful # about security _force_writable( $file ); # for windows unlink1( $self, $file ) or unlink($file); } } #line 1294 sub tempfile { # Can not check for argument count since we can have any # number of args # Default options my %options = ( "DIR" => undef, # Directory prefix "SUFFIX" => '', # Template suffix "UNLINK" => 0, # Do not unlink file on exit "OPEN" => 1, # Open file "TMPDIR" => 0, # Place tempfile in tempdir if template specified "EXLOCK" => 1, # Open file with O_EXLOCK ); # Check to see whether we have an odd or even number of arguments my $template = (scalar(@_) % 2 == 1 ? shift(@_) : undef); # Read the options and merge with defaults %options = (%options, @_) if @_; # First decision is whether or not to open the file if (! $options{"OPEN"}) { warn "tempfile(): temporary filename requested but not opened.\nPossibly unsafe, consider using tempfile() with OPEN set to true\n" if $^W; } if ($options{"DIR"} and $^O eq 'VMS') { # on VMS turn []foo into [.foo] for concatenation $options{"DIR"} = VMS::Filespec::vmspath($options{"DIR"}); } # Construct the template # Have a choice of trying to work around the mkstemp/mktemp/tmpnam etc # functions or simply constructing a template and using _gettemp() # explicitly. Go for the latter # First generate a template if not defined and prefix the directory # If no template must prefix the temp directory if (defined $template) { # End up with current directory if neither DIR not TMPDIR are set if ($options{"DIR"}) { $template = File::Spec->catfile($options{"DIR"}, $template); } elsif ($options{TMPDIR}) { $template = File::Spec->catfile(File::Spec->tmpdir, $template ); } } else { if ($options{"DIR"}) { $template = File::Spec->catfile($options{"DIR"}, TEMPXXX); } else { $template = File::Spec->catfile(File::Spec->tmpdir, TEMPXXX); } } # Now add a suffix $template .= $options{"SUFFIX"}; # Determine whether we should tell _gettemp to unlink the file # On unix this is irrelevant and can be worked out after the file is # opened (simply by unlinking the open filehandle). On Windows or VMS # we have to indicate temporary-ness when we open the file. In general # we only want a true temporary file if we are returning just the # filehandle - if the user wants the filename they probably do not # want the file to disappear as soon as they close it (which may be # important if they want a child process to use the file) # For this reason, tie unlink_on_close to the return context regardless # of OS. my $unlink_on_close = ( wantarray ? 0 : 1); # Create the file my ($fh, $path, $errstr); croak "Error in tempfile() using $template: $errstr" unless (($fh, $path) = _gettemp($template, "open" => $options{'OPEN'}, "mkdir"=> 0 , "unlink_on_close" => $unlink_on_close, "suffixlen" => length($options{'SUFFIX'}), "ErrStr" => \$errstr, "use_exlock" => $options{EXLOCK}, ) ); # Set up an exit handler that can do whatever is right for the # system. This removes files at exit when requested explicitly or when # system is asked to unlink_on_close but is unable to do so because # of OS limitations. # The latter should be achieved by using a tied filehandle. # Do not check return status since this is all done with END blocks. _deferred_unlink($fh, $path, 0) if $options{"UNLINK"}; # Return if (wantarray()) { if ($options{'OPEN'}) { return ($fh, $path); } else { return (undef, $path); } } else { # Unlink the file. It is up to unlink0 to decide what to do with # this (whether to unlink now or to defer until later) unlink0($fh, $path) or croak "Error unlinking file $path using unlink0"; # Return just the filehandle. return $fh; } } #line 1483 # ' sub tempdir { # Can not check for argument count since we can have any # number of args # Default options my %options = ( "CLEANUP" => 0, # Remove directory on exit "DIR" => '', # Root directory "TMPDIR" => 0, # Use tempdir with template ); # Check to see whether we have an odd or even number of arguments my $template = (scalar(@_) % 2 == 1 ? shift(@_) : undef ); # Read the options and merge with defaults %options = (%options, @_) if @_; # Modify or generate the template # Deal with the DIR and TMPDIR options if (defined $template) { # Need to strip directory path if using DIR or TMPDIR if ($options{'TMPDIR'} || $options{'DIR'}) { # Strip parent directory from the filename # # There is no filename at the end $template = VMS::Filespec::vmspath($template) if $^O eq 'VMS'; my ($volume, $directories, undef) = File::Spec->splitpath( $template, 1); # Last directory is then our template $template = (File::Spec->splitdir($directories))[-1]; # Prepend the supplied directory or temp dir if ($options{"DIR"}) { $template = File::Spec->catdir($options{"DIR"}, $template); } elsif ($options{TMPDIR}) { # Prepend tmpdir $template = File::Spec->catdir(File::Spec->tmpdir, $template); } } } else { if ($options{"DIR"}) { $template = File::Spec->catdir($options{"DIR"}, TEMPXXX); } else { $template = File::Spec->catdir(File::Spec->tmpdir, TEMPXXX); } } # Create the directory my $tempdir; my $suffixlen = 0; if ($^O eq 'VMS') { # dir names can end in delimiters $template =~ m/([\.\]:>]+)$/; $suffixlen = length($1); } if ( ($^O eq 'MacOS') && (substr($template, -1) eq ':') ) { # dir name has a trailing ':' ++$suffixlen; } my $errstr; croak "Error in tempdir() using $template: $errstr" unless ((undef, $tempdir) = _gettemp($template, "open" => 0, "mkdir"=> 1 , "suffixlen" => $suffixlen, "ErrStr" => \$errstr, ) ); # Install exit handler; must be dynamic to get lexical if ( $options{'CLEANUP'} && -d $tempdir) { _deferred_unlink(undef, $tempdir, 1); } # Return the dir name return $tempdir; } #line 1605 sub mkstemp { croak "Usage: mkstemp(template)" if scalar(@_) != 1; my $template = shift; my ($fh, $path, $errstr); croak "Error in mkstemp using $template: $errstr" unless (($fh, $path) = _gettemp($template, "open" => 1, "mkdir"=> 0 , "suffixlen" => 0, "ErrStr" => \$errstr, ) ); if (wantarray()) { return ($fh, $path); } else { return $fh; } } #line 1648 sub mkstemps { croak "Usage: mkstemps(template, suffix)" if scalar(@_) != 2; my $template = shift; my $suffix = shift; $template .= $suffix; my ($fh, $path, $errstr); croak "Error in mkstemps using $template: $errstr" unless (($fh, $path) = _gettemp($template, "open" => 1, "mkdir"=> 0 , "suffixlen" => length($suffix), "ErrStr" => \$errstr, ) ); if (wantarray()) { return ($fh, $path); } else { return $fh; } } #line 1691 #' # for emacs sub mkdtemp { croak "Usage: mkdtemp(template)" if scalar(@_) != 1; my $template = shift; my $suffixlen = 0; if ($^O eq 'VMS') { # dir names can end in delimiters $template =~ m/([\.\]:>]+)$/; $suffixlen = length($1); } if ( ($^O eq 'MacOS') && (substr($template, -1) eq ':') ) { # dir name has a trailing ':' ++$suffixlen; } my ($junk, $tmpdir, $errstr); croak "Error creating temp directory from template $template\: $errstr" unless (($junk, $tmpdir) = _gettemp($template, "open" => 0, "mkdir"=> 1 , "suffixlen" => $suffixlen, "ErrStr" => \$errstr, ) ); return $tmpdir; } #line 1734 sub mktemp { croak "Usage: mktemp(template)" if scalar(@_) != 1; my $template = shift; my ($tmpname, $junk, $errstr); croak "Error getting name to temp file from template $template: $errstr" unless (($junk, $tmpname) = _gettemp($template, "open" => 0, "mkdir"=> 0 , "suffixlen" => 0, "ErrStr" => \$errstr, ) ); return $tmpname; } #line 1796 sub tmpnam { # Retrieve the temporary directory name my $tmpdir = File::Spec->tmpdir; croak "Error temporary directory is not writable" if $tmpdir eq ''; # Use a ten character template and append to tmpdir my $template = File::Spec->catfile($tmpdir, TEMPXXX); if (wantarray() ) { return mkstemp($template); } else { return mktemp($template); } } #line 1832 sub tmpfile { # Simply call tmpnam() in a list context my ($fh, $file) = tmpnam(); # Make sure file is removed when filehandle is closed # This will fail on NFS unlink0($fh, $file) or return undef; return $fh; } #line 1877 sub tempnam { croak 'Usage tempnam($dir, $prefix)' unless scalar(@_) == 2; my ($dir, $prefix) = @_; # Add a string to the prefix $prefix .= 'XXXXXXXX'; # Concatenate the directory to the file my $template = File::Spec->catfile($dir, $prefix); return mktemp($template); } #line 1949 sub unlink0 { croak 'Usage: unlink0(filehandle, filename)' unless scalar(@_) == 2; # Read args my ($fh, $path) = @_; cmpstat($fh, $path) or return 0; # attempt remove the file (does not work on some platforms) if (_can_unlink_opened_file()) { # return early (Without unlink) if we have been instructed to retain files. return 1 if $KEEP_ALL; # XXX: do *not* call this on a directory; possible race # resulting in recursive removal croak "unlink0: $path has become a directory!" if -d $path; unlink($path) or return 0; # Stat the filehandle my @fh = stat $fh; print "Link count = $fh[3] \n" if $DEBUG; # Make sure that the link count is zero # - Cygwin provides deferred unlinking, however, # on Win9x the link count remains 1 # On NFS the link count may still be 1 but we cant know that # we are on NFS return ( $fh[3] == 0 or $^O eq 'cygwin' ? 1 : 0); } else { _deferred_unlink($fh, $path, 0); return 1; } } #line 2014 sub cmpstat { croak 'Usage: cmpstat(filehandle, filename)' unless scalar(@_) == 2; # Read args my ($fh, $path) = @_; warn "Comparing stat\n" if $DEBUG; # Stat the filehandle - which may be closed if someone has manually # closed the file. Can not turn off warnings without using $^W # unless we upgrade to 5.006 minimum requirement my @fh; { local ($^W) = 0; @fh = stat $fh; } return unless @fh; if ($fh[3] > 1 && $^W) { carp "unlink0: fstat found too many links; SB=@fh" if $^W; } # Stat the path my @path = stat $path; unless (@path) { carp "unlink0: $path is gone already" if $^W; return; } # this is no longer a file, but may be a directory, or worse unless (-f $path) { confess "panic: $path is no longer a file: SB=@fh"; } # Do comparison of each member of the array # On WinNT dev and rdev seem to be different # depending on whether it is a file or a handle. # Cannot simply compare all members of the stat return # Select the ones we can use my @okstat = (0..$#fh); # Use all by default if ($^O eq 'MSWin32') { @okstat = (1,2,3,4,5,7,8,9,10); } elsif ($^O eq 'os2') { @okstat = (0, 2..$#fh); } elsif ($^O eq 'VMS') { # device and file ID are sufficient @okstat = (0, 1); } elsif ($^O eq 'dos') { @okstat = (0,2..7,11..$#fh); } elsif ($^O eq 'mpeix') { @okstat = (0..4,8..10); } # Now compare each entry explicitly by number for (@okstat) { print "Comparing: $_ : $fh[$_] and $path[$_]\n" if $DEBUG; # Use eq rather than == since rdev, blksize, and blocks (6, 11, # and 12) will be '' on platforms that do not support them. This # is fine since we are only comparing integers. unless ($fh[$_] eq $path[$_]) { warn "Did not match $_ element of stat\n" if $DEBUG; return 0; } } return 1; } #line 2107 sub unlink1 { croak 'Usage: unlink1(filehandle, filename)' unless scalar(@_) == 2; # Read args my ($fh, $path) = @_; cmpstat($fh, $path) or return 0; # Close the file close( $fh ) or return 0; # Make sure the file is writable (for windows) _force_writable( $path ); # return early (without unlink) if we have been instructed to retain files. return 1 if $KEEP_ALL; # remove the file return unlink($path); } #line 2222 { # protect from using the variable itself my $LEVEL = STANDARD; sub safe_level { my $self = shift; if (@_) { my $level = shift; if (($level != STANDARD) && ($level != MEDIUM) && ($level != HIGH)) { carp "safe_level: Specified level ($level) not STANDARD, MEDIUM or HIGH - ignoring\n" if $^W; } else { # Dont allow this on perl 5.005 or earlier if ($] < 5.006 && $level != STANDARD) { # Cant do MEDIUM or HIGH checks croak "Currently requires perl 5.006 or newer to do the safe checks"; } # Check that we are allowed to change level # Silently ignore if we can not. $LEVEL = $level if _can_do_level($level); } } return $LEVEL; } } #line 2267 { my $TopSystemUID = 10; $TopSystemUID = 197108 if $^O eq 'interix'; # "Administrator" sub top_system_uid { my $self = shift; if (@_) { my $newuid = shift; croak "top_system_uid: UIDs should be numeric" unless $newuid =~ /^\d+$/s; $TopSystemUID = $newuid; } return $TopSystemUID; } } #line 2402 package File::Temp::Dir; use File::Path qw/ rmtree /; use strict; use overload '""' => "STRINGIFY", fallback => 1; # private class specifically to support tempdir objects # created by File::Temp->newdir # ostensibly the same method interface as File::Temp but without # inheriting all the IO::Seekable methods and other cruft # Read-only - returns the name of the temp directory sub dirname { my $self = shift; return $self->{DIRNAME}; } sub STRINGIFY { my $self = shift; return $self->dirname; } sub unlink_on_destroy { my $self = shift; if (@_) { $self->{CLEANUP} = shift; } return $self->{CLEANUP}; } sub DESTROY { my $self = shift; local($., $@, $!, $^E, $?); if ($self->unlink_on_destroy && $$ == $self->{LAUNCHPID} && !$File::Temp::KEEP_ALL) { if (-d $self->{DIRNAME}) { # Some versions of rmtree will abort if you attempt to remove # the directory you are sitting in. We protect that and turn it # into a warning. We do this because this occurs during object # destruction and so can not be caught by the user. eval { rmtree($self->{DIRNAME}, $File::Temp::DEBUG, 0); }; warn $@ if ($@ && $^W); } } } 1; FILE'6941af72/IO/Compress/Adapter/Deflate.pm B#line 1 "/usr/local/share/perl/5.8.8/IO/Compress/Adapter/Deflate.pm" package IO::Compress::Adapter::Deflate ; use strict; use warnings; use bytes; use IO::Compress::Base::Common 2.020 qw(:Status); use Compress::Raw::Zlib 2.020 qw(Z_OK Z_FINISH MAX_WBITS) ; our ($VERSION); $VERSION = '2.020'; sub mkCompObject { my $crc32 = shift ; my $adler32 = shift ; my $level = shift ; my $strategy = shift ; my ($def, $status) = new Compress::Raw::Zlib::Deflate -AppendOutput => 1, -CRC32 => $crc32, -ADLER32 => $adler32, -Level => $level, -Strategy => $strategy, -WindowBits => - MAX_WBITS; return (undef, "Cannot create Deflate object: $status", $status) if $status != Z_OK; return bless {'Def' => $def, 'Error' => '', } ; } sub compr { my $self = shift ; my $def = $self->{Def}; my $status = $def->deflate($_[0], $_[1]) ; $self->{ErrorNo} = $status; if ($status != Z_OK) { $self->{Error} = "Deflate Error: $status"; return STATUS_ERROR; } return STATUS_OK; } sub flush { my $self = shift ; my $def = $self->{Def}; my $opt = $_[1] || Z_FINISH; my $status = $def->flush($_[0], $opt); $self->{ErrorNo} = $status; if ($status != Z_OK) { $self->{Error} = "Deflate Error: $status"; return STATUS_ERROR; } return STATUS_OK; } sub close { my $self = shift ; my $def = $self->{Def}; $def->flush($_[0], Z_FINISH) if defined $def ; } sub reset { my $self = shift ; my $def = $self->{Def}; my $status = $def->deflateReset() ; $self->{ErrorNo} = $status; if ($status != Z_OK) { $self->{Error} = "Deflate Error: $status"; return STATUS_ERROR; } return STATUS_OK; } sub deflateParams { my $self = shift ; my $def = $self->{Def}; my $status = $def->deflateParams(@_); $self->{ErrorNo} = $status; if ($status != Z_OK) { $self->{Error} = "deflateParams Error: $status"; return STATUS_ERROR; } return STATUS_OK; } #sub total_out #{ # my $self = shift ; # $self->{Def}->total_out(); #} # #sub total_in #{ # my $self = shift ; # $self->{Def}->total_in(); #} sub compressedBytes { my $self = shift ; $self->{Def}->compressedBytes(); } sub uncompressedBytes { my $self = shift ; $self->{Def}->uncompressedBytes(); } sub crc32 { my $self = shift ; $self->{Def}->crc32(); } sub adler32 { my $self = shift ; $self->{Def}->adler32(); } 1; __END__ FILE4891c8f5/IO/Compress/Base.pmQJ#line 1 "/usr/local/share/perl/5.8.8/IO/Compress/Base.pm" package IO::Compress::Base ; require 5.004 ; use strict ; use warnings; use IO::Compress::Base::Common 2.020 ; use IO::File ; use Scalar::Util qw(blessed readonly); #use File::Glob; #require Exporter ; use Carp ; use Symbol; use bytes; our (@ISA, $VERSION); @ISA = qw(Exporter IO::File); $VERSION = '2.020'; #Can't locate object method "SWASHNEW" via package "utf8" (perhaps you forgot to load "utf8"?) at .../ext/Compress-Zlib/Gzip/blib/lib/Compress/Zlib/Common.pm line 16. sub saveStatus { my $self = shift ; ${ *$self->{ErrorNo} } = shift() + 0 ; ${ *$self->{Error} } = '' ; return ${ *$self->{ErrorNo} } ; } sub saveErrorString { my $self = shift ; my $retval = shift ; ${ *$self->{Error} } = shift ; ${ *$self->{ErrorNo} } = shift() + 0 if @_ ; return $retval; } sub croakError { my $self = shift ; $self->saveErrorString(0, $_[0]); croak $_[0]; } sub closeError { my $self = shift ; my $retval = shift ; my $errno = *$self->{ErrorNo}; my $error = ${ *$self->{Error} }; $self->close(); *$self->{ErrorNo} = $errno ; ${ *$self->{Error} } = $error ; return $retval; } sub error { my $self = shift ; return ${ *$self->{Error} } ; } sub errorNo { my $self = shift ; return ${ *$self->{ErrorNo} } ; } sub writeAt { my $self = shift ; my $offset = shift; my $data = shift; if (defined *$self->{FH}) { my $here = tell(*$self->{FH}); return $self->saveErrorString(undef, "Cannot seek to end of output filehandle: $!", $!) if $here < 0 ; seek(*$self->{FH}, $offset, SEEK_SET) or return $self->saveErrorString(undef, "Cannot seek to end of output filehandle: $!", $!) ; defined *$self->{FH}->write($data, length $data) or return $self->saveErrorString(undef, $!, $!) ; seek(*$self->{FH}, $here, SEEK_SET) or return $self->saveErrorString(undef, "Cannot seek to end of output filehandle: $!", $!) ; } else { substr(${ *$self->{Buffer} }, $offset, length($data)) = $data ; } return 1; } sub output { my $self = shift ; my $data = shift ; my $last = shift ; return 1 if length $data == 0 && ! $last ; if ( *$self->{FilterEnvelope} ) { *_ = \$data; &{ *$self->{FilterEnvelope} }(); } if (length $data) { if ( defined *$self->{FH} ) { defined *$self->{FH}->write( $data, length $data ) or return $self->saveErrorString(0, $!, $!); } else { ${ *$self->{Buffer} } .= $data ; } } return 1; } sub getOneShotParams { return ( 'MultiStream' => [1, 1, Parse_boolean, 1], ); } sub checkParams { my $self = shift ; my $class = shift ; my $got = shift || IO::Compress::Base::Parameters::new(); $got->parse( { # Generic Parameters 'AutoClose' => [1, 1, Parse_boolean, 0], #'Encode' => [1, 1, Parse_any, undef], 'Strict' => [0, 1, Parse_boolean, 1], 'Append' => [1, 1, Parse_boolean, 0], 'BinModeIn' => [1, 1, Parse_boolean, 0], 'FilterEnvelope' => [1, 1, Parse_any, undef], $self->getExtraParams(), *$self->{OneShot} ? $self->getOneShotParams() : (), }, @_) or $self->croakError("${class}: $got->{Error}") ; return $got ; } sub _create { my $obj = shift; my $got = shift; *$obj->{Closed} = 1 ; my $class = ref $obj; $obj->croakError("$class: Missing Output parameter") if ! @_ && ! $got ; my $outValue = shift ; my $oneShot = 1 ; if (! $got) { $oneShot = 0 ; $got = $obj->checkParams($class, undef, @_) or return undef ; } my $lax = ! $got->value('Strict') ; my $outType = whatIsOutput($outValue); $obj->ckOutputParam($class, $outValue) or return undef ; if ($outType eq 'buffer') { *$obj->{Buffer} = $outValue; } else { my $buff = "" ; *$obj->{Buffer} = \$buff ; } # Merge implies Append my $merge = $got->value('Merge') ; my $appendOutput = $got->value('Append') || $merge ; *$obj->{Append} = $appendOutput; *$obj->{FilterEnvelope} = $got->value('FilterEnvelope') ; if ($merge) { # Switch off Merge mode if output file/buffer is empty/doesn't exist if (($outType eq 'buffer' && length $$outValue == 0 ) || ($outType ne 'buffer' && (! -e $outValue || (-w _ && -z _))) ) { $merge = 0 } } # If output is a file, check that it is writable #no warnings; #if ($outType eq 'filename' && -e $outValue && ! -w _) # { return $obj->saveErrorString(undef, "Output file '$outValue' is not writable" ) } if ($got->parsed('Encode')) { my $want_encoding = $got->value('Encode'); *$obj->{Encoding} = getEncoding($obj, $class, $want_encoding); } $obj->ckParams($got) or $obj->croakError("${class}: " . $obj->error()); $obj->saveStatus(STATUS_OK) ; my $status ; if (! $merge) { *$obj->{Compress} = $obj->mkComp($got) or return undef; *$obj->{UnCompSize} = new U64 ; *$obj->{CompSize} = new U64 ; if ( $outType eq 'buffer') { ${ *$obj->{Buffer} } = '' unless $appendOutput ; } else { if ($outType eq 'handle') { *$obj->{FH} = $outValue ; setBinModeOutput(*$obj->{FH}) ; $outValue->flush() ; *$obj->{Handle} = 1 ; if ($appendOutput) { seek(*$obj->{FH}, 0, SEEK_END) or return $obj->saveErrorString(undef, "Cannot seek to end of output filehandle: $!", $!) ; } } elsif ($outType eq 'filename') { no warnings; my $mode = '>' ; $mode = '>>' if $appendOutput; *$obj->{FH} = new IO::File "$mode $outValue" or return $obj->saveErrorString(undef, "cannot open file '$outValue': $!", $!) ; *$obj->{StdIO} = ($outValue eq '-'); setBinModeOutput(*$obj->{FH}) ; } } *$obj->{Header} = $obj->mkHeader($got) ; $obj->output( *$obj->{Header} ) or return undef; } else { *$obj->{Compress} = $obj->createMerge($outValue, $outType) or return undef; } *$obj->{Closed} = 0 ; *$obj->{AutoClose} = $got->value('AutoClose') ; *$obj->{Output} = $outValue; *$obj->{ClassName} = $class; *$obj->{Got} = $got; *$obj->{OneShot} = 0 ; return $obj ; } sub ckOutputParam { my $self = shift ; my $from = shift ; my $outType = whatIsOutput($_[0]); $self->croakError("$from: output parameter not a filename, filehandle or scalar ref") if ! $outType ; #$self->croakError("$from: output filename is undef or null string") #if $outType eq 'filename' && (! defined $_[0] || $_[0] eq '') ; $self->croakError("$from: output buffer is read-only") if $outType eq 'buffer' && readonly(${ $_[0] }); return 1; } sub _def { my $obj = shift ; my $class= (caller)[0] ; my $name = (caller(1))[3] ; $obj->croakError("$name: expected at least 1 parameters\n") unless @_ >= 1 ; my $input = shift ; my $haveOut = @_ ; my $output = shift ; my $x = new IO::Compress::Base::Validator($class, *$obj->{Error}, $name, $input, $output) or return undef ; push @_, $output if $haveOut && $x->{Hash}; *$obj->{OneShot} = 1 ; my $got = $obj->checkParams($name, undef, @_) or return undef ; $x->{Got} = $got ; # if ($x->{Hash}) # { # while (my($k, $v) = each %$input) # { # $v = \$input->{$k} # unless defined $v ; # # $obj->_singleTarget($x, 1, $k, $v, @_) # or return undef ; # } # # return keys %$input ; # } if ($x->{GlobMap}) { $x->{oneInput} = 1 ; foreach my $pair (@{ $x->{Pairs} }) { my ($from, $to) = @$pair ; $obj->_singleTarget($x, 1, $from, $to, @_) or return undef ; } return scalar @{ $x->{Pairs} } ; } if (! $x->{oneOutput} ) { my $inFile = ($x->{inType} eq 'filenames' || $x->{inType} eq 'filename'); $x->{inType} = $inFile ? 'filename' : 'buffer'; foreach my $in ($x->{oneInput} ? $input : @$input) { my $out ; $x->{oneInput} = 1 ; $obj->_singleTarget($x, $inFile, $in, \$out, @_) or return undef ; push @$output, \$out ; #if ($x->{outType} eq 'array') # { push @$output, \$out } #else # { $output->{$in} = \$out } } return 1 ; } # finally the 1 to 1 and n to 1 return $obj->_singleTarget($x, 1, $input, $output, @_); croak "should not be here" ; } sub _singleTarget { my $obj = shift ; my $x = shift ; my $inputIsFilename = shift; my $input = shift; if ($x->{oneInput}) { $obj->getFileInfo($x->{Got}, $input) if isaFilename($input) and $inputIsFilename ; my $z = $obj->_create($x->{Got}, @_) or return undef ; defined $z->_wr2($input, $inputIsFilename) or return $z->closeError(undef) ; return $z->close() ; } else { my $afterFirst = 0 ; my $inputIsFilename = ($x->{inType} ne 'array'); my $keep = $x->{Got}->clone(); #for my $element ( ($x->{inType} eq 'hash') ? keys %$input : @$input) for my $element ( @$input) { my $isFilename = isaFilename($element); if ( $afterFirst ++ ) { defined addInterStream($obj, $element, $isFilename) or return $obj->closeError(undef) ; } else { $obj->getFileInfo($x->{Got}, $element) if $isFilename; $obj->_create($x->{Got}, @_) or return undef ; } defined $obj->_wr2($element, $isFilename) or return $obj->closeError(undef) ; *$obj->{Got} = $keep->clone(); } return $obj->close() ; } } sub _wr2 { my $self = shift ; my $source = shift ; my $inputIsFilename = shift; my $input = $source ; if (! $inputIsFilename) { $input = \$source if ! ref $source; } if ( ref $input && ref $input eq 'SCALAR' ) { return $self->syswrite($input, @_) ; } if ( ! ref $input || isaFilehandle($input)) { my $isFilehandle = isaFilehandle($input) ; my $fh = $input ; if ( ! $isFilehandle ) { $fh = new IO::File "<$input" or return $self->saveErrorString(undef, "cannot open file '$input': $!", $!) ; } binmode $fh if *$self->{Got}->valueOrDefault('BinModeIn') ; my $status ; my $buff ; my $count = 0 ; while (($status = read($fh, $buff, 16 * 1024)) > 0) { $count += length $buff; defined $self->syswrite($buff, @_) or return undef ; } return $self->saveErrorString(undef, $!, $!) if $status < 0 ; if ( (!$isFilehandle || *$self->{AutoClose}) && $input ne '-') { $fh->close() or return undef ; } return $count ; } croak "Should not be here"; return undef; } sub addInterStream { my $self = shift ; my $input = shift ; my $inputIsFilename = shift ; if (*$self->{Got}->value('MultiStream')) { $self->getFileInfo(*$self->{Got}, $input) #if isaFilename($input) and $inputIsFilename ; if isaFilename($input) ; # TODO -- newStream needs to allow gzip/zip header to be modified return $self->newStream(); } elsif (*$self->{Got}->value('AutoFlush')) { #return $self->flush(Z_FULL_FLUSH); } return 1 ; } sub getFileInfo { } sub TIEHANDLE { return $_[0] if ref($_[0]); die "OOPS\n" ; } sub UNTIE { my $self = shift ; } sub DESTROY { my $self = shift ; local ($., $@, $!, $^E, $?); $self->close() ; # TODO - memory leak with 5.8.0 - this isn't called until # global destruction # %{ *$self } = () ; undef $self ; } sub filterUncompressed { } sub syswrite { my $self = shift ; my $buffer ; if (ref $_[0] ) { $self->croakError( *$self->{ClassName} . "::write: not a scalar reference" ) unless ref $_[0] eq 'SCALAR' ; $buffer = $_[0] ; } else { $buffer = \$_[0] ; } $] >= 5.008 and ( utf8::downgrade($$buffer, 1) or croak "Wide character in " . *$self->{ClassName} . "::write:"); if (@_ > 1) { my $slen = defined $$buffer ? length($$buffer) : 0; my $len = $slen; my $offset = 0; $len = $_[1] if $_[1] < $len; if (@_ > 2) { $offset = $_[2] || 0; $self->croakError(*$self->{ClassName} . "::write: offset outside string") if $offset > $slen; if ($offset < 0) { $offset += $slen; $self->croakError( *$self->{ClassName} . "::write: offset outside string") if $offset < 0; } my $rem = $slen - $offset; $len = $rem if $rem < $len; } $buffer = \substr($$buffer, $offset, $len) ; } return 0 if ! defined $$buffer || length $$buffer == 0 ; if (*$self->{Encoding}) { $$buffer = *$self->{Encoding}->encode($$buffer); } $self->filterUncompressed($buffer); my $buffer_length = defined $$buffer ? length($$buffer) : 0 ; *$self->{UnCompSize}->add($buffer_length) ; my $outBuffer=''; my $status = *$self->{Compress}->compr($buffer, $outBuffer) ; return $self->saveErrorString(undef, *$self->{Compress}{Error}, *$self->{Compress}{ErrorNo}) if $status == STATUS_ERROR; *$self->{CompSize}->add(length $outBuffer) ; $self->output($outBuffer) or return undef; return $buffer_length; } sub print { my $self = shift; #if (ref $self) { # $self = *$self{GLOB} ; #} if (defined $\) { if (defined $,) { defined $self->syswrite(join($,, @_) . $\); } else { defined $self->syswrite(join("", @_) . $\); } } else { if (defined $,) { defined $self->syswrite(join($,, @_)); } else { defined $self->syswrite(join("", @_)); } } } sub printf { my $self = shift; my $fmt = shift; defined $self->syswrite(sprintf($fmt, @_)); } sub flush { my $self = shift ; my $outBuffer=''; my $status = *$self->{Compress}->flush($outBuffer, @_) ; return $self->saveErrorString(0, *$self->{Compress}{Error}, *$self->{Compress}{ErrorNo}) if $status == STATUS_ERROR; if ( defined *$self->{FH} ) { *$self->{FH}->clearerr(); } *$self->{CompSize}->add(length $outBuffer) ; $self->output($outBuffer) or return 0; if ( defined *$self->{FH} ) { defined *$self->{FH}->flush() or return $self->saveErrorString(0, $!, $!); } return 1; } sub newStream { my $self = shift ; $self->_writeTrailer() or return 0 ; my $got = $self->checkParams('newStream', *$self->{Got}, @_) or return 0 ; $self->ckParams($got) or $self->croakError("newStream: $self->{Error}"); *$self->{Compress} = $self->mkComp($got) or return 0; *$self->{Header} = $self->mkHeader($got) ; $self->output(*$self->{Header} ) or return 0; *$self->{UnCompSize}->reset(); *$self->{CompSize}->reset(); return 1 ; } sub reset { my $self = shift ; return *$self->{Compress}->reset() ; } sub _writeTrailer { my $self = shift ; my $trailer = ''; my $status = *$self->{Compress}->close($trailer) ; return $self->saveErrorString(0, *$self->{Compress}{Error}, *$self->{Compress}{ErrorNo}) if $status == STATUS_ERROR; *$self->{CompSize}->add(length $trailer) ; $trailer .= $self->mkTrailer(); defined $trailer or return 0; return $self->output($trailer); } sub _writeFinalTrailer { my $self = shift ; return $self->output($self->mkFinalTrailer()); } sub close { my $self = shift ; return 1 if *$self->{Closed} || ! *$self->{Compress} ; *$self->{Closed} = 1 ; untie *$self if $] >= 5.008 ; $self->_writeTrailer() or return 0 ; $self->_writeFinalTrailer() or return 0 ; $self->output( "", 1 ) or return 0; if (defined *$self->{FH}) { #if (! *$self->{Handle} || *$self->{AutoClose}) { if ((! *$self->{Handle} || *$self->{AutoClose}) && ! *$self->{StdIO}) { $! = 0 ; *$self->{FH}->close() or return $self->saveErrorString(0, $!, $!); } delete *$self->{FH} ; # This delete can set $! in older Perls, so reset the errno $! = 0 ; } return 1; } #sub total_in #sub total_out #sub msg # #sub crc #{ # my $self = shift ; # return *$self->{Compress}->crc32() ; #} # #sub msg #{ # my $self = shift ; # return *$self->{Compress}->msg() ; #} # #sub dict_adler #{ # my $self = shift ; # return *$self->{Compress}->dict_adler() ; #} # #sub get_Level #{ # my $self = shift ; # return *$self->{Compress}->get_Level() ; #} # #sub get_Strategy #{ # my $self = shift ; # return *$self->{Compress}->get_Strategy() ; #} sub tell { my $self = shift ; return *$self->{UnCompSize}->get32bit() ; } sub eof { my $self = shift ; return *$self->{Closed} ; } sub seek { my $self = shift ; my $position = shift; my $whence = shift ; my $here = $self->tell() ; my $target = 0 ; #use IO::Handle qw(SEEK_SET SEEK_CUR SEEK_END); use IO::Handle ; if ($whence == IO::Handle::SEEK_SET) { $target = $position ; } elsif ($whence == IO::Handle::SEEK_CUR || $whence == IO::Handle::SEEK_END) { $target = $here + $position ; } else { $self->croakError(*$self->{ClassName} . "::seek: unknown value, $whence, for whence parameter"); } # short circuit if seeking to current offset return 1 if $target == $here ; # Outlaw any attempt to seek backwards $self->croakError(*$self->{ClassName} . "::seek: cannot seek backwards") if $target < $here ; # Walk the file to the new offset my $offset = $target - $here ; my $buffer ; defined $self->syswrite("\x00" x $offset) or return 0; return 1 ; } sub binmode { 1; # my $self = shift ; # return defined *$self->{FH} # ? binmode *$self->{FH} # : 1 ; } sub fileno { my $self = shift ; return defined *$self->{FH} ? *$self->{FH}->fileno() : undef ; } sub opened { my $self = shift ; return ! *$self->{Closed} ; } sub autoflush { my $self = shift ; return defined *$self->{FH} ? *$self->{FH}->autoflush(@_) : undef ; } sub input_line_number { return undef ; } sub _notAvailable { my $name = shift ; return sub { croak "$name Not Available: File opened only for output" ; } ; } *read = _notAvailable('read'); *READ = _notAvailable('read'); *readline = _notAvailable('readline'); *READLINE = _notAvailable('readline'); *getc = _notAvailable('getc'); *GETC = _notAvailable('getc'); *FILENO = \&fileno; *PRINT = \&print; *PRINTF = \&printf; *WRITE = \&syswrite; *write = \&syswrite; *SEEK = \&seek; *TELL = \&tell; *EOF = \&eof; *CLOSE = \&close; *BINMODE = \&binmode; #*sysread = \&_notAvailable; #*syswrite = \&_write; 1; __END__ #line 982 FILE#40b915f9/IO/Compress/Base/Common.pmS`#line 1 "/usr/local/share/perl/5.8.8/IO/Compress/Base/Common.pm" package IO::Compress::Base::Common; use strict ; use warnings; use bytes; use Carp; use Scalar::Util qw(blessed readonly); use File::GlobMapper; require Exporter; our ($VERSION, @ISA, @EXPORT, %EXPORT_TAGS, $HAS_ENCODE); @ISA = qw(Exporter); $VERSION = '2.020'; @EXPORT = qw( isaFilehandle isaFilename whatIsInput whatIsOutput isaFileGlobString cleanFileGlobString oneTarget setBinModeInput setBinModeOutput ckInOutParams createSelfTiedObject getEncoding WANT_CODE WANT_EXT WANT_UNDEF WANT_HASH STATUS_OK STATUS_ENDSTREAM STATUS_EOF STATUS_ERROR ); %EXPORT_TAGS = ( Status => [qw( STATUS_OK STATUS_ENDSTREAM STATUS_EOF STATUS_ERROR )]); use constant STATUS_OK => 0; use constant STATUS_ENDSTREAM => 1; use constant STATUS_EOF => 2; use constant STATUS_ERROR => -1; sub hasEncode() { if (! defined $HAS_ENCODE) { eval { require Encode; Encode->import(); }; $HAS_ENCODE = $@ ? 0 : 1 ; } return $HAS_ENCODE; } sub getEncoding($$$) { my $obj = shift; my $class = shift ; my $want_encoding = shift ; $obj->croakError("$class: Encode module needed to use -Encode") if ! hasEncode(); my $encoding = Encode::find_encoding($want_encoding); $obj->croakError("$class: Encoding '$want_encoding' is not available") if ! $encoding; return $encoding; } our ($needBinmode); $needBinmode = ($^O eq 'MSWin32' || ($] >= 5.006 && eval ' ${^UNICODE} || ${^UTF8LOCALE} ')) ? 1 : 1 ; sub setBinModeInput($) { my $handle = shift ; binmode $handle if $needBinmode; } sub setBinModeOutput($) { my $handle = shift ; binmode $handle if $needBinmode; } sub isaFilehandle($) { use utf8; # Pragma needed to keep Perl 5.6.0 happy return (defined $_[0] and (UNIVERSAL::isa($_[0],'GLOB') or UNIVERSAL::isa($_[0],'IO::Handle') or UNIVERSAL::isa(\$_[0],'GLOB')) ) } sub isaFilename($) { return (defined $_[0] and ! ref $_[0] and UNIVERSAL::isa(\$_[0], 'SCALAR')); } sub isaFileGlobString { return defined $_[0] && $_[0] =~ /^<.*>$/; } sub cleanFileGlobString { my $string = shift ; $string =~ s/^\s*<\s*(.*)\s*>\s*$/$1/; return $string; } use constant WANT_CODE => 1 ; use constant WANT_EXT => 2 ; use constant WANT_UNDEF => 4 ; #use constant WANT_HASH => 8 ; use constant WANT_HASH => 0 ; sub whatIsInput($;$) { my $got = whatIs(@_); if (defined $got && $got eq 'filename' && defined $_[0] && $_[0] eq '-') { #use IO::File; $got = 'handle'; $_[0] = *STDIN; #$_[0] = new IO::File("<-"); } return $got; } sub whatIsOutput($;$) { my $got = whatIs(@_); if (defined $got && $got eq 'filename' && defined $_[0] && $_[0] eq '-') { $got = 'handle'; $_[0] = *STDOUT; #$_[0] = new IO::File(">-"); } return $got; } sub whatIs ($;$) { return 'handle' if isaFilehandle($_[0]); my $wantCode = defined $_[1] && $_[1] & WANT_CODE ; my $extended = defined $_[1] && $_[1] & WANT_EXT ; my $undef = defined $_[1] && $_[1] & WANT_UNDEF ; my $hash = defined $_[1] && $_[1] & WANT_HASH ; return 'undef' if ! defined $_[0] && $undef ; if (ref $_[0]) { return '' if blessed($_[0]); # is an object #return '' if UNIVERSAL::isa($_[0], 'UNIVERSAL'); # is an object return 'buffer' if UNIVERSAL::isa($_[0], 'SCALAR'); return 'array' if UNIVERSAL::isa($_[0], 'ARRAY') && $extended ; return 'hash' if UNIVERSAL::isa($_[0], 'HASH') && $hash ; return 'code' if UNIVERSAL::isa($_[0], 'CODE') && $wantCode ; return ''; } return 'fileglob' if $extended && isaFileGlobString($_[0]); return 'filename'; } sub oneTarget { return $_[0] =~ /^(code|handle|buffer|filename)$/; } sub IO::Compress::Base::Validator::new { my $class = shift ; my $Class = shift ; my $error_ref = shift ; my $reportClass = shift ; my %data = (Class => $Class, Error => $error_ref, reportClass => $reportClass, ) ; my $obj = bless \%data, $class ; local $Carp::CarpLevel = 1; my $inType = $data{inType} = whatIsInput($_[0], WANT_EXT|WANT_HASH); my $outType = $data{outType} = whatIsOutput($_[1], WANT_EXT|WANT_HASH); my $oneInput = $data{oneInput} = oneTarget($inType); my $oneOutput = $data{oneOutput} = oneTarget($outType); if (! $inType) { $obj->croakError("$reportClass: illegal input parameter") ; #return undef ; } # if ($inType eq 'hash') # { # $obj->{Hash} = 1 ; # $obj->{oneInput} = 1 ; # return $obj->validateHash($_[0]); # } if (! $outType) { $obj->croakError("$reportClass: illegal output parameter") ; #return undef ; } if ($inType ne 'fileglob' && $outType eq 'fileglob') { $obj->croakError("Need input fileglob for outout fileglob"); } # if ($inType ne 'fileglob' && $outType eq 'hash' && $inType ne 'filename' ) # { # $obj->croakError("input must ne filename or fileglob when output is a hash"); # } if ($inType eq 'fileglob' && $outType eq 'fileglob') { $data{GlobMap} = 1 ; $data{inType} = $data{outType} = 'filename'; my $mapper = new File::GlobMapper($_[0], $_[1]); if ( ! $mapper ) { return $obj->saveErrorString($File::GlobMapper::Error) ; } $data{Pairs} = $mapper->getFileMap(); return $obj; } $obj->croakError("$reportClass: input and output $inType are identical") if $inType eq $outType && $_[0] eq $_[1] && $_[0] ne '-' ; if ($inType eq 'fileglob') # && $outType ne 'fileglob' { my $glob = cleanFileGlobString($_[0]); my @inputs = glob($glob); if (@inputs == 0) { # TODO -- legal or die? die "globmap matched zero file -- legal or die???" ; } elsif (@inputs == 1) { $obj->validateInputFilenames($inputs[0]) or return undef; $_[0] = $inputs[0] ; $data{inType} = 'filename' ; $data{oneInput} = 1; } else { $obj->validateInputFilenames(@inputs) or return undef; $_[0] = [ @inputs ] ; $data{inType} = 'filenames' ; } } elsif ($inType eq 'filename') { $obj->validateInputFilenames($_[0]) or return undef; } elsif ($inType eq 'array') { $data{inType} = 'filenames' ; $obj->validateInputArray($_[0]) or return undef ; } return $obj->saveErrorString("$reportClass: output buffer is read-only") if $outType eq 'buffer' && readonly(${ $_[1] }); if ($outType eq 'filename' ) { $obj->croakError("$reportClass: output filename is undef or null string") if ! defined $_[1] || $_[1] eq '' ; if (-e $_[1]) { if (-d _ ) { return $obj->saveErrorString("output file '$_[1]' is a directory"); } } } return $obj ; } sub IO::Compress::Base::Validator::saveErrorString { my $self = shift ; ${ $self->{Error} } = shift ; return undef; } sub IO::Compress::Base::Validator::croakError { my $self = shift ; $self->saveErrorString($_[0]); croak $_[0]; } sub IO::Compress::Base::Validator::validateInputFilenames { my $self = shift ; foreach my $filename (@_) { $self->croakError("$self->{reportClass}: input filename is undef or null string") if ! defined $filename || $filename eq '' ; next if $filename eq '-'; if (! -e $filename ) { return $self->saveErrorString("input file '$filename' does not exist"); } if (-d _ ) { return $self->saveErrorString("input file '$filename' is a directory"); } if (! -r _ ) { return $self->saveErrorString("cannot open file '$filename': $!"); } } return 1 ; } sub IO::Compress::Base::Validator::validateInputArray { my $self = shift ; if ( @{ $_[0] } == 0 ) { return $self->saveErrorString("empty array reference") ; } foreach my $element ( @{ $_[0] } ) { my $inType = whatIsInput($element); if (! $inType) { $self->croakError("unknown input parameter") ; } elsif($inType eq 'filename') { $self->validateInputFilenames($element) or return undef ; } else { $self->croakError("not a filename") ; } } return 1 ; } #sub IO::Compress::Base::Validator::validateHash #{ # my $self = shift ; # my $href = shift ; # # while (my($k, $v) = each %$href) # { # my $ktype = whatIsInput($k); # my $vtype = whatIsOutput($v, WANT_EXT|WANT_UNDEF) ; # # if ($ktype ne 'filename') # { # return $self->saveErrorString("hash key not filename") ; # } # # my %valid = map { $_ => 1 } qw(filename buffer array undef handle) ; # if (! $valid{$vtype}) # { # return $self->saveErrorString("hash value not ok") ; # } # } # # return $self ; #} sub createSelfTiedObject { my $class = shift || (caller)[0] ; my $error_ref = shift ; my $obj = bless Symbol::gensym(), ref($class) || $class; tie *$obj, $obj if $] >= 5.005; *$obj->{Closed} = 1 ; $$error_ref = ''; *$obj->{Error} = $error_ref ; my $errno = 0 ; *$obj->{ErrorNo} = \$errno ; return $obj; } #package Parse::Parameters ; # # #require Exporter; #our ($VERSION, @ISA, @EXPORT); #$VERSION = '2.000_08'; #@ISA = qw(Exporter); $EXPORT_TAGS{Parse} = [qw( ParseParameters Parse_any Parse_unsigned Parse_signed Parse_boolean Parse_custom Parse_string Parse_multiple Parse_writable_scalar ) ]; push @EXPORT, @{ $EXPORT_TAGS{Parse} } ; use constant Parse_any => 0x01; use constant Parse_unsigned => 0x02; use constant Parse_signed => 0x04; use constant Parse_boolean => 0x08; use constant Parse_string => 0x10; use constant Parse_custom => 0x12; #use constant Parse_store_ref => 0x100 ; use constant Parse_multiple => 0x100 ; use constant Parse_writable => 0x200 ; use constant Parse_writable_scalar => 0x400 | Parse_writable ; use constant OFF_PARSED => 0 ; use constant OFF_TYPE => 1 ; use constant OFF_DEFAULT => 2 ; use constant OFF_FIXED => 3 ; use constant OFF_FIRST_ONLY => 4 ; use constant OFF_STICKY => 5 ; sub ParseParameters { my $level = shift || 0 ; my $sub = (caller($level + 1))[3] ; local $Carp::CarpLevel = 1 ; return $_[1] if @_ == 2 && defined $_[1] && UNIVERSAL::isa($_[1], "IO::Compress::Base::Parameters"); my $p = new IO::Compress::Base::Parameters() ; $p->parse(@_) or croak "$sub: $p->{Error}" ; return $p; } #package IO::Compress::Base::Parameters; use strict; use warnings; use Carp; sub IO::Compress::Base::Parameters::new { my $class = shift ; my $obj = { Error => '', Got => {}, } ; #return bless $obj, ref($class) || $class || __PACKAGE__ ; return bless $obj, 'IO::Compress::Base::Parameters' ; } sub IO::Compress::Base::Parameters::setError { my $self = shift ; my $error = shift ; my $retval = @_ ? shift : undef ; $self->{Error} = $error ; return $retval; } #sub getError #{ # my $self = shift ; # return $self->{Error} ; #} sub IO::Compress::Base::Parameters::parse { my $self = shift ; my $default = shift ; my $got = $self->{Got} ; my $firstTime = keys %{ $got } == 0 ; my $other; my (@Bad) ; my @entered = () ; # Allow the options to be passed as a hash reference or # as the complete hash. if (@_ == 0) { @entered = () ; } elsif (@_ == 1) { my $href = $_[0] ; return $self->setError("Expected even number of parameters, got 1") if ! defined $href or ! ref $href or ref $href ne "HASH" ; foreach my $key (keys %$href) { push @entered, $key ; push @entered, \$href->{$key} ; } } else { my $count = @_; return $self->setError("Expected even number of parameters, got $count") if $count % 2 != 0 ; for my $i (0.. $count / 2 - 1) { if ($_[2 * $i] eq '__xxx__') { $other = $_[2 * $i + 1] ; } else { push @entered, $_[2 * $i] ; push @entered, \$_[2 * $i + 1] ; } } } while (my ($key, $v) = each %$default) { croak "need 4 params [@$v]" if @$v != 4 ; my ($first_only, $sticky, $type, $value) = @$v ; my $x ; $self->_checkType($key, \$value, $type, 0, \$x) or return undef ; $key = lc $key; if ($firstTime || ! $sticky) { $x = [ $x ] if $type & Parse_multiple; $got->{$key} = [0, $type, $value, $x, $first_only, $sticky] ; } $got->{$key}[OFF_PARSED] = 0 ; } my %parsed = (); if ($other) { for my $key (keys %$default) { my $canonkey = lc $key; if ($other->parsed($canonkey)) { my $value = $other->value($canonkey); #print "SET '$canonkey' to $value [$$value]\n"; ++ $parsed{$canonkey}; $got->{$canonkey}[OFF_PARSED] = 1; $got->{$canonkey}[OFF_DEFAULT] = $value; $got->{$canonkey}[OFF_FIXED] = $value; } } } for my $i (0.. @entered / 2 - 1) { my $key = $entered[2* $i] ; my $value = $entered[2* $i+1] ; #print "Key [$key] Value [$value]" ; #print defined $$value ? "[$$value]\n" : "[undef]\n"; $key =~ s/^-// ; my $canonkey = lc $key; if ($got->{$canonkey} && ($firstTime || ! $got->{$canonkey}[OFF_FIRST_ONLY] )) { my $type = $got->{$canonkey}[OFF_TYPE] ; my $parsed = $parsed{$canonkey}; ++ $parsed{$canonkey}; return $self->setError("Muliple instances of '$key' found") if $parsed && $type & Parse_multiple == 0 ; my $s ; $self->_checkType($key, $value, $type, 1, \$s) or return undef ; $value = $$value ; if ($type & Parse_multiple) { $got->{$canonkey}[OFF_PARSED] = 1; push @{ $got->{$canonkey}[OFF_FIXED] }, $s ; } else { $got->{$canonkey} = [1, $type, $value, $s] ; } } else { push (@Bad, $key) } } if (@Bad) { my ($bad) = join(", ", @Bad) ; return $self->setError("unknown key value(s) @Bad") ; } return 1; } sub IO::Compress::Base::Parameters::_checkType { my $self = shift ; my $key = shift ; my $value = shift ; my $type = shift ; my $validate = shift ; my $output = shift; #local $Carp::CarpLevel = $level ; #print "PARSE $type $key $value $validate $sub\n" ; if ($type & Parse_writable_scalar) { return $self->setError("Parameter '$key' not writable") if $validate && readonly $$value ; if (ref $$value) { return $self->setError("Parameter '$key' not a scalar reference") if $validate && ref $$value ne 'SCALAR' ; $$output = $$value ; } else { return $self->setError("Parameter '$key' not a scalar") if $validate && ref $value ne 'SCALAR' ; $$output = $value ; } return 1; } # if ($type & Parse_store_ref) # { # #$value = $$value # # if ref ${ $value } ; # # $$output = $value ; # return 1; # } $value = $$value ; if ($type & Parse_any) { $$output = $value ; return 1; } elsif ($type & Parse_unsigned) { return $self->setError("Parameter '$key' must be an unsigned int, got 'undef'") if $validate && ! defined $value ; return $self->setError("Parameter '$key' must be an unsigned int, got '$value'") if $validate && $value !~ /^\d+$/; $$output = defined $value ? $value : 0 ; return 1; } elsif ($type & Parse_signed) { return $self->setError("Parameter '$key' must be a signed int, got 'undef'") if $validate && ! defined $value ; return $self->setError("Parameter '$key' must be a signed int, got '$value'") if $validate && $value !~ /^-?\d+$/; $$output = defined $value ? $value : 0 ; return 1 ; } elsif ($type & Parse_boolean) { return $self->setError("Parameter '$key' must be an int, got '$value'") if $validate && defined $value && $value !~ /^\d*$/; $$output = defined $value ? $value != 0 : 0 ; return 1; } elsif ($type & Parse_string) { $$output = defined $value ? $value : "" ; return 1; } $$output = $value ; return 1; } sub IO::Compress::Base::Parameters::parsed { my $self = shift ; my $name = shift ; return $self->{Got}{lc $name}[OFF_PARSED] ; } sub IO::Compress::Base::Parameters::value { my $self = shift ; my $name = shift ; if (@_) { $self->{Got}{lc $name}[OFF_PARSED] = 1; $self->{Got}{lc $name}[OFF_DEFAULT] = $_[0] ; $self->{Got}{lc $name}[OFF_FIXED] = $_[0] ; } return $self->{Got}{lc $name}[OFF_FIXED] ; } sub IO::Compress::Base::Parameters::valueOrDefault { my $self = shift ; my $name = shift ; my $default = shift ; my $value = $self->{Got}{lc $name}[OFF_DEFAULT] ; return $value if defined $value ; return $default ; } sub IO::Compress::Base::Parameters::wantValue { my $self = shift ; my $name = shift ; return defined $self->{Got}{lc $name}[OFF_DEFAULT] ; } sub IO::Compress::Base::Parameters::clone { my $self = shift ; my $obj = { }; my %got ; while (my ($k, $v) = each %{ $self->{Got} }) { $got{$k} = [ @$v ]; } $obj->{Error} = $self->{Error}; $obj->{Got} = \%got ; return bless $obj, 'IO::Compress::Base::Parameters' ; } package U64; use constant MAX32 => 0xFFFFFFFF ; use constant LOW => 0 ; use constant HIGH => 1; sub new { my $class = shift ; my $high = 0 ; my $low = 0 ; if (@_ == 2) { $high = shift ; $low = shift ; } elsif (@_ == 1) { $low = shift ; } bless [$low, $high], $class; } sub newUnpack_V64 { my $string = shift; my ($low, $hi) = unpack "V V", $string ; bless [ $low, $hi ], "U64"; } sub newUnpack_V32 { my $string = shift; my $low = unpack "V", $string ; bless [ $low, 0 ], "U64"; } sub reset { my $self = shift; $self->[HIGH] = $self->[LOW] = 0; } sub clone { my $self = shift; bless [ @$self ], ref $self ; } sub getHigh { my $self = shift; return $self->[HIGH]; } sub getLow { my $self = shift; return $self->[LOW]; } sub get32bit { my $self = shift; return $self->[LOW]; } sub add { my $self = shift; my $value = shift; if (ref $value eq 'U64') { $self->[HIGH] += $value->[HIGH] ; $value = $value->[LOW]; } my $available = MAX32 - $self->[LOW] ; if ($value > $available) { ++ $self->[HIGH] ; $self->[LOW] = $value - $available - 1; } else { $self->[LOW] += $value ; } } sub equal { my $self = shift; my $other = shift; return $self->[LOW] == $other->[LOW] && $self->[HIGH] == $other->[HIGH] ; } sub getPacked_V64 { my $self = shift; return pack "V V", @$self ; } sub getPacked_V32 { my $self = shift; return pack "V", $self->[LOW] ; } sub pack_V64 { my $low = shift; return pack "V V", $low, 0; } package IO::Compress::Base::Common; 1; FILE34142fe8/IO/Compress/Gzip.pm#line 1 "/usr/local/share/perl/5.8.8/IO/Compress/Gzip.pm" package IO::Compress::Gzip ; require 5.004 ; use strict ; use warnings; use bytes; use IO::Compress::RawDeflate 2.020 ; use Compress::Raw::Zlib 2.020 ; use IO::Compress::Base::Common 2.020 qw(:Status :Parse createSelfTiedObject); use IO::Compress::Gzip::Constants 2.020 ; use IO::Compress::Zlib::Extra 2.020 ; BEGIN { if (defined &utf8::downgrade ) { *noUTF8 = \&utf8::downgrade } else { *noUTF8 = sub {} } } require Exporter ; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $GzipError); $VERSION = '2.020'; $GzipError = '' ; @ISA = qw(Exporter IO::Compress::RawDeflate); @EXPORT_OK = qw( $GzipError gzip ) ; %EXPORT_TAGS = %IO::Compress::RawDeflate::DEFLATE_CONSTANTS ; push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; Exporter::export_ok_tags('all'); sub new { my $class = shift ; my $obj = createSelfTiedObject($class, \$GzipError); $obj->_create(undef, @_); } sub gzip { my $obj = createSelfTiedObject(undef, \$GzipError); return $obj->_def(@_); } #sub newHeader #{ # my $self = shift ; # #return GZIP_MINIMUM_HEADER ; # return $self->mkHeader(*$self->{Got}); #} sub getExtraParams { my $self = shift ; return ( # zlib behaviour $self->getZlibParams(), # Gzip header fields 'Minimal' => [0, 1, Parse_boolean, 0], 'Comment' => [0, 1, Parse_any, undef], 'Name' => [0, 1, Parse_any, undef], 'Time' => [0, 1, Parse_any, undef], 'TextFlag' => [0, 1, Parse_boolean, 0], 'HeaderCRC' => [0, 1, Parse_boolean, 0], 'OS_Code' => [0, 1, Parse_unsigned, $Compress::Raw::Zlib::gzip_os_code], 'ExtraField'=> [0, 1, Parse_any, undef], 'ExtraFlags'=> [0, 1, Parse_any, undef], ); } sub ckParams { my $self = shift ; my $got = shift ; # gzip always needs crc32 $got->value('CRC32' => 1); return 1 if $got->value('Merge') ; my $strict = $got->value('Strict') ; { if (! $got->parsed('Time') ) { # Modification time defaults to now. $got->value('Time' => time) ; } # Check that the Name & Comment don't have embedded NULLs # Also check that they only contain ISO 8859-1 chars. if ($got->parsed('Name') && defined $got->value('Name')) { my $name = $got->value('Name'); return $self->saveErrorString(undef, "Null Character found in Name", Z_DATA_ERROR) if $strict && $name =~ /\x00/ ; return $self->saveErrorString(undef, "Non ISO 8859-1 Character found in Name", Z_DATA_ERROR) if $strict && $name =~ /$GZIP_FNAME_INVALID_CHAR_RE/o ; } if ($got->parsed('Comment') && defined $got->value('Comment')) { my $comment = $got->value('Comment'); return $self->saveErrorString(undef, "Null Character found in Comment", Z_DATA_ERROR) if $strict && $comment =~ /\x00/ ; return $self->saveErrorString(undef, "Non ISO 8859-1 Character found in Comment", Z_DATA_ERROR) if $strict && $comment =~ /$GZIP_FCOMMENT_INVALID_CHAR_RE/o; } if ($got->parsed('OS_Code') ) { my $value = $got->value('OS_Code'); return $self->saveErrorString(undef, "OS_Code must be between 0 and 255, got '$value'") if $value < 0 || $value > 255 ; } # gzip only supports Deflate at present $got->value('Method' => Z_DEFLATED) ; if ( ! $got->parsed('ExtraFlags')) { $got->value('ExtraFlags' => 2) if $got->value('Level') == Z_BEST_SPEED ; $got->value('ExtraFlags' => 4) if $got->value('Level') == Z_BEST_COMPRESSION ; } my $data = $got->value('ExtraField') ; if (defined $data) { my $bad = IO::Compress::Zlib::Extra::parseExtraField($data, $strict, 1) ; return $self->saveErrorString(undef, "Error with ExtraField Parameter: $bad", Z_DATA_ERROR) if $bad ; $got->value('ExtraField', $data) ; } } return 1; } sub mkTrailer { my $self = shift ; return pack("V V", *$self->{Compress}->crc32(), *$self->{UnCompSize}->get32bit()); } sub getInverseClass { return ('IO::Uncompress::Gunzip', \$IO::Uncompress::Gunzip::GunzipError); } sub getFileInfo { my $self = shift ; my $params = shift; my $filename = shift ; my $defaultTime = (stat($filename))[9] ; $params->value('Name' => $filename) if ! $params->parsed('Name') ; $params->value('Time' => $defaultTime) if ! $params->parsed('Time') ; } sub mkHeader { my $self = shift ; my $param = shift ; # stort-circuit if a minimal header is requested. return GZIP_MINIMUM_HEADER if $param->value('Minimal') ; # METHOD my $method = $param->valueOrDefault('Method', GZIP_CM_DEFLATED) ; # FLAGS my $flags = GZIP_FLG_DEFAULT ; $flags |= GZIP_FLG_FTEXT if $param->value('TextFlag') ; $flags |= GZIP_FLG_FHCRC if $param->value('HeaderCRC') ; $flags |= GZIP_FLG_FEXTRA if $param->wantValue('ExtraField') ; $flags |= GZIP_FLG_FNAME if $param->wantValue('Name') ; $flags |= GZIP_FLG_FCOMMENT if $param->wantValue('Comment') ; # MTIME my $time = $param->valueOrDefault('Time', GZIP_MTIME_DEFAULT) ; # EXTRA FLAGS my $extra_flags = $param->valueOrDefault('ExtraFlags', GZIP_XFL_DEFAULT); # OS CODE my $os_code = $param->valueOrDefault('OS_Code', GZIP_OS_DEFAULT) ; my $out = pack("C4 V C C", GZIP_ID1, # ID1 GZIP_ID2, # ID2 $method, # Compression Method $flags, # Flags $time, # Modification Time $extra_flags, # Extra Flags $os_code, # Operating System Code ) ; # EXTRA if ($flags & GZIP_FLG_FEXTRA) { my $extra = $param->value('ExtraField') ; $out .= pack("v", length $extra) . $extra ; } # NAME if ($flags & GZIP_FLG_FNAME) { my $name .= $param->value('Name') ; $name =~ s/\x00.*$//; $out .= $name ; # Terminate the filename with NULL unless it already is $out .= GZIP_NULL_BYTE if !length $name or substr($name, 1, -1) ne GZIP_NULL_BYTE ; } # COMMENT if ($flags & GZIP_FLG_FCOMMENT) { my $comment .= $param->value('Comment') ; $comment =~ s/\x00.*$//; $out .= $comment ; # Terminate the comment with NULL unless it already is $out .= GZIP_NULL_BYTE if ! length $comment or substr($comment, 1, -1) ne GZIP_NULL_BYTE; } # HEADER CRC $out .= pack("v", crc32($out) & 0x00FF ) if $param->value('HeaderCRC') ; noUTF8($out); return $out ; } sub mkFinalTrailer { return ''; } 1; __END__ #line 1202 FILE&89d62f00/IO/Compress/Gzip/Constants.pm#line 1 "/usr/local/share/perl/5.8.8/IO/Compress/Gzip/Constants.pm" package IO::Compress::Gzip::Constants; use strict ; use warnings; use bytes; require Exporter; our ($VERSION, @ISA, @EXPORT, %GZIP_OS_Names); our ($GZIP_FNAME_INVALID_CHAR_RE, $GZIP_FCOMMENT_INVALID_CHAR_RE); $VERSION = '2.020'; @ISA = qw(Exporter); @EXPORT= qw( GZIP_ID_SIZE GZIP_ID1 GZIP_ID2 GZIP_FLG_DEFAULT GZIP_FLG_FTEXT GZIP_FLG_FHCRC GZIP_FLG_FEXTRA GZIP_FLG_FNAME GZIP_FLG_FCOMMENT GZIP_FLG_RESERVED GZIP_CM_DEFLATED GZIP_MIN_HEADER_SIZE GZIP_TRAILER_SIZE GZIP_MTIME_DEFAULT GZIP_XFL_DEFAULT GZIP_FEXTRA_HEADER_SIZE GZIP_FEXTRA_MAX_SIZE GZIP_FEXTRA_SUBFIELD_HEADER_SIZE GZIP_FEXTRA_SUBFIELD_ID_SIZE GZIP_FEXTRA_SUBFIELD_LEN_SIZE GZIP_FEXTRA_SUBFIELD_MAX_SIZE $GZIP_FNAME_INVALID_CHAR_RE $GZIP_FCOMMENT_INVALID_CHAR_RE GZIP_FHCRC_SIZE GZIP_ISIZE_MAX GZIP_ISIZE_MOD_VALUE GZIP_NULL_BYTE GZIP_OS_DEFAULT %GZIP_OS_Names GZIP_MINIMUM_HEADER ); # Constant names derived from RFC 1952 use constant GZIP_ID_SIZE => 2 ; use constant GZIP_ID1 => 0x1F; use constant GZIP_ID2 => 0x8B; use constant GZIP_MIN_HEADER_SIZE => 10 ;# minimum gzip header size use constant GZIP_TRAILER_SIZE => 8 ; use constant GZIP_FLG_DEFAULT => 0x00 ; use constant GZIP_FLG_FTEXT => 0x01 ; use constant GZIP_FLG_FHCRC => 0x02 ; # called CONTINUATION in gzip use constant GZIP_FLG_FEXTRA => 0x04 ; use constant GZIP_FLG_FNAME => 0x08 ; use constant GZIP_FLG_FCOMMENT => 0x10 ; #use constant GZIP_FLG_ENCRYPTED => 0x20 ; # documented in gzip sources use constant GZIP_FLG_RESERVED => (0x20 | 0x40 | 0x80) ; use constant GZIP_XFL_DEFAULT => 0x00 ; use constant GZIP_MTIME_DEFAULT => 0x00 ; use constant GZIP_FEXTRA_HEADER_SIZE => 2 ; use constant GZIP_FEXTRA_MAX_SIZE => 0xFF ; use constant GZIP_FEXTRA_SUBFIELD_ID_SIZE => 2 ; use constant GZIP_FEXTRA_SUBFIELD_LEN_SIZE => 2 ; use constant GZIP_FEXTRA_SUBFIELD_HEADER_SIZE => GZIP_FEXTRA_SUBFIELD_ID_SIZE + GZIP_FEXTRA_SUBFIELD_LEN_SIZE; use constant GZIP_FEXTRA_SUBFIELD_MAX_SIZE => GZIP_FEXTRA_MAX_SIZE - GZIP_FEXTRA_SUBFIELD_HEADER_SIZE ; if (ord('A') == 193) { # EBCDIC $GZIP_FNAME_INVALID_CHAR_RE = '[\x00-\x3f\xff]'; $GZIP_FCOMMENT_INVALID_CHAR_RE = '[\x00-\x0a\x11-\x14\x16-\x3f\xff]'; } else { $GZIP_FNAME_INVALID_CHAR_RE = '[\x00-\x1F\x7F-\x9F]'; $GZIP_FCOMMENT_INVALID_CHAR_RE = '[\x00-\x09\x11-\x1F\x7F-\x9F]'; } use constant GZIP_FHCRC_SIZE => 2 ; # aka CONTINUATION in gzip use constant GZIP_CM_DEFLATED => 8 ; use constant GZIP_NULL_BYTE => "\x00"; use constant GZIP_ISIZE_MAX => 0xFFFFFFFF ; use constant GZIP_ISIZE_MOD_VALUE => GZIP_ISIZE_MAX + 1 ; # OS Names sourced from http://www.gzip.org/format.txt use constant GZIP_OS_DEFAULT=> 0xFF ; %GZIP_OS_Names = ( 0 => 'MS-DOS', 1 => 'Amiga', 2 => 'VMS', 3 => 'Unix', 4 => 'VM/CMS', 5 => 'Atari TOS', 6 => 'HPFS (OS/2, NT)', 7 => 'Macintosh', 8 => 'Z-System', 9 => 'CP/M', 10 => 'TOPS-20', 11 => 'NTFS (NT)', 12 => 'SMS QDOS', 13 => 'Acorn RISCOS', 14 => 'VFAT file system (Win95, NT)', 15 => 'MVS', 16 => 'BeOS', 17 => 'Tandem/NSK', 18 => 'THEOS', GZIP_OS_DEFAULT() => 'Unknown', ) ; use constant GZIP_MINIMUM_HEADER => pack("C4 V C C", GZIP_ID1, GZIP_ID2, GZIP_CM_DEFLATED, GZIP_FLG_DEFAULT, GZIP_MTIME_DEFAULT, GZIP_XFL_DEFAULT, GZIP_OS_DEFAULT) ; 1; FILE"2c4681ce/IO/Compress/RawDeflate.pmx#line 1 "/usr/local/share/perl/5.8.8/IO/Compress/RawDeflate.pm" package IO::Compress::RawDeflate ; # create RFC1951 # use strict ; use warnings; use bytes; use IO::Compress::Base 2.020 ; use IO::Compress::Base::Common 2.020 qw(:Status createSelfTiedObject); use IO::Compress::Adapter::Deflate 2.020 ; require Exporter ; our ($VERSION, @ISA, @EXPORT_OK, %DEFLATE_CONSTANTS, %EXPORT_TAGS, $RawDeflateError); $VERSION = '2.020'; $RawDeflateError = ''; @ISA = qw(Exporter IO::Compress::Base); @EXPORT_OK = qw( $RawDeflateError rawdeflate ) ; %EXPORT_TAGS = ( flush => [qw{ Z_NO_FLUSH Z_PARTIAL_FLUSH Z_SYNC_FLUSH Z_FULL_FLUSH Z_FINISH Z_BLOCK }], level => [qw{ Z_NO_COMPRESSION Z_BEST_SPEED Z_BEST_COMPRESSION Z_DEFAULT_COMPRESSION }], strategy => [qw{ Z_FILTERED Z_HUFFMAN_ONLY Z_RLE Z_FIXED Z_DEFAULT_STRATEGY }], ); { my %seen; foreach (keys %EXPORT_TAGS ) { push @{$EXPORT_TAGS{constants}}, grep { !$seen{$_}++ } @{ $EXPORT_TAGS{$_} } } $EXPORT_TAGS{all} = $EXPORT_TAGS{constants} ; } %DEFLATE_CONSTANTS = %EXPORT_TAGS; push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; Exporter::export_ok_tags('all'); sub new { my $class = shift ; my $obj = createSelfTiedObject($class, \$RawDeflateError); return $obj->_create(undef, @_); } sub rawdeflate { my $obj = createSelfTiedObject(undef, \$RawDeflateError); return $obj->_def(@_); } sub ckParams { my $self = shift ; my $got = shift; return 1 ; } sub mkComp { my $self = shift ; my $got = shift ; my ($obj, $errstr, $errno) = IO::Compress::Adapter::Deflate::mkCompObject( $got->value('CRC32'), $got->value('Adler32'), $got->value('Level'), $got->value('Strategy') ); return $self->saveErrorString(undef, $errstr, $errno) if ! defined $obj; return $obj; } sub mkHeader { my $self = shift ; return ''; } sub mkTrailer { my $self = shift ; return ''; } sub mkFinalTrailer { return ''; } #sub newHeader #{ # my $self = shift ; # return ''; #} sub getExtraParams { my $self = shift ; return $self->getZlibParams(); } sub getZlibParams { my $self = shift ; use IO::Compress::Base::Common 2.020 qw(:Parse); use Compress::Raw::Zlib 2.020 qw(Z_DEFLATED Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY); return ( # zlib behaviour #'Method' => [0, 1, Parse_unsigned, Z_DEFLATED], 'Level' => [0, 1, Parse_signed, Z_DEFAULT_COMPRESSION], 'Strategy' => [0, 1, Parse_signed, Z_DEFAULT_STRATEGY], 'CRC32' => [0, 1, Parse_boolean, 0], 'ADLER32' => [0, 1, Parse_boolean, 0], 'Merge' => [1, 1, Parse_boolean, 0], ); } sub getInverseClass { return ('IO::Uncompress::RawInflate', \$IO::Uncompress::RawInflate::RawInflateError); } sub getFileInfo { my $self = shift ; my $params = shift; my $file = shift ; } use IO::Seekable qw(SEEK_SET); sub createMerge { my $self = shift ; my $outValue = shift ; my $outType = shift ; my ($invClass, $error_ref) = $self->getInverseClass(); eval "require $invClass" or die "aaaahhhh" ; my $inf = $invClass->new( $outValue, Transparent => 0, #Strict => 1, AutoClose => 0, Scan => 1) or return $self->saveErrorString(undef, "Cannot create InflateScan object: $$error_ref" ) ; my $end_offset = 0; $inf->scan() or return $self->saveErrorString(undef, "Error Scanning: $$error_ref", $inf->errorNo) ; $inf->zap($end_offset) or return $self->saveErrorString(undef, "Error Zapping: $$error_ref", $inf->errorNo) ; my $def = *$self->{Compress} = $inf->createDeflate(); *$self->{Header} = *$inf->{Info}{Header}; *$self->{UnCompSize} = *$inf->{UnCompSize}->clone(); *$self->{CompSize} = *$inf->{CompSize}->clone(); # TODO -- fix this #*$self->{CompSize} = new U64(0, *$self->{UnCompSize_32bit}); if ( $outType eq 'buffer') { substr( ${ *$self->{Buffer} }, $end_offset) = '' } elsif ($outType eq 'handle' || $outType eq 'filename') { *$self->{FH} = *$inf->{FH} ; delete *$inf->{FH}; *$self->{FH}->flush() ; *$self->{Handle} = 1 if $outType eq 'handle'; #seek(*$self->{FH}, $end_offset, SEEK_SET) *$self->{FH}->seek($end_offset, SEEK_SET) or return $self->saveErrorString(undef, $!, $!) ; } return $def ; } #### zlib specific methods sub deflateParams { my $self = shift ; my $level = shift ; my $strategy = shift ; my $status = *$self->{Compress}->deflateParams(Level => $level, Strategy => $strategy) ; return $self->saveErrorString(0, *$self->{Compress}{Error}, *$self->{Compress}{ErrorNo}) if $status == STATUS_ERROR; return 1; } 1; __END__ #line 977 FILE"14fc818c/IO/Compress/Zlib/Extra.pm#line 1 "/usr/local/share/perl/5.8.8/IO/Compress/Zlib/Extra.pm" package IO::Compress::Zlib::Extra; require 5.004 ; use strict ; use warnings; use bytes; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS); $VERSION = '2.020'; use IO::Compress::Gzip::Constants 2.020 ; sub ExtraFieldError { return $_[0]; return "Error with ExtraField Parameter: $_[0]" ; } sub validateExtraFieldPair { my $pair = shift ; my $strict = shift; my $gzipMode = shift ; return ExtraFieldError("Not an array ref") unless ref $pair && ref $pair eq 'ARRAY'; return ExtraFieldError("SubField must have two parts") unless @$pair == 2 ; return ExtraFieldError("SubField ID is a reference") if ref $pair->[0] ; return ExtraFieldError("SubField Data is a reference") if ref $pair->[1] ; # ID is exactly two chars return ExtraFieldError("SubField ID not two chars long") unless length $pair->[0] == GZIP_FEXTRA_SUBFIELD_ID_SIZE ; # Check that the 2nd byte of the ID isn't 0 return ExtraFieldError("SubField ID 2nd byte is 0x00") if $strict && $gzipMode && substr($pair->[0], 1, 1) eq "\x00" ; return ExtraFieldError("SubField Data too long") if length $pair->[1] > GZIP_FEXTRA_SUBFIELD_MAX_SIZE ; return undef ; } sub parseRawExtra { my $data = shift ; my $extraRef = shift; my $strict = shift; my $gzipMode = shift ; #my $lax = shift ; #return undef # if $lax ; my $XLEN = length $data ; return ExtraFieldError("Too Large") if $XLEN > GZIP_FEXTRA_MAX_SIZE; my $offset = 0 ; while ($offset < $XLEN) { return ExtraFieldError("Truncated in FEXTRA Body Section") if $offset + GZIP_FEXTRA_SUBFIELD_HEADER_SIZE > $XLEN ; my $id = substr($data, $offset, GZIP_FEXTRA_SUBFIELD_ID_SIZE); $offset += GZIP_FEXTRA_SUBFIELD_ID_SIZE; my $subLen = unpack("v", substr($data, $offset, GZIP_FEXTRA_SUBFIELD_LEN_SIZE)); $offset += GZIP_FEXTRA_SUBFIELD_LEN_SIZE ; return ExtraFieldError("Truncated in FEXTRA Body Section") if $offset + $subLen > $XLEN ; my $bad = validateExtraFieldPair( [$id, substr($data, $offset, $subLen)], $strict, $gzipMode ); return $bad if $bad ; push @$extraRef, [$id => substr($data, $offset, $subLen)] if defined $extraRef;; $offset += $subLen ; } return undef ; } sub mkSubField { my $id = shift ; my $data = shift ; return $id . pack("v", length $data) . $data ; } sub parseExtraField { my $dataRef = $_[0]; my $strict = $_[1]; my $gzipMode = $_[2]; #my $lax = @_ == 2 ? $_[1] : 1; # ExtraField can be any of # # -ExtraField => $data # # -ExtraField => [$id1, $data1, # $id2, $data2] # ... # ] # # -ExtraField => [ [$id1 => $data1], # [$id2 => $data2], # ... # ] # # -ExtraField => { $id1 => $data1, # $id2 => $data2, # ... # } if ( ! ref $dataRef ) { return undef if ! $strict; return parseRawExtra($dataRef, undef, 1, $gzipMode); } #my $data = $$dataRef; my $data = $dataRef; my $out = '' ; if (ref $data eq 'ARRAY') { if (ref $data->[0]) { foreach my $pair (@$data) { return ExtraFieldError("Not list of lists") unless ref $pair eq 'ARRAY' ; my $bad = validateExtraFieldPair($pair, $strict, $gzipMode) ; return $bad if $bad ; $out .= mkSubField(@$pair); } } else { return ExtraFieldError("Not even number of elements") unless @$data % 2 == 0; for (my $ix = 0; $ix <= length(@$data) -1 ; $ix += 2) { my $bad = validateExtraFieldPair([$data->[$ix], $data->[$ix+1]], $strict, $gzipMode) ; return $bad if $bad ; $out .= mkSubField($data->[$ix], $data->[$ix+1]); } } } elsif (ref $data eq 'HASH') { while (my ($id, $info) = each %$data) { my $bad = validateExtraFieldPair([$id, $info], $strict, $gzipMode); return $bad if $bad ; $out .= mkSubField($id, $info); } } else { return ExtraFieldError("Not a scalar, array ref or hash ref") ; } return ExtraFieldError("Too Large") if length $out > GZIP_FEXTRA_MAX_SIZE; $_[0] = $out ; return undef; } 1; __END__ FILE)5f3aae1c/IO/Uncompress/Adapter/Inflate.pm #line 1 "/usr/local/share/perl/5.8.8/IO/Uncompress/Adapter/Inflate.pm" package IO::Uncompress::Adapter::Inflate; use strict; use warnings; use bytes; use IO::Compress::Base::Common 2.020 qw(:Status); use Compress::Raw::Zlib 2.020 qw(Z_OK Z_BUF_ERROR Z_STREAM_END Z_FINISH MAX_WBITS); our ($VERSION); $VERSION = '2.020'; sub mkUncompObject { my $crc32 = shift || 1; my $adler32 = shift || 1; my $scan = shift || 0; my $inflate ; my $status ; if ($scan) { ($inflate, $status) = new Compress::Raw::Zlib::InflateScan #LimitOutput => 1, CRC32 => $crc32, ADLER32 => $adler32, WindowBits => - MAX_WBITS ; } else { ($inflate, $status) = new Compress::Raw::Zlib::Inflate AppendOutput => 1, LimitOutput => 1, CRC32 => $crc32, ADLER32 => $adler32, WindowBits => - MAX_WBITS ; } return (undef, "Could not create Inflation object: $status", $status) if $status != Z_OK ; return bless {'Inf' => $inflate, 'CompSize' => 0, 'UnCompSize' => 0, 'Error' => '', 'ConsumesInput' => 1, } ; } sub uncompr { my $self = shift ; my $from = shift ; my $to = shift ; my $eof = shift ; my $inf = $self->{Inf}; my $status = $inf->inflate($from, $to, $eof); $self->{ErrorNo} = $status; if ($status != Z_OK && $status != Z_STREAM_END && $status != Z_BUF_ERROR) { $self->{Error} = "Inflation Error: $status"; return STATUS_ERROR; } return STATUS_OK if $status == Z_BUF_ERROR ; # ??? return STATUS_OK if $status == Z_OK ; return STATUS_ENDSTREAM if $status == Z_STREAM_END ; return STATUS_ERROR ; } sub reset { my $self = shift ; $self->{Inf}->inflateReset(); return STATUS_OK ; } #sub count #{ # my $self = shift ; # $self->{Inf}->inflateCount(); #} sub crc32 { my $self = shift ; $self->{Inf}->crc32(); } sub compressedBytes { my $self = shift ; $self->{Inf}->compressedBytes(); } sub uncompressedBytes { my $self = shift ; $self->{Inf}->uncompressedBytes(); } sub adler32 { my $self = shift ; $self->{Inf}->adler32(); } sub sync { my $self = shift ; ( $self->{Inf}->inflateSync(@_) == Z_OK) ? STATUS_OK : STATUS_ERROR ; } sub getLastBlockOffset { my $self = shift ; $self->{Inf}->getLastBlockOffset(); } sub getEndOffset { my $self = shift ; $self->{Inf}->getEndOffset(); } sub resetLastBlockByte { my $self = shift ; $self->{Inf}->resetLastBlockByte(@_); } sub createDeflateStream { my $self = shift ; my $deflate = $self->{Inf}->createDeflateStream(@_); return bless {'Def' => $deflate, 'CompSize' => 0, 'UnCompSize' => 0, 'Error' => '', }, 'IO::Compress::Adapter::Deflate'; } 1; __END__ FILEe36c241f/IO/Uncompress/Base.pm0#line 1 "/usr/local/share/perl/5.8.8/IO/Uncompress/Base.pm" package IO::Uncompress::Base ; use strict ; use warnings; use bytes; our (@ISA, $VERSION, @EXPORT_OK, %EXPORT_TAGS); @ISA = qw(Exporter IO::File); $VERSION = '2.020'; use constant G_EOF => 0 ; use constant G_ERR => -1 ; use IO::Compress::Base::Common 2.020 ; #use Parse::Parameters ; use IO::File ; use Symbol; use Scalar::Util qw(readonly); use List::Util qw(min); use Carp ; %EXPORT_TAGS = ( ); push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; #Exporter::export_ok_tags('all') ; sub smartRead { my $self = $_[0]; my $out = $_[1]; my $size = $_[2]; $$out = "" ; my $offset = 0 ; if (defined *$self->{InputLength}) { return 0 if *$self->{InputLengthRemaining} <= 0 ; $size = min($size, *$self->{InputLengthRemaining}); } if ( length *$self->{Prime} ) { #$$out = substr(*$self->{Prime}, 0, $size, '') ; $$out = substr(*$self->{Prime}, 0, $size) ; substr(*$self->{Prime}, 0, $size) = '' ; if (length $$out == $size) { *$self->{InputLengthRemaining} -= length $$out if defined *$self->{InputLength}; return length $$out ; } $offset = length $$out ; } my $get_size = $size - $offset ; if (defined *$self->{FH}) { if ($offset) { # Not using this # # *$self->{FH}->read($$out, $get_size, $offset); # # because the filehandle may not support the offset parameter # An example is Net::FTP my $tmp = ''; *$self->{FH}->read($tmp, $get_size) > 0 && (substr($$out, $offset) = $tmp); } else { *$self->{FH}->read($$out, $get_size) } } elsif (defined *$self->{InputEvent}) { my $got = 1 ; while (length $$out < $size) { last if ($got = *$self->{InputEvent}->($$out, $get_size)) <= 0; } if (length $$out > $size ) { #*$self->{Prime} = substr($$out, $size, length($$out), ''); *$self->{Prime} = substr($$out, $size, length($$out)); substr($$out, $size, length($$out)) = ''; } *$self->{EventEof} = 1 if $got <= 0 ; } else { no warnings 'uninitialized'; my $buf = *$self->{Buffer} ; $$buf = '' unless defined $$buf ; #$$out = '' unless defined $$out ; substr($$out, $offset) = substr($$buf, *$self->{BufferOffset}, $get_size); if (*$self->{ConsumeInput}) { substr($$buf, 0, $get_size) = '' } else { *$self->{BufferOffset} += length($$out) - $offset } } *$self->{InputLengthRemaining} -= length($$out) #- $offset if defined *$self->{InputLength}; $self->saveStatus(length $$out < 0 ? STATUS_ERROR : STATUS_OK) ; return length $$out; } sub pushBack { my $self = shift ; return if ! defined $_[0] || length $_[0] == 0 ; if (defined *$self->{FH} || defined *$self->{InputEvent} ) { *$self->{Prime} = $_[0] . *$self->{Prime} ; *$self->{InputLengthRemaining} += length($_[0]); } else { my $len = length $_[0]; if($len > *$self->{BufferOffset}) { *$self->{Prime} = substr($_[0], 0, $len - *$self->{BufferOffset}) . *$self->{Prime} ; *$self->{InputLengthRemaining} = *$self->{InputLength}; *$self->{BufferOffset} = 0 } else { *$self->{InputLengthRemaining} += length($_[0]); *$self->{BufferOffset} -= length($_[0]) ; } } } sub smartSeek { my $self = shift ; my $offset = shift ; my $truncate = shift; #print "smartSeek to $offset\n"; # TODO -- need to take prime into account if (defined *$self->{FH}) { *$self->{FH}->seek($offset, SEEK_SET) } else { *$self->{BufferOffset} = $offset ; substr(${ *$self->{Buffer} }, *$self->{BufferOffset}) = '' if $truncate; return 1; } } sub smartWrite { my $self = shift ; my $out_data = shift ; if (defined *$self->{FH}) { # flush needed for 5.8.0 defined *$self->{FH}->write($out_data, length $out_data) && defined *$self->{FH}->flush() ; } else { my $buf = *$self->{Buffer} ; substr($$buf, *$self->{BufferOffset}, length $out_data) = $out_data ; *$self->{BufferOffset} += length($out_data) ; return 1; } } sub smartReadExact { return $_[0]->smartRead($_[1], $_[2]) == $_[2]; } sub smartEof { my ($self) = $_[0]; local $.; return 0 if length *$self->{Prime} || *$self->{PushMode}; if (defined *$self->{FH}) { # Could use # # *$self->{FH}->eof() # # here, but this can cause trouble if # the filehandle is itself a tied handle, but it uses sysread. # Then we get into mixing buffered & non-buffered IO, which will cause trouble my $info = $self->getErrInfo(); my $buffer = ''; my $status = $self->smartRead(\$buffer, 1); $self->pushBack($buffer) if length $buffer; $self->setErrInfo($info); return $status == 0 ; } elsif (defined *$self->{InputEvent}) { *$self->{EventEof} } else { *$self->{BufferOffset} >= length(${ *$self->{Buffer} }) } } sub clearError { my $self = shift ; *$self->{ErrorNo} = 0 ; ${ *$self->{Error} } = '' ; } sub getErrInfo { my $self = shift ; return [ *$self->{ErrorNo}, ${ *$self->{Error} } ] ; } sub setErrInfo { my $self = shift ; my $ref = shift; *$self->{ErrorNo} = $ref->[0] ; ${ *$self->{Error} } = $ref->[1] ; } sub saveStatus { my $self = shift ; my $errno = shift() + 0 ; #return $errno unless $errno || ! defined *$self->{ErrorNo}; #return $errno unless $errno ; *$self->{ErrorNo} = $errno; ${ *$self->{Error} } = '' ; return *$self->{ErrorNo} ; } sub saveErrorString { my $self = shift ; my $retval = shift ; #return $retval if ${ *$self->{Error} }; ${ *$self->{Error} } = shift ; *$self->{ErrorNo} = shift() + 0 if @_ ; #warn "saveErrorString: " . ${ *$self->{Error} } . " " . *$self->{Error} . "\n" ; return $retval; } sub croakError { my $self = shift ; $self->saveErrorString(0, $_[0]); croak $_[0]; } sub closeError { my $self = shift ; my $retval = shift ; my $errno = *$self->{ErrorNo}; my $error = ${ *$self->{Error} }; $self->close(); *$self->{ErrorNo} = $errno ; ${ *$self->{Error} } = $error ; return $retval; } sub error { my $self = shift ; return ${ *$self->{Error} } ; } sub errorNo { my $self = shift ; return *$self->{ErrorNo}; } sub HeaderError { my ($self) = shift; return $self->saveErrorString(undef, "Header Error: $_[0]", STATUS_ERROR); } sub TrailerError { my ($self) = shift; return $self->saveErrorString(G_ERR, "Trailer Error: $_[0]", STATUS_ERROR); } sub TruncatedHeader { my ($self) = shift; return $self->HeaderError("Truncated in $_[0] Section"); } sub TruncatedTrailer { my ($self) = shift; return $self->TrailerError("Truncated in $_[0] Section"); } sub postCheckParams { return 1; } sub checkParams { my $self = shift ; my $class = shift ; my $got = shift || IO::Compress::Base::Parameters::new(); my $Valid = { 'BlockSize' => [1, 1, Parse_unsigned, 16 * 1024], 'AutoClose' => [1, 1, Parse_boolean, 0], 'Strict' => [1, 1, Parse_boolean, 0], 'Append' => [1, 1, Parse_boolean, 0], 'Prime' => [1, 1, Parse_any, undef], 'MultiStream' => [1, 1, Parse_boolean, 0], 'Transparent' => [1, 1, Parse_any, 1], 'Scan' => [1, 1, Parse_boolean, 0], 'InputLength' => [1, 1, Parse_unsigned, undef], 'BinModeOut' => [1, 1, Parse_boolean, 0], #'Encode' => [1, 1, Parse_any, undef], #'ConsumeInput' => [1, 1, Parse_boolean, 0], $self->getExtraParams(), #'Todo - Revert to ordinary file on end Z_STREAM_END'=> 0, # ContinueAfterEof } ; $Valid->{TrailingData} = [1, 1, Parse_writable_scalar, undef] if *$self->{OneShot} ; $got->parse($Valid, @_ ) or $self->croakError("${class}: $got->{Error}") ; $self->postCheckParams($got) or $self->croakError("${class}: " . $self->error()) ; return $got; } sub _create { my $obj = shift; my $got = shift; my $append_mode = shift ; my $class = ref $obj; $obj->croakError("$class: Missing Input parameter") if ! @_ && ! $got ; my $inValue = shift ; *$obj->{OneShot} = 0 ; if (! $got) { $got = $obj->checkParams($class, undef, @_) or return undef ; } my $inType = whatIsInput($inValue, 1); $obj->ckInputParam($class, $inValue, 1) or return undef ; *$obj->{InNew} = 1; $obj->ckParams($got) or $obj->croakError("${class}: " . *$obj->{Error}); if ($inType eq 'buffer' || $inType eq 'code') { *$obj->{Buffer} = $inValue ; *$obj->{InputEvent} = $inValue if $inType eq 'code' ; } else { if ($inType eq 'handle') { *$obj->{FH} = $inValue ; *$obj->{Handle} = 1 ; # Need to rewind for Scan *$obj->{FH}->seek(0, SEEK_SET) if $got->value('Scan'); } else { no warnings ; my $mode = '<'; $mode = '+<' if $got->value('Scan'); *$obj->{StdIO} = ($inValue eq '-'); *$obj->{FH} = new IO::File "$mode $inValue" or return $obj->saveErrorString(undef, "cannot open file '$inValue': $!", $!) ; } *$obj->{LineNo} = $. = 0; setBinModeInput(*$obj->{FH}) ; my $buff = "" ; *$obj->{Buffer} = \$buff ; } if ($got->parsed('Encode')) { my $want_encoding = $got->value('Encode'); *$obj->{Encoding} = getEncoding($obj, $class, $want_encoding); } *$obj->{InputLength} = $got->parsed('InputLength') ? $got->value('InputLength') : undef ; *$obj->{InputLengthRemaining} = $got->value('InputLength'); *$obj->{BufferOffset} = 0 ; *$obj->{AutoClose} = $got->value('AutoClose'); *$obj->{Strict} = $got->value('Strict'); *$obj->{BlockSize} = $got->value('BlockSize'); *$obj->{Append} = $got->value('Append'); *$obj->{AppendOutput} = $append_mode || $got->value('Append'); *$obj->{ConsumeInput} = $got->value('ConsumeInput'); *$obj->{Transparent} = $got->value('Transparent'); *$obj->{MultiStream} = $got->value('MultiStream'); # TODO - move these two into RawDeflate *$obj->{Scan} = $got->value('Scan'); *$obj->{ParseExtra} = $got->value('ParseExtra') || $got->value('Strict') ; *$obj->{Type} = ''; *$obj->{Prime} = $got->value('Prime') || '' ; *$obj->{Pending} = ''; *$obj->{Plain} = 0; *$obj->{PlainBytesRead} = 0; *$obj->{InflatedBytesRead} = 0; *$obj->{UnCompSize} = new U64; *$obj->{CompSize} = new U64; *$obj->{TotalInflatedBytesRead} = 0; *$obj->{NewStream} = 0 ; *$obj->{EventEof} = 0 ; *$obj->{ClassName} = $class ; *$obj->{Params} = $got ; if (*$obj->{ConsumeInput}) { *$obj->{InNew} = 0; *$obj->{Closed} = 0; return $obj } my $status = $obj->mkUncomp($got); return undef unless defined $status; if ( ! $status) { return undef unless *$obj->{Transparent}; $obj->clearError(); *$obj->{Type} = 'plain'; *$obj->{Plain} = 1; #$status = $obj->mkIdentityUncomp($class, $got); $obj->pushBack(*$obj->{HeaderPending}) ; } push @{ *$obj->{InfoList} }, *$obj->{Info} ; $obj->saveStatus(STATUS_OK) ; *$obj->{InNew} = 0; *$obj->{Closed} = 0; return $obj; } sub ckInputParam { my $self = shift ; my $from = shift ; my $inType = whatIsInput($_[0], $_[1]); $self->croakError("$from: input parameter not a filename, filehandle, array ref or scalar ref") if ! $inType ; # if ($inType eq 'filename' ) # { # return $self->saveErrorString(1, "$from: input filename is undef or null string", STATUS_ERROR) # if ! defined $_[0] || $_[0] eq '' ; # # if ($_[0] ne '-' && ! -e $_[0] ) # { # return $self->saveErrorString(1, # "input file '$_[0]' does not exist", STATUS_ERROR); # } # } return 1; } sub _inf { my $obj = shift ; my $class = (caller)[0] ; my $name = (caller(1))[3] ; $obj->croakError("$name: expected at least 1 parameters\n") unless @_ >= 1 ; my $input = shift ; my $haveOut = @_ ; my $output = shift ; my $x = new IO::Compress::Base::Validator($class, *$obj->{Error}, $name, $input, $output) or return undef ; push @_, $output if $haveOut && $x->{Hash}; *$obj->{OneShot} = 1 ; my $got = $obj->checkParams($name, undef, @_) or return undef ; if ($got->parsed('TrailingData')) { *$obj->{TrailingData} = $got->value('TrailingData'); } *$obj->{MultiStream} = $got->value('MultiStream'); $got->value('MultiStream', 0); $x->{Got} = $got ; # if ($x->{Hash}) # { # while (my($k, $v) = each %$input) # { # $v = \$input->{$k} # unless defined $v ; # # $obj->_singleTarget($x, $k, $v, @_) # or return undef ; # } # # return keys %$input ; # } if ($x->{GlobMap}) { $x->{oneInput} = 1 ; foreach my $pair (@{ $x->{Pairs} }) { my ($from, $to) = @$pair ; $obj->_singleTarget($x, $from, $to, @_) or return undef ; } return scalar @{ $x->{Pairs} } ; } if (! $x->{oneOutput} ) { my $inFile = ($x->{inType} eq 'filenames' || $x->{inType} eq 'filename'); $x->{inType} = $inFile ? 'filename' : 'buffer'; foreach my $in ($x->{oneInput} ? $input : @$input) { my $out ; $x->{oneInput} = 1 ; $obj->_singleTarget($x, $in, $output, @_) or return undef ; } return 1 ; } # finally the 1 to 1 and n to 1 return $obj->_singleTarget($x, $input, $output, @_); croak "should not be here" ; } sub retErr { my $x = shift ; my $string = shift ; ${ $x->{Error} } = $string ; return undef ; } sub _singleTarget { my $self = shift ; my $x = shift ; my $input = shift; my $output = shift; my $buff = ''; $x->{buff} = \$buff ; my $fh ; if ($x->{outType} eq 'filename') { my $mode = '>' ; $mode = '>>' if $x->{Got}->value('Append') ; $x->{fh} = new IO::File "$mode $output" or return retErr($x, "cannot open file '$output': $!") ; binmode $x->{fh} if $x->{Got}->valueOrDefault('BinModeOut'); } elsif ($x->{outType} eq 'handle') { $x->{fh} = $output; binmode $x->{fh} if $x->{Got}->valueOrDefault('BinModeOut'); if ($x->{Got}->value('Append')) { seek($x->{fh}, 0, SEEK_END) or return retErr($x, "Cannot seek to end of output filehandle: $!") ; } } elsif ($x->{outType} eq 'buffer' ) { $$output = '' unless $x->{Got}->value('Append'); $x->{buff} = $output ; } if ($x->{oneInput}) { defined $self->_rd2($x, $input, $output) or return undef; } else { for my $element ( ($x->{inType} eq 'hash') ? keys %$input : @$input) { defined $self->_rd2($x, $element, $output) or return undef ; } } if ( ($x->{outType} eq 'filename' && $output ne '-') || ($x->{outType} eq 'handle' && $x->{Got}->value('AutoClose'))) { $x->{fh}->close() or return retErr($x, $!); delete $x->{fh}; } return 1 ; } sub _rd2 { my $self = shift ; my $x = shift ; my $input = shift; my $output = shift; my $z = createSelfTiedObject($x->{Class}, *$self->{Error}); $z->_create($x->{Got}, 1, $input, @_) or return undef ; my $status ; my $fh = $x->{fh}; while (1) { while (($status = $z->read($x->{buff})) > 0) { if ($fh) { print $fh ${ $x->{buff} } or return $z->saveErrorString(undef, "Error writing to output file: $!", $!); ${ $x->{buff} } = '' ; } } if (! $x->{oneOutput} ) { my $ot = $x->{outType} ; if ($ot eq 'array') { push @$output, $x->{buff} } elsif ($ot eq 'hash') { $output->{$input} = $x->{buff} } my $buff = ''; $x->{buff} = \$buff; } last if $status < 0 || $z->smartEof(); #last if $status < 0 ; last unless *$self->{MultiStream}; $status = $z->nextStream(); last unless $status == 1 ; } return $z->closeError(undef) if $status < 0 ; ${ *$self->{TrailingData} } = $z->trailingData() if defined *$self->{TrailingData} ; $z->close() or return undef ; return 1 ; } sub TIEHANDLE { return $_[0] if ref($_[0]); die "OOPS\n" ; } sub UNTIE { my $self = shift ; } sub getHeaderInfo { my $self = shift ; wantarray ? @{ *$self->{InfoList} } : *$self->{Info}; } sub readBlock { my $self = shift ; my $buff = shift ; my $size = shift ; if (defined *$self->{CompressedInputLength}) { if (*$self->{CompressedInputLengthRemaining} == 0) { delete *$self->{CompressedInputLength}; *$self->{CompressedInputLengthDone} = 1; return STATUS_OK ; } $size = min($size, *$self->{CompressedInputLengthRemaining} ); *$self->{CompressedInputLengthRemaining} -= $size ; } my $status = $self->smartRead($buff, $size) ; return $self->saveErrorString(STATUS_ERROR, "Error Reading Data") if $status < 0 ; if ($status == 0 ) { *$self->{Closed} = 1 ; *$self->{EndStream} = 1 ; return $self->saveErrorString(STATUS_ERROR, "unexpected end of file", STATUS_ERROR); } return STATUS_OK; } sub postBlockChk { return STATUS_OK; } sub _raw_read { # return codes # >0 - ok, number of bytes read # =0 - ok, eof # <0 - not ok my $self = shift ; return G_EOF if *$self->{Closed} ; #return G_EOF if !length *$self->{Pending} && *$self->{EndStream} ; return G_EOF if *$self->{EndStream} ; my $buffer = shift ; my $scan_mode = shift ; if (*$self->{Plain}) { my $tmp_buff ; my $len = $self->smartRead(\$tmp_buff, *$self->{BlockSize}) ; return $self->saveErrorString(G_ERR, "Error reading data: $!", $!) if $len < 0 ; if ($len == 0 ) { *$self->{EndStream} = 1 ; } else { *$self->{PlainBytesRead} += $len ; $$buffer .= $tmp_buff; } return $len ; } if (*$self->{NewStream}) { $self->gotoNextStream() > 0 or return G_ERR; # For the headers that actually uncompressed data, put the # uncompressed data into the output buffer. $$buffer .= *$self->{Pending} ; my $len = length *$self->{Pending} ; *$self->{Pending} = ''; return $len; } my $temp_buf = ''; my $outSize = 0; my $status = $self->readBlock(\$temp_buf, *$self->{BlockSize}, $outSize) ; return G_ERR if $status == STATUS_ERROR ; my $buf_len = 0; if ($status == STATUS_OK) { my $beforeC_len = length $temp_buf; my $before_len = defined $$buffer ? length $$buffer : 0 ; $status = *$self->{Uncomp}->uncompr(\$temp_buf, $buffer, defined *$self->{CompressedInputLengthDone} || $self->smartEof(), $outSize); # Remember the input buffer if it wasn't consumed completely $self->pushBack($temp_buf) if *$self->{Uncomp}{ConsumesInput}; return $self->saveErrorString(G_ERR, *$self->{Uncomp}{Error}, *$self->{Uncomp}{ErrorNo}) if $self->saveStatus($status) == STATUS_ERROR; $self->postBlockChk($buffer, $before_len) == STATUS_OK or return G_ERR; $buf_len = defined $$buffer ? length($$buffer) - $before_len : 0; *$self->{CompSize}->add($beforeC_len - length $temp_buf) ; *$self->{InflatedBytesRead} += $buf_len ; *$self->{TotalInflatedBytesRead} += $buf_len ; *$self->{UnCompSize}->add($buf_len) ; $self->filterUncompressed($buffer); if (*$self->{Encoding}) { $$buffer = *$self->{Encoding}->decode($$buffer); } } if ($status == STATUS_ENDSTREAM) { *$self->{EndStream} = 1 ; #$self->pushBack($temp_buf) ; #$temp_buf = ''; my $trailer; my $trailer_size = *$self->{Info}{TrailerLength} ; my $got = 0; if (*$self->{Info}{TrailerLength}) { $got = $self->smartRead(\$trailer, $trailer_size) ; } if ($got == $trailer_size) { $self->chkTrailer($trailer) == STATUS_OK or return G_ERR; } else { return $self->TrailerError("trailer truncated. Expected " . "$trailer_size bytes, got $got") if *$self->{Strict}; $self->pushBack($trailer) ; } # TODO - if want to file file pointer, do it here if (! $self->smartEof()) { *$self->{NewStream} = 1 ; if (*$self->{MultiStream}) { *$self->{EndStream} = 0 ; return $buf_len ; } } } # return the number of uncompressed bytes read return $buf_len ; } sub reset { my $self = shift ; return *$self->{Uncomp}->reset(); } sub filterUncompressed { } #sub isEndStream #{ # my $self = shift ; # return *$self->{NewStream} || # *$self->{EndStream} ; #} sub nextStream { my $self = shift ; my $status = $self->gotoNextStream(); $status == 1 or return $status ; *$self->{TotalInflatedBytesRead} = 0 ; *$self->{LineNo} = $. = 0; return 1; } sub gotoNextStream { my $self = shift ; if (! *$self->{NewStream}) { my $status = 1; my $buffer ; # TODO - make this more efficient if know the offset for the end of # the stream and seekable $status = $self->read($buffer) while $status > 0 ; return $status if $status < 0; } *$self->{NewStream} = 0 ; *$self->{EndStream} = 0 ; $self->reset(); *$self->{UnCompSize}->reset(); *$self->{CompSize}->reset(); my $magic = $self->ckMagic(); #*$self->{EndStream} = 0 ; if ( ! defined $magic) { if (! *$self->{Transparent} ) { *$self->{EndStream} = 1 ; return 0; } $self->clearError(); *$self->{Type} = 'plain'; *$self->{Plain} = 1; $self->pushBack(*$self->{HeaderPending}) ; } else { *$self->{Info} = $self->readHeader($magic); if ( ! defined *$self->{Info} ) { *$self->{EndStream} = 1 ; return -1; } } push @{ *$self->{InfoList} }, *$self->{Info} ; return 1; } sub streamCount { my $self = shift ; return 1 if ! defined *$self->{InfoList}; return scalar @{ *$self->{InfoList} } ; } sub read { # return codes # >0 - ok, number of bytes read # =0 - ok, eof # <0 - not ok my $self = shift ; return G_EOF if *$self->{Closed} ; my $buffer ; if (ref $_[0] ) { $self->croakError(*$self->{ClassName} . "::read: buffer parameter is read-only") if readonly(${ $_[0] }); $self->croakError(*$self->{ClassName} . "::read: not a scalar reference $_[0]" ) unless ref $_[0] eq 'SCALAR' ; $buffer = $_[0] ; } else { $self->croakError(*$self->{ClassName} . "::read: buffer parameter is read-only") if readonly($_[0]); $buffer = \$_[0] ; } my $length = $_[1] ; my $offset = $_[2] || 0; if (! *$self->{AppendOutput}) { if (! $offset) { $$buffer = '' ; } else { if ($offset > length($$buffer)) { $$buffer .= "\x00" x ($offset - length($$buffer)); } else { substr($$buffer, $offset) = ''; } } } return G_EOF if !length *$self->{Pending} && *$self->{EndStream} ; # the core read will return 0 if asked for 0 bytes return 0 if defined $length && $length == 0 ; $length = $length || 0; $self->croakError(*$self->{ClassName} . "::read: length parameter is negative") if $length < 0 ; # Short-circuit if this is a simple read, with no length # or offset specified. unless ( $length || $offset) { if (length *$self->{Pending}) { $$buffer .= *$self->{Pending} ; my $len = length *$self->{Pending}; *$self->{Pending} = '' ; return $len ; } else { my $len = 0; $len = $self->_raw_read($buffer) while ! *$self->{EndStream} && $len == 0 ; return $len ; } } # Need to jump through more hoops - either length or offset # or both are specified. my $out_buffer = *$self->{Pending} ; *$self->{Pending} = ''; while (! *$self->{EndStream} && length($out_buffer) < $length) { my $buf_len = $self->_raw_read(\$out_buffer); return $buf_len if $buf_len < 0 ; } $length = length $out_buffer if length($out_buffer) < $length ; return 0 if $length == 0 ; $$buffer = '' if ! defined $$buffer; $offset = length $$buffer if *$self->{AppendOutput} ; *$self->{Pending} = $out_buffer; $out_buffer = \*$self->{Pending} ; #substr($$buffer, $offset) = substr($$out_buffer, 0, $length, '') ; substr($$buffer, $offset) = substr($$out_buffer, 0, $length) ; substr($$out_buffer, 0, $length) = '' ; return $length ; } sub _getline { my $self = shift ; # Slurp Mode if ( ! defined $/ ) { my $data ; 1 while $self->read($data) > 0 ; return \$data ; } # Record Mode if ( ref $/ eq 'SCALAR' && ${$/} =~ /^\d+$/ && ${$/} > 0) { my $reclen = ${$/} ; my $data ; $self->read($data, $reclen) ; return \$data ; } # Paragraph Mode if ( ! length $/ ) { my $paragraph ; while ($self->read($paragraph) > 0 ) { if ($paragraph =~ s/^(.*?\n\n+)//s) { *$self->{Pending} = $paragraph ; my $par = $1 ; return \$par ; } } return \$paragraph; } # $/ isn't empty, or a reference, so it's Line Mode. { my $line ; my $offset; my $p = \*$self->{Pending} ; if (length(*$self->{Pending}) && ($offset = index(*$self->{Pending}, $/)) >=0) { my $l = substr(*$self->{Pending}, 0, $offset + length $/ ); substr(*$self->{Pending}, 0, $offset + length $/) = ''; return \$l; } while ($self->read($line) > 0 ) { my $offset = index($line, $/); if ($offset >= 0) { my $l = substr($line, 0, $offset + length $/ ); substr($line, 0, $offset + length $/) = ''; $$p = $line; return \$l; } } return \$line; } } sub getline { my $self = shift; my $current_append = *$self->{AppendOutput} ; *$self->{AppendOutput} = 1; my $lineref = $self->_getline(); $. = ++ *$self->{LineNo} if defined $$lineref ; *$self->{AppendOutput} = $current_append; return $$lineref ; } sub getlines { my $self = shift; $self->croakError(*$self->{ClassName} . "::getlines: called in scalar context\n") unless wantarray; my($line, @lines); push(@lines, $line) while defined($line = $self->getline); return @lines; } sub READLINE { goto &getlines if wantarray; goto &getline; } sub getc { my $self = shift; my $buf; return $buf if $self->read($buf, 1); return undef; } sub ungetc { my $self = shift; *$self->{Pending} = "" unless defined *$self->{Pending} ; *$self->{Pending} = $_[0] . *$self->{Pending} ; } sub trailingData { my $self = shift ; if (defined *$self->{FH} || defined *$self->{InputEvent} ) { return *$self->{Prime} ; } else { my $buf = *$self->{Buffer} ; my $offset = *$self->{BufferOffset} ; return substr($$buf, $offset) ; } } sub eof { my $self = shift ; return (*$self->{Closed} || (!length *$self->{Pending} && ( $self->smartEof() || *$self->{EndStream}))) ; } sub tell { my $self = shift ; my $in ; if (*$self->{Plain}) { $in = *$self->{PlainBytesRead} ; } else { $in = *$self->{TotalInflatedBytesRead} ; } my $pending = length *$self->{Pending} ; return 0 if $pending > $in ; return $in - $pending ; } sub close { # todo - what to do if close is called before the end of the gzip file # do we remember any trailing data? my $self = shift ; return 1 if *$self->{Closed} ; untie *$self if $] >= 5.008 ; my $status = 1 ; if (defined *$self->{FH}) { if ((! *$self->{Handle} || *$self->{AutoClose}) && ! *$self->{StdIO}) { #if ( *$self->{AutoClose}) { local $.; $! = 0 ; $status = *$self->{FH}->close(); return $self->saveErrorString(0, $!, $!) if !*$self->{InNew} && $self->saveStatus($!) != 0 ; } delete *$self->{FH} ; $! = 0 ; } *$self->{Closed} = 1 ; return 1; } sub DESTROY { my $self = shift ; local ($., $@, $!, $^E, $?); $self->close() ; } sub seek { my $self = shift ; my $position = shift; my $whence = shift ; my $here = $self->tell() ; my $target = 0 ; if ($whence == SEEK_SET) { $target = $position ; } elsif ($whence == SEEK_CUR) { $target = $here + $position ; } elsif ($whence == SEEK_END) { $target = $position ; $self->croakError(*$self->{ClassName} . "::seek: SEEK_END not allowed") ; } else { $self->croakError(*$self->{ClassName} ."::seek: unknown value, $whence, for whence parameter"); } # short circuit if seeking to current offset return 1 if $target == $here ; # Outlaw any attempt to seek backwards $self->croakError( *$self->{ClassName} ."::seek: cannot seek backwards") if $target < $here ; # Walk the file to the new offset my $offset = $target - $here ; my $got; while (($got = $self->read(my $buffer, min($offset, *$self->{BlockSize})) ) > 0) { $offset -= $got; last if $offset == 0 ; } $here = $self->tell() ; return $offset == 0 ? 1 : 0 ; } sub fileno { my $self = shift ; return defined *$self->{FH} ? fileno *$self->{FH} : undef ; } sub binmode { 1; # my $self = shift ; # return defined *$self->{FH} # ? binmode *$self->{FH} # : 1 ; } sub opened { my $self = shift ; return ! *$self->{Closed} ; } sub autoflush { my $self = shift ; return defined *$self->{FH} ? *$self->{FH}->autoflush(@_) : undef ; } sub input_line_number { my $self = shift ; my $last = *$self->{LineNo}; $. = *$self->{LineNo} = $_[1] if @_ ; return $last; } *BINMODE = \&binmode; *SEEK = \&seek; *READ = \&read; *sysread = \&read; *TELL = \&tell; *EOF = \&eof; *FILENO = \&fileno; *CLOSE = \&close; sub _notAvailable { my $name = shift ; #return sub { croak "$name Not Available" ; } ; return sub { croak "$name Not Available: File opened only for intput" ; } ; } *print = _notAvailable('print'); *PRINT = _notAvailable('print'); *printf = _notAvailable('printf'); *PRINTF = _notAvailable('printf'); *write = _notAvailable('write'); *WRITE = _notAvailable('write'); #*sysread = \&read; #*syswrite = \&_notAvailable; package IO::Uncompress::Base ; 1 ; __END__ #line 1465 FILE 821d0be5/IO/Uncompress/Gunzip.pm*#line 1 "/usr/local/share/perl/5.8.8/IO/Uncompress/Gunzip.pm" package IO::Uncompress::Gunzip ; require 5.004 ; # for RFC1952 use strict ; use warnings; use bytes; use IO::Uncompress::RawInflate 2.020 ; use Compress::Raw::Zlib 2.020 qw( crc32 ) ; use IO::Compress::Base::Common 2.020 qw(:Status createSelfTiedObject); use IO::Compress::Gzip::Constants 2.020 ; use IO::Compress::Zlib::Extra 2.020 ; require Exporter ; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, $GunzipError); @ISA = qw( Exporter IO::Uncompress::RawInflate ); @EXPORT_OK = qw( $GunzipError gunzip ); %EXPORT_TAGS = %IO::Uncompress::RawInflate::DEFLATE_CONSTANTS ; push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; Exporter::export_ok_tags('all'); $GunzipError = ''; $VERSION = '2.020'; sub new { my $class = shift ; $GunzipError = ''; my $obj = createSelfTiedObject($class, \$GunzipError); $obj->_create(undef, 0, @_); } sub gunzip { my $obj = createSelfTiedObject(undef, \$GunzipError); return $obj->_inf(@_) ; } sub getExtraParams { use IO::Compress::Base::Common 2.020 qw(:Parse); return ( 'ParseExtra' => [1, 1, Parse_boolean, 0] ) ; } sub ckParams { my $self = shift ; my $got = shift ; # gunzip always needs crc32 $got->value('CRC32' => 1); return 1; } sub ckMagic { my $self = shift; my $magic ; $self->smartReadExact(\$magic, GZIP_ID_SIZE); *$self->{HeaderPending} = $magic ; return $self->HeaderError("Minimum header size is " . GZIP_MIN_HEADER_SIZE . " bytes") if length $magic != GZIP_ID_SIZE ; return $self->HeaderError("Bad Magic") if ! isGzipMagic($magic) ; *$self->{Type} = 'rfc1952'; return $magic ; } sub readHeader { my $self = shift; my $magic = shift; return $self->_readGzipHeader($magic); } sub chkTrailer { my $self = shift; my $trailer = shift; # Check CRC & ISIZE my ($CRC32, $ISIZE) = unpack("V V", $trailer) ; *$self->{Info}{CRC32} = $CRC32; *$self->{Info}{ISIZE} = $ISIZE; if (*$self->{Strict}) { return $self->TrailerError("CRC mismatch") if $CRC32 != *$self->{Uncomp}->crc32() ; my $exp_isize = *$self->{UnCompSize}->get32bit(); return $self->TrailerError("ISIZE mismatch. Got $ISIZE" . ", expected $exp_isize") if $ISIZE != $exp_isize ; } return STATUS_OK; } sub isGzipMagic { my $buffer = shift ; return 0 if length $buffer < GZIP_ID_SIZE ; my ($id1, $id2) = unpack("C C", $buffer) ; return $id1 == GZIP_ID1 && $id2 == GZIP_ID2 ; } sub _readFullGzipHeader($) { my ($self) = @_ ; my $magic = '' ; $self->smartReadExact(\$magic, GZIP_ID_SIZE); *$self->{HeaderPending} = $magic ; return $self->HeaderError("Minimum header size is " . GZIP_MIN_HEADER_SIZE . " bytes") if length $magic != GZIP_ID_SIZE ; return $self->HeaderError("Bad Magic") if ! isGzipMagic($magic) ; my $status = $self->_readGzipHeader($magic); delete *$self->{Transparent} if ! defined $status ; return $status ; } sub _readGzipHeader($) { my ($self, $magic) = @_ ; my ($HeaderCRC) ; my ($buffer) = '' ; $self->smartReadExact(\$buffer, GZIP_MIN_HEADER_SIZE - GZIP_ID_SIZE) or return $self->HeaderError("Minimum header size is " . GZIP_MIN_HEADER_SIZE . " bytes") ; my $keep = $magic . $buffer ; *$self->{HeaderPending} = $keep ; # now split out the various parts my ($cm, $flag, $mtime, $xfl, $os) = unpack("C C V C C", $buffer) ; $cm == GZIP_CM_DEFLATED or return $self->HeaderError("Not Deflate (CM is $cm)") ; # check for use of reserved bits return $self->HeaderError("Use of Reserved Bits in FLG field.") if $flag & GZIP_FLG_RESERVED ; my $EXTRA ; my @EXTRA = () ; if ($flag & GZIP_FLG_FEXTRA) { $EXTRA = "" ; $self->smartReadExact(\$buffer, GZIP_FEXTRA_HEADER_SIZE) or return $self->TruncatedHeader("FEXTRA Length") ; my ($XLEN) = unpack("v", $buffer) ; $self->smartReadExact(\$EXTRA, $XLEN) or return $self->TruncatedHeader("FEXTRA Body"); $keep .= $buffer . $EXTRA ; if ($XLEN && *$self->{'ParseExtra'}) { my $bad = IO::Compress::Zlib::Extra::parseRawExtra($EXTRA, \@EXTRA, 1, 1); return $self->HeaderError($bad) if defined $bad; } } my $origname ; if ($flag & GZIP_FLG_FNAME) { $origname = "" ; while (1) { $self->smartReadExact(\$buffer, 1) or return $self->TruncatedHeader("FNAME"); last if $buffer eq GZIP_NULL_BYTE ; $origname .= $buffer } $keep .= $origname . GZIP_NULL_BYTE ; return $self->HeaderError("Non ISO 8859-1 Character found in Name") if *$self->{Strict} && $origname =~ /$GZIP_FNAME_INVALID_CHAR_RE/o ; } my $comment ; if ($flag & GZIP_FLG_FCOMMENT) { $comment = ""; while (1) { $self->smartReadExact(\$buffer, 1) or return $self->TruncatedHeader("FCOMMENT"); last if $buffer eq GZIP_NULL_BYTE ; $comment .= $buffer } $keep .= $comment . GZIP_NULL_BYTE ; return $self->HeaderError("Non ISO 8859-1 Character found in Comment") if *$self->{Strict} && $comment =~ /$GZIP_FCOMMENT_INVALID_CHAR_RE/o ; } if ($flag & GZIP_FLG_FHCRC) { $self->smartReadExact(\$buffer, GZIP_FHCRC_SIZE) or return $self->TruncatedHeader("FHCRC"); $HeaderCRC = unpack("v", $buffer) ; my $crc16 = crc32($keep) & 0xFF ; return $self->HeaderError("CRC16 mismatch.") if *$self->{Strict} && $crc16 != $HeaderCRC; $keep .= $buffer ; } # Assume compression method is deflated for xfl tests #if ($xfl) { #} *$self->{Type} = 'rfc1952'; return { 'Type' => 'rfc1952', 'FingerprintLength' => 2, 'HeaderLength' => length $keep, 'TrailerLength' => GZIP_TRAILER_SIZE, 'Header' => $keep, 'isMinimalHeader' => $keep eq GZIP_MINIMUM_HEADER ? 1 : 0, 'MethodID' => $cm, 'MethodName' => $cm == GZIP_CM_DEFLATED ? "Deflated" : "Unknown" , 'TextFlag' => $flag & GZIP_FLG_FTEXT ? 1 : 0, 'HeaderCRCFlag' => $flag & GZIP_FLG_FHCRC ? 1 : 0, 'NameFlag' => $flag & GZIP_FLG_FNAME ? 1 : 0, 'CommentFlag' => $flag & GZIP_FLG_FCOMMENT ? 1 : 0, 'ExtraFlag' => $flag & GZIP_FLG_FEXTRA ? 1 : 0, 'Name' => $origname, 'Comment' => $comment, 'Time' => $mtime, 'OsID' => $os, 'OsName' => defined $GZIP_OS_Names{$os} ? $GZIP_OS_Names{$os} : "Unknown", 'HeaderCRC' => $HeaderCRC, 'Flags' => $flag, 'ExtraFlags' => $xfl, 'ExtraFieldRaw' => $EXTRA, 'ExtraField' => [ @EXTRA ], #'CompSize'=> $compsize, #'CRC32'=> $CRC32, #'OrigSize'=> $ISIZE, } } 1; __END__ #line 1071 FILE$5536213f/IO/Uncompress/RawInflate.pm"#line 1 "/usr/local/share/perl/5.8.8/IO/Uncompress/RawInflate.pm" package IO::Uncompress::RawInflate ; # for RFC1951 use strict ; use warnings; use bytes; use Compress::Raw::Zlib 2.020 ; use IO::Compress::Base::Common 2.020 qw(:Status createSelfTiedObject); use IO::Uncompress::Base 2.020 ; use IO::Uncompress::Adapter::Inflate 2.020 ; require Exporter ; our ($VERSION, @ISA, @EXPORT_OK, %EXPORT_TAGS, %DEFLATE_CONSTANTS, $RawInflateError); $VERSION = '2.020'; $RawInflateError = ''; @ISA = qw( Exporter IO::Uncompress::Base ); @EXPORT_OK = qw( $RawInflateError rawinflate ) ; %DEFLATE_CONSTANTS = (); %EXPORT_TAGS = %IO::Uncompress::Base::EXPORT_TAGS ; push @{ $EXPORT_TAGS{all} }, @EXPORT_OK ; Exporter::export_ok_tags('all'); #{ # # Execute at runtime # my %bad; # for my $module (qw(Compress::Raw::Zlib IO::Compress::Base::Common IO::Uncompress::Base IO::Uncompress::Adapter::Inflate)) # { # my $ver = ${ $module . "::VERSION"} ; # # $bad{$module} = $ver # if $ver ne $VERSION; # } # # if (keys %bad) # { # my $string = join "\n", map { "$_ $bad{$_}" } keys %bad; # die caller(0)[0] . "needs version $VERSION mismatch\n$string\n"; # } #} sub new { my $class = shift ; my $obj = createSelfTiedObject($class, \$RawInflateError); $obj->_create(undef, 0, @_); } sub rawinflate { my $obj = createSelfTiedObject(undef, \$RawInflateError); return $obj->_inf(@_); } sub getExtraParams { return (); } sub ckParams { my $self = shift ; my $got = shift ; return 1; } sub mkUncomp { my $self = shift ; my $got = shift ; my ($obj, $errstr, $errno) = IO::Uncompress::Adapter::Inflate::mkUncompObject( $got->value('CRC32'), $got->value('ADLER32'), $got->value('Scan'), ); return $self->saveErrorString(undef, $errstr, $errno) if ! defined $obj; *$self->{Uncomp} = $obj; my $magic = $self->ckMagic() or return 0; *$self->{Info} = $self->readHeader($magic) or return undef ; return 1; } sub ckMagic { my $self = shift; return $self->_isRaw() ; } sub readHeader { my $self = shift; my $magic = shift ; return { 'Type' => 'rfc1951', 'FingerprintLength' => 0, 'HeaderLength' => 0, 'TrailerLength' => 0, 'Header' => '' }; } sub chkTrailer { return STATUS_OK ; } sub _isRaw { my $self = shift ; my $got = $self->_isRawx(@_); if ($got) { *$self->{Pending} = *$self->{HeaderPending} ; } else { $self->pushBack(*$self->{HeaderPending}); *$self->{Uncomp}->reset(); } *$self->{HeaderPending} = ''; return $got ; } sub _isRawx { my $self = shift ; my $magic = shift ; $magic = '' unless defined $magic ; my $buffer = ''; $self->smartRead(\$buffer, *$self->{BlockSize}) >= 0 or return $self->saveErrorString(undef, "No data to read"); my $temp_buf = $magic . $buffer ; *$self->{HeaderPending} = $temp_buf ; $buffer = ''; my $status = *$self->{Uncomp}->uncompr(\$temp_buf, \$buffer, $self->smartEof()) ; return $self->saveErrorString(undef, *$self->{Uncomp}{Error}, STATUS_ERROR) if $status == STATUS_ERROR; $self->pushBack($temp_buf) ; return $self->saveErrorString(undef, "unexpected end of file", STATUS_ERROR) if $self->smartEof() && $status != STATUS_ENDSTREAM; #my $buf_len = *$self->{Uncomp}->uncompressedBytes(); my $buf_len = length $buffer; if ($status == STATUS_ENDSTREAM) { if (*$self->{MultiStream} && (length $temp_buf || ! $self->smartEof())){ *$self->{NewStream} = 1 ; *$self->{EndStream} = 0 ; } else { *$self->{EndStream} = 1 ; } } *$self->{HeaderPending} = $buffer ; *$self->{InflatedBytesRead} = $buf_len ; *$self->{TotalInflatedBytesRead} += $buf_len ; *$self->{Type} = 'rfc1951'; $self->saveStatus(STATUS_OK); return { 'Type' => 'rfc1951', 'HeaderLength' => 0, 'TrailerLength' => 0, 'Header' => '' }; } sub inflateSync { my $self = shift ; # inflateSync is a no-op in Plain mode return 1 if *$self->{Plain} ; return 0 if *$self->{Closed} ; #return G_EOF if !length *$self->{Pending} && *$self->{EndStream} ; return 0 if ! length *$self->{Pending} && *$self->{EndStream} ; # Disable CRC check *$self->{Strict} = 0 ; my $status ; while (1) { my $temp_buf ; if (length *$self->{Pending} ) { $temp_buf = *$self->{Pending} ; *$self->{Pending} = ''; } else { $status = $self->smartRead(\$temp_buf, *$self->{BlockSize}) ; return $self->saveErrorString(0, "Error Reading Data") if $status < 0 ; if ($status == 0 ) { *$self->{EndStream} = 1 ; return $self->saveErrorString(0, "unexpected end of file", STATUS_ERROR); } } $status = *$self->{Uncomp}->sync($temp_buf) ; if ($status == STATUS_OK) { *$self->{Pending} .= $temp_buf ; return 1 ; } last unless $status == STATUS_ERROR ; } return 0; } #sub performScan #{ # my $self = shift ; # # my $status ; # my $end_offset = 0; # # $status = $self->scan() # #or return $self->saveErrorString(undef, "Error Scanning: $$error_ref", $self->errorNo) ; # or return $self->saveErrorString(G_ERR, "Error Scanning: $status") # # $status = $self->zap($end_offset) # or return $self->saveErrorString(G_ERR, "Error Zapping: $status"); # #or return $self->saveErrorString(undef, "Error Zapping: $$error_ref", $self->errorNo) ; # # #(*$obj->{Deflate}, $status) = $inf->createDeflate(); # ## *$obj->{Header} = *$inf->{Info}{Header}; ## *$obj->{UnCompSize_32bit} = ## *$obj->{BytesWritten} = *$inf->{UnCompSize_32bit} ; ## *$obj->{CompSize_32bit} = *$inf->{CompSize_32bit} ; # # ## if ( $outType eq 'buffer') ## { substr( ${ *$self->{Buffer} }, $end_offset) = '' } ## elsif ($outType eq 'handle' || $outType eq 'filename') { ## *$self->{FH} = *$inf->{FH} ; ## delete *$inf->{FH}; ## *$obj->{FH}->flush() ; ## *$obj->{Handle} = 1 if $outType eq 'handle'; ## ## #seek(*$obj->{FH}, $end_offset, SEEK_SET) ## *$obj->{FH}->seek($end_offset, SEEK_SET) ## or return $obj->saveErrorString(undef, $!, $!) ; ## } # #} sub scan { my $self = shift ; return 1 if *$self->{Closed} ; return 1 if !length *$self->{Pending} && *$self->{EndStream} ; my $buffer = '' ; my $len = 0; $len = $self->_raw_read(\$buffer, 1) while ! *$self->{EndStream} && $len >= 0 ; #return $len if $len < 0 ? $len : 0 ; return $len < 0 ? 0 : 1 ; } sub zap { my $self = shift ; my $headerLength = *$self->{Info}{HeaderLength}; my $block_offset = $headerLength + *$self->{Uncomp}->getLastBlockOffset(); $_[0] = $headerLength + *$self->{Uncomp}->getEndOffset(); #printf "# End $_[0], headerlen $headerLength \n";; #printf "# block_offset $block_offset %x\n", $block_offset; my $byte ; ( $self->smartSeek($block_offset) && $self->smartRead(\$byte, 1) ) or return $self->saveErrorString(0, $!, $!); #printf "#byte is %x\n", unpack('C*',$byte); *$self->{Uncomp}->resetLastBlockByte($byte); #printf "#to byte is %x\n", unpack('C*',$byte); ( $self->smartSeek($block_offset) && $self->smartWrite($byte) ) or return $self->saveErrorString(0, $!, $!); #$self->smartSeek($end_offset, 1); return 1 ; } sub createDeflate { my $self = shift ; my ($def, $status) = *$self->{Uncomp}->createDeflateStream( -AppendOutput => 1, -WindowBits => - MAX_WBITS, -CRC32 => *$self->{Params}->value('CRC32'), -ADLER32 => *$self->{Params}->value('ADLER32'), ); return wantarray ? ($status, $def) : $def ; } 1; __END__ #line 1070 FILE239cafbf/PAR.pmjW#line 1 "/usr/local/share/perl/5.8.8/PAR.pm" package PAR; $PAR::VERSION = '0.992'; use 5.006; use strict; use warnings; use Config '%Config'; use Carp qw/croak/; # If the 'prefork' module is available, we # register various run-time loaded modules with it. # That way, there is more shared memory in a forking # environment. BEGIN { if (eval 'require prefork') { prefork->import($_) for qw/ Archive::Zip File::Glob File::Spec File::Temp LWP::Simple PAR::Heavy /; # not including Archive::Unzip::Burst which only makes sense # in the context of a PAR::Packer'ed executable anyway. } } use PAR::SetupProgname; use PAR::SetupTemp; #line 311 use vars qw(@PAR_INC); # explicitly stated PAR library files (preferred) use vars qw(@PAR_INC_LAST); # explicitly stated PAR library files (fallback) use vars qw(%PAR_INC); # sets {$par}{$file} for require'd modules use vars qw(@LibCache %LibCache); # I really miss pseudohash. use vars qw($LastAccessedPAR $LastTempFile); use vars qw(@RepositoryObjects); # If we have PAR::Repository::Client support, we # put the ::Client objects in here. use vars qw(@PriorityRepositoryObjects); # repositories which are preferred over local stuff use vars qw(@UpgradeRepositoryObjects); # If we have PAR::Repository::Client's in upgrade mode # put the ::Client objects in here *as well*. use vars qw(%FileCache); # The Zip-file file-name-cache # Layout: # $FileCache{$ZipObj}{$FileName} = $Member use vars qw(%ArchivesExtracted); # Associates archive-zip-object => full extraction path my $ver = $Config{version}; my $arch = $Config{archname}; my $progname = $ENV{PAR_PROGNAME} || $0; my $is_insensitive_fs = ( -s $progname and (-s lc($progname) || -1) == (-s uc($progname) || -1) and (-s lc($progname) || -1) == -s $progname ); # lexical for import(), and _import_foo() functions to control unpar() my %unpar_options; # called on "use PAR" sub import { my $class = shift; PAR::SetupProgname::set_progname(); PAR::SetupTemp::set_par_temp_env(); $progname = $ENV{PAR_PROGNAME} ||= $0; $is_insensitive_fs = (-s $progname and (-s lc($progname) || -1) == (-s uc($progname) || -1)); my @args = @_; # Insert PAR hook in @INC. unshift @INC, \&find_par unless grep { $_ eq \&find_par } @INC; push @INC, \&find_par_last unless grep { $_ eq \&find_par_last } @INC; # process args to use PAR 'foo.par', { opts }, ...; foreach my $par (@args) { if (ref($par) eq 'HASH') { # we have been passed a hash reference _import_hash_ref($par); } elsif ($par =~ /[?*{}\[\]]/) { # implement globbing for PAR archives require File::Glob; foreach my $matched (File::Glob::glob($par)) { push @PAR_INC, unpar($matched, undef, undef, 1); } } else { # ordinary string argument => file push @PAR_INC, unpar($par, undef, undef, 1); } } return if $PAR::__import; local $PAR::__import = 1; require PAR::Heavy; PAR::Heavy::_init_dynaloader(); # The following code is executed for the case where the # running program is itself a PAR archive. # ==> run script/main.pl if (unpar($progname)) { # XXX - handle META.yml here! push @PAR_INC, unpar($progname, undef, undef, 1); _extract_inc($progname) unless $ENV{PAR_CLEAN}; if ($LibCache{$progname}) { # XXX bad: this us just a good guess require File::Spec; $ArchivesExtracted{$progname} = File::Spec->catdir($ENV{PAR_TEMP}, 'inc'); } my $zip = $LibCache{$progname}; my $member = _first_member( $zip, "script/main.pl", "main.pl", ); if ($progname and !$member) { require File::Spec; my @path = File::Spec->splitdir($progname); my $filename = pop @path; $member = _first_member( $zip, "script/".$filename, "script/".$filename.".pl", $filename, $filename.".pl", ) } # finally take $ARGV[0] as the hint for file to run if (defined $ARGV[0] and !$member) { $member = _first_member( $zip, "script/$ARGV[0]", "script/$ARGV[0].pl", $ARGV[0], "$ARGV[0].pl", ) or die qq(PAR.pm: Can't open perl script "$ARGV[0]": No such file or directory); shift @ARGV; } if (!$member) { die "Usage: $0 script_file_name.\n"; } _run_member($member); } } # import() helper for the "use PAR {...};" syntax. sub _import_hash_ref { my $opt = shift; # hash slice assignment -- pass all of the options into unpar local @unpar_options{keys(%$opt)} = values(%$opt); # check for incompatible options: if ( exists $opt->{repository} and exists $opt->{file} ) { croak("Invalid PAR loading options. Cannot have a 'repository' and 'file' option at the same time."); } elsif ( exists $opt->{file} and (exists $opt->{install} or exists $opt->{upgrade}) ) { my $e = exists($opt->{install}) ? 'install' : 'upgrade'; croak("Invalid PAR loading options. Cannot combine 'file' and '$e' options."); } elsif ( not exists $opt->{repository} and not exists $opt->{file} ) { croak("Invalid PAR loading options. Need at least one of 'file' or 'repository' options."); } # load from file if (exists $opt->{file}) { croak("Cannot load undefined PAR archive") if not defined $opt->{file}; # for files, we default to loading from PAR archive first my $fallback = $opt->{fallback}; $fallback = 0 if not defined $fallback; if (not $fallback) { # load from this PAR arch preferably push @PAR_INC, unpar($opt->{file}, undef, undef, 1); } else { # load from this PAR arch as fallback push @PAR_INC_LAST, unpar($opt->{file}, undef, undef, 1); } } else { # Deal with repositories elsewhere my $client = _import_repository($opt); return() if not $client; if (defined $opt->{run}) { # run was specified # run the specified script from the repository $client->run_script( $opt->{run} ); return 1; } return 1; } # run was specified # run the specified script from inside the PAR file. if (defined $opt->{run}) { my $script = $opt->{run}; require PAR::Heavy; PAR::Heavy::_init_dynaloader(); # XXX - handle META.yml here! _extract_inc($opt->{file}) unless $ENV{PAR_CLEAN}; my $zip = $LibCache{$opt->{file}}; my $member = _first_member( $zip, (($script !~ /^script\//) ? ("script/$script", "script/$script.pl") : ()), $script, "$script.pl", ); if (not defined $member) { croak("Cannot run script '$script' from PAR file '$opt->{file}'. Script couldn't be found in PAR file."); } _run_member_from_par($member); } return(); } # This sub is invoked by _import_hash_ref if a {repository} # option is found # Returns the repository client object on success. sub _import_repository { my $opt = shift; my $url = $opt->{repository}; eval "require PAR::Repository::Client; 1;"; if ($@ or not eval PAR::Repository::Client->VERSION >= 0.04) { croak "In order to use the 'use PAR { repository => 'url' };' syntax, you need to install the PAR::Repository::Client module (version 0.04 or later) from CPAN. This module does not seem to be installed as indicated by the following error message: $@"; } if ($opt->{upgrade} and not eval PAR::Repository::Client->VERSION >= 0.22) { croak "In order to use the 'upgrade' option, you need to install the PAR::Repository::Client module (version 0.22 or later) from CPAN"; } if ($opt->{dependencies} and not eval PAR::Repository::Client->VERSION >= 0.23) { croak "In order to use the 'dependencies' option, you need to install the PAR::Repository::Client module (version 0.23 or later) from CPAN"; } my $obj; # Support existing clients passed in as objects. if (ref($url) and UNIVERSAL::isa($obj, 'PAR::Repository::Client')) { $obj = $url; } else { $obj = PAR::Repository::Client->new( uri => $url, auto_install => $opt->{install}, auto_upgrade => $opt->{upgrade}, static_dependencies => $opt->{dependencies}, ); } if (exists($opt->{fallback}) and not $opt->{fallback}) { push @PriorityRepositoryObjects, $obj; # repository beats local stuff } else { push @RepositoryObjects, $obj; # local stuff beats repository } # these are tracked separately so we can check for upgrades early push @UpgradeRepositoryObjects, $obj if $opt->{upgrade}; return $obj; } # Given an Archive::Zip obj and a list of files/paths, # this function returns the Archive::Zip::Member for the # first of the files found in the ZIP. If none is found, # returns the empty list. sub _first_member { my $zip = shift; foreach my $name (@_) { my $member = _cached_member_named($zip, $name); return $member if $member; } return; } # Given an Archive::Zip object, this finds the first # Archive::Zip member whose file name matches the # regular expression sub _first_member_matching { my $zip = shift; my $regex = shift; my $cache = $FileCache{$zip}; $cache = $FileCache{$zip} = _make_file_cache($zip) if not $cache; foreach my $name (keys %$cache) { if ($name =~ $regex) { return $cache->{$name}; } } return(); } sub _run_member_from_par { my $member = shift; my $clear_stack = shift; my ($fh, $is_new, $filename) = _tempfile($member->crc32String . ".pl"); if ($is_new) { my $file = $member->fileName; print $fh "package main;\n"; print $fh "#line 1 \"$file\"\n"; $member->extractToFileHandle($fh); seek ($fh, 0, 0); } $ENV{PAR_0} = $filename; # for Pod::Usage { do $filename; CORE::exit($1) if ($@ =~/^_TK_EXIT_\((\d+)\)/); die $@ if $@; exit; } } sub _run_member { my $member = shift; my $clear_stack = shift; my ($fh, $is_new, $filename) = _tempfile($member->crc32String . ".pl"); if ($is_new) { my $file = $member->fileName; print $fh "package main; shift \@INC;\n"; if (defined &Internals::PAR::CLEARSTACK and $clear_stack) { print $fh "Internals::PAR::CLEARSTACK();\n"; } print $fh "#line 1 \"$file\"\n"; $member->extractToFileHandle($fh); seek ($fh, 0, 0); } unshift @INC, sub { $fh }; $ENV{PAR_0} = $filename; # for Pod::Usage { do 'main'; CORE::exit($1) if ($@ =~/^_TK_EXIT_\((\d+)\)/); die $@ if $@; exit; } } # extract the contents of a .par (or .exe) or any # Archive::Zip handle to the PAR_TEMP/inc directory. # returns that directory. sub _extract_inc { my $file_or_azip_handle = shift; my $force_extract = shift; my $inc = "$PAR::SetupTemp::PARTemp/inc"; my $dlext = defined($Config{dlext}) ? $Config::Config{dlext} : ''; my $inc_exists = -d $inc; my $is_handle = ref($file_or_azip_handle) && $file_or_azip_handle->isa('Archive::Zip::Archive'); require File::Spec; if (!$inc_exists or $force_extract) { for (1 .. 10) { mkdir("$inc.lock", 0755) and last; sleep 1 } undef $@; if (!$is_handle) { # First try to unzip the *fast* way. eval { require Archive::Unzip::Burst; Archive::Unzip::Burst::unzip($file_or_azip_handle, $inc) and die "Could not unzip '$file_or_azip_handle' into '$inc'. Error: $!"; die; }; # This means the fast module is there, but didn't work. if ($@ =~ /^Could not unzip/) { die $@; } } # either failed to load Archive::Unzip::Burst or got an A::Zip handle # fallback to slow way. if ($is_handle || $@) { my $zip; if (!$is_handle) { open my $fh, '<', $file_or_azip_handle or die "Cannot find '$file_or_azip_handle': $!"; binmode($fh); bless($fh, 'IO::File'); $zip = Archive::Zip->new; ( $zip->readFromFileHandle($fh, $file_or_azip_handle) == Archive::Zip::AZ_OK() ) or die "Read '$file_or_azip_handle' error: $!"; } else { $zip = $file_or_azip_handle; } mkdir($inc) if not -d $inc; for ( $zip->memberNames() ) { next if m{\.\Q$dlext\E[^/]*$}; s{^/}{}; my $outfile = File::Spec->catfile($inc, $_); next if -e $outfile and not -w _; $zip->extractMember($_, "$inc/" . $_); } } rmdir("$inc.lock"); $ArchivesExtracted{$is_handle ? $file_or_azip_handle->fileName() : $file_or_azip_handle} = $inc; } # add the freshly extracted directories to @INC, # but make sure there's no duplicates my %inc_exists = map { ($_, 1) } @INC; unshift @INC, grep !exists($inc_exists{$_}), grep -d, map File::Spec->catdir($inc, @$_), [ 'lib' ], [ 'arch' ], [ $arch ], [ $ver ], [ $ver, $arch ], []; return $inc; } # This is the hook placed in @INC for loading PAR's # before any other stuff in @INC sub find_par { my @args = @_; # if there are repositories in upgrade mode, check them # first. If so, this is expensive, of course! if (@UpgradeRepositoryObjects) { my $module = $args[1]; $module =~ s/\.pm$//; $module =~ s/\//::/g; foreach my $client (@UpgradeRepositoryObjects) { my $local_file = $client->upgrade_module($module); # break the require if upgrade_module has been required already # to avoid infinite recursion if (exists $INC{$args[1]}) { # Oh dear. Check for the possible return values of the INC sub hooks in # perldoc -f require before trying to understand this. # Then, realize that if you pass undef for the file handle, perl (5.8.9) # does NOT use the subroutine. Thus the hacky GLOB ref. my $line = 1; return (\*I_AM_NOT_HERE, sub {$line ? ($_="1;",$line=0,return(1)) : ($_="",return(0))}); } if ($local_file) { return _find_par_internals([$PAR_INC_LAST[-1]], @args); } } } my $rv = _find_par_internals(\@PAR_INC, @args); return $rv if defined $rv or not @PriorityRepositoryObjects; # the repositories that are prefered over locally installed modules my $module = $args[1]; $module =~ s/\.pm$//; $module =~ s/\//::/g; foreach my $client (@PriorityRepositoryObjects) { my $local_file = $client->get_module($module, 1); # 1 == fallback if ($local_file) { return _find_par_internals([$PAR_INC_LAST[-1]], @args); } } return(); } # This is the hook placed in @INC for loading PAR's # AFTER any other stuff in @INC # It also deals with loading from repositories as a # fallback-fallback ;) sub find_par_last { my @args = @_; # Try the local PAR files first my $rv = _find_par_internals(\@PAR_INC_LAST, @args); return $rv if defined $rv; # No repositories => return return $rv if not @RepositoryObjects; my $module = $args[1]; $module =~ s/\.pm$//; $module =~ s/\//::/g; foreach my $client (@RepositoryObjects) { my $local_file = $client->get_module($module, 1); # 1 == fallback if ($local_file) { return _find_par_internals([$PAR_INC_LAST[-1]], @args); } } return $rv; } # This is a conjunction of the early find_par and the late # find_par_last. It's called by PAR::Heavy for Dynaloader stuff. sub _find_par_any { return _find_par_internals([@PAR_INC, @PAR_INC_LAST], @_); } # This routine implements loading modules from PARs # both for loading PARs preferably or as fallback. # To distinguish the cases, the first parameter should # be a reference to the corresponding @PAR_INC* array. sub _find_par_internals { my ($INC_ARY, $self, $file, $member_only) = @_; my $scheme; foreach (@$INC_ARY ? @$INC_ARY : @INC) { my $path = $_; if ($[ < 5.008001) { # reassemble from "perl -Ischeme://path" autosplitting $path = "$scheme:$path" if !@$INC_ARY and $path and $path =~ m!//! and $scheme and $scheme =~ /^\w+$/; $scheme = $path; } my $rv = unpar($path, $file, $member_only, 1) or next; $PAR_INC{$path}{$file} = 1; $INC{$file} = $LastTempFile if (lc($file) =~ /^(?!tk).*\.pm$/); return $rv; } return; } sub reload_libs { my @par_files = @_; @par_files = sort keys %LibCache unless @par_files; foreach my $par (@par_files) { my $inc_ref = $PAR_INC{$par} or next; delete $LibCache{$par}; delete $FileCache{$par}; foreach my $file (sort keys %$inc_ref) { delete $INC{$file}; require $file; } } } #sub find_zip_member { # my $file = pop; # # foreach my $zip (@LibCache) { # my $member = _first_member($zip, $file) or next; # return $member; # } # # return; #} sub read_file { my $file = pop; foreach my $zip (@LibCache) { my $member = _first_member($zip, $file) or next; return scalar $member->contents; } return; } sub par_handle { my $par = pop; return $LibCache{$par}; } my %escapes; sub unpar { my ($par, $file, $member_only, $allow_other_ext) = @_; return if not defined $par; my $zip = $LibCache{$par}; my @rv = $par; # a guard against (currently unimplemented) recursion return if $PAR::__unpar; local $PAR::__unpar = 1; unless ($zip) { # URL use case ==> download if ($par =~ m!^\w+://!) { require File::Spec; require LWP::Simple; # reflector support $par .= "pm=$file" if $par =~ /[?&;]/; # prepare cache directory $ENV{PAR_CACHE} ||= '_par'; mkdir $ENV{PAR_CACHE}, 0777; if (!-d $ENV{PAR_CACHE}) { $ENV{PAR_CACHE} = File::Spec->catdir(File::Spec->tmpdir, 'par'); mkdir $ENV{PAR_CACHE}, 0777; return unless -d $ENV{PAR_CACHE}; } # Munge URL into local file name # FIXME: This might result in unbelievably long file names! # I have run into the file/path length limitations of linux # with similar code in PAR::Repository::Client. # I suspect this is even worse on Win32. # -- Steffen my $file = $par; if (!%escapes) { $escapes{chr($_)} = sprintf("%%%02X", $_) for 0..255; } { use bytes; $file =~ s/([^\w\.])/$escapes{$1}/g; } $file = File::Spec->catfile( $ENV{PAR_CACHE}, $file); LWP::Simple::mirror( $par, $file ); return unless -e $file and -f _; $par = $file; } # Got the .par as a string. (reference to scalar, of course) elsif (ref($par) eq 'SCALAR') { my ($fh) = _tempfile(); print $fh $$par; $par = $fh; } # If the par is not a valid .par file name and we're being strict # about this, then also check whether "$par.par" exists elsif (!(($allow_other_ext or $par =~ /\.par\z/i) and -f $par)) { $par .= ".par"; return unless -f $par; } require Archive::Zip; $zip = Archive::Zip->new; my @file; if (!ref $par) { @file = $par; open my $fh, '<', $par; binmode($fh); $par = $fh; bless($par, 'IO::File'); } Archive::Zip::setErrorHandler(sub {}); my $rv = $zip->readFromFileHandle($par, @file); Archive::Zip::setErrorHandler(undef); return unless $rv == Archive::Zip::AZ_OK(); push @LibCache, $zip; $LibCache{$_[0]} = $zip; $FileCache{$_[0]} = _make_file_cache($zip); # only recursive case -- appears to be unused and unimplemented foreach my $member ( _cached_members_matching($zip, "^par/(?:$Config{version}/)?(?:$Config{archname}/)?" ) ) { next if $member->isDirectory; my $content = $member->contents(); next unless $content =~ /^PK\003\004/; push @rv, unpar(\$content, undef, undef, 1); } # extract all shlib dlls from the .par to $ENV{PAR_TEMP} # Intended to fix problem with Alien::wxWidgets/Wx... # NOTE auto/foo/foo.so|dll will get handled by the dynaloader # hook, so no need to pull it out here. # Allow this to be disabled so caller can do their own caching # via import({no_shlib_unpack => 1, file => foo.par}) if(not $unpar_options{no_shlib_unpack} and defined $ENV{PAR_TEMP}) { my @members = _cached_members_matching( $zip, qr#^shlib/$Config{archname}/.*\.\Q$Config{dlext}\E(?:\.|$)# ); foreach my $member (@members) { next if $member->isDirectory; my $member_name = $member->fileName; next unless $member_name =~ m{ \/([^/]+)$ }x or $member_name =~ m{ ^([^/]+)$ }; my $extract_name = $1; my $dest_name = File::Spec->catfile($ENV{PAR_TEMP}, $extract_name); # but don't extract it if we've already got one $member->extractToFileNamed($dest_name) unless(-e $dest_name); } } # Now push this path into usual library search paths my $separator = $Config{path_sep}; my $tempdir = $ENV{PAR_TEMP}; foreach my $key (qw( LD_LIBRARY_PATH LIB_PATH LIBRARY_PATH PATH DYLD_LIBRARY_PATH )) { if (defined $ENV{$key} and $ENV{$key} ne '') { # Check whether it's already in the path. If so, don't # append the PAR temp dir in order not to overflow the # maximum length for ENV vars. $ENV{$key} .= $separator . $tempdir unless grep { $_ eq $tempdir } split $separator, $ENV{$key}; } else { $ENV{$key} = $tempdir; } } } $LastAccessedPAR = $zip; return @rv unless defined $file; my $member = _first_member($zip, "lib/$file", "arch/$file", "$arch/$file", "$ver/$file", "$ver/$arch/$file", $file, ) or return; return $member if $member_only; my ($fh, $is_new); ($fh, $is_new, $LastTempFile) = _tempfile($member->crc32String . ".pm"); die "Bad Things Happened..." unless $fh; if ($is_new) { $member->extractToFileHandle($fh); seek ($fh, 0, 0); } return $fh; } sub _tempfile { my ($fh, $filename); if ($ENV{PAR_CLEAN} or !@_) { require File::Temp; if (defined &File::Temp::tempfile) { # under Win32, the file is created with O_TEMPORARY, # and will be deleted by the C runtime; having File::Temp # delete it has the only effect of giving ugly warnings ($fh, $filename) = File::Temp::tempfile( DIR => $PAR::SetupTemp::PARTemp, UNLINK => ($^O ne 'MSWin32' and $^O !~ /hpux/), ) or die "Cannot create temporary file: $!"; binmode($fh); return ($fh, 1, $filename); } } require File::Spec; # untainting tempfile path local $_ = File::Spec->catfile( $PAR::SetupTemp::PARTemp, $_[0] ); /^(.+)$/ and $filename = $1; if (-r $filename) { open $fh, '<', $filename or die $!; binmode($fh); return ($fh, 0, $filename); } open $fh, '+>', $filename or die $!; binmode($fh); return ($fh, 1, $filename); } # Given an Archive::Zip object, this generates a hash of # file_name_in_zip => file object # and returns a reference to that. # If we broke the encapsulation of A::Zip::Member and # accessed $member->{fileName} directly, that would be # *significantly* faster. sub _make_file_cache { my $zip = shift; if (not ref($zip)) { croak("_make_file_cache needs an Archive::Zip object as argument."); } my $cache = {}; foreach my $member ($zip->members) { $cache->{$member->fileName()} = $member; } return $cache; } # given an Archive::Zip object, this finds the cached hash # of Archive::Zip member names => members, # and returns all member objects whose file names match # a regexp # Without file caching, it just uses $zip->membersMatching sub _cached_members_matching { my $zip = shift; my $regex = shift; my $cache = $FileCache{$zip}; $cache = $FileCache{$zip} = _make_file_cache($zip) if not $cache; return map {$cache->{$_}} grep { $_ =~ $regex } keys %$cache; } # access named zip file member through cache. Fall # back to using Archive::Zip (slow) sub _cached_member_named { my $zip = shift; my $name = shift; my $cache = $FileCache{$zip}; $cache = $FileCache{$zip} = _make_file_cache($zip) if not $cache; return $cache->{$name}; } # Attempt to clean up the temporary directory if # --> We're running in clean mode # --> It's defined # --> It's an existing directory # --> It's empty END { if (exists $ENV{PAR_CLEAN} and $ENV{PAR_CLEAN} and exists $ENV{PAR_TEMP} and defined $ENV{PAR_TEMP} and -d $ENV{PAR_TEMP} ) { local($!); # paranoid: ignore potential errors without clobbering a global variable! rmdir($ENV{PAR_TEMP}); } } 1; __END__ #line 1214 FILEa08dc541/PAR/Dist.pmw`#line 1 "/usr/local/share/perl/5.8.8/PAR/Dist.pm" package PAR::Dist; use 5.006; use strict; require Exporter; use vars qw/$VERSION @ISA @EXPORT @EXPORT_OK $DEBUG/; $VERSION = '0.45'; @ISA = 'Exporter'; @EXPORT = qw/ blib_to_par install_par uninstall_par sign_par verify_par merge_par remove_man get_meta generate_blib_stub /; @EXPORT_OK = qw/ parse_dist_name contains_binaries /; $DEBUG = 0; use Carp qw/carp croak/; use File::Spec; #line 142 sub blib_to_par { @_ = (path => @_) if @_ == 1; my %args = @_; require Config; # don't use 'my $foo ... if ...' it creates a static variable! my $quiet = $args{quiet} || 0; my $dist; my $path = $args{path}; $dist = File::Spec->rel2abs($args{dist}) if $args{dist}; my $name = $args{name}; my $version = $args{version}; my $suffix = $args{suffix} || "$Config::Config{archname}-$Config::Config{version}.par"; my $cwd; if (defined $path) { require Cwd; $cwd = Cwd::cwd(); chdir $path; } _build_blib() unless -d "blib"; my @files; open MANIFEST, ">", File::Spec->catfile("blib", "MANIFEST") or die $!; open META, ">", File::Spec->catfile("blib", "META.yml") or die $!; require File::Find; File::Find::find( sub { next unless $File::Find::name; (-r && !-d) and push ( @files, substr($File::Find::name, 5) ); } , 'blib' ); print MANIFEST join( "\n", ' ', (sort @files), q( # ) ); close MANIFEST; if (open(OLD_META, "META.yml")) { while () { if (/^distribution_type:/) { print META "distribution_type: par\n"; } else { print META $_; } if (/^name:\s+(.*)/) { $name ||= $1; $name =~ s/::/-/g; } elsif (/^version:\s+.*Module::Build::Version/) { while () { /^\s+original:\s+(.*)/ or next; $version ||= $1; last; } } elsif (/^version:\s+(.*)/) { $version ||= $1; } } close OLD_META; close META; } if ((!$name or !$version) and open(MAKEFILE, "Makefile")) { while () { if (/^DISTNAME\s+=\s+(.*)$/) { $name ||= $1; } elsif (/^VERSION\s+=\s+(.*)$/) { $version ||= $1; } } } if (not defined($name) or not defined($version)) { # could not determine name or version. Error. my $what; if (not defined $name) { $what = 'name'; $what .= ' and version' if not defined $version; } elsif (not defined $version) { $what = 'version'; } carp("I was unable to determine the $what of the PAR distribution. Please create a Makefile or META.yml file from which we can infer the information or just specify the missing information as an option to blib_to_par."); return(); } $name =~ s/\s+$//; $version =~ s/\s+$//; my $file = "$name-$version-$suffix"; unlink $file if -f $file; print META << "YAML" if fileno(META); name: $name version: $version build_requires: {} conflicts: {} dist_name: $file distribution_type: par dynamic_config: 0 generated_by: 'PAR::Dist version $PAR::Dist::VERSION' license: unknown YAML close META; mkdir('blib', 0777); chdir('blib'); require Cwd; my $zipoutfile = File::Spec->catfile(File::Spec->updir, $file); _zip(dist => $zipoutfile); chdir(File::Spec->updir); unlink File::Spec->catfile("blib", "MANIFEST"); unlink File::Spec->catfile("blib", "META.yml"); $dist ||= File::Spec->catfile($cwd, $file) if $cwd; if ($dist and $file ne $dist) { if ( File::Copy::copy($file, $dist) ) { unlink $file; } else { die "Cannot copy $file: $!"; } $file = $dist; } my $pathname = File::Spec->rel2abs($file); if ($^O eq 'MSWin32') { $pathname =~ s!\\!/!g; $pathname =~ s!:!|!g; }; print << "." if !$quiet; Successfully created binary distribution '$file'. Its contents are accessible in compliant browsers as: jar:file://$pathname!/MANIFEST . chdir $cwd if $cwd; return $file; } sub _build_blib { if (-e 'Build') { _system_wrapper($^X, "Build"); } elsif (-e 'Makefile') { _system_wrapper($Config::Config{make}); } elsif (-e 'Build.PL') { _system_wrapper($^X, "Build.PL"); _system_wrapper($^X, "Build"); } elsif (-e 'Makefile.PL') { _system_wrapper($^X, "Makefile.PL"); _system_wrapper($Config::Config{make}); } } #line 397 sub install_par { my %args = &_args; _install_or_uninstall(%args, action => 'install'); } #line 418 sub uninstall_par { my %args = &_args; _install_or_uninstall(%args, action => 'uninstall'); } sub _install_or_uninstall { my %args = &_args; my $name = $args{name}; my $action = $args{action}; my %ENV_copy = %ENV; $ENV{PERL_INSTALL_ROOT} = $args{prefix} if defined $args{prefix}; require Cwd; my $old_dir = Cwd::cwd(); my ($dist, $tmpdir) = _unzip_to_tmpdir( dist => $args{dist}, subdir => 'blib' ); if ( open (META, File::Spec->catfile('blib', 'META.yml')) ) { while () { next unless /^name:\s+(.*)/; $name = $1; $name =~ s/\s+$//; last; } close META; } return if not defined $name or $name eq ''; if (-d 'script') { require ExtUtils::MY; foreach my $file (glob("script/*")) { next unless -T $file; ExtUtils::MY->fixin($file); chmod(0555, $file); } } $name =~ s{::|-}{/}g; require ExtUtils::Install; if ($action eq 'install') { my $target = _installation_target( File::Spec->curdir, $name, \%args ); my $custom_targets = $args{custom_targets} || {}; $target->{$_} = $custom_targets->{$_} foreach keys %{$custom_targets}; my $uninstall_shadows = $args{uninstall_shadows}; my $verbose = $args{verbose}; ExtUtils::Install::install($target, $verbose, 0, $uninstall_shadows); } elsif ($action eq 'uninstall') { require Config; my $verbose = $args{verbose}; ExtUtils::Install::uninstall( $args{packlist_read}||"$Config::Config{installsitearch}/auto/$name/.packlist", $verbose ); } %ENV = %ENV_copy; chdir($old_dir); File::Path::rmtree([$tmpdir]); return 1; } # Returns the default installation target as used by # ExtUtils::Install::install(). First parameter should be the base # directory containing the blib/ we're installing from. # Second parameter should be the name of the distribution for the packlist # paths. Third parameter may be a hash reference with user defined keys for # the target hash. In fact, any contents that do not start with 'inst_' are # skipped. sub _installation_target { require Config; my $dir = shift; my $name = shift; my $user = shift || {}; # accepted sources (and user overrides) my %sources = ( inst_lib => File::Spec->catdir($dir,"blib","lib"), inst_archlib => File::Spec->catdir($dir,"blib","arch"), inst_bin => File::Spec->catdir($dir,'blib','bin'), inst_script => File::Spec->catdir($dir,'blib','script'), inst_man1dir => File::Spec->catdir($dir,'blib','man1'), inst_man3dir => File::Spec->catdir($dir,'blib','man3'), packlist_read => 'read', packlist_write => 'write', ); my $par_has_archlib = _directory_not_empty( $sources{inst_archlib} ); # default targets my $target = { read => $Config::Config{sitearchexp}."/auto/$name/.packlist", write => $Config::Config{installsitearch}."/auto/$name/.packlist", $sources{inst_lib} => ($par_has_archlib ? $Config::Config{installsitearch} : $Config::Config{installsitelib}), $sources{inst_archlib} => $Config::Config{installsitearch}, $sources{inst_bin} => $Config::Config{installbin} , $sources{inst_script} => $Config::Config{installscript}, $sources{inst_man1dir} => $Config::Config{installman1dir}, $sources{inst_man3dir} => $Config::Config{installman3dir}, }; # Included for future support for ${flavour}perl external lib installation # if ($Config::Config{flavour_perl}) { # my $ext = File::Spec->catdir($dir, 'blib', 'ext'); # # from => to # $sources{inst_external_lib} = File::Spec->catdir($ext, 'lib'); # $sources{inst_external_bin} = File::Spec->catdir($ext, 'bin'); # $sources{inst_external_include} = File::Spec->catdir($ext, 'include'); # $sources{inst_external_src} = File::Spec->catdir($ext, 'src'); # $target->{ $sources{inst_external_lib} } = $Config::Config{flavour_install_lib}; # $target->{ $sources{inst_external_bin} } = $Config::Config{flavour_install_bin}; # $target->{ $sources{inst_external_include} } = $Config::Config{flavour_install_include}; # $target->{ $sources{inst_external_src} } = $Config::Config{flavour_install_src}; # } # insert user overrides foreach my $key (keys %$user) { my $value = $user->{$key}; if (not defined $value and $key ne 'packlist_read' and $key ne 'packlist_write') { # undef means "remove" delete $target->{ $sources{$key} }; } elsif (exists $sources{$key}) { # overwrite stuff, don't let the user create new entries $target->{ $sources{$key} } = $value; } } # apply the automatic inst_lib => inst_archlib conversion again # if the user asks for it and there is an archlib in the .par if ($user->{auto_inst_lib_conversion} and $par_has_archlib) { $target->{inst_lib} = $target->{inst_archlib}; } return $target; } sub _directory_not_empty { require File::Find; my($dir) = @_; my $files = 0; File::Find::find(sub { return if $_ eq ".exists"; if (-f) { $File::Find::prune++; $files = 1; } }, $dir); return $files; } #line 585 sub sign_par { my %args = &_args; _verify_or_sign(%args, action => 'sign'); } #line 600 sub verify_par { my %args = &_args; $! = _verify_or_sign(%args, action => 'verify'); return ( $! == Module::Signature::SIGNATURE_OK() ); } #line 629 sub merge_par { my $base_par = shift; my @additional_pars = @_; require Cwd; require File::Copy; require File::Path; require File::Find; # parameter checking if (not defined $base_par) { croak "First argument to merge_par() must be the .par archive to modify."; } if (not -f $base_par or not -r _ or not -w _) { croak "'$base_par' is not a file or you do not have enough permissions to read and modify it."; } foreach (@additional_pars) { if (not -f $_ or not -r _) { croak "'$_' is not a file or you do not have enough permissions to read it."; } } # The unzipping will change directories. Remember old dir. my $old_cwd = Cwd::cwd(); # Unzip the base par to a temp. dir. (undef, my $base_dir) = _unzip_to_tmpdir( dist => $base_par, subdir => 'blib' ); my $blibdir = File::Spec->catdir($base_dir, 'blib'); # move the META.yml to the (main) temp. dir. my $main_meta_file = File::Spec->catfile($base_dir, 'META.yml'); File::Copy::move( File::Spec->catfile($blibdir, 'META.yml'), $main_meta_file ); # delete (incorrect) MANIFEST unlink File::Spec->catfile($blibdir, 'MANIFEST'); # extract additional pars and merge foreach my $par (@additional_pars) { # restore original directory because the par path # might have been relative! chdir($old_cwd); (undef, my $add_dir) = _unzip_to_tmpdir( dist => $par ); # merge the meta (at least the provides info) into the main meta.yml my $meta_file = File::Spec->catfile($add_dir, 'META.yml'); if (-f $meta_file) { _merge_meta($main_meta_file, $meta_file); } my @files; my @dirs; # I hate File::Find # And I hate writing portable code, too. File::Find::find( {wanted =>sub { my $file = $File::Find::name; push @files, $file if -f $file; push @dirs, $file if -d _; }}, $add_dir ); my ($vol, $subdir, undef) = File::Spec->splitpath( $add_dir, 1); my @dir = File::Spec->splitdir( $subdir ); # merge directory structure foreach my $dir (@dirs) { my ($v, $d, undef) = File::Spec->splitpath( $dir, 1 ); my @d = File::Spec->splitdir( $d ); shift @d foreach @dir; # remove tmp dir from path my $target = File::Spec->catdir( $blibdir, @d ); mkdir($target); } # merge files foreach my $file (@files) { my ($v, $d, $f) = File::Spec->splitpath( $file ); my @d = File::Spec->splitdir( $d ); shift @d foreach @dir; # remove tmp dir from path my $target = File::Spec->catfile( File::Spec->catdir( $blibdir, @d ), $f ); File::Copy::copy($file, $target) or die "Could not copy '$file' to '$target': $!"; } chdir($old_cwd); File::Path::rmtree([$add_dir]); } # delete (copied) MANIFEST and META.yml unlink File::Spec->catfile($blibdir, 'MANIFEST'); unlink File::Spec->catfile($blibdir, 'META.yml'); chdir($base_dir); my $resulting_par_file = Cwd::abs_path(blib_to_par(quiet => 1)); chdir($old_cwd); File::Copy::move($resulting_par_file, $base_par); File::Path::rmtree([$base_dir]); } sub _merge_meta { my $meta_orig_file = shift; my $meta_extra_file = shift; return() if not defined $meta_orig_file or not -f $meta_orig_file; return 1 if not defined $meta_extra_file or not -f $meta_extra_file; my $yaml_functions = _get_yaml_functions(); die "Cannot merge META.yml files without a YAML reader/writer" if !exists $yaml_functions->{LoadFile} or !exists $yaml_functions->{DumpFile}; my $orig_meta = $yaml_functions->{LoadFile}->($meta_orig_file); my $extra_meta = $yaml_functions->{LoadFile}->($meta_extra_file); # I seem to remember there was this incompatibility between the different # YAML implementations with regards to "document" handling: my $orig_tree = (ref($orig_meta) eq 'ARRAY' ? $orig_meta->[0] : $orig_meta); my $extra_tree = (ref($extra_meta) eq 'ARRAY' ? $extra_meta->[0] : $extra_meta); _merge_provides($orig_tree, $extra_tree); _merge_requires($orig_tree, $extra_tree); $yaml_functions->{DumpFile}->($meta_orig_file, $orig_meta); return 1; } # merge the two-level provides sections of META.yml sub _merge_provides { my $orig_hash = shift; my $extra_hash = shift; return() if not exists $extra_hash->{provides}; $orig_hash->{provides} ||= {}; my $orig_provides = $orig_hash->{provides}; my $extra_provides = $extra_hash->{provides}; # two level clone is enough wrt META spec 1.4 # overwrite the original provides since we're also overwriting the files. foreach my $module (keys %$extra_provides) { my $extra_mod_hash = $extra_provides->{$module}; my %mod_hash; $mod_hash{$_} = $extra_mod_hash->{$_} for keys %$extra_mod_hash; $orig_provides->{$module} = \%mod_hash; } } # merge the single-level requires-like sections of META.yml sub _merge_requires { my $orig_hash = shift; my $extra_hash = shift; foreach my $type (qw(requires build_requires configure_requires recommends)) { next if not exists $extra_hash->{$type}; $orig_hash->{$type} ||= {}; # one level clone is enough wrt META spec 1.4 foreach my $module (keys %{ $extra_hash->{$type} }) { # FIXME there should be a version comparison here, BUT how are we going to do that without a guaranteed version.pm? $orig_hash->{$type}{$module} = $extra_hash->{$type}{$module}; # assign version and module name } } } #line 818 sub remove_man { my %args = &_args; my $par = $args{dist}; require Cwd; require File::Copy; require File::Path; require File::Find; # parameter checking if (not defined $par) { croak "First argument to remove_man() must be the .par archive to modify."; } if (not -f $par or not -r _ or not -w _) { croak "'$par' is not a file or you do not have enough permissions to read and modify it."; } # The unzipping will change directories. Remember old dir. my $old_cwd = Cwd::cwd(); # Unzip the base par to a temp. dir. (undef, my $base_dir) = _unzip_to_tmpdir( dist => $par, subdir => 'blib' ); my $blibdir = File::Spec->catdir($base_dir, 'blib'); # move the META.yml to the (main) temp. dir. File::Copy::move( File::Spec->catfile($blibdir, 'META.yml'), File::Spec->catfile($base_dir, 'META.yml') ); # delete (incorrect) MANIFEST unlink File::Spec->catfile($blibdir, 'MANIFEST'); opendir DIRECTORY, 'blib' or die $!; my @dirs = grep { /^blib\/(?:man\d*|html)$/ } grep { -d $_ } map { File::Spec->catfile('blib', $_) } readdir DIRECTORY; close DIRECTORY; File::Path::rmtree(\@dirs); chdir($base_dir); my $resulting_par_file = Cwd::abs_path(blib_to_par()); chdir($old_cwd); File::Copy::move($resulting_par_file, $par); File::Path::rmtree([$base_dir]); } #line 884 sub get_meta { my %args = &_args; my $dist = $args{dist}; return undef if not defined $dist or not -r $dist; require Cwd; require File::Path; # The unzipping will change directories. Remember old dir. my $old_cwd = Cwd::cwd(); # Unzip the base par to a temp. dir. (undef, my $base_dir) = _unzip_to_tmpdir( dist => $dist, subdir => 'blib' ); my $blibdir = File::Spec->catdir($base_dir, 'blib'); my $meta = File::Spec->catfile($blibdir, 'META.yml'); if (not -r $meta) { return undef; } open FH, '<', $meta or die "Could not open file '$meta' for reading: $!"; local $/ = undef; my $meta_text = ; close FH; chdir($old_cwd); File::Path::rmtree([$base_dir]); return $meta_text; } sub _unzip { my %args = &_args; my $dist = $args{dist}; my $path = $args{path} || File::Spec->curdir; return unless -f $dist; # Try fast unzipping first if (eval { require Archive::Unzip::Burst; 1 }) { my $return = !Archive::Unzip::Burst::unzip($dist, $path); return if $return; # true return value == error (a la system call) } # Then slow unzipping if (eval { require Archive::Zip; 1 }) { my $zip = Archive::Zip->new; local %SIG; $SIG{__WARN__} = sub { print STDERR $_[0] unless $_[0] =~ /\bstat\b/ }; return unless $zip->read($dist) == Archive::Zip::AZ_OK() and $zip->extractTree('', "$path/") == Archive::Zip::AZ_OK(); } # Then fall back to the system else { undef $!; if (_system_wrapper(unzip => $dist, '-d', $path)) { die "Failed to unzip '$dist' to path '$path': Could neither load " . "Archive::Zip nor (successfully) run the system 'unzip' (unzip said: $!)"; } } return 1; } sub _zip { my %args = &_args; my $dist = $args{dist}; if (eval { require Archive::Zip; 1 }) { my $zip = Archive::Zip->new; $zip->addTree( File::Spec->curdir, '' ); $zip->writeToFileNamed( $dist ) == Archive::Zip::AZ_OK() or die $!; } else { undef $!; if (_system_wrapper(qw(zip -r), $dist, File::Spec->curdir)) { die "Failed to zip '" .File::Spec->curdir(). "' to '$dist': Could neither load " . "Archive::Zip nor (successfully) run the system 'zip' (zip said: $!)"; } } return 1; } # This sub munges the arguments to most of the PAR::Dist functions # into a hash. On the way, it downloads PAR archives as necessary, etc. sub _args { # default to the first .par in the CWD if (not @_) { @_ = (glob('*.par'))[0]; } # single argument => it's a distribution file name or URL @_ = (dist => @_) if @_ == 1; my %args = @_; $args{name} ||= $args{dist}; # If we are installing from an URL, we want to munge the # distribution name so that it is in form "Module-Name" if (defined $args{name}) { $args{name} =~ s/^\w+:\/\///; my @elems = parse_dist_name($args{name}); # @elems is name, version, arch, perlversion if (defined $elems[0]) { $args{name} = $elems[0]; } else { $args{name} =~ s/^.*\/([^\/]+)$/$1/; $args{name} =~ s/^([0-9A-Za-z_-]+)-\d+\..+$/$1/; } } # append suffix if there is none if ($args{dist} and not $args{dist} =~ /\.[a-zA-Z_][^.]*$/) { require Config; my $suffix = $args{suffix}; $suffix ||= "$Config::Config{archname}-$Config::Config{version}.par"; $args{dist} .= "-$suffix"; } # download if it's an URL if ($args{dist} and $args{dist} =~ m!^\w+://!) { $args{dist} = _fetch(dist => $args{dist}) } return %args; } # Download PAR archive, but only if necessary (mirror!) my %escapes; sub _fetch { my %args = @_; if ($args{dist} =~ s/^file:\/\///) { return $args{dist} if -e $args{dist}; return; } require LWP::Simple; $ENV{PAR_TEMP} ||= File::Spec->catdir(File::Spec->tmpdir, 'par'); mkdir $ENV{PAR_TEMP}, 0777; %escapes = map { chr($_) => sprintf("%%%02X", $_) } 0..255 unless %escapes; $args{dist} =~ s{^cpan://((([a-zA-Z])[a-zA-Z])[-_a-zA-Z]+)/} {http://www.cpan.org/modules/by-authors/id/\U$3/$2/$1\E/}; my $file = $args{dist}; $file =~ s/([^\w\.])/$escapes{$1}/g; $file = File::Spec->catfile( $ENV{PAR_TEMP}, $file); my $rc = LWP::Simple::mirror( $args{dist}, $file ); if (!LWP::Simple::is_success($rc) and $rc != 304) { die "Error $rc: ", LWP::Simple::status_message($rc), " ($args{dist})\n"; } return $file if -e $file; return; } sub _verify_or_sign { my %args = &_args; require File::Path; require Module::Signature; die "Module::Signature version 0.25 required" unless Module::Signature->VERSION >= 0.25; require Cwd; my $cwd = Cwd::cwd(); my $action = $args{action}; my ($dist, $tmpdir) = _unzip_to_tmpdir($args{dist}); $action ||= (-e 'SIGNATURE' ? 'verify' : 'sign'); if ($action eq 'sign') { open FH, '>SIGNATURE' unless -e 'SIGNATURE'; open FH, 'MANIFEST' or die $!; local $/; my $out = ; if ($out !~ /^SIGNATURE(?:\s|$)/m) { $out =~ s/^(?!\s)/SIGNATURE\n/m; open FH, '>MANIFEST' or die $!; print FH $out; } close FH; $args{overwrite} = 1 unless exists $args{overwrite}; $args{skip} = 0 unless exists $args{skip}; } my $rv = Module::Signature->can($action)->(%args); _zip(dist => $dist) if $action eq 'sign'; File::Path::rmtree([$tmpdir]); chdir($cwd); return $rv; } sub _unzip_to_tmpdir { my %args = &_args; require File::Temp; my $dist = File::Spec->rel2abs($args{dist}); my $tmpdirname = File::Spec->catdir(File::Spec->tmpdir, "parXXXXX"); my $tmpdir = File::Temp::mkdtemp($tmpdirname) or die "Could not create temporary directory from template '$tmpdirname': $!"; my $path = $tmpdir; $path = File::Spec->catdir($tmpdir, $args{subdir}) if defined $args{subdir}; _unzip(dist => $dist, path => $path); chdir $tmpdir; return ($dist, $tmpdir); } #line 1132 sub parse_dist_name { my $file = shift; return(undef, undef, undef, undef) if not defined $file; (undef, undef, $file) = File::Spec->splitpath($file); my $version = qr/v?(?:\d+(?:_\d+)?|\d*(?:\.\d+(?:_\d+)?)+)/; $file =~ s/\.(?:par|tar\.gz|tar)$//i; my @elem = split /-/, $file; my (@dn, $dv, @arch, $pv); while (@elem) { my $e = shift @elem; if ( $e =~ /^$version$/o and not(# if not next token also a version # (assumes an arch string doesnt start with a version...) @elem and $elem[0] =~ /^$version$/o ) ) { $dv = $e; last; } push @dn, $e; } my $dn; $dn = join('-', @dn) if @dn; if (not @elem) { return( $dn, $dv, undef, undef); } while (@elem) { my $e = shift @elem; if ($e =~ /^$version|any_version$/) { $pv = $e; last; } push @arch, $e; } my $arch; $arch = join('-', @arch) if @arch; return($dn, $dv, $arch, $pv); } #line 1209 sub generate_blib_stub { my %args = &_args; my $dist = $args{dist}; require Config; my $name = $args{name}; my $version = $args{version}; my $suffix = $args{suffix}; my ($parse_name, $parse_version, $archname, $perlversion) = parse_dist_name($dist); $name ||= $parse_name; $version ||= $parse_version; $suffix = "$archname-$perlversion" if (not defined $suffix or $suffix eq '') and $archname and $perlversion; $suffix ||= "$Config::Config{archname}-$Config::Config{version}"; if ( grep { not defined $_ } ($name, $version, $suffix) ) { warn "Could not determine distribution meta information from distribution name '$dist'"; return(); } $suffix =~ s/\.par$//; if (not -f 'META.yml') { open META, '>', 'META.yml' or die "Could not open META.yml file for writing: $!"; print META << "YAML" if fileno(META); name: $name version: $version build_requires: {} conflicts: {} dist_name: $name-$version-$suffix.par distribution_type: par dynamic_config: 0 generated_by: 'PAR::Dist version $PAR::Dist::VERSION' license: unknown YAML close META; } mkdir('blib'); mkdir(File::Spec->catdir('blib', 'lib')); mkdir(File::Spec->catdir('blib', 'script')); return 1; } #line 1277 sub contains_binaries { require File::Find; my %args = &_args; my $dist = $args{dist}; return undef if not defined $dist or not -r $dist; require Cwd; require File::Path; # The unzipping will change directories. Remember old dir. my $old_cwd = Cwd::cwd(); # Unzip the base par to a temp. dir. (undef, my $base_dir) = _unzip_to_tmpdir( dist => $dist, subdir => 'blib' ); my $blibdir = File::Spec->catdir($base_dir, 'blib'); my $archdir = File::Spec->catdir($blibdir, 'arch'); my $found = 0; File::Find::find( sub { $found++ if -f $_ and not /^\.exists$/; }, $archdir ); chdir($old_cwd); File::Path::rmtree([$base_dir]); return $found ? 1 : 0; } sub _system_wrapper { if ($DEBUG) { Carp::cluck("Running system call '@_' from:"); } return system(@_); } # stolen from Module::Install::Can # very much internal and subject to change or removal sub _MI_can_run { require ExtUtils::MakeMaker; my ($cmd) = @_; my $_cmd = $cmd; return $_cmd if (-x $_cmd or $_cmd = MM->maybe_command($_cmd)); for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') { my $abs = File::Spec->catfile($dir, $cmd); return $abs if (-x $abs or $abs = MM->maybe_command($abs)); } return; } # Tries to load any YAML reader writer I know of # returns nothing on failure or hash reference containing # a subset of Load, Dump, LoadFile, DumpFile # entries with sub references on success. sub _get_yaml_functions { # reasoning for the ranking here: # - syck is fast and reasonably complete # - YAML.pm is slow and aging # - Tiny is only a very small subset # - XS is very new and I'm not sure it's ready for prime-time yet # - Parse... is only a reader and only deals with the same subset as ::Tiny my @modules = qw(YAML::Syck YAML YAML::Tiny YAML::XS Parse::CPAN::Meta); my %yaml_functions; foreach my $module (@modules) { eval "require $module;"; if (!$@) { warn "PAR::Dist testers/debug info: Using '$module' as YAML implementation" if $DEBUG; foreach my $sub (qw(Load Dump LoadFile DumpFile)) { no strict 'refs'; my $subref = *{"${module}::$sub"}{CODE}; if (defined $subref and ref($subref) eq 'CODE') { $yaml_functions{$sub} = $subref; } } $yaml_functions{yaml_provider} = $module; last; } } # end foreach module candidates if (not keys %yaml_functions) { warn "Cannot find a working YAML reader/writer implementation. Tried to load all of '@modules'"; } return(\%yaml_functions); } sub _check_tools { my $tools = _get_yaml_functions(); if ($DEBUG) { foreach (qw/Load Dump LoadFile DumpFile/) { warn "No YAML support for $_ found.\n" if not defined $tools->{$_}; } } $tools->{zip} = undef; if (eval {require Archive::Zip; 1;}) { warn "Using Archive::Zip as ZIP tool.\n" if $DEBUG; $tools->{zip} = 'Archive::Zip'; } elsif (_MI_can_run("zip") and _MI_can_run("unzip")) { warn "Using zip/unzip as ZIP tool.\n" if $DEBUG; $tools->{zip} = 'zip'; } else { warn "Found neither Archive::Zip nor ZIP/UNZIP as valid ZIP tools.\n" if $DEBUG; $tools->{zip} = undef; } return $tools; } 1; #line 1425 FILE1819963a/PAR/Filter.pmw#line 1 "/usr/local/share/perl/5.8.8/PAR/Filter.pm" package PAR::Filter; use 5.006; use strict; use warnings; our $VERSION = '0.03'; #line 64 sub new { my $class = shift; require "PAR/Filter/$_.pm" foreach @_; bless(\@_, $class); } sub apply { my ($self, $ref, $name) = @_; my $filename = $name || '-e'; if (!ref $ref) { $name ||= $filename = $ref; local $/; open my $fh, $ref or die $!; binmode($fh); my $content = <$fh>; $ref = \$content; return $ref unless length($content); } "PAR::Filter::$_"->new->apply( $ref, $filename, $name ) foreach @$self; return $ref; } 1; #line 106 FILEeb4ee2aa/PAR/Filter/PodStrip.pm#line 1 "/usr/local/share/perl/5.8.8/PAR/Filter/PodStrip.pm" package PAR::Filter::PodStrip; use 5.006; use strict; use warnings; use base 'PAR::Filter'; #line 22 sub apply { my ($class, $ref, $filename, $name) = @_; no warnings 'uninitialized'; my $data = ''; $data = $1 if $$ref =~ s/((?:^__DATA__\r?\n).*)//ms; my $line = 1; if ($$ref =~ /^=(?:head\d|pod|begin|item|over|for|back|end|cut|encoding)\b/) { $$ref = "\n$$ref"; $line--; } $$ref =~ s{( (.*?\n) (?:=(?:head\d|pod|begin|item|over|for|back|end|encoding)\b .*?\n) (?:=cut[\t ]*[\r\n]*?|\Z) (\r?\n)? )}{ my ($pre, $post) = ($2, $3); "$pre#line " . ( $line += ( () = ( $1 =~ /\n/g ) ) ) . $post; }gsex; $$ref = '#line 1 "' . ($filename) . "\"\n" . $$ref if length $filename; $$ref =~ s/^#line 1 (.*\n)(#!.*\n)/$2#line 2 $1/g; $$ref .= $data; } 1; #line 83 FILE4cde0143/PAR/Heavy.pmh#line 1 "/usr/local/share/perl/5.8.8/PAR/Heavy.pm" package PAR::Heavy; $PAR::Heavy::VERSION = '0.11'; #line 17 ######################################################################## # Dynamic inclusion of XS modules my ($bootstrap, $dl_findfile); # Caches for code references my ($dlext); # Cache for $Config{dlext} my ($cache_key); # The current file to find my $is_insensitive_fs = ( -s $0 and (-s lc($0) || -1) == (-s uc($0) || -1) and (-s lc($0) || -1) == -s $0 ); # Adds pre-hooks to Dynaloader's key methods sub _init_dynaloader { return if $bootstrap; return unless eval { require DynaLoader; DynaLoader::dl_findfile(); 1 }; $bootstrap = \&DynaLoader::bootstrap; $dl_findfile = \&DynaLoader::dl_findfile; local $^W; *{'DynaLoader::dl_expandspec'} = sub { return }; *{'DynaLoader::bootstrap'} = \&_bootstrap; *{'DynaLoader::dl_findfile'} = \&_dl_findfile; } # Return the cached location of .dll inside PAR first, if possible. sub _dl_findfile { return $FullCache{$cache_key} if exists $FullCache{$cache_key}; if ($is_insensitive_fs) { # We have a case-insensitive filesystem... my ($key) = grep { lc($_) eq lc($cache_key) } keys %FullCache; return $FullCache{$key} if defined $key; } return $dl_findfile->(@_); } # Find and extract .dll from PAR files for a given dynamic module. sub _bootstrap { my (@args) = @_; my ($module) = $args[0] or return; my @modparts = split(/::/, $module); my $modfname = $modparts[-1]; $modfname = &DynaLoader::mod2fname(\@modparts) if defined &DynaLoader::mod2fname; if (($^O eq 'NetWare') && (length($modfname) > 8)) { $modfname = substr($modfname, 0, 8); } # XXX: Multi-platform .dll support in PARs needs better than $Config. # FIXME: Config is always loaded by PAR.pm! $dlext ||= do { require Config; (defined %Config::Config) ? $Config::Config{dlext} : ''; }; my $modpname = join((($^O eq 'MacOS') ? ':' : '/'), @modparts); my $file = $cache_key = "auto/$modpname/$modfname.$dlext"; if ($FullCache{$file}) { local $DynaLoader::do_expand = 1; return $bootstrap->(@args); } my $member; $member = PAR::_find_par_any(undef, $file, 1) if defined &PAR::_find_par_any; return $bootstrap->(@args) unless $member; # we failed to find the dll, let DynaLoader (try or) throw an error $FullCache{$file} = _dl_extract($member, $file); # Now extract all associated shared objs in the same auto/ dir # XXX: shouldn't this also set $FullCache{...} for those files? my $first = $member->fileName; my $path_pattern = $first; $path_pattern =~ s{[^/]*$}{}; if ($PAR::LastAccessedPAR) { foreach my $member ( $PAR::LastAccessedPAR->members ) { next if $member->isDirectory; my $name = $member->fileName; next if $name eq $first; next unless $name =~ m{^/?\Q$path_pattern\E\/[^/]*\.\Q$dlext\E[^/]*$}; $name =~ s{.*/}{}; _dl_extract($member, $file, $name); } } local $DynaLoader::do_expand = 1; return $bootstrap->(@args); } sub _dl_extract { my ($member, $file, $name) = @_; require File::Spec; require File::Temp; my ($fh, $filename); # fix borked tempdir from earlier versions if ($ENV{PAR_TEMP} and -e $ENV{PAR_TEMP} and !-d $ENV{PAR_TEMP}) { unlink($ENV{PAR_TEMP}); mkdir($ENV{PAR_TEMP}, 0755); } if ($ENV{PAR_CLEAN} and !$name) { ($fh, $filename) = File::Temp::tempfile( DIR => ($ENV{PAR_TEMP} || File::Spec->tmpdir), SUFFIX => ".$dlext", UNLINK => ($^O ne 'MSWin32' and $^O !~ /hpux/), ); ($filename) = $filename =~ /^([\x20-\xff]+)$/; } else { $filename = File::Spec->catfile( ($ENV{PAR_TEMP} || File::Spec->tmpdir), ($name || ($member->crc32String . ".$dlext")) ); ($filename) = $filename =~ /^([\x20-\xff]+)$/; open $fh, '>', $filename or die $! unless -r $filename and -e _ and -s _ == $member->uncompressedSize; } if ($fh) { binmode($fh); $member->extractToFileHandle($fh); close $fh; chmod 0755, $filename; } return $filename; } 1; #line 183 FILE006159fd/PAR/SetupProgname.pm#line 1 "/usr/local/share/perl/5.8.8/PAR/SetupProgname.pm" package PAR::SetupProgname; $PAR::VERSION = '0.982'; use 5.006; use strict; use warnings; use Config (); #line 26 # for PAR internal use only! our $Progname = $ENV{PAR_PROGNAME} || $0; # same code lives in PAR::Packer's par.pl! sub set_progname { require File::Spec; if (defined $ENV{PAR_PROGNAME} and $ENV{PAR_PROGNAME} =~ /(.+)/) { $Progname = $1; } $Progname = $0 if not defined $Progname; if (( () = File::Spec->splitdir($Progname) ) > 1 or !$ENV{PAR_PROGNAME}) { if (open my $fh, $Progname) { return if -s $fh; } if (-s "$Progname$Config::Config{_exe}") { $Progname .= $Config::Config{_exe}; return; } } foreach my $dir (split /\Q$Config::Config{path_sep}\E/, $ENV{PATH}) { next if exists $ENV{PAR_TEMP} and $dir eq $ENV{PAR_TEMP}; my $name = File::Spec->catfile($dir, "$Progname$Config::Config{_exe}"); if (-s $name) { $Progname = $name; last } $name = File::Spec->catfile($dir, "$Progname"); if (-s $name) { $Progname = $name; last } } } 1; __END__ #line 92 FILEda1e51bf/PAR/SetupTemp.pm #line 1 "/usr/local/share/perl/5.8.8/PAR/SetupTemp.pm" package PAR::SetupTemp; $PAR::VERSION = '0.982'; use 5.006; use strict; use warnings; use PAR::SetupProgname; #line 29 # for PAR internal use only! our $PARTemp; # The C version of this code appears in myldr/mktmpdir.c # This code also lives in PAR::Packer's par.pl as _set_par_temp! sub set_par_temp_env { PAR::SetupProgname::set_progname() unless defined $PAR::SetupProgname::Progname; if (defined $ENV{PAR_TEMP} and $ENV{PAR_TEMP} =~ /(.+)/) { $PARTemp = $1; return; } my $stmpdir = _get_par_user_tempdir(); require File::Spec; if (defined $stmpdir) { # it'd be quite bad if this was not the case if (!$ENV{PAR_CLEAN} and my $mtime = (stat($PAR::SetupProgname::Progname))[9]) { my $ctx = _get_digester(); # Workaround for bug in Digest::SHA 5.38 and 5.39 my $sha_version = eval { $Digest::SHA::VERSION } || 0; if ($sha_version eq '5.38' or $sha_version eq '5.39') { $ctx->addfile($PAR::SetupProgname::Progname, "b") if ($ctx); } else { if ($ctx and open(my $fh, "<$PAR::SetupProgname::Progname")) { binmode($fh); $ctx->addfile($fh); close($fh); } } $stmpdir = File::Spec->catdir( $stmpdir, "cache-" . ( $ctx ? $ctx->hexdigest : $mtime ) ); } else { $ENV{PAR_CLEAN} = 1; $stmpdir = File::Spec->catdir($stmpdir, "temp-$$"); } $ENV{PAR_TEMP} = $stmpdir; mkdir $stmpdir, 0755; } # end if found a temp dir $PARTemp = $1 if defined $ENV{PAR_TEMP} and $ENV{PAR_TEMP} =~ /(.+)/; } # Find any digester # Used in PAR::Repository::Client! sub _get_digester { my $ctx = eval { require Digest::SHA; Digest::SHA->new(1) } || eval { require Digest::SHA1; Digest::SHA1->new } || eval { require Digest::MD5; Digest::MD5->new }; return $ctx; } # find the per-user temporary directory (eg /tmp/par-$USER) # Used in PAR::Repository::Client! sub _get_par_user_tempdir { my $username = _find_username(); my $temp_path; foreach my $path ( (map $ENV{$_}, qw( PAR_TMPDIR TMPDIR TEMPDIR TEMP TMP )), qw( C:\\TEMP /tmp . ) ) { next unless defined $path and -d $path and -w $path; $temp_path = File::Spec->catdir($path, "par-$username"); ($temp_path) = $temp_path =~ /^(.*)$/s; mkdir $temp_path, 0755; last; } return $temp_path; } # tries hard to find out the name of the current user sub _find_username { my $username; my $pwuid; # does not work everywhere: eval {($pwuid) = getpwuid($>) if defined $>;}; if ( defined(&Win32::LoginName) ) { $username = &Win32::LoginName; } elsif (defined $pwuid) { $username = $pwuid; } else { $username = $ENV{USERNAME} || $ENV{USER} || 'SYSTEM'; } $username =~ s/\W/_/g; return $username; } 1; __END__ #line 162 FILEaaa59b6e/Time/Local.pm#line 1 "/usr/local/share/perl/5.8.8/Time/Local.pm" package Time::Local; require Exporter; use Carp; use Config; use strict; use integer; use vars qw( $VERSION @ISA @EXPORT @EXPORT_OK ); $VERSION = '1.1901'; @ISA = qw( Exporter ); @EXPORT = qw( timegm timelocal ); @EXPORT_OK = qw( timegm_nocheck timelocal_nocheck ); my @MonthDays = ( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ); # Determine breakpoint for rolling century my $ThisYear = ( localtime() )[5]; my $Breakpoint = ( $ThisYear + 50 ) % 100; my $NextCentury = $ThisYear - $ThisYear % 100; $NextCentury += 100 if $Breakpoint < 50; my $Century = $NextCentury - 100; my $SecOff = 0; my ( %Options, %Cheat ); use constant SECS_PER_MINUTE => 60; use constant SECS_PER_HOUR => 3600; use constant SECS_PER_DAY => 86400; my $MaxInt; if ( $^O eq 'MacOS' ) { # time_t is unsigned... $MaxInt = ( 1 << ( 8 * $Config{ivsize} ) ) - 1; } else { $MaxInt = ( ( 1 << ( 8 * $Config{ivsize} - 2 ) ) - 1 ) * 2 + 1; } my $MaxDay = int( ( $MaxInt - ( SECS_PER_DAY / 2 ) ) / SECS_PER_DAY ) - 1; # Determine the EPOC day for this machine my $Epoc = 0; if ( $^O eq 'vos' ) { # work around posix-977 -- VOS doesn't handle dates in the range # 1970-1980. $Epoc = _daygm( 0, 0, 0, 1, 0, 70, 4, 0 ); } elsif ( $^O eq 'MacOS' ) { $MaxDay *=2 if $^O eq 'MacOS'; # time_t unsigned ... quick hack? # MacOS time() is seconds since 1 Jan 1904, localtime # so we need to calculate an offset to apply later $Epoc = 693901; $SecOff = timelocal( localtime(0)) - timelocal( gmtime(0) ) ; $Epoc += _daygm( gmtime(0) ); } else { $Epoc = _daygm( gmtime(0) ); } %Cheat = (); # clear the cache as epoc has changed sub _daygm { # This is written in such a byzantine way in order to avoid # lexical variables and sub calls, for speed return $_[3] + ( $Cheat{ pack( 'ss', @_[ 4, 5 ] ) } ||= do { my $month = ( $_[4] + 10 ) % 12; my $year = ( $_[5] + 1900 ) - ( $month / 10 ); ( ( 365 * $year ) + ( $year / 4 ) - ( $year / 100 ) + ( $year / 400 ) + ( ( ( $month * 306 ) + 5 ) / 10 ) ) - $Epoc; } ); } sub _timegm { my $sec = $SecOff + $_[0] + ( SECS_PER_MINUTE * $_[1] ) + ( SECS_PER_HOUR * $_[2] ); return $sec + ( SECS_PER_DAY * &_daygm ); } sub timegm { my ( $sec, $min, $hour, $mday, $month, $year ) = @_; if ( $year >= 1000 ) { $year -= 1900; } elsif ( $year < 100 and $year >= 0 ) { $year += ( $year > $Breakpoint ) ? $Century : $NextCentury; } unless ( $Options{no_range_check} ) { croak "Month '$month' out of range 0..11" if $month > 11 or $month < 0; my $md = $MonthDays[$month]; ++$md if $month == 1 && _is_leap_year( $year + 1900 ); croak "Day '$mday' out of range 1..$md" if $mday > $md or $mday < 1; croak "Hour '$hour' out of range 0..23" if $hour > 23 or $hour < 0; croak "Minute '$min' out of range 0..59" if $min > 59 or $min < 0; croak "Second '$sec' out of range 0..59" if $sec > 59 or $sec < 0; } my $days = _daygm( undef, undef, undef, $mday, $month, $year ); unless ($Options{no_range_check} or abs($days) < $MaxDay) { my $msg = ''; $msg .= "Day too big - $days > $MaxDay\n" if $days > $MaxDay; $year += 1900; $msg .= "Cannot handle date ($sec, $min, $hour, $mday, $month, $year)"; croak $msg; } return $sec + $SecOff + ( SECS_PER_MINUTE * $min ) + ( SECS_PER_HOUR * $hour ) + ( SECS_PER_DAY * $days ); } sub _is_leap_year { return 0 if $_[0] % 4; return 1 if $_[0] % 100; return 0 if $_[0] % 400; return 1; } sub timegm_nocheck { local $Options{no_range_check} = 1; return &timegm; } sub timelocal { my $ref_t = &timegm; my $loc_for_ref_t = _timegm( localtime($ref_t) ); my $zone_off = $loc_for_ref_t - $ref_t or return $loc_for_ref_t; # Adjust for timezone my $loc_t = $ref_t - $zone_off; # Are we close to a DST change or are we done my $dst_off = $ref_t - _timegm( localtime($loc_t) ); # If this evaluates to true, it means that the value in $loc_t is # the _second_ hour after a DST change where the local time moves # backward. if ( ! $dst_off && ( ( $ref_t - SECS_PER_HOUR ) - _timegm( localtime( $loc_t - SECS_PER_HOUR ) ) < 0 ) ) { return $loc_t - SECS_PER_HOUR; } # Adjust for DST change $loc_t += $dst_off; return $loc_t if $dst_off > 0; # If the original date was a non-extent gap in a forward DST jump, # we should now have the wrong answer - undo the DST adjustment my ( $s, $m, $h ) = localtime($loc_t); $loc_t -= $dst_off if $s != $_[0] || $m != $_[1] || $h != $_[2]; return $loc_t; } sub timelocal_nocheck { local $Options{no_range_check} = 1; return &timelocal; } 1; __END__ #line 372 FILE(f9f179df/auto/Compress/Zlib/autosplit.ix#line 1 "/usr/local/share/perl/5.8.8/auto/Compress/Zlib/autosplit.ix" # Index created by AutoSplit for blib/lib/Compress/Zlib.pm # (file acts as timestamp) 1; FILEf31e1f6d/prefork.pm #line 1 "/usr/local/share/perl/5.8.8/prefork.pm" package prefork; #line 176 use 5.005; use strict; use Carp (); use List::Util (); use Scalar::Util (); use vars qw{$VERSION $FORKING %MODULES @NOTIFY}; BEGIN { $VERSION = '1.03'; # The main state variable for this package. # Are we in preforking mode. $FORKING = ''; # The queue of modules to load %MODULES = (); # The queue of notification callbacks @NOTIFY = ( sub { # Do a hash copy of Config to get everything # inside of it preloaded. require Config; require 'Config_heavy.pl'; my $copy = { %Config::Config }; return 1; }, ); # Look for situations that need us to start in forking mode $FORKING = 1 if $ENV{MOD_PERL}; } sub import { return 1 unless $_[1]; ($_[1] eq ':enable') ? enable() : prefork($_[1]); } #line 229 sub prefork ($) { # Just hand straight to require if enabled my $module = defined $_[0] ? "$_[0]" : '' or Carp::croak('You did not pass a module name to prefork'); $module =~ /^[^\W\d]\w*(?:(?:\'|::)[^\W\d]\w*)*$/ or Carp::croak("'$module' is not a module name"); my $file = join( '/', split /(?:\'|::)/, $module ) . '.pm'; # Is it already loaded or queued return 1 if $INC{$file}; return 1 if $MODULES{$module}; # Load now if enabled, or add to the module list return require $file if $FORKING; $MODULES{$module} = $file; 1; } #line 263 sub enable () { # Turn on the PREFORK flag, so any additional # 'use prefork ...' calls made during loading # will load immediately. return 1 if $FORKING; $FORKING = 1; # Load all of the modules not yet loaded foreach my $module ( sort keys %MODULES ) { my $file = $MODULES{$module}; # Has it been loaded since we were told about it next if $INC{$file}; # Load the module. require $file; } # Clear the modules list %MODULES = (); # Execute the third-party callbacks while ( my $callback = shift @NOTIFY ) { $callback->(); } 1; } #line 320 sub notify ($) { # Get the CODE ref callback param my $function = shift; my $reftype = Scalar::Util::reftype($function); unless ( $reftype and $reftype eq 'CODE' ) { Carp::croak("prefork::notify was not passed a CODE reference"); } # Call it immediately is already in forking mode if ( $FORKING ) { $function->(); return 1; } # Is it already defined? if ( List::Util::first { Scalar::Util::refaddr($function) == Scalar::Util::refaddr($_) } @NOTIFY ) { Carp::croak("Callback function already registered"); } # Add to the queue push @NOTIFY, $function; 1; } ##################################################################### # Built-in Notifications # Compile CGI functions automatically prefork::notify( sub { CGI->compile() if $INC{'CGI.pm'}; } ); 1; #line 392 FILE8267b072/DynaLoader.pm"#line 1 "/usr/lib/perl/5.8/DynaLoader.pm" # Generated from DynaLoader.pm.PL package DynaLoader; # And Gandalf said: 'Many folk like to know beforehand what is to # be set on the table; but those who have laboured to prepare the # feast like to keep their secret; for wonder makes the words of # praise louder.' # (Quote from Tolkien suggested by Anno Siegel.) # # See pod text at end of file for documentation. # See also ext/DynaLoader/README in source tree for other information. # # Tim.Bunce@ig.co.uk, August 1994 use vars qw($VERSION *AUTOLOAD); $VERSION = '1.04'; # avoid typo warning require AutoLoader; *AUTOLOAD = \&AutoLoader::AUTOLOAD; use Config; # The following require can't be removed during maintenance # releases, sadly, because of the risk of buggy code that does # require Carp; Carp::croak "..."; without brackets dying # if Carp hasn't been loaded in earlier compile time. :-( # We'll let those bugs get found on the development track. require Carp if $] < 5.00450; # enable debug/trace messages from DynaLoader perl code $dl_debug = $ENV{PERL_DL_DEBUG} || 0 unless defined $dl_debug; # # Flags to alter dl_load_file behaviour. Assigned bits: # 0x01 make symbols available for linking later dl_load_file's. # (only known to work on Solaris 2 using dlopen(RTLD_GLOBAL)) # (ignored under VMS; effect is built-in to image linking) # # This is called as a class method $module->dl_load_flags. The # definition here will be inherited and result on "default" loading # behaviour unless a sub-class of DynaLoader defines its own version. # sub dl_load_flags { 0x00 } # ($dl_dlext, $dlsrc) # = @Config::Config{'dlext', 'dlsrc'}; ($dl_dlext, $dlsrc) = ('so','dl_dlopen.xs') ; # Some systems need special handling to expand file specifications # (VMS support by Charles Bailey ) # See dl_expandspec() for more details. Should be harmless but # inefficient to define on systems that don't need it. $Is_VMS = $^O eq 'VMS'; $do_expand = $Is_VMS; $Is_MacOS = $^O eq 'MacOS'; my $Mac_FS; $Mac_FS = eval { require Mac::FileSpec::Unixish } if $Is_MacOS; @dl_require_symbols = (); # names of symbols we need @dl_resolve_using = (); # names of files to link with @dl_library_path = (); # path to look for files #XSLoader.pm may have added elements before we were required #@dl_librefs = (); # things we have loaded #@dl_modules = (); # Modules we have loaded # This is a fix to support DLD's unfortunate desire to relink -lc @dl_resolve_using = dl_findfile('-lc') if $dlsrc eq "dl_dld.xs"; # Initialise @dl_library_path with the 'standard' library path # for this platform as determined by Configure. push(@dl_library_path, split(' ', $Config::Config{libpth})); my $ldlibpthname = $Config::Config{ldlibpthname}; my $ldlibpthname_defined = defined $Config::Config{ldlibpthname}; my $pthsep = $Config::Config{path_sep}; # Add to @dl_library_path any extra directories we can gather from environment # during runtime. if ($ldlibpthname_defined && exists $ENV{$ldlibpthname}) { push(@dl_library_path, split(/$pthsep/, $ENV{$ldlibpthname})); } # E.g. HP-UX supports both its native SHLIB_PATH *and* LD_LIBRARY_PATH. if ($ldlibpthname_defined && $ldlibpthname ne 'LD_LIBRARY_PATH' && exists $ENV{LD_LIBRARY_PATH}) { push(@dl_library_path, split(/$pthsep/, $ENV{LD_LIBRARY_PATH})); } # No prizes for guessing why we don't say 'bootstrap DynaLoader;' here. # NOTE: All dl_*.xs (including dl_none.xs) define a dl_error() XSUB boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) && !defined(&dl_error); if ($dl_debug) { print STDERR "DynaLoader.pm loaded (@INC, @dl_library_path)\n"; print STDERR "DynaLoader not linked into this perl\n" unless defined(&boot_DynaLoader); } 1; # End of main code sub croak { require Carp; Carp::croak(@_) } sub bootstrap_inherit { my $module = $_[0]; local *isa = *{"$module\::ISA"}; local @isa = (@isa, 'DynaLoader'); # Cannot goto due to delocalization. Will report errors on a wrong line? bootstrap(@_); } # The bootstrap function cannot be autoloaded (without complications) # so we define it here: sub bootstrap { # use local vars to enable $module.bs script to edit values local(@args) = @_; local($module) = $args[0]; local(@dirs, $file); unless ($module) { require Carp; Carp::confess("Usage: DynaLoader::bootstrap(module)"); } # A common error on platforms which don't support dynamic loading. # Since it's fatal and potentially confusing we give a detailed message. croak("Can't load module $module, dynamic loading not available in this perl.\n". " (You may need to build a new perl executable which either supports\n". " dynamic loading or has the $module module statically linked into it.)\n") unless defined(&dl_load_file); my @modparts = split(/::/,$module); my $modfname = $modparts[-1]; # Some systems have restrictions on files names for DLL's etc. # mod2fname returns appropriate file base name (typically truncated) # It may also edit @modparts if required. $modfname = &mod2fname(\@modparts) if defined &mod2fname; # Truncate the module name to 8.3 format for NetWare if (($^O eq 'NetWare') && (length($modfname) > 8)) { $modfname = substr($modfname, 0, 8); } my $modpname = join(($Is_MacOS ? ':' : '/'),@modparts); print STDERR "DynaLoader::bootstrap for $module ", ($Is_MacOS ? "(:auto:$modpname:$modfname.$dl_dlext)\n" : "(auto/$modpname/$modfname.$dl_dlext)\n") if $dl_debug; foreach (@INC) { chop($_ = VMS::Filespec::unixpath($_)) if $Is_VMS; my $dir; if ($Is_MacOS) { my $path = $_; if ($Mac_FS && ! -d $path) { $path = Mac::FileSpec::Unixish::nativize($path); } $path .= ":" unless /:$/; $dir = "${path}auto:$modpname"; } else { $dir = "$_/auto/$modpname"; } next unless -d $dir; # skip over uninteresting directories # check for common cases to avoid autoload of dl_findfile my $try = $Is_MacOS ? "$dir:$modfname.$dl_dlext" : "$dir/$modfname.$dl_dlext"; last if $file = ($do_expand) ? dl_expandspec($try) : ((-f $try) && $try); # no luck here, save dir for possible later dl_findfile search push @dirs, $dir; } # last resort, let dl_findfile have a go in all known locations $file = dl_findfile(map("-L$_",@dirs,@INC), $modfname) unless $file; croak("Can't locate loadable object for module $module in \@INC (\@INC contains: @INC)") unless $file; # wording similar to error from 'require' $file = uc($file) if $Is_VMS && $Config::Config{d_vms_case_sensitive_symbols}; my $bootname = "boot_$module"; $bootname =~ s/\W/_/g; @dl_require_symbols = ($bootname); # Execute optional '.bootstrap' perl script for this module. # The .bs file can be used to configure @dl_resolve_using etc to # match the needs of the individual module on this architecture. my $bs = $file; $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library if (-s $bs) { # only read file if it's not empty print STDERR "BS: $bs ($^O, $dlsrc)\n" if $dl_debug; eval { do $bs; }; warn "$bs: $@\n" if $@; } my $boot_symbol_ref; if ($^O eq 'darwin') { if ($boot_symbol_ref = dl_find_symbol(0, $bootname)) { goto boot; #extension library has already been loaded, e.g. darwin } } # Many dynamic extension loading problems will appear to come from # this section of code: XYZ failed at line 123 of DynaLoader.pm. # Often these errors are actually occurring in the initialisation # C code of the extension XS file. Perl reports the error as being # in this perl code simply because this was the last perl code # it executed. my $libref = dl_load_file($file, $module->dl_load_flags) or croak("Can't load '$file' for module $module: ".dl_error()); push(@dl_librefs,$libref); # record loaded object my @unresolved = dl_undef_symbols(); if (@unresolved) { require Carp; Carp::carp("Undefined symbols present after loading $file: @unresolved\n"); } $boot_symbol_ref = dl_find_symbol($libref, $bootname) or croak("Can't find '$bootname' symbol in $file\n"); push(@dl_modules, $module); # record loaded module boot: my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file); # See comment block above &$xs(@args); } #sub _check_file { # private utility to handle dl_expandspec vs -f tests # my($file) = @_; # return $file if (!$do_expand && -f $file); # the common case # return $file if ( $do_expand && ($file=dl_expandspec($file))); # return undef; #} # Let autosplit and the autoloader deal with these functions: FILEf238690d/Errno.pmt#line 1 "/usr/lib/perl/5.8/Errno.pm" # # This file is auto-generated. ***ANY*** changes here will be lost # package Errno; our (@EXPORT_OK,%EXPORT_TAGS,@ISA,$VERSION,%errno,$AUTOLOAD); use Exporter (); use strict; $VERSION = "1.09_01"; $VERSION = eval $VERSION; @ISA = qw(Exporter); @EXPORT_OK = qw(EBADR ENOMSG ENOTSUP ESTRPIPE EADDRINUSE EL3HLT EBADF ENOTBLK ENAVAIL ECHRNG ENOTNAM ELNRNG ENOKEY EXDEV EBADE EBADSLT ECONNREFUSED ENOSTR ENONET EOVERFLOW EISCONN EFBIG EKEYREVOKED ECONNRESET EWOULDBLOCK ELIBMAX EREMOTEIO ENOPKG ELIBSCN EDESTADDRREQ ENOTSOCK EIO EMEDIUMTYPE EINPROGRESS ERANGE EAFNOSUPPORT EADDRNOTAVAIL EINTR EREMOTE EILSEQ ENOMEM EPIPE ENETUNREACH ENODATA EUSERS EOPNOTSUPP EPROTO EISNAM ESPIPE EALREADY ENAMETOOLONG ENOEXEC EISDIR EBADRQC EEXIST EDOTDOT ELIBBAD EOWNERDEAD ESRCH EFAULT EXFULL EDEADLOCK EAGAIN ENOPROTOOPT ENETDOWN EPROTOTYPE EL2NSYNC ENETRESET EUCLEAN EADV EROFS ESHUTDOWN EMULTIHOP EPROTONOSUPPORT ENFILE ENOLCK ECONNABORTED ECANCELED EDEADLK ESRMNT ENOLINK ETIME ENOTDIR EINVAL ENOTTY ENOANO ELOOP ENOENT EPFNOSUPPORT EBADMSG ENOMEDIUM EL2HLT EDOM EBFONT EKEYEXPIRED EMSGSIZE ENOCSI EL3RST ENOSPC EIDRM ENOBUFS ENOSYS EHOSTDOWN EBADFD ENOSR ENOTCONN ESTALE EDQUOT EKEYREJECTED EMFILE ENOTRECOVERABLE EACCES EBUSY E2BIG EPERM ELIBEXEC ETOOMANYREFS ELIBACC ENOTUNIQ ECOMM ERESTART ESOCKTNOSUPPORT EUNATCH ETIMEDOUT ENXIO ENODEV ETXTBSY EMLINK ECHILD EHOSTUNREACH EREMCHG ENOTEMPTY); %EXPORT_TAGS = ( POSIX => [qw( E2BIG EACCES EADDRINUSE EADDRNOTAVAIL EAFNOSUPPORT EAGAIN EALREADY EBADF EBUSY ECHILD ECONNABORTED ECONNREFUSED ECONNRESET EDEADLK EDESTADDRREQ EDOM EDQUOT EEXIST EFAULT EFBIG EHOSTDOWN EHOSTUNREACH EINPROGRESS EINTR EINVAL EIO EISCONN EISDIR ELOOP EMFILE EMLINK EMSGSIZE ENAMETOOLONG ENETDOWN ENETRESET ENETUNREACH ENFILE ENOBUFS ENODEV ENOENT ENOEXEC ENOLCK ENOMEM ENOPROTOOPT ENOSPC ENOSYS ENOTBLK ENOTCONN ENOTDIR ENOTEMPTY ENOTSOCK ENOTTY ENXIO EOPNOTSUPP EPERM EPFNOSUPPORT EPIPE EPROTONOSUPPORT EPROTOTYPE ERANGE EREMOTE ERESTART EROFS ESHUTDOWN ESOCKTNOSUPPORT ESPIPE ESRCH ESTALE ETIMEDOUT ETOOMANYREFS ETXTBSY EUSERS EWOULDBLOCK EXDEV )] ); sub EPERM () { 1 } sub ENOENT () { 2 } sub ESRCH () { 3 } sub EINTR () { 4 } sub EIO () { 5 } sub ENXIO () { 6 } sub E2BIG () { 7 } sub ENOEXEC () { 8 } sub EBADF () { 9 } sub ECHILD () { 10 } sub EWOULDBLOCK () { 11 } sub EAGAIN () { 11 } sub ENOMEM () { 12 } sub EACCES () { 13 } sub EFAULT () { 14 } sub ENOTBLK () { 15 } sub EBUSY () { 16 } sub EEXIST () { 17 } sub EXDEV () { 18 } sub ENODEV () { 19 } sub ENOTDIR () { 20 } sub EISDIR () { 21 } sub EINVAL () { 22 } sub ENFILE () { 23 } sub EMFILE () { 24 } sub ENOTTY () { 25 } sub ETXTBSY () { 26 } sub EFBIG () { 27 } sub ENOSPC () { 28 } sub ESPIPE () { 29 } sub EROFS () { 30 } sub EMLINK () { 31 } sub EPIPE () { 32 } sub EDOM () { 33 } sub ERANGE () { 34 } sub EDEADLOCK () { 35 } sub EDEADLK () { 35 } sub ENAMETOOLONG () { 36 } sub ENOLCK () { 37 } sub ENOSYS () { 38 } sub ENOTEMPTY () { 39 } sub ELOOP () { 40 } sub ENOMSG () { 42 } sub EIDRM () { 43 } sub ECHRNG () { 44 } sub EL2NSYNC () { 45 } sub EL3HLT () { 46 } sub EL3RST () { 47 } sub ELNRNG () { 48 } sub EUNATCH () { 49 } sub ENOCSI () { 50 } sub EL2HLT () { 51 } sub EBADE () { 52 } sub EBADR () { 53 } sub EXFULL () { 54 } sub ENOANO () { 55 } sub EBADRQC () { 56 } sub EBADSLT () { 57 } sub EBFONT () { 59 } sub ENOSTR () { 60 } sub ENODATA () { 61 } sub ETIME () { 62 } sub ENOSR () { 63 } sub ENONET () { 64 } sub ENOPKG () { 65 } sub EREMOTE () { 66 } sub ENOLINK () { 67 } sub EADV () { 68 } sub ESRMNT () { 69 } sub ECOMM () { 70 } sub EPROTO () { 71 } sub EMULTIHOP () { 72 } sub EDOTDOT () { 73 } sub EBADMSG () { 74 } sub EOVERFLOW () { 75 } sub ENOTUNIQ () { 76 } sub EBADFD () { 77 } sub EREMCHG () { 78 } sub ELIBACC () { 79 } sub ELIBBAD () { 80 } sub ELIBSCN () { 81 } sub ELIBMAX () { 82 } sub ELIBEXEC () { 83 } sub EILSEQ () { 84 } sub ERESTART () { 85 } sub ESTRPIPE () { 86 } sub EUSERS () { 87 } sub ENOTSOCK () { 88 } sub EDESTADDRREQ () { 89 } sub EMSGSIZE () { 90 } sub EPROTOTYPE () { 91 } sub ENOPROTOOPT () { 92 } sub EPROTONOSUPPORT () { 93 } sub ESOCKTNOSUPPORT () { 94 } sub ENOTSUP () { 95 } sub EOPNOTSUPP () { 95 } sub EPFNOSUPPORT () { 96 } sub EAFNOSUPPORT () { 97 } sub EADDRINUSE () { 98 } sub EADDRNOTAVAIL () { 99 } sub ENETDOWN () { 100 } sub ENETUNREACH () { 101 } sub ENETRESET () { 102 } sub ECONNABORTED () { 103 } sub ECONNRESET () { 104 } sub ENOBUFS () { 105 } sub EISCONN () { 106 } sub ENOTCONN () { 107 } sub ESHUTDOWN () { 108 } sub ETOOMANYREFS () { 109 } sub ETIMEDOUT () { 110 } sub ECONNREFUSED () { 111 } sub EHOSTDOWN () { 112 } sub EHOSTUNREACH () { 113 } sub EALREADY () { 114 } sub EINPROGRESS () { 115 } sub ESTALE () { 116 } sub EUCLEAN () { 117 } sub ENOTNAM () { 118 } sub ENAVAIL () { 119 } sub EISNAM () { 120 } sub EREMOTEIO () { 121 } sub EDQUOT () { 122 } sub ENOMEDIUM () { 123 } sub EMEDIUMTYPE () { 124 } sub ECANCELED () { 125 } sub ENOKEY () { 126 } sub EKEYEXPIRED () { 127 } sub EKEYREVOKED () { 128 } sub EKEYREJECTED () { 129 } sub EOWNERDEAD () { 130 } sub ENOTRECOVERABLE () { 131 } sub TIEHASH { bless [] } sub FETCH { my ($self, $errname) = @_; my $proto = prototype("Errno::$errname"); my $errno = ""; if (defined($proto) && $proto eq "") { no strict 'refs'; $errno = &$errname; $errno = 0 unless $! == $errno; } return $errno; } sub STORE { require Carp; Carp::confess("ERRNO hash is read only!"); } *CLEAR = \&STORE; *DELETE = \&STORE; sub NEXTKEY { my($k,$v); while(($k,$v) = each %Errno::) { my $proto = prototype("Errno::$k"); last if (defined($proto) && $proto eq ""); } $k } sub FIRSTKEY { my $s = scalar keys %Errno::; # initialize iterator goto &NEXTKEY; } sub EXISTS { my ($self, $errname) = @_; my $r = ref $errname; my $proto = !$r || $r eq 'CODE' ? prototype($errname) : undef; defined($proto) && $proto eq ""; } tie %!, __PACKAGE__; 1; __END__ FILEc9407e17/Fcntl.pm #line 1 "/usr/lib/perl/5.8/Fcntl.pm" package Fcntl; our($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS, $AUTOLOAD); require Exporter; use XSLoader (); @ISA = qw(Exporter); $VERSION = "1.05"; # Items to export into callers namespace by default # (move infrequently used names to @EXPORT_OK below) @EXPORT = qw( FD_CLOEXEC F_ALLOCSP F_ALLOCSP64 F_COMPAT F_DUP2FD F_DUPFD F_EXLCK F_FREESP F_FREESP64 F_FSYNC F_FSYNC64 F_GETFD F_GETFL F_GETLK F_GETLK64 F_GETOWN F_NODNY F_POSIX F_RDACC F_RDDNY F_RDLCK F_RWACC F_RWDNY F_SETFD F_SETFL F_SETLK F_SETLK64 F_SETLKW F_SETLKW64 F_SETOWN F_SHARE F_SHLCK F_UNLCK F_UNSHARE F_WRACC F_WRDNY F_WRLCK O_ACCMODE O_ALIAS O_APPEND O_ASYNC O_BINARY O_CREAT O_DEFER O_DIRECT O_DIRECTORY O_DSYNC O_EXCL O_EXLOCK O_LARGEFILE O_NDELAY O_NOCTTY O_NOFOLLOW O_NOINHERIT O_NONBLOCK O_RANDOM O_RAW O_RDONLY O_RDWR O_RSRC O_RSYNC O_SEQUENTIAL O_SHLOCK O_SYNC O_TEMPORARY O_TEXT O_TRUNC O_WRONLY ); # Other items we are prepared to export if requested @EXPORT_OK = qw( DN_ACCESS DN_ATTRIB DN_CREATE DN_DELETE DN_MODIFY DN_MULTISHOT DN_RENAME FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC F_GETLEASE F_GETSIG F_NOTIFY F_SETLEASE F_SETSIG LOCK_EX LOCK_MAND LOCK_NB LOCK_READ LOCK_RW LOCK_SH LOCK_UN LOCK_WRITE O_IGNORE_CTTY O_NOATIME O_NOLINK O_NOTRANS SEEK_CUR SEEK_END SEEK_SET S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT S_IREAD S_IWRITE S_IEXEC S_IRGRP S_IWGRP S_IXGRP S_IRWXG S_IROTH S_IWOTH S_IXOTH S_IRWXO S_IRUSR S_IWUSR S_IXUSR S_IRWXU S_ISUID S_ISGID S_ISVTX S_ISTXT _S_IFMT S_IFREG S_IFDIR S_IFLNK &S_ISREG &S_ISDIR &S_ISLNK &S_ISSOCK &S_ISBLK &S_ISCHR &S_ISFIFO &S_ISWHT &S_ISENFMT &S_IFMT &S_IMODE ); # Named groups of exports %EXPORT_TAGS = ( 'flock' => [qw(LOCK_SH LOCK_EX LOCK_NB LOCK_UN)], 'Fcompat' => [qw(FAPPEND FASYNC FCREAT FDEFER FDSYNC FEXCL FLARGEFILE FNDELAY FNONBLOCK FRSYNC FSYNC FTRUNC)], 'seek' => [qw(SEEK_SET SEEK_CUR SEEK_END)], 'mode' => [qw(S_ISUID S_ISGID S_ISVTX S_ISTXT _S_IFMT S_IFREG S_IFDIR S_IFLNK S_IFSOCK S_IFBLK S_IFCHR S_IFIFO S_IFWHT S_ENFMT S_IRUSR S_IWUSR S_IXUSR S_IRWXU S_IRGRP S_IWGRP S_IXGRP S_IRWXG S_IROTH S_IWOTH S_IXOTH S_IRWXO S_IREAD S_IWRITE S_IEXEC S_ISREG S_ISDIR S_ISLNK S_ISSOCK S_ISBLK S_ISCHR S_ISFIFO S_ISWHT S_ISENFMT S_IFMT S_IMODE )], ); sub S_IFMT { @_ ? ( $_[0] & _S_IFMT() ) : _S_IFMT() } sub S_IMODE { $_[0] & 07777 } sub S_ISREG { ( $_[0] & _S_IFMT() ) == S_IFREG() } sub S_ISDIR { ( $_[0] & _S_IFMT() ) == S_IFDIR() } sub S_ISLNK { ( $_[0] & _S_IFMT() ) == S_IFLNK() } sub S_ISSOCK { ( $_[0] & _S_IFMT() ) == S_IFSOCK() } sub S_ISBLK { ( $_[0] & _S_IFMT() ) == S_IFBLK() } sub S_ISCHR { ( $_[0] & _S_IFMT() ) == S_IFCHR() } sub S_ISFIFO { ( $_[0] & _S_IFMT() ) == S_IFIFO() } sub S_ISWHT { ( $_[0] & _S_IFMT() ) == S_IFWHT() } sub S_ISENFMT { ( $_[0] & _S_IFMT() ) == S_IFENFMT() } sub AUTOLOAD { (my $constname = $AUTOLOAD) =~ s/.*:://; die "&Fcntl::constant not defined" if $constname eq 'constant'; my ($error, $val) = constant($constname); if ($error) { my (undef,$file,$line) = caller; die "$error at $file line $line.\n"; } *$AUTOLOAD = sub { $val }; goto &$AUTOLOAD; } XSLoader::load 'Fcntl', $VERSION; 1; FILE1218aa75/File/Glob.pm#line 1 "/usr/lib/perl/5.8/File/Glob.pm" package File::Glob; use strict; our($VERSION, @ISA, @EXPORT_OK, @EXPORT_FAIL, %EXPORT_TAGS, $AUTOLOAD, $DEFAULT_FLAGS); use XSLoader (); @ISA = qw(Exporter); # NOTE: The glob() export is only here for compatibility with 5.6.0. # csh_glob() should not be used directly, unless you know what you're doing. @EXPORT_OK = qw( csh_glob bsd_glob glob GLOB_ABEND GLOB_ALPHASORT GLOB_ALTDIRFUNC GLOB_BRACE GLOB_CSH GLOB_ERR GLOB_ERROR GLOB_LIMIT GLOB_MARK GLOB_NOCASE GLOB_NOCHECK GLOB_NOMAGIC GLOB_NOSORT GLOB_NOSPACE GLOB_QUOTE GLOB_TILDE ); %EXPORT_TAGS = ( 'glob' => [ qw( GLOB_ABEND GLOB_ALPHASORT GLOB_ALTDIRFUNC GLOB_BRACE GLOB_CSH GLOB_ERR GLOB_ERROR GLOB_LIMIT GLOB_MARK GLOB_NOCASE GLOB_NOCHECK GLOB_NOMAGIC GLOB_NOSORT GLOB_NOSPACE GLOB_QUOTE GLOB_TILDE glob bsd_glob ) ], ); $VERSION = '1.05'; sub import { require Exporter; my $i = 1; while ($i < @_) { if ($_[$i] =~ /^:(case|nocase|globally)$/) { splice(@_, $i, 1); $DEFAULT_FLAGS &= ~GLOB_NOCASE() if $1 eq 'case'; $DEFAULT_FLAGS |= GLOB_NOCASE() if $1 eq 'nocase'; if ($1 eq 'globally') { local $^W; *CORE::GLOBAL::glob = \&File::Glob::csh_glob; } next; } ++$i; } goto &Exporter::import; } sub AUTOLOAD { # This AUTOLOAD is used to 'autoload' constants from the constant() # XS function. If a constant is not found then control is passed # to the AUTOLOAD in AutoLoader. my $constname; ($constname = $AUTOLOAD) =~ s/.*:://; my ($error, $val) = constant($constname); if ($error) { require Carp; Carp::croak($error); } eval "sub $AUTOLOAD { $val }"; goto &$AUTOLOAD; } XSLoader::load 'File::Glob', $VERSION; # Preloaded methods go here. sub GLOB_ERROR { return (constant('GLOB_ERROR'))[1]; } sub GLOB_CSH () { GLOB_BRACE() | GLOB_NOMAGIC() | GLOB_QUOTE() | GLOB_TILDE() | GLOB_ALPHASORT() } $DEFAULT_FLAGS = GLOB_CSH(); if ($^O =~ /^(?:MSWin32|VMS|os2|dos|riscos|MacOS)$/) { $DEFAULT_FLAGS |= GLOB_NOCASE(); } # Autoload methods go after =cut, and are processed by the autosplit program. sub bsd_glob { my ($pat,$flags) = @_; $flags = $DEFAULT_FLAGS if @_ < 2; return doglob($pat,$flags); } # File::Glob::glob() is deprecated because its prototype is different from # CORE::glob() (use bsd_glob() instead) sub glob { splice @_, 1; # don't pass PL_glob_index as flags! goto &bsd_glob; } ## borrowed heavily from gsar's File::DosGlob my %iter; my %entries; sub csh_glob { my $pat = shift; my $cxix = shift; my @pat; # glob without args defaults to $_ $pat = $_ unless defined $pat; # extract patterns $pat =~ s/^\s+//; # Protect against empty elements in $pat =~ s/\s+$//; # things like < *.c> and <*.c >. # These alone shouldn't trigger ParseWords. if ($pat =~ /\s/) { # XXX this is needed for compatibility with the csh # implementation in Perl. Need to support a flag # to disable this behavior. require Text::ParseWords; @pat = Text::ParseWords::parse_line('\s+',0,$pat); } # assume global context if not provided one $cxix = '_G_' unless defined $cxix; $iter{$cxix} = 0 unless exists $iter{$cxix}; # if we're just beginning, do it all first if ($iter{$cxix} == 0) { if (@pat) { $entries{$cxix} = [ map { doglob($_, $DEFAULT_FLAGS) } @pat ]; } else { $entries{$cxix} = [ doglob($pat, $DEFAULT_FLAGS) ]; } } # chuck it all out, quick or slow if (wantarray) { delete $iter{$cxix}; return @{delete $entries{$cxix}}; } else { if ($iter{$cxix} = scalar @{$entries{$cxix}}) { return shift @{$entries{$cxix}}; } else { # return undef for EOL delete $iter{$cxix}; delete $entries{$cxix}; return undef; } } } 1; __END__ FILE9c9acf86/XSLoader.pm O#line 1 "/usr/lib/perl/5.8/XSLoader.pm" # Generated from XSLoader.pm.PL (resolved %Config::Config value) package XSLoader; $VERSION = "0.06"; #use strict; # enable debug/trace messages from DynaLoader perl code # $dl_debug = $ENV{PERL_DL_DEBUG} || 0 unless defined $dl_debug; my $dl_dlext = 'so'; package DynaLoader; # No prizes for guessing why we don't say 'bootstrap DynaLoader;' here. # NOTE: All dl_*.xs (including dl_none.xs) define a dl_error() XSUB boot_DynaLoader('DynaLoader') if defined(&boot_DynaLoader) && !defined(&dl_error); package XSLoader; sub load { package DynaLoader; die q{XSLoader::load('Your::Module', $Your::Module::VERSION)} unless @_; my($module) = $_[0]; # work with static linking too my $b = "$module\::bootstrap"; goto &$b if defined &$b; goto retry; my @modparts = split(/::/,$module); my $modfname = $modparts[-1]; my $modpname = join('/',@modparts); my $modlibname = (caller())[1]; my $c = @modparts; $modlibname =~ s,[\\/][^\\/]+$,, while $c--; # Q&D basename my $file = "$modlibname/auto/$modpname/$modfname.$dl_dlext"; # print STDERR "XSLoader::load for $module ($file)\n" if $dl_debug; my $bs = $file; $bs =~ s/(\.\w+)?(;\d*)?$/\.bs/; # look for .bs 'beside' the library goto retry if not -f $file or -s $bs; my $bootname = "boot_$module"; $bootname =~ s/\W/_/g; @DynaLoader::dl_require_symbols = ($bootname); my $boot_symbol_ref; if ($^O eq 'darwin') { if ($boot_symbol_ref = dl_find_symbol(0, $bootname)) { goto boot; #extension library has already been loaded, e.g. darwin } } # Many dynamic extension loading problems will appear to come from # this section of code: XYZ failed at line 123 of DynaLoader.pm. # Often these errors are actually occurring in the initialisation # C code of the extension XS file. Perl reports the error as being # in this perl code simply because this was the last perl code # it executed. my $libref = dl_load_file($file, 0) or do { require Carp; Carp::croak("Can't load '$file' for module $module: " . dl_error()); }; push(@DynaLoader::dl_librefs,$libref); # record loaded object my @unresolved = dl_undef_symbols(); if (@unresolved) { require Carp; Carp::carp("Undefined symbols present after loading $file: @unresolved\n"); } $boot_symbol_ref = dl_find_symbol($libref, $bootname) or do { require Carp; Carp::croak("Can't find '$bootname' symbol in $file\n"); }; push(@DynaLoader::dl_modules, $module); # record loaded module boot: my $xs = dl_install_xsub("${module}::bootstrap", $boot_symbol_ref, $file); # See comment block above return &$xs(@_); retry: my $bootstrap_inherit = DynaLoader->can('bootstrap_inherit') || XSLoader->can('bootstrap_inherit'); goto &$bootstrap_inherit; } # Versions of DynaLoader prior to 5.6.0 don't have this function. sub bootstrap_inherit { package DynaLoader; my $module = $_[0]; local *DynaLoader::isa = *{"$module\::ISA"}; local @DynaLoader::isa = (@DynaLoader::isa, 'DynaLoader'); # Cannot goto due to delocalization. Will report errors on a wrong line? require DynaLoader; DynaLoader::bootstrap(@_); } 1; __END__ FILE'72da1942/auto/DynaLoader/dl_findfile.al#line 1 "/usr/lib/perl/5.8/auto/DynaLoader/dl_findfile.al" # NOTE: Derived from ../../lib/DynaLoader.pm. # Changes made here will be lost when autosplit is run again. # See AutoSplit.pm. package DynaLoader; #line 265 "../../lib/DynaLoader.pm (autosplit into ../../lib/auto/DynaLoader/dl_findfile.al)" sub dl_findfile { # Read ext/DynaLoader/DynaLoader.doc for detailed information. # This function does not automatically consider the architecture # or the perl library auto directories. my (@args) = @_; my (@dirs, $dir); # which directories to search my (@found); # full paths to real files we have found my $dl_ext= 'so'; # $Config::Config{'dlext'} suffix for perl extensions my $dl_so = 'so'; # $Config::Config{'so'} suffix for shared libraries print STDERR "dl_findfile(@args)\n" if $dl_debug; # accumulate directories but process files as they appear arg: foreach(@args) { # Special fast case: full filepath requires no search if ($Is_VMS && m%[:>/\]]% && -f $_) { push(@found,dl_expandspec(VMS::Filespec::vmsify($_))); last arg unless wantarray; next; } elsif ($Is_MacOS) { if (m/:/ && -f $_) { push(@found,$_); last arg unless wantarray; } } elsif (m:/: && -f $_ && !$do_expand) { push(@found,$_); last arg unless wantarray; next; } # Deal with directories first: # Using a -L prefix is the preferred option (faster and more robust) if (m:^-L:) { s/^-L//; push(@dirs, $_); next; } if ($Is_MacOS) { # Otherwise we try to try to spot directories by a heuristic # (this is a more complicated issue than it first appears) if (m/:/ && -d $_) { push(@dirs, $_); next; } # Only files should get this far... my(@names, $name); # what filenames to look for s/^-l//; push(@names, $_); foreach $dir (@dirs, @dl_library_path) { next unless -d $dir; $dir =~ s/^([^:]+)$/:$1/; $dir =~ s/:$//; foreach $name (@names) { my($file) = "$dir:$name"; print STDERR " checking in $dir for $name\n" if $dl_debug; if (-f $file) { push(@found, $file); next arg; # no need to look any further } } } next; } # Otherwise we try to try to spot directories by a heuristic # (this is a more complicated issue than it first appears) if (m:/: && -d $_) { push(@dirs, $_); next; } # VMS: we may be using native VMS directory syntax instead of # Unix emulation, so check this as well if ($Is_VMS && /[:>\]]/ && -d $_) { push(@dirs, $_); next; } # Only files should get this far... my(@names, $name); # what filenames to look for if (m:-l: ) { # convert -lname to appropriate library name s/-l//; push(@names,"lib$_.$dl_so"); push(@names,"lib$_.a"); } else { # Umm, a bare name. Try various alternatives: # these should be ordered with the most likely first push(@names,"$_.$dl_ext") unless m/\.$dl_ext$/o; push(@names,"$_.$dl_so") unless m/\.$dl_so$/o; push(@names,"lib$_.$dl_so") unless m:/:; push(@names,"$_.a") if !m/\.a$/ and $dlsrc eq "dl_dld.xs"; push(@names, $_); } foreach $dir (@dirs, @dl_library_path) { next unless -d $dir; chop($dir = VMS::Filespec::unixpath($dir)) if $Is_VMS; foreach $name (@names) { my($file) = "$dir/$name"; print STDERR " checking in $dir for $name\n" if $dl_debug; $file = ($do_expand) ? dl_expandspec($file) : (-f $file && $file); #$file = _check_file($file); if ($file) { push(@found, $file); next arg; # no need to look any further } } } } if ($dl_debug) { foreach(@dirs) { print STDERR " dl_findfile ignored non-existent directory: $_\n" unless -d $_; } print STDERR "dl_findfile found: @found\n"; } return $found[0] unless wantarray; @found; } # end of DynaLoader::dl_findfile 1; FILE0f6c19f8/lib.pm J#line 1 "/usr/lib/perl/5.8/lib.pm" package lib; # THIS FILE IS AUTOMATICALLY GENERATED FROM lib_pm.PL. # ANY CHANGES TO THIS FILE WILL BE OVERWRITTEN BY THE NEXT PERL BUILD. use Config; use strict; my $archname = $Config{archname}; my $version = $Config{version}; my @inc_version_list = reverse split / /, $Config{inc_version_list}; our @ORIG_INC = @INC; # take a handy copy of 'original' value our $VERSION = '0.5565'; my $Is_MacOS = $^O eq 'MacOS'; my $Mac_FS; if ($Is_MacOS) { require File::Spec; $Mac_FS = eval { require Mac::FileSpec::Unixish }; } sub import { shift; my %names; foreach (reverse @_) { my $path = $_; # we'll be modifying it, so break the alias if ($path eq '') { require Carp; Carp::carp("Empty compile time value given to use lib"); } $path = _nativize($path); if (-e $path && ! -d _) { require Carp; Carp::carp("Parameter to use lib must be directory, not file"); } unshift(@INC, $path); # Add any previous version directories we found at configure time foreach my $incver (@inc_version_list) { my $dir = $Is_MacOS ? File::Spec->catdir( $path, $incver ) : "$path/$incver"; unshift(@INC, $dir) if -d $dir; } # Put a corresponding archlib directory in front of $path if it # looks like $path has an archlib directory below it. my($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir) = _get_dirs($path); unshift(@INC, $arch_dir) if -d $arch_auto_dir; unshift(@INC, $version_dir) if -d $version_dir; unshift(@INC, $version_arch_dir) if -d $version_arch_dir; } # remove trailing duplicates @INC = grep { ++$names{$_} == 1 } @INC; return; } sub unimport { shift; my %names; foreach (@_) { my $path = _nativize($_); my($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir) = _get_dirs($path); ++$names{$path}; ++$names{$arch_dir} if -d $arch_auto_dir; ++$names{$version_dir} if -d $version_dir; ++$names{$version_arch_dir} if -d $version_arch_dir; } # Remove ALL instances of each named directory. @INC = grep { !exists $names{$_} } @INC; return; } sub _get_dirs { my($dir) = @_; my($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir); # we could use this for all platforms in the future, but leave it # Mac-only for now, until there is more time for testing it. if ($Is_MacOS) { $arch_auto_dir = File::Spec->catdir( $dir, $archname, 'auto' ); $arch_dir = File::Spec->catdir( $dir, $archname, ); $version_dir = File::Spec->catdir( $dir, $version ); $version_arch_dir = File::Spec->catdir( $dir, $version, $archname ); } else { $arch_auto_dir = "$dir/$archname/auto"; $arch_dir = "$dir/$archname"; $version_dir = "$dir/$version"; $version_arch_dir = "$dir/$version/$archname"; } return($arch_auto_dir, $arch_dir, $version_dir, $version_arch_dir); } sub _nativize { my($dir) = @_; if ($Is_MacOS && $Mac_FS && ! -d $dir) { $dir = Mac::FileSpec::Unixish::nativize($dir); $dir .= ":" unless $dir =~ /:$/; } return $dir; } 1; __END__ FILEf12298bd/re.pm^#line 1 "/usr/lib/perl/5.8/re.pm" package re; our $VERSION = 0.05; # N.B. File::Basename contains a literal for 'taint' as a fallback. If # taint is changed here, File::Basename must be updated as well. my %bitmask = ( taint => 0x00100000, # HINT_RE_TAINT eval => 0x00200000, # HINT_RE_EVAL ); sub setcolor { eval { # Ignore errors require Term::Cap; my $terminal = Tgetent Term::Cap ({OSPEED => 9600}); # Avoid warning. my $props = $ENV{PERL_RE_TC} || 'md,me,so,se,us,ue'; my @props = split /,/, $props; my $colors = join "\t", map {$terminal->Tputs($_,1)} @props; $colors =~ s/\0//g; $ENV{PERL_RE_COLORS} = $colors; }; } sub bits { my $on = shift; my $bits = 0; unless (@_) { require Carp; Carp::carp("Useless use of \"re\" pragma"); } foreach my $s (@_){ if ($s eq 'debug' or $s eq 'debugcolor') { setcolor() if $s eq 'debugcolor'; require XSLoader; XSLoader::load('re'); install() if $on; uninstall() unless $on; next; } if (exists $bitmask{$s}) { $bits |= $bitmask{$s}; } else { require Carp; Carp::carp("Unknown \"re\" subpragma '$s' (known ones are: @{[join(', ', map {qq('$_')} 'debug', 'debugcolor', sort keys %bitmask)]})"); } } $bits; } sub import { shift; $^H |= bits(1, @_); } sub unimport { shift; $^H &= ~ bits(0, @_); } 1; FILE9c7fba9c/Compress/Raw/Zlib.pm:#line 1 "/usr/local/lib/perl/5.8.8/Compress/Raw/Zlib.pm" package Compress::Raw::Zlib; require 5.004 ; require Exporter; use AutoLoader; use Carp ; #use Parse::Parameters; use strict ; use warnings ; use bytes ; our ($VERSION, $XS_VERSION, @ISA, @EXPORT, $AUTOLOAD); $VERSION = '2.020'; $XS_VERSION = $VERSION; $VERSION = eval $VERSION; @ISA = qw(Exporter); # Items to export into callers namespace by default. Note: do not export # names by default without a very good reason. Use EXPORT_OK instead. # Do not simply export all your public functions/methods/constants. @EXPORT = qw( adler32 crc32 ZLIB_VERSION ZLIB_VERNUM DEF_WBITS OS_CODE MAX_MEM_LEVEL MAX_WBITS Z_ASCII Z_BEST_COMPRESSION Z_BEST_SPEED Z_BINARY Z_BLOCK Z_BUF_ERROR Z_DATA_ERROR Z_DEFAULT_COMPRESSION Z_DEFAULT_STRATEGY Z_DEFLATED Z_ERRNO Z_FILTERED Z_FIXED Z_FINISH Z_FULL_FLUSH Z_HUFFMAN_ONLY Z_MEM_ERROR Z_NEED_DICT Z_NO_COMPRESSION Z_NO_FLUSH Z_NULL Z_OK Z_PARTIAL_FLUSH Z_RLE Z_STREAM_END Z_STREAM_ERROR Z_SYNC_FLUSH Z_UNKNOWN Z_VERSION_ERROR WANT_GZIP WANT_GZIP_OR_ZLIB ); use constant WANT_GZIP => 16; use constant WANT_GZIP_OR_ZLIB => 32; sub AUTOLOAD { my($constname); ($constname = $AUTOLOAD) =~ s/.*:://; my ($error, $val) = constant($constname); Carp::croak $error if $error; no strict 'refs'; *{$AUTOLOAD} = sub { $val }; goto &{$AUTOLOAD}; } use constant FLAG_APPEND => 1 ; use constant FLAG_CRC => 2 ; use constant FLAG_ADLER => 4 ; use constant FLAG_CONSUME_INPUT => 8 ; use constant FLAG_LIMIT_OUTPUT => 16 ; eval { require XSLoader; XSLoader::load('Compress::Raw::Zlib', $XS_VERSION); 1; } or do { require DynaLoader; local @ISA = qw(DynaLoader); bootstrap Compress::Raw::Zlib $XS_VERSION ; }; use constant Parse_any => 0x01; use constant Parse_unsigned => 0x02; use constant Parse_signed => 0x04; use constant Parse_boolean => 0x08; use constant Parse_string => 0x10; use constant Parse_custom => 0x12; use constant Parse_store_ref => 0x100 ; use constant OFF_PARSED => 0 ; use constant OFF_TYPE => 1 ; use constant OFF_DEFAULT => 2 ; use constant OFF_FIXED => 3 ; use constant OFF_FIRST_ONLY => 4 ; use constant OFF_STICKY => 5 ; sub ParseParameters { my $level = shift || 0 ; my $sub = (caller($level + 1))[3] ; #local $Carp::CarpLevel = 1 ; my $p = new Compress::Raw::Zlib::Parameters() ; $p->parse(@_) or croak "$sub: $p->{Error}" ; return $p; } sub Compress::Raw::Zlib::Parameters::new { my $class = shift ; my $obj = { Error => '', Got => {}, } ; #return bless $obj, ref($class) || $class || __PACKAGE__ ; return bless $obj, 'Compress::Raw::Zlib::Parameters' ; } sub Compress::Raw::Zlib::Parameters::setError { my $self = shift ; my $error = shift ; my $retval = @_ ? shift : undef ; $self->{Error} = $error ; return $retval; } #sub getError #{ # my $self = shift ; # return $self->{Error} ; #} sub Compress::Raw::Zlib::Parameters::parse { my $self = shift ; my $default = shift ; my $got = $self->{Got} ; my $firstTime = keys %{ $got } == 0 ; my (@Bad) ; my @entered = () ; # Allow the options to be passed as a hash reference or # as the complete hash. if (@_ == 0) { @entered = () ; } elsif (@_ == 1) { my $href = $_[0] ; return $self->setError("Expected even number of parameters, got 1") if ! defined $href or ! ref $href or ref $href ne "HASH" ; foreach my $key (keys %$href) { push @entered, $key ; push @entered, \$href->{$key} ; } } else { my $count = @_; return $self->setError("Expected even number of parameters, got $count") if $count % 2 != 0 ; for my $i (0.. $count / 2 - 1) { push @entered, $_[2* $i] ; push @entered, \$_[2* $i+1] ; } } while (my ($key, $v) = each %$default) { croak "need 4 params [@$v]" if @$v != 4 ; my ($first_only, $sticky, $type, $value) = @$v ; my $x ; $self->_checkType($key, \$value, $type, 0, \$x) or return undef ; $key = lc $key; if ($firstTime || ! $sticky) { $got->{$key} = [0, $type, $value, $x, $first_only, $sticky] ; } $got->{$key}[OFF_PARSED] = 0 ; } for my $i (0.. @entered / 2 - 1) { my $key = $entered[2* $i] ; my $value = $entered[2* $i+1] ; #print "Key [$key] Value [$value]" ; #print defined $$value ? "[$$value]\n" : "[undef]\n"; $key =~ s/^-// ; my $canonkey = lc $key; if ($got->{$canonkey} && ($firstTime || ! $got->{$canonkey}[OFF_FIRST_ONLY] )) { my $type = $got->{$canonkey}[OFF_TYPE] ; my $s ; $self->_checkType($key, $value, $type, 1, \$s) or return undef ; #$value = $$value unless $type & Parse_store_ref ; $value = $$value ; $got->{$canonkey} = [1, $type, $value, $s] ; } else { push (@Bad, $key) } } if (@Bad) { my ($bad) = join(", ", @Bad) ; return $self->setError("unknown key value(s) @Bad") ; } return 1; } sub Compress::Raw::Zlib::Parameters::_checkType { my $self = shift ; my $key = shift ; my $value = shift ; my $type = shift ; my $validate = shift ; my $output = shift; #local $Carp::CarpLevel = $level ; #print "PARSE $type $key $value $validate $sub\n" ; if ( $type & Parse_store_ref) { #$value = $$value # if ref ${ $value } ; $$output = $value ; return 1; } $value = $$value ; if ($type & Parse_any) { $$output = $value ; return 1; } elsif ($type & Parse_unsigned) { return $self->setError("Parameter '$key' must be an unsigned int, got 'undef'") if $validate && ! defined $value ; return $self->setError("Parameter '$key' must be an unsigned int, got '$value'") if $validate && $value !~ /^\d+$/; $$output = defined $value ? $value : 0 ; return 1; } elsif ($type & Parse_signed) { return $self->setError("Parameter '$key' must be a signed int, got 'undef'") if $validate && ! defined $value ; return $self->setError("Parameter '$key' must be a signed int, got '$value'") if $validate && $value !~ /^-?\d+$/; $$output = defined $value ? $value : 0 ; return 1 ; } elsif ($type & Parse_boolean) { return $self->setError("Parameter '$key' must be an int, got '$value'") if $validate && defined $value && $value !~ /^\d*$/; $$output = defined $value ? $value != 0 : 0 ; return 1; } elsif ($type & Parse_string) { $$output = defined $value ? $value : "" ; return 1; } $$output = $value ; return 1; } sub Compress::Raw::Zlib::Parameters::parsed { my $self = shift ; my $name = shift ; return $self->{Got}{lc $name}[OFF_PARSED] ; } sub Compress::Raw::Zlib::Parameters::value { my $self = shift ; my $name = shift ; if (@_) { $self->{Got}{lc $name}[OFF_PARSED] = 1; $self->{Got}{lc $name}[OFF_DEFAULT] = $_[0] ; $self->{Got}{lc $name}[OFF_FIXED] = $_[0] ; } return $self->{Got}{lc $name}[OFF_FIXED] ; } sub Compress::Raw::Zlib::Deflate::new { my $pkg = shift ; my ($got) = ParseParameters(0, { 'AppendOutput' => [1, 1, Parse_boolean, 0], 'CRC32' => [1, 1, Parse_boolean, 0], 'ADLER32' => [1, 1, Parse_boolean, 0], 'Bufsize' => [1, 1, Parse_unsigned, 4096], 'Level' => [1, 1, Parse_signed, Z_DEFAULT_COMPRESSION()], 'Method' => [1, 1, Parse_unsigned, Z_DEFLATED()], 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()], 'MemLevel' => [1, 1, Parse_unsigned, MAX_MEM_LEVEL()], 'Strategy' => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()], 'Dictionary' => [1, 1, Parse_any, ""], }, @_) ; croak "Compress::Raw::Zlib::Deflate::new: Bufsize must be >= 1, you specified " . $got->value('Bufsize') unless $got->value('Bufsize') >= 1; my $flags = 0 ; $flags |= FLAG_APPEND if $got->value('AppendOutput') ; $flags |= FLAG_CRC if $got->value('CRC32') ; $flags |= FLAG_ADLER if $got->value('ADLER32') ; my $windowBits = $got->value('WindowBits'); $windowBits += MAX_WBITS() if ($windowBits & MAX_WBITS()) == 0 ; _deflateInit($flags, $got->value('Level'), $got->value('Method'), $windowBits, $got->value('MemLevel'), $got->value('Strategy'), $got->value('Bufsize'), $got->value('Dictionary')) ; } sub Compress::Raw::Zlib::Inflate::new { my $pkg = shift ; my ($got) = ParseParameters(0, { 'AppendOutput' => [1, 1, Parse_boolean, 0], 'LimitOutput' => [1, 1, Parse_boolean, 0], 'CRC32' => [1, 1, Parse_boolean, 0], 'ADLER32' => [1, 1, Parse_boolean, 0], 'ConsumeInput' => [1, 1, Parse_boolean, 1], 'Bufsize' => [1, 1, Parse_unsigned, 4096], 'WindowBits' => [1, 1, Parse_signed, MAX_WBITS()], 'Dictionary' => [1, 1, Parse_any, ""], }, @_) ; croak "Compress::Raw::Zlib::Inflate::new: Bufsize must be >= 1, you specified " . $got->value('Bufsize') unless $got->value('Bufsize') >= 1; my $flags = 0 ; $flags |= FLAG_APPEND if $got->value('AppendOutput') ; $flags |= FLAG_CRC if $got->value('CRC32') ; $flags |= FLAG_ADLER if $got->value('ADLER32') ; $flags |= FLAG_CONSUME_INPUT if $got->value('ConsumeInput') ; $flags |= FLAG_LIMIT_OUTPUT if $got->value('LimitOutput') ; my $windowBits = $got->value('WindowBits'); $windowBits += MAX_WBITS() if ($windowBits & MAX_WBITS()) == 0 ; _inflateInit($flags, $windowBits, $got->value('Bufsize'), $got->value('Dictionary')) ; } sub Compress::Raw::Zlib::InflateScan::new { my $pkg = shift ; my ($got) = ParseParameters(0, { 'CRC32' => [1, 1, Parse_boolean, 0], 'ADLER32' => [1, 1, Parse_boolean, 0], 'Bufsize' => [1, 1, Parse_unsigned, 4096], 'WindowBits' => [1, 1, Parse_signed, -MAX_WBITS()], 'Dictionary' => [1, 1, Parse_any, ""], }, @_) ; croak "Compress::Raw::Zlib::InflateScan::new: Bufsize must be >= 1, you specified " . $got->value('Bufsize') unless $got->value('Bufsize') >= 1; my $flags = 0 ; #$flags |= FLAG_APPEND if $got->value('AppendOutput') ; $flags |= FLAG_CRC if $got->value('CRC32') ; $flags |= FLAG_ADLER if $got->value('ADLER32') ; #$flags |= FLAG_CONSUME_INPUT if $got->value('ConsumeInput') ; _inflateScanInit($flags, $got->value('WindowBits'), $got->value('Bufsize'), '') ; } sub Compress::Raw::Zlib::inflateScanStream::createDeflateStream { my $pkg = shift ; my ($got) = ParseParameters(0, { 'AppendOutput' => [1, 1, Parse_boolean, 0], 'CRC32' => [1, 1, Parse_boolean, 0], 'ADLER32' => [1, 1, Parse_boolean, 0], 'Bufsize' => [1, 1, Parse_unsigned, 4096], 'Level' => [1, 1, Parse_signed, Z_DEFAULT_COMPRESSION()], 'Method' => [1, 1, Parse_unsigned, Z_DEFLATED()], 'WindowBits' => [1, 1, Parse_signed, - MAX_WBITS()], 'MemLevel' => [1, 1, Parse_unsigned, MAX_MEM_LEVEL()], 'Strategy' => [1, 1, Parse_unsigned, Z_DEFAULT_STRATEGY()], }, @_) ; croak "Compress::Raw::Zlib::InflateScan::createDeflateStream: Bufsize must be >= 1, you specified " . $got->value('Bufsize') unless $got->value('Bufsize') >= 1; my $flags = 0 ; $flags |= FLAG_APPEND if $got->value('AppendOutput') ; $flags |= FLAG_CRC if $got->value('CRC32') ; $flags |= FLAG_ADLER if $got->value('ADLER32') ; $pkg->_createDeflateStream($flags, $got->value('Level'), $got->value('Method'), $got->value('WindowBits'), $got->value('MemLevel'), $got->value('Strategy'), $got->value('Bufsize'), ) ; } sub Compress::Raw::Zlib::inflateScanStream::inflate { my $self = shift ; my $buffer = $_[1]; my $eof = $_[2]; my $status = $self->scan(@_); if ($status == Z_OK() && $_[2]) { my $byte = ' '; $status = $self->scan(\$byte, $_[1]) ; } return $status ; } sub Compress::Raw::Zlib::deflateStream::deflateParams { my $self = shift ; my ($got) = ParseParameters(0, { 'Level' => [1, 1, Parse_signed, undef], 'Strategy' => [1, 1, Parse_unsigned, undef], 'Bufsize' => [1, 1, Parse_unsigned, undef], }, @_) ; croak "Compress::Raw::Zlib::deflateParams needs Level and/or Strategy" unless $got->parsed('Level') + $got->parsed('Strategy') + $got->parsed('Bufsize'); croak "Compress::Raw::Zlib::Inflate::deflateParams: Bufsize must be >= 1, you specified " . $got->value('Bufsize') if $got->parsed('Bufsize') && $got->value('Bufsize') <= 1; my $flags = 0; $flags |= 1 if $got->parsed('Level') ; $flags |= 2 if $got->parsed('Strategy') ; $flags |= 4 if $got->parsed('Bufsize') ; $self->_deflateParams($flags, $got->value('Level'), $got->value('Strategy'), $got->value('Bufsize')); } # Autoload methods go after __END__, and are processed by the autosplit program. 1; __END__ #line 1420 FILE64611e37/Cwd.pmB#line 1 "/usr/local/lib/perl/5.8.8/Cwd.pm" package Cwd; #line 169 use strict; use Exporter; use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION); $VERSION = '3.30'; my $xs_version = $VERSION; $VERSION = eval $VERSION; @ISA = qw/ Exporter /; @EXPORT = qw(cwd getcwd fastcwd fastgetcwd); push @EXPORT, qw(getdcwd) if $^O eq 'MSWin32'; @EXPORT_OK = qw(chdir abs_path fast_abs_path realpath fast_realpath); # sys_cwd may keep the builtin command # All the functionality of this module may provided by builtins, # there is no sense to process the rest of the file. # The best choice may be to have this in BEGIN, but how to return from BEGIN? if ($^O eq 'os2') { local $^W = 0; *cwd = defined &sys_cwd ? \&sys_cwd : \&_os2_cwd; *getcwd = \&cwd; *fastgetcwd = \&cwd; *fastcwd = \&cwd; *fast_abs_path = \&sys_abspath if defined &sys_abspath; *abs_path = \&fast_abs_path; *realpath = \&fast_abs_path; *fast_realpath = \&fast_abs_path; return 1; } # Need to look up the feature settings on VMS. The preferred way is to use the # VMS::Feature module, but that may not be available to dual life modules. my $use_vms_feature; BEGIN { if ($^O eq 'VMS') { if (eval { local $SIG{__DIE__}; require VMS::Feature; }) { $use_vms_feature = 1; } } } # Need to look up the UNIX report mode. This may become a dynamic mode # in the future. sub _vms_unix_rpt { my $unix_rpt; if ($use_vms_feature) { $unix_rpt = VMS::Feature::current("filename_unix_report"); } else { my $env_unix_rpt = $ENV{'DECC$FILENAME_UNIX_REPORT'} || ''; $unix_rpt = $env_unix_rpt =~ /^[ET1]/i; } return $unix_rpt; } # Need to look up the EFS character set mode. This may become a dynamic # mode in the future. sub _vms_efs { my $efs; if ($use_vms_feature) { $efs = VMS::Feature::current("efs_charset"); } else { my $env_efs = $ENV{'DECC$EFS_CHARSET'} || ''; $efs = $env_efs =~ /^[ET1]/i; } return $efs; } # If loading the XS stuff doesn't work, we can fall back to pure perl eval { if ( $] >= 5.006 ) { require XSLoader; XSLoader::load( __PACKAGE__, $xs_version); } else { require DynaLoader; push @ISA, 'DynaLoader'; __PACKAGE__->bootstrap( $xs_version ); } }; # Must be after the DynaLoader stuff: $VERSION = eval $VERSION; # Big nasty table of function aliases my %METHOD_MAP = ( VMS => { cwd => '_vms_cwd', getcwd => '_vms_cwd', fastcwd => '_vms_cwd', fastgetcwd => '_vms_cwd', abs_path => '_vms_abs_path', fast_abs_path => '_vms_abs_path', }, MSWin32 => { # We assume that &_NT_cwd is defined as an XSUB or in the core. cwd => '_NT_cwd', getcwd => '_NT_cwd', fastcwd => '_NT_cwd', fastgetcwd => '_NT_cwd', abs_path => 'fast_abs_path', realpath => 'fast_abs_path', }, dos => { cwd => '_dos_cwd', getcwd => '_dos_cwd', fastgetcwd => '_dos_cwd', fastcwd => '_dos_cwd', abs_path => 'fast_abs_path', }, # QNX4. QNX6 has a $os of 'nto'. qnx => { cwd => '_qnx_cwd', getcwd => '_qnx_cwd', fastgetcwd => '_qnx_cwd', fastcwd => '_qnx_cwd', abs_path => '_qnx_abs_path', fast_abs_path => '_qnx_abs_path', }, cygwin => { getcwd => 'cwd', fastgetcwd => 'cwd', fastcwd => 'cwd', abs_path => 'fast_abs_path', realpath => 'fast_abs_path', }, epoc => { cwd => '_epoc_cwd', getcwd => '_epoc_cwd', fastgetcwd => '_epoc_cwd', fastcwd => '_epoc_cwd', abs_path => 'fast_abs_path', }, MacOS => { getcwd => 'cwd', fastgetcwd => 'cwd', fastcwd => 'cwd', abs_path => 'fast_abs_path', }, ); $METHOD_MAP{NT} = $METHOD_MAP{MSWin32}; # Find the pwd command in the expected locations. We assume these # are safe. This prevents _backtick_pwd() consulting $ENV{PATH} # so everything works under taint mode. my $pwd_cmd; foreach my $try ('/bin/pwd', '/usr/bin/pwd', '/QOpenSys/bin/pwd', # OS/400 PASE. ) { if( -x $try ) { $pwd_cmd = $try; last; } } my $found_pwd_cmd = defined($pwd_cmd); unless ($pwd_cmd) { # Isn't this wrong? _backtick_pwd() will fail if somenone has # pwd in their path but it is not /bin/pwd or /usr/bin/pwd? # See [perl #16774]. --jhi $pwd_cmd = 'pwd'; } # Lazy-load Carp sub _carp { require Carp; Carp::carp(@_) } sub _croak { require Carp; Carp::croak(@_) } # The 'natural and safe form' for UNIX (pwd may be setuid root) sub _backtick_pwd { # Localize %ENV entries in a way that won't create new hash keys my @localize = grep exists $ENV{$_}, qw(PATH IFS CDPATH ENV BASH_ENV); local @ENV{@localize}; my $cwd = `$pwd_cmd`; # Belt-and-suspenders in case someone said "undef $/". local $/ = "\n"; # `pwd` may fail e.g. if the disk is full chomp($cwd) if defined $cwd; $cwd; } # Since some ports may predefine cwd internally (e.g., NT) # we take care not to override an existing definition for cwd(). unless ($METHOD_MAP{$^O}{cwd} or defined &cwd) { # The pwd command is not available in some chroot(2)'ed environments my $sep = $Config::Config{path_sep} || ':'; my $os = $^O; # Protect $^O from tainting # Try again to find a pwd, this time searching the whole PATH. if (defined $ENV{PATH} and $os ne 'MSWin32') { # no pwd on Windows my @candidates = split($sep, $ENV{PATH}); while (!$found_pwd_cmd and @candidates) { my $candidate = shift @candidates; $found_pwd_cmd = 1 if -x "$candidate/pwd"; } } # MacOS has some special magic to make `pwd` work. if( $os eq 'MacOS' || $found_pwd_cmd ) { *cwd = \&_backtick_pwd; } else { *cwd = \&getcwd; } } if ($^O eq 'cygwin') { # We need to make sure cwd() is called with no args, because it's # got an arg-less prototype and will die if args are present. local $^W = 0; my $orig_cwd = \&cwd; *cwd = sub { &$orig_cwd() } } # set a reasonable (and very safe) default for fastgetcwd, in case it # isn't redefined later (20001212 rspier) *fastgetcwd = \&cwd; # A non-XS version of getcwd() - also used to bootstrap the perl build # process, when miniperl is running and no XS loading happens. sub _perl_getcwd { abs_path('.'); } # By John Bazik # # Usage: $cwd = &fastcwd; # # This is a faster version of getcwd. It's also more dangerous because # you might chdir out of a directory that you can't chdir back into. sub fastcwd_ { my($odev, $oino, $cdev, $cino, $tdev, $tino); my(@path, $path); local(*DIR); my($orig_cdev, $orig_cino) = stat('.'); ($cdev, $cino) = ($orig_cdev, $orig_cino); for (;;) { my $direntry; ($odev, $oino) = ($cdev, $cino); CORE::chdir('..') || return undef; ($cdev, $cino) = stat('.'); last if $odev == $cdev && $oino == $cino; opendir(DIR, '.') || return undef; for (;;) { $direntry = readdir(DIR); last unless defined $direntry; next if $direntry eq '.'; next if $direntry eq '..'; ($tdev, $tino) = lstat($direntry); last unless $tdev != $odev || $tino != $oino; } closedir(DIR); return undef unless defined $direntry; # should never happen unshift(@path, $direntry); } $path = '/' . join('/', @path); if ($^O eq 'apollo') { $path = "/".$path; } # At this point $path may be tainted (if tainting) and chdir would fail. # Untaint it then check that we landed where we started. $path =~ /^(.*)\z/s # untaint && CORE::chdir($1) or return undef; ($cdev, $cino) = stat('.'); die "Unstable directory path, current directory changed unexpectedly" if $cdev != $orig_cdev || $cino != $orig_cino; $path; } if (not defined &fastcwd) { *fastcwd = \&fastcwd_ } # Keeps track of current working directory in PWD environment var # Usage: # use Cwd 'chdir'; # chdir $newdir; my $chdir_init = 0; sub chdir_init { if ($ENV{'PWD'} and $^O ne 'os2' and $^O ne 'dos' and $^O ne 'MSWin32') { my($dd,$di) = stat('.'); my($pd,$pi) = stat($ENV{'PWD'}); if (!defined $dd or !defined $pd or $di != $pi or $dd != $pd) { $ENV{'PWD'} = cwd(); } } else { my $wd = cwd(); $wd = Win32::GetFullPathName($wd) if $^O eq 'MSWin32'; $ENV{'PWD'} = $wd; } # Strip an automounter prefix (where /tmp_mnt/foo/bar == /foo/bar) if ($^O ne 'MSWin32' and $ENV{'PWD'} =~ m|(/[^/]+(/[^/]+/[^/]+))(.*)|s) { my($pd,$pi) = stat($2); my($dd,$di) = stat($1); if (defined $pd and defined $dd and $di == $pi and $dd == $pd) { $ENV{'PWD'}="$2$3"; } } $chdir_init = 1; } sub chdir { my $newdir = @_ ? shift : ''; # allow for no arg (chdir to HOME dir) $newdir =~ s|///*|/|g unless $^O eq 'MSWin32'; chdir_init() unless $chdir_init; my $newpwd; if ($^O eq 'MSWin32') { # get the full path name *before* the chdir() $newpwd = Win32::GetFullPathName($newdir); } return 0 unless CORE::chdir $newdir; if ($^O eq 'VMS') { return $ENV{'PWD'} = $ENV{'DEFAULT'} } elsif ($^O eq 'MacOS') { return $ENV{'PWD'} = cwd(); } elsif ($^O eq 'MSWin32') { $ENV{'PWD'} = $newpwd; return 1; } if (ref $newdir eq 'GLOB') { # in case a file/dir handle is passed in $ENV{'PWD'} = cwd(); } elsif ($newdir =~ m#^/#s) { $ENV{'PWD'} = $newdir; } else { my @curdir = split(m#/#,$ENV{'PWD'}); @curdir = ('') unless @curdir; my $component; foreach $component (split(m#/#, $newdir)) { next if $component eq '.'; pop(@curdir),next if $component eq '..'; push(@curdir,$component); } $ENV{'PWD'} = join('/',@curdir) || '/'; } 1; } sub _perl_abs_path { my $start = @_ ? shift : '.'; my($dotdots, $cwd, @pst, @cst, $dir, @tst); unless (@cst = stat( $start )) { _carp("stat($start): $!"); return ''; } unless (-d _) { # Make sure we can be invoked on plain files, not just directories. # NOTE that this routine assumes that '/' is the only directory separator. my ($dir, $file) = $start =~ m{^(.*)/(.+)$} or return cwd() . '/' . $start; # Can't use "-l _" here, because the previous stat was a stat(), not an lstat(). if (-l $start) { my $link_target = readlink($start); die "Can't resolve link $start: $!" unless defined $link_target; require File::Spec; $link_target = $dir . '/' . $link_target unless File::Spec->file_name_is_absolute($link_target); return abs_path($link_target); } return $dir ? abs_path($dir) . "/$file" : "/$file"; } $cwd = ''; $dotdots = $start; do { $dotdots .= '/..'; @pst = @cst; local *PARENT; unless (opendir(PARENT, $dotdots)) { # probably a permissions issue. Try the native command. return File::Spec->rel2abs( $start, _backtick_pwd() ); } unless (@cst = stat($dotdots)) { _carp("stat($dotdots): $!"); closedir(PARENT); return ''; } if ($pst[0] == $cst[0] && $pst[1] == $cst[1]) { $dir = undef; } else { do { unless (defined ($dir = readdir(PARENT))) { _carp("readdir($dotdots): $!"); closedir(PARENT); return ''; } $tst[0] = $pst[0]+1 unless (@tst = lstat("$dotdots/$dir")) } while ($dir eq '.' || $dir eq '..' || $tst[0] != $pst[0] || $tst[1] != $pst[1]); } $cwd = (defined $dir ? "$dir" : "" ) . "/$cwd" ; closedir(PARENT); } while (defined $dir); chop($cwd) unless $cwd eq '/'; # drop the trailing / $cwd; } my $Curdir; sub fast_abs_path { local $ENV{PWD} = $ENV{PWD} || ''; # Guard against clobberage my $cwd = getcwd(); require File::Spec; my $path = @_ ? shift : ($Curdir ||= File::Spec->curdir); # Detaint else we'll explode in taint mode. This is safe because # we're not doing anything dangerous with it. ($path) = $path =~ /(.*)/; ($cwd) = $cwd =~ /(.*)/; unless (-e $path) { _croak("$path: No such file or directory"); } unless (-d _) { # Make sure we can be invoked on plain files, not just directories. my ($vol, $dir, $file) = File::Spec->splitpath($path); return File::Spec->catfile($cwd, $path) unless length $dir; if (-l $path) { my $link_target = readlink($path); die "Can't resolve link $path: $!" unless defined $link_target; $link_target = File::Spec->catpath($vol, $dir, $link_target) unless File::Spec->file_name_is_absolute($link_target); return fast_abs_path($link_target); } return $dir eq File::Spec->rootdir ? File::Spec->catpath($vol, $dir, $file) : fast_abs_path(File::Spec->catpath($vol, $dir, '')) . '/' . $file; } if (!CORE::chdir($path)) { _croak("Cannot chdir to $path: $!"); } my $realpath = getcwd(); if (! ((-d $cwd) && (CORE::chdir($cwd)))) { _croak("Cannot chdir back to $cwd: $!"); } $realpath; } # added function alias to follow principle of least surprise # based on previous aliasing. --tchrist 27-Jan-00 *fast_realpath = \&fast_abs_path; # --- PORTING SECTION --- # VMS: $ENV{'DEFAULT'} points to default directory at all times # 06-Mar-1996 Charles Bailey bailey@newman.upenn.edu # Note: Use of Cwd::chdir() causes the logical name PWD to be defined # in the process logical name table as the default device and directory # seen by Perl. This may not be the same as the default device # and directory seen by DCL after Perl exits, since the effects # the CRTL chdir() function persist only until Perl exits. sub _vms_cwd { return $ENV{'DEFAULT'}; } sub _vms_abs_path { return $ENV{'DEFAULT'} unless @_; my $path = shift; my $efs = _vms_efs; my $unix_rpt = _vms_unix_rpt; if (defined &VMS::Filespec::vmsrealpath) { my $path_unix = 0; my $path_vms = 0; $path_unix = 1 if ($path =~ m#(?<=\^)/#); $path_unix = 1 if ($path =~ /^\.\.?$/); $path_vms = 1 if ($path =~ m#[\[<\]]#); $path_vms = 1 if ($path =~ /^--?$/); my $unix_mode = $path_unix; if ($efs) { # In case of a tie, the Unix report mode decides. if ($path_vms == $path_unix) { $unix_mode = $unix_rpt; } else { $unix_mode = 0 if $path_vms; } } if ($unix_mode) { # Unix format return VMS::Filespec::unixrealpath($path); } # VMS format my $new_path = VMS::Filespec::vmsrealpath($path); # Perl expects directories to be in directory format $new_path = VMS::Filespec::pathify($new_path) if -d $path; return $new_path; } # Fallback to older algorithm if correct ones are not # available. if (-l $path) { my $link_target = readlink($path); die "Can't resolve link $path: $!" unless defined $link_target; return _vms_abs_path($link_target); } # may need to turn foo.dir into [.foo] my $pathified = VMS::Filespec::pathify($path); $path = $pathified if defined $pathified; return VMS::Filespec::rmsexpand($path); } sub _os2_cwd { $ENV{'PWD'} = `cmd /c cd`; chomp $ENV{'PWD'}; $ENV{'PWD'} =~ s:\\:/:g ; return $ENV{'PWD'}; } sub _win32_cwd { if (defined &DynaLoader::boot_DynaLoader) { $ENV{'PWD'} = Win32::GetCwd(); } else { # miniperl chomp($ENV{'PWD'} = `cd`); } $ENV{'PWD'} =~ s:\\:/:g ; return $ENV{'PWD'}; } *_NT_cwd = defined &Win32::GetCwd ? \&_win32_cwd : \&_os2_cwd; sub _dos_cwd { if (!defined &Dos::GetCwd) { $ENV{'PWD'} = `command /c cd`; chomp $ENV{'PWD'}; $ENV{'PWD'} =~ s:\\:/:g ; } else { $ENV{'PWD'} = Dos::GetCwd(); } return $ENV{'PWD'}; } sub _qnx_cwd { local $ENV{PATH} = ''; local $ENV{CDPATH} = ''; local $ENV{ENV} = ''; $ENV{'PWD'} = `/usr/bin/fullpath -t`; chomp $ENV{'PWD'}; return $ENV{'PWD'}; } sub _qnx_abs_path { local $ENV{PATH} = ''; local $ENV{CDPATH} = ''; local $ENV{ENV} = ''; my $path = @_ ? shift : '.'; local *REALPATH; defined( open(REALPATH, '-|') || exec '/usr/bin/fullpath', '-t', $path ) or die "Can't open /usr/bin/fullpath: $!"; my $realpath = ; close REALPATH; chomp $realpath; return $realpath; } sub _epoc_cwd { $ENV{'PWD'} = EPOC::getcwd(); return $ENV{'PWD'}; } # Now that all the base-level functions are set up, alias the # user-level functions to the right places if (exists $METHOD_MAP{$^O}) { my $map = $METHOD_MAP{$^O}; foreach my $name (keys %$map) { local $^W = 0; # assignments trigger 'subroutine redefined' warning no strict 'refs'; *{$name} = \&{$map->{$name}}; } } # In case the XS version doesn't load. *abs_path = \&_perl_abs_path unless defined &abs_path; *getcwd = \&_perl_getcwd unless defined &getcwd; # added function alias for those of us more # used to the libc function. --tchrist 27-Jan-00 *realpath = \&abs_path; 1; FILE9dfb7bca/File/Spec.pm#line 1 "/usr/local/lib/perl/5.8.8/File/Spec.pm" package File::Spec; use strict; use vars qw(@ISA $VERSION); $VERSION = '3.30'; $VERSION = eval $VERSION; my %module = (MacOS => 'Mac', MSWin32 => 'Win32', os2 => 'OS2', VMS => 'VMS', epoc => 'Epoc', NetWare => 'Win32', # Yes, File::Spec::Win32 works on NetWare. symbian => 'Win32', # Yes, File::Spec::Win32 works on symbian. dos => 'OS2', # Yes, File::Spec::OS2 works on DJGPP. cygwin => 'Cygwin'); my $module = $module{$^O} || 'Unix'; require "File/Spec/$module.pm"; @ISA = ("File::Spec::$module"); 1; __END__ #line 337 FILE950846e2/File/Spec/Unix.pm_#line 1 "/usr/local/lib/perl/5.8.8/File/Spec/Unix.pm" package File::Spec::Unix; use strict; use vars qw($VERSION); $VERSION = '3.30'; $VERSION = eval $VERSION; #line 42 sub canonpath { my ($self,$path) = @_; return unless defined $path; # Handle POSIX-style node names beginning with double slash (qnx, nto) # (POSIX says: "a pathname that begins with two successive slashes # may be interpreted in an implementation-defined manner, although # more than two leading slashes shall be treated as a single slash.") my $node = ''; my $double_slashes_special = $^O eq 'qnx' || $^O eq 'nto'; if ( $double_slashes_special && ( $path =~ s{^(//[^/]+)/?\z}{}s || $path =~ s{^(//[^/]+)/}{/}s ) ) { $node = $1; } # This used to be # $path =~ s|/+|/|g unless ($^O eq 'cygwin'); # but that made tests 29, 30, 35, 46, and 213 (as of #13272) to fail # (Mainly because trailing "" directories didn't get stripped). # Why would cygwin avoid collapsing multiple slashes into one? --jhi $path =~ s|/{2,}|/|g; # xx////xx -> xx/xx $path =~ s{(?:/\.)+(?:/|\z)}{/}g; # xx/././xx -> xx/xx $path =~ s|^(?:\./)+||s unless $path eq "./"; # ./xx -> xx $path =~ s|^/(?:\.\./)+|/|; # /../../xx -> xx $path =~ s|^/\.\.$|/|; # /.. -> / $path =~ s|/\z|| unless $path eq "/"; # xx/ -> xx return "$node$path"; } #line 82 sub catdir { my $self = shift; $self->canonpath(join('/', @_, '')); # '' because need a trailing '/' } #line 95 sub catfile { my $self = shift; my $file = $self->canonpath(pop @_); return $file unless @_; my $dir = $self->catdir(@_); $dir .= "/" unless substr($dir,-1) eq "/"; return $dir.$file; } #line 110 sub curdir { '.' } #line 118 sub devnull { '/dev/null' } #line 126 sub rootdir { '/' } #line 142 my $tmpdir; sub _tmpdir { return $tmpdir if defined $tmpdir; my $self = shift; my @dirlist = @_; { no strict 'refs'; if (${"\cTAINT"}) { # Check for taint mode on perl >= 5.8.0 require Scalar::Util; @dirlist = grep { ! Scalar::Util::tainted($_) } @dirlist; } } foreach (@dirlist) { next unless defined && -d && -w _; $tmpdir = $_; last; } $tmpdir = $self->curdir unless defined $tmpdir; $tmpdir = defined $tmpdir && $self->canonpath($tmpdir); return $tmpdir; } sub tmpdir { return $tmpdir if defined $tmpdir; $tmpdir = $_[0]->_tmpdir( $ENV{TMPDIR}, "/tmp" ); } #line 175 sub updir { '..' } #line 184 sub no_upwards { my $self = shift; return grep(!/^\.{1,2}\z/s, @_); } #line 196 sub case_tolerant { 0 } #line 208 sub file_name_is_absolute { my ($self,$file) = @_; return scalar($file =~ m:^/:s); } #line 219 sub path { return () unless exists $ENV{PATH}; my @path = split(':', $ENV{PATH}); foreach (@path) { $_ = '.' if $_ eq '' } return @path; } #line 232 sub join { my $self = shift; return $self->catfile(@_); } #line 257 sub splitpath { my ($self,$path, $nofile) = @_; my ($volume,$directory,$file) = ('','',''); if ( $nofile ) { $directory = $path; } else { $path =~ m|^ ( (?: .* / (?: \.\.?\z )? )? ) ([^/]*) |xs; $directory = $1; $file = $2; } return ($volume,$directory,$file); } #line 299 sub splitdir { return split m|/|, $_[1], -1; # Preserve trailing fields } #line 313 sub catpath { my ($self,$volume,$directory,$file) = @_; if ( $directory ne '' && $file ne '' && substr( $directory, -1 ) ne '/' && substr( $file, 0, 1 ) ne '/' ) { $directory .= "/$file" ; } else { $directory .= $file ; } return $directory ; } #line 358 sub abs2rel { my($self,$path,$base) = @_; $base = $self->_cwd() unless defined $base and length $base; ($path, $base) = map $self->canonpath($_), $path, $base; if (grep $self->file_name_is_absolute($_), $path, $base) { ($path, $base) = map $self->rel2abs($_), $path, $base; } else { # save a couple of cwd()s if both paths are relative ($path, $base) = map $self->catdir('/', $_), $path, $base; } my ($path_volume) = $self->splitpath($path, 1); my ($base_volume) = $self->splitpath($base, 1); # Can't relativize across volumes return $path unless $path_volume eq $base_volume; my $path_directories = ($self->splitpath($path, 1))[1]; my $base_directories = ($self->splitpath($base, 1))[1]; # For UNC paths, the user might give a volume like //foo/bar that # strictly speaking has no directory portion. Treat it as if it # had the root directory for that volume. if (!length($base_directories) and $self->file_name_is_absolute($base)) { $base_directories = $self->rootdir; } # Now, remove all leading components that are the same my @pathchunks = $self->splitdir( $path_directories ); my @basechunks = $self->splitdir( $base_directories ); if ($base_directories eq $self->rootdir) { shift @pathchunks; return $self->canonpath( $self->catpath('', $self->catdir( @pathchunks ), '') ); } while (@pathchunks && @basechunks && $self->_same($pathchunks[0], $basechunks[0])) { shift @pathchunks ; shift @basechunks ; } return $self->curdir unless @pathchunks || @basechunks; # $base now contains the directories the resulting relative path # must ascend out of before it can descend to $path_directory. my $result_dirs = $self->catdir( ($self->updir) x @basechunks, @pathchunks ); return $self->canonpath( $self->catpath('', $result_dirs, '') ); } sub _same { $_[1] eq $_[2]; } #line 439 sub rel2abs { my ($self,$path,$base ) = @_; # Clean up $path if ( ! $self->file_name_is_absolute( $path ) ) { # Figure out the effective $base and clean it up. if ( !defined( $base ) || $base eq '' ) { $base = $self->_cwd(); } elsif ( ! $self->file_name_is_absolute( $base ) ) { $base = $self->rel2abs( $base ) ; } else { $base = $self->canonpath( $base ) ; } # Glom them together $path = $self->catdir( $base, $path ) ; } return $self->canonpath( $path ) ; } #line 477 # Internal routine to File::Spec, no point in making this public since # it is the standard Cwd interface. Most of the platform-specific # File::Spec subclasses use this. sub _cwd { require Cwd; Cwd::getcwd(); } # Internal method to reduce xx\..\yy -> yy sub _collapse { my($fs, $path) = @_; my $updir = $fs->updir; my $curdir = $fs->curdir; my($vol, $dirs, $file) = $fs->splitpath($path); my @dirs = $fs->splitdir($dirs); pop @dirs if @dirs && $dirs[-1] eq ''; my @collapsed; foreach my $dir (@dirs) { if( $dir eq $updir and # if we have an updir @collapsed and # and something to collapse length $collapsed[-1] and # and its not the rootdir $collapsed[-1] ne $updir and # nor another updir $collapsed[-1] ne $curdir # nor the curdir ) { # then pop @collapsed; # collapse } else { # else push @collapsed, $dir; # just hang onto it } } return $fs->catpath($vol, $fs->catdir(@collapsed), $file ); } 1; FILE41df0d8b/IO.pm#line 1 "/usr/local/lib/perl/5.8.8/IO.pm" # package IO; use XSLoader (); use Carp; use strict; use warnings; our $VERSION = "1.25"; XSLoader::load 'IO', $VERSION; sub import { shift; warnings::warnif('deprecated', qq{Parameterless "use IO" deprecated}) if @_ == 0 ; my @l = @_ ? @_ : qw(Handle Seekable File Pipe Socket Dir); eval join("", map { "require IO::" . (/(\w+)/)[0] . ";\n" } @l) or croak $@; } 1; __END__ #line 68 FILE9197ebef/IO/File.pm#line 1 "/usr/local/lib/perl/5.8.8/IO/File.pm" # package IO::File; #line 126 use 5.006_001; use strict; our($VERSION, @EXPORT, @EXPORT_OK, @ISA); use Carp; use Symbol; use SelectSaver; use IO::Seekable; use File::Spec; require Exporter; @ISA = qw(IO::Handle IO::Seekable Exporter); $VERSION = "1.14"; @EXPORT = @IO::Seekable::EXPORT; eval { # Make all Fcntl O_XXX constants available for importing require Fcntl; my @O = grep /^O_/, @Fcntl::EXPORT; Fcntl->import(@O); # first we import what we want to export push(@EXPORT, @O); }; ################################################ ## Constructor ## sub new { my $type = shift; my $class = ref($type) || $type || "IO::File"; @_ >= 0 && @_ <= 3 or croak "usage: new $class [FILENAME [,MODE [,PERMS]]]"; my $fh = $class->SUPER::new(); if (@_) { $fh->open(@_) or return undef; } $fh; } ################################################ ## Open ## sub open { @_ >= 2 && @_ <= 4 or croak 'usage: $fh->open(FILENAME [,MODE [,PERMS]])'; my ($fh, $file) = @_; if (@_ > 2) { my ($mode, $perms) = @_[2, 3]; if ($mode =~ /^\d+$/) { defined $perms or $perms = 0666; return sysopen($fh, $file, $mode, $perms); } elsif ($mode =~ /:/) { return open($fh, $mode, $file) if @_ == 3; croak 'usage: $fh->open(FILENAME, IOLAYERS)'; } else { return open($fh, IO::Handle::_open_mode_string($mode), $file); } } open($fh, $file); } ################################################ ## Binmode ## sub binmode { ( @_ == 1 or @_ == 2 ) or croak 'usage $fh->binmode([LAYER])'; my($fh, $layer) = @_; return binmode $$fh unless $layer; return binmode $$fh, $layer; } 1; FILEe9f3cd89/IO/Handle.pmM#line 1 "/usr/local/lib/perl/5.8.8/IO/Handle.pm" package IO::Handle; #line 259 use 5.006_001; use strict; our($VERSION, @EXPORT_OK, @ISA); use Carp; use Symbol; use SelectSaver; use IO (); # Load the XS module require Exporter; @ISA = qw(Exporter); $VERSION = "1.28"; $VERSION = eval $VERSION; @EXPORT_OK = qw( autoflush output_field_separator output_record_separator input_record_separator input_line_number format_page_number format_lines_per_page format_lines_left format_name format_top_name format_line_break_characters format_formfeed format_write print printf say getline getlines printflush flush SEEK_SET SEEK_CUR SEEK_END _IOFBF _IOLBF _IONBF ); ################################################ ## Constructors, destructors. ## sub new { my $class = ref($_[0]) || $_[0] || "IO::Handle"; @_ == 1 or croak "usage: new $class"; my $io = gensym; bless $io, $class; } sub new_from_fd { my $class = ref($_[0]) || $_[0] || "IO::Handle"; @_ == 3 or croak "usage: new_from_fd $class FD, MODE"; my $io = gensym; shift; IO::Handle::fdopen($io, @_) or return undef; bless $io, $class; } # # There is no need for DESTROY to do anything, because when the # last reference to an IO object is gone, Perl automatically # closes its associated files (if any). However, to avoid any # attempts to autoload DESTROY, we here define it to do nothing. # sub DESTROY {} ################################################ ## Open and close. ## sub _open_mode_string { my ($mode) = @_; $mode =~ /^\+?(<|>>?)$/ or $mode =~ s/^r(\+?)$/$1/ or $mode =~ s/^a(\+?)$/$1>>/ or croak "IO::Handle: bad open mode: $mode"; $mode; } sub fdopen { @_ == 3 or croak 'usage: $io->fdopen(FD, MODE)'; my ($io, $fd, $mode) = @_; local(*GLOB); if (ref($fd) && "".$fd =~ /GLOB\(/o) { # It's a glob reference; Alias it as we cannot get name of anon GLOBs my $n = qualify(*GLOB); *GLOB = *{*$fd}; $fd = $n; } elsif ($fd =~ m#^\d+$#) { # It's an FD number; prefix with "=". $fd = "=$fd"; } open($io, _open_mode_string($mode) . '&' . $fd) ? $io : undef; } sub close { @_ == 1 or croak 'usage: $io->close()'; my($io) = @_; close($io); } ################################################ ## Normal I/O functions. ## # flock # select sub opened { @_ == 1 or croak 'usage: $io->opened()'; defined fileno($_[0]); } sub fileno { @_ == 1 or croak 'usage: $io->fileno()'; fileno($_[0]); } sub getc { @_ == 1 or croak 'usage: $io->getc()'; getc($_[0]); } sub eof { @_ == 1 or croak 'usage: $io->eof()'; eof($_[0]); } sub print { @_ or croak 'usage: $io->print(ARGS)'; my $this = shift; print $this @_; } sub printf { @_ >= 2 or croak 'usage: $io->printf(FMT,[ARGS])'; my $this = shift; printf $this @_; } sub say { @_ or croak 'usage: $io->say(ARGS)'; my $this = shift; local $\ = "\n"; print $this @_; } sub getline { @_ == 1 or croak 'usage: $io->getline()'; my $this = shift; return scalar <$this>; } *gets = \&getline; # deprecated sub getlines { @_ == 1 or croak 'usage: $io->getlines()'; wantarray or croak 'Can\'t call $io->getlines in a scalar context, use $io->getline'; my $this = shift; return <$this>; } sub truncate { @_ == 2 or croak 'usage: $io->truncate(LEN)'; truncate($_[0], $_[1]); } sub read { @_ == 3 || @_ == 4 or croak 'usage: $io->read(BUF, LEN [, OFFSET])'; read($_[0], $_[1], $_[2], $_[3] || 0); } sub sysread { @_ == 3 || @_ == 4 or croak 'usage: $io->sysread(BUF, LEN [, OFFSET])'; sysread($_[0], $_[1], $_[2], $_[3] || 0); } sub write { @_ >= 2 && @_ <= 4 or croak 'usage: $io->write(BUF [, LEN [, OFFSET]])'; local($\) = ""; $_[2] = length($_[1]) unless defined $_[2]; print { $_[0] } substr($_[1], $_[3] || 0, $_[2]); } sub syswrite { @_ >= 2 && @_ <= 4 or croak 'usage: $io->syswrite(BUF [, LEN [, OFFSET]])'; if (defined($_[2])) { syswrite($_[0], $_[1], $_[2], $_[3] || 0); } else { syswrite($_[0], $_[1]); } } sub stat { @_ == 1 or croak 'usage: $io->stat()'; stat($_[0]); } ################################################ ## State modification functions. ## sub autoflush { my $old = new SelectSaver qualify($_[0], caller); my $prev = $|; $| = @_ > 1 ? $_[1] : 1; $prev; } sub output_field_separator { carp "output_field_separator is not supported on a per-handle basis" if ref($_[0]); my $prev = $,; $, = $_[1] if @_ > 1; $prev; } sub output_record_separator { carp "output_record_separator is not supported on a per-handle basis" if ref($_[0]); my $prev = $\; $\ = $_[1] if @_ > 1; $prev; } sub input_record_separator { carp "input_record_separator is not supported on a per-handle basis" if ref($_[0]); my $prev = $/; $/ = $_[1] if @_ > 1; $prev; } sub input_line_number { local $.; () = tell qualify($_[0], caller) if ref($_[0]); my $prev = $.; $. = $_[1] if @_ > 1; $prev; } sub format_page_number { my $old; $old = new SelectSaver qualify($_[0], caller) if ref($_[0]); my $prev = $%; $% = $_[1] if @_ > 1; $prev; } sub format_lines_per_page { my $old; $old = new SelectSaver qualify($_[0], caller) if ref($_[0]); my $prev = $=; $= = $_[1] if @_ > 1; $prev; } sub format_lines_left { my $old; $old = new SelectSaver qualify($_[0], caller) if ref($_[0]); my $prev = $-; $- = $_[1] if @_ > 1; $prev; } sub format_name { my $old; $old = new SelectSaver qualify($_[0], caller) if ref($_[0]); my $prev = $~; $~ = qualify($_[1], caller) if @_ > 1; $prev; } sub format_top_name { my $old; $old = new SelectSaver qualify($_[0], caller) if ref($_[0]); my $prev = $^; $^ = qualify($_[1], caller) if @_ > 1; $prev; } sub format_line_break_characters { carp "format_line_break_characters is not supported on a per-handle basis" if ref($_[0]); my $prev = $:; $: = $_[1] if @_ > 1; $prev; } sub format_formfeed { carp "format_formfeed is not supported on a per-handle basis" if ref($_[0]); my $prev = $^L; $^L = $_[1] if @_ > 1; $prev; } sub formline { my $io = shift; my $picture = shift; local($^A) = $^A; local($\) = ""; formline($picture, @_); print $io $^A; } sub format_write { @_ < 3 || croak 'usage: $io->write( [FORMAT_NAME] )'; if (@_ == 2) { my ($io, $fmt) = @_; my $oldfmt = $io->format_name(qualify($fmt,caller)); CORE::write($io); $io->format_name($oldfmt); } else { CORE::write($_[0]); } } sub fcntl { @_ == 3 || croak 'usage: $io->fcntl( OP, VALUE );'; my ($io, $op) = @_; return fcntl($io, $op, $_[2]); } sub ioctl { @_ == 3 || croak 'usage: $io->ioctl( OP, VALUE );'; my ($io, $op) = @_; return ioctl($io, $op, $_[2]); } # this sub is for compatability with older releases of IO that used # a sub called constant to detemine if a constant existed -- GMB # # The SEEK_* and _IO?BF constants were the only constants at that time # any new code should just chech defined(&CONSTANT_NAME) sub constant { no strict 'refs'; my $name = shift; (($name =~ /^(SEEK_(SET|CUR|END)|_IO[FLN]BF)$/) && defined &{$name}) ? &{$name}() : undef; } # so that flush.pl can be deprecated sub printflush { my $io = shift; my $old; $old = new SelectSaver qualify($io, caller) if ref($io); local $| = 1; if(ref($io)) { print $io @_; } else { print @_; } } 1; FILE0ee40944/IO/Seekable.pm#line 1 "/usr/local/lib/perl/5.8.8/IO/Seekable.pm" # package IO::Seekable; #line 96 use 5.006_001; use Carp; use strict; our($VERSION, @EXPORT, @ISA); use IO::Handle (); # XXX we can't get these from IO::Handle or we'll get prototype # mismatch warnings on C :-( use Fcntl qw(SEEK_SET SEEK_CUR SEEK_END); require Exporter; @EXPORT = qw(SEEK_SET SEEK_CUR SEEK_END); @ISA = qw(Exporter); $VERSION = "1.10"; $VERSION = eval $VERSION; sub seek { @_ == 3 or croak 'usage: $io->seek(POS, WHENCE)'; seek($_[0], $_[1], $_[2]); } sub sysseek { @_ == 3 or croak 'usage: $io->sysseek(POS, WHENCE)'; sysseek($_[0], $_[1], $_[2]); } sub tell { @_ == 1 or croak 'usage: $io->tell()'; tell($_[0]); } 1; FILE251c6272/List/Util.pmf#line 1 "/usr/local/lib/perl/5.8.8/List/Util.pm" # List::Util.pm # # Copyright (c) 1997-2009 Graham Barr . All rights reserved. # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. # # This module is normally only loaded if the XS module is not available package List::Util; use strict; use vars qw(@ISA @EXPORT_OK $VERSION $XS_VERSION $TESTING_PERL_ONLY); require Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw(first min max minstr maxstr reduce sum shuffle); $VERSION = "1.21"; $XS_VERSION = $VERSION; $VERSION = eval $VERSION; eval { # PERL_DL_NONLAZY must be false, or any errors in loading will just # cause the perl code to be tested local $ENV{PERL_DL_NONLAZY} = 0 if $ENV{PERL_DL_NONLAZY}; eval { require XSLoader; XSLoader::load('List::Util', $XS_VERSION); 1; } or do { require DynaLoader; local @ISA = qw(DynaLoader); bootstrap List::Util $XS_VERSION; }; } unless $TESTING_PERL_ONLY; if (!defined &sum) { require List::Util::PP; List::Util::PP->import; } 1; __END__ #line 234 FILEc36700e3/Scalar/Util.pm#line 1 "/usr/local/lib/perl/5.8.8/Scalar/Util.pm" # Scalar::Util.pm # # Copyright (c) 1997-2007 Graham Barr . All rights reserved. # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. package Scalar::Util; use strict; use vars qw(@ISA @EXPORT_OK $VERSION @EXPORT_FAIL); require Exporter; require List::Util; # List::Util loads the XS @ISA = qw(Exporter); @EXPORT_OK = qw(blessed dualvar reftype weaken isweak tainted readonly openhandle refaddr isvstring looks_like_number set_prototype); $VERSION = "1.21"; $VERSION = eval $VERSION; unless (defined &dualvar) { # Load Pure Perl version if XS not loaded require Scalar::Util::PP; Scalar::Util::PP->import; push @EXPORT_FAIL, qw(weaken isweak dualvar isvstring set_prototype); } sub export_fail { if (grep { /dualvar/ } @EXPORT_FAIL) { # no XS loaded my $pat = join("|", @EXPORT_FAIL); if (my ($err) = grep { /^($pat)$/ } @_ ) { require Carp; Carp::croak("$err is only available with the XS version of Scalar::Util"); } } if (grep { /^(weaken|isweak)$/ } @_ ) { require Carp; Carp::croak("Weak references are not implemented in the version of perl"); } if (grep { /^(isvstring)$/ } @_ ) { require Carp; Carp::croak("Vstrings are not implemented in the version of perl"); } @_; } sub openhandle ($) { my $fh = shift; my $rt = reftype($fh) || ''; return defined(fileno($fh)) ? $fh : undef if $rt eq 'IO'; if (reftype(\$fh) eq 'GLOB') { # handle openhandle(*DATA) $fh = \(my $tmp=$fh); } elsif ($rt ne 'GLOB') { return undef; } (tied(*$fh) or defined(fileno($fh))) ? $fh : undef; } 1; __END__ #line 284 FILE,696e25cd/auto/Compress/Raw/Zlib/autosplit.ix#line 1 "/usr/local/lib/perl/5.8.8/auto/Compress/Raw/Zlib/autosplit.ix" # Index created by AutoSplit for blib/lib/Compress/Raw/Zlib.pm # (file acts as timestamp) 1; FILEfca857cb/Archive/Zip.pmC)#line 1 "/usr/local/share/perl/5.8.8/Archive/Zip.pm" package Archive::Zip; use strict; BEGIN { require 5.003_96; } use UNIVERSAL (); use Carp (); use Cwd (); use IO::File (); use IO::Seekable (); use Compress::Raw::Zlib (); use File::Spec (); use File::Temp (); use FileHandle (); use vars qw( $VERSION @ISA ); BEGIN { $VERSION = '1.30'; require Exporter; @ISA = qw( Exporter ); } use vars qw( $ChunkSize $ErrorHandler ); BEGIN { # This is the size we'll try to read, write, and (de)compress. # You could set it to something different if you had lots of memory # and needed more speed. $ChunkSize ||= 32768; $ErrorHandler = \&Carp::carp; } # BEGIN block is necessary here so that other modules can use the constants. use vars qw( @EXPORT_OK %EXPORT_TAGS ); BEGIN { @EXPORT_OK = ('computeCRC32'); %EXPORT_TAGS = ( CONSTANTS => [ qw( FA_MSDOS FA_UNIX GPBF_ENCRYPTED_MASK GPBF_DEFLATING_COMPRESSION_MASK GPBF_HAS_DATA_DESCRIPTOR_MASK COMPRESSION_STORED COMPRESSION_DEFLATED COMPRESSION_LEVEL_NONE COMPRESSION_LEVEL_DEFAULT COMPRESSION_LEVEL_FASTEST COMPRESSION_LEVEL_BEST_COMPRESSION IFA_TEXT_FILE_MASK IFA_TEXT_FILE IFA_BINARY_FILE ) ], MISC_CONSTANTS => [ qw( FA_AMIGA FA_VAX_VMS FA_VM_CMS FA_ATARI_ST FA_OS2_HPFS FA_MACINTOSH FA_Z_SYSTEM FA_CPM FA_TOPS20 FA_WINDOWS_NTFS FA_QDOS FA_ACORN FA_VFAT FA_MVS FA_BEOS FA_TANDEM FA_THEOS GPBF_IMPLODING_8K_SLIDING_DICTIONARY_MASK GPBF_IMPLODING_3_SHANNON_FANO_TREES_MASK GPBF_IS_COMPRESSED_PATCHED_DATA_MASK COMPRESSION_SHRUNK DEFLATING_COMPRESSION_NORMAL DEFLATING_COMPRESSION_MAXIMUM DEFLATING_COMPRESSION_FAST DEFLATING_COMPRESSION_SUPER_FAST COMPRESSION_REDUCED_1 COMPRESSION_REDUCED_2 COMPRESSION_REDUCED_3 COMPRESSION_REDUCED_4 COMPRESSION_IMPLODED COMPRESSION_TOKENIZED COMPRESSION_DEFLATED_ENHANCED COMPRESSION_PKWARE_DATA_COMPRESSION_LIBRARY_IMPLODED ) ], ERROR_CODES => [ qw( AZ_OK AZ_STREAM_END AZ_ERROR AZ_FORMAT_ERROR AZ_IO_ERROR ) ], # For Internal Use Only PKZIP_CONSTANTS => [ qw( SIGNATURE_FORMAT SIGNATURE_LENGTH LOCAL_FILE_HEADER_SIGNATURE LOCAL_FILE_HEADER_FORMAT LOCAL_FILE_HEADER_LENGTH CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE DATA_DESCRIPTOR_FORMAT DATA_DESCRIPTOR_LENGTH DATA_DESCRIPTOR_SIGNATURE DATA_DESCRIPTOR_FORMAT_NO_SIG DATA_DESCRIPTOR_LENGTH_NO_SIG CENTRAL_DIRECTORY_FILE_HEADER_FORMAT CENTRAL_DIRECTORY_FILE_HEADER_LENGTH END_OF_CENTRAL_DIRECTORY_SIGNATURE END_OF_CENTRAL_DIRECTORY_SIGNATURE_STRING END_OF_CENTRAL_DIRECTORY_FORMAT END_OF_CENTRAL_DIRECTORY_LENGTH ) ], # For Internal Use Only UTILITY_METHODS => [ qw( _error _printError _ioError _formatError _subclassResponsibility _binmode _isSeekable _newFileHandle _readSignature _asZipDirName ) ], ); # Add all the constant names and error code names to @EXPORT_OK Exporter::export_ok_tags( qw( CONSTANTS ERROR_CODES PKZIP_CONSTANTS UTILITY_METHODS MISC_CONSTANTS ) ); } # Error codes use constant AZ_OK => 0; use constant AZ_STREAM_END => 1; use constant AZ_ERROR => 2; use constant AZ_FORMAT_ERROR => 3; use constant AZ_IO_ERROR => 4; # File types # Values of Archive::Zip::Member->fileAttributeFormat() use constant FA_MSDOS => 0; use constant FA_AMIGA => 1; use constant FA_VAX_VMS => 2; use constant FA_UNIX => 3; use constant FA_VM_CMS => 4; use constant FA_ATARI_ST => 5; use constant FA_OS2_HPFS => 6; use constant FA_MACINTOSH => 7; use constant FA_Z_SYSTEM => 8; use constant FA_CPM => 9; use constant FA_TOPS20 => 10; use constant FA_WINDOWS_NTFS => 11; use constant FA_QDOS => 12; use constant FA_ACORN => 13; use constant FA_VFAT => 14; use constant FA_MVS => 15; use constant FA_BEOS => 16; use constant FA_TANDEM => 17; use constant FA_THEOS => 18; # general-purpose bit flag masks # Found in Archive::Zip::Member->bitFlag() use constant GPBF_ENCRYPTED_MASK => 1 << 0; use constant GPBF_DEFLATING_COMPRESSION_MASK => 3 << 1; use constant GPBF_HAS_DATA_DESCRIPTOR_MASK => 1 << 3; # deflating compression types, if compressionMethod == COMPRESSION_DEFLATED # ( Archive::Zip::Member->bitFlag() & GPBF_DEFLATING_COMPRESSION_MASK ) use constant DEFLATING_COMPRESSION_NORMAL => 0 << 1; use constant DEFLATING_COMPRESSION_MAXIMUM => 1 << 1; use constant DEFLATING_COMPRESSION_FAST => 2 << 1; use constant DEFLATING_COMPRESSION_SUPER_FAST => 3 << 1; # compression method # these two are the only ones supported in this module use constant COMPRESSION_STORED => 0; # file is stored (no compression) use constant COMPRESSION_DEFLATED => 8; # file is Deflated use constant COMPRESSION_LEVEL_NONE => 0; use constant COMPRESSION_LEVEL_DEFAULT => -1; use constant COMPRESSION_LEVEL_FASTEST => 1; use constant COMPRESSION_LEVEL_BEST_COMPRESSION => 9; # internal file attribute bits # Found in Archive::Zip::Member::internalFileAttributes() use constant IFA_TEXT_FILE_MASK => 1; use constant IFA_TEXT_FILE => 1; use constant IFA_BINARY_FILE => 0; # PKZIP file format miscellaneous constants (for internal use only) use constant SIGNATURE_FORMAT => "V"; use constant SIGNATURE_LENGTH => 4; # these lengths are without the signature. use constant LOCAL_FILE_HEADER_SIGNATURE => 0x04034b50; use constant LOCAL_FILE_HEADER_FORMAT => "v3 V4 v2"; use constant LOCAL_FILE_HEADER_LENGTH => 26; # PKZIP docs don't mention the signature, but Info-Zip writes it. use constant DATA_DESCRIPTOR_SIGNATURE => 0x08074b50; use constant DATA_DESCRIPTOR_FORMAT => "V3"; use constant DATA_DESCRIPTOR_LENGTH => 12; # but the signature is apparently optional. use constant DATA_DESCRIPTOR_FORMAT_NO_SIG => "V2"; use constant DATA_DESCRIPTOR_LENGTH_NO_SIG => 8; use constant CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE => 0x02014b50; use constant CENTRAL_DIRECTORY_FILE_HEADER_FORMAT => "C2 v3 V4 v5 V2"; use constant CENTRAL_DIRECTORY_FILE_HEADER_LENGTH => 42; use constant END_OF_CENTRAL_DIRECTORY_SIGNATURE => 0x06054b50; use constant END_OF_CENTRAL_DIRECTORY_SIGNATURE_STRING => pack( "V", END_OF_CENTRAL_DIRECTORY_SIGNATURE ); use constant END_OF_CENTRAL_DIRECTORY_FORMAT => "v4 V2 v"; use constant END_OF_CENTRAL_DIRECTORY_LENGTH => 18; use constant GPBF_IMPLODING_8K_SLIDING_DICTIONARY_MASK => 1 << 1; use constant GPBF_IMPLODING_3_SHANNON_FANO_TREES_MASK => 1 << 2; use constant GPBF_IS_COMPRESSED_PATCHED_DATA_MASK => 1 << 5; # the rest of these are not supported in this module use constant COMPRESSION_SHRUNK => 1; # file is Shrunk use constant COMPRESSION_REDUCED_1 => 2; # file is Reduced CF=1 use constant COMPRESSION_REDUCED_2 => 3; # file is Reduced CF=2 use constant COMPRESSION_REDUCED_3 => 4; # file is Reduced CF=3 use constant COMPRESSION_REDUCED_4 => 5; # file is Reduced CF=4 use constant COMPRESSION_IMPLODED => 6; # file is Imploded use constant COMPRESSION_TOKENIZED => 7; # reserved for Tokenizing compr. use constant COMPRESSION_DEFLATED_ENHANCED => 9; # reserved for enh. Deflating use constant COMPRESSION_PKWARE_DATA_COMPRESSION_LIBRARY_IMPLODED => 10; # Load the various required classes require Archive::Zip::Archive; require Archive::Zip::Member; require Archive::Zip::FileMember; require Archive::Zip::DirectoryMember; require Archive::Zip::ZipFileMember; require Archive::Zip::NewFileMember; require Archive::Zip::StringMember; use constant ZIPARCHIVECLASS => 'Archive::Zip::Archive'; use constant ZIPMEMBERCLASS => 'Archive::Zip::Member'; # Convenience functions sub _ISA ($$) { # Can't rely on Scalar::Util, so use the next best way local $@; !! eval { ref $_[0] and $_[0]->isa($_[1]) }; } sub _CAN ($$) { local $@; !! eval { ref $_[0] and $_[0]->can($_[1]) }; } ##################################################################### # Methods sub new { my $class = shift; return $class->ZIPARCHIVECLASS->new(@_); } sub computeCRC32 { my ( $data, $crc ); if ( ref( $_[0] ) eq 'HASH' ) { $data = $_[0]->{string}; $crc = $_[0]->{checksum}; } else { $data = shift; $data = shift if ref($data); $crc = shift; } return Compress::Raw::Zlib::crc32( $data, $crc ); } # Report or change chunk size used for reading and writing. # Also sets Zlib's default buffer size (eventually). sub setChunkSize { shift if ref( $_[0] ) eq 'Archive::Zip::Archive'; my $chunkSize = ( ref( $_[0] ) eq 'HASH' ) ? shift->{chunkSize} : shift; my $oldChunkSize = $Archive::Zip::ChunkSize; $Archive::Zip::ChunkSize = $chunkSize if ($chunkSize); return $oldChunkSize; } sub chunkSize { return $Archive::Zip::ChunkSize; } sub setErrorHandler { my $errorHandler = ( ref( $_[0] ) eq 'HASH' ) ? shift->{subroutine} : shift; $errorHandler = \&Carp::carp unless defined($errorHandler); my $oldErrorHandler = $Archive::Zip::ErrorHandler; $Archive::Zip::ErrorHandler = $errorHandler; return $oldErrorHandler; } ###################################################################### # Private utility functions (not methods). sub _printError { my $string = join ( ' ', @_, "\n" ); my $oldCarpLevel = $Carp::CarpLevel; $Carp::CarpLevel += 2; &{$ErrorHandler} ($string); $Carp::CarpLevel = $oldCarpLevel; } # This is called on format errors. sub _formatError { shift if ref( $_[0] ); _printError( 'format error:', @_ ); return AZ_FORMAT_ERROR; } # This is called on IO errors. sub _ioError { shift if ref( $_[0] ); _printError( 'IO error:', @_, ':', $! ); return AZ_IO_ERROR; } # This is called on generic errors. sub _error { shift if ref( $_[0] ); _printError( 'error:', @_ ); return AZ_ERROR; } # Called when a subclass should have implemented # something but didn't sub _subclassResponsibility { Carp::croak("subclass Responsibility\n"); } # Try to set the given file handle or object into binary mode. sub _binmode { my $fh = shift; return _CAN( $fh, 'binmode' ) ? $fh->binmode() : binmode($fh); } # Attempt to guess whether file handle is seekable. # Because of problems with Windows, this only returns true when # the file handle is a real file. sub _isSeekable { my $fh = shift; return 0 unless ref $fh; if ( _ISA($fh, 'IO::Scalar') ) { # IO::Scalar objects are brokenly-seekable return 0; } if ( _ISA($fh, 'IO::String') ) { return 1; } if ( _ISA($fh, 'IO::Seekable') ) { # Unfortunately, some things like FileHandle objects # return true for Seekable, but AREN'T!!!!! if ( _ISA($fh, 'FileHandle') ) { return 0; } else { return 1; } } if ( _CAN($fh, 'stat') ) { return -f $fh; } return ( _CAN($fh, 'seek') and _CAN($fh, 'tell') ) ? 1 : 0; } # Print to the filehandle, while making sure the pesky Perl special global # variables don't interfere. sub _print { my ($self, $fh, @data) = @_; local $\; return $fh->print(@data); } # Return an opened IO::Handle # my ( $status, fh ) = _newFileHandle( 'fileName', 'w' ); # Can take a filename, file handle, or ref to GLOB # Or, if given something that is a ref but not an IO::Handle, # passes back the same thing. sub _newFileHandle { my $fd = shift; my $status = 1; my $handle; if ( ref($fd) ) { if ( _ISA($fd, 'IO::Scalar') or _ISA($fd, 'IO::String') ) { $handle = $fd; } elsif ( _ISA($fd, 'IO::Handle') or ref($fd) eq 'GLOB' ) { $handle = IO::File->new; $status = $handle->fdopen( $fd, @_ ); } else { $handle = $fd; } } else { $handle = IO::File->new; $status = $handle->open( $fd, @_ ); } return ( $status, $handle ); } # Returns next signature from given file handle, leaves # file handle positioned afterwards. # In list context, returns ($status, $signature) # ( $status, $signature) = _readSignature( $fh, $fileName ); sub _readSignature { my $fh = shift; my $fileName = shift; my $expectedSignature = shift; # optional my $signatureData; my $bytesRead = $fh->read( $signatureData, SIGNATURE_LENGTH ); if ( $bytesRead != SIGNATURE_LENGTH ) { return _ioError("reading header signature"); } my $signature = unpack( SIGNATURE_FORMAT, $signatureData ); my $status = AZ_OK; # compare with expected signature, if any, or any known signature. if ( ( defined($expectedSignature) && $signature != $expectedSignature ) || ( !defined($expectedSignature) && $signature != CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE && $signature != LOCAL_FILE_HEADER_SIGNATURE && $signature != END_OF_CENTRAL_DIRECTORY_SIGNATURE && $signature != DATA_DESCRIPTOR_SIGNATURE ) ) { my $errmsg = sprintf( "bad signature: 0x%08x", $signature ); if ( _isSeekable($fh) ) { $errmsg .= sprintf( " at offset %d", $fh->tell() - SIGNATURE_LENGTH ); } $status = _formatError("$errmsg in file $fileName"); } return ( $status, $signature ); } # Utility method to make and open a temp file. # Will create $temp_dir if it doesn't exist. # Returns file handle and name: # # my ($fh, $name) = Archive::Zip::tempFile(); # my ($fh, $name) = Archive::Zip::tempFile('mytempdir'); # sub tempFile { my $dir = ( ref( $_[0] ) eq 'HASH' ) ? shift->{tempDir} : shift; my ( $fh, $filename ) = File::Temp::tempfile( SUFFIX => '.zip', UNLINK => 0, # we will delete it! $dir ? ( DIR => $dir ) : () ); return ( undef, undef ) unless $fh; my ( $status, $newfh ) = _newFileHandle( $fh, 'w+' ); return ( $newfh, $filename ); } # Return the normalized directory name as used in a zip file (path # separators become slashes, etc.). # Will translate internal slashes in path components (i.e. on Macs) to # underscores. Discards volume names. # When $forceDir is set, returns paths with trailing slashes (or arrays # with trailing blank members). # # If third argument is a reference, returns volume information there. # # input output # . ('.') '.' # ./a ('a') a # ./a/b ('a','b') a/b # ./a/b/ ('a','b') a/b # a/b/ ('a','b') a/b # /a/b/ ('','a','b') /a/b # c:\a\b\c.doc ('','a','b','c.doc') /a/b/c.doc # on Windoze # "i/o maps:whatever" ('i_o maps', 'whatever') "i_o maps/whatever" # on Macs sub _asZipDirName { my $name = shift; my $forceDir = shift; my $volReturn = shift; my ( $volume, $directories, $file ) = File::Spec->splitpath( File::Spec->canonpath($name), $forceDir ); $$volReturn = $volume if ( ref($volReturn) ); my @dirs = map { $_ =~ s{/}{_}g; $_ } File::Spec->splitdir($directories); if ( @dirs > 0 ) { pop (@dirs) unless $dirs[-1] } # remove empty component push ( @dirs, defined($file) ? $file : '' ); #return wantarray ? @dirs : join ( '/', @dirs ); return join ( '/', @dirs ); } # Return an absolute local name for a zip name. # Assume a directory if zip name has trailing slash. # Takes an optional volume name in FS format (like 'a:'). # sub _asLocalName { my $name = shift; # zip format my $volume = shift; $volume = '' unless defined($volume); # local FS format my @paths = split ( /\//, $name ); my $filename = pop (@paths); $filename = '' unless defined($filename); my $localDirs = @paths ? File::Spec->catdir(@paths) : ''; my $localName = File::Spec->catpath( $volume, $localDirs, $filename ); unless ( $volume ) { $localName = File::Spec->rel2abs( $localName, Cwd::getcwd() ); } return $localName; } 1; __END__ #line 2060 FILE8e5fb313/Archive/Zip/Archive.pms#line 1 "/usr/local/share/perl/5.8.8/Archive/Zip/Archive.pm" package Archive::Zip::Archive; # Represents a generic ZIP archive use strict; use File::Path; use File::Find (); use File::Spec (); use File::Copy (); use File::Basename; use Cwd; use vars qw( $VERSION @ISA ); BEGIN { $VERSION = '1.30'; @ISA = qw( Archive::Zip ); } use Archive::Zip qw( :CONSTANTS :ERROR_CODES :PKZIP_CONSTANTS :UTILITY_METHODS ); # Note that this returns undef on read errors, else new zip object. sub new { my $class = shift; my $self = bless( { 'diskNumber' => 0, 'diskNumberWithStartOfCentralDirectory' => 0, 'numberOfCentralDirectoriesOnThisDisk' => 0, # shld be # of members 'numberOfCentralDirectories' => 0, # shld be # of members 'centralDirectorySize' => 0, # must re-compute on write 'centralDirectoryOffsetWRTStartingDiskNumber' => 0, # must re-compute 'writeEOCDOffset' => 0, 'writeCentralDirectoryOffset' => 0, 'zipfileComment' => '', 'eocdOffset' => 0, 'fileName' => '' }, $class ); $self->{'members'} = []; my $fileName = ( ref( $_[0] ) eq 'HASH' ) ? shift->{filename} : shift; if ($fileName) { my $status = $self->read($fileName); return $status == AZ_OK ? $self : undef; } return $self; } sub storeSymbolicLink { my $self = shift; $self->{'storeSymbolicLink'} = shift; } sub members { @{ shift->{'members'} }; } sub numberOfMembers { scalar( shift->members() ); } sub memberNames { my $self = shift; return map { $_->fileName() } $self->members(); } # return ref to member with given name or undef sub memberNamed { my $self = shift; my $fileName = ( ref( $_[0] ) eq 'HASH' ) ? shift->{zipName} : shift; foreach my $member ( $self->members() ) { return $member if $member->fileName() eq $fileName; } return undef; } sub membersMatching { my $self = shift; my $pattern = ( ref( $_[0] ) eq 'HASH' ) ? shift->{regex} : shift; return grep { $_->fileName() =~ /$pattern/ } $self->members(); } sub diskNumber { shift->{'diskNumber'}; } sub diskNumberWithStartOfCentralDirectory { shift->{'diskNumberWithStartOfCentralDirectory'}; } sub numberOfCentralDirectoriesOnThisDisk { shift->{'numberOfCentralDirectoriesOnThisDisk'}; } sub numberOfCentralDirectories { shift->{'numberOfCentralDirectories'}; } sub centralDirectorySize { shift->{'centralDirectorySize'}; } sub centralDirectoryOffsetWRTStartingDiskNumber { shift->{'centralDirectoryOffsetWRTStartingDiskNumber'}; } sub zipfileComment { my $self = shift; my $comment = $self->{'zipfileComment'}; if (@_) { my $new_comment = ( ref( $_[0] ) eq 'HASH' ) ? shift->{comment} : shift; $self->{'zipfileComment'} = pack( 'C0a*', $new_comment ); # avoid unicode } return $comment; } sub eocdOffset { shift->{'eocdOffset'}; } # Return the name of the file last read. sub fileName { shift->{'fileName'}; } sub removeMember { my $self = shift; my $member = ( ref( $_[0] ) eq 'HASH' ) ? shift->{memberOrZipName} : shift; $member = $self->memberNamed($member) unless ref($member); return undef unless $member; my @newMembers = grep { $_ != $member } $self->members(); $self->{'members'} = \@newMembers; return $member; } sub replaceMember { my $self = shift; my ( $oldMember, $newMember ); if ( ref( $_[0] ) eq 'HASH' ) { $oldMember = $_[0]->{memberOrZipName}; $newMember = $_[0]->{newMember}; } else { ( $oldMember, $newMember ) = @_; } $oldMember = $self->memberNamed($oldMember) unless ref($oldMember); return undef unless $oldMember; return undef unless $newMember; my @newMembers = map { ( $_ == $oldMember ) ? $newMember : $_ } $self->members(); $self->{'members'} = \@newMembers; return $oldMember; } sub extractMember { my $self = shift; my ( $member, $name ); if ( ref( $_[0] ) eq 'HASH' ) { $member = $_[0]->{memberOrZipName}; $name = $_[0]->{name}; } else { ( $member, $name ) = @_; } $member = $self->memberNamed($member) unless ref($member); return _error('member not found') unless $member; my $originalSize = $member->compressedSize(); my ( $volumeName, $dirName, $fileName ); if ( defined($name) ) { ( $volumeName, $dirName, $fileName ) = File::Spec->splitpath($name); $dirName = File::Spec->catpath( $volumeName, $dirName, '' ); } else { $name = $member->fileName(); ( $dirName = $name ) =~ s{[^/]*$}{}; $dirName = Archive::Zip::_asLocalName($dirName); $name = Archive::Zip::_asLocalName($name); } if ( $dirName && !-d $dirName ) { mkpath($dirName); return _ioError("can't create dir $dirName") if ( !-d $dirName ); } my $rc = $member->extractToFileNamed( $name, @_ ); # TODO refactor this fix into extractToFileNamed() $member->{'compressedSize'} = $originalSize; return $rc; } sub extractMemberWithoutPaths { my $self = shift; my ( $member, $name ); if ( ref( $_[0] ) eq 'HASH' ) { $member = $_[0]->{memberOrZipName}; $name = $_[0]->{name}; } else { ( $member, $name ) = @_; } $member = $self->memberNamed($member) unless ref($member); return _error('member not found') unless $member; my $originalSize = $member->compressedSize(); return AZ_OK if $member->isDirectory(); unless ($name) { $name = $member->fileName(); $name =~ s{.*/}{}; # strip off directories, if any $name = Archive::Zip::_asLocalName($name); } my $rc = $member->extractToFileNamed( $name, @_ ); $member->{'compressedSize'} = $originalSize; return $rc; } sub addMember { my $self = shift; my $newMember = ( ref( $_[0] ) eq 'HASH' ) ? shift->{member} : shift; push( @{ $self->{'members'} }, $newMember ) if $newMember; return $newMember; } sub addFile { my $self = shift; my ( $fileName, $newName, $compressionLevel ); if ( ref( $_[0] ) eq 'HASH' ) { $fileName = $_[0]->{filename}; $newName = $_[0]->{zipName}; $compressionLevel = $_[0]->{compressionLevel}; } else { ( $fileName, $newName, $compressionLevel ) = @_; } my $newMember = $self->ZIPMEMBERCLASS->newFromFile( $fileName, $newName ); $newMember->desiredCompressionLevel($compressionLevel); if ( $self->{'storeSymbolicLink'} && -l $fileName ) { my $newMember = $self->ZIPMEMBERCLASS->newFromString(readlink $fileName, $newName); # For symbolic links, External File Attribute is set to 0xA1FF0000 by Info-ZIP $newMember->{'externalFileAttributes'} = 0xA1FF0000; $self->addMember($newMember); } else { $self->addMember($newMember); } return $newMember; } sub addString { my $self = shift; my ( $stringOrStringRef, $name, $compressionLevel ); if ( ref( $_[0] ) eq 'HASH' ) { $stringOrStringRef = $_[0]->{string}; $name = $_[0]->{zipName}; $compressionLevel = $_[0]->{compressionLevel}; } else { ( $stringOrStringRef, $name, $compressionLevel ) = @_;; } my $newMember = $self->ZIPMEMBERCLASS->newFromString( $stringOrStringRef, $name ); $newMember->desiredCompressionLevel($compressionLevel); return $self->addMember($newMember); } sub addDirectory { my $self = shift; my ( $name, $newName ); if ( ref( $_[0] ) eq 'HASH' ) { $name = $_[0]->{directoryName}; $newName = $_[0]->{zipName}; } else { ( $name, $newName ) = @_; } my $newMember = $self->ZIPMEMBERCLASS->newDirectoryNamed( $name, $newName ); if ( $self->{'storeSymbolicLink'} && -l $name ) { my $link = readlink $name; ( $newName =~ s{/$}{} ) if $newName; # Strip trailing / my $newMember = $self->ZIPMEMBERCLASS->newFromString($link, $newName); # For symbolic links, External File Attribute is set to 0xA1FF0000 by Info-ZIP $newMember->{'externalFileAttributes'} = 0xA1FF0000; $self->addMember($newMember); } else { $self->addMember($newMember); } return $newMember; } # add either a file or a directory. sub addFileOrDirectory { my $self = shift; my ( $name, $newName, $compressionLevel ); if ( ref( $_[0] ) eq 'HASH' ) { $name = $_[0]->{name}; $newName = $_[0]->{zipName}; $compressionLevel = $_[0]->{compressionLevel}; } else { ( $name, $newName, $compressionLevel ) = @_; } $name =~ s{/$}{}; if ( $newName ) { $newName =~ s{/$}{}; } else { $newName = $name; } if ( -f $name ) { return $self->addFile( $name, $newName, $compressionLevel ); } elsif ( -d $name ) { return $self->addDirectory( $name, $newName ); } else { return _error("$name is neither a file nor a directory"); } } sub contents { my $self = shift; my ( $member, $newContents ); if ( ref( $_[0] ) eq 'HASH' ) { $member = $_[0]->{memberOrZipName}; $newContents = $_[0]->{contents}; } else { ( $member, $newContents ) = @_; } return _error('No member name given') unless $member; $member = $self->memberNamed($member) unless ref($member); return undef unless $member; return $member->contents($newContents); } sub writeToFileNamed { my $self = shift; my $fileName = ( ref( $_[0] ) eq 'HASH' ) ? shift->{filename} : shift; # local FS format foreach my $member ( $self->members() ) { if ( $member->_usesFileNamed($fileName) ) { return _error( "$fileName is needed by member " . $member->fileName() . "; consider using overwrite() or overwriteAs() instead." ); } } my ( $status, $fh ) = _newFileHandle( $fileName, 'w' ); return _ioError("Can't open $fileName for write") unless $status; my $retval = $self->writeToFileHandle( $fh, 1 ); $fh->close(); $fh = undef; return $retval; } # It is possible to write data to the FH before calling this, # perhaps to make a self-extracting archive. sub writeToFileHandle { my $self = shift; my ( $fh, $fhIsSeekable ); if ( ref( $_[0] ) eq 'HASH' ) { $fh = $_[0]->{fileHandle}; $fhIsSeekable = exists( $_[0]->{seek} ) ? $_[0]->{seek} : _isSeekable($fh); } else { $fh = shift; $fhIsSeekable = @_ ? shift : _isSeekable($fh); } return _error('No filehandle given') unless $fh; return _ioError('filehandle not open') unless $fh->opened(); _binmode($fh); # Find out where the current position is. my $offset = $fhIsSeekable ? $fh->tell() : 0; $offset = 0 if $offset < 0; foreach my $member ( $self->members() ) { my $retval = $member->_writeToFileHandle( $fh, $fhIsSeekable, $offset ); $member->endRead(); return $retval if $retval != AZ_OK; $offset += $member->_localHeaderSize() + $member->_writeOffset(); $offset += $member->hasDataDescriptor() ? DATA_DESCRIPTOR_LENGTH + SIGNATURE_LENGTH : 0; # changed this so it reflects the last successful position $self->{'writeCentralDirectoryOffset'} = $offset; } return $self->writeCentralDirectory($fh); } # Write zip back to the original file, # as safely as possible. # Returns AZ_OK if successful. sub overwrite { my $self = shift; return $self->overwriteAs( $self->{'fileName'} ); } # Write zip to the specified file, # as safely as possible. # Returns AZ_OK if successful. sub overwriteAs { my $self = shift; my $zipName = ( ref( $_[0] ) eq 'HASH' ) ? $_[0]->{filename} : shift; return _error("no filename in overwriteAs()") unless defined($zipName); my ( $fh, $tempName ) = Archive::Zip::tempFile(); return _error( "Can't open temp file", $! ) unless $fh; ( my $backupName = $zipName ) =~ s{(\.[^.]*)?$}{.zbk}; my $status = $self->writeToFileHandle($fh); $fh->close(); $fh = undef; if ( $status != AZ_OK ) { unlink($tempName); _printError("Can't write to $tempName"); return $status; } my $err; # rename the zip if ( -f $zipName && !rename( $zipName, $backupName ) ) { $err = $!; unlink($tempName); return _error( "Can't rename $zipName as $backupName", $err ); } # move the temp to the original name (possibly copying) unless ( File::Copy::move( $tempName, $zipName ) ) { $err = $!; rename( $backupName, $zipName ); unlink($tempName); return _error( "Can't move $tempName to $zipName", $err ); } # unlink the backup if ( -f $backupName && !unlink($backupName) ) { $err = $!; return _error( "Can't unlink $backupName", $err ); } return AZ_OK; } # Used only during writing sub _writeCentralDirectoryOffset { shift->{'writeCentralDirectoryOffset'}; } sub _writeEOCDOffset { shift->{'writeEOCDOffset'}; } # Expects to have _writeEOCDOffset() set sub _writeEndOfCentralDirectory { my ( $self, $fh ) = @_; $self->_print($fh, END_OF_CENTRAL_DIRECTORY_SIGNATURE_STRING) or return _ioError('writing EOCD Signature'); my $zipfileCommentLength = length( $self->zipfileComment() ); my $header = pack( END_OF_CENTRAL_DIRECTORY_FORMAT, 0, # {'diskNumber'}, 0, # {'diskNumberWithStartOfCentralDirectory'}, $self->numberOfMembers(), # {'numberOfCentralDirectoriesOnThisDisk'}, $self->numberOfMembers(), # {'numberOfCentralDirectories'}, $self->_writeEOCDOffset() - $self->_writeCentralDirectoryOffset(), $self->_writeCentralDirectoryOffset(), $zipfileCommentLength ); $self->_print($fh, $header) or return _ioError('writing EOCD header'); if ($zipfileCommentLength) { $self->_print($fh, $self->zipfileComment() ) or return _ioError('writing zipfile comment'); } return AZ_OK; } # $offset can be specified to truncate a zip file. sub writeCentralDirectory { my $self = shift; my ( $fh, $offset ); if ( ref( $_[0] ) eq 'HASH' ) { $fh = $_[0]->{fileHandle}; $offset = $_[0]->{offset}; } else { ( $fh, $offset ) = @_; } if ( defined($offset) ) { $self->{'writeCentralDirectoryOffset'} = $offset; $fh->seek( $offset, IO::Seekable::SEEK_SET ) or return _ioError('seeking to write central directory'); } else { $offset = $self->_writeCentralDirectoryOffset(); } foreach my $member ( $self->members() ) { my $status = $member->_writeCentralDirectoryFileHeader($fh); return $status if $status != AZ_OK; $offset += $member->_centralDirectoryHeaderSize(); $self->{'writeEOCDOffset'} = $offset; } return $self->_writeEndOfCentralDirectory($fh); } sub read { my $self = shift; my $fileName = ( ref( $_[0] ) eq 'HASH' ) ? shift->{filename} : shift; return _error('No filename given') unless $fileName; my ( $status, $fh ) = _newFileHandle( $fileName, 'r' ); return _ioError("opening $fileName for read") unless $status; $status = $self->readFromFileHandle( $fh, $fileName ); return $status if $status != AZ_OK; $fh->close(); $self->{'fileName'} = $fileName; return AZ_OK; } sub readFromFileHandle { my $self = shift; my ( $fh, $fileName ); if ( ref( $_[0] ) eq 'HASH' ) { $fh = $_[0]->{fileHandle}; $fileName = $_[0]->{filename}; } else { ( $fh, $fileName ) = @_; } $fileName = $fh unless defined($fileName); return _error('No filehandle given') unless $fh; return _ioError('filehandle not open') unless $fh->opened(); _binmode($fh); $self->{'fileName'} = "$fh"; # TODO: how to support non-seekable zips? return _error('file not seekable') unless _isSeekable($fh); $fh->seek( 0, 0 ); # rewind the file my $status = $self->_findEndOfCentralDirectory($fh); return $status if $status != AZ_OK; my $eocdPosition = $fh->tell(); $status = $self->_readEndOfCentralDirectory($fh); return $status if $status != AZ_OK; $fh->seek( $eocdPosition - $self->centralDirectorySize(), IO::Seekable::SEEK_SET ) or return _ioError("Can't seek $fileName"); # Try to detect garbage at beginning of archives # This should be 0 $self->{'eocdOffset'} = $eocdPosition - $self->centralDirectorySize() # here - $self->centralDirectoryOffsetWRTStartingDiskNumber(); for ( ; ; ) { my $newMember = $self->ZIPMEMBERCLASS->_newFromZipFile( $fh, $fileName, $self->eocdOffset() ); my $signature; ( $status, $signature ) = _readSignature( $fh, $fileName ); return $status if $status != AZ_OK; last if $signature == END_OF_CENTRAL_DIRECTORY_SIGNATURE; $status = $newMember->_readCentralDirectoryFileHeader(); return $status if $status != AZ_OK; $status = $newMember->endRead(); return $status if $status != AZ_OK; $newMember->_becomeDirectoryIfNecessary(); push( @{ $self->{'members'} }, $newMember ); } return AZ_OK; } # Read EOCD, starting from position before signature. # Return AZ_OK on success. sub _readEndOfCentralDirectory { my $self = shift; my $fh = shift; # Skip past signature $fh->seek( SIGNATURE_LENGTH, IO::Seekable::SEEK_CUR ) or return _ioError("Can't seek past EOCD signature"); my $header = ''; my $bytesRead = $fh->read( $header, END_OF_CENTRAL_DIRECTORY_LENGTH ); if ( $bytesRead != END_OF_CENTRAL_DIRECTORY_LENGTH ) { return _ioError("reading end of central directory"); } my $zipfileCommentLength; ( $self->{'diskNumber'}, $self->{'diskNumberWithStartOfCentralDirectory'}, $self->{'numberOfCentralDirectoriesOnThisDisk'}, $self->{'numberOfCentralDirectories'}, $self->{'centralDirectorySize'}, $self->{'centralDirectoryOffsetWRTStartingDiskNumber'}, $zipfileCommentLength ) = unpack( END_OF_CENTRAL_DIRECTORY_FORMAT, $header ); if ($zipfileCommentLength) { my $zipfileComment = ''; $bytesRead = $fh->read( $zipfileComment, $zipfileCommentLength ); if ( $bytesRead != $zipfileCommentLength ) { return _ioError("reading zipfile comment"); } $self->{'zipfileComment'} = $zipfileComment; } return AZ_OK; } # Seek in my file to the end, then read backwards until we find the # signature of the central directory record. Leave the file positioned right # before the signature. Returns AZ_OK if success. sub _findEndOfCentralDirectory { my $self = shift; my $fh = shift; my $data = ''; $fh->seek( 0, IO::Seekable::SEEK_END ) or return _ioError("seeking to end"); my $fileLength = $fh->tell(); if ( $fileLength < END_OF_CENTRAL_DIRECTORY_LENGTH + 4 ) { return _formatError("file is too short"); } my $seekOffset = 0; my $pos = -1; for ( ; ; ) { $seekOffset += 512; $seekOffset = $fileLength if ( $seekOffset > $fileLength ); $fh->seek( -$seekOffset, IO::Seekable::SEEK_END ) or return _ioError("seek failed"); my $bytesRead = $fh->read( $data, $seekOffset ); if ( $bytesRead != $seekOffset ) { return _ioError("read failed"); } $pos = rindex( $data, END_OF_CENTRAL_DIRECTORY_SIGNATURE_STRING ); last if ( $pos >= 0 or $seekOffset == $fileLength or $seekOffset >= $Archive::Zip::ChunkSize ); } if ( $pos >= 0 ) { $fh->seek( $pos - $seekOffset, IO::Seekable::SEEK_CUR ) or return _ioError("seeking to EOCD"); return AZ_OK; } else { return _formatError("can't find EOCD signature"); } } # Used to avoid taint problems when chdir'ing. # Not intended to increase security in any way; just intended to shut up the -T # complaints. If your Cwd module is giving you unreliable returns from cwd() # you have bigger problems than this. sub _untaintDir { my $dir = shift; $dir =~ m/\A(.+)\z/s; return $1; } sub addTree { my $self = shift; my ( $root, $dest, $pred, $compressionLevel ); if ( ref( $_[0] ) eq 'HASH' ) { $root = $_[0]->{root}; $dest = $_[0]->{zipName}; $pred = $_[0]->{select}; $compressionLevel = $_[0]->{compressionLevel}; } else { ( $root, $dest, $pred, $compressionLevel ) = @_; } return _error("root arg missing in call to addTree()") unless defined($root); $dest = '' unless defined($dest); $pred = sub { -r } unless defined($pred); my @files; my $startDir = _untaintDir( cwd() ); return _error( 'undef returned by _untaintDir on cwd ', cwd() ) unless $startDir; # This avoids chdir'ing in Find, in a way compatible with older # versions of File::Find. my $wanted = sub { local $main::_ = $File::Find::name; my $dir = _untaintDir($File::Find::dir); chdir($startDir); push( @files, $File::Find::name ) if (&$pred); chdir($dir); }; File::Find::find( $wanted, $root ); my $rootZipName = _asZipDirName( $root, 1 ); # with trailing slash my $pattern = $rootZipName eq './' ? '^' : "^\Q$rootZipName\E"; $dest = _asZipDirName( $dest, 1 ); # with trailing slash foreach my $fileName (@files) { my $isDir = -d $fileName; # normalize, remove leading ./ my $archiveName = _asZipDirName( $fileName, $isDir ); if ( $archiveName eq $rootZipName ) { $archiveName = $dest } else { $archiveName =~ s{$pattern}{$dest} } next if $archiveName =~ m{^\.?/?$}; # skip current dir my $member = $isDir ? $self->addDirectory( $fileName, $archiveName ) : $self->addFile( $fileName, $archiveName ); $member->desiredCompressionLevel($compressionLevel); return _error("add $fileName failed in addTree()") if !$member; } return AZ_OK; } sub addTreeMatching { my $self = shift; my ( $root, $dest, $pattern, $pred, $compressionLevel ); if ( ref( $_[0] ) eq 'HASH' ) { $root = $_[0]->{root}; $dest = $_[0]->{zipName}; $pattern = $_[0]->{pattern}; $pred = $_[0]->{select}; $compressionLevel = $_[0]->{compressionLevel}; } else { ( $root, $dest, $pattern, $pred, $compressionLevel ) = @_; } return _error("root arg missing in call to addTreeMatching()") unless defined($root); $dest = '' unless defined($dest); return _error("pattern missing in call to addTreeMatching()") unless defined($pattern); my $matcher = $pred ? sub { m{$pattern} && &$pred } : sub { m{$pattern} && -r }; return $self->addTree( $root, $dest, $matcher, $compressionLevel ); } # $zip->extractTree( $root, $dest [, $volume] ); # # $root and $dest are Unix-style. # $volume is in local FS format. # sub extractTree { my $self = shift; my ( $root, $dest, $volume ); if ( ref( $_[0] ) eq 'HASH' ) { $root = $_[0]->{root}; $dest = $_[0]->{zipName}; $volume = $_[0]->{volume}; } else { ( $root, $dest, $volume ) = @_; } $root = '' unless defined($root); $dest = './' unless defined($dest); my $pattern = "^\Q$root"; my @members = $self->membersMatching($pattern); foreach my $member (@members) { my $fileName = $member->fileName(); # in Unix format $fileName =~ s{$pattern}{$dest}; # in Unix format # convert to platform format: $fileName = Archive::Zip::_asLocalName( $fileName, $volume ); my $status = $member->extractToFileNamed($fileName); return $status if $status != AZ_OK; } return AZ_OK; } # $zip->updateMember( $memberOrName, $fileName ); # Returns (possibly updated) member, if any; undef on errors. sub updateMember { my $self = shift; my ( $oldMember, $fileName ); if ( ref( $_[0] ) eq 'HASH' ) { $oldMember = $_[0]->{memberOrZipName}; $fileName = $_[0]->{name}; } else { ( $oldMember, $fileName ) = @_; } if ( !defined($fileName) ) { _error("updateMember(): missing fileName argument"); return undef; } my @newStat = stat($fileName); if ( !@newStat ) { _ioError("Can't stat $fileName"); return undef; } my $isDir = -d _; my $memberName; if ( ref($oldMember) ) { $memberName = $oldMember->fileName(); } else { $oldMember = $self->memberNamed( $memberName = $oldMember ) || $self->memberNamed( $memberName = _asZipDirName( $oldMember, $isDir ) ); } unless ( defined($oldMember) && $oldMember->lastModTime() == $newStat[9] && $oldMember->isDirectory() == $isDir && ( $isDir || ( $oldMember->uncompressedSize() == $newStat[7] ) ) ) { # create the new member my $newMember = $isDir ? $self->ZIPMEMBERCLASS->newDirectoryNamed( $fileName, $memberName ) : $self->ZIPMEMBERCLASS->newFromFile( $fileName, $memberName ); unless ( defined($newMember) ) { _error("creation of member $fileName failed in updateMember()"); return undef; } # replace old member or append new one if ( defined($oldMember) ) { $self->replaceMember( $oldMember, $newMember ); } else { $self->addMember($newMember); } return $newMember; } return $oldMember; } # $zip->updateTree( $root, [ $dest, [ $pred [, $mirror]]] ); # # This takes the same arguments as addTree, but first checks to see # whether the file or directory already exists in the zip file. # # If the fourth argument $mirror is true, then delete all my members # if corresponding files weren't found. sub updateTree { my $self = shift; my ( $root, $dest, $pred, $mirror, $compressionLevel ); if ( ref( $_[0] ) eq 'HASH' ) { $root = $_[0]->{root}; $dest = $_[0]->{zipName}; $pred = $_[0]->{select}; $mirror = $_[0]->{mirror}; $compressionLevel = $_[0]->{compressionLevel}; } else { ( $root, $dest, $pred, $mirror, $compressionLevel ) = @_; } return _error("root arg missing in call to updateTree()") unless defined($root); $dest = '' unless defined($dest); $pred = sub { -r } unless defined($pred); $dest = _asZipDirName( $dest, 1 ); my $rootZipName = _asZipDirName( $root, 1 ); # with trailing slash my $pattern = $rootZipName eq './' ? '^' : "^\Q$rootZipName\E"; my @files; my $startDir = _untaintDir( cwd() ); return _error( 'undef returned by _untaintDir on cwd ', cwd() ) unless $startDir; # This avoids chdir'ing in Find, in a way compatible with older # versions of File::Find. my $wanted = sub { local $main::_ = $File::Find::name; my $dir = _untaintDir($File::Find::dir); chdir($startDir); push( @files, $File::Find::name ) if (&$pred); chdir($dir); }; File::Find::find( $wanted, $root ); # Now @files has all the files that I could potentially be adding to # the zip. Only add the ones that are necessary. # For each file (updated or not), add its member name to @done. my %done; foreach my $fileName (@files) { my @newStat = stat($fileName); my $isDir = -d _; # normalize, remove leading ./ my $memberName = _asZipDirName( $fileName, $isDir ); if ( $memberName eq $rootZipName ) { $memberName = $dest } else { $memberName =~ s{$pattern}{$dest} } next if $memberName =~ m{^\.?/?$}; # skip current dir $done{$memberName} = 1; my $changedMember = $self->updateMember( $memberName, $fileName ); $changedMember->desiredCompressionLevel($compressionLevel); return _error("updateTree failed to update $fileName") unless ref($changedMember); } # @done now has the archive names corresponding to all the found files. # If we're mirroring, delete all those members that aren't in @done. if ($mirror) { foreach my $member ( $self->members() ) { $self->removeMember($member) unless $done{ $member->fileName() }; } } return AZ_OK; } 1; FILE'f0204acc/Archive/Zip/DirectoryMember.pm#line 1 "/usr/local/share/perl/5.8.8/Archive/Zip/DirectoryMember.pm" package Archive::Zip::DirectoryMember; use strict; use File::Path; use vars qw( $VERSION @ISA ); BEGIN { $VERSION = '1.30'; @ISA = qw( Archive::Zip::Member ); } use Archive::Zip qw( :ERROR_CODES :UTILITY_METHODS ); sub _newNamed { my $class = shift; my $fileName = shift; # FS name my $newName = shift; # Zip name $newName = _asZipDirName($fileName) unless $newName; my $self = $class->new(@_); $self->{'externalFileName'} = $fileName; $self->fileName($newName); if ( -e $fileName ) { # -e does NOT do a full stat, so we need to do one now if ( -d _ ) { my @stat = stat(_); $self->unixFileAttributes( $stat[2] ); my $mod_t = $stat[9]; if ( $^O eq 'MSWin32' and !$mod_t ) { $mod_t = time(); } $self->setLastModFileDateTimeFromUnix($mod_t); } else { # hmm.. trying to add a non-directory? _error( $fileName, ' exists but is not a directory' ); return undef; } } else { $self->unixFileAttributes( $self->DEFAULT_DIRECTORY_PERMISSIONS ); $self->setLastModFileDateTimeFromUnix( time() ); } return $self; } sub externalFileName { shift->{'externalFileName'}; } sub isDirectory { return 1; } sub extractToFileNamed { my $self = shift; my $name = shift; # local FS name my $attribs = $self->unixFileAttributes() & 07777; mkpath( $name, 0, $attribs ); # croaks on error utime( $self->lastModTime(), $self->lastModTime(), $name ); return AZ_OK; } sub fileName { my $self = shift; my $newName = shift; $newName =~ s{/?$}{/} if defined($newName); return $self->SUPER::fileName($newName); } # So people don't get too confused. This way it looks like the problem # is in their code... sub contents { return wantarray ? ( undef, AZ_OK ) : undef; } 1; FILE"a45936ab/Archive/Zip/FileMember.pm#line 1 "/usr/local/share/perl/5.8.8/Archive/Zip/FileMember.pm" package Archive::Zip::FileMember; use strict; use vars qw( $VERSION @ISA ); BEGIN { $VERSION = '1.30'; @ISA = qw ( Archive::Zip::Member ); } use Archive::Zip qw( :UTILITY_METHODS ); sub externalFileName { shift->{'externalFileName'}; } # Return true if I depend on the named file sub _usesFileNamed { my $self = shift; my $fileName = shift; my $xfn = $self->externalFileName(); return undef if ref($xfn); return $xfn eq $fileName; } sub fh { my $self = shift; $self->_openFile() if !defined( $self->{'fh'} ) || !$self->{'fh'}->opened(); return $self->{'fh'}; } # opens my file handle from my file name sub _openFile { my $self = shift; my ( $status, $fh ) = _newFileHandle( $self->externalFileName(), 'r' ); if ( !$status ) { _ioError( "Can't open", $self->externalFileName() ); return undef; } $self->{'fh'} = $fh; _binmode($fh); return $fh; } # Make sure I close my file handle sub endRead { my $self = shift; undef $self->{'fh'}; # _closeFile(); return $self->SUPER::endRead(@_); } sub _become { my $self = shift; my $newClass = shift; return $self if ref($self) eq $newClass; delete( $self->{'externalFileName'} ); delete( $self->{'fh'} ); return $self->SUPER::_become($newClass); } 1; FILEd61cbf60/Archive/Zip/Member.pmN#line 1 "/usr/local/share/perl/5.8.8/Archive/Zip/Member.pm" package Archive::Zip::Member; # A generic membet of an archive use strict; use vars qw( $VERSION @ISA ); BEGIN { $VERSION = '1.30'; @ISA = qw( Archive::Zip ); } use Archive::Zip qw( :CONSTANTS :MISC_CONSTANTS :ERROR_CODES :PKZIP_CONSTANTS :UTILITY_METHODS ); use Time::Local (); use Compress::Raw::Zlib qw( Z_OK Z_STREAM_END MAX_WBITS ); use File::Path; use File::Basename; use constant ZIPFILEMEMBERCLASS => 'Archive::Zip::ZipFileMember'; use constant NEWFILEMEMBERCLASS => 'Archive::Zip::NewFileMember'; use constant STRINGMEMBERCLASS => 'Archive::Zip::StringMember'; use constant DIRECTORYMEMBERCLASS => 'Archive::Zip::DirectoryMember'; # Unix perms for default creation of files/dirs. use constant DEFAULT_DIRECTORY_PERMISSIONS => 040755; use constant DEFAULT_FILE_PERMISSIONS => 0100666; use constant DIRECTORY_ATTRIB => 040000; use constant FILE_ATTRIB => 0100000; # Returns self if successful, else undef # Assumes that fh is positioned at beginning of central directory file header. # Leaves fh positioned immediately after file header or EOCD signature. sub _newFromZipFile { my $class = shift; my $self = $class->ZIPFILEMEMBERCLASS->_newFromZipFile(@_); return $self; } sub newFromString { my $class = shift; my ( $stringOrStringRef, $fileName ); if ( ref( $_[0] ) eq 'HASH' ) { $stringOrStringRef = $_[0]->{string}; $fileName = $_[0]->{zipName}; } else { ( $stringOrStringRef, $fileName ) = @_; } my $self = $class->STRINGMEMBERCLASS->_newFromString( $stringOrStringRef, $fileName ); return $self; } sub newFromFile { my $class = shift; my ( $fileName, $zipName ); if ( ref( $_[0] ) eq 'HASH' ) { $fileName = $_[0]->{fileName}; $zipName = $_[0]->{zipName}; } else { ( $fileName, $zipName ) = @_; } my $self = $class->NEWFILEMEMBERCLASS->_newFromFileNamed( $fileName, $zipName ); return $self; } sub newDirectoryNamed { my $class = shift; my ( $directoryName, $newName ); if ( ref( $_[0] ) eq 'HASH' ) { $directoryName = $_[0]->{directoryName}; $newName = $_[0]->{zipName}; } else { ( $directoryName, $newName ) = @_; } my $self = $class->DIRECTORYMEMBERCLASS->_newNamed( $directoryName, $newName ); return $self; } sub new { my $class = shift; my $self = { 'lastModFileDateTime' => 0, 'fileAttributeFormat' => FA_UNIX, 'versionMadeBy' => 20, 'versionNeededToExtract' => 20, 'bitFlag' => 0, 'compressionMethod' => COMPRESSION_STORED, 'desiredCompressionMethod' => COMPRESSION_STORED, 'desiredCompressionLevel' => COMPRESSION_LEVEL_NONE, 'internalFileAttributes' => 0, 'externalFileAttributes' => 0, # set later 'fileName' => '', 'cdExtraField' => '', 'localExtraField' => '', 'fileComment' => '', 'crc32' => 0, 'compressedSize' => 0, 'uncompressedSize' => 0, 'isSymbolicLink' => 0, @_ }; bless( $self, $class ); $self->unixFileAttributes( $self->DEFAULT_FILE_PERMISSIONS ); return $self; } sub _becomeDirectoryIfNecessary { my $self = shift; $self->_become(DIRECTORYMEMBERCLASS) if $self->isDirectory(); return $self; } # Morph into given class (do whatever cleanup I need to do) sub _become { return bless( $_[0], $_[1] ); } sub versionMadeBy { shift->{'versionMadeBy'}; } sub fileAttributeFormat { my $self = shift; if (@_) { $self->{fileAttributeFormat} = ( ref( $_[0] ) eq 'HASH' ) ? $_[0]->{format} : $_[0]; } else { return $self->{fileAttributeFormat}; } } sub versionNeededToExtract { shift->{'versionNeededToExtract'}; } sub bitFlag { my $self = shift; # Set General Purpose Bit Flags according to the desiredCompressionLevel setting if ( $self->desiredCompressionLevel == 1 || $self->desiredCompressionLevel == 2 ) { $self->{'bitFlag'} = DEFLATING_COMPRESSION_FAST; } elsif ( $self->desiredCompressionLevel == 3 || $self->desiredCompressionLevel == 4 || $self->desiredCompressionLevel == 5 || $self->desiredCompressionLevel == 6 || $self->desiredCompressionLevel == 7 ) { $self->{'bitFlag'} = DEFLATING_COMPRESSION_NORMAL; } elsif ( $self->desiredCompressionLevel == 8 || $self->desiredCompressionLevel == 9 ) { $self->{'bitFlag'} = DEFLATING_COMPRESSION_MAXIMUM; } $self->{'bitFlag'}; } sub compressionMethod { shift->{'compressionMethod'}; } sub desiredCompressionMethod { my $self = shift; my $newDesiredCompressionMethod = ( ref( $_[0] ) eq 'HASH' ) ? shift->{compressionMethod} : shift; my $oldDesiredCompressionMethod = $self->{'desiredCompressionMethod'}; if ( defined($newDesiredCompressionMethod) ) { $self->{'desiredCompressionMethod'} = $newDesiredCompressionMethod; if ( $newDesiredCompressionMethod == COMPRESSION_STORED ) { $self->{'desiredCompressionLevel'} = 0; $self->{'bitFlag'} &= ~GPBF_HAS_DATA_DESCRIPTOR_MASK; } elsif ( $oldDesiredCompressionMethod == COMPRESSION_STORED ) { $self->{'desiredCompressionLevel'} = COMPRESSION_LEVEL_DEFAULT; } } return $oldDesiredCompressionMethod; } sub desiredCompressionLevel { my $self = shift; my $newDesiredCompressionLevel = ( ref( $_[0] ) eq 'HASH' ) ? shift->{compressionLevel} : shift; my $oldDesiredCompressionLevel = $self->{'desiredCompressionLevel'}; if ( defined($newDesiredCompressionLevel) ) { $self->{'desiredCompressionLevel'} = $newDesiredCompressionLevel; $self->{'desiredCompressionMethod'} = ( $newDesiredCompressionLevel ? COMPRESSION_DEFLATED : COMPRESSION_STORED ); } return $oldDesiredCompressionLevel; } sub fileName { my $self = shift; my $newName = shift; if ($newName) { $newName =~ s{[\\/]+}{/}g; # deal with dos/windoze problems $self->{'fileName'} = $newName; } return $self->{'fileName'}; } sub lastModFileDateTime { my $modTime = shift->{'lastModFileDateTime'}; $modTime =~ m/^(\d+)$/; # untaint return $1; } sub lastModTime { my $self = shift; return _dosToUnixTime( $self->lastModFileDateTime() ); } sub setLastModFileDateTimeFromUnix { my $self = shift; my $time_t = shift; $self->{'lastModFileDateTime'} = _unixToDosTime($time_t); } sub internalFileAttributes { shift->{'internalFileAttributes'}; } sub externalFileAttributes { shift->{'externalFileAttributes'}; } # Convert UNIX permissions into proper value for zip file # Usable as a function or a method sub _mapPermissionsFromUnix { my $self = shift; my $mode = shift; my $attribs = $mode << 16; # Microsoft Windows Explorer needs this bit set for directories if ( $mode & DIRECTORY_ATTRIB ) { $attribs |= 16; } return $attribs; # TODO: map more MS-DOS perms } # Convert ZIP permissions into Unix ones # # This was taken from Info-ZIP group's portable UnZip # zipfile-extraction program, version 5.50. # http://www.info-zip.org/pub/infozip/ # # See the mapattr() function in unix/unix.c # See the attribute format constants in unzpriv.h # # XXX Note that there's one situation that isn't implemented # yet that depends on the "extra field." sub _mapPermissionsToUnix { my $self = shift; my $format = $self->{'fileAttributeFormat'}; my $attribs = $self->{'externalFileAttributes'}; my $mode = 0; if ( $format == FA_AMIGA ) { $attribs = $attribs >> 17 & 7; # Amiga RWE bits $mode = $attribs << 6 | $attribs << 3 | $attribs; return $mode; } if ( $format == FA_THEOS ) { $attribs &= 0xF1FFFFFF; if ( ( $attribs & 0xF0000000 ) != 0x40000000 ) { $attribs &= 0x01FFFFFF; # not a dir, mask all ftype bits } else { $attribs &= 0x41FFFFFF; # leave directory bit as set } } if ( $format == FA_UNIX || $format == FA_VAX_VMS || $format == FA_ACORN || $format == FA_ATARI_ST || $format == FA_BEOS || $format == FA_QDOS || $format == FA_TANDEM ) { $mode = $attribs >> 16; return $mode if $mode != 0 or not $self->localExtraField; # warn("local extra field is: ", $self->localExtraField, "\n"); # XXX This condition is not implemented # I'm just including the comments from the info-zip section for now. # Some (non-Info-ZIP) implementations of Zip for Unix and # VMS (and probably others ??) leave 0 in the upper 16-bit # part of the external_file_attributes field. Instead, they # store file permission attributes in some extra field. # As a work-around, we search for the presence of one of # these extra fields and fall back to the MSDOS compatible # part of external_file_attributes if one of the known # e.f. types has been detected. # Later, we might implement extraction of the permission # bits from the VMS extra field. But for now, the work-around # should be sufficient to provide "readable" extracted files. # (For ASI Unix e.f., an experimental remap from the e.f. # mode value IS already provided!) } # PKWARE's PKZip for Unix marks entries as FA_MSDOS, but stores the # Unix attributes in the upper 16 bits of the external attributes # field, just like Info-ZIP's Zip for Unix. We try to use that # value, after a check for consistency with the MSDOS attribute # bits (see below). if ( $format == FA_MSDOS ) { $mode = $attribs >> 16; } # FA_MSDOS, FA_OS2_HPFS, FA_WINDOWS_NTFS, FA_MACINTOSH, FA_TOPS20 $attribs = !( $attribs & 1 ) << 1 | ( $attribs & 0x10 ) >> 4; # keep previous $mode setting when its "owner" # part appears to be consistent with DOS attribute flags! return $mode if ( $mode & 0700 ) == ( 0400 | $attribs << 6 ); $mode = 0444 | $attribs << 6 | $attribs << 3 | $attribs; return $mode; } sub unixFileAttributes { my $self = shift; my $oldPerms = $self->_mapPermissionsToUnix; my $perms; if ( @_ ) { $perms = ( ref( $_[0] ) eq 'HASH' ) ? $_[0]->{attributes} : $_[0]; if ( $self->isDirectory ) { $perms &= ~FILE_ATTRIB; $perms |= DIRECTORY_ATTRIB; } else { $perms &= ~DIRECTORY_ATTRIB; $perms |= FILE_ATTRIB; } $self->{externalFileAttributes} = $self->_mapPermissionsFromUnix($perms); } return $oldPerms; } sub localExtraField { my $self = shift; if (@_) { $self->{localExtraField} = ( ref( $_[0] ) eq 'HASH' ) ? $_[0]->{field} : $_[0]; } else { return $self->{localExtraField}; } } sub cdExtraField { my $self = shift; if (@_) { $self->{cdExtraField} = ( ref( $_[0] ) eq 'HASH' ) ? $_[0]->{field} : $_[0]; } else { return $self->{cdExtraField}; } } sub extraFields { my $self = shift; return $self->localExtraField() . $self->cdExtraField(); } sub fileComment { my $self = shift; if (@_) { $self->{fileComment} = ( ref( $_[0] ) eq 'HASH' ) ? pack( 'C0a*', $_[0]->{comment} ) : pack( 'C0a*', $_[0] ); } else { return $self->{fileComment}; } } sub hasDataDescriptor { my $self = shift; if (@_) { my $shouldHave = shift; if ($shouldHave) { $self->{'bitFlag'} |= GPBF_HAS_DATA_DESCRIPTOR_MASK; } else { $self->{'bitFlag'} &= ~GPBF_HAS_DATA_DESCRIPTOR_MASK; } } return $self->{'bitFlag'} & GPBF_HAS_DATA_DESCRIPTOR_MASK; } sub crc32 { shift->{'crc32'}; } sub crc32String { sprintf( "%08x", shift->{'crc32'} ); } sub compressedSize { shift->{'compressedSize'}; } sub uncompressedSize { shift->{'uncompressedSize'}; } sub isEncrypted { shift->bitFlag() & GPBF_ENCRYPTED_MASK; } sub isTextFile { my $self = shift; my $bit = $self->internalFileAttributes() & IFA_TEXT_FILE_MASK; if (@_) { my $flag = ( ref( $_[0] ) eq 'HASH' ) ? shift->{flag} : shift; $self->{'internalFileAttributes'} &= ~IFA_TEXT_FILE_MASK; $self->{'internalFileAttributes'} |= ( $flag ? IFA_TEXT_FILE: IFA_BINARY_FILE ); } return $bit == IFA_TEXT_FILE; } sub isBinaryFile { my $self = shift; my $bit = $self->internalFileAttributes() & IFA_TEXT_FILE_MASK; if (@_) { my $flag = shift; $self->{'internalFileAttributes'} &= ~IFA_TEXT_FILE_MASK; $self->{'internalFileAttributes'} |= ( $flag ? IFA_BINARY_FILE: IFA_TEXT_FILE ); } return $bit == IFA_BINARY_FILE; } sub extractToFileNamed { my $self = shift; # local FS name my $name = ( ref( $_[0] ) eq 'HASH' ) ? $_[0]->{name} : $_[0]; $self->{'isSymbolicLink'} = 0; # Check if the file / directory is a symbolic link or not if ( $self->{'externalFileAttributes'} == 0xA1FF0000 ) { $self->{'isSymbolicLink'} = 1; $self->{'newName'} = $name; my ( $status, $fh ) = _newFileHandle( $name, 'r' ); my $retval = $self->extractToFileHandle($fh); $fh->close(); } else { #return _writeSymbolicLink($self, $name) if $self->isSymbolicLink(); return _error("encryption unsupported") if $self->isEncrypted(); mkpath( dirname($name) ); # croaks on error my ( $status, $fh ) = _newFileHandle( $name, 'w' ); return _ioError("Can't open file $name for write") unless $status; my $retval = $self->extractToFileHandle($fh); $fh->close(); chmod ($self->unixFileAttributes(), $name) or return _error("Can't chmod() ${name}: $!"); utime( $self->lastModTime(), $self->lastModTime(), $name ); return $retval; } } sub _writeSymbolicLink { my $self = shift; my $name = shift; my $chunkSize = $Archive::Zip::ChunkSize; #my ( $outRef, undef ) = $self->readChunk($chunkSize); my $fh; my $retval = $self->extractToFileHandle($fh); my ( $outRef, undef ) = $self->readChunk(100); } sub isSymbolicLink { my $self = shift; if ( $self->{'externalFileAttributes'} == 0xA1FF0000 ) { $self->{'isSymbolicLink'} = 1; } else { return 0; } 1; } sub isDirectory { return 0; } sub externalFileName { return undef; } # The following are used when copying data sub _writeOffset { shift->{'writeOffset'}; } sub _readOffset { shift->{'readOffset'}; } sub writeLocalHeaderRelativeOffset { shift->{'writeLocalHeaderRelativeOffset'}; } sub wasWritten { shift->{'wasWritten'} } sub _dataEnded { shift->{'dataEnded'}; } sub _readDataRemaining { shift->{'readDataRemaining'}; } sub _inflater { shift->{'inflater'}; } sub _deflater { shift->{'deflater'}; } # Return the total size of my local header sub _localHeaderSize { my $self = shift; return SIGNATURE_LENGTH + LOCAL_FILE_HEADER_LENGTH + length( $self->fileName() ) + length( $self->localExtraField() ); } # Return the total size of my CD header sub _centralDirectoryHeaderSize { my $self = shift; return SIGNATURE_LENGTH + CENTRAL_DIRECTORY_FILE_HEADER_LENGTH + length( $self->fileName() ) + length( $self->cdExtraField() ) + length( $self->fileComment() ); } # DOS date/time format # 0-4 (5) Second divided by 2 # 5-10 (6) Minute (0-59) # 11-15 (5) Hour (0-23 on a 24-hour clock) # 16-20 (5) Day of the month (1-31) # 21-24 (4) Month (1 = January, 2 = February, etc.) # 25-31 (7) Year offset from 1980 (add 1980 to get actual year) # Convert DOS date/time format to unix time_t format # NOT AN OBJECT METHOD! sub _dosToUnixTime { my $dt = shift; return time() unless defined($dt); my $year = ( ( $dt >> 25 ) & 0x7f ) + 80; my $mon = ( ( $dt >> 21 ) & 0x0f ) - 1; my $mday = ( ( $dt >> 16 ) & 0x1f ); my $hour = ( ( $dt >> 11 ) & 0x1f ); my $min = ( ( $dt >> 5 ) & 0x3f ); my $sec = ( ( $dt << 1 ) & 0x3e ); # catch errors my $time_t = eval { Time::Local::timelocal( $sec, $min, $hour, $mday, $mon, $year ); }; return time() if ($@); return $time_t; } # Note, this isn't exactly UTC 1980, it's 1980 + 12 hours and 1 # minute so that nothing timezoney can muck us up. my $safe_epoch = 315576060; # convert a unix time to DOS date/time # NOT AN OBJECT METHOD! sub _unixToDosTime { my $time_t = shift; unless ($time_t) { _error("Tried to add member with zero or undef value for time"); $time_t = $safe_epoch; } if ( $time_t < $safe_epoch ) { _ioError("Unsupported date before 1980 encountered, moving to 1980"); $time_t = $safe_epoch; } my ( $sec, $min, $hour, $mday, $mon, $year ) = localtime($time_t); my $dt = 0; $dt += ( $sec >> 1 ); $dt += ( $min << 5 ); $dt += ( $hour << 11 ); $dt += ( $mday << 16 ); $dt += ( ( $mon + 1 ) << 21 ); $dt += ( ( $year - 80 ) << 25 ); return $dt; } # Write my local header to a file handle. # Stores the offset to the start of the header in my # writeLocalHeaderRelativeOffset member. # Returns AZ_OK on success. sub _writeLocalFileHeader { my $self = shift; my $fh = shift; my $signatureData = pack( SIGNATURE_FORMAT, LOCAL_FILE_HEADER_SIGNATURE ); $self->_print($fh, $signatureData) or return _ioError("writing local header signature"); my $header = pack( LOCAL_FILE_HEADER_FORMAT, $self->versionNeededToExtract(), $self->bitFlag(), $self->desiredCompressionMethod(), $self->lastModFileDateTime(), $self->crc32(), $self->compressedSize(), # may need to be re-written later $self->uncompressedSize(), length( $self->fileName() ), length( $self->localExtraField() ) ); $self->_print($fh, $header) or return _ioError("writing local header"); # Check for a valid filename or a filename equal to a literal `0' if ( $self->fileName() || $self->fileName eq '0' ) { $self->_print($fh, $self->fileName() ) or return _ioError("writing local header filename"); } if ( $self->localExtraField() ) { $self->_print($fh, $self->localExtraField() ) or return _ioError("writing local extra field"); } return AZ_OK; } sub _writeCentralDirectoryFileHeader { my $self = shift; my $fh = shift; my $sigData = pack( SIGNATURE_FORMAT, CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE ); $self->_print($fh, $sigData) or return _ioError("writing central directory header signature"); my $fileNameLength = length( $self->fileName() ); my $extraFieldLength = length( $self->cdExtraField() ); my $fileCommentLength = length( $self->fileComment() ); my $header = pack( CENTRAL_DIRECTORY_FILE_HEADER_FORMAT, $self->versionMadeBy(), $self->fileAttributeFormat(), $self->versionNeededToExtract(), $self->bitFlag(), $self->desiredCompressionMethod(), $self->lastModFileDateTime(), $self->crc32(), # these three fields should have been updated $self->_writeOffset(), # by writing the data stream out $self->uncompressedSize(), # $fileNameLength, $extraFieldLength, $fileCommentLength, 0, # {'diskNumberStart'}, $self->internalFileAttributes(), $self->externalFileAttributes(), $self->writeLocalHeaderRelativeOffset() ); $self->_print($fh, $header) or return _ioError("writing central directory header"); if ($fileNameLength) { $self->_print($fh, $self->fileName() ) or return _ioError("writing central directory header signature"); } if ($extraFieldLength) { $self->_print($fh, $self->cdExtraField() ) or return _ioError("writing central directory extra field"); } if ($fileCommentLength) { $self->_print($fh, $self->fileComment() ) or return _ioError("writing central directory file comment"); } return AZ_OK; } # This writes a data descriptor to the given file handle. # Assumes that crc32, writeOffset, and uncompressedSize are # set correctly (they should be after a write). # Further, the local file header should have the # GPBF_HAS_DATA_DESCRIPTOR_MASK bit set. sub _writeDataDescriptor { my $self = shift; my $fh = shift; my $header = pack( SIGNATURE_FORMAT . DATA_DESCRIPTOR_FORMAT, DATA_DESCRIPTOR_SIGNATURE, $self->crc32(), $self->_writeOffset(), # compressed size $self->uncompressedSize() ); $self->_print($fh, $header) or return _ioError("writing data descriptor"); return AZ_OK; } # Re-writes the local file header with new crc32 and compressedSize fields. # To be called after writing the data stream. # Assumes that filename and extraField sizes didn't change since last written. sub _refreshLocalFileHeader { my $self = shift; my $fh = shift; my $here = $fh->tell(); $fh->seek( $self->writeLocalHeaderRelativeOffset() + SIGNATURE_LENGTH, IO::Seekable::SEEK_SET ) or return _ioError("seeking to rewrite local header"); my $header = pack( LOCAL_FILE_HEADER_FORMAT, $self->versionNeededToExtract(), $self->bitFlag(), $self->desiredCompressionMethod(), $self->lastModFileDateTime(), $self->crc32(), $self->_writeOffset(), # compressed size $self->uncompressedSize(), length( $self->fileName() ), length( $self->localExtraField() ) ); $self->_print($fh, $header) or return _ioError("re-writing local header"); $fh->seek( $here, IO::Seekable::SEEK_SET ) or return _ioError("seeking after rewrite of local header"); return AZ_OK; } sub readChunk { my $self = shift; my $chunkSize = ( ref( $_[0] ) eq 'HASH' ) ? $_[0]->{chunkSize} : $_[0]; if ( $self->readIsDone() ) { $self->endRead(); my $dummy = ''; return ( \$dummy, AZ_STREAM_END ); } $chunkSize = $Archive::Zip::ChunkSize if not defined($chunkSize); $chunkSize = $self->_readDataRemaining() if $chunkSize > $self->_readDataRemaining(); my $buffer = ''; my $outputRef; my ( $bytesRead, $status ) = $self->_readRawChunk( \$buffer, $chunkSize ); return ( \$buffer, $status ) unless $status == AZ_OK; $self->{'readDataRemaining'} -= $bytesRead; $self->{'readOffset'} += $bytesRead; if ( $self->compressionMethod() == COMPRESSION_STORED ) { $self->{'crc32'} = $self->computeCRC32( $buffer, $self->{'crc32'} ); } ( $outputRef, $status ) = &{ $self->{'chunkHandler'} }( $self, \$buffer ); $self->{'writeOffset'} += length($$outputRef); $self->endRead() if $self->readIsDone(); return ( $outputRef, $status ); } # Read the next raw chunk of my data. Subclasses MUST implement. # my ( $bytesRead, $status) = $self->_readRawChunk( \$buffer, $chunkSize ); sub _readRawChunk { my $self = shift; return $self->_subclassResponsibility(); } # A place holder to catch rewindData errors if someone ignores # the error code. sub _noChunk { my $self = shift; return ( \undef, _error("trying to copy chunk when init failed") ); } # Basically a no-op so that I can have a consistent interface. # ( $outputRef, $status) = $self->_copyChunk( \$buffer ); sub _copyChunk { my ( $self, $dataRef ) = @_; return ( $dataRef, AZ_OK ); } # ( $outputRef, $status) = $self->_deflateChunk( \$buffer ); sub _deflateChunk { my ( $self, $buffer ) = @_; my ( $status ) = $self->_deflater()->deflate( $buffer, my $out ); if ( $self->_readDataRemaining() == 0 ) { my $extraOutput; ( $status ) = $self->_deflater()->flush($extraOutput); $out .= $extraOutput; $self->endRead(); return ( \$out, AZ_STREAM_END ); } elsif ( $status == Z_OK ) { return ( \$out, AZ_OK ); } else { $self->endRead(); my $retval = _error( 'deflate error', $status ); my $dummy = ''; return ( \$dummy, $retval ); } } # ( $outputRef, $status) = $self->_inflateChunk( \$buffer ); sub _inflateChunk { my ( $self, $buffer ) = @_; my ( $status ) = $self->_inflater()->inflate( $buffer, my $out ); my $retval; $self->endRead() unless $status == Z_OK; if ( $status == Z_OK || $status == Z_STREAM_END ) { $retval = ( $status == Z_STREAM_END ) ? AZ_STREAM_END: AZ_OK; return ( \$out, $retval ); } else { $retval = _error( 'inflate error', $status ); my $dummy = ''; return ( \$dummy, $retval ); } } sub rewindData { my $self = shift; my $status; # set to trap init errors $self->{'chunkHandler'} = $self->can('_noChunk'); # Work around WinZip bug with 0-length DEFLATED files $self->desiredCompressionMethod(COMPRESSION_STORED) if $self->uncompressedSize() == 0; # assume that we're going to read the whole file, and compute the CRC anew. $self->{'crc32'} = 0 if ( $self->compressionMethod() == COMPRESSION_STORED ); # These are the only combinations of methods we deal with right now. if ( $self->compressionMethod() == COMPRESSION_STORED and $self->desiredCompressionMethod() == COMPRESSION_DEFLATED ) { ( $self->{'deflater'}, $status ) = Compress::Raw::Zlib::Deflate->new( '-Level' => $self->desiredCompressionLevel(), '-WindowBits' => -MAX_WBITS(), # necessary magic '-Bufsize' => $Archive::Zip::ChunkSize, @_ ); # pass additional options return _error( 'deflateInit error:', $status ) unless $status == Z_OK; $self->{'chunkHandler'} = $self->can('_deflateChunk'); } elsif ( $self->compressionMethod() == COMPRESSION_DEFLATED and $self->desiredCompressionMethod() == COMPRESSION_STORED ) { ( $self->{'inflater'}, $status ) = Compress::Raw::Zlib::Inflate->new( '-WindowBits' => -MAX_WBITS(), # necessary magic '-Bufsize' => $Archive::Zip::ChunkSize, @_ ); # pass additional options return _error( 'inflateInit error:', $status ) unless $status == Z_OK; $self->{'chunkHandler'} = $self->can('_inflateChunk'); } elsif ( $self->compressionMethod() == $self->desiredCompressionMethod() ) { $self->{'chunkHandler'} = $self->can('_copyChunk'); } else { return _error( sprintf( "Unsupported compression combination: read %d, write %d", $self->compressionMethod(), $self->desiredCompressionMethod() ) ); } $self->{'readDataRemaining'} = ( $self->compressionMethod() == COMPRESSION_STORED ) ? $self->uncompressedSize() : $self->compressedSize(); $self->{'dataEnded'} = 0; $self->{'readOffset'} = 0; return AZ_OK; } sub endRead { my $self = shift; delete $self->{'inflater'}; delete $self->{'deflater'}; $self->{'dataEnded'} = 1; $self->{'readDataRemaining'} = 0; return AZ_OK; } sub readIsDone { my $self = shift; return ( $self->_dataEnded() or !$self->_readDataRemaining() ); } sub contents { my $self = shift; my $newContents = shift; if ( defined($newContents) ) { # change our type and call the subclass contents method. $self->_become(STRINGMEMBERCLASS); return $self->contents( pack( 'C0a*', $newContents ) ) ; # in case of Unicode } else { my $oldCompression = $self->desiredCompressionMethod(COMPRESSION_STORED); my $status = $self->rewindData(@_); if ( $status != AZ_OK ) { $self->endRead(); return $status; } my $retval = ''; while ( $status == AZ_OK ) { my $ref; ( $ref, $status ) = $self->readChunk( $self->_readDataRemaining() ); # did we get it in one chunk? if ( length($$ref) == $self->uncompressedSize() ) { $retval = $$ref; } else { $retval .= $$ref } } $self->desiredCompressionMethod($oldCompression); $self->endRead(); $status = AZ_OK if $status == AZ_STREAM_END; $retval = undef unless $status == AZ_OK; return wantarray ? ( $retval, $status ) : $retval; } } sub extractToFileHandle { my $self = shift; return _error("encryption unsupported") if $self->isEncrypted(); my $fh = ( ref( $_[0] ) eq 'HASH' ) ? shift->{fileHandle} : shift; _binmode($fh); my $oldCompression = $self->desiredCompressionMethod(COMPRESSION_STORED); my $status = $self->rewindData(@_); $status = $self->_writeData($fh) if $status == AZ_OK; $self->desiredCompressionMethod($oldCompression); $self->endRead(); return $status; } # write local header and data stream to file handle sub _writeToFileHandle { my $self = shift; my $fh = shift; my $fhIsSeekable = shift; my $offset = shift; return _error("no member name given for $self") if $self->fileName() eq ''; $self->{'writeLocalHeaderRelativeOffset'} = $offset; $self->{'wasWritten'} = 0; # Determine if I need to write a data descriptor # I need to do this if I can't refresh the header # and I don't know compressed size or crc32 fields. my $headerFieldsUnknown = ( ( $self->uncompressedSize() > 0 ) and ($self->compressionMethod() == COMPRESSION_STORED or $self->desiredCompressionMethod() == COMPRESSION_DEFLATED ) ); my $shouldWriteDataDescriptor = ( $headerFieldsUnknown and not $fhIsSeekable ); $self->hasDataDescriptor(1) if ($shouldWriteDataDescriptor); $self->{'writeOffset'} = 0; my $status = $self->rewindData(); ( $status = $self->_writeLocalFileHeader($fh) ) if $status == AZ_OK; ( $status = $self->_writeData($fh) ) if $status == AZ_OK; if ( $status == AZ_OK ) { $self->{'wasWritten'} = 1; if ( $self->hasDataDescriptor() ) { $status = $self->_writeDataDescriptor($fh); } elsif ($headerFieldsUnknown) { $status = $self->_refreshLocalFileHeader($fh); } } return $status; } # Copy my (possibly compressed) data to given file handle. # Returns C on success sub _writeData { my $self = shift; my $writeFh = shift; # If symbolic link, just create one if the operating system is Linux, Unix, BSD or VMS # TODO: Add checks for other operating systems if ( $self->{'isSymbolicLink'} == 1 && $^O eq 'linux' ) { my $chunkSize = $Archive::Zip::ChunkSize; my ( $outRef, $status ) = $self->readChunk($chunkSize); symlink $$outRef, $self->{'newName'}; } else { return AZ_OK if ( $self->uncompressedSize() == 0 ); my $status; my $chunkSize = $Archive::Zip::ChunkSize; while ( $self->_readDataRemaining() > 0 ) { my $outRef; ( $outRef, $status ) = $self->readChunk($chunkSize); return $status if ( $status != AZ_OK and $status != AZ_STREAM_END ); if ( length($$outRef) > 0 ) { $self->_print($writeFh, $$outRef) or return _ioError("write error during copy"); } last if $status == AZ_STREAM_END; } $self->{'compressedSize'} = $self->_writeOffset(); } return AZ_OK; } # Return true if I depend on the named file sub _usesFileNamed { return 0; } 1; FILE3a2b9e3d/Carp.pm6#line 1 "/usr/share/perl/5.8/Carp.pm" package Carp; our $VERSION = '1.04'; # This package is heavily used. Be small. Be fast. Be good. # Comments added by Andy Wardley 09-Apr-98, based on an # _almost_ complete understanding of the package. Corrections and # comments are welcome. # The members of %Internal are packages that are internal to perl. # Carp will not report errors from within these packages if it # can. The members of %CarpInternal are internal to Perl's warning # system. Carp will not report errors from within these packages # either, and will not report calls *to* these packages for carp and # croak. They replace $CarpLevel, which is deprecated. The # $Max(EvalLen|(Arg(Len|Nums)) variables are used to specify how the eval # text and function arguments should be formatted when printed. # Comments added by Jos I. Boumans 11-Aug-2004 # I can not get %CarpInternal or %Internal to work as advertised, # therefor leaving it out of the below documentation. # $CarpLevel may be decprecated according to the last comment, but # after 6 years, it's still around and in heavy use ;) $CarpInternal{Carp}++; $CarpInternal{warnings}++; $CarpLevel = 0; # How many extra package levels to skip on carp. # How many calls to skip on confess. # Reconciling these notions is hard, use # %Internal and %CarpInternal instead. $MaxEvalLen = 0; # How much eval '...text...' to show. 0 = all. $MaxArgLen = 64; # How much of each argument to print. 0 = all. $MaxArgNums = 8; # How many arguments to print. 0 = all. $Verbose = 0; # If true then make shortmess call longmess instead require Exporter; @ISA = ('Exporter'); @EXPORT = qw(confess croak carp); @EXPORT_OK = qw(cluck verbose longmess shortmess); @EXPORT_FAIL = qw(verbose); # hook to enable verbose mode # if the caller specifies verbose usage ("perl -MCarp=verbose script.pl") # then the following method will be called by the Exporter which knows # to do this thanks to @EXPORT_FAIL, above. $_[1] will contain the word # 'verbose'. sub export_fail { shift; $Verbose = shift if $_[0] eq 'verbose'; return @_; } # longmess() crawls all the way up the stack reporting on all the function # calls made. The error string, $error, is originally constructed from the # arguments passed into longmess() via confess(), cluck() or shortmess(). # This gets appended with the stack trace messages which are generated for # each function call on the stack. sub longmess { { local($@, $!); # XXX fix require to not clear $@ or $!? # don't use require unless we need to (for Safe compartments) require Carp::Heavy unless $INC{"Carp/Heavy.pm"}; } # Icky backwards compatibility wrapper. :-( my $call_pack = caller(); if ($Internal{$call_pack} or $CarpInternal{$call_pack}) { return longmess_heavy(@_); } else { local $CarpLevel = $CarpLevel + 1; return longmess_heavy(@_); } } # shortmess() is called by carp() and croak() to skip all the way up to # the top-level caller's package and report the error from there. confess() # and cluck() generate a full stack trace so they call longmess() to # generate that. In verbose mode shortmess() calls longmess() so # you always get a stack trace sub shortmess { # Short-circuit &longmess if called via multiple packages { local($@, $!); # XXX fix require to not clear $@ or $!? # don't use require unless we need to (for Safe compartments) require Carp::Heavy unless $INC{"Carp/Heavy.pm"}; } # Icky backwards compatibility wrapper. :-( my $call_pack = caller(); local @CARP_NOT = caller(); shortmess_heavy(@_); } # the following four functions call longmess() or shortmess() depending on # whether they should generate a full stack trace (confess() and cluck()) # or simply report the caller's package (croak() and carp()), respectively. # confess() and croak() die, carp() and cluck() warn. sub croak { die shortmess @_ } sub confess { die longmess @_ } sub carp { warn shortmess @_ } sub cluck { warn longmess @_ } 1; FILE5cbb310d/Carp/Heavy.pm#line 1 "/usr/share/perl/5.8/Carp/Heavy.pm" # Carp::Heavy uses some variables in common with Carp. package Carp; # use strict; # not yet # On one line so MakeMaker will see it. use Carp; our $VERSION = $Carp::VERSION; our ($CarpLevel, $MaxArgNums, $MaxEvalLen, $MaxArgLen, $Verbose); sub caller_info { my $i = shift(@_) + 1; package DB; my %call_info; @call_info{ qw(pack file line sub has_args wantarray evaltext is_require) } = caller($i); unless (defined $call_info{pack}) { return (); } my $sub_name = Carp::get_subname(\%call_info); if ($call_info{has_args}) { my @args = map {Carp::format_arg($_)} @DB::args; if ($MaxArgNums and @args > $MaxArgNums) { # More than we want to show? $#args = $MaxArgNums; push @args, '...'; } # Push the args onto the subroutine $sub_name .= '(' . join (', ', @args) . ')'; } $call_info{sub_name} = $sub_name; return wantarray() ? %call_info : \%call_info; } # Transform an argument to a function into a string. sub format_arg { my $arg = shift; if (ref($arg)) { $arg = defined($overload::VERSION) ? overload::StrVal($arg) : "$arg"; }elsif (not defined($arg)) { $arg = 'undef'; } $arg =~ s/'/\\'/g; $arg = str_len_trim($arg, $MaxArgLen); # Quote it? $arg = "'$arg'" unless $arg =~ /^-?[\d.]+\z/; # The following handling of "control chars" is direct from # the original code - it is broken on Unicode though. # Suggestions? utf8::is_utf8($arg) or $arg =~ s/([[:cntrl:]]|[[:^ascii:]])/sprintf("\\x{%x}",ord($1))/eg; return $arg; } # Takes an inheritance cache and a package and returns # an anon hash of known inheritances and anon array of # inheritances which consequences have not been figured # for. sub get_status { my $cache = shift; my $pkg = shift; $cache->{$pkg} ||= [{$pkg => $pkg}, [trusts_directly($pkg)]]; return @{$cache->{$pkg}}; } # Takes the info from caller() and figures out the name of # the sub/require/eval sub get_subname { my $info = shift; if (defined($info->{evaltext})) { my $eval = $info->{evaltext}; if ($info->{is_require}) { return "require $eval"; } else { $eval =~ s/([\\\'])/\\$1/g; return "eval '" . str_len_trim($eval, $MaxEvalLen) . "'"; } } return ($info->{sub} eq '(eval)') ? 'eval {...}' : $info->{sub}; } # Figures out what call (from the point of view of the caller) # the long error backtrace should start at. sub long_error_loc { my $i; my $lvl = $CarpLevel; { my $pkg = caller(++$i); unless(defined($pkg)) { # This *shouldn't* happen. if (%Internal) { local %Internal; $i = long_error_loc(); last; } else { # OK, now I am irritated. return 2; } } redo if $CarpInternal{$pkg}; redo unless 0 > --$lvl; redo if $Internal{$pkg}; } return $i - 1; } sub longmess_heavy { return @_ if ref($_[0]); # don't break references as exceptions my $i = long_error_loc(); return ret_backtrace($i, @_); } # Returns a full stack backtrace starting from where it is # told. sub ret_backtrace { my ($i, @error) = @_; my $mess; my $err = join '', @error; $i++; my $tid_msg = ''; if (defined &Thread::tid) { my $tid = Thread->self->tid; $tid_msg = " thread $tid" if $tid; } my %i = caller_info($i); $mess = "$err at $i{file} line $i{line}$tid_msg\n"; while (my %i = caller_info(++$i)) { $mess .= "\t$i{sub_name} called at $i{file} line $i{line}$tid_msg\n"; } return $mess; } sub ret_summary { my ($i, @error) = @_; my $err = join '', @error; $i++; my $tid_msg = ''; if (defined &Thread::tid) { my $tid = Thread->self->tid; $tid_msg = " thread $tid" if $tid; } my %i = caller_info($i); return "$err at $i{file} line $i{line}$tid_msg\n"; } sub short_error_loc { my $cache; my $i = 1; my $lvl = $CarpLevel; { my $called = caller($i++); my $caller = caller($i); return 0 unless defined($caller); # What happened? redo if $Internal{$caller}; redo if $CarpInternal{$called}; redo if trusts($called, $caller, $cache); redo if trusts($caller, $called, $cache); redo unless 0 > --$lvl; } return $i - 1; } sub shortmess_heavy { return longmess_heavy(@_) if $Verbose; return @_ if ref($_[0]); # don't break references as exceptions my $i = short_error_loc(); if ($i) { ret_summary($i, @_); } else { longmess_heavy(@_); } } # If a string is too long, trims it with ... sub str_len_trim { my $str = shift; my $max = shift || 0; if (2 < $max and $max < length($str)) { substr($str, $max - 3) = '...'; } return $str; } # Takes two packages and an optional cache. Says whether the # first inherits from the second. # # Recursive versions of this have to work to avoid certain # possible endless loops, and when following long chains of # inheritance are less efficient. sub trusts { my $child = shift; my $parent = shift; my $cache = shift || {}; my ($known, $partial) = get_status($cache, $child); # Figure out consequences until we have an answer while (@$partial and not exists $known->{$parent}) { my $anc = shift @$partial; next if exists $known->{$anc}; $known->{$anc}++; my ($anc_knows, $anc_partial) = get_status($cache, $anc); my @found = keys %$anc_knows; @$known{@found} = (); push @$partial, @$anc_partial; } return exists $known->{$parent}; } # Takes a package and gives a list of those trusted directly sub trusts_directly { my $class = shift; no strict 'refs'; no warnings 'once'; return @{"$class\::CARP_NOT"} ? @{"$class\::CARP_NOT"} : @{"$class\::ISA"}; } 1; FILE0fdca3e9/Exporter.pm#line 1 "/usr/share/perl/5.8/Exporter.pm" package Exporter; require 5.006; # Be lean. #use strict; #no strict 'refs'; our $Debug = 0; our $ExportLevel = 0; our $Verbose ||= 0; our $VERSION = '5.58'; our (%Cache); $Carp::Internal{Exporter} = 1; sub as_heavy { require Exporter::Heavy; # Unfortunately, this does not work if the caller is aliased as *name = \&foo # Thus the need to create a lot of identical subroutines my $c = (caller(1))[3]; $c =~ s/.*:://; \&{"Exporter::Heavy::heavy_$c"}; } sub export { goto &{as_heavy()}; } sub import { my $pkg = shift; my $callpkg = caller($ExportLevel); if ($pkg eq "Exporter" and @_ and $_[0] eq "import") { *{$callpkg."::import"} = \&import; return; } # We *need* to treat @{"$pkg\::EXPORT_FAIL"} since Carp uses it :-( my($exports, $fail) = (\@{"$pkg\::EXPORT"}, \@{"$pkg\::EXPORT_FAIL"}); return export $pkg, $callpkg, @_ if $Verbose or $Debug or @$fail > 1; my $export_cache = ($Cache{$pkg} ||= {}); my $args = @_ or @_ = @$exports; local $_; if ($args and not %$export_cache) { s/^&//, $export_cache->{$_} = 1 foreach (@$exports, @{"$pkg\::EXPORT_OK"}); } my $heavy; # Try very hard not to use {} and hence have to enter scope on the foreach # We bomb out of the loop with last as soon as heavy is set. if ($args or $fail) { ($heavy = (/\W/ or $args and not exists $export_cache->{$_} or @$fail and $_ eq $fail->[0])) and last foreach (@_); } else { ($heavy = /\W/) and last foreach (@_); } return export $pkg, $callpkg, ($args ? @_ : ()) if $heavy; local $SIG{__WARN__} = sub {require Carp; &Carp::carp}; # shortcut for the common case of no type character *{"$callpkg\::$_"} = \&{"$pkg\::$_"} foreach @_; } # Default methods sub export_fail { my $self = shift; @_; } # Unfortunately, caller(1)[3] "does not work" if the caller is aliased as # *name = \&foo. Thus the need to create a lot of identical subroutines # Otherwise we could have aliased them to export(). sub export_to_level { goto &{as_heavy()}; } sub export_tags { goto &{as_heavy()}; } sub export_ok_tags { goto &{as_heavy()}; } sub require_version { goto &{as_heavy()}; } 1; __END__ FILE6f4d19ae/Exporter/Heavy.pm#line 1 "/usr/share/perl/5.8/Exporter/Heavy.pm" package Exporter::Heavy; use strict; no strict 'refs'; # On one line so MakeMaker will see it. require Exporter; our $VERSION = $Exporter::VERSION; $Carp::Internal{"Exporter::Heavy"} = 1; # # We go to a lot of trouble not to 'require Carp' at file scope, # because Carp requires Exporter, and something has to give. # sub _rebuild_cache { my ($pkg, $exports, $cache) = @_; s/^&// foreach @$exports; @{$cache}{@$exports} = (1) x @$exports; my $ok = \@{"${pkg}::EXPORT_OK"}; if (@$ok) { s/^&// foreach @$ok; @{$cache}{@$ok} = (1) x @$ok; } } sub heavy_export { # First make import warnings look like they're coming from the "use". local $SIG{__WARN__} = sub { my $text = shift; if ($text =~ s/ at \S*Exporter\S*.pm line \d+.*\n//) { require Carp; local $Carp::CarpLevel = 1; # ignore package calling us too. Carp::carp($text); } else { warn $text; } }; local $SIG{__DIE__} = sub { require Carp; local $Carp::CarpLevel = 1; # ignore package calling us too. Carp::croak("$_[0]Illegal null symbol in \@${1}::EXPORT") if $_[0] =~ /^Unable to create sub named "(.*?)::"/; }; my($pkg, $callpkg, @imports) = @_; my($type, $sym, $cache_is_current, $oops); my($exports, $export_cache) = (\@{"${pkg}::EXPORT"}, $Exporter::Cache{$pkg} ||= {}); if (@imports) { if (!%$export_cache) { _rebuild_cache ($pkg, $exports, $export_cache); $cache_is_current = 1; } if (grep m{^[/!:]}, @imports) { my $tagsref = \%{"${pkg}::EXPORT_TAGS"}; my $tagdata; my %imports; my($remove, $spec, @names, @allexports); # negated first item implies starting with default set: unshift @imports, ':DEFAULT' if $imports[0] =~ m/^!/; foreach $spec (@imports){ $remove = $spec =~ s/^!//; if ($spec =~ s/^://){ if ($spec eq 'DEFAULT'){ @names = @$exports; } elsif ($tagdata = $tagsref->{$spec}) { @names = @$tagdata; } else { warn qq["$spec" is not defined in %${pkg}::EXPORT_TAGS]; ++$oops; next; } } elsif ($spec =~ m:^/(.*)/$:){ my $patn = $1; @allexports = keys %$export_cache unless @allexports; # only do keys once @names = grep(/$patn/, @allexports); # not anchored by default } else { @names = ($spec); # is a normal symbol name } warn "Import ".($remove ? "del":"add").": @names " if $Exporter::Verbose; if ($remove) { foreach $sym (@names) { delete $imports{$sym} } } else { @imports{@names} = (1) x @names; } } @imports = keys %imports; } my @carp; foreach $sym (@imports) { if (!$export_cache->{$sym}) { if ($sym =~ m/^\d/) { $pkg->VERSION($sym); # inherit from UNIVERSAL # If the version number was the only thing specified # then we should act as if nothing was specified: if (@imports == 1) { @imports = @$exports; last; } # We need a way to emulate 'use Foo ()' but still # allow an easy version check: "use Foo 1.23, ''"; if (@imports == 2 and !$imports[1]) { @imports = (); last; } } elsif ($sym !~ s/^&// || !$export_cache->{$sym}) { # Last chance - see if they've updated EXPORT_OK since we # cached it. unless ($cache_is_current) { %$export_cache = (); _rebuild_cache ($pkg, $exports, $export_cache); $cache_is_current = 1; } if (!$export_cache->{$sym}) { # accumulate the non-exports push @carp, qq["$sym" is not exported by the $pkg module\n]; $oops++; } } } } if ($oops) { require Carp; Carp::croak("@{carp}Can't continue after import errors"); } } else { @imports = @$exports; } my($fail, $fail_cache) = (\@{"${pkg}::EXPORT_FAIL"}, $Exporter::FailCache{$pkg} ||= {}); if (@$fail) { if (!%$fail_cache) { # Build cache of symbols. Optimise the lookup by adding # barewords twice... both with and without a leading &. # (Technique could be applied to $export_cache at cost of memory) my @expanded = map { /^\w/ ? ($_, '&'.$_) : $_ } @$fail; warn "${pkg}::EXPORT_FAIL cached: @expanded" if $Exporter::Verbose; @{$fail_cache}{@expanded} = (1) x @expanded; } my @failed; foreach $sym (@imports) { push(@failed, $sym) if $fail_cache->{$sym} } if (@failed) { @failed = $pkg->export_fail(@failed); foreach $sym (@failed) { require Carp; Carp::carp(qq["$sym" is not implemented by the $pkg module ], "on this architecture"); } if (@failed) { require Carp; Carp::croak("Can't continue after import errors"); } } } warn "Importing into $callpkg from $pkg: ", join(", ",sort @imports) if $Exporter::Verbose; foreach $sym (@imports) { # shortcut for the common case of no type character (*{"${callpkg}::$sym"} = \&{"${pkg}::$sym"}, next) unless $sym =~ s/^(\W)//; $type = $1; *{"${callpkg}::$sym"} = $type eq '&' ? \&{"${pkg}::$sym"} : $type eq '$' ? \${"${pkg}::$sym"} : $type eq '@' ? \@{"${pkg}::$sym"} : $type eq '%' ? \%{"${pkg}::$sym"} : $type eq '*' ? *{"${pkg}::$sym"} : do { require Carp; Carp::croak("Can't export symbol: $type$sym") }; } } sub heavy_export_to_level { my $pkg = shift; my $level = shift; (undef) = shift; # XXX redundant arg my $callpkg = caller($level); $pkg->export($callpkg, @_); } # Utility functions sub _push_tags { my($pkg, $var, $syms) = @_; my @nontag = (); my $export_tags = \%{"${pkg}::EXPORT_TAGS"}; push(@{"${pkg}::$var"}, map { $export_tags->{$_} ? @{$export_tags->{$_}} : scalar(push(@nontag,$_),$_) } (@$syms) ? @$syms : keys %$export_tags); if (@nontag and $^W) { # This may change to a die one day require Carp; Carp::carp(join(", ", @nontag)." are not tags of $pkg"); } } sub heavy_require_version { my($self, $wanted) = @_; my $pkg = ref $self || $self; return ${pkg}->VERSION($wanted); } sub heavy_export_tags { _push_tags((caller)[0], "EXPORT", \@_); } sub heavy_export_ok_tags { _push_tags((caller)[0], "EXPORT_OK", \@_); } 1; FILEfeb93716/File/Basename.pm#line 1 "/usr/share/perl/5.8/File/Basename.pm" #line 36 package File::Basename; # A bit of juggling to insure that C always works, since # File::Basename is used during the Perl build, when the re extension may # not be available. BEGIN { unless (eval { require re; }) { eval ' sub re::import { $^H |= 0x00100000; } ' } # HINT_RE_TAINT import re 'taint'; } use strict; use 5.006; use warnings; our(@ISA, @EXPORT, $VERSION, $Fileparse_fstype, $Fileparse_igncase); require Exporter; @ISA = qw(Exporter); @EXPORT = qw(fileparse fileparse_set_fstype basename dirname); $VERSION = "2.74"; fileparse_set_fstype($^O); #line 101 sub fileparse { my($fullname,@suffices) = @_; unless (defined $fullname) { require Carp; Carp::croak("fileparse(): need a valid pathname"); } my $orig_type = ''; my($type,$igncase) = ($Fileparse_fstype, $Fileparse_igncase); my($taint) = substr($fullname,0,0); # Is $fullname tainted? if ($type eq "VMS" and $fullname =~ m{/} ) { # We're doing Unix emulation $orig_type = $type; $type = 'Unix'; } my($dirpath, $basename); if (grep { $type eq $_ } qw(MSDOS DOS MSWin32 Epoc)) { ($dirpath,$basename) = ($fullname =~ /^((?:.*[:\\\/])?)(.*)/s); $dirpath .= '.\\' unless $dirpath =~ /[\\\/]\z/; } elsif ($type eq "OS2") { ($dirpath,$basename) = ($fullname =~ m#^((?:.*[:\\/])?)(.*)#s); $dirpath = './' unless $dirpath; # Can't be 0 $dirpath .= '/' unless $dirpath =~ m#[\\/]\z#; } elsif ($type eq "MacOS") { ($dirpath,$basename) = ($fullname =~ /^(.*:)?(.*)/s); $dirpath = ':' unless $dirpath; } elsif ($type eq "AmigaOS") { ($dirpath,$basename) = ($fullname =~ /(.*[:\/])?(.*)/s); $dirpath = './' unless $dirpath; } elsif ($type eq 'VMS' ) { ($dirpath,$basename) = ($fullname =~ /^(.*[:>\]])?(.*)/s); $dirpath ||= ''; # should always be defined } else { # Default to Unix semantics. ($dirpath,$basename) = ($fullname =~ m#^(.*/)?(.*)#s); if ($orig_type eq 'VMS' and $fullname =~ m:^(/[^/]+/000000(/|$))(.*):) { # dev:[000000] is top of VMS tree, similar to Unix '/' # so strip it off and treat the rest as "normal" my $devspec = $1; my $remainder = $3; ($dirpath,$basename) = ($remainder =~ m#^(.*/)?(.*)#s); $dirpath ||= ''; # should always be defined $dirpath = $devspec.$dirpath; } $dirpath = './' unless $dirpath; } my $tail = ''; my $suffix = ''; if (@suffices) { foreach $suffix (@suffices) { my $pat = ($igncase ? '(?i)' : '') . "($suffix)\$"; if ($basename =~ s/$pat//s) { $taint .= substr($suffix,0,0); $tail = $1 . $tail; } } } # Ensure taint is propgated from the path to its pieces. $tail .= $taint; wantarray ? ($basename .= $taint, $dirpath .= $taint, $tail) : ($basename .= $taint); } #line 210 sub basename { my($path) = shift; # From BSD basename(1) # The basename utility deletes any prefix ending with the last slash `/' # character present in string (after first stripping trailing slashes) _strip_trailing_sep($path); my($basename, $dirname, $suffix) = fileparse( $path, map("\Q$_\E",@_) ); # From BSD basename(1) # The suffix is not stripped if it is identical to the remaining # characters in string. if( length $suffix and !length $basename ) { $basename = $suffix; } # Ensure that basename '/' == '/' if( !length $basename ) { $basename = $dirname; } return $basename; } #line 278 sub dirname { my $path = shift; my($type) = $Fileparse_fstype; if( $type eq 'VMS' and $path =~ m{/} ) { # Parse as Unix local($File::Basename::Fileparse_fstype) = ''; return dirname($path); } my($basename, $dirname) = fileparse($path); if ($type eq 'VMS') { $dirname ||= $ENV{DEFAULT}; } elsif ($type eq 'MacOS') { if( !length($basename) && $dirname !~ /^[^:]+:\z/) { _strip_trailing_sep($dirname); ($basename,$dirname) = fileparse $dirname; } $dirname .= ":" unless $dirname =~ /:\z/; } elsif (grep { $type eq $_ } qw(MSDOS DOS MSWin32 OS2)) { _strip_trailing_sep($dirname); unless( length($basename) ) { ($basename,$dirname) = fileparse $dirname; _strip_trailing_sep($dirname); } } elsif ($type eq 'AmigaOS') { if ( $dirname =~ /:\z/) { return $dirname } chop $dirname; $dirname =~ s#[^:/]+\z## unless length($basename); } else { _strip_trailing_sep($dirname); unless( length($basename) ) { ($basename,$dirname) = fileparse $dirname; _strip_trailing_sep($dirname); } } $dirname; } # Strip the trailing path separator. sub _strip_trailing_sep { my $type = $Fileparse_fstype; if ($type eq 'MacOS') { $_[0] =~ s/([^:]):\z/$1/s; } elsif (grep { $type eq $_ } qw(MSDOS DOS MSWin32 OS2)) { $_[0] =~ s/([^:])[\\\/]*\z/$1/; } else { $_[0] =~ s{(.)/*\z}{$1}s; } } #line 365 BEGIN { my @Ignore_Case = qw(MacOS VMS AmigaOS OS2 RISCOS MSWin32 MSDOS DOS Epoc); my @Types = (@Ignore_Case, qw(Unix)); sub fileparse_set_fstype { my $old = $Fileparse_fstype; if (@_) { my $new_type = shift; $Fileparse_fstype = 'Unix'; # default foreach my $type (@Types) { $Fileparse_fstype = $type if $new_type =~ /^$type/i; } $Fileparse_igncase = (grep $Fileparse_fstype eq $_, @Ignore_Case) ? 1 : 0; } return $old; } } 1; #line 399FILEea50e5aa/File/Copy.pmf#line 1 "/usr/share/perl/5.8/File/Copy.pm" # File/Copy.pm. Written in 1994 by Aaron Sherman . This # source code has been placed in the public domain by the author. # Please be kind and preserve the documentation. # # Additions copyright 1996 by Charles Bailey. Permission is granted # to distribute the revised code under the same terms as Perl itself. package File::Copy; use 5.006; use strict; use warnings; use Carp; use File::Spec; use Config; our(@ISA, @EXPORT, @EXPORT_OK, $VERSION, $Too_Big, $Syscopy_is_copy); sub copy; sub syscopy; sub cp; sub mv; # Note that this module implements only *part* of the API defined by # the File/Copy.pm module of the File-Tools-2.0 package. However, that # package has not yet been updated to work with Perl 5.004, and so it # would be a Bad Thing for the CPAN module to grab it and replace this # module. Therefore, we set this module's version higher than 2.0. $VERSION = '2.09'; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(copy move); @EXPORT_OK = qw(cp mv); $Too_Big = 1024 * 1024 * 2; my $macfiles; if ($^O eq 'MacOS') { $macfiles = eval { require Mac::MoreFiles }; warn 'Mac::MoreFiles could not be loaded; using non-native syscopy' if $@ && $^W; } sub _catname { my($from, $to) = @_; if (not defined &basename) { require File::Basename; import File::Basename 'basename'; } if ($^O eq 'MacOS') { # a partial dir name that's valid only in the cwd (e.g. 'tmp') $to = ':' . $to if $to !~ /:/; } return File::Spec->catfile($to, basename($from)); } sub copy { croak("Usage: copy(FROM, TO [, BUFFERSIZE]) ") unless(@_ == 2 || @_ == 3); my $from = shift; my $to = shift; my $from_a_handle = (ref($from) ? (ref($from) eq 'GLOB' || UNIVERSAL::isa($from, 'GLOB') || UNIVERSAL::isa($from, 'IO::Handle')) : (ref(\$from) eq 'GLOB')); my $to_a_handle = (ref($to) ? (ref($to) eq 'GLOB' || UNIVERSAL::isa($to, 'GLOB') || UNIVERSAL::isa($to, 'IO::Handle')) : (ref(\$to) eq 'GLOB')); if ($from eq $to) { # works for references, too carp("'$from' and '$to' are identical (not copied)"); # The "copy" was a success as the source and destination contain # the same data. return 1; } if ((($Config{d_symlink} && $Config{d_readlink}) || $Config{d_link}) && !($^O eq 'MSWin32' || $^O eq 'os2' || $^O eq 'vms')) { my @fs = stat($from); if (@fs) { my @ts = stat($to); if (@ts && $fs[0] == $ts[0] && $fs[1] == $ts[1]) { carp("'$from' and '$to' are identical (not copied)"); return 0; } } } if (!$from_a_handle && !$to_a_handle && -d $to && ! -d $from) { $to = _catname($from, $to); } if (defined &syscopy && !$Syscopy_is_copy && !$to_a_handle && !($from_a_handle && $^O eq 'os2' ) # OS/2 cannot handle handles && !($from_a_handle && $^O eq 'mpeix') # and neither can MPE/iX. && !($from_a_handle && $^O eq 'MSWin32') && !($from_a_handle && $^O eq 'MacOS') && !($from_a_handle && $^O eq 'NetWare') ) { return syscopy($from, $to); } my $closefrom = 0; my $closeto = 0; my ($size, $status, $r, $buf); local($\) = ''; my $from_h; if ($from_a_handle) { $from_h = $from; } else { $from = _protect($from) if $from =~ /^\s/s; $from_h = \do { local *FH }; open($from_h, "< $from\0") or goto fail_open1; binmode $from_h or die "($!,$^E)"; $closefrom = 1; } my $to_h; if ($to_a_handle) { $to_h = $to; } else { $to = _protect($to) if $to =~ /^\s/s; $to_h = \do { local *FH }; open($to_h,"> $to\0") or goto fail_open2; binmode $to_h or die "($!,$^E)"; $closeto = 1; } if (@_) { $size = shift(@_) + 0; croak("Bad buffer size for copy: $size\n") unless ($size > 0); } else { $size = tied(*$from_h) ? 0 : -s $from_h || 0; $size = 1024 if ($size < 512); $size = $Too_Big if ($size > $Too_Big); } $! = 0; for (;;) { my ($r, $w, $t); defined($r = sysread($from_h, $buf, $size)) or goto fail_inner; last unless $r; for ($w = 0; $w < $r; $w += $t) { $t = syswrite($to_h, $buf, $r - $w, $w) or goto fail_inner; } } close($to_h) || goto fail_open2 if $closeto; close($from_h) || goto fail_open1 if $closefrom; # Use this idiom to avoid uninitialized value warning. return 1; # All of these contortions try to preserve error messages... fail_inner: if ($closeto) { $status = $!; $! = 0; close $to_h; $! = $status unless $!; } fail_open2: if ($closefrom) { $status = $!; $! = 0; close $from_h; $! = $status unless $!; } fail_open1: return 0; } sub move { croak("Usage: move(FROM, TO) ") unless @_ == 2; my($from,$to) = @_; my($fromsz,$tosz1,$tomt1,$tosz2,$tomt2,$sts,$ossts); if (-d $to && ! -d $from) { $to = _catname($from, $to); } ($tosz1,$tomt1) = (stat($to))[7,9]; $fromsz = -s $from; if ($^O eq 'os2' and defined $tosz1 and defined $fromsz) { # will not rename with overwrite unlink $to; } return 1 if rename $from, $to; # Did rename return an error even though it succeeded, because $to # is on a remote NFS file system, and NFS lost the server's ack? return 1 if defined($fromsz) && !-e $from && # $from disappeared (($tosz2,$tomt2) = (stat($to))[7,9]) && # $to's there ($tosz1 != $tosz2 or $tomt1 != $tomt2) && # and changed $tosz2 == $fromsz; # it's all there ($tosz1,$tomt1) = (stat($to))[7,9]; # just in case rename did something { local $@; eval { local $SIG{__DIE__}; copy($from,$to) or die; my($atime, $mtime) = (stat($from))[8,9]; utime($atime, $mtime, $to); unlink($from) or die; }; return 1 unless $@; } ($sts,$ossts) = ($! + 0, $^E + 0); ($tosz2,$tomt2) = ((stat($to))[7,9],0,0) if defined $tomt1; unlink($to) if !defined($tomt1) or $tomt1 != $tomt2 or $tosz1 != $tosz2; ($!,$^E) = ($sts,$ossts); return 0; } *cp = \© *mv = \&move; if ($^O eq 'MacOS') { *_protect = sub { MacPerl::MakeFSSpec($_[0]) }; } else { *_protect = sub { "./$_[0]" }; } # &syscopy is an XSUB under OS/2 unless (defined &syscopy) { if ($^O eq 'VMS') { *syscopy = \&rmscopy; } elsif ($^O eq 'mpeix') { *syscopy = sub { return 0 unless @_ == 2; # Use the MPE cp program in order to # preserve MPE file attributes. return system('/bin/cp', '-f', $_[0], $_[1]) == 0; }; } elsif ($^O eq 'MSWin32') { *syscopy = sub { return 0 unless @_ == 2; return Win32::CopyFile(@_, 1); }; } elsif ($macfiles) { *syscopy = sub { my($from, $to) = @_; my($dir, $toname); return 0 unless -e $from; if ($to =~ /(.*:)([^:]+):?$/) { ($dir, $toname) = ($1, $2); } else { ($dir, $toname) = (":", $to); } unlink($to); Mac::MoreFiles::FSpFileCopy($from, $dir, $toname, 1); }; } else { $Syscopy_is_copy = 1; *syscopy = \© } } 1; __END__ #line 459 FILEc4599de9/File/Find.pmZ#line 1 "/usr/share/perl/5.8/File/Find.pm" package File::Find; use 5.006; use strict; use warnings; use warnings::register; our $VERSION = '1.10'; require Exporter; require Cwd; # # Modified to ensure sub-directory traversal order is not inverded by stack # push and pops. That is remains in the same order as in the directory file, # or user pre-processing (EG:sorted). # #line 413 our @ISA = qw(Exporter); our @EXPORT = qw(find finddepth); use strict; my $Is_VMS; my $Is_MacOS; require File::Basename; require File::Spec; # Should ideally be my() not our() but local() currently # refuses to operate on lexicals our %SLnkSeen; our ($wanted_callback, $avoid_nlink, $bydepth, $no_chdir, $follow, $follow_skip, $full_check, $untaint, $untaint_skip, $untaint_pat, $pre_process, $post_process, $dangling_symlinks); sub contract_name { my ($cdir,$fn) = @_; return substr($cdir,0,rindex($cdir,'/')) if $fn eq $File::Find::current_dir; $cdir = substr($cdir,0,rindex($cdir,'/')+1); $fn =~ s|^\./||; my $abs_name= $cdir . $fn; if (substr($fn,0,3) eq '../') { 1 while $abs_name =~ s!/[^/]*/\.\./!/!; } return $abs_name; } # return the absolute name of a directory or file sub contract_name_Mac { my ($cdir,$fn) = @_; my $abs_name; if ($fn =~ /^(:+)(.*)$/) { # valid pathname starting with a ':' my $colon_count = length ($1); if ($colon_count == 1) { $abs_name = $cdir . $2; return $abs_name; } else { # need to move up the tree, but # only if it's not a volume name for (my $i=1; $i<$colon_count; $i++) { unless ($cdir =~ /^[^:]+:$/) { # volume name $cdir =~ s/[^:]+:$//; } else { return undef; } } $abs_name = $cdir . $2; return $abs_name; } } else { # $fn may be a valid path to a directory or file or (dangling) # symlink, without a leading ':' if ( (-e $fn) || (-l $fn) ) { if ($fn =~ /^[^:]+:/) { # a volume name like DataHD:* return $fn; # $fn is already an absolute path } else { $abs_name = $cdir . $fn; return $abs_name; } } else { # argh!, $fn is not a valid directory/file return undef; } } } sub PathCombine($$) { my ($Base,$Name) = @_; my $AbsName; if ($Is_MacOS) { # $Name is the resolved symlink (always a full path on MacOS), # i.e. there's no need to call contract_name_Mac() $AbsName = $Name; # (simple) check for recursion if ( ( $Base =~ /^$AbsName/) && (-d $AbsName) ) { # recursion return undef; } } else { if (substr($Name,0,1) eq '/') { $AbsName= $Name; } else { $AbsName= contract_name($Base,$Name); } # (simple) check for recursion my $newlen= length($AbsName); if ($newlen <= length($Base)) { if (($newlen == length($Base) || substr($Base,$newlen,1) eq '/') && $AbsName eq substr($Base,0,$newlen)) { return undef; } } } return $AbsName; } sub Follow_SymLink($) { my ($AbsName) = @_; my ($NewName,$DEV, $INO); ($DEV, $INO)= lstat $AbsName; while (-l _) { if ($SLnkSeen{$DEV, $INO}++) { if ($follow_skip < 2) { die "$AbsName is encountered a second time"; } else { return undef; } } $NewName= PathCombine($AbsName, readlink($AbsName)); unless(defined $NewName) { if ($follow_skip < 2) { die "$AbsName is a recursive symbolic link"; } else { return undef; } } else { $AbsName= $NewName; } ($DEV, $INO) = lstat($AbsName); return undef unless defined $DEV; # dangling symbolic link } if ($full_check && defined $DEV && $SLnkSeen{$DEV, $INO}++) { if ( ($follow_skip < 1) || ((-d _) && ($follow_skip < 2)) ) { die "$AbsName encountered a second time"; } else { return undef; } } return $AbsName; } our($dir, $name, $fullname, $prune); sub _find_dir_symlnk($$$); sub _find_dir($$$); # check whether or not a scalar variable is tainted # (code straight from the Camel, 3rd ed., page 561) sub is_tainted_pp { my $arg = shift; my $nada = substr($arg, 0, 0); # zero-length local $@; eval { eval "# $nada" }; return length($@) != 0; } sub _find_opt { my $wanted = shift; die "invalid top directory" unless defined $_[0]; # This function must local()ize everything because callbacks may # call find() or finddepth() local %SLnkSeen; local ($wanted_callback, $avoid_nlink, $bydepth, $no_chdir, $follow, $follow_skip, $full_check, $untaint, $untaint_skip, $untaint_pat, $pre_process, $post_process, $dangling_symlinks); local($dir, $name, $fullname, $prune); local *_ = \my $a; my $cwd = $wanted->{bydepth} ? Cwd::fastcwd() : Cwd::getcwd(); my $cwd_untainted = $cwd; my $check_t_cwd = 1; $wanted_callback = $wanted->{wanted}; $bydepth = $wanted->{bydepth}; $pre_process = $wanted->{preprocess}; $post_process = $wanted->{postprocess}; $no_chdir = $wanted->{no_chdir}; $full_check = $^O eq 'MSWin32' ? 0 : $wanted->{follow}; $follow = $^O eq 'MSWin32' ? 0 : $full_check || $wanted->{follow_fast}; $follow_skip = $wanted->{follow_skip}; $untaint = $wanted->{untaint}; $untaint_pat = $wanted->{untaint_pattern}; $untaint_skip = $wanted->{untaint_skip}; $dangling_symlinks = $wanted->{dangling_symlinks}; # for compatibility reasons (find.pl, find2perl) local our ($topdir, $topdev, $topino, $topmode, $topnlink); # a symbolic link to a directory doesn't increase the link count $avoid_nlink = $follow || $File::Find::dont_use_nlink; my ($abs_dir, $Is_Dir); Proc_Top_Item: foreach my $TOP (@_) { my $top_item = $TOP; ($topdev,$topino,$topmode,$topnlink) = $follow ? stat $top_item : lstat $top_item; if ($Is_MacOS) { $top_item = ":$top_item" if ( (-d _) && ( $top_item !~ /:/ ) ); } elsif ($^O eq 'MSWin32') { $top_item =~ s|/\z|| unless $top_item =~ m|\w:/$|; } else { $top_item =~ s|/\z|| unless $top_item eq '/'; } $Is_Dir= 0; if ($follow) { if ($Is_MacOS) { $cwd = "$cwd:" unless ($cwd =~ /:$/); # for safety if ($top_item eq $File::Find::current_dir) { $abs_dir = $cwd; } else { $abs_dir = contract_name_Mac($cwd, $top_item); unless (defined $abs_dir) { warnings::warnif "Can't determine absolute path for $top_item (No such file or directory)\n"; next Proc_Top_Item; } } } else { if (substr($top_item,0,1) eq '/') { $abs_dir = $top_item; } elsif ($top_item eq $File::Find::current_dir) { $abs_dir = $cwd; } else { # care about any ../ $abs_dir = contract_name("$cwd/",$top_item); } } $abs_dir= Follow_SymLink($abs_dir); unless (defined $abs_dir) { if ($dangling_symlinks) { if (ref $dangling_symlinks eq 'CODE') { $dangling_symlinks->($top_item, $cwd); } else { warnings::warnif "$top_item is a dangling symbolic link\n"; } } next Proc_Top_Item; } if (-d _) { _find_dir_symlnk($wanted, $abs_dir, $top_item); $Is_Dir= 1; } } else { # no follow $topdir = $top_item; unless (defined $topnlink) { warnings::warnif "Can't stat $top_item: $!\n"; next Proc_Top_Item; } if (-d _) { $top_item =~ s/\.dir\z//i if $Is_VMS; _find_dir($wanted, $top_item, $topnlink); $Is_Dir= 1; } else { $abs_dir= $top_item; } } unless ($Is_Dir) { unless (($_,$dir) = File::Basename::fileparse($abs_dir)) { if ($Is_MacOS) { ($dir,$_) = (':', $top_item); # $File::Find::dir, $_ } else { ($dir,$_) = ('./', $top_item); } } $abs_dir = $dir; if (( $untaint ) && (is_tainted($dir) )) { ( $abs_dir ) = $dir =~ m|$untaint_pat|; unless (defined $abs_dir) { if ($untaint_skip == 0) { die "directory $dir is still tainted"; } else { next Proc_Top_Item; } } } unless ($no_chdir || chdir $abs_dir) { warnings::warnif "Couldn't chdir $abs_dir: $!\n"; next Proc_Top_Item; } $name = $abs_dir . $_; # $File::Find::name $_ = $name if $no_chdir; { $wanted_callback->() }; # protect against wild "next" } unless ( $no_chdir ) { if ( ($check_t_cwd) && (($untaint) && (is_tainted($cwd) )) ) { ( $cwd_untainted ) = $cwd =~ m|$untaint_pat|; unless (defined $cwd_untainted) { die "insecure cwd in find(depth)"; } $check_t_cwd = 0; } unless (chdir $cwd_untainted) { die "Can't cd to $cwd: $!\n"; } } } } # API: # $wanted # $p_dir : "parent directory" # $nlink : what came back from the stat # preconditions: # chdir (if not no_chdir) to dir sub _find_dir($$$) { my ($wanted, $p_dir, $nlink) = @_; my ($CdLvl,$Level) = (0,0); my @Stack; my @filenames; my ($subcount,$sub_nlink); my $SE= []; my $dir_name= $p_dir; my $dir_pref; my $dir_rel = $File::Find::current_dir; my $tainted = 0; my $no_nlink; if ($Is_MacOS) { $dir_pref= ($p_dir =~ /:$/) ? $p_dir : "$p_dir:"; # preface } elsif ($^O eq 'MSWin32') { $dir_pref = ($p_dir =~ m|\w:/$| ? $p_dir : "$p_dir/" ); } else { $dir_pref= ( $p_dir eq '/' ? '/' : "$p_dir/" ); } local ($dir, $name, $prune, *DIR); unless ( $no_chdir || ($p_dir eq $File::Find::current_dir)) { my $udir = $p_dir; if (( $untaint ) && (is_tainted($p_dir) )) { ( $udir ) = $p_dir =~ m|$untaint_pat|; unless (defined $udir) { if ($untaint_skip == 0) { die "directory $p_dir is still tainted"; } else { return; } } } unless (chdir ($Is_VMS && $udir !~ /[\/\[<]+/ ? "./$udir" : $udir)) { warnings::warnif "Can't cd to $udir: $!\n"; return; } } # push the starting directory push @Stack,[$CdLvl,$p_dir,$dir_rel,-1] if $bydepth; if ($Is_MacOS) { $p_dir = $dir_pref; # ensure trailing ':' } while (defined $SE) { unless ($bydepth) { $dir= $p_dir; # $File::Find::dir $name= $dir_name; # $File::Find::name $_= ($no_chdir ? $dir_name : $dir_rel ); # $_ # prune may happen here $prune= 0; { $wanted_callback->() }; # protect against wild "next" next if $prune; } # change to that directory unless ($no_chdir || ($dir_rel eq $File::Find::current_dir)) { my $udir= $dir_rel; if ( ($untaint) && (($tainted) || ($tainted = is_tainted($dir_rel) )) ) { ( $udir ) = $dir_rel =~ m|$untaint_pat|; unless (defined $udir) { if ($untaint_skip == 0) { if ($Is_MacOS) { die "directory ($p_dir) $dir_rel is still tainted"; } else { die "directory (" . ($p_dir ne '/' ? $p_dir : '') . "/) $dir_rel is still tainted"; } } else { # $untaint_skip == 1 next; } } } unless (chdir ($Is_VMS && $udir !~ /[\/\[<]+/ ? "./$udir" : $udir)) { if ($Is_MacOS) { warnings::warnif "Can't cd to ($p_dir) $udir: $!\n"; } else { warnings::warnif "Can't cd to (" . ($p_dir ne '/' ? $p_dir : '') . "/) $udir: $!\n"; } next; } $CdLvl++; } if ($Is_MacOS) { $dir_name = "$dir_name:" unless ($dir_name =~ /:$/); } $dir= $dir_name; # $File::Find::dir # Get the list of files in the current directory. unless (opendir DIR, ($no_chdir ? $dir_name : $File::Find::current_dir)) { warnings::warnif "Can't opendir($dir_name): $!\n"; next; } @filenames = readdir DIR; closedir(DIR); @filenames = $pre_process->(@filenames) if $pre_process; push @Stack,[$CdLvl,$dir_name,"",-2] if $post_process; # default: use whatever was specifid # (if $nlink >= 2, and $avoid_nlink == 0, this will switch back) $no_nlink = $avoid_nlink; # if dir has wrong nlink count, force switch to slower stat method $no_nlink = 1 if ($nlink < 2); if ($nlink == 2 && !$no_nlink) { # This dir has no subdirectories. for my $FN (@filenames) { next if $FN =~ $File::Find::skip_pattern; $name = $dir_pref . $FN; # $File::Find::name $_ = ($no_chdir ? $name : $FN); # $_ { $wanted_callback->() }; # protect against wild "next" } } else { # This dir has subdirectories. $subcount = $nlink - 2; # HACK: insert directories at this position. so as to preserve # the user pre-processed ordering of files. # EG: directory traversal is in user sorted order, not at random. my $stack_top = @Stack; for my $FN (@filenames) { next if $FN =~ $File::Find::skip_pattern; if ($subcount > 0 || $no_nlink) { # Seen all the subdirs? # check for directoriness. # stat is faster for a file in the current directory $sub_nlink = (lstat ($no_chdir ? $dir_pref . $FN : $FN))[3]; if (-d _) { --$subcount; $FN =~ s/\.dir\z//i if $Is_VMS; # HACK: replace push to preserve dir traversal order #push @Stack,[$CdLvl,$dir_name,$FN,$sub_nlink]; splice @Stack, $stack_top, 0, [$CdLvl,$dir_name,$FN,$sub_nlink]; } else { $name = $dir_pref . $FN; # $File::Find::name $_= ($no_chdir ? $name : $FN); # $_ { $wanted_callback->() }; # protect against wild "next" } } else { $name = $dir_pref . $FN; # $File::Find::name $_= ($no_chdir ? $name : $FN); # $_ { $wanted_callback->() }; # protect against wild "next" } } } } continue { while ( defined ($SE = pop @Stack) ) { ($Level, $p_dir, $dir_rel, $nlink) = @$SE; if ($CdLvl > $Level && !$no_chdir) { my $tmp; if ($Is_MacOS) { $tmp = (':' x ($CdLvl-$Level)) . ':'; } else { $tmp = join('/',('..') x ($CdLvl-$Level)); } die "Can't cd to $dir_name" . $tmp unless chdir ($tmp); $CdLvl = $Level; } if ($Is_MacOS) { # $pdir always has a trailing ':', except for the starting dir, # where $dir_rel eq ':' $dir_name = "$p_dir$dir_rel"; $dir_pref = "$dir_name:"; } elsif ($^O eq 'MSWin32') { $dir_name = ($p_dir =~ m|\w:/$| ? "$p_dir$dir_rel" : "$p_dir/$dir_rel"); $dir_pref = "$dir_name/"; } else { $dir_name = ($p_dir eq '/' ? "/$dir_rel" : "$p_dir/$dir_rel"); $dir_pref = "$dir_name/"; } if ( $nlink == -2 ) { $name = $dir = $p_dir; # $File::Find::name / dir $_ = $File::Find::current_dir; $post_process->(); # End-of-directory processing } elsif ( $nlink < 0 ) { # must be finddepth, report dirname now $name = $dir_name; if ($Is_MacOS) { if ($dir_rel eq ':') { # must be the top dir, where we started $name =~ s|:$||; # $File::Find::name $p_dir = "$p_dir:" unless ($p_dir =~ /:$/); } $dir = $p_dir; # $File::Find::dir $_ = ($no_chdir ? $name : $dir_rel); # $_ } else { if ( substr($name,-2) eq '/.' ) { substr($name, length($name) == 2 ? -1 : -2) = ''; } $dir = $p_dir; $_ = ($no_chdir ? $dir_name : $dir_rel ); if ( substr($_,-2) eq '/.' ) { substr($_, length($_) == 2 ? -1 : -2) = ''; } } { $wanted_callback->() }; # protect against wild "next" } else { push @Stack,[$CdLvl,$p_dir,$dir_rel,-1] if $bydepth; last; } } } } # API: # $wanted # $dir_loc : absolute location of a dir # $p_dir : "parent directory" # preconditions: # chdir (if not no_chdir) to dir sub _find_dir_symlnk($$$) { my ($wanted, $dir_loc, $p_dir) = @_; # $dir_loc is the absolute directory my @Stack; my @filenames; my $new_loc; my $updir_loc = $dir_loc; # untainted parent directory my $SE = []; my $dir_name = $p_dir; my $dir_pref; my $loc_pref; my $dir_rel = $File::Find::current_dir; my $byd_flag; # flag for pending stack entry if $bydepth my $tainted = 0; my $ok = 1; if ($Is_MacOS) { $dir_pref = ($p_dir =~ /:$/) ? "$p_dir" : "$p_dir:"; $loc_pref = ($dir_loc =~ /:$/) ? "$dir_loc" : "$dir_loc:"; } else { $dir_pref = ( $p_dir eq '/' ? '/' : "$p_dir/" ); $loc_pref = ( $dir_loc eq '/' ? '/' : "$dir_loc/" ); } local ($dir, $name, $fullname, $prune, *DIR); unless ($no_chdir) { # untaint the topdir if (( $untaint ) && (is_tainted($dir_loc) )) { ( $updir_loc ) = $dir_loc =~ m|$untaint_pat|; # parent dir, now untainted # once untainted, $updir_loc is pushed on the stack (as parent directory); # hence, we don't need to untaint the parent directory every time we chdir # to it later unless (defined $updir_loc) { if ($untaint_skip == 0) { die "directory $dir_loc is still tainted"; } else { return; } } } $ok = chdir($updir_loc) unless ($p_dir eq $File::Find::current_dir); unless ($ok) { warnings::warnif "Can't cd to $updir_loc: $!\n"; return; } } push @Stack,[$dir_loc,$updir_loc,$p_dir,$dir_rel,-1] if $bydepth; if ($Is_MacOS) { $p_dir = $dir_pref; # ensure trailing ':' } while (defined $SE) { unless ($bydepth) { # change (back) to parent directory (always untainted) unless ($no_chdir) { unless (chdir $updir_loc) { warnings::warnif "Can't cd to $updir_loc: $!\n"; next; } } $dir= $p_dir; # $File::Find::dir $name= $dir_name; # $File::Find::name $_= ($no_chdir ? $dir_name : $dir_rel ); # $_ $fullname= $dir_loc; # $File::Find::fullname # prune may happen here $prune= 0; lstat($_); # make sure file tests with '_' work { $wanted_callback->() }; # protect against wild "next" next if $prune; } # change to that directory unless ($no_chdir || ($dir_rel eq $File::Find::current_dir)) { $updir_loc = $dir_loc; if ( ($untaint) && (($tainted) || ($tainted = is_tainted($dir_loc) )) ) { # untaint $dir_loc, what will be pushed on the stack as (untainted) parent dir ( $updir_loc ) = $dir_loc =~ m|$untaint_pat|; unless (defined $updir_loc) { if ($untaint_skip == 0) { die "directory $dir_loc is still tainted"; } else { next; } } } unless (chdir $updir_loc) { warnings::warnif "Can't cd to $updir_loc: $!\n"; next; } } if ($Is_MacOS) { $dir_name = "$dir_name:" unless ($dir_name =~ /:$/); } $dir = $dir_name; # $File::Find::dir # Get the list of files in the current directory. unless (opendir DIR, ($no_chdir ? $dir_loc : $File::Find::current_dir)) { warnings::warnif "Can't opendir($dir_loc): $!\n"; next; } @filenames = readdir DIR; closedir(DIR); for my $FN (@filenames) { next if $FN =~ $File::Find::skip_pattern; # follow symbolic links / do an lstat $new_loc = Follow_SymLink($loc_pref.$FN); # ignore if invalid symlink unless (defined $new_loc) { if ($dangling_symlinks) { if (ref $dangling_symlinks eq 'CODE') { $dangling_symlinks->($FN, $dir_pref); } else { warnings::warnif "$dir_pref$FN is a dangling symbolic link\n"; } } $fullname = undef; $name = $dir_pref . $FN; $_ = ($no_chdir ? $name : $FN); { $wanted_callback->() }; next; } if (-d _) { push @Stack,[$new_loc,$updir_loc,$dir_name,$FN,1]; } else { $fullname = $new_loc; # $File::Find::fullname $name = $dir_pref . $FN; # $File::Find::name $_ = ($no_chdir ? $name : $FN); # $_ { $wanted_callback->() }; # protect against wild "next" } } } continue { while (defined($SE = pop @Stack)) { ($dir_loc, $updir_loc, $p_dir, $dir_rel, $byd_flag) = @$SE; if ($Is_MacOS) { # $p_dir always has a trailing ':', except for the starting dir, # where $dir_rel eq ':' $dir_name = "$p_dir$dir_rel"; $dir_pref = "$dir_name:"; $loc_pref = ($dir_loc =~ /:$/) ? $dir_loc : "$dir_loc:"; } else { $dir_name = ($p_dir eq '/' ? "/$dir_rel" : "$p_dir/$dir_rel"); $dir_pref = "$dir_name/"; $loc_pref = "$dir_loc/"; } if ( $byd_flag < 0 ) { # must be finddepth, report dirname now unless ($no_chdir || ($dir_rel eq $File::Find::current_dir)) { unless (chdir $updir_loc) { # $updir_loc (parent dir) is always untainted warnings::warnif "Can't cd to $updir_loc: $!\n"; next; } } $fullname = $dir_loc; # $File::Find::fullname $name = $dir_name; # $File::Find::name if ($Is_MacOS) { if ($dir_rel eq ':') { # must be the top dir, where we started $name =~ s|:$||; # $File::Find::name $p_dir = "$p_dir:" unless ($p_dir =~ /:$/); } $dir = $p_dir; # $File::Find::dir $_ = ($no_chdir ? $name : $dir_rel); # $_ } else { if ( substr($name,-2) eq '/.' ) { substr($name, length($name) == 2 ? -1 : -2) = ''; # $File::Find::name } $dir = $p_dir; # $File::Find::dir $_ = ($no_chdir ? $dir_name : $dir_rel); # $_ if ( substr($_,-2) eq '/.' ) { substr($_, length($_) == 2 ? -1 : -2) = ''; } } lstat($_); # make sure file tests with '_' work { $wanted_callback->() }; # protect against wild "next" } else { push @Stack,[$dir_loc, $updir_loc, $p_dir, $dir_rel,-1] if $bydepth; last; } } } } sub wrap_wanted { my $wanted = shift; if ( ref($wanted) eq 'HASH' ) { if ( $wanted->{follow} || $wanted->{follow_fast}) { $wanted->{follow_skip} = 1 unless defined $wanted->{follow_skip}; } if ( $wanted->{untaint} ) { $wanted->{untaint_pattern} = $File::Find::untaint_pattern unless defined $wanted->{untaint_pattern}; $wanted->{untaint_skip} = 0 unless defined $wanted->{untaint_skip}; } return $wanted; } else { return { wanted => $wanted }; } } sub find { my $wanted = shift; _find_opt(wrap_wanted($wanted), @_); } sub finddepth { my $wanted = wrap_wanted(shift); $wanted->{bydepth} = 1; _find_opt($wanted, @_); } # default $File::Find::skip_pattern = qr/^\.{1,2}\z/; $File::Find::untaint_pattern = qr|^([-+@\w./]+)$|; # These are hard-coded for now, but may move to hint files. if ($^O eq 'VMS') { $Is_VMS = 1; $File::Find::dont_use_nlink = 1; } elsif ($^O eq 'MacOS') { $Is_MacOS = 1; $File::Find::dont_use_nlink = 1; $File::Find::skip_pattern = qr/^Icon\015\z/; $File::Find::untaint_pattern = qr|^(.+)$|; } # this _should_ work properly on all platforms # where File::Find can be expected to work $File::Find::current_dir = File::Spec->curdir || '.'; $File::Find::dont_use_nlink = 1 if $^O eq 'os2' || $^O eq 'dos' || $^O eq 'amigaos' || $^O eq 'MSWin32' || $^O eq 'interix' || $^O eq 'cygwin' || $^O eq 'epoc' || $^O eq 'qnx' || $^O eq 'nto'; # Set dont_use_nlink in your hint file if your system's stat doesn't # report the number of links in a directory as an indication # of the number of files. # See, e.g. hints/machten.sh for MachTen 2.2. unless ($File::Find::dont_use_nlink) { require Config; $File::Find::dont_use_nlink = 1 if ($Config::Config{'dont_use_nlink'}); } # We need a function that checks if a scalar is tainted. Either use the # Scalar::Util module's tainted() function or our (slower) pure Perl # fallback is_tainted_pp() { local $@; eval { require Scalar::Util }; *is_tainted = $@ ? \&is_tainted_pp : \&Scalar::Util::tainted; } 1; FILEbd50f145/File/Path.pmT#line 1 "/usr/share/perl/5.8/File/Path.pm" package File::Path; #line 104 use 5.006; use Carp; use File::Basename (); use Exporter (); use strict; use warnings; our $VERSION = "1.08"; our @ISA = qw( Exporter ); our @EXPORT = qw( mkpath rmtree ); my $Is_VMS = $^O eq 'VMS'; my $Is_MacOS = $^O eq 'MacOS'; # These OSes complain if you want to remove a file that you have no # write permission to: my $force_writeable = ($^O eq 'os2' || $^O eq 'dos' || $^O eq 'MSWin32' || $^O eq 'amigaos' || $^O eq 'MacOS' || $^O eq 'epoc'); sub mkpath { my($paths, $verbose, $mode) = @_; # $paths -- either a path string or ref to list of paths # $verbose -- optional print "mkdir $path" for each directory created # $mode -- optional permissions, defaults to 0777 local($")=$Is_MacOS ? ":" : "/"; $mode = 0777 unless defined($mode); $paths = [$paths] unless ref $paths; my(@created,$path); foreach $path (@$paths) { $path .= '/' if $^O eq 'os2' and $path =~ /^\w:\z/s; # feature of CRT # Logic wants Unix paths, so go with the flow. if ($Is_VMS) { next if $path eq '/'; $path = VMS::Filespec::unixify($path); if ($path =~ m:^(/[^/]+)/?\z:) { $path = $1.'/000000'; } } next if -d $path; my $parent = File::Basename::dirname($path); unless (-d $parent or $path eq $parent) { push(@created,mkpath($parent, $verbose, $mode)); } print "mkdir $path\n" if $verbose; unless (mkdir($path,$mode)) { my $e = $!; # allow for another process to have created it meanwhile $! = $e, croak ("mkdir $path: $e") unless -d $path; } push(@created, $path); } @created; } sub _rmtree; sub _rmtree { my ($path, $prefix, $up, $up_dev, $up_ino, $verbose, $safe) = @_; my $up_name = $up eq '..' ? 'parent' : 'initial'; my ($dev, $ino, $perm) = lstat $path or return 0; unless (-d _) { print "unlink $prefix$path\n" if $verbose; unless (unlink $path) { carp "Can't remove file $prefix$path ($!)"; return 0; } return 1; } if (!chdir($path)) { # see if we can escalate privileges to get in # (e.g. funny protection mask such as -w- instead of rwx) $perm &= 07777; my $nperm = $perm | 0700; if (!($safe or $nperm == $perm or chmod($nperm, $path))) { carp "cannot make $prefix$path read-write-exec"; return 0; } elsif (!chdir($path)) { carp "Can't chdir to $prefix$path ($!)"; return 0; } } # avoid a race condition where a directory may be replaced by a # symlink between the lstat and the chdir my ($new_dev, $new_ino); ($new_dev, $new_ino, $perm) = stat '.'; unless ("$new_dev:$new_ino" eq "$dev:$ino") { croak "Directory $prefix$path changed before chdir, aborting"; } $perm &= 07777; my $nperm = $perm | 0700; unless ($safe or $nperm == $perm or chmod $nperm, '.') { carp "Can't make directory $prefix$path read+writeable ($!)"; $nperm = $perm; } my $count = 0; if (opendir my $dir, '.') { my $entry; while (defined ($entry = readdir $dir)) { next if $entry =~ /^\.\.?$/; $entry =~ /^(.*)$/s; $entry = $1; # untaint $count += _rmtree $entry, "$prefix$path/", '..', $dev, $ino, $verbose, $safe; } closedir $dir; } # restore directory permissions if required (in case the rmdir # below fails) now, while we're still in the directory and may do # so without a race via '.' unless ($nperm == $perm or chmod $perm, '.') { carp "Can't restore permissions on directory $prefix$path ($!)"; } # don't leave the caller in an unexpected directory unless (chdir $up) { croak "Can't return to $up_name directory from $prefix$path ($!)"; } # ensure that a chdir .. didn't take us somewhere other than # where we expected (see CVE-2002-0435) unless (($new_dev, $new_ino) = stat '.' and "$new_dev:$new_ino" eq "$up_dev:$up_ino") { croak "\u$up_name directory changed since entering $prefix$path"; } print "rmdir $prefix$path\n" if $verbose; if (rmdir $path) { $count++; } else { carp "Can't remove directory $prefix$path ($!)"; } return $count; } sub rmtree { my ($p, $verbose, $safe) = @_; $p = [] unless defined $p and length $p; $p = [ $p ] unless ref $p; my @paths = grep defined && length, @$p; # default to "unsafe" for non-root (will chmod dirs) $safe = $> ? 0 : 1 unless defined $safe; unless (@paths) { carp "No root path(s) specified"; return; } opendir my $oldpwd, '.' or do { carp "Can't fetch initial working directory"; return; }; my ($dev, $ino) = stat '.' or do { carp "Can't stat initial working directory"; return; }; my $count = 0; for my $path (@paths) { $count += _rmtree $path, '', $oldpwd, $dev, $ino, $verbose, $safe; } $count; } 1; FILE199ccb8c/FileHandle.pme#line 1 "/usr/share/perl/5.8/FileHandle.pm" package FileHandle; use 5.006; use strict; our($VERSION, @ISA, @EXPORT, @EXPORT_OK); $VERSION = "2.01"; require IO::File; @ISA = qw(IO::File); @EXPORT = qw(_IOFBF _IOLBF _IONBF); @EXPORT_OK = qw( pipe autoflush output_field_separator output_record_separator input_record_separator input_line_number format_page_number format_lines_per_page format_lines_left format_name format_top_name format_line_break_characters format_formfeed print printf getline getlines ); # # Everything we're willing to export, we must first import. # import IO::Handle grep { !defined(&$_) } @EXPORT, @EXPORT_OK; # # Some people call "FileHandle::function", so all the functions # that were in the old FileHandle class must be imported, too. # { no strict 'refs'; my %import = ( 'IO::Handle' => [qw(DESTROY new_from_fd fdopen close fileno getc ungetc gets eof flush error clearerr setbuf setvbuf _open_mode_string)], 'IO::Seekable' => [qw(seek tell getpos setpos)], 'IO::File' => [qw(new new_tmpfile open)] ); for my $pkg (keys %import) { for my $func (@{$import{$pkg}}) { my $c = *{"${pkg}::$func"}{CODE} or die "${pkg}::$func missing"; *$func = $c; } } } # # Specialized importer for Fcntl magic. # sub import { my $pkg = shift; my $callpkg = caller; require Exporter; Exporter::export($pkg, $callpkg, @_); # # If the Fcntl extension is available, # export its constants. # eval { require Fcntl; Exporter::export('Fcntl', $callpkg); }; } ################################################ # This is the only exported function we define; # the rest come from other classes. # sub pipe { my $r = new IO::Handle; my $w = new IO::Handle; CORE::pipe($r, $w) or return undef; ($r, $w); } # Rebless standard file handles bless *STDIN{IO}, "FileHandle" if ref *STDIN{IO} eq "IO::Handle"; bless *STDOUT{IO}, "FileHandle" if ref *STDOUT{IO} eq "IO::Handle"; bless *STDERR{IO}, "FileHandle" if ref *STDERR{IO} eq "IO::Handle"; 1; __END__ FILE5c66bdea/SelectSaver.pm#line 1 "/usr/share/perl/5.8/SelectSaver.pm" package SelectSaver; our $VERSION = '1.01'; require 5.000; use Carp; use Symbol; sub new { @_ >= 1 && @_ <= 2 or croak 'usage: new SelectSaver [FILEHANDLE]'; my $fh = select; my $self = bless \$fh, $_[0]; select qualify($_[1], caller) if @_ > 1; $self; } sub DESTROY { my $self = $_[0]; select $$self; } 1; FILE401ee52e/Symbol.pm[#line 1 "/usr/share/perl/5.8/Symbol.pm" package Symbol; BEGIN { require 5.005; } require Exporter; @ISA = qw(Exporter); @EXPORT = qw(gensym ungensym qualify qualify_to_ref); @EXPORT_OK = qw(delete_package geniosym); $VERSION = '1.06'; my $genpkg = "Symbol::"; my $genseq = 0; my %global = map {$_ => 1} qw(ARGV ARGVOUT ENV INC SIG STDERR STDIN STDOUT); # # Note that we never _copy_ the glob; we just make a ref to it. # If we did copy it, then SVf_FAKE would be set on the copy, and # glob-specific behaviors (e.g. C<*$ref = \&func>) wouldn't work. # sub gensym () { my $name = "GEN" . $genseq++; my $ref = \*{$genpkg . $name}; delete $$genpkg{$name}; $ref; } sub geniosym () { my $sym = gensym(); # force the IO slot to be filled select(select $sym); *$sym{IO}; } sub ungensym ($) {} sub qualify ($;$) { my ($name) = @_; if (!ref($name) && index($name, '::') == -1 && index($name, "'") == -1) { my $pkg; # Global names: special character, "^xyz", or other. if ($name =~ /^(([^a-z])|(\^[a-z_]+))\z/i || $global{$name}) { # RGS 2001-11-05 : translate leading ^X to control-char $name =~ s/^\^([a-z_])/'qq(\c'.$1.')'/eei; $pkg = "main"; } else { $pkg = (@_ > 1) ? $_[1] : caller; } $name = $pkg . "::" . $name; } $name; } sub qualify_to_ref ($;$) { return \*{ qualify $_[0], @_ > 1 ? $_[1] : caller }; } # # of Safe.pm lineage # sub delete_package ($) { my $pkg = shift; # expand to full symbol table name if needed unless ($pkg =~ /^main::.*::$/) { $pkg = "main$pkg" if $pkg =~ /^::/; $pkg = "main::$pkg" unless $pkg =~ /^main::/; $pkg .= '::' unless $pkg =~ /::$/; } my($stem, $leaf) = $pkg =~ m/(.*::)(\w+::)$/; my $stem_symtab = *{$stem}{HASH}; return unless defined $stem_symtab and exists $stem_symtab->{$leaf}; # free all the symbols in the package my $leaf_symtab = *{$stem_symtab->{$leaf}}{HASH}; foreach my $name (keys %$leaf_symtab) { undef *{$pkg . $name}; } # delete the symbol table %$leaf_symtab = (); delete $stem_symtab->{$leaf}; } 1; FILE7769bd00/UNIVERSAL.pm=#line 1 "/usr/share/perl/5.8/UNIVERSAL.pm" package UNIVERSAL; our $VERSION = '1.01'; # UNIVERSAL should not contain any extra subs/methods beyond those # that it exists to define. The use of Exporter below is a historical # accident that can't be fixed without breaking code. Note that we # *don't* set @ISA here, don't want all classes/objects inheriting from # Exporter. It's bad enough that all classes have a import() method # whenever UNIVERSAL.pm is loaded. require Exporter; *import = \&Exporter::import; @EXPORT_OK = qw(isa can VERSION); 1; __END__ #line 148 FILEad993a8c/base.pm#line 1 "/usr/share/perl/5.8/base.pm" package base; use strict 'vars'; use vars qw($VERSION); $VERSION = '2.07'; # constant.pm is slow sub SUCCESS () { 1 } sub PUBLIC () { 2**0 } sub PRIVATE () { 2**1 } sub INHERITED () { 2**2 } sub PROTECTED () { 2**3 } my $Fattr = \%fields::attr; sub has_fields { my($base) = shift; my $fglob = ${"$base\::"}{FIELDS}; return( ($fglob && *$fglob{HASH}) ? 1 : 0 ); } sub has_version { my($base) = shift; my $vglob = ${$base.'::'}{VERSION}; return( ($vglob && *$vglob{SCALAR}) ? 1 : 0 ); } sub has_attr { my($proto) = shift; my($class) = ref $proto || $proto; return exists $Fattr->{$class}; } sub get_attr { $Fattr->{$_[0]} = [1] unless $Fattr->{$_[0]}; return $Fattr->{$_[0]}; } if ($] < 5.009) { *get_fields = sub { # Shut up a possible typo warning. () = \%{$_[0].'::FIELDS'}; my $f = \%{$_[0].'::FIELDS'}; # should be centralized in fields? perhaps # fields::mk_FIELDS_be_OK. Peh. As long as %{ $package . '::FIELDS' } # is used here anyway, it doesn't matter. bless $f, 'pseudohash' if (ref($f) ne 'pseudohash'); return $f; } } else { *get_fields = sub { # Shut up a possible typo warning. () = \%{$_[0].'::FIELDS'}; return \%{$_[0].'::FIELDS'}; } } sub import { my $class = shift; return SUCCESS unless @_; # List of base classes from which we will inherit %FIELDS. my $fields_base; my $inheritor = caller(0); foreach my $base (@_) { next if $inheritor->isa($base); if (has_version($base)) { ${$base.'::VERSION'} = '-1, set by base.pm' unless defined ${$base.'::VERSION'}; } else { local $SIG{__DIE__}; eval "require $base"; # Only ignore "Can't locate" errors from our eval require. # Other fatal errors (syntax etc) must be reported. die if $@ && $@ !~ /^Can't locate .*? at \(eval /; unless (%{"$base\::"}) { require Carp; Carp::croak(<[0] = @$battr; if( keys %$dfields ) { warn "$derived is inheriting from $base but already has its own ". "fields!\n". "This will cause problems.\n". "Be sure you use base BEFORE declaring fields\n"; } # Iterate through the base's fields adding all the non-private # ones to the derived class. Hang on to the original attribute # (Public, Private, etc...) and add Inherited. # This is all too complicated to do efficiently with add_fields(). while (my($k,$v) = each %$bfields) { my $fno; if ($fno = $dfields->{$k} and $fno != $v) { require Carp; Carp::croak ("Inherited %FIELDS can't override existing %FIELDS"); } if( $battr->[$v] & PRIVATE ) { $dattr->[$v] = PRIVATE | INHERITED; } else { $dattr->[$v] = INHERITED | $battr->[$v]; $dfields->{$k} = $v; } } foreach my $idx (1..$#{$battr}) { next if defined $dattr->[$idx]; $dattr->[$idx] = $battr->[$idx] & INHERITED; } } 1; __END__ FILE2d8b7624/bytes.pm#line 1 "/usr/share/perl/5.8/bytes.pm" package bytes; our $VERSION = '1.02'; $bytes::hint_bits = 0x00000008; sub import { $^H |= $bytes::hint_bits; } sub unimport { $^H &= ~$bytes::hint_bits; } sub AUTOLOAD { require "bytes_heavy.pl"; goto &$AUTOLOAD if defined &$AUTOLOAD; require Carp; Carp::croak("Undefined subroutine $AUTOLOAD called"); } sub length ($); sub chr ($); sub ord ($); sub substr ($$;$$); sub index ($$;$); sub rindex ($$;$); 1; __END__ FILEbb3d36be/constant.pm #line 1 "/usr/share/perl/5.8/constant.pm" package constant; use strict; use 5.006_00; use warnings::register; our($VERSION, %declared); $VERSION = '1.05'; #======================================================================= # Some names are evil choices. my %keywords = map +($_, 1), qw{ BEGIN INIT CHECK END DESTROY AUTOLOAD }; my %forced_into_main = map +($_, 1), qw{ STDIN STDOUT STDERR ARGV ARGVOUT ENV INC SIG }; my %forbidden = (%keywords, %forced_into_main); #======================================================================= # import() - import symbols into user's namespace # # What we actually do is define a function in the caller's namespace # which returns the value. The function we create will normally # be inlined as a constant, thereby avoiding further sub calling # overhead. #======================================================================= sub import { my $class = shift; return unless @_; # Ignore 'use constant;' my %constants = (); my $multiple = ref $_[0]; if ( $multiple ) { if (ref $_[0] ne 'HASH') { require Carp; Carp::croak("Invalid reference type '".ref(shift)."' not 'HASH'"); } %constants = %{+shift}; } else { $constants{+shift} = undef; } foreach my $name ( keys %constants ) { unless (defined $name) { require Carp; Carp::croak("Can't use undef as constant name"); } my $pkg = caller; # Normal constant name if ($name =~ /^_?[^\W_0-9]\w*\z/ and !$forbidden{$name}) { # Everything is okay # Name forced into main, but we're not in main. Fatal. } elsif ($forced_into_main{$name} and $pkg ne 'main') { require Carp; Carp::croak("Constant name '$name' is forced into main::"); # Starts with double underscore. Fatal. } elsif ($name =~ /^__/) { require Carp; Carp::croak("Constant name '$name' begins with '__'"); # Maybe the name is tolerable } elsif ($name =~ /^[A-Za-z_]\w*\z/) { # Then we'll warn only if you've asked for warnings if (warnings::enabled()) { if ($keywords{$name}) { warnings::warn("Constant name '$name' is a Perl keyword"); } elsif ($forced_into_main{$name}) { warnings::warn("Constant name '$name' is " . "forced into package main::"); } } # Looks like a boolean # use constant FRED == fred; } elsif ($name =~ /^[01]?\z/) { require Carp; if (@_) { Carp::croak("Constant name '$name' is invalid"); } else { Carp::croak("Constant name looks like boolean value"); } } else { # Must have bad characters require Carp; Carp::croak("Constant name '$name' has invalid characters"); } { no strict 'refs'; my $full_name = "${pkg}::$name"; $declared{$full_name}++; if ($multiple) { my $scalar = $constants{$name}; *$full_name = sub () { $scalar }; } else { if (@_ == 1) { my $scalar = $_[0]; *$full_name = sub () { $scalar }; } elsif (@_) { my @list = @_; *$full_name = sub () { @list }; } else { *$full_name = sub () { }; } } } } } 1; __END__ FILEad30e879/integer.pm#line 1 "/usr/share/perl/5.8/integer.pm" package integer; our $VERSION = '1.00'; $integer::hint_bits = 0x1; sub import { $^H |= $integer::hint_bits; } sub unimport { $^H &= ~$integer::hint_bits; } 1; FILE83d8a82b/overload.pm#line 1 "/usr/share/perl/5.8/overload.pm" package overload; our $VERSION = '1.04'; $overload::hint_bits = 0x20000; # HINT_LOCALIZE_HH sub nil {} sub OVERLOAD { $package = shift; my %arg = @_; my ($sub, $fb); $ {$package . "::OVERLOAD"}{dummy}++; # Register with magic by touching. *{$package . "::()"} = \&nil; # Make it findable via fetchmethod. for (keys %arg) { if ($_ eq 'fallback') { $fb = $arg{$_}; } else { $sub = $arg{$_}; if (not ref $sub and $sub !~ /::/) { $ {$package . "::(" . $_} = $sub; $sub = \&nil; } #print STDERR "Setting `$ {'package'}::\cO$_' to \\&`$sub'.\n"; *{$package . "::(" . $_} = \&{ $sub }; } } ${$package . "::()"} = $fb; # Make it findable too (fallback only). } sub import { $package = (caller())[0]; # *{$package . "::OVERLOAD"} = \&OVERLOAD; shift; $package->overload::OVERLOAD(@_); } sub unimport { $package = (caller())[0]; ${$package . "::OVERLOAD"}{dummy}++; # Upgrade the table shift; for (@_) { if ($_ eq 'fallback') { undef $ {$package . "::()"}; } else { delete $ {$package . "::"}{"(" . $_}; } } } sub Overloaded { my $package = shift; $package = ref $package if ref $package; $package->can('()'); } sub ov_method { my $globref = shift; return undef unless $globref; my $sub = \&{*$globref}; return $sub if $sub ne \&nil; return shift->can($ {*$globref}); } sub OverloadedStringify { my $package = shift; $package = ref $package if ref $package; #$package->can('(""') ov_method mycan($package, '(""'), $package or ov_method mycan($package, '(0+'), $package or ov_method mycan($package, '(bool'), $package or ov_method mycan($package, '(nomethod'), $package; } sub Method { my $package = shift; $package = ref $package if ref $package; #my $meth = $package->can('(' . shift); ov_method mycan($package, '(' . shift), $package; #return $meth if $meth ne \&nil; #return $ {*{$meth}}; } sub AddrRef { my $package = ref $_[0]; return "$_[0]" unless $package; require Scalar::Util; my $class = Scalar::Util::blessed($_[0]); my $class_prefix = defined($class) ? "$class=" : ""; my $type = Scalar::Util::reftype($_[0]); my $addr = Scalar::Util::refaddr($_[0]); return sprintf("$class_prefix$type(0x%x)", $addr); } *StrVal = *AddrRef; sub mycan { # Real can would leave stubs. my ($package, $meth) = @_; return \*{$package . "::$meth"} if defined &{$package . "::$meth"}; my $p; foreach $p (@{$package . "::ISA"}) { my $out = mycan($p, $meth); return $out if $out; } return undef; } %constants = ( 'integer' => 0x1000, # HINT_NEW_INTEGER 'float' => 0x2000, # HINT_NEW_FLOAT 'binary' => 0x4000, # HINT_NEW_BINARY 'q' => 0x8000, # HINT_NEW_STRING 'qr' => 0x10000, # HINT_NEW_RE ); %ops = ( with_assign => "+ - * / % ** << >> x .", assign => "+= -= *= /= %= **= <<= >>= x= .=", num_comparison => "< <= > >= == !=", '3way_comparison'=> "<=> cmp", str_comparison => "lt le gt ge eq ne", binary => "& | ^", unary => "neg ! ~", mutators => '++ --', func => "atan2 cos sin exp abs log sqrt int", conversion => 'bool "" 0+', iterators => '<>', dereferencing => '${} @{} %{} &{} *{}', special => 'nomethod fallback ='); use warnings::register; sub constant { # Arguments: what, sub while (@_) { if (@_ == 1) { warnings::warnif ("Odd number of arguments for overload::constant"); last; } elsif (!exists $constants {$_ [0]}) { warnings::warnif ("`$_[0]' is not an overloadable type"); } elsif (!ref $_ [1] || "$_[1]" !~ /CODE\(0x[\da-f]+\)$/) { # Can't use C above as code references can be # blessed, and C would return the package the ref is blessed into. if (warnings::enabled) { $_ [1] = "undef" unless defined $_ [1]; warnings::warn ("`$_[1]' is not a code reference"); } } else { $^H{$_[0]} = $_[1]; $^H |= $constants{$_[0]} | $overload::hint_bits; } shift, shift; } } sub remove_constant { # Arguments: what, sub while (@_) { delete $^H{$_[0]}; $^H &= ~ $constants{$_[0]}; shift, shift; } } 1; __END__ FILE5b7dc1eb/strict.pm#line 1 "/usr/share/perl/5.8/strict.pm" package strict; $strict::VERSION = "1.03"; my %bitmask = ( refs => 0x00000002, subs => 0x00000200, vars => 0x00000400 ); sub bits { my $bits = 0; my @wrong; foreach my $s (@_) { push @wrong, $s unless exists $bitmask{$s}; $bits |= $bitmask{$s} || 0; } if (@wrong) { require Carp; Carp::croak("Unknown 'strict' tag(s) '@wrong'"); } $bits; } my $default_bits = bits(qw(refs subs vars)); sub import { shift; $^H |= @_ ? bits(@_) : $default_bits; } sub unimport { shift; $^H &= ~ (@_ ? bits(@_) : $default_bits); } 1; __END__ FILE0cb7c55a/utf8.pm#line 1 "/usr/share/perl/5.8/utf8.pm" package utf8; $utf8::hint_bits = 0x00800000; our $VERSION = '1.06'; sub import { $^H |= $utf8::hint_bits; $enc{caller()} = $_[1] if $_[1]; } sub unimport { $^H &= ~$utf8::hint_bits; } sub AUTOLOAD { require "utf8_heavy.pl"; goto &$AUTOLOAD if defined &$AUTOLOAD; require Carp; Carp::croak("Undefined subroutine $AUTOLOAD called"); } 1; __END__ FILE88647770/vars.pm#line 1 "/usr/share/perl/5.8/vars.pm" package vars; use 5.006; our $VERSION = '1.01'; use warnings::register; use strict qw(vars subs); sub import { my $callpack = caller; my ($pack, @imports) = @_; my ($sym, $ch); foreach (@imports) { if (($ch, $sym) = /^([\$\@\%\*\&])(.+)/) { if ($sym =~ /\W/) { # time for a more-detailed check-up if ($sym =~ /^\w+[[{].*[]}]$/) { require Carp; Carp::croak("Can't declare individual elements of hash or array"); } elsif (warnings::enabled() and length($sym) == 1 and $sym !~ tr/a-zA-Z//) { warnings::warn("No need to declare built-in vars"); } elsif (($^H &= strict::bits('vars'))) { require Carp; Carp::croak("'$_' is not a valid variable name under strict vars"); } } $sym = "${callpack}::$sym" unless $sym =~ /::/; *$sym = ( $ch eq "\$" ? \$$sym : $ch eq "\@" ? \@$sym : $ch eq "\%" ? \%$sym : $ch eq "\*" ? \*$sym : $ch eq "\&" ? \&$sym : do { require Carp; Carp::croak("'$_' is not a valid variable name"); }); } else { require Carp; Carp::croak("'$_' is not a valid variable name"); } } }; 1; __END__ FILE6ec48121/warnings.pm3#line 1 "/usr/share/perl/5.8/warnings.pm" # -*- buffer-read-only: t -*- # !!!!!!! DO NOT EDIT THIS FILE !!!!!!! # This file was created by warnings.pl # Any changes made here will be lost. # package warnings; our $VERSION = '1.05'; use Carp (); our %Offsets = ( # Warnings Categories added in Perl 5.008 'all' => 0, 'closure' => 2, 'deprecated' => 4, 'exiting' => 6, 'glob' => 8, 'io' => 10, 'closed' => 12, 'exec' => 14, 'layer' => 16, 'newline' => 18, 'pipe' => 20, 'unopened' => 22, 'misc' => 24, 'numeric' => 26, 'once' => 28, 'overflow' => 30, 'pack' => 32, 'portable' => 34, 'recursion' => 36, 'redefine' => 38, 'regexp' => 40, 'severe' => 42, 'debugging' => 44, 'inplace' => 46, 'internal' => 48, 'malloc' => 50, 'signal' => 52, 'substr' => 54, 'syntax' => 56, 'ambiguous' => 58, 'bareword' => 60, 'digit' => 62, 'parenthesis' => 64, 'precedence' => 66, 'printf' => 68, 'prototype' => 70, 'qw' => 72, 'reserved' => 74, 'semicolon' => 76, 'taint' => 78, 'threads' => 80, 'uninitialized' => 82, 'unpack' => 84, 'untie' => 86, 'utf8' => 88, 'void' => 90, 'y2k' => 92, ); our %Bits = ( 'all' => "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x15", # [0..46] 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00", # [29] 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00", # [30] 'closed' => "\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6] 'closure' => "\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1] 'debugging' => "\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00", # [22] 'deprecated' => "\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2] 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00", # [31] 'exec' => "\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7] 'exiting' => "\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3] 'glob' => "\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4] 'inplace' => "\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00", # [23] 'internal' => "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00", # [24] 'io' => "\x00\x54\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [5..11] 'layer' => "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8] 'malloc' => "\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00", # [25] 'misc' => "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00", # [12] 'newline' => "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9] 'numeric' => "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00", # [13] 'once' => "\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00", # [14] 'overflow' => "\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00", # [15] 'pack' => "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00", # [16] 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00", # [32] 'pipe' => "\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10] 'portable' => "\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00", # [17] 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00", # [33] 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00", # [34] 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00", # [35] 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00", # [36] 'recursion' => "\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00", # [18] 'redefine' => "\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00", # [19] 'regexp' => "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00", # [20] 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00", # [37] 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00", # [38] 'severe' => "\x00\x00\x00\x00\x00\x54\x05\x00\x00\x00\x00\x00", # [21..25] 'signal' => "\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00", # [26] 'substr' => "\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00", # [27] 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\x55\x55\x15\x00\x00", # [28..38] 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [39] 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00", # [40] 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00", # [41] 'unopened' => "\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11] 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00", # [42] 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00", # [43] 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", # [44] 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04", # [45] 'y2k' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10", # [46] ); our %DeadBits = ( 'all' => "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x2a", # [0..46] 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00", # [29] 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00", # [30] 'closed' => "\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6] 'closure' => "\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1] 'debugging' => "\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00", # [22] 'deprecated' => "\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2] 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00", # [31] 'exec' => "\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7] 'exiting' => "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3] 'glob' => "\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4] 'inplace' => "\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00", # [23] 'internal' => "\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00", # [24] 'io' => "\x00\xa8\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [5..11] 'layer' => "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8] 'malloc' => "\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00", # [25] 'misc' => "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00", # [12] 'newline' => "\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9] 'numeric' => "\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00", # [13] 'once' => "\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00", # [14] 'overflow' => "\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00", # [15] 'pack' => "\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00", # [16] 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00", # [32] 'pipe' => "\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10] 'portable' => "\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00", # [17] 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00", # [33] 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00", # [34] 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00", # [35] 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00", # [36] 'recursion' => "\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00", # [18] 'redefine' => "\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00", # [19] 'regexp' => "\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00", # [20] 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00", # [37] 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00", # [38] 'severe' => "\x00\x00\x00\x00\x00\xa8\x0a\x00\x00\x00\x00\x00", # [21..25] 'signal' => "\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00", # [26] 'substr' => "\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00", # [27] 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\x2a\x00\x00", # [28..38] 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [39] 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00", # [40] 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00", # [41] 'unopened' => "\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11] 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00", # [42] 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00", # [43] 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", # [44] 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08", # [45] 'y2k' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20", # [46] ); $NONE = "\0\0\0\0\0\0\0\0\0\0\0\0"; $LAST_BIT = 94 ; $BYTES = 12 ; $All = "" ; vec($All, $Offsets{'all'}, 2) = 3 ; sub Croaker { local $Carp::CarpInternal{'warnings'}; delete $Carp::CarpInternal{'warnings'}; Carp::croak(@_); } sub bits { # called from B::Deparse.pm push @_, 'all' unless @_; my $mask; my $catmask ; my $fatal = 0 ; my $no_fatal = 0 ; foreach my $word ( @_ ) { if ($word eq 'FATAL') { $fatal = 1; $no_fatal = 0; } elsif ($word eq 'NONFATAL') { $fatal = 0; $no_fatal = 1; } elsif ($catmask = $Bits{$word}) { $mask |= $catmask ; $mask |= $DeadBits{$word} if $fatal ; $mask &= ~($DeadBits{$word}|$All) if $no_fatal ; } else { Croaker("Unknown warnings category '$word'")} } return $mask ; } sub import { shift; my $catmask ; my $fatal = 0 ; my $no_fatal = 0 ; my $mask = ${^WARNING_BITS} ; if (vec($mask, $Offsets{'all'}, 1)) { $mask |= $Bits{'all'} ; $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1); } push @_, 'all' unless @_; foreach my $word ( @_ ) { if ($word eq 'FATAL') { $fatal = 1; $no_fatal = 0; } elsif ($word eq 'NONFATAL') { $fatal = 0; $no_fatal = 1; } elsif ($catmask = $Bits{$word}) { $mask |= $catmask ; $mask |= $DeadBits{$word} if $fatal ; $mask &= ~($DeadBits{$word}|$All) if $no_fatal ; } else { Croaker("Unknown warnings category '$word'")} } ${^WARNING_BITS} = $mask ; } sub unimport { shift; my $catmask ; my $mask = ${^WARNING_BITS} ; if (vec($mask, $Offsets{'all'}, 1)) { $mask |= $Bits{'all'} ; $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1); } push @_, 'all' unless @_; foreach my $word ( @_ ) { if ($word eq 'FATAL') { next; } elsif ($catmask = $Bits{$word}) { $mask &= ~($catmask | $DeadBits{$word} | $All); } else { Croaker("Unknown warnings category '$word'")} } ${^WARNING_BITS} = $mask ; } my %builtin_type; @builtin_type{qw(SCALAR ARRAY HASH CODE REF GLOB LVALUE Regexp)} = (); sub __chk { my $category ; my $offset ; my $isobj = 0 ; if (@_) { # check the category supplied. $category = shift ; if (my $type = ref $category) { Croaker("not an object") if exists $builtin_type{$type}; $category = $type; $isobj = 1 ; } $offset = $Offsets{$category}; Croaker("Unknown warnings category '$category'") unless defined $offset; } else { $category = (caller(1))[0] ; $offset = $Offsets{$category}; Croaker("package '$category' not registered for warnings") unless defined $offset ; } my $this_pkg = (caller(1))[0] ; my $i = 2 ; my $pkg ; if ($isobj) { while (do { { package DB; $pkg = (caller($i++))[0] } } ) { last unless @DB::args && $DB::args[0] =~ /^$category=/ ; } $i -= 2 ; } else { for ($i = 2 ; $pkg = (caller($i))[0] ; ++ $i) { last if $pkg ne $this_pkg ; } $i = 2 if !$pkg || $pkg eq $this_pkg ; } my $callers_bitmask = (caller($i))[9] ; return ($callers_bitmask, $offset, $i) ; } sub enabled { Croaker("Usage: warnings::enabled([category])") unless @_ == 1 || @_ == 0 ; my ($callers_bitmask, $offset, $i) = __chk(@_) ; return 0 unless defined $callers_bitmask ; return vec($callers_bitmask, $offset, 1) || vec($callers_bitmask, $Offsets{'all'}, 1) ; } sub warn { Croaker("Usage: warnings::warn([category,] 'message')") unless @_ == 2 || @_ == 1 ; my $message = pop ; my ($callers_bitmask, $offset, $i) = __chk(@_) ; Carp::croak($message) if vec($callers_bitmask, $offset+1, 1) || vec($callers_bitmask, $Offsets{'all'}+1, 1) ; Carp::carp($message) ; } sub warnif { Croaker("Usage: warnings::warnif([category,] 'message')") unless @_ == 2 || @_ == 1 ; my $message = pop ; my ($callers_bitmask, $offset, $i) = __chk(@_) ; return unless defined $callers_bitmask && (vec($callers_bitmask, $offset, 1) || vec($callers_bitmask, $Offsets{'all'}, 1)) ; Carp::croak($message) if vec($callers_bitmask, $offset+1, 1) || vec($callers_bitmask, $Offsets{'all'}+1, 1) ; Carp::carp($message) ; } 1; # ex: set ro: FILEaaec672e/warnings/register.pm#line 1 "/usr/share/perl/5.8/warnings/register.pm" package warnings::register; our $VERSION = '1.01'; require warnings; sub mkMask { my ($bit) = @_; my $mask = ""; vec($mask, $bit, 1) = 1; return $mask; } sub import { shift; my $package = (caller(0))[0]; if (! defined $warnings::Bits{$package}) { $warnings::Bits{$package} = mkMask($warnings::LAST_BIT); vec($warnings::Bits{'all'}, $warnings::LAST_BIT, 1) = 1; $warnings::Offsets{$package} = $warnings::LAST_BIT ++; foreach my $k (keys %warnings::Bits) { vec($warnings::Bits{$k}, $warnings::LAST_BIT, 1) = 0; } $warnings::DeadBits{$package} = mkMask($warnings::LAST_BIT); vec($warnings::DeadBits{'all'}, $warnings::LAST_BIT++, 1) = 1; } } 1; FILE0ea91944/auto/Cwd/Cwd.so'HELF 4#4 (P!P!P!P1P1d!d1d1Qtd%," $'  !#&%)(*  + #h@ #%(|CEqX*X{+oW8w + gnFZ1F*hE  @SH"D21282 l  d  ?`  ? `h  __gmon_start___init_fini__cxa_finalize_Jv_RegisterClassesboot_CwdPerl_Gthr_key_ptrpthread_getspecificPerl_Tstack_sp_ptrPerl_Tmarkstack_ptr_ptrPerl_Tstack_base_ptrPerl_croakPerl_sv_2pv_flagsXS_Cwd_fastcwdPerl_newXSXS_Cwd_getcwdXS_Cwd_abs_pathPerl_Isv_yes_ptrPerl_formPerl_get_svstrlenmemcpyPerl_Top_ptrPerl_sv_newmortal__errno_locationPerl_sv_setpvnPerl_Itainting_ptrPerl_sv_taintPerl_Tcurpad_ptrstrchrmemmovestrrchrPerl_Isv_undef_ptrPerl_sv_setsv_flags__lxstat64readlinkPerl_mg_setPerl_getcwd_svlibc.so.6__stack_chk_fail_edata__bss_start_endGLIBC_2.1.3GLIBC_2.4GLIBC_2.2GLIBC_2.0si Iii Uii _ii i22,20242*82+<2&@2!P2T2X2\2`2d2h2l2 p2 t2 x2 |2 2222222222222222222 2!2"US[(t~X[ hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhUS{&u8t$ ҋuƃ[]Í&US.&tt $҃[]Ë$ÐUWVS%\$ $$8$$$: M$$$ $E$$uU@ 2$b$H$EMuЍ)$!$$UDEEUuF9U8NuEPM荳igu܉M$$qUMu܉|$T$ UL$Mt$u$T$L$ t$T$t&$0$$4$ $D$ "D$t$$Ev$l$|$ T$rT$$$$z|$ T$T$$Z$^$D|$ T$T$$$$($$}8$$$$$$$$$#UM\[^_]Ðt&$$vMD$ "D$L$$t&$P$6u荋E]u}]É'UWVS@$eE1$$0$$$,:$$$)1~)$q$W$<$H$.$v@ $$$\dtG 0xh>/ƅ/Vƅ\~\! t€҃$+\k$Q\t$ T$d$T$qdB%H B$$$]8<$$$V0d@ @d4$$$8t($$zdT$$$l$R$ 0Ee3Fļ@[^_]Ð$0$$^0$$$>@ d\$D$\pMpp! t€ҋ\p)pXX-ptt\tDžlTfXD$/$vlj|}+XXTt$T$$Ƅ5|)tt"tXD$GD$$\p/t/pp\/pƄ9u:ts9::pv5p\D$/$OP@\)‰ptppp8/t&x$$$$ $$$dD$ t$T$$T\=ptD$\$D$p\%=l\D$`D$$Ƅ/pv5p\D$/$P@\)‰p|tI5/tF=Ƅ5/ƄX`=R`XlFttbXtr$<$"dT$$G$$D$ D$|$$ Up<$$dT$$XYDžpt1(\,#ƅDžp[x$x:|hW$$T$$x(&UWVS|i $$$:$~$d$ M$T$:$$6$$d@  $ $$:0$$$@ 4$$t$$@$$$F @8E|7$q$W$8t"$N$4t$$X$,$$8 [^_]Ít&$$$>$$t$$5:t&UWVS|i $$$:0$|$b$ M$R$8$U)$$$M@ $$$3$$t$$O$$$F @8E|7$$f$8t"$]$Ct$$g$;$!$8 [^_]Ív$$$>0$$$@ 4t&$$t$$$$T$$MUS>+UVS P@tЋFu[^]US[DY[XS_VERSION%s::%s3.30bootstrap parameter$::Cwd.cCwd::fastcwdCwd::getcwdCwd::abs_path..Usage: Cwd::fastcwd()%s object version %s does not match %s%s%s%s %_Usage: Cwd::abs_path(pathsv=Nullsv) l d oH s D2d$@ooo|od1   " 2 B R b r   " 2 B R b r 2\1.shstrtab.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bssL oH HHs%o||X2oPA $$@J dd Sl l 0N Y _d d e2 mL!L!wP1P!~X1X!`1`!d1d!,2,"D2D"2"2""FILE'12508709/auto/Compress/Raw/Zlib/Zlib.so^@ELF34XZ4 (DUDUDUDeDeX\VffQtdYzE!#~4iMGm)d5;%_SN.6pR>ZUa ( 7`8JXV{g:,-1<e$otv9r[A\=+x*}0?Wfn] DPkHsL'QIFlT@Khqc2& ^w 3 |C/juyB"bOa@  @ $ P D((@0@f!B# B" )   0 $"! @T,@CDFGKLOPQUWXY[\]_`acdfhijkmnstuvy|}}ql1=vcJJjJwq-6g$U-u]/}"_@fJRW*zT{oP졩Uuח%_A=s(s)#>az)%ǿ+) *LA/P8!CEjiC;ep،Qʉqşv- z"B l,=q&BLQ-*qX -2e9d+U^|u)ln<Ɵ9t#k(¯1Dƥ[J 4QOcdz(7DeªHؼP 0%qD6-P'Ln9@+9e[Xs,"tBȇhF;]}f18_qcEo;(X_jTLa v D&  V %  f4 G X x W I  d  |F  9  & @ |    ^a 4 7nq PR " E t^ ;Ps%  %@ 9`4 0  p= | Pr q 0  Ђ^ 0= P U v* [ l( | 0^ .p^ t9 I}  P_E b `L  I/ e(LPSN  F^ *P! kpWN pa^ P D  `J 5_ :  g^  N R ;i}T `e \q^ '  u/  V^ Pp  \ /Pu^ - i`, x^ &{Y s^ &^ Tp_ _`X @  Bi 0AJ ^ N  # PP H5 Ni{ d P 0k^ EP^ @p^ V0^ H S^  < h  qEJ G  ^ PW 4V _ F^ а& z rQ  :( V   e @^ ]^ >@  P '  L^ `I^ b U PZ^ 6`6 < \ УU 0w j a|^ ` 0 pd^ n^ @] ^ p^ Н^ u __gmon_start___fini__cxa_finalize_Jv_RegisterClassesboot_Compress__Raw__ZlibPerl_Gthr_key_ptrpthread_getspecificPerl_Tstack_sp_ptrPerl_Tmarkstack_ptr_ptrPerl_Tstack_base_ptrPerl_croakXS_Compress__Raw__Zlib_constantPerl_newXSXS_Compress__Raw__Zlib_zlib_versionXS_Compress__Raw__Zlib_ZLIB_VERNUMXS_Compress__Raw__Zlib_adler32XS_Compress__Raw__Zlib_crc32XS_Compress__Raw__Zlib_crc32_combineXS_Compress__Raw__Zlib_adler32_combineXS_Compress__Raw__Zlib__deflateInitXS_Compress__Raw__Zlib__inflateInitXS_Compress__Raw__Zlib__deflateStream_DispStreamXS_Compress__Raw__Zlib__deflateStream_deflateResetXS_Compress__Raw__Zlib__deflateStream_deflateXS_Compress__Raw__Zlib__deflateStream_DESTROYXS_Compress__Raw__Zlib__deflateStream_flushXS_Compress__Raw__Zlib__deflateStream__deflateParamsXS_Compress__Raw__Zlib__deflateStream_get_LevelXS_Compress__Raw__Zlib__deflateStream_get_StrategyXS_Compress__Raw__Zlib__deflateStream_get_BufsizeXS_Compress__Raw__Zlib__deflateStream_statusXS_Compress__Raw__Zlib__deflateStream_crc32XS_Compress__Raw__Zlib__deflateStream_dict_adlerXS_Compress__Raw__Zlib__deflateStream_adler32XS_Compress__Raw__Zlib__deflateStream_compressedBytesXS_Compress__Raw__Zlib__deflateStream_uncompressedBytesXS_Compress__Raw__Zlib__deflateStream_total_inXS_Compress__Raw__Zlib__deflateStream_total_outXS_Compress__Raw__Zlib__deflateStream_msgXS_Compress__Raw__Zlib__deflateStream_deflateTuneXS_Compress__Raw__Zlib__inflateStream_DispStreamXS_Compress__Raw__Zlib__inflateStream_inflateResetXS_Compress__Raw__Zlib__inflateStream_inflateXS_Compress__Raw__Zlib__inflateStream_inflateCountXS_Compress__Raw__Zlib__inflateStream_compressedBytesXS_Compress__Raw__Zlib__inflateStream_uncompressedBytesXS_Compress__Raw__Zlib__inflateStream_inflateSyncXS_Compress__Raw__Zlib__inflateStream_DESTROYXS_Compress__Raw__Zlib__inflateStream_statusXS_Compress__Raw__Zlib__inflateStream_crc32XS_Compress__Raw__Zlib__inflateStream_dict_adlerXS_Compress__Raw__Zlib__inflateStream_total_inXS_Compress__Raw__Zlib__inflateStream_adler32XS_Compress__Raw__Zlib__inflateStream_total_outXS_Compress__Raw__Zlib__inflateStream_msgXS_Compress__Raw__Zlib__inflateStream_get_BufsizeXS_Compress__Raw__Zlib__inflateStream_set_AppendXS_Compress__Raw__Zlib__inflateScanStream_DESTROYXS_Compress__Raw__Zlib__inflateScanStream_DispStreamXS_Compress__Raw__Zlib__inflateScanStream_inflateResetXS_Compress__Raw__Zlib__inflateScanStream_scanXS_Compress__Raw__Zlib__inflateScanStream_getEndOffsetXS_Compress__Raw__Zlib__inflateScanStream_inflateCountXS_Compress__Raw__Zlib__inflateScanStream_compressedBytesXS_Compress__Raw__Zlib__inflateScanStream_uncompressedBytesXS_Compress__Raw__Zlib__inflateScanStream_getLastBlockOffsetXS_Compress__Raw__Zlib__inflateScanStream_getLastBufferOffsetXS_Compress__Raw__Zlib__inflateScanStream_resetLastBlockByteXS_Compress__Raw__Zlib__inflateScanStream__createDeflateStreamXS_Compress__Raw__Zlib__inflateScanStream_statusXS_Compress__Raw__Zlib__inflateScanStream_crc32XS_Compress__Raw__Zlib__inflateScanStream_adler32zlibVersionPerl_get_svPerl_sv_setivPerl_Isv_yes_ptrPerl_sv_2pv_flagsPerl_formPerl_croak_nocontextPerl_Top_ptrPerl_sv_newmortalPerl_sv_derived_fromPerl_sv_setuvPerl_mg_setPerl_Tcurpad_ptrPerl_sv_2ivPerl_sv_setpvPerl_Ireentrant_buffer_ptr__errno_locationstrerror_rPerl_sv_setnvPerl_safesysmallocmemsetdeflateInit2_deflateSetDictionaryPerl_safesysfreePerl_Tstack_max_ptrPerl_sv_setref_pvPerl_sv_2uvPerl_dowantarrayPerl_newSVivPerl_sv_2mortalPerl_stack_growdeflatePrimePerl_sv_2pvbytePerl_Tcurcop_ptrPerl_sv_utf8_downgradePerl_newSVpvPerl_mg_getPerl_sv_2boolmemmovePerl_sv_pvbyten_forcememcpyprintfputcharputsinflateEndPerl_sv_freePerl_Isv_no_ptrPerl_sv_backoffPerl_Icompiling_ptrPerl_sv_upgradePerl_sv_growinflateSetDictionaryPerl_sv_utf8_upgrade_flagsdeflateEndinflateInit2_Perl_newSVsvPerl_newSVpvf_nocontextPerl_Isv_undef_ptrPerl_sv_setpvnget_crc_tableinflateBackInit_zcalloczcfreeinflateBackEndinflateBackinflate_tableinflate_fastinflatePrimeinflateInit_inflateGetHeaderinflateSyncPointinflateCopyuncompresscompressBoundcompress2deflateInit_deflateSetHeaderdeflateCopyz_errmsg_tr_stored_block_tr_align_dist_code_length_code_tr_flush_blockdeflateBound_tr_initdeflate_copyrightinflate_copyright_tr_tallyzlibCompileFlagszErrorlibc.so.6_edata__bss_start_endGLIBC_2.1.3GLIBC_2.01si Sii _heteeeeeeeeeeeeeeeeeffXi\i`iditixiif\ffdfnfvfcf f fwfkfffggg ggggg g`$g}(g,g0gQ4g8gHTi?US[:t5X[ hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@US4u8tx$q |ҋ|uƃ[]Í&US.÷3tt t t$҃[]Ë$ÐUWVSu3L$$$8$$$ M܉$j$$$EG$m$u܃U@ $ $0$hEM܋U؍)q$$$'MDEEUUB0M8rM̋u̹tpEM荳M$7$]UM|$t$T$ UL$M̉$T$UL$ T$؊T$$$t$ T$T$$$$,t$ T$T$$$$ t$ T$T$$$$t$ T$ T$$R$v$Xt$ T$XT$$$@$ft$ T$T$$$ $0Lt$ T$T$$$$t$ T$T$$z$$xt$ T$0T$$D$h$t$ T$lT$$$2$Xt$ T$T$$$$"t$ T$T$$$$t$ T$ T$$l$$pt$ T$`T$$6$Z$|t$ T$T$$$$$Jt$ T$T$$581$$T$D$$$$t$D$$$$$u0$a$$_$A$g$o$!$G$MEL[^_]$$$O4$$D$ "D$t$$E$$UD$ "D$T$$$`R$xU荋kMЉL$|$ T$$$$@D$t$$\Et@}\$$UMԉL$ MЉT$L$$ $$D$t$$EEԉExUurE$\&UWVSL!$$:$B0$$$2:$$$+)~$$$v@ $n$$|E$J$p$U4$$C|T$t$$$$$G@ P$$$@ p$$$8$i$Ut$T$$E@ @t%$7$]UT$$UE8$ $/$7$$$GUE[^_]Ð$$$0$$$v@ Ef$h$$0$A$gt$$$$@@T$$$$xT$$vfUWVSu$$$0$$$:$m$$)~$8$^$@ $$4$E$$$HU4$$|T$t$$$$$@ P$X$~$@ p$)$O$8$ $/Ut$T$$E@ @t%$$UT$$>UE8$$$$$$UE[^_]Ð$X$~$V0$8$^$@ Ef$$.$f0$$t$$;$$T$$>$$xT$$fUWVS$T$z$0$4$Z$r:$ $3$k)~$$$@ $$$E$$$U4$]$|T$t$$]$)$O$@ P$$$V@ $$$$8$$Ut$T$$)E@ @t%$t$UT$$UE8$F$l$t$&$L$UE[^_]$$$0$$$@ E$$$0$$t$$$Z$ܖT$$$2$XxT$$fUWVS,õ$$$"0$$$:$$$ )$x$$V@ $N$t$\E$*$P$U4$$#|T$t$$ $$$'@ `$$$P 1$)X$~$8$8$^Ut$T$$E@ @t%$$,UT$$mUE8$$$$$$UE[^_]$$$0$h$$F@ E f$8$^$0$$7t$$k|$$$T$$l$$xT$$DUWVSE$$$0$d$$:$=$c$)~$$.$@ $$$E$$$U4$$|T$t$$$Y$$@ P$($N$@ pt$$$W8$$Ut$T$$\E@ @t%$$UT$$UE8$y$$$Y$$UE[^_]Ð$($N$&0$$.$@ Ef$$$60$$t$$ $$lT$$$b$xT$$fUWVS\$$$J$R0$$*$B:$$$;)~$$$@ $~$$E$Z$$U4$-$S|T$t$$-$$$W@ P$$$&@ pp$$$8$y$Ut$T$$E@ @t%$G$mUT$$UE8$$?$G$$$WUE[^_]Ð$$$0$$$@ Ef$x$$0$Q$wt$$$*$PT$$$$(xT$$fUWVSÅ $$$0$$$:$}$$)~$H$n$&@ $$D$,E$$ $XU4$$|T$t$$$$$@ P$h$$@ pl$9$_$8$$?Ut$T$$E@ @t%$$ UT$$NUE8$$$$$$UE[^_]Ð$h$$f0$H$n$&@ Ef$$>$v0$$t$$K$$T$$N$$xT$$&fUWVS% $d$$0$D$j$:$$C${)~$$$@ $$$E$$$U4$m$|T$t$$m$9$_$@ P$$.$f@ $$$48$$Ut$T$$9E@ @t%$$UT$$UE8$V$|$$6$\$UE[^_]$$,$0$$ $@ E$$$0$$t$$$j$4T$$$B$hxT$$fUWVS<$$*$20$$ $":$$$)~$$$f@ $^$$lE$:$`$U4$ $3T$t$$ $$$7@ P$$$@ pD$y$$8$Y$Ut$T$$E@ @t%$'$MUT$$UE8$$$'$$$7UE[^_]Ð$$$0$$$f@ Ef$X$~$0$1$Wt$$$ $0tT$$$$ԘT$$ffUWVSe$$$0$$$:$]$$)~$($N$@ $$$$ E$$$8U4$$T$t$$$y$$@ P$H$n$@ p $$?$w8$$Ut$T$$|E@ @t%$$UT$$.UE8$$$$y$$UE[^_]Ð$H$n$F0$($N$@ Ef$$$V0$$t$$+$$T$$.$$ԘT$$fUWVS|$D$j$r0$$$J$b:$$#$[)~$$$@ $$$E$z$$U4$M$sT$t$$M$$?$w@ P$$$F@ p$$$8$$Ut$T$$E@ @t%$g$UT$$UE8$9$_$g$$?$wUE[^_]Ð$$$0$$$@ Ef$$$0$q$t$$$J$p@T$$$"$HԘT$$fUWVSå$$ $0$$$:$$$)~$h$$F@ $>$d$LE$$@$xU4$$T$t$$$$$@ P$$$@ p$Y$$8$9$_Ut$T$$E@ @t%$$-UT$$nUE8$$$$$$UE[^_]Ð$$$0$h$$F@ Ef$8$^$0$$7t$$k$$xT$$n$$ԘT$$FfUWVSE$$$0$d$$:$=$c$蛿)~$$.$@ $$$E$$$U4$$T$t$$$Y$$跾@ P$($N$膾@ pL$$$W8$$Ut$T$$\E@ @t%$$ͿUT$$UE8$y$蟿$觾$Y$$跽UE[^_]Ð$($N$&0$$.$@ Ef$$$60$$׾t$$ $$谾T$$$b$舾ԘT$$fUWVS\$$$J$R0$$*$B:$$$;)~$$ν$膻@ $~$褽$茾E$Z$耽$踻U4$-$ST$t$$-$$$W@ P$ȿ$$&@ p$虿$迼$8$y$蟼Ut$T$$E@ @t%$G$mUT$$讽UE8$$?$G$$$WUE[^_]Ð$Ⱦ$$Ƽ0$訾$λ$膹@ Ef$x$螻$ֹ0$Q$wt$$諻$*$PT$$讽$$(ԘT$$膽fUWVSÅ$Ľ$$0$褽$ʺ$:$}$裺$۸)~$H$n$&@ $$D$,E$$ $XU4$ͼ$T$t$$ͼ$虼$迹$@ P$h$莹$Ʒ@ pP$9$_$藷8$$?Ut$T$$蜸E@ @t%$$ UT$$NUE8$蹻$߸$$虻$迸$UE[^_]Ð$h$莸$f0$H$n$&@ Ef$$>$v0$$t$$K$ʺ$ T$$N$袺$ȷԘT$$&fUWVS蜻%$d$芷$蒶0$D$j$肸:$$C${)~$$$ƴ@ $边$$̷E$蚹$$U4$m$蓶T$t$$m$9$_$藴@ P$$.$f@ pt$ٸ$$78$蹸$ߵUt$T$$$d$LE$$@$xU4$$LT$t$$$蹫$ߨ$@ P$舫$讨$@ p$Y$$跦8$9$_Ut$T$$輧E@ @t%$$-UT$$nUE8$٪$$$蹪$ߧ$UE[^_]Ð$航$讧$膨0$h$莧$F@ Ef$8$^$薥0$$7t$$k$$T$$n$©$pT$$FfUWVS輪E$脩$誦$貥0$d$芦$袧:$=$c$蛤)~$$.$@ $ި$$E$躨$$U4$荨$賥LT$t$$荨$Y$$跣@ P$($N$膣@ pt$$$W8$٧$Ut$T$$\E@ @t%$觧$ͤUT$$UE8$y$蟤$解$Y$$跢UE[^_]Ð$($N$&0$$.$@ Ef$ئ$$60$豦$ףt$$ $芦$谣ܛT$$$b$舣pT$$fUWVS\$$$J$R0$$*$B:$ݥ$$;)~$訥$΢$膠@ $~$褢$茣E$Z$耢$踠U4$-$SLT$t$$-$$$W@ P$Ȥ$$&@ pp$虤$迡$8$y$蟡Ut$T$$E@ @t%$G$mUT$$订UE8$$?$G$$$WUE[^_]Ð$ȣ$$ơ0$訣$Π$膞@ Ef$x$螠$֞0$Q$wt$$諠$*$PT$$订$$(pT$$膢fUWVSÅ$Ģ$$0$褢$ʟ$:$}$裟$۝)~$H$n$&@ $$D$,E$$ $XU4$͡$LT$t$$͡$虡$连$@ P$h$莞$Ɯ@ p$9$_$藜8$$?Ut$T$$蜝E@ @t%$$ UT$$NUE8$蹠$ߝ$$虠$违$UE[^_]Ð$h$莝$f0$H$n$&@ Ef$$>$v0$$t$$K$ʟ$\T$$N$袟$ȜpT$$&fUWVS蜠%$d$芜$蒛0$D$j$肝:$$C${)~$$$ƙ@ $辞$$̜E$蚞$$U4$m$蓛LT$t$$m$9$_$藙@ P$$.$f@ pL$ٝ$$78$蹝$ߚUt$T$$$d$LE$$@$xU4$$LT$t$$$蹐$ߍ$@ P$舐$讍$@ ph$Y$$跋8$9$_Ut$T$$,E@ @t%$$-UT$$nUE8$ُ$$$蹏$ߌ$UE[^_]Ð$舏$讌$膍0$h$莌$F@ Ef$8$^$薊0$$7t$$k$$xT$$n$Ž$pT$$FfUWVS輏E$脎$誋$貊0$d$芋$袌:$=$c$蛉)~$$.$@ $ލ$$E$躍$$U4$荍$賊LT$t$$荍$Y$$跈@ P$($N$膈@ pX$$$W8$ٌ$Ut$T$$̇E@ @t%$觌$͉UT$$UE8$y$蟉$览$Y$$跇UE[^_]Ð$($N$&0$$.$@ Ef$؋$$60$豋$׈t$$ $芋$谈T$$$b$興pT$$fUWVS\$$$J$R0$$*$B:$݊$$;)a$詊$χ$臅@ $$襇$荈$<X$~$超$E5$[D$0t$$跆F @t"$$+t$$oE4$݉$$ $轉$$8>[^_]$蓉$蹆$葇0$s$虆$Q@ 4$H$nT$$̈&UWVS<Ž$$*$20$$ $":$轈$$)~$興$讅$f@ $^$脅$lE$:$`$蘃U4$ $3T$t$$ $ه$$7@ P$訇$΄$@ p$$y$蟄Ut$T$$謃$P$v$讂0E@ @t%$'$MUT$$莅UE0$$$'$ن$$7UE[^_]Ð$訆$΃$覄0$舆$讃$f@ Ef$X$~$趁0$1$Wt$$苃$ $0T$$莅$$ԘT$$ffUWVS܆e$褅$ʂ$ҁ0$脅$誂$ƒ:$]$胂$軀)~$($N$@ $$$$ E$ڄ$$8U4$譄$ӁLT$t$$譄$y$蟁$@ P$H$n$@ p$$$?Ut$T$$L$$$N0E@ @t%$ǃ$UT$$.UE0$虃$迀$$y$蟀$~UE[^_]Ð$H$n$F0$($N$~@ Ef$$$V~0$т$t$$+$誂$LT$$.$肂$pT$$fUWVS|$D$j$r~0$$$J$b:$$#$[})o$Ɂ$~$|@ $蟁$~$E~<$p$~Ut$T$$}$G$m~$|0E@ @t%$$D~UT$$E7$$~$!}$Ӏ$}$1|8>[^_]Ð$言$}$~0$舀$}$f{@ E$Z$}T$$v'U]IҴuƉ}$ $2}t)]u}]$$|$Q~4$$|$+~tz|$0T$$ |댍t&UWVS茀$T$z|${0$4$Z|$r}:$ $3|$kz)$~${$3z}48$~${|T$t$$~L$x~${$yU@ $D~$j{$yU0$~$@{t$$t{@P$E}${$Ny0$}$z${$}$z$y4$}$zt$E$\${MEt E$E$I}$oz$x4$&}$LzUt$T$$Yy$|$#z$[xH$|$y$y$|$y$x8>[^_]Ð$|$y$wU@ \$T|$zyT$${$,|$RyxT$${U]}âu$A{D$D$Ɖ$w]u]Í&UuƋE]|J}NDFPFtFpFTu1tD$D$$zF]u}]D$D$$!xF뮐&UWVS,|õ\$z$x$"w$Ez$w$y2$z$w$vE) $<kz$w$uD@ $=z$cw$ut$z$?wt$$swE$y$w$RuD@ $y$v$$uD@ E$y$v$tD @ U$ly$v$tD @ E$@y$fv$tD@ $y$8v$ptD@ E$x$ v$DtD@ $x$u$tD@ E$x$u$sD@ 6$^x$u$sD@ E$2x$Xu$sD@ $x$*u$bsD@ E$w$t$6s4$w$t|T$t$$w$w$t$r@ $Pw$vt$rp 'EEЉGXUԉW\E؉G`U܉WdEW GhUċU܉D$ED$8T$UԉD$E؉T$UĉD$ EЉ$D$uEu0D$F|D$Eĉ$vEG_t$$]Vƒ C|$$`|$$`&UWVSbe,$a$^$]8$a$^$_2$]a$^$\)G$4a$D^$|\u$E`$^$[@ $`$]$^E܋E؍Ƌ@ J% = @EEԃ$c`$]$[U@$-`$S]$[U@ $_$ ]$X[UP pf$_$\$]0$_$\$Z@ EfD$D$$h\‹E$D$EԉD$P\$B_$h\$Z8$"_$H\U܉t$T$$[E@ @t%$^$\U܉T$$W]U܋E8$^$[$Z$^$[$ZUE,[^_]$r^$[UT$t$$[E$A^$g[$O[@tZF$^$9[$qYU4$]$[t$$Yg$]$ZD$t$$S\tX$\$]$Z T$$]UWVS|^,$D]$jZ$rY8$$]$JZ$b[2$\$#Z$[X)G$4\$Y$Xu$E\$Y$rW@ $j\$Y$xZE܋E؍˅3Ƌ@ J% = @EEԃ$\$)Y$aWU@$[$X$+WU@ $[$X$VUP pf$h[$X$fY0$H[$nX$&V@ EfD$D$$Z‹E$D$EԉD$Z$Z$X$@V8$Z$WU܉t$T$$EWE@ @t%$Z$WU܉T$$XU܋E8$bZ$W$V$BZ$hW$UUE,[^_]$Z$8WUT$t$$WE$Y$W$V@tZF$Y$V$UU4$Y$Vt$$4Ug$aY$VD$t$$Wtȡ$MX$!Y$GVT$$XUWVSZå\$X$ V$U$EX$U$V2$X$U$S)U}E $4VX$|U$Su܋0$E*X$PU$SE܋0$X$+U|T$t$$Xd $W$T$/SE܋@ $W$T$RE܋0$uW$Tt$$T}{E1E؋@ % =ZU؋@EG U؋@EGG GlE;LJLJG8y@t&}w)G|WGUD$$DS}E~ G @}}}GlW+)Ѕ҉GlGt))։0$V$*S$bQE܃}x $U$R$*Q}]$U$R$QU܋ ,$sU$R$PU܋ @ $@U$fR$PU܋ @ $ U$3R$kPU܋ @ $T$R$8PU܋ 4$T$Qt$${TCfO+GW| $D$T$SG&O+GW| $D$T$H$vFp ?F`ND$-=$J$GT$$TJ$J$GxT$$,J&UWVSK%$dJ$G$F0$DJ$jG$H:$J$CG${E)$I$ G$CEU4$I$FT$t$$I|$I$F$D@ $SI$yF$D0$,I$RFt$$FƍF $9D$H$F$QDu0$H$E$F$H$E$DU4$H$EW$$\$t$FEt !E$FH$lE$CU4$ H$FEUt$T$$SD$G$E$UCUH$G$D$C$G$D$CUE[^_]f$xG$D$Bp ?F`ND$=$0G$VDآT$$F$G$.DԘT$$F&UWVSGÀ{҉E~(1EUD$E$D9u[^_]ÍvUWVSG1{ D$$jDt|$$TD$ BF D$8$+DF,D$S$DF0D$n$DF4D$$CF$D$$CF D$ӆ$CF t$CF $ \AFD$$wCFt$bCFq$ AFD$ $4CFD$%$CFD$?$ CF D$Y$BF)U}Ee$~B$?$=U4$]B$?|T$t$$]B)$)B$O?$=@ $A$?$V=0$A$>t$$+?ǃ}~4$A$>$=UD@1҉$jA$>$=$JA$p>$<UE[^_]$A$=>$u<x 9$@$ >$D$X@$~=$;UD$(@$N=T$$?$@$&=xT$$?UWVS@Åt$?$<$;$E?$<$=2$z?$<$:)U}Ee$~:?$`<$:U4$ ?$3$;$7:@ $>$;$:0$>$;t$$;ǃ}~4$W>$};$9UD@1҉$>$@;$H:$=$ ;$X9UE[^_]$=$:$%9x 9$=$:$8UD@% =tX$`=$:$8Ut$9=$_:D$t$$:$=$.:$f8UD$<$9`T$$\<$<$9ԘT$$4[^_]$c1$.$,}P 2&$1$>.$v,D@ $0$.$H,D@ $0$-$,D@EEUt&$x0$-$&/]$U0${-$+D@ Eu\E$t&0$5-$m+t$/$-t$$/E80E$/$,dT$$7/$/$,ԘT$$/t&'UWVS|0d,$D/$j,$r+0$$/$J,$b-:$.$#,$[*)u$<.$+$*}<8$.$+$)E0$s.$+T$t$$s.$?.$e+$)E@ w$ .$2+$j)E0$-$ +t$$=+ƍE@ q% =/UF U@FFFF $O*E~FPUxt*Bv % =p|$t$$0,EBUB @$-$**$b(u0$,$*$*E]$,$)$(E0$,$)t$E؉$\$*Et E6$\,$)$'E0$7,$])|$t$$m($,$7)$o'EH$+$ )$($+$($#'UE,[^_]$+$($&Ep $b+$(UD$T$$($0+$V($>(@ttUB^&$*$(UT$$_)$*$'UD$T$$G(b$*$'UD$T$$%)W$)$S*$y'T$$)$+*$Q'ԘT$$)t&'UWVS+ã^$U)$'W t+8W Rƒ ~uLW t%$Y)$&|$$)WHW[^_]Ív@멐t&$)$.&|$$#W!$($%$%$E($%$S%9EW$($%D$|$$$&$S($y%|$$=#Wƒ &ED$$/'ED$$'ED$ $'UWVS(Å\l$'$$$#$E'$$$%2$z'$$$")U}E $46'$\$$"u܋0$E '$0$$h"U܋$E&$$$<"E܋0$&$#T$t$$& $&$#$!E܋@ $R&$x#$!E܋0$)&$O#t$$#}GDEEES@ K% =M؋@EG M؋PWEEԋ@  Eu Uԋ@GMԋBEEEW GlUt&O&UD$$!z…P$UȉEЄɉGP  ؃ E$$$!$E܃}x n$i$$!$M܋ 4=$8$$^!$U܋ @ $$$+!$cM܋ @ {$#$ $0U܋ @ H$#$ $M܋ 4$v#$ t$$@#T&ft&=4+t&P$U1҉E Mԋp$u"$Uԉt$T$$!UԋMMB% =qEGEEGEjwH{G,[^_]Í&$H$n$D@ E$$=$%E$$$Ot$$t$$'E7$$$t $$t$$E$U${$t$1$Wt$$E$$-$e0$$t$$:t$$T$$=$$pT$$UWVSI,$T$z$0$4$Z$r:$ $3$k)$<$$/D@ $$$t$$t$$E$Z$$D@ 4$,$R$D@ E$$&$^D @ $$$0D @ E$$$D@ $x$$ D@ E$L$r$ 4$)$OLT$t$$)$$$S @ $$$" p EtEFXEtUVhEtEFDFVFFhFFD$FXD$F $cEU1uFFU$.$T$ 0$$4$$$$L 4$$ t$E$\$EU܅t EbE$$ $ 4$d$ U܉t$T$$ $;$a $ H$$7 $? $$ $O 8>,[^_]$$ $% D@ E<$$ $ t$r$ t$$ E$H$n $ t $$$J t$$~ ETf$$ $V t$$ t$$. Ef$$ $ 0$$ t$$ $X$~ T$$ $0$V pT$$ UWVS,õB\$ $ $" $E $ $ 2$ $ $ )U}E}$4f $ $u0$E: $` $E8$ $; LT$|$$ $ $ $?E@ Q$ $ $ E8$ $ |$$ }E2NDMFE=E@ &u M@EJM@% =MVMx+}~U~tFVFFFUFUN MUt&UȋMT$ $EԋF}U؉VPU+EFpЉFp}ԅE]$U ${$}8$2 $X$@ $ $8$pE8$ $|$E؉$\$ MԍEt E脊E$ $$E8$ $U|$T$$$[ $$EH$/ $U$]$ $5$mME\[^_]Í&UԅEUMЋH$M $UMT$L$$U}̋B% =ẺFEЉFǍE$] $$E}p E$ $D$|U@ V$$$IM@ Ee$$MD$L$$4 FPU+EFpЉFpMA%H A+VPA @]E$4$ZUD$T$$ $$($@$$UD$T$$g{$$$$U<$l$|$$E$B$hUT$$$$>pT$$$$`T$$tUWVSu;L$$$0$$$:$m$$)$<1$W$}8$E$+$cU$E$$7E0$$LT$t$$$$$E@ $M$s$E0$$$Jt$$~NjOD EȉME@ % =UO uPWjAE̍ E@ u M@uBEF% =XMWu@)ȉEԀUGtGVGGGUGUO EMU&t&uD$4$EGWuЋUu܋p$$Mt$L$$UuuЋB% = EЉGE܉GEEc$k$$Ex 8WGMM+EGpȉGpu@Gt)ЉGtE؅GPu%UB%H B+OHB @$$$8u0$$$E]$$$E0$l$t$E\$$u؅t E $2$X$E0$ $3|$t$$C$$ $EEH$$$$$$UML[^_]Ív$h$MD$L$$$6$\MD$L$$>$$(UD$T$$x$$$@$$UD$T$$5|$GW OD$T$ $GGT$L$$;Gy$%$K$3@t5MA$$ML$$[$$UD$T$$Yt[uF$$pT$$$f$T$$4$\&UWVSL3 $$:$B0$$$2:$$$+)v$w$$U@ d$^$$@ $-$S$0$$,t$$`ƍF $~Ht"$$|$$4$r$$$$$$UE [^_]$S$y$p @$"$HȨT$$$$ T$$~v'UWVSu1$$$0$$$:$m$$)$5$[$U4$$.LT$t$$|$$$2@ $$$0$|$t$$ƍF $$C$i$u0$ $F$.$$&$^U4$$W$$\$t$Et qzE$$$U4$p$Ut$T$$$G$m$UH$$@$H$$ $XUE[^_]f$$$&p ?F`ND$}=$$T$$$X$~pT$$&UWVSL-<$$:$B8$$$22$$$+U Q0U)W}܍<${$$8@ $N$t$4$+$Qt$$E$$,$dD@ $$$6D@ E$$$ D@ >$~$$D@ E$R$x$t 1{EW G`D$EUD$ 8$D$nEBEt0G`$$t$$:GHEUM$z}U $$$$e$Uԉt$|$ T$$$6$\$+E܃E܋}܉p$$$$@0$$$@'&$$$8<[^_]$p$$@ E:$@$f$t$$Bt$$E$$$Pt$$t$$(E$$$$x$UT$$$Q$wt$$k$-$St$E$\$@E؋Eh$$U؉t$T$$#N$$$^)7vE1}U|E$X$~UD$ T$T$$E&F% =ỦD$EЉT$$8<$uR<$vB$$|$|$D$ $EXrE$G|$c$D$t$$1A4p$$,$RE B} /e E wRE B4B$U$MRB] ̋UB$qUB(B OT$UB($R$E@t&'USEȿQD$D$ E D$E$[]Í&UVuu^]Í&FtN$tP4tT$F($ыFN$D$F($1FfUEu]Ë@t@tU P 1B0]ÐUWVEUuE1^_]1wvE8t>t"1ɸ9wE^_]Äu)ȃԍ&t&U8uu]c}u]u}]Ë~tNu <vڍGhE؃?tVGEMm}EEE#EHP9wfdff: ɉʃ9։4s'E0MmEE9rًE4) q1ɉ0E0E9X \f*GhfLGpGh*\fTGpEGh;0uE1\Ej\}}E}G UWMEGU\Q8q<}E|$$&UM}ER UI\M?\}@ER8Uq\Pu4\ EOMmEEv؃t }\@\B t@0\A:MBE))9E}7G\W&E\}A@m}"}\)NjB@;}p;}a M }I M?}\MPt$A $)D$P}GH\A @$\A O@C\m>\\ILlOTl4E#4HfMP89sME}m}lEE#4PfUP89w$EMtplx#EpHfMHM84t49so}PMmlEtEE#xpHfMHM84t49wt)E\m4)EmɉB@EE \ YU|$T$@$W\B\ $E|$D$A$"\B1ENj\)x4JUB\m)M\fTOpMOhMA\E\)mB@\MUEm\MUD$D$MG$/GQEmUmMmEEU動\MD$EED$B$ߜ\A\ \ALAT APAXU B\^ɉ49Ή0s-EwUmUE;0rӋE)4mIU\ELWnm0*fE}fG\E\|$D$B$誛\AEm)΋\A@\}Q)ljD$|$$D$1D$$A\GEEED$D$G$GEE1EEɉ49Ή0s-EUmUE;0rӋE4)q1ɉ0EE@MuA\AE}G UWMEGU\Q8qU EFV(*1E6VUI [gMGuU9U  }VuFtuE tBM 4$@L$@-qh}JV,FpG0Vp tNG0lV pMЋVNG2 pMԋVNG3 pM؋VNG ptNGlV pM܋VNG  pMVNG  pNF~؉F1~G@G}1t&tGu1F(_~N01 x Flt BFq)щ)‰[NltW2IW0>D$D$$6G0F0l@`1HfyG G-8@GQNMEPVU@U9F rC|VUENPF UыV FNV E@99V uMA,t ;UNMM;N tNM됋FEUB,t4M9Ms,E)L$VЉD$G0$YG0NMFEUF ;BFNMEUpJu@MNMUF RʉMF FMȃ҉FtoNM9F uUR,t39ps++pD$NppD$G0$蛅G0VUp;V  FEcEFE@,tU9pERFFEUB,taMAE;F G0V QNVG0MND$D$$G0NFqFqFEUMpЋI$uEFEMF I$tʉMĉF FMȃ҉FtEVU9F uMQ,t 9p\NMp;N |VU뇉EFEH,tU9pUątPFNF F[M ML+UT$FEUT$G0$赃G0NFgMbF+pD$FppT$G0$gG0W2W0YNQU;V  F FI} D$ D$D$4$)} GF[FgvEt&p)ʉT$FL$G0$G0VUE4$-yp)ʉT$FL$G0$8G0VU&D$D$$G0NMFFDFDMȋVNjz,ЃzуMzуMz$уЋVEEȋMȈ UFNV@UFNV@UFNV@UFNV@EE̋FN tGÜŰFNV@ M̋FNEPt0@V ŰFNV@E̋VFUMA,F FE\NFIMCFFUDFDFDFDUNVM䋎 tMFDBFFqEVLFDfDPFLVDD$DD$$~1vFD$FD$G0$G0FE1h^t&U(M]膃uɉ}u]u}]Ëyt} } Uẍ́uɃ}Ëu UEvuvuD;DtAu_1U9U tGM E @EDE MD D G|E7D$ $U}ƋE농t&1E /fUWVSl<}EE؋Gt=vUMEUfǀfDŽufǀ ffDŽ ufǀ| fDŽ| u]fǀǀǀǀǀÍt&'U#ʚE  $ , | 0 8 fǀǀǀ]t&UWV(EUʉM\ ҋME싉P9ʉMu4uIfE׋M䋄\ E fM؋EUf9ruM?uЋE艴\ 9U܉}|T9U~uzEM苴\ uufE؋\ M4f9furtLEfuU؉Mf9suMU\ (^_]ËuMU1X:2X\ɋMEЋuX:X*׉u UWVUuEBfɁf҃UfD1EE}5t&Mf| f}unE1ҹEEE9Etr}u9|f}}9t;U|tQ9Et uf| Uf f}t9t fJ< MfJ< m}J< ɉuUftYMЋE\ mF9E|0U A;EtU)‰‹UEfAutm҉UtttwuM< u؁< fEڍ&fDQfVuuxr}ExvUMDft=1D}؉ȃfEȃ 4uEfD}؋UMftEx9uuĐ^_]Ív'UVƋt/~%FNfF^]fVNND Vfdždž^]ÍUWVS }Q W Gf OD + WfE싏+E9E$EW Gf OD WE+fE쉇~ )ȃ f 9MEW Gf OD W+}EfE쉇LJ [^_]ÐEf Mf |t&W Gf OD + Wf9MeMf E*t&UVƋ~?VNND Vfdždž^]Ðt&~FNFɍt&UWV}u W Gf OD + WfWLJGM MwfD2EfwЈD2GLWEt(u EEfGOG;uu^_]惇f fv'UWVS next_out 0x%p avail_in %lu avail_out %lu total_in %ld total_out %ld adler %ld bufsize %ld dictionary 0x%p dict_adler 0x%ld zip_mode %d crc32 0x%x adler32 0x%x flags 0x%x EnabledDisabled APPEND %s CRC32 %s ADLER32 %s CONSUME %s LIMIT %s window 0x%p s is not a referenceinflateSyncinflateflushdeflateZ_OKZ_RLEZ_NULLZ_FIXEOS_CODZ_ASCIZ_BLOCZ_ERRNZ_BINARYZ_FINISHDEF_WBITSZ_UNKNOWNMAX_WBITSZ_FILTEREDZ_DEFLATEDZ_NO_FLUSHZ_NEED_DICTZ_BUF_ERRORZ_MEM_ERRORZ_FULL_FLUSHZ_SYNC_FLUSHZ_STREAM_ENDZ_BEST_SPEEDZ_DATA_ERRORZLIB_VERSIONMAX_MEM_LEVELZ_STREAM_ERRORZ_HUFFMAN_ONLYZ_VERSION_ERRORZ_PARTIAL_FLUSHZ_NO_COMPRESSIONZ_BEST_COMPRESSIONZ_DEFAULT_STRATEGYZ_DEFAULT_COMPRESSION%s is not a valid Zlib macro%s object version %s does not match %s%s%s%s %_Compress::Raw::Zlib::zlib_versionCompress::Raw::Zlib::ZLIB_VERNUMCompress::Raw::Zlib::crc32_combineCompress::Raw::Zlib::adler32_combineCompress::Raw::Zlib::_deflateInitCompress::Raw::Zlib::_inflateScanInitCompress::Raw::Zlib::_inflateInitCompress::Raw::Zlib::deflateStream::DispStreamCompress::Raw::Zlib::deflateStream::deflateResetCompress::Raw::Zlib::deflateStream::deflateCompress::Raw::Zlib::deflateStream::DESTROYCompress::Raw::Zlib::deflateStream::flushCompress::Raw::Zlib::deflateStream::_deflateParamsCompress::Raw::Zlib::deflateStream::get_LevelCompress::Raw::Zlib::deflateStream::get_StrategyCompress::Raw::Zlib::deflateStream::get_BufsizeCompress::Raw::Zlib::deflateStream::statusCompress::Raw::Zlib::deflateStream::crc32Compress::Raw::Zlib::deflateStream::dict_adlerCompress::Raw::Zlib::deflateStream::adler32Compress::Raw::Zlib::deflateStream::compressedBytesCompress::Raw::Zlib::deflateStream::uncompressedBytesCompress::Raw::Zlib::deflateStream::total_inCompress::Raw::Zlib::deflateStream::total_outCompress::Raw::Zlib::deflateStream::msgCompress::Raw::Zlib::deflateStream::deflateTuneCompress::Raw::Zlib::inflateStream::DispStreamCompress::Raw::Zlib::inflateStream::inflateResetCompress::Raw::Zlib::inflateStream::inflateCompress::Raw::Zlib::inflateStream::inflateCountCompress::Raw::Zlib::inflateStream::compressedBytesCompress::Raw::Zlib::inflateStream::uncompressedBytesCompress::Raw::Zlib::inflateStream::inflateSyncCompress::Raw::Zlib::inflateStream::DESTROYCompress::Raw::Zlib::inflateStream::statusCompress::Raw::Zlib::inflateStream::crc32Compress::Raw::Zlib::inflateStream::dict_adlerCompress::Raw::Zlib::inflateStream::total_inCompress::Raw::Zlib::inflateStream::adler32Compress::Raw::Zlib::inflateStream::total_outCompress::Raw::Zlib::inflateStream::msgCompress::Raw::Zlib::inflateStream::get_BufsizeCompress::Raw::Zlib::inflateStream::set_AppendCompress::Raw::Zlib::inflateScanStream::DESTROYCompress::Raw::Zlib::inflateScanStream::DispStreamCompress::Raw::Zlib::inflateScanStream::inflateResetCompress::Raw::Zlib::inflateScanStream::scanCompress::Raw::Zlib::inflateScanStream::getEndOffsetCompress::Raw::Zlib::inflateScanStream::inflateCountCompress::Raw::Zlib::inflateScanStream::compressedBytesCompress::Raw::Zlib::inflateScanStream::uncompressedBytesCompress::Raw::Zlib::inflateScanStream::getLastBlockOffsetCompress::Raw::Zlib::inflateScanStream::getLastBufferOffsetCompress::Raw::Zlib::inflateScanStream::resetLastBlockByteCompress::Raw::Zlib::inflateScanStream::_createDeflateStreamCompress::Raw::Zlib::inflateScanStream::statusCompress::Raw::Zlib::inflateScanStream::crc32Compress::Raw::Zlib::inflateScanStream::adler32Compress::Raw::Zlib needs zlib version 1.x Compress::Raw::Zlib::gzip_os_codeUsage: Compress::Raw::Zlib::inflateScanStream::adler32(s)Compress::Raw::Zlib::inflateScanStreamUsage: Compress::Raw::Zlib::inflateScanStream::crc32(s)Usage: Compress::Raw::Zlib::inflateScanStream::getLastBufferOffset(s)Usage: Compress::Raw::Zlib::inflateScanStream::getLastBlockOffset(s)Usage: Compress::Raw::Zlib::inflateScanStream::uncompressedBytes(s)Usage: Compress::Raw::Zlib::inflateScanStream::compressedBytes(s)Usage: Compress::Raw::Zlib::inflateScanStream::inflateCount(s)Usage: Compress::Raw::Zlib::inflateScanStream::getEndOffset(s)Usage: Compress::Raw::Zlib::inflateStream::get_Bufsize(s)Compress::Raw::Zlib::inflateStreams is not of type Compress::Raw::Zlib::inflateStreamUsage: Compress::Raw::Zlib::inflateStream::total_out(s)Usage: Compress::Raw::Zlib::inflateStream::adler32(s)Usage: Compress::Raw::Zlib::inflateStream::total_in(s)Usage: Compress::Raw::Zlib::inflateStream::dict_adler(s)Usage: Compress::Raw::Zlib::inflateStream::crc32(s)Usage: Compress::Raw::Zlib::inflateStream::status(s)Usage: Compress::Raw::Zlib::inflateStream::uncompressedBytes(s)Usage: Compress::Raw::Zlib::inflateStream::compressedBytes(s)Usage: Compress::Raw::Zlib::inflateStream::inflateCount(s)Usage: Compress::Raw::Zlib::deflateStream::total_out(s)Compress::Raw::Zlib::deflateStreams is not of type Compress::Raw::Zlib::deflateStreamUsage: Compress::Raw::Zlib::deflateStream::total_in(s)Usage: Compress::Raw::Zlib::deflateStream::uncompressedBytes(s)Usage: Compress::Raw::Zlib::deflateStream::compressedBytes(s)Usage: Compress::Raw::Zlib::deflateStream::adler32(s)Usage: Compress::Raw::Zlib::deflateStream::dict_adler(s)Usage: Compress::Raw::Zlib::deflateStream::crc32(s)Usage: Compress::Raw::Zlib::deflateStream::status(s)Usage: Compress::Raw::Zlib::deflateStream::get_Bufsize(s)Usage: Compress::Raw::Zlib::deflateStream::get_Strategy(s)Usage: Compress::Raw::Zlib::deflateStream::get_Level(s)Usage: Compress::Raw::Zlib::ZLIB_VERNUM()Usage: Compress::Raw::Zlib::inflateStream::msg(s)Usage: Compress::Raw::Zlib::deflateStream::msg(s)Usage: Compress::Raw::Zlib::zlib_version()Usage: Compress::Raw::Zlib::inflateScanStream::status(s)Usage: Compress::Raw::Zlib::inflateScanStream::_createDeflateStream(inf_s, flags, level, method, windowBits, memLevel, strategy, bufsize)inf_s is not of type Compress::Raw::Zlib::inflateScanStreamUsage: Compress::Raw::Zlib::inflateScanStream::resetLastBlockByte(s, byte)Usage: Compress::Raw::Zlib::_deflateInit(flags, level, method, windowBits, memLevel, strategy, bufsize, dictionary)Wide character in Compress::Raw::Zlib::Deflate::new dicrionary parameter%s: buffer parameter is not a SCALAR reference%s: buffer parameter is a reference to a referenceUsage: Compress::Raw::Zlib::crc32(buf, crc=crcInitial)Wide character in Compress::Raw::Zlib::crc32Usage: Compress::Raw::Zlib::adler32(buf, adler=adlerInitial)Wide character in Compress::Raw::Zlib::adler32Usage: Compress::Raw::Zlib::inflateScanStream::scan(s, buf, out=NULL, eof=FALSE)Wide character in Compress::Raw::Zlib::InflateScan::scan input parameterUsage: Compress::Raw::Zlib::inflateScanStream::inflateReset(s)Usage: Compress::Raw::Zlib::inflateStream::inflateReset(s)Usage: Compress::Raw::Zlib::inflateScanStream::DispStream(s, message=NULL)Usage: Compress::Raw::Zlib::inflateStream::DispStream(s, message=NULL)Usage: Compress::Raw::Zlib::deflateStream::DispStream(s, message=NULL)Usage: Compress::Raw::Zlib::inflateScanStream::DESTROY(s)Usage: Compress::Raw::Zlib::inflateStream::DESTROY(s)Usage: Compress::Raw::Zlib::inflateStream::set_Append(s, mode)Usage: Compress::Raw::Zlib::inflateStream::inflateSync(s, buf)Wide character in Compress::Raw::Zlib::Inflate::inflateSync%s: buffer parameter is read-onlyUsage: Compress::Raw::Zlib::inflateStream::inflate(s, buf, output, eof=FALSE)Compress::Raw::Zlib::Inflate::inflate input parameter cannot be read-only when ConsumeInput is specifiedWide character in Compress::Raw::Zlib::Inflate::inflate input parameterWide character in Compress::Raw::Zlib::Inflate::inflate output parameterUsage: Compress::Raw::Zlib::deflateStream::deflateTune(s, good_length, max_lazy, nice_length, max_chain)Usage: Compress::Raw::Zlib::deflateStream::_deflateParams(s, flags, level, strategy, bufsize)Usage: Compress::Raw::Zlib::deflateStream::flush(s, output, f=Z_FINISH)Wide character in Compress::Raw::Zlib::Deflate::flush input parameterUsage: Compress::Raw::Zlib::deflateStream::deflate(s, buf, output)Wide character in Compress::Raw::Zlib::Deflate::deflate input parameterWide character in Compress::Raw::Zlib::Deflate::deflate output parameterUsage: Compress::Raw::Zlib::deflateStream::DESTROY(s)Usage: Compress::Raw::Zlib::deflateStream::deflateReset(s)Usage: %s(flags, windowBits, bufsize, dictionary)Usage: Compress::Raw::Zlib::adler32_combine(adler1, adler2, len2)Usage: Compress::Raw::Zlib::crc32_combine(crc1, crc2, len2)Usage: Compress::Raw::Zlib::constant(sv)Your vendor has not defined Zlib macro %s, usedUnexpected return type %d while processing Zlib macro %s, used|FLmB55595555yP5555555555?.5555555need dictionarystream endfile errorstream errordata errorinsufficient memorybuffer errorincompatible version@0w,aQ mjp5c飕d2yҗ+L |~-d jHqA}mQDžӃVlkdzbeO\lcc=  n;^iLA`rqgjm Zjz  ' }Dңhi]Wbgeq6lknv+ӉZzJgo߹ホCՎ`~ѡ8ROggW?K6H+ L J6`zA`Ugn1yiFafo%6hRw G "/&U;( Z+j\1е,[d&c윣ju m ?6grWJz+{8 Ғ |! ӆBhn[&wowGZpj;f\ eibkaElx TN³9a&g`MGiIwn>JjѮZf @;7SŞϲG0򽽊º0S$6к)WTg#.zfJah]+o*7 Z-A1b62S-+ldEw}ZVǖAOIъ OM~-QJ#SpxAaU׮.7׵Y-6]]wll?AԞZ͢$ Faw$eڪ]]FD(koipvk19Z* ,  m86F߲]qTp0ek*1u4yީ%8S1bSWĔՖk1**ykʬHpo].*F6fcTT"eM©g0&):{ϼkZ> 8$,52F*sw1pHkQ6Fzw]cN̵J #pAF]#l8?1(BOgT~yUbL8^#ܖTZ1ObbSyOIV~P-{b-R4٠~^eGnHl/Su6: #jT$+e?yHf'*b#ٽЧ ?&~?$pi;FBzw[keZ~7 Sv8H 3?r$7jnԄYFܨ |OQ;օ U d S - =G\ p&Gw)` /a߫i5&LsZ<#0zMzFM8,9; :R:(q-v,.7/pXqYs3r%w+OQvrtEux܉~OK }!b|tyBxʠz{.lD~m8onlk[wjR1h58ib?mcf+aQ`צedd"fig HINSKyuJcO NZLݘMFGN@E$DD2AsX@*IBCPhTg3U>uW ַVS:R|P~Q9ZS [fYX4])\ZEo^m/_5qϱ٥s\ۼqދ!K7 kfֶԁ-b3Πjp]$^'~*I@VW<âM˟ŏ{ tDCm-@wm.B+(铜>Td"ŀǼϭ~8y$owJ1}05_K^ iϏ은BI#ƈdX܁T̓cQ: rՆ⩗ fn|xK)o%ƭ/3vUuA?)C:|sĵ@͂ Ͳ;bIUeh"׻_HS1޼^Z4eg Wb27_k%8ם(ŊO}do׸Jj3wVcXWP0qB{߭gCru&op-?'Bs ưGz>2[Ȏg; i8P/ _Y=чe:ZO?(3wwXR @hQ+ğH*0"ZOWoI}@mNП5+#*'G| AH=XX?#1jvʬ`p^Y<L~i/{kHwâ hs)aLoD~Pf7VM'(@ﰤ ہg9x+n&;f?/X)T`D1 ߨMߒ.FgTp'Hq/L0UEc?kǃh6ry7]P\@TN%s7@'>$!AxUʰ\3;Y^U~PGl!;b F2ȂpԞ(Q_V:1X: n3 m:@/)IJNv"2x+ٗ Kx.HҥfAj^y9*O]#kM`~b_R 7zFh!1߈Vc0a"j6nS Nr)Υ{t*F8#vufz`rs"WG9^EMvc΍&DAdQy/4Aڱ&S֚E biLQ<6'5P..T&q]w4.6IE? v\[YI>U!lDa>Ԫ΋ϩ7~8A]&nv|oY yKiw\¹9~$ 66nQfq>,o,IӔ 渱{I .H>C-Yn馑gQz tafw0a, Qmpjc5dۈ2yܸو L+~|-dj qHA}mԵQӅlVdkbze\Ocl=c ;n Li^`Agqr<KG k5Blۻ֬@2lE\u ϫ=Y&0Q:Qa!V#Ϻ(_ ٲ $/o|XhLaf-=vAq *q3xɢ4 j m=-dlc\kkQlabe0bNl{WeP|b-I|LeMaX:QΣtԻ0JߥA=ؕפmCij4ngF`D-s3 L_ |Pq<'A  Wh% of a^)ɘИ"רY=. \;l  tҚG9w&sc d; mj>zjZ '}DhibW]egl6qnkv+zZgJoC`֣ѓ~8ORѻgWg?H6K +گ L6JAz``ègU1nFiyaf%oҠRh6 w G"U&/ź; (+Z\j1,ٞ[ޮd°c&ujm 6?rgWJz{+ 8Ҏվ | !Bhݳڃn&[owGwZjpf; \ebiaklE x NT9§g&a`IiGM>nwۮjJZ@ f7;𩼮S޻G0齽ʺŠS0$6TW)#gfz.aJ]h*o+ 7 Z-1A26b+-Sdl}wEVZOAي»IˬO ~M-JQS#xpaA.U7Y-۩6˚w]]llA?Z$㧲F waރ$Ųe]]DFok(vpi91k *Z  ,8mF6]pTqke0*1¶u4%y<8syjHA}X*ݹ1SbSW§ٖծ1k**kypH]oF*.f6TTcMe"¤0g)&Ůޟ:{kZ >8,$5*F21wsHpQkzF6c]wN̵ׄJ# pȄA#]F8l1?(gOB~TUyLbˁ8#^TO1ZbbySIOP~V{-b-4R^~Ge­lHnuS/:6# $Tj?e+y䏼Hf*'˼Ѝb# &??~p$iBF;[wzek~ZS 7H8v ?3$rj7nFY |OQ; U dؓS - \G=&pGw`)/ ai5&sL <:R=Pe6^X7}o5641W0ճ2k3$k%'1&-[#bML"'{ "!$*x(+)`F(> q-q,v.Ț/7pqXsYr3w%vQO+tru՛E~xKO} |b!ytxBz{l.m~Do8nkljw[h1Ri85bcm?a+f`Qeddf"giH IKSNJuyOcN LZMݥFĚGE@ND$A2D@XsBI*CThPU3gWu>V SR:P|Q~Z9[ SYfX]4\)^oEZ_/m5qs<\kg2z &J8 좞V`a/6i\lU,zB\uHƒ=&FW A+Ox]`غ7W>9q߳!7Kk ֩fض-bѠ3pj$]^Ĝ'*~@IWVÕ<ӂMʏş{ Dt͆mC-@mw+B.(>dT"ş~Ϝ8yo$w1J}50K_ ^ϋiBۉI#dXфTQc:r Р fΫnx|)Ko%3/uUv?A)ġ:C|sд@͉ ;IbeU"hH_S1ފZ^ھ4ge ȋbW72%k_ܝ8Ŵ(}OodJֿjw3XcVPW0Bq{gǧurCo&p-?О'sB zGɠ2>[ ;g/P8i_ Y=嗇e:ϏOZw3(?RXw@ Qh+HZ"0*WOIo@}m5N#+'*GA |􏒨HX=#?X1vjʨ`^pYL'!$UxAׯ3\Y;U^GP~b;!lڇF 2p(ԐQV_:X1: 3n :m@I)/NJ2"v+x xKH.jAf^O*9y]#Mk~`bю_޶ Rz7hFм!10cV"ajحn6 SrN){t*8Fv#fu`zrϮsɛW"G9E^vMcD&dA/yQA4S&ֿ EbLil!>aDƋΪ~7A8n&]|vYoᡱ Kyi׫w¡\~9$66 Qnf>q,o,ӹI 散 I{.C>HnY-Qg̰t zfainvalid block typeinvalid stored block lengthsinvalid code lengths setinvalid bit length repeatinvalid literal/lengths setinvalid distances setinvalid literal/length codeinvalid distance codeinvalid distance too far backtoo many length or distance symbolsqqcqqqqqqqqq     A@!  @a`10  @`Psp0  ` @ X ;x8 h( H T+t4  d$ D \ S|< l,  L R#r2  b" B Z Cz: j*  J V@3v6 f& F  ^ c~> n. N `Qq1  a! A Y ;y9 i)  I U+u5  e% E ] S}= m-  M S#s3  c# C [ C{; k+  K W@3w7 g' G  _ c? o/ O `Psp0  ` @ X ;x8 h( H T+t4  d$ D \ S|< l,  L R#r2  b" B Z Cz: j*  J V@3v6 f& F  ^ c~> n. N `Qq1  a! A Y ;y9 i)  I U+u5  e% E ] S}= m-  M S#s3  c# C [ C{; k+  K W@3w7 g' G  _ c? o/ O incorrect header checkunknown compression methodinvalid window sizeunknown header flags setheader crc mismatchincorrect data checkincorrect length check&I<.p2$!%\"$"7!o &$$!     A@!  @a`10  @`Psp0  ` @ X ;x8 h( H T+t4  d$ D \ S|< l,  L R#r2  b" B Z Cz: j*  J V@3v6 f& F  ^ c~> n. N `Qq1  a! A Y ;y9 i)  I U+u5  e% E ] S}= m-  M S#s3  c# C [ C{; k+  K W@3w7 g' G  _ c? o/ O `Psp0  ` @ X ;x8 h( H T+t4  d$ D \ S|< l,  L R#r2  b" B Z Cz: j*  J V@3v6 f& F  ^ c~> n. N `Qq1  a! A Y ;y9 i)  I U+u5  e% E ] S}= m-  M S#s3  c# C [ C{; k+  K W@3w7 g' G  _ c? o/ O deflate 1.2.3 Copyright 1995-2005 Jean-loup Gailly inflate 1.2.3 Copyright 1995-2005 Mark Adler @@ !1Aa  0@` #+3;CScs   L,l\<|B"bR2r J*jZ:zF&fV6vN.n^>~A!aQ1q I)iY9yE%eU5u M-m]=}   S S  3 3  s s    K K  + +  k k     [ [  ; ;  { {     G G  ' '  g g     W W  7 7  w w     O O  / /  o o     _ _  ? ?     @ `P0pH(hX8xD$dT4tC#c            (08@P`p   0@`  0@`need dictionarystream endfile errorstream errordata errorinsufficient memorybuffer errorincompatible version     TTTTT UU+U1 - o i g*'o'ooV&of ..*.:.J.Z.j.z......... //*/:/J/Z/j/z///////// 00*0:0J0Z0j0z000000000 11*1:1J1Z1j1z111111111 22*2:2J2Z2j2z222222222 33*3:3J3Z3j3z3333XiPe`MRQST.shstrtab.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame.ctors.dtors.jcr.data.rel.ro.dynamic.got.got.plt.data.bss o  ` i%oV&V&l2o''0A ''J ** S--0N--Y33T_e@@h m@U@UwDeDU~LeLUTeTU`e`U fVfVgWxXiXYDiYYFILEa30ef7ba/auto/File/Glob/Glob.soFXELF`4B4 (??@@@@@@QtdCD A*-<2649:?#;&+0 735>/ B $,.)(1  @!'"C%=8: @ :=@s*|CEqXB^%@: ^q"@ + 6FFLA|nF%XM%XU<m m-\'c0 ]@t%LqT"_* 1 AAA?`l  $= 7 + @)  __gmon_start___init_fini__cxa_finalize_Jv_RegisterClassesbsd_globfreePerl_safesysfree__ctype_tolower_locPerl_Gthr_key_ptrpthread_getspecificPerl_Ireentrant_buffer_ptrreaddir64_rPerl_safesysreallocPerl_safesysmalloc__errno_locationPL_memory_wrapPerl_croak_nocontext__lxstat64opendirclosedir__xstat64qsortgetenvgetpwnam_rPerl_reentrant_retrygetuidgetpwuid_rbsd_globstrcmpboot_File__GlobPerl_Tstack_sp_ptrPerl_Tmarkstack_ptr_ptrPerl_Tstack_base_ptrPerl_croakPerl_sv_2pv_flagsXS_File__Glob_doglobPerl_newXSPerl_sv_setpvXS_File__Glob_constantPerl_Imodglobal_ptrPerl_hv_fetchPerl_newSVPerl_sv_setuvPerl_Isv_yes_ptrPerl_formPerl_get_svPerl_Top_ptrPerl_sv_newmortalPerl_Tcurpad_ptrPerl_newSVpvf_nocontextPerl_sv_2mortalPerl_Tstack_max_ptrPerl_Isv_undef_ptrPerl_sv_setivPerl_mg_setPerl_stack_growPerl_sv_2uvstrlenPerl_newSVpvnPerl_Ttainted_ptrPerl_Itainting_ptrPerl_sv_taintPerl_sv_2ivlibc.so.6__stack_chk_fail_edata__bss_start_endGLIBC_2.1.3GLIBC_2.3GLIBC_2.4GLIBC_2.1.2GLIBC_2.2GLIBC_2.0si ii ii ri ii  ii AA@ @ @A@:@/@7AAA AAAAA A $A (A ,A 0A4A8AA4ACA5A6A7A8A9US[d2t@.X[ hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`USË.u8t$ ҋuƃ[]Í&US.+.tt $҃[]Ë$ÐUV9tfu1^] UVtu^1]^]Ít&UWVS UÃ-BtFыR ɉMt&41t$ ;}uUB$ MA [^_]Ít&UWVS<-9ʉEЉMsZEEEƃf?fUtNf[f*tPUBUf;Eu)E9}wEf8&Ufzu1<[^_];}u kfE$M̉;Lf>uŋE@ffEt1f!EEEEEԋE耉E t&MuIf9UtEf]tUf?-uӋuu\f9UrEf;GwE򍆀=}E9듋E9Et&򍆀=}E9|E}Ew=9u[]<[^_]E=u=9u5Uԋ(#4 4:Uԋ84UUԋE+UEe4kUVS-**$%$;$c0$ $$=t$D$E$1҅u&$$$ [^]É'UWVSEMBli)UW}?jD$$EGEGuUwfuE+u04$uEt)‹EuMƒW4GUG @u}[^_]ËM M}v\Ձ}?$E&G1M41ɉB9u)ƉuU$gWW$G>t&$FfUWVS }hE `MdUÕ'\ET\XeU1҉Pftgf/j1f\`t&9fAff/*f`\u`fh kTB @LL$4$R$=TB t.`fy/t!%=@=8TAPTht0vf/f9DžtUe3tH [^_]Ë\`A9`w\f/\\f/I`9r``Ƌ|T4$D$RTA DžtG9`Džt1`f|hf8cfDž.HT@ @H$P xxHTB l @ptTIl`DžtDx$lx.9`H8P`„fD8t7;Q?‹f?u9sp\$``f1LD$t$$\f:.`fDžtTA @ex$Q!hRT@ @=L4$T$P(%=@p`9`f/fBIhHHTBhDžt8H$qxQPTt$D$XT$ d<$D$h#tax$Lt$$D$&'UWVS\@‰Enk!f~I ĿܿĿȿf[tdf*t6f%ft&ft}f?uՋI f?؋H 9tf*tf*뱐f!ffuof[f!u{ffE;ȿV ܿ1q \@[^_]ÍF]#vf[Of! f]tGf%frf-uzrf]t؉f%f-rfABf]uyJ f]0ulD$ D$+ȿL$@ȿȿB$LML$L$ ML$$t$+{ܿJ \@[^_]ËR ĿܿcU9։̿Fff/ t&f/t"̿;t̿fu>L$N9"ff;t?Bu動̿ff̿t9vBffufI Ŀܿ*V u%=MܿP ‹Ŀ\@[^_]ÍOfG!$$,$T8$p$$.lп$$$h$$$|$пt$L$ LD$4$tL"t#R ܿĿD$Z$tP$$$Cp̋9'v$$$8$p$$lؿ$f$|$hԿ$:$P$x0|$ؿLT$ Կt$$L$t("tSv ܿĿ$$$pFD$Q$ݍ&'UWVƁ f8{{Gf9KǍ&f9uVfvfftZDžf{tmf}tvft.f[uf]tfu0ftAqfuҋ ^_]Ãf]tft탅됋t3tfx}fx ^_]Ë9v+off,to9wVff[vf{f}ut*9v 1^_]Ëu9vf;r1DVfQfu>)Bf]tAft:f]t0fu׉ftЍJUWV EM@@E UB EBBE uCu f9t uf} yU ^_]ÍEt&fB;s2wtU<\ut:@fG;rf} xU! ^_]Ã\@‰KUSEÅE $D$[]fUWVU EUME Mtw Uu"MEAtYuEtnPUw~ A<wR 9tπ}w' G<wR )t^_]ËU1 ؋uEu E^_]P1U뫐UE tt]Ðt&]1ÍUWVS\Y\$T$j$8$4$J$" M؉$ $ $($E$$u؃U@ *$$$EM؋Uԍ)u$i$$MDEE܋U܅ U܋B4M܋8MċuĹEM䍳M$$U܋M|$t$T$ UL$Mĉ$T$UL$ T$T$$$$4$]$sD$ "D$t$$wE$#$9M̉L$ T$T$$$$T$t$$$$ỦT$ $T$T$i$}$$ 0$]$sT$t$D$D$ $$E$2D$$0$$Mt$L$$$$$u0$$$>$$$>$`$v$~UM\[^_]$0$FUD$ "D$T$$G$c$U䍋nMȉL$|$ T$$$$D$t$$Et@}X$t$fUMЉL$ MȉT$L$$7$9$OD$t$$;E܋EЉEuUuEfUWVS<$$$0$$$:$}$$)u$@$V$@ $$,$E$$ $tF @EEu$$Fw$t&$$$0$h$~$6@ EEUB Bl_>  "ox  ;0oooZo:&6FVfv<:.shstrtab.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss oxx@ %oZZ<2o A 0J  S0N`Y  _""e""m**w:*~:*:*:*;+;+`<,<,,FILEaf4beb04/auto/IO/IO.so<ELF04 94 (p6p6p6pFpF6FFQtdCE D"9#%:1;+ 048?).!(&-/$6A@2>'*7 < =B C5, 31@ )$ $Dz124579:;<@ABC}͹0wqX򶚿|y }CE6˞?*cY~SaVQ2?w>qUn7r + @G-A ktbOZ cC{:P,"pc 1 l Y  A`#n `H`0/ dH0 `H U!n )9 . ,$ u ? P,o  &Z __gmon_start___init_fini__cxa_finalize_Jv_RegisterClassesboot_IOPerl_Tstack_sp_ptrPerl_Tmarkstack_ptr_ptrPerl_Tstack_base_ptrPerl_croakPerl_sv_2pv_flagsXS_IO__Seekable_getposPerl_newXSXS_IO__Seekable_setposXS_IO__File_new_tmpfileXS_IO__Poll__pollXS_IO__Handle_blockingPerl_sv_setpvXS_IO__Handle_ungetcXS_IO__Handle_errorXS_IO__Handle_clearerrXS_IO__Handle_untaintXS_IO__Handle_flushXS_IO__Handle_setbufXS_IO__Handle_setvbufXS_IO__Handle_syncXS_IO__Socket_sockatmarkPerl_gv_stashpvnPerl_newSVivPerl_newCONSTSUBPerl_Isv_yes_ptrPerl_formPerl_get_svPerl_sv_2ioPerl_PerlIO_filenoPerl_sv_newmortalPerl_sv_setpvnPerl_sv_setivfsync__errno_locationPerl_croak_nocontextPerl_PerlIO_flushPerl_Top_ptrPerl_mg_setPerl_Tcurpad_ptrPerl_PerlIO_clearerrPerl_PerlIO_errorPerl_sv_2ivPerlIO_ungetcfcntlPerl_sv_2mortalPerl_Isv_undef_ptrPerl_newSVPerl_sv_freePerlIO_tmpfilePerl_newGVgenPerl_hv_deletePerl_do_openPerl_newRVPerl_gv_stashpvPerl_sv_blessPerlIO_setposPerlIO_getposlibc.so.6_edata__bss_start_endGLIBC_2.1.3GLIBC_2.2.4GLIBC_2.0si ti 'ii 3XH\HLG<PG7TG=XG\G `G3dG@hGClG5pGBtG;xG>|GDG1G.G?G9GGGGGGGGG G G G GGGGGGGGGGGGGHHH HHH H!H" H#$H$(H%,H&0H'4H(8H)*D$$U]E)u}$8E$2E$0)tD$E$_[t&'UWVSU) E$0E$\:E$()~VE<$8D$E$`H$u[^_]U$/0E$B볋UD$$UVS-P@tЋFu[^]US[TY[XS_VERSION%s::%s1.25bootstrap parameter::IO.cIO::Seekable::getposIO::Seekable::setposIO::File::new_tmpfileIO::Poll::_pollIO::Handle::blocking$;$IO::Handle::ungetcIO::Handle::errorIO::Handle::clearerrIO::Handle::untaintIO::Handle::flushIO::Handle::setbufIO::Handle::setvbufIO::Handle::syncIO::Socket::sockatmarkIO::PollPOLLINPOLLPRIPOLLOUTPOLLRDNORMPOLLWRNORMPOLLRDBANDPOLLWRBANDPOLLERRPOLLHUPPOLLNVALIO::Handle_IOFBF_IOLBF_IONBFSEEK_SETSEEK_CURSEEK_END0 but trueIO::File+>&%s object version %s does not match %s%s%s%s %_Usage: IO::Socket::sockatmark(sock)Usage: IO::Handle::sync(handle)%s not implemented on this architectureUsage: IO::Handle::setvbuf(handle, buf, type, size)Usage: IO::Handle::setbuf(handle, ...)Usage: IO::Handle::flush(handle)Usage: IO::Handle::untaint(handle)Usage: IO::Handle::clearerr(handle)Usage: IO::Handle::error(handle)Usage: IO::Handle::ungetc(handle, c)Usage: IO::Handle::blocking(handle, blk=-1)Usage: IO::Poll::_poll(timeout, ...)Usage: IO::File::new_tmpfile(packname = "IO::File")Usage: IO::Seekable::setpos(handle, pos)Usage: IO::Seekable::getpos(handle)  1o = Gx  o oo oF>N^n~.>N^n~.>N^n~XH|F.shstrtab.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss( o P=%o  2o @A  J  x S0N((Y00_11e211ml6l6wpFp6~xFx6F6F6LGL7DG7XHX8`H`8`8FILEf5186909/auto/List/Util/Util.soELF`4H4 (Qtdap,HgRa#3AE[eN-iYV>Q`4F"^d\KXPmk5T% ZLfBO7C2WU_G;D?6jIc/]M'J bo &lh*+8(09)<n!= @.$:S 1YI ÌM IYZ]_aghjlo\.^qX@|`A(U*^Z"o!pc2CE옖w. x::^osB"G `q. % 1;0o0?'[ LQua3aUnO dw#rIX"d<T {= 1S  R9  K`C ^$.A 6 M 8Q c0@/  l= F, + K: @4 P `}c !V# 5PJD __gmon_start___fini__cxa_finalize_Jv_RegisterClassesboot_List__UtilPerl_Gthr_key_ptrpthread_getspecificPerl_Tstack_sp_ptrPerl_Tmarkstack_ptr_ptrPerl_Tstack_base_ptrPerl_croakXS_List__Util_minPerl_newXSPerl_sv_setpvXS_List__Util_sumXS_List__Util_minstrXS_List__Util_reduceXS_List__Util_firstXS_List__Util_shuffleXS_Scalar__Util_dualvarXS_Scalar__Util_blessedXS_Scalar__Util_reftypeXS_Scalar__Util_refaddrXS_Scalar__Util_weakenXS_Scalar__Util_isweakXS_Scalar__Util_readonlyXS_Scalar__Util_taintedXS_Scalar__Util_isvstringXS_Scalar__Util_looks_like_numberXS_Scalar__Util_set_prototypePerl_gv_stashpvnPerl_hv_fetchPerl_gv_initPerl_Isv_no_ptrPerl_sv_setsv_flagsPerl_Isv_yes_ptrPerl_sv_2pv_flagsPerl_formPerl_get_svPerl_sv_setpvnPerl_croak_nocontextPerl_Top_ptrPerl_sv_newmortalPerl_looks_like_numberPerl_sv_setivPerl_mg_setPerl_Tcurpad_ptrPerl_Isv_undef_ptrPerl_amagic_callPerl_mg_getPerl_mg_findPerl_sv_taintedPerl_sv_rvweakenPerl_sv_setuvPerl_sv_reftypePerl_sv_isobjectPerl_Itainting_ptrPerl_sv_upgradePerl_sv_taintPerl_sv_2uvPerl_sv_backoffPerl_sv_2ivPerl_sv_2nvPL_ppaddrPerl_Ireentrant_buffer_ptrdrand48_rPerl_sv_2boolPerl_newAVPerl_newSVPerl_av_storePerl_av_extendPerl_newHVPerl_sv_2cvPerl_push_scopePerl_Ttop_env_ptrPerl_save_sptrPerl_Ttmps_floor_ptrPerl_save_intPerl_Ttmps_ix_ptrPerl_save_vptrPerl_Tcurstackinfo_ptrPerl_Tcurstack_ptrPerl_Tstack_max_ptrPerl_cxincPerl_Tcurcop_ptrPerl_Tmarkstack_ptrPerl_Tscopestack_ix_ptrPerl_Tretstack_ix_ptrPerl_Tcurpm_ptrPerl_Tsavestack_ix_ptrPerl_Tsavestack_max_ptrPerl_Tsavestack_ptrPerl_Tcomppad_ptrPerl_Idefgv_ptrPerl_Irunops_ptrPerl_sv_freePerl_pop_scopePerl_save_freesvPerl_savestack_growPerl_new_stackinfoPerl_Istderrgv_ptrPerl_PerlIO_stderrPerlIO_printfPerl_my_exitPerl_gv_fetchpvPerl_sv_cmpPerl_sv_setnvlibc.so.6_edata__bss_start_endGLIBC_2.1.3GLIBC_2.0Asi cii oܚlabcmZodjk engh_ [$T(U,f<@DHLPTX\ ` d h l ptx| !"#ě$ț%̛&Л'ԛ(؛)ܛ*+,-./012345 6789: ;$<(=,>0?4@8A<B@CDDHELFPGTHXI\J`KdLhMlNpOtPxQ|RSTVWXUS[pt@mX[ hhhhh h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hdhhhplh`phPth@xh0|h hhhhhhhh h(h0h8ph@`hHPhP@hX0h` hhhphxhhhhhhhhph`hPh@h0h hhh hhhhh  h($h0(h8p,h@`0hHP4hP@8hX0<h` @hhDhpHhxLhPhThXh\h`hUS}lu8td$ hҋhuƃl[]Í&US.g}tt $҃[]Ë$ÐUWVS%}l$$$28$$$ M؉$$$8$Eg$m$u؃U@  $*$0$EM؋Uԍ) $$$MDEE܋U܅U܋B I M܋8RMutpET M䍳"kM$W$]U܋M|$t$T$ UL$M$T$UL$ T$@T$P$$ nM̉L$ T$yT$$Ƌ@0$$MȉL$t$$$$ŰT$ L$T$$Ƌ@0$G$MUȉt$T$$$$$M̉T$L$ T$$$$Uȉt$T$$F$$M̉T$T$L$ $=Ƌ@0$v$|Mȉt$L$$$M$SŰT$ L$T$$Ƌ@0$ $Uȉt$T$$l$$M̉T$L$ T$$c$$UĉT$t$$$v$|M̉T$L$ T$$$;$AUĉt$T$$$$M̉T$L$ T$$$$Uȉt$T$$:$$M̉T$ L$ T$$1$s$y!T$t$$$G$MỦT$ $T$$T$$ $"ML$t$$i$$ỦT$ $T$:T$`$$Mt$L$$$y$ỦT$ $T$PT$$>$DMt$L$$$$ỦT$ $T$fT$$$Mt$L$$=$$ỦT$ $T${T$4$v$|Mt$L$$$M$SỦT$ $T$T$$$Mt$L$$u$$ỦT$ $T$T$l$$Mt$L$$$$ỦT$ $T$T$$J$PMt$L$$$!$'ỦT$ $T$pT$$$Mt$L$$I$$ỦT$ $T$T$@$$T$t$$$V$\ML$D$ D$ $W$$D$D$ T$|$$0~ t=$$UD$D$ |$T$ t$$@ $E$$$n$tMt$D$ L$$$=$C$u0$$ $X$$$X$$$UMl[^_]f$$$V4$$D$ "D$t$$EKv$H$NUD$ "D$T$$ot&$@$U䍋KML$|$ T$$h$$D$t$$ [^_]Í$$$$h$nT$$&UWVS[^_]$U$[D$Vt$$`$#$)$a[$$T$$$UWVSe$$$"0$$$:$}$$+)$<A$G$8$E$!$@ $$$ƋEf@ E$$$i$E$Ut$T$$F @t"$i$ot$$E4$A$G$$!$'$8>[^_]$$$0$$$@ 4Ef@$$UT$$YE$i$oT$$'UWVS[^_]Ð$($.$0$$$U@ EBf$$UT$$UBU0$$$?$En$tUt$T$$E@ @uUE$($.UT$$O$$T$$%UWVS^$$$"0$$$:$}$$+)g$<A$G$8$E$!$@ $$$UEBf$$$a0$$$$s$y$$S$Y$8>[^_]Ð$($.$0$$$U@ EBf$$UT$$UBU0$$t$D$$S$e$kUt$T$$$<$B$0E@ @u E7$$UT$$/$$ T$$UWVSZ$$$0$$$:$]$c$ )w$<!$'$}<8$$$@ $$$EfG$$|$$>$z$$(u0$W$]$$7$=$$$$UE[^_]$$$0$$$@ EfG$$|$$v0$d$jt$D$$&$8$>Ut$T$$$$$0E@ @uUE0$$UT$$$$0T$$UWVSW<$t$z$0$T$Z$b:$-$3$).$<$$8$E$$yDE@ ‹@EE$$$50$g$m$E$G$M$xE$E$$4$$Uԉt$T$ U$T$E@U؋B%=#$$$I0E@ @ F $a$g$@ |$4$:$H$ $$X8tEf@Ef@$$$&$$$V8><[^_]Í$x$~$&0E@ ,@ F $>$D$@ $$$H$$$H$$$fUB 0H@^$~$$,HE&$H$N$4$%$+D$t$$$$UT$UD$ T$$E1f$$U܉T$$o$$$8$d$j$4$A$Gt$$+R$$ U؉T$$A$$U؉T$$8$$$f4$$t$$:$h$nU؉T$$$>$DU؉T$$5$$$4$$t$$$$TT$$v'UWVSPL$$$$Ea$g$o2$:$@$VU0)u}u$$ $EEEEEEE$$$@ $E$$0$h$n$$M$S$KM}uEE}E}W$E$ fEm]mҋu$$u0$E$$c0$$$CUċ$m$s$MċUM$5$;$0$$$]t$$$$$$݀$$$ $$$9UȋMDL[^_]ÍUWVSLÅML$4$:$E$$$:$w$$E )U}@0EȋEą$$$L8$~$$$^$d$$>$D$07L[^_]$$$u0E؋@Mu&%=BU؋@ ]Ѓ}<}E$$$EM<E܅ G%=@ ]E܅t,U؋B %=U؋@ ]EEuȅEt E]Љ}؃EEăE9E($$$mM؋U $$$$v$|$$UML[^_]$F$LD$D$ |$U؉$T$)@tuP^EȅGMu#%=@ ]Љ}؃EEăE9Et=@ „uEȅ늋Mȅq@] @ 묍&GU؋@]@]Љ}؃EEăE9E4$$|$$]g1ҋ@ RP,$]P80$p$vt$$$D$JU؉T$$;]1ҋ@ RP,$]tQU؋@]7$$|$$]1ҋ@ RP,$]$$U؉T$$]U؋1ҋ@ RP,$]'UWVS$蒱$蘮D$$蘮$l$r$:@ Hx$<$B$ @ @P$C$$ $կ@ @P$1'UWVS̱/l$贰$躭$$E葰$藭$蟮2$j$p$E)E6$4)$/$׫u0$$$$E$$菫}E $贯$躬UT$ UD$T$t$$Euԋ@@$Ef$l$$H$N$親EËp($$t$$PUԋP(B$$$o$$ǫt$$軪$蟮$襫$-$$腫$-$]$c$[$=$Ct$$跫$$!$yƀ$$$蒩xT GG@$谭$趪$0$莭$蔪$<)M}EF$a$g$$;$A$I$$!$ɨR$$$M$Ϭ$թ$}R$裬$詩$$聬$臩$8$a$g$p$>$D$ܧ;p  $$$賧0$$$ӫF$ԫ$ڨ$rx$豫$跨$O@$耫$膨$ާ0$`$f$+0w$:$@$(G$$$%0$$$է+0w$Ѫ$ק$?G$讪$货$蜩G $苪$葧$ɨGGUԉW @$D$$$$E\$|$$$$t$$]B$Ƙ$̕|$$]$蜘$袕t$$薘1ҋ@ RP,$$1_$eU؉T$$V]U11ҋ@ RP,$]$$$$$E\$|$$ٕUVS͘P@tЋFu[^]US[Y[XS_VERSION%s::%s1.21bootstrap parameter::ListUtil.cList::Util::maxList::Util::minList::Util::sumList::Util::minstrList::Util::maxstrList::Util::reduce&@List::Util::firstList::Util::shuffleScalar::Util::dualvar$$Scalar::Util::blessedScalar::Util::reftypeScalar::Util::refaddrScalar::Util::weakenScalar::Util::isweakScalar::Util::readonlyScalar::Util::taintedScalar::Util::isvstringScalar::Util::set_prototype&$List::UtilREAL_MULTICALLpanic: POPSTACK Not a subroutine referenceab%s object version %s does not match %s%s%s%s %_Scalar::Util::looks_like_numberUsage: Scalar::Util::isweak(sv)Usage: Scalar::Util::set_prototype(subref, proto)set_prototype: not a subroutine referenceset_prototype: not a referenceUsage: Scalar::Util::looks_like_number(sv)Usage: Scalar::Util::readonly(sv)Usage: Scalar::Util::isvstring(sv)Usage: Scalar::Util::tainted(sv)Usage: Scalar::Util::weaken(sv)Usage: Scalar::Util::refaddr(sv)Usage: Scalar::Util::reftype(sv)Usage: Scalar::Util::blessed(sv)Usage: Scalar::Util::dualvar(num, str)Usage: List::Util::first(block, ...)Usage: List::Util::reduce(block, ...)A  To  y 0Looo:o *:JZjz *:JZjz *:JZjz *:JZjz *:JZjz *:J .shstrtab.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bssL o  y%o::2o0A LLJ  S0NpY``g_TTe2ppmw~ܚ܊T00dPKK(<lib/PKK(<script/PKK(zn0iZ5zVCUQE?)~EׄTH}$n3kLFg7uC '9dE7G_ϽSQVrmՊfI0VYh~ŦV |FP&[N`y.z\8=פFwTrA9rUL{xԭ} :VMTjj>JM-{iL꒾1YӷҺ]LM>&ZjgXSuTмC+ɠmFׁ'H'9OVD%-qkF/sօ ;.{992T ᮏ)M/CYcV< c3y$Z$,Fo !I.rE<7^n̚hἄN}Gt|T8 ףNF" jZ4N-G5hܰa+,p̱Mܙеh"m\^$6m"AHLOƛV#Iɓؽ񱜒@=݂Cx EQX5+c'9(j7˹9)3:g/ji>{WaFCQsʯ+f d**w;H|i^Yv*fE@wyBV* F6fDm5|JiRe5=Q&Tfuyv)OJ׺=. GiK:o+94%'Ľ>& Uب8굪*u9_']e'rt˵+/V8"b\ L- 8 SRS3gf9yB]K6\zz1%" ꕑP2Xɥ<۳Zz[b"#]~.0$gdqA59Z,e9g)>\` 'ά;;JرQ׳rVFJfGፗWI9Fs+#_YUpӉc!r8=9Ds}>ȔIT.-0DGVe+"<ӂRMP9xQc$|IقS53,h?gdVR"o{KeŜ:oSa=!T9­m6W|a93+N sæEV(v{c$.&cU+璛 YY9`sysR-,/lؕ~+yƪUFPhwh;lƦ45a;v)O.CLbV뼠8c297R{R;*lJeuQ=|g~Ŀ|V=8Yмe<^76N>Rػݤի7FE[pNeUo4?7F<=&݋p?jz13ԥ|S+ Ħ9/vg<8m/S ^p6I/<Ѱ5VجVĢ羅 f 3x;^2ﮚ=ƫrR]^[s+s<'] Jv4]3q|>nBxt\o)!$/CULs|B.ͮx/+e/)-"ُqt?_&&訥:I挸_m*܃3c+ G{,Cp*CzkLJ0މdua 5V1m+1J=G 0Z:F_ǰb uM #hBJa\CC^Zb蔵#{F_@ugZ1V (T*Ar_|x;1Hu &Gp ׋ \fp1 %eXS]LgFX@y B'.EmX=l]86Oŀtl+'D0芋J7W#\ݷ/̤:+\.ɊdEmMbŢcX%m''po! _jVtN%4D D&n,X\8 jsfǍ QRXtMG M@u}&Y1`/p EB|Q-( T0|tMR3s2 G },DJ"tiB]g}рҽľϱg0<X@ a04|S6ECoƒQ<Zx:` Nh <~5򾥶×( |6G UA,sёAvŸwh@fr 2g$p; m221l ķ1xDf0.ۧG@XpI4Si/y%28:hv~ /B@C4,)i8l#~H= TUG&:rg!"/p(aP L B Q;} TD6Ņa&aE B0»%_ g_f.զWPG\`3 q^ `w"1lc ED[7IɓYp.'`9=:}͜F76{ tǝow xk?<A|u6F@%`cp#6No?}ߨB~>2bǔX\-WqZY9rWUYb{y/gÿPKK(< META.yml-10 =։*P 7@\ JSS,ZT! ~ L^og>/0IeԶ B]4MEo(52JnqP'!^QlY:Img#6nfϳ{nfh,h=fiofV-cYYάu}|S< >;6 c3V퇇׾8j`^^cG+5=۰ؐ///[ћ/l<6~xo`K6fjWL}eFos!6o~Kn=vg#`{Ίq^^b)8eMhy*;-%n?&_Ng-ҐGeW+KhpĐ ǀ5 >/H@N؈ή3@V@&H4xBEaQrFu+vO!-FU< HOw> n qK#Fђ`D>K|:LŪ[ա ձk!" 6pXvc :AdX#k_hd_džļ ;Ѿ\q;E=Zd>'r,TVW<:dĻ'S>pa棻n}$}W+ԀECR\+`kE