You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sr...@apache.org on 2008/05/21 03:15:21 UTC

svn commit: r658521 - in /lucene/mahout/site: publish/ publish/images/ src/documentation/content/xdocs/

Author: srowen
Date: Tue May 20 18:15:20 2008
New Revision: 658521

URL: http://svn.apache.org/viewvc?rev=658521&view=rev
Log:
Properly generated Taste docs into site

Added:
    lucene/mahout/site/publish/images/taste-architecture.png   (with props)
    lucene/mahout/site/publish/taste.html
    lucene/mahout/site/publish/taste.pdf
Modified:
    lucene/mahout/site/publish/developer-resources.html
    lucene/mahout/site/publish/index.html
    lucene/mahout/site/publish/linkmap.html
    lucene/mahout/site/publish/linkmap.pdf
    lucene/mahout/site/publish/mailinglists.html
    lucene/mahout/site/publish/releases.html
    lucene/mahout/site/publish/systemrequirements.html
    lucene/mahout/site/publish/whoweare.html
    lucene/mahout/site/src/documentation/content/xdocs/site.xml
    lucene/mahout/site/src/documentation/content/xdocs/taste.xml

Modified: lucene/mahout/site/publish/developer-resources.html
URL: http://svn.apache.org/viewvc/lucene/mahout/site/publish/developer-resources.html?rev=658521&r1=658520&r2=658521&view=diff
==============================================================================
--- lucene/mahout/site/publish/developer-resources.html (original)
+++ lucene/mahout/site/publish/developer-resources.html Tue May 20 18:15:20 2008
@@ -128,6 +128,9 @@
 <div class="menuitem">
 <a href="http://svn.apache.org/viewcvs.cgi/lucene/mahout/">Version Control</a>
 </div>
+<div class="menuitem">
+<a href="taste.html">Taste Documentation</a>
+</div>
 </div>
 <div onclick="SwitchMenu('menu_1.3', 'skin/')" id="menu_1.3Title" class="menutitle">Related Projects</div>
 <div id="menu_1.3" class="menuitemgroup">

Added: lucene/mahout/site/publish/images/taste-architecture.png
URL: http://svn.apache.org/viewvc/lucene/mahout/site/publish/images/taste-architecture.png?rev=658521&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lucene/mahout/site/publish/images/taste-architecture.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: lucene/mahout/site/publish/index.html
URL: http://svn.apache.org/viewvc/lucene/mahout/site/publish/index.html?rev=658521&r1=658520&r2=658521&view=diff
==============================================================================
--- lucene/mahout/site/publish/index.html (original)
+++ lucene/mahout/site/publish/index.html Tue May 20 18:15:20 2008
@@ -130,6 +130,9 @@
 <div class="menuitem">
 <a href="http://svn.apache.org/viewcvs.cgi/lucene/mahout/">Version Control</a>
 </div>
+<div class="menuitem">
+<a href="taste.html">Taste Documentation</a>
+</div>
 </div>
 <div onclick="SwitchMenu('menu_1.3', 'skin/')" id="menu_1.3Title" class="menutitle">Related Projects</div>
 <div id="menu_1.3" class="menuitemgroup">

Modified: lucene/mahout/site/publish/linkmap.html
URL: http://svn.apache.org/viewvc/lucene/mahout/site/publish/linkmap.html?rev=658521&r1=658520&r2=658521&view=diff
==============================================================================
--- lucene/mahout/site/publish/linkmap.html (original)
+++ lucene/mahout/site/publish/linkmap.html Tue May 20 18:15:20 2008
@@ -128,6 +128,9 @@
 <div class="menuitem">
 <a href="http://svn.apache.org/viewcvs.cgi/lucene/mahout/">Version Control</a>
 </div>
+<div class="menuitem">
+<a href="taste.html">Taste Documentation</a>
+</div>
 </div>
 <div onclick="SwitchMenu('menu_1.3', 'skin/')" id="menu_1.3Title" class="menutitle">Related Projects</div>
 <div id="menu_1.3" class="menuitemgroup">
@@ -241,6 +244,12 @@
 <a href="http://svn.apache.org/viewcvs.cgi/lucene/mahout/">Version Control</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>svn</em>
 </li>
 </ul>
+      
+<ul>
+<li>
+<a href="taste.html">Taste Documentation</a>&nbsp;&nbsp;___________________&nbsp;&nbsp;<em>taste</em>
+</li>
+</ul>
   
 </ul>
 </ul>

Modified: lucene/mahout/site/publish/linkmap.pdf
URL: http://svn.apache.org/viewvc/lucene/mahout/site/publish/linkmap.pdf?rev=658521&r1=658520&r2=658521&view=diff
==============================================================================
Binary files - no diff available.

Modified: lucene/mahout/site/publish/mailinglists.html
URL: http://svn.apache.org/viewvc/lucene/mahout/site/publish/mailinglists.html?rev=658521&r1=658520&r2=658521&view=diff
==============================================================================
--- lucene/mahout/site/publish/mailinglists.html (original)
+++ lucene/mahout/site/publish/mailinglists.html Tue May 20 18:15:20 2008
@@ -130,6 +130,9 @@
 <div class="menuitem">
 <a href="http://svn.apache.org/viewcvs.cgi/lucene/mahout/">Version Control</a>
 </div>
+<div class="menuitem">
+<a href="taste.html">Taste Documentation</a>
+</div>
 </div>
 <div onclick="SwitchMenu('menu_1.3', 'skin/')" id="menu_1.3Title" class="menutitle">Related Projects</div>
 <div id="menu_1.3" class="menuitemgroup">

Modified: lucene/mahout/site/publish/releases.html
URL: http://svn.apache.org/viewvc/lucene/mahout/site/publish/releases.html?rev=658521&r1=658520&r2=658521&view=diff
==============================================================================
--- lucene/mahout/site/publish/releases.html (original)
+++ lucene/mahout/site/publish/releases.html Tue May 20 18:15:20 2008
@@ -128,6 +128,9 @@
 <div class="menuitem">
 <a href="http://svn.apache.org/viewcvs.cgi/lucene/mahout/">Version Control</a>
 </div>
+<div class="menuitem">
+<a href="taste.html">Taste Documentation</a>
+</div>
 </div>
 <div onclick="SwitchMenu('menu_1.3', 'skin/')" id="menu_1.3Title" class="menutitle">Related Projects</div>
 <div id="menu_1.3" class="menuitemgroup">

Modified: lucene/mahout/site/publish/systemrequirements.html
URL: http://svn.apache.org/viewvc/lucene/mahout/site/publish/systemrequirements.html?rev=658521&r1=658520&r2=658521&view=diff
==============================================================================
--- lucene/mahout/site/publish/systemrequirements.html (original)
+++ lucene/mahout/site/publish/systemrequirements.html Tue May 20 18:15:20 2008
@@ -128,6 +128,9 @@
 <div class="menuitem">
 <a href="http://svn.apache.org/viewcvs.cgi/lucene/mahout/">Version Control</a>
 </div>
+<div class="menuitem">
+<a href="taste.html">Taste Documentation</a>
+</div>
 </div>
 <div onclick="SwitchMenu('menu_1.3', 'skin/')" id="menu_1.3Title" class="menutitle">Related Projects</div>
 <div id="menu_1.3" class="menuitemgroup">

