You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by dd...@apache.org on 2008/03/21 15:28:12 UTC

svn commit: r639655 - in /hadoop/core/trunk: ./ docs/ src/contrib/hod/hodlib/Common/ src/contrib/hod/hodlib/Hod/ src/docs/src/documentation/content/xdocs/

Author: ddas
Date: Fri Mar 21 07:27:51 2008
New Revision: 639655

URL: http://svn.apache.org/viewvc?rev=639655&view=rev
Log:
HADOOP-2796. Enables distinguishing exit codes from user code vis-a-vis HOD's exit code. Contributed by Hemanth Yamijala.

Modified:
    hadoop/core/trunk/CHANGES.txt
    hadoop/core/trunk/docs/changes.html
    hadoop/core/trunk/docs/hod_user_guide.html
    hadoop/core/trunk/docs/hod_user_guide.pdf
    hadoop/core/trunk/src/contrib/hod/hodlib/Common/setup.py
    hadoop/core/trunk/src/contrib/hod/hodlib/Hod/hod.py
    hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_user_guide.xml

Modified: hadoop/core/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/CHANGES.txt?rev=639655&r1=639654&r2=639655&view=diff
==============================================================================
--- hadoop/core/trunk/CHANGES.txt (original)
+++ hadoop/core/trunk/CHANGES.txt Fri Mar 21 07:27:51 2008
@@ -131,6 +131,9 @@
 
     HADOOP-2373. Improvement in safe-mode reporting. (shv)
 
+    HADOOP-2796. Enables distinguishing exit codes from user code vis-a-vis
+    HOD's exit code. (Hemanth Yamijala via ddas)
+
   OPTIMIZATIONS
 
     HADOOP-2790.  Fixed inefficient method hasSpeculativeTask by removing

Modified: hadoop/core/trunk/docs/changes.html
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/docs/changes.html?rev=639655&r1=639654&r2=639655&view=diff
==============================================================================
--- hadoop/core/trunk/docs/changes.html (original)
+++ hadoop/core/trunk/docs/changes.html Fri Mar 21 07:27:51 2008
@@ -56,7 +56,7 @@
 </a></h2>
 <ul id="trunk_(unreleased_changes)_">
   <li><a href="javascript:toggleList('trunk_(unreleased_changes)_._incompatible_changes_')">  INCOMPATIBLE CHANGES
-</a>&nbsp;&nbsp;&nbsp;(10)
+</a>&nbsp;&nbsp;&nbsp;(11)
     <ol id="trunk_(unreleased_changes)_._incompatible_changes_">
       <li><a href="http://issues.apache.org/jira/browse/HADOOP-2786">HADOOP-2786</a>.  Move hbase out of hadoop core
 </li>
@@ -79,6 +79,7 @@
 </li>
       <li><a href="http://issues.apache.org/jira/browse/HADOOP-2822">HADOOP-2822</a>. Remove depreceted code for classes InputFormatBase and
 PhasedFileSystem.<br />(Amareshwari Sriramadasu via enis)</li>
+      <li><a href="http://issues.apache.org/jira/browse/HADOOP-2116">HADOOP-2116</a>. Changes the layout of the task execution directory.<br />(Amareshwari Sriramadasu via ddas)</li>
     </ol>
   </li>
   <li><a href="javascript:toggleList('trunk_(unreleased_changes)_._new_features_')">  NEW FEATURES
@@ -101,7 +102,7 @@
     </ol>
   </li>
   <li><a href="javascript:toggleList('trunk_(unreleased_changes)_._improvements_')">  IMPROVEMENTS
-</a>&nbsp;&nbsp;&nbsp;(20)
+</a>&nbsp;&nbsp;&nbsp;(22)
     <ol id="trunk_(unreleased_changes)_._improvements_">
       <li><a href="http://issues.apache.org/jira/browse/HADOOP-2655">HADOOP-2655</a>. Copy on write for data and metadata files in the
 presence of snapshots. Needed for supporting appends to HDFS
@@ -143,6 +144,8 @@
 the cluster directory.<br />(Hemanth Yamijala via ddas)</li>
       <li><a href="http://issues.apache.org/jira/browse/HADOOP-2899">HADOOP-2899</a>. [HOD] Cleans up hdfs:///mapredsystem directory after
 deallocation.<br />(Hemanth Yamijala via ddas)</li>
+      <li><a href="http://issues.apache.org/jira/browse/HADOOP-2886">HADOOP-2886</a>.  Track individual RPC metrics.<br />(girish vaitheeswaran via dhruba)</li>
+      <li><a href="http://issues.apache.org/jira/browse/HADOOP-2373">HADOOP-2373</a>. Improvement in safe-mode reporting.<br />(shv)</li>
     </ol>
   </li>
   <li><a href="javascript:toggleList('trunk_(unreleased_changes)_._optimizations_')">  OPTIMIZATIONS
@@ -168,7 +171,7 @@
     </ol>
   </li>
   <li><a href="javascript:toggleList('trunk_(unreleased_changes)_._bug_fixes_')">  BUG FIXES
-</a>&nbsp;&nbsp;&nbsp;(51)
+</a>&nbsp;&nbsp;&nbsp;(53)
     <ol id="trunk_(unreleased_changes)_._bug_fixes_">
       <li><a href="http://issues.apache.org/jira/browse/HADOOP-2195">HADOOP-2195</a>. '-mkdir' behaviour is now closer to Linux shell in case of
 errors.<br />(Mahadev Konar via rangadi)</li>
@@ -268,6 +271,10 @@
 hod/hodlib/Common/xmlrpc.py.<br />(Vinod Kumar Vavilapalli via ddas)</li>
       <li><a href="http://issues.apache.org/jira/browse/HADOOP-2936">HADOOP-2936</a>. Fixes HOD in a way that it generates hdfs://host:port on the
 client side configs.<br />(Vinod Kumar Vavilapalli via ddas)</li>
+      <li><a href="http://issues.apache.org/jira/browse/HADOOP-3025">HADOOP-3025</a>. ChecksumFileSystem supports the delete method with
+the recursive flag.<br />(Mahadev Konar via dhruba)</li>
+      <li><a href="http://issues.apache.org/jira/browse/HADOOP-3012">HADOOP-3012</a>. dfs -mv file to user home directory throws exception if
+the user home directory does not exist.<br />(Mahadev Konar via dhruba)</li>
     </ol>
   </li>
 </ul>

Modified: hadoop/core/trunk/docs/hod_user_guide.html
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/docs/hod_user_guide.html?rev=639655&r1=639654&r2=639655&view=diff
==============================================================================
--- hadoop/core/trunk/docs/hod_user_guide.html (original)
+++ hadoop/core/trunk/docs/hod_user_guide.html Fri Mar 21 07:27:51 2008
@@ -1080,10 +1080,18 @@
         <td colspan="1" rowspan="1"> An operation which requires an allocated cluster is given a cluster directory with no state information. </td>
       
 </tr>
-    
+   
+      
+<tr>
+        
+<td colspan="1" rowspan="1"> Any non-zero exit code </td>
+        <td colspan="1" rowspan="1"> HOD script error </td>
+        <td colspan="1" rowspan="1"> If the hod script option was used, it is likely that the exit code is from the script. Unfortunately, this could clash with the exit codes of the hod command itself. In order to help users differentiate these two, hod writes the script's exit code to a file called script.exitcode in the cluster directory, if the script returned an exit code. You can cat this file to determine the script's exit code. If it does not exist, then it is a hod command exit code.</td> 
+      
+</tr>
   
 </table>
-<a name="N1072E"></a><a name="Hadoop+Jobs+Not+Running+on+a+Successfully+Allocated+Cluster"></a>
+<a name="N10740"></a><a name="Hadoop+Jobs+Not+Running+on+a+Successfully+Allocated+Cluster"></a>
 <h3 class="h4"> Hadoop Jobs Not Running on a Successfully Allocated Cluster </h3>
 <a name="Hadoop_Jobs_Not_Running_on_a_Suc" id="Hadoop_Jobs_Not_Running_on_a_Suc"></a>
 <p>This scenario generally occurs when a cluster is allocated, and is left inactive for sometime, and then hadoop jobs are attempted to be run on them. Then Hadoop jobs fail with the following exception:</p>
