You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zookeeper.apache.org by ma...@apache.org on 2010/02/19 07:30:15 UTC

svn commit: r911713 - in /hadoop/zookeeper/trunk: CHANGES.txt docs/bookkeeperProgrammer.html docs/bookkeeperProgrammer.pdf src/docs/src/documentation/content/xdocs/bookkeeperProgrammer.xml

Author: mahadev
Date: Fri Feb 19 06:30:15 2010
New Revision: 911713

URL: http://svn.apache.org/viewvc?rev=911713&view=rev
Log:
ZOOKEEPER-664.  BookKeeper API documentation (flavio via mahadev)

Modified:
    hadoop/zookeeper/trunk/CHANGES.txt
    hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.html
    hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.pdf
    hadoop/zookeeper/trunk/src/docs/src/documentation/content/xdocs/bookkeeperProgrammer.xml

Modified: hadoop/zookeeper/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/CHANGES.txt?rev=911713&r1=911712&r2=911713&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/CHANGES.txt (original)
+++ hadoop/zookeeper/trunk/CHANGES.txt Fri Feb 19 06:30:15 2010
@@ -281,6 +281,8 @@
 
   ZOOKEEPER-665. Add BookKeeper streaming documentation (flavio via mahadev)
 
+  ZOOKEEPER-664.  BookKeeper API documentation (flavio via mahadev)
+
 NEW FEATURES:
   ZOOKEEPER-539. generate eclipse project via ant target. (phunt via mahadev)
 

Modified: hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.html
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.html?rev=911713&r1=911712&r2=911713&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.html (original)
+++ hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.html Fri Feb 19 06:30:15 2010
@@ -307,7 +307,7 @@
     
 </p>
 <p>
-    There is one BookKeeper constructor:
+    There are three BookKeeper constructors:
     </p>
 <p>
     
@@ -315,12 +315,83 @@
 	public BookKeeper(String servers) 
     	throws KeeperException, IOException    
     </span>
-   	
+	
 </p>
+<p>
+    where:
+    </p>
+<ul>
+    	
+<li>
+    	
 <p> 
-    where <span class="codefrag computeroutput">servers</span> is a comma-separated list of ZooKeeper servers.
+        
+<span class="codefrag computeroutput">servers</span> is a comma-separated list of ZooKeeper servers.
+    	</p>
+    	
+</li>
+    
+</ul>
+<p>
+    
+<span class="codefrag computeroutput">
+	public BookKeeper(ZooKeeper zk) 
+    	throws InterruptedException, KeeperException    
+    </span>
+	
+</p>
+<p>
+    where:
+    </p>
+<ul>
+    	
+<li>
+    	
+<p> 
+        
+<span class="codefrag computeroutput">zk</span> is a ZooKeeper object. This constructor is useful when
+        the application also using ZooKeeper and wants to have a single instance of ZooKeeper.  
+    	</p>
+    	
+</li>
+    
+</ul>
+<p>
+    
+<span class="codefrag computeroutput">
+	public BookKeeper(ZooKeeper zk, ClientSocketChannelFactory channelFactory) 
+    	throws InterruptedException, KeeperException    
+    </span>
+	
+</p>
+<p>
+    where:
     </p>
-<a name="N10064"></a><a name="bk_createLedger"></a>
+<ul>
+    	
+<li>
+    	
+<p> 
+        
+<span class="codefrag computeroutput">zk</span> is a ZooKeeper object. This constructor is useful when
+        the application also using ZooKeeper and wants to have a single instance of ZooKeeper.  
+    	</p>
+    	
+</li>
+    	
+    	
+<li>
+    	
+<p> 
+        
+<span class="codefrag computeroutput">channelFactory</span> is a netty channel object 
+        (<span class="codefrag computeroutput">org.jboss.netty.channel.socket</span>).  
+    	</p>
+    	
+</li>
+    
+</ul>
+<a name="N100A9"></a><a name="bk_createLedger"></a>
 <h3 class="h4"> Creating a ledger. </h3>
 <p> Before writing entries to BookKeeper, it is necessary to create a ledger. 
     With the current BookKeeper API, it is possible to create a ledger both synchronously
@@ -335,7 +406,7 @@
 <p>
     
 <span class="codefrag computeroutput">
-    public LedgerHandle createLedger(int ensSize, int qSize, QMode mode,  byte passwd[])
+    public LedgerHandle createLedger(int ensSize, int qSize, DigestType type,  byte passwd[])
         throws KeeperException, InterruptedException, 
         IOException, BKException
     </span>
@@ -370,10 +441,7 @@
     	
 <p>
     	
-<span class="codefrag computeroutput">mode</span> is the ledger mode (QMode.GENERIC, QMode.VERIFIABLE).
-    	If <span class="codefrag computeroutput">mode</span> is QMode.GENERIC, then <span class="codefrag computeroutput">ensSize</span> has to
-    	be at least <em>3t+1</em>, and <span class="codefrag computeroutput">qSize</span> has to be <em>2t+1</em>.
-    	<em>t</em> is the maximum number of tolerated bookie failures.  
+<span class="codefrag computeroutput">type</span> is the type of digest used with entries: either MAC or CRC32.  
     	</p>
     	
 </li>
@@ -396,7 +464,7 @@
     </p>
 <p>
     As a convenience, we provide a <span class="codefrag computeroutput">createLedger</span> with default parameters (3,2,VERIFIABLE), 
-    and the only input parameter it requires is a password.
+    and the only two input parameters it requires are a digest type and a password.
     </p>
 <p>
    	
@@ -408,13 +476,11 @@
 <span class="codefrag computeroutput">
     public void asyncCreateLedger(int ensSize, 
             int qSize, 
-            QMode mode,  
+            DigestType type,  
             byte passwd[],
             CreateCallback cb,
             Object ctx
             )
-    throws KeeperException, InterruptedException, 
-    IOException, BKException
     </span>
 	
 </p>
@@ -441,7 +507,7 @@
 		
 <p>
 		
-<span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list);
+<span class="codefrag computeroutput">rc</span> is a return code (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKException</span> for a list);
 		</p>
 		
 </li>
@@ -461,7 +527,7 @@
 		
 <p>
 		
-<span class="codefrag computeroutput">ctx</span> is a control object for accountability purposes;
+<span class="codefrag computeroutput">ctx</span> is a control object for accountability purposes. It can be essentially any object the application is happy with.
 		</p>
 		
 </li>
@@ -471,7 +537,7 @@
 	The <span class="codefrag computeroutput">ctx</span> object passed as a parameter to the call to create a ledger
 	is the one same returned in the callback.
     </p>
-<a name="N1012E"></a><a name="bk_writeLedger"></a>
+<a name="N1015E"></a><a name="bk_writeLedger"></a>
 <h3 class="h4"> Adding entries to a ledger. </h3>
 <p>
     Once we have a ledger handle <span class="codefrag computeroutput">lh</span> obtained through a call to create a ledger, we
@@ -508,7 +574,7 @@
     
 </ul>
 <p>