Added: lucene/mahout/site/publish/taste.html
URL: http://svn.apache.org/viewvc/lucene/mahout/site/publish/taste.html?rev=658521&view=auto
==============================================================================
--- lucene/mahout/site/publish/taste.html (added)
+++ lucene/mahout/site/publish/taste.html Tue May 20 18:15:20 2008
@@ -0,0 +1,705 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta content="Apache Forrest" name="Generator">
+<meta name="Forrest-version" content="0.8">
+<meta name="Forrest-skin-name" content="pelt">
+<title>Apache Mahout - Taste Documentation</title>
+<link type="text/css" href="skin/basic.css" rel="stylesheet">
+<link media="screen" type="text/css" href="skin/screen.css" rel="stylesheet">
+<link media="print" type="text/css" href="skin/print.css" rel="stylesheet">
+<link type="text/css" href="skin/profile.css" rel="stylesheet">
+<script src="skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="skin/fontsize.js" language="javascript" type="text/javascript"></script>
+<link rel="shortcut icon" href="images/favicon.ico">
+</head>
+<body onload="init()">
+<script type="text/javascript">ndeSetTextSize();</script>
+<div id="top">
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+<a href="http://www.apache.org/">Apache</a> &gt; <a href="http://lucene.apache.org/">Lucene</a><script src="skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
+</div>
+<!--+
+    |header
+    +-->
+<div class="header">
+<!--+
+    |start group logo
+    +-->
+<div class="grouplogo">
+<a href="http://lucene.apache.org/"><img class="logoImage" alt="Lucene" src="http://www.apache.org/images/asf_logo_simple.png" title="Apache Lucene"></a>
+</div>
+<!--+
+    |end group logo
+    +-->
+<!--+
+    |start Project Logo
+    +-->
+<div class="projectlogo">
+<a href="http://lucene.apache.org/mahout/">Apache Mahout</a>
+</div>
+<!--+
+    |end Project Logo
+    +-->
+<!--+
+    |start Search
+    +-->
+<div class="searchbox">
+<form action="http://www.google.com/search" method="get" class="roundtopsmall">
+<input value="lucene.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">&nbsp; 
+                    <input name="Search" value="Search" type="submit">
+</form>
+</div>
+<!--+
+    |end search
+    +-->
+<!--+
+    |start Tabs
+    +-->
+<ul id="tabs">
+<li class="current">
+<a class="selected" href="index.html">Main</a>
+</li>
+<li>
+<a class="unselected" href="http://cwiki.apache.org/MAHOUT">Wiki</a>
+</li>
+</ul>
+<!--+
+    |end Tabs
+    +-->
+</div>
+</div>
+<div id="main">
+<div id="publishedStrip">
+<!--+
+    |start Subtabs
+    +-->
+<div id="level2tabs"></div>
+<!--+
+    |end Endtabs
+    +-->
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+//  --></script>
+</div>
+<!--+
+    |breadtrail
+    +-->
+<div class="breadtrail">
+
+             &nbsp;
+           </div>
+<!--+
+    |start Menu, mainarea
+    +-->
+<!--+
+    |start Menu
+    +-->
+<div id="menu">
+<div onclick="SwitchMenu('menu_1.1', 'skin/')" id="menu_1.1Title" class="menutitle">About</div>
+<div id="menu_1.1" class="menuitemgroup">
+<div class="menuitem">
+<a href="index.html" title="Welcome to Mahout">Overview</a>
+</div>
+<div class="menuitem">
+<a href="whoweare.html">Who We Are</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_selected_1.2', 'skin/')" id="menu_selected_1.2Title" class="menutitle" style="background-image: url('skin/images/chapter_open.gif');">Resources</div>
+<div id="menu_selected_1.2" class="selectedmenuitemgroup" style="display: block;">
+<div class="menuitem">
+<a href="developer-resources.html">Developers</a>
+</div>
+<div class="menuitem">
+<a href="http://issues.apache.org/jira/browse/MAHOUT">Issue Tracking</a>
+</div>
+<div class="menuitem">
+<a href="mailinglists.html">Mailing Lists</a>
+</div>
+<div class="menuitem">
+<a href="releases.html">Releases</a>
+</div>
+<div class="menuitem">
+<a href="systemrequirements.html">System Requirements</a>
+</div>
+<div class="menuitem">
+<a href="http://svn.apache.org/viewcvs.cgi/lucene/mahout/">Version Control</a>
+</div>
+<div class="menupage">
+<div class="menupagetitle">Taste Documentation</div>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.3', 'skin/')" id="menu_1.3Title" class="menutitle">Related Projects</div>
+<div id="menu_1.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="http://lucene.apache.org">Lucene (Top-Level)</a>
+</div>
+<div class="menuitem">
+<a href="http://hadoop.apache.org//">Hadoop</a>
+</div>
+<div class="menuitem">
+<a href="http://lucene.apache.org/java/">Lucene Java</a>
+</div>
+<div class="menuitem">
+<a href="http://lucene.apache.org/solr/">Solr</a>
+</div>
+<div class="menuitem">
+<a href="http://lucene.apache.org/nutch/">Nutch</a>
+</div>
+</div>
+<div id="credit"></div>
+<div id="roundbottom">
+<img style="display: none" class="corner" height="15" width="15" alt="" src="skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
+<!--+
+  |alternative credits
+  +-->
+<div id="credit2"></div>
+</div>
+<!--+
+    |end Menu
+    +-->
+<!--+
+    |start content
+    +-->
+<div id="content">
+<div title="Portable Document Format" class="pdflink">
+<a class="dida" href="taste.pdf"><img alt="PDF -icon" src="skin/images/pdfdoc.gif" class="skin"><br>
+        PDF</a>
+</div>
+<h1>Apache Mahout - Taste Documentation</h1>
+<div id="minitoc-area">
+<ul class="minitoc">
+<li>
+<a href="#overview">Overview</a>
+</li>
+<li>
+<a href="#architecture">Architecture</a>
+<ul class="minitoc">
+<li>
+<a href="#Recommender">Recommender</a>
+</li>
+<li>
+<a href="#DataModel">DataModel</a>
+</li>
+<li>
+<a href="#UserCorrelation%2C+ItemCorrelation">UserCorrelation, ItemCorrelation</a>
+</li>
+<li>
+<a href="#UserNeighborhood">UserNeighborhood</a>
+</li>
+</ul>
+</li>
+<li>
+<a href="#requirements">Requirements</a>
+<ul class="minitoc">
+<li>
+<a href="#Required">Required</a>
+</li>
+<li>
+<a href="#Optional">Optional</a>
+</li>
+</ul>
+</li>
+<li>
+<a href="#demo">Demo</a>
+</li>
+<li>
+<a href="#examples">Examples</a>
+<ul class="minitoc">
+<li>
+<a href="#User-based+Recommender">User-based Recommender</a>
+</li>
+<li>
+<a href="#Item-based+Recommender">Item-based Recommender</a>
+</li>
+<li>
+<a href="#Slope-One+Recommender">Slope-One Recommender</a>
+</li>
+</ul>
+</li>
+<li>
+<a href="#integration">Integration with your application</a>
+<ul class="minitoc">
+<li>
+<a href="#Direct">Direct</a>
+</li>
+<li>
+<a href="#Standalone+server">Standalone server</a>
+</li>
+</ul>
+</li>
+<li>
+<a href="#performance">Performance</a>
+<ul class="minitoc">
+<li>
+<a href="#Runtime+Performance">Runtime Performance</a>
+</li>
+<li>
+<a href="#Algorithm+Performance%3A+Which+One+Is+Best%3F">Algorithm Performance: Which One Is Best?</a>
+</li>
+</ul>
+</li>
+<li>
+<a href="#useful">Useful Links</a>
+</li>
+</ul>
+</div>
+
+
+<a name="N10011"></a><a name="overview"></a>
+<h2 class="boxed">Overview</h2>
+<div class="section">
+<p>Taste is a flexible, fast collaborative filtering engine for Java. The engine takes users'
+preferences for items ("tastes") and returns estimated preferences for other items. For example, a
+site that sells books or CDs could easily use Taste to figure out, from past purchase data, which
+CDs a customer might be interested in listening to.</p>
+<p>Taste provides a rich set of components from which you can construct a customized recommender
+system from a selection of algorithms. Taste is designed to be enterprise-ready; it's designed for
+performance, scalability and flexibility.
+Taste is not just for Java; it can be run as an external server which exposes recommendation logic
+to your application via web services and HTTP.</p>
+<p>Top-level packages define the Taste interfaces to these key abstractions:</p>
+<ul>
+  
+<li>
+<span class="codefrag">DataModel</span>
+</li>
+  
+<li>
+<span class="codefrag">UserCorrelation</span> and <span class="codefrag">ItemCorrelation</span>
+</li>
+  
+<li>
+<span class="codefrag">UserNeighborhood</span>
+</li>
+  
+<li>
+<span class="codefrag">Recommender</span>
+</li>
+
+</ul>
+<p>Subpackages of <span class="codefrag">org.apache.mahout.cf.taste.impl</span> hold implementations of these interfaces.
+These are the pieces from which you will build your own recommendation engine. That's it!
+For the academically inclined, Taste supports both <em>memory-based</em> and <em>item-based</em>
+recommender systems, <em>slope one</em> recommenders, and a couple other experimental implementations.
+It does not currently support <em>model-based</em> recommenders.</p>
+</div>
+
+
+<a name="N10048"></a><a name="architecture"></a>
+<h2 class="boxed">Architecture</h2>
+<div class="section">
+<p class="centertext">
+<img alt="Taste Architecture" height="1060" src="images/taste-architecture.png" width="442"></p>
+<p>This diagram shows the relationship between various Taste components in a user-based recommender.
+An item-based recommender system is similar except that there are no PreferenceInferrers or Neighborhood
+algorithms involved.</p>
+<a name="N10058"></a><a name="Recommender"></a>
+<h3 class="boxed">Recommender</h3>
+<p>A <span class="codefrag">Recommender</span> is the core abstraction in Taste. Given a <span class="codefrag">DataModel</span>, it can produce
+recommendations. Applications will most likely use the <span class="codefrag">GenericUserBasedRecommender</span> implementation
+or <span class="codefrag">GenericItemBasedRecommender</span>, possibly decorated by
+
+<span class="codefrag">CachingRecommender</span>.</p>
+<a name="N10070"></a><a name="DataModel"></a>
+<h3 class="boxed">DataModel</h3>
+<p>A <span class="codefrag">DataModel</span> is the interface to information about user preferences. An implementation might
+draw this data from any source, but a database is the most likely source. Taste provides <span class="codefrag">MySQLJDBCDataModel</span>
+to access preference data from a database via JDBC, though many applications will want to write their own.
+Taste also provides a <span class="codefrag">FileDataModel</span>.</p>
+<p>Along with <span class="codefrag">DataModel</span>, Taste uses the <span class="codefrag">User</span>, <span class="codefrag">Item</span> and
+<span class="codefrag">Preference</span> abstractions to represent the users, items, and preferences for those items in the
+recommendation engine. Custom <span class="codefrag">DataModel</span> implementations would return implementations of these
+interfaces that are appropriate to the application - maybe an <span class="codefrag">OnlineUser</span> implementation
+that represents an online store user, and a <span class="codefrag">BookItem</span> implementation representing a book.</p>
+<a name="N1009A"></a><a name="UserCorrelation%2C+ItemCorrelation"></a>
+<h3 class="boxed">UserCorrelation, ItemCorrelation</h3>
+<p>A <span class="codefrag">UserCorrelation</span> defines a notion of similarity between two <span class="codefrag">User</span>s.
+This is a crucial part of a recommendation engine. These are attached to a <span class="codefrag">Neighborhood</span> implementation.
+<span class="codefrag">ItemCorrelation</span>s are analagous, but find similarity between <span class="codefrag">Item</span>s.</p>
+<a name="N100B2"></a><a name="UserNeighborhood"></a>
+<h3 class="boxed">UserNeighborhood</h3>
+<p>In a user-based recommender, recommendations are produced by finding a "neighborhood" of
+similar users near a given user. A <span class="codefrag">UserNeighborhood</span> defines a means of determining
+that neighborhood &mdash; for example, nearest 10 users. Implementations typically need a
+<span class="codefrag">UserCorrelation</span> to operate.</p>
+</div>
+
+
+<a name="N100C2"></a><a name="requirements"></a>
+<h2 class="boxed">Requirements</h2>
+<div class="section">
+<a name="N100C7"></a><a name="Required"></a>
+<h3 class="boxed">Required</h3>
+<ul>
+ 
+<li>
+<a href="http://java.sun.com/j2se/1.5.0/index.jsp">Java / J2SE 5.0</a>
+</li>
+
+</ul>
+<a name="N100D5"></a><a name="Optional"></a>
+<h3 class="boxed">Optional</h3>
+<ul>
+ 
+<li>
+<a href="http://ant.apache.org/">Apache Ant</a> 1.5 or later,
+  if you want to build from source or build examples.</li>
+ 
+<li>Taste web applications require a <a href="http://java.sun.com/products/servlet/index.jsp">Servlet 2.3+</a>
+  container, such as
+  <a href="http://jakarta.apache.org/tomcat/">Jakarta Tomcat</a>. It may in fact work with older
+  containers with slight modification.</li>
+ 
+<li>
+<span class="codefrag">MySQLJDBCDataModel</span> implementation requires a
+  <a href="http://www.mysql.com/products/mysql/">MySQL 4.x</a> (or later) database.
+  Again, it may be made to work with earlier versions or other databases with slight changes.</li>
+
+
+</ul>
+</div>
+
+
+<a name="N100F9"></a><a name="demo"></a>
+<h2 class="boxed">Demo</h2>
+<div class="section">
+<p>To build and run the demo, follow the instructions below, which are written for Unix-like operating systems:</p>
+<ol>
+  
+<li>Download the "1 Million MovieLens Dataset" from
+   <a href="http://www.grouplens.org/">http://www.grouplens.org/</a>.</li>
+
+  
+<li>Unpack the archive and copy <span class="codefrag">movies.dat</span> and <span class="codefrag">ratings.dat</span> to
+   <span class="codefrag">src/example/org/apache/mahout/cf/taste/example/grouplens</span> under the Taste distribution
+   directory.</li>
+  
+<li>Build the example web application by executing <span class="codefrag">ant build-grouplens-example</span> in the directory
+    where you unpacked the Taste distribution. This produces <span class="codefrag">taste.war</span>.</li>
+
+  
+<li>
+<a href="http://tomcat.apache.org/download-55.cgi">Download</a> and install Tomcat.</li>
+  
+<li>Copy <span class="codefrag">taste.war</span> to the <span class="codefrag">webapps</span> directory under the Tomcat installation directory.</li>
+  
+<li>Increase the heap space that is given to Tomcat by setting the <span class="codefrag">JAVA_OPTS</span>
+      environment variable to "<span class="codefrag">-server -da -dsa -Xms1024m -Xmx1024m</span>", to allow 1024MB of heap space and
+    enable performance optimizations. Using <span class="codefrag">bash</span>,
+      one can do this with the command <span class="codefrag">export JAVA_OPTS="..."</span>
+</li>
+  
+<li>Start Tomcat. This is usually done by running <span class="codefrag">bin/startup.sh</span>
+      from the Tomcat installation directory. You may get an error asking you to set <span class="codefrag">JAVA_HOME</span>; do
+      so as above.</li>
+
+  
+<li>Get recommendations by accessing the web application in your browser:<br>
+    
+<span class="codefrag">http://localhost:8080/taste/RecommenderServlet?userID=1</span>
+<br>
+    This will produce a simple preference-item ID list which could be consumed by a client application.
+    Get more useful human-readable output with the <span class="codefrag">debug</span> parameter:<br>
+    
+<span class="codefrag">http://localhost:8080/taste/RecommenderServlet?userID=1&amp;debug=true</span>
+</li>
+
+</ol>
+<p>Incidentally, Taste's web service interface may then be found at:<br>
+
+<span class="codefrag">http://localhost:8080/taste/RecommenderService.jws</span>
+<br>
+Its WSDL file will be here...<br>
+
+<span class="codefrag">http://localhost:8080/taste/RecommenderService.jws?wsdl</span>
+<br>
+... and you can even access it in your browser via a simple HTTP request:<br>
+
+<span class="codefrag">.../RecommenderService.jws?method=recommend&amp;userID=1&amp;howMany=10</span>
+</p>
+</div>
+
+
+<a name="N1016A"></a><a name="examples"></a>
+<h2 class="boxed">Examples</h2>
+<div class="section">
+<a name="N1016F"></a><a name="User-based+Recommender"></a>
+<h3 class="boxed">User-based Recommender</h3>
+<p>User-based recommenders are the "original", conventional style of recommender system. They can produce good
+recommendations when tweaked properly; they are not necessarily the fastest recommender systems and
+are thus suitable for small data sets (roughly, less than a million ratings). We'll start with an example of this.</p>
+<p>First, create a <span class="codefrag">DataModel</span> of some kind. Here, we'll use a simple on based
+on data in a file:</p>
+<pre>DataModel model = new FileDataModel(new File("data.txt"));
+</pre>
+<p>We'll use the PearsonCorrelation implementation of <span class="codefrag">UserCorrelation</span> as our user
+correlation algorithm, and add an optional preference inference algorithm:</p>
+<pre>UserCorrelation userCorrelation = new PearsonCorrelation(model);
+// Optional:
+userCorrelation.setPreferenceInferrer(new AveragingPreferenceInferrer());
+</pre>
+<p>Now we create a <span class="codefrag">UserNeighborhood</span> algorithm. Here we use nearest-3:</p>
+<pre>UserNeighborhood neighborhood =
+  new NearestNUserNeighborhood(3, userCorrelation, model);
+</pre>
+<p>Now we can create our <span class="codefrag">Recommender</span>, and add a caching decorator:</p>
+<pre>Recommender recommender =
+  new GenericUserBasedRecommender(model, neighborhood, userCorrelation);
+Recommender cachingRecommender = new CachingRecommender(recommender);
+</pre>
+<p>Now we can get 10 recommendations for user ID "1234" &mdash; done!</p>
+<pre>List&lt;RecommendedItem&gt; recommendations =
+  cachingRecommender.recommend("1234", 10);
+</pre>
+<a name="N101A2"></a><a name="Item-based+Recommender"></a>
+<h3 class="boxed">Item-based Recommender</h3>
+<p>We could have created an item-based recommender instead. Item-based recommender base recommendation
+not on user similarity, but on item similarity. In theory these are about the same approach to the
+problem, just from different angles. However the similarity of two items is relatively fixed, more so
+than the similarity of two users. So, item-based recommenders can use pre-computed similarity values
+in the computations, which make them much faster. For large data sets, item-based recommenders
+are more appropriate.</p>
+<p>Let's start over, again with a <span class="codefrag">FileDataModel</span> to start:</p>
+<pre>DataModel model = new FileDataModel(new File("data.txt"));
+</pre>
+<p>We'll also need an <span class="codefrag">ItemCorrelation</span>. We could use <span class="codefrag">PearsonCorrelation</span>,
+which computes item similarity in realtime, but, this is generally too slow to be useful.
+Instead, in a real application, you would feed a list of pre-computed correlations to
+a <span class="codefrag">GenericItemCorrelation</span>:</p>
+<pre>// Construct the list of pre-compted correlations
+Collection&lt;GenericItemCorrelation.ItemItemCorrelation&gt; correlations =
+  ...;
+ItemCorrelation itemCorrelation =
+  new GenericItemCorrelation(correlations);
+
+</pre>
+<p>Then we can finish as before to produce recommendations:</p>
+<pre>Recommender recommender =
+  new GenericItemBasedRecommender(model, itemCorrelation);
+Recommender cachingRecommender = new CachingRecommender(recommender);
+...
+List&lt;RecommendedItem&gt; recommendations =
+  cachingRecommender.recommend("1234", 10);
+</pre>
+<a name="N101C9"></a><a name="Slope-One+Recommender"></a>
+<h3 class="boxed">Slope-One Recommender</h3>
+<p>This is a simple yet effective <span class="codefrag">Recommender</span> and we present another example to
+round out the list:</p>
+<pre>DataModel model = new FileDataModel(new File("data.txt"));
+// Make a weighted slope one recommender
+Recommender recommender = new SlopeOneRecommender(model);
+Recommender cachingRecommender = new CachingRecommender(recommender);
+</pre>
+</div>
+
+
+<a name="N101D9"></a><a name="integration"></a>
+<h2 class="boxed">Integration with your application</h2>
+<div class="section">
+<a name="N101DE"></a><a name="Direct"></a>
+<h3 class="boxed">Direct</h3>
+<p>You can create a <span class="codefrag">Recommender</span>, as shown above, wherever you like in your Java application, and use it. This
+includes simple Java applications or GUI applications, server applications, and J2EE web applications.</p>
+<a name="N101EA"></a><a name="Standalone+server"></a>
+<h3 class="boxed">Standalone server</h3>
+<p>Taste can also be run as an external server, which may be the only option for non-Java applications.
+A Taste Recommender can be exposed as a web application via <span class="codefrag">org.apach.mahout.cf.taste.web.RecommenderServlet</span>,
+and your application can then access recommendations via simple HTTP requests and response, or as a
+full-fledged SOAP web service. See above, and see
+<span class="codefrag">the javadoc</span> for details.</p>
+<p>To deploy your <span class="codefrag">Recommender</span> as an external server:</p>
+<ol>
+  
+<li>Create an implementation of <span class="codefrag">org.apache.mahout.cf.taste.recommender.Recommender</span>.</li>
+
+  
+<li>Compile it and create a JAR file containing your implementation.</li>
+  
+<li>Build a WAR file that will run your Recommender as a web application:<br>
+  
+<span class="codefrag">ant -Dmy-recommender.jar=yourJARfile.jar -Dmy-recommender-class=com.foo.YourRecommender build-server</span>
+</li>
+  
+<li>Follow from the "Install Tomcat" step above under <a href="#demo">Demo</a>.</li>
+
+</ol>
+</div>
+
+
+<a name="N1021A"></a><a name="performance"></a>
+<h2 class="boxed">Performance</h2>
+<div class="section">
+<a name="N1021F"></a><a name="Runtime+Performance"></a>
+<h3 class="boxed">Runtime Performance</h3>
+<p>The more data you give Taste, the better. Though Taste is designed for performance, you will undoubtedly run into
+performance issues at some point. For best results, consider using the following commad-line flags to your JVM:</p>
+<ul>
+  
+<li>
+<span class="codefrag">-server</span>: Enables the server VM, which is generally appropriate for long-running,
+  computation-intensive applications.</li>
+  
+<li>
+<span class="codefrag">-Xms1024m -Xmx1024m</span>: Make the heap as big as possible -- a gigabyte doesn't hurt when dealing
+  with millions of preferences. Taste will generally use as much memory as you give it for caching, which helps
+  performance. Set the initial and max size to the same value to avoid wasting time growing the
+  heap, and to avoid having the JVM run minor collections to avoid growing the heap, which will clear
+  cached values.</li>
+  
+<li>
+<span class="codefrag">-da -dsa</span>: Disable all assertions.</li>
+  
+<li>
+<span class="codefrag">-XX:+UseParallelGC</span> (multi-processor machines only): Use a GC algorithm designed to take
+  advantage of multiple processors, and designed for throughput. This is a default in J2SE 5.0.</li>
+  
+<li>
+<span class="codefrag">-XX:-DisableExplicitGC</span>: Disable calls to <span class="codefrag">System.gc()</span>. These calls can only
+  hurt in the presence of modern GC algorithms; they may force Taste to remove cached data needlessly.
+  This flag isn't needed if you're sure your code and third-party code you use doesn't call this method.</li>
+
+</ul>
+<p>Also consider the following tips:</p>
+<ul>
+  
+<li>Use <span class="codefrag">CachingRecommender</span> on top of your custom <span class="codefrag">Recommender</span> implementation.</li>
+  
+<li>When using <span class="codefrag">JDBCDataModel</span>, make sure you've taken basic steps to optimize the table storing
+  preference data. Create a primary key on the user ID and item ID columns, and an index on them. Set them to
+  be non-null. And so on. Tune your database for lots of concurrent reads! When using JDBC,
+  the database is almost always the bottleneck. Plenty of memory and caching are even more important.</li>
+
+  
+<li>Also, pooling database connections is essential to performance. If using a J2EE container, it probably
+  provides a way to configure connection pools. If you are creating your own <span class="codefrag">DataSource</span> directly,
+  try wrapping it in <span class="codefrag">org.apache.mahout.cf.taste.impl.model.jdbc.ConnectionPoolDataSource</span>
+</li>
+  
+<li>See MySQL-specific notes on performance in the javadoc for
+  <span class="codefrag">MySQLJDBCDataModel</span>.</li>
+
+</ul>
+<a name="N1026A"></a><a name="Algorithm+Performance%3A+Which+One+Is+Best%3F"></a>
+<h3 class="boxed">Algorithm Performance: Which One Is Best?</h3>
+<p>There is no right answer; it depends on your data, your application, environment, and performance needs.
+Taste provides the building blocks from which you can construct the best <span class="codefrag">Recommender</span> for your
+application. The links below provide research on this topic. You will probably need a bit of trial-and-error to find
+a setup that works best. The code sample above provides a good starting point.</p>
+<p>Fortunately, Taste provides a way to evaluate the accuracy of your <span class="codefrag">Recommender</span> on your own
+data, in <span class="codefrag">org.apache.mahout.cf.taste.eval</span>:</p>
+<pre>DataModel myModel = ...;
+RecommenderBuilder builder = new RecommenderBuilder() {
+    public Recommender buildRecommender(DataModel model) {
+      // build and return the Recommender to evaluate here
+    }
+  };
+RecommenderEvaluator evaluator =
+  new AverageAbsoluteDifferenceRecommenderEvaluator();
+double evaluation = evaluator.evaluate(builder, myModel, 0.9, 1.0);
+</pre>
+</div>
+
+
+<a name="N10283"></a><a name="useful"></a>
+<h2 class="boxed">Useful Links</h2>
+<div class="section">
+<p>You'll want to look at these packages too, which offer more algorithms and approaches that you
+may find useful:</p>
+<ul>
+  
+<li>
+<a href="http://www.nongnu.org/cofi/">Cofi</a>: A Java-Based Collaborative Filtering Library</li>
+  
+<li>
+<a href="http://eecs.oregonstate.edu/iis/CoFE/">CoFE</a>
+</li>
+
+</ul>
+<p>Here's a handful of research papers that I've read and found particularly useful:</p>
+<blockquote cite="http://research.microsoft.com/research/pubs/view.aspx?tr_id=166">
+<p>J.S. Breese, D. Heckerman
+ and C. Kadie, "<a href="http://research.microsoft.com/research/pubs/view.aspx?tr_id=166">Empirical Analysis of
+ Predictive Algorithms for Collaborative Filtering</a>,"
+ in Proceedings of the Fourteenth Conference on Uncertainity in Artificial Intelligence (UAI 1998),
+ 1998.</p>
+</blockquote>
+<blockquote cite="http://www10.org/cdrom/papers/519/">
+<p>B. Sarwar, G. Karypis, J. Konstan and J. Riedl,
+ "<a href="http://www10.org/cdrom/papers/519/">Item-based collaborative filtering recommendation
+ algorithms</a>," in Proceedings of the Tenth International Conference on the World Wide Web (WWW 10),
+ pp. 285-295, 2001.</p>
+</blockquote>
+<blockquote cite="http://doi.acm.org/10.1145/192844.192905">
+<p>P. Resnick, N. Iacovou, M. Suchak, P. Bergstrom and J. Riedl,
+ "<a href="http://doi.acm.org/10.1145/192844.192905">GroupLens: an open architecture for
+ collaborative filtering of netnews</a>," in Proceedings of the 1994 ACM conference on Computer Supported Cooperative
+ Work (CSCW 1994), pp. 175-186, 1994.</p>
+</blockquote>
+<blockquote cite="http://www.grouplens.org/papers/pdf/algs.pdf">
+<p>J.L. Herlocker, J.A. Konstan,
+ A. Borchers and J. Riedl, "<a href="http://www.grouplens.org/papers/pdf/algs.pdf">An algorithmic framework for
+ performing collaborative filtering</a>," in Proceedings of the 22nd annual international ACM SIGIR Conference
+ on Research and Development in Information Retrieval (SIGIR 99), pp. 230-237, 1999.</p>
+</blockquote>
+<blockquote cite="http://materialobjects.com/cf/MovieRecommender.pdf">
+<p>Clifford Lyon,
+ "<a href="http://materialobjects.com/cf/MovieRecommender.pdf">Movie Recommender</a>,"
+ CSCI E-280 final project, Harvard University, 2004.</p>
+</blockquote>
+<blockquote cite="http://www.daniel-lemire.com/fr/abstracts/SDM2005.html">
+<p>Daniel Lemire, Anna Maclachlan,
+ "<a href="http://www.daniel-lemire.com/fr/abstracts/SDM2005.html">Slope One Predictors for Online Rating-Based
+ Collaborative Filtering</a>," Proceedings of SIAM Data Mining (SDM '05), 2005.</p>
+</blockquote>
+<blockquote cite="http://www.daniel-lemire.com/fr/documents/publications/racofi_nrc.pdf">
+<p>
+ Michelle Anderson, Marcel Ball, Harold Boley, Stephen Greene, Nancy Howse, Daniel Lemire and Sean McGrath,
+ "<a href="http://www.daniel-lemire.com/fr/documents/publications/racofi_nrc.pdf">RACOFI: A Rule-Applying Collaborative
+ Filtering System</a>," Proceedings of COLA '03, 2003.</p>
+</blockquote>
+<p>These links will take you to all the collaborative filtering reading you could ever want!</p>
+<ul>
+ 
+<li>
+<a href="http://www.paulperry.net/notes/cf.asp">Paul Perry's notes</a>
+</li>
+ 
+<li>
+<a href="http://jamesthornton.com/cf/">James Thornton's collaborative filtering resources</a>
+</li>
+ 
+<li>
+<a href="http://www.daniel-lemire.com/blog/">Daniel Lemire's blog</a> which frequently covers collaborative filtering topics</li>
+
+</ul>
+</div>
+
+</div>
+<!--+
+    |end content
+    +-->
+<div class="clearboth">&nbsp;</div>
+</div>
+<div id="footer">
+<!--+
+    |start bottomstrip
+    +-->
+<div class="lastmodified">
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+//  --></script>
+</div>
+<div class="copyright">
+        Copyright &copy;
+         2006 <a href="http://www.apache.org/licenses/">The Apache Software Foundation.</a>
+</div>
+<!--+
+    |end bottomstrip
+    +-->
+</div>
+</body>
+</html>