@@ -1102,31 +1110,31 @@
 <em>Possible Cause:</em> There is a version mismatch between the version of the hadoop client being used to submit jobs and the hadoop used in provisioning (typically via the tarball option). Ensure compatible versions are being used.</p>
 <p>
 <em>Possible Cause:</em> You used one of the options for specifying Hadoop configuration <span class="codefrag">-M or -H</span>, which had special characters like space or comma that were not escaped correctly. Refer to the section <em>Options Configuring HOD</em> for checking how to specify such options correctly.</p>
-<a name="N10769"></a><a name="My+Hadoop+Job+Got+Killed"></a>
+<a name="N1077B"></a><a name="My+Hadoop+Job+Got+Killed"></a>
 <h3 class="h4"> My Hadoop Job Got Killed </h3>
 <a name="My_Hadoop_Job_Got_Killed" id="My_Hadoop_Job_Got_Killed"></a>
 <p>
 <em>Possible Cause:</em> The wallclock limit specified by the Torque administrator or the <span class="codefrag">-l</span> option defined in the section <em>Specifying Additional Job Attributes</em> was exceeded since allocation time. Thus the cluster would have got released. Deallocate the cluster and allocate it again, this time with a larger wallclock time.</p>
 <p>
 <em>Possible Cause:</em> Problems with the JobTracker node. Refer to the section in <em>Collecting and Viewing Hadoop Logs</em> to get more information.</p>
-<a name="N10784"></a><a name="Hadoop+Job+Fails+with+Message%3A+%27Job+tracker+still+initializing%27"></a>
+<a name="N10796"></a><a name="Hadoop+Job+Fails+with+Message%3A+%27Job+tracker+still+initializing%27"></a>
 <h3 class="h4"> Hadoop Job Fails with Message: 'Job tracker still initializing' </h3>
 <a name="Hadoop_Job_Fails_with_Message_Jo" id="Hadoop_Job_Fails_with_Message_Jo"></a>
 <p>
 <em>Possible Cause:</em> The hadoop job was being run as part of the HOD script command, and it started before the JobTracker could come up fully. Allocate the cluster using a large value for the configuration option <span class="codefrag">--hod.script-wait-time</span>. Typically a value of 120 should work, though it is typically unnecessary to be that large.</p>
-<a name="N10794"></a><a name="The+Exit+Codes+For+HOD+Are+Not+Getting+Into+Torque"></a>
+<a name="N107A6"></a><a name="The+Exit+Codes+For+HOD+Are+Not+Getting+Into+Torque"></a>
 <h3 class="h4"> The Exit Codes For HOD Are Not Getting Into Torque </h3>
 <a name="The_Exit_Codes_For_HOD_Are_Not_G" id="The_Exit_Codes_For_HOD_Are_Not_G"></a>
 <p>
 <em>Possible Cause:</em> Version 0.16 of hadoop is required for this functionality to work. The version of Hadoop used does not match. Use the required version of Hadoop.</p>
 <p>
 <em>Possible Cause:</em> The deallocation was done without using the <span class="codefrag">hod</span> command; for e.g. directly using <span class="codefrag">qdel</span>. When the cluster is deallocated in this manner, the HOD processes are terminated using signals. This results in the exit code to be based on the signal number, rather than the exit code of the program.</p>
-<a name="N107AC"></a><a name="The+Hadoop+Logs+are+Not+Uploaded+to+DFS"></a>
+<a name="N107BE"></a><a name="The+Hadoop+Logs+are+Not+Uploaded+to+DFS"></a>
 <h3 class="h4"> The Hadoop Logs are Not Uploaded to DFS </h3>
 <a name="The_Hadoop_Logs_are_Not_Uploaded" id="The_Hadoop_Logs_are_Not_Uploaded"></a>
 <p>
 <em>Possible Cause:</em> There is a version mismatch between the version of the hadoop being used for uploading the logs and the external HDFS. Ensure that the correct version is specified in the <span class="codefrag">hodring.pkgs</span> option.</p>
-<a name="N107BC"></a><a name="Locating+Ringmaster+Logs"></a>
+<a name="N107CE"></a><a name="Locating+Ringmaster+Logs"></a>
 <h3 class="h4"> Locating Ringmaster Logs </h3>
 <a name="Locating_Ringmaster_Logs" id="Locating_Ringmaster_Logs"></a>
 <p>To locate the ringmaster logs, follow these steps: </p>
@@ -1143,7 +1151,7 @@
 <li> If you don't get enough information, you may want to set the ringmaster debug level to 4. This can be done by passing <span class="codefrag">--ringmaster.debug 4</span> to the hod command line.</li>
   
 </ul>
-<a name="N107E8"></a><a name="Locating+Hodring+Logs"></a>
+<a name="N107FA"></a><a name="Locating+Hodring+Logs"></a>
 <h3 class="h4"> Locating Hodring Logs </h3>
 <a name="Locating_Hodring_Logs" id="Locating_Hodring_Logs"></a>
 <p>To locate hodring logs, follow the steps below: </p>

Modified: hadoop/core/trunk/docs/hod_user_guide.pdf
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/docs/hod_user_guide.pdf?rev=639655&r1=639654&r2=639655&view=diff
==============================================================================
--- hadoop/core/trunk/docs/hod_user_guide.pdf (original)
+++ hadoop/core/trunk/docs/hod_user_guide.pdf Fri Mar 21 07:27:51 2008
@@ -5,10 +5,10 @@
 /Producer (FOP 0.20.5) >>
 endobj
 5 0 obj