-	A call to <span class="codefrag computeroutput">addEntry</span> returns the status of the operation ((please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list);
+	A call to <span class="codefrag computeroutput">addEntry</span> returns the status of the operation (please refer to <span class="codefrag computeroutput">org.apache.bookeeper.client.BKDefs</span> for a list);
     </p>
 <p>
    	
@@ -519,7 +585,6 @@
     
 <span class="codefrag computeroutput">
 	public void asyncAddEntry(byte[] data, AddCallback cb, Object ctx)
-    throws InterruptedException
     </span>
 	
 </p>
@@ -576,13 +641,13 @@
 		
 <p>
 		
-<span class="codefrag computeroutput">ctx</span> is control object used for accountability purposes. 
+<span class="codefrag computeroutput">ctx</span> is control object used for accountability purposes. It can be any object the application is happy with.
 		</p>
 		
 </li>
 	
 </ul>
-<a name="N101C9"></a><a name="bk_closeLedger"></a>
+<a name="N101F9"></a><a name="bk_closeLedger"></a>
 <h3 class="h4"> Closing a ledger. </h3>
 <p>
     Once a client is done writing, it closes the ledger. The following methods belong
@@ -597,7 +662,7 @@
     
 <span class="codefrag computeroutput">
 	public void close() 
-    throws KeeperException, InterruptedException
+    throws InterruptedException
     </span>
 	
 </p>
@@ -665,7 +730,7 @@
 </li>
 	
 </ul>
-<a name="N1023E"></a><a name="bk_openLedger"></a>
+<a name="N1026E"></a><a name="bk_openLedger"></a>
 <h3 class="h4"> Opening a ledger. </h3>
 <p>
     To read from a ledger, a client must open it first. The following methods belong
@@ -679,8 +744,8 @@
 <p>
     
 <span class="codefrag computeroutput">
-	public LedgerHandle openLedger(long lId, byte passwd[])
-    throws KeeperException, InterruptedException, IOException, BKException
+	public LedgerHandle openLedger(long lId, DigestType type, byte passwd[])
+    throws InterruptedException, BKException
     </span>
 	
 </p>
@@ -696,6 +761,16 @@
 </li>
 	
 	
+<li> 
+    
+<p>
+    
+<span class="codefrag computeroutput">type</span> is the type of digest used with entries: either MAC or CRC32.  
+    </p>
+    
+</li>
+	
+	
 <li>
 	
 <p>
@@ -714,8 +789,7 @@
 <p>
     
 <span class="codefrag computeroutput">
-	public void asyncOpenLedger(long lId, byte passwd[], OpenCallback cb, Object ctx)
-    throws InterruptedException
+	public void asyncOpenLedger(long lId, DigestType type, byte passwd[], OpenCallback cb, Object ctx)
     </span>
 	
 </p>
@@ -768,7 +842,7 @@
 </li>
 	
 </ul>
-<a name="N102CB"></a><a name="bk_readLedger"></a>
+<a name="N10305"></a><a name="bk_readLedger"></a>
 <h3 class="h4"> Reading from ledger </h3>
 <p>
     Read calls may request one or more consecutive entries. The following methods belong
@@ -803,7 +877,7 @@
 	
 <p>
 	
-<span class="codefrag computeroutput">lastEntry</span> is the identifier of the last entry in the sequence of entries to read;
+<span class="codefrag computeroutput">lastEntry</span> is the identifier of the last entry in the sequence of entries to read.
 	</p>
 	
 </li>
@@ -833,7 +907,7 @@
 <p>
 	
 <span class="codefrag computeroutput">
-	void readComplete(int rc, LedgerHandle lh, LedgerSequence seq, Object ctx)
+	void readComplete(int rc, LedgerHandle lh, Enumeration&lt;LedgerEntry&gt; seq, Object ctx)
 	</span>    
 	
 </p>
@@ -866,7 +940,7 @@
 		
 <p>
 		
-<span class="codefrag computeroutput">seq</span> is a <span class="codefrag computeroutput">LedgerSequence</span> object to containing the list of entries requested;
+<span class="codefrag computeroutput">seq</span> is a <span class="codefrag computeroutput">Enumeration&lt;LedgerEntry&gt; </span> object to containing the list of entries requested;
 		</p>
 		
 </li>

Modified: hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.pdf
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.pdf?rev=911713&r1=911712&r2=911713&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.pdf (original)
+++ hadoop/zookeeper/trunk/docs/bookkeeperProgrammer.pdf Fri Feb 19 06:30:15 2010
@@ -5,10 +5,10 @@
 /Producer (FOP 0.20.5) >>
 endobj
 5 0 obj
-<< /Length 643 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 646 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gb!$E966RV&BF6e$6>[)[sA.s30SI<*r6/OZj1%CAr;^$P\0LRbJQf4V\=)j'0)@bG.%>L`(F3GdJFl;-jP^:1;^rT-Gl^=#f?O7:ce@sa1u5;Z5pM\XgS0$=fK(i([)m!PQ(OGK<hq'/*FFM\Zr1(+s-#9?(df<q_XU4Vi!bX+W3go.!,DF8&pGTIt_qER#iaZbO6B-PS:s8PqLna7^lF+[[Y;NLu<57K'=s3-,@$X"seXW4UE5%KCH'6=!lhl%MYe_O1!e)b6Ksei(R3ZP,&03E1n"p<qe:.!](t*DKo2BAK\jCO)8P$f%.A@Zob[7B":FVBei8G0@@uW%]RoN(GuF(=%8b%c.um)MJ?+=FIZA+.0XaZp_V1;QP*atJLsgi'/#1e@*gj#WE&+$<kghk&.)Q1_@mIj$"$0]-X8O?H\:4pfH0S<*dj@W_qn8s@[Vh?n7AfW2b5+i'Z;b[?E1Ieb%1j-_KV9#m84e846>t(0an2`4RNVJ6.]93Hee86D3a#ria0h'[kLX0N'_+J/Qr[?"Zj!,OO.DbE+]=u"JeqgZtBsmqEaSB9O2M;3skhXJiJZtS2`%R.VE#So8R\GlI%lY`q/!LLUQC_@blX&ehkYhCNlAP3bA;h!hAnt:l4,h~>
+Gb!$E966RV&BF6e$6>[)[sA.s30SI<*r6/OZj1%CAr;^$P\0LRbJQf4V\=)j'0)@bG.%>L`(F3GdJFl;-jP^:1;^rT-Gl^=#f?O7:ce@sa1u5;Z5pM\XgS0$=fK(i([)m!PQ(OGK<hq'/*FFM\Zr1(+s-#9?(df<q_XU4Vi!bX+W3go.!,DF8&pGTIt_qER#iaZbO6B-PS:s8PqLna7^lF+[[Y;NLu<57K'=s3-,@$X"seXW4UE5%KCH'6=!lhl%MYe_O1!e)b6Ksei(R3ZP,&03E1n"p<qe:.!](t*DKo2BAK\jCO)8P$f%.A@Zob[7B":FVBei8G0@@uW%]RoN(GuF(=%8b%c.um)MJ?+=FIZA+.0XaZpjVAY1'K*MFqiRa"[CtO-isU$PF5Tsc=-D3!t(1[AL'A=iK3P?,_!U1UUrJ[?&\._cg;mA.5:*?Kcl[1p^(=$WdTL6_GB+o&:1>4\gWmgp^,hX*k"RQo^7s]J&X/RT^oTK*!KV\dI2)(+1G7%@u,I`j57^="YpFMdC3dP*#@b^$:@.8V8/W:L_,Y?J^U,YI-:gKIkl/S[I,=0K*pThMK.XWCoa(G\^*4KIB-$<QlF@mUEA3a?\ih4?<Yf;A$"L3[d'+QUC(tgrrQHOi8a~>
 endstream
 endobj
 6 0 obj
@@ -102,10 +102,10 @@
 >>
 endobj
 22 0 obj
-<< /Length 2221 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1815 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-GatU5=``=U&:W67i1iG0:]^bj0R^5_NpAT?%XZot7X:XP87Fq!1.bJcIsmY2!1pJXRE5RCG5'a<QaqQIr:nRD0L`GCY[,o4DLjAYra<pYiQe80_N&Cp`7C7_N%V6aKGF4t+&f^CK/a@)S[pq;q-KVpV>U%f&-n>(>$nCe?PYR2Maq/^Lq$_illCtnlWUZkGg1&^YjGVnYZ?ZXMsCEa[P4\rRD9(q2QLdK$":E$lC%>@ellINQ]ER>SeYJ^eW,c',L/F;ADK2]==^K8Om];ODSqAUl;`H)Ot7-,4:Lf/%)W?U'7kod&G1eOf<Ic[>V>-5j=SfK9HdEM5W)<mZ@04:*cO<p]("?)Fe_-@#]D>%BOCP(e>V9%@a_W\4931<,_-p<o6nHj6S<FM)734E63T7a6YZ*BK$^)'dZ5N__n^I=%-TgrQ;F96`+F4*&2:jA5;NQ^pCXT\J?%YQ6@emAd&Rk.[Fn4W!&[2l';GBBSjD^_jSNJP]S0IMBb3^rVkM2O0UdAT&BBudH48$lL&5j-I'Z?_64I]_a'b?0$Rp0q8tQ.O1@WKNRt]N,C+r/!alEaCd3b&D\dUXgMiu6*>ae%5&o&heP=qL"kh3N-JZL>o)0-('e\qp&#t4B^TLL]+8gcu2+eMQQmk`lB"q2uH7n+ApUhU/Mf("'$n197&P=#*Sg^XGU4U`L?+Bpl1ni7injQ,Y=?tJe-4gi"K@0i+=/(#FK,+3AK8q,U\`oN2g</j2orl,ds>H3^+Y,*TkFf.;?V>4H*e6/"fTgJRF(i]EEVcMsLH=hhrj83_8n\Q+CdEONC=TjpoeIYfld%6KZGE:Qgi"[Q0N\XEcck%\.gJl1fXjpf`aRLV=oGMm#!s0.$K?67&Q;@Ua_Ouki=K7mr.'O`14PhVhqHDG&./KtY)Vq6g&"O+jbq=^TO,1&4Z/JE7Ee4S"Q$Cph-$:0(=g!cf/e7/G9G5UbO-phkqjP,N)^YttFYsB>1bZE
 9>HIETXeG\*[9RCpNES*nU#6K`pB%IIjgWBs]`iQ67c7p^fdITQ]#eL&&8MRjVoNp4ds2BV#D^ks&'%ZaY(;^NGF1$:mU?)GUS[rA'Bq_*c'F^].c7/pPc8^mHLlP:%XBId=#Cal^(%KSOam,!I6;-nLJnpaVoi,:RUQ>0+1ijsXh]T4lnRRDa`L;]]$97pGb'[YO@#ISe.5ETLUZ'=J,^g+f5ier1m$Xmp8fZ7X@[<(-+@&j#>gjpUn?KRFck.%.3TOkrLE4t*.iR)emAHr<pHB*8ja7f]?1O.WsZC=>4h!qR?364aKcq:)WnF[9JN(/XWa-k5E2j=\R(u\a#!tD6db3brUX43#?(*Wj4tT!*+Y@hX%9m"%<YuK?&S%u=[Pe.nsDk7M53TP(iM6XPVmbP@G=5P;0XUd8=g7I`Zj<`NMbE%6rJN]mY4)S8fZIo+oVm!_e!s2L#A0dW[i]0ggt9^fMGBX%Z<sNqHfR]F%d-6ZNZZ)']Fd@\%o^2rV(ApCeEmB\!=k3hj2X'EqPVeZMX,unOhUS5<j=?r:HK6%/R6UTZu++*be$CVd'=F#dWg(q==4Y(4+tb.TPo">bpWS!0pH[CA;Lk5eF`/p$D*3Yib2U41lGuS.-+tF6$9R)k.*08NH,Qh[/!:W?!eF9jh"p-BU$fkTqT:`[bO=g$1RM^DZ-S=U5hK;*QhOZFp*L<b[SVpH59\ODDc0EDGWd1R:<^WcHK6[,^1DVT7=gBO2_#2>0.TJATB[.;at<bbQ*+VH]E<f#hK6@\VVHhet^9^"#/3FoM^%^:V"gIXe]:eE?PmKKdn.@$#E$V,8tlP:fRsFjdb-'Z2DMa5DRZP,\:QMT+I`24li2ilC@]m=UPs@APp*>^&`#jfK*'-cC!BZDf:kaa_)>\/`e&069i+bns:-Vu25tia%C^#t:92-^qE]W595U&Tp1:aL&qqk%NYJ5SG=YiSE\m<.7he#$WgOc*',%*l`MSR&Z
 OaN'q;.YDT9eKa(t-9SGBM'+;Hg3m:'t\m$4LjI#^01ES17^?6-pi`>-bbhM"1k<W9];"'EQS"TFuK3^?k@iO,JX!_o!pne:;pf@?CAHs1W:_%\#++hY9Z$d%(_N75Djfi#.haX,\P\FJ80OmofQj$+n-Fj&N.h>Ei\D*>VjmfX2&VehmfJZg/HGQcp=68eGcM)@KT7U%SGpeZp-7J^Od`A.R*D5"QFr'2:[*^e"rr@\&`23~>
+Gb!Sm9lo&I&A@C2i+UHT-ijq`Qs8p64`1d%A"?ft5YI3WQm,OnMX13:0),U#T9;s?:1c6^K\cBQI9>hk\')`DpDabU4(u0-3,#oHaFQPY"V/cPSr8HkUZEQqGt%3[\tMgB?[^2ID&2R6;6n`9Dc*dgUY@VRrCtFebc]?#B_guRo5a@[\5s4PMora!@H%+).kPYO^rHq+;'s]6iqLEo,"E3<'fha#A[&Q$oh6ej+f],;gB1Uj8!Jop9KCfOiZ#cP3ERtqhU#1'``fV#8%(i<DW?X`O&s,X8R@'A&VWZ!%)WL$RfOlM%!oqUl91k\>eVRTc!.'QR:`I/JSUk>anEX?E:A8?l,$o-gm]*fQ\oD7_XiJrC!HK,PESLPirK0M-OKDbf^"e)Nd^&N3bYM$L72p<`mXR[7-I<roG-G/*!@n8^meui)JYSC>]3CP!=P.fM'?=O^nMHmVh^U1J-A@.Ws&F/?;CmCZ_@0tFPiHi`a%FETVLX$`QHDt.$Gj5A3S#\p'X-;9EOl,f]uQ48L_AVVN%:c[7J>Og.iB?2i5t,i,p%CV>=e<2MMF\dCWrdKT,-A8W^*-c?baR=a?@r=LNqgbB*(aGHlA_?/gB7$(>:(OfKf]]M/AXRY2TWq:'Pmi"Wnm`:#c!*=!!.'rRf:oVH:22:qAGCACgOrZk%lJ_tGIZ%jN6Q=Od/8Y..-0W-9kJ<b&^IT,Qh$RJV)YFrWMA2=1\CAdq))oEbE;@Nl]o/Gg)qkTZckFPW^;SR<$ZaA?M-Zt_dCT(C-UB*;5]kV,]W,"kIEe;)F-8*dJ5W@6O2]5B)WYV*3TehP_&!,1Z^f?9d7NH.O1kqIb-;4*.:TNSXiUBF/^&r77TMSLrK[(6J%5lO*#-A6*WH-$Yi4,.od54j8>LhsdqQ1GQmA7Gq?8CLu]p&m3'il^$L-$h[:eXHoM<.KIe4l1hKc]B14Qqp-,as3)F#i%L202VYC`'S72&q:u^=&A:E`IL
 '%ltQ\Q4FLKZ`Q(=ip[M^FqVQ?bLc#-HO]98)*sdHECQ?ff,PL:9[90I.YUT0a&S76q>;k$J=tK/LZ;#IXh^.hFM'hF4[BN\.]31sQe;n;jj2P)$FlpN\K4hLTDr'96P60:LRO-\mm''Qn/oEPMrtSo'qQ2kRl[d7"8U>&nU8U_hFikrB2bW`fB535onFiM&Q"-n)k"8Gbn0::iCtp8@0XkZlQ>--]Fa<ss...@GuVg>[.TJ'`h[3.emA.:'X0ibfPZM2^mj'q"_=I?u&$)VC=_r.=f%P!J1_$AF)ib_ngG9gA*@OMF*HU0-a]Ii!eEpHO+(`Zjk=07I6g_*SQGHpS"$&1A2DgCY/GZ7+Rh&6B-C8IS)iHFrnI4^Up#KoiSBYUicHpAH;^F'Nb$2)NV%gHVr'Qh%l"kA,M@'FD8OL4r,;$r$`]E*!>T\f]8KDP?\5\51N&"-BL_oQKZ%#d_*Od-H_>>1tRP[OTr:Zl>Oc't^6T%R@_AdJrgc+if+t.pNd5=R_d6f5N5l1hpie37W:>(IPaRN';n[T,[P66((1jWBUlhL\E@Rm`GllX13`M(ssSn3'r\k<hUFZ.Z8(*IS)Q<>?r+J1\^,g=dQT7)eO)k#:4P2N+H-XXc8Y0?[4[/pA~>
 endstream
 endobj
 23 0 obj
@@ -188,10 +188,10 @@
 >>
 endobj
 31 0 obj
-<< /Length 1998 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1938 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gatm<968iG&AII3n7^---ijsVfUQd08^jK!VUkAPjT(F)`0r"e5,>^'^<;kITL_]CF>D,I";^mkrNLL(fu%:mI7C=Jr4S^+2R+j[oAG+b=23X3f-YS,=IHNsZS/YsZNQ:)&;H5FoT!+>_9QLQZYM$0r_]_ij;t"9f31:@?a#cSnS@H[[J12eJg4,_5j`hiiRog%:?;3o3n!Lr)X`22##1Up>AmUql]og]l`3u#kqC"V'^045CfM8N,BJ6!l:%)Y1.;>"d_?;q>fbkUj,QMs)k#s`9#g*"Z,i^hA40UT9hVdB\=JYh8YW38AHkiTX_K4>;8aqQWi1$d.Xck9L89gX]m>ir`A1G2[QW_A*U<DX\7KQ8ri,&TX%9!R:,phtJ3ff.Xo=V0E^;%11/#Xr#3!L\"re&0:o/N,JmUljK=m%WYfkN[Nhes(W\AKSnYg*+DOgR&2>!iaNl-_0V`hs%Z?@MFU.bn6e!YHHL!9*2"7Q;.lu$!53B-<eYD5>,]_cYppZZ+3N>)S0N!-4SP8>2M]5i]j3am9rHPpHUT?a5Z3L[uQ0i+R,muY)'kt;p]5c1PLf7kJ@I\(LUEt;o^`g!ML%cIW<Y&Dsn379<SEOeRl>_3[t]e@k4&W4SfraK\nmqmOL>t&e\=Up>\B/kR#<\JT8Bie#'r;$jCB]Qc1eQ3rBdbhqW3qTsUSo1n0TbkmfrO^5C_f/!u:WMTf.A>$Lr!;DeW\oU]LD42A.sFh4#.HhWY6/%.UZ;(9j72V,o$hc!5]q0"E"q=p)6@pLbi`p\A\`WYfMMA1JOcbX=%nPe2K"U[1X'\mG$V&EHuA3eY,7*?ga>CKT[*4-(*'?8A+t7JOYY(46\Q$H,ii2;])Gs4?pB+\gO0&*^n`i&$F42I"lWX<7R&sbQ,cb2aYlQR7(ALmV:<sm*UfeT!Mlk^(J*lqN4A#`@tb`nV$)r$$3%S1j>4"tcpC`J:UA)qg31]fXh\U>%GWqa*cbh
 mOCV?gPuD,/!/>chREV/?GHWJs`Dj$bpmejBC(m/+MVoa`X!COI__?AK8Hg4=H+"<p%b7Dq/GuC;]rI]YW1KE5VYcfuVebblqX)sfAd:Al%KQ$\6?JTj$FeXGm>Bnj9Na??HjkVZ4?q9@)dJ,+(.M-D.kmsD,sK)`+JK4mnPJiU)AjB5oMX5\e@UdVaE9[L^g&R7n&DcXHJ-i;b=?t!"6hcuYY3%7j&+gNc9E@BMI_(j5PTWP5NAhMQhV%HM(_9^b]*sVe+SnbY!()TNH\qX$98qcc'.5$,sc)@3_R$i%o;pVd"cim_+:NB$_k]VHB%STY64#[(l#%a$aGSQ\3RiU=(XOZbP^a(7<b]f__pJ3;G''tUc>8$5e8"*?\Ji,ib+o$KCL>8J^K6lePV'^20JYfa(d`f'3%""kIN&$TV63=Q*td$oW%-pY8([m6CA?U79O[P,nA=Hgd[FRZ(Oj'YoN#Y-Pko*T+5V'k7QVE]29#[+WQG<bt+a@g`[0*NMrIJ%%?ZqGUrKSH"Lh-NI`SIpk8I7a`t,&eI\KOTiQl'e&`2Upg8VjA3(92`0hDc)h_bG[0c4gY!tiI^;nWP!l97Je8cJWNHk7Fo(@`:.tqn2Y8R8tf<5?V,BsIuSOUJh7=$N1i3W]#,%Xh2;>@pP&822tbk$nC0Ep)^lt4P5'4tQtFt>o[3:QA.j+!Xm:nR$omS>-4_fSh6.!gEJH!/_)JZmu':*^0$oU)7sS"ITlPiMPP#_uFiPWSLPh797>L/b"gACCTfCf65!kB:rfI.M"173`1P_7S_qF<>m+=jW0N+HDmV7s,2)cbT:BFnK&V>oFd!4]^h)PTkOYN0!"j\lr/;o#<r'%h[A.C7?n`Q0G]JW"2H8!)E2k_>XubBs;W>>1@HVAWo,2+c_<JP]II^gmS=WA$,"`ea=`A2qtq(qst`#1J[V#!T)D.2QN=dD4PQjrM\;dTcL6l?ethAM<\e36"E\5DAG+u*3E
 d)Zb;sqK&Q\4#=$nh~>
+Gau0D968iG&AII3n7^--#QYL4R%@j=:>I1Z1tK$h-jPW],h<YQK;97Vf,&g*=O80:VpiaI,CnFc^@ti:cUKk"dGkKoC\@FN'Y;A.I,A$*H`[)BL/AbH)0I3K(8F)`f<`lZgVCX)I@I?.DGB;oJ(SIK4c2R"SCuKhG(C5kQd-OJF1R`2*Yh8TeiT#nRI]I.96L*C1],uT'4iTaJtl;JP0/lC3LDWYRIUo@(rM=qf6ekif9bo:@LC&[67+hH)hlYRYD%5r_"j#6/%q>bi&;e&Gg,bAP0\;XEFfMACl-'L?V.L'>W.*`/u;N&[oP:"G=+cZMB>:=[$*.eBBZT6H(HQbrf_*\og1nqo&hR\8<J`a:P"?*+Gbt4^`Ki)!\Y:#To\\/iKZr4Yr@'Bji'\?JSGRa$@&4AXChA'2LH*1KOR?KDr)]!)F_7dhJfhu(4N26N8cZk5!dQX/_cUHb1$X`Z:.98^`LuVn5+?hIBUlu*##15])d$m2N4Bg^h-Y#dNhj5I(/8-Z1d'n;7<QshsNB4DnaILOt-)6T6Q[Z-i`Zd]jlG=Cd2)CkIEWBIneKV04rNlE+u"HJF2@,!$?D^T'r$'^<\G5J[3<[fB^Ec2a:cc.h[utV'(?7Qb0?W;O4qH0-Skshq_r"me)@qmXW?Ib?WunrJ!tJSV?GVhKXtrD+WlCYQ=3%GMH(9USRS.J7.$Ma>8Z\+Y`1V<c/^-\]"n&\p,oDke+KsDiGs(.p;#$^RS7aW3Yhk8h5d/9L#+HfaGA:]dd*s!\>Ed+j7!ectRWiVm?8$l6qO"DA74ooP6f]eIrCL?>UT]2YSfh"Ou`mk=]1dUDL?*nf?@[hdKo?RS<,!IJS(Y#s)cSlD*ik#,<<#S(]Q,11`"GdQj"IG#kp^EXD+N!Ad0@l7Ps<6(c,cY$c1CS_/Od$m%'J.Q9Cn;k02q<o,t*lA@Ah;baYLV<Ke0C1U@E0q_-=d`uOs&O]\lp*:]h@504RFVi6
 n3g9h$o%gQ"]%NBq*UEOdJhF0-r68a0!m-?uAj$?nYRjRr5nT%AM.au70aCNi%rAJ6i[J$!#cSnUGRXE#2m7rVG<fT...@HEH>J/&qiGK!n(kh).`ZIgk1jH!jr@<NNn#+X*n?tQAoA<![:qd<kmV#<kU7Qmhga<^e"9L]<ofIeLt'$4%TC4JGF*rm0YkTp)PJ.*E2KUaOj(K()1d,Y6JqL$B0_oLbl9fNaecru"7@AH<ni6<-u9j>OR0kEanY0P`?VKpDJpa:2S$Pfd\eDS,"L4m&/7ZF=G,TE5!`f$P=3"Ad;+fM`ApBmcY.s8IJ*8P+qCIj8u/dXQRr.KWh[2Ut$9jC-*fVCBn33ZpkiVHOg)dVa)<8P/1?_-q(85)CFTXM\GYFNIIPH)h.Jo>i^hl:H$%$4R5",Ofta,JkC4V&N&Nn3Ncq:R<3Hmife!`qQ1k2f<!Ru6L2@]4oX2F_#>g;I6n+u"j)j+!Z%ZUjb9I^0(i%-@SsjI4M@lE-"227&@il"7H`_3([oT]$GUbNFkF==)ql:c&Z\:*phh,p-PFP`>8t#eE<+&3N6`1quj6NH,NTY9:1lI%=uJp>+Rn24nL+Rac&-<F%>HY)ET8J:j&u3+JJt*dQiU?Vqf<5M_iQ"?bR]7/p8YLB:(Ai\Q-DU")]gU$Vnu=Cej;QL)b9pt8JJOuTHM]J*lH.Dd@;4`1J(]*1B<0&H3Z:`>CApI-?cAgGdear6r=GN\6c]5a/VW'\ip3P1*OlG7agG]:Z'a[-MtK3#30d@)"U;4n\J)ah2M9EL9+GBD%G$@V&qQ"A(2)2d7V9\,]eW56!h(rEL`&N/t><=<o;`MCc\]tP;`@c&B#B'33Zfs2[p&0PbC`+Dm(SV&fG\U;i#P;:q.p3jem~>
 endstream
 endobj
 32 0 obj
@@ -203,10 +203,10 @@
 >>
 endobj
 33 0 obj
-<< /Length 1783 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1922 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gau0D968iG&AII3n7^,n-iq':;sYiFR`qRup_N#mOcY6N-57#Km=4$T93BOd,q&(nChX4B@^46tH$-H>IC&dYU>?[bhQAW+pg+r\n3;l#h_-4?O>mS0/\LcAn(#r[L4BIR7b`E<'7...@U>WD.Y]+^!PP*<S9mOnCa.[f4^Wh)kkTjAnS7h+Q8uodTaT_4PpIN<pH^sE%&h$.4R]fhZ#2dotp*K+<d^7DkiCHh#8j9D/M"V3snVmFG$LXkfWb,b'.#h$JVWOlE@,R(hJs,K:MmK?-4-4`-s5q]97lEG]V$.hUT(OlUN0`J$I0#2uJ@U@H03nYiba_q_2BP*?Wo5LtqV0\k48VY!K&B4PX7H/d(j\Y:]^U1.(<EhMC1a6SA(<*6``'P96J@HtSN_b$(JEiEo#:l(mJ0BL-G5Lre8"(>fUrb/JHn2_o/-4HE-1<[]PWl-hW7!7?%J=;q)\)r'lQnV)B@VsPS#5b5ANDZ)ZP#J5(-k*Sq9i6'Bt$gqI\-&K7+=2hO)$>urfB.+Ei#_R5pNHnXMj-6b[#I<k/p@c.A#5[aa,>-fY_7B`XNM>T(rWYQd"$#K+95t$0_e#',&oBT<9j''YO_#f4,9`fhl'BE!7%L#V'MssP-,5fU;OZ7\2&d5UYNlK6bA->i_=2flB6%t.4m8Ct@<SYiS_muBI-d[YajSQ_^jW4C`eXd+KaB&I`+aCBp(#+[EinL0[`!&_=fQhh-FMW0d!iA^fg3K>fj[#-)"p;*9oRa?SYJ[D5nmOsrr=.,_EKPqBM5=.ja*r/D=<@gH:\rd:3P[S3n#.e0X\00^D#6*FG9t92+i4]>K3B`#j%s9#AUn4?clFcOjMo;V[IO#Vf53Y:e(I),%=+WDlKeX:P#6rKb/h
 \M(L9!]\&^3,"Sp<Qfe2J@7$UL+5f,5Fh'U$+2!*aTD>8!O<ajJRGDtPDiK:cl'Q\M@W2L_j-ACA9("q\ABFPtPElV"h6U`s1.Y9Olr/,MS1t1g3_XQ(;9>Q3jVs&O(h5&C9dLQ*eLHnn!*#rdV:f;Apak5$[b@7[8K<lRGrC3kNh(qc^rJ.f3=K$1=kGOWLDjOO*BWgs*@etYZBPRHBn+KV<K!=(.3t:l30_)V\ok%g\.)l?lVc8.7sP_^KCl&TDSR(q_IT$R+`ZIVHH(*X!S_2umF:sq+Dh>s8>hGWCDNp:9_V^K87@1<XdmC#1QcsqiZpFPBXf(75iU@hDgH'BX"8lW*3R&4`m-+i5oKc%FMp3`0r[PRP%`MHBlYhCluj"BYUCX1+D5sRD$@ep^G$tJDm+X1&17K)$_^'!-iV1hfaKCOnAAbtBS<B>XK;+#ZuaPNLI_uf5&"]!-.XY(DZJ(g1ehHFYqo\e>^,=J^WmhhO,MJnr)6tL(jZ-OHpL,SS2p%rT,_Jm,r,%"kHs?%(+(DYbjcd8Zj]bL*@nKZdfS6_a"78.:tmM9]G0']SnD^mkp9X;*JUl$49#X[<gU.P/:a<p&i9"9XY@ZVG's#*E8>_[]C-jMJ_Nih.^Y*A^WDqYZbXCSdoSFp?_Luk,#AW>LmJ-A9mYXpi`kB3(8AuL^U((=;Q,6\H36g8Lh(Md5r5:;2tOH25AIab[2)E`(8\?n>)E@A[T)^QNd0(iG>!E`)fs=_HL_9/HdTPE-&A[Me_:]'feoKm/bF6aT[s#o*XQ%?~>
+GatU4hfG8H&:X@\_.,7LlB":/\3;4P[b'iioPWZtV@N`=_hA'o\Z,W+>JR[J(_N[:9KWTfX4?XI]:X2W?G0RH^9+??L&V[afHm[6"9JGs]RPCT4[pX`3N[Cde\A0>B*CVg6tl:4n#8YlHrt;fmNCT-+*C%=*Y97ccMGraEco\F^NR=Plb>\54p`55W#Ha&!r!h"WZNShIP(Vd#Gsc6>s#7C@-<g%O(hn![P%623r)RK8rkoRMZhM9hGm/n79QS&Ic'MGVX@tboW+$D7k,uO8>L^#>ph.&LpBFk7('LnUN1Y4pV])+8,VCR7FRJi.TB9?Fg2$hR"6#u.TB.iC<%IEJ?Yg"okE[D(f<nW^m''r82,011#6^l^dB"1c$U3Ed>CGn,RTg:-Vi.,.*MF#Be+n#ZO<!QgLBR&R>1FH6A#c,d\BjC?!I!6R;oV"&bcFYC;KO1U^uPIeI]B,H?E')6]Y'd7Wjr?#a[JQ<`E9+6,7sn]6TI-H/Q4'Gp2)H-e&ZfV82j%B]E98%Y.E:;\F+3RejQed<;--7dTlm,*Rp7/!ke/]TB?O0GcA5"e[X=P@,k;-V>'f`hpo5HFM/^bKS:bma\s;N1/0DdAf33EA&O6B_#)+W4CPjF<D^u<FK@7+[):G?".0U1A[<d=ECsT;K,oAmlIc`c=RDrS9W'p#t#Kq@u\rL;jV(oACqC2,-Nf0fgM,`T$W86$DGiYGY:hGBX^Ad,0_E*lMBI*ap+"T/IQMPq0R)1T-c8<@HL"K0N5*9k]95gn/EH^he?_jaSYqH^%ampOko@:kT6B?E5sr!N]E%dQG!CQm-h-@]ola:l7\Q%ir3,Bqg<YRo_;o""hNMI8nRO@Up:lmPLU\K@6V\L/mG=L67jB&\AY-q+;V[]25L(S/2jUI30#.j@2?P'd"f%Eq_rSHL9@W\I^<!/m+_#Wij$R(FUZdJAn%CN;n9/-g%lXe)MR-MDetCE&n&RAm]W'WMU#mlRq^2
 T#-*IK5"Rd[kAEN_+ZJ4T[Qtjg9RS8<6\V],eG]'0kAntf8T`G[F>A.Zo@%7J?5FJO`dX2B`Jf2@LG88cJO/LdBnBrE51$KSP^4B#]>3b/6si\pO!7D/2Cuu\F#3>/02A0c,%q$WIbRGH7UV&G3\=Sa0i22c<n`BAh)E^ZKO"2;(Zc^G`F@]!/qT\N$`T0=j@EZk3%e/X;h(5enJ`C/d%!<Whj5=LXN#KMmt5:_c/Q:L"4"b1'"6A/pWfbemlE9T*h`^"6J1Eq<7["=;2?tHB9Bm7L('N]+^"C8D^-qmMeX]"/1/.:9I5Tb@jjAS(rr=u`Db$bk!7'U?e6JP-qZIqc1oq!>Qo.n/hB"B'-=O+8D;;GT8ljVfS^pd8!?Y4q!*;G[D^&^O:jU:<4T7$iTsN-H7qN?@>9JZ`O:AAMFid:J\J1Cl(eRJ%GgaqdpLfCQ$/@ET"&'dVO0biW,3W_Mn0"#JW\cu>?]__F1K<IA^$0$39c?g>q^2T?^i\0.i^'eF2!@[NVj'K`!g5LYAkNtL;\3ZduIe03LomjRVEgucHIRI%Ir,o:4R0NiD<9U(*=T3=>-8^&+RL--h4GpjniF$1PIJEP;-IrF=MW\-\j2(USs&^="YTZTD'V,4+EYGIFKhZWOq4dW(aoSAA-D@ZG)WC$B/H<WT8<Hcs3QNdfLM>.^aPeTQ7\GgCq"jBqI(,!o%ZKVCl:pk_.G1Pf9E.[u^rhL0WqB6/KOg^mqG9;B>Y[l.oWp4#38"kO"/n)#3&FX1t;KIIHl(nSjNm$hO?5CSPgT-cU-[b)8@eN`&`!YjEO;Q,[Q&g)P7U:q.d&p;54j39?[K!I#a'*'6RMD;FR5@[dmI$_sE60M_:s6+tX?"$%8)2ac!>j1BW4Sj\Ln]WZNZ2Or2$&f]/fj'Z!$6Y"fkp:JPq7H"3nl*:Z~>
 endstream
 endobj
 34 0 obj
@@ -218,10 +218,10 @@
 >>
 endobj
 35 0 obj
-<< /Length 1775 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1691 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gau`T968iG&AII3n7^/##k?oL4k[!/Wl^4S>16-/"%>NhCPkq[.$"=U5uJsE1`oVa:<$e)!FckWh`e<SMqS&<p<O.O)u]Y_k1dtc*66HV)))!(k/9V.VcG.Gea/@Mm3D_p%e@F*G7WKG7"8@@B6HjXlQ9qCPkqUo1Ma8%5$b+h\?nG(Mr-@NhpBm9Z0`aU@4'*%,'.`?,fqMAT,V8=L7$U%OY1XD.Zpic:u?Rn9&]HoL]j!]N$;;DOP'gAq]OZ$[$("U=bsc4:mf0F<TkcZ9u@WTUHUufjEoEL'Vl=C[/YkPOQSmuh*)E4I;PKl^of`TCT9X:7-^h]!T9\_&'*PmG=$-mO=\n-MJ*,T_ARAR0eX&1o?#u=-,q(e(m-GUg'0f#;i`N7kuoEjHnfT^j%UGj6RI8N1q2is]>!fnN!kmkqe-!Qr3Gghp0/;=[>U(ig5,)sD952Q]?(g.H!L;"69lWmYKP*$5YB_>k9@*qm:@f@3d?1n[1W+m,YLK!BY\m`MC)f<E'u$H\FsFmI%9pl:F7pl.<$=G!IHCO1nm8gi;'e%9J7F[1Y:.]o1V/*EGC0km>#&e3Zlb-';f4+E*USf'3[o9\D)`m:cXAR[ClE_dQZ/NmWnM7+=*-;[!gm.NdZYc@LTf3R)Gk+&#WaV&FRuhg>@5icRqcKr?2K3k]NJm]QP2b64c?l8OD0.f)[i8,pgVe#p>J+9N<F'G,),++Vt_a:r'Vo0U.>l"fjV>eSDe35@f,3DfX?`j_?Mr'PBHW?q`&L0]K%mn[KC7OU'dZ>'#0tj-f3XbhTeP;cZ03?fb"%*0+9a.rc=;#'Bo#aQ.5,Y,gDt<<NEM3TOQo[C0ZrCbCXP>QJ(F'BPr<G/1mDO[s_)1a?!SE:&ZC%&7[WXkrkMmYhlKSVoUoWSn]-,#F53IJQP0-JM4knrT>s9iaZ:FU>&#ljp-B%];p)_709H]Joso(VtA"Wo3/B!NNhNE*f87T8Q$<mjTj
 [9A\:M:u=Qf/QRS_rRXm4<@h'f`OtF1ZGU"*W;#m.h!MYkUTHK4IV93eAL"3:A5)M2fr1QWCg.(Z4;pjaNi,g=5nsoQ6kqcp)c>!BY2^2D.V0[lcVoMmXkQi6*E,>7M8Z2-BHg&L15j@)"DLirVs;%`,\3;i+S3V;!1V>K;WN-,$:[1s*7%UNYPUQI&+c:FO8!.7<$5):%D#10*4?L_+\st8',9PTjP+.8kaLK@`Osk=#K89Us!clQ,EK@9p$@9[qm't*k1+QDh+]/)H"!`Q-ChNaSATPKOoncb_6`?LiAY>N0-mHfJor>hMKTY%EM5^\]RnQ<CZ)Er@1-nLI2R,>NqN:.GpX`oC(`c99$-!YGGpoJc9'`aIF$t<hTlf4b2XM"U&JF:T)LXDk8c]LkU6e>k7^c4e)Mf`-(ksD464aO*hp5o1miZW3="$Dcg>a:IF?N,&hk`R_ZQ#"$,QX#l(F7bhfhcaMDT[sTS)JV"ms`e_k<b0/=ksmr-A/:"1td`O(Nj>if=q3@.(GmEnWJUlO`)hFYa1ij1Hau6]CV$E#`?.nQj-X#01m,o'V'2]%;30[AuG/'E?]FK/_(u+enEd`4C1H<#r]thNJ:%<AeFV\O.@e;,k8/Mn*k>:qLC?NfR-Y&RIRsfC]dlpIaR`IGCT*^BY]d>fD7tfWL=_kui3T*6b]CkK%kWjY<mt&X#5dJ'Hut[L?Hn.nrSpDHAkC]lnP"1"G9\1etZ3P&'_'A74Rd*muGb8j!/c8^]66]5t1l\]DL@#X%YW"ck@:[K~>
+GauHL966jf&AJ$CE-/)m/J8\Wh:!Y@f^):3Ft::dk9,CnZb_G$H(=g0'k"*Y#+Xa.jbdOS[JKiE2n+^uVoA#;)0Rq7n&m8&OmDeVYJ2NeJ);pj,L?%R;E1`15I9+&"J1Z&3;qTElsQP0/ClVd+`d5\4"VWI&IteHfK%jP91%9ro>=`/V2:o[;+H/mn4;NM7uCD3T*X(0JObf?';X0DF$gj+kHW62.5S:R=9".[RJ"9,M-6rlBbigkjZZanQ"I"A1&Jr(/7^%VA@CpBNA8c(@O8g<q9-8fC+G<Jp.Rb86p&Y<;.OCb<@S"WW:!]Y!)*m%g7jf$!c9LCGcc>J!&7/N%N&'9em0W'1uA9Jbg/s.)c:dfT8*f4,/e/6$5aBuhhmeB?ab'MNY[@RE?=[Q%!%E8<9.fH#`6b+d@j7!f&7O;L!IhU:\NR_VII$>J5=cPbN-JpcVCF@9If9*9Ypm(:;hU^IR$`ZW@uF(iWYCP!j/8GH4lt!o!H!'DiJjgniY%47"TY,6c?^i$Ah%l(e-f8qXGkm\#%=1^?XD=pP[1=/n3X"`I=Y9='spubnWHSR[@)riGuZF10[@l4]H$AT.<d)qa-/#drR't2@W+jD^B?IjE2*N/62TSqE:/f54W.n:):M'g9IBR0%u;>To%S9eb]eG2:b7#1E<UOgpP^Krn[)q>OhIpfQMCS((VGTF:ZpnOO5X.C1UkG$&\KPJnh5rYOD]hF/)A=2b37*0LicHCi8cX69%:UjRt$E=q++]<_u6hWfbWHI=W`'RR]a+pIWADB\Z')=P?gf.X+<.Fq&a-3#R?r0f<[T<,4nrWD1g!^i>jU'TkS!=pNTH6c`'pMlG]fH8,_n9gZQ\2D68c\ZtQ+eRLEi11!r_<ji?'3b\/Si@3Nj*0qg0kdLTdD<\=#U@)j;o7U!%1L`.Yd-4<VSCD(Hd05-oM:Imofk`f('[A2ajBV)qbK/lNTJR+BOA>R^*DP[!)$:/O.qc>
 \D(h[F1r+AFPe4h65]uQ%M9bV3_f+au4jPo%;oVb<0k!,'Xn1d2ba(TM5)18I!.QT`g7l4mnGHISG*J$-=eOa"%;e+OH"s2?mFRD.>tsP%#Xr2%`hmf!kat#tRP]cdCKd_!eK5V+j(\^GRt"\)'%uuaJ)L-oJ&YVgM?7(h/E0_hKZ'VkpM%sn&HFpTSu9Okj(c(=DnG(gQ6a$Pp"j6$RNcu^_/-#7Mr5CHJ^a3*Tb.W7eBM&'eFA;\jR8YC#fS3NBK';KeX4!]^*4gj1^[H,((qrOLGgRBDF1Ml_.W_Gb\fP=eol9F>Gl&/IdNXoYTA]`1JG4d[sI4QZSPSm!uH[bV&-$5*)Yd?V['-$g0tjK,1`MpfNlsu'o#@eI;f!n3BnFb.t[L%W.H,?NMt@dV#[kpYJ?:NMsA'eBVf/MnkW0Jf'&3Cs7+\)%e.%-H9Pu#+:Y2o2[J;k1c<6$-e\R8:T!'ifDW6SPto(^!-+X\:#S-eO@^F_P@o1E)GVtH!XF\$S%>IdJPVg3(SSDMo<e7jGc=k/1["IG+s<3$Ds:G@C#B9L&Op$]e^YeJ2Que.,h%;`#"QN/jr7a6@R)O3[YE8Q5m#3ERmG78ML=Q>\epQIG`]m;R;TGB1'D%7HOtqVMWdOHXH"^V/j;,VCY"PeXU_uH4.eBh-dB7Z"N[mm//m@[=Goe95=GW=pj^\R$)R~>
 endstream
 endobj
 36 0 obj
@@ -233,10 +233,10 @@
 >>
 endobj
 37 0 obj
-<< /Length 1753 /Filter [ /ASCII85Decode /FlateDecode ]
+<< /Length 1883 /Filter [ /ASCII85Decode /FlateDecode ]
  >>
 stream
-Gau`T8TWWE'Y`m7n7^,n-j^Mkg6:nbBq!>SNHM:JJ4N3t9b@^=H271<\D_uc.4N_W4SBU7hLb2Jpjh,\idSH5]'u5lqYdop>i[qS(ok=OdJprl&eAF14!et!Mr,>[-O!%o6Ep<u&&e"BqQSa+gfhd!5G$oGZ'HXY$JiL#m[ZSFkdC"'f1N2d?HLaj&(f+!cLPVE_s;Genr7'B7S2BmY:q<:5k7C;2<ZD9kR?UcIQ_tg*YT7?lZm&(UiWDb!(B)[Kn!OaQBa\^,0SYu=mQC7)p4'2?S%J^\.n**4Y?HfQrD*XkB\ChZ_rr(*f;R;&n?SV#?1FR#GmJ]:07Q/b#B(\'Y0VKDYI8<b`"HS"?T=VE@`A@o:4!*1OhBM#>q`5okm4@NKK3a3(1K9)m;@<,,=0+UDY_n^iCmt6Y'F"Di9381%KsqY9VYkX:*dV0L,s7)Mb[-!%=<!'oY9-E65g8=Tq&("\8n)fj9oe!l&4/;=Z(ga](NM%:2!"gbBXs4;Z<Z1j^Qn+p6,m=YAV6S[+FseSLbS'^R_1at9=mRdM"r$h=#5fR];9c+.j(SQSR69G"Y_>3Ra+K^U,5XaYLHdTn:/ENC;02#I:5?JG\ZSXRH9Sb#fp#i/ZOj8OZ@=HP?pY;P2raKMaMo\*([?<0sRH[TNRRjGHeQLQ((Ok1JsBe-^)2Ngu*lFA\1:PE=jGs"W`h7ocP+LrnNU"dolm&</]W2qA\G<m=u&q.K`IEo6afH88PFs:@pnk:><hf&c,5\qb_f@K==!#<M3$*hW@El::K9B49$L\t\$%RL^%QXLeaSF87A%ap0+fG=?s+P"L37mn`)4A^fL?fa5s2j\f_Ng.X@IhFk",H@knq5+Mf8(=UWWHttnKBL7F3\Ao>I5D;Z2:2;;GK=qLji^ne!'O`>]W]W.^)Y2ia\;Cc$:83bmh851RTCWGP!1XjL.tXN3ZZ3Hd;2;G\IB(aRk3TG$T,&>e#enuGa4^G%+rg
 8C'=o0M'(H-V!AluM9a#4`"7H]Qk=/W@$64<pDTb93?/IWbVR)f7EJA:MIoOLf<^J^N$[@'Ejf$M*-@If%J[2;U`)/TNEnT/3sd*"(5K2#kP^.P`l3j79uQc,=.&)4Ff.:<2a>.Dl=0"+GIfJ+<>j<mRMO60E\rn4?lV6hd@*Sb"3`\4dZ2&=rKH/J&tk=ogUM.UG=!73Zd_h-d+k=rgem!u]o<]t\)Q.ob%&Og*Z;["ke2C45i5X(Qb]L5FDdTIp8>grc'#OM;]Vs7h&@a"jI\CLk1_hT!-*JE0aP`$YJI5\P)FPo-K)Nge!%7bCHWbXcm;V1"%4CL)2RtN8qhmu%'JJQjth@f_,5kj2n&Z%Pdj`P\"A.\Rqf+TirI%cNV/:`$>KrM!%>\FY:E^\fIu:U>,"g\1L=.aop<Cq=MblgY#r"0rp'o7ab:.09CrCeWqPN>MC!4"Pj3.VBK2[SY]icn8OsL#-p7g4VAPO6<p-i.$f$'ER,e,3HNuW\IIcB"`V^A<[D]V/V?Yojq!Xi`YS4'HK&jjk&U#BH;S:Ao8`SF)C,V^MDPM?RcBL^?G-4"afcBV]gk2E!C`G7sN]cX5TmlCWYIP+XDPZ:L5'/6k6pGa0\n<X6kZgh_A)BjW-];0cI\U+Z=UW(.4L`/^759f(![!P)"stL5@TCsgL&Xmf?;&#geK@A%h8D&<bQt80Cdp#:C^)h@>;kLHZ'!A>">_-!82@1u!sj_E\J`o*.kkQM/"]pu%!I+&lB[6`~>
+GauHL968iG&AII3n7^.D-ijs.UaOo:;E*jI[5GWc3D^tHZ)1'WK];4QG<q,)Jg)Wom;t,R#Tso8rV#mb\+A;OI.m;n>&3p5@2@S8[QMlg^FiU&J)H8!O#pAkXQAf0g$MoC(4*nfbC=n8/^!"pHo86G.3&7`X-)HaTn."(\(9`C"_7JaqI7^!!MQ_2C'COV*$m`E-m9*_d7Nh+#q%!L.?RZ_TOP%fQ.uX%W4-M3`Cg/*d^?$L*q(VAkg<$Q2gQ`i=f.p>Me:nZ./!AeRlb^#qJc1Rk:k=e6Vjdt!-82S?3V6si3qe:U8iN2VBFnO@AXHf/CHcKXbm`W+UbY2N^Yg[FXE8/`amK7[)fS+*i8\R2K;^h>W)qC$a@0J?lJb%rStfmLR[$opJZT!+>T"^<j#<7>$V*Wan`j2iaGCE<pZ\EjRK)unm[Z1.<Znb4/$r+O7/:*oAP.dV(q>pg%>h^M_rhV8=f;jD#1-^EcI?Zq-&9n*g/I.oWA\kGn^%p3L'k`ampS/'Jib[>b+kh=FL1#jHL!q;3if/pfYq_9>"g2Q\Zsa.).@:-X>&hlT3aP%k'$)X?uG)ULu;$\']F?V?u=%\k;KtPUD[R:\<.2P,'ibngHT46(?$KBGG<]g;#\B1E%.$;Sq5)6mQ*1"jjMs.$%LI(Jr21liM$;i'Up.G6`muBZ'1un=BbLF)IlO(d.21]>lcih<m&'"`O*,a*<0.2@2]^C1G9Q)-ElA;a&C%-s'9)/5T>_*'Dh#%V=cL7Cabm/rDT>/;rN`=brUs8XuVb(9*56.s,jgOSJdFhjb5G3/^c3*lr]_dA<do3N[)@5f@Rbg]WL+&#&$m6>h\!oY3pD&9JnIKV<%YVeYO'Tam5a1r3`5EVct]'9/H3,BHjq=n,DEIgVJLJ%Hn-V<^7,qbiq9pTB9Up11_S-8&9QktblLC2ME/IKk"/W7GUNIp7q=2phBk!_`i%2aUqX825Q*KlJ-5K=?f;\i$]
 lf3CO,?V1@%aDo0lOB36"J>bae9!Q6M6&"m.f$%4;(79F?db2_(gQ1gAWg^/M1D`Ba\)U*.7jI5XE)FOhE4\anM+PmXJ&)#LEH3AQKmC*emiT3VkF[SLkn;l^VQ^rhj/p=@$15q03s_uagF,jAq^dn>0R+MqE#)"m?l+uK-c!ECZ@.<f`%qQNPbT7Hp_pKU<tQSD`BKX91<i^RR.tQ+mYXV9"S5r4aDg?U*4enI'dXo9l]35^N,GmMMsVr>X7nilBfa&e\a-_K9a^fe)0a>f1?ALcVjoXP.2C(X;IRlnE74d"2su,`Nc,mCZ>EGG"8kd0H^T=OPK1;o(r\e#`9`(H\YV9kq:AT>`c.:S>Jhg+`@Fm/#rk1fChn^AO:j+?`,A^A%GcV.E66eAaF%Y@m5FpOfVnhG*1"XD`MoEs)s$m?TiG8s;LLX"0%_^8D<6]Y7;ED=EmtAp#2*:P^oE_nNuo&B/GD4TP5B1&fVtnP3p?9I2g_]f0Sk&4Tbl2jk1VlQ[@L7X,]NU#UMhGGpE]ZG@M0r/\sW`*\_L9?P630PF(r.//!lm1c&=Bo0>j$JR-u5,$<!L[^_HZa+B=3smtdR[EZ/thjhm-"Y=`m$]AmThnC[:+>oDLY,/)tml`!BseuOG;mn%#j7%bGPHp"Y!/ff`48V\Uu![(OW$SA]5bD-9r=kIP1$W[4:?1jIYJ>J"7a/l<P6FJh_DXL(cV/.!#?FN]DJU=_LcYXB(IIR3?/]5D02<C*P!:D;V5q-1o<X>eX5O.rhZkgYq*\rc09q]9JSbXm.ccD>l&pi=?JDmaX;Kp+J:o<PQSKrY\'7.Zt*\h'cH?<u@c/>JeO*^_'XQ3#RU7(bkNKQi+:QS\Eks9`@KuTi"j]Bj+&7G5C,?TqA~>
 endstream
 endobj
 38 0 obj
@@ -247,104 +247,112 @@
 /Contents 37 0 R
 >>
 endobj
+39 0 obj
+<< /Length 1227 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gat%#gMZ%0&:O:SkV3*9Y"4D\ZpfOVS)&7s5dt%6eU=*eOj-?2*K&]1J)?B)RA=T@0ao!BMK@aERA8`YI.fOl4jRfG_XGNJ*g/3JOp$8EhYmJ7d?Go-L1!%=A+jm7p3.U'5T)bR=0o-_$LpK9]d@A;$0,F-$3%O3e_HmFDrjI<Xg4*%:XD-5mGCP$el?M.PM9j2mXiIB="DE+(M"gX\&>H+Q_cN:255Q5F7u'36rf&S?AdaaY,LGH:n[76_>Fs5Orkhbi.uGLngO#?.@*I5r]^ie,8,tn`W5Yb53,R9ihHU0:oO5J3%<0F`8ZmsoC#)?1^cl=<cO4mYMh([%J",ok#-**2/Fst:0ou.B+GPbN3EdM2jursPja[)c^lCW.7qOjZ8&"&;)j>mbsVR//?jf3_1L)c,.=4J"'I,HoE;B%9o<-6Z,h@jg(\I]/]nrfICj]i)l(3oBMY9MS!@@Q-OL1G0-"6!Kk&*#ao"-d2dk4:oWo(i"F,mG":O(1Y.O&"cB3Z,K]8AP@pQDV:2'V]gq'Rd?)nbPQ<(.,@<NR'^Q`T,;j%S2^F@j,3!jpVDX<:aQCLIaSJ?U+EWu:Ub[V**[9ha]8e"QP9*p[(D?F'a>k[47b%&JA5?TKg4?K-`+8Y@I@rj;@-XbbWjJhO&QSl:Gcnd0(6tpg@=YRjn==;<RNB";aXc"XN@2tcQgFl?$[0Fi_j&D[$SZFJ^0JT:*GCKeM0D4qUR\j2#R30JJftC^Aq"upIm1e`i(^k%gYu5mI":)G=C?sZ')9UM]DL]0`T+IFi])85@Z-;P,jnuXc8,516$G/9WR'5k#a'#l&M?t<hNo)KBHYl.q\%>f\3*A@dn+Irg0iBg@$HZ''fYH.2;c#rneQ6uOPapaW_0kA9FE*mSUD%gJ@-trD+WHJ:4gs`Me<p:dIs.%&Sh0XrF^E60Sp/O"-nhJGTiVk(S1r]H(P\Q1H<^V44_G#(6/K"G\o/aIHUL`0*<Nd
 9[5?/k]A;_RC7uSY%q2^c_fcuk42pq:AbeNg#NVW*4W/BsOLXj<@DU2Y0Z,G\>l/8h2Z'H>^7?g1cKd+hh5K4XTj^PkI^gC@C[ph1:^qUNH8;cG=Y;i?p-l'uF-Sf,U>b'?5r+bGgpp`fNq7A0K+'i5dClORCAY$mC>HdsAj*sd:9DHrXfZ]49D?;O:YAeJW[dTa['T<(P>V%%6QEMF[R0GpF_#/OItNndi;Ng3&1I;~>
+endstream
+endobj
 40 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 39 0 R
+>>
+endobj
+42 0 obj
 <<
  /Title (\376\377\0\61\0\40\0\120\0\162\0\157\0\147\0\162\0\141\0\155\0\155\0\151\0\156\0\147\0\40\0\167\0\151\0\164\0\150\0\40\0\102\0\157\0\157\0\153\0\113\0\145\0\145\0\160\0\145\0\162)
- /Parent 39 0 R
- /First 41 0 R
- /Last 46 0 R
+ /Parent 41 0 R
+ /First 43 0 R
+ /Last 48 0 R
  /Count -6
  /A 9 0 R
 >> endobj
-41 0 obj
+43 0 obj
 <<
  /Title (\376\377\0\61\0\56\0\61\0\40\0\111\0\156\0\163\0\164\0\141\0\156\0\164\0\151\0\141\0\164\0\151\0\156\0\147\0\40\0\102\0\157\0\157\0\153\0\113\0\145\0\145\0\160\0\145\0\162\0\56)
- /Parent 40 0 R
- /Next 42 0 R
+ /Parent 42 0 R
+ /Next 44 0 R
  /A 11 0 R
 >> endobj
-42 0 obj
+44 0 obj
 <<
  /Title (\376\377\0\61\0\56\0\62\0\40\0\103\0\162\0\145\0\141\0\164\0\151\0\156\0\147\0\40\0\141\0\40\0\154\0\145\0\144\0\147\0\145\0\162\0\56)
- /Parent 40 0 R
- /Prev 41 0 R
- /Next 43 0 R
+ /Parent 42 0 R
+ /Prev 43 0 R
+ /Next 45 0 R
  /A 13 0 R
 >> endobj
-43 0 obj
+45 0 obj
 <<
  /Title (\376\377\0\61\0\56\0\63\0\40\0\101\0\144\0\144\0\151\0\156\0\147\0\40\0\145\0\156\0\164\0\162\0\151\0\145\0\163\0\40\0\164\0\157\0\40\0\141\0\40\0\154\0\145\0\144\0\147\0\145\0\162\0\56)
- /Parent 40 0 R
- /Prev 42 0 R
- /Next 44 0 R
+ /Parent 42 0 R
+ /Prev 44 0 R
+ /Next 46 0 R
  /A 15 0 R
 >> endobj
-44 0 obj
+46 0 obj
 <<
  /Title (\376\377\0\61\0\56\0\64\0\40\0\103\0\154\0\157\0\163\0\151\0\156\0\147\0\40\0\141\0\40\0\154\0\145\0\144\0\147\0\145\0\162\0\56)
- /Parent 40 0 R
- /Prev 43 0 R
- /Next 45 0 R
+ /Parent 42 0 R
+ /Prev 45 0 R
+ /Next 47 0 R
  /A 17 0 R
 >> endobj
-45 0 obj
+47 0 obj
 <<
  /Title (\376\377\0\61\0\56\0\65\0\40\0\117\0\160\0\145\0\156\0\151\0\156\0\147\0\40\0\141\0\40\0\154\0\145\0\144\0\147\0\145\0\162\0\56)
- /Parent 40 0 R
- /Prev 44 0 R
- /Next 46 0 R
+ /Parent 42 0 R
+ /Prev 46 0 R
+ /Next 48 0 R
  /A 19 0 R
 >> endobj
-46 0 obj
+48 0 obj
 <<
  /Title (\376\377\0\61\0\56\0\66\0\40\0\122\0\145\0\141\0\144\0\151\0\156\0\147\0\40\0\146\0\162\0\157\0\155\0\40\0\154\0\145\0\144\0\147\0\145\0\162)
- /Parent 40 0 R
- /Prev 45 0 R
+ /Parent 42 0 R
+ /Prev 47 0 R
  /A 21 0 R
 >> endobj
-47 0 obj
+49 0 obj
 << /Type /Font
 /Subtype /Type1
 /Name /F3
 /BaseFont /Helvetica-Bold
 /Encoding /WinAnsiEncoding >>
 endobj
-48 0 obj
+50 0 obj
 << /Type /Font
 /Subtype /Type1
 /Name /F5
 /BaseFont /Times-Roman
 /Encoding /WinAnsiEncoding >>
 endobj
-49 0 obj
-<< /Type /Font
-/Subtype /Type1
-/Name /F6
-/BaseFont /Times-Italic
-/Encoding /WinAnsiEncoding >>
-endobj
-50 0 obj
+51 0 obj
 << /Type /Font
 /Subtype /Type1
 /Name /F1
 /BaseFont /Helvetica
 /Encoding /WinAnsiEncoding >>
 endobj
-51 0 obj
+52 0 obj
 << /Type /Font
 /Subtype /Type1
 /Name /F9
 /BaseFont /Courier
 /Encoding /WinAnsiEncoding >>
 endobj
-52 0 obj
+53 0 obj
 << /Type /Font
 /Subtype /Type1
 /Name /F2
 /BaseFont /Helvetica-Oblique
 /Encoding /WinAnsiEncoding >>
 endobj
-53 0 obj
+54 0 obj
 << /Type /Font
 /Subtype /Type1
 /Name /F7
@@ -353,19 +361,19 @@
 endobj
 1 0 obj
 << /Type /Pages
-/Count 6
-/Kids [6 0 R 23 0 R 32 0 R 34 0 R 36 0 R 38 0 R ] >>
+/Count 7
+/Kids [6 0 R 23 0 R 32 0 R 34 0 R 36 0 R 38 0 R 40 0 R ] >>
 endobj
 2 0 obj
 << /Type /Catalog
 /Pages 1 0 R
- /Outlines 39 0 R
+ /Outlines 41 0 R
  /PageMode /UseOutlines
  >>
 endobj
 3 0 obj
 << 
-/Font << /F3 47 0 R /F5 48 0 R /F1 50 0 R /F6 49 0 R /F9 51 0 R /F2 52 0 R /F7 53 0 R >> 
+/Font << /F3 49 0 R /F5 50 0 R /F1 51 0 R /F9 52 0 R /F2 53 0 R /F7 54 0 R >> 
 /ProcSet [ /PDF /ImageC /Text ] >> 
 endobj
 9 0 obj
@@ -383,100 +391,101 @@
 13 0 obj
 <<
 /S /GoTo
-/D [23 0 R /XYZ 85.0 369.413 null]
+/D [32 0 R /XYZ 85.0 659.0 null]
 >>
 endobj
 15 0 obj
 <<
 /S /GoTo
-/D [32 0 R /XYZ 85.0 289.8 null]
+/D [34 0 R /XYZ 85.0 588.2 null]
 >>
 endobj
 17 0 obj
 <<
 /S /GoTo
-/D [34 0 R /XYZ 85.0 345.4 null]
+/D [36 0 R /XYZ 85.0 622.6 null]
 >>
 endobj
 19 0 obj
 <<
 /S /GoTo
-/D [36 0 R /XYZ 85.0 502.2 null]
+/D [36 0 R /XYZ 85.0 264.947 null]
 >>
 endobj
 21 0 obj
 <<
 /S /GoTo
-/D [38 0 R /XYZ 85.0 601.4 null]
+/D [38 0 R /XYZ 85.0 362.6 null]
 >>
 endobj
-39 0 obj
+41 0 obj
 <<
- /First 40 0 R
- /Last 40 0 R
+ /First 42 0 R
+ /Last 42 0 R
 >> endobj
 xref
-0 54
+0 55
 0000000000 65535 f 
-0000015819 00000 n 
-0000015912 00000 n 
-0000016004 00000 n 
+0000016858 00000 n 
+0000016958 00000 n 
+0000017050 00000 n 
 0000000015 00000 n 
 0000000071 00000 n 
-0000000805 00000 n 
-0000000925 00000 n 
-0000000992 00000 n 
-0000016149 00000 n 
-0000001127 00000 n 
-0000016212 00000 n 
-0000001264 00000 n 
-0000016278 00000 n 
-0000001401 00000 n 
-0000016344 00000 n 
-0000001538 00000 n 
-0000016408 00000 n 
-0000001674 00000 n 
-0000016472 00000 n 
-0000001811 00000 n 
-0000016536 00000 n 
-0000001948 00000 n 
-0000004262 00000 n 
-0000004385 00000 n 
-0000004447 00000 n 
-0000004584 00000 n 
-0000004721 00000 n 
-0000004858 00000 n 
-0000004994 00000 n 
-0000005131 00000 n 
-0000005268 00000 n 
-0000007359 00000 n 
-0000007467 00000 n 
-0000009343 00000 n 
-0000009451 00000 n 
-0000011319 00000 n 
-0000011427 00000 n 
-0000013273 00000 n 
-0000016600 00000 n 
-0000013381 00000 n 
-0000013658 00000 n 
-0000013908 00000 n 
-0000014129 00000 n 
-0000014402 00000 n 
-0000014617 00000 n 
-0000014832 00000 n 
-0000015046 00000 n 
-0000015159 00000 n 
-0000015269 00000 n 
-0000015380 00000 n 
-0000015488 00000 n 
-0000015594 00000 n 
-0000015710 00000 n 
+0000000808 00000 n 
+0000000928 00000 n 
+0000000995 00000 n 
+0000017184 00000 n 
+0000001130 00000 n 
+0000017247 00000 n 
+0000001267 00000 n 
+0000017313 00000 n 
+0000001404 00000 n 
+0000017377 00000 n 
+0000001541 00000 n 
+0000017441 00000 n 
+0000001677 00000 n 
+0000017505 00000 n 
+0000001814 00000 n 
+0000017571 00000 n 
+0000001951 00000 n 
+0000003859 00000 n 
+0000003982 00000 n 
+0000004044 00000 n 
+0000004181 00000 n 
+0000004318 00000 n 
+0000004455 00000 n 
+0000004591 00000 n 
+0000004728 00000 n 
+0000004865 00000 n 
+0000006896 00000 n 
+0000007004 00000 n 
+0000009019 00000 n 
+0000009127 00000 n 
+0000010911 00000 n 
+0000011019 00000 n 
+0000012995 00000 n 
+0000013103 00000 n 
+0000014423 00000 n 
+0000017635 00000 n 
+0000014531 00000 n 
+0000014808 00000 n 
+0000015058 00000 n 
+0000015279 00000 n 
+0000015552 00000 n 
+0000015767 00000 n 
+0000015982 00000 n 
+0000016196 00000 n 
+0000016309 00000 n 
+0000016419 00000 n 
+0000016527 00000 n 
+0000016633 00000 n 
+0000016749 00000 n 
 trailer
 <<
-/Size 54
+/Size 55
 /Root 2 0 R
 /Info 4 0 R
 >>
 startxref
-16651
+17686
 %%EOF

Modified: hadoop/zookeeper/trunk/src/docs/src/documentation/content/xdocs/bookkeeperProgrammer.xml
URL: http://svn.apache.org/viewvc/hadoop/zookeeper/trunk/src/docs/src/documentation/content/xdocs/bookkeeperProgrammer.xml?rev=911713&r1=911712&r2=911713&view=diff
==============================================================================
--- hadoop/zookeeper/trunk/src/docs/src/documentation/content/xdocs/bookkeeperProgrammer.xml (original)
+++ hadoop/zookeeper/trunk/src/docs/src/documentation/content/xdocs/bookkeeperProgrammer.xml Fri Feb 19 06:30:15 2010
@@ -83,7 +83,7 @@
     </para>
     
     <para>
-    There is one BookKeeper constructor:
+    There are three BookKeeper constructors:
     </para>
     
     <para>
@@ -91,12 +91,67 @@
 	public BookKeeper(String servers) 
     	throws KeeperException, IOException    
     </computeroutput>
-   	</para>
-    
-    <para> 
-    where <computeroutput>servers</computeroutput> is a comma-separated list of ZooKeeper servers.
+	</para>
+
+    <para>
+    where:
     </para>
-    
+    <itemizedlist>
+    	<listitem>
+    	<para> 
+        <computeroutput>servers</computeroutput> is a comma-separated list of ZooKeeper servers.
+    	</para>
+    	</listitem>
+    </itemizedlist>
+
+    <para>
+    <computeroutput>
+	public BookKeeper(ZooKeeper zk) 
+    	throws InterruptedException, KeeperException    
+    </computeroutput>
+	</para>
+
+    <para>
+    where:
+    </para>
+    <itemizedlist>
+    	<listitem>
+    	<para> 
+        <computeroutput>zk</computeroutput> is a ZooKeeper object. This constructor is useful when
+        the application also using ZooKeeper and wants to have a single instance of ZooKeeper.  
+    	</para>
+    	</listitem>
+    </itemizedlist>
+
+
+    <para>
+    <computeroutput>
+	public BookKeeper(ZooKeeper zk, ClientSocketChannelFactory channelFactory) 
+    	throws InterruptedException, KeeperException    
+    </computeroutput>
+	</para>
+
+    <para>
+    where:
+    </para>
+    <itemizedlist>
+    	<listitem>
+    	<para> 
+        <computeroutput>zk</computeroutput> is a ZooKeeper object. This constructor is useful when
+        the application also using ZooKeeper and wants to have a single instance of ZooKeeper.  
+    	</para>
+    	</listitem>
+    	
+    	<listitem>
+    	<para> 
+        <computeroutput>channelFactory</computeroutput> is a netty channel object 
+        (<computeroutput>org.jboss.netty.channel.socket</computeroutput>).  
+    	</para>
+    	</listitem>
+    </itemizedlist>
+
+
+        
     </section>
     
     <section id="bk_createLedger">
@@ -114,7 +169,7 @@
    	
    	<para>
     <computeroutput>
-    public LedgerHandle createLedger(int ensSize, int qSize, QMode mode,  byte passwd[])
+    public LedgerHandle createLedger(int ensSize, int qSize, DigestType type,  byte passwd[])
         throws KeeperException, InterruptedException, 
         IOException, BKException
     </computeroutput>
@@ -138,10 +193,7 @@
     
     	<listitem> 
     	<para>
-    	<computeroutput>mode</computeroutput> is the ledger mode (QMode.GENERIC, QMode.VERIFIABLE).
-    	If <computeroutput>mode</computeroutput> is QMode.GENERIC, then <computeroutput>ensSize</computeroutput> has to
-    	be at least <emphasis>3t+1</emphasis>, and <computeroutput>qSize</computeroutput> has to be <emphasis>2t+1</emphasis>.
-    	<emphasis>t</emphasis> is the maximum number of tolerated bookie failures.  
+    	<computeroutput>type</computeroutput> is the type of digest used with entries: either MAC or CRC32.  
     	</para>
     	</listitem>
     	
@@ -160,7 +212,7 @@
     
     <para>
     As a convenience, we provide a <computeroutput>createLedger</computeroutput> with default parameters (3,2,VERIFIABLE), 
-    and the only input parameter it requires is a password.
+    and the only two input parameters it requires are a digest type and a password.
     </para>
     
     <para>
@@ -171,13 +223,11 @@
     <computeroutput>
     public void asyncCreateLedger(int ensSize, 
             int qSize, 
-            QMode mode,  
+            DigestType type,  
             byte passwd[],
             CreateCallback cb,
             Object ctx
             )
-    throws KeeperException, InterruptedException, 
-    IOException, BKException
     </computeroutput>
 	</para>
 	
@@ -201,7 +251,7 @@
 	<itemizedlist>
 		<listitem>
 		<para>
-		<computeroutput>rc</computeroutput> is a return code (please refer to <computeroutput>org.apache.bookeeper.client.BKDefs</computeroutput> for a list);
+		<computeroutput>rc</computeroutput> is a return code (please refer to <computeroutput>org.apache.bookeeper.client.BKException</computeroutput> for a list);
 		</para>
 		</listitem>
 	
@@ -213,7 +263,7 @@
 		
 		<listitem>
 		<para>
-		<computeroutput>ctx</computeroutput> is a control object for accountability purposes;
+		<computeroutput>ctx</computeroutput> is a control object for accountability purposes. It can be essentially any object the application is happy with.
 		</para>
 		</listitem>
 	</itemizedlist>	
@@ -257,7 +307,7 @@
     </itemizedlist>
     
     <para>
-	A call to <computeroutput>addEntry</computeroutput> returns the status of the operation ((please refer to <computeroutput>org.apache.bookeeper.client.BKDefs</computeroutput> for a list);
+	A call to <computeroutput>addEntry</computeroutput> returns the status of the operation (please refer to <computeroutput>org.apache.bookeeper.client.BKDefs</computeroutput> for a list);
     </para>
     
     <para>
@@ -267,7 +317,6 @@
 	<para>
     <computeroutput>
 	public void asyncAddEntry(byte[] data, AddCallback cb, Object ctx)
-    throws InterruptedException
     </computeroutput>
 	</para>
 	
@@ -309,7 +358,7 @@
 		
 		<listitem>
 		<para>
-		<computeroutput>ctx</computeroutput> is control object used for accountability purposes. 
+		<computeroutput>ctx</computeroutput> is control object used for accountability purposes. It can be any object the application is happy with.
 		</para>
 		</listitem>
 	</itemizedlist>	 
@@ -328,7 +377,7 @@
     <para>
     <computeroutput>
 	public void close() 
-    throws KeeperException, InterruptedException
+    throws InterruptedException
     </computeroutput>
 	</para>
 
@@ -397,8 +446,8 @@
     
     <para>
     <computeroutput>
-	public LedgerHandle openLedger(long lId, byte passwd[])
-    throws KeeperException, InterruptedException, IOException, BKException
+	public LedgerHandle openLedger(long lId, DigestType type, byte passwd[])
+    throws InterruptedException, BKException
     </computeroutput>
 	</para>
 
@@ -409,6 +458,12 @@
 	</para>
 	</listitem>
 	
+	<listitem> 
+    <para>
+    <computeroutput>type</computeroutput> is the type of digest used with entries: either MAC or CRC32.  
+    </para>
+    </listitem>
+	
 	<listitem>
 	<para>
 	<computeroutput>passwd</computeroutput> is a password to access the ledger (used only in the case of <computeroutput>VERIFIABLE</computeroutput> ledgers);
@@ -421,8 +476,7 @@
    	</para>
     <para>
     <computeroutput>
-	public void asyncOpenLedger(long lId, byte passwd[], OpenCallback cb, Object ctx)
-    throws InterruptedException
+	public void asyncOpenLedger(long lId, DigestType type, byte passwd[], OpenCallback cb, Object ctx)
     </computeroutput>
 	</para>
 	
@@ -491,7 +545,7 @@
 	
 	<listitem>
 	<para>
-	<computeroutput>lastEntry</computeroutput> is the identifier of the last entry in the sequence of entries to read;
+	<computeroutput>lastEntry</computeroutput> is the identifier of the last entry in the sequence of entries to read.
 	</para>
 	</listitem>
 	</itemizedlist>
@@ -517,7 +571,7 @@
 
 	<para>
 	<computeroutput>
-	void readComplete(int rc, LedgerHandle lh, LedgerSequence seq, Object ctx)
+	void readComplete(int rc, LedgerHandle lh, Enumeration&lt;LedgerEntry&gt; seq, Object ctx)
 	</computeroutput>    
 	</para>
 	
@@ -539,7 +593,7 @@
 		
 		<listitem>
 		<para>
-		<computeroutput>seq</computeroutput> is a <computeroutput>LedgerSequence</computeroutput> object to containing the list of entries requested;
+		<computeroutput>seq</computeroutput> is a <computeroutput>Enumeration&lt;LedgerEntry&gt; </computeroutput> object to containing the list of entries requested;
 		</para>
 		</listitem>