Added: lucene/mahout/site/publish/taste.pdf
URL: http://svn.apache.org/viewvc/lucene/mahout/site/publish/taste.pdf?rev=658521&view=auto
==============================================================================
--- lucene/mahout/site/publish/taste.pdf (added)
+++ lucene/mahout/site/publish/taste.pdf Tue May 20 18:15:20 2008
@@ -0,0 +1,851 @@
+%PDF-1.3
+%ª«¬­
+4 0 obj
+<< /Type /Info
+/Producer (FOP 0.20.5) >>
+endobj
+5 0 obj
+<< /Length 1168 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!$Ghf%6l&BE]"=7DSL.l1RLB.m258tED5CGY?dgOngR`0tO@i\]tN59M\p<)I...@Zl>s];d_^_UX7+\e01HXrOH7,ZhcltYpVDP#ARO5`fAcFf$OE):9-ri8/UPofH0nA:g*4GZb>5(!O%F(7\4(=^]WmU6;=:+djj[/[qq/$j;G,O[i:0]]*(*t^KFQZ?33@c1CJO,;;r?C5;LVD-#q$*k_AdY`Cqb`A*%%\GO=5To/m+i\"ih%bP(d3/F3'1B!QR
 rn(8TH,\BfP&oY-ECL*o5=%*Me0s?'#>cmB/C(8J-G]7Rs6g^![$$<GK[o)jo"&(^Q!_io,#H-\uQ+CZ:E'iTHK0rUIWmcd!&T\h>-5V_8Dm$pmktfGngS-tFJWj&Xiqi9Mp/XrSFfN6J9=`J#C6h3q\eRZgY[]=P>?I/]i"l8EJ<P@@~>
+endstream
+endobj
+6 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 5 0 R
+/Annots 7 0 R
+>>
+endobj
+7 0 obj
+[
+8 0 R
+10 0 R
+12 0 R
+14 0 R
+16 0 R
+18 0 R
+20 0 R
+22 0 R
+24 0 R
+26 0 R
+28 0 R
+30 0 R
+32 0 R
+34 0 R
+36 0 R
+38 0 R
+40 0 R
+42 0 R
+44 0 R
+46 0 R
+48 0 R
+]
+endobj
+8 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 102.0 546.166 157.316 534.166 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 9 0 R
+/H /I
+>>
+endobj
+10 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 102.0 527.966 169.976 515.966 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 11 0 R
+/H /I
+>>
+endobj
+12 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 509.766 193.484 497.766 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 13 0 R
+/H /I
+>>
+endobj
+14 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 491.566 177.488 479.566 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 15 0 R
+/H /I
+>>
+endobj
+16 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 473.366 283.472 461.366 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 17 0 R
+/H /I
+>>
+endobj
+18 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 455.166 215.48 443.166 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 19 0 R
+/H /I
+>>
+endobj
+20 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 102.0 436.966 176.66 424.966 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 21 0 R
+/H /I
+>>
+endobj
+22 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 418.766 167.492 406.766 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 23 0 R
+/H /I
+>>
+endobj
+24 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 400.566 165.5 388.566 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 25 0 R
+/H /I
+>>
+endobj
+26 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 102.0 382.366 139.328 370.366 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 27 0 R
+/H /I
+>>
+endobj
+28 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 102.0 364.166 157.328 352.166 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 29 0 R
+/H /I
+>>
+endobj
+30 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 345.966 250.46 333.966 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 31 0 R
+/H /I
+>>
+endobj
+32 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 327.766 249.8 315.766 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 33 0 R
+/H /I
+>>
+endobj
+34 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 309.566 247.808 297.566 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 35 0 R
+/H /I
+>>
+endobj
+36 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 102.0 291.366 268.316 279.366 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 37 0 R
+/H /I
+>>
+endobj
+38 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 273.166 153.488 261.166 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 39 0 R
+/H /I
+>>
+endobj
+40 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 254.966 209.144 242.966 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 41 0 R
+/H /I
+>>
+endobj
+42 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 102.0 236.766 171.308 224.766 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 43 0 R
+/H /I
+>>
+endobj
+44 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 218.566 229.148 206.566 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 45 0 R
+/H /I
+>>
+endobj
+46 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 108.0 200.366 340.46 188.366 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 47 0 R
+/H /I
+>>
+endobj
+48 0 obj
+<< /Type /Annot
+/Subtype /Link
+/Rect [ 102.0 182.166 172.328 170.166 ]
+/C [ 0 0 0 ]
+/Border [ 0 0 0 ]
+/A 49 0 R
+/H /I
+>>
+endobj
+50 0 obj
+<< /Length 2275 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gatm=hfIO1%"@qXU%P8H?,B4`n+EYSQ`e$ff!XA`\d)E9/M<3b;3[X<Y9,#m(+;h9F4\T@@`fkqHiQ>1be)urQf[5aKh\:$Z<aO,lT%`3f=0e]ZIIHos75I\CD#=>[K>?=hk&_Q^2\P[\=TP,[9EL5Gdgqj^'cNjH""6df[b3H-btdQF^%!F?4X,KDZ+_>OB:!BD3)7(IE0l5nGOm'Deo0J;q#H)IlI^V4V@oa0:#'>M%$Atjj6c&.?Q[0$Tio4<bXb='\2]@%3IMHIh8Z>?_^,qEEFMBbLfE:VSs#c[h5%j8eg%=&MLSe^op9d/3^<Z6O55A5/0t$H]GJ8/$>n=#HUU?m>0,A\Y\:)Y'?)eXbI0Lo,N2QrT])S+KAaqItaOEf#'go?)n%oiKY0=di?'mZs9S/5#qbOES%jMC7?=B`'2hn+';hf5!g<l"Eq+H)00'&ZOEh@P4BYGZ')Tb/*ujg6RHhSM<rW/#kFc/Am412g"$LY-Yn^Z9Z\9jfEU.7%$<oOhSllp;MKn/R:b[(I4CD%`[6@@;HI&afI+5^V?jUFcC4mp*;khF/rJV/-K)MQ8-CNdUa^jhK'D>IQ/%3RT2o#27TCEW.Q?!oGps,-k\:Uf&Nl,[7_;fSO")W]l9q7q:]/fe11@!q*[sX":b(YI)Im&9K'E*$N]=7g`Y0q70l8Se[SdF&)Td)UoDi4&/[-16XKDsq!gf6G<;]4*[XNT[BdZ`!cTOV04=eLGK9@`ek6r10Kl3/0TNRB`N=sJYUQ2>.2_HnrON;qOe<n`]W;-nbVjXJs+I^(H8l!]2W^a0J*6m\-IfOQuQ=3:a*KH4YSFVG5<]E$u@E$ISaQ-AIe*_ol7fldqAg/,[h?amCHbPq*eddaWe7^EBei2CWlZ2f4Op8QI(hc1#2]:Lm"@gLrHa`$*4Di=5R*O0!b>oQoW.f5A]pM%Q3KCN_,X#p!Y57seq<L+T]$p/#R+Qk#`HOrQj88Agq[QT
 iDF;_Xmt%o3bB7=g'2j3")RANsnUk=PrWsXWPtLT5i9A/9e)#pBnRuk,b#qlsNJU:QA&h(^[4,g2Q?e\tca!tJ8K1h+)i'jcI9A&]qFP*0Y^_rmf[.\7=%qV[&9`*\+gf#7X4'm_pj6=h&<Xb...@1><=<W78U5?;W,@V\]1.12[G8heLADO/9O.(?rb9m-:>3f&[cTU>DMFWP;'["b?!kou>#goc<8-PGFaA.XE9_br22hW)kFC^54l395I9`D$)@r].cSK`R.QE^TKcUPQaOnm^peONI:^t:8Gg86@eb'dhW(dRlXSA_DP9oY/$\"-6HjA);:6c.s*OriBL/?H_8[AL0e8L]ggI0436d'\7A2DA"PYN;t>I'QBY0T[ST\r/s#WouN\U]5C5)pgSPJ!kj:O:CtTb?#?:5iMO90_D__M+$!*\IWAhF3e3;jTb6FP9TFl!'OQ+BT<5NbL:n&M5sp4c0[NinM9q[h0<&ddQWhQDr8j$as%Dd9MsZI5OA3I8-hA;;uaumlADt*)f2TeLZbT%7k`,6P8-Z3>fIhm=JSeHb5BK0s^"J9EupRHu:^VJ5md0))JQJiMFPM0k82Q>k'9(Uf!6Ra31J9a%MDQ"aj,XaXFib(1nA'3gsKQG;@qCooI<&$F?Uf65+t.GK1T[:.;$!&dgaNa9[/PGM;JTV?DVHLk]n&(ZtRPDW`FDC_XFNe@0([0VDt7A7NMgI@(ZK&WO8W\]d[A&LG<p0V'A(66WEoL`JDfB\"FFBHs5r]h[a@M2LX#(?:D+34ieBePaM3SP8`p:!!h?Zcm"eQ^kP&R"t`!S$$#U\N1DuI.jG=7=H#F<\YtR7_Mmi"#$<b-;CiHY$mC7!e<``n]ZX0U1u%G'Dd72kX_=Xd!:p@?DA#p#^H
 q-qb!qDA8=/)R9-Jja)ceH_nb81;o1+[%&2B\VP-dQ(r\rlr(*8s?qg1s]""9-*%rFPm.<,g9D</c:b)U?%:kp!,d]ltgS+.gG1pB)3@>5,*!Xp(qV2Q]`hOJ_Ff_@Y-gtVEUOY[%!DRa;gE?n%K?;IYqi/:YhHjirWt.8&J:05\Ka1Vm_!G`*V8u]XmdL:bBaD'4n?3YKpIPdg28l%Q&(o^\nko((]O<VT_Aqo(_i!/k0WYcaS`ggpZ$-(?DY3p):qJ*!Z9GJt6/+GdkSC;e$E\T#kCniQrt@/#Oo~>
+endstream
+endobj
+51 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 50 0 R
+>>
+endobj
+52 0 obj
+<< /Length 2363 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gatm=a`?,q&A@rk=?.Zb2F;rPG)Yf6Q.0?M=EBqT!>6Q4AWfk\b)64JR[_s&!*[LS;R$['%A7'P^XiIh(Dh!+(I'ONZ[r/F04L9X:(RQtPP`V^=.\^icOHCB3m3Gb(Y;G$:lgeGIJrh#hk:HB=fa:3f#i\reEJN47KSo<Mqn-kjdT>s^Wtg`=N!^fiS2kY,RCntE%>\n8L6,R)Z$@d5tq('0WeYA=016HbBb\Z6!DdD>`0>C<%In:>*ZXs;cSbe`DZ*hEO`2_3KA9Z>g$"\.p8#)ko40)k.==LZDdY7>>K@&4E+`]HCf#_BXOWM#ODil/-1"8dCN:;g2ujE%P"k>=7UBZYf%"XIE&+^0OQdaF&enoZLhI8-S$B/(8@fTL.sh,M6(;EU4\1(KFQ:UHG'.OkJu?CRre.P0usUU*_0D8+C^TbNb@?5#MMP&5&N9+M*Y,<c.86de0FB9%C?+mh(D?%D$$Co+4;]-,>k+a?saFUMQqpjVC7)ITs2R/A<eo=%DcE]+D74K37.VMQY,fYnG+mddF=PN@.Rl#U*IWfWn:^4lKoSUn;qm$TMKQ.Ekqi=28$;j#a@%q,O:q''G9b/VZ+3h*:%c1!/jQg/nYsiR!3<7TpGN0,/-k.WJr<h\Re+"GS/P%^7\*)0%O^\M5=<TFX^@T.VLTnO;21\b!@JM]ITu3a&\6s=eY=N\`A"jH>-c76k66H8mJ.<Ai?_FQ<f_qV/d-)A>2;ofVF3XkC2?Mb&ObkC6d,A]*G!LY$7HnZ#N1qe54aS9M9,m-.o>G?X!+6fr;@`9P'B(Xc,Yb_uq!0,NXgrPM$EOCfdL.[`H3!%`Gp<_^d!_ic0gi?Ha.9)j7]3&F]"-O[36E.d`%_>#&9/*Kh$053j^D9[Imk@i;$q[+doF?E8*E/%3ln;ZfK6kVKc`m^5se:XBT(6B7se2?8aiVcX+a(b]=6Tp"+nf*.Fr>gI,5F%VqZ^)KS&;f3TPLYprM?"`N
 QR':(5b^gm"XYgTZ7__^P)OQ4TauX/PnW3`0q/E+O;J*%L#jMUBoEk4XldgJtV*Wdh?%L!!Q?HQg'9>HmqXj\d>r.jaq[)XP0i-jKP--R[XAF5)0i(b_Sn8'#)q6DjAUTXQQc288[4,s%7]5[uaV01sV`+;MYg=<]eEkhfgojV<RAuI+SG:"?4&OR@pB==j-e)Y]RRXD?6e8YID'^ZGX_458\0*%\#e%23^Eae2QE&^iQ->,65iScF?K,L-kmjqJ&oY!3=,K`*-H;;[RmLXpU\9u?*!I4MS=,f=A-?@tKBUgU3V^7CKN"B*3E_A`9)OfKcK@4U;.sS%J`lf]k7%0+8nT,i<?Ca?n\DQh53PX<p^(8K#StFKBsd6,3P$Mk3mqP6Y:a%:5^SX[=*V18URiPc?$]?j-si8X_2Epm:7XTR$Cl4ELd!-a&?WK7+#$>GB(u^C:<N`!<Q@ejP9lmaVM7H/-h_ToO@s$J'GCeT@@e5dZ3Jr*Ns*?5H@Jn-RiS)LB.UF^p%#"o8Ej$m<oSH;l;$>h&H-!PI-\fn1n#;r5:NBjZ`iZ,$s`iiqIM)[-(c#a^/mC!6Eg<W9]En4_-"q2LLW051'omb#jl![FaM'odPpu3T9_(1Q'FZuTHQ;*%Z:N61T*1's49'j"OS-#;ksYWcU0U87SeH=;kjTfoA,OqRpHd^8^5r*i(tH4]hgu.qf;i'7]ciHI^QZ[-lu3!^.(%em-a7#nqm7&M8LH-4ngl\Lk/qf)@uTuK^\)0;]j$alkEgX*4l&X[RU7api;HW0DZE2_'8GsM`88F#=D1Dmk#[?W'CqT6*Y3_Pp269<;Ub)$((N'+5HMscgF9S]_9:JkK.ITg2'#/aOji%$7pc0W6$XG5q\.pGJpk"=&DGH\Wc,B-4r(R0)G`.lO&Fe":AXDm8mLK(L$$t\;-q%c+["7lisKk=t(8DqU=[jK&1Pe5V(B3^(r50ISf,h)RXd\a"V'2IU-scU9Y
 Y9RJm73=%U!kOaK3_0''8lTVc40l^$;\6q4q4_9YD>FF3nm5T=lfDp^0u%QX?ARXrp#qu-rq*rX@`oPUgQNAck<Mg>K0CKHI\nDcU,>U5W)Wk"3Y:QhP6kRS6ma]0:os0&p,bC`Sd-A]e(0GnM?[2$YM53k4^[TChjd61=Oae/\0&99;mnS3S7&`G+7+fG`ZnW]K[OMkSC+FV2:Im&%(FJXtW/9Q>\X&f,^$c*;o&>*jTDKE#.q[*,\2bpMGfeI>#js1<2I=;bII7Xrpfc5t)QaJ)J+nsA7gBQOpn/Z2g.I5O`7dV8?JJ,huCQX$+NgT,:j(QiXdgcpomJ'GYlU-/2lCPXequ08XOBM<]WuJE]=(j.Y]mYtKb,bOB:>7C6~>
+endstream
+endobj
+53 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 52 0 R
+>>
+endobj
+54 0 obj
+<< /Length 2658 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gatm=qiBLO&cVb.$K?M**$AGTrGZ]]m%.QM%WQQ1e"S:KQ*c]VP?_\04B_LG4/DY=U%l,9KjjkE\&4d4B',SNjm1IAS(5b*2jU_(^[H%aPF70oqs^fTPs6plcsse`KX&8elcnbGc17uL=>p(h[C\.D.22\_`^S=^R;][V.Q.5$@O8cF(3]A:([E8?[b[*ZBVC<b>Ng_'(0cpDn%7[V-AajEm#A>VX(%i6RH<X;!>=T2VaJ*W+?^Eb_b%gNM[Z5U]#CQurj#)ScQM^1A+`dHDC8n2A%+Q-`H@^<45p+-CQ[a4CY@fRX2U17a0o(]f'fkG]A:*QDOFq@he%%Qm_(_oM<*D'J8VLWkD)#g!%@J)5/lMoJYB^=Rcd#p,!;)`]@B45j3-QTF?6\?P/T-VBdVAZa_%XXh7^g#q\`G'&Mk@V5@m@!q)i+2=.;ST,XqiP,EM$]YitAVE`_>toXM72->-Pc-e*6Smom"XHLro3opH7+&<TW<bamnM+`mOT>#$&\J^KB<(,l&2[98A?49`2G9;cbpocTPL5KH/E2nL@q?]0)#letuZGp/o4,23G^ii?()!6XsOni'kkR`+;G<aqi#3mS"qkD(U'K$'Jl.aLU6qjPqHdBeQ-nUt#>!';6cGf-N3lSB:mS)V9h'>\(_.'T[G4G+bYph%R=Mq/8o<iJ)04hi4tGa)h[PVH#Bb`-7<FGlkc5qrSrKOYnRFbgX_*0o:p)j*pHjSBq(".u#]74C<<21^GD^_)"2q02t5Zm=`s,G&/<bJn<I-:Cha.\7mk%%0Ejc0Jn1b\;1iStQhaD_qAGe*L^-6)?f.Gn.IeBdH"JAM6$_=k=N&LD5BZRN`\4$nGs'Z%4m+A=s;&/%>#OVBF&p<oY8$)=E(S/QI8@2G-6N*RXO&p_!04OFUjh0a$Of*i^C/H9#k+-7u1n["4Y=Tki5YM%0=Ge_a^3qj3AEa/MrP31&.5Jg,Q!Q-<-gl!CPn_e(qM90R>
 1o/3CXCuan^^dFG-K"&he(:d7;<P[,&]@_/:aRSQaBl9?IS!$9Kl:2NL)nPA7\[UH,)o-1.>JC!nFgm[K6%iJKa-Ps:,DXX/a=*4ua$L0(ndJ14UQ3gucRMM,`93c`R2QmQ0Ll]!eiZ/j!G)9s<!&a=1SiNTj+J`6K<sMNlbcOmpWs;"Nla489rC'5b6s_JLK$rp3D,"jGFK"b[u@TH3@8`oV^)%GSk7*'/IOaWY&lnS7k67l\]>-a\2/jPUPp&lL:1p<iD=]maJZVOj(t-Mq@uLYm<g;i6!p&j+G3o_jA4FeG<O:ma#D?DJQn_1,MVrZis\6\U_FjfH2a4n-u#DpQKLS1ZE(n0&diGF'i=@KH$D-!+gf1"?grj07*.1JjMNrDLX:1AC\]5f/#$f@h)lW?,E?WM9D3QHB(-=AU<'dU5N*j-n-uadq/tYBIcl_qA8i?*k$#k?'Si#R9Q78QZ8s&*LZCj@G]JnVIMnTJ=jL-`2C8b'#ZW5aqSrY4pi(^qblZup6'i@f*m*BdZ>Qb+fuW>2*Gga.m%EYL\mNBZTM56%hu0'14$S%`ZB5<^UXkg,_.uJsLBc`uZn[EX.XtGcg'I'CLU*3K9e,ZA"5rSS"O3V?Am[gP[A@FF#2j!BD&fMnA%CmZ<7.gM(]10gKh8$mF6&4V69cjSSA=F<ngibfRnC^_Xbs*?Z:\iO6R`@:CV0ghPuRq:k%Xtq2BPN'ZGh]@8B)Ma\g)V0iELgp)\/m=/8t^/ob:XIp"cgp:/I>Vk;5&Y>[D?D]_nE7"M[+Vs,7YQac-?nfemL@Q%4Tteg_'HcMqe4O/IApbaN.<33.->Ca)H5,CPt&UWA.i;%SgTCkdYU#>[(KNX9TM^KQ'(e`;cXjR^dI9UUmbA,&?i*p!$t/Q1K5M04oX#G.LT/@.O@\o'H0(knhsPlF+a.0'%c-o;@?2o^@ClT=-I6#T,!GFJtdb@?juOrO85J9Vp8`XA0sptbU/"36
 nSD,QBo,[U[j2e'5a[mu`lGn)n,s'c`8(\eQNG=H/11Lq:ISJ?g;>o&i#KNc0]Ja3g:iOH]>(i23l/n#V;_r!_X-85^\<`%[Q&"Kc5ZVg(QcOf`s?E/5lB0=!4,*YtrV6]T16lW[#P:F![4;I7e^.GP8TrlPC,,e%l)68BLO(@l_F0V'PaOksfFs;UB:P+eb7!L;BT#pd5!m5ckY=p/&a@+-">fFg1d'+X%DIXLaH<8O)51FOX@tm-:aq&W)JbJ1oXD+"e4tbqG\IJbX0U2rL7t,r]A?e@\HCGHmeHbFc5)=j[6[73BV#???ok0*<^I*kMS+nlb_+&$1g*.-Wn)'_s\1FQLi;ds_AiBM!NE*-$pd<6%`O1E;_g0%JAB=Yj%pKQb/#FefD0mtH:cYV&/lSPHN-SW\eU&^upmWL^Y/m6eNKXk[PXW[W8n'*l#2`^p)dT_TNO!ri;*BLS3s^cFkgcu6Mn-$k01+b^!l-L?%e[e.olZ'Q>*)a2p"qsDQ^a_^afFSU<!%Vg0>9=H(3h^cR`tItU>7[pC\;iCXR^,E0d7E5Y#YGAp[hE$fkQokf0[<Y"4oo4X=_b.Oma17G[%W,h3%m%*\LKJ<Q<^`eZEZ:oXiYR7]9K5`2`L*h!%a3$C<,YbC6i<=_b37FBfU3ff<5ol:,g;3pchR.Mn/k~>
+endstream
+endobj
+55 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 54 0 R
+>>
+endobj
+56 0 obj
+<< /Length 2101 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gb!#]>Ar7S'Roe[d.5Tf8/RK#[p=PB?+LM_f!QRm0^jS$.9i8mHB]+&s*iI_LD"11fEMaQ'9Nn<chYl,F(&D$BA_$JJ'G4*OoO=a+rf4$n,)[RlW)7iT&V$HF"G//jm;0`l]V^4j2bTmo@nV.@3VW3n]\.;g%$5nR['J*E9LKsSb:b!)d:T!I*L(i.4#8]lcYh_r)Psmm%=RW8]pn[Mt+Euji(E;7`C_R@WAfcH?!NpDU!Zq\p:u,\mA-bYheU;.smT59%4&OQ8qlr@LEA^)&50Xm^NfZV+&6Woe+qb;mp1=0pq-DY=g_#`Gl4$%aii&-"fR!@aYtT\++L-K?[&_fd0g13YoY$;7Cj_ZAk_#/s9\U]*<?0)@Y29!3P-[OsiS>03HF$b>nVp,TBJN><_NC`tPV_6U\d?loLGs;_P!r2tlp=@;F,jm]5)Hp&%a(lZ3`\?K@iRdrM)ib$"8>LZMeFL1"IUoC!`gTUR4]R(b\@o3N!$T_%aW5:E`H!;Mge["+/r6=1]lLdXXt>e/dD-(F:bM_4,X,AN>H,BpZ3pH2>Gr#cG,X/d8l9_s_0`Jnr%1nH@ML6EN+7[Rec..bf%s"K\H\9+m5S8`o;9lT*<&0oNk08Yd7g;!-%%\6nGMb/++gHe$soo2/?(#R-C[q=WeVaH'QiR7=l#ul>\Pm9QKXQA;j(0mC'2o[6S9e(?8$e+1$Vr+e=M.BUHqDHON)G"\>K[Jar'I'I(!cmUQ1/M]4`i+-?MXfM!ItL@eX+7`"M-</LcJYA]#:TL2%W5CB#1uu&rQ[83+KNJ/Ph!@m]/T$N!Y`Vf:u_^&!T4I6fJf^A;jBInq=6_kMjFd?ot,hC?5X$EeErf7^tnOChanm$&G=HeXW;p9fN+TBM_uH-;.r$lp"RHqqX)s5BN\eS9u$VuenW>hQXEhM@2IU#3I#lm=P,?ZK5D<2d[8r9!oe>+c-<OT)/=%/.)pt<CD.Dm6!n@21-]HP9[M&
 kAQ\JA=3^iDnM18/D!Bt.eP0!qM8=j2N9H.c]O5i0_Kt7jl5LBsSA7WiB9(7fOR+qd2t2NM,4]92Uf8\j-P10^ji#lqC=?@"*V`l?a':`@A!i<+bh@0\iN@<3D(se4-#I:@:3TOMIP82n.6n*0.+I@693I5VMuP2HY^%cZ0QWf'F[]:q->ZSG_[;&=fH\=7gJ7jH(]OBR#AuBLNDS+B><rdO>`qJF<6='\V*KEuHspeui/U1/Et'"Ur=cjfY95*_3S5Ao(PAD:g'&]f95tV*6*'9]a)E8)lq?`IRT+d4BuqKP;g(+ZRQq=@3,B7!Y9!SjbYdAuBHuU?.d]hV+JpnN#QWO@bZn'C%FD(h@"EU)a=#n'KG7h#G33mEe-BY?&fL>'d4Q;bqlo[`(!hE_]V#>G%!`Urq6lt.l[pbGcg)\Z$'FP/qUSiZJ#)(CAE.D8(W2V:.t+]]Pg(E[*;mR`UEHk.nl8T:mO2`U:O'm6=_tZ\$gkMjdtCd/lb"/A&r,H.JD`q<DqX;7j%W&ZpPCNSFPS^#(D7;o$j;NMp6bKjX7!`AGPb6mR9Vt$a+FjI^+:\\,2"\6eUgZ'9dX?IVJ7Pn$:B3W+dZ,09gb4"ol`;I;_;5*e]G4%?YW!I`JCI#%52X1"A+fBC/CDQ-XHkIFg&hH2*pk-?p]T>`uOQa`Dg`piE2Ua%$SNImL3l8\?DR>.moRSj)ess-*l9Z(3io&-`ndb\LQ*.S"Q39LJBX?ctT(5FBWY;*`)rOlr"i!.-gH7j(ZY:e[I3V+J<I3R!U]uR3=+*KO,M'#T\W=#l&:[1A0Wp1HlA[d.BFFggV?>h=E4Nq/!'TNKYp8@B'FZ>d@JT^6#?M&$JWNh)T-i:D+%.1A3`o?b=X_+T.]*%.)'DcN3_)IsZ0THV^a.$kC)ZE0WMZ7ZHm1;J^E;!Ybf%YqA8fD;0C/;`EED?I`cDbT"8G_.>fD[:Qu(fPUr"Uhr1n>6`<O:Q<ns6qi
 J-/dd53c]<1CDs79QZ/,1[k%YO=*r)cCp,j&bSgA.f9_nk)IhKk8$R3SW#&lFD[dC-C*!R;]=$?Q,j5SG:ODXC%bEeG"/5&8t<:?AFlH)f[Ofa`ImVe,SRNV~>
+endstream
+endobj
+57 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 56 0 R
+>>
+endobj
+58 0 obj
+<< /Length 2065 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gatm<D,]1Y&H9tYd-q?Ri^<I;QaGuc#pCVD9IRF"l'-WVjKksVeiAnPiSSi*>LK)o):L@/J55>%jk8I&p[8"Tki;I%`t<H+nGgs7kRuM;4:clJ=[%nFO@2Y-AD4RYqYfXVZQ#8B5MNBf/u_2U]GaS,ghN#\s/<9W-p9m!iJ\Suh^9LF1lp,=NK24lU!nkDmS5OE3;r*KPTIWS'1,7%pasdLTA+4HX$SIg3Hb=@`h,?X"=%6TXq@dnfVEdCmTo],m?g;1D0IAJP]:^@VZ!$rQ'%?k$72#A@Gl1(r%0<KInM^/*%.49_gf>pjD8h<Y\XA,>Up:sQbGi_#$K\TlB.16NLQ+#$E?_>a_bLQHLs)Fm476;2VekI)j!nk[4+C,KOosU6>RM`6V4)L)ahX:3,c4aB@T3.nR@n/j.:A?0(a7cUEY06><C.`_]?FL;o6@p9D,HGI3s"8;g,XMFOD)37[>V^Sa-tmVc$I;9*L<cO32XC0^Wpn<`lY1'n$B="%INP$:o(o,`qV9)e\@7rgk5rhep2*L&,7*3be2.@4tL;Vg@/O0&o>Y]C0qC#*f0WUe(#X*8d;jFaA5^5(?GeFh:Q=j''L0H(cV!#Y7Qim6Y,kDnF>kBT_6jf.V(=?M8j$otABYm^HS)FTc8dO];R_jaOE4>uGs1),.Df*($'s`^US35dhq'-)"Rcq+1.RTa6(>?+r&H6Ypk0(4)9Hr/6F`0'7ribR0W"=tZ!ug27bc.M7>%:u8Q(W+PIDh>[(3Yn4X1PoS)o_Xe(HZGqJ?1bN5C>qt]4$jlZCN<14cKRsB7n'Kgt]YD[j<>R(eHB`,D+F6n3.$j_"Y`RP4&#35R)%k],Die/P(%Sn<,7E&8H-kd(2/o[H^jQ$4]h@ARaIP:2b,EYO61pM2i/IH=Kdc>mZ'`=.3EB4SY]fkL)C;G@`dW)7hSu:]N(84'o&.t==8ea9;feKm1kDq1U`kj`Ica"XIV'Zdif89@YFN6
 LnaJ5c=M2;t3&#pHZb"^)Sq@Ah8gOZP65E,(ou@/,I(,rei4o]\?2tX14Tq`(Q^Lj+.`p(gE0!3+<b[&Ci9gBGcrmB3Y!Z77`"D"[KmN%9B2'9k:!dNbBs[IHVdaDhd83,K$2pTQTp$qurc;$r2GfrVfn1?S?U$/;XsX==4eKFTbD1<a'5ed''W19"@j[ZW[=k\V(2==H*JpYh-s\!hM]aZj+Z>00p2Hkd&e`EO5#d^b9'a<`"iTlGHiQJ=43k/\dQ,1HkIcI%)Ig$[a5^qdj2XdT76]W7N7:K3NG0H3=!rkgrk_>QCO`7_,T0;i4dk8&\G^`&4cfYT\\sWM/>7&Vlnfj.nm(WFP].\,&:1fshknIW\(^ikWb,_7IHeNabZc)*<qT1/U#MkV?4.Vd$:I2bDd"LMWAg)gHU"%m6YPDD]E<Mq#RTm9I4:RIHfSVL8%`dkSWZ/0:cG>epKLhtd%,cM79*ZHP=;C$b]Fq3)]^!g@0jP6&SQ24LLD[F*Vnc!KYVJ+,K('W#ek4JjF^Sdj2;jY"tH?[U23;To,H1E/9-dQJE%?h1d_A7*J`gkKi=IFHclrh(;=_0lhr;.-G;&03UB'e<sY"4S=h.9)S,6:Dhi[Jhg50I.Pb7Veb-nIJOUH6V\.4iD^p*8RL%:j*A#e_B%`';[&p"(PYm[D4F[TO1,Xg%!@4ulh.j\XOWIX=fO.6!*%+/q;Xo-*bO:qk\26cdegP^0=UY^&a&ct]-lft+=THghLm/7[luWMT,d:d(TbliKVd^Q06ZE(CELcli0X3d$ql&=VlO4]S6D]ecS:[`\8E_u;?g`)lnQ55hA0W+M&,]CWYX$d2iPY?5.P9Y6hWO7Y-$.4e:#*6G:'0<sHr*=9\.O*pZ$.W'H:R1GXM!8U=#YBfe]:oOj)">L_F,p(:/G*og`(0:TD3Gb!cYS!+df^Il5a(TfZ40_5^Nt<Xf9oeAo%($YLMAn#ad>R89?ddAU-D):*@
 @<LA@03=a<eEafB<Xm[0g;MRfnAY/YO)2hqsFf!f6pXAt#3>aF!825<+b&p--:ksi/Sjn1..`<;IU^SG]$EW~>
+endstream
+endobj
+59 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 58 0 R
+>>
+endobj
+60 0 obj
+<< /Length 2902 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gat%&D3LGK')k)0_Y5KN?*"#1"5+2dS!chtWLLKccKoGODXN,cZE4QY<YB...@m>X`A<)^Y5Za?``;mh>"dF'lWuW`Hs4j[6cZkpKBGTog$)q8qSr37]n5'pK*YQpPW3g=I6\CnC*5g>?MYY-NBW!Hl;]eQEp#DK;QdkZ`kW,G.j\h.\p$Te`_(ZhPLlUGAd<H7[<2_>/>C'+Wms`$Xo-i(8`O^6.TVI1,9Y:U+rrW%@fXlE%kq@dGUiN$FM0hR4:k$:CC;K9pZ#j+d9,@^ro9(0>HDX5<SVp8,ng"<!+d^;0(%A0aOM;5^Fd8_nE0?b.OLp;^:q3[JM'\SI7jm$`VMM?H(ZV0+&[AP,64DO6b]lOO(CORB=LcF<rE1H%?Waf<nYeQ5jNpakK-^X"!+2"VGu@#hIl'.#h>L1]g!B2jR[IW[VJ=J-<[<#L=o2f)9F;;aH5&JGCi*67[%BMs7_!pg+MtnG'QG4WZ6S3*^Jn-3uu)d%+!DmeD"b#g6E@)Hhq;^Q>Md+)5AGKLki=VGhRa`ip1blu8&,,u!t=Q/B1#G!%s0"<ZC+5Z!RN?BE=`8rJk1"@-]HeR)0HUq@I9T`kFS_2(YpEfXoN19`KBgc&eso=,KbpH*]aR&preNXK,X>"?/:4Bq81h,.!a;:IRW4hMsdg^EF=&m7dV3H>G0:rb![%oh]^IlPuC@n4G[+c%1e&^G]Ag$k_Um)CtV+s"*'5RPpP2h[G;JFQbO]QG'8iL+JqEUO3YmHAYgXHXd84\.:S'ns^[c/]8d]ZA#WHI.&c$GcthKaC'^P\8pI5CY*lJjbZP3Ca@B)h+b<bp,-EiX#I"Uu;HY3&['ABM?`?Ft[7fb:N3
 r4buhII=)"ghi.?Q>;-Z.VsB7cm^4BMq*tFO_TF>"4od6glbDfO+1GQV't_LFa:#`p`9P+G>4dhX.1KB_Nb2o0:,nrs3H$1>:APFG2nZGDKe?e%m]<F.J5-ju=&hFM>O>V'$lF:O@E"U7i9u'KhDjqc-l5MdH=BE5[3",\p8a!p:Sq#LT<[(-;Q5pPE%4QmH%#Rb,q%,I:+$li6Ft46$HXDV#H6Z^D\f3$%MHAKr=8[<a]@*Tlc1q#oEo"898CA0B#;(Nb'6?2IQWY[q[")4Ht+^`">56O(dWleP-GA6KBe:31-^o7&IU#_NoVd@b^bN-U=):R2T-J[>TP\H(AG=)LWiB+&-g*Rm$sp"c6Tnr#[qN1ESX4I(SECan9A^e]V>!k#!R.:gpPZ-[-$*1>k`FfC!:O`dSC]K8D4sQbX`\W_ulj?CR)62.51>k*Yj,VN5@%S#=jqU,9nAiSp>@VRjB\g)!Q^E(KuYo20H_'"rEpPo/W)GhQt=276@c3._dqU#4m?KK+/MI.tttN[</95A#q.5_+a4%+<!B+Gq+O\FO?e\/>;0Uk^MfD'!Q#Rk?p*k+N+P/rZD<eiB4psP^1[\"n1sBk/6j$<:V'Z61KnY?s1uJ9@B6S$M5&;R'qntXV]d6%*;[M4.*"IJUQ!-?qp@^Ra"D!c6@pGO:[j[90^"]Z3HX<+M63V*"$X9/PD+ZZ0rNnQ)bPuLnHU'I,i!n$12X.2W4+"=ZMmDgVUrm&L&?]OPi?n\s=.%\8j\s$Y3YAWbKut"kr'NX<:!BY#%kfUT'dIhM)4)`I0jY#NPWI$YBZY!F)m"6h&4F*RE!fqXnNaSN%P;O6Zf=>[,&TMc/LI6XFU)c?7:;:t?DV'%qKiWNU9[Ng#Zp+!]RZ*+O58J7EVepX-1SNl;5"JY"h'lmZdsG<5R'id'KU&J$/L\2>I[f1OFHRrb2hLo[k5(C("D$i#jS6TEAMOmbLfSLK-*iCe-:9/Nmnjs`
 HBF;Ug&O&GaH#3M3T@,$]Hf`3<PUCZ0i*b[!b=NVApk2&,JVoE-p3CP.FOgP`lr'3nVD6#%>OW[DFFDAG94`$7;9,RfEG9E5F%2K[?>a7;/\!ko+;,e%(qbp\DUE2[b?85cqPaReaX^Ep.QHZdRS$c4G[@Fs=J*)ZJ?(ZNC'g+TfStfbHaF>@1CF/hF8Y@KfmI#K"kLA!*P=s\R.qRt45FVW%9qsuH-f=DuTq.NB?gqamc!+@;'^g'j/h`&n&PE<I*&4C=p#`M)9t]/Tr="+hrJ\BGR8!6fir8K":Qtb#\mX*oo?NZ$*tDWF^&&XBr7P2rr04%,Yh(77!UbR<BugV%HP`IIq%%e=p+P2:5GMV7&B=\ORnVZs#/8F30Ktp:]3dK0"8jua;<4?U2/5VtX7.A`=)6U<.^KldVsugk71K1KO`KVZs/kTWoF;&\,H?aQWbQhSO<C*T?@ENlg!S<sCi>*X$ci,,BM<bs,E&&lcD".gG<?aYKsG-+Le8eV*)3emU")m"3aU^YO`]12hY9'<rmCN(brr1"5QqH%Es@FA^`_>X/*r7LJ9gk4]9o3._)6BJAZh2T&%0X.F8pYHi:">j,qM1t6Vji1Rr=c*UQ'JK'-*2gX+=PM+oS9)CN?)(Wb3c]nSO8i9oTV#0;u?P;r8JYE\flD0YFL5`hg@)_MH0$BCH'b*4e['<_?ePDn2`ui;!0HOBKDqIHrsga;FEr&(1R7lT/gn6QEEhSd4XEa0s0S92i,W($Fi(NQR^=85=I5!9N'J0*[UN)!S:JC*@VCKLgSld55B*I*hKNi=u.\a;A(EHi*Yjjq>U@K`4o*+%7`O8!='(EH#ml[AnEu+H>,n%R!&Iqc2R"o6th<n:#rDeZJ;jdV]RHD1CZBC9"p"`e2o-htN&sf`nQIpP(h$:%eP#4'1e~>
+endstream
+endobj
+61 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 60 0 R
+>>
+endobj
+62 0 obj
+<< /Length 2333 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gatm=>Ar7U(4OT5&GjfhW**CXWIoK#SP.duVd2AQYSb[g,L\Ou19%)q#KC6Qq]8>;FD0-G]-rOn3kV'-GAbXon`oi<lJG['[=Y%JX4Sc-eaN7kIm9mGH]AaNhbq[E^A@$Cn>DV&\-jk.Kpg!CQ!NjaiLaU;3s1iAD;TZp=FXZ78QD",(+e:TIqSH0qRl,aRMW%M1F9MX_=DJsG+Ys[f+E`'^=egL-,o$]CIHMp.2>S(B"@9BGHt3:XM:jWcQGp:$?HcsLOgT=F]kRmOdcdn$eB/(::J5,$'2Pf@D#dqRhlaQh=-;F/8.>3p:0l-k>'rs3-L?X;_(0jR]IC[d'YD4Ot91%)1bajr/NU?(_Gm*\<$"]k@?q)MX/bQW)qjVpCk)FBdH%^<>'+k7g$MMT7i<`3XY,!=Rrh"rF,-iGQ=9YfW.liG!t-Le=QQDkL]<Lh&67W5-sf?jb],%,C\"`*/f9g9<\Xnc-)tfFlr6*+-,dQ81G1E=A^Qqd<g*4%`aPj2;d&WRZTI+M#&e$r66Wcj;<#dgDhcpa^+J8C_u`]:1&W*;fot_cac`mK&,qX'"AY_1L47R'k(i#_4'_D)_QiaNe)humj)^\+:$09%u>U_JoihYP8I.,Z"r4]bN^KlP:2H-c`2HkN`5ldlo;:%[Be(R:@G;3D?jK9qJG!lkOnJ_*EnJAnCYM[ja-kp["rh?k$-,sA_PNB>eK-b?S-$r%YT[fHbTdsO3ZeqrH]Eg:"\8#03Q"`d>b>/']ogc9)4&?5$kX/3DM7bGlb;5p_\i3lKaldCRcf=NL)K_7Ojp0dZmeE=Dr/iC><c(A<>-;=Gs@e=59>jb)]g@mH')8JF:?YDoqPFASmQf1"_9&m0:h_F4Ul8'BC/qg2H3DGo=^Ms4CU;kWV5[/aX!]c4EJjRATUZ.e',`daT:5$`:F9@IuZ4Wcf2(n&+?bnI?N9QM8!qUTPbo\be7V+BZ96f,JKZVM9>#2CO(j<>[5
 (c'UPsoRRpq`<oJ$0$\uZ.8*?H<#%ME;l\:%3Qpa*3Do*-T?.L%n5(iI)M.hk9n$Qn$W@uocEK/mC]?[:*1uibG*?pb'8glh&2`5)4?%'EX'uI.kTC`[ghA3s"VT<,Xg;8ah"s$V^!s;0'*_]teJTF9)Y+A1[=U,1+G5`NfV]X0!4q,.bc$,6_2Fl0_l6%1m'JB(!/iLU_Qc/B!Xe+TYOpT3fA?emNca8?R_O3Q%hRcDU"t%:&6X0GeLOY`KR:u1C7"H1c$m[=;WPf"pu%E9c5%j`ca[APhQn7p'!k`->pM-q'ni\rX$cT!e+n"1r\_K9e1jhR8W!:=Cq`P=WK/kAjSQ&45=q+arB*B8KIHPQ;=X;NKKrp\R)h$n$9&<<DB,<`f<u\UADAe'IDscJ\_tR;3oUZ,4/RkiaqDro0\jf]:%;83n;sVL?7<A[Iirm;A=5S7Oak<]On(;?p-UoZrNHXt]O2&qdMRNJ'a0k#C''K)"]VqF#_:jn4pn$ZM+K6Wm^N1e>eo>iDDEW9'fK!V62.N0HI1TTfDncJL!?ekZdFu^k]nF7@F0(i^)jq7,8/h4SnU"9K9jGT.]Y\/`MgUePX=tdFst2f=q^jT`!oC+VWefhTMTaJ?8WIg8T/KHo]u_a/]4TJL8@PAq_c00?*0D-U;RY'RfhJ,r:s2/4D*XNnasjhj7K.odVNsA[Od[]7/FbOoN5)h43@V'<[cfeG][mf@P!O8d;"celY:"_Z[8hkl55Q+gS":UbL@5P<iM0W%m,UkqIUq\S71j?c5)lfg^Ou#[ll[U0fV!O6"BIE6oK//-`XTh1\"0>\l90YMk2!6:?f]'l]a>-E/$GC[c%Q0Mut5"SNWZ<$=-Q0\`K:u=;AsU73H&H5"]s&.X%jkN]0YJraL$6<XdbRG3a-4;c$fmW7cDL6"$MmQ5_;@m+-^&)moCB*G>EUeH]^:#G#p1TRDM\&XV#_9QCS<'C[AcT-6p-*=3@F)FK
 oJN.G-JZ8G#+F:X@b_"R_Z$N/]U8\XJ<`uZ<,;>e_/)Ut9sq\d<)I$39;\^hT]e%t7kh:UMn:<Smp#$I8[2#[H!o/bXf:pO+e0SnY0%Hp6*N4qC_Yf/c]hB$D.?.XsiYJ%u._aS!IKoSYC2r;"Rp![f$7Mq:Jm(8OfX(PaUW2EM['7;l^,EoD?W;E6E?DOZ&o=Eu7+UNf"j,REY/gt<`%o5:40s:WIkXD(C4T^=a<km(JIVXUIFfKM`5:M]8%K-;*@DN6O'))JYnj.$Ri3Cs1n^Y45Z@5N;]7JF.TZV^R4lY'iUp6A[a^kK)&/r*[)Y.&H"DpfZRrs.'NbCsdC<IBge(t$(eq,6A~>
+endstream
+endobj
+63 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 62 0 R
+>>
+endobj
+64 0 obj
+<< /Length 607 /Filter [ /ASCII85Decode /FlateDecode ]
+ >>
+stream
+Gat=(bAQ&g&A7<ZfMe>n)3PU)3&XK0+D?<?iN;KuQ>)6_9f`u"_gc#sO(a4]BH7?o3%L&5AuOgn8A9o@-)"ukIp\D&@"P[8Mt`I.f?:ZVOB6+\r((]oEdc7GAat?(,buZIGYus(3Pu_+Ok?A"$W3ro?(iS1hQnoi4uX-;C1AS)j>6SsagL&hS(;W"W<&i9`lOG:1?\fgDmThnCV--0?HMlA0^DcMeuU6t%a"mudY896kVj+b0aIQD_`WR@'UQe#_(Wh'.tPGY:f;BDNmf_j8(ds)O37@K7hD/45rJ\,^aRJ]PJA#IUP&l_;kTtcS[ZF<.-$K#)qXrO5=A!br%cZq`+0R1-`pDl\Sl5\]n2\S`W9Ac>$!RXmaXt2CbR5M1@G.R9F&&Ye`<*k!iKrFkO\sW<qc)Km:FgtcZtPo4C`'p?.Q.fZdNlKKP\MqEp'HG(L9F_c496RnNK``f9DF<kBrY6Jf-e6p1>:]qH'A%MMo+e5L8`0AI2U>17S`^@!To2ks.8LA]@T07a&/geRu?UH+g>,MrtP/gWo&:(a7Rc`"5]L5[5=YEgq$4*`VQ5CY)i%(sr-NUBb)n#2j`2q1Dl2.C_T8TJne~>
+endstream
+endobj
+65 0 obj
+<< /Type /Page
+/Parent 1 0 R
+/MediaBox [ 0 0 612 792 ]
+/Resources 3 0 R
+/Contents 64 0 R
+>>
+endobj
+67 0 obj
+<<
+ /Title (\376\377\0\61\0\40\0\117\0\166\0\145\0\162\0\166\0\151\0\145\0\167)
+ /Parent 66 0 R
+ /Next 68 0 R
+ /A 9 0 R
+>> endobj
+68 0 obj
+<<
+ /Title (\376\377\0\62\0\40\0\101\0\162\0\143\0\150\0\151\0\164\0\145\0\143\0\164\0\165\0\162\0\145)
+ /Parent 66 0 R
+ /First 69 0 R
+ /Last 72 0 R
+ /Prev 67 0 R
+ /Next 73 0 R
+ /Count -4
+ /A 11 0 R
+>> endobj
+69 0 obj
+<<
+ /Title (\376\377\0\62\0\56\0\61\0\40\0\122\0\145\0\143\0\157\0\155\0\155\0\145\0\156\0\144\0\145\0\162)
+ /Parent 68 0 R
+ /Next 70 0 R
+ /A 13 0 R
+>> endobj
+70 0 obj
+<<
+ /Title (\376\377\0\62\0\56\0\62\0\40\0\104\0\141\0\164\0\141\0\115\0\157\0\144\0\145\0\154)
+ /Parent 68 0 R
+ /Prev 69 0 R
+ /Next 71 0 R
+ /A 15 0 R
+>> endobj
+71 0 obj
+<<
+ /Title (\376\377\0\62\0\56\0\63\0\40\0\125\0\163\0\145\0\162\0\103\0\157\0\162\0\162\0\145\0\154\0\141\0\164\0\151\0\157\0\156\0\54\0\40\0\111\0\164\0\145\0\155\0\103\0\157\0\162\0\162\0\145\0\154\0\141\0\164\0\151\0\157\0\156)
+ /Parent 68 0 R
+ /Prev 70 0 R
+ /Next 72 0 R
+ /A 17 0 R
+>> endobj
+72 0 obj
+<<
+ /Title (\376\377\0\62\0\56\0\64\0\40\0\125\0\163\0\145\0\162\0\116\0\145\0\151\0\147\0\150\0\142\0\157\0\162\0\150\0\157\0\157\0\144)
+ /Parent 68 0 R
+ /Prev 71 0 R
+ /A 19 0 R
+>> endobj
+73 0 obj
+<<
+ /Title (\376\377\0\63\0\40\0\122\0\145\0\161\0\165\0\151\0\162\0\145\0\155\0\145\0\156\0\164\0\163)
+ /Parent 66 0 R
+ /First 74 0 R
+ /Last 75 0 R
+ /Prev 68 0 R
+ /Next 76 0 R
+ /Count -2
+ /A 21 0 R
+>> endobj
+74 0 obj
+<<
+ /Title (\376\377\0\63\0\56\0\61\0\40\0\122\0\145\0\161\0\165\0\151\0\162\0\145\0\144)
+ /Parent 73 0 R
+ /Next 75 0 R
+ /A 23 0 R
+>> endobj
+75 0 obj
+<<
+ /Title (\376\377\0\63\0\56\0\62\0\40\0\117\0\160\0\164\0\151\0\157\0\156\0\141\0\154)
+ /Parent 73 0 R
+ /Prev 74 0 R
+ /A 25 0 R
+>> endobj
+76 0 obj
+<<
+ /Title (\376\377\0\64\0\40\0\104\0\145\0\155\0\157)
+ /Parent 66 0 R
+ /Prev 73 0 R
+ /Next 77 0 R
+ /A 27 0 R
+>> endobj
+77 0 obj
+<<
+ /Title (\376\377\0\65\0\40\0\105\0\170\0\141\0\155\0\160\0\154\0\145\0\163)
+ /Parent 66 0 R
+ /First 78 0 R
+ /Last 80 0 R
+ /Prev 76 0 R
+ /Next 81 0 R
+ /Count -3
+ /A 29 0 R
+>> endobj
+78 0 obj
+<<
+ /Title (\376\377\0\65\0\56\0\61\0\40\0\125\0\163\0\145\0\162\0\55\0\142\0\141\0\163\0\145\0\144\0\40\0\122\0\145\0\143\0\157\0\155\0\155\0\145\0\156\0\144\0\145\0\162)
+ /Parent 77 0 R
+ /Next 79 0 R
+ /A 31 0 R
+>> endobj
+79 0 obj
+<<
+ /Title (\376\377\0\65\0\56\0\62\0\40\0\111\0\164\0\145\0\155\0\55\0\142\0\141\0\163\0\145\0\144\0\40\0\122\0\145\0\143\0\157\0\155\0\155\0\145\0\156\0\144\0\145\0\162)
+ /Parent 77 0 R
+ /Prev 78 0 R
+ /Next 80 0 R
+ /A 33 0 R
+>> endobj
+80 0 obj
+<<
+ /Title (\376\377\0\65\0\56\0\63\0\40\0\123\0\154\0\157\0\160\0\145\0\55\0\117\0\156\0\145\0\40\0\122\0\145\0\143\0\157\0\155\0\155\0\145\0\156\0\144\0\145\0\162)
+ /Parent 77 0 R
+ /Prev 79 0 R
+ /A 35 0 R
+>> endobj
+81 0 obj
+<<
+ /Title (\376\377\0\66\0\40\0\111\0\156\0\164\0\145\0\147\0\162\0\141\0\164\0\151\0\157\0\156\0\40\0\167\0\151\0\164\0\150\0\40\0\171\0\157\0\165\0\162\0\40\0\141\0\160\0\160\0\154\0\151\0\143\0\141\0\164\0\151\0\157\0\156)
+ /Parent 66 0 R
+ /First 82 0 R
+ /Last 83 0 R
+ /Prev 77 0 R
+ /Next 84 0 R
+ /Count -2
+ /A 37 0 R
+>> endobj
+82 0 obj
+<<
+ /Title (\376\377\0\66\0\56\0\61\0\40\0\104\0\151\0\162\0\145\0\143\0\164)
+ /Parent 81 0 R
+ /Next 83 0 R
+ /A 39 0 R
+>> endobj
+83 0 obj
+<<
+ /Title (\376\377\0\66\0\56\0\62\0\40\0\123\0\164\0\141\0\156\0\144\0\141\0\154\0\157\0\156\0\145\0\40\0\163\0\145\0\162\0\166\0\145\0\162)
+ /Parent 81 0 R
+ /Prev 82 0 R
+ /A 41 0 R
+>> endobj
+84 0 obj
+<<
+ /Title (\376\377\0\67\0\40\0\120\0\145\0\162\0\146\0\157\0\162\0\155\0\141\0\156\0\143\0\145)
+ /Parent 66 0 R
+ /First 85 0 R
+ /Last 86 0 R
+ /Prev 81 0 R
+ /Next 87 0 R
+ /Count -2
+ /A 43 0 R
+>> endobj
+85 0 obj
+<<
+ /Title (\376\377\0\67\0\56\0\61\0\40\0\122\0\165\0\156\0\164\0\151\0\155\0\145\0\40\0\120\0\145\0\162\0\146\0\157\0\162\0\155\0\141\0\156\0\143\0\145)
+ /Parent 84 0 R
+ /Next 86 0 R
+ /A 45 0 R
+>> endobj
+86 0 obj
+<<
+ /Title (\376\377\0\67\0\56\0\62\0\40\0\101\0\154\0\147\0\157\0\162\0\151\0\164\0\150\0\155\0\40\0\120\0\145\0\162\0\146\0\157\0\162\0\155\0\141\0\156\0\143\0\145\0\72\0\40\0\127\0\150\0\151\0\143\0\150\0\40\0\117\0\156\0\145\0\40\0\111\0\163\0\40\0\102\0\145\0\163\0\164\0\77)
+ /Parent 84 0 R
+ /Prev 85 0 R
+ /A 47 0 R
+>> endobj
+87 0 obj
+<<
+ /Title (\376\377\0\70\0\40\0\125\0\163\0\145\0\146\0\165\0\154\0\40\0\114\0\151\0\156\0\153\0\163)
+ /Parent 66 0 R
+ /Prev 84 0 R
+ /A 49 0 R
+>> endobj
+88 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F3
+/BaseFont /Helvetica-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+89 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F5
+/BaseFont /Times-Roman
+/Encoding /WinAnsiEncoding >>
+endobj
+90 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F6
+/BaseFont /Times-Italic
+/Encoding /WinAnsiEncoding >>
+endobj
+91 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F1
+/BaseFont /Helvetica
+/Encoding /WinAnsiEncoding >>
+endobj
+92 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F9
+/BaseFont /Courier
+/Encoding /WinAnsiEncoding >>
+endobj
+93 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F2
+/BaseFont /Helvetica-Oblique
+/Encoding /WinAnsiEncoding >>
+endobj
+94 0 obj
+<< /Type /Font
+/Subtype /Type1
+/Name /F7
+/BaseFont /Times-Bold
+/Encoding /WinAnsiEncoding >>
+endobj
+1 0 obj
+<< /Type /Pages
+/Count 9
+/Kids [6 0 R 51 0 R 53 0 R 55 0 R 57 0 R 59 0 R 61 0 R 63 0 R 65 0 R ] >>
+endobj
+2 0 obj
+<< /Type /Catalog
+/Pages 1 0 R
+ /Outlines 66 0 R
+ /PageMode /UseOutlines
+ >>
+endobj
+3 0 obj
+<< 
+/Font << /F3 88 0 R /F5 89 0 R /F1 91 0 R /F6 90 0 R /F9 92 0 R /F2 93 0 R /F7 94 0 R >> 
+/ProcSet [ /PDF /ImageC /Text ] >> 
+endobj
+9 0 obj
+<<
+/S /GoTo
+/D [51 0 R /XYZ 85.0 659.0 null]
+>>
+endobj
+11 0 obj
+<<
+/S /GoTo
+/D [51 0 R /XYZ 85.0 339.066 null]
+>>
+endobj
+13 0 obj
+<<
+/S /GoTo
+/D [51 0 R /XYZ 85.0 252.332 null]
+>>
+endobj
+15 0 obj
+<<
+/S /GoTo
+/D [51 0 R /XYZ 85.0 161.479 null]
+>>
+endobj
+17 0 obj
+<<
+/S /GoTo
+/D [53 0 R /XYZ 85.0 524.2 null]
+>>
+endobj
+19 0 obj
+<<
+/S /GoTo
+/D [53 0 R /XYZ 85.0 446.547 null]
+>>
+endobj
+21 0 obj
+<<
+/S /GoTo
+/D [53 0 R /XYZ 85.0 355.694 null]
+>>
+endobj
+23 0 obj
+<<
+/S /GoTo
+/D [53 0 R /XYZ 85.0 324.56 null]
+>>
+endobj
+25 0 obj
+<<
+/S /GoTo
+/D [53 0 R /XYZ 85.0 275.307 null]
+>>
+endobj
+27 0 obj
+<<
+/S /GoTo
+/D [53 0 R /XYZ 85.0 160.054 null]
+>>
+endobj
+29 0 obj
+<<
+/S /GoTo
+/D [55 0 R /XYZ 85.0 273.4 null]
+>>
+endobj
+31 0 obj
+<<
+/S /GoTo
+/D [55 0 R /XYZ 85.0 242.266 null]
+>>
+endobj
+33 0 obj
+<<
+/S /GoTo
+/D [57 0 R /XYZ 85.0 426.0 null]
+>>
+endobj
+35 0 obj
+<<
+/S /GoTo
+/D [59 0 R /XYZ 85.0 632.0 null]
+>>
+endobj
+37 0 obj
+<<
+/S /GoTo
+/D [59 0 R /XYZ 85.0 513.547 null]
+>>
+endobj
+39 0 obj
+<<
+/S /GoTo
+/D [59 0 R /XYZ 85.0 482.413 null]
+>>
+endobj
+41 0 obj
+<<
+/S /GoTo
+/D [59 0 R /XYZ 85.0 404.76 null]
+>>
+endobj
+43 0 obj
+<<
+/S /GoTo
+/D [59 0 R /XYZ 85.0 187.107 null]
+>>
+endobj
+45 0 obj
+<<
+/S /GoTo
+/D [59 0 R /XYZ 85.0 155.973 null]
+>>
+endobj
+47 0 obj
+<<
+/S /GoTo
+/D [61 0 R /XYZ 85.0 235.0 null]
+>>
+endobj
+49 0 obj
+<<
+/S /GoTo
+/D [63 0 R /XYZ 85.0 543.6 null]
+>>
+endobj
+66 0 obj
+<<
+ /First 67 0 R
+ /Last 87 0 R
+>> endobj
+xref
+0 95
+0000000000 65535 f 
+0000028525 00000 n 
+0000028639 00000 n 
+0000028731 00000 n 
+0000000015 00000 n 
+0000000071 00000 n 
+0000001331 00000 n 
+0000001451 00000 n 
+0000001616 00000 n 
+0000028876 00000 n 
+0000001751 00000 n 
+0000028939 00000 n 
+0000001888 00000 n 
+0000029005 00000 n 
+0000002025 00000 n 
+0000029071 00000 n 
+0000002162 00000 n 
+0000029137 00000 n 
+0000002299 00000 n 
+0000029201 00000 n 
+0000002435 00000 n 
+0000029267 00000 n 
+0000002571 00000 n 
+0000029333 00000 n 
+0000002708 00000 n 
+0000029398 00000 n 
+0000002843 00000 n 
+0000029464 00000 n 
+0000002980 00000 n 
+0000029530 00000 n 
+0000003117 00000 n 
+0000029594 00000 n 
+0000003253 00000 n 
+0000029660 00000 n 
+0000003388 00000 n 
+0000029724 00000 n 
+0000003525 00000 n 
+0000029788 00000 n 
+0000003662 00000 n 
+0000029854 00000 n 
+0000003799 00000 n 
+0000029920 00000 n 
+0000003936 00000 n 
+0000029985 00000 n 
+0000004073 00000 n 
+0000030051 00000 n 
+0000004210 00000 n 
+0000030117 00000 n 
+0000004346 00000 n 
+0000030181 00000 n 
+0000004483 00000 n 
+0000006851 00000 n 
+0000006959 00000 n 
+0000009415 00000 n 
+0000009523 00000 n 
+0000012274 00000 n 
+0000012382 00000 n 
+0000014576 00000 n 
+0000014684 00000 n 
+0000016842 00000 n 
+0000016950 00000 n 
+0000019945 00000 n 
+0000020053 00000 n 
+0000022479 00000 n 
+0000022587 00000 n 
+0000023286 00000 n 
+0000030245 00000 n 
+0000023394 00000 n 
+0000023533 00000 n 
+0000023751 00000 n 
+0000023919 00000 n 
+0000024089 00000 n 
+0000024395 00000 n 
+0000024593 00000 n 
+0000024811 00000 n 
+0000024961 00000 n 
+0000025111 00000 n 
+0000025241 00000 n 
+0000025435 00000 n 
+0000025667 00000 n 
+0000025913 00000 n 
+0000026139 00000 n 
+0000026480 00000 n 
+0000026618 00000 n 
+0000026821 00000 n 
+0000027033 00000 n 
+0000027248 00000 n 
+0000027589 00000 n 
+0000027752 00000 n 
+0000027865 00000 n 
+0000027975 00000 n 
+0000028086 00000 n 
+0000028194 00000 n 
+0000028300 00000 n 
+0000028416 00000 n 
+trailer
+<<
+/Size 95
+/Root 2 0 R
+/Info 4 0 R
+>>
+startxref
+30296
+%%EOF

Modified: lucene/mahout/site/publish/whoweare.html
URL: http://svn.apache.org/viewvc/lucene/mahout/site/publish/whoweare.html?rev=658521&r1=658520&r2=658521&view=diff
==============================================================================
--- lucene/mahout/site/publish/whoweare.html (original)
+++ lucene/mahout/site/publish/whoweare.html Tue May 20 18:15:20 2008
@@ -128,6 +128,9 @@
 <div class="menuitem">
 <a href="http://svn.apache.org/viewcvs.cgi/lucene/mahout/">Version Control</a>
 </div>
+<div class="menuitem">
+<a href="taste.html">Taste Documentation</a>
+</div>
 </div>
 <div onclick="SwitchMenu('menu_1.3', 'skin/')" id="menu_1.3Title" class="menutitle">Related Projects</div>
 <div id="menu_1.3" class="menuitemgroup">

Modified: lucene/mahout/site/src/documentation/content/xdocs/site.xml
URL: http://svn.apache.org/viewvc/lucene/mahout/site/src/documentation/content/xdocs/site.xml?rev=658521&r1=658520&r2=658521&view=diff
==============================================================================
--- lucene/mahout/site/src/documentation/content/xdocs/site.xml (original)
+++ lucene/mahout/site/src/documentation/content/xdocs/site.xml Tue May 20 18:15:20 2008
@@ -57,6 +57,7 @@
       <release label="Releases" href="releases.html"/>
       <system label="System Requirements" href="systemrequirements.html"/>
       <svn   label="Version Control"  href="ext:source" />
+      <taste label="Taste Documentation" href="taste.html"/>
   </resources>
   
   <projects label="Related Projects">

Modified: lucene/mahout/site/src/documentation/content/xdocs/taste.xml
URL: http://svn.apache.org/viewvc/lucene/mahout/site/src/documentation/content/xdocs/taste.xml?rev=658521&r1=658520&r2=658521&view=diff
==============================================================================
--- lucene/mahout/site/src/documentation/content/xdocs/taste.xml (original)
+++ lucene/mahout/site/src/documentation/content/xdocs/taste.xml Tue May 20 18:15:20 2008
@@ -362,7 +362,7 @@
   <li><a href="http://eecs.oregonstate.edu/iis/CoFE/">CoFE</a></li>
 </ul>
 
-<p>Here's a handful of research papers that I've read and found particular useful:</p>
+<p>Here's a handful of research papers that I've read and found particularly useful:</p>
 
 <blockquote cite="http://research.microsoft.com/research/pubs/view.aspx?tr_id=166"><p>J.S. Breese, D. Heckerman
  and C. Kadie, "<a href="http://research.microsoft.com/research/pubs/view.aspx?tr_id=166">Empirical Analysis of