-<< /Length 1547 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1552 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gau`Uhg:hN'Rf^__->BD0TZk(]t$_*VJDW;ERon^%iAh]h["7VB^5Qh'0hGYm+AVY`NJeDKJ1F0kh^BAi8%r5dhk.pE'7hh)gM%jFPo1NJa[jKcZb-:\M3MX*6-:banbPf6]uH'I-Y%3-s#52g_]h^RQ`#dVT4`D'mat#Z&HD>rcTV1e[1J!GLIIOObgM2%bnN@aY]pg%7pHJ"eY&>PS]JuZL%$M*8`R@kBj/A+n=A2C@C?'BXAB->RmNI$Rp=$V3:@8:[J(JO88l3G&dHeSI97hNNnC&+NP$37,Lfi=Y\Na+(QQ@c1Hk5deNgZrUm_b;=jR-f[(2^=K$;$pr)jV/@^%n+(:KQnKSK8Y*LV5nf<fb>*_m?S1-[;&dU[kKO>Y.EDOI.A8"Man\8-o@4_,H0E2N0.bM$Z_tAlOL#b2o0kuHI9a'ff&8O9/8qOni'=O2/N&HuJ9G:P8>5h>YW$b)[NBOYPJ*?QoL(>[6)#pYphcQH*`hIW#h[](;,+4p9^6'XAGu[Hd?B$gbT4-5bi;j&aW)kp*8-+89%BW9R-mW8jj?OD)f>eaZV-qbEdbV:C:,Zc\e?;&fPIg#QSEqhaQ4jhEaU.0koXe;j_N;q+n\a&&`FL-tZf$sPlED5[=TJ!dbM!e`Un2Q,Eh4('2Qt'U_Dhi&b#[Ir)e(;u30(?u]#72@N;nOXkIpB!d-9ZPm<QXU#*,Fc-k>X[<VOk7(tsOnpa_s!1mP[!dE9Z\5!K3&2$pO;":<6<C13(f,_5Ye-2D+APlgM50eG0Ql*hOPn?:XS?6Xpll0itB#*eZ.1)Sa`!:^RmR^1Vh=QiVJZ'l*"J04S$"N[`!S8/!/EfYaS`'WeIcjh/9?R8@UWGg-6dI0cGrE9CK1QX4&0"tBY1irkk:I9pKhb",Oc<%'?akmjUZ/PjlE5eH@$l/QU$@9-T!PjXJEPqXJ0I&Ykj`Q,9gi!]Bbi")T*r'd143%Q1fc%</,6cl:6Uo5
 \Y/P3qkAMu.d1a?sBhlhTk@PAe't2qS_m$?<rL9HlWKfDGMcXl57KCF]GQuo*!W1LA`d3\PkR".r!8+tP(f7a%ScS^`!6-+u_"EV6nJ(bH'!.].pib8MP^a-hr-$[&iskqHK]N46(FBq[2?Z?3>?nXg*N!NqnqiZD14P"dd#ca=_ZNI#Q,a>[P3eY>(r'eW<::&KIHI1IDEV0SW<2d]%oo&J/nS+TYI80S5*kNYe\R2%X[3\2[u7uk^qF1uYZZMHG:QcX>9rIL%HQ^hVOVgQ@MS.+:_8\\69/I+V=s9YN8G"mUTg>L_RaMuib*]%NH)3;8brtAJ5S/tKRsr]S0g8n=688-@otlX<A4J@CYr:1prNS:rHlFN?C<Ed$jFOf)'_FkPhjpNmFq\+\G8@$eD,\N[=*Ee)16:-W\c@gHnTLbiWRNnQ)>abT[%BCgYcB91'[E!H>\\9J:Mhu4sB>J,gK3uepG^(9!J,c_:QD4q$RdAO-&NnHIO\(%S"VeL#WD%PL#'cB?%S6ZDNDfi3G87g-IN=$-'?JiZ$-I%K/LR)2'g~>
+Gau`U97*El']&XfYa`i\'I3gk4&7WWA3--c[F89c?!rb2I3lrZ`+7;'?h#h]nk79[f]+N7n-/V-h0\Q%]UKC[)Ij!UY3/LA"0_]j%QnAYn/Y='q9H3.(C$Ih_q:A@3e(I`82AIlDk0N8`Tk'nqa)B3e&S9*o_>,U6B?"6QI31ehp1khRPo3aDH^O&&eWa9@6<'tRH:fi!NEiFi,a=:nj:bkQMpc<j*TqeHk4ad,eb3cmJVDLNAdN#b@1$[+U-2l<&.eDM;99F;*Q2C0!7F4F+N__0m6D!"PI49kSkut.i'&n6mb7K9V6PXNUK*e?_<5t233fR%1RlJKf\CQ:L%h_JpVJ4&U'!C5LQ4co89A9^'A[MbHa^%1Z_,$!l;p@&.CobmR]C*$k3LsrqEE@N5],sjkkVb"^BMg\3<dW8<+>pULjed7)7(OZ'IbM,Ui"5@;@m=BOe$^1m+&rjU[W/H?+\jfL,Q4LL./upkU,En\5G1NRc^!/8?R'mGKTGP(gI/)`_r(=/D_PeQ>cE)+M:T*^N&AH?I-G'EEsHd(0@966^#5%R`U'I@RQ?$9"q1h+u5[A:s#4rTY2<;E+QGPCk1/EWY5Z3<@ruITHn_(fGWBSt)of9GSg6$QeQ/%_I:_"V?0uWf7$Ml8]Y'kBSdpMb4s?N0=gGC_cBF+gr#6j%/L19<893pcfUD3XG0^SR"G7Sjt>Ii$_ceim80?FUp']TcH+K^Z'N6;n66JXiu1PMc7u#P7[UE+@3PD/W>g_";!et,eqR%;F$g#VF?5'rAK9<rj=i(/cnS9rk<#X5T*o\K<^sJ&3j=FPg,h[KcXeCX3#l!plWlfJF*-LWRd[apBC&O=D7XPg>R\ZX(3M8oaQ3nqOL3f?csR&#1@)*`Rg!=L5qqu8P%7f>NnDqq._cDq:jmR<d_[jY5%%PT`Uig6-ltg!14?FDHMB&An8r`]In/YL[AN&)-jDr"*_5fF)2DWX^R,L;S_Z]A>F&
 0>0IJ"roS5<4VbVujg895DDm&E@G?i&%/Xd(]Er>=>'ZmNGQgTR"CV.jB<[pAY^]qsXS6Bu:H0'k_!W5\JAN&q%+ob*0`E@,>jq$;Vnhbb@/V@d\%@*br+jsF\%@)+Dr;]b/-ksb0Y,uF+V4_/ijoTc0hiULO0gI%`@J<LL8<ZD*^Psm4DrN0AD\*:pe@N]H9\(e1C"q?ld6&5'sQ#S<,&ABQreS4]N&J2Z!:qENb5A,'q,uO?1aBemM5>LblWj=H\TMG7?S_I5`U;%b%YK9<frCL"gOg(fo;3!S?S;Wqt:'1+,%C+=AMCph6f-1ZTe!#\6+V6r<Hq".2dM"_$XaKPFVTPo'Xaq=>a%=(k+.?6>PI]_"d.,<;h0]7:)B7EXW,hE#BldpQXLbj6bS&5.LDQB%5Ugp+3nL%_ahS<LO^D^)+<lEJ!?Hb#8jA:hMueD=F]W)2!6!4Z>i-5esuKT+H2`&ne-KlTOFr=g5lN_:QD4q$RdAO-&NnHIO\(%S!KEL#WK3bGRaY1Lj`+=jt8nE*8Z,m@]lZ"CkV5nVq.`LAi8+>D+7~>
 endstream
 endobj
 6 0 obj
@@ -289,10 +289,10 @@
 >>
 endobj
 56 0 obj
-<< /Length 512 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 515 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-GauI3bAMqd&4Q>@`@T-*Y&.t`bGJtl<Dd*HX0rBM*"j^:P`SrEq\kE&PH#-B;U'qX@Q\]a*Y/qQI*@.LKHXKE(ikZ;edp058-_LW:l#u7>Bo]VM?`POac/ld-L$UW"2t'Ca\!'$N:LS-J!+D9Pu^[\^9];kS54''D8j0CW&0^+NRZ+bO2`t+cmc$K7N2pr$[dh;<.'@6]EnYXX>f\<hREkj[7KV+Ok]:G[G%Li>#sOKF;!JLlp9:0ZbNaYNi6M:pdb+XJTioa_G=-3o`G.]hU0@FL!Ao3;hu!+;4*)o-jN$>6tgCEm(jG=`?M,9h\A:7P2!@bHD1/[r8pB)HG@a9=8=?9?JAnI)gHr<&fb$>"@ftM-"6%$Gf+->a`3AHpD--t`-PZWfA_4Ib?d'k0HR)uUC"rr4+MAdLE%N:LFFr^?)mIj>3Dr06:Gr2r+F0/<>8qO<HeT`ED`S@=3oC%Id\W@7)itKAGTu<!]ataN>6<tSYN$)nkE`;HM7`"$4%@~>
+GauI3bAMqd&4Q>@`@T-*Y&,kIA^`JqWi3+_<SIZa%Z-EX$D^]%^,@*M;Y;2%WnD>]N+^GTj)OFU:Dj_&0Z7`36fnrql6.VmWaNUJ$Et'2*hHUYKd1hnpngc[D,Quk4iE']nOAJqN&&)[4%iI#$_ul?X,KYCldK'@)mLr;1.aoL,.08rPNfpiFNW%d-mLjf^no[Q`CHl/2kGePj%]0X2g3&CY*++#B;YPrV=mJ\Mt/rn:?)/1h$Y-Es)77W+_oX9rXh?Dn92fQpmFh!6/\BV48Oc.5VGi-H56i2nnf(J6%kI'-QXHgC15?&jr?fPT]"\g"$$tj,YnZ=A_$eB5&br&VP:,='g&VD0LctP@#d2K^Ms<"<PB0OFrm0YSmHHm,?):$Ta-\u=5L?0T4DD-NEV;>oIDcd1]%Yi$q12L;#Ofpg8uu=nPO219f&JJT*=tW11Cs:QlFR]!Nij[P*N-cEa?G(PM\j,nrTd7BZM/rBtKoJ:$p*O694ig;ImH;"GY)*('~>
 endstream
 endobj
 57 0 obj
@@ -626,10 +626,10 @@
 >>
 endobj
 104 0 obj
-<< /Length 2351 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2453 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gb!Sm>BAOe'RnB3cl:(8fk>M0hEjh</o@:>bV4^*[Cir7b$(R*@a)%=8@#%4AB@DW@";k;d;I7$4dYWmUb?=m?d?rG46+m!IUA\c2RBM.#iL3YYF[Cqf3sd`>Ih-'BA]>00g!"Y$SCe`he(%f]09lF&%A"6T$(U2=L4"[o=;n(G%"Z;25g%I@\NJ'?[o3@VI.$a7DF(KAspeBrJ&VoB@/rX09\dBZRjRIhs]EtWD5i)(]Dp%>+.e?(Y17jm-?Bk?(])BfIH:ZOE%##DfM[PRB#R4bkHCXmVK"e67.h_aHc1;<\flL+JS-H.<BTE\!H'C-ER@:#/3^:$@e*0ZGeeC.[S6).MGCI*b<$leE@[C2mQ7!q>%jI<-^Q;DQ>n1Y97S]#EJhL3*t\0E`!NkZR)b)O9Og'1bZ1TI)+h_"M5P6AI(UPb>P8Q3C=Ns_KO-/IN1&u)I]V]'0CeNq0O<pL!nZI"SdAfO$XU^i:GqHI+;Pa]pdeiOU_?KeAqq+^HfORV2sVnh@Gt]oG&[jZTh1P],sQ#LiX[\'BeX5[^\I+*NqL<qCDoh`c-*CAb.Fm#J1._D)WM@]DUBhqjjqIgqE)VC7DH^<6;5OmPj%F,2Y?A5O9XVb@FNC)`=,qcUR%-1;=mA[?`FqjMf$fXd[L'c4[h$iiN-ip0Blg=jQC\c)"P/d7(UG@GL.#rW3+CIr=[-f\ttn]3mb7plJ4`(0oa2A(3V0+`Jr(,Hj0Ua#T$42V?ZWI,=(bL;QdK;ZTCo"NjY4XYR:`M9&MVg$65-!#2S/'N\ZO'!A&K"Plob*/Quf)Q-SSVooc#OL;mgD2%<"6Ajf,+Uf\O8Zq4NcRPCqcN)7*/LPu3qCW/#5c).C$[p\7123Vh(<#g(.Ei+UqbY2#aJ5*,;<%\Rh,:oL9_+Pe7OuaR@>4&"<^LAYU>CfVBK86son:X"l`^IG'+jd<.Z8%o,rJnp!04>EkPGRDb]NhgM2U"qUG?D<>SK.
 in8hr1lMNV<^l...@qJlB>dRU`q]q:;ddXAjJDZ*&$Bik.lh]5a0$"L/eG6f4n6XCd.A.p?_R2\YgS4s9]s5K81'R8&j6V^<N3DSKdhNIgX;\$@rDkD'kD9k6(37*r2/`Zm"PV`.GgO\KMluXU.n1.-SjiGVQ<#nl!YD<pRU[DO=e(o_q+]gfs4s55n%9tf'8e5B>5irK4jp.t^VAJg5G`=$AnJK-j2Q=Fr'aq;q(&_0#ecdZcSnaUQ376l:558!sh8sj'>J3'4D%?1nY"*aQj=:]AejbkV,(jX?WT3?m.`Fd#Hol#B<,h\$=hhH[.\1\ECMA`0<A8-24sPi@TmKM-E!m-^]mr
 "5r;d-#CpN!h^h(7#]8pM]1i6#:GT=f8kC58&$(onM$0G<j43<kBp7K"O`cPFI,B$BOi-!r,fegh$(7hJ;a_^h.>VQFsmQqT=.VW9k,-Rs.E_1fUBG`*R21nH`5`&08InE.3]_TXE>T+NbK07g?+%2!uM.JV->hqD@"Gdu5-\O25cCqB+6R3(C*!VFGr\c"E(NORNF1:gpBdE((?C#=L1!C/8[,=\@KHB]7nETs4q4bhu"cPS[Ka7Ff'900N<BNb9[GSl<(-*NtH%gQgkUZemMEK7N[u#(9cdcc96Rn$ECYclVgohi1L&L9J&^B;>L)djTYF!5r0F0U!GIl!6D9D.(2+aKEe9;k=QM#I.DI*Ojr<^MdXM4~>
+Gb!#]968lH'#*[5b\a1+M^%qnDMfFQ:=\'T4ZR>\Ekmd0#&=]&!D/>"^HTmi)B<^,`NH=FAJGLPkjGXhIK9:SIIZ@oif=JQH@l/]?)4X`Y+d=rha,mY?\a*kUoqI1CpghKp#:a>(Q^V"ipb1i&E\c;RfmFi5I/LWS]$53Yj,a&Jc@F9Yg-!AQkq$=$LL4o-c>BGq4@W'"e@^7I#C0I%qJ+4+P+McgDTCq%p>_pCI[ML^:.;7<r]kG'?@0([0P^HeYSAeqG3ua*arE#Xktn%Z`DXFX7adcS6k\o4AV<6"n]b6q(HnWn-l*;KO-@QnBLj^)P\c\I#fsk8kERrc$q_[:R@RTmDToq01Pat*fcoh-cC@9BT24.dk=pn0;Buj24$YE+)!N>4-LA'NZ7_URYp41oFai2?KpX9Iq%LO.n/b-(&Or6M=gn=_8&6:Cm#,OG7-M,p,_ol$$^*ekr2I1<B#N\T^s\H)&AIYVF4g(-*=WLXkdN.b^nC#ZZbAFJ:u%N%^cQOds1F\-?hO$EpTW[Q%bt<hBK-rPr",iTnKgbjk_UA#q+=),8AQgk=*3$'/^"S%3mA#HB>>s43,1u(PB@*`G:Eo`RFjecCo"i([3'ZQ;^1*?6VrY/PC7";bei\`_g.\)!Y3Y9ZYARWj*dhY#n^tKc/"q['3+-FP+e^?Eq(=!p`Y$3R$ip'7)]_rZ`?jNkd;;`#CFH5hb48P<s@.jU@g8EP]B*rsQ9F3c8mP`N+':M'lhNLoG,6AM@QM"PZ_SWW]:2.YIRFn[r\nbsT,fIc%/!D+`Qo"OPJWB\5IeJh@p_h;.03RS13Cmm"uiV;L/&k4UGM)BlV8dK=pnkb"i'r7GNtX/_mCq]aCJhNao?<qQ%ML[I[`T9f+Um4`NN)NTlV:L]*PP(*!&Q.!",$[kJ'P2>!e5e^Q8PqbQ>Q[7_L$)XYpWm%b<TgaaQY:#X1YjD\"-or:E$B9nt5.P2-6CJ:Nebh5P,DAN
 `._0%Hhm%G>m>^js'91!NnnQ($mEG,#1E91*&l.b]mIl;#C4tLL9i[1Wo)j[7&FJ&'/oqYo\eLBqa;I?BS[PqX!9k^F5q""'ia=I,IE>UCs4f5g%g'%RqHNO`%AhsBSNkSj/"SuUp^k8<\\"9Dk<.KnIf91>ST258SXYCV3n+uO)BV"sPRK"g9l=3Vj+W"fjEA%qkgh,jJZD;t^3b+.htTBVmRn$!^o\[U^hS#Yi?(NE.0Pko4j_SjG_V7<1K1c([s$IOOV:1RkZ6qaW,a"Hh@QU^\IJKkMB0C^?)\[cO%>Al*K<R9csIog*\XS7/"KBZH[>5@e.@]%qF+F"hioMlmO9t]\'l\%3Jta-=:pqt]TZ\A%L8ks!m\k"-r3k@8aq=!KgnXG%rEu?+kjDriIlptY"^b]\s"+Y)MLA^45jl2@I0Z-oRkWI'<X,OUSkMO<d6r8ni-?i>V)gT!REeW(ObSd;(<cPWU3tibNh`^7@;roL?En3W\_@"Tn[ha?j`A^-Tu\coDU`0o`WBX?EdJ!e&<<c9qNgMca+Zj.et-ea8;sC%0o]c"%>GJZH.5ldq[2ai%]EQk.#r_>,je*>f:Yr+e`7A[)PspT62mQo&IrE+<aJu7]$4<jVa87'O3V)0qQ!/*d7]6*N/##i8QgQS3V"\[\UeB5'C$LNO!eqkIfW/U3[1V+du4p!o5]h=_uK%5OOP3L9q&ChmWBe*#ht!Og,S60&Yfe7-Dh0Of0V@I<A"WXCS\I3>1rpLe&%#.f9bgC$Yp6M9Ch)d-=+Ld$9_-GJ)YW3^]IkL=HOKQ:QA.JPggab^#hl@0U;t.k)u?_H<^3*'8Kn5P%paZ-D<?IGFG<49p8rF?umpWX[0@l??,(GdZII@kmi^]J*g]c0L.GLg**$WkhG\%VH="d!=5P.@bRYln[M1eB(q1H_+i@VrRPVBSQ9Wa3uU*]%@\W/F^9Nc:0r9D24pefbgQ%G2-7Hb?Q]!_Z,\LefK
 O@Oj4s0=?H,ppS90n6QPCJ5Ykm^iF9t7\J4B\kg[M)&$a+ThGS^`9g>/1$NAO'C(tkr>LI_[LAog)^7#Nidb:1Sa?s7WRr\Qq*=pBikXOU:jZ"62XtqkRT$+QAdB$sTEi&_:J<s*f#[l#jM_GPu7H%buM?GQgE*/c[m(lAqp2[Q'U6PP+(%sEl#nif:E'V1F#7Db(9d=_opN)YU%o,'Od=)d6FH;b6:)&';`Wk2'/^$<q4)X.g+\VLH`+]U+pOq'6b!AC5PlP+P;&U,*+^R3WjdW1ia%dOChWj[F0OA+ml-=>iqQ1\(a2`b')K(!k*H"&+VV?Mfl`Ub'`sZOPF);8]JWn$)I_X5WAr%W[12m"+lm,mWK]nUR$),\*_GpX@fc*%n0D@uUT=3t+p<a8)Ie-f'eo,>OZ$cknJDWT6U-8tlZQFISNQA^?J\LU.p%`sEoP\<9gLnL:qirV6!cibkpX>*n~>
 endstream
 endobj
 105 0 obj
@@ -641,10 +641,10 @@
 >>
 endobj
 106 0 obj
-<< /Length 2233 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 2386 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gb"/(gQ(#H&:O:SkcH9F1Eo9QdQZcuRnXJOC#cQ2D%Xi%D6&deY:f/-hfg>Keke89]*ZiN,"Q)kic$kuk0,"A@PPJtbjK,n>/T7LZbRorjgm)Bb=2#L/so::b,dp5bLnPT(M>*T2W<leB=GaP%/sbARb@'R)u`[7Rjc(^c)jEHrUH];aR?5kCTT^U<5(uUFV.Z2b(n#PgPu6=(-dB7i*a,TbA<dR!RiXHk8P/"1+JH(2;a*Z26W0:*it/B.urp-B5E81DCcj<8JJ&dj7"H:IQiF!NOGQ^_f*]a@8Li@S]6"8oXJjqn:'2a.R$';AlUO#]c"g]KmoBP]ji/M4I;0]bHO5B.lI629"[oT/>lp]QK/T4c_?F@ZHdB5.KD$%hjepNA2q1[?a/-8<@j9m\#L8LGOJiIKBEEDnZtP/?H]?@o(DM19oetU:rRk=-i=*rD*\=!H3=J)0Fbkd&O>&a,%-'2g?nUI.a)@j+pVJ0FX_g-5T062ijrC(o:%:'%IuENmV+@l_H<f)l0K5W^.o"Q%o64cXORNi]W1S%WN.^I.K_FE&<=)BN*G7,p%:Cl)".V)IQ-g<6A9fH'a@'d1S'5"ZpC:2/2bYoW=W=md/\/bdY13(Dio-X7k9U%6Ii)L`-f2$`::ssKO*#F6A:&keO$[+'9)2N5&kCGG6mta@LjG""QLqnb-E^^Il&9COu56+):"*&D8_O>W7!)pgPXC*.f:ohfZ\ape#=&V*oZ->#ZAEUA8]1^Ph'CldC+!3*>4,^QY<8clO^1'(/GAiBuIJ4<5[J#.)Otc"Zhl-rLUgR/BN$a7bB,Q23`NgQ+"s_AXukuBg9[IWH!4eS:82m/46Q+Q-"44-";Ng>ABi6SZlhVEZuXU+351Cg:qVLdtBUco!0mbltg%i:h*0%I:)V@I<!JgDq00(nrrJ0j#0nGN'iFHrp'30Z1W+o-7n)'lf0%+055hS'V?KB?d41k*=)i*+bh.@=(;lhP-Sp
 3(h2#j)JaT'$YXI=)sgI;[F=fMA&rZK&@^P]7Y5cPVdja2W%:*hH#*U6PdXU)GE??gWggZ&$_s(..IEiQh21pb7$Lmn-*(S#E$p7Qi>g2L@CcP<gZuY*Va(J:+AcVG\I"*18:a:tn_EPsE5!eNJC&K:WXM`%hR<A!kNQ%bAYDlu?$Vkgb@\]S[')#1Js!&qhFp#Wn_lnhp*HCd31AE-&j%JrCX@_oEi#EjmBl[k42K]h3RfT;Giqr`ZFtI31+&l=")"lN#!D>JF7Vgi2;U_O1sYf\=>"BRMbIXD;ei3Pba59PHW6O'FLreeosBF'ROY1!:%[J\'j;n$95^jgp)sIaiqFVDMm8"G`![A=_QbO;*"FOOjTK2*7l`:?-kD+aQp0oOXBJA=m4QhfiHNfVkS(nr;_k0o*D2/O[]?Z>WmkZTT-d/hT=CeuLN<`V1\*dt5X'$a=e1VK_[,_/D*sBd;HJW#5_E>!es/f2XHK<ZE/ie<=\tteBt=[37hn$`e9RR8Pk)#q)+@d7CoR659`)?D)*"s08OU!K&CKJ=nf1Nq2*GsTGUW\7a!$#SFRKEh#l$-0A're?$oF1c>Nd`_N(?&s9.XHQ/N*Jc1''3BZV0Aa(;j.('r'!^b@u7K3p-Z6KnAkF)BXdT1s^o\c*K+G8\=u?.CQddeEibq*G]ORY<lMNj$42p:o#.4N>e>0^I,E@Q=qE4d=kp;I3i\!ps`\($PEA]U"7=^fp1"8i_ELlW!TBm6)LRIo'o;$*t$B6K<ils5/QJ<HpZ>$3cJ5=_t)%-!95]-f%8NEcV\]T>MAg'51Q\8kLc0I@4#-`^DXjUSY*YiAZRo642!ZYYYN<h]1stcW(e/2kkKV19g'!d?6DsV&@@eiB;Oj)m*0f)3YJ/(%IiXc>tTN75\XP%R*?&Chou,3Zjhj2&CH9olZFWkU2=aKj@$NFGF'h&WAa,_l;GmpJ"fRn%kcJ1PWOQle%SG@50)U)oa`pH.ae
 5Wf:fXi#IGbfg,Ymed=i^SBOd>=c!0MrU(sRI:`F!CX1$tNc1:pm0!h.^bI-:Zfi.M$dDrO#e`"@13f18*8'Q8%%cMSP!PYI/S&"U1U8skSl.AK,aT;FCJ.php]D+Qp95V*!$fPNXeF(b#_qmN>3lC^@[^]RNq9U&4rd+14g--:oHIKmjCOcCr-g36n[d=O!]qjrucaR>9`uig2g?ieu]-k(fcK"E0<VpJN5.X%lG)=3O6MVa61'I%frAkWn~>
+Gatm=gN)%,&:O:Sn?(qKN"We0I<$r8g*TO_W9lt,a\X62TqM`0,bqkVhrRSfV$JMa1*1cFRTSq<m+G\.dH^#]lK[ep>9!?cFqrcU[XoWP^Rj>3^@pB53Iu*_@BH_^]m@&sqX-8K\-r=@j]?W7c\<NZom8ig`S@_!46t2t*qS'of!WsuHLUKSqYWItPhJq!T@A0j4B(p[pfSAdaM,(][T5UEl0A*rp;0\]fOk[k26aU>X%Loa*9R.2=7`i"._.1MFQhb\WPnPKU#4]&-UN&kZQSb9SCJC33$^qT(+O_s4Y#Mf,0R""87aDXj2OT)jJ!Pc>:G!PTQQFbA1=Q_-ahCOA,Nml58Xs((uRiQ`I:&]\1Z'om):]#k<%2-QDtpJ;%MFKlbdM+aCU2;Q)2=D8u,#;;Z&Mm30$+I^t[/$pTiRJU2I81[^)(5J?t`VeoKTrU,lem)nO79k\5gJR\Yb#W=Tq*Y**@R@oWL;&sJsc3+.+J>g&[')7/$TQ,-71d8[M=iBF3;5WW_F&*WBic6t7OO]3Ml#<`ZOP2]E$9?QV>6M*I]H*U"Pq/FaTa8lj4[VmHM(-I/,PP#[t6n+Db%Iq;LedXf#ii1NTi%4d5HpHe,"]BN/aU[<=5itZdl$I5@WA4m;2^6<BXjs6f_V&P.ht)EWUPPrL=97`>'V%s)a;9Hl72$d@0#`BXRM5W-[5jRjNbpT(UGB*F)hEOI;]8$+ba%%-GrCA'W`2r1*jNMAa!qfXZbhAMDA-.i_td20<O-=I1-YMgCp)s[X_OeOfDqSFUlbV."2?Q+4J)`(@W*fBJ^'ob.<o/=1+/*r(uRdl.<sU8j8Qm''?48b!YO62W8dRFM+5ln\H2-E?Tg\=9srcO?)cQF!4WOKbgl:6.AXYuA+jSH<J)3c8;iu<mp[35PaXla[%Tc<bF>697p*G"9N#aXR]nT>S<b7[!d><'gG^[n!Fd+0DP/AX17+J"-^8772mCeS3-N7"fV+J
 3YI>ukIGh7=M6*n-ni)or+CsnF$8.hBH^R2D\6j?sb]XCFmaqe:gHKE]Idocr_;X1%ddJ:;!3'S:V#WT+`qA^ua/1CVg2`"h?(f'M_ri<</A)d%cZ;DgftkaU+mChFm&(r1erQL1+iSA>O%E7<"t.AC\Dqf\C0F5Y/?rJjF),/GO2igBpuf*\SfKN2o=pgcYajU)XpF**`e.hVc1qo@?]2NcC.p*;D;Fa*GuLSg+"M+/10P77UNq`$2g1TF>4Q*>$.aN2"Mn)/f1]U<PW7)fJ($!tjL<9"?DfFN"H>&-EGc%X^I$;(*0M;0_#=1?IEPSMlWmLh@qUs03'X=O;8c^$U'^p.Sf?2;5s4$[eA348L_FUB(*V^.OF)V=%-!Q'KX,o&N7r@*hRO;X\]_q%3KlrVoB(B2V#K!Re*qT[&9/U/")"2mna#,8;WrmjP6g^G[;'t+-Ujbr1XP_r0\QYu_@TN9R:2kR)bBj`Uc.=sW[[5UA.MR?&5H#PdkB=?F[FM_)/&Y<9>h+\DG=@@IDT#9[MZ159]QO<mJj,'C^_I>)kH=Jej\2.D`$7S/k2_L\3.rrO=up7htDara:/1DpljIA`mX%g*qNeu)bQ_-IE/7M4t#?Ka3GL-+HZc/+QF4qr="POACVCu%'fXON&c9o$In5CNnIO^f;qol3RBq/UJZ[IRk@I6jF$="BY<jT0`rr%2T^d<&7gHoVe+Cl@l$(0Zuo$QBDdAaZ#HOaSGfE#I-CT"-_.A*g^\Zbi%7cV1cUB[hk(qP3D>A)HuD4q>g,g\n^qhJO-00CFO_0tkma_;$)N)mdBJ^64CGG[O*LmDLUNGFQLrpJQhg'Be4O.[S/KfJJp&`1&4,Fc9%/@Xa,Lc!h,dOlnn%35jKk3agAU+mrjfh[+P,rdQoj$noV4qrCdcld>V%Fo=>qWB4$q1bXj4Gd7b7`481^+<"1]f4K0rAt1;>1aQOn2oDj.gN>S=W,O"R,ofK^eCK6;
 f3Cl4&k1]R&U!^#D*R$b5/Mcnt"FPC)$GD$U]]r1JdF58k?*Ve`e4P*!4S25LEQV_"^'Y7kpf,0auc/\MOD^[_eLHEsMJ4&11<E3E"UDL.RgpU"O%hQ**1]\M@omKc.H@T8cWl@&N=6=D+OHo&Si"B#uQbXDVjoT?`%qdNS1*B5a]/&&*Q#Wm]H$&]J=lf?Y#`R'"628qfKi!'4^p+rn.`q7<fF?1g5(^UJP6]DPR?9R_p8c6jFsp2GaQ5=$]'h-?OimK)7j#q[r@DWaU2Ws!Fjf0-*D^H(JrW<@]6BnW[Y<)0DU<b5PT0BujFOk^X7Q;'QCD_-n$$pl"N9KPb-C>Q=q0]\(H;4:`Tsu_Y7F!1fg!#I9pm:t[N)aKo[kh.ZR`D;;PHBt?h]N)q[W_;#$:~>
 endstream
 endobj
 107 0 obj
@@ -656,10 +656,10 @@
 >>
 endobj
 108 0 obj
-<< /Length 782 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1333 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gat%!gQ'`:&:Ml+pl2FE]s_G6o#LmEJ<0aCScGnJ`^u.&]:1XhlJJddX.;.#WiB#YPK_7=aViE1idFM5-P(jb>Rt/"+9Fh?R"*94qdm\g!L3X8mtZ+2mG#,E(gpeo,ajEK-Y.ZCoStJQ32.NE_=,>b6J)bB$^*0_M&i*U#E5Cn,=$n%=.N!,".#b+]\$qFcdgkRSN/??6nKrh3YaM7Ur=]qH_-J;pc>"rLNMUFCn-G'SQ8YMekkQ:=S&*5:0"U.p[qRgAL9i\9rn5g[KEf0KU@g1;oFpR5R&,:b>_LYb+_'\n^cG>Wp5Cu>P!1-nkl/U>Vb%^`Ck4E)kLbN-4B"aM_#45;jWq/OMN).,FPDE<QbF2FS4.>a+&F..+?qEA]p60"hWi.Hfdg1N2Ao@0/_fXs#R+sO(aLPfkJoA2\r2m^"HPU$O6s6Rsa7Fa%TQGVo,uV_Nip(h$[;rq(\u,1aeHRN'SpoNB7F*=VUHnl+E1Hl!Ih`jNc#=X/QT!Y))mVg@DiCpmmZYU#mbtd5:<43KDTk:Omc>QZNiY_f6s2ioA<EQ0GU8atXT.#qIb4,"PKd(1J@p')-Z8nPngk)^#Pt*!QNs^8VG:+N>*#dk<Kr'>m0^drE+5"jrq7>r%@*(p[R3Qs"(hEldTfQm3GH(ki(,mlVDM<!5;E@5P&$(m0n8B>Iuq?lUj3;,]"5A%gLKI3nJZ-d&Y.N>XI*/KtIS((J;]&)M1!g;Q:![X6tuA%C3N9"V'RNa$u9oq9K644rnol<0q0G4$(f)7gg~>
+Gb!;dgQ(#H&:O:SkcGesAk7g/V/Jqp98`de&a-,F(:$B`C*c`XbAR%B41^hIfs5(o85Uqhd*S3h&'l5Tr-G\qZWTGmQudfXGH6f<l?Jm*T0g!<C[NpoV<aAgfrfd0]j>gM3II:-?bU(]CR6sV(%%M>r%Y*nPTF7aE&O-UgYM=gb88GGcK6KnOsd0TJ^IlpnEAf83N<ll@@-_k9_(Od<OF=$>,i+cfL9qWF0h$/k.3%l0%hU%2G;e;F'Z8SL>'MNg0E5UU!N,k9L/gH=N=!YATn1uPg]oLR+.U4.VJmFE/>D6*-GNSLiK^#bG,JKH9[77&]9$[U9C/O1du@h6YImnV1aoK23fZG)G%!RLIU,"WOMUnr6iBhcCuR3?2f-)(a[%Z92;t&ZeKiX0u3WDehNfD1&d4>WFt$(,M)ZL[4r1!)(O7_iJ<P8YKO$-j0pi'Z3^!h.EYMp=sN%d2"aa:`+n&bSktIt]c:+8bP\(e#ttH\(>;3fbm"<0]%g=T<)lcV(#j05%3Yd7ms9t^CYY(Cqmru$VAm,0_=4<Rr1JD`k&cnX3Eet;>T'R;%Wa:":&9g%N;&/3!OA-o+$)R-d:p7KG-r)LkX.5'3*0DMJ`mAhe6OCg_Ca_0hgb)"pIiV_'1A>Y"Oc/A>n45NL"NugBr[e;^k8C2.SL)Wot.'GPV+>WbAQN;$-MRoRsFU.m@&@h"OGS=VC+,>UG&+ZK"uD3DioKl>&@t*mL<AM$c$nfCH%e&)B33!m30L=QPV__E_=siM%t?gPbl6Rb9gRq91_E$D`\X%#g^e,rm;iTi^n%"4]HQ'S#0N\c*d5S\CU#*&NYne\$4G5Tp%*@:?4-%RqkgBfprEME4D)='EE0'e5a2<UB%^m8%0ZliE9l/q(/4^;\r/f\G-Dp0*cr-F&=W(e"f<8WK+P]&U;@[&Z(GhaG..hbSDWT!atLlP\WEWRKfd+D$ij>PX!J8A>LUi/_::rgMLsW4Q"61k-uP
 B?Y=On+UJ7_ZD!X=R9O+jRX-WIXa&1(b@?9g_MHio4gk\`:&iLtXTN*@1:+PX5QX%21=\>aHlLVOj.marS!irN%K>n5.[WK]cIX";Xh<umfM]1PX6lt[1t',oX`>e>\#(UpHl-90&,SKXUKHjMM<Oj+DX2<*mcW@\Io'X4e'b.oIm0D=hDIm+n-%MF"OJH)[&)q>]Y`EmCe**jq9@hqJY=3;5LfF#FAQ!fcHu8%m@g=$i4b<:G6]H@#sIMUTJ(].oQsk+Qc\4=Oj\/>""bjfYrJSoYm*5RNE8QU_tHU6YFhO%Xh<1Y*_3-mE,b+hW&M<C'sce$<'I=L)!(Z#*L.7W~>
 endstream
 endobj
 109 0 obj
@@ -1083,43 +1083,43 @@
 49 0 obj
 <<
 /S /GoTo
-/D [105 0 R /XYZ 85.0 659.0 null]
+/D [105 0 R /XYZ 85.0 481.25 null]
 >>
 endobj
 51 0 obj
 <<
 /S /GoTo
-/D [105 0 R /XYZ 85.0 311.847 null]
+/D [107 0 R /XYZ 85.0 659.0 null]
 >>
 endobj
 53 0 obj
 <<
 /S /GoTo
-/D [105 0 R /XYZ 85.0 186.594 null]
+/D [107 0 R /XYZ 85.0 533.747 null]
 >>
 endobj
 55 0 obj
 <<
 /S /GoTo
-/D [107 0 R /XYZ 85.0 628.6 null]
+/D [107 0 R /XYZ 85.0 442.894 null]
 >>
 endobj
 60 0 obj
 <<
 /S /GoTo
-/D [107 0 R /XYZ 85.0 503.347 null]
+/D [107 0 R /XYZ 85.0 317.641 null]
 >>
 endobj
 62 0 obj
 <<
 /S /GoTo
-/D [107 0 R /XYZ 85.0 425.694 null]
+/D [107 0 R /XYZ 85.0 239.988 null]
 >>
 endobj
 64 0 obj
 <<
 /S /GoTo
-/D [107 0 R /XYZ 85.0 236.441 null]
+/D [109 0 R /XYZ 85.0 587.0 null]
 >>
 endobj
 89 0 obj
@@ -1142,151 +1142,151 @@
 xref
 0 146
 0000000000 65535 f 
-0000061950 00000 n 
-0000062154 00000 n 
-0000062247 00000 n 
+0000062765 00000 n 
+0000062969 00000 n 
+0000063062 00000 n 
 0000000015 00000 n 
 0000000071 00000 n 
-0000001710 00000 n 
-0000001830 00000 n 
-0000002016 00000 n 
-0000062411 00000 n 
-0000002151 00000 n 
-0000062474 00000 n 
-0000002288 00000 n 
-0000062540 00000 n 
-0000002425 00000 n 
-0000062606 00000 n 
-0000002562 00000 n 
-0000062670 00000 n 
-0000002699 00000 n 
-0000062735 00000 n 
-0000002835 00000 n 
-0000062801 00000 n 
-0000002971 00000 n 
-0000062867 00000 n 
-0000003107 00000 n 
-0000062932 00000 n 
-0000003244 00000 n 
-0000062997 00000 n 
-0000003379 00000 n 
-0000063061 00000 n 
-0000003516 00000 n 
-0000063127 00000 n 
-0000003653 00000 n 
-0000063191 00000 n 
-0000003788 00000 n 
-0000063257 00000 n 
-0000003925 00000 n 
-0000063321 00000 n 
-0000004060 00000 n 
-0000063386 00000 n 
-0000004197 00000 n 
-0000063450 00000 n 
-0000004334 00000 n 
-0000063514 00000 n 
-0000004470 00000 n 
-0000063580 00000 n 
-0000004607 00000 n 
-0000063644 00000 n 
-0000004743 00000 n 
-0000063710 00000 n 
-0000004879 00000 n 
-0000063775 00000 n 
-0000005016 00000 n 
-0000063842 00000 n 
-0000005152 00000 n 
-0000063909 00000 n 
-0000005287 00000 n 
-0000005891 00000 n 
-0000006014 00000 n 
-0000006055 00000 n 
-0000063974 00000 n 
-0000006188 00000 n 
-0000064041 00000 n 
-0000006321 00000 n 
-0000064108 00000 n 
-0000006454 00000 n 
-0000009113 00000 n 
-0000009221 00000 n 
-0000011651 00000 n 
-0000011759 00000 n 
-0000014023 00000 n 
-0000014131 00000 n 
-0000016541 00000 n 
-0000016649 00000 n 
-0000019068 00000 n 
-0000019176 00000 n 
-0000021520 00000 n 
-0000021628 00000 n 
-0000024113 00000 n 
-0000024221 00000 n 
-0000026855 00000 n 
-0000026963 00000 n 
-0000029626 00000 n 
-0000029734 00000 n 
-0000031792 00000 n 
-0000031900 00000 n 
-0000034403 00000 n 
-0000034526 00000 n 
-0000034560 00000 n 
-0000064175 00000 n 
-0000034695 00000 n 
-0000034866 00000 n 
-0000037196 00000 n 
-0000037319 00000 n 
-0000037346 00000 n 
-0000064241 00000 n 
-0000037481 00000 n 
-0000039516 00000 n 
-0000039624 00000 n 
-0000042372 00000 n 
-0000042480 00000 n 
-0000044707 00000 n 
-0000044817 00000 n 
-0000046912 00000 n 
-0000047022 00000 n 
-0000049467 00000 n 
+0000001715 00000 n 
+0000001835 00000 n 
+0000002021 00000 n 
+0000063226 00000 n 
+0000002156 00000 n 
+0000063289 00000 n 
+0000002293 00000 n 
+0000063355 00000 n 
+0000002430 00000 n 
+0000063421 00000 n 
+0000002567 00000 n 
+0000063485 00000 n 
+0000002704 00000 n 
+0000063550 00000 n 
+0000002840 00000 n 
+0000063616 00000 n 
+0000002976 00000 n 
+0000063682 00000 n 
+0000003112 00000 n 
+0000063747 00000 n 
+0000003249 00000 n 
+0000063812 00000 n 
+0000003384 00000 n 
+0000063876 00000 n 
+0000003521 00000 n 
+0000063942 00000 n 
+0000003658 00000 n 
+0000064006 00000 n 
+0000003793 00000 n 
+0000064072 00000 n 
+0000003930 00000 n 
+0000064136 00000 n 
+0000004065 00000 n 
+0000064201 00000 n 
+0000004202 00000 n 
+0000064265 00000 n 
+0000004339 00000 n 
+0000064329 00000 n 
+0000004475 00000 n 
+0000064395 00000 n 
+0000004612 00000 n 
+0000064459 00000 n 
+0000004748 00000 n 
+0000064525 00000 n 
+0000004884 00000 n 
+0000064591 00000 n 
+0000005021 00000 n 
+0000064656 00000 n 
+0000005157 00000 n 
+0000064723 00000 n 
+0000005292 00000 n 
+0000005899 00000 n 
+0000006022 00000 n 
+0000006063 00000 n 
+0000064790 00000 n 
+0000006196 00000 n 
+0000064857 00000 n 
+0000006329 00000 n 
+0000064924 00000 n 
+0000006462 00000 n 
+0000009121 00000 n 
+0000009229 00000 n 
+0000011659 00000 n 
+0000011767 00000 n 
+0000014031 00000 n 
+0000014139 00000 n 
+0000016549 00000 n 
+0000016657 00000 n 
+0000019076 00000 n 
+0000019184 00000 n 
+0000021528 00000 n 
+0000021636 00000 n 
+0000024121 00000 n 
+0000024229 00000 n 
+0000026863 00000 n 
+0000026971 00000 n 
+0000029634 00000 n 
+0000029742 00000 n 
+0000031800 00000 n 
+0000031908 00000 n 
+0000034411 00000 n 
+0000034534 00000 n 
+0000034568 00000 n 
+0000064989 00000 n 
+0000034703 00000 n 
+0000034874 00000 n 
+0000037204 00000 n 
+0000037327 00000 n 
+0000037354 00000 n 
+0000065055 00000 n 
+0000037489 00000 n 
+0000039524 00000 n 
+0000039632 00000 n 
+0000042380 00000 n 
+0000042488 00000 n 
+0000044715 00000 n 
+0000044825 00000 n 
+0000046920 00000 n 
+0000047030 00000 n 
 0000049577 00000 n 
-0000051904 00000 n 
-0000052014 00000 n 
-0000052889 00000 n 
-0000064305 00000 n 
-0000052999 00000 n 
-0000053165 00000 n 
-0000053464 00000 n 
-0000053692 00000 n 
-0000053985 00000 n 
-0000054209 00000 n 
-0000054556 00000 n 
-0000054887 00000 n 
-0000055136 00000 n 
-0000055433 00000 n 
-0000055682 00000 n 
-0000056002 00000 n 
-0000056322 00000 n 
-0000056655 00000 n 
-0000056974 00000 n 
-0000057170 00000 n 
-0000057416 00000 n 
-0000057644 00000 n 
-0000057908 00000 n 
-0000058199 00000 n 
-0000058587 00000 n 
-0000059053 00000 n 
-0000059313 00000 n 
-0000059800 00000 n 
-0000060211 00000 n 
-0000060558 00000 n 
-0000060820 00000 n 
-0000061054 00000 n 
-0000061168 00000 n 
-0000061279 00000 n 
-0000061395 00000 n 
-0000061507 00000 n 
-0000061616 00000 n 
-0000061723 00000 n 
-0000061840 00000 n 
+0000049687 00000 n 
+0000052167 00000 n 
+0000052277 00000 n 
+0000053704 00000 n 
+0000065119 00000 n 
+0000053814 00000 n 
+0000053980 00000 n 
+0000054279 00000 n 
+0000054507 00000 n 
+0000054800 00000 n 
+0000055024 00000 n 
+0000055371 00000 n 
+0000055702 00000 n 
+0000055951 00000 n 
+0000056248 00000 n 
+0000056497 00000 n 
+0000056817 00000 n 
+0000057137 00000 n 
+0000057470 00000 n 
+0000057789 00000 n 
+0000057985 00000 n 
+0000058231 00000 n 
+0000058459 00000 n 
+0000058723 00000 n 
+0000059014 00000 n 
+0000059402 00000 n 
+0000059868 00000 n 
+0000060128 00000 n 
+0000060615 00000 n 
+0000061026 00000 n 
+0000061373 00000 n 
+0000061635 00000 n 
+0000061869 00000 n 
+0000061983 00000 n 
+0000062094 00000 n 
+0000062210 00000 n 
+0000062322 00000 n 
+0000062431 00000 n 
+0000062538 00000 n 
+0000062655 00000 n 
 trailer
 <<
 /Size 146
@@ -1294,5 +1294,5 @@
 /Info 4 0 R
 >>
 startxref
-64359
+65173
 %%EOF

Modified: hadoop/core/trunk/src/contrib/hod/hodlib/Common/setup.py
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hod/hodlib/Common/setup.py?rev=639655&r1=639654&r2=639655&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hod/hodlib/Common/setup.py (original)
+++ hadoop/core/trunk/src/contrib/hod/hodlib/Common/setup.py Fri Mar 21 07:27:51 2008
@@ -600,6 +600,7 @@
         return ", ".join(opts)    
 
 class options(OptionParser, baseConfig):
+
     def __init__(self, optionDef, usage, version, originalDir=None, 
                  withConfig=False, defaultConfig=None, defaultLocation=None,
                  name=None):
@@ -730,6 +731,9 @@
               clusterDir = getattr(self.__parsedOptions, 'hod.clusterdir')
               numNodes = getattr(self.__parsedOptions, 'hod.nodecount')
 
+              if clusterDir:
+                self.remove_exit_code_file(originalDir, clusterDir)
+
               if not _script or not clusterDir or not numNodes:
                 print getattr(hodhelp, "help_%s" % cmdstr)()
                 sys.exit(3)
@@ -771,6 +775,24 @@
                         self.__defaultLoc, self.config)
         self.__build_dict()   
 
+    def norm_cluster_dir(self, orig_dir, directory):
+        directory = os.path.expanduser(directory)
+        if not os.path.isabs(directory):
+            directory = os.path.join(orig_dir, directory)
+        directory = os.path.abspath(directory)
+
+        return directory
+
+
+    def remove_exit_code_file(self, orig_dir, dir):
+        try:
+            dir = self.norm_cluster_dir(orig_dir, dir)
+            if os.path.exists(dir):
+                exit_code_file = os.path.join(dir, "script.exitcode")
+                if os.path.exists(exit_code_file):
+                    os.remove(exit_code_file)
+        except:
+            print >>sys.stderr, "Could not remove the script.exitcode file."
     
     def __init_display_options(self):
         self.__orig_option_list = self.option_list[:]

Modified: hadoop/core/trunk/src/contrib/hod/hodlib/Hod/hod.py
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/contrib/hod/hodlib/Hod/hod.py?rev=639655&r1=639654&r2=639655&view=diff
==============================================================================
--- hadoop/core/trunk/src/contrib/hod/hodlib/Hod/hod.py (original)
+++ hadoop/core/trunk/src/contrib/hod/hodlib/Hod/hod.py Fri Mar 21 07:27:51 2008
@@ -453,6 +453,7 @@
   def script(self):
     errorFlag = False
     errorMsgs = []
+    scriptRet = 0 # return from the script, if run
     
     script = self.__cfg['hod']['script']
     nodes = self.__cfg['hod']['nodecount']
@@ -480,9 +481,9 @@
     if errorFlag:
       for msg in errorMsgs:
         self.__log.critical(msg)
+      self.handle_script_exit_code(scriptRet, clusterDir)
       sys.exit(3)
 
-    ret = 0
     try:
       self._op_allocate(('allocate', clusterDir, str(nodes)))
       if self.__opCode == 0:
@@ -495,8 +496,8 @@
           scriptRunner = hadoopScript(clusterDir, 
                                   self.__cfg['hod']['original-dir'])
           self.__opCode = scriptRunner.run(script)
-          ret = self.__opCode
-          self.__log.debug("Exit code from running the script: %d" % self.__opCode)
+          scriptRet = self.__opCode
+          self.__log.info("Exit code from running the script: %d" % self.__opCode)
       else:
         self.__log.critical("Error %d in allocating the cluster. Cannot run the script." % self.__opCode)
 
@@ -513,13 +514,27 @@
                           get_exception_error_string()))
       self.__log.debug(get_exception_string())
     
-    self.__cleanup()      
-    
-    # We want to give importance to a failed script's exit code.
-    if ret != 0:
-      self.__opCode = ret
+    self.__cleanup()
 
+    self.handle_script_exit_code(scriptRet, clusterDir)
+    
     return self.__opCode
+
+  def handle_script_exit_code(self, scriptRet, clusterDir):
+    # We want to give importance to a failed script's exit code, and write out exit code to a file separately
+    # so users can easily get it if required. This way they can differentiate between the script's exit code
+    # and hod's exit code.
+    if os.path.exists(clusterDir):
+      exit_code_file_name = (os.path.join(clusterDir, 'script.exitcode'))
+      if scriptRet != 0:
+        exit_code_file = open(exit_code_file_name, 'w')
+        print >>exit_code_file, scriptRet
+        exit_code_file.close()
+        self.__opCode = scriptRet
+      else:
+        #ensure script exit code file is not there:
+        if (os.path.exists(exit_code_file_name)):
+          os.remove(exit_code_file_name)
 
 class hodHelp:
   def __init__(self):

Modified: hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_user_guide.xml
URL: http://svn.apache.org/viewvc/hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_user_guide.xml?rev=639655&r1=639654&r2=639655&view=diff
==============================================================================
--- hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_user_guide.xml (original)
+++ hadoop/core/trunk/src/docs/src/documentation/content/xdocs/hod_user_guide.xml Fri Mar 21 07:27:51 2008
@@ -464,7 +464,12 @@
         <td> Cluster not allocated </td>
         <td> An operation which requires an allocated cluster is given a cluster directory with no state information. </td>
       </tr>
-    
+   
+      <tr>
+        <td> Any non-zero exit code </td>
+        <td> HOD script error </td>
+        <td> If the hod script option was used, it is likely that the exit code is from the script. Unfortunately, this could clash with the exit codes of the hod command itself. In order to help users differentiate these two, hod writes the script's exit code to a file called script.exitcode in the cluster directory, if the script returned an exit code. You can cat this file to determine the script's exit code. If it does not exist, then it is a hod command exit code.</td> 
+      </tr>
   </table>
     </section>
   <section><title> Hadoop Jobs Not Running on a Successfully Allocated Cluster </title><anchor id="Hadoop_Jobs_Not_Running_on_a_Suc"></anchor>