diff --git a/.bzrignore b/.bzrignore index f8b5310..1d1886c 100644 --- a/.bzrignore +++ b/.bzrignore @@ -1 +1,3 @@ *.tmplc +.DS_Store +cache diff --git a/INSTALL b/INSTALL deleted file mode 100644 index 5992a62..0000000 --- a/INSTALL +++ /dev/null @@ -1,167 +0,0 @@ -Installing Planet ------------------ - -You'll need at least Python 2.2 installed on your system, we recommend -Python 2.4 though as there may be bugs with the earlier libraries. - -Everything Pythonesque Planet need to provide basic operation should be -included in the distribution. Additionally: - * Usage of XSLT requires either xsltproc or python-libxslt. - * The current interface to filters written in non-templating languages - (e.g., python) uses the subprocess module which was introduced in - Python 2.4. - * Usage of FOAF as a reading list requires librdf. - -Instructions: - - i. - First you'll need to extract the files into a folder somewhere. - I expect you've already done this, after all, you're reading this - file. You can place this wherever you like, ~/planet is a good - choice, but so's anywhere else you prefer. - - ii. - This is very important: from within that directory, type the following - command: - - python runtests.py - - This should take anywhere from a one to ten seconds to execute. No network - connection is required, and the script cleans up after itself. If the - script completes with an "OK", you are good to go. Otherwise stopping here - and inquiring on the mailing list is a good idea as it can save you lots of - frustration down the road. - - iii. - Make a copy of one of the 'ini' the files in the 'examples' subdirectory, - and put them wherever you like; I like to use the Planet's name (so - ~/planet/debian), but it's really up to you. - - iv. - Edit the config.ini file in this directory to taste, it's pretty - well documented so you shouldn't have any problems here. Pay - particular attention to the 'output_dir' option, which should be - readable by your web server. If the directory you specify in your - 'cache_dir' exists, make sure that it is empty. - - v. - Run it: python planet.py pathto/config.ini - - You'll want to add this to cron, make sure you run it from the - right directory. - - vi. (Optional) - Tell us about it! We'd love to link to you on planetplanet.org :-) - - vii. (Optional) - Build your own themes, templates, or filters! And share! - - -Template files --------------- - -The template files used are given as a whitespace separated list in the -'template_files' option in config.ini. The extension at the end of the -file name indicates what processor to use. Templates may be implemented -using htmltmpl, xslt, or any programming language. - -The final extension is removed to form the name of the file placed in the -output directory. - -HtmlTmpl files --------------- - -Reading through the example templates is recommended, they're designed to -pretty much drop straight into your site with little modification -anyway. - -Inside these template files, is replaced with the content -of the 'xxx' variable. The variables available are: - - name .... } the value of the equivalent options - link .... } from the [Planet] section of your - owner_name . } Planet's config.ini file - owner_email } - - url .... link with the output filename appended - generator .. version of planet being used - - date .... { your date format - date_iso ... current date and time in { ISO date format - date_822 ... { RFC822 date format - - -There are also two loops, 'Items' and 'Channels'. All of the lines of -the template and variable substitutions are available for each item or -channel. Loops are created using ... -and may be used as many times as you wish. - -The 'Channels' loop iterates all of the channels (feeds) defined in the -configuration file, within it the following variables are available: - - name .... value of the 'name' option in config.ini, or title - title .... title retreived from the channel's feed - tagline .... description retreived from the channel's feed - link .... link for the human-readable content (from the feed) - url .... url of the channel's feed itself - - Additionally the value of any other option specified in config.ini - for the feed, or in the [DEFAULT] section, is available as a - variable of the same name. - - Depending on the feed, there may be a huge variety of other - variables may be available; the best way to find out what you - have is using the 'planet-cache' tool to examine your cache files. - -The 'Items' loop iterates all of the blog entries from all of the channels, -you do not place it inside a 'Channels' loop. Within it, the following -variables are available: - - id .... unique id for this entry (sometimes just the link) - link .... link to a human-readable version at the origin site - - title .... title of the entry - summary .... a short "first page" summary - content .... the full content of the entry - - date .... { your date format - date_iso ... date and time of the entry in { ISO date format - date_822 ... { RFC822 date format - - If the entry takes place on a date that has no prior entry has - taken place on, the 'new_date' variable is set to that date. - This allows you to break up the page by day. - - If the entry is from a different channel to the previous entry, - or is the first entry from this channel on this day - the 'new_channel' variable is set to the same value as the - 'channel_url' variable. This allows you to collate multiple - entries from the same person under the same banner. - - Additionally the value of any variable that would be defined - for the channel is available, with 'channel_' prepended to the - name (e.g. 'channel_name' and 'channel_link'). - - Depending on the feed, there may be a huge variety of other - variables may be available; the best way to find out what you - have is using the 'planet-cache' tool to examine your cache files. - - -There are also a couple of other special things you can do in a template. - - - If you want HTML escaping applied to the value of a variable, use the - form. - - - If you want URI escaping applied to the value of a variable, use the - form. - - - To only include a section of the template if the variable has a - non-empty value, you can use ..... e.g. - - -

-
- - You may place a within this block to specify an - alternative, or may use ... to - perform the opposite. diff --git a/README b/README index a1fb9e9..3014d89 100644 --- a/README +++ b/README @@ -9,11 +9,11 @@ also actively being maintained. It uses Mark Pilgrim's Universal Feed Parser to read from CDF, RDF, RSS and Atom feeds; Leonard Richardson's Beautiful Soup to correct markup issues; -and Tomas Styblo's templating engine to output static files in any -format you can dream up. +and either Tomas Styblo's templating engine Daniel Viellard's implementation +of XSLT to output static files in any format you can dream up. -To get started, check out the INSTALL file in this directory. If you have any -questions or comments, please don't hesitate to use the planet mailing list: +To get started, check out the documentation in the docs directory. If you have +any questions or comments, please don't hesitate to use the planet mailing list: http://lists.planetplanet.org/mailman/listinfo/devel diff --git a/THANKS b/THANKS index eae4e9f..fc50f34 100644 --- a/THANKS +++ b/THANKS @@ -4,6 +4,13 @@ Elias Torres - FOAF OnlineAccounts Jacques Distler - Template patches Michael Koziarski - HTTP Auth fix Brian Ewins - Win32 / Portalocker +Joe Gregorio - Invoke same version of Python for filters +Harry Fuecks - Pipe characters in file names, filter bug +Eric van der Vlist - Filters to add language, category information +Chris Dolan - mkdir cache; default template_dirs; fix xsltproc +David Sifry - rss 2.0 xslt template based on http://atom.geekhood.net/ +Morten Fredericksen - Support WordPress LinkManager OPML +Harry Fuecks - default item date to feed date This codebase represents a radical refactoring of Planet 2.0, which lists the following contributors: diff --git a/TODO b/TODO index 62c6c1a..0350a25 100644 --- a/TODO +++ b/TODO @@ -1,11 +1,6 @@ TODO ==== - * Enable per-feed adjustments - - The goal is to better cope with feeds that don't have dates or ids or - consitently encode or escape things incorrectly. - * Expire feed history The feed cache doesn't currently expire old entries, so could get diff --git a/docs/config.html b/docs/config.html new file mode 100644 index 0000000..b20d28c --- /dev/null +++ b/docs/config.html @@ -0,0 +1,140 @@ + + + + + +Venus Configuration + + + +

Configuration

+

Configuration files are in ConfigParser format which basically means the same +format as INI files, i.e., they consist of a series of +[sections], in square brackets, with each section containing a +list of name:value pairs (or name=value pairs, if +you prefer).

+

You are welcome to place your entire configuration into one file. +Alternately, you may factor out the templating into a "theme", and +the list of subscriptions into one or more "reading lists".

+

[planet]

+

This is the only required section, which is a bit odd as none of the +parameters listed below are required. Even so, you really do want to +provide many of these, especially ones that identify your planet and +either (or both) of template_files and theme.

+

Below is a complete list of predefined planet configuration parameters, +including ones not (yet) implemented by Venus and ones that +are either new or implemented differently by Venus.

+ +
+
+
name
+
Your planet's name
+
link
+
Link to the main page
+
owner_name
+
Your name
+
owner_email
+
Your e-mail address
+ +
+
+ +
cache_directory
+
Where cached feeds are stored
+
output_dir
+
Directory to place output files
+ +
+
+ +
output_theme
+
Directory containing a config.ini file which is merged +with this one. This is typically used to specify templating and bill of +material information.
+
template_files
+
Space-separated list of output template files
+
template_directories
+
Space-separated list of directories in which template_files +can be found
+
bill_of_materials
+
Space-separated list of files to be copied as is directly from the template_directories to the output_dir
+
filters
+
Space-separated list of filters to apply to each entry
+ +
+
+ +
items_per_page
+
How many items to put on each page. Whereas Planet 2.0 allows this to +be overridden on a per template basis, Venus currently takes the maximum value +for this across all templates.
+
days_per_page
+
How many complete days of posts to put on each page This is the absolute, hard limit (over the item limit)
+
date_format
+
strftime format for the default 'date' template variable
+
new_date_format
+
strftime format for the 'new_date' template variable only applies to htmltmpl templates
+
encoding
+
Output encoding for the file, Python 2.3+ users can use the special "xml" value to output ASCII with XML character references
+
locale
+
Locale to use for (e.g.) strings in dates, default is taken from your system
+
activity_threshold
+
If non-zero, all feeds which have not been updated in the indicated +number of days will be marked as inactive
+ +
+
+ +
log_level
+
One of DEBUG, INFO, WARNING, ERROR or CRITICAL
+
log_format
+
format string to +use for logging output. Note: this configuration value is processed +raw
+
feed_timeout
+
Number of seconds to wait for any given feed
+
new_feed_items
+
Number of items to take from new feeds
+
+
+ +

[DEFAULT]

+

Values placed in this section are used as default values for all sections. +While it is true that few values make sense in all sections; in most cases +unused parameters cause few problems.

+ +

[subscription]

+

All sections other than planet, DEFAULT, or are +named in [planet]'s filters or +templatefiles parameters +are treated as subscriptions and typically take the form of a +URI.

+

Parameters placed in this section are passed to templates. While +you are free to include as few or as many parameters as you like, most of +the predefined themes presume that at least name is defined.

+

The content_type parameter can be defined to indicate that +this subscription is a reading list, i.e., is an external list +of subscriptions. At the moment, two formats of reading lists are supported: +opml and foaf. In the future, support for formats +like xoxo could be added.

+

Normalization overrides can +also be defined here.

+ +

[template]

+

Sections which are listed in [planet] template_files are +processed as templates. With Planet 2.0, +it is possible to override parameters like items_per_page +on a per template basis, but at the current time Planet Venus doesn't +implement this.

+ +

[filter]

+

Sections which are listed in [planet] filters are +processed as filters.

+

Parameters which are listed in this section are passed to the filter +in a language specific manner. Given the way defaults work, filters +should be prepared to ignore parameters that they didn't expect.

+ + diff --git a/docs/docs.css b/docs/docs.css new file mode 100644 index 0000000..575c234 --- /dev/null +++ b/docs/docs.css @@ -0,0 +1,104 @@ +body { + background-color: #fff; + color: #333; + font-family: 'Lucida Grande', Verdana, Geneva, Lucida, Helvetica, sans-serif; + font-size: small; + margin: 40px; + padding: 0; +} + +a:link, a:visited { + background-color: transparent; + color: #333; + text-decoration: none !important; + border-bottom: 1px dotted #333 !important; +} + +a:hover { + background-color: transparent; + color: #934; + text-decoration: none !important; + border-bottom: 1px dotted #993344 !important; +} + +pre, code { + background-color: #FFF; + color: #00F; + font-size: large +} + +h1 { + margin: 8px 0 10px 20px; + padding: 0; + font-variant: small-caps; + letter-spacing: 0.1em; + font-family: "Book Antiqua", Georgia, Palatino, Times, "Times New Roman", serif; +} + +h2 { + clear: both; +} + +ul, ul.outer > li { + margin: 14px 0 10px 0; +} + +.z { + float:left; + background: url(img/shadowAlpha.png) no-repeat bottom right !important; + margin: -15px 0 20px -15px !important; +} + +.z .logo { + color: magenta; +} + +.z p { + margin: 14px 0 10px 15px !important; +} + +.z .sectionInner { + width: 730px; + background: none !important; + padding: 0 !important; + } + +.z .sectionInner .sectionInner2 { + border: 1px solid #a9a9a9; + padding: 4px; + margin: -6px 6px 6px -6px !important; +} + +ins { + background-color: #FFF; + color: #F0F; + text-decoration: none; +} + +dl.compact { + margin-bottom: 1em; + margin-top: 1em; +} + +dl.code > dt { + font-family: monospace; + font-size: large; +} + +dl.compact > dt { + float: left; + margin-bottom: 0; + padding-right: 8px; + margin-top: 0; + list-style-type: none; +} + +dl.compact > dd { + margin-bottom: 0; + margin-top: 0; + margin-left: 10em; +} + +th, td { + font-size: small; +} diff --git a/docs/docs.js b/docs/docs.js new file mode 100644 index 0000000..efd6d3f --- /dev/null +++ b/docs/docs.js @@ -0,0 +1,54 @@ +window.onload=function() { + var vindex = document.URL.lastIndexOf('venus/'); + if (vindex<0) vindex = document.URL.lastIndexOf('planet/'); + var base = document.URL.substring(0,vindex+6); + + var body = document.getElementsByTagName('body')[0]; + var div = document.createElement('div'); + div.setAttribute('class','z'); + var h1 = document.createElement('h1'); + var span = document.createElement('span'); + span.appendChild(document.createTextNode('\u2640')); + span.setAttribute('class','logo'); + h1.appendChild(span); + h1.appendChild(document.createTextNode(' Planet Venus')); + + var inner2=document.createElement('div'); + inner2.setAttribute('class','sectionInner2'); + inner2.appendChild(h1); + + var p = document.createElement('p'); + p.appendChild(document.createTextNode("Planet Venus is an awesome \u2018river of news\u2019 feed reader. It downloads news feeds published by web sites and aggregates their content together into a single combined feed, latest news first.")); + inner2.appendChild(p); + + p = document.createElement('p'); + var a = document.createElement('a'); + a.setAttribute('href',base+'index.html'); + a.appendChild(document.createTextNode('Download')); + p.appendChild(a); + p.appendChild(document.createTextNode(" \u00b7 ")); + a = document.createElement('a'); + a.setAttribute('href',base+'docs/index.html'); + a.appendChild(document.createTextNode('Documentation')); + p.appendChild(a); + p.appendChild(document.createTextNode(" \u00b7 ")); + a = document.createElement('a'); + a.setAttribute('href',base+'tests/'); + a.appendChild(document.createTextNode('Unit tests')); + p.appendChild(a); + p.appendChild(document.createTextNode(" \u00b7 ")); + a = document.createElement('a'); + a.setAttribute('href','http://lists.planetplanet.org/mailman/listinfo/devel'); + a.appendChild(document.createTextNode('Mailing list')); + p.appendChild(a); + inner2.appendChild(p); + + var inner1=document.createElement('div'); + inner1.setAttribute('class','sectionInner'); + inner1.setAttribute('id','inner1'); + inner1.appendChild(inner2); + + div.appendChild(inner1); + + body.insertBefore(div, body.firstChild); +} diff --git a/docs/filters.html b/docs/filters.html new file mode 100644 index 0000000..2ec73e0 --- /dev/null +++ b/docs/filters.html @@ -0,0 +1,71 @@ + + + + + +Venus Filters + + +

Filters

+

Filters are simple Unix pipes. Input comes in stdin, +parameters come from the config file, and output goes to stdout. +Anything written to stderr is logged as an ERROR message. If no +stdout is produced, the entry is not written to the cache or +processed further.

+ +

Input to a filter is a aggressively +normalized entry. For +example, if a feed is RSS 1.0 with 10 items, the filter will be called ten +times, each with a single Atom 1.0 entry, with all textConstructs +expressed as XHTML, and everything encoded as UTF-8.

+ +

You will find a small set of example filters in the filters directory. The coral cdn filter will change links +to images in the entry itself. The filters in the stripAd subdirectory will strip specific +types of advertisements that you may find in feeds.

+ +

The excerpt filter adds metadata (in +the form of a planet:excerpt element) to the feed itself. You +can see examples of how parameters are passed to this program in either +excerpt-images or +opml-top100.ini. +Alternately parameters may be passed +URI style, for example: +excerpt-images2. +

+ +

The xpath sifter is a variation of +the above, including or excluding feeds based on the presence (or absence) of +data specified by xpath +expressions. Again, parameters can be passed as +config options or +URI style. +

+ +

Notes

+ +
    + +
  • The file extension of the filter is significant. .py invokes +python. .xslt involkes XSLT. .sed and +.tmpl (a.k.a. htmltmp) are also options. Other languages, like +perl or ruby or class/jar (java), aren't supported at the moment, but these +would be easy to add.
  • + +
  • Any filters listed in the [planet] section of your config.ini +will be invoked on all feeds. Filters listed in individual +[feed] sections will only be invoked on those feeds.
  • + +
  • Filters are simply invoked in the order they are listed in the +configuration file (think unix pipes). Planet wide filters are executed before +feed specific filters.
  • + +
  • Templates written using htmltmpl currently only have access to a fixed set +of fields, whereas XSLT templates have access to everything.
  • +
+ + diff --git a/docs/img/shadowAlpha.png b/docs/img/shadowAlpha.png new file mode 100644 index 0000000..a2561df Binary files /dev/null and b/docs/img/shadowAlpha.png differ diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..b19d0c8 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,51 @@ + + + + + +Venus Documentation + + +

Table of Contents

+ + + diff --git a/docs/installation.html b/docs/installation.html new file mode 100644 index 0000000..9994984 --- /dev/null +++ b/docs/installation.html @@ -0,0 +1,112 @@ + + + + + +Venus Installation + + +

Installation

+

Venus has been tested on Linux, and Mac OSX, and Windows.

+ +

You'll need at least Python 2.2 installed on your system, we recommend +Python 2.4 though as there may be bugs with the earlier libraries.

+ +

Everything Pythonesque Planet needs to provide basic operation should be +included in the distribution. Some optional features may require +additional libraries, for example:

+
    +
  • Usage of XSLT requires either +xsltproc +or python-libxslt.
  • +
  • The current interface to filters written in non-templating languages +(e.g., python) uses the +subprocess +module which was introduced in Python 2.4.
  • +
  • Usage of FOAF as a reading list requires +librdf.
  • +
+ +

General Instructions

+ +

+These instructions apply to any platform. Check the instructions +below for more specific instructions for your platform. +

+ +
    +
  1. If you are reading this online, you will need to +download and extract the files into a folder somewhere. +You can place this wherever you like, ~/planet +and ~/venus are good +choices, but so's anywhere else you prefer.

  2. +
  3. This is very important: from within that directory, type the following +command:

    +
    python runtests.py
    +

    This should take anywhere from a one to ten seconds to execute. No network +connection is required, and the script cleans up after itself. If the +script completes with an "OK", you are good to go. Otherwise stopping here +and inquiring on the +mailing list + is a good idea as it can save you lots of frustration down the road.

  4. +
  5. Make a copy of one of the ini the files in the +examples subdirectory, +and put it wherever you like; I like to use the Planet's name (so +~/planet/debian), but it's really up to you.

  6. +
  7. Edit the config.ini file in this directory to taste, +it's pretty well documented so you shouldn't have any problems here. Pay +particular attention to the output_dir option, which should be +readable by your web server. If the directory you specify in your +cache_dir exists; make sure that it is empty.

  8. +
  9. Run it: python planet.py pathto/config.ini

    +

    You'll want to add this to cron, make sure you run it from the +right directory.

  10. +
  11. (Optional)

    +

    Tell us about it! We'd love to link to you on planetplanet.org :-)

  12. +
  13. (Optional)

    +

    Build your own themes, templates, or filters! And share!

  14. +
+ +

Mac OS X and Fink Instructions

+ +

+The Fink Project packages +various open source software for MacOS. This makes it a little easier +to get started with projects like Planet Venus. +

+ +

+Note: in the following, we recommend explicitly +using python2.4. As of this writing, Fink is starting to +support python2.5 but the XML libraries, for example, are +not yet ported to the newer python so Venus will be less featureful. +

+ +
    +
  1. Install the XCode development tools from your Mac OS X install + disks

  2. +
  3. Download + and install Fink

  4. +
  5. Tell fink to install the Planet Venus prerequisites:
    + fink install python24 celementtree-py24 bzr-py24 libxslt-py24 + libxml2-py24

  6. +
  7. Download and extract the Venus files into a + folder somewhere

  8. +
  9. Run the tests: python2.4 runtests.py
    This + will warn you that the RDF library is missing, but that's + OK.

  10. +
  11. Continue with the general steps above, starting with Step 3. You + may want to explicitly specify python2.4.

  12. +
+ +

Ubuntu Linux (Edgy Eft) instructions

+ +

Before starting, issue the following command:

+
    +
  • sudo apt-get install bzr python2.4-librdf
  • +
+ + + diff --git a/docs/migration.html b/docs/migration.html new file mode 100644 index 0000000..545a7f6 --- /dev/null +++ b/docs/migration.html @@ -0,0 +1,42 @@ + + + + + +Venus Migration + + +

Migration from Planet 2.0

+

The intent is that existing Planet 2.0 users should be able to reuse +their existing config.ini and .tmpl files, +but the reality is that users will need to be aware of the following:

+
    +
  • You will need to start over with a new cache directory as the format +of the cache has changed dramatically.
  • +
  • Existing .tmpl and .ini files should work, +though some configuration options (e.g., +days_per_page) have not yet been implemented
  • +
  • No testing has been done on Python 2.1, and it is presumed not to work.
  • +
  • To take advantage of all features, you should install the optional +XML and RDF libraries described on +the Installation page.
  • +
+ +

+Common changes to config.ini include: +

+
    +
  • Filename changes:

    +
    +examples/fancy/index.html.tmpl => themes/classic_fancy/index.html.tmpl
    +examples/atom.xml.tmpl         => themes/common/atom.xml.xslt
    +examples/rss20.xml.tmpl        => themes/common/rss20.xml.tmpl
    +examples/rss10.xml.tmpl        => themes/common/rss10.xml.tmpl
    +examples/opml.xml.tmpl         => themes/common/opml.xml.xslt
    +examples/foafroll.xml.tmpl     => themes/common/foafroll.xml.xslt
    +
  • +
+ + diff --git a/docs/normalization.html b/docs/normalization.html new file mode 100644 index 0000000..de73812 --- /dev/null +++ b/docs/normalization.html @@ -0,0 +1,92 @@ + + + + + +Venus Normalization + + +

Normalization

+

Venus builds on, and extends, the Universal Feed Parser and BeautifulSoup to +convert all feeds into Atom 1.0, with well formed XHTML, and encoded as UTF-8, +meaning that you don't have to worry about funky feeds, tag soup, or character +encoding.

+

Encoding

+

Input data in feeds may be encoded in a variety of formats, most commonly +ASCII, ISO-8859-1, WIN-1252, AND UTF-8. Additionally, many feeds make use of +the wide range of +character entity +references provided by HTML. Each is converted to UTF-8, an encoding +which is a proper superset of ASCII, supports the entire range of Unicode +characters, and is one of +only two +encodings required to be supported by all conformant XML processors.

+

Encoding problems are one of the more common feed errors, and every +attempt is made to correct common errors, such as the inclusion of +the so-called +moronic versions +of smart-quotes. In rare cases where individual characters can not be +converted to valid UTF-8 or into +characters allowed in XML 1.0 +documents, such characters will be replaced with the Unicode +Replacement character, with a title that describes the original character whenever possible.

+

In order to support the widest range of inputs, use of Python 2.3 or later, +as well as the installation of the python iconvcodec, is +recommended.

+

HTML

+

A number of different normalizations of HTML are performed. For starters, +the HTML is +sanitized, +meaning that HTML tags and attributes that could introduce javascript or +other security risks are removed.

+

Then, +relative +links are resolved within the HTML. This is also done for links +in other areas in the feed too.

+

Finally, unmatched tags are closed. This is done with a +knowledge of the semantics of HTML. Additionally, a +large +subset of MathML, as well as a +tiny profile of SVG +is also supported.

+

Atom 1.0

+

The Universal Feed Parser also +normalizes the content of feeds. This involves a +large number of elements; the best place to start is to look at +annotated examples. Among other things a wide variety of +date formats +are converted into +RFC 3339 formatted dates.

+

If no ids are found in entries, attempts are made to synthesize one using (in order):

+ +

If no updated dates are found in an entry, or if the dates found +are in the future, the current time is substituted.

+

Overrides

+

All of the above describes what Venus does automatically, either directly +or through its dependencies. There are a number of errors which can not +be corrected automatically, and for these, there are configuration parameters +that can be used to help.

+
    +
  • ignore_in_feed allows you to list any number of elements +or attributes which are to be ignored in feeds. This is often handy in the +case of feeds where the id, updated or +xml:lang values can't be trusted.
  • +
  • title_type, summary_type, +content_type allow you to override the +type +attributes on these elements.
  • +
  • name_type does something similar for +author names
  • +
+ + diff --git a/docs/templates.html b/docs/templates.html new file mode 100644 index 0000000..8d34e1f --- /dev/null +++ b/docs/templates.html @@ -0,0 +1,129 @@ + + + + + +Venus Templates + + +

Templates

+

Template names take the form +name.ext.type, where +name.ext identifies the name of the output file +to be created in the output_directory, and type +indicates which language processor to use for the template.

+

Like with filters, templates may be written +in a variety of languages and are based on the standard Unix pipe convention +of producing stdout from stdin, but in practice +two languages are used more than others:

+

htmltmpl

+

Many find htmltmpl +easier to get started with as you can take a simple example of your +output file, sprinkle in a few <TMPL_VAR>s and +<TMPL_LOOP>s and you are done. Eventually, however, +you may find that your template involves <TMPL_IF> +blocks inside of attribute values, and you may find the result difficult +to read and create correctly.

+

It is also important to note that htmltmpl based templates do not +have access to the full set of information available in the feed, just +the following (rather substantial) subset:

+ +
+ + + + + + + + + + + + + + + + + + +
VARtypesource
authorStringauthor
author_nameStringauthor_detail.name
generatorStringgenerator
idStringid
iconStringicon
last_updated_822Rfc822updated_parsed
last_updated_isoRfc3399updated_parsed
last_updatedPlanetDateupdated_parsed
linkStringlink
logoStringlogo
rightsStringrights_detail.value
subtitleStringsubtitle_detail.value
titleStringtitle_detail.value
title_plainPlaintitle_detail.value
urlStringlinks[rel='self'].href
headers['location']
+
+ +

Note: when multiple sources are listed, the last one wins

+

In addition to these variables, Planet Venus makes available two +arrays, Channels and Items, with one entry +per subscription and per output entry respectively. The data values +within the Channels array exactly match the above list. +The data values within the Items array are as follows:

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
VARtypesource
authorStringauthor
author_emailStringauthor_detail.email
author_nameStringauthor_detail.name
author_uriStringauthor_detail.href
content_languageStringcontent[0].language
contentStringsummary_detail.value
content[0].value
datePlanetDatepublished_parsed
updated_parsed
date_822Rfc822published_parsed
updated_parsed
date_isoRfc3399published_parsed
updated_parsed
enclosure_hrefStringenclosures[0].href
enclosure_lengthStringenclosures[0].length
enclosure_typeStringenclosures[0].type
guid_isPermaLinkStringisPermaLink
idStringid
linkStringlinks[rel='alternate'].href
new_channelStringid
new_dateNewDatepublished_parsed
updated_parsed
rightsStringrights_detail.value
title_languageStringtitle_detail.language
title_plainPlaintitle_detail.value
titleStringtitle_detail.value
summary_languageStringsummary_detail.language
updatedPlanetDateupdated_parsed
updated_822Rfc822updated_parsed
updated_isoRfc3399updated_parsed
publishedPlanetDatepublished_parsed
published_822Rfc822published_parsed
published_isoRfc3399published_parsed
+
+

Note: variables above which start with +new_ are only set if their values differ from the previous +Item.

+ +

xslt

+

XSLT is a paradox: it actually +makes some simple things easier to do than htmltmpl, and certainly can +make more difficult things possible; but it is fair to say that many +find XSLT less approachable than htmltmpl.

+

But in any case, the XSLT support is easier to document as the +input is a highly normalized feed, +with a few extension elements.

+
    +
  • atom:feed will have the following child elements: +
      +
    • A planet:source element per subscription, with the same child elements as atom:source, as well as +an additional child element in the planet namespace for each +configuration parameter that applies to +this subscription.
    • +
    • planet:format indicating the format and version of the source feed.
    • +
    • planet:bozo which is either true or false.
    • +
    +
  • +
  • atom:updated and atom:published will have +a planet:format attribute containing the referenced date +formatted according to the [planet] date_format specified +in the configuration
  • +
+ + diff --git a/examples/filters/categories/categories.xslt b/examples/filters/categories/categories.xslt new file mode 100644 index 0000000..fa95464 --- /dev/null +++ b/examples/filters/categories/categories.xslt @@ -0,0 +1,82 @@ + + +]> + + + ,.;AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZzÀàÁáÂâÃãÄäÅ寿ÇçÈèÉéÊêËëÌìÍíÎîÏïÐðÑñÒòÓóÔôÕõÖöØøÙùÚúÛûÜüÝýÞþ + aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzzaaaaaaaaaaaaææcceeeeeeeeiiiiiiiiððnnooooooooooøøuuuuuuuuyyþþ + + wiki semantique + wikis semantiques + web semantique + websemantique + semantic web + semweb + rdf + owl + sparql + topic map + doap + foaf + sioc + ontology + ontologie + dublin core + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/filters/guess-language/README b/examples/filters/guess-language/README new file mode 100644 index 0000000..b1c1c2e --- /dev/null +++ b/examples/filters/guess-language/README @@ -0,0 +1,37 @@ +This filter is released under the same licence as Python +see http://www.intertwingly.net/code/venus/LICENCE. + +Author: Eric van der Vlist + +This filter guesses whether an Atom entry is written +in English or French. It should be trivial to chose between +two other languages, easy to extend to more than two languages +and useful to pass these languages as Venus configuration +parameters. + +The code used to guess the language is the one that has been +described by Douglas Bagnall as the Python recipe titled +"Language detection using character trigrams" +http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/326576. + +To add support for a new language, this language must first be +"learned" using learn-language.py. This learning phase is nothing +more than saving a pickled version of the Trigram object for this +language. + +To learn Finnish, you would execute: + +$ ./learn-language.py http://gutenberg.net/dirs/1/0/4/9/10492/10492-8.txt fi.data + +where http://gutenberg.net/dirs/1/0/4/9/10492/10492-8.txt is a text +representative of the Finnish language and "fi.data" is the name of the +data file for "fi" (ISO code for Finnish). + +To install this filter, copy this directory under the Venus +filter directory and declare it in your filters list, for instance: + +filters= categories.xslt guess-language/guess-language.py + +NOTE: this filter depends on Amara +(http://uche.ogbuji.net/tech/4suite/amara/) + diff --git a/examples/filters/guess-language/en.data b/examples/filters/guess-language/en.data new file mode 100644 index 0000000..a7c5ca6 --- /dev/null +++ b/examples/filters/guess-language/en.data @@ -0,0 +1,15131 @@ +(itrigram +Trigram +p1 +(dp2 +S'length' +p3 +F5471.4726536829185 +sS'lut' +p4 +(dp5 +V b +p6 +(dp7 +Va +I7 +sVe +I568 +sVi +I11 +sVl +I17 +sVo +I20 +sVr +I56 +sVu +I188 +sVy +I148 +ssV c +p8 +(dp9 +Va +I189 +sVe +I20 +sVd +I2 +sVi +I12 +sVh +I74 +sVl +I16 +sVo +I463 +sVr +I22 +sVu +I2 +ssVgu +p10 +(dp11 +Va +I9 +sVe +I5 +sVi +I9 +sVm +I1 +sVl +I2 +sVn +I3 +sVr +I1 +sVt +I1 +ssV a +p12 +(dp13 +V +I330 +sVc +I85 +sVb +I70 +sVd +I47 +sVg +I73 +sVf +I83 +sVi +I3 +sVm +I148 +sVl +I216 +sVn +I858 +sVp +I48 +sVs +I282 +sVr +I101 +sVu +I15 +sVt +I203 +sVw +I28 +sVv +I7 +ssV f +p14 +(dp15 +Va +I109 +sVe +I95 +sVi +I76 +sVl +I16 +sVo +I371 +sVr +I155 +sVu +I23 +sVt +I2 +ssV g +p16 +(dp17 +Va +I16 +sVe +I45 +sVi +I68 +sVl +I8 +sVo +I89 +sVr +I81 +sVu +I11 +ssV d +p18 +(dp19 +Va +I90 +sVe +I275 +sVi +I178 +sVo +I142 +sVr +I24 +sVu +I18 +sVw +I1 +ssV e +p20 +(dp21 +Va +I48 +sVc +I3 +sVd +I12 +sVf +I12 +sVi +I7 +sVm +I13 +sVl +I14 +sVn +I107 +sVq +I17 +sVp +I1 +sVs +I26 +sVr +I5 +sVt +I31 +sVv +I132 +sVy +I10 +sVx +I117 +ssV j +p22 +(dp23 +Ve +I11 +sVu +I41 +sVo +I11 +ssV k +p24 +(dp25 +Vi +I22 +sVe +I14 +sVn +I90 +ssV h +p26 +(dp27 +Va +I525 +sVe +I739 +sVi +I320 +sVo +I168 +sVu +I33 +sVy +I2 +ssV i +p28 +(dp29 +Vd +I17 +sVg +I3 +sVf +I62 +sVm +I87 +sVl +I14 +sVn +I599 +sVs +I287 +sVr +I3 +sVt +I254 +ssV n +p30 +(dp31 +Va +I19 +sVu +I5 +sVe +I98 +sVi +I10 +sVo +I438 +ssV o +p32 +(dp33 +Vc +I14 +sVb +I32 +sVd +I2 +sVf +I741 +sVl +I9 +sVn +I225 +sVp +I36 +sVs +I1 +sVr +I90 +sVu +I70 +sVt +I44 +sVw +I47 +sVv +I20 +ssV l +p34 +(dp35 +Va +I80 +sVe +I154 +sVi +I107 +sVo +I115 +sVs +I4 +sVu +I1 +ssV m +p36 +(dp37 +Va +I319 +sVe +I281 +sVg +I1 +sVi +I107 +sVo +I229 +sVu +I149 +sVy +I347 +ssV r +p38 +(dp39 +Vi +I18 +sVu +I12 +sVe +I378 +sVa +I20 +sVo +I25 +ssV s +p40 +(dp41 +Va +I111 +sVc +I31 +sVe +I206 +sVi +I105 +sVh +I339 +sVm +I7 +sVl +I7 +sVo +I297 +sVp +I70 +sVu +I197 +sVt +I85 +sVw +I6 +sVy +I5 +ssV p +p42 +(dp43 +Va +I102 +sVe +I104 +sVi +I7 +sVh +I2 +sVl +I63 +sVo +I84 +sVr +I205 +sVu +I22 +ssV q +p44 +(dp45 +Vu +I40 +ssV v +p46 +(dp47 +Va +I23 +sVi +I40 +sVe +I95 +sVo +I4 +ssV w +p48 +(dp49 +Va +I243 +sVe +I172 +sVi +I425 +sVh +I382 +sVo +I157 +sVr +I39 +ssV t +p50 +(dp51 +Va +I56 +sVe +I60 +sVi +I69 +sVh +I1425 +sVm +I1 +sVo +I997 +sVr +I66 +sVu +I4 +sVw +I21 +ssV u +p52 +(dp53 +Vg +I1 +sVi +I1 +sVn +I132 +sVp +I26 +sVs +I50 +sVr +I10 +sVt +I4 +ssV z +p54 +(dp55 +Vi +I1 +ssVgn +p56 +(dp57 +Va +I2 +sV +I7 +sVe +I3 +sVi +I6 +sV, +I2 +sVo +I4 +sVs +I1 +ssV x +p58 +(dp59 +V +I1 +ssV y +p60 +(dp61 +Vi +I2 +sVe +I38 +sVo +I469 +ssV-Y +p62 +(dp63 +Vo +I3 +ssVlk +p64 +(dp65 +Vi +I5 +sV +I2 +sVs +I3 +sVe +I3 +ssVgi +p66 +(dp67 +Vb +I1 +sVe +I4 +sVn +I111 +sVr +I29 +sVt +I5 +sVv +I45 +sVz +I2 +ssVgh +p68 +(dp69 +V +I61 +sVb +I1 +sVe +I3 +sVi +I2 +sV, +I7 +sVl +I11 +sVt +I170 +sV; +I2 +ssV B +p70 +(dp71 +Va +I5 +sVE +I1 +sVi +I1 +sVo +I2 +sVR +I2 +sVu +I12 +sVy +I6 +sVU +I2 +sVe +I6 +ssV C +p72 +(dp73 +Va +I15 +sVA +I8 +sVe +I1 +sVh +I58 +sVl +I2 +sVO +I31 +sV. +I6 +sVr +I2 +sVo +I33 +ssV-g +p74 +(dp75 +Vr +I1 +ssV A +p76 +(dp77 +V +I3 +sVr +I1 +sVB +I1 +sVd +I8 +sVg +I1 +sVf +I3 +sVS +I3 +sVm +I4 +sVl +I14 +sVN +I2 +sVs +I11 +sVR +I2 +sVu +I6 +sVT +I1 +sVw +I1 +sVn +I5 +sVL +I5 +sVt +I11 +ssV F +p78 +(dp79 +Va +I2 +sVo +I7 +sVi +I1 +sVl +I1 +sVO +I4 +sV. +I1 +sVI +I1 +sVr +I89 +sVT +I2 +sVR +I2 +ssV G +p80 +(dp81 +VE +I2 +sVi +I1 +sVo +I4 +sVI +I1 +sVu +I17 +sVU +I9 +sVe +I1 +ssV D +p82 +(dp83 +VA +I3 +sVe +I32 +sVi +I3 +sVO +I3 +sVI +I3 +sVu +I2 +sVo +I7 +sVE +I29 +ssV E +p84 +(dp85 +VB +I2 +sVD +I1 +sVv +I4 +sVl +I1 +sVn +I4 +sVd +I9 +sVT +I6 +sVX +I1 +sVV +I2 +sVx +I2 +sVN +I1 +sVt +I9 +ssV J +p86 +(dp87 +Va +I60 +sVu +I1 +sVo +I18 +sVO +I17 +ssVtw +p88 +(dp89 +Vi +I1 +sVa +I2 +sVe +I18 +sVo +I17 +ssVtt +p90 +(dp91 +Va +I28 +sVe +I129 +sVi +I11 +sVl +I36 +sVr +I6 +sVy +I4 +ssV I +p92 +(dp93 +V +I766 +sVF +I3 +sVI +I2 +sVs +I2 +sVf +I25 +sVM +I1 +sVL +I1 +sVN +I7 +sVS +I1 +sVt +I27 +sVV +I1 +sVX +I1 +sV; +I1 +sVn +I12 +sV, +I5 +sVT +I1 +ssVtr +p94 +(dp95 +Va +I39 +sVe +I58 +sVi +I31 +sVo +I23 +sVu +I33 +sVy +I18 +ssVts +p96 +(dp97 +V +I63 +sV" +I1 +sVe +I4 +sV* +I1 +sV, +I20 +sV. +I10 +sV; +I3 +ssV L +p98 +(dp99 +Va +I96 +sVA +I35 +sVE +I1 +sVI +I5 +sVo +I22 +sVi +I1 +sVe +I6 +ssV M +p100 +(dp101 +Va +I62 +sVA +I2 +sVC +I1 +sVe +I1 +sVG +I1 +sVi +I32 +sVO +I1 +sV. +I2 +sVy +I35 +sVR +I40 +sVu +I2 +sVo +I12 +sVY +I1 +sVE +I4 +sVr +I96 +sVU +I1 +sVI +I1 +ssV R +p102 +(dp103 +VE +I5 +sVe +I81 +sVo +I1 +sV. +I4 +ssV S +p104 +(dp105 +VO +I1 +sVA +I4 +sVE +I1 +sV +I1 +sVi +I64 +sVh +I42 +sVM +I2 +sVm +I6 +sVo +I5 +sV. +I20 +sVp +I1 +sVu +I90 +sVt +I24 +sVH +I3 +sVI +I2 +sVU +I24 +sVe +I10 +sVT +I1 +ssV P +p106 +(dp107 +Va +I7 +sVA +I1 +sVe +I1 +sVl +I3 +sVO +I1 +sV. +I1 +sVR +I9 +sVU +I4 +sVo +I7 +sVr +I29 +ssVtm +p108 +(dp109 +Va +I2 +sV +I4 +sV" +I1 +sVe +I12 +sVo +I3 +ssV V +p110 +(dp111 +Va +I1 +sV +I1 +sVe +I66 +sVI +I3 +sVo +I1 +sV. +I4 +sVE +I50 +ssV W +p112 +(dp113 +VA +I4 +sVe +I27 +sVi +I11 +sVh +I33 +sVo +I1 +sVH +I1 +ssVth +p114 +(dp115 +Va +I378 +sV +I240 +sVe +I1023 +sV' +I4 +sVf +I4 +sVi +I255 +sVh +I1 +sVl +I3 +sVo +I105 +sV. +I9 +sVs +I10 +sVr +I15 +sV! +I1 +sVy +I5 +sVu +I1 +sV; +I2 +sV: +I1 +sV, +I10 +ssVti +p116 +(dp117 +Va +I6 +sVc +I42 +sVb +I4 +sVe +I29 +sVf +I21 +sVm +I71 +sVl +I41 +sVo +I338 +sVn +I114 +sVs +I18 +sVr +I16 +sVt +I9 +sVv +I27 +ssVtf +p118 +(dp119 +Vu +I18 +ssV [ +p120 +(dp121 +VE +I1 +sVD +I1 +sVg +I1 +sV* +I3 +sVM +I1 +sV1 +I4 +sV3 +I2 +sV2 +I3 +sVt +I3 +sVx +I1 +ssVG- +p122 +(dp123 +V +I1 +sVt +I4 +sVT +I1 +ssVte +p124 +(dp125 +Va +I11 +sV +I126 +sVc +I5 +sVe +I11 +sVd +I149 +sVg +I2 +sVf +I5 +sVm +I28 +sVl +I69 +sVp +I1 +sVn +I150 +sV. +I8 +sVs +I24 +sVr +I287 +sVv +I8 +sVx +I46 +sV; +I1 +sV: +I1 +sV, +I13 +sV? +I1 +ssV-y +p126 +(dp127 +Vo +I2 +ssVtc +p128 +(dp129 +Vh +I29 +sV. +I1 +ssVta +p130 +(dp131 +Vc +I31 +sVb +I19 +sVg +I12 +sVf +I3 +sVi +I30 +sVk +I50 +sVl +I27 +sVn +I61 +sVs +I1 +sVr +I3 +sVu +I2 +sVt +I57 +sVy +I9 +sVx +I3 +sV, +I1 +ssV " +p132 +(dp133 +VA +I3 +sVC +I2 +sVB +I2 +sVD +I2 +sVG +I1 +sVF +I3 +sVI +I22 +sVH +I3 +sVM +I3 +sVO +I2 +sVN +I4 +sVP +I6 +sVS +I6 +sVR +I1 +sVW +I2 +sVY +I2 +sVa +I1 +sVb +I4 +sVd +I1 +sVi +I2 +sVh +I2 +sVo +I2 +sVp +I1 +sVs +I1 +sVr +I1 +sVt +I2 +sVw +I2 +sVy +I2 +ssV # +p134 +(dp135 +V9 +I1 +sV6 +I1 +ssS' ' +p136 +(dp137 +V +I606 +sV# +I1 +sV" +I9 +sV& +I1 +sV( +I4 +sV* +I12 +sV- +I3 +sV2 +I2 +sVA +I19 +sVC +I47 +sVB +I4 +sVE +I8 +sVD +I8 +sVG +I2 +sVF +I17 +sVI +I68 +sVH +I6 +sVJ +I7 +sVM +I56 +sVL +I34 +sVO +I3 +sVN +I2 +sVP +I12 +sVS +I37 +sVR +I15 +sVU +I9 +sVT +I26 +sVW +I20 +sVV +I18 +sVY +I33 +sVX +I32 +sV[ +I12 +sVa +I172 +sVc +I92 +sVb +I78 +sVe +I62 +sVd +I78 +sVg +I25 +sVf +I67 +sVi +I107 +sVh +I118 +sVk +I7 +sVj +I8 +sVm +I103 +sVl +I35 +sVo +I81 +sVn +I40 +sVq +I4 +sVp +I65 +sVs +I128 +sVr +I49 +sVu +I25 +sVt +I140 +sVw +I108 +sVv +I11 +sVy +I34 +ssV & +p138 +(dp139 +Vc +I20 +ssV $ +p140 +(dp141 +V2 +I1 +ssV * +p142 +(dp143 +VB +I1 +sVE +I2 +sV* +I8 +sVn +I1 +sVT +I1 +sVW +I1 +sVe +I1 +ssV: +p144 +(dp145 +Va +I4 +sV +I4 +sVb +I3 +sVF +I1 +sVi +I3 +sVh +I2 +sVM +I3 +sVl +I1 +sVo +I1 +sVm +I2 +sVI +I3 +sVS +I1 +sV" +I3 +sVt +I3 +sVw +I1 +sVy +I1 +sVs +I1 +ssV ( +p146 +(dp147 +Va +I7 +sVC +I1 +sVI +I2 +sVh +I1 +sV* +I1 +sVo +I5 +sVi +I2 +sVs +I1 +sVT +I1 +sV~ +I1 +sV_ +I1 +sVt +I1 +ssV . +p148 +(dp149 +V +I2 +sVs +I1 +sVt +I1 +ssV / +p150 +(dp151 +V +I1 +sVe +I1 +ssV - +p152 +(dp153 +Va +I1 +sV- +I2 +ssV 2 +p154 +(dp155 +V8 +I1 +sV7 +I1 +sV0 +I5 +ssV 3 +p156 +(dp157 +V1 +I1 +sV0 +I1 +ssVGE +p158 +(dp159 +VS +I3 +sVT +I3 +sVN +I1 +ssV 1 +p160 +(dp161 +V9 +I3 +sV0 +I4 +ssV 6 +p162 +(dp163 +V1 +I1 +sV0 +I1 +ssVWI +p164 +(dp165 +VS +I1 +ssV 4 +p166 +(dp167 +V0 +I1 +ssVg +p168 +(dp169 +V( +I1 +sVA +I2 +sVC +I2 +sVE +I4 +sVD +I1 +sVF +I1 +sVI +I1 +sVH +I1 +sVM +I5 +sVL +I5 +sVP +I1 +sVS +I2 +sVR +I3 +sVV +I1 +sVa +I60 +sVc +I12 +sVb +I25 +sVe +I14 +sVd +I10 +sVg +I4 +sVf +I16 +sVi +I48 +sVh +I50 +sVm +I57 +sVl +I11 +sVo +I35 +sVn +I7 +sVq +I1 +sVp +I9 +sVs +I26 +sVr +I4 +sVu +I6 +sVt +I113 +sVw +I33 +sVv +I5 +sVy +I8 +ssVg/ +p170 +(dp171 +VC +I1 +ssVg. +p172 +(dp173 +V +I22 +ssV 8 +p174 +(dp175 +V0 +I2 +ssVGL +p176 +(dp177 +VI +I1 +ssV < +p178 +(dp179 +Vh +I1 +ssV = +p180 +(dp181 +V +I1 +ssVAS +p182 +(dp183 +V +I1 +sVC +I2 +sV- +I1 +ssVgg +p184 +(dp185 +Ve +I8 +sVl +I1 +ssVGu +p186 +(dp187 +Ve +I2 +sVt +I15 +ssVt: +p188 +(dp189 +V +I2 +ssVt; +p190 +(dp191 +V +I32 +ssVt9 +p192 +(dp193 +V0 +I1 +sV6 +I1 +ssV-- +p194 +(dp195 +V +I2 +sV" +I1 +sV- +I3 +sVF +I1 +sVI +I14 +sVM +I2 +sVS +I1 +sVU +I1 +sVT +I2 +sVY +I3 +sVa +I2 +sVb +I2 +sVe +I1 +sVd +I1 +sVg +I1 +sVf +I1 +sVi +I2 +sVh +I2 +sVm +I1 +sVn +I1 +sVp +I1 +sVs +I4 +sVt +I5 +sVw +I1 +sVv +I1 +sVy +I2 +ssVCl +p196 +(dp197 +Va +I2 +ssVge +p198 +(dp199 +V! +I1 +sV +I49 +sVd +I32 +sVf +I1 +sV) +I1 +sVm +I8 +sV, +I7 +sVo +I1 +sVn +I37 +sVs +I7 +sVr +I35 +sVt +I44 +sV; +I5 +sV. +I8 +ssVt. +p200 +(dp201 +V +I99 +sV" +I2 +ssVt/ +p202 +(dp203 +Va +I1 +sVe +I1 +ssVt, +p204 +(dp205 +V +I187 +sV" +I5 +ssV-I +p206 +(dp207 +V +I14 +sVS +I1 +ssVt* +p208 +(dp209 +V +I1 +ssVVO +p210 +(dp211 +VU +I1 +ssVt) +p212 +(dp213 +V +I2 +sV, +I1 +ssVGo +p214 +(dp215 +Va +I1 +sVd +I2 +sVo +I2 +ssVt' +p216 +(dp217 +Vs +I3 +ssVt" +p218 +(dp219 +V) +I1 +ssVt +p220 +(dp221 +V# +I1 +sV( +I3 +sV1 +I2 +sV< +I1 +sVA +I1 +sVC +I10 +sVB +I1 +sVE +I1 +sVD +I1 +sVG +I15 +sVF +I18 +sVI +I114 +sVH +I3 +sVM +I18 +sVL +I10 +sVO +I1 +sVP +I2 +sVS +I10 +sVR +I10 +sVT +I3 +sVW +I1 +sVY +I1 +sV[ +I1 +sVa +I170 +sVc +I46 +sVb +I98 +sVe +I35 +sVd +I44 +sVg +I21 +sVf +I69 +sVi +I167 +sVh +I180 +sVk +I18 +sVj +I3 +sVm +I104 +sVl +I50 +sVo +I179 +sVn +I42 +sVq +I6 +sVp +I50 +sVs +I123 +sVr +I35 +sVu +I17 +sVt +I253 +sVw +I153 +sVv +I10 +sVy +I60 +ssVt! +p222 +(dp223 +V +I6 +sV" +I7 +ssVEM +p224 +(dp225 +VE +I1 +sVN +I1 +ssVzi +p226 +(dp227 +Vp +I2 +sVn +I3 +ssV3] +p228 +(dp229 +V +I2 +ssVze +p230 +(dp231 +V +I5 +sVs +I1 +sVm +I1 +sVd +I6 +sV. +I1 +ssVM. +p232 +(dp233 +V +I3 +ssVza +p234 +(dp235 +V +I2 +sVr +I1 +ssVgo +p236 +(dp237 +V +I12 +sV: +I1 +sVe +I1 +sVi +I18 +sV, +I4 +sVo +I30 +sVn +I12 +sVu +I8 +sVt +I9 +sVv +I5 +sV. +I3 +ssVaw +p238 +(dp239 +Va +I25 +sV +I11 +sVe +I1 +sV' +I4 +sVi +I4 +sVk +I2 +sV, +I2 +sV. +I1 +sVs +I2 +sVy +I1 +sVn +I5 +ssVEN +p240 +(dp241 +V +I2 +sVC +I1 +sVB +I7 +sVE +I1 +sVD +I4 +sVT +I3 +ssVlw +p242 +(dp243 +Va +I27 +ssVEI +p244 +(dp245 +VT +I1 +ssVyw +p246 +(dp247 +Vh +I2 +ssVgm +p248 +(dp249 +Ve +I8 +sVo +I3 +ssVF +p250 +(dp251 +VA +I1 +sVD +I1 +sVM +I1 +sVS +I1 +sVT +I1 +sVW +I1 +sVY +I3 +ssVgl +p252 +(dp253 +Va +I9 +sVy +I6 +sVe +I7 +sVi +I2 +sVo +I2 +ssVbh +p254 +(dp255 +Vo +I3 +ssVmt +p256 +(dp257 +Vh +I4 +ssVmf +p258 +(dp259 +Vo +I11 +ssV@l +p260 +(dp261 +Vo +I1 +ssV@p +p262 +(dp263 +Vo +I1 +ssVt@ +p264 +(dp265 +Vp +I1 +ssVg, +p266 +(dp267 +V +I40 +ssVrd +p268 +(dp269 +Va +I4 +sV +I51 +sVe +I13 +sVi +I13 +sV, +I5 +sVo +I1 +sV. +I5 +sV) +I1 +sVs +I19 +sVn +I1 +sV! +I3 +sV; +I4 +sV: +I2 +sVl +I7 +ssVe' +p270 +(dp271 +Vs +I8 +ssVMe +p272 +(dp273 +Vl +I4 +ssV-e +p274 +(dp275 +Vn +I1 +ssVMa +p276 +(dp277 +Vi +I46 +sVc +I1 +sVr +I15 +sVm +I2 +ssVms +p278 +(dp279 +V +I18 +sV, +I1 +sVe +I13 +sVt +I9 +sVp +I1 +ssV-d +p280 +(dp281 +Vi +I1 +sVa +I3 +sVo +I1 +ssVe! +p282 +(dp283 +V +I16 +sV" +I2 +ssVMo +p284 +(dp285 +Vt +I10 +sVn +I2 +ssVMi +p286 +(dp287 +Vs +I29 +sVc +I2 +sVd +I1 +ssVSp +p288 +(dp289 +Ve +I1 +ssVMu +p290 +(dp291 +Vc +I2 +ssV-f +p292 +(dp293 +Va +I1 +sVi +I1 +sVo +I1 +ssVbj +p294 +(dp295 +Vu +I1 +sVe +I21 +ssVMr +p296 +(dp297 +Vs +I31 +sV. +I67 +ssV-a +p298 +(dp299 +V +I1 +sVn +I2 +ssVEB +p300 +(dp301 +VC +I2 +ssVMy +p302 +(dp303 +V +I37 +ssVO +p304 +(dp305 +Vw +I1 +sVI +I1 +sVH +I1 +sVM +I21 +sVL +I16 +sVO +I1 +sVS +I2 +sVR +I2 +sVT +I3 +sVW +I1 +sVY +I2 +ssVME +p306 +(dp307 +V +I5 +sVR +I2 +sVD +I2 +sV, +I1 +ssVMG +p308 +(dp309 +VE +I1 +ssVMA +p310 +(dp311 +VI +I3 +sVY +I1 +sVL +I2 +sVG +I3 +sVD +I1 +ssVtx +p312 +(dp313 +Vt +I3 +ssVMC +p314 +(dp315 +VI +I1 +ssVMB +p316 +(dp317 +VE +I1 +ssV31 +p318 +(dp319 +V, +I1 +ssVty +p320 +(dp321 +V +I101 +sV" +I2 +sVi +I1 +sV) +I1 +sV- +I2 +sV, +I21 +sVl +I2 +sVp +I1 +sV; +I5 +sV. +I7 +ssVMI +p322 +(dp323 +VS +I1 +sVT +I3 +ssVMU +p324 +(dp325 +V +I1 +sVS +I1 +sV" +I1 +ssV3* +p326 +(dp327 +VE +I1 +ssV; +p328 +(dp329 +Va +I90 +sVo +I3 +sVb +I62 +sVe +I1 +sVD +I1 +sVf +I12 +sVI +I27 +sVh +I21 +sVm +I2 +sVL +I1 +sVO +I1 +sVn +I9 +sVi +I9 +sVs +I8 +sV" +I7 +sVt +I9 +sVw +I9 +sVy +I11 +sVR +I1 +sVd +I1 +ssVMP +p330 +(dp331 +VL +I1 +ssV K +p332 +(dp333 +VI +I1 +sVi +I1 +sVe +I3 +sVn +I1 +ssVf; +p334 +(dp335 +V +I7 +ssVp- +p336 +(dp337 +V- +I1 +ssVMY +p338 +(dp339 +V +I1 +ssV H +p340 +(dp341 +Va +I7 +sVA +I3 +sVe +I64 +sVi +I7 +sVo +I10 +sVI +I7 +sVu +I4 +sVE +I4 +ssV"d +p342 +(dp343 +Vo +I1 +ssVFR +p344 +(dp345 +VO +I2 +ssVtu +p346 +(dp347 +Va +I25 +sVb +I1 +sVd +I5 +sVi +I1 +sVl +I8 +sVo +I1 +sVn +I20 +sVp +I3 +sVr +I64 +sVt +I3 +ssVFT +p348 +(dp349 +VP +I2 +ssVix +p350 +(dp351 +Vi +I2 +sV +I4 +sVe +I10 +sVt +I4 +ssV N +p352 +(dp353 +Va +I1 +sVE +I2 +sVo +I9 +sVU +I1 +sVO +I7 +sVe +I2 +ssVg? +p354 +(dp355 +V +I1 +sV" +I2 +ssV' +p356 +(dp357 +Vp +I1 +ssV O +p358 +(dp359 +V +I1 +sVC +I1 +sVF +I6 +sVh +I1 +sVf +I1 +sVN +I1 +sVR +I10 +sVu +I4 +sVT +I2 +sVn +I5 +sV. +I1 +ssVS* +p360 +(dp361 +V* +I1 +sVV +I1 +ssVtp +p362 +(dp363 +V +I2 +ssVS- +p364 +(dp365 +VI +I1 +ssVS, +p366 +(dp367 +V +I1 +ssVS" +p368 +(dp369 +V. +I1 +ssVS +p370 +(dp371 +Vc +I1 +sVb +I1 +sVe +I1 +sVd +I1 +sVF +I2 +sVf +I1 +sVv +I1 +sVO +I4 +sVS +I1 +sVo +I1 +sVV +I2 +sVE +I2 +ssV't +p372 +(dp373 +V +I1 +ssVFO +p374 +(dp375 +VR +I6 +ssVtn +p376 +(dp377 +Vi +I4 +sVe +I6 +ssVFr +p378 +(dp379 +Vi +I4 +sVe +I87 +sVo +I2 +ssV"N +p380 +(dp381 +Vo +I4 +ssVm! +p382 +(dp383 +V +I2 +ssVm +p384 +(dp385 +V( +I3 +sVC +I3 +sVI +I12 +sVM +I6 +sVL +I4 +sVS +I1 +sVW +I1 +sVa +I57 +sVc +I6 +sVb +I9 +sVe +I15 +sVd +I6 +sVg +I14 +sVf +I19 +sVi +I17 +sVh +I26 +sVk +I2 +sVm +I14 +sVl +I3 +sVo +I15 +sVn +I14 +sVp +I8 +sVs +I43 +sVr +I7 +sVu +I3 +sVt +I53 +sVw +I14 +sVv +I5 +sVy +I10 +ssVto +p386 +(dp387 +V +I900 +sVg +I12 +sVf +I2 +sVm +I2 +sV- +I5 +sVl +I18 +sVo +I54 +sV. +I1 +sVp +I2 +sVr +I31 +sVu +I1 +sVt +I6 +sVw +I35 +sVn +I18 +sV; +I1 +sV: +I1 +sV, +I1 +sV? +I1 +ssVm- +p388 +(dp389 +V +I1 +sV- +I2 +ssVm, +p390 +(dp391 +V +I52 +ssVO. +p392 +(dp393 +V +I1 +ssVm. +p394 +(dp395 +V +I28 +sV" +I1 +ssVm) +p396 +(dp397 +V. +I1 +ssVtl +p398 +(dp399 +Vy +I53 +sVe +I53 +ssVFa +p400 +(dp401 +Vc +I1 +sVr +I1 +ssVd! +p402 +(dp403 +V +I7 +sV" +I2 +ssV-v +p404 +(dp405 +Ve +I1 +ssVvi +p406 +(dp407 +Vc +I15 +sVe +I9 +sVd +I7 +sVg +I1 +sVl +I8 +sVo +I25 +sVn +I71 +sVs +I26 +sVr +I1 +sVt +I14 +sVv +I2 +ssVFi +p408 +(dp409 +Vl +I1 +ssVu? +p410 +(dp411 +V +I1 +ssVm> +p412 +(dp413 +V +I1 +ssVFl +p414 +(dp415 +Ve +I1 +ssVm; +p416 +(dp417 +V +I6 +ssVFo +p418 +(dp419 +Vr +I7 +ssVoq +p420 +(dp421 +Vu +I6 +ssVir +p422 +(dp423 +Va +I9 +sV +I81 +sVc +I11 +sVe +I64 +sVi +I15 +sVm +I8 +sVl +I29 +sVo +I2 +sV, +I6 +sVs +I31 +sVr +I3 +sVu +I1 +sVt +I11 +sVy +I2 +sV; +I1 +sV. +I1 +ssV T +p424 +(dp425 +Ve +I2 +sVi +I1 +sVh +I69 +sVo +I12 +sVr +I1 +sVu +I2 +sVO +I49 +sVH +I11 +ssV9. +p426 +(dp427 +V9 +I1 +ssViu +p428 +(dp429 +Vc +I1 +sVm +I8 +sVs +I1 +ssV U +p430 +(dp431 +Vp +I9 +sVS +I1 +sVN +I2 +sVn +I8 +ssVSu +p432 +(dp433 +Vs +I79 +sVr +I1 +sVm +I8 +sVc +I2 +ssVSt +p434 +(dp435 +Va +I6 +sVr +I18 +ssV99 +p436 +(dp437 +V7 +I1 +sV6 +I1 +ssVSi +p438 +(dp439 +Vs +I1 +sVr +I59 +sVl +I2 +sVn +I3 +ssVSh +p440 +(dp441 +Ve +I42 +ssVSo +p442 +(dp443 +Vm +I3 +sV, +I1 +sVl +I1 +ssVSm +p444 +(dp445 +Va +I5 +sVi +I6 +ssVG. +p446 +(dp447 +V; +I1 +ssV90 +p448 +(dp449 +V +I2 +ssV93 +p450 +(dp451 +V* +I1 +ssVvo +p452 +(dp453 +Vc +I3 +sVi +I7 +sVk +I7 +sVl +I3 +sVu +I23 +sVt +I4 +sVw +I2 +ssV94 +p454 +(dp455 +V6 +I1 +ssV97 +p456 +(dp457 +V1 +I1 +sV +I1 +ssV96 +p458 +(dp459 +V +I2 +ssVme +p460 +(dp461 +Va +I34 +sV +I265 +sVe +I9 +sVd +I39 +sVf +I1 +sV- +I2 +sVm +I12 +sV, +I52 +sVo +I1 +sVn +I143 +sVs +I75 +sVr +I26 +sV! +I4 +sVt +I30 +sVw +I3 +sV; +I11 +sV. +I37 +sV? +I3 +sVl +I5 +ssV-r +p462 +(dp463 +Vo +I7 +ssVmg +p464 +(dp465 +Ve +I1 +ssV Y +p466 +(dp467 +Ve +I3 +sVO +I8 +sVo +I56 +ssVma +p468 +(dp469 +V +I3 +sVc +I7 +sVz +I1 +sVd +I28 +sVg +I13 +sVi +I23 +sVk +I53 +sV' +I1 +sVm +I4 +sVl +I14 +sVn +I115 +sVs +I6 +sVr +I52 +sVt +I48 +sVy +I75 +sV. +I1 +sV, +I1 +ssVmb +p470 +(dp471 +Vi +I1 +sVa +I3 +sVr +I1 +sVe +I14 +sVl +I7 +ssVmm +p472 +(dp473 +Va +I12 +sVu +I3 +sVe +I34 +sVi +I4 +sVo +I12 +ssVml +p474 +(dp475 +Vy +I6 +sVe +I1 +ssVmo +p476 +(dp477 +Vd +I4 +sVm +I15 +sVo +I1 +sVn +I45 +sVs +I50 +sVr +I91 +sVu +I13 +sVt +I69 +sVv +I13 +ssVmn +p478 +(dp479 +Vi +I3 +sV +I2 +sVs +I1 +sVe +I1 +ssVmi +p480 +(dp481 +Va +I7 +sVe +I1 +sVd +I5 +sVg +I31 +sVl +I40 +sVn +I72 +sVs +I49 +sVr +I10 +sVt +I24 +sVx +I5 +ssVvr +p482 +(dp483 +Ve +I1 +ssVSU +p484 +(dp485 +VC +I1 +sVS +I23 +ssVST +p486 +(dp487 +VA +I2 +sV +I1 +sVR +I2 +sVE +I1 +ssVmu +p488 +(dp489 +Vc +I54 +sVs +I100 +sVl +I2 +sVn +I3 +ssVRW +p490 +(dp491 +VI +I1 +ssVSI +p492 +(dp493 +VR +I2 +sVB +I1 +sVO +I2 +ssVSH +p494 +(dp495 +VE +I3 +ssVSO +p496 +(dp497 +VN +I18 +ssVmp +p498 +(dp499 +Va +I28 +sVe +I16 +sVh +I3 +sVl +I31 +sVo +I23 +sVr +I18 +sVu +I13 +sVt +I17 +ssVSM +p500 +(dp501 +VA +I2 +ssVUT +p502 +(dp503 +VI +I1 +sV +I5 +sV* +I1 +sVE +I7 +ssVSC +p504 +(dp505 +VI +I2 +sVL +I1 +ssV"p +p506 +(dp507 +Vu +I1 +ssVSA +p508 +(dp509 +VM +I4 +sVN +I23 +ssVmy +p510 +(dp511 +V +I292 +sVs +I56 +sV; +I1 +ssV.9 +p512 +(dp513 +V3 +I1 +ssVSE +p514 +(dp515 +VQ +I1 +sV +I2 +sVN +I2 +sV. +I1 +ssVLe +p516 +(dp517 +Va +I1 +sVt +I5 +ssV"r +p518 +(dp519 +Ve +I1 +ssVYO +p520 +(dp521 +VU +I8 +ssVLa +p522 +(dp523 +Vk +I1 +sVd +I76 +sVn +I19 +ssVLo +p524 +(dp525 +Vn +I22 +ssVf: +p526 +(dp527 +V +I1 +ssV"s +p528 +(dp529 +Vm +I1 +ssVGU +p530 +(dp531 +VT +I10 +ssVRP +p532 +(dp533 +VO +I1 +ssVf +p534 +(dp535 +V2 +I1 +sV8 +I1 +sVD +I1 +sVF +I15 +sVI +I14 +sVH +I1 +sVM +I17 +sVL +I12 +sVP +I1 +sVS +I5 +sVR +I6 +sVT +I1 +sVV +I1 +sVa +I75 +sVc +I28 +sVb +I11 +sVe +I14 +sVd +I9 +sVg +I10 +sVf +I16 +sVi +I49 +sVh +I134 +sVk +I1 +sVj +I1 +sVm +I70 +sVl +I16 +sVo +I18 +sVn +I9 +sVq +I3 +sVp +I15 +sVs +I45 +sVr +I17 +sVu +I5 +sVt +I119 +sVw +I22 +sVv +I6 +sVy +I55 +ssVf! +p536 +(dp537 +V +I1 +ssVdm +p538 +(dp539 +Vi +I14 +ssVUS +p540 +(dp541 +VA +I23 +sVI +I1 +sVE +I1 +sVT +I1 +ssV 9 +p542 +(dp543 +V0 +I1 +ssVf, +p544 +(dp545 +V +I22 +ssVf- +p546 +(dp547 +Vc +I1 +sVw +I1 +ssVf. +p548 +(dp549 +V +I11 +ssVs; +p550 +(dp551 +V +I34 +ssVs: +p552 +(dp553 +V +I6 +ssVLD +p554 +(dp555 +V +I3 +ssVLE +p556 +(dp557 +VT +I1 +ssV," +p558 +(dp559 +V +I22 +ssVe" +p560 +(dp561 +V +I1 +ssV, +p562 +(dp563 +V" +I19 +sV& +I19 +sV1 +I1 +sV2 +I2 +sVA +I2 +sVC +I4 +sVB +I1 +sVE +I3 +sVD +I2 +sVF +I4 +sVI +I121 +sVH +I1 +sVM +I3 +sVL +I2 +sVO +I2 +sVP +I1 +sVS +I3 +sVR +I3 +sVT +I1 +sV[ +I1 +sVa +I430 +sVc +I26 +sVb +I111 +sVe +I16 +sVd +I15 +sVg +I4 +sVf +I56 +sVi +I96 +sVh +I73 +sVk +I3 +sVj +I2 +sVm +I59 +sVl +I12 +sVo +I53 +sVn +I18 +sVq +I1 +sVp +I11 +sVs +I46 +sVr +I3 +sVu +I2 +sVt +I180 +sVw +I142 +sVv +I3 +sVy +I28 +ssVLA +p564 +(dp565 +VI +I1 +sVR +I1 +sVD +I35 +ssVLL +p566 +(dp567 +V +I2 +ssV,- +p568 +(dp569 +V- +I19 +ssVYe +p570 +(dp571 +Vt +I3 +ssVLI +p572 +(dp573 +VA +I1 +sV +I1 +sVC +I7 +sVE +I1 +sVG +I1 +sVM +I3 +sVS +I1 +sVT +I3 +ssVs* +p574 +(dp575 +V +I1 +sV* +I1 +ssVs) +p576 +(dp577 +V +I1 +sV; +I1 +ssVLU +p578 +(dp579 +VS +I1 +sVD +I2 +ssVs. +p580 +(dp581 +V +I119 +sV" +I3 +ssV,0 +p582 +(dp583 +V0 +I3 +ssVs, +p584 +(dp585 +V +I191 +sV" +I1 +ssVs" +p586 +(dp587 +V. +I1 +ssVs! +p588 +(dp589 +V! +I1 +sV +I10 +ssVs +p590 +(dp591 +V" +I5 +sV( +I1 +sV* +I1 +sVC +I2 +sVD +I1 +sVF +I5 +sVI +I40 +sVM +I21 +sVL +I8 +sVP +I3 +sVS +I12 +sVR +I4 +sVV +I7 +sV[ +I1 +sVa +I235 +sVc +I71 +sVb +I62 +sVe +I62 +sVd +I53 +sVg +I31 +sVf +I62 +sVi +I126 +sVh +I96 +sVk +I3 +sVj +I15 +sVm +I111 +sVl +I32 +sVo +I127 +sVn +I85 +sVq +I6 +sVp +I53 +sVs +I129 +sVr +I36 +sVu +I17 +sVt +I181 +sVw +I87 +sVv +I24 +sVy +I28 +ssVs' +p592 +(dp593 +V +I1 +sVs +I6 +ssVr! +p594 +(dp595 +V +I6 +ssVfr +p596 +(dp597 +Vi +I36 +sVa +I11 +sVe +I11 +sVo +I110 +ssVo? +p598 +(dp599 +V +I1 +sV" +I1 +ssVft +p600 +(dp601 +Vy +I1 +sVp +I2 +sVe +I36 +sVw +I2 +sV +I12 +ssVfu +p602 +(dp603 +Vs +I12 +sVr +I8 +sVt +I4 +sVl +I58 +sVn +I4 +ssVL +p604 +(dp605 +VP +I2 +sVD +I1 +sVo +I1 +sV6 +I1 +ssVu! +p606 +(dp607 +V) +I1 +sV +I3 +ssVfy +p608 +(dp609 +Vi +I4 +sV +I9 +sV, +I1 +ssVL, +p610 +(dp611 +V +I1 +ssVI; +p612 +(dp613 +V +I1 +ssV?0 +p614 +(dp615 +V0 +I1 +ssVfa +p616 +(dp617 +Vc +I16 +sVi +I19 +sVm +I24 +sVl +I4 +sVn +I7 +sVs +I10 +sVr +I18 +sVu +I6 +sVt +I20 +sVv +I14 +ssVSS +p618 +(dp619 +VI +I1 +sV +I3 +ssVr? +p620 +(dp621 +V +I3 +sV" +I4 +ssVfe +p622 +(dp623 +Va +I20 +sV +I14 +sVc +I72 +sVe +I47 +sV' +I3 +sVm +I1 +sV, +I10 +sV. +I5 +sVs +I9 +sVr +I41 +sV! +I1 +sVt +I4 +sVw +I15 +sV? +I1 +sVl +I10 +ssVff +p624 +(dp625 +Va +I10 +sV +I9 +sVe +I73 +sVi +I14 +sV, +I1 +sVo +I9 +ssVUD +p626 +(dp627 +VI +I2 +ssVfi +p628 +(dp629 +Va +I1 +sVc +I25 +sVe +I22 +sVd +I4 +sVg +I1 +sVf +I2 +sVl +I10 +sVn +I30 +sVs +I2 +sVr +I31 +sVt +I10 +sVv +I2 +sVx +I10 +ssVfl +p630 +(dp631 +Vi +I10 +sVe +I3 +sVu +I11 +sVa +I6 +sVo +I1 +ssVH +p632 +(dp633 +VD +I1 +sVO +I1 +ssVfo +p634 +(dp635 +Vr +I454 +sVu +I20 +sVl +I13 +sVo +I3 +sVn +I3 +ssVCY +p636 +(dp637 +V +I23 +sV. +I5 +ssVg' +p638 +(dp639 +Vs +I7 +ssVsy +p640 +(dp641 +V +I13 +sVm +I2 +sVl +I3 +sV, +I3 +sV; +I1 +sV. +I3 +ssVEv +p642 +(dp643 +Ve +I4 +ssVYo +p644 +(dp645 +Vu +I61 +ssVY. +p646 +(dp647 +V +I5 +ssVss +p648 +(dp649 +Va +I14 +sV +I133 +sV: +I1 +sVe +I40 +sVi +I87 +sVm +I3 +sV, +I17 +sVo +I5 +sV. +I10 +sV! +I3 +sVu +I19 +sVw +I1 +sV; +I8 +sVn +I1 +sVl +I2 +ssVY +p650 +(dp651 +VB +I1 +sVE +I1 +sVD +I12 +sVK +I1 +sVM +I1 +sVO +I3 +sVS +I24 +sVT +I7 +ssVsp +p652 +(dp653 +Va +I5 +sVe +I67 +sVi +I31 +sVl +I8 +sVo +I34 +sVr +I1 +sVu +I2 +ssVsw +p654 +(dp655 +Va +I1 +sVe +I11 +sVo +I1 +ssVsu +p656 +(dp657 +Va +I18 +sVc +I70 +sVb +I30 +sVe +I2 +sVd +I5 +sVg +I2 +sVf +I11 +sVi +I6 +sVm +I1 +sVl +I3 +sVn +I3 +sVp +I31 +sVs +I13 +sVr +I89 +ssVst +p658 +(dp659 +Va +I98 +sV +I307 +sV: +I1 +sVe +I75 +sV! +I1 +sVi +I61 +sV- +I2 +sVm +I2 +sV, +I24 +sVo +I42 +sV. +I5 +sVs +I2 +sVr +I52 +sVu +I7 +sVy +I5 +sV; +I5 +sVn +I2 +sVl +I6 +ssVsk +p660 +(dp661 +V +I8 +sVe +I2 +sV) +I1 +sV, +I2 +sV. +I1 +sVi +I3 +ssVsi +p662 +(dp663 +Vc +I5 +sVb +I39 +sVd +I31 +sVg +I19 +sVm +I3 +sVl +I19 +sVo +I56 +sVn +I82 +sVp +I3 +sVs +I40 +sVr +I17 +sVt +I64 +sVv +I10 +sVx +I5 +sVz +I2 +ssVsh +p664 +(dp665 +Va +I65 +sV +I45 +sVe +I214 +sVi +I34 +sVm +I10 +sV, +I3 +sVo +I83 +sVn +I1 +sVr +I3 +sVu +I2 +sVy +I4 +sVl +I1 +ssVso +p666 +(dp667 +V +I139 +sVc +I9 +sVb +I1 +sVf +I7 +sVm +I81 +sVl +I44 +sVo +I38 +sVn +I73 +sVr +I23 +sVu +I4 +sV. +I5 +sV, +I4 +ssVsn +p668 +(dp669 +V1 +I4 +sVe +I7 +ssVsm +p670 +(dp671 +Va +I7 +sVi +I7 +sVe +I3 +sVo +I1 +ssVsl +p672 +(dp673 +Vi +I13 +sVy +I9 +sVe +I2 +sVa +I3 +ssVsc +p674 +(dp675 +Va +I18 +sVe +I3 +sVi +I9 +sVh +I12 +sVl +I5 +sVo +I17 +sVr +I13 +sVu +I1 +ssVsb +p676 +(dp677 +Va +I17 +sVe +I1 +ssVsa +p678 +(dp679 +Vc +I5 +sVb +I7 +sVd +I8 +sVg +I5 +sVf +I3 +sVi +I25 +sVk +I3 +sVm +I12 +sVl +I5 +sVn +I82 +sVp +I6 +sVr +I12 +sVu +I1 +sVt +I34 +sVw +I10 +sVv +I4 +sVy +I28 +ssVUB +p680 +(dp681 +VL +I2 +ssVsg +p682 +(dp683 +Va +I1 +sVu +I1 +ssVsf +p684 +(dp685 +Vy +I2 +sVi +I10 +sVe +I1 +sVa +I6 +ssVse +p686 +(dp687 +V! +I2 +sV +I179 +sV) +I1 +sV, +I32 +sV. +I15 +sV; +I3 +sV: +I2 +sV? +I2 +sVa +I3 +sVc +I12 +sVe +I85 +sVd +I68 +sVf +I1 +sVm +I6 +sVl +I126 +sVn +I99 +sVq +I8 +sVp +I10 +sVs +I23 +sVr +I54 +sVt +I12 +sVw +I1 +sVv +I14 +sVx +I2 +ssVsd +p688 +(dp689 +Va +I8 +ssVy) +p690 +(dp691 +V +I2 +sV. +I1 +ssVh: +p692 +(dp693 +V +I1 +ssVy- +p694 +(dp695 +V- +I2 +sVm +I1 +sVt +I2 +ssVy, +p696 +(dp697 +V +I106 +sV" +I2 +ssVy. +p698 +(dp699 +V +I56 +sV" +I2 +ssVy! +p700 +(dp701 +V +I3 +sV" +I1 +ssVy +p702 +(dp703 +V( +I4 +sV1 +I1 +sVC +I2 +sVB +I1 +sVD +I2 +sVF +I1 +sVI +I9 +sVH +I3 +sVJ +I5 +sVM +I3 +sVL +I1 +sVO +I1 +sVP +I1 +sVS +I72 +sVR +I2 +sVT +I1 +sVV +I1 +sVa +I136 +sVc +I51 +sVb +I72 +sVe +I40 +sVd +I128 +sVg +I26 +sVf +I64 +sVi +I69 +sVh +I79 +sVk +I7 +sVj +I5 +sVm +I49 +sVl +I35 +sVo +I106 +sVn +I21 +sVp +I53 +sVs +I94 +sVr +I46 +sVu +I22 +sVt +I158 +sVw +I76 +sVv +I10 +sVy +I17 +ssV 5 +p704 +(dp705 +V% +I1 +ssVGI +p706 +(dp707 +VN +I3 +sVV +I1 +ssV% +p708 +(dp709 +Vo +I4 +ssVy' +p710 +(dp711 +Vs +I2 +ssVRe +p712 +(dp713 +Va +I1 +sVp +I1 +sVg +I78 +sVf +I1 +ssVy; +p714 +(dp715 +V +I29 +ssV!" +p716 +(dp717 +V +I14 +ssVV. +p718 +(dp719 +V +I4 +ssVy? +p720 +(dp721 +V +I1 +ssVRo +p722 +(dp723 +Vy +I1 +ssVSa +p724 +(dp725 +Vy +I1 +ssVRi +p726 +(dp727 +Vg +I1 +ssVRT +p728 +(dp729 +VI +I1 +sV* +I2 +ssV25 +p730 +(dp731 +V +I1 +ssVld +p732 +(dp733 +V +I277 +sVe +I5 +sV' +I7 +sVi +I3 +sV- +I1 +sV, +I30 +sVo +I3 +sV. +I11 +sVr +I8 +sVn +I1 +sV; +I2 +sV: +I1 +sV? +I1 +ssVle +p734 +(dp735 +V! +I4 +sV +I203 +sV" +I1 +sV' +I2 +sV, +I36 +sV. +I14 +sV; +I4 +sV: +I1 +sVa +I92 +sVc +I19 +sVb +I1 +sVe +I1 +sVd +I31 +sVg +I8 +sVf +I12 +sVi +I3 +sVm +I7 +sVn +I49 +sVs +I59 +sVr +I6 +sVt +I54 +sVv +I7 +sVx +I4 +ssV20 +p736 +(dp737 +V0 +I4 +sV% +I1 +ssVlc +p738 +(dp739 +Vu +I3 +sVo +I3 +ssVRR +p740 +(dp741 +VA +I4 +ssVla +p742 +(dp743 +V +I1 +sVc +I24 +sVb +I3 +sVd +I27 +sVg +I4 +sVi +I23 +sVm +I15 +sVn +I36 +sVp +I1 +sVs +I25 +sVr +I46 +sVu +I9 +sVt +I36 +sVw +I12 +sVv +I2 +sVy +I11 +sVx +I1 +ssVln +p744 +(dp745 +Ve +I3 +ssVlo +p746 +(dp747 +Vd +I3 +sVg +I5 +sVi +I1 +sVm +I1 +sVo +I34 +sVn +I56 +sVq +I1 +sVp +I2 +sVs +I13 +sVr +I1 +sVu +I24 +sVt +I2 +sVw +I39 +sVv +I30 +sVy +I2 +ssVll +p748 +(dp749 +Va +I9 +sV +I379 +sV: +I1 +sVe +I23 +sVi +I28 +sV- +I11 +sV, +I23 +sVo +I32 +sVn +I1 +sV) +I1 +sVs +I3 +sV! +I1 +sVu +I3 +sVy +I84 +sV; +I6 +sV. +I34 +sV? +I1 +ssVlm +p750 +(dp751 +V +I2 +sVe +I1 +sVl +I2 +sVo +I7 +sVn +I1 +ssV28 +p752 +(dp753 +V, +I1 +ssV29 +p754 +(dp755 +V. +I1 +ssVli +p756 +(dp757 +Va +I20 +sVc +I35 +sVb +I12 +sVe +I49 +sVd +I1 +sVg +I37 +sVf +I15 +sVh +I1 +sVk +I30 +sVm +I4 +sVo +I8 +sVn +I57 +sVp +I3 +sVs +I21 +sVr +I8 +sVt +I58 +sVv +I11 +ssVlv +p758 +(dp759 +Ve +I18 +ssVRE +p760 +(dp761 +V! +I1 +sVA +I2 +sVC +I1 +sVG +I3 +sV +I3 +sVM +I1 +sVS +I2 +ssVlt +p762 +(dp763 +Va +I1 +sV +I9 +sVe +I15 +sVi +I4 +sVh +I5 +sV, +I1 +sVo +I4 +sV. +I3 +sVs +I3 +sVy +I6 +ssVlu +p764 +(dp765 +Vc +I7 +sVe +I14 +sVd +I17 +sVn +I1 +sVs +I7 +sVr +I1 +sVt +I19 +ssVlr +p766 +(dp767 +Ve +I8 +ssVls +p768 +(dp769 +V +I9 +sVu +I4 +sVe +I6 +sVo +I9 +sVt +I1 +ssVlp +p770 +(dp771 +Vi +I1 +sV +I10 +sV- +I1 +ssVRC +p772 +(dp773 +VY +I28 +sVH +I1 +ssV-" +p774 +(dp775 +V +I1 +ssVRN +p776 +(dp777 +VO +I49 +ssVRO +p778 +(dp779 +VJ +I7 +sVM +I2 +sVT +I1 +sVV +I1 +ssVRI +p780 +(dp781 +VC +I1 +sVB +I1 +sVN +I9 +ssVly +p782 +(dp783 +V +I398 +sVi +I4 +sV- +I1 +sV, +I29 +sV. +I17 +sV; +I9 +sVz +I1 +ssVyi +p784 +(dp785 +Vs +I1 +sVe +I2 +sVn +I38 +ssVym +p786 +(dp787 +Ve +I3 +sVm +I1 +sVo +I9 +sVp +I1 +ssVyl +p788 +(dp789 +Ve +I2 +sVl +I3 +ssVyo +p790 +(dp791 +Vu +I473 +sVn +I18 +ssVt? +p792 +(dp793 +V +I3 +sV" +I1 +ssVya +p794 +(dp795 +Vb +I1 +sVl +I4 +ssV2] +p796 +(dp797 +V +I4 +ssVyb +p798 +(dp799 +Vo +I2 +ssVye +p800 +(dp801 +Va +I13 +sVd +I7 +sVl +I1 +sV, +I1 +sVs +I13 +sVr +I1 +sVt +I21 +ssV.0 +p802 +(dp803 +V4 +I1 +ssVyz +p804 +(dp805 +Ve +I1 +ssVR +p806 +(dp807 +VA +I2 +sVC +I1 +sVB +I2 +sVD +I1 +sVF +I2 +sVI +I2 +sVi +I1 +sVs +I1 +sVO +I1 +sVN +I1 +sVP +I3 +sVS +I1 +sVR +I3 +sVt +I2 +sVv +I1 +sV" +I1 +ssVR, +p808 +(dp809 +V +I2 +sV- +I1 +ssVyp +p810 +(dp811 +Ve +I3 +ssVys +p812 +(dp813 +V +I37 +sVe +I55 +sVi +I2 +sVh +I12 +sV- +I1 +sV, +I2 +sV. +I4 +sVt +I1 +ssVyr +p814 +(dp815 +Vi +I8 +ssVyt +p816 +(dp817 +Vh +I27 +sVe +I1 +ssVm" +p818 +(dp819 +V +I1 +ssVCr +p820 +(dp821 +Ve +I1 +sVu +I1 +ssVl' +p822 +(dp823 +Vs +I1 +ssVl +p824 +(dp825 +V( +I1 +sVE +I1 +sVF +I1 +sVI +I6 +sVM +I1 +sVN +I1 +sVP +I6 +sVS +I2 +sVT +I1 +sVW +I1 +sVa +I48 +sVc +I14 +sVb +I43 +sVe +I10 +sVd +I14 +sVg +I8 +sVf +I26 +sVi +I26 +sVh +I24 +sVk +I7 +sVj +I1 +sVm +I23 +sVl +I11 +sVo +I29 +sVn +I31 +sVq +I2 +sVp +I13 +sVs +I32 +sVr +I13 +sVu +I4 +sVt +I74 +sVw +I13 +sVv +I3 +sVy +I16 +ssVl! +p826 +(dp827 +V +I4 +ssVl. +p828 +(dp829 +V +I48 +ssVl, +p830 +(dp831 +V +I48 +ssVl- +p832 +(dp833 +Vb +I1 +sVd +I1 +sVf +I2 +sV- +I1 +sVo +I2 +sVn +I2 +sVu +I1 +sVt +I1 +ssVl) +p834 +(dp835 +V +I1 +sV. +I1 +ssVAs +p836 +(dp837 +V +I7 +sVs +I3 +sVk +I1 +ssV-M +p838 +(dp839 +Vr +I2 +sVe +I3 +ssVl? +p840 +(dp841 +V" +I1 +ssVl: +p842 +(dp843 +V +I2 +ssVl; +p844 +(dp845 +V +I8 +ssVem +p846 +(dp847 +Va +I28 +sV +I27 +sVb +I17 +sVe +I60 +sVi +I4 +sV- +I1 +sV, +I3 +sVo +I21 +sVn +I6 +sVp +I26 +sVs +I12 +sVu +I1 +sVy +I1 +sV; +I1 +sV. +I4 +ssVel +p848 +(dp849 +Va +I11 +sV +I23 +sVc +I3 +sVe +I16 +sVd +I7 +sVf +I116 +sVi +I95 +sVl +I78 +sVo +I8 +sV. +I1 +sVp +I12 +sVs +I5 +sVt +I9 +sVv +I7 +sVy +I111 +ssVeo +p850 +(dp851 +Vp +I2 +sVv +I2 +sVu +I3 +sVn +I1 +ssVen +p852 +(dp853 +V! +I1 +sV +I287 +sV* +I2 +sV- +I1 +sV, +I23 +sV. +I6 +sV; +I3 +sV: +I1 +sV? +I1 +sVa +I11 +sVc +I94 +sVb +I15 +sVe +I47 +sVd +I140 +sVg +I26 +sVi +I21 +sVj +I5 +sVl +I1 +sVo +I20 +sVn +I2 +sVq +I2 +sVs +I57 +sVr +I3 +sVu +I1 +sVt +I388 +sVv +I1 +sVy +I1 +sVz +I2 +ssVei +p854 +(dp855 +Vg +I5 +sVn +I51 +sVp +I1 +sVs +I3 +sVr +I18 +sVt +I17 +sVv +I38 +ssVh, +p856 +(dp857 +V +I30 +ssV8, +p858 +(dp859 +V +I1 +ssVej +p860 +(dp861 +Ve +I2 +sVu +I5 +sVo +I5 +ssVee +p862 +(dp863 +Va +I11 +sV +I62 +sVc +I2 +sVd +I37 +sVi +I15 +sVk +I14 +sVm +I29 +sV, +I1 +sVn +I106 +sVp +I21 +sVs +I4 +sVr +I5 +sVt +I35 +sVl +I43 +ssVed +p864 +(dp865 +V! +I5 +sV +I663 +sVe +I91 +sVd +I1 +sVg +I6 +sVi +I43 +sV- +I2 +sV, +I94 +sVo +I1 +sVn +I4 +sV. +I34 +sVs +I1 +sVu +I13 +sVy +I2 +sV; +I14 +sV: +I2 +sV] +I1 +sV? +I1 +sVl +I4 +ssVeg +p866 +(dp867 +Va +I20 +sV +I1 +sVe +I1 +sVg +I3 +sVi +I84 +sVl +I5 +sVr +I20 +sVu +I5 +ssVef +p868 +(dp869 +Va +I2 +sV +I4 +sVe +I13 +sVf +I12 +sVi +I6 +sV, +I1 +sVo +I59 +sVl +I3 +sVr +I1 +sVu +I19 +sVt +I12 +sVy +I2 +ssVea +p870 +(dp871 +V +I12 +sVc +I24 +sVb +I11 +sVd +I49 +sVg +I9 +sVk +I31 +sVl +I55 +sVn +I30 +sVs +I119 +sVr +I216 +sVu +I5 +sVt +I81 +sVv +I48 +sV; +I1 +sVz +I2 +sV, +I1 +ssVec +p872 +(dp873 +Va +I8 +sVe +I70 +sVi +I17 +sVh +I2 +sVk +I2 +sVl +I14 +sVo +I17 +sV. +I1 +sVr +I1 +sVu +I13 +sVt +I216 +ssVeb +p874 +(dp875 +Vy +I1 +sVa +I1 +sVr +I1 +sVe +I1 +sVt +I3 +ssVEx +p876 +(dp877 +Vc +I1 +sVe +I1 +ssVex +p878 +(dp879 +Va +I14 +sVc +I35 +sVe +I9 +sVi +I9 +sV, +I2 +sVq +I1 +sVp +I55 +sVu +I1 +sVt +I69 +ssV82 +p880 +(dp881 +V +I1 +sV5 +I1 +ssVet +p882 +(dp883 +Va +I7 +sV +I86 +sVc +I14 +sVe +I69 +sVi +I16 +sVh +I38 +sV, +I14 +sVo +I5 +sV. +I16 +sVs +I3 +sVr +I8 +sVu +I27 +sVt +I72 +sVw +I14 +sVy +I20 +sV; +I2 +sVn +I1 +sVl +I2 +ssVew +p884 +(dp885 +Va +I3 +sV +I28 +sVe +I1 +sVi +I2 +sVh +I4 +sV. +I1 +sVs +I8 +sV; +I1 +ssVev +p886 +(dp887 +Vi +I18 +sVa +I3 +sVe +I293 +sVo +I7 +ssVeq +p888 +(dp889 +Vu +I47 +ssVep +p890 +(dp891 +Va +I22 +sV +I10 +sVe +I16 +sVi +I5 +sVl +I16 +sVo +I6 +sVs +I1 +sVr +I17 +sVu +I2 +sVt +I21 +ssVes +p892 +(dp893 +V! +I2 +sV +I212 +sV' +I5 +sV) +I1 +sV- +I1 +sV, +I45 +sV. +I16 +sV; +I7 +sV: +I2 +sV? +I2 +sV] +I2 +sVa +I1 +sVc +I12 +sVe +I63 +sVd +I4 +sVi +I32 +sVh +I1 +sVo +I23 +sVp +I29 +sVs +I204 +sVu +I2 +sVt +I127 +ssVer +p894 +(dp895 +V! +I5 +sV +I839 +sV' +I31 +sV- +I9 +sV, +I166 +sV. +I84 +sV; +I30 +sV: +I3 +sV? +I7 +sVa +I51 +sVc +I17 +sVe +I240 +sVd +I4 +sVg +I17 +sVf +I28 +sVi +I142 +sVh +I15 +sVj +I1 +sVm +I23 +sVl +I9 +sVo +I9 +sVn +I91 +sVp +I4 +sVs +I184 +sVr +I11 +sVt +I46 +sVw +I10 +sVv +I33 +sVy +I142 +ssVrt +p896 +(dp897 +Va +I38 +sV@ +I1 +sVe +I19 +sV +I62 +sVi +I62 +sVh +I20 +sVf +I4 +sVm +I4 +sV, +I13 +sVo +I3 +sVn +I4 +sVs +I8 +sVu +I24 +sVy +I18 +sV; +I2 +sV. +I2 +sVl +I4 +ssVru +p898 +(dp899 +Vc +I4 +sVb +I3 +sVe +I15 +sVd +I6 +sVg +I1 +sVi +I1 +sVm +I1 +sVl +I4 +sVn +I7 +sVp +I5 +sVs +I9 +sVt +I7 +ssVrv +p900 +(dp901 +Va +I6 +sVi +I6 +sVe +I22 +ssVE. +p902 +(dp903 +V +I1 +ssVrp +p904 +(dp905 +Vr +I11 +sVe +I1 +sVl +I1 +sVo +I4 +ssVs] +p906 +(dp907 +V +I2 +ssVrr +p908 +(dp909 +Va +I7 +sVe +I18 +sVi +I48 +sVo +I8 +sVu +I4 +sVy +I35 +ssVrs +p910 +(dp911 +Va +I13 +sV +I92 +sVe +I81 +sVd +I4 +sV' +I1 +sVi +I11 +sVh +I1 +sV, +I39 +sVo +I18 +sV. +I42 +sV) +I1 +sVu +I17 +sVt +I44 +sV; +I4 +sV? +I1 +ssVE! +p912 +(dp913 +V* +I1 +ssVry +p914 +(dp915 +V +I191 +sVb +I1 +sVi +I20 +sV, +I13 +sVo +I1 +sV. +I7 +sVt +I15 +sVw +I1 +sV; +I2 +sV? +I1 +ssVe] +p916 +(dp917 +V +I1 +ssVre +p918 +(dp919 +V! +I3 +sV +I363 +sV) +I1 +sV, +I66 +sV. +I23 +sV; +I13 +sV? +I2 +sVa +I183 +sVc +I68 +sVb +I2 +sVe +I64 +sVd +I194 +sVg +I19 +sVf +I49 +sVi +I1 +sVh +I7 +sVj +I10 +sVm +I50 +sVl +I54 +sVo +I2 +sVn +I43 +sVq +I21 +sVp +I44 +sVs +I183 +sVr +I2 +sVt +I63 +sVw +I4 +sVv +I35 +sVy +I1 +ssVey +p920 +(dp921 +V +I39 +sVe +I10 +sVm +I8 +sV, +I3 +sVo +I10 +sV. +I2 +sV; +I1 +ssVrg +p922 +(dp923 +V +I13 +sVe +I21 +sVi +I9 +sV, +I1 +sV/ +I1 +sVu +I1 +sVo +I4 +sVy +I1 +ssVra +p924 +(dp925 +Vc +I29 +sVb +I34 +sVd +I7 +sVg +I13 +sVi +I18 +sVm +I4 +sVl +I23 +sVo +I4 +sVn +I36 +sVp +I2 +sVs +I5 +sVr +I5 +sVu +I1 +sVt +I64 +sVw +I8 +sVv +I3 +sVy +I4 +ssVrb +p926 +(dp927 +Vi +I5 +sVa +I3 +sVe +I2 +sVo +I1 +ssVrc +p928 +(dp929 +Ve +I25 +sVi +I4 +sVh +I52 +sVo +I7 +sVu +I10 +sVy +I27 +ssVrl +p930 +(dp931 +V! +I2 +sV +I12 +sVe +I9 +sVd +I21 +sV' +I1 +sVi +I2 +sV, +I8 +sVo +I5 +sV. +I3 +sVs +I1 +sVa +I1 +sVy +I21 +sV; +I1 +ssVrm +p932 +(dp933 +Va +I12 +sV +I17 +sVe +I13 +sVi +I28 +sV, +I8 +sVl +I5 +sV) +I1 +sVs +I6 +sVt +I4 +sV. +I1 +ssVrn +p934 +(dp935 +Va +I8 +sV +I20 +sVe +I35 +sVi +I16 +sV, +I1 +sVo +I65 +sV. +I3 +sVs +I1 +sVt +I3 +ssVro +p936 +(dp937 +V- +I1 +sVa +I5 +sVc +I6 +sVb +I13 +sVd +I8 +sVg +I5 +sVf +I8 +sVi +I1 +sVh +I1 +sVk +I1 +sVj +I28 +sVm +I124 +sVl +I5 +sVo +I27 +sVn +I18 +sVp +I21 +sVs +I9 +sVr +I4 +sVu +I38 +sVt +I35 +sVw +I12 +sVv +I20 +sVy +I5 +ssVrh +p938 +(dp939 +Va +I15 +sVo +I1 +ssVri +p940 +(dp941 +Va +I25 +sVc +I94 +sVb +I19 +sVe +I56 +sVd +I10 +sVg +I28 +sVf +I5 +sVk +I2 +sVm +I4 +sVl +I6 +sVo +I28 +sVn +I98 +sVp +I4 +sVs +I12 +sVu +I3 +sVt +I52 +sVv +I34 +sVz +I9 +ssVrj +p942 +(dp943 +Vo +I1 +ssVrk +p944 +(dp945 +Va +I1 +sV +I7 +sVe +I6 +sV- +I1 +sVl +I5 +sV, +I2 +sVs +I2 +sV. +I2 +ssVe- +p946 +(dp947 +V- +I7 +sV +I1 +sVb +I1 +sVM +I3 +ssVe, +p948 +(dp949 +V +I318 +sV" +I6 +sV- +I3 +ssVe. +p950 +(dp951 +V +I157 +sVc +I1 +sV" +I4 +ssVe) +p952 +(dp953 +V +I3 +sV; +I1 +ssVED +p954 +(dp955 +VI +I3 +sV +I5 +sV, +I1 +ssVEG +p956 +(dp957 +VI +I3 +sVL +I1 +ssVEF +p958 +(dp959 +VO +I1 +ssVEA +p960 +(dp961 +VC +I1 +sVR +I1 +sVD +I1 +sVV +I1 +ssVe +p962 +(dp963 +V" +I2 +sV$ +I1 +sV( +I3 +sV1 +I1 +sV6 +I1 +sVA +I8 +sVC +I25 +sVB +I1 +sVE +I2 +sVD +I2 +sVG +I1 +sVF +I4 +sVI +I36 +sVH +I3 +sVM +I10 +sVL +I3 +sVP +I16 +sVS +I5 +sVR +I4 +sVU +I1 +sVT +I3 +sVW +I1 +sVV +I4 +sV[ +I1 +sVa +I268 +sVc +I141 +sVb +I100 +sVe +I83 +sVd +I102 +sVg +I56 +sVf +I115 +sVi +I245 +sVh +I238 +sVk +I17 +sVj +I8 +sVm +I209 +sVl +I70 +sVo +I254 +sVn +I89 +sVq +I7 +sVp +I109 +sVs +I234 +sVr +I68 +sVu +I29 +sVt +I380 +sVw +I233 +sVv +I28 +sVy +I59 +ssVEC +p964 +(dp965 +VT +I8 +ssV") +p966 +(dp967 +V. +I1 +ssVAn +p968 +(dp969 +Vd +I6 +ssVe? +p970 +(dp971 +V +I13 +sV" +I1 +ssVEY +p972 +(dp973 +V +I1 +ssVEX +p974 +(dp975 +VP +I1 +sVT +I6 +sV? +I1 +ssVe; +p976 +(dp977 +V +I55 +ssVe: +p978 +(dp979 +V +I5 +ssVET +p980 +(dp981 +V +I3 +sVE +I6 +sVT +I1 +ssVEW +p982 +(dp983 +V +I1 +ssVEV +p984 +(dp985 +VE +I2 +ssVEQ +p986 +(dp987 +VU +I1 +ssVES +p988 +(dp989 +V +I4 +sVS +I2 +sVE +I1 +sV, +I1 +sV. +I1 +ssVER +p990 +(dp991 +V +I7 +sVC +I1 +sVE +I1 +sVG +I7 +sVI +I7 +sV* +I1 +sV, +I3 +sVN +I49 +sVS +I1 +sVW +I1 +ssVEl +p992 +(dp993 +Ve +I1 +ssVEn +p994 +(dp995 +Vd +I1 +sVg +I3 +ssVEd +p996 +(dp997 +Vw +I9 +ssVNO +p998 +(dp999 +V +I2 +sVT +I5 +sVN +I49 +ssVr: +p1000 +(dp1001 +V +I6 +ssVr; +p1002 +(dp1003 +V +I36 +ssVr' +p1004 +(dp1005 +Vs +I31 +ssVr +p1006 +(dp1007 +V( +I1 +sV3 +I1 +sV4 +I1 +sVA +I8 +sVC +I6 +sVB +I1 +sVE +I1 +sVF +I8 +sVI +I21 +sVH +I1 +sVJ +I49 +sVM +I15 +sVL +I7 +sVS +I20 +sVR +I9 +sV[ +I2 +sVa +I152 +sVc +I53 +sVb +I42 +sVe +I46 +sVd +I55 +sVg +I19 +sVf +I75 +sVi +I59 +sVh +I104 +sVk +I8 +sVj +I3 +sVm +I116 +sVl +I47 +sVo +I88 +sVn +I20 +sVq +I1 +sVp +I47 +sVs +I100 +sVr +I34 +sVu +I21 +sVt +I189 +sVw +I79 +sVv +I8 +sVy +I15 +sVz +I1 +ssVGi +p1008 +(dp1009 +Vv +I1 +ssVr, +p1010 +(dp1011 +V +I181 +sV" +I2 +sV- +I9 +ssVEt +p1012 +(dp1013 +Ve +I11 +ssVr. +p1014 +(dp1015 +V +I158 +sV" +I3 +sV0 +I1 +ssVr@ +p1016 +(dp1017 +Vl +I1 +ssVr) +p1018 +(dp1019 +V, +I1 +ssVr* +p1020 +(dp1021 +V* +I1 +ssVw' +p1022 +(dp1023 +Vs +I5 +ssVNC +p1024 +(dp1025 +VI +I1 +sVE +I1 +sVL +I3 +sVO +I1 +ssVxc +p1026 +(dp1027 +Vi +I2 +sVu +I13 +sVe +I17 +sVl +I3 +sVh +I1 +ssVxa +p1028 +(dp1029 +Vc +I5 +sVm +I4 +sVt +I4 +sVg +I1 +ssV1] +p1030 +(dp1031 +V +I3 +ssVUE +p1032 +(dp1033 +VN +I1 +ssVxe +p1034 +(dp1035 +Vc +I2 +sVr +I5 +sVm +I1 +sVs +I2 +sVd +I12 +ssVxx +p1036 +(dp1037 +V1 +I1 +sVx +I4 +sV] +I1 +ssVjo +p1038 +(dp1039 +Vi +I9 +sVy +I8 +sVk +I1 +sVu +I4 +ssVxp +p1040 +(dp1041 +Vr +I10 +sVe +I27 +sVl +I16 +sVo +I2 +ssVxq +p1042 +(dp1043 +Vu +I1 +ssVxt +p1044 +(dp1045 +V +I31 +sVe +I8 +sV) +I1 +sV, +I6 +sV/ +I2 +sV. +I2 +sVs +I12 +sVr +I10 +sVu +I1 +sVo +I1 +sV9 +I2 +ssVM +p1046 +(dp1047 +VI +I1 +sVE +I1 +sVT +I2 +ssVu, +p1048 +(dp1049 +V +I42 +sV" +I3 +ssVIE +p1050 +(dp1051 +VS +I3 +sVD +I1 +ssVeu +p1052 +(dp1053 +V! +I2 +sVv +I1 +sV, +I5 +sV. +I2 +ssV-F +p1054 +(dp1055 +Vr +I1 +ssV?" +p1056 +(dp1057 +V +I13 +ssV0% +p1058 +(dp1059 +V +I3 +ssV.; +p1060 +(dp1061 +V +I1 +ssV +I1 +ssVol +p1996 +(dp1997 +Va +I1 +sV +I8 +sVe +I39 +sVd +I24 +sVi +I9 +sVl +I25 +sVo +I11 +sV, +I2 +sVs +I1 +sVn +I1 +sVu +I20 +sVt +I1 +sVv +I11 +sVy +I1 +sV: +I1 +ssVok +p1998 +(dp1999 +Vi +I4 +sV +I25 +sVs +I9 +sVe +I24 +sV. +I1 +ssVoj +p2000 +(dp2001 +Ve +I28 +ssVoi +p2002 +(dp2003 +Vc +I13 +sVd +I4 +sVg +I1 +sVl +I1 +sVn +I44 +sVs +I2 +sVt +I1 +ssVoh +p2004 +(dp2005 +Vi +I1 +sVn +I18 +ssVog +p2006 +(dp2007 +Vi +I4 +sVy +I1 +sVr +I4 +sVe +I12 +sVn +I1 +ssVof +p2008 +(dp2009 +V +I710 +sVe +I4 +sVf +I21 +sVi +I4 +sV, +I1 +sVo +I3 +sV. +I3 +sVr +I2 +sVt +I16 +sV; +I1 +ssVoe +p2010 +(dp2011 +Vs +I21 +sVu +I1 +sVv +I1 +ssVod +p2012 +(dp2013 +V! +I1 +sV +I31 +sVe +I2 +sVd +I2 +sVg +I3 +sVi +I3 +sV- +I2 +sV, +I3 +sVn +I3 +sVu +I8 +sVa +I1 +sVy +I3 +sV. +I2 +ssVoc +p2014 +(dp2015 +Va +I3 +sVc +I14 +sVe +I6 +sVi +I9 +sVk +I2 +sVu +I1 +ssVob +p2016 +(dp2017 +Va +I11 +sV +I1 +sVb +I1 +sVe +I2 +sVj +I8 +sVl +I11 +sVo +I2 +sVs +I9 +sVt +I3 +ssVoa +p2018 +(dp2019 +Vc +I5 +sVl +I1 +ssVUR +p2020 +(dp2021 +VP +I1 +sVC +I28 +sV +I1 +ssVUM +p2022 +(dp2023 +V +I1 +sVB +I1 +ssVga +p2024 +(dp2025 +Vg +I11 +sVi +I44 +sVl +I6 +sVn +I5 +sVr +I11 +sVt +I3 +sVv +I8 +sVy +I1 +ssVUN +p2026 +(dp2027 +VI +I1 +sVD +I2 +ssVH. +p2028 +(dp2029 +V +I1 +ssVoy +p2030 +(dp2031 +Va +I4 +sV +I5 +sVe +I2 +sVf +I1 +sVi +I2 +sVm +I3 +ssVox +p2032 +(dp2033 +V +I1 +sV. +I1 +ssVow +p2034 +(dp2035 +Va +I6 +sV +I158 +sVe +I75 +sV' +I1 +sVi +I16 +sV, +I24 +sV. +I3 +sVs +I5 +sVn +I90 +sV! +I1 +sV; +I2 +sV: +I1 +sVl +I6 +ssVov +p2036 +(dp2037 +Vi +I6 +sVa +I6 +sVe +I81 +sVo +I8 +ssVou +p2038 +(dp2039 +V! +I2 +sV +I271 +sVb +I29 +sVd +I2 +sVg +I102 +sVl +I199 +sVn +I86 +sVs +I92 +sVr +I374 +sVt +I80 +sV; +I4 +sV. +I11 +sV, +I40 +sV? +I1 +ssVot +p2040 +(dp2041 +Va +I6 +sV +I297 +sVe +I22 +sVi +I17 +sVh +I183 +sV* +I1 +sV, +I12 +sVo +I1 +sV. +I3 +sV) +I1 +sVt +I2 +sV; +I1 +ssVos +p2042 +(dp2043 +Va +I2 +sVe +I80 +sVi +I21 +sVp +I6 +sVs +I43 +sVu +I2 +sVt +I63 +ssVor +p2044 +(dp2045 +V +I382 +sV) +I1 +sV* +I1 +sV, +I11 +sV. +I2 +sV; +I2 +sV: +I3 +sVa +I4 +sVc +I7 +sVb +I8 +sVe +I142 +sVd +I56 +sVg +I18 +sVi +I10 +sVk +I10 +sVm +I43 +sVl +I21 +sVo +I4 +sVn +I12 +sVs +I13 +sVr +I21 +sVt +I100 +sVw +I8 +sVy +I15 +ssVUC +p2046 +(dp2047 +VH +I1 +ssVop +p2048 +(dp2049 +V +I2 +sVe +I48 +sVi +I19 +sVl +I2 +sVo +I6 +sVp +I14 +sVr +I7 +sVu +I1 +sVt +I2 +sVy +I14 +ssV!! +p2050 +(dp2051 +V +I1 +ssV! +p2052 +(dp2053 +VA +I1 +sVC +I2 +sVB +I1 +sVD +I1 +sVG +I2 +sVF +I3 +sVI +I17 +sVH +I5 +sVK +I1 +sVM +I3 +sVL +I1 +sVO +I1 +sVN +I1 +sVP +I1 +sVT +I4 +sVW +I3 +sVa +I3 +sVb +I4 +sVf +I1 +sVi +I1 +sVh +I2 +sVj +I1 +sVt +I5 +ssVC +p2054 +(dp2055 +VD +I2 +sVo +I1 +ssV** +p2056 +(dp2057 +V +I8 +sVE +I1 +sVF +I1 +sVI +I1 +sV* +I17 +sVS +I2 +sVT +I4 +sVW +I1 +ssVh- +p2058 +(dp2059 +V- +I1 +ssVNo +p2060 +(dp2061 +V +I3 +sV; +I1 +sVt +I5 +sVw +I1 +sV, +I3 +ssV!) +p2062 +(dp2063 +V +I1 +ssVNa +p2064 +(dp2065 +Vy +I1 +ssV!* +p2066 +(dp2067 +V +I1 +sV* +I1 +ssVNe +p2068 +(dp2069 +Vi +I1 +sVv +I1 +ssVh. +p2070 +(dp2071 +V +I13 +sV" +I1 +ssV[E +p2072 +(dp2073 +Vt +I1 +ssV[D +p2074 +(dp2075 +Va +I1 +ssVh +p2076 +(dp2077 +V/ +I1 +sV2 +I1 +sV8 +I1 +sVC +I2 +sVF +I2 +sVI +I35 +sVH +I1 +sVM +I9 +sVL +I6 +sVS +I2 +sVR +I8 +sVa +I100 +sVc +I10 +sVb +I6 +sVe +I8 +sVd +I6 +sVg +I7 +sVf +I12 +sVi +I25 +sVh +I68 +sVk +I2 +sVj +I2 +sVm +I51 +sVl +I7 +sVo +I35 +sVn +I4 +sVp +I15 +sVs +I28 +sVr +I6 +sVu +I4 +sVt +I65 +sVw +I26 +sVv +I1 +sVy +I19 +ssVh! +p2078 +(dp2079 +V +I1 +sV" +I1 +ssVh' +p2080 +(dp2081 +Vs +I4 +ssV[M +p2082 +(dp2083 +Va +I1 +ssVeh +p2084 +(dp2085 +Va +I19 +sVi +I1 +sVe +I7 +ssVNI +p2086 +(dp2087 +VT +I2 +ssV"a +p2088 +(dp2089 +Vs +I1 +ssV., +p2090 +(dp2091 +V +I18 +ssVek +p2092 +(dp2093 +V +I5 +sVs +I6 +sV, +I2 +sV. +I1 +ssVu; +p2094 +(dp2095 +V +I4 +ssV[t +p2096 +(dp2097 +Vr +I1 +sVo +I2 +ssV. +p2098 +(dp2099 +V +I27 +sV" +I13 +sV. +I4 +sVA +I30 +sVC +I10 +sVB +I16 +sVE +I4 +sVD +I33 +sVG +I2 +sVF +I16 +sVI +I209 +sVH +I69 +sVK +I2 +sVJ +I34 +sVM +I51 +sVL +I21 +sVO +I9 +sVN +I9 +sVP +I7 +sVS +I61 +sVR +I7 +sVU +I2 +sVT +I45 +sVW +I33 +sVV +I73 +sVY +I23 +sVa +I2 +sVb +I1 +sVi +I1 +sVw +I2 +ssVNA +p2100 +(dp2101 +VL +I3 +ssVNB +p2102 +(dp2103 +VE +I7 +ssV[x +p2104 +(dp2105 +Vx +I1 +ssVND +p2106 +(dp2107 +VI +I1 +sV +I1 +sV* +I2 +sVE +I5 +sV, +I1 +ssVNE +p2108 +(dp2109 +V +I7 +sVD +I1 +sVG +I1 +sVS +I1 +sVW +I1 +sVY +I1 +ssVNG +p2110 +(dp2111 +V +I2 +ssVNY +p2112 +(dp2113 +V +I2 +ssVu. +p2114 +(dp2115 +V +I13 +ssV[g +p2116 +(dp2117 +Ve +I1 +ssVrw +p2118 +(dp2119 +Va +I14 +sVi +I4 +ssVMO +p2120 +(dp2121 +VN +I1 +ssV.2 +p2122 +(dp2123 +V9 +I1 +ssVNS +p2124 +(dp2125 +V +I2 +sVE +I1 +sVO +I17 +ssVNT +p2126 +(dp2127 +V! +I2 +sVA +I2 +sV +I1 +sVI +I3 +sV* +I1 +sVR +I1 +sVY +I2 +ssVNU +p2128 +(dp2129 +VM +I1 +ssVhy +p2130 +(dp2131 +V +I13 +sVs +I2 +sV, +I4 +sVp +I2 +ssVN, +p2132 +(dp2133 +V +I1 +ssV-t +p2134 +(dp2135 +Vi +I2 +sVh +I4 +sVm +I4 +sVo +I1 +sVw +I1 +ssVN. +p2136 +(dp2137 +V +I19 +ssVhr +p2138 +(dp2139 +Vi +I2 +sVu +I3 +sVe +I9 +sVo +I8 +ssVhs +p2140 +(dp2141 +V +I9 +sV, +I1 +ssVg- +p2142 +(dp2143 +Vh +I1 +sVr +I6 +sV- +I4 +ssVka +p2144 +(dp2145 +Vb +I2 +ssVht +p2146 +(dp2147 +V +I90 +sVe +I50 +sVf +I7 +sVi +I1 +sV, +I12 +sV. +I3 +sVs +I5 +sV; +I1 +sVl +I1 +ssVhu +p2148 +(dp2149 +Vs +I21 +sVr +I54 +sVm +I9 +sVt +I2 +sVn +I5 +ssVTP +p2150 +(dp2151 +V +I2 +ssVhh +p2152 +(dp2153 +Vi +I46 +sVe +I1 +ssVhi +p2154 +(dp2155 +Vc +I117 +sVb +I1 +sVe +I3 +sVg +I13 +sVm +I153 +sVl +I85 +sVo +I3 +sVn +I149 +sVp +I20 +sVs +I283 +sVr +I5 +sVt +I13 +sVv +I2 +ssVhn +p2156 +(dp2157 +Vs +I18 +sVe +I1 +ssVho +p2158 +(dp2159 +V +I30 +sVc +I1 +sVe +I1 +sVd +I1 +sVi +I5 +sVm +I30 +sVl +I23 +sVo +I15 +sVn +I10 +sVp +I29 +sVs +I37 +sVr +I30 +sVu +I184 +sVw +I78 +sV, +I7 +ssVhl +p2160 +(dp2161 +Vy +I14 +sVe +I1 +ssVhm +p2162 +(dp2163 +Ve +I19 +ssVhb +p2164 +(dp2165 +Vo +I1 +ssVD* +p2166 +(dp2167 +V +I1 +sVT +I1 +ssVha +p2168 +(dp2169 +Ve +I2 +sVd +I97 +sVk +I1 +sVm +I3 +sVl +I67 +sVn +I85 +sVp +I47 +sVs +I113 +sVr +I47 +sVt +I403 +sVv +I281 +sVz +I1 +ssVhf +p2170 +(dp2171 +Vu +I4 +ssVs? +p2172 +(dp2173 +V +I2 +sV" +I2 +ssVhe +p2174 +(dp2175 +Va +I67 +sV +I1028 +sVc +I2 +sVe +I4 +sVd +I53 +sVi +I20 +sV- +I1 +sVm +I35 +sVl +I13 +sVn +I102 +sVs +I28 +sVr +I827 +sVt +I9 +sVy +I29 +sV; +I1 +sV. +I1 +sV, +I10 +ssV[3 +p2176 +(dp2177 +V] +I2 +ssV[2 +p2178 +(dp2179 +V] +I3 +ssV[1 +p2180 +(dp2181 +V0 +I1 +sV] +I3 +ssV-w +p2182 +(dp2183 +Va +I1 +sVe +I1 +ssVuy +p2184 +(dp2185 +V +I1 +ssV*S +p2186 +(dp2187 +VT +I2 +ssVXV +p2188 +(dp2189 +VI +I8 +sV +I3 +sVl +I1 +ssVut +p2190 +(dp2191 +Va +I3 +sV +I265 +sVe +I51 +sVi +I22 +sVh +I13 +sVm +I3 +sV, +I11 +sV. +I1 +sVu +I4 +sVt +I2 +sVy +I14 +sV; +I1 +ssVgy +p2192 +(dp2193 +V +I1 +sV, +I1 +ssV.c +p2194 +(dp2195 +Vs +I1 +sVo +I1 +ssVup +p2196 +(dp2197 +V +I14 +sVe +I11 +sVd +I1 +sVi +I3 +sV, +I3 +sVo +I5 +sV. +I1 +sVp +I21 +sVs +I2 +sVr +I1 +sVu +I1 +sVt +I4 +ssVus +p2198 +(dp2199 +Va +I84 +sV +I70 +sVb +I17 +sVe +I79 +sVi +I27 +sVh +I3 +sV, +I10 +sVn +I10 +sVp +I9 +sVs +I2 +sVu +I4 +sVt +I136 +sVy +I7 +sV; +I1 +sV. +I5 +sVl +I7 +ssVur +p2200 +(dp2201 +Va +I32 +sV +I238 +sVc +I75 +sVb +I2 +sVe +I122 +sVg +I10 +sV@ +I1 +sVi +I14 +sVh +I1 +sV, +I5 +sVn +I33 +sVp +I13 +sVs +I79 +sVr +I5 +sV! +I1 +sVt +I9 +sVv +I1 +sVy +I1 +sV; +I2 +sV. +I6 +ssVum +p2202 +(dp2203 +Va +I2 +sV +I3 +sVb +I7 +sVe +I2 +sVi +I3 +sVm +I9 +sV, +I2 +sVo +I3 +sVp +I3 +sVs +I10 +ssVul +p2204 +(dp2205 +Va +I37 +sV +I33 +sVe +I3 +sVd +I198 +sVg +I5 +sVi +I3 +sVl +I18 +sVo +I5 +sV. +I5 +sVs +I1 +sV! +I1 +sVt +I12 +sVy +I1 +sV; +I1 +sVn +I1 +sV, +I2 +ssV.z +p2206 +(dp2207 +Vi +I1 +ssVun +p2208 +(dp2209 +Va +I16 +sV +I5 +sVc +I24 +sVe +I23 +sVd +I66 +sVg +I29 +sVf +I5 +sVi +I27 +sVh +I10 +sVk +I6 +sVm +I1 +sVl +I6 +sVn +I5 +sVp +I4 +sVs +I3 +sVr +I1 +sVu +I1 +sVt +I47 +sVw +I5 +sV. +I1 +ssVui +p2210 +(dp2211 +Va +I1 +sVc +I1 +sVe +I4 +sVl +I6 +sVn +I6 +sVp +I1 +sVs +I9 +sVr +I15 +sVu +I1 +sVt +I28 +sVv +I4 +ssVue +p2212 +(dp2213 +V +I21 +sVd +I12 +sVl +I2 +sV. +I1 +sVs +I24 +sVt +I5 +sVn +I22 +sV, +I4 +ssVud +p2214 +(dp2215 +V +I1 +sVe +I29 +sVd +I5 +sVg +I14 +sVi +I9 +sV. +I1 +ssVug +p2216 +(dp2217 +V +I1 +sVl +I1 +sVg +I3 +sVh +I150 +ssV.s +p2218 +(dp2219 +Ve +I1 +ssV.t +p2220 +(dp2221 +Vy +I1 +sVx +I3 +ssV.u +p2222 +(dp2223 +Vi +I1 +ssVuc +p2224 +(dp2225 +Va +I8 +sVc +I5 +sVe +I10 +sVi +I1 +sVh +I123 +sVk +I9 +sV. +I1 +sVt +I21 +ssVub +p2226 +(dp2227 +Vb +I4 +sVd +I5 +sVj +I13 +sVm +I9 +sVl +I10 +sVs +I3 +sVt +I22 +ssVac +p2228 +(dp2229 +Va +I2 +sV +I1 +sVc +I45 +sVe +I37 +sVi +I4 +sVh +I55 +sVk +I8 +sVq +I16 +sVr +I5 +sVu +I2 +sVt +I59 +sVy +I12 +ssVab +p2230 +(dp2231 +Vi +I16 +sVh +I3 +sVj +I1 +sVl +I128 +sVo +I33 +sVs +I15 +sVu +I1 +ssVae +p2232 +(dp2233 +Vl +I2 +ssVad +p2234 +(dp2235 +Va +I4 +sV +I117 +sVe +I50 +sVd +I12 +sVf +I5 +sVi +I12 +sVm +I14 +sV, +I3 +sVo +I2 +sVn +I1 +sVs +I2 +sVu +I2 +sVv +I23 +sVy +I109 +sV. +I1 +sVl +I1 +ssVag +p2236 +(dp2237 +Va +I38 +sVe +I79 +sVg +I3 +sVi +I16 +sVo +I8 +sVr +I18 +sVu +I3 +ssVaf +p2238 +(dp2239 +Vr +I9 +sVe +I3 +sVt +I18 +sVf +I59 +ssVai +p2240 +(dp2241 +Vd +I39 +sVg +I1 +sVm +I10 +sVl +I11 +sVn +I178 +sVs +I6 +sVr +I22 +sVt +I10 +ssVak +p2242 +(dp2243 +Va +I1 +sV +I15 +sVe +I97 +sVf +I5 +sVi +I19 +sVn +I1 +sVs +I3 +ssVTu +p2244 +(dp2245 +Ve +I2 +ssVam +p2246 +(dp2247 +Va +I5 +sV +I121 +sVb +I2 +sVe +I110 +sVi +I33 +sVm +I6 +sV, +I9 +sVo +I3 +sVp +I7 +sVu +I5 +ssVal +p2248 +(dp2249 +Va +I5 +sV +I91 +sVc +I3 +sVe +I15 +sVd +I78 +sVf +I8 +sVi +I12 +sVk +I12 +sVm +I13 +sVl +I277 +sVo +I24 +sV. +I5 +sVs +I9 +sVr +I8 +sVu +I4 +sVt +I25 +sVw +I27 +sVy +I1 +sV, +I12 +ssVao +p2250 +(dp2251 +Vr +I4 +ssVan +p2252 +(dp2253 +V! +I2 +sV +I307 +sV' +I17 +sV, +I35 +sV. +I9 +sV; +I7 +sV: +I1 +sVa +I12 +sVc +I83 +sVe +I8 +sVd +I717 +sVg +I50 +sVi +I17 +sVk +I7 +sVl +I2 +sVo +I13 +sVn +I67 +sVq +I5 +sVs +I25 +sVt +I68 +sVw +I4 +sVv +I1 +sVy +I103 +sVx +I12 +ssVTo +p2254 +(dp2255 +V +I11 +sV- +I1 +ssVas +p2256 +(dp2257 +Va +I3 +sV +I521 +sVc +I4 +sVe +I28 +sVi +I32 +sVh +I7 +sVk +I9 +sV, +I3 +sVo +I28 +sV. +I1 +sVp +I1 +sVs +I45 +sV! +I1 +sVu +I21 +sVt +I76 +sVy +I13 +sV; +I1 +ssVar +p2258 +(dp2259 +Va +I35 +sV +I114 +sVc +I15 +sVb +I1 +sVe +I138 +sVd +I69 +sVg +I6 +sVf +I2 +sVi +I67 +sVk +I16 +sVm +I21 +sVl +I28 +sVo +I2 +sVn +I16 +sVs +I31 +sVr +I80 +sVt +I121 +sVy +I31 +sV; +I1 +sV. +I2 +sV, +I4 +ssVau +p2260 +(dp2261 +Vc +I1 +sVd +I2 +sVg +I47 +sVl +I6 +sVn +I10 +sVs +I20 +sVt +I12 +ssVat +p2262 +(dp2263 +Va +I1 +sV +I560 +sVc +I15 +sVe +I176 +sV' +I1 +sVi +I215 +sVh +I45 +sV, +I12 +sVo +I3 +sVl +I4 +sVr +I2 +sVu +I27 +sVt +I87 +sVy +I1 +sV; +I1 +sV. +I1 +ssVTh +p2264 +(dp2265 +Va +I4 +sVe +I47 +sVi +I16 +sVo +I3 +sVr +I2 +sVu +I4 +ssVTi +p2266 +(dp2267 +Vm +I1 +ssVay +p2268 +(dp2269 +Va +I1 +sV +I140 +sVe +I5 +sV' +I1 +sVi +I7 +sV, +I16 +sV. +I11 +sVs +I43 +sV; +I8 +ssVax +p2270 +(dp2271 +V +I2 +sVe +I2 +ssVTe +p2272 +(dp2273 +Vx +I1 +sVl +I1 +ssV80 +p2274 +(dp2275 +V0 +I1 +sV +I1 +ssVAf +p2276 +(dp2277 +Vt +I3 +ssV(a +p2278 +(dp2279 +V +I1 +sVs +I3 +sVt +I1 +sVn +I2 +ssVni +p2280 +(dp2281 +Va +I2 +sVc +I11 +sVe +I18 +sVg +I9 +sVf +I2 +sVl +I1 +sVo +I26 +sVn +I50 +sVs +I24 +sVu +I1 +sVt +I24 +sVv +I5 +ssVnj +p2282 +(dp2283 +Vu +I8 +sVe +I2 +sVo +I5 +ssVnk +p2284 +(dp2285 +V +I27 +sVe +I1 +sVf +I1 +sVi +I9 +sV, +I7 +sVs +I4 +ssVnl +p2286 +(dp2287 +Vy +I56 +sVa +I1 +sVi +I1 +sVu +I5 +sVe +I2 +ssVnw +p2288 +(dp2289 +Va +I46 +sVh +I4 +sVe +I2 +sVi +I2 +sVo +I1 +ssVnn +p2290 +(dp2291 +Vi +I6 +sVe +I42 +sVu +I1 +sVo +I42 +ssVno +p2292 +(dp2293 +V +I72 +sVc +I2 +sVb +I1 +sVe +I1 +sVf +I1 +sVi +I1 +sVm +I3 +sVn +I70 +sVs +I1 +sVr +I20 +sVu +I29 +sVt +I345 +sVw +I134 +ssV46 +p2294 +(dp2295 +V] +I1 +ssVna +p2296 +(dp2297 +Vc +I2 +sVb +I19 +sVd +I1 +sVm +I7 +sVl +I99 +sVn +I12 +sVr +I7 +sVt +I67 +sVv +I1 +sVy +I1 +ssVnb +p2298 +(dp2299 +Ve +I15 +ssVnc +p2300 +(dp2301 +Ve +I223 +sVi +I15 +sVh +I3 +sVl +I34 +sVo +I18 +sVr +I7 +sVu +I4 +sVt +I2 +sVy +I12 +ssVnd +p2302 +(dp2303 +Va +I7 +sV +I775 +sV" +I1 +sVe +I127 +sV' +I5 +sVi +I35 +sV- +I3 +sV, +I34 +sVo +I26 +sVn +I8 +sVs +I43 +sVr +I3 +sVu +I26 +sV; +I6 +sV. +I7 +sV? +I1 +sVl +I3 +ssVne +p2304 +(dp2305 +V +I94 +sV' +I2 +sV, +I25 +sV. +I10 +sV; +I5 +sV? +I3 +sVa +I11 +sVc +I31 +sVe +I9 +sVd +I71 +sVg +I9 +sVf +I3 +sVi +I6 +sVm +I3 +sVo +I2 +sVn +I4 +sVq +I1 +sVs +I91 +sVr +I47 +sVt +I5 +sVw +I14 +sVv +I44 +sVy +I13 +sVx +I18 +ssVnf +p2306 +(dp2307 +Va +I2 +sVe +I9 +sVi +I16 +sVl +I11 +sVo +I19 +sVr +I1 +sVu +I7 +ssVng +p2308 +(dp2309 +Va +I12 +sV +I609 +sV! +I1 +sVe +I40 +sV' +I7 +sVf +I19 +sVi +I4 +sV- +I11 +sVl +I11 +sVo +I1 +sV. +I22 +sVs +I47 +sVr +I14 +sVu +I9 +sVt +I11 +sV; +I10 +sV: +I4 +sV, +I39 +sV? +I3 +ssVTN +p2310 +(dp2311 +VE +I1 +ssVny +p2312 +(dp2313 +V +I80 +sVb +I1 +sV) +I2 +sVm +I1 +sV, +I1 +sVo +I7 +sV. +I2 +sVt +I12 +sVw +I1 +ssVnz +p2314 +(dp2315 +Va +I2 +ssVTM +p2316 +(dp2317 +VA +I1 +sV +I1 +ssVTH +p2318 +(dp2319 +VI +I2 +sVA +I2 +sVE +I20 +sV. +I1 +ssVTI +p2320 +(dp2321 +VA +I1 +sVC +I2 +sVE +I2 +sVO +I2 +sVV +I1 +ssVnp +p2322 +(dp2323 +Vr +I2 +sVl +I3 +ssVnq +p2324 +(dp2325 +Vu +I11 +ssVnr +p2326 +(dp2327 +Va +I3 +sVi +I1 +sVe +I1 +ssVTE +p2328 +(dp2329 +VX +I6 +sVR +I1 +sVD +I3 +sVN +I8 +ssVnt +p2330 +(dp2331 +Va +I29 +sV +I220 +sVe +I113 +sVf +I1 +sVi +I95 +sVh +I18 +sVm +I8 +sV, +I45 +sVo +I22 +sV. +I29 +sVs +I33 +sVr +I34 +sV! +I9 +sVy +I3 +sVu +I1 +sV; +I12 +sV? +I1 +sVl +I30 +ssVHu +p2332 +(dp2333 +Vr +I1 +sVm +I2 +sVn +I1 +ssVnv +p2334 +(dp2335 +Vi +I39 +sVa +I2 +sVe +I26 +sVy +I1 +ssVTA +p2336 +(dp2337 +VB +I1 +sVR +I2 +sVL +I1 +ssVa +p2338 +(dp2339 +V" +I1 +sVE +I1 +sVD +I1 +sVM +I1 +sVP +I1 +sVU +I1 +sVV +I2 +sVa +I4 +sVc +I25 +sVb +I6 +sVe +I1 +sVd +I28 +sVg +I16 +sVf +I29 +sVi +I9 +sVh +I18 +sVk +I3 +sVj +I1 +sVm +I41 +sVl +I29 +sVo +I7 +sVn +I4 +sVq +I1 +sVp +I18 +sVs +I41 +sVr +I18 +sVu +I1 +sVt +I14 +sVw +I30 +sVv +I13 +sVy +I9 +ssVAC +p2340 +(dp2341 +VH +I1 +sVT +I1 +ssVAB +p2342 +(dp2343 +VI +I2 +sVO +I1 +ssV's +p2344 +(dp2345 +V +I115 +sV, +I3 +sV. +I2 +ssVAD +p2346 +(dp2347 +VY +I35 +sV +I1 +sVE +I1 +sV, +I1 +ssVAG +p2348 +(dp2349 +VE +I3 +ssVE, +p2350 +(dp2351 +V +I2 +ssVAI +p2352 +(dp2353 +VM +I1 +sVL +I1 +sVN +I2 +ssVxu +p2354 +(dp2355 +Vl +I1 +ssVAM +p2356 +(dp2357 +VA +I3 +sVE +I4 +ssVAL +p2358 +(dp2359 +VI +I5 +sV +I1 +sVL +I2 +sVD +I3 +sV, +I1 +ssVa. +p2360 +(dp2361 +V +I2 +sVt +I1 +ssVy: +p2362 +(dp2363 +V +I1 +ssVT, +p2364 +(dp2365 +V +I2 +ssVAR +p2366 +(dp2367 +V +I2 +sVR +I4 +sVE +I2 +sVT +I3 +ssVT* +p2368 +(dp2369 +V +I2 +sV* +I2 +ssVAT +p2370 +(dp2371 +V +I2 +sV: +I1 +sVT +I1 +sVH +I8 +ssVAV +p2372 +(dp2373 +VE +I2 +sVO +I1 +ssVAY +p2374 +(dp2375 +V +I1 +ssVa; +p2376 +(dp2377 +V +I3 +ssV-s +p2378 +(dp2379 +Vi +I1 +sVa +I1 +sVu +I2 +sVh +I1 +ssVg! +p2380 +(dp2381 +V +I1 +ssVT +p2382 +(dp2383 +VG +I8 +sVP +I1 +sVf +I1 +sVI +I3 +sVH +I1 +sVM +I1 +sVL +I2 +sVO +I1 +sVN +I3 +sVp +I2 +sVm +I1 +sVi +I1 +sVd +I1 +ssVT! +p2384 +(dp2385 +V +I1 +sV* +I1 +ssV"o +p2386 +(dp2387 +Vr +I1 +sVn +I1 +ssVn* +p2388 +(dp2389 +V* +I2 +ssV'T +p2390 +(dp2391 +V +I1 +ssVn, +p2392 +(dp2393 +V +I182 +sV" +I1 +ssVAd +p2394 +(dp2395 +Vi +I8 +ssVn. +p2396 +(dp2397 +V +I68 +sV" +I3 +ssVn/ +p2398 +(dp2399 +VC +I1 +ssVn +p2400 +(dp2401 +V" +I1 +sV/ +I1 +sV1 +I1 +sV3 +I1 +sV2 +I1 +sV5 +I1 +sV9 +I1 +sVA +I2 +sVE +I7 +sVF +I4 +sVI +I30 +sVK +I1 +sVM +I8 +sVL +I13 +sVS +I5 +sVR +I3 +sVU +I4 +sVT +I3 +sVW +I3 +sVV +I2 +sV[ +I1 +sVa +I154 +sVc +I31 +sVb +I51 +sVe +I50 +sVd +I26 +sVg +I19 +sVf +I52 +sVi +I87 +sVh +I109 +sVk +I5 +sVj +I3 +sVm +I91 +sVl +I19 +sVo +I127 +sVn +I14 +sVp +I31 +sVs +I77 +sVr +I24 +sVu +I21 +sVt +I254 +sVw +I88 +sVv +I10 +sVy +I41 +ssVn! +p2402 +(dp2403 +V +I8 +sV" +I1 +ssVn" +p2404 +(dp2405 +V +I1 +ssVTR +p2406 +(dp2407 +VI +I2 +sVA +I1 +ssVAm +p2408 +(dp2409 +V +I1 +sVo +I3 +ssVAl +p2410 +(dp2411 +Vi +I9 +sVl +I5 +ssVn' +p2412 +(dp2413 +Vs +I26 +sVt +I1 +ssVn: +p2414 +(dp2415 +V +I4 +ssVn; +p2416 +(dp2417 +V +I39 +ssVAu +p2418 +(dp2419 +Vs +I6 +ssVAt +p2420 +(dp2421 +V +I11 +ssVAw +p2422 +(dp2423 +Va +I1 +ssVn? +p2424 +(dp2425 +V +I3 +ssVn1 +p2426 +(dp2427 +V1 +I1 +sV0 +I3 +ssVG" +p2428 +(dp2429 +V +I1 +sssb. \ No newline at end of file diff --git a/examples/filters/guess-language/fr.data b/examples/filters/guess-language/fr.data new file mode 100644 index 0000000..597f9c5 --- /dev/null +++ b/examples/filters/guess-language/fr.data @@ -0,0 +1,22710 @@ +(itrigram +Trigram +p1 +(dp2 +S'length' +p3 +F8394.978022603751 +sS'lut' +p4 +(dp5 +V-D +p6 +(dp7 +Va +I3 +ssVG" +p8 +(dp9 +V +I2 +ssVG +p10 +(dp11 +Va +I1 +sVB +I2 +ssVG- +p12 +(dp13 +Vt +I5 +sVT +I1 +ssVGU +p14 +(dp15 +VT +I8 +ssVGR +p16 +(dp17 +V +I1 +ssVGE +p18 +(dp19 +VS +I3 +sVN +I1 +ssVGL +p20 +(dp21 +VI +I1 +ssVGI +p22 +(dp23 +VV +I1 +ssVGu +p24 +(dp25 +Vi +I1 +sVt +I26 +ssVGr +p26 +(dp27 +Va +I5 +sVe +I1 +ssVGe +p28 +(dp29 +Vr +I1 +sVo +I1 +sVn +I3 +ssVGa +p30 +(dp31 +Vr +I1 +sVu +I2 +sVl +I1 +sV +I1 +ssVGo +p32 +(dp33 +Va +I1 +ssVGi +p34 +(dp35 +Vr +I9 +sVv +I1 +ssVZ, +p36 +(dp37 +V +I1 +ssVZ +p38 +(dp39 +VL +I1 +ssVr +p40 +(dp41 +Ve +I319 +ssVs +p42 +(dp43 +V +I148 +sVe +I2 +sV- +I2 +sV, +I3 +sV; +I1 +sV_ +I1 +ssVq +p44 +(dp45 +Vu +I4 +ssVv +p46 +(dp47 +Vr +I2 +sVe +I4 +ssVt +p48 +(dp49 +Vr +I1 +sVe +I9 +ssVn +p50 +(dp51 +Ve +I24 +ssVl +p52 +(dp53 +Ve +I7 +ssVm +p54 +(dp55 +Ve +I30 +ssVc +p56 +(dp57 +Vh +I2 +sVe +I23 +sVl +I14 +ssVg +p58 +(dp59 +Vr +I8 +sVe +I7 +sVl +I1 +ssVd +p60 +(dp61 +Ve +I4 +ssV-c +p62 +(dp63 +Vi +I14 +sVh +I6 +sVe +I16 +sVo +I2 +ssVty +p64 +(dp65 +Va +I1 +sV +I9 +sVr +I2 +sVl +I1 +sV, +I1 +ssVZa +p66 +(dp67 +Vm +I1 +ssVtw +p68 +(dp69 +Va +I3 +sVo +I1 +ssV-o +p70 +(dp71 +Vf +I1 +sVn +I7 +ssV-n +p72 +(dp73 +Ve +I1 +sVo +I15 +ssVt +p74 +(dp75 +Ve +I1 +ssV-i +p76 +(dp77 +V8 +I1 +sVl +I83 +sVn +I5 +ssVM +p78 +(dp79 +Vo +I1 +ssV-h +p80 +(dp81 +Ve +I1 +sVu +I1 +sVo +I3 +ssVtq +p82 +(dp83 +Vu +I1 +ssVm' +p84 +(dp85 +Va +I46 +sVe +I12 +sV +I7 +sVh +I1 +sVo +I6 +sVi +I2 +sVy +I1 +ssVm +p86 +(dp87 +Va +I7 +sV +I1 +sVc +I2 +sVb +I1 +sVe +I6 +sVd +I10 +sVi +I2 +sV( +I2 +sVl +I1 +sVo +I3 +sVq +I1 +sVp +I2 +sVs +I1 +sVr +I1 +sVt +I3 +ssV-t +p88 +(dp89 +Ve +I23 +sVh +I1 +sV- +I20 +sVm +I6 +sVr +I12 +sVu +I4 +ssVm, +p90 +(dp91 +V +I9 +ssVm. +p92 +(dp93 +V +I9 +ssVm) +p94 +(dp95 +V, +I1 +sV. +I1 +ssV-w +p96 +(dp97 +Vi +I1 +ssV"l +p98 +(dp99 +Ve +I1 +ssVtm +p100 +(dp101 +V +I5 +sV" +I1 +sVl +I2 +ssV9] +p102 +(dp103 +V +I2 +ssVm> +p104 +(dp105 +V +I1 +ssVm: +p106 +(dp107 +V +I2 +ssV9, +p108 +(dp109 +V +I8 +ssV9. +p110 +(dp111 +V +I5 +ssV9 +p112 +(dp113 +VU +I1 +sVD +I1 +ssV-r +p114 +(dp115 +Va +I2 +sVo +I1 +ssV99 +p116 +(dp117 +V +I1 +sV, +I1 +sV1 +I1 +sV4 +I1 +sV7 +I1 +sV9 +I1 +sV8 +I1 +ssV98 +p118 +(dp119 +V +I1 +sV, +I1 +ssV9: +p120 +(dp121 +V +I1 +ssV91 +p122 +(dp123 +V +I2 +ssV90 +p124 +(dp125 +V +I2 +sV0 +I1 +ssVm_ +p126 +(dp127 +V, +I2 +sV. +I1 +ssV92 +p128 +(dp129 +V, +I2 +ssV95 +p130 +(dp131 +V, +I1 +ssV94 +p132 +(dp133 +V +I2 +sV, +I2 +ssV97 +p134 +(dp135 +V1 +I2 +sV +I1 +sV; +I1 +sV, +I1 +ssV96 +p136 +(dp137 +V, +I3 +ssVme +p138 +(dp139 +V! +I1 +sV +I462 +sV- +I4 +sV, +I44 +sV. +I16 +sV; +I11 +sV: +I5 +sV? +I1 +sV[ +I3 +sV_ +I4 +sVa +I2 +sVd +I11 +sVi +I20 +sVm +I4 +sVl +I1 +sVo +I1 +sVn +I379 +sVs +I187 +sVr +I54 +sVu +I27 +sVt +I48 +sVz +I6 +ssV +p140 +(dp141 +VQ +I1 +sV. +I1 +ssVma +p142 +(dp143 +V +I46 +sV +I59 +sV- +I1 +sV, +I3 +sVc +I7 +sVb +I4 +sVe +I2 +sVd +I67 +sVg +I25 +sVi +I262 +sVk +I3 +sVj +I14 +sVm +I1 +sVl +I72 +sV +I1 +sVn +I185 +sVs +I17 +sVr +I70 +sVu +I22 +sVt +I39 +sVy +I23 +sVx +I3 +ssVmb +p144 +(dp145 +Va +I34 +sV +I2 +sVe +I25 +sVi +I11 +sV +I1 +sVl +I39 +sVo +I88 +sV. +I1 +sV +I1 +sVr +I40 +ssVmm +p146 +(dp147 +Va +I26 +sVe +I313 +sV +I9 +sV +I4 +sVo +I9 +sVi +I5 +sVu +I13 +ssVml +p148 +(dp149 +V +I2 +sVe +I1 +ssVmo +p150 +(dp151 +Ve +I7 +sVd +I17 +sVi +I197 +sVm +I16 +sVl +I4 +sVn +I286 +sVq +I3 +sVs +I8 +sVr +I57 +sVu +I77 +sVt +I20 +sVv +I3 +sVy +I4 +sV. +I1 +ssVmn +p152 +(dp153 +V +I2 +sVi +I2 +sVa +I1 +sVo +I1 +ssVmi +p154 +(dp155 +V +I15 +sVe +I53 +sVd +I4 +sVg +I1 +sV +I20 +sV- +I1 +sVl +I85 +sVn +I36 +sVq +I1 +sVs +I75 +sVr +I27 +sVt +I39 +sV. +I1 +sV, +I8 +ssVmu +p156 +(dp157 +V +I2 +sVe +I2 +sVm +I1 +sVl +I5 +sVn +I13 +sVp +I3 +sVs +I16 +sVr +I2 +sVt +I2 +ssVmt +p158 +(dp159 +Ve +I2 +ssV 9 +p160 +(dp161 +V1 +I1 +sV0 +I3 +sV3 +I1 +sV2 +I2 +sV5 +I1 +sV4 +I1 +sV7 +I1 +sV6 +I1 +sV9 +I1 +sV8 +I1 +ssVmp +p162 +(dp163 +Va +I30 +sV +I5 +sVe +I17 +sVi +I11 +sVh +I1 +sV +I9 +sVl +I25 +sVo +I32 +sV, +I2 +sV +I3 +sVs +I48 +sVr +I16 +sVu +I8 +sVt +I15 +sV. +I1 +ssVms +p164 +(dp165 +V +I3 +sV, +I1 +sVt +I1 +sV. +I1 +ssV"p +p166 +(dp167 +Vu +I1 +ssVmy +p168 +(dp169 +Vs +I1 +sVr +I2 +ssVLe +p170 +(dp171 +V +I87 +sVc +I4 +sVb +I1 +sVg +I1 +sVi +I3 +sVm +I3 +sVs +I48 +sVu +I4 +sVt +I6 +sVy +I1 +ssVLa +p172 +(dp173 +V +I42 +sVv +I1 +sVm +I3 +sVt +I2 +sVn +I1 +ssVLo +p174 +(dp175 +Vi +I1 +sVm +I1 +sVs +I1 +sVu +I13 +sVn +I1 +ssV"s +p176 +(dp177 +Vm +I1 +ssVLi +p178 +(dp179 +Vs +I11 +sVm +I2 +sVt +I6 +sVn +I2 +ssVLu +p180 +(dp181 +Vc +I2 +ssVLE +p182 +(dp183 +V +I1 +sVF +I1 +sVM +I1 +sVQ +I1 +sVS +I1 +sVT +I2 +ssVLA +p184 +(dp185 +VI +I1 +sV +I1 +sVR +I1 +ssVLO +p186 +(dp187 +VR +I1 +ssVLL +p188 +(dp189 +V +I2 +sVE +I1 +ssVLI +p190 +(dp191 +VA +I1 +sVC +I2 +sVB +I1 +sVE +I1 +sVG +I1 +sVI +I1 +sVM +I3 +sVT +I3 +ssVLT +p192 +(dp193 +VA +I2 +ssVLU +p194 +(dp195 +VD +I2 +ssVLS +p196 +(dp197 +V, +I1 +ssVLP +p198 +(dp199 +VH +I1 +ssVL' +p200 +(dp201 +Va +I16 +sV +I1 +sVE +I1 +sVi +I1 +sV +I1 +sVh +I1 +sVo +I2 +sV +I1 +sVA +I2 +sVO +I2 +sVu +I4 +sVe +I2 +ssVL +p202 +(dp203 +VP +I2 +sVM +I1 +sVd +I1 +sVD +I1 +ssVL, +p204 +(dp205 +V +I1 +ssVm +p206 +(dp207 +Vt +I2 +ssVm +p208 +(dp209 +V +I15 +sVc +I4 +sVe +I11 +sVd +I14 +sVm +I4 +sVl +I5 +sVn +I1 +sVp +I5 +sVs +I8 +sVr +I17 +sVt +I22 +sV. +I2 +sV? +I1 +ssVm +p210 +(dp211 +Vr +I28 +sVt +I1 +sVn +I17 +ssVm +p212 +(dp213 +Vm +I66 +sVl +I5 +ssVm +p214 +(dp215 +Vn +I4 +ssV_[ +p216 +(dp217 +V2 +I1 +ssV_V +p218 +(dp219 +Va +I1 +sVo +I2 +ssV_T +p220 +(dp221 +Ve +I3 +ssV_S +p222 +(dp223 +Vi +I4 +sVe +I2 +ssV_R +p224 +(dp225 +Ve +I1 +ssV_P +p226 +(dp227 +Va +I1 +sVr +I8 +ssV_O +p228 +(dp229 +V +I1 +sVe +I1 +ssV_N +p230 +(dp231 +Vo +I1 +ssV_M +p232 +(dp233 +V +I10 +sVa +I2 +sVo +I2 +ssV_L +p234 +(dp235 +Va +I1 +sVe +I7 +sV' +I1 +ssV_J +p236 +(dp237 +Vo +I2 +ssV_I +p238 +(dp239 +Vt +I1 +ssV_H +p240 +(dp241 +Vi +I3 +sVe +I1 +sVo +I1 +ssV_E +p242 +(dp243 +Vx +I1 +sVl +I1 +ssV_D +p244 +(dp245 +Vi +I3 +ssV_C +p246 +(dp247 +Va +I9 +sVr +I1 +sVo +I2 +ssV_A +p248 +(dp249 +Vr +I1 +sVn +I1 +ssVr +p250 +(dp251 +Vl +I3 +sVt +I3 +sVn +I12 +ssV_u +p252 +(dp253 +Vt +I1 +sVn +I1 +ssVr +p254 +(dp255 +Vl +I13 +ssV_m +p256 +(dp257 +V +I1 +ssVr +p258 +(dp259 +Va +I4 +sVu +I11 +sVo +I6 +ssV_i +p260 +(dp261 +Vn +I1 +ssV_h +p262 +(dp263 +Vo +I1 +ssV_g +p264 +(dp265 +Vl +I1 +ssVr +p266 +(dp267 +Vt +I1 +ssVr +p268 +(dp269 +Vs +I139 +sVr +I38 +sVt +I3 +sVg +I1 +ssVr +p270 +(dp271 +V +I2 +sV +I22 +sV, +I5 +sV; +I2 +sV? +I1 +sVa +I17 +sVc +I33 +sVb +I1 +sVe +I25 +sVd +I10 +sVg +I6 +sVf +I11 +sVi +I2 +sVm +I15 +sVl +I1 +sVn +I1 +sVp +I77 +sVs +I61 +sVr +I1 +sVu +I1 +sVt +I23 +sVv +I26 +ssVr +p272 +(dp273 +Vc +I3 +sVm +I13 +sVt +I27 +sVv +I4 +ssVxf +p274 +(dp275 +Vo +I1 +ssV_; +p276 +(dp277 +V +I10 +ssV_: +p278 +(dp279 +V +I1 +ssV_. +p280 +(dp281 +V +I27 +sV, +I1 +ssV_, +p282 +(dp283 +V +I43 +ssV_) +p284 +(dp285 +V +I1 +ssV_ +p286 +(dp287 +Va +I2 +sVE +I1 +sVd +I4 +sV( +I1 +sVj +I1 +sVq +I1 +sVp +I1 +sVe +I1 +ssVr] +p288 +(dp289 +V +I2 +ssVr_ +p290 +(dp291 +V +I1 +sV; +I1 +sV. +I1 +ssV_ +p292 +(dp293 +Vp +I1 +sVl +I1 +ssVrt +p294 +(dp295 +Va +I43 +sV +I103 +sVe +I78 +sV@ +I2 +sVi +I188 +sVh +I4 +sV, +I10 +sVo +I23 +sV. +I8 +sV +I17 +sVs +I21 +sV! +I1 +sVu +I32 +sV +I1 +sVy +I2 +sV; +I4 +sVr +I2 +sV_ +I1 +ssVru +p296 +(dp297 +Va +I3 +sV +I7 +sVc +I5 +sVb +I5 +sVe +I10 +sVd +I9 +sVi +I28 +sVm +I1 +sV, +I2 +sVn +I5 +sVp +I2 +sVs +I9 +sVr +I9 +sVt +I17 +sVv +I1 +sV. +I1 +sVl +I1 +ssVrv +p298 +(dp299 +Va +I11 +sVe +I10 +sVi +I30 +sVo +I2 +sV +I2 +sVu +I2 +ssVrw +p300 +(dp301 +Va +I1 +sVo +I1 +ssVrp +p302 +(dp303 +V +I1 +sVa +I1 +sVs +I11 +sVr +I15 +sVe +I5 +ssVrq +p304 +(dp305 +Vu +I52 +ssVrr +p306 +(dp307 +Va +I42 +sVe +I106 +sVi +I76 +sVh +I1 +sV +I10 +sVo +I24 +sV +I4 +sVu +I1 +ssVrs +p308 +(dp309 +V! +I4 +sV +I324 +sV) +I1 +sVe +I18 +sVp +I1 +sV +I6 +sV +I1 +sV, +I60 +sVo +I37 +sV. +I24 +sVq +I8 +sVi +I6 +sVu +I5 +sVt +I5 +sVa +I19 +sV[ +I1 +sV: +I2 +sV; +I14 +sV? +I3 +ssVry +p310 +(dp311 +Vi +I2 +sV +I14 +sV* +I1 +sVm +I1 +sV, +I2 +ssVrz +p312 +(dp313 +Ve +I2 +ssVrd +p314 +(dp315 +Va +I30 +sV +I40 +sVe +I47 +sV' +I8 +sVi +I44 +sV +I3 +sV- +I1 +sV, +I8 +sVo +I19 +sV. +I3 +sV +I7 +sVs +I8 +sVr +I11 +sVu +I19 +sVw +I1 +sV; +I2 +sV: +I1 +sV[ +I1 +ssVre +p316 +(dp317 +V! +I8 +sV +I911 +sV) +I2 +sV- +I8 +sV, +I162 +sV. +I75 +sV; +I64 +sV: +I22 +sV? +I19 +sVg +I28 +sV[ +I2 +sV_ +I9 +sVa +I22 +sVc +I52 +sVb +I3 +sVe +I10 +sVd +I17 +sV +I19 +sVf +I15 +sVi +I24 +sVh +I1 +sVj +I1 +sVm +I115 +sVl +I30 +sVn +I335 +sVq +I9 +sVp +I44 +sVs +I370 +sVr +I50 +sVu +I59 +sVt +I62 +sVv +I38 +sVz +I32 +ssVrf +p318 +(dp319 +Va +I6 +sV +I3 +sVf +I1 +sVi +I1 +sVo +I1 +sVs +I2 +sVu +I2 +ssVrg +p320 +(dp321 +Va +I3 +sV +I24 +sVe +I36 +sVi +I14 +sVh +I1 +sV- +I1 +sV, +I4 +sVo +I2 +sVn +I2 +sV +I14 +sVu +I3 +sV/ +I4 +sV +I1 +sV; +I1 +sV. +I3 +ssVra +p322 +(dp323 +V +I17 +sV +I74 +sVp +I21 +sV- +I2 +sV, +I15 +sV. +I2 +sV: +I1 +sVa +I3 +sVc +I32 +sVb +I20 +sVe +I1 +sVd +I39 +sVg +I41 +sVf +I3 +sVi +I267 +sVh +I2 +sV +I1 +sVm +I21 +sVl +I27 +sVo +I6 +sVn +I224 +sV +I2 +sVs +I42 +sVr +I12 +sVu +I3 +sVt +I36 +sVv +I45 +sVy +I2 +ssVrb +p324 +(dp325 +Vi +I4 +sVa +I9 +sVk +I1 +sVr +I6 +sVe +I4 +ssVrc +p326 +(dp327 +V +I4 +sVc +I1 +sVe +I45 +sVi +I18 +sVh +I45 +sVk +I1 +sV, +I4 +sVo +I7 +sV +I1 +sV +I1 +sVs +I3 +sVr +I1 +sV +I1 +sV; +I1 +sV. +I3 +sVl +I1 +ssVrl +p328 +(dp329 +Va +I22 +sVe +I37 +sVd +I3 +sV +I6 +sVo +I3 +sVi +I3 +sVy +I1 +ssVrm +p330 +(dp331 +Va +I33 +sV +I4 +sV) +I1 +sVe +I58 +sVi +I27 +sVl +I1 +sVo +I11 +sV, +I1 +sV +I14 +sV. +I1 +ssVrn +p332 +(dp333 +Va +I44 +sV +I2 +sVe +I39 +sV +I12 +sVo +I3 +sV. +I1 +sVi +I10 +sVu +I1 +ssVro +p334 +(dp335 +V +I1 +sVa +I1 +sVc +I57 +sVb +I17 +sVd +I28 +sVg +I7 +sVf +I30 +sVi +I164 +sVh +I1 +sVj +I32 +sVm +I35 +sVl +I25 +sVo +I2 +sVn +I157 +sVq +I3 +sVp +I49 +sVs +I30 +sVr +I2 +sVu +I138 +sVt +I6 +sVv +I28 +sVy +I34 +ssVrh +p336 +(dp337 +Vu +I2 +ssVri +p338 +(dp339 +V +I8 +sV, +I6 +sV; +I2 +sV? +I1 +sV +I2 +sV_ +I1 +sVa +I35 +sVc +I16 +sVb +I36 +sVe +I146 +sVd +I16 +sVg +I34 +sVf +I5 +sV +I1 +sV +I24 +sVm +I15 +sVl +I15 +sVo +I19 +sVn +I53 +sVq +I12 +sVp +I12 +sVs +I102 +sVr +I38 +sVu +I2 +sVt +I110 +sVv +I63 +sVx +I9 +sVz +I3 +ssV_ +p340 +(dp341 +V +I1 +ssVr? +p342 +(dp343 +V +I10 +sV- +I1 +ssVr: +p344 +(dp345 +V +I11 +ssVr; +p346 +(dp347 +V +I48 +ssVr' +p348 +(dp349 +Va +I1 +sVs +I1 +sVo +I2 +ssVr +p350 +(dp351 +Vj +I13 +sVR +I2 +sVi +I28 +sV( +I1 +sV/ +I1 +sV1 +I2 +sV2 +I1 +sV9 +I1 +sVA +I4 +sVC +I24 +sVB +I2 +sVD +I2 +sVG +I1 +sVI +I2 +sVH +I1 +sVJ +I2 +sVM +I12 +sVL +I3 +sVN +I3 +sVP +I22 +sV +I1 +sVW +I1 +sV[ +I1 +sVZ +I2 +sVa +I84 +sV +I45 +sVc +I66 +sVb +I11 +sVe +I85 +sVd +I242 +sVg +I4 +sVf +I25 +sV +I10 +sVh +I7 +sV +I5 +sVm +I64 +sVl +I302 +sVo +I27 +sVn +I25 +sVq +I53 +sVp +I71 +sVs +I88 +sVr +I17 +sVu +I63 +sVt +I56 +sVw +I3 +sVv +I26 +sVy +I2 +ssVr! +p352 +(dp353 +V +I6 +ssVr, +p354 +(dp355 +V +I204 +ssVr- +p356 +(dp357 +Vd +I3 +sVt +I11 +sVl +I5 +ssVr. +p358 +(dp359 +VA +I1 +sV +I92 +sV +I1 +sV- +I1 +sV0 +I1 +ssVr/ +p360 +(dp361 +VN +I1 +ssVr* +p362 +(dp363 +V +I2 +ssV, +p364 +(dp365 +V +I1 +ssVQu +p366 +(dp367 +Va +I12 +sVi +I5 +sVe +I26 +sVo +I8 +sV' +I6 +ssVQU +p368 +(dp369 +VI +I1 +sVE +I1 +sV' +I2 +ssVd. +p370 +(dp371 +V +I11 +ssVd, +p372 +(dp373 +V +I31 +ssVd- +p374 +(dp375 +Va +I1 +sVi +I6 +sVo +I1 +sVp +I1 +sVs +I2 +sVr +I2 +sVT +I1 +sVw +I1 +ssVd) +p376 +(dp377 +V: +I1 +ssVq +p378 +(dp379 +Vu +I14 +ssVd' +p380 +(dp381 +Va +I91 +sVA +I18 +sV +I1 +sVE +I20 +sVi +I16 +sVh +I27 +sV +I30 +sVo +I21 +sV +I1 +sV +I26 +sVs +I1 +sVu +I109 +sVO +I3 +sVy +I2 +sVe +I53 +sVU +I1 +sVI +I3 +ssVs +p382 +(dp383 +Va +I8 +sV +I81 +sVe +I47 +sVi +I13 +sVh +I2 +sV, +I37 +sVo +I11 +sV. +I11 +sVu +I36 +sV; +I5 +sV? +I3 +ssVr +p384 +(dp385 +Va +I48 +sVe +I31 +sV +I15 +sV +I2 +sVo +I15 +sVi +I75 +sVu +I1 +ssVu +p386 +(dp387 +Vs +I1 +sVo +I1 +ssVt +p388 +(dp389 +Va +I276 +sVe +I34 +sV +I80 +sVh +I1 +sVo +I21 +sVi +I34 +sVr +I51 +sVu +I5 +ssVd +p390 +(dp391 +VC +I1 +sVB +I4 +sVE +I2 +sVI +I3 +sVJ +I1 +sVM +I1 +sVP +I3 +sVS +I2 +sVW +I1 +sVV +I1 +sV[ +I1 +sV_ +I1 +sVa +I22 +sV +I4 +sVc +I9 +sVb +I20 +sVe +I13 +sVd +I24 +sVg +I2 +sVf +I9 +sVi +I26 +sVh +I7 +sVj +I10 +sVm +I15 +sVl +I16 +sVo +I29 +sVn +I5 +sVq +I5 +sVp +I26 +sVs +I14 +sVr +I7 +sVu +I6 +sVt +I16 +sVw +I4 +sVv +I6 +sVy +I8 +ssVv +p392 +(dp393 +Va +I4 +sVe +I6 +sV +I20 +sV +I1 +sVo +I15 +sVi +I2 +sVu +I1 +ssVi +p394 +(dp395 +Vs +I1 +sVm +I1 +sVt +I3 +sVd +I1 +ssVd? +p396 +(dp397 +V +I2 +ssVj +p398 +(dp399 +V +I17 +sVe +I4 +sVo +I3 +ssVd: +p400 +(dp401 +V +I2 +ssVl +p402 +(dp403 +Va +I36 +sVe +I13 +sVi +I21 +sV +I3 +sVo +I4 +sV +I3 +sVu +I1 +ssVo +p404 +(dp405 +Vd +I3 +sVl +I6 +sVt +I1 +ssVn +p406 +(dp407 +Va +I7 +sVe +I5 +sVi +I16 +sV +I1 +sVo +I15 +sV +I16 +sVu +I1 +ssVa +p408 +(dp409 +Vt +I16 +sVb +I9 +sVu +I2 +sVl +I3 +sVn +I3 +ssVc +p410 +(dp411 +Va +I2 +sVe +I20 +sVi +I28 +sVh +I19 +sVl +I9 +sVo +I27 +sVr +I37 +sVu +I22 +ssVb +p412 +(dp413 +Va +I8 +sVi +I1 +sVr +I4 +ssVe +p414 +(dp415 +V +I106 +sV, +I28 +sV. +I16 +sVs +I57 +sVn +I6 +sV; +I9 +sV: +I3 +sV[ +I1 +sV? +I2 +ssVd +p416 +(dp417 +Va +I2 +sVe +I12 +sVi +I47 +sV +I6 +sVr +I2 +sVu +I8 +ssVg +p418 +(dp419 +Va +I8 +sVe +I1 +sVi +I4 +sV +I4 +sVl +I3 +sVo +I140 +sVn +I2 +sV +I1 +sVr +I2 +sVu +I2 +sVy +I1 +ssVf +p420 +(dp421 +Va +I5 +sVe +I5 +sVi +I4 +sVl +I4 +sV +I3 +sVr +I1 +sVu +I3 +ssV[ +p422 +(dp423 +V1 +I1 +ssV_ +p424 +(dp425 +V, +I3 +ssVdn +p426 +(dp427 +Vi +I2 +ssVdo +p428 +(dp429 +V +I13 +sVc +I16 +sVe +I1 +sVg +I2 +sVi +I14 +sVm +I13 +sV, +I11 +sVn +I203 +sVs +I5 +sVr +I37 +sVu +I64 +sVw +I4 +sV[ +I2 +sV. +I5 +sV_ +I1 +sVl +I9 +ssV; +p430 +(dp431 +V +I17 +ssV: +p432 +(dp433 +V +I8 +ssVdj +p434 +(dp435 +Vu +I1 +ssV? +p436 +(dp437 +V +I8 +ssVdi +p438 +(dp439 +V +I3 +sV, +I1 +sV1 +I8 +sVa +I43 +sVc +I13 +sVe +I34 +sVd +I393 +sVg +I13 +sVf +I13 +sV +I1 +sV +I2 +sVk +I1 +sVm +I3 +sVl +I3 +sVo +I2 +sVn +I41 +sVq +I6 +sVp +I1 +sVs +I151 +sVr +I50 +sVu +I5 +sVt +I434 +sVv +I5 +sVx +I25 +ssVdd +p440 +(dp441 +Vi +I8 +sVe +I1 +ssVde +p442 +(dp443 +V! +I12 +sV +I1745 +sV- +I1 +sV, +I177 +sV. +I85 +sV; +I49 +sV: +I18 +sV? +I7 +sVM +I1 +sV_ +I8 +sVa +I11 +sVc +I9 +sVb +I1 +sVd +I11 +sVg +I1 +sVf +I1 +sVm +I130 +sVl +I8 +sVn +I34 +sVp +I9 +sVs +I430 +sVr +I84 +sVu +I155 +sVt +I1 +sVv +I40 +sVy +I3 +sVx +I1 +sVz +I9 +ssVdb +p444 +(dp445 +Ve +I1 +ssVda +p446 +(dp447 +V +I25 +sVb +I6 +sVd +I1 +sVg +I1 +sVi +I54 +sV- +I9 +sVj +I2 +sVm +I46 +sVl +I10 +sVn +I401 +sVy +I5 +sVs +I2 +sVr +I1 +sVt +I33 +sVv +I9 +sV[ +I1 +sV; +I3 +sV: +I1 +sV, +I3 +sV_ +I1 +ssV, +p448 +(dp449 +V +I78 +ssV. +p450 +(dp451 +V +I31 +sV- +I2 +ssVdv +p452 +(dp453 +Vi +I4 +sVa +I1 +sVe +I1 +ssV +p454 +(dp455 +Vp +I47 +sVC +I4 +sVM +I1 +sVR +I2 +sVU +I1 +sV_ +I2 +sVa +I27 +sV +I27 +sVc +I17 +sVb +I5 +sVe +I29 +sVd +I124 +sVg +I2 +sVf +I7 +sVi +I6 +sVh +I2 +sVj +I4 +sVm +I14 +sVl +I32 +sVo +I2 +sVn +I8 +sVq +I23 +sV +I5 +sVs +I15 +sVr +I5 +sVu +I9 +sVt +I11 +sVv +I6 +ssVdu +p456 +(dp457 +V! +I1 +sV +I315 +sVc +I14 +sVe +I11 +sVi +I30 +sVm +I1 +sVl +I1 +sV, +I8 +sVq +I1 +sVs +I2 +sVr +I12 +sVt +I1 +sVv +I1 +sV_ +I1 +sV? +I1 +ssVdr +p458 +(dp459 +Va +I31 +sVi +I9 +sVe +I108 +sV +I2 +sVo +I24 +ssVds +p460 +(dp461 +V +I42 +sV; +I1 +sV- +I1 +sV, +I11 +sV. +I4 +ssVd_ +p462 +(dp463 +V, +I2 +sV. +I1 +ssVd[ +p464 +(dp465 +V3 +I1 +ssVw +p466 +(dp467 +VA +I1 +sVb +I1 +sVd +I1 +sVi +I1 +sVJ +I1 +sVM +I1 +sVL +I2 +sVo +I1 +sVN +I2 +sVy +I1 +sVt +I9 +sVY +I1 +ssVw. +p468 +(dp469 +Vi +I1 +sV +I2 +sVg +I2 +ssVw, +p470 +(dp471 +V +I3 +ssV +p472 +(dp473 +Vt +I2 +ssV +p474 +(dp475 +Vt +I4 +ssV93 +p476 +(dp477 +V, +I1 +ssVw: +p478 +(dp479 +V +I1 +sV/ +I2 +ssV02 +p480 +(dp481 +V +I3 +sV* +I1 +sV] +I1 +sV, +I3 +sV/ +I1 +ssV03 +p482 +(dp483 +V +I4 +sV, +I1 +ssV00 +p484 +(dp485 +V +I13 +sV+ +I1 +sV, +I1 +sV1 +I4 +sV0 +I11 +sV3 +I2 +sV2 +I5 +sV4 +I1 +ssV01 +p486 +(dp487 +V( +I2 +sV, +I1 +sV +I4 +ssV06 +p488 +(dp489 +V. +I1 +ssV04 +p490 +(dp491 +V +I1 +ssV05 +p492 +(dp493 +V, +I1 +ssV0; +p494 +(dp495 +V +I3 +ssV09 +p496 +(dp497 +V +I1 +sV, +I1 +ssV0 +p498 +(dp499 +Va +I1 +sV +I11 +sVe +I1 +sVD +I1 +sVj +I1 +sVm +I2 +sVn +I1 +sVs +I2 +sVd +I3 +ssV0% +p500 +(dp501 +V +I1 +ssV0+ +p502 +(dp503 +V +I1 +ssV0. +p504 +(dp505 +V +I2 +sVz +I2 +sVt +I2 +ssV0, +p506 +(dp507 +V +I4 +ssVd +p508 +(dp509 +Vt +I2 +sVn +I11 +ssVwe +p510 +(dp511 +V +I12 +sVr +I3 +sVv +I1 +ssVd +p512 +(dp513 +Vs +I7 +sVr +I3 +sVl +I6 +ssVd +p514 +(dp515 +V +I15 +sVc +I23 +sVb +I9 +sVe +I14 +sVd +I4 +sVg +I10 +sVf +I12 +sVj +I21 +sVm +I18 +sVl +I17 +sVn +I1 +sVp +I15 +sVs +I31 +sVr +I6 +sVt +I29 +sVv +I10 +sV. +I1 +ssVwo +p516 +(dp517 +V +I1 +sVr +I14 +sVu +I2 +ssVwn +p518 +(dp519 +Vs +I1 +sVl +I3 +ssVwi +p520 +(dp521 +Vc +I1 +sVl +I7 +sVn +I3 +sVs +I3 +sVr +I1 +sVt +I20 +ssVwh +p522 +(dp523 +Va +I2 +sVi +I3 +sVe +I4 +sVo +I3 +ssVww +p524 +(dp525 +V: +I2 +sVw +I5 +sV. +I3 +ssVwt +p526 +(dp527 +Vo +I1 +ssVws +p528 +(dp529 +V +I2 +sVl +I3 +sV, +I1 +ssVwr +p530 +(dp531 +Vi +I2 +sVo +I2 +ssVwy +p532 +(dp533 +Ve +I1 +ssV0a +p534 +(dp535 +V. +I2 +ssVi +p536 +(dp537 +V +I16 +sVe +I2 +sVg +I2 +sV, +I2 +sV. +I2 +sVs +I1 +sVt +I7 +sV; +I2 +sV: +I1 +ssVi +p538 +(dp539 +Vc +I27 +sVr +I87 +sVm +I25 +sVg +I3 +ssVi +p540 +(dp541 +Vt +I2 +ssVC) +p542 +(dp543 +V +I1 +ssVC. +p544 +(dp545 +V +I1 +ssVC +p546 +(dp547 +Vo +I1 +sVL +I1 +sVD +I2 +sVd +I1 +ssVC' +p548 +(dp549 +V +I3 +sVe +I33 +ssVCI +p550 +(dp551 +VI +I2 +sVD +I1 +ssVCH +p552 +(dp553 +VA +I31 +sV +I2 +sVE +I2 +sVO +I2 +ssVCO +p554 +(dp555 +VB +I1 +sVN +I2 +ssVCL +p556 +(dp557 +VA +I1 +sVU +I2 +ssVCC +p558 +(dp559 +VX +I1 +sVC +I1 +ssVV +p560 +(dp561 +VE +I1 +ssVCA +p562 +(dp563 +VN +I4 +ssVCE +p564 +(dp565 +V +I3 +sVS +I1 +ssVCD +p566 +(dp567 +VI +I2 +ssVCX +p568 +(dp569 +VX +I1 +ssVCR +p570 +(dp571 +V. +I1 +ssVCU +p572 +(dp573 +VL +I1 +ssVCT +p574 +(dp575 +V +I9 +sVE +I2 +sV, +I2 +ssVCi +p576 +(dp577 +Vc +I1 +sVn +I2 +ssVCh +p578 +(dp579 +Va +I13 +sV +I1 +sVe +I2 +sVi +I4 +sVo +I1 +sVr +I1 +ssVCo +p580 +(dp581 +Vm +I28 +sVl +I4 +sV +I1 +sVn +I20 +sVp +I1 +sVr +I6 +sVu +I1 +ssVCl +p582 +(dp583 +Va +I2 +sVu +I1 +sVo +I1 +ssVV +p584 +(dp585 +Vn +I3 +ssVCa +p586 +(dp587 +Vc +I85 +sVe +I1 +sVd +I7 +sVm +I2 +sVl +I1 +sVn +I396 +sVs +I1 +sVr +I8 +sVt +I2 +sVy +I3 +ssVCe +p588 +(dp589 +V +I44 +sVc +I1 +sVl +I13 +sVn +I1 +sVp +I8 +sVs +I3 +sVr +I2 +sVu +I1 +sVt +I11 +ssVCr +p590 +(dp591 +V +I1 +sVo +I6 +ssVCu +p592 +(dp593 +Vn +I125 +ssVix +p594 +(dp595 +Va +I7 +sV +I52 +sVe +I1 +sVi +I4 +sV- +I2 +sV, +I6 +sV. +I7 +sV; +I2 +sV: +I1 +ssViz +p596 +(dp597 +Va +I7 +sVi +I4 +sVe +I2 +sVo +I1 +ssViq +p598 +(dp599 +Vu +I115 +ssVip +p600 +(dp601 +Va +I3 +sVe +I8 +sVp +I1 +sVi +I8 +sV* +I2 +sVm +I2 +sVl +I2 +sVo +I9 +sV +I1 +sVs +I1 +sVt +I3 +ssVis +p602 +(dp603 +V! +I1 +sV +I672 +sVp +I22 +sV- +I8 +sV, +I101 +sV. +I26 +sV; +I15 +sV: +I4 +sV? +I6 +sV_ +I2 +sVa +I80 +sVc +I32 +sVb +I11 +sVe +I169 +sVf +I3 +sVi +I110 +sV +I7 +sVk +I4 +sVm +I7 +sVl +I1 +sVo +I73 +sVq +I10 +sV +I23 +sVs +I170 +sVt +I89 +sVh +I4 +ssVir +p604 +(dp605 +Va +I53 +sV +I183 +sVc +I3 +sV +I1 +sVe +I329 +sVg +I3 +sV +I9 +sV +I1 +sVm +I3 +sV, +I25 +sVo +I21 +sV. +I13 +sVi +I14 +sVs +I18 +sVu +I7 +sVt +I1 +sV; +I3 +sV? +I4 +ssViu +p606 +(dp607 +Vs +I6 +sVm +I6 +ssVit +p608 +(dp609 +V! +I1 +sV +I1361 +sV- +I61 +sV, +I64 +sV. +I28 +sV; +I18 +sV: +I34 +sV +I15 +sV[ +I1 +sV_ +I1 +sVa +I59 +sV +I1 +sVe +I203 +sVi +I70 +sVh +I23 +sVl +I2 +sVo +I8 +sV +I75 +sVs +I35 +sVr +I31 +sVu +I22 +sVt +I11 +sVy +I5 +sVz +I2 +ssViv +p610 +(dp611 +Va +I41 +sV +I1 +sVe +I72 +sVi +I25 +sV +I3 +sVo +I3 +sV +I16 +sVr +I38 +ssVii +p612 +(dp613 +V, +I1 +ssVik +p614 +(dp615 +Ve +I2 +sVd +I1 +ssVij +p616 +(dp617 +Vo +I1 +ssVim +p618 +(dp619 +Va +I36 +sV +I7 +sVb +I1 +sVe +I61 +sVi +I15 +sV +I7 +sVm +I5 +sV, +I1 +sVo +I1 +sV. +I1 +sVp +I34 +sVs +I2 +sVu +I1 +ssVil +p620 +(dp621 +Va +I7 +sV +I530 +sVe +I53 +sVd +I1 +sV +I24 +sVi +I26 +sVh +I1 +sVl +I382 +sVo +I26 +sV. +I7 +sV +I1 +sVs +I134 +sVu +I2 +sVt +I3 +sV +I3 +sVy +I1 +sV; +I3 +sV: +I1 +sV, +I42 +ssVio +p622 +(dp623 +Vc +I1 +sVd +I1 +sVm +I1 +sVl +I14 +sVn +I278 +sVs +I8 +sVr +I2 +sVu +I3 +sVt +I4 +sVv +I1 +sV. +I2 +sV, +I1 +ssVin +p624 +(dp625 +V! +I5 +sV +I206 +sV" +I1 +sV- +I6 +sV, +I72 +sV. +I48 +sV; +I21 +sV: +I8 +sV? +I1 +sV +I1 +sV[ +I1 +sVa +I49 +sVc +I66 +sVe +I146 +sVd +I27 +sVg +I108 +sVf +I34 +sV +I13 +sVh +I1 +sVk +I1 +sVj +I4 +sVo +I20 +sVn +I11 +sVq +I57 +sVi +I18 +sVs +I117 +sVr +I4 +sVu +I23 +sVt +I140 +sVv +I6 +sVz +I9 +ssVia +p626 +(dp627 +V +I17 +sVc +I4 +sVb +I16 +sVd +I1 +sVg +I4 +sVi +I13 +sV- +I3 +sVm +I29 +sVl +I18 +sV, +I7 +sVs +I18 +sV: +I1 +sVt +I3 +sVh +I1 +sV; +I1 +sVn +I12 +ssV_p +p628 +(dp629 +Va +I1 +ssVic +p630 +(dp631 +Va +I28 +sV +I8 +sV) +I1 +sVe +I41 +sVi +I68 +sVh +I33 +sVk +I2 +sVl +I2 +sVo +I6 +sV. +I1 +sV +I2 +sVs +I2 +sVu +I15 +sVt +I7 +sV, +I1 +ssVib +p632 +(dp633 +Va +I1 +sVe +I11 +sVi +I6 +sVl +I64 +sVn +I2 +sV +I1 +sVr +I12 +sVu +I16 +ssVie +p634 +(dp635 +V! +I2 +sV +I121 +sV, +I50 +sV. +I27 +sV; +I10 +sV: +I2 +sV? +I5 +sV[ +I5 +sV_ +I1 +sVd +I28 +sVf +I1 +sVi +I71 +sVm +I4 +sVl +I14 +sVn +I505 +sVp +I4 +sVs +I46 +sVr +I133 +sVu +I198 +sVt +I3 +sVw +I1 +sVz +I29 +ssVid +p636 +(dp637 +Va +I6 +sV +I9 +sVe +I449 +sV +I21 +sV +I6 +sV, +I1 +sVo +I1 +sVn +I2 +sVi +I10 +sVr +I1 +sVy +I1 +ssVig +p638 +(dp639 +Va +I6 +sVe +I10 +sV +I9 +sVh +I17 +sVo +I17 +sVn +I79 +sVi +I16 +sVr +I4 +sVu +I17 +sVt +I5 +ssVif +p640 +(dp641 +V +I21 +sVe +I1 +sVf +I14 +sVi +I20 +sV, +I6 +sV. +I3 +sV +I1 +sVs +I6 +sVr +I1 +sVt +I1 +sVy +I3 +ssVV +p642 +(dp643 +Vp +I1 +sV: +I1 +sVd +I2 +ssVn: +p644 +(dp645 +V +I18 +ssVi[ +p646 +(dp647 +V1 +I2 +sV4 +I1 +ssV"A +p648 +(dp649 +VS +I1 +ssVi_ +p650 +(dp651 +V, +I1 +ssVV, +p652 +(dp653 +V +I1 +ssVV. +p654 +(dp655 +V +I7 +ssV"P +p656 +(dp657 +VR +I3 +sVr +I3 +ssV"R +p658 +(dp659 +Vi +I1 +ssV"S +p660 +(dp661 +Vm +I5 +ssVV: +p662 +(dp663 +V +I1 +ssVb +p664 +(dp665 +Vm +I4 +ssVV? +p666 +(dp667 +V +I1 +ssVi8 +p668 +(dp669 +V. +I1 +ssVi; +p670 +(dp671 +V +I14 +ssVi: +p672 +(dp673 +V +I2 +ssV" +p674 +(dp675 +Va +I2 +sVs +I5 +sVt +I2 +sVw +I1 +sVd +I1 +ssVVE +p676 +(dp677 +V +I4 +sVC +I1 +sVR +I3 +sVN +I2 +ssVi? +p678 +(dp679 +V +I11 +ssVi1 +p680 +(dp681 +V1 +I2 +sV0 +I6 +ssVVI +p682 +(dp683 +V +I1 +sVD +I1 +sVI +I20 +sV, +I3 +sV. +I3 +sV; +I1 +ssV". +p684 +(dp685 +V +I2 +ssV") +p686 +(dp687 +V. +I1 +ssVVO +p688 +(dp689 +VL +I2 +ssVVR +p690 +(dp691 +VE +I3 +ssVi- +p692 +(dp693 +Vc +I4 +sVe +I1 +sVh +I1 +sVj +I4 +sVm +I13 +sVl +I2 +ssVi, +p694 +(dp695 +V +I132 +ssVi. +p696 +(dp697 +V +I26 +sV- +I1 +ssVi! +p698 +(dp699 +V +I17 +sV_ +I2 +ssVi +p700 +(dp701 +V +I6 +sVi +I10 +sV. +I1 +sV1 +I1 +sV +I1 +sVA +I1 +sVC +I8 +sVD +I2 +sVI +I2 +sVM +I2 +sVL +I1 +sVN +I1 +sVP +I1 +sVT +I1 +sVV +I1 +sVa +I86 +sV +I19 +sVc +I43 +sVb +I23 +sVe +I51 +sVd +I166 +sVg +I11 +sVf +I50 +sV +I43 +sVh +I4 +sVj +I30 +sVm +I43 +sVl +I82 +sVo +I13 +sVn +I53 +sVq +I29 +sVp +I81 +sVs +I46 +sVr +I42 +sVu +I16 +sVt +I34 +sVv +I52 +sVy +I1 +ssVV_ +p702 +(dp703 +V; +I5 +sV, +I1 +sV. +I5 +ssVVa +p704 +(dp705 +Vl +I2 +sVn +I5 +ssVC +p706 +(dp707 +Vs +I3 +ssVVe +p708 +(dp709 +Vs +I11 +sVr +I2 +sVn +I32 +ssVVi +p710 +(dp711 +Vs +I3 +sVr +I3 +sVe +I1 +sVt +I1 +sVn +I1 +ssVVo +p712 +(dp713 +Vy +I17 +sVi +I10 +sVu +I39 +sVl +I30 +sVt +I6 +ssV5] +p714 +(dp715 +V +I2 +sV; +I1 +sV, +I1 +ssVt- +p716 +(dp717 +V +I5 +sVc +I16 +sVe +I19 +sVG +I1 +sVi +I82 +sVH +I1 +sV +I9 +sVM +I2 +sVS +I1 +sVo +I7 +sVn +I1 +sVq +I3 +sVP +I1 +sVs +I1 +sVl +I1 +ssVt* +p718 +(dp719 +V +I1 +sV* +I1 +ssV +p720 +(dp721 +V2 +I2 +sV6 +I1 +ssVH +p722 +(dp723 +Vb +I1 +sVl +I19 +ssV. +p724 +(dp725 +V +I1 +ssV59 +p726 +(dp727 +V +I2 +sV4 +I2 +sV: +I1 +sV, +I3 +sV. +I1 +ssV55 +p728 +(dp729 +V- +I1 +sV. +I1 +ssV54 +p730 +(dp731 +V1 +I1 +sV. +I1 +ssV57 +p732 +(dp733 +V: +I2 +ssV56 +p734 +(dp735 +V +I1 +sV; +I1 +sV, +I2 +ssV50 +p736 +(dp737 +V1 +I2 +sV0 +I2 +sV] +I1 +sV +I2 +ssV52 +p738 +(dp739 +V8 +I1 +sV. +I1 +ssV5- +p740 +(dp741 +V4 +I1 +ssV5, +p742 +(dp743 +V +I3 +ssV5. +p744 +(dp745 +V +I4 +ssV5) +p746 +(dp747 +V: +I1 +sV, +I1 +ssV5 +p748 +(dp749 +Vj +I1 +ssVHI +p750 +(dp751 +VS +I2 +sVN +I1 +ssVHO +p752 +(dp753 +VT +I2 +ssVHA +p754 +(dp755 +VP +I30 +sVN +I1 +sVM +I1 +sVT +I1 +sVV +I2 +ssVHE +p756 +(dp757 +V +I5 +sVR +I3 +sVZ +I1 +ssVe[ +p758 +(dp759 +Va +I1 +sV1 +I3 +sV3 +I2 +sV2 +I2 +sV5 +I1 +sV7 +I1 +sV6 +I2 +sV9 +I1 +sV8 +I1 +ssVHi +p760 +(dp761 +Vs +I5 +sVd +I2 +ssVHo +p762 +(dp763 +Vr +I4 +sVm +I3 +sVl +I5 +sVn +I2 +ssVHa +p764 +(dp765 +Vy +I1 +sVr +I7 +sVm +I1 +sVw +I1 +ssVHe +p766 +(dp767 +Vr +I1 +sVn +I6 +ssV-4 +p768 +(dp769 +V1 +I1 +ssVm" +p770 +(dp771 +V +I1 +ssVH, +p772 +(dp773 +V +I1 +ssVH +p774 +(dp775 +VD +I1 +sVO +I1 +ssV[P +p776 +(dp777 +Vr +I1 +sVo +I1 +ssV[T +p778 +(dp779 +Vh +I1 +ssV[Y +p780 +(dp781 +Ve +I1 +ssV[E +p782 +(dp783 +Vm +I2 +sVt +I1 +ssV_c +p784 +(dp785 +Vo +I1 +ssVn +p786 +(dp787 +Vq +I1 +sVs +I3 +sVr +I5 +sVg +I8 +ssVn +p788 +(dp789 +Va +I3 +sV +I52 +sVc +I9 +sVe +I48 +sVd +I1 +sVg +I126 +sVi +I1 +sVm +I3 +sV, +I4 +sV. +I2 +sVs +I24 +sVr +I12 +sV; +I1 +ssVn +p790 +(dp791 +Vt +I17 +ssVn +p792 +(dp793 +Vt +I1 +ssVn +p794 +(dp795 +Va +I21 +sVu +I2 +sVo +I7 +ssV[a +p796 +(dp797 +V] +I2 +ssVn +p798 +(dp799 +Vt +I3 +ssV' +p800 +(dp801 +Vn +I1 +ssV' +p802 +(dp803 +Vm +I5 +sVg +I4 +ssV' +p804 +(dp805 +V +I20 +ssV' +p806 +(dp807 +Vt +I38 +ssV' +p808 +(dp809 +Vc +I33 +sVd +I3 +sVg +I4 +sVm +I3 +sVl +I7 +sVn +I1 +sVq +I1 +sVp +I20 +sVt +I99 +sVv +I5 +ssV[3 +p810 +(dp811 +V] +I10 +ssV[2 +p812 +(dp813 +V] +I21 +ssV[1 +p814 +(dp815 +V1 +I2 +sV0 +I2 +sV2 +I2 +sV] +I49 +ssV[7 +p816 +(dp817 +V] +I2 +ssV[6 +p818 +(dp819 +V] +I4 +ssV[5 +p820 +(dp821 +V] +I4 +ssV[4 +p822 +(dp823 +V] +I6 +ssV[9 +p824 +(dp825 +V] +I2 +ssV[8 +p826 +(dp827 +V] +I2 +ssV[* +p828 +(dp829 +V] +I3 +ssV' +p830 +(dp831 +VP +I1 +sVd +I2 +sVg +I1 +ssVn[ +p832 +(dp833 +V1 +I2 +sV2 +I3 +ssVn_ +p834 +(dp835 +V; +I1 +sV, +I1 +ssVnh +p836 +(dp837 +Va +I1 +sVu +I1 +sVe +I8 +ssVni +p838 +(dp839 +V! +I3 +sV +I46 +sV, +I3 +sVa +I6 +sVc +I10 +sVb +I1 +sVe +I44 +sVg +I3 +sVf +I8 +sV +I2 +sV +I13 +sVm +I4 +sVl +I2 +sVo +I1 +sVn +I5 +sVq +I1 +sVs +I46 +sVr +I26 +sVu +I2 +sVt +I20 +sVv +I11 +sVz +I3 +ssVnj +p840 +(dp841 +Vu +I4 +sVo +I1 +ssVnk +p842 +(dp843 +V +I1 +sVs +I1 +ssVnl +p844 +(dp845 +Va +I1 +sVy +I5 +sVe +I6 +sVi +I1 +sVo +I3 +ssVnn +p846 +(dp847 +Va +I78 +sV +I1 +sVe +I204 +sVi +I9 +sV +I4 +sV +I13 +sVo +I17 +sV +I48 +sVs +I1 +sVu +I19 +ssVno +p848 +(dp849 +V +I5 +sVc +I11 +sVb +I8 +sVe +I1 +sVi +I17 +sVm +I33 +sVl +I17 +sVn +I40 +sVp +I14 +sVs +I33 +sVr +I14 +sVu +I206 +sVt +I59 +sVw +I8 +sVv +I4 +sVy +I5 +sVx +I2 +sV, +I1 +ssVna +p850 +(dp851 +Vn +I32 +sV +I48 +sV, +I10 +sV; +I1 +sV: +I1 +sV +I1 +sVc +I5 +sVb +I22 +sVd +I6 +sVg +I14 +sVi +I101 +sVm +I11 +sVl +I21 +sV +I2 +sV +I10 +sVp +I5 +sVs +I3 +sVr +I9 +sVu +I5 +sVt +I61 +sVv +I11 +sVy +I1 +ssVnb +p852 +(dp853 +Ve +I31 +ssVnc +p854 +(dp855 +Va +I3 +sV +I28 +sVe +I151 +sV! +I1 +sV +I8 +sVh +I21 +sVk +I11 +sVl +I17 +sVo +I82 +sV, +I6 +sVi +I25 +sVs +I5 +sVr +I3 +sVu +I3 +sVt +I3 +sV +I6 +sVy +I3 +ssVnd +p856 +(dp857 +Va +I124 +sV +I209 +sV" +I1 +sVe +I278 +sVi +I493 +sV- +I14 +sV, +I10 +sVo +I22 +sV. +I4 +sV +I8 +sVs +I35 +sVr +I101 +sVu +I54 +sV_ +I1 +sV; +I2 +sV +I1 +sV? +I1 +sVl +I1 +ssVne +p858 +(dp859 +V +I743 +sV- +I4 +sV, +I42 +sV. +I19 +sV; +I9 +sV: +I4 +sV? +I3 +sV[ +I1 +sVc +I1 +sVb +I1 +sVe +I4 +sVi +I5 +sVm +I25 +sVl +I14 +sVn +I22 +sVs +I80 +sVr +I105 +sVu +I60 +sVt +I22 +sVw +I7 +sVv +I3 +sVy +I6 +sVx +I3 +sVz +I25 +ssVnf +p860 +(dp861 +Va +I20 +sVe +I12 +sVi +I52 +sVl +I2 +sVo +I30 +sV. +I2 +sVr +I2 +sVu +I8 +ssVng +p862 +(dp863 +Va +I8 +sV +I64 +sVe +I109 +sVi +I1 +sV +I1 +sV- +I12 +sVl +I122 +sVo +I1 +sV. +I4 +sV +I18 +sVs +I4 +sVr +I3 +sVu +I30 +sVt +I28 +sV[ +I1 +sV: +I1 +sV, +I4 +ssVnx +p864 +(dp865 +V +I1 +ssVny +p866 +(dp867 +V) +I2 +sV +I17 +sVs +I1 +sVo +I1 +ssVnz +p868 +(dp869 +Va +I2 +sVi +I1 +sVe +I10 +ssVnq +p870 +(dp871 +V +I13 +sVu +I64 +ssVnr +p872 +(dp873 +V +I1 +sVa +I2 +sVe +I5 +sVi +I6 +ssVns +p874 +(dp875 +V +I690 +sVi +I91 +sV) +I1 +sV- +I17 +sV, +I68 +sV. +I27 +sV; +I8 +sV: +I1 +sV? +I1 +sV[ +I2 +sV_ +I1 +sVa +I5 +sVc +I3 +sVe +I74 +sVf +I1 +sV +I8 +sVk +I1 +sVo +I13 +sVp +I11 +sVs +I1 +sVu +I22 +sVt +I31 +sVw +I2 +sVy +I4 +ssVnt +p876 +(dp877 +V! +I11 +sV +I1213 +sV" +I1 +sV* +I1 +sV- +I12 +sV, +I115 +sV. +I53 +sV; +I32 +sV: +I8 +sV? +I2 +sV[ +I1 +sVa +I70 +sVe +I207 +sVi +I108 +sV +I4 +sVl +I2 +sVo +I14 +sV +I26 +sVs +I127 +sVr +I116 +sVu +I25 +sV +I21 +sVh +I6 +ssVnu +p878 +(dp879 +Va +I11 +sV +I18 +sVe +I21 +sVf +I1 +sVi +I12 +sV +I1 +sVm +I4 +sVl +I5 +sVo +I1 +sV. +I2 +sVq +I6 +sVs +I14 +sVt +I3 +sVy +I4 +sV; +I1 +sV, +I2 +ssVnv +p880 +(dp881 +Vi +I27 +sVa +I3 +sVe +I22 +sVu +I4 +sVo +I16 +ssV'u +p882 +(dp883 +V +I1 +sVs +I6 +sVt +I2 +sVn +I156 +ssV't +p884 +(dp885 +V +I4 +ssV's +p886 +(dp887 +V +I4 +ssV'y +p888 +(dp889 +V +I53 +ssV'e +p890 +(dp891 +Va +I5 +sVf +I7 +sVm +I30 +sVl +I32 +sVn +I120 +sVs +I162 +sVu +I8 +sVx +I23 +sV +I1 +ssV'd +p892 +(dp893 +V +I1 +ssV'a +p894 +(dp895 +V +I33 +sVc +I14 +sVb +I37 +sVd +I6 +sVg +I6 +sVi +I140 +sVm +I20 +sVl +I13 +sVn +I18 +sVp +I41 +sVs +I11 +sVr +I24 +sVu +I79 +sVt +I16 +sVv +I112 +sVy +I9 +ssV'o +p896 +(dp897 +Vb +I3 +sVe +I7 +sVf +I2 +sVn +I93 +sVp +I8 +sVs +I6 +sVr +I27 +sVu +I10 +ssV'i +p898 +(dp899 +Vc +I3 +sVd +I3 +sVg +I1 +sVm +I12 +sVl +I187 +sVn +I45 +sVr +I1 +sVv +I1 +ssV'h +p900 +(dp901 +Va +I6 +sVe +I2 +sV +I2 +sVo +I31 +sVi +I3 +sVu +I10 +sV +I10 +sVy +I1 +ssVn) +p902 +(dp903 +V, +I1 +ssV'U +p904 +(dp905 +Vr +I1 +ssV'T +p906 +(dp907 +V +I1 +ssVn, +p908 +(dp909 +V +I196 +ssVn- +p910 +(dp911 +Va +I1 +sVb +I3 +sVi +I1 +sVh +I3 +sV- +I1 +sV1 +I4 +sVt +I11 +sV8 +I1 +ssVn. +p912 +(dp913 +V +I101 +sV" +I1 +sVh +I2 +sV- +I1 +sV. +I1 +sV] +I1 +ssVn +p914 +(dp915 +V +I7 +sV" +I1 +sVp +I203 +sV( +I2 +sV1 +I24 +sV +I3 +sV3 +I1 +sV2 +I3 +sV9 +I1 +sVA +I11 +sVC +I7 +sVB +I2 +sVE +I7 +sVD +I3 +sVF +I10 +sVI +I12 +sVH +I5 +sVK +I1 +sVJ +I8 +sVM +I4 +sVO +I1 +sVN +I3 +sVP +I7 +sVS +I1 +sV +I3 +sVT +I4 +sVV +I5 +sVX +I3 +sV_ +I4 +sVa +I184 +sV +I23 +sVc +I147 +sVb +I51 +sVe +I101 +sVd +I203 +sVg +I34 +sVf +I70 +sV +I24 +sVh +I41 +sVj +I44 +sVm +I107 +sVl +I81 +sVo +I31 +sVn +I76 +sVq +I35 +sVi +I36 +sVs +I99 +sVr +I48 +sVu +I20 +sVt +I79 +sVw +I4 +sVv +I95 +sVy +I13 +ssVn! +p916 +(dp917 +V +I16 +ssVn" +p918 +(dp919 +V +I2 +ssVf +p920 +(dp921 +Vc +I2 +ssVn' +p922 +(dp923 +Va +I106 +sVe +I67 +sV +I32 +sVh +I2 +sV +I2 +sVo +I11 +sVi +I1 +sVu +I1 +sVt +I4 +sVy +I36 +ssV'E +p924 +(dp925 +Vs +I12 +sVt +I1 +sVu +I7 +sVl +I8 +sVv +I1 +ssVn; +p926 +(dp927 +V +I48 +ssV'A +p928 +(dp929 +Vr +I3 +sVd +I1 +sVf +I3 +sVc +I1 +sVm +I3 +sVL +I1 +sVN +I1 +sVs +I3 +sVn +I7 +sVt +I3 +sVv +I1 +sVz +I1 +sVl +I8 +ssVn? +p930 +(dp931 +V +I4 +sV- +I1 +ssV'O +p932 +(dp933 +VP +I2 +sVr +I1 +sVN +I1 +sVv +I1 +sVp +I2 +ssV'I +p934 +(dp935 +Vs +I1 +sVn +I2 +sVb +I3 +sVL +I1 +sVt +I2 +ssV:/ +p936 +(dp937 +V/ +I8 +ssV: +p938 +(dp939 +V +I2 +sV1 +I1 +sVA +I4 +sVC +I13 +sVE +I4 +sVF +I1 +sVI +I6 +sVH +I2 +sVJ +I7 +sVM +I12 +sVO +I3 +sVN +I4 +sVQ +I2 +sVS +I6 +sVU +I1 +sVT +I1 +sVV +I6 +sV_ +I6 +sVa +I3 +sVc +I9 +sVe +I15 +sVi +I11 +sVj +I12 +sVm +I10 +sVl +I15 +sVo +I10 +sVn +I8 +sVq +I4 +sVp +I4 +sVs +I5 +sVu +I3 +sVt +I2 +sVv +I13 +ssVHu +p940 +(dp941 +Vm +I1 +ssVf +p942 +(dp943 +Vt +I1 +ssVp +p944 +(dp945 +Va +I24 +sVe +I10 +sV +I9 +sVl +I13 +sVo +I81 +sVi +I3 +sVr +I18 +sVu +I5 +ssVf +p946 +(dp947 +Vt +I1 +ssVM +p948 +(dp949 +Vd +I3 +sVm +I2 +sVl +I10 +sVo +I1 +sVq +I1 +sVt +I1 +ssVM +p950 +(dp951 +Vn +I1 +ssVSp +p952 +(dp953 +Ve +I1 +ssVAS +p954 +(dp955 +V +I1 +sVC +I2 +sV- +I1 +ssV:M +p956 +(dp957 +Vo +I1 +ssVM +p958 +(dp959 +VI +I1 +sVE +I1 +ssVM, +p960 +(dp961 +V +I2 +ssVM. +p962 +(dp963 +VA +I1 +sV +I22 +ssVMe +p964 +(dp965 +Va +I2 +sVx +I1 +sVs +I8 +sVc +I1 +ssV.g +p966 +(dp967 +Vu +I2 +ssVMa +p968 +(dp969 +V +I9 +sVd +I7 +sVi +I32 +sVh +I2 +sVj +I1 +sVl +I3 +sVn +I1 +sVs +I6 +sVr +I123 +sVu +I1 +sVt +I1 +sV +I4 +ssVMo +p970 +(dp971 +Va +I1 +sVg +I1 +sVi +I2 +sVk +I1 +sV +I1 +sVn +I32 +sVs +I2 +sVr +I4 +ssVMi +p972 +(dp973 +Vs +I2 +sVc +I7 +sVl +I4 +sVd +I1 +ssVMu +p974 +(dp975 +Vl +I2 +ssVMy +p976 +(dp977 +Vt +I1 +ssVME +p978 +(dp979 +V +I3 +sVD +I2 +sV, +I1 +sV. +I1 +sVR +I3 +sVN +I1 +ssVMD +p980 +(dp981 +VC +I1 +ssVMA +p982 +(dp983 +VD +I1 +sVG +I3 +sVI +I2 +sVL +I2 +sVN +I2 +sVY +I1 +ssVMB +p984 +(dp985 +V +I1 +sVE +I2 +ssVMM +p986 +(dp987 +V. +I1 +ssVMO +p988 +(dp989 +VU +I1 +sVN +I1 +ssVMN +p990 +(dp991 +VI +I1 +ssVMI +p992 +(dp993 +VS +I2 +sVT +I3 +sVN +I2 +ssVMP +p994 +(dp995 +VR +I1 +sVL +I1 +ssVMS +p996 +(dp997 +V +I1 +ssVbr +p998 +(dp999 +Va +I34 +sVe +I37 +sVi +I30 +sVo +I11 +sVu +I19 +sV +I13 +ssVl +p1000 +(dp1001 +Ve +I2 +ssVm +p1002 +(dp1003 +V +I3 +sVe +I3 +ssVn +p1004 +(dp1005 +Va +I2 +sV +I7 +sVe +I15 +ssVc +p1006 +(dp1007 +Vh +I5 +ssVt +p1008 +(dp1009 +V +I14 +sVr +I58 +ssVs +p1010 +(dp1011 +Vr +I1 +ssVs +p1012 +(dp1013 +Va +I1 +sV +I30 +sVc +I2 +sVe +I14 +sVd +I2 +sVj +I3 +sVm +I10 +sV, +I6 +sV. +I1 +sVq +I8 +sVp +I9 +sVs +I11 +sVr +I16 +sVv +I1 +sVn +I6 +sV: +I1 +ssVs +p1014 +(dp1015 +Vc +I1 +sVr +I16 +sVd +I3 +ssVs; +p1016 +(dp1017 +V +I155 +ssVs: +p1018 +(dp1019 +V +I35 +ssVs? +p1020 +(dp1021 +V +I39 +sV- +I4 +ssV, +p1022 +(dp1023 +VR +I2 +sV +I19 +sV0 +I2 +sV1 +I6 +sV +I1 +sV3 +I1 +sV2 +I3 +sV9 +I10 +sV +I1 +sVA +I7 +sVC +I24 +sVE +I4 +sVD +I4 +sVG +I1 +sVF +I1 +sVI +I5 +sVH +I3 +sVK +I3 +sVJ +I3 +sVM +I12 +sVL +I5 +sVO +I4 +sVN +I11 +sVP +I7 +sVS +I4 +sVb +I17 +sVU +I1 +sVT +I4 +sVW +I3 +sVV +I4 +sV_ +I3 +sVa +I120 +sV +I47 +sVc +I133 +sV +I3 +sVe +I601 +sVd +I397 +sVg +I6 +sVf +I26 +sVi +I120 +sVh +I8 +sVj +I93 +sVm +I131 +sVl +I228 +sVo +I59 +sVn +I73 +sVq +I235 +sVp +I116 +sVs +I132 +sVr +I51 +sVu +I38 +sVt +I68 +sVw +I6 +sVv +I62 +sVy +I16 +ssVs* +p1024 +(dp1025 +V* +I1 +ssVs) +p1026 +(dp1027 +V +I1 +sV; +I1 +sV, +I1 +ssVs/ +p1028 +(dp1029 +Vb +I1 +sVg +I1 +ssVs. +p1030 +(dp1031 +V +I302 +sV- +I2 +sV] +I1 +sV. +I1 +ssVs- +p1032 +(dp1033 +VA +I13 +sV +I1 +sVc +I7 +sVe +I1 +sVd +I3 +sV +I4 +sVm +I3 +sVj +I9 +sVM +I1 +sVl +I4 +sVn +I13 +sVt +I3 +sVv +I13 +sVE +I1 +ssVs, +p1034 +(dp1035 +Vy +I1 +sV +I765 +ssVs" +p1036 +(dp1037 +V. +I1 +ssVs! +p1038 +(dp1039 +V +I45 +sV* +I1 +ssVs +p1040 +(dp1041 +V +I11 +sV +I1 +sV +I115 +sV" +I4 +sV( +I2 +sV* +I1 +sV- +I1 +sV1 +I5 +sV3 +I1 +sV2 +I1 +sV: +I1 +sV +I1 +sVA +I7 +sVC +I12 +sVB +I20 +sVE +I9 +sVD +I1 +sVF +I1 +sVI +I4 +sVH +I1 +sVJ +I5 +sVM +I4 +sVL +I2 +sVO +I7 +sVP +I14 +sVS +I3 +sVR +I7 +sVT +I4 +sVW +I1 +sVY +I1 +sVX +I11 +sV_ +I12 +sVa +I375 +sV +I97 +sVc +I294 +sVb +I120 +sVe +I236 +sVd +I770 +sVg +I70 +sVf +I147 +sVi +I93 +sVh +I69 +sVk +I1 +sVj +I75 +sVm +I224 +sVl +I448 +sVo +I76 +sVn +I153 +sVq +I224 +sVp +I375 +sVs +I294 +sVr +I145 +sVu +I116 +sVt +I153 +sVw +I12 +sVv +I122 +sVy +I35 +ssVs' +p1042 +(dp1043 +Va +I30 +sVe +I39 +sV +I35 +sV +I2 +sVo +I5 +sVi +I25 +sVy +I4 +ssVs[ +p1044 +(dp1045 +V1 +I6 +sV2 +I1 +sV5 +I1 +sV4 +I2 +ssVs_ +p1046 +(dp1047 +V +I1 +sV, +I11 +sV. +I5 +ssV?. +p1048 +(dp1049 +V. +I1 +ssV?- +p1050 +(dp1051 +V- +I9 +ssV? +p1052 +(dp1053 +V +I36 +sVC +I8 +sVB +I1 +sVE +I6 +sVD +I1 +sVI +I6 +sVJ +I8 +sVM +I5 +sVL +I2 +sVO +I3 +sVN +I1 +sVQ +I2 +sVP +I2 +sVS +I1 +sVT +I2 +sVV +I2 +sVY +I1 +sVc +I3 +sVe +I6 +sVd +I26 +sVi +I1 +sVj +I1 +sVl +I3 +sVo +I3 +sVn +I1 +sVq +I3 +sVp +I2 +sVs +I2 +sVv +I2 +sVy +I1 +ssVsy +p1054 +(dp1055 +Vs +I3 +sVl +I4 +ssV,c +p1056 +(dp1057 +Ve +I1 +ssVss +p1058 +(dp1059 +Va +I127 +sV +I45 +sVe +I286 +sVi +I149 +sV +I10 +sV, +I30 +sVo +I17 +sV. +I11 +sV +I41 +sV! +I8 +sVu +I24 +sV[ +I1 +sV: +I1 +sV; +I7 +sV? +I1 +ssVsr +p1060 +(dp1061 +Va +I3 +ssVsq +p1062 +(dp1063 +Vu +I55 +sV' +I1 +ssVsp +p1064 +(dp1065 +Va +I27 +sVe +I30 +sV +I14 +sV +I12 +sVl +I2 +sVo +I15 +sVi +I8 +sVr +I15 +sVu +I11 +sVh +I1 +ssVsw +p1066 +(dp1067 +Ve +I2 +ssVsu +p1068 +(dp1069 +Va +I4 +sV +I7 +sVc +I10 +sVb +I12 +sVe +I2 +sVg +I1 +sVf +I6 +sVi +I122 +sVj +I5 +sVm +I3 +sVl +I14 +sVp +I9 +sVs +I9 +sVr +I179 +sVy +I5 +ssVst +p1070 +(dp1071 +Va +I74 +sV +I312 +sVe +I82 +sV +I21 +sVi +I47 +sVh +I1 +sV- +I26 +sV, +I7 +sVo +I23 +sV. +I2 +sVp +I12 +sVs +I1 +sVr +I50 +sVu +I6 +sV_ +I1 +sV +I6 +sVy +I2 +sV[ +I1 +sV? +I1 +ssVsk +p1072 +(dp1073 +Va +I2 +sV +I3 +sVi +I4 +sV, +I1 +sV. +I1 +sV) +I1 +ssVsi +p1074 +(dp1075 +V +I163 +sV, +I10 +sV. +I3 +sV; +I1 +sV? +I2 +sVa +I3 +sVc +I12 +sVb +I26 +sVe +I102 +sVd +I4 +sVg +I15 +sVf +I4 +sV +I3 +sV +I17 +sVm +I7 +sVl +I6 +sVo +I53 +sVn +I50 +sVq +I15 +sVp +I4 +sVs +I10 +sVr +I32 +sVt +I75 +sVv +I1 +sVx +I27 +ssVsh +p1076 +(dp1077 +Va +I2 +sV +I2 +sVi +I3 +sVo +I4 +sV, +I1 +ssVso +p1078 +(dp1079 +V +I8 +sVc +I8 +sVe +I21 +sVf +I4 +sVi +I56 +sVm +I18 +sVl +I47 +sVn +I327 +sVp +I23 +sVr +I31 +sVu +I130 +sVt +I9 +sVy +I1 +sV. +I1 +ssVsm +p1080 +(dp1081 +Va +I5 +sVe +I6 +sVo +I4 +ssV,q +p1082 +(dp1083 +Vu +I1 +ssVsc +p1084 +(dp1085 +Va +I16 +sVe +I4 +sVi +I13 +sVh +I1 +sVl +I15 +sVo +I23 +sV +I1 +sVr +I11 +sVu +I4 +sV +I4 +ssVsb +p1086 +(dp1087 +Vi +I1 +sVo +I11 +ssVsa +p1088 +(dp1089 +V +I122 +sVc +I19 +sVb +I8 +sVd +I1 +sVg +I33 +sVi +I173 +sV- +I2 +sVm +I3 +sVl +I13 +sVn +I129 +sVs +I8 +sVr +I6 +sVu +I16 +sVt +I11 +sVv +I42 +sV; +I2 +sV. +I1 +sV, +I2 +sV_ +I1 +ssVsf +p1090 +(dp1091 +Va +I2 +sVi +I1 +sVe +I1 +ssVse +p1092 +(dp1093 +V! +I1 +sV +I326 +sV- +I3 +sV, +I51 +sV. +I34 +sV; +I15 +sV: +I4 +sV? +I3 +sV_ +I3 +sVa +I55 +sVc +I21 +sVe +I2 +sVd +I8 +sVi +I40 +sVm +I40 +sVl +I73 +sVo +I1 +sVn +I96 +sVq +I5 +sVp +I8 +sVs +I139 +sVr +I166 +sVu +I26 +sVt +I6 +sVv +I2 +sVy +I1 +sVx +I3 +sVz +I46 +ssV,y +p1094 +(dp1095 +V +I1 +ssVRu +p1096 +(dp1097 +Vp +I2 +sVs +I8 +ssVe +p1098 +(dp1099 +V +I1 +sVu +I14 +sVo +I8 +ssVRe +p1100 +(dp1101 +Va +I1 +sVf +I1 +sVm +I2 +sVl +I1 +sVp +I1 +sVv +I1 +ssVRa +p1102 +(dp1103 +Vp +I1 +sVb +I1 +sVl +I1 +sVg +I3 +sVv +I1 +ssVe +p1104 +(dp1105 +Vm +I1 +sVt +I10 +ssVRo +p1106 +(dp1107 +Vb +I3 +sVm +I5 +sVs +I2 +sVu +I4 +sVt +I1 +sVy +I1 +ssVRh +p1108 +(dp1109 +Vo +I1 +ssVRi +p1110 +(dp1111 +Vc +I2 +sVe +I3 +sVg +I2 +ssVRT +p1112 +(dp1113 +VI +I2 +sV* +I2 +ssVRU +p1114 +(dp1115 +VE +I3 +sVT +I1 +ssVRW +p1116 +(dp1117 +VI +I1 +ssVRP +p1118 +(dp1119 +VO +I1 +ssVRR +p1120 +(dp1121 +VA +I4 +ssVRS +p1122 +(dp1123 +VI +I2 +sVQ +I1 +ssVE +p1124 +(dp1125 +VS +I1 +ssVRD +p1126 +(dp1127 +VE +I1 +ssVRE +p1128 +(dp1129 +V! +I1 +sV +I32 +sVC +I1 +sVM +I1 +sV, +I2 +sV. +I1 +sVS +I3 +sVA +I2 +ssVRG +p1130 +(dp1131 +V" +I2 +sV- +I6 +ssVRA +p1132 +(dp1133 +VC +I1 +sVD +I1 +sVI +I1 +sVH +I1 +sVL +I1 +sVN +I4 +ssVRC +p1134 +(dp1135 +VH +I1 +ssVRM +p1136 +(dp1137 +VI +I1 +ssVRO +p1138 +(dp1139 +VU +I1 +sVV +I1 +sVJ +I8 +sVM +I1 +sVN +I1 +ssVRI +p1140 +(dp1141 +VC +I1 +sVB +I1 +sVE +I1 +sVM +I1 +sVN +I2 +sVS +I1 +ssVR +p1142 +(dp1143 +VA +I2 +sV +I1 +sVC +I1 +sVB +I1 +sVF +I2 +sVI +I2 +sVO +I1 +sVN +I1 +sVP +I3 +sVS +I1 +sVR +I2 +sV" +I1 +ssVR, +p1144 +(dp1145 +V +I6 +ssVR. +p1146 +(dp1147 +V +I1 +ssVR* +p1148 +(dp1149 +V: +I1 +ssVem +p1150 +(dp1151 +Va +I83 +sV +I4 +sVb +I79 +sVe +I206 +sVi +I48 +sVm +I44 +sVo +I67 +sVn +I2 +sVp +I104 +sVs +I1 +sVu +I2 +ssVel +p1152 +(dp1153 +Va +I38 +sV +I77 +sVc +I1 +sVe +I16 +sV +I1 +sVi +I15 +sVl +I357 +sVo +I16 +sV, +I8 +sVq +I88 +sV +I6 +sVs +I9 +sV! +I5 +sVu +I19 +sV. +I1 +sVy +I3 +sV; +I3 +sV: +I1 +sVp +I1 +sV[ +I2 +ssV +p1154 +(dp1155 +VA +I4 +sVC +I45 +sVB +I9 +sVE +I1 +sVD +I1 +sVH +I1 +sVM +I20 +sVL +I7 +sVN +I3 +sVP +I16 +sVS +I5 +sVR +I6 +sVU +I1 +sVT +I3 +sVV +I27 +sV_ +I3 +sVa +I2 +sVc +I49 +sVb +I6 +sVe +I11 +sVd +I31 +sVg +I9 +sVf +I10 +sVh +I1 +sVj +I2 +sVm +I38 +sVl +I133 +sVo +I1 +sVn +I4 +sVq +I23 +sVp +I38 +sVs +I37 +sVr +I6 +sVu +I38 +sVt +I41 +sVv +I17 +ssVen +p1156 +(dp1157 +V! +I9 +sV +I590 +sV- +I12 +sV, +I25 +sV. +I14 +sVh +I1 +sV; +I6 +sV: +I5 +sV? +I1 +sV +I1 +sV +I4 +sV[ +I2 +sVa +I69 +sVc +I143 +sVb +I31 +sVe +I32 +sVd +I266 +sVg +I10 +sVf +I64 +sVi +I61 +sV +I4 +sV +I4 +sVl +I5 +sVo +I13 +sVn +I42 +sVq +I1 +sV +I5 +sVs +I130 +sVr +I10 +sVu +I30 +sVt +I1178 +sVv +I36 +sVy +I1 +sVz +I2 +ssVei +p1158 +(dp1159 +Vb +I2 +sVg +I33 +sVl +I144 +sVn +I41 +sVp +I1 +sVt +I2 +sVv +I11 +sVz +I1 +ssVeh +p1160 +(dp1161 +V! +I1 +sVa +I1 +sVl +I4 +ssVej +p1162 +(dp1163 +Ve +I1 +ssVee +p1164 +(dp1165 +V! +I1 +sV +I12 +sVd +I4 +sV, +I1 +sVn +I3 +sVp +I1 +sVs +I4 +sVr +I2 +sVl +I2 +ssVed +p1166 +(dp1167 +V +I70 +sVe +I1 +sVi +I17 +sV, +I9 +sVo +I8 +sV. +I3 +sV) +I1 +sVs +I15 +sVu +I4 +sV_ +I2 +sV? +I1 +ssVeg +p1168 +(dp1169 +Vi +I5 +sVa +I30 +sVr +I2 +sVo +I2 +ssVef +p1170 +(dp1171 +Va +I1 +sV +I3 +sVe +I10 +sVf +I34 +sV- +I2 +sVo +I18 +sVs +I1 +sVr +I1 +sVu +I9 +ssVea +p1172 +(dp1173 +V +I8 +sVc +I6 +sVd +I21 +sVi +I7 +sVm +I1 +sVn +I8 +sVs +I14 +sVr +I9 +sVu +I201 +sVt +I3 +sVv +I1 +ssVec +p1174 +(dp1175 +V +I128 +sVe +I22 +sVi +I14 +sVh +I3 +sVk +I7 +sVo +I37 +sVs +I1 +sVr +I9 +sVu +I7 +sVt +I82 +sVz +I1 +ssVeb +p1176 +(dp1177 +Va +I1 +sV +I2 +sVr +I5 +sVu +I2 +sVo +I1 +ssVey +p1178 +(dp1179 +Vd +I1 +sV +I15 +sV, +I4 +sV_ +I1 +sV. +I1 +ssVex +p1180 +(dp1181 +Va +I7 +sVc +I22 +sVe +I20 +sVi +I9 +sV +I8 +sVo +I1 +sVq +I1 +sVp +I28 +sVt +I44 +sV_ +I1 +ssVez +p1182 +(dp1183 +V! +I3 +sV +I236 +sV- +I63 +sV, +I34 +sV. +I8 +sV; +I3 +ssVeu +p1184 +(dp1185 +V! +I2 +sV +I117 +sVe +I13 +sVf +I7 +sVi +I9 +sVm +I2 +sVl +I22 +sVn +I31 +sVp +I8 +sVs +I34 +sVr +I636 +sVt +I70 +sVv +I17 +sVx +I290 +sV; +I2 +sV. +I4 +sV, +I6 +sV? +I1 +ssVet +p1186 +(dp1187 +Va +I21 +sV +I1033 +sVc +I3 +sVe +I26 +sVi +I46 +sVh +I5 +sV- +I1 +sV, +I24 +sVo +I18 +sV. +I11 +sV +I10 +sVs +I22 +sVr +I12 +sVu +I5 +sVt +I187 +sV; +I4 +sV_ +I1 +sV/ +I3 +ssVew +p1188 +(dp1189 +V +I11 +sVs +I3 +sVt +I1 +ssVev +p1190 +(dp1191 +Va +I52 +sV +I1 +sVe +I54 +sV +I11 +sV +I1 +sV +I1 +sVo +I12 +sVi +I21 +sVr +I3 +sVu +I3 +ssVeq +p1192 +(dp1193 +Vu +I46 +ssVep +p1194 +(dp1195 +Va +I19 +sV +I1 +sVe +I12 +sVl +I4 +sVo +I2 +sVp +I4 +sVr +I22 +sVu +I10 +sVt +I21 +ssVes +p1196 +(dp1197 +Va +I33 +sV +I1914 +sVc +I22 +sVe +I10 +sV) +I1 +sV- +I23 +sV, +I268 +sVo +I8 +sV. +I133 +sVq +I11 +sVp +I67 +sVs +I151 +sV! +I11 +sVu +I3 +sVt +I425 +sV; +I67 +sV: +I23 +sV[ +I3 +sV_ +I10 +sV? +I9 +ssVer +p1198 +(dp1199 +V! +I4 +sV +I531 +sV* +I2 +sV- +I11 +sV, +I79 +sV/ +I1 +sV. +I62 +sV; +I26 +sV: +I7 +sV? +I3 +sV +I13 +sV] +I2 +sVa +I85 +sVc +I36 +sVb +I1 +sVe +I40 +sVd +I43 +sVg +I43 +sVf +I7 +sVi +I46 +sVm +I50 +sVl +I5 +sVo +I20 +sVn +I44 +sVp +I5 +sVs +I197 +sVr +I120 +sVt +I60 +sVw +I1 +sVv +I53 +ssVeM +p1200 +(dp1201 +Va +I1 +ssVeB +p1202 +(dp1203 +Vo +I46 +ssVe] +p1204 +(dp1205 +V +I1 +ssVe_ +p1206 +(dp1207 +V +I6 +sV, +I13 +sV. +I13 +sV[ +I1 +sV: +I1 +sV; +I2 +ssVR +p1208 +(dp1209 +VC +I1 +ssVfy +p1210 +(dp1211 +V +I2 +sV, +I1 +ssVR +p1212 +(dp1213 +VF +I1 +ssVe- +p1214 +(dp1215 +Vc +I9 +sVE +I1 +sVD +I2 +sVG +I2 +sVf +I1 +sVj +I1 +sVm +I6 +sVl +I9 +sVN +I1 +sVs +I2 +sVt +I5 +sVv +I2 +ssVe, +p1216 +(dp1217 +Vq +I1 +sV +I911 +ssVe. +p1218 +(dp1219 +V +I443 +sV- +I2 +sV. +I2 +ssVe) +p1220 +(dp1221 +V +I3 +ssVe! +p1222 +(dp1223 +V) +I1 +sV +I47 +sV- +I1 +ssVe +p1224 +(dp1225 +V +I4 +sV +I1 +sV +I4 +sV +I69 +sV" +I5 +sV$ +I1 +sV( +I2 +sV1 +I22 +sV3 +I2 +sV2 +I3 +sV5 +I1 +sV4 +I7 +sV7 +I1 +sV6 +I1 +sV: +I1 +sV? +I1 +sV +I1 +sVA +I6 +sVC +I141 +sVB +I16 +sVE +I2 +sVD +I11 +sVG +I14 +sVF +I16 +sVI +I11 +sVH +I6 +sVK +I4 +sVJ +I9 +sVM +I32 +sVL +I30 +sVN +I6 +sVP +I65 +sVS +I11 +sVR +I7 +sVU +I4 +sVT +I19 +sVW +I3 +sVV +I23 +sVX +I42 +sV_ +I18 +sVa +I240 +sV +I123 +sVc +I463 +sVb +I169 +sVe +I291 +sVd +I824 +sVg +I88 +sVf +I283 +sVi +I68 +sVh +I53 +sVk +I1 +sVj +I156 +sVm +I479 +sVl +I694 +sVo +I77 +sVn +I264 +sVq +I304 +sVp +I558 +sVs +I511 +sVr +I229 +sVu +I64 +sVt +I320 +sVw +I12 +sVv +I327 +sVy +I8 +sVz +I1 +ssVe? +p1226 +(dp1227 +V +I68 +sV- +I1 +ssVe; +p1228 +(dp1229 +V +I260 +ssVe: +p1230 +(dp1231 +V +I87 +ssV.. +p1232 +(dp1233 +V +I6 +sV- +I1 +sV. +I18 +ssVxi +p1234 +(dp1235 +Vc +I1 +sVb +I1 +sV +I4 +sVm +I3 +sVl +I1 +sVo +I4 +sVs +I2 +ssVxo +p1236 +(dp1237 +Vr +I1 +ssVxc +p1238 +(dp1239 +Ve +I15 +sV +I1 +sV +I1 +sVl +I2 +sVo +I2 +sVu +I2 +ssVxa +p1240 +(dp1241 +Vs +I1 +sVc +I2 +sVm +I2 +sV, +I1 +sVn +I8 +ssV1] +p1242 +(dp1243 +V +I31 +sV, +I8 +sV. +I5 +sV; +I4 +sV: +I1 +sV? +I2 +ssVxe +p1244 +(dp1245 +V +I2 +sVs +I4 +sVr +I9 +sVm +I9 +sV, +I1 +ssVxp +p1246 +(dp1247 +Ve +I5 +sV +I4 +sVl +I7 +sVo +I3 +sVi +I1 +sVr +I6 +sVu +I2 +ssVxq +p1248 +(dp1249 +Vu +I1 +ssVxt +p1250 +(dp1251 +Va +I2 +sV +I17 +sVe +I6 +sVo +I1 +sVs +I4 +sVr +I21 +ssVD +p1252 +(dp1253 +Vs +I3 +ssVD +p1254 +(dp1255 +Vc +I1 +ssVx[ +p1256 +(dp1257 +V1 +I1 +ssV1e +p1258 +(dp1259 +Vr +I1 +ssVx_ +p1260 +(dp1261 +V, +I2 +ssVx. +p1262 +(dp1263 +V) +I1 +sV +I27 +sVc +I2 +ssVx, +p1264 +(dp1265 +V +I40 +ssVx- +p1266 +(dp1267 +Va +I1 +sVb +I2 +sVd +I2 +sVh +I1 +sVm +I3 +sVs +I1 +sVt +I1 +ssVx +p1268 +(dp1269 +Vi +I3 +sVB +I1 +sVD +I1 +sVH +I1 +sVJ +I2 +sVP +I1 +sVa +I26 +sV +I5 +sVc +I20 +sVb +I3 +sVe +I18 +sVd +I42 +sVg +I7 +sVf +I28 +sV +I15 +sVh +I8 +sVj +I3 +sVm +I42 +sVl +I13 +sVo +I3 +sVn +I8 +sVq +I31 +sVp +I27 +sVs +I14 +sVr +I10 +sVu +I3 +sVt +I7 +sVv +I15 +sVy +I1 +ssVx! +p1270 +(dp1271 +V +I1 +ssVx: +p1272 +(dp1273 +V +I2 +ssVx; +p1274 +(dp1275 +V +I15 +ssVx? +p1276 +(dp1277 +V +I1 +ssV11 +p1278 +(dp1279 +V +I1 +sV/ +I1 +sV. +I2 +sV3 +I1 +sV; +I1 +sV] +I2 +ssV10 +p1280 +(dp1281 +Va +I2 +sV +I4 +sV. +I4 +sV0 +I4 +sV9 +I1 +sV] +I2 +ssV13 +p1282 +(dp1283 +V +I1 +ssV12 +p1284 +(dp1285 +V. +I1 +sV4 +I1 +sV6 +I1 +sV; +I1 +sV] +I2 +sV_ +I1 +ssV15 +p1286 +(dp1287 +V +I1 +sV) +I1 +sV, +I1 +sV. +I1 +sV0 +I1 +sV2 +I1 +sV4 +I2 +sV9 +I2 +ssV14 +p1288 +(dp1289 +V +I2 +sV- +I1 +sV7 +I1 +ssV17 +p1290 +(dp1291 +V1 +I2 +sV0 +I2 +sV3 +I8 +sV5 +I14 +sV7 +I2 +sV6 +I20 +sV9 +I1 +sV8 +I3 +ssV16 +p1292 +(dp1293 +V9 +I1 +sV +I1 +sV1 +I2 +sV4 +I1 +sV7 +I1 +ssV19 +p1294 +(dp1295 +V9 +I5 +sV7 +I3 +ssV18 +p1296 +(dp1297 +V1 +I1 +sV0 +I2 +sV2 +I3 +sV, +I1 +sV +I1 +ssV1; +p1298 +(dp1299 +V +I2 +ssV1 +p1300 +(dp1301 +VO +I1 +sV +I1 +sVb +I1 +sVf +I1 +sVJ +I2 +sVo +I1 +sVN +I1 +sVs +I1 +sVT +I1 +ssV1( +p1302 +(dp1303 +Vc +I2 +ssV1* +p1304 +(dp1305 +V* +I1 +ssV1- +p1306 +(dp1307 +V2 +I1 +ssV1, +p1308 +(dp1309 +V +I5 +ssV1/ +p1310 +(dp1311 +V0 +I1 +ssV1. +p1312 +(dp1313 +V +I2 +sVt +I2 +ssVDO +p1314 +(dp1315 +VC +I2 +sVM +I2 +sVT +I1 +sVN +I1 +ssVx +p1316 +(dp1317 +Vc +I8 +ssVDI +p1318 +(dp1319 +VC +I2 +sVE +I1 +sVD +I4 +sVN +I2 +sVS +I2 +sVR +I1 +sVU +I1 +sVT +I3 +ssVDD +p1320 +(dp1321 +VI +I1 +ssVDE +p1322 +(dp1323 +V +I10 +sVD +I1 +sVM +I1 +sV, +I2 +sVN +I2 +sVR +I2 +sVT +I1 +sV. +I1 +ssVDC +p1324 +(dp1325 +VC +I1 +ssVDA +p1326 +(dp1327 +VM +I3 +sVN +I1 +ssVDU +p1328 +(dp1329 +VI +I1 +sV +I2 +ssVDo +p1330 +(dp1331 +V +I1 +sVr +I3 +sVm +I2 +sVn +I4 +ssVDi +p1332 +(dp1333 +Va +I1 +sVs +I2 +sVe +I26 +sVd +I1 +sVo +I1 +ssVDe +p1334 +(dp1335 +V +I11 +sVc +I6 +sVf +I4 +sVm +I1 +sVl +I1 +sVn +I1 +sVs +I5 +sVu +I2 +ssVDa +p1336 +(dp1337 +Vk +I1 +sVr +I2 +sVm +I4 +sVt +I1 +sVn +I10 +ssVD, +p1338 +(dp1339 +V +I2 +ssVD* +p1340 +(dp1341 +V +I1 +ssVD' +p1342 +(dp1343 +VA +I1 +sVa +I1 +sVu +I1 +ssVD +p1344 +(dp1345 +VM +I1 +sVT +I5 +sVW +I1 +ssVWE +p1346 +(dp1347 +VR +I1 +ssVWA +p1348 +(dp1349 +VR +I4 +sVN +I1 +ssVWI +p1350 +(dp1351 +VS +I1 +ssVWH +p1352 +(dp1353 +VA +I1 +ssVWe +p1354 +(dp1355 +V +I10 +sVs +I2 +sVr +I1 +sVb +I2 +sVl +I1 +ssVWa +p1356 +(dp1357 +Vs +I1 +ssVWo +p1358 +(dp1359 +Vr +I1 +ssVWi +p1360 +(dp1361 +Vs +I1 +sVr +I1 +ssVWh +p1362 +(dp1363 +Vi +I1 +sVy +I1 +ssVWy +p1364 +(dp1365 +Vo +I1 +ssVP +p1366 +(dp1367 +VE +I1 +ssVj +p1368 +(dp1369 +Vs +I33 +ssVj +p1370 +(dp1371 +V +I17 +ssVF +p1372 +(dp1373 +VA +I1 +ssV$2 +p1374 +(dp1375 +V +I1 +ssVp +p1376 +(dp1377 +Vi +I1 +ssV.o +p1378 +(dp1379 +Vr +I2 +ssVt +p1380 +(dp1381 +Vo +I1 +ssVl +p1382 +(dp1383 +V +I1 +sVi +I1 +sVa +I1 +ssVn +p1384 +(dp1385 +V +I2 +ssVPM +p1386 +(dp1387 +VB +I1 +ssVd +p1388 +(dp1389 +Vi +I1 +sVe +I1 +sVo +I5 +ssVg +p1390 +(dp1391 +Vy +I1 +sVl +I2 +ssV.c +p1392 +(dp1393 +Vo +I2 +ssVus +p1394 +(dp1395 +V! +I1 +sV +I842 +sVp +I3 +sV- +I9 +sV, +I51 +sV. +I14 +sV; +I6 +sV: +I2 +sV? +I14 +sV[ +I1 +sV_ +I1 +sVa +I17 +sVc +I2 +sVe +I78 +sV +I6 +sV +I1 +sVl +I1 +sVo +I1 +sVq +I26 +sVi +I34 +sVs +I90 +sVu +I4 +sVt +I36 +ssVj' +p1396 +(dp1397 +Va +I81 +sVe +I9 +sVi +I2 +sVo +I1 +sV +I14 +sVy +I6 +ssV#6 +p1398 +(dp1399 +V +I1 +ssV#4 +p1400 +(dp1401 +V6 +I1 +ssV.z +p1402 +(dp1403 +Vi +I2 +ssVju +p1404 +(dp1405 +Vi +I2 +sVp +I1 +sVs +I42 +sVr +I8 +sVg +I16 +ssVjo +p1406 +(dp1407 +Va +I1 +sVi +I9 +sVs +I2 +sVu +I137 +sVl +I10 +ssVje +p1408 +(dp1409 +V +I287 +sVc +I34 +sV, +I1 +sV. +I1 +sVs +I15 +sVu +I30 +sVt +I32 +sV? +I3 +ssVja +p1410 +(dp1411 +Vc +I1 +sVm +I56 +sVl +I4 +sVn +I6 +sVr +I11 +sVu +I2 +ssVua +p1412 +(dp1413 +V +I26 +sV: +I2 +sVd +I4 +sVg +I1 +sVi +I38 +sV- +I1 +sVl +I4 +sVn +I77 +sVq +I1 +sV. +I1 +sVr +I28 +sVu +I1 +sVt +I32 +sVz +I1 +sVb +I1 +sV, +I2 +ssV6 +p1414 +(dp1415 +Vi +I1 +sVa +I1 +sV; +I1 +sVm +I1 +sVn +I1 +ssV6, +p1416 +(dp1417 +V +I8 +ssV6. +p1418 +(dp1419 +V) +I1 +sV +I4 +ssV60 +p1420 +(dp1421 +V0 +I1 +sV +I1 +sV. +I1 +ssV61 +p1422 +(dp1423 +V0 +I2 +sV; +I1 +sV, +I3 +sV. +I2 +ssV62 +p1424 +(dp1425 +V2 +I2 +sV. +I1 +ssV63 +p1426 +(dp1427 +V. +I2 +ssV64 +p1428 +(dp1429 +V4 +I1 +sV- +I2 +sV, +I1 +sV. +I1 +ssV65 +p1430 +(dp1431 +V0 +I1 +sV5 +I1 +ssV66 +p1432 +(dp1433 +V; +I1 +sV, +I3 +ssV67 +p1434 +(dp1435 +V; +I1 +sV2 +I1 +ssV68 +p1436 +(dp1437 +V, +I2 +ssV69 +p1438 +(dp1439 +V, +I1 +sV6 +I1 +ssV6; +p1440 +(dp1441 +V +I2 +ssV +p1442 +(dp1443 +Vc +I1 +ssV_l +p1444 +(dp1445 +Vi +I1 +sVa +I1 +sVe +I2 +sV' +I2 +ssVr +p1446 +(dp1447 +Vc +I13 +sVt +I1 +sVn +I1 +ssV +p1448 +(dp1449 +V( +I1 +ssVo +p1450 +(dp1451 +Vn +I4 +ssVm +p1452 +(dp1453 +Va +I1 +sVb +I1 +ssVf +p1454 +(dp1455 +V +I1 +ssVe +p1456 +(dp1457 +V; +I1 +ssVa +p1458 +(dp1459 +Vr +I2 +sVd +I1 +ssV_a +p1460 +(dp1461 +Vu +I1 +sVl +I1 +ssVv +p1462 +(dp1463 +Ve +I1 +ssVs +p1464 +(dp1465 +V +I1 +sVs +I1 +sVe +I2 +ssV6] +p1466 +(dp1467 +V +I3 +sV; +I1 +ssVq +p1468 +(dp1469 +Vu +I1 +ssV' +p1470 +(dp1471 +VI +I1 +sVL +I1 +ssVI; +p1472 +(dp1473 +V +I1 +ssVI: +p1474 +(dp1475 +V +I1 +ssVI- +p1476 +(dp1477 +V1 +I1 +ssVI, +p1478 +(dp1479 +V +I32 +ssVI. +p1480 +(dp1481 +V +I18 +ssVI +p1482 +(dp1483 +Va +I1 +sVf +I2 +sVd +I12 +sVn +I1 +ssV? +p1484 +(dp1485 +V +I2 +ssVIX +p1486 +(dp1487 +V +I1 +sV. +I4 +ssVI[ +p1488 +(dp1489 +V1 +I2 +ssVI_ +p1490 +(dp1491 +V +I1 +ssVIS +p1492 +(dp1493 +V +I3 +sVC +I1 +sV" +I1 +sVE +I1 +sVM +I2 +sV, +I1 +sVO +I1 +sVS +I1 +sVT +I1 +ssVIR +p1494 +(dp1495 +VM +I1 +sVE +I4 +sV, +I1 +ssVIU +p1496 +(dp1497 +VM +I1 +ssVIT +p1498 +(dp1499 +V +I2 +sVE +I3 +sVI +I4 +sVH +I1 +sVN +I1 +sVR +I30 +sVY +I4 +ssVIV +p1500 +(dp1501 +V +I2 +sVE +I2 +sV. +I3 +sV_ +I2 +sV: +I1 +sV? +I1 +ssVII +p1502 +(dp1503 +V +I16 +sVI +I22 +sV, +I18 +sV. +I10 +sV[ +I2 +sV_ +I1 +ssVIM +p1504 +(dp1505 +VI +I5 +sVP +I2 +sVE +I2 +ssVIL +p1506 +(dp1507 +VI +I3 +sV +I1 +sVS +I1 +ssVIO +p1508 +(dp1509 +VN +I6 +ssVIN +p1510 +(dp1511 +V +I6 +sVC +I3 +sVD +I4 +sVG +I3 +sVT +I2 +ssVIA +p1512 +(dp1513 +VB +I1 +sVL +I1 +ssVIC +p1514 +(dp1515 +V +I4 +sVU +I1 +sVE +I1 +sVT +I1 +ssVIB +p1516 +(dp1517 +VI +I1 +sVR +I1 +sVU +I1 +ssVIE +p1518 +(dp1519 +V +I1 +sVS +I3 +sVD +I1 +sVN +I1 +ssVID +p1520 +(dp1521 +VE +I5 +sVO +I1 +ssVIG +p1522 +(dp1523 +VE +I1 +ssVIF +p1524 +(dp1525 +V +I3 +ssV +p1526 +(dp1527 +Vt +I1 +ssVIs +p1528 +(dp1529 +Vs +I9 +sVr +I3 +sVm +I2 +sVl +I1 +ssVIr +p1530 +(dp1531 +Va +I1 +ssVIt +p1532 +(dp1533 +Va +I11 +sV +I1 +ssVIv +p1534 +(dp1535 +Va +I5 +ssVIm +p1536 +(dp1537 +Va +I1 +ssVIl +p1538 +(dp1539 +V +I129 +sVs +I15 +sVl +I1 +ssVIo +p1540 +(dp1541 +Vw +I1 +ssVIn +p1542 +(dp1543 +Vc +I1 +sVt +I3 +sVd +I3 +sV +I1 +sVf +I2 +ssVIc +p1544 +(dp1545 +Vi +I1 +ssVIb +p1546 +(dp1547 +Va +I3 +ssVIe +p1548 +(dp1549 +Vr +I4 +ssVId +p1550 +(dp1551 +Ve +I2 +ssVIg +p1552 +(dp1553 +Vn +I1 +ssVIf +p1554 +(dp1555 +V +I11 +ssV(~ +p1556 +(dp1557 +V) +I1 +ssV(s +p1558 +(dp1559 +Vu +I1 +ssV(p +p1560 +(dp1561 +Va +I1 +ssVv +p1562 +(dp1563 +Vm +I2 +sVt +I1 +ssV(t +p1564 +(dp1565 +Vh +I1 +ssVA, +p1566 +(dp1567 +V +I1 +ssV(i +p1568 +(dp1569 +Vf +I2 +sVn +I2 +ssV(o +p1570 +(dp1571 +Vr +I3 +sVu +I1 +sVn +I1 +ssV(c +p1572 +(dp1573 +V) +I2 +ssV(a +p1574 +(dp1575 +Vs +I1 +sVn +I2 +ssV(f +p1576 +(dp1577 +Vr +I1 +ssV(d +p1578 +(dp1579 +V +I1 +ssV2O +p1580 +(dp1581 +V. +I1 +ssV(_ +p1582 +(dp1583 +V) +I1 +sVM +I1 +ssV(V +p1584 +(dp1585 +Vo +I1 +ssV(T +p1586 +(dp1587 +Vh +I1 +ssV(J +p1588 +(dp1589 +Ve +I1 +ssVv +p1590 +(dp1591 +Vr +I10 +ssVTM +p1592 +(dp1593 +V +I1 +ssV(N +p1594 +(dp1595 +Vo +I1 +ssV(C +p1596 +(dp1597 +V) +I1 +ssVca +p1598 +(dp1599 +Vc +I7 +sVb +I23 +sVd +I12 +sVf +I3 +sVi +I11 +sVm +I91 +sVl +I16 +sV. +I2 +sVp +I29 +sVs +I15 +sVr +I82 +sVu +I16 +sVt +I17 +sVv +I1 +sVy +I3 +sVn +I49 +ssVt +p1600 +(dp1601 +Va +I2 +sV +I6 +sVe +I67 +sVi +I1 +sV +I1 +sV, +I1 +sV. +I2 +sVr +I105 +sVu +I3 +ssV(3 +p1602 +(dp1603 +V) +I2 +ssVv +p1604 +(dp1605 +Ve +I4 +ssVl +p1606 +(dp1607 +Va +I1 +sV +I1 +sVe +I3 +ssVm +p1608 +(dp1609 +Ve +I79 +ssV(# +p1610 +(dp1611 +V6 +I1 +ssVc +p1612 +(dp1613 +Vh +I9 +ssVo +p1614 +(dp1615 +Vq +I1 +sVa +I3 +sVs +I2 +sVm +I1 +sVo +I1 +ssVo +p1616 +(dp1617 +Vm +I1 +sVt +I2 +ssVo +p1618 +(dp1619 +Vs +I1 +ssVo +p1620 +(dp1621 +Vt +I3 +ssVo +p1622 +(dp1623 +Vt +I31 +ssVo +p1624 +(dp1625 +V +I48 +sV, +I1 +ssVd" +p1626 +(dp1627 +V +I1 +ssVo. +p1628 +(dp1629 +V +I19 +sVo +I2 +sVn +I1 +ssVo- +p1630 +(dp1631 +Vc +I1 +sVt +I1 +sVd +I7 +ssVo, +p1632 +(dp1633 +V +I43 +ssVo! +p1634 +(dp1635 +V +I1 +ssVo +p1636 +(dp1637 +V" +I1 +sVi +I2 +sVG +I1 +sVP +I1 +sVT +I3 +sVa +I14 +sV +I2 +sVc +I8 +sVe +I6 +sVd +I12 +sVg +I3 +sVf +I3 +sV +I2 +sVh +I2 +sVk +I1 +sVm +I5 +sVl +I5 +sVo +I5 +sVn +I9 +sVq +I1 +sVp +I9 +sVs +I7 +sVr +I2 +sVu +I1 +sVt +I17 +sVw +I4 +sVv +I1 +sVy +I3 +ssVo; +p1638 +(dp1639 +V +I9 +ssVo: +p1640 +(dp1641 +V +I4 +ssVo_ +p1642 +(dp1643 +V; +I1 +sV, +I1 +ssV; +p1644 +(dp1645 +V +I1 +sVA +I1 +sVC +I9 +sVD +I3 +sVJ +I1 +sVO +I2 +sVP +I2 +sV_ +I1 +sVa +I10 +sV +I1 +sVc +I66 +sVe +I114 +sVd +I16 +sVf +I1 +sVi +I103 +sVh +I1 +sVj +I81 +sVm +I78 +sVl +I61 +sVo +I22 +sVn +I14 +sVq +I14 +sVp +I6 +sVs +I16 +sVr +I2 +sVu +I7 +sVt +I14 +sVv +I16 +sVy +I1 +ssVo[ +p1646 +(dp1647 +V1 +I2 +ssVoo +p1648 +(dp1649 +Vs +I2 +sVk +I50 +sVd +I1 +sVf +I2 +ssVon +p1650 +(dp1651 +V! +I2 +sV +I749 +sV" +I1 +sV' +I3 +sV- +I3 +sV, +I90 +sV. +I40 +sV; +I19 +sV: +I5 +sV? +I3 +sVg +I47 +sV[ +I1 +sV_ +I1 +sVa +I36 +sVc +I68 +sVe +I20 +sVd +I288 +sV +I8 +sVf +I12 +sVi +I22 +sVh +I8 +sVj +I1 +sVl +I6 +sVo +I11 +sVn +I307 +sVq +I2 +sVs +I381 +sVu +I1 +sVt +I326 +sVv +I29 +sVz +I2 +ssVom +p1652 +(dp1653 +Va +I10 +sV +I18 +sVb +I47 +sVe +I72 +sVi +I16 +sV +I2 +sV +I3 +sVm +I323 +sVo +I2 +sV. +I3 +sVp +I62 +sVs +I2 +sVt +I2 +sVn +I1 +sV> +I1 +ssVol +p1654 +(dp1655 +Va +I19 +sV +I6 +sVc +I1 +sV +I1 +sVe +I45 +sVd +I15 +sVi +I55 +sV +I3 +sVl +I28 +sVo +I26 +sV, +I5 +sV +I18 +sVs +I4 +sVu +I22 +sVt +I31 +sV. +I2 +sV; +I1 +sV: +I1 +ssVok +p1656 +(dp1657 +Va +I1 +sV +I19 +sV) +I1 +sV, +I6 +sV. +I2 +sV0 +I3 +sVs +I19 +ssVoj +p1658 +(dp1659 +Ve +I32 +ssVoi +p1660 +(dp1661 +V! +I14 +sV +I100 +sVc +I6 +sV: +I2 +sVe +I21 +sVd +I7 +sVg +I11 +sV- +I6 +sVl +I34 +sVn +I123 +sVq +I15 +sVs +I250 +sVr +I165 +sVt +I75 +sVv +I2 +sVx +I16 +sV; +I5 +sV. +I6 +sV, +I37 +sV? +I2 +ssVoh +p1662 +(dp1663 +V! +I2 +sVi +I1 +ssVog +p1664 +(dp1665 +Ve +I5 +sVi +I13 +sVl +I4 +sVo +I2 +sVn +I4 +sV +I2 +sVr +I4 +sVu +I4 +ssVof +p1666 +(dp1667 +Va +I1 +sV +I66 +sVe +I3 +sVf +I23 +sV +I3 +sV, +I1 +sVo +I7 +sVl +I10 +sVi +I6 +sVr +I2 +sVt +I5 +sV. +I1 +ssVoe +p1668 +(dp1669 +Vi +I6 +sVs +I2 +sVu +I57 +ssVod +p1670 +(dp1671 +Va +I4 +sV +I3 +sVe +I13 +sVi +I14 +sVo +I4 +sV +I4 +sVs +I1 +sVu +I18 +sV; +I1 +ssVoc +p1672 +(dp1673 +Va +I3 +sV +I3 +sVc +I10 +sVe +I14 +sVi +I12 +sVh +I42 +sVk +I1 +sVo +I22 +sV +I5 +sVs +I1 +sV! +I1 +sVu +I19 +sVt +I15 +sV +I3 +sVr +I2 +ssVob +p1674 +(dp1675 +Va +I5 +sVe +I15 +sV +I3 +sVj +I3 +sVl +I16 +sVo +I4 +sVi +I1 +sVs +I7 +sVr +I2 +sVu +I1 +sVt +I3 +sVv +I1 +ssVoa +p1676 +(dp1677 +Vc +I2 +sVb +I1 +sVd +I3 +sVi +I1 +sVm +I1 +sVl +I1 +sVn +I1 +ssVoy +p1678 +(dp1679 +V +I8 +sVa +I83 +sV +I1 +sVe +I63 +sVo +I1 +ssVox +p1680 +(dp1681 +Ve +I2 +sV. +I2 +ssVow +p1682 +(dp1683 +Va +I1 +sV +I14 +sV: +I1 +sVe +I1 +sVi +I3 +sV, +I3 +sV. +I1 +sVs +I1 +sVn +I4 +ssVov +p1684 +(dp1685 +Vi +I29 +sVe +I16 +ssVou +p1686 +(dp1687 +V! +I1 +sV +I105 +sVp +I113 +sV, +I4 +sV. +I2 +sVh +I3 +sV; +I1 +sV: +I1 +sVa +I23 +sVc +I32 +sVb +I14 +sVe +I37 +sVd +I22 +sVg +I18 +sVf +I11 +sV +I9 +sV +I1 +sVj +I49 +sVm +I1 +sVl +I72 +sV +I2 +sVn +I16 +sVq +I3 +sVi +I36 +sVs +I709 +sVr +I573 +sVt +I372 +sVv +I234 +sVx +I18 +sVz +I13 +ssVot +p1688 +(dp1689 +Va +I6 +sV +I28 +sVe +I21 +sVi +I5 +sVh +I28 +sV* +I1 +sV, +I7 +sV. +I4 +sVs +I17 +sVr +I77 +sVt +I16 +sV: +I1 +ssVos +p1690 +(dp1691 +Va +I14 +sV +I62 +sVc +I2 +sVe +I52 +sVp +I1 +sVi +I12 +sV- +I13 +sVm +I1 +sV, +I12 +sVo +I23 +sV. +I4 +sVq +I1 +sV +I5 +sVs +I134 +sVt +I22 +sV; +I1 +ssVor +p1692 +(dp1693 +V +I6 +sV +I81 +sV, +I8 +sV; +I1 +sV: +I2 +sV +I4 +sVa +I52 +sVc +I16 +sVb +I2 +sVe +I75 +sVd +I83 +sVg +I22 +sVf +I2 +sVi +I17 +sVk +I10 +sVm +I45 +sVl +I3 +sVo +I1 +sVn +I13 +sVq +I1 +sVp +I11 +sVs +I39 +sVr +I32 +sVt +I214 +sVw +I1 +sVy +I1 +sVz +I1 +ssVoq +p1694 +(dp1695 +Vu +I16 +ssVop +p1696 +(dp1697 +V +I8 +sVe +I16 +sVi +I3 +sV +I9 +sVh +I26 +sVl +I17 +sVo +I18 +sVp +I5 +sVr +I7 +sVu +I1 +sVt +I4 +sVy +I15 +ssVNi +p1698 +(dp1699 +V +I1 +sVc +I1 +ssVa +p1700 +(dp1701 +Va +I3 +sVo +I1 +ssVNo +p1702 +(dp1703 +Vi +I1 +sVn +I4 +sVs +I2 +sVr +I6 +sVu +I20 +sVt +I3 +sVv +I4 +ssVa +p1704 +(dp1705 +Vl +I2 +ssVNa +p1706 +(dp1707 +Vp +I3 +sVt +I2 +sVd +I1 +ssVa +p1708 +(dp1709 +Vl +I2 +ssVNe +p1710 +(dp1711 +V +I4 +sVb +I1 +sVw +I7 +sVv +I1 +ssVa +p1712 +(dp1713 +Vf +I1 +sV +I1 +sVm +I1 +sVo +I3 +sVs +I2 +sVv +I1 +ssVa +p1714 +(dp1715 +Vc +I5 +sVt +I68 +sVn +I13 +ssVNu +p1716 +(dp1717 +Vm +I2 +ssVNI +p1718 +(dp1719 +VT +I2 +ssVNO +p1720 +(dp1721 +V +I2 +sVT +I4 +ssVNB +p1722 +(dp1723 +VE +I8 +ssVNC +p1724 +(dp1725 +VI +I1 +sVE +I1 +sVL +I2 +ssVND +p1726 +(dp1727 +VI +I4 +sV +I3 +sV* +I1 +sVE +I4 +sV, +I1 +ssVNE +p1728 +(dp1729 +VY +I1 +sVS +I1 +sVG +I1 +ssVNG +p1730 +(dp1731 +V +I3 +ssVNY +p1732 +(dp1733 +V +I2 +sVT +I1 +ssVNS +p1734 +(dp1735 +V +I6 +sVE +I1 +sV. +I1 +ssVNT +p1736 +(dp1737 +V! +I2 +sVA +I2 +sVI +I3 +sV* +I1 +sVS +I1 +sVR +I1 +sVY +I2 +ssVNU +p1738 +(dp1739 +VM +I2 +ssVN, +p1740 +(dp1741 +V +I3 +ssVN +p1742 +(dp1743 +VA +I1 +sVb +I1 +sVE +I2 +sVD +I3 +sVF +I1 +sVI +I2 +sVU +I1 +sV[ +I1 +ssVN' +p1744 +(dp1745 +Va +I2 +sV +I1 +sVe +I1 +sVT +I1 +ssV'_ +p1746 +(dp1747 +V +I1 +sVH +I2 +ssVaa +p1748 +(dp1749 +Vs +I1 +sV, +I3 +ssVN +p1750 +(dp1751 +Vr +I1 +ssVac +p1752 +(dp1753 +Va +I94 +sV +I3 +sVc +I40 +sV: +I1 +sVe +I29 +sV +I4 +sVh +I64 +sVl +I10 +sVo +I7 +sV, +I2 +sVq +I11 +sVi +I6 +sVs +I1 +sVr +I10 +sVu +I21 +sVt +I30 +sV; +I1 +sV. +I1 +ssVab +p1754 +(dp1755 +Va +I33 +sVb +I28 +sVe +I2 +sVi +I35 +sVh +I1 +sVj +I1 +sVl +I135 +sVo +I39 +sV +I4 +sVs +I9 +sVr +I2 +sVu +I1 +sVy +I2 +sV, +I1 +ssVae +p1756 +(dp1757 +Va +I1 +sV +I1 +sVr +I1 +sVl +I8 +ssVad +p1758 +(dp1759 +Va +I29 +sV +I8 +sVe +I89 +sVd +I9 +sVi +I26 +sVj +I1 +sVm +I12 +sV, +I2 +sVo +I27 +sV +I5 +sVr +I12 +sVu +I2 +sVv +I6 +sVy +I2 +ssVag +p1760 +(dp1761 +Va +I9 +sVe +I180 +sVi +I15 +sV +I1 +sVo +I5 +sVn +I70 +sV +I15 +sVr +I15 +sVu +I16 +ssVaf +p1762 +(dp1763 +Vi +I2 +sV +I3 +sVr +I2 +sVt +I2 +sVf +I20 +ssVai +p1764 +(dp1765 +V! +I1 +sV +I175 +sVb +I10 +sVe +I198 +sVd +I21 +sVg +I14 +sVi +I1 +sV- +I4 +sVm +I44 +sVl +I71 +sVn +I184 +sVs +I600 +sVr +I187 +sVt +I870 +sVx +I3 +sV[ +I1 +sV. +I3 +sV, +I14 +sV? +I1 +ssVah +p1766 +(dp1767 +Va +I1 +sV +I1 +sVe +I1 +sVi +I1 +sVm +I1 +sV, +I1 +sVo +I2 +sV! +I1 +ssVak +p1768 +(dp1769 +V +I1 +sVe +I5 +sVo +I1 +ssVaj +p1770 +(dp1771 +Ve +I15 +sVo +I4 +ssVam +p1772 +(dp1773 +Va +I99 +sV +I5 +sVb +I106 +sVe +I62 +sV +I1 +sV) +I1 +sVi +I47 +sV +I6 +sVm +I7 +sV, +I5 +sVo +I17 +sVn +I3 +sVp +I21 +sVu +I3 +sV. +I2 +sV: +I1 +sV_ +I1 +ssVal +p1774 +(dp1775 +V! +I1 +sV +I95 +sVp +I4 +sV- +I1 +sV, +I16 +sV. +I6 +sV; +I5 +sV? +I3 +sV_ +I1 +sVa +I28 +sVc +I4 +sVe +I66 +sVd +I1 +sVg +I2 +sVf +I2 +sV +I5 +sVh +I23 +sVm +I3 +sVl +I120 +sVo +I33 +sVi +I39 +sVs +I5 +sVr +I2 +sVu +I8 +sVt +I15 +sVw +I1 +sV +I18 +sVy +I1 +ssVao +p1776 +(dp1777 +V +I2 +sVr +I4 +sVs +I1 +sVn +I2 +ssVan +p1778 +(dp1779 +V +I34 +sV' +I1 +sV) +I1 +sV- +I3 +sV, +I8 +sV. +I2 +sV; +I1 +sV +I17 +sV[ +I1 +sV_ +I1 +sVa +I31 +sVc +I92 +sVe +I2 +sVd +I737 +sVg +I235 +sVi +I31 +sVk +I1 +sVo +I16 +sVn +I33 +sVq +I17 +sV +I7 +sVs +I442 +sVu +I6 +sVt +I521 +sVv +I1 +sVy +I20 +ssVaq +p1780 +(dp1781 +Vu +I40 +ssVap +p1782 +(dp1783 +Va +I4 +sV +I5 +sVe +I31 +sV +I3 +sVi +I51 +sVh +I7 +sVl +I3 +sVo +I7 +sV. +I1 +sVp +I104 +sVr +I45 +sVt +I14 +ssVas +p1784 +(dp1785 +V! +I18 +sV +I244 +sVc +I4 +sVe +I21 +sVi +I6 +sV +I1 +sVh +I1 +sVk +I4 +sV, +I34 +sV. +I12 +sVp +I3 +sVs +I197 +sVu +I1 +sVa +I7 +sV[ +I1 +sV; +I4 +sV? +I1 +sVt +I25 +ssVar +p1786 +(dp1787 +V +I177 +sV' +I1 +sVp +I3 +sV- +I3 +sV, +I10 +sV; +I1 +sVg +I33 +sVa +I64 +sVc +I56 +sVb +I15 +sVe +I115 +sVd +I99 +sV +I4 +sVf +I6 +sVi +I40 +sV +I2 +sVk +I6 +sVm +I49 +sVl +I65 +sVo +I85 +sVn +I14 +sVq +I33 +sV +I8 +sVs +I10 +sVr +I78 +sVu +I12 +sVt +I240 +sVy +I15 +ssVau +p1788 +(dp1789 +V +I240 +sV) +I1 +sV- +I8 +sV, +I13 +sV. +I5 +sV; +I3 +sV: +I1 +sV[ +I1 +sVc +I49 +sVb +I4 +sVd +I20 +sVg +I4 +sVf +I3 +sVj +I8 +sVm +I16 +sVl +I3 +sVn +I3 +sVq +I1 +sVp +I21 +sVs +I68 +sVr +I41 +sVt +I218 +sVv +I37 +sVx +I117 +ssVat +p1790 +(dp1791 +Va +I13 +sV +I52 +sVe +I89 +sV' +I1 +sVi +I136 +sVh +I6 +sV, +I11 +sVo +I4 +sV. +I2 +sVq +I1 +sV +I1 +sVs +I28 +sVr +I55 +sVu +I29 +sVt +I66 +sV +I1 +sVy +I1 +sV; +I1 +sV: +I3 +sV? +I1 +ssVaw +p1792 +(dp1793 +Va +I4 +sVy +I1 +sVs +I2 +sV. +I1 +ssVav +p1794 +(dp1795 +Va +I259 +sVe +I250 +sVi +I32 +sVo +I102 +sV +I3 +sVr +I3 +ssVay +p1796 +(dp1797 +Va +I25 +sV +I30 +sVe +I22 +sVi +I1 +sV) +I1 +sVm +I1 +sVo +I1 +sV +I5 +sVs +I54 +ssVax +p1798 +(dp1799 +Vi +I3 +sV- +I2 +sVe +I2 +sV +I1 +ssVaz +p1800 +(dp1801 +Vi +I1 +ssVAs +p1802 +(dp1803 +Vi +I2 +sV +I3 +sVs +I2 +sVc +I1 +sVt +I1 +ssVAu +p1804 +(dp1805 +V +I10 +sVs +I8 +sVt +I1 +sVg +I2 +ssVa[ +p1806 +(dp1807 +V1 +I2 +ssVa] +p1808 +(dp1809 +V +I1 +sV. +I1 +ssVa_ +p1810 +(dp1811 +V, +I2 +ssVu +p1812 +(dp1813 +Vr +I8 +sVd +I1 +ssVa +p1814 +(dp1815 +V" +I1 +sVi +I6 +sV5 +I2 +sVC +I19 +sVB +I4 +sVE +I1 +sVD +I2 +sVG +I3 +sVF +I2 +sVH +I1 +sVM +I5 +sVP +I11 +sVS +I1 +sVR +I1 +sVU +I1 +sVT +I2 +sVV +I4 +sV_ +I9 +sVa +I22 +sV +I28 +sVc +I95 +sVb +I54 +sVe +I26 +sVd +I128 +sVg +I33 +sVf +I61 +sV +I13 +sVh +I9 +sVj +I21 +sVm +I139 +sVl +I61 +sVo +I2 +sVn +I36 +sVq +I30 +sVp +I182 +sVs +I72 +sVr +I63 +sVu +I27 +sVt +I67 +sVw +I2 +sVv +I114 +ssVa- +p1816 +(dp1817 +Vc +I1 +sVb +I1 +sVf +I10 +sVM +I1 +sVC +I2 +sVt +I15 +ssVa, +p1818 +(dp1819 +V +I76 +sVc +I1 +ssVa. +p1820 +(dp1821 +V +I10 +sVb +I2 +sVt +I2 +ssVN +p1822 +(dp1823 +V +I2 +ssVa; +p1824 +(dp1825 +V +I9 +ssVa: +p1826 +(dp1827 +V +I7 +ssVa? +p1828 +(dp1829 +V +I1 +ssV"D +p1830 +(dp1831 +Ve +I1 +ssV-E +p1832 +(dp1833 +Vs +I1 +sVt +I2 +sVd +I1 +ssVt_ +p1834 +(dp1835 +V +I1 +sV, +I2 +sV. +I1 +ssV-G +p1836 +(dp1837 +Vr +I2 +sVe +I1 +ssV-A +p1838 +(dp1839 +Vy +I13 +sVh +I2 +ssVt[ +p1840 +(dp1841 +V1 +I2 +sV2 +I1 +ssV-C +p1842 +(dp1843 +Va +I2 +sVe +I1 +sV' +I2 +sVo +I1 +ssV-M +p1844 +(dp1845 +Va +I3 +sV +I1 +sVe +I1 +sVo +I3 +ssV-L +p1846 +(dp1847 +Va +I1 +sV' +I2 +ssV-O +p1848 +(dp1849 +V +I1 +sVh +I2 +sVu +I1 +ssV-N +p1850 +(dp1851 +Vo +I3 +ssV-I +p1852 +(dp1853 +VI +I1 +sVS +I1 +sVl +I1 +ssV-H +p1854 +(dp1855 +Vo +I1 +ssV-J +p1856 +(dp1857 +Ve +I1 +sV. +I2 +ssV-T +p1858 +(dp1859 +VM +I1 +sVu +I1 +ssV-V +p1860 +(dp1861 +Vo +I2 +ssV-Q +p1862 +(dp1863 +Vu +I1 +ssV-P +p1864 +(dp1865 +Vi +I1 +sVo +I1 +ssV-S +p1866 +(dp1867 +Va +I1 +sVu +I1 +ssVz +p1868 +(dp1869 +Vl +I1 +ssVt@ +p1870 +(dp1871 +Vp +I2 +ssVgr +p1872 +(dp1873 +Va +I94 +sV +I13 +sVe +I17 +sV +I14 +sV +I2 +sVo +I15 +sVi +I5 +ssV-e +p1874 +(dp1875 +Vt +I1 +sVl +I18 +sVn +I3 +ssV-d +p1876 +(dp1877 +Vi +I7 +sVa +I7 +sVe +I9 +sV' +I2 +ssV-f +p1878 +(dp1879 +V +I8 +sVa +I2 +sVr +I1 +sVo +I3 +ssV-a +p1880 +(dp1881 +Vi +I1 +sVr +I1 +sVu +I1 +ssVtx +p1882 +(dp1883 +Vt +I6 +ssV-b +p1884 +(dp1885 +Vu +I1 +sVe +I3 +sVo +I2 +ssV-m +p1886 +(dp1887 +V +I21 +sVo +I15 +ssV-l +p1888 +(dp1889 +Va +I3 +sV +I9 +sVe +I10 +sVu +I2 +ssVtt +p1890 +(dp1891 +Va +I13 +sVe +I195 +sVp +I5 +sVi +I10 +sV +I3 +sVo +I2 +sV +I7 +sVs +I1 +sVr +I43 +sVu +I7 +ssVtu +p1892 +(dp1893 +Va +I11 +sV +I21 +sVc +I1 +sVe +I31 +sVd +I9 +sVg +I12 +sV +I18 +sVm +I4 +sVl +I9 +sVn +I15 +sVp +I2 +sVs +I5 +sVr +I68 +sV, +I1 +sV? +I2 +ssVtr +p1894 +(dp1895 +Va +I145 +sVe +I578 +sV' +I3 +sVi +I54 +sV +I64 +sV +I13 +sVo +I173 +sV +I21 +sVu +I9 +sV +I12 +sVy +I3 +ssVts +p1896 +(dp1897 +V! +I2 +sV +I173 +sV" +I1 +sVk +I3 +sV* +I1 +sVm +I3 +sV, +I45 +sV. +I20 +sV_ +I1 +sV; +I14 +sV: +I2 +sV[ +I1 +sV? +I4 +ssVtp +p1898 +(dp1899 +Vh +I12 +sV: +I6 +sV. +I1 +ssV-j +p1900 +(dp1901 +Ve +I14 +ssV-u +p1902 +(dp1903 +Vp +I1 +ssVto +p1904 +(dp1905 +V +I65 +sVc +I3 +sVb +I3 +sVd +I1 +sVf +I2 +sVi +I25 +sV- +I7 +sVm +I50 +sV, +I2 +sVn +I75 +sVp +I2 +sVr +I5 +sVu +I401 +sVt +I3 +sV: +I2 +sVy +I8 +sV. +I3 +sV_ +I1 +sVl +I3 +ssVtl +p1906 +(dp1907 +Va +I1 +sVy +I5 +sVe +I2 +ssV-v +p1908 +(dp1909 +Vi +I3 +sVa +I1 +sVe +I1 +sVo +I61 +ssV-q +p1910 +(dp1911 +Vu +I3 +ssV-p +p1912 +(dp1913 +V +I2 +ssVth +p1914 +(dp1915 +Va +I22 +sV +I20 +sVe +I130 +sVi +I44 +sV +I3 +sVm +I1 +sV, +I2 +sVo +I18 +sV. +I1 +sV +I23 +sVr +I2 +sVu +I1 +sV; +I1 +sV: +I1 +ssVti +p1916 +(dp1917 +V +I15 +sV, +I2 +sV. +I2 +sV; +I1 +sVa +I2 +sVc +I22 +sVb +I4 +sVe +I72 +sVd +I4 +sVg +I8 +sVf +I8 +sV +I16 +sV +I14 +sVm +I24 +sVl +I17 +sVo +I185 +sVn +I194 +sVq +I26 +sVp +I1 +sVs +I39 +sVr +I41 +sVu +I1 +sVt +I64 +sVv +I20 +ssVte +p1918 +(dp1919 +V! +I10 +sV +I403 +sV- +I4 +sV, +I100 +sV. +I37 +sV; +I21 +sV: +I6 +sV? +I7 +sV[ +I1 +sVa +I37 +sVc +I3 +sVe +I3 +sVd +I28 +sVf +I1 +sVi +I1 +sVm +I72 +sVl +I49 +sVn +I216 +sVp +I1 +sVs +I196 +sVr +I190 +sVu +I87 +sVt +I1 +sVy +I1 +sVx +I16 +sVz +I14 +ssVtb +p1920 +(dp1921 +Vo +I1 +ssVtc +p1922 +(dp1923 +V. +I3 +ssVta +p1924 +(dp1925 +V +I53 +sV- +I1 +sV, +I10 +sV. +I1 +sVc +I20 +sVb +I49 +sVd +I1 +sVg +I25 +sVf +I2 +sVi +I374 +sVh +I1 +sVk +I3 +sVm +I3 +sVl +I35 +sVn +I115 +sVq +I3 +sVp +I8 +sVs +I7 +sVr +I8 +sVt +I49 +sVv +I2 +sVx +I4 +ssV_ +p1926 +(dp1927 +Vt +I2 +ssVV +p1928 +(dp1929 +VR +I1 +ssVgy +p1930 +(dp1931 +Vp +I2 +ssVt? +p1932 +(dp1933 +V +I3 +sV- +I1 +sV. +I1 +ssVt: +p1934 +(dp1935 +V +I46 +sVM +I1 +ssVt; +p1936 +(dp1937 +V +I66 +ssV-- +p1938 +(dp1939 +VA +I2 +sV +I1 +sVC +I4 +sVE +I2 +sVD +I1 +sVI +I2 +sV- +I4 +sVJ +I1 +sVM +I3 +sV, +I1 +sVO +I4 +sVN +I2 +sVQ +I1 +sVP +I1 +sVS +I1 +sVV +I2 +sVL +I2 +ssV-, +p1940 +(dp1941 +V +I1 +ssV p +p1942 +(dp1943 +Va +I805 +sV +I5 +sVe +I337 +sVi +I95 +sV +I36 +sVl +I307 +sVo +I434 +sV +I24 +sVr +I416 +sVu +I65 +sVh +I41 +sVy +I1 +sV +I4 +ssVt. +p1944 +(dp1945 +V +I116 +sV- +I4 +ssVt/ +p1946 +(dp1947 +Vp +I1 +sVd +I2 +ssVt, +p1948 +(dp1949 +V +I265 +ssV-6 +p1950 +(dp1951 +V2 +I2 +ssV-1 +p1952 +(dp1953 +V +I1 +sV2 +I3 +sV8 +I1 +ssV-3 +p1954 +(dp1955 +V1 +I1 +ssV-2 +p1956 +(dp1957 +V% +I1 +ssVt' +p1958 +(dp1959 +Va +I4 +sVy +I1 +sVs +I2 +ssVrk +p1960 +(dp1961 +Va +I1 +sV +I6 +sVe +I1 +sVi +I1 +sV- +I1 +sV, +I3 +sV. +I2 +sVs +I2 +ssVt" +p1962 +(dp1963 +V) +I1 +sV +I1 +ssV-8 +p1964 +(dp1965 +V +I1 +ssVt +p1966 +(dp1967 +V +I22 +sV +I51 +sV# +I1 +sV( +I2 +sV1 +I4 +sV2 +I1 +sV4 +I1 +sV< +I1 +sV +I1 +sVA +I4 +sVC +I178 +sVD +I3 +sVG +I25 +sVI +I4 +sVH +I2 +sVJ +I2 +sVM +I56 +sVP +I27 +sVR +I1 +sVV +I1 +sV_ +I6 +sVa +I271 +sV +I160 +sVc +I196 +sVb +I97 +sVe +I218 +sVd +I603 +sVg +I14 +sVf +I92 +sVi +I83 +sVh +I36 +sVk +I1 +sVj +I77 +sVm +I129 +sVl +I488 +sVo +I74 +sVn +I70 +sVq +I230 +sVp +I336 +sVs +I210 +sVr +I80 +sVu +I182 +sVt +I157 +sVw +I11 +sVv +I91 +sVy +I11 +sV +I1 +ssVt! +p1968 +(dp1969 +V +I7 +sV" +I6 +ssVEM +p1970 +(dp1971 +VA +I1 +sVE +I2 +sVN +I1 +ssVga +p1972 +(dp1973 +V +I1 +sVc +I1 +sVb +I1 +sVg +I24 +sVi +I7 +sVl +I44 +sVn +I8 +sVr +I74 +sVu +I7 +sVt +I3 +sV, +I2 +ssV +p1974 +(dp1975 +Va +I2 +sVj +I7 +sVe +I3 +sVd +I1 +sVp +I1 +sVi +I8 +sV +I1 +sVm +I2 +sVl +I9 +sVn +I5 +sVP +I1 +sVs +I4 +sVt +I3 +ssV- +p1976 +(dp1977 +Vd +I4 +ssV z +p1978 +(dp1979 +V +I1 +ssV? +p1980 +(dp1981 +V- +I1 +ssVgl +p1982 +(dp1983 +Va +I13 +sVi +I8 +sVe +I10 +sVo +I109 +ssV- +p1984 +(dp1985 +V- +I6 +ssVt +p1986 +(dp1987 +Vm +I1 +sVt +I38 +ssV- +p1988 +(dp1989 +Vt +I9 +ssVt +p1990 +(dp1991 +Vm +I1 +ssV@p +p1992 +(dp1993 +Vo +I2 +ssVt +p1994 +(dp1995 +Vt +I16 +ssVt +p1996 +(dp1997 +Vr +I19 +sVm +I3 +ssVt +p1998 +(dp1999 +V +I173 +sVe +I10 +sVm +I7 +sV, +I35 +sV. +I14 +sVs +I29 +sVr +I5 +sV? +I3 +sV; +I4 +sV: +I1 +sV_ +I3 +sVt +I1 +ssVt +p2000 +(dp2001 +Vc +I1 +sVt +I1 +ssVEF +p2002 +(dp2003 +V +I1 +sVO +I1 +ssV/N +p2004 +(dp2005 +Vo +I1 +ssVg[ +p2006 +(dp2007 +V2 +I1 +ssVS* +p2008 +(dp2009 +V* +I1 +sVV +I1 +ssVS. +p2010 +(dp2011 +V +I5 +ssVS- +p2012 +(dp2013 +VI +I1 +ssVS, +p2014 +(dp2015 +V +I6 +ssVS" +p2016 +(dp2017 +V. +I1 +ssVS +p2018 +(dp2019 +VA +I1 +sVb +I2 +sVE +I2 +sVD +I1 +sVF +I2 +sVI +I1 +sVL +I1 +sVo +I2 +sV3 +I1 +sVO +I4 +ssVS' +p2020 +(dp2021 +V +I1 +ssVve +p2022 +(dp2023 +Va +I6 +sV +I65 +sVc +I128 +sVd +I7 +sVi +I8 +sVm +I18 +sVl +I21 +sVn +I151 +sV. +I2 +sVs +I14 +sVr +I174 +sVu +I22 +sVt +I1 +sVy +I1 +sV; +I1 +sVz +I67 +sV, +I7 +sV? +I1 +ssVSy +p2024 +(dp2025 +Vr +I1 +ssVf +p2026 +(dp2027 +Vm +I1 +sVt +I11 +ssVSu +p2028 +(dp2029 +Vi +I1 +sV +I1 +sVr +I14 +ssVSt +p2030 +(dp2031 +Va +I3 +sVu +I1 +ssVSi +p2032 +(dp2033 +Va +I1 +sV +I11 +sVe +I1 +sV +I11 +sVn +I3 +sVr +I3 +ssVSo +p2034 +(dp2035 +Vy +I1 +sVm +I1 +sVu +I5 +sV, +I1 +sVn +I1 +ssVSm +p2036 +(dp2037 +Vy +I2 +sVa +I6 +ssVSc +p2038 +(dp2039 +Vu +I1 +ssVf +p2040 +(dp2041 +V +I3 +sV, +I3 +sV. +I2 +sVs +I1 +sVr +I13 +sVt +I2 +sV; +I1 +sV[ +I1 +sVl +I2 +ssVSa +p2042 +(dp2043 +V +I6 +sVc +I1 +sVi +I7 +sVm +I1 +sVl +I2 +sVn +I1 +sVr +I1 +sVx +I1 +ssVSe +p2044 +(dp2045 +Vc +I2 +sVr +I2 +sVs +I1 +ssVSS +p2046 +(dp2047 +VI +I1 +sV +I2 +sVE +I1 +ssVSQ +p2048 +(dp2049 +VU +I1 +ssVSU +p2050 +(dp2051 +VC +I1 +ssVST +p2052 +(dp2053 +VA +I2 +sVR +I2 +ssVSI +p2054 +(dp2055 +VB +I1 +sVO +I2 +ssVSO +p2056 +(dp2057 +V- +I1 +ssVSM +p2058 +(dp2059 +VA +I2 +sVE +I2 +ssVSC +p2060 +(dp2061 +VI +I2 +sVL +I1 +ssVSE +p2062 +(dp2063 +VQ +I1 +sV +I2 +sVN +I1 +sVM +I1 +sV. +I1 +ssVf +p2064 +(dp2065 +V2 +I1 +sV4 +I1 +sVC +I6 +sVF +I2 +sVP +I3 +sVR +I1 +sVT +I1 +sVV +I1 +sVa +I7 +sV +I1 +sVc +I3 +sVe +I1 +sVd +I5 +sVi +I4 +sVm +I2 +sVo +I4 +sVn +I2 +sVp +I1 +sVs +I6 +sVr +I2 +sVu +I1 +sVt +I32 +sVw +I3 +sVy +I17 +ssVf, +p2066 +(dp2067 +V +I7 +ssVf- +p2068 +(dp2069 +Vt +I1 +sVd +I2 +ssVf. +p2070 +(dp2071 +V +I4 +sVf +I2 +ssVt +p2072 +(dp2073 +Va +I1 +sV +I37 +sVe +I22 +sV +I11 +sVo +I2 +sVi +I3 +sVr +I4 +sV; +I1 +ssVp +p2074 +(dp2075 +Vi +I2 +ssVn +p2076 +(dp2077 +Vi +I2 +sVa +I1 +sVe +I5 +sV +I8 +ssVl +p2078 +(dp2079 +Vi +I1 +sVe +I1 +ssVl +p2080 +(dp2081 +Ve +I3 +ssVm +p2082 +(dp2083 +Ve +I1 +ssVn +p2084 +(dp2085 +Ve +I1 +ssVfr +p2086 +(dp2087 +Va +I30 +sVe +I17 +sVi +I20 +sV +I26 +sV, +I2 +sVo +I30 +sV +I3 +sVu +I5 +ssVfs +p2088 +(dp2089 +V +I5 +sV; +I1 +sV, +I3 +sV. +I1 +ssVft +p2090 +(dp2091 +Vy +I1 +sVp +I2 +sVe +I4 +sVw +I3 +ssVfu +p2092 +(dp2093 +Vg +I3 +sVi +I9 +sVm +I3 +sVl +I2 +sVn +I10 +sVs +I41 +sVr +I35 +sVt +I68 +sVy +I2 +ssVg; +p2094 +(dp2095 +V +I1 +ssV / +p2096 +(dp2097 +Ve +I1 +ssVfa +p2098 +(dp2099 +V +I2 +sVc +I8 +sVb +I2 +sV +I3 +sVi +I197 +sVm +I13 +sVl +I12 +sVn +I20 +sVs +I8 +sVr +I3 +sVu +I56 +sVt +I6 +sVv +I5 +sV: +I1 +ssVS +p2100 +(dp2101 +Vd +I1 +sVn +I1 +ssVfe +p2102 +(dp2103 +Vc +I8 +sVe +I6 +sVm +I32 +sVn +I14 +sVs +I52 +sVr +I39 +sVu +I15 +sVt +I15 +sV: +I1 +ssVff +p2104 +(dp2105 +Va +I16 +sV +I1 +sVe +I29 +sVi +I24 +sV- +I1 +sVl +I8 +sVo +I5 +sV +I6 +sVr +I20 +sV_ +I1 +ssVfi +p2106 +(dp2107 +Va +I5 +sVc +I29 +sVe +I8 +sVd +I10 +sVg +I9 +sVf +I2 +sV +I1 +sV +I2 +sVl +I62 +sVn +I59 +sVq +I3 +sVs +I7 +sVr +I11 +sVt +I76 +sVv +I1 +sVx +I2 +ssVfl +p2108 +(dp2109 +Va +I9 +sVe +I14 +sVi +I3 +sV +I2 +sVo +I7 +sV +I12 +ssVfo +p2110 +(dp2111 +Vi +I47 +sVl +I7 +sVn +I37 +sVs +I2 +sVr +I122 +sVu +I22 +ssVt +p2112 +(dp2113 +Va +I1 +sV +I6 +sVe +I32 +sVi +I3 +sVo +I3 +sV. +I1 +sV +I1 +sVs +I1 +sVr +I11 +sV; +I1 +ssVf_ +p2114 +(dp2115 +V, +I1 +ssV +p2116 +(dp2117 +Vm +I3 +ssVy) +p2118 +(dp2119 +V +I3 +ssVy* +p2120 +(dp2121 +V +I1 +ssVy, +p2122 +(dp2123 +V +I12 +ssVy. +p2124 +(dp2125 +V +I3 +ssVy +p2126 +(dp2127 +Vj +I1 +sV +I1 +sVp +I7 +sV( +I2 +sV1 +I1 +sV2 +I1 +sVA +I7 +sVC +I4 +sVB +I1 +sVD +I1 +sVF +I1 +sVI +I2 +sVM +I4 +sVL +I3 +sVP +I1 +sVS +I2 +sVT +I1 +sVV +I5 +sVa +I84 +sVc +I8 +sVb +I9 +sVe +I19 +sVd +I5 +sVg +I4 +sVf +I12 +sV +I4 +sVh +I4 +sV +I2 +sVm +I4 +sVl +I1 +sVo +I17 +sVn +I6 +sVi +I5 +sVs +I8 +sVr +I8 +sVu +I3 +sVt +I20 +sVw +I3 +sVv +I4 +sVy +I3 +ssV 5 +p2128 +(dp2129 +V0 +I4 +sV2 +I1 +sV +I1 +ssVg/ +p2130 +(dp2131 +Vp +I1 +sVe +I2 +sVg +I1 +ssV ; +p2132 +(dp2133 +V +I1 +ssV24 +p2134 +(dp2135 +V0 +I1 +sV. +I1 +ssV25 +p2136 +(dp2137 +V) +I1 +sV0 +I1 +ssV26 +p2138 +(dp2139 +V +I1 +sV. +I1 +ssV27 +p2140 +(dp2141 +V +I1 +sV, +I1 +ssV20 +p2142 +(dp2143 +V0 +I15 +sV; +I1 +sV% +I1 +sV, +I1 +sV +I1 +ssV21 +p2144 +(dp2145 +V +I1 +sV5 +I2 +ssV22 +p2146 +(dp2147 +V1 +I2 +sV +I1 +ssV28 +p2148 +(dp2149 +V +I1 +sV; +I1 +ssV29 +p2150 +(dp2151 +V. +I2 +ssV2: +p2152 +(dp2153 +V +I1 +ssV2; +p2154 +(dp2155 +V +I1 +ssV2% +p2156 +(dp2157 +V +I1 +ssV2 +p2158 +(dp2159 +Va +I1 +sV( +I1 +sVd +I1 +sVD +I1 +ssV2, +p2160 +(dp2161 +V +I6 +ssV2. +p2162 +(dp2163 +V +I5 +ssV2/ +p2164 +(dp2165 +V1 +I1 +ssV2* +p2166 +(dp2167 +VE +I1 +ssVyi +p2168 +(dp2169 +Vn +I3 +ssVym +p2170 +(dp2171 +Va +I1 +sVe +I1 +ssVyl +p2172 +(dp2173 +Ve +I1 +sVl +I1 +sVo +I1 +sVv +I4 +ssVyo +p2174 +(dp2175 +Vm +I1 +sVu +I62 +sVn +I3 +ssVyn +p2176 +(dp2177 +Vx +I1 +sVg +I3 +ssVya +p2178 +(dp2179 +V +I7 +sVc +I1 +sVb +I7 +sVd +I1 +sVg +I25 +sVi +I20 +sV, +I2 +sVl +I7 +sVu +I11 +sVn +I36 +ssV2] +p2180 +(dp2181 +V +I15 +sV; +I2 +sV, +I1 +sV. +I6 +ssVyc +p2182 +(dp2183 +Vl +I3 +ssV2_ +p2184 +(dp2185 +V. +I1 +ssVye +p2186 +(dp2187 +Va +I4 +sVe +I2 +sVd +I1 +sV, +I2 +sVn +I10 +sVr +I16 +sVu +I23 +sVt +I1 +sVz +I59 +ssVyd +p2188 +(dp2189 +Ve +I1 +ssVyg +p2190 +(dp2191 +Vm +I1 +ssVyz +p2192 +(dp2193 +Ve +I1 +ssVyp +p2194 +(dp2195 +Va +I1 +sVr +I1 +sVe +I2 +sVt +I1 +sVo +I2 +ssVys +p2196 +(dp2197 +V +I35 +sVi +I20 +sV- +I3 +sV, +I8 +sV. +I6 +sVs +I1 +sVt +I4 +sV; +I2 +sV? +I1 +ssVyr +p2198 +(dp2199 +Va +I2 +sVe +I14 +sVi +I11 +sVo +I1 +sVn +I2 +sVr +I1 +ssVyt +p2200 +(dp2201 +Vi +I1 +ssV +p2202 +(dp2203 +VM +I1 +ssVm +p2204 +(dp2205 +Ve +I1 +ssVl +p2206 +(dp2207 +V, +I2 +ssVy_ +p2208 +(dp2209 +V, +I1 +ssVt +p2210 +(dp2211 +Ve +I2 +ssVE, +p2212 +(dp2213 +V +I5 +ssVE. +p2214 +(dp2215 +V +I4 +ssVE! +p2216 +(dp2217 +V* +I1 +ssVE +p2218 +(dp2219 +VA +I1 +sVC +I1 +sVE +I1 +sVD +I5 +sVG +I1 +sVI +I6 +sVJ +I1 +sVM +I2 +sVL +I3 +sVO +I4 +sVN +I2 +sV1 +I1 +sVP +I1 +sVS +I2 +sVT +I2 +sVV +I4 +sVX +I23 +ssVy +p2220 +(dp2221 +V +I15 +sVe +I2 +ssVEN +p2222 +(dp2223 +V +I3 +sVC +I1 +sVB +I8 +sVD +I3 +sV, +I1 +sVT +I3 +ssVEI +p2224 +(dp2225 +VT +I1 +sVN +I2 +ssVED +p2226 +(dp2227 +VI +I4 +sV +I4 +sV, +I1 +ssVEG +p2228 +(dp2229 +VL +I1 +ssVy +p2230 +(dp2231 +Vt +I1 +ssVEA +p2232 +(dp2233 +VC +I1 +sVD +I1 +ssVEC +p2234 +(dp2235 +V +I1 +sVT +I9 +ssVEB +p2236 +(dp2237 +VC +I2 +sVO +I6 +ssVEY +p2238 +(dp2239 +V +I1 +ssVEX +p2240 +(dp2241 +VP +I1 +ssVEZ +p2242 +(dp2243 +V +I1 +ssVEU +p2244 +(dp2245 +VC +I2 +sVR +I2 +sVV +I2 +ssVET +p2246 +(dp2247 +V +I2 +sVC +I1 +sVT +I2 +ssVEV +p2248 +(dp2249 +VE +I2 +ssVEQ +p2250 +(dp2251 +VU +I2 +ssVES +p2252 +(dp2253 +V +I8 +sVS +I2 +sV, +I3 +sV. +I1 +ssVER +p2254 +(dp2255 +V +I4 +sVC +I1 +sVD +I1 +sVG +I8 +sVI +I1 +sV* +I1 +sV, +I4 +sVO +I1 +sVS +I2 +sVT +I1 +sVW +I1 +ssVEm +p2256 +(dp2257 +Vp +I2 +ssVEl +p2258 +(dp2259 +Ve +I1 +sVd +I17 +sVl +I17 +ssVEn +p2260 +(dp2261 +V +I13 +sVs +I3 +sVd +I1 +sVf +I14 +ssVEh +p2262 +(dp2263 +V! +I2 +sV +I10 +ssVEd +p2264 +(dp2265 +Vi +I1 +sVo +I1 +ssVEx +p2266 +(dp2267 +Vc +I1 +sVt +I1 +ssVEu +p2268 +(dp2269 +Vr +I15 +ssVEt +p2270 +(dp2271 +V +I11 +sVr +I1 +sVe +I6 +sV, +I1 +ssVEv +p2272 +(dp2273 +Vh +I1 +ssVEs +p2274 +(dp2275 +Vp +I18 +sVs +I2 +sVt +I7 +ssVEr +p2276 +(dp2277 +Vz +I1 +ssV +p2278 +(dp2279 +V +I1 +ssVX. +p2280 +(dp2281 +V +I8 +ssVX, +p2282 +(dp2283 +V +I4 +ssVX +p2284 +(dp2285 +Ve +I1 +sVd +I2 +ssVX; +p2286 +(dp2287 +V +I1 +ssVXI +p2288 +(dp2289 +V +I3 +sVI +I14 +sV- +I1 +sV, +I10 +sV. +I2 +sVV +I4 +sVX +I3 +ssVXL +p2290 +(dp2291 +VI +I1 +sV +I1 +ssVXX +p2292 +(dp2293 +VI +I24 +sVX +I12 +sV. +I3 +sV, +I3 +sVV +I11 +ssVXP +p2294 +(dp2295 +VR +I1 +ssVXV +p2296 +(dp2297 +VI +I21 +sV +I2 +sV, +I1 +sV_ +I9 +sV. +I3 +ssVk +p2298 +(dp2299 +Va +I1 +sVb +I2 +sVe +I1 +sVd +I2 +sVf +I1 +sVi +I4 +sV( +I3 +sVm +I2 +sVl +I1 +sVo +I7 +sVp +I1 +sVs +I1 +sVr +I1 +sVt +I6 +sVw +I1 +ssVk) +p2300 +(dp2301 +V +I1 +sV, +I1 +ssVk. +p2302 +(dp2303 +V +I5 +ssVk- +p2304 +(dp2305 +Vu +I1 +sVd +I1 +ssVk, +p2306 +(dp2307 +V +I13 +ssVk0 +p2308 +(dp2309 +V3 +I2 +sV2 +I1 +ssV7] +p2310 +(dp2311 +V +I2 +ssV7 +p2312 +(dp2313 +VA +I1 +sVd +I1 +ssV7. +p2314 +(dp2315 +V +I2 +ssV7, +p2316 +(dp2317 +V +I3 +ssV77 +p2318 +(dp2319 +V8 +I1 +sV, +I1 +sV7 +I1 +ssV76 +p2320 +(dp2321 +V1 +I6 +sV0 +I1 +sV3 +I2 +sV2 +I1 +sV4 +I2 +sV7 +I1 +sV6 +I4 +sV9 +I1 +sV8 +I2 +ssV75 +p2322 +(dp2323 +V9 +I7 +sV5 +I1 +sV7 +I2 +sV6 +I4 +ssV73 +p2324 +(dp2325 +V9 +I3 +sV8 +I1 +sV6 +I1 +sV0 +I3 +ssV72 +p2326 +(dp2327 +V, +I1 +ssV71 +p2328 +(dp2329 +V1 +I1 +sV8 +I1 +sV* +I1 +sV +I1 +ssV70 +p2330 +(dp2331 +V; +I1 +sV2 +I1 +sV5 +I1 +sV. +I1 +ssVk[ +p2332 +(dp2333 +V3 +I1 +ssV7; +p2334 +(dp2335 +V +I2 +ssV7: +p2336 +(dp2337 +V +I2 +ssV79 +p2338 +(dp2339 +V6 +I1 +ssV78 +p2340 +(dp2341 +V9 +I1 +sV2 +I1 +sV5 +I1 +sV, +I1 +ssVka +p2342 +(dp2343 +V +I1 +sV, +I2 +sV +I1 +sVn +I1 +ssVke +p2344 +(dp2345 +V +I6 +sVs +I1 +sVe +I1 +sVt +I1 +ssVkd +p2346 +(dp2347 +Vo +I1 +ssVki +p2348 +(dp2349 +V +I2 +sV[ +I1 +sV, +I1 +sVn +I1 +ssVkh +p2350 +(dp2351 +V +I3 +sV; +I3 +sV, +I3 +sV? +I1 +sV. +I1 +ssVko +p2352 +(dp2353 +Vt +I1 +ssVkn +p2354 +(dp2355 +Vo +I5 +ssVkl +p2356 +(dp2357 +Va +I1 +ssVks +p2358 +(dp2359 +V! +I1 +sV +I14 +sV, +I4 +sV/ +I1 +sV. +I1 +sV; +I1 +ssVky +p2360 +(dp2361 +V, +I2 +ssVJE +p2362 +(dp2363 +VC +I8 +ssVJA +p2364 +(dp2365 +VC +I1 +ssVJu +p2366 +(dp2367 +Vi +I17 +sVs +I1 +sVl +I1 +sVg +I1 +ssVJo +p2368 +(dp2369 +Va +I1 +sVu +I5 +sV +I1 +ssVJe +p2370 +(dp2371 +Va +I2 +sV +I101 +sVr +I1 +ssVJa +p2372 +(dp2373 +Vp +I3 +sVc +I9 +sVm +I2 +sVn +I3 +ssVJ. +p2374 +(dp2375 +V +I4 +sV- +I2 +ssVJ' +p2376 +(dp2377 +Va +I22 +sV +I4 +sVi +I1 +sVy +I1 +ssVJ +p2378 +(dp2379 +Vh +I1 +sVc +I1 +sVr +I1 +ssV]? +p2380 +(dp2381 +V +I2 +ssV]; +p2382 +(dp2383 +V +I11 +ssV]: +p2384 +(dp2385 +V +I1 +ssV] +p2386 +(dp2387 +V +I6 +sV6 +I2 +sVA +I4 +sVC +I4 +sVD +I3 +sVF +I2 +sVI +I2 +sVH +I1 +sVM +I2 +sVL +I11 +sVQ +I1 +sVS +I6 +sVR +I1 +sVT +I1 +sVV +I11 +sVY +I1 +sV_ +I2 +sVa +I4 +sVd +I2 +sV +I1 +sVo +I1 +sVq +I1 +sVp +I1 +ssV], +p2388 +(dp2389 +V +I12 +ssV]. +p2390 +(dp2391 +V +I16 +ssV); +p2392 +(dp2393 +V +I1 +ssV): +p2394 +(dp2395 +V +I2 +ssV)( +p2396 +(dp2397 +V3 +I2 +ssV), +p2398 +(dp2399 +V +I6 +ssV). +p2400 +(dp2401 +V +I4 +ssV) +p2402 +(dp2403 +Va +I1 +sVc +I2 +sVe +I1 +sVd +I1 +sVo +I1 +sV2 +I1 +sVt +I1 +sVy +I2 +ssVpr +p2404 +(dp2405 +Va +I4 +sVe +I108 +sVi +I156 +sV +I79 +sV +I18 +sVo +I176 +sV +I1 +sV +I76 +sVu +I8 +ssVps +p2406 +(dp2407 +V +I54 +sVi +I1 +sVh +I1 +sV, +I14 +sV. +I6 +sV; +I5 +sV_ +I1 +ssVpp +p2408 +(dp2409 +Va +I17 +sVe +I28 +sV +I6 +sVl +I10 +sVo +I17 +sVi +I1 +sVr +I39 +sVu +I2 +ssVpt +p2410 +(dp2411 +Va +I4 +sV +I9 +sVe +I14 +sVi +I25 +sV- +I1 +sV, +I1 +sV. +I1 +sV +I4 +sVs +I1 +ssVpu +p2412 +(dp2413 +V +I10 +sVc +I1 +sVb +I16 +sVd +I1 +sVi +I33 +sVl +I7 +sV. +I1 +sVp +I1 +sVs +I5 +sVr +I6 +sVt +I20 +sVy +I1 +sVn +I5 +ssVpy +p2414 +(dp2415 +V +I4 +sVr +I10 +sVg +I1 +sV. +I1 +ssVpa +p2416 +(dp2417 +V +I2 +sVc +I2 +sVd +I5 +sVg +I64 +sVi +I24 +sVv +I1 +sVl +I20 +sVn +I9 +sVp +I12 +sVs +I285 +sVr +I402 +sVu +I17 +sVt +I33 +sV +I1 +sVy +I66 +sV. +I1 +ssVpg +p2418 +(dp2419 +V +I1 +ssVpe +p2420 +(dp2421 +Va +I6 +sV +I24 +sVc +I22 +sVz +I2 +sVi +I23 +sV: +I1 +sVl +I20 +sVo +I3 +sVn +I86 +sVs +I16 +sVr +I164 +sVu +I112 +sVt +I39 +sV; +I3 +sV. +I6 +sV, +I9 +sV_ +I2 +ssVph +p2422 +(dp2423 +Va +I15 +sVe +I21 +sV +I1 +sV +I1 +sVi +I29 +sVr +I1 +sVt +I3 +sVy +I20 +ssVpi +p2424 +(dp2425 +Va +I15 +sVc +I5 +sVe +I44 +sVd +I6 +sVg +I2 +sV +I15 +sVl +I6 +sVn +I3 +sVq +I6 +sVs +I7 +sVr +I21 +sVt +I67 +sV, +I1 +ssVpo +p2426 +(dp2427 +Vc +I4 +sVb +I2 +sVp +I1 +sVi +I65 +sV +I3 +sV +I3 +sVm +I4 +sVl +I19 +sVn +I75 +sVq +I1 +sV +I1 +sVs +I62 +sVr +I79 +sVu +I299 +sVt +I6 +ssVpl +p2428 +(dp2429 +Va +I86 +sVe +I60 +sVi +I34 +sV +I1 +sVo +I5 +sVu +I210 +sVy +I2 +ssVpm +p2430 +(dp2431 +Ve +I2 +ssVp: +p2432 +(dp2433 +V/ +I6 +ssVp; +p2434 +(dp2435 +V +I1 +ssVp +p2436 +(dp2437 +Va +I1 +sV +I3 +sVb +I1 +sVe +I2 +sVd +I20 +sVl +I3 +sVo +I1 +sVq +I1 +sVp +I5 +sVs +I5 +sVr +I2 +sVt +I1 +sVv +I3 +ssVp! +p2438 +(dp2439 +V +I1 +ssVp* +p2440 +(dp2441 +V* +I2 +ssVp. +p2442 +(dp2443 +Vi +I1 +sV +I3 +ssVp, +p2444 +(dp2445 +V +I6 +ssVp +p2446 +(dp2447 +Vt +I4 +ssVp +p2448 +(dp2449 +Vm +I1 +sVt +I2 +sVl +I2 +ssVp +p2450 +(dp2451 +Vo +I3 +ssVp +p2452 +(dp2453 +Vc +I6 +sVt +I3 +ssVp +p2454 +(dp2455 +Vc +I10 +sVr +I41 +ssVp +p2456 +(dp2457 +Va +I1 +sV +I10 +sVc +I2 +sVe +I18 +sVd +I3 +sVf +I2 +sV. +I2 +sVs +I6 +sVr +I47 +sV! +I1 +sVt +I5 +ssV"] +__license__ = "Python" + +import amara +from sys import stdin, stdout +from trigram import Trigram +from xml.dom import XML_NAMESPACE as XML_NS +import cPickle + +ATOM_NSS = { + u'atom': u'http://www.w3.org/2005/Atom', + u'xml': XML_NS +} + +langs = {} + +def tri(lang): + if not langs.has_key(lang): + f = open('filters/guess-language/%s.data' % lang, 'r') + t = cPickle.load(f) + f.close() + langs[lang] = t + return langs[lang] + + +def guess_language(entry): + text = u''; + for child in entry.xml_xpath(u'atom:title|atom:summary|atom:content'): + text = text + u' '+ child.__unicode__() + t = Trigram() + t.parseString(text) + if tri('fr') - t > tri('en') - t: + lang=u'en' + else: + lang=u'fr' + entry.xml_set_attribute((u'xml:lang', XML_NS), lang) + +def main(): + feed = amara.parse(stdin, prefixes=ATOM_NSS) + for entry in feed.xml_xpath(u'//atom:entry[not(@xml:lang)]'): + guess_language(entry) + feed.xml(stdout) + +if __name__ == '__main__': + main() diff --git a/examples/filters/guess-language/learn-language.py b/examples/filters/guess-language/learn-language.py new file mode 100755 index 0000000..d92ca7e --- /dev/null +++ b/examples/filters/guess-language/learn-language.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python +"""A filter to guess languages. + +This utility saves a Trigram object on file. + +(See the REAME file for more details). + +Requires Python 2.1, recommends 2.4. +""" +__authors__ = [ "Eric van der Vlist "] +__license__ = "Python" + +from trigram import Trigram +from sys import argv +from cPickle import dump + + +def main(): + tri = Trigram(argv[1]) + out = open(argv[2], 'w') + dump(tri, out) + out.close() + +if __name__ == '__main__': + main() diff --git a/examples/filters/guess-language/trigram.py b/examples/filters/guess-language/trigram.py new file mode 100644 index 0000000..95cbdaa --- /dev/null +++ b/examples/filters/guess-language/trigram.py @@ -0,0 +1,188 @@ +#!/usr/bin/python +# -*- coding: UTF-8 -*- +""" + This class is based on the Python recipe titled + "Language detection using character trigrams" + http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/326576 + by Douglas Bagnall. + It has been (slightly) adapted by Eric van der Vlist to support + Unicode and accept a method to parse strings. +""" +__authors__ = [ "Douglas Bagnall", "Eric van der Vlist "] +__license__ = "Python" + +import random +from urllib import urlopen + +class Trigram: + """ + From one or more text files, the frequency of three character + sequences is calculated. When treated as a vector, this information + can be compared to other trigrams, and the difference between them + seen as an angle. The cosine of this angle varies between 1 for + complete similarity, and 0 for utter difference. Since letter + combinations are characteristic to a language, this can be used to + determine the language of a body of text. For example: + + >>> reference_en = Trigram('/path/to/reference/text/english') + >>> reference_de = Trigram('/path/to/reference/text/german') + >>> unknown = Trigram('url://pointing/to/unknown/text') + >>> unknown.similarity(reference_de) + 0.4 + >>> unknown.similarity(reference_en) + 0.95 + + would indicate the unknown text is almost cetrtainly English. As + syntax sugar, the minus sign is overloaded to return the difference + between texts, so the above objects would give you: + + >>> unknown - reference_de + 0.6 + >>> reference_en - unknown # order doesn't matter. + 0.05 + + As it stands, the Trigram ignores character set information, which + means you can only accurately compare within a single encoding + (iso-8859-1 in the examples). A more complete implementation might + convert to unicode first. + + As an extra bonus, there is a method to make up nonsense words in the + style of the Trigram's text. + + >>> reference_en.makeWords(30) + My withillonquiver and ald, by now wittlectionsurper, may sequia, + tory, I ad my notter. Marriusbabilly She lady for rachalle spen + hat knong al elf + + Beware when using urls: HTML won't be parsed out. + + Most methods chatter away to standard output, to let you know they're + still there. + """ + + length = 0 + + def __init__(self, fn=None): + self.lut = {} + if fn is not None: + self.parseFile(fn) + + def _parseAFragment(self, line, pair=' '): + for letter in line: + d = self.lut.setdefault(pair, {}) + d[letter] = d.get(letter, 0) + 1 + pair = pair[1] + letter + return pair + + def parseString(self, string): + self._parseAFragment(string) + self.measure() + + def parseFile(self, fn, encoding="iso-8859-1"): + pair = ' ' + if '://' in fn: + #print "trying to fetch url, may take time..." + f = urlopen(fn) + else: + f = open(fn) + for z, line in enumerate(f): + #if not z % 1000: + # print "line %s" % z + # \n's are spurious in a prose context + pair = self._parseAFragment(line.strip().decode(encoding) + ' ') + f.close() + self.measure() + + + def measure(self): + """calculates the scalar length of the trigram vector and + stores it in self.length.""" + total = 0 + for y in self.lut.values(): + total += sum([ x * x for x in y.values() ]) + self.length = total ** 0.5 + + def similarity(self, other): + """returns a number between 0 and 1 indicating similarity. + 1 means an identical ratio of trigrams; + 0 means no trigrams in common. + """ + if not isinstance(other, Trigram): + raise TypeError("can't compare Trigram with non-Trigram") + lut1 = self.lut + lut2 = other.lut + total = 0 + for k in lut1.keys(): + if k in lut2: + a = lut1[k] + b = lut2[k] + for x in a: + if x in b: + total += a[x] * b[x] + + return float(total) / (self.length * other.length) + + def __sub__(self, other): + """indicates difference between trigram sets; 1 is entirely + different, 0 is entirely the same.""" + return 1 - self.similarity(other) + + + def makeWords(self, count): + """returns a string of made-up words based on the known text.""" + text = [] + k = ' ' + while count: + n = self.likely(k) + text.append(n) + k = k[1] + n + if n in ' \t': + count -= 1 + return ''.join(text) + + + def likely(self, k): + """Returns a character likely to follow the given string + two character string, or a space if nothing is found.""" + if k not in self.lut: + return ' ' + # if you were using this a lot, caching would a good idea. + letters = [] + for k, v in self.lut[k].items(): + letters.append(k * v) + letters = ''.join(letters) + return random.choice(letters) + + +def test(): + en = Trigram('http://gutenberg.net/dirs/etext97/lsusn11.txt') + #NB fr and some others have English license text. + # no has english excerpts. + fr = Trigram('http://gutenberg.net/dirs/etext03/candi10.txt') + fi = Trigram('http://gutenberg.net/dirs/1/0/4/9/10492/10492-8.txt') + no = Trigram('http://gutenberg.net/dirs/1/2/8/4/12844/12844-8.txt') + se = Trigram('http://gutenberg.net/dirs/1/0/1/1/10117/10117-8.txt') + no2 = Trigram('http://gutenberg.net/dirs/1/3/0/4/13041/13041-8.txt') + en2 = Trigram('http://gutenberg.net/dirs/etext05/cfgsh10.txt') + fr2 = Trigram('http://gutenberg.net/dirs/1/3/7/0/13704/13704-8.txt') + print "calculating difference:" + print "en - fr is %s" % (en - fr) + print "fr - en is %s" % (fr - en) + print "en - en2 is %s" % (en - en2) + print "en - fr2 is %s" % (en - fr2) + print "fr - en2 is %s" % (fr - en2) + print "fr - fr2 is %s" % (fr - fr2) + print "fr2 - en2 is %s" % (fr2 - en2) + print "fi - fr is %s" % (fi - fr) + print "fi - en is %s" % (fi - en) + print "fi - se is %s" % (fi - se) + print "no - se is %s" % (no - se) + print "en - no is %s" % (en - no) + print "no - no2 is %s" % (no - no2) + print "se - no2 is %s" % (se - no2) + print "en - no2 is %s" % (en - no2) + print "fr - no2 is %s" % (fr - no2) + + +if __name__ == '__main__': + test() diff --git a/planet.py b/planet.py index d3346e1..62fb7ac 100755 --- a/planet.py +++ b/planet.py @@ -20,6 +20,7 @@ if __name__ == "__main__": config_file = "config.ini" offline = 0 verbose = 0 + only_if_new = 0 for arg in sys.argv[1:]: if arg == "-h" or arg == "--help": @@ -29,12 +30,15 @@ if __name__ == "__main__": print " -v, --verbose DEBUG level logging during update" print " -o, --offline Update the Planet from the cache only" print " -h, --help Display this help message and exit" + print " -n, --only-if-new Only spider new feeds" print sys.exit(0) elif arg == "-v" or arg == "--verbose": verbose = 1 elif arg == "-o" or arg == "--offline": offline = 1 + elif arg == "-n" or arg == "--only-if-new": + only_if_new = 1 elif arg.startswith("-"): print >>sys.stderr, "Unknown option:", arg sys.exit(1) @@ -46,11 +50,11 @@ if __name__ == "__main__": if verbose: import planet - planet.getLogger('DEBUG') + planet.getLogger('DEBUG',config.log_format()) if not offline: from planet import spider - spider.spiderPlanet() + spider.spiderPlanet(only_if_new=only_if_new) from planet import splice doc = splice.splice() diff --git a/planet/__init__.py b/planet/__init__.py index 444b30b..6be34ed 100644 --- a/planet/__init__.py +++ b/planet/__init__.py @@ -9,7 +9,7 @@ config.__init__() from ConfigParser import ConfigParser from urlparse import urljoin -def getLogger(level): +def getLogger(level, format): """ get a logger with the specified log level """ global logger if logger: return logger @@ -19,7 +19,7 @@ def getLogger(level): except: import compat_logging as logging - logging.basicConfig() + logging.basicConfig(format=format) logging.getLogger().setLevel(logging.getLevelName(level)) logger = logging.getLogger("planet.runner") try: diff --git a/planet/compat_logging/__init__.py b/planet/compat_logging/__init__.py index 3bd0c6d..3b83493 100644 --- a/planet/compat_logging/__init__.py +++ b/planet/compat_logging/__init__.py @@ -1090,7 +1090,7 @@ Logger.manager = Manager(Logger.root) BASIC_FORMAT = "%(levelname)s:%(name)s:%(message)s" -def basicConfig(): +def basicConfig(format=BASIC_FORMAT): """ Do basic configuration for the logging system by creating a StreamHandler with a default Formatter and adding it to the @@ -1098,7 +1098,7 @@ def basicConfig(): """ if len(root.handlers) == 0: hdlr = StreamHandler() - fmt = Formatter(BASIC_FORMAT) + fmt = Formatter(format) hdlr.setFormatter(fmt) root.addHandler(hdlr) diff --git a/planet/config.py b/planet/config.py index cd6a997..5c8ffe3 100644 --- a/planet/config.py +++ b/planet/config.py @@ -32,7 +32,7 @@ from urlparse import urljoin parser = ConfigParser() -planet_predefined_options = [] +planet_predefined_options = ['filters'] def __init__(): """define the struture of an ini file""" @@ -43,6 +43,8 @@ def __init__(): if section and parser.has_option(section, option): return parser.get(section, option) elif parser.has_option('Planet', option): + if option == 'log_format': + return parser.get('Planet', option, raw=True) return parser.get('Planet', option) else: return default @@ -69,8 +71,8 @@ def __init__(): planet_predefined_options.append(name) # define a list planet-level variable - def define_planet_list(name): - setattr(config, name, lambda : expand(get(None,name,''))) + def define_planet_list(name, default=''): + setattr(config, name, lambda : expand(get(None,name,default))) planet_predefined_options.append(name) # define a string template-level variable @@ -88,6 +90,7 @@ def __init__(): define_planet('link', '') define_planet('cache_directory', "cache") define_planet('log_level', "WARNING") + define_planet('log_format', "%(levelname)s:%(name)s:%(message)s") define_planet('feed_timeout', 20) define_planet('date_format', "%B %d, %Y %I:%M %p") define_planet('new_date_format', "%B %d, %Y") @@ -100,7 +103,7 @@ def __init__(): define_planet_list('template_files') define_planet_list('bill_of_materials') - define_planet_list('template_directories') + define_planet_list('template_directories', '.') define_planet_list('filter_directories') # template options @@ -123,7 +126,7 @@ def load(config_file): import config, planet from planet import opml, foaf - log = planet.getLogger(config.log_level()) + log = planet.getLogger(config.log_level(),config.log_format()) # Theme support theme = config.output_theme() @@ -146,10 +149,11 @@ def load(config_file): # complete search list for theme directories dirs += [os.path.join(theme_dir,dir) for dir in - config.template_directories()] + config.template_directories() if dir not in dirs] # merge configurations, allowing current one to override theme template_files = config.template_files() + parser.set('Planet','template_files','') parser.read(config_file) for file in config.bill_of_materials(): if not file in bom: bom.append(file) @@ -178,6 +182,12 @@ def load(config_file): opml.opml2config(data, cached_config) elif content_type(list).find('foaf')>=0: foaf.foaf2config(data, cached_config) + else: + from planet import shell + import StringIO + cached_config.readfp(StringIO.StringIO(shell.run( + content_type(list), data.getvalue(), mode="filter"))) + if cached_config.sections() in [[], [list]]: raise Exception @@ -314,7 +324,7 @@ def reading_lists(): for section in parser.sections(): if parser.has_option(section, 'content_type'): type = parser.get(section, 'content_type') - if type.find('opml')>=0 or type.find('foaf')>=0: + if type.find('opml')>=0 or type.find('foaf')>=0 or type.find('.')>=0: result.append(section) return result @@ -328,7 +338,8 @@ def filters(section=None): def planet_options(): """ dictionary of planet wide options""" - return dict(map(lambda opt: (opt, parser.get('Planet',opt)), + return dict(map(lambda opt: (opt, + parser.get('Planet', opt, raw=(opt=="log_format"))), parser.options('Planet'))) def feed_options(section): diff --git a/planet/feedparser.py b/planet/feedparser.py index c5894f4..00675e1 100755 --- a/planet/feedparser.py +++ b/planet/feedparser.py @@ -11,7 +11,7 @@ Recommended: Python 2.3 or later Recommended: CJKCodecs and iconv_codec """ -__version__ = "4.2-pre-" + "$Revision: 1.142 $"[11:16] + "-cvs" +__version__ = "4.2-pre-" + "$Revision: 1.144 $"[11:16] + "-cvs" __license__ = """Copyright (c) 2002-2006, Mark Pilgrim, All rights reserved. Redistribution and use in source and binary forms, with or without modification, @@ -218,6 +218,9 @@ class FeedParserDict(UserDict): def __getitem__(self, key): if key == 'category': return UserDict.__getitem__(self, 'tags')[0]['term'] + if key == 'enclosures': + norel = lambda link: FeedParserDict([(name,value) for (name,value) in link.items() if name!='rel']) + return [norel(link) for link in UserDict.__getitem__(self, 'links') if link['rel']=='enclosure'] if key == 'categories': return [(tag['scheme'], tag['term']) for tag in UserDict.__getitem__(self, 'tags')] realkey = self.keymap.get(key, key) @@ -1303,15 +1306,15 @@ class _FeedParserMixin: attrsD.setdefault('type', 'application/atom+xml') else: attrsD.setdefault('type', 'text/html') + context = self._getContext() attrsD = self._itsAnHrefDamnIt(attrsD) if attrsD.has_key('href'): attrsD['href'] = self.resolveURI(attrsD['href']) + if attrsD.get('rel')=='enclosure' and not context.get('id'): + context['id'] = attrsD.get('href') expectingText = self.infeed or self.inentry or self.insource - context = self._getContext() context.setdefault('links', []) context['links'].append(FeedParserDict(attrsD)) - if attrsD['rel'] == 'enclosure': - self._start_enclosure(attrsD) if attrsD.has_key('href'): expectingText = 0 if (attrsD.get('rel') == 'alternate') and (self.mapContentType(attrsD.get('type')) in self.html_types): @@ -1357,6 +1360,7 @@ class _FeedParserMixin: self._start_content(attrsD) else: self.pushContent('description', attrsD, 'text/html', self.infeed or self.inentry or self.insource) + _start_dc_description = _start_description def _start_abstract(self, attrsD): self.pushContent('description', attrsD, 'text/plain', self.infeed or self.inentry or self.insource) @@ -1368,6 +1372,7 @@ class _FeedParserMixin: value = self.popContent('description') self._summaryKey = None _end_abstract = _end_description + _end_dc_description = _end_description def _start_info(self, attrsD): self.pushContent('info', attrsD, 'text/plain', 1) @@ -1427,7 +1432,8 @@ class _FeedParserMixin: def _start_enclosure(self, attrsD): attrsD = self._itsAnHrefDamnIt(attrsD) context = self._getContext() - context.setdefault('enclosures', []).append(FeedParserDict(attrsD)) + attrsD['rel']='enclosure' + context.setdefault('links', []).append(FeedParserDict(attrsD)) href = attrsD.get('href') if href and not context.get('id'): context['id'] = href diff --git a/planet/idindex.py b/planet/idindex.py new file mode 100644 index 0000000..b0eacf9 --- /dev/null +++ b/planet/idindex.py @@ -0,0 +1,97 @@ +from glob import glob +import os, sys, dbhash + +if __name__ == '__main__': + rootdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + sys.path.insert(0, rootdir) + +from planet.spider import filename +from planet import config + +def open(): + try: + cache = config.cache_directory() + index=os.path.join(cache,'index') + if not os.path.exists(index): return None + return dbhash.open(filename(index, 'id'),'w') + except Exception, e: + if e.__class__.__name__ == 'DBError': e = e.args[-1] + from planet import logger as log + log.error(str(e)) + +def destroy(): + from planet import logger as log + cache = config.cache_directory() + index=os.path.join(cache,'index') + if not os.path.exists(index): return None + idindex = filename(index, 'id') + if os.path.exists(idindex): os.unlink(idindex) + os.removedirs(index) + log.info(idindex + " deleted") + +def create(): + from planet import logger as log + cache = config.cache_directory() + index=os.path.join(cache,'index') + if not os.path.exists(index): os.makedirs(index) + index = dbhash.open(filename(index, 'id'),'c') + + try: + import libxml2 + except: + libxml2 = False + from xml.dom import minidom + + for file in glob(cache+"/*"): + if os.path.isdir(file): + continue + elif libxml2: + try: + doc = libxml2.parseFile(file) + ctxt = doc.xpathNewContext() + ctxt.xpathRegisterNs('atom','http://www.w3.org/2005/Atom') + entry = ctxt.xpathEval('/atom:entry/atom:id') + source = ctxt.xpathEval('/atom:entry/atom:source/atom:id') + if entry and source: + index[filename('',entry[0].content)] = source[0].content + doc.freeDoc() + except: + log.error(file) + else: + try: + doc = minidom.parse(file) + doc.normalize() + ids = doc.getElementsByTagName('id') + entry = [e for e in ids if e.parentNode.nodeName == 'entry'] + source = [e for e in ids if e.parentNode.nodeName == 'source'] + if entry and source: + index[filename('',entry[0].childNodes[0].nodeValue)] = \ + source[0].childNodes[0].nodeValue + doc.freeDoc() + except: + log.error(file) + + log.info(str(len(index.keys())) + " entries indexed") + index.close() + + return open() + +if __name__ == '__main__': + if len(sys.argv) < 2: + print 'Usage: %s [-c|-d]' % sys.argv[0] + sys.exit(1) + + config.load(sys.argv[1]) + + if len(sys.argv) > 2 and sys.argv[2] == '-c': + create() + elif len(sys.argv) > 2 and sys.argv[2] == '-d': + destroy() + else: + from planet import logger as log + index = open() + if index: + log.info(str(len(index.keys())) + " entries indexed") + index.close() + else: + log.info("no entries indexed") diff --git a/planet/opml.py b/planet/opml.py index d4e9a54..6e0b02a 100755 --- a/planet/opml.py +++ b/planet/opml.py @@ -48,6 +48,10 @@ class OpmlParser(ContentHandler,SGMLParser): # this is an entry in a subscription list, but some leave this # attribute off, and others have placed 'atom' in here if attrs.has_key('type'): + if attrs['type'] == 'link' and not attrs.has_key('url'): + # Auto-correct WordPress link manager OPML files + attrs = dict(attrs.items()) + attrs['type'] = 'rss' if attrs['type'].lower() not in['rss','atom']: return # The feed itself is supposed to be in an attribute named 'xmlUrl' diff --git a/planet/reconstitute.py b/planet/reconstitute.py index 30a5cbb..989a107 100644 --- a/planet/reconstitute.py +++ b/planet/reconstitute.py @@ -25,7 +25,11 @@ illegal_xml_chars = re.compile("[\x01-\x08\x0B\x0C\x0E-\x1F]") def createTextElement(parent, name, value): """ utility function to create a child element with the specified text""" if not value: return - if isinstance(value,str): value=value.decode('utf-8') + if isinstance(value,str): + try: + value=value.decode('utf-8') + except: + value=value.decode('iso-8859-1') xdoc = parent.ownerDocument xelement = xdoc.createElement(name) xelement.appendChild(xdoc.createTextNode(value)) @@ -100,6 +104,8 @@ def links(xentry, entry): xlink.setAttribute('type', link.get('type')) if link.has_key('rel'): xlink.setAttribute('rel', link.get('rel',None)) + if link.has_key('length'): + xlink.setAttribute('length', link.get('length')) xentry.appendChild(xlink) def date(xentry, name, parsed): @@ -157,7 +163,7 @@ def content(xentry, name, detail, bozo): xcontent.setAttribute('type', 'html') xcontent.appendChild(xdoc.createTextNode(detail.value.decode('utf-8'))) - if detail.language: + if detail.get("language"): xcontent.setAttribute('xml:lang', detail.language) xentry.appendChild(xcontent) @@ -170,13 +176,13 @@ def source(xsource, source, bozo, format): createTextElement(xsource, 'icon', source.get('icon', None)) createTextElement(xsource, 'logo', source.get('logo', None)) + if not source.has_key('logo') and source.has_key('image'): + createTextElement(xsource, 'logo', source.image.get('href',None)) + for tag in source.get('tags',[]): category(xsource, tag) - author_detail = source.get('author_detail',{}) - if not author_detail.has_key('name') and source.has_key('planet_name'): - author_detail['name'] = source['planet_name'] - author(xsource, 'author', author_detail) + author(xsource, 'author', source.get('author_detail',{})) for contributor in source.get('contributors',[]): author(xsource, 'contributor', contributor) @@ -204,6 +210,8 @@ def reconstitute(feed, entry): if entry.has_key('language'): xentry.setAttribute('xml:lang', entry.language) + elif feed.feed.has_key('language'): + xentry.setAttribute('xml:lang', feed.feed.language) id(xentry, entry) links(xentry, entry) @@ -217,18 +225,46 @@ def reconstitute(feed, entry): content(xentry, 'content', entry.get('content',[None])[0], bozo) content(xentry, 'rights', entry.get('rights_detail',None), bozo) - date(xentry, 'updated', entry.get('updated_parsed',time.gmtime())) + date(xentry, 'updated', entry_updated(feed.feed, entry, time.gmtime())) date(xentry, 'published', entry.get('published_parsed',None)) for tag in entry.get('tags',[]): category(xentry, tag) - author(xentry, 'author', entry.get('author_detail',None)) + # known, simple text extensions + for ns,name in [('feedburner','origlink')]: + if entry.has_key('%s_%s' % (ns,name)) and \ + feed.namespaces.has_key(ns): + xoriglink = createTextElement(xentry, '%s:%s' % (ns,name), + entry['%s_%s' % (ns,name)]) + xoriglink.setAttribute('xmlns:%s' % ns, feed.namespaces[ns]) + + author_detail = entry.get('author_detail',{}) + if author_detail and not author_detail.has_key('name') and \ + feed.feed.has_key('planet_name'): + author_detail['name'] = feed.feed['planet_name'] + author(xentry, 'author', author_detail) for contributor in entry.get('contributors',[]): author(xentry, 'contributor', contributor) xsource = xdoc.createElement('source') - source(xsource, entry.get('source') or feed.feed, bozo, feed.version) + src = entry.get('source') or feed.feed + src_author = src.get('author_detail',{}) + if (not author_detail or not author_detail.has_key('name')) and \ + not src_author.has_key('name') and feed.feed.has_key('planet_name'): + if src_author: src_author = src_author.__class__(src_author.copy()) + src['author_detail'] = src_author + src_author['name'] = feed.feed['planet_name'] + source(xsource, src, bozo, feed.version) xentry.appendChild(xsource) return xdoc + +def entry_updated(feed, entry, default = None): + chks = ((entry, 'updated_parsed'), + (entry, 'published_parsed'), + (feed, 'updated_parsed'),) + for node, field in chks: + if node.has_key(field) and node[field]: + return node[field] + return default diff --git a/planet/shell/__init__.py b/planet/shell/__init__.py index bd0e005..18c764a 100644 --- a/planet/shell/__init__.py +++ b/planet/shell/__init__.py @@ -6,13 +6,21 @@ logged_modes = [] def run(template_file, doc, mode='template'): """ select a template module based on file extension and execute it """ - log = planet.getLogger(planet.config.log_level()) + log = planet.getLogger(planet.config.log_level(),planet.config.log_format()) if mode == 'template': dirs = planet.config.template_directories() else: dirs = planet.config.filter_directories() + # parse out "extra" options + if template_file.find('?') < 0: + extra_options = {} + else: + import cgi + template_file, extra_options = template_file.split('?',1) + extra_options = dict(cgi.parse_qsl(extra_options)) + # see if the template can be located for template_dir in dirs: template_resolved = os.path.join(template_dir, template_file) @@ -43,6 +51,7 @@ def run(template_file, doc, mode='template'): # Execute the shell module options = planet.config.template_options(template_file) + options.update(extra_options) log.debug("Processing %s %s using %s", mode, os.path.realpath(template_resolved), module_name) if mode == 'filter': diff --git a/planet/shell/tmpl.py b/planet/shell/tmpl.py index 81a79d5..620f45e 100644 --- a/planet/shell/tmpl.py +++ b/planet/shell/tmpl.py @@ -97,6 +97,9 @@ Items = [ ['date_822', Rfc822, 'updated_parsed'], ['date_iso', Rfc3399, 'published_parsed'], ['date_iso', Rfc3399, 'updated_parsed'], + ['enclosure_href', String, 'links', {'rel': 'enclosure'}, 'href'], + ['enclosure_length', String, 'links', {'rel': 'enclosure'}, 'length'], + ['enclosure_type', String, 'links', {'rel': 'enclosure'}, 'type'], ['id', String, 'id'], ['link', String, 'links', {'rel': 'alternate'}, 'href'], ['new_channel', String, 'id'], @@ -190,6 +193,13 @@ def template_info(source): for entry in data.entries: output['Items'].append(tmpl_mapper(entry, Items)) + # synthesize isPermaLink attribute + for item in output['Items']: + if item.get('id') == item.get('link'): + item['guid_isPermaLink']='true' + else: + item['guid_isPermaLink']='false' + # feed level information output['generator'] = config.generator_uri() output['name'] = config.name() diff --git a/planet/shell/xslt.py b/planet/shell/xslt.py index 593f7b9..d667598 100644 --- a/planet/shell/xslt.py +++ b/planet/shell/xslt.py @@ -1,5 +1,19 @@ import os +def quote(string, apos): + """ quote a string so that it can be passed as a parameter """ + if type(string) == unicode: + string=string.encode('utf-8') + if apos.startswith("\\"): string.replace('\\','\\\\') + + if string.find("'")<0: + return "'" + string + "'" + elif string.find("'")<0: + return '"' + string + '"' + else: + # unclear how to quote strings with both types of quotes for libxslt + return "'" + string.replace("'",apos) + "'" + def run(script, doc, output_file=None, options={}): """ process an XSLT stylesheet """ @@ -12,6 +26,22 @@ def run(script, doc, output_file=None, options={}): except: # otherwise, use the command line interface dom = None + + # do it + result = None + if dom: + styledoc = libxml2.parseFile(script) + style = libxslt.parseStylesheetDoc(styledoc) + for key in options.keys(): + options[key] = quote(options[key], apos="\xe2\x80\x99") + output = style.applyStylesheet(dom, options) + if output_file: + style.saveResultToFilename(output_file, output, 0) + else: + result = str(output) + style.freeStylesheet() + output.freeDoc() + elif output_file: import warnings if hasattr(warnings, 'simplefilter'): warnings.simplefilter('ignore', RuntimeWarning) @@ -20,16 +50,28 @@ def run(script, doc, output_file=None, options={}): file.write(doc) file.close() - # do it - if dom: - styledoc = libxml2.parseFile(script) - style = libxslt.parseStylesheetDoc(styledoc) - result = style.applyStylesheet(dom, None) - style.saveResultToFilename(output_file, result, 0) - style.freeStylesheet() - result.freeDoc() + cmdopts = [] + for key,value in options.items(): + cmdopts += ['--stringparam', key, quote(value, apos=r"\'")] + + os.system('xsltproc %s %s %s > %s' % + (' '.join(cmdopts), script, docfile, output_file)) + os.unlink(docfile) else: - os.system('xsltproc %s %s > %s' % (script, docfile, output_file)) + import sys + from subprocess import Popen, PIPE + + options = sum([['--stringparam', key, value] + for key,value in options.items()], []) + + proc = Popen(['xsltproc'] + options + [script, '-'], + stdin=PIPE, stdout=PIPE, stderr=PIPE) + + result, stderr = proc.communicate(doc) + if stderr: + import planet + planet.logger.error(stderr) if dom: dom.freeDoc() - if docfile: os.unlink(docfile) + + return result diff --git a/planet/spider.py b/planet/spider.py index 0cd5523..aff3884 100644 --- a/planet/spider.py +++ b/planet/spider.py @@ -11,10 +11,12 @@ import planet, config, feedparser, reconstitute, shell # Regular expressions to sanitise cache filenames re_url_scheme = re.compile(r'^\w+:/*(\w+:|www\.)?') -re_slash = re.compile(r'[?/:]+') +re_slash = re.compile(r'[?/:|]+') re_initial_cruft = re.compile(r'^[,.]*') re_final_cruft = re.compile(r'[,.]*$') +index = True + def filename(directory, filename): """Return a filename suitable for the cache. @@ -29,6 +31,8 @@ def filename(directory, filename): filename=filename.encode('idna') except: pass + if isinstance(filename,unicode): + filename=filename.encode('utf-8') filename = re_url_scheme.sub("", filename) filename = re_slash.sub(",", filename) filename = re_initial_cruft.sub("", filename) @@ -59,10 +63,16 @@ def scrub(feed, data): # some data is not trustworthy for tag in config.ignore_in_feed(feed).split(): + if tag.find('lang')>=0: tag='language' + if data.feed.has_key(tag): del data.feed[tag] for entry in data.entries: if entry.has_key(tag): del entry[tag] if entry.has_key(tag + "_detail"): del entry[tag + "_detail"] if entry.has_key(tag + "_parsed"): del entry[tag + "_parsed"] + for key in entry.keys(): + if not key.endswith('_detail'): continue + for detail in entry[key].copy(): + if detail == tag: del entry[key][detail] # adjust title types if config.title_type(feed): @@ -107,15 +117,22 @@ def scrub(feed, data): source.author_detail['name'] = \ str(stripHtml(source.author_detail.name)) -def spiderFeed(feed): +def spiderFeed(feed, only_if_new=0): """ Spider (fetch) a single feed """ log = planet.logger # read cached feed info sources = config.cache_sources_directory() + if not os.path.exists(sources): + os.makedirs(sources, 0700) feed_source = filename(sources, feed) feed_info = feedparser.parse(feed_source) - if feed_info.feed.get('planet_http_status',None) == '410': return + if feed_info.feed and only_if_new: + log.info("Feed %s already in cache", feed) + return + if feed_info.feed.get('planet_http_status',None) == '410': + log.info("Feed %s gone", feed) + return # read feed itself modified = None @@ -142,6 +159,10 @@ def spiderFeed(feed): # process based on the HTTP status code if data.status == 200 and data.has_key("url"): data.feed['planet_http_location'] = data.url + if feed == data.url: + log.info("Updating feed %s", feed) + else: + log.info("Updating feed %s @ %s", feed, data.url) elif data.status == 301 and data.has_key("entries") and len(data.entries)>0: log.warning("Feed has moved from <%s> to <%s>", feed, data.url) data.feed['planet_http_location'] = data.url @@ -171,6 +192,7 @@ def spiderFeed(feed): if not data.version and feed_info.version: data.feed = feed_info.feed data.bozo = feed_info.feed.get('planet_bozo','true') == 'true' + data.version = feed_info.feed.get('planet_format') data.feed['planet_http_status'] = str(data.status) # capture etag and last-modified information @@ -184,18 +206,28 @@ def spiderFeed(feed): data.feed['planet_http_last_modified']) # capture feed and data from the planet configuration file - if not data.feed.has_key('links'): data.feed['links'] = list() - for link in data.feed.links: - if link.rel == 'self': break - else: - data.feed.links.append(feedparser.FeedParserDict( - {'rel':'self', 'type':'application/atom+xml', 'href':feed})) + if data.version: + if not data.feed.has_key('links'): data.feed['links'] = list() + feedtype = 'application/atom+xml' + if data.version.startswith('rss'): feedtype = 'application/rss+xml' + if data.version in ['rss090','rss10']: feedtype = 'application/rdf+xml' + for link in data.feed.links: + if link.rel == 'self': + link['type'] = feedtype + break + else: + data.feed.links.append(feedparser.FeedParserDict( + {'rel':'self', 'type':feedtype, 'href':feed})) for name, value in config.feed_options(feed).items(): data.feed['planet_'+name] = value # perform user configured scrub operations on the data scrub(feed, data) + from planet import idindex + global index + if index != None: index = idindex.open() + # write each entry to the cache cache = config.cache_directory() for entry in data.entries: @@ -211,16 +243,20 @@ def spiderFeed(feed): mtime = None if not entry.has_key('updated_parsed'): if entry.has_key('published_parsed'): - entry['updated_parsed'] = entry.published_parsed - if entry.has_key('updated_parsed'): - mtime = calendar.timegm(entry.updated_parsed) - if mtime > time.time(): mtime = None + entry['updated_parsed'] = entry['published_parsed'] + if not entry.has_key('updated_parsed'): + try: + mtime = calendar.timegm(entry.updated_parsed) + except: + pass if not mtime: try: mtime = os.stat(cache_file).st_mtime except: - mtime = time.time() - entry['updated_parsed'] = time.gmtime(mtime) + if data.feed.has_key('updated_parsed'): + mtime = calendar.timegm(data.feed.updated_parsed) + if not mtime or mtime > time.time(): mtime = time.time() + entry['updated_parsed'] = time.gmtime(mtime) # apply any filters xdoc = reconstitute.reconstitute(data, entry) @@ -228,12 +264,22 @@ def spiderFeed(feed): xdoc.unlink() for filter in config.filters(feed): output = shell.run(filter, output, mode="filter") - if not output: return + if not output: break + if not output: continue # write out and timestamp the results write(output, cache_file) os.utime(cache_file, (mtime, mtime)) + # optionally index + if index != None: + feedid = data.feed.get('id', data.feed.get('link',None)) + if feedid: + if type(feedid) == unicode: feedid = feedid.encode('utf-8') + index[filename('', entry.id)] = feedid + + if index: index.close() + # identify inactive feeds if config.activity_threshold(feed): updated = [entry.updated_parsed for entry in data.entries @@ -254,6 +300,8 @@ def spiderFeed(feed): # report channel level errors if data.status == 226: if data.feed.has_key('planet_message'): del data.feed['planet_message'] + if feed_info.feed.has_key('planet_updated'): + data.feed['planet_updated'] = feed_info.feed['planet_updated'] elif data.status == 403: data.feed['planet_message'] = "403: forbidden" elif data.status == 404: @@ -275,14 +323,17 @@ def spiderFeed(feed): write(xdoc.toxml('utf-8'), filename(sources, feed)) xdoc.unlink() -def spiderPlanet(): +def spiderPlanet(only_if_new = False): """ Spider (fetch) an entire planet """ - log = planet.getLogger(config.log_level()) + log = planet.getLogger(config.log_level(),config.log_format()) planet.setTimeout(config.feed_timeout()) + global index + index = True + for feed in config.subscriptions(): try: - spiderFeed(feed) + spiderFeed(feed, only_if_new=only_if_new) except Exception,e: import sys, traceback type, value, tb = sys.exc_info() diff --git a/planet/splice.py b/planet/splice.py index ddb11ed..e50f927 100644 --- a/planet/splice.py +++ b/planet/splice.py @@ -4,11 +4,12 @@ from xml.dom import minidom import planet, config, feedparser, reconstitute, shell from reconstitute import createTextElement, date from spider import filename +from planet import idindex def splice(): """ Splice together a planet from a cache of entries """ import planet - log = planet.getLogger(config.log_level()) + log = planet.getLogger(config.log_level(),config.log_format()) log.info("Loading cached data") cache = config.cache_directory() @@ -62,9 +63,15 @@ def splice(): reconstitute.source(xdoc.documentElement, data.feed, None, None) feed.appendChild(xdoc.documentElement) + index = idindex.open() + # insert entry information items = 0 for mtime,file in dir: + if index: + base = file.split('/')[-1] + if index.has_key(base) and index[base] not in sub_ids: continue + try: entry=minidom.parse(file) @@ -83,12 +90,14 @@ def splice(): except: log.error("Error parsing %s", file) + if index: index.close() + return doc def apply(doc): output_dir = config.output_dir() if not os.path.exists(output_dir): os.makedirs(output_dir) - log = planet.getLogger(config.log_level()) + log = planet.getLogger(config.log_level(),config.log_format()) # Go-go-gadget-template for template_file in config.template_files(): diff --git a/runtests.py b/runtests.py index 3ebe331..d14058d 100755 --- a/runtests.py +++ b/runtests.py @@ -23,7 +23,7 @@ modules = map(fullmodname, glob.glob(os.path.join('tests', 'test_*.py'))) # enable warnings import planet -planet.getLogger("WARNING") +planet.getLogger("WARNING",None) # load all of the tests into a suite try: @@ -33,5 +33,11 @@ except Exception, exception: for module in modules: __import__(module) raise +verbosity = 1 +if "-q" in sys.argv or '--quiet' in sys.argv: + verbosity = 0 +if "-v" in sys.argv or '--verbose' in sys.argv: + verbosity = 2 + # run test suite -unittest.TextTestRunner().run(suite) +unittest.TextTestRunner(verbosity=verbosity).run(suite) diff --git a/tests/capture.py b/tests/capture.py index 09f4558..0ea3473 100755 --- a/tests/capture.py +++ b/tests/capture.py @@ -18,9 +18,10 @@ os.chdir(sys.path[0]) # copy spider output to splice input import planet from planet import spider, config -planet.getLogger('CRITICAL') +planet.getLogger('CRITICAL',None) -spider.spiderPlanet('tests/data/spider/config.ini') +config.load('tests/data/spider/config.ini') +spider.spiderPlanet() if os.path.exists('tests/data/splice/cache'): shutil.rmtree('tests/data/splice/cache') shutil.move('tests/work/spider/cache', 'tests/data/splice/cache') @@ -31,7 +32,7 @@ dest1.write(source.read().replace('/work/spider/', '/data/splice/')) dest1.close() source.seek(0) -dest2=open('tests/data/apply/config.ini', 'w') +dest2=open('tests/work/apply_config.ini', 'w') dest2.write(source.read().replace('[Planet]', '''[Planet] output_theme = asf output_dir = tests/work/apply''')) @@ -41,12 +42,13 @@ source.close() # copy splice output to apply input from planet import splice file=open('tests/data/apply/feed.xml', 'w') -data=splice.splice('tests/data/splice/config.ini').toxml('utf-8') +config.load('tests/data/splice/config.ini') +data=splice.splice().toxml('utf-8') file.write(data) file.close() # copy apply output to config/reading-list input -config.load('tests/data/apply/config.ini') +config.load('tests/work/apply_config.ini') splice.apply(data) shutil.move('tests/work/apply/opml.xml', 'tests/data/config') diff --git a/tests/data/apply/feed.xml b/tests/data/apply/feed.xml index 2ffbfa1..367c0df 100644 --- a/tests/data/apply/feed.xml +++ b/tests/data/apply/feed.xml @@ -1,2 +1,2 @@ -test planet2006-08-25T13:41:22ZVenusAnonymous Cowardtag:planet.intertwingly.net,2006:testfeed3/2Venusthe Morning Star2006-08-25T13:41:22ZIt’s just dataSam Rubythree200http://example.com/4Marsthe Red Planet2006-08-25T13:41:22ZIt’s just dataSam Rubythree200tag:planet.intertwingly.net,2006:testfeed1/2Venusthe Jewel of the Sky2006-02-02T00:00:00Z2006-01-02T00:00:00Ztag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zone200tag:planet.intertwingly.net,2006:testfeed2/4Marsthe Red Planet2006-01-04T00:00:00Ztag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Ztwo200tag:planet.intertwingly.net,2006:testfeed1/4Marsthe Red Planet2006-01-04T00:00:00Ztag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zone200tag:planet.intertwingly.net,2006:testfeed2/3Earththe Blue Planet2006-01-03T00:00:00Ztag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Ztwo200tag:planet.intertwingly.net,2006:testfeed1/3Earththe Blue Planet2006-01-03T00:00:00Ztag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zone200http://example.com/3Earththe Blue Planet2006-01-03T00:00:00ZIt’s just dataSam Rubythree200tag:planet.intertwingly.net,2006:testfeed2/2Venusthe Morning Star2006-01-02T00:00:00Ztag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Ztwo200tag:planet.intertwingly.net,2006:testfeed3/1MercuryMessenger of the Roman Gods2006-01-01T00:00:00ZIt’s just dataSam Rubythree200tag:planet.intertwingly.net,2006:testfeed2/1MercuryMessenger of the Roman Gods2006-01-01T00:00:00Ztag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Ztwo200tag:planet.intertwingly.net,2006:testfeed1/1MercuryMessenger of the Roman Gods2006-01-01T00:00:00Ztag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zone200500not foundtag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Ztwo200It’s just dataSam Rubythree200tag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zone200 \ No newline at end of file +test planet2006-10-14T13:02:18ZVenusAnonymous Cowardnot found2006-10-14T13:02:18Zinternal server errornot found500truetag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10two200http://intertwingly.net/code/venus/tests/data/spider/testfeed3.rssthreeIt’s just dataSam Ruby2006-10-14T13:02:18Ztruerss20three200tag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10one200tag:planet.intertwingly.net,2006:testfeed3/2Venusthe Morning Star2006-10-14T13:02:18Zhttp://intertwingly.net/code/venus/tests/data/spider/testfeed3.rssthreeIt’s just dataSam Ruby2006-10-14T13:02:18Zrss20threetrue200http://example.com/4Marsthe Red Planet2006-10-14T13:02:18Zhttp://intertwingly.net/code/venus/tests/data/spider/testfeed3.rssthreeIt’s just dataSam Ruby2006-10-14T13:02:18Zrss20threetrue200tag:planet.intertwingly.net,2006:testfeed1/2Venusthe Jewel of the Sky2006-02-02T00:00:00Z2006-01-02T00:00:00Ztag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10one200tag:planet.intertwingly.net,2006:testfeed2/4Marsthe Red Planet2006-01-04T00:00:00Ztag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10two200tag:planet.intertwingly.net,2006:testfeed1/4Marsthe Red Planet2006-01-04T00:00:00Ztag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10one200tag:planet.intertwingly.net,2006:testfeed2/3Earththe Blue Planet2006-01-03T00:00:00Ztag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10two200tag:planet.intertwingly.net,2006:testfeed1/3Earththe Blue Planet2006-01-03T00:00:00Ztag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10one200http://example.com/3Earththe Blue Planet2006-01-03T00:00:00Zhttp://intertwingly.net/code/venus/tests/data/spider/testfeed3.rssthreeIt’s just dataSam Ruby2006-10-14T13:02:18Zrss20threetrue200tag:planet.intertwingly.net,2006:testfeed2/2Venusthe Morning Star2006-01-02T00:00:00Ztag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10two200tag:planet.intertwingly.net,2006:testfeed3/1MercuryMessenger of the Roman Gods2006-01-01T00:00:00Zhttp://intertwingly.net/code/venus/tests/data/spider/testfeed3.rssthreeIt’s just dataSam Ruby2006-10-14T13:02:18Zrss20threetrue200tag:planet.intertwingly.net,2006:testfeed2/1MercuryMessenger of the Roman Gods2006-01-01T00:00:00Ztag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10two200tag:planet.intertwingly.net,2006:testfeed1/1MercuryMessenger of the Roman Gods2006-01-01T00:00:00Ztag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10one200 \ No newline at end of file diff --git a/tests/data/config/opml.xml b/tests/data/config/opml.xml index 165e160..4384145 100644 --- a/tests/data/config/opml.xml +++ b/tests/data/config/opml.xml @@ -1,8 +1,8 @@ - + test planet - August 25, 2006 01:41 PM + October 14, 2006 01:02 PM Anonymous Coward diff --git a/tests/data/filter/excerpt-images2.ini b/tests/data/filter/excerpt-images2.ini new file mode 100644 index 0000000..051faf0 --- /dev/null +++ b/tests/data/filter/excerpt-images2.ini @@ -0,0 +1,2 @@ +[Planet] +filters = excerpt.py?omit=img diff --git a/tests/data/filter/tmpl/enclosure_href.xml b/tests/data/filter/tmpl/enclosure_href.xml new file mode 100644 index 0000000..98b77f7 --- /dev/null +++ b/tests/data/filter/tmpl/enclosure_href.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/tests/data/filter/tmpl/enclosure_length.xml b/tests/data/filter/tmpl/enclosure_length.xml new file mode 100644 index 0000000..e4a4191 --- /dev/null +++ b/tests/data/filter/tmpl/enclosure_length.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/tests/data/filter/tmpl/enclosure_type.xml b/tests/data/filter/tmpl/enclosure_type.xml new file mode 100644 index 0000000..32f35ef --- /dev/null +++ b/tests/data/filter/tmpl/enclosure_type.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/tests/data/filter/translate.ini b/tests/data/filter/translate.ini new file mode 100644 index 0000000..0d34e74 --- /dev/null +++ b/tests/data/filter/translate.ini @@ -0,0 +1,7 @@ +[Planet] +filters = translate.xslt +filter_directories = tests/data/filter + +[translate.xslt] +in = aeiou +out = AEIOU diff --git a/tests/data/filter/translate.xslt b/tests/data/filter/translate.xslt new file mode 100644 index 0000000..25968d7 --- /dev/null +++ b/tests/data/filter/translate.xslt @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/filter/xpath-sifter2.ini b/tests/data/filter/xpath-sifter2.ini new file mode 100644 index 0000000..ad676f5 --- /dev/null +++ b/tests/data/filter/xpath-sifter2.ini @@ -0,0 +1,2 @@ +[Planet] +filters = xpath_sifter.py?require=//atom%3Acategory%5B%40term%3D%27two%27%5D diff --git a/tests/data/reconstitute.xslt b/tests/data/reconstitute.xslt new file mode 100644 index 0000000..ec80d60 --- /dev/null +++ b/tests/data/reconstitute.xslt @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tests/data/reconstitute/enclosure.xml b/tests/data/reconstitute/enclosure.xml new file mode 100644 index 0000000..8820d09 --- /dev/null +++ b/tests/data/reconstitute/enclosure.xml @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/tests/data/reconstitute/feedburner_origlink.xml b/tests/data/reconstitute/feedburner_origlink.xml new file mode 100644 index 0000000..fc98eeb --- /dev/null +++ b/tests/data/reconstitute/feedburner_origlink.xml @@ -0,0 +1,12 @@ + + + + + http://example.com/1 + + + diff --git a/tests/data/reconstitute/link_length.xml b/tests/data/reconstitute/link_length.xml new file mode 100644 index 0000000..a6617ac --- /dev/null +++ b/tests/data/reconstitute/link_length.xml @@ -0,0 +1,11 @@ + + + + + + + + diff --git a/tests/data/reconstitute/missing_item_pubDate.xml b/tests/data/reconstitute/missing_item_pubDate.xml new file mode 100644 index 0000000..eee23d0 --- /dev/null +++ b/tests/data/reconstitute/missing_item_pubDate.xml @@ -0,0 +1,14 @@ + + + + + Wed, 21 Jun 2006 14:16:41 +0100 + + + + + + diff --git a/tests/data/reconstitute/rss_image.xml b/tests/data/reconstitute/rss_image.xml new file mode 100644 index 0000000..392ea2b --- /dev/null +++ b/tests/data/reconstitute/rss_image.xml @@ -0,0 +1,12 @@ + + + + + http://example.com/logo.jpg + + + + diff --git a/tests/data/reconstitute/rss_lang.xml b/tests/data/reconstitute/rss_lang.xml new file mode 100644 index 0000000..7501cf0 --- /dev/null +++ b/tests/data/reconstitute/rss_lang.xml @@ -0,0 +1,14 @@ + + + + + en + + foo + + + + diff --git a/tests/data/reconstitute/rsssource.xml b/tests/data/reconstitute/rss_source.xml similarity index 100% rename from tests/data/reconstitute/rsssource.xml rename to tests/data/reconstitute/rss_source.xml diff --git a/tests/data/splice/cache/example.com,3 b/tests/data/splice/cache/example.com,3 index fce77be..9342223 100644 --- a/tests/data/splice/cache/example.com,3 +++ b/tests/data/splice/cache/example.com,3 @@ -1,2 +1,2 @@ -http://example.com/3Earththe Blue Planet2006-01-03T00:00:00ZIt’s just dataSam Rubythree200 \ No newline at end of file +http://example.com/3Earththe Blue Planet2006-01-03T00:00:00Zhttp://intertwingly.net/code/venus/tests/data/spider/testfeed3.rssthreeIt’s just dataSam Ruby2006-10-14T13:02:18Zrss20threetrue200 \ No newline at end of file diff --git a/tests/data/splice/cache/example.com,4 b/tests/data/splice/cache/example.com,4 index 2124793..da3332b 100644 --- a/tests/data/splice/cache/example.com,4 +++ b/tests/data/splice/cache/example.com,4 @@ -1,2 +1,2 @@ -http://example.com/4Marsthe Red Planet2006-08-25T13:41:22ZIt’s just dataSam Rubythree200 \ No newline at end of file +http://example.com/4Marsthe Red Planet2006-10-14T13:02:18Zhttp://intertwingly.net/code/venus/tests/data/spider/testfeed3.rssthreeIt’s just dataSam Ruby2006-10-14T13:02:18Zrss20threetrue200 \ No newline at end of file diff --git a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,1 b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,1 index f66cb50..134c07a 100644 --- a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,1 +++ b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,1 @@ -1,2 +1,2 @@ -tag:planet.intertwingly.net,2006:testfeed1/1MercuryMessenger of the Roman Gods2006-01-01T00:00:00Ztag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zone200 \ No newline at end of file +tag:planet.intertwingly.net,2006:testfeed1/1MercuryMessenger of the Roman Gods2006-01-01T00:00:00Ztag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10one200 \ No newline at end of file diff --git a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,2 b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,2 index 5495580..78405e7 100644 --- a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,2 +++ b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,2 @@ -1,2 +1,2 @@ -tag:planet.intertwingly.net,2006:testfeed1/2Venusthe Jewel of the Sky2006-02-02T00:00:00Z2006-01-02T00:00:00Ztag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zone200 \ No newline at end of file +tag:planet.intertwingly.net,2006:testfeed1/2Venusthe Jewel of the Sky2006-02-02T00:00:00Z2006-01-02T00:00:00Ztag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10one200 \ No newline at end of file diff --git a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,3 b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,3 index ab02a18..fb8bd10 100644 --- a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,3 +++ b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,3 @@ -1,2 +1,2 @@ -tag:planet.intertwingly.net,2006:testfeed1/3Earththe Blue Planet2006-01-03T00:00:00Ztag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zone200 \ No newline at end of file +tag:planet.intertwingly.net,2006:testfeed1/3Earththe Blue Planet2006-01-03T00:00:00Ztag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10one200 \ No newline at end of file diff --git a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,4 b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,4 index 2df1c64..f3f3fa0 100644 --- a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,4 +++ b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed1,4 @@ -1,2 +1,2 @@ -tag:planet.intertwingly.net,2006:testfeed1/4Marsthe Red Planet2006-01-04T00:00:00Ztag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zone200 \ No newline at end of file +tag:planet.intertwingly.net,2006:testfeed1/4Marsthe Red Planet2006-01-04T00:00:00Ztag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10one200 \ No newline at end of file diff --git a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,1 b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,1 index 91ece2e..8354498 100644 --- a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,1 +++ b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,1 @@ -1,2 +1,2 @@ -tag:planet.intertwingly.net,2006:testfeed2/1MercuryMessenger of the Roman Gods2006-01-01T00:00:00Ztag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Ztwo200 \ No newline at end of file +tag:planet.intertwingly.net,2006:testfeed2/1MercuryMessenger of the Roman Gods2006-01-01T00:00:00Ztag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10two200 \ No newline at end of file diff --git a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,2 b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,2 index 775e0c1..43516be 100644 --- a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,2 +++ b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,2 @@ -1,2 +1,2 @@ -tag:planet.intertwingly.net,2006:testfeed2/2Venusthe Morning Star2006-01-02T00:00:00Ztag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Ztwo200 \ No newline at end of file +tag:planet.intertwingly.net,2006:testfeed2/2Venusthe Morning Star2006-01-02T00:00:00Ztag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10two200 \ No newline at end of file diff --git a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,3 b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,3 index 2280686..840ddc7 100644 --- a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,3 +++ b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,3 @@ -1,2 +1,2 @@ -tag:planet.intertwingly.net,2006:testfeed2/3Earththe Blue Planet2006-01-03T00:00:00Ztag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Ztwo200 \ No newline at end of file +tag:planet.intertwingly.net,2006:testfeed2/3Earththe Blue Planet2006-01-03T00:00:00Ztag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10two200 \ No newline at end of file diff --git a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,4 b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,4 index 296b19c..05c7917 100644 --- a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,4 +++ b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed2,4 @@ -1,2 +1,2 @@ -tag:planet.intertwingly.net,2006:testfeed2/4Marsthe Red Planet2006-01-04T00:00:00Ztag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Ztwo200 \ No newline at end of file +tag:planet.intertwingly.net,2006:testfeed2/4Marsthe Red Planet2006-01-04T00:00:00Ztag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10two200 \ No newline at end of file diff --git a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed3,1 b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed3,1 index 945f7a3..5cd6f27 100644 --- a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed3,1 +++ b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed3,1 @@ -1,2 +1,2 @@ -tag:planet.intertwingly.net,2006:testfeed3/1MercuryMessenger of the Roman Gods2006-01-01T00:00:00ZIt’s just dataSam Rubythree200 \ No newline at end of file +tag:planet.intertwingly.net,2006:testfeed3/1MercuryMessenger of the Roman Gods2006-01-01T00:00:00Zhttp://intertwingly.net/code/venus/tests/data/spider/testfeed3.rssthreeIt’s just dataSam Ruby2006-10-14T13:02:18Zrss20threetrue200 \ No newline at end of file diff --git a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed3,2 b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed3,2 index 040da55..06ab416 100644 --- a/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed3,2 +++ b/tests/data/splice/cache/planet.intertwingly.net,2006,testfeed3,2 @@ -1,2 +1,2 @@ -tag:planet.intertwingly.net,2006:testfeed3/2Venusthe Morning Star2006-08-25T13:41:22ZIt’s just dataSam Rubythree200 \ No newline at end of file +tag:planet.intertwingly.net,2006:testfeed3/2Venusthe Morning Star2006-10-14T13:02:18Zhttp://intertwingly.net/code/venus/tests/data/spider/testfeed3.rssthreeIt’s just dataSam Ruby2006-10-14T13:02:18Zrss20threetrue200 \ No newline at end of file diff --git a/tests/data/splice/cache/sources/tests,data,spider,testfeed0.atom b/tests/data/splice/cache/sources/tests,data,spider,testfeed0.atom index 1894ca0..88cc417 100644 --- a/tests/data/splice/cache/sources/tests,data,spider,testfeed0.atom +++ b/tests/data/splice/cache/sources/tests,data,spider,testfeed0.atom @@ -1,2 +1,2 @@ -not found500 \ No newline at end of file +not found2006-10-14T13:02:18Zinternal server errortrue500not found \ No newline at end of file diff --git a/tests/data/splice/cache/sources/tests,data,spider,testfeed1b.atom b/tests/data/splice/cache/sources/tests,data,spider,testfeed1b.atom index 4cb2399..0c48d28 100644 --- a/tests/data/splice/cache/sources/tests,data,spider,testfeed1b.atom +++ b/tests/data/splice/cache/sources/tests,data,spider,testfeed1b.atom @@ -1,2 +1,2 @@ -tag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zone200 \ No newline at end of file +tag:planet.intertwingly.net,2006:testfeed1Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10one200 \ No newline at end of file diff --git a/tests/data/splice/cache/sources/tests,data,spider,testfeed2.atom b/tests/data/splice/cache/sources/tests,data,spider,testfeed2.atom index fa8f900..e9fcc3d 100644 --- a/tests/data/splice/cache/sources/tests,data,spider,testfeed2.atom +++ b/tests/data/splice/cache/sources/tests,data,spider,testfeed2.atom @@ -1,2 +1,2 @@ -tag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Ztwo200 \ No newline at end of file +tag:planet.intertwingly.net,2006:testfeed2Sam Rubyrubys@intertwingly.nethttp://www.intertwingly.net/blog/It’s just dataSam Ruby2006-06-17T00:15:18Zfalseatom10two200 \ No newline at end of file diff --git a/tests/data/splice/cache/sources/tests,data,spider,testfeed3.rss b/tests/data/splice/cache/sources/tests,data,spider,testfeed3.rss index 01432d4..809df94 100644 --- a/tests/data/splice/cache/sources/tests,data,spider,testfeed3.rss +++ b/tests/data/splice/cache/sources/tests,data,spider,testfeed3.rss @@ -1,2 +1,2 @@ -It’s just dataSam Rubythree200 \ No newline at end of file +http://intertwingly.net/code/venus/tests/data/spider/testfeed3.rssthreeIt’s just dataSam Ruby2006-10-14T13:02:18Zrss20threetrue200 \ No newline at end of file diff --git a/tests/reconstitute.py b/tests/reconstitute.py new file mode 100644 index 0000000..26931dc --- /dev/null +++ b/tests/reconstitute.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python +import os, sys, ConfigParser, shutil, glob +venus_base = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +sys.path.insert(0,venus_base) + +if __name__ == "__main__": + + hide_planet_ns = True + + while len(sys.argv) > 1: + if sys.argv[1] == '-v' or sys.argv[1] == '--verbose': + import planet + planet.getLogger('DEBUG',None) + del sys.argv[1] + elif sys.argv[1] == '-p' or sys.argv[1] == '--planet': + hide_planet_ns = False + del sys.argv[1] + else: + break + + parser = ConfigParser.ConfigParser() + parser.add_section('Planet') + parser.add_section(sys.argv[1]) + work = reduce(os.path.join, ['tests','work','reconsititute'], venus_base) + output = os.path.join(work, 'output') + filters = os.path.join(venus_base,'filters') + parser.set('Planet','cache_directory',work) + parser.set('Planet','output_dir',output) + parser.set('Planet','filter_directories',filters) + if hide_planet_ns: + parser.set('Planet','template_files','themes/common/atom.xml.xslt') + else: + parser.set('Planet','template_files','tests/data/reconstitute.xslt') + + for name, value in zip(sys.argv[2::2],sys.argv[3::2]): + parser.set(sys.argv[1], name.lstrip('-'), value) + + from planet import config + config.parser = parser + + from planet import spider + spider.spiderPlanet(only_if_new=False) + + from planet import feedparser + for source in glob.glob(os.path.join(work, 'sources/*')): + feed = feedparser.parse(source).feed + if feed.has_key('title'): + config.parser.set('Planet','name',feed.title_detail.value) + if feed.has_key('link'): + config.parser.set('Planet','link',feed.link) + if feed.has_key('author_detail'): + if feed.author_detail.has_key('name'): + config.parser.set('Planet','owner_name',feed.author_detail.name) + if feed.author_detail.has_key('email'): + config.parser.set('Planet','owner_email',feed.author_detail.email) + + from planet import splice + doc = splice.splice() + + sources = doc.getElementsByTagName('planet:source') + if hide_planet_ns and len(sources) == 1: + source = sources[0] + feed = source.parentNode + child = feed.firstChild + while child: + next = child.nextSibling + if child.nodeName not in ['planet:source','entry']: + feed.removeChild(child) + child = next + while source.hasChildNodes(): + child = source.firstChild + source.removeChild(child) + feed.insertBefore(child, source) + for source in doc.getElementsByTagName('source'): + source.parentNode.removeChild(source) + + splice.apply(doc.toxml('utf-8')) + + if hide_planet_ns: + atom = open(os.path.join(output,'atom.xml')).read() + else: + atom = open(os.path.join(output,'reconstitute')).read() + + shutil.rmtree(work) + os.removedirs(os.path.dirname(work)) + + print atom diff --git a/tests/test_filter_xslt.py b/tests/test_filter_xslt.py new file mode 100644 index 0000000..061f805 --- /dev/null +++ b/tests/test_filter_xslt.py @@ -0,0 +1,28 @@ +#!/usr/bin/env python + +import unittest, xml.dom.minidom +from planet import shell, config, logger + +class XsltFilterTests(unittest.TestCase): + + def test_xslt_filter(self): + config.load('tests/data/filter/translate.ini') + testfile = 'tests/data/filter/category-one.xml' + + input = open(testfile).read() + output = shell.run(config.filters()[0], input, mode="filter") + dom = xml.dom.minidom.parseString(output) + catterm = dom.getElementsByTagName('category')[0].getAttribute('term') + self.assertEqual('OnE', catterm) + +try: + import libxslt +except: + try: + from subprocess import Popen, PIPE + xsltproc=Popen(['xsltproc','--version'],stdout=PIPE,stderr=PIPE) + xsltproc.communicate() + if xsltproc.returncode != 0: raise ImportError + except: + logger.warn("libxslt is not available => can't test xslt filters") + del XsltFilterTests.test_xslt_filter diff --git a/tests/test_filters.py b/tests/test_filters.py index e8c5633..55361eb 100644 --- a/tests/test_filters.py +++ b/tests/test_filters.py @@ -14,10 +14,16 @@ class FilterTests(unittest.TestCase): imgsrc = dom.getElementsByTagName('img')[0].getAttribute('src') self.assertEqual('http://example.com.nyud.net:8080/foo.png', imgsrc) - def test_excerpt_images(self): - testfile = 'tests/data/filter/excerpt-images.xml' + def test_excerpt_images1(self): config.load('tests/data/filter/excerpt-images.ini') + self.verify_images() + def test_excerpt_images2(self): + config.load('tests/data/filter/excerpt-images2.ini') + self.verify_images() + + def verify_images(self): + testfile = 'tests/data/filter/excerpt-images.xml' output = open(testfile).read() for filter in config.filters(): output = shell.run(filter, output, mode="filter") @@ -58,8 +64,15 @@ class FilterTests(unittest.TestCase): self.assertEqual(u'before--after', excerpt.firstChild.firstChild.nodeValue) - def test_xpath_filter(self): + def test_xpath_filter1(self): config.load('tests/data/filter/xpath-sifter.ini') + self.verify_xpath() + + def test_xpath_filter2(self): + config.load('tests/data/filter/xpath-sifter2.ini') + self.verify_xpath() + + def verify_xpath(self): testfile = 'tests/data/filter/category-one.xml' output = open(testfile).read() @@ -89,9 +102,10 @@ try: import libxml2 except: logger.warn("libxml2 is not available => can't test xpath_sifter") - del FilterTests.test_xpath_filter + del FilterTests.test_xpath_filter1 + del FilterTests.test_xpath_filter2 except ImportError: - logger.warn("Popen is not available => can't test filters") + logger.warn("Popen is not available => can't test standard filters") for method in dir(FilterTests): if method.startswith('test_'): delattr(FilterTests,method) diff --git a/tests/test_idindex.py b/tests/test_idindex.py new file mode 100644 index 0000000..a383eb6 --- /dev/null +++ b/tests/test_idindex.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python + +import unittest +from planet import idindex, config, logger + +class idIndexTest(unittest.TestCase): + + def setUp(self): + # silence errors + import planet + planet.logger = None + planet.getLogger('CRITICAL',None) + + def tearDown(self): + idindex.destroy() + + def test_unicode(self): + from planet.spider import filename + index = idindex.create() + iri = 'http://www.\xe8\xa9\xb9\xe5\xa7\x86\xe6\x96\xaf.com/' + index[filename('', iri)] = 'data' + index[filename('', iri.decode('utf-8'))] = 'data' + index[filename('', u'1234')] = 'data' + index.close() + + def test_index_spider(self): + import test_spider + config.load(test_spider.configfile) + + index = idindex.create() + self.assertEqual(0, len(index)) + index.close() + + from planet.spider import spiderPlanet + try: + spiderPlanet() + + index = idindex.open() + self.assertEqual(12, len(index)) + self.assertEqual('tag:planet.intertwingly.net,2006:testfeed1', index['planet.intertwingly.net,2006,testfeed1,1']) + self.assertEqual('http://intertwingly.net/code/venus/tests/data/spider/testfeed3.rss', index['planet.intertwingly.net,2006,testfeed3,1']) + index.close() + finally: + import os, shutil + shutil.rmtree(test_spider.workdir) + os.removedirs(os.path.split(test_spider.workdir)[0]) + + def test_index_splice(self): + import test_splice + config.load(test_splice.configfile) + index = idindex.create() + + self.assertEqual(12, len(index)) + self.assertEqual('tag:planet.intertwingly.net,2006:testfeed1', index['planet.intertwingly.net,2006,testfeed1,1']) + self.assertEqual('http://intertwingly.net/code/venus/tests/data/spider/testfeed3.rss', index['planet.intertwingly.net,2006,testfeed3,1']) + + for key in index.keys(): + value = index[key] + if value.find('testfeed2')>0: index[key] = value.swapcase() + index.close() + + from planet.splice import splice + doc = splice() + + self.assertEqual(8,len(doc.getElementsByTagName('entry'))) + self.assertEqual(4,len(doc.getElementsByTagName('planet:source'))) + self.assertEqual(12,len(doc.getElementsByTagName('planet:name'))) + +try: + module = 'dbhash' +except ImportError: + logger.warn("dbhash is not available => can't test id index") + for method in dir(idIndexTest): + if method.startswith('test_'): delattr(idIndexTest,method) diff --git a/tests/test_opml.py b/tests/test_opml.py index a34a4e8..0111253 100644 --- a/tests/test_opml.py +++ b/tests/test_opml.py @@ -76,6 +76,14 @@ class OpmlTest(unittest.TestCase): text="sample feed"/>''', self.config) self.assertFalse(self.config.has_section("http://example.com/feed.xml")) + def test_WordPress_link_manager(self): + # http://www.wasab.dk/morten/blog/archives/2006/10/22/wp-venus + opml2config('''''', self.config) + self.assertEqual('sample feed', + self.config.get("http://example.com/feed.xml", 'name')) + # # xmlUrl # diff --git a/tests/test_scrub.py b/tests/test_scrub.py index dc94e05..7d9d1b0 100644 --- a/tests/test_scrub.py +++ b/tests/test_scrub.py @@ -7,7 +7,7 @@ from planet import feedparser, config feed = ''' F&ouml;o - + ignoreme F&ouml;o 2000-01-01T00:00:00Z @@ -23,7 +23,7 @@ feed = ''' configData = ''' [testfeed] -ignore_in_feed = id updated +ignore_in_feed = id updated xml:lang name_type = html title_type = html summary_type = html @@ -40,12 +40,14 @@ class ScrubTest(unittest.TestCase): self.assertTrue(data.entries[0].has_key('id')) self.assertTrue(data.entries[0].has_key('updated')) self.assertTrue(data.entries[0].has_key('updated_parsed')) + self.assertTrue(data.entries[0].summary_detail.has_key('language')) scrub('testfeed', data) self.assertFalse(data.entries[0].has_key('id')) self.assertFalse(data.entries[0].has_key('updated')) self.assertFalse(data.entries[0].has_key('updated_parsed')) + self.assertFalse(data.entries[0].summary_detail.has_key('language')) self.assertEqual('F\xc3\xb6o', data.feed.author_detail.name) self.assertEqual('F\xc3\xb6o', data.entries[0].author_detail.name) diff --git a/tests/test_spider.py b/tests/test_spider.py index aa0a6c1..1230c23 100644 --- a/tests/test_spider.py +++ b/tests/test_spider.py @@ -13,7 +13,7 @@ class SpiderTest(unittest.TestCase): def setUp(self): # silence errors planet.logger = None - planet.getLogger('CRITICAL') + planet.getLogger('CRITICAL',None) try: os.makedirs(workdir) @@ -58,6 +58,8 @@ class SpiderTest(unittest.TestCase): # verify that the file timestamps match atom:updated data = feedparser.parse(files[2]) + self.assertEqual(['application/atom+xml'], [link.type + for link in data.entries[0].source.links if link.rel=='self']) self.assertEqual('one', data.entries[0].source.planet_name) self.assertEqual(os.stat(files[2]).st_mtime, calendar.timegm(data.entries[0].updated_parsed)) @@ -82,5 +84,7 @@ class SpiderTest(unittest.TestCase): data = feedparser.parse(workdir + '/planet.intertwingly.net,2006,testfeed3,1') + self.assertEqual(['application/rss+xml'], [link.type + for link in data.entries[0].source.links if link.rel=='self']) self.assertEqual('three', data.entries[0].source.author_detail.name) diff --git a/tests/test_themes.py b/tests/test_themes.py index 4f171ed..de70c59 100644 --- a/tests/test_themes.py +++ b/tests/test_themes.py @@ -4,7 +4,7 @@ import unittest from planet import config from os.path import split -class ConfigTest(unittest.TestCase): +class ThemesTest(unittest.TestCase): def setUp(self): config.load('tests/data/config/themed.ini') @@ -17,7 +17,8 @@ class ConfigTest(unittest.TestCase): # administrivia def test_template(self): - self.assertTrue('index.html.xslt' in config.template_files()) + self.assertEqual(1, len([1 for file in config.template_files() + if file == 'index.html.xslt'])) def test_feeds(self): feeds = config.subscriptions() diff --git a/themes/asf/config.ini b/themes/asf/config.ini index cb372e7..62a9776 100644 --- a/themes/asf/config.ini +++ b/themes/asf/config.ini @@ -7,6 +7,7 @@ template_files: foafroll.xml.xslt index.html.xslt opml.xml.xslt + validate.html.xslt template_directories: ../common diff --git a/themes/asf/index.html.xslt b/themes/asf/index.html.xslt index dbd6246..b3d2063 100644 --- a/themes/asf/index.html.xslt +++ b/themes/asf/index.html.xslt @@ -56,6 +56,7 @@ (feed) + @@ -153,7 +154,9 @@ - + + + @@ -236,6 +239,9 @@ + + + diff --git a/themes/common/atom.xml.xslt b/themes/common/atom.xml.xslt index 83dad26..4e455e2 100644 --- a/themes/common/atom.xml.xslt +++ b/themes/common/atom.xml.xslt @@ -14,14 +14,18 @@ - - + + + + + no + diff --git a/themes/common/rss20.xml.tmpl b/themes/common/rss20.xml.tmpl index 81cbffb..724a104 100644 --- a/themes/common/rss20.xml.tmpl +++ b/themes/common/rss20.xml.tmpl @@ -10,7 +10,7 @@ <TMPL_VAR channel_name ESCAPE="HTML"><TMPL_IF title>: <TMPL_VAR title_plain ESCAPE="HTML"></TMPL_IF> - + @@ -23,6 +23,9 @@ + + " length="" type=""/> + diff --git a/themes/common/validate.html.xslt b/themes/common/validate.html.xslt new file mode 100644 index 0000000..efab5c6 --- /dev/null +++ b/themes/common/validate.html.xslt @@ -0,0 +1,146 @@ + + + + + + + + + <xsl:value-of select="atom:title"/> + + + + + + + + + + + + + + + + + + + + + + + + +
NameFormatNotes
+ + +
+ + + + + rss_0_90 + rss_0_91 + rss_0_91 + rss_1_0 + rss_0_90 + + rss_0_90 + rss_2_0 + rss_2_0 + + + atom_0_3 + atom_1_0 + atom_1_0 + + + + + + + + + #FCC + + + + + http://feedvalidator.org/check?url= + + + + + + + + + + + + + + http://www.validome.org/rss-atom/validate? + viewSourceCode=1&version= + + &url= + + + + + + + + + + + + + + + + + message + + + + + + + + + + + + + + + + +
+ + +
+
+
+
+ +
+ +
+
diff --git a/themes/mobile/config.ini b/themes/mobile/config.ini index 920cfa6..7a886e0 100644 --- a/themes/mobile/config.ini +++ b/themes/mobile/config.ini @@ -9,6 +9,7 @@ template_files: index.html.xslt mobile.html.xslt opml.xml.xslt + validate.html.xslt template_directories: ../